├── .github └── workflows │ └── publish.yml ├── .gitignore ├── docs ├── customizing.mdx ├── getting-started.mdx ├── license.mdx ├── motivation.mdx └── readme.mdx ├── examples ├── gatsby-starter-documentation-dark │ ├── .gitignore │ ├── docs │ │ ├── hello-world-2.mdx │ │ ├── hello-world-3.mdx │ │ ├── hello-world-4.mdx │ │ ├── hello-world-5.mdx │ │ ├── hello-world.mdx │ │ └── readme.mdx │ ├── gatsby-config.js │ ├── package.json │ ├── readme.md │ └── src │ │ └── gatsby-theme-documentation │ │ ├── header.mdx │ │ ├── index.js │ │ └── sidebar.mdx ├── gatsby-starter-documentation-tomato │ ├── .gitignore │ ├── docs │ │ ├── hello-world-2.mdx │ │ ├── hello-world-3.mdx │ │ ├── hello-world-4.mdx │ │ ├── hello-world-5.mdx │ │ ├── hello-world.mdx │ │ └── readme.mdx │ ├── gatsby-config.js │ ├── package.json │ ├── readme.md │ └── src │ │ └── gatsby-theme-documentation │ │ ├── header.mdx │ │ ├── sidebar.mdx │ │ └── theme.js └── gatsby-starter-documentation │ ├── .gitignore │ ├── docs │ ├── hello-world-2.mdx │ ├── hello-world-3.mdx │ ├── hello-world-4.mdx │ ├── hello-world-5.mdx │ ├── hello-world.mdx │ └── readme.mdx │ ├── gatsby-config.js │ ├── package.json │ ├── readme.md │ └── src │ └── gatsby-theme-documentation │ ├── header.mdx │ ├── sidebar.mdx │ └── theme.js ├── gatsby-config.js ├── lerna.json ├── license.md ├── now.json ├── package.json ├── packages └── gatsby-theme-documentation │ ├── gatsby-config.js │ ├── gatsby-node.js │ ├── index.js │ ├── package.json │ ├── readme.md │ └── src │ ├── components.js │ ├── components │ ├── button.js │ ├── doc.js │ ├── header.js │ ├── layout.js │ ├── menu-button.js │ ├── nav-link.js │ ├── seo.js │ └── sidenav.js │ ├── gatsby-plugin-theme-ui │ ├── components.js │ └── index.js │ ├── header.mdx │ ├── sidebar.mdx │ ├── templates │ └── doc.js │ └── theme.js ├── readme.md ├── renovate.json ├── src └── gatsby-theme-documentation │ ├── header.mdx │ ├── sidebar.mdx │ └── theme.js └── yarn.lock /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | jobs: 8 | master: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@master 12 | - uses: actions/setup-node@v1 13 | with: 14 | node-version: '10.x' 15 | - name: publish:starters 16 | uses: johno/actions-push-subdirectories@master 17 | env: 18 | API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} 19 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 20 | with: 21 | args: examples johno 22 | - name: publish:themes 23 | uses: johno/actions-yarn@master 24 | env: 25 | NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | with: 28 | args: publish:ci 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache 3 | public 4 | *.log 5 | *.swp 6 | -------------------------------------------------------------------------------- /docs/customizing.mdx: -------------------------------------------------------------------------------- 1 | # Customizing 2 | 3 | The primary way for customizing this Gatsby 4 | Theme is using 5 | [component shadowing](https://www.gatsbyjs.org/docs/themes/api-reference#component-shadowing). 6 | 7 | The sidebar, header, and theme are the main intended 8 | aspects to be customized. However, you can essentially change 9 | anything. 10 | 11 | ## Customizing the theme 12 | 13 | `gatsby-theme-documentation` uses a `theme.js` file to populate the 14 | theme values. You can shadow the file at 15 | `src/gatsby-theme-documentation/theme.js`. 16 | 17 | ```js 18 | // src/gatsby-theme-documentation/theme.js 19 | import baseTheme from 'gatsby-theme-documentation/src/theme' 20 | 21 | export default { 22 | ...baseTheme, 23 | colors: { 24 | ...baseTheme.colors, 25 | text: '#111', 26 | background: '#fff' 27 | } 28 | } 29 | ``` 30 | 31 | For a full explainer on theming you can 32 | [see the Theme UI docs](https://theme-ui.com/). 33 | 34 | ## Customizing the sidebar 35 | 36 | `gatsby-theme-documentation` uses a `sidebar.mdx` file to populate the navigation. 37 | In order to customize it you can shadow it by creating a file at 38 | `src/gatsby-theme-documentation/sidebar.mdx`. 39 | 40 | #### Example `sidebar.mdx` 41 | 42 | ```mdx 43 | - [Introduction](/introduction/) 44 | - [Getting Started](/getting-started/) 45 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 46 | ``` 47 | 48 | ## Customizing the header 49 | 50 | Similarly to sidebar customization, you can also change the header content by 51 | writing MDX. You can shadow the default header by creating a file at 52 | `src/gatsby-theme-documentation/header.mdx` 53 | 54 | #### Example `header.mdx` 55 | 56 | ```mdx 57 | # ![Docs Logo](https://contrast.now.sh/white/black?width=80&height=40&text=DOCS) 58 | 59 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 60 | - [Twitter](https://twitter.com/4lpine) 61 | ``` 62 | 63 | ## Adding component shortcodes 64 | 65 | You can add shortcodes to your docs site which can be used throughout 66 | your docs pages by extending the components passed to MDXProvider. You 67 | can do this by using component shadowing and creating the following file 68 | in the root of your project: `src/gatsby-theme-documentation/components.js`. 69 | 70 | #### Example `components.js` 71 | 72 | ```js 73 | import baseComponents from 'gatsby-theme-documentation/src/components' 74 | 75 | import MyCustomH1 from '../components/my-custom-h1' 76 | 77 | export default { 78 | ...baseComponents, 79 | h1: MyCustomH1 80 | } 81 | ``` 82 | -------------------------------------------------------------------------------- /docs/getting-started.mdx: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | With this theme you can install it as a starter for a new project, 4 | or add it to an existing Gatsby site. 5 | 6 | ## Starters 7 | 8 | The easiest way to get started with `gatsby-theme-documentation` is 9 | to use one of the provided starters. They come with a pre-built theme 10 | and starter content which you can edit and get going. 11 | 12 | Name | Command 13 | ---- | ------- 14 | [Base](https://github.com/johno/gatsby-starter-documentation) | `gatsby new johno/gatsby-starter-documentation` 15 | [Dark](https://github.com/johno/gatsby-starter-documentation-dark) | `gatsby new johno/gatsby-starter-documentation-dark` 16 | [Tomato](https://github.com/johno/gatsby-starter-documentation-tomato) | `gatsby new johno/gatsby-starter-documentation-tomato` 17 | 18 | ## Installation 19 | 20 | If you have an existing site you'd like to add the theme to, you 21 | can install the theme and then specify the `basePath`. 22 | 23 | ``` 24 | yarn add gatsby-theme-documentation 25 | ``` 26 | 27 | ### Set the `basePath` 28 | 29 | ```js 30 | // gatsby-config.js 31 | module.exports = { 32 | plugins: [ 33 | { 34 | resolve: 'gatsby-theme-documentation', 35 | options: { 36 | basePath: '/docs' 37 | } 38 | ] 39 | } 40 | ``` 41 | -------------------------------------------------------------------------------- /docs/license.mdx: -------------------------------------------------------------------------------- 1 | import License from '../license.md' 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/motivation.mdx: -------------------------------------------------------------------------------- 1 | # Motivation 2 | 3 | A lot of documentation implementations come with all the batteries 4 | included. For large, ambitious projects those can be great fits. 5 | However, for smaller projects, like `gatsby-theme-documentation` itself, 6 | it can be preferable to use something more minimal to start. 7 | 8 | With `gatsby-theme-documentation` all you have to do is write 9 | Markdown for your sidebar and header, then edit a `theme.js` 10 | file which handles all the styling. 11 | 12 | That's it. 13 | 14 | --- 15 | 16 | Down the road, if your project's needs change, you can look behind the 17 | curtains and you have all of Gatsby at your disposal. 18 | -------------------------------------------------------------------------------- /docs/readme.mdx: -------------------------------------------------------------------------------- 1 | # Gatsby Theme _Documentation_ 2 | 3 | A minimalist [Gatsby Theme](https://gatsbyjs.org/docs/themes) 4 | for documentation sites built with [MDX](https://mdxjs.com) 5 | and [Theme UI](https://theme-ui.com). 6 | 7 | Get up and running in seconds with a beautiful docs site so 8 | you can do what's more important: **write docs**. 9 | 10 | ## Features 11 | 12 | - 📑 MDX files for JSX in Markdown 13 | - 🎨 Theme UI-based theming 14 | - 💻 Syntax highlighting 15 | - 📰 MDX-based sidebar navigation 16 | - 🛣 Automatic readme routing 17 | - 🧩 Shortcode support with React components 18 | - 🍔 Collapsible menu 19 | - 📱 Mobile friendly 20 | - 🎣 Custom docs schema 21 | 22 | [Get started](/getting-started) 23 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache 3 | public 4 | *.log 5 | *.swp 6 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/docs/hello-world-2.mdx: -------------------------------------------------------------------------------- 1 | # Hastam candida et tamen 2 | 3 | ## Auro neque 4 | 5 | [Lorem markdownum](http://matrumque-ab.io/marequae.aspx): Telamon patefecit 6 | [linguae](http://www.hoc-coniuge.io/quae), gravem merces: sensi leones ille 7 | matrem palude candida per cineres pulchra: Peliden. Bis sex vina sacros 8 | stimuloque populos me permittat membra. Regna et deseruitque monstro dederat non 9 | quoque inpius, tua nomine. Frustraque perque olivae **revocantis Iovem 10 | Chironis**? Sua Proreus Mercurium *gratia conplexa laborum* gentes et massa 11 | lacrimis non [qui flaventi](http://bene.net/). 12 | 13 | zipRecursive += ldap_iteration; 14 | rw_mouse.esports_lock_page += 100; 15 | if (root_daemon(55003, emulation_device_optical.minisite_leaderboard(drag, 16 | thin), video) + motion_pram_namespace * 1) { 17 | dualMonitor += 1; 18 | popMirrorData.rwPpga += 1; 19 | } 20 | if (zif(passwordRgb - 3, mcaTraceroute, tebibyte_framework) - definition) { 21 | disk += portalLpi + -4 - sync_docking; 22 | paste(rwFileRup + numBankSystem, ad, java_operating_system); 23 | realLte(program); 24 | } 25 | basicPrimary.primary_led -= bitHeader(pci); 26 | 27 | Verbis nam subito licet ve *petunt medulla petit* quoque Iove. Saevis [cum 28 | veneno](http://www.et.org/tundunt-tamen) viribus cratera mei ales mirantur et 29 | exiguam, per tristia ortos. Iter dederant super et *incipere inane limosoque* 30 | mersa **Polydegmona**, et omnis. 31 | 32 | ## Sub precor in ferre loquuntur quoque Alcyone 33 | 34 | Caput **laniato**, tempore, ludere Alcathoen orbam rubentia 35 | [bella](http://meminisse.com/) dracones! Intermissa numero loca spes, inductas a 36 | ferre *saecula accepere* aurum ad meorum supremis. 37 | [Tanti](http://comae-lyramque.com/misit.html) piasti, viderit nocet tot ubi 38 | respicit est reus: audiat genus imago lacte [patrem gravi 39 | colubrae](http://quid.com/tibi-monstri) colentibus: casus. 40 | 41 | 1. Bibes in Menoeten appellare late aliorum ultusque 42 | 2. Hostem erat vinci tardarunt manes 43 | 3. Manu in et dives 44 | 4. Indis datis atrae tamen sumptis quatere 45 | 46 | Esset frondibus eras lacessit condas; mihi carpe in vaticinor adeo cunctae. Vix 47 | temeraria matrem, hanc de, enim minor; vias multi caput. Huic animi? Est nec 48 | adulterium mora castumque caelestia est alma, memorant **spatium**: revocare 49 | quoque: tutus. 50 | 51 | Nec sanguine fata metu via maenades enim, dici et peragentem Marte, mollis et. 52 | Data **ferventibus scires in** dona, pro pondera pugnat. Spectabilis beati 53 | animos conbibitur, posses paret, deae nec! Et caeloque utque ferox formae 54 | auferat Helicona undas saepe inde onerata surgunt sparso, sua perdite dumque 55 | sparsaque te. Sororum Athenae confundas patres, arduus tu victa recisum; saepe 56 | pacem, velo Iphis; et, tristis? 57 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/docs/hello-world-3.mdx: -------------------------------------------------------------------------------- 1 | # Natamque omnia non bracchia 2 | 3 | ## Et placui nomina laeva 4 | 5 | Lorem markdownum pereat. Suae leto omnia ponti languentique Phinea sentiat 6 | urbem: et mutari latent. 7 | 8 | > Manu Eurypylusque fratres reliquit et murmure occupat libido adversum iam quem 9 | > incognita inmiti. Aut mutua isto quae nomen signa forma, est Clymene exhibet, 10 | > nec [in](http://pariterceler.org/et.html) stellamque corymbis vestros et 11 | > Pelates. Ortus praetereunt linigera rigidis, ab ait atque, se licet. 12 | > [Trepidi](http://www.nuncscythiae.net/dissaepserat) et vive; non cumba altera 13 | > sulphureis editus, in? Semel si ad poenam ignari. 14 | 15 | Ita sonus color vivacemque. Lacrimis aequora saepe; dilata et oblectamina 16 | lebetes omnipotens dextera cursu et munere. 17 | 18 | ## Cum Astreus seque responsaque enim Iuno effugit 19 | 20 | Me tabula dominum largoque furit ingreditur disparibus in mittere talia formosa, 21 | transmittere esse. Tigris vox tollit Lycia stantem gratia, consequar, pectus 22 | tinctis Troezen dilexisse quos excessisse fuga mortis te 23 | [erant](http://forentsum.org/ut-utinamque). [Fide ducens 24 | et](http://leto-temperat.com/dimovit) inquit, vobis Nocte vere; tam nefandos, 25 | venturi vix nervi a terris tam forti. 26 | 27 | impressionServicesHit(click_thread(nosqlFirewireSms)); 28 | if (netmask_metadata + readClient) { 29 | coreTeraflopsBalance.default_string = encoding(domainIcmpWheel, 30 | primary); 31 | cmos = default_boot_ssh * bitrateLinkNui; 32 | winsock *= t_grep_disk; 33 | } 34 | driveExabyte(passwordRecord / servletBitrateSolid, bit); 35 | clusterCodecGigabyte += direct_myspace.barVlogStandalone(odbcTween(50 + 36 | browser_design), publishing.ntfs(isdn_inkjet_offline, 37 | basic_oasis_systray, contextual_ping_mamp) + -4); 38 | if (ipad) { 39 | perlZif = executable; 40 | errorPermalinkTable(tooltip_hypertext_ip(box), 4); 41 | gibibyte -= aixConsole.system( 42 | modifierMetadata.barebonesFrozenOpacity.text_file( 43 | cgi_host_laptop, wanOsiParameter), 2 + open); 44 | } else { 45 | rt += floating_hdtv_https + ascii - ping; 46 | webmaster.error_host(flash(scalable, simplex_acl, 47 | control_superscalar_pram), 2); 48 | printerTarget = 1 * driveWindow + iterationLedSoftware; 49 | } 50 | 51 | ## Quid pietas 52 | 53 | Raucum membris quoque, ad aras preces venienti dumque fugabitur cuique at. Urbe 54 | pes Pleias comas superos furor, hi hanc tepido nos denique, iura hinc vobis, et. 55 | 56 | gifGopher(dma_cursor_platform + 77 - recursiveLock, input); 57 | var volume = pdaTweak; 58 | cell += t(1 * rt, ospfMotionWindows(port), 376173 + 1); 59 | torrent += 5; 60 | dlc_ram_raster *= ipodHertzDv.copyrightPrinter(file_dial, trimEditor - 61 | pinterest, cableRead) + barebones_pci; 62 | 63 | Corpore dicentem est, in lingua hos Caicus pugnaeque, volunt mors! Et **deos**, 64 | spatium, culpa novi Myrrha opibusque alterius capi ingemuit ponere tantis! 65 | 66 | Telas non fuerat loca **exsangues** Antiphataeque foventque illud, dum! Huic 67 | genus dubius dempta ossa poena nec nocent **latura** creatus iussus ante 68 | *quippe*, si sua dominos Phoce manusque deseruere. Summa ictu habet fide si 69 | Scylla ora pulvereamque certe Abantiades sacerdotis. 70 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/docs/hello-world-4.mdx: -------------------------------------------------------------------------------- 1 | # Missa proximus 2 | 3 | ## Nec mirabile cognoscere hanc stabantque contulerat quis 4 | 5 | [Lorem markdownum ferioque](http://exclamat.org/aversuspatri.aspx) propago 6 | intendit ait detraxit loca igni nec oculos. Quaesitique vacuis meum, 7 | [mihi](http://frangitcognoscenti.org/saepe) et facti et solique *esse*. Manus 8 | caede, frustra velocia Irin lugubre idque spectare, in versarunt **videor** 9 | ponto. Saxa progenies arbore rupit sprevit. 10 | 11 | Victores parat comminus tenebris pressoque sedem arces, suorum montibus illam! 12 | Rogabo praemia acuti fracta, sonant est renarro, fronde nescio tradidit pelle, 13 | et tuum belli **amaris natale**. Crinem tempora, quid asper fera mille et socium 14 | tamen, oppositas cinguntur. Et perque si, loci nunc magnorum, quam caput natas. 15 | 16 | ## Haerent mutarent modus incurvata flumine magnique in 17 | 18 | Lunae in urbe causa et o numen ferro fulget. Vobis legit modo putares, tam certe 19 | mare dextra mentem rimas nomine cum caeso; alto aliqua me. Turpe iter et pulmone 20 | euntem [ipso](http://www.tritonia-dant.io/) tamen aliisque Argolicae contraria 21 | est et chlamydis victa sperata ultroque faciebant precari confessaque nostra. 22 | Nec viros ait mortale pectore, plebe vimine in mea nescio alarum sic potuere 23 | patet ad **madefacta** dicunt, Mater. Nisi tegit vestri Coeo senioribus muneris, 24 | premunt in ulla. 25 | 26 | ## Lacertis quantumque saevi 27 | 28 | Ignifero tecti **ovi solidorum gravis**. Et eicit corpora. De mensis arbore me 29 | Glaucus Minos propioris vasto, cum est omnia tu rubet, non silvisque ille. 30 | 31 | ## A patria moenia 32 | 33 | Intravit violata, foedusque descendi committere contra Calydonia fretum lacus, 34 | [ab](http://monte.org/nati.aspx) genitoris valet! Primoque est: horrendae 35 | sedibus et **silvas dolet**, merum parum vertere [et](http://in.com/), alto. 36 | Frustra ponit destringere casu neque quicquid praenuntia quas grata vetorque 37 | femineae o tegitur, signat Maera; nullosque undas victis. Disiecta in *foret* 38 | concilio sedibus viseret. 39 | 40 | if (protectorDeviceDsl) { 41 | kvmHeader += reader; 42 | property *= cpcDimm; 43 | } else { 44 | client = pcDashboardEncoding.cgi(system, panel_threading( 45 | runtimeAddressPpp, rawCcd, d), sms); 46 | basicPublishingBezel = templateAddress; 47 | } 48 | rup += bios(load_station_unmount); 49 | if (yobibyte > pretest_internet_prom) { 50 | menuUrl.pc_tiger_resolution.online_open(5); 51 | } else { 52 | nvram.socialFileAdc += mipsAlpha - overclocking; 53 | tag_gateway_seo = java_virtual; 54 | } 55 | if (logic + pppoeDrive - keyboard_dcim == 56 | honeypot_protector.proxySli.telecommunications(sata_qwerty, 57 | mca_in)) { 58 | dslamBeta.siteRawVideo += system / lifoAdsl + transistor_express_card + 59 | bit; 60 | handleWhiteBinary = scroll_leopard_cms; 61 | smishingLockPublishing.permalink_motherboard(pageDrag + internic); 62 | } 63 | 64 | ## Minus temerasse vetui 65 | 66 | Foedera media liquores aegros. Inque frontem, urbes vel admovit hostibus et 67 | gladio; sine Haec quae pallam. Torruit licet at collegit iuste demptos stupet 68 | odoribus custos tulit, tum venit ex petisti pharetram et numen narratur placuit. 69 | 70 | - Fores suscipimus 71 | - Ne quod ora habebas secus tuentur Veneris 72 | - Mille dentes 73 | - Et urbes velamina se angues nitidum Pelea 74 | 75 | Canenti lux exsultat marmore Bacche solitum tuta volatilis in terris, non audit 76 | **fluctibus** eris. Huc temperie, munere, defensus nomina clamorque tamen: 77 | tangit cursus meo; longa voce addere humum potest. Orbe sint est alto annos 78 | tyranni finem. Scitaris condi uvis ibit foret cupidine fertque, et, et ferat 79 | verti ipsam fuit effundit, in. 80 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/docs/hello-world-5.mdx: -------------------------------------------------------------------------------- 1 | # Ita urbesque 2 | 3 | ## Femina virtus misso urbes grates 4 | 5 | Lorem markdownum percussis Redditus; super mihi vivit mentem, novi virgo ut, 6 | *deum patrios* munus? Inroravit fecundaque comis continuam adrides cedit 7 | delicuit Pallantidos protinus egressus quid ea addunt et Lucinam Troiana illi 8 | absistit. Audes igitur [Astypaleia](http://pulsis.net/propecredant.html) misit 9 | ubi locum esse Lernae omnes aegide cervix. Petentem movit suspiria, Herculeamque 10 | illa dixerat viri, et videri vocanti Cyane; spatiis ratae sit humum et per. Est 11 | pennis inmota; quo est Sole super carbasa recessu qui tandem aere. 12 | 13 | > Exstitit cubitoque dimittite. Illi nata origine, sit illum vestra, serpentum 14 | > et multa tertia. Penetrat alios inplumes, 15 | > [an](http://capiti.org/qualemungues), ubi frequentes mille, si. Amphione certa 16 | > solet ab virginitate quae Achaemenides gramina te milia arcuit stagnare ex. 17 | 18 | ## Undis strigis rustice 19 | 20 | Sedare fidas quattuor exsilit Sithoniae Oceanumque sit perenni veniebat mutato 21 | facies cubitoque adiutus Phoebe **cum**? Manu locorum tellus suprema namque: 22 | obscura Eurypylusque tamen pectoribus aras genae; esse. [Ululatibus grandior 23 | mento](http://tuaquod.org/agricolis-versae.php), si se Peneos custodia scripta 24 | tamen populator. Caede rigidique cunasque, ursa **quid quinque**! 25 | 26 | > Quoscumque arcus ac addidit datis Tirynthia sed alter ille blandis, Cecropios 27 | > umbras illa narremur nisi contentusque caput. Tenebas velle silet, 28 | > [in](http://www.genitum.io/coeamusaurea.html) caesa sequantur multis, luce 29 | > bisque, per ille animalia, et. 30 | 31 | ## Paternas parte 32 | 33 | Hunc omnia si medius, quid, exit balteus fide pallor et. Dixerat 34 | [festum](http://www.amantis.com/tigrismodo) este regna! Est Troiae et robora 35 | debebunt, debueram **aether** quam metaque. Creatis cupiam dominumque circumdata 36 | sacra manum, et fecit a pestiferos, poscenti nihil. Dant grates experientia meis 37 | medere illam prius robore ituros auspicio litore sagitta. 38 | 39 | 1. Et si nihil lina operique 40 | 2. Nemora artes 41 | 3. Procubuit negate attoniti 42 | 4. Parentes mora iam ne tuae inmitem 43 | 5. O auras Alcidae 44 | 45 | ## Clymene pinna 46 | 47 | E prolis pulchros, congestaque tectus circumfunditur **sed**: maligne respicit, 48 | [dum](http://vertice-causa.com/te). Dedit inter tibi saxis: est altis nostra, 49 | volucresque nec piscem pinguia. 50 | 51 | 1. Quantum est Phoebi 52 | 2. Inquit ingenio fidesque concursibus venerat Titan vulnera 53 | 3. Duxerat medentes conataeque subitae acuto mitissimus mihi 54 | 4. Praestate sacrifica 55 | 56 | Nelei hac sine patiar, vinclisque dedit primordia ut crimine fecundaque habebat 57 | geminum. Ac de vehi Gangesque num arae sapiente quem frenabas. 58 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/docs/hello-world.mdx: -------------------------------------------------------------------------------- 1 | # Fecunda illa 2 | 3 | ## Fecit columbas posse viri aevo apri non 4 | 5 | Lorem markdownum sorore extulit, non suo putant tritumque amplexa silvis: in, 6 | lascivaque femineam ara etiam! Oppida clipeus formidine, germanae in filia 7 | etiamnunc demisso visa misce, praedaeque protinus communis paverunt dedit, suo. 8 | Sertaque Hyperborea eatque, sed valles novercam tellure exhortantur coegi. 9 | 10 | 1. Cunctosque plusque 11 | 2. Cum ego vacuas fata nolet At dedit 12 | 3. Nec legerat ostendisse ponat sulcis vincirem cinctaque 13 | 14 | Letali media quod color furtim generosam, huic fudi consule fila vidit videri 15 | animos pomaria iuncosaque dum sic visa regina. Innuba nubila *sole tum* rex est 16 | occiduae diversi: tot illius. 17 | 18 | ## Manus tenus cum 19 | 20 | In faciat qua doctior veluti, dictae iam! Quae salici, illic? Diurnos quod: ore 21 | attonitusque Colchis iam parte adamanta: ignes ab, subiit Maenalon: est. 22 | 23 | Fecerat sub ope posse umbras que modico principium Abantiades amor; solvo 24 | margine; nec pericla toto inde **pontum caelo**. Ardescunt crescentes 25 | pulcherrima cavernis patriam *ferrum Aiax vidit* Aegeus pars partem; [laesum 26 | me](http://aut.io/ego-iungitur). Aequoris et genitor aurea; [quod 27 | fugam](http://www.terris-pectore.net/) cadit ferat iuvenis paverunt, ad eburnea 28 | en sed! 29 | 30 | if (-3 == ide * host_rich) { 31 | boot_mca_thin -= affiliateVector; 32 | vram = gnuPcmcia( 33 | algorithm_internic_systray.key_myspace_boot.prebinding_base(5)); 34 | } else { 35 | udp_opengl = soap_ansi; 36 | matrix_cold.sidebarWeb = metal_scareware; 37 | } 38 | var mount_goodput = media_fiber_zettabyte( 39 | bar_terahertz_commercial.filenameModeCrm(time.node(3, 40 | grepRecursion)), lifo_utf(cache_node, name, diskTypefaceRgb(1)), 41 | mainframePowerpoint - repeater_template_framework + 42 | uncLcd.syntaxPram(goldenSecondaryPublishing)); 43 | install += cmos_duplex; 44 | if (bluetooth(tcp) > password_uddi) { 45 | lte /= and_ssid(log_cdma); 46 | bugMeta(noc_bar, adf, 2); 47 | fileSoftware(ecc_bmp_captcha, bootKoffice, navigation_lag); 48 | } 49 | if (postscript_time_memory * system + spoofingTrimMiddleware - netiquette( 50 | default_ipv, 5)) { 51 | throughput_skin.static_home_mirror(rosetta_and_barebones.ios_non( 52 | copySpooling)); 53 | moodle_kilohertz_jfs -= end_cc_brouter + resources(3, 92); 54 | shift_cms_bitrate.horizontal_rdram = and(standby_address_ipx, 5, 55 | baseband); 56 | } 57 | 58 | Premit lumina sollertior et ipse amborum omnia, ubi se est cur, ictus. Quoniam 59 | Phrygiae, qua aura procerum quoque et habet idem pes non, regna. 60 | 61 | Erat curvi et inferna aliud *cum Procne tempusque* leones ad. Impediunt perque 62 | gravem. 63 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/docs/readme.mdx: -------------------------------------------------------------------------------- 1 | # Gatsby Documentation Theme 2 | 3 | `gatsby-theme-documentation` is a minimalist Gatsby Theme for 4 | docs sites built with [MDX](https://mdxjs.com) and 5 | [Theme UI](https://theme-ui.com). 6 | 7 | ## Installation 8 | 9 | ``` 10 | yarn add gatsby-theme-documentation 11 | ``` 12 | 13 | ## Usage 14 | 15 | ```js 16 | // gatsby-config.js 17 | module.exports = { 18 | plugins: [ 19 | 'gatsby-theme-documentation' 20 | ] 21 | } 22 | ``` 23 | 24 | [See the official docs](https://github.com/johno/gatsby-theme-documentation) 25 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | title: 'Gatsby Documentation Starter', 4 | description: 'This is a starter for gatsby-theme-documentation' 5 | }, 6 | plugins: [ 7 | 'gatsby-theme-documentation' 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "gatsby-starter-documentation-dark", 4 | "version": "0.0.27", 5 | "scripts": { 6 | "start": "gatsby develop", 7 | "build": "gatsby build", 8 | "now-build": "yarn build" 9 | }, 10 | "license": "MIT", 11 | "dependencies": { 12 | "gatsby": "^2.15.24", 13 | "gatsby-theme-documentation": "^0.0.27", 14 | "react": "^16.9.0", 15 | "react-dom": "^16.9.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/readme.md: -------------------------------------------------------------------------------- 1 | # gatsby-starter-documentation-dark 2 | 3 | A minimalist dark-mode starter for 4 | [gatsby-theme-documentation](https://github.com/johno/gatsby-theme-documentation). 5 | 6 | ![image](https://user-images.githubusercontent.com/1424573/61088582-eec95e00-a3f5-11e9-8931-b310fcc8b92c.png) 7 | 8 | ## Installation 9 | 10 | ```sh 11 | gatsby new my-docs-site johno/gatsby-starter-documentation-dark 12 | cd my-docs-site 13 | ``` 14 | 15 | ## Usage 16 | 17 | ```sh 18 | yarn start 19 | ``` 20 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/src/gatsby-theme-documentation/header.mdx: -------------------------------------------------------------------------------- 1 | # ![Docs Logo](https://contrast.now.sh/black/white?width=80&height=40&text=DOCS) 2 | 3 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 4 | - [Twitter](https://twitter.com/4lpine) 5 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/src/gatsby-theme-documentation/index.js: -------------------------------------------------------------------------------- 1 | const heading = { 2 | fontFamily: 'heading', 3 | fontWeight: 'heading', 4 | lineHeight: 'heading', 5 | } 6 | 7 | export default { 8 | useCustomProperties: true, 9 | initialColorMode: 'light', 10 | colors: { 11 | text: '#fff', 12 | background: '#060606', 13 | primary: '#3cf', 14 | secondary: '#e0f', 15 | muted: '#191919', 16 | highlight: '#ffffcc', 17 | gray: '#999', 18 | purple: '#c0f', 19 | }, 20 | fonts: { 21 | body: 'system-ui, sans-serif', 22 | heading: 'inherit', 23 | monospace: 'Menlo, monospace', 24 | }, 25 | fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72], 26 | fontWeights: { 27 | body: '400', 28 | heading: '700', 29 | }, 30 | lineHeights: { 31 | body: 1.5, 32 | heading: 1.25, 33 | }, 34 | textStyles: { 35 | heading, 36 | display: { 37 | variant: 'textStyles.heading', 38 | fontSize: [5, 6, 7], 39 | mt: 3, 40 | }, 41 | }, 42 | styles: { 43 | Container: { 44 | p: 3, 45 | maxWidth: 1024, 46 | }, 47 | root: { 48 | fontFamily: 'body', 49 | lineHeight: 'body', 50 | fontWeight: 'body', 51 | }, 52 | h1: { 53 | variant: 'textStyles.display', 54 | }, 55 | h2: { 56 | variant: 'textStyles.heading', 57 | fontSize: 5, 58 | }, 59 | h3: { 60 | variant: 'textStyles.heading', 61 | fontSize: 4, 62 | }, 63 | h4: { 64 | variant: 'textStyles.heading', 65 | fontSize: 3, 66 | }, 67 | h5: { 68 | variant: 'textStyles.heading', 69 | fontSize: 2, 70 | }, 71 | h6: { 72 | variant: 'textStyles.heading', 73 | fontSize: 1, 74 | }, 75 | a: { 76 | color: 'primary', 77 | '&:hover': { 78 | color: 'secondary', 79 | }, 80 | }, 81 | pre: { 82 | variant: 'prism', 83 | fontFamily: 'monospace', 84 | fontSize: 1, 85 | p: 3, 86 | color: 'text', 87 | bg: 'muted', 88 | overflow: 'auto', 89 | code: { 90 | color: 'inherit', 91 | }, 92 | }, 93 | code: { 94 | fontFamily: 'monospace', 95 | color: 'secondary', 96 | fontSize: 1, 97 | }, 98 | inlineCode: { 99 | fontFamily: 'monospace', 100 | color: 'secondary', 101 | bg: 'muted', 102 | }, 103 | table: { 104 | width: '100%', 105 | my: 4, 106 | borderCollapse: 'separate', 107 | borderSpacing: 0, 108 | [['th', 'td']]: { 109 | textAlign: 'left', 110 | py: '4px', 111 | pr: '4px', 112 | pl: 0, 113 | borderColor: 'muted', 114 | borderBottomStyle: 'solid', 115 | }, 116 | }, 117 | th: { 118 | verticalAlign: 'bottom', 119 | borderBottomWidth: '2px', 120 | }, 121 | td: { 122 | verticalAlign: 'top', 123 | borderBottomWidth: '1px', 124 | }, 125 | hr: { 126 | border: 0, 127 | borderBottom: '1px solid', 128 | borderColor: 'muted', 129 | }, 130 | }, 131 | prism: { 132 | [[ 133 | '.comment', 134 | '.prolog', 135 | '.doctype', 136 | '.cdata', 137 | '.punctuation', 138 | '.operator', 139 | '.entity', 140 | '.url', 141 | ]]: { 142 | color: 'gray', 143 | }, 144 | '.comment': { 145 | fontStyle: 'italic', 146 | }, 147 | [[ 148 | '.property', 149 | '.tag', 150 | '.boolean', 151 | '.number', 152 | '.constant', 153 | '.symbol', 154 | '.deleted', 155 | '.function', 156 | '.class-name', 157 | '.regex', 158 | '.important', 159 | '.variable', 160 | ]]: { 161 | color: 'purple', 162 | }, 163 | [['.atrule', '.attr-value', '.keyword']]: { 164 | color: 'primary', 165 | }, 166 | [[ 167 | '.selector', 168 | '.attr-name', 169 | '.string', 170 | '.char', 171 | '.builtin', 172 | '.inserted', 173 | ]]: { 174 | color: 'secondary', 175 | }, 176 | }, 177 | } 178 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-dark/src/gatsby-theme-documentation/sidebar.mdx: -------------------------------------------------------------------------------- 1 | - [Introduction](/) 2 | - [Hello world](/hello-world) 3 | - [Again, Hello world](/hello-world-2) 4 | - [Another one](/hello-world-3) 5 | - [Ohai there](/hello-world-4) 6 | - [Last doc](/hello-world-5) 7 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache 3 | public 4 | *.log 5 | *.swp 6 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/docs/hello-world-2.mdx: -------------------------------------------------------------------------------- 1 | # Hastam candida et tamen 2 | 3 | ## Auro neque 4 | 5 | [Lorem markdownum](http://matrumque-ab.io/marequae.aspx): Telamon patefecit 6 | [linguae](http://www.hoc-coniuge.io/quae), gravem merces: sensi leones ille 7 | matrem palude candida per cineres pulchra: Peliden. Bis sex vina sacros 8 | stimuloque populos me permittat membra. Regna et deseruitque monstro dederat non 9 | quoque inpius, tua nomine. Frustraque perque olivae **revocantis Iovem 10 | Chironis**? Sua Proreus Mercurium *gratia conplexa laborum* gentes et massa 11 | lacrimis non [qui flaventi](http://bene.net/). 12 | 13 | zipRecursive += ldap_iteration; 14 | rw_mouse.esports_lock_page += 100; 15 | if (root_daemon(55003, emulation_device_optical.minisite_leaderboard(drag, 16 | thin), video) + motion_pram_namespace * 1) { 17 | dualMonitor += 1; 18 | popMirrorData.rwPpga += 1; 19 | } 20 | if (zif(passwordRgb - 3, mcaTraceroute, tebibyte_framework) - definition) { 21 | disk += portalLpi + -4 - sync_docking; 22 | paste(rwFileRup + numBankSystem, ad, java_operating_system); 23 | realLte(program); 24 | } 25 | basicPrimary.primary_led -= bitHeader(pci); 26 | 27 | Verbis nam subito licet ve *petunt medulla petit* quoque Iove. Saevis [cum 28 | veneno](http://www.et.org/tundunt-tamen) viribus cratera mei ales mirantur et 29 | exiguam, per tristia ortos. Iter dederant super et *incipere inane limosoque* 30 | mersa **Polydegmona**, et omnis. 31 | 32 | ## Sub precor in ferre loquuntur quoque Alcyone 33 | 34 | Caput **laniato**, tempore, ludere Alcathoen orbam rubentia 35 | [bella](http://meminisse.com/) dracones! Intermissa numero loca spes, inductas a 36 | ferre *saecula accepere* aurum ad meorum supremis. 37 | [Tanti](http://comae-lyramque.com/misit.html) piasti, viderit nocet tot ubi 38 | respicit est reus: audiat genus imago lacte [patrem gravi 39 | colubrae](http://quid.com/tibi-monstri) colentibus: casus. 40 | 41 | 1. Bibes in Menoeten appellare late aliorum ultusque 42 | 2. Hostem erat vinci tardarunt manes 43 | 3. Manu in et dives 44 | 4. Indis datis atrae tamen sumptis quatere 45 | 46 | Esset frondibus eras lacessit condas; mihi carpe in vaticinor adeo cunctae. Vix 47 | temeraria matrem, hanc de, enim minor; vias multi caput. Huic animi? Est nec 48 | adulterium mora castumque caelestia est alma, memorant **spatium**: revocare 49 | quoque: tutus. 50 | 51 | Nec sanguine fata metu via maenades enim, dici et peragentem Marte, mollis et. 52 | Data **ferventibus scires in** dona, pro pondera pugnat. Spectabilis beati 53 | animos conbibitur, posses paret, deae nec! Et caeloque utque ferox formae 54 | auferat Helicona undas saepe inde onerata surgunt sparso, sua perdite dumque 55 | sparsaque te. Sororum Athenae confundas patres, arduus tu victa recisum; saepe 56 | pacem, velo Iphis; et, tristis? 57 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/docs/hello-world-3.mdx: -------------------------------------------------------------------------------- 1 | # Natamque omnia non bracchia 2 | 3 | ## Et placui nomina laeva 4 | 5 | Lorem markdownum pereat. Suae leto omnia ponti languentique Phinea sentiat 6 | urbem: et mutari latent. 7 | 8 | > Manu Eurypylusque fratres reliquit et murmure occupat libido adversum iam quem 9 | > incognita inmiti. Aut mutua isto quae nomen signa forma, est Clymene exhibet, 10 | > nec [in](http://pariterceler.org/et.html) stellamque corymbis vestros et 11 | > Pelates. Ortus praetereunt linigera rigidis, ab ait atque, se licet. 12 | > [Trepidi](http://www.nuncscythiae.net/dissaepserat) et vive; non cumba altera 13 | > sulphureis editus, in? Semel si ad poenam ignari. 14 | 15 | Ita sonus color vivacemque. Lacrimis aequora saepe; dilata et oblectamina 16 | lebetes omnipotens dextera cursu et munere. 17 | 18 | ## Cum Astreus seque responsaque enim Iuno effugit 19 | 20 | Me tabula dominum largoque furit ingreditur disparibus in mittere talia formosa, 21 | transmittere esse. Tigris vox tollit Lycia stantem gratia, consequar, pectus 22 | tinctis Troezen dilexisse quos excessisse fuga mortis te 23 | [erant](http://forentsum.org/ut-utinamque). [Fide ducens 24 | et](http://leto-temperat.com/dimovit) inquit, vobis Nocte vere; tam nefandos, 25 | venturi vix nervi a terris tam forti. 26 | 27 | impressionServicesHit(click_thread(nosqlFirewireSms)); 28 | if (netmask_metadata + readClient) { 29 | coreTeraflopsBalance.default_string = encoding(domainIcmpWheel, 30 | primary); 31 | cmos = default_boot_ssh * bitrateLinkNui; 32 | winsock *= t_grep_disk; 33 | } 34 | driveExabyte(passwordRecord / servletBitrateSolid, bit); 35 | clusterCodecGigabyte += direct_myspace.barVlogStandalone(odbcTween(50 + 36 | browser_design), publishing.ntfs(isdn_inkjet_offline, 37 | basic_oasis_systray, contextual_ping_mamp) + -4); 38 | if (ipad) { 39 | perlZif = executable; 40 | errorPermalinkTable(tooltip_hypertext_ip(box), 4); 41 | gibibyte -= aixConsole.system( 42 | modifierMetadata.barebonesFrozenOpacity.text_file( 43 | cgi_host_laptop, wanOsiParameter), 2 + open); 44 | } else { 45 | rt += floating_hdtv_https + ascii - ping; 46 | webmaster.error_host(flash(scalable, simplex_acl, 47 | control_superscalar_pram), 2); 48 | printerTarget = 1 * driveWindow + iterationLedSoftware; 49 | } 50 | 51 | ## Quid pietas 52 | 53 | Raucum membris quoque, ad aras preces venienti dumque fugabitur cuique at. Urbe 54 | pes Pleias comas superos furor, hi hanc tepido nos denique, iura hinc vobis, et. 55 | 56 | gifGopher(dma_cursor_platform + 77 - recursiveLock, input); 57 | var volume = pdaTweak; 58 | cell += t(1 * rt, ospfMotionWindows(port), 376173 + 1); 59 | torrent += 5; 60 | dlc_ram_raster *= ipodHertzDv.copyrightPrinter(file_dial, trimEditor - 61 | pinterest, cableRead) + barebones_pci; 62 | 63 | Corpore dicentem est, in lingua hos Caicus pugnaeque, volunt mors! Et **deos**, 64 | spatium, culpa novi Myrrha opibusque alterius capi ingemuit ponere tantis! 65 | 66 | Telas non fuerat loca **exsangues** Antiphataeque foventque illud, dum! Huic 67 | genus dubius dempta ossa poena nec nocent **latura** creatus iussus ante 68 | *quippe*, si sua dominos Phoce manusque deseruere. Summa ictu habet fide si 69 | Scylla ora pulvereamque certe Abantiades sacerdotis. 70 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/docs/hello-world-4.mdx: -------------------------------------------------------------------------------- 1 | # Missa proximus 2 | 3 | ## Nec mirabile cognoscere hanc stabantque contulerat quis 4 | 5 | [Lorem markdownum ferioque](http://exclamat.org/aversuspatri.aspx) propago 6 | intendit ait detraxit loca igni nec oculos. Quaesitique vacuis meum, 7 | [mihi](http://frangitcognoscenti.org/saepe) et facti et solique *esse*. Manus 8 | caede, frustra velocia Irin lugubre idque spectare, in versarunt **videor** 9 | ponto. Saxa progenies arbore rupit sprevit. 10 | 11 | Victores parat comminus tenebris pressoque sedem arces, suorum montibus illam! 12 | Rogabo praemia acuti fracta, sonant est renarro, fronde nescio tradidit pelle, 13 | et tuum belli **amaris natale**. Crinem tempora, quid asper fera mille et socium 14 | tamen, oppositas cinguntur. Et perque si, loci nunc magnorum, quam caput natas. 15 | 16 | ## Haerent mutarent modus incurvata flumine magnique in 17 | 18 | Lunae in urbe causa et o numen ferro fulget. Vobis legit modo putares, tam certe 19 | mare dextra mentem rimas nomine cum caeso; alto aliqua me. Turpe iter et pulmone 20 | euntem [ipso](http://www.tritonia-dant.io/) tamen aliisque Argolicae contraria 21 | est et chlamydis victa sperata ultroque faciebant precari confessaque nostra. 22 | Nec viros ait mortale pectore, plebe vimine in mea nescio alarum sic potuere 23 | patet ad **madefacta** dicunt, Mater. Nisi tegit vestri Coeo senioribus muneris, 24 | premunt in ulla. 25 | 26 | ## Lacertis quantumque saevi 27 | 28 | Ignifero tecti **ovi solidorum gravis**. Et eicit corpora. De mensis arbore me 29 | Glaucus Minos propioris vasto, cum est omnia tu rubet, non silvisque ille. 30 | 31 | ## A patria moenia 32 | 33 | Intravit violata, foedusque descendi committere contra Calydonia fretum lacus, 34 | [ab](http://monte.org/nati.aspx) genitoris valet! Primoque est: horrendae 35 | sedibus et **silvas dolet**, merum parum vertere [et](http://in.com/), alto. 36 | Frustra ponit destringere casu neque quicquid praenuntia quas grata vetorque 37 | femineae o tegitur, signat Maera; nullosque undas victis. Disiecta in *foret* 38 | concilio sedibus viseret. 39 | 40 | if (protectorDeviceDsl) { 41 | kvmHeader += reader; 42 | property *= cpcDimm; 43 | } else { 44 | client = pcDashboardEncoding.cgi(system, panel_threading( 45 | runtimeAddressPpp, rawCcd, d), sms); 46 | basicPublishingBezel = templateAddress; 47 | } 48 | rup += bios(load_station_unmount); 49 | if (yobibyte > pretest_internet_prom) { 50 | menuUrl.pc_tiger_resolution.online_open(5); 51 | } else { 52 | nvram.socialFileAdc += mipsAlpha - overclocking; 53 | tag_gateway_seo = java_virtual; 54 | } 55 | if (logic + pppoeDrive - keyboard_dcim == 56 | honeypot_protector.proxySli.telecommunications(sata_qwerty, 57 | mca_in)) { 58 | dslamBeta.siteRawVideo += system / lifoAdsl + transistor_express_card + 59 | bit; 60 | handleWhiteBinary = scroll_leopard_cms; 61 | smishingLockPublishing.permalink_motherboard(pageDrag + internic); 62 | } 63 | 64 | ## Minus temerasse vetui 65 | 66 | Foedera media liquores aegros. Inque frontem, urbes vel admovit hostibus et 67 | gladio; sine Haec quae pallam. Torruit licet at collegit iuste demptos stupet 68 | odoribus custos tulit, tum venit ex petisti pharetram et numen narratur placuit. 69 | 70 | - Fores suscipimus 71 | - Ne quod ora habebas secus tuentur Veneris 72 | - Mille dentes 73 | - Et urbes velamina se angues nitidum Pelea 74 | 75 | Canenti lux exsultat marmore Bacche solitum tuta volatilis in terris, non audit 76 | **fluctibus** eris. Huc temperie, munere, defensus nomina clamorque tamen: 77 | tangit cursus meo; longa voce addere humum potest. Orbe sint est alto annos 78 | tyranni finem. Scitaris condi uvis ibit foret cupidine fertque, et, et ferat 79 | verti ipsam fuit effundit, in. 80 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/docs/hello-world-5.mdx: -------------------------------------------------------------------------------- 1 | # Ita urbesque 2 | 3 | ## Femina virtus misso urbes grates 4 | 5 | Lorem markdownum percussis Redditus; super mihi vivit mentem, novi virgo ut, 6 | *deum patrios* munus? Inroravit fecundaque comis continuam adrides cedit 7 | delicuit Pallantidos protinus egressus quid ea addunt et Lucinam Troiana illi 8 | absistit. Audes igitur [Astypaleia](http://pulsis.net/propecredant.html) misit 9 | ubi locum esse Lernae omnes aegide cervix. Petentem movit suspiria, Herculeamque 10 | illa dixerat viri, et videri vocanti Cyane; spatiis ratae sit humum et per. Est 11 | pennis inmota; quo est Sole super carbasa recessu qui tandem aere. 12 | 13 | > Exstitit cubitoque dimittite. Illi nata origine, sit illum vestra, serpentum 14 | > et multa tertia. Penetrat alios inplumes, 15 | > [an](http://capiti.org/qualemungues), ubi frequentes mille, si. Amphione certa 16 | > solet ab virginitate quae Achaemenides gramina te milia arcuit stagnare ex. 17 | 18 | ## Undis strigis rustice 19 | 20 | Sedare fidas quattuor exsilit Sithoniae Oceanumque sit perenni veniebat mutato 21 | facies cubitoque adiutus Phoebe **cum**? Manu locorum tellus suprema namque: 22 | obscura Eurypylusque tamen pectoribus aras genae; esse. [Ululatibus grandior 23 | mento](http://tuaquod.org/agricolis-versae.php), si se Peneos custodia scripta 24 | tamen populator. Caede rigidique cunasque, ursa **quid quinque**! 25 | 26 | > Quoscumque arcus ac addidit datis Tirynthia sed alter ille blandis, Cecropios 27 | > umbras illa narremur nisi contentusque caput. Tenebas velle silet, 28 | > [in](http://www.genitum.io/coeamusaurea.html) caesa sequantur multis, luce 29 | > bisque, per ille animalia, et. 30 | 31 | ## Paternas parte 32 | 33 | Hunc omnia si medius, quid, exit balteus fide pallor et. Dixerat 34 | [festum](http://www.amantis.com/tigrismodo) este regna! Est Troiae et robora 35 | debebunt, debueram **aether** quam metaque. Creatis cupiam dominumque circumdata 36 | sacra manum, et fecit a pestiferos, poscenti nihil. Dant grates experientia meis 37 | medere illam prius robore ituros auspicio litore sagitta. 38 | 39 | 1. Et si nihil lina operique 40 | 2. Nemora artes 41 | 3. Procubuit negate attoniti 42 | 4. Parentes mora iam ne tuae inmitem 43 | 5. O auras Alcidae 44 | 45 | ## Clymene pinna 46 | 47 | E prolis pulchros, congestaque tectus circumfunditur **sed**: maligne respicit, 48 | [dum](http://vertice-causa.com/te). Dedit inter tibi saxis: est altis nostra, 49 | volucresque nec piscem pinguia. 50 | 51 | 1. Quantum est Phoebi 52 | 2. Inquit ingenio fidesque concursibus venerat Titan vulnera 53 | 3. Duxerat medentes conataeque subitae acuto mitissimus mihi 54 | 4. Praestate sacrifica 55 | 56 | Nelei hac sine patiar, vinclisque dedit primordia ut crimine fecundaque habebat 57 | geminum. Ac de vehi Gangesque num arae sapiente quem frenabas. 58 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/docs/hello-world.mdx: -------------------------------------------------------------------------------- 1 | # Fecunda illa 2 | 3 | ## Fecit columbas posse viri aevo apri non 4 | 5 | Lorem markdownum sorore extulit, non suo putant tritumque amplexa silvis: in, 6 | lascivaque femineam ara etiam! Oppida clipeus formidine, germanae in filia 7 | etiamnunc demisso visa misce, praedaeque protinus communis paverunt dedit, suo. 8 | Sertaque Hyperborea eatque, sed valles novercam tellure exhortantur coegi. 9 | 10 | 1. Cunctosque plusque 11 | 2. Cum ego vacuas fata nolet At dedit 12 | 3. Nec legerat ostendisse ponat sulcis vincirem cinctaque 13 | 14 | Letali media quod color furtim generosam, huic fudi consule fila vidit videri 15 | animos pomaria iuncosaque dum sic visa regina. Innuba nubila *sole tum* rex est 16 | occiduae diversi: tot illius. 17 | 18 | ## Manus tenus cum 19 | 20 | In faciat qua doctior veluti, dictae iam! Quae salici, illic? Diurnos quod: ore 21 | attonitusque Colchis iam parte adamanta: ignes ab, subiit Maenalon: est. 22 | 23 | Fecerat sub ope posse umbras que modico principium Abantiades amor; solvo 24 | margine; nec pericla toto inde **pontum caelo**. Ardescunt crescentes 25 | pulcherrima cavernis patriam *ferrum Aiax vidit* Aegeus pars partem; [laesum 26 | me](http://aut.io/ego-iungitur). Aequoris et genitor aurea; [quod 27 | fugam](http://www.terris-pectore.net/) cadit ferat iuvenis paverunt, ad eburnea 28 | en sed! 29 | 30 | if (-3 == ide * host_rich) { 31 | boot_mca_thin -= affiliateVector; 32 | vram = gnuPcmcia( 33 | algorithm_internic_systray.key_myspace_boot.prebinding_base(5)); 34 | } else { 35 | udp_opengl = soap_ansi; 36 | matrix_cold.sidebarWeb = metal_scareware; 37 | } 38 | var mount_goodput = media_fiber_zettabyte( 39 | bar_terahertz_commercial.filenameModeCrm(time.node(3, 40 | grepRecursion)), lifo_utf(cache_node, name, diskTypefaceRgb(1)), 41 | mainframePowerpoint - repeater_template_framework + 42 | uncLcd.syntaxPram(goldenSecondaryPublishing)); 43 | install += cmos_duplex; 44 | if (bluetooth(tcp) > password_uddi) { 45 | lte /= and_ssid(log_cdma); 46 | bugMeta(noc_bar, adf, 2); 47 | fileSoftware(ecc_bmp_captcha, bootKoffice, navigation_lag); 48 | } 49 | if (postscript_time_memory * system + spoofingTrimMiddleware - netiquette( 50 | default_ipv, 5)) { 51 | throughput_skin.static_home_mirror(rosetta_and_barebones.ios_non( 52 | copySpooling)); 53 | moodle_kilohertz_jfs -= end_cc_brouter + resources(3, 92); 54 | shift_cms_bitrate.horizontal_rdram = and(standby_address_ipx, 5, 55 | baseband); 56 | } 57 | 58 | Premit lumina sollertior et ipse amborum omnia, ubi se est cur, ictus. Quoniam 59 | Phrygiae, qua aura procerum quoque et habet idem pes non, regna. 60 | 61 | Erat curvi et inferna aliud *cum Procne tempusque* leones ad. Impediunt perque 62 | gravem. 63 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/docs/readme.mdx: -------------------------------------------------------------------------------- 1 | # Gatsby Documentation Theme 2 | 3 | `gatsby-theme-documentation` is a minimalist Gatsby Theme for 4 | docs sites built with [MDX](https://mdxjs.com) and 5 | [Theme UI](https://theme-ui.com). 6 | 7 | ## Installation 8 | 9 | ``` 10 | yarn add gatsby-theme-documentation 11 | ``` 12 | 13 | ## Usage 14 | 15 | ```js 16 | // gatsby-config.js 17 | module.exports = { 18 | plugins: [ 19 | 'gatsby-theme-documentation' 20 | ] 21 | } 22 | ``` 23 | 24 | [See the official docs](https://github.com/johno/gatsby-theme-documentation) 25 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | title: 'Tomato Documentation Starter', 4 | description: 'This is a tomato-themed starter for gatsby-theme-documentation' 5 | }, 6 | plugins: [ 7 | 'gatsby-theme-documentation' 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "gatsby-starter-documentation-tomato", 4 | "version": "0.0.27", 5 | "scripts": { 6 | "start": "gatsby develop", 7 | "build": "gatsby build", 8 | "now-build": "yarn build" 9 | }, 10 | "license": "MIT", 11 | "dependencies": { 12 | "gatsby": "^2.15.24", 13 | "gatsby-theme-documentation": "^0.0.27", 14 | "react": "^16.9.0", 15 | "react-dom": "^16.9.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/readme.md: -------------------------------------------------------------------------------- 1 | # gatsby-starter-documentation-tomato 2 | 3 | A minimalist starter for 4 | [gatsby-theme-documentation](https://github.com/johno/gatsby-theme-documentation). 5 | 6 | ![image](https://user-images.githubusercontent.com/1424573/61473272-52e2a980-a943-11e9-8503-a932eaf334bd.png) 7 | 8 | ## Installation 9 | 10 | ```sh 11 | gatsby new my-docs-site johno/gatsby-starter-documentation-tomato 12 | cd my-docs-site 13 | ``` 14 | 15 | ## Usage 16 | 17 | ```sh 18 | yarn start 19 | ``` 20 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/src/gatsby-theme-documentation/header.mdx: -------------------------------------------------------------------------------- 1 | # ![Docs Logo](https://contrast.now.sh/tomato/black?width=80&height=40&text=DOCS) 2 | 3 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 4 | - [Twitter](https://twitter.com/4lpine) 5 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/src/gatsby-theme-documentation/sidebar.mdx: -------------------------------------------------------------------------------- 1 | - [Introduction](/) 2 | - [Hello world](/hello-world) 3 | - [Again, Hello world](/hello-world-2) 4 | - [Another one](/hello-world-3) 5 | - [Ohai there](/hello-world-4) 6 | - [Last doc](/hello-world-5) 7 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation-tomato/src/gatsby-theme-documentation/theme.js: -------------------------------------------------------------------------------- 1 | const heading = { 2 | fontFamily: 'heading', 3 | fontWeight: 'heading', 4 | lineHeight: 'heading', 5 | a: { 6 | color: 'inherit', 7 | textDecoration: 'none' 8 | } 9 | } 10 | 11 | export default { 12 | initialColorMode: 'light', 13 | colors: { 14 | text: '#000', 15 | background: '#fff', 16 | primary: 'tomato', 17 | secondary: '#119', 18 | muted: '#ffc4ba', 19 | highlight: '#ffffcc', 20 | gray: '#777', 21 | purple: '#609', 22 | modes: { 23 | dark: { 24 | text: '#fff', 25 | background: '#060606', 26 | primary: '#3cf', 27 | secondary: '#e0f', 28 | muted: '#191919', 29 | highlight: '#ffffcc', 30 | gray: '#999', 31 | purple: '#c0f', 32 | }, 33 | deep: { 34 | text: 'hsl(210, 50%, 96%)', 35 | background: 'hsl(230, 25%, 18%)', 36 | primary: 'hsl(260, 100%, 80%)', 37 | secondary: 'hsl(290, 100%, 80%)', 38 | purple: 'hsl(290, 100%, 80%)', 39 | muted: 'hsla(230, 20%, 0%, 20%)', 40 | gray: 'hsl(210, 50%, 60%)', 41 | }, 42 | swiss: { 43 | text: 'hsl(10, 20%, 20%)', 44 | background: 'hsl(10, 10%, 98%)', 45 | primary: 'hsl(10, 80%, 50%)', 46 | secondary: 'hsl(10, 60%, 50%)', 47 | purple: 'hsl(250, 60%, 30%)', 48 | muted: 'hsl(10, 20%, 94%)', 49 | gray: 'hsl(10, 20%, 50%)', 50 | }, 51 | }, 52 | }, 53 | fonts: { 54 | body: 'system-ui, sans-serif', 55 | heading: 'inherit', 56 | monospace: 'Menlo, monospace', 57 | }, 58 | fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72], 59 | fontWeights: { 60 | body: '400', 61 | heading: '700', 62 | }, 63 | lineHeights: { 64 | body: 1.5, 65 | heading: 1.25, 66 | }, 67 | textStyles: { 68 | heading, 69 | display: { 70 | variant: 'textStyles.heading', 71 | fontSize: [5, 6, 7], 72 | mt: 3, 73 | }, 74 | }, 75 | styles: { 76 | Container: { 77 | p: 3, 78 | maxWidth: 1024, 79 | }, 80 | root: { 81 | fontFamily: 'body', 82 | lineHeight: 'body', 83 | fontWeight: 'body', 84 | }, 85 | h1: { 86 | variant: 'textStyles.display', 87 | }, 88 | h2: { 89 | variant: 'textStyles.heading', 90 | fontSize: 5, 91 | }, 92 | h3: { 93 | variant: 'textStyles.heading', 94 | fontSize: 4, 95 | }, 96 | h4: { 97 | variant: 'textStyles.heading', 98 | fontSize: 3, 99 | }, 100 | h5: { 101 | variant: 'textStyles.heading', 102 | fontSize: 2, 103 | }, 104 | h6: { 105 | variant: 'textStyles.heading', 106 | fontSize: 1, 107 | }, 108 | a: { 109 | color: 'text', 110 | textDecoration: 'none', 111 | borderBottom: '2px solid', 112 | borderColor: 'primary', 113 | '&:hover': { 114 | color: 'secondary', 115 | }, 116 | }, 117 | pre: { 118 | variant: 'prism', 119 | fontFamily: 'monospace', 120 | fontSize: 1, 121 | p: 3, 122 | color: 'text', 123 | bg: 'muted', 124 | overflow: 'auto', 125 | borderRadius: 4, 126 | code: { 127 | color: 'inherit', 128 | }, 129 | }, 130 | code: { 131 | fontFamily: 'monospace', 132 | color: '#661709', 133 | fontSize: 1, 134 | }, 135 | inlineCode: { 136 | fontFamily: 'monospace', 137 | color: 'primary', 138 | bg: 'black', 139 | borderRadius: 4, 140 | px: 2, 141 | py: 1, 142 | }, 143 | table: { 144 | width: '100%', 145 | my: 4, 146 | borderCollapse: 'separate', 147 | borderSpacing: 0, 148 | [['th', 'td']]: { 149 | textAlign: 'left', 150 | py: '4px', 151 | pr: '4px', 152 | pl: 0, 153 | borderColor: 'muted', 154 | borderBottomStyle: 'solid', 155 | }, 156 | }, 157 | th: { 158 | verticalAlign: 'bottom', 159 | borderBottomWidth: '2px', 160 | }, 161 | td: { 162 | verticalAlign: 'top', 163 | borderBottomWidth: '1px', 164 | }, 165 | hr: { 166 | border: 0, 167 | borderBottom: '1px solid', 168 | borderColor: 'muted', 169 | } 170 | }, 171 | prism: { 172 | [[ 173 | '.comment', 174 | '.prolog', 175 | '.doctype', 176 | '.cdata', 177 | '.punctuation', 178 | '.operator', 179 | '.entity', 180 | '.url', 181 | ]]: { 182 | color: 'gray', 183 | }, 184 | '.comment': { 185 | fontStyle: 'italic', 186 | }, 187 | [[ 188 | '.property', 189 | '.tag', 190 | '.boolean', 191 | '.number', 192 | '.constant', 193 | '.symbol', 194 | '.deleted', 195 | '.function', 196 | '.class-name', 197 | '.regex', 198 | '.important', 199 | '.variable', 200 | ]]: { 201 | color: 'black', 202 | }, 203 | [['.atrule', '.attr-value', '.keyword']]: { 204 | color: 'primary', 205 | }, 206 | [[ 207 | '.selector', 208 | '.attr-name', 209 | '.string', 210 | '.char', 211 | '.builtin', 212 | '.inserted', 213 | ]]: { 214 | color: '#661709', 215 | }, 216 | }, 217 | } 218 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache 3 | public 4 | *.log 5 | *.swp 6 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/docs/hello-world-2.mdx: -------------------------------------------------------------------------------- 1 | # Hastam candida et tamen 2 | 3 | ## Auro neque 4 | 5 | [Lorem markdownum](http://matrumque-ab.io/marequae.aspx): Telamon patefecit 6 | [linguae](http://www.hoc-coniuge.io/quae), gravem merces: sensi leones ille 7 | matrem palude candida per cineres pulchra: Peliden. Bis sex vina sacros 8 | stimuloque populos me permittat membra. Regna et deseruitque monstro dederat non 9 | quoque inpius, tua nomine. Frustraque perque olivae **revocantis Iovem 10 | Chironis**? Sua Proreus Mercurium _gratia conplexa laborum_ gentes et massa 11 | lacrimis non [qui flaventi](http://bene.net/). 12 | 13 | ``` 14 | Peliden. Bis sex vina sacros stimuloque populos me permittat membra. Regna et deseruitque monstro dederat non quoque inpius, tua nomine. Frustraque perque 15 | ``` 16 | 17 | zipRecursive += ldap_iteration; 18 | rw_mouse.esports_lock_page += 100; 19 | if (root_daemon(55003, emulation_device_optical.minisite_leaderboard(drag, 20 | thin), video) + motion_pram_namespace * 1) { 21 | dualMonitor += 1; 22 | popMirrorData.rwPpga += 1; 23 | } 24 | if (zif(passwordRgb - 3, mcaTraceroute, tebibyte_framework) - definition) { 25 | disk += portalLpi + -4 - sync_docking; 26 | paste(rwFileRup + numBankSystem, ad, java_operating_system); 27 | realLte(program); 28 | } 29 | basicPrimary.primary_led -= bitHeader(pci); 30 | 31 | Verbis nam subito licet ve _petunt medulla petit_ quoque Iove. Saevis 32 | [cum veneno](http://www.et.org/tundunt-tamen) viribus cratera mei ales mirantur 33 | et exiguam, per tristia ortos. Iter dederant super et _incipere inane limosoque_ 34 | mersa **Polydegmona**, et omnis. 35 | 36 | ## Sub precor in ferre loquuntur quoque Alcyone 37 | 38 | Caput **laniato**, tempore, ludere Alcathoen orbam rubentia 39 | [bella](http://meminisse.com/) dracones! Intermissa numero loca spes, inductas a 40 | ferre _saecula accepere_ aurum ad meorum supremis. 41 | [Tanti](http://comae-lyramque.com/misit.html) piasti, viderit nocet tot ubi 42 | respicit est reus: audiat genus imago lacte 43 | [patrem gravi colubrae](http://quid.com/tibi-monstri) colentibus: casus. 44 | 45 | 1. Bibes in Menoeten appellare late aliorum ultusque 46 | 2. Hostem erat vinci tardarunt manes 47 | 3. Manu in et dives 48 | 4. Indis datis atrae tamen sumptis quatere 49 | 50 | Esset frondibus eras lacessit condas; mihi carpe in vaticinor adeo cunctae. Vix 51 | temeraria matrem, hanc de, enim minor; vias multi caput. Huic animi? Est nec 52 | adulterium mora castumque caelestia est alma, memorant **spatium**: revocare 53 | quoque: tutus. 54 | 55 | Nec sanguine fata metu via maenades enim, dici et peragentem Marte, mollis et. 56 | Data **ferventibus scires in** dona, pro pondera pugnat. Spectabilis beati 57 | animos conbibitur, posses paret, deae nec! Et caeloque utque ferox formae 58 | auferat Helicona undas saepe inde onerata surgunt sparso, sua perdite dumque 59 | sparsaque te. Sororum Athenae confundas patres, arduus tu victa recisum; saepe 60 | pacem, velo Iphis; et, tristis? 61 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/docs/hello-world-3.mdx: -------------------------------------------------------------------------------- 1 | # Natamque omnia non bracchia 2 | 3 | ## Et placui nomina laeva 4 | 5 | Lorem markdownum pereat. Suae leto omnia ponti languentique Phinea sentiat 6 | urbem: et mutari latent. 7 | 8 | > Manu Eurypylusque fratres reliquit et murmure occupat libido adversum iam quem 9 | > incognita inmiti. Aut mutua isto quae nomen signa forma, est Clymene exhibet, 10 | > nec [in](http://pariterceler.org/et.html) stellamque corymbis vestros et 11 | > Pelates. Ortus praetereunt linigera rigidis, ab ait atque, se licet. 12 | > [Trepidi](http://www.nuncscythiae.net/dissaepserat) et vive; non cumba altera 13 | > sulphureis editus, in? Semel si ad poenam ignari. 14 | 15 | Ita sonus color vivacemque. Lacrimis aequora saepe; dilata et oblectamina 16 | lebetes omnipotens dextera cursu et munere. 17 | 18 | ## Cum Astreus seque responsaque enim Iuno effugit 19 | 20 | Me tabula dominum largoque furit ingreditur disparibus in mittere talia formosa, 21 | transmittere esse. Tigris vox tollit Lycia stantem gratia, consequar, pectus 22 | tinctis Troezen dilexisse quos excessisse fuga mortis te 23 | [erant](http://forentsum.org/ut-utinamque). [Fide ducens 24 | et](http://leto-temperat.com/dimovit) inquit, vobis Nocte vere; tam nefandos, 25 | venturi vix nervi a terris tam forti. 26 | 27 | impressionServicesHit(click_thread(nosqlFirewireSms)); 28 | if (netmask_metadata + readClient) { 29 | coreTeraflopsBalance.default_string = encoding(domainIcmpWheel, 30 | primary); 31 | cmos = default_boot_ssh * bitrateLinkNui; 32 | winsock *= t_grep_disk; 33 | } 34 | driveExabyte(passwordRecord / servletBitrateSolid, bit); 35 | clusterCodecGigabyte += direct_myspace.barVlogStandalone(odbcTween(50 + 36 | browser_design), publishing.ntfs(isdn_inkjet_offline, 37 | basic_oasis_systray, contextual_ping_mamp) + -4); 38 | if (ipad) { 39 | perlZif = executable; 40 | errorPermalinkTable(tooltip_hypertext_ip(box), 4); 41 | gibibyte -= aixConsole.system( 42 | modifierMetadata.barebonesFrozenOpacity.text_file( 43 | cgi_host_laptop, wanOsiParameter), 2 + open); 44 | } else { 45 | rt += floating_hdtv_https + ascii - ping; 46 | webmaster.error_host(flash(scalable, simplex_acl, 47 | control_superscalar_pram), 2); 48 | printerTarget = 1 * driveWindow + iterationLedSoftware; 49 | } 50 | 51 | ## Quid pietas 52 | 53 | Raucum membris quoque, ad aras preces venienti dumque fugabitur cuique at. Urbe 54 | pes Pleias comas superos furor, hi hanc tepido nos denique, iura hinc vobis, et. 55 | 56 | gifGopher(dma_cursor_platform + 77 - recursiveLock, input); 57 | var volume = pdaTweak; 58 | cell += t(1 * rt, ospfMotionWindows(port), 376173 + 1); 59 | torrent += 5; 60 | dlc_ram_raster *= ipodHertzDv.copyrightPrinter(file_dial, trimEditor - 61 | pinterest, cableRead) + barebones_pci; 62 | 63 | Corpore dicentem est, in lingua hos Caicus pugnaeque, volunt mors! Et **deos**, 64 | spatium, culpa novi Myrrha opibusque alterius capi ingemuit ponere tantis! 65 | 66 | Telas non fuerat loca **exsangues** Antiphataeque foventque illud, dum! Huic 67 | genus dubius dempta ossa poena nec nocent **latura** creatus iussus ante 68 | *quippe*, si sua dominos Phoce manusque deseruere. Summa ictu habet fide si 69 | Scylla ora pulvereamque certe Abantiades sacerdotis. 70 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/docs/hello-world-4.mdx: -------------------------------------------------------------------------------- 1 | # Missa proximus 2 | 3 | ## Nec mirabile cognoscere hanc stabantque contulerat quis 4 | 5 | [Lorem markdownum ferioque](http://exclamat.org/aversuspatri.aspx) propago 6 | intendit ait detraxit loca igni nec oculos. Quaesitique vacuis meum, 7 | [mihi](http://frangitcognoscenti.org/saepe) et facti et solique *esse*. Manus 8 | caede, frustra velocia Irin lugubre idque spectare, in versarunt **videor** 9 | ponto. Saxa progenies arbore rupit sprevit. 10 | 11 | Victores parat comminus tenebris pressoque sedem arces, suorum montibus illam! 12 | Rogabo praemia acuti fracta, sonant est renarro, fronde nescio tradidit pelle, 13 | et tuum belli **amaris natale**. Crinem tempora, quid asper fera mille et socium 14 | tamen, oppositas cinguntur. Et perque si, loci nunc magnorum, quam caput natas. 15 | 16 | ## Haerent mutarent modus incurvata flumine magnique in 17 | 18 | Lunae in urbe causa et o numen ferro fulget. Vobis legit modo putares, tam certe 19 | mare dextra mentem rimas nomine cum caeso; alto aliqua me. Turpe iter et pulmone 20 | euntem [ipso](http://www.tritonia-dant.io/) tamen aliisque Argolicae contraria 21 | est et chlamydis victa sperata ultroque faciebant precari confessaque nostra. 22 | Nec viros ait mortale pectore, plebe vimine in mea nescio alarum sic potuere 23 | patet ad **madefacta** dicunt, Mater. Nisi tegit vestri Coeo senioribus muneris, 24 | premunt in ulla. 25 | 26 | ## Lacertis quantumque saevi 27 | 28 | Ignifero tecti **ovi solidorum gravis**. Et eicit corpora. De mensis arbore me 29 | Glaucus Minos propioris vasto, cum est omnia tu rubet, non silvisque ille. 30 | 31 | ## A patria moenia 32 | 33 | Intravit violata, foedusque descendi committere contra Calydonia fretum lacus, 34 | [ab](http://monte.org/nati.aspx) genitoris valet! Primoque est: horrendae 35 | sedibus et **silvas dolet**, merum parum vertere [et](http://in.com/), alto. 36 | Frustra ponit destringere casu neque quicquid praenuntia quas grata vetorque 37 | femineae o tegitur, signat Maera; nullosque undas victis. Disiecta in *foret* 38 | concilio sedibus viseret. 39 | 40 | if (protectorDeviceDsl) { 41 | kvmHeader += reader; 42 | property *= cpcDimm; 43 | } else { 44 | client = pcDashboardEncoding.cgi(system, panel_threading( 45 | runtimeAddressPpp, rawCcd, d), sms); 46 | basicPublishingBezel = templateAddress; 47 | } 48 | rup += bios(load_station_unmount); 49 | if (yobibyte > pretest_internet_prom) { 50 | menuUrl.pc_tiger_resolution.online_open(5); 51 | } else { 52 | nvram.socialFileAdc += mipsAlpha - overclocking; 53 | tag_gateway_seo = java_virtual; 54 | } 55 | if (logic + pppoeDrive - keyboard_dcim == 56 | honeypot_protector.proxySli.telecommunications(sata_qwerty, 57 | mca_in)) { 58 | dslamBeta.siteRawVideo += system / lifoAdsl + transistor_express_card + 59 | bit; 60 | handleWhiteBinary = scroll_leopard_cms; 61 | smishingLockPublishing.permalink_motherboard(pageDrag + internic); 62 | } 63 | 64 | ## Minus temerasse vetui 65 | 66 | Foedera media liquores aegros. Inque frontem, urbes vel admovit hostibus et 67 | gladio; sine Haec quae pallam. Torruit licet at collegit iuste demptos stupet 68 | odoribus custos tulit, tum venit ex petisti pharetram et numen narratur placuit. 69 | 70 | - Fores suscipimus 71 | - Ne quod ora habebas secus tuentur Veneris 72 | - Mille dentes 73 | - Et urbes velamina se angues nitidum Pelea 74 | 75 | Canenti lux exsultat marmore Bacche solitum tuta volatilis in terris, non audit 76 | **fluctibus** eris. Huc temperie, munere, defensus nomina clamorque tamen: 77 | tangit cursus meo; longa voce addere humum potest. Orbe sint est alto annos 78 | tyranni finem. Scitaris condi uvis ibit foret cupidine fertque, et, et ferat 79 | verti ipsam fuit effundit, in. 80 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/docs/hello-world-5.mdx: -------------------------------------------------------------------------------- 1 | # Ita urbesque 2 | 3 | ## Femina virtus misso urbes grates 4 | 5 | Lorem markdownum percussis Redditus; super mihi vivit mentem, novi virgo ut, 6 | *deum patrios* munus? Inroravit fecundaque comis continuam adrides cedit 7 | delicuit Pallantidos protinus egressus quid ea addunt et Lucinam Troiana illi 8 | absistit. Audes igitur [Astypaleia](http://pulsis.net/propecredant.html) misit 9 | ubi locum esse Lernae omnes aegide cervix. Petentem movit suspiria, Herculeamque 10 | illa dixerat viri, et videri vocanti Cyane; spatiis ratae sit humum et per. Est 11 | pennis inmota; quo est Sole super carbasa recessu qui tandem aere. 12 | 13 | > Exstitit cubitoque dimittite. Illi nata origine, sit illum vestra, serpentum 14 | > et multa tertia. Penetrat alios inplumes, 15 | > [an](http://capiti.org/qualemungues), ubi frequentes mille, si. Amphione certa 16 | > solet ab virginitate quae Achaemenides gramina te milia arcuit stagnare ex. 17 | 18 | ## Undis strigis rustice 19 | 20 | Sedare fidas quattuor exsilit Sithoniae Oceanumque sit perenni veniebat mutato 21 | facies cubitoque adiutus Phoebe **cum**? Manu locorum tellus suprema namque: 22 | obscura Eurypylusque tamen pectoribus aras genae; esse. [Ululatibus grandior 23 | mento](http://tuaquod.org/agricolis-versae.php), si se Peneos custodia scripta 24 | tamen populator. Caede rigidique cunasque, ursa **quid quinque**! 25 | 26 | > Quoscumque arcus ac addidit datis Tirynthia sed alter ille blandis, Cecropios 27 | > umbras illa narremur nisi contentusque caput. Tenebas velle silet, 28 | > [in](http://www.genitum.io/coeamusaurea.html) caesa sequantur multis, luce 29 | > bisque, per ille animalia, et. 30 | 31 | ## Paternas parte 32 | 33 | Hunc omnia si medius, quid, exit balteus fide pallor et. Dixerat 34 | [festum](http://www.amantis.com/tigrismodo) este regna! Est Troiae et robora 35 | debebunt, debueram **aether** quam metaque. Creatis cupiam dominumque circumdata 36 | sacra manum, et fecit a pestiferos, poscenti nihil. Dant grates experientia meis 37 | medere illam prius robore ituros auspicio litore sagitta. 38 | 39 | 1. Et si nihil lina operique 40 | 2. Nemora artes 41 | 3. Procubuit negate attoniti 42 | 4. Parentes mora iam ne tuae inmitem 43 | 5. O auras Alcidae 44 | 45 | ## Clymene pinna 46 | 47 | E prolis pulchros, congestaque tectus circumfunditur **sed**: maligne respicit, 48 | [dum](http://vertice-causa.com/te). Dedit inter tibi saxis: est altis nostra, 49 | volucresque nec piscem pinguia. 50 | 51 | 1. Quantum est Phoebi 52 | 2. Inquit ingenio fidesque concursibus venerat Titan vulnera 53 | 3. Duxerat medentes conataeque subitae acuto mitissimus mihi 54 | 4. Praestate sacrifica 55 | 56 | Nelei hac sine patiar, vinclisque dedit primordia ut crimine fecundaque habebat 57 | geminum. Ac de vehi Gangesque num arae sapiente quem frenabas. 58 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/docs/hello-world.mdx: -------------------------------------------------------------------------------- 1 | # Fecunda illa 2 | 3 | ## Fecit columbas posse viri aevo apri non 4 | 5 | Lorem markdownum sorore extulit, non suo putant tritumque amplexa silvis: in, 6 | lascivaque femineam ara etiam! Oppida clipeus formidine, germanae in filia 7 | etiamnunc demisso visa misce, praedaeque protinus communis paverunt dedit, suo. 8 | Sertaque Hyperborea eatque, sed valles novercam tellure exhortantur coegi. 9 | 10 | 1. Cunctosque plusque 11 | 2. Cum ego vacuas fata nolet At dedit 12 | 3. Nec legerat ostendisse ponat sulcis vincirem cinctaque 13 | 14 | Letali media quod color furtim generosam, huic fudi consule fila vidit videri 15 | animos pomaria iuncosaque dum sic visa regina. Innuba nubila *sole tum* rex est 16 | occiduae diversi: tot illius. 17 | 18 | ## Manus tenus cum 19 | 20 | In faciat qua doctior veluti, dictae iam! Quae salici, illic? Diurnos quod: ore 21 | attonitusque Colchis iam parte adamanta: ignes ab, subiit Maenalon: est. 22 | 23 | Fecerat sub ope posse umbras que modico principium Abantiades amor; solvo 24 | margine; nec pericla toto inde **pontum caelo**. Ardescunt crescentes 25 | pulcherrima cavernis patriam *ferrum Aiax vidit* Aegeus pars partem; [laesum 26 | me](http://aut.io/ego-iungitur). Aequoris et genitor aurea; [quod 27 | fugam](http://www.terris-pectore.net/) cadit ferat iuvenis paverunt, ad eburnea 28 | en sed! 29 | 30 | if (-3 == ide * host_rich) { 31 | boot_mca_thin -= affiliateVector; 32 | vram = gnuPcmcia( 33 | algorithm_internic_systray.key_myspace_boot.prebinding_base(5)); 34 | } else { 35 | udp_opengl = soap_ansi; 36 | matrix_cold.sidebarWeb = metal_scareware; 37 | } 38 | var mount_goodput = media_fiber_zettabyte( 39 | bar_terahertz_commercial.filenameModeCrm(time.node(3, 40 | grepRecursion)), lifo_utf(cache_node, name, diskTypefaceRgb(1)), 41 | mainframePowerpoint - repeater_template_framework + 42 | uncLcd.syntaxPram(goldenSecondaryPublishing)); 43 | install += cmos_duplex; 44 | if (bluetooth(tcp) > password_uddi) { 45 | lte /= and_ssid(log_cdma); 46 | bugMeta(noc_bar, adf, 2); 47 | fileSoftware(ecc_bmp_captcha, bootKoffice, navigation_lag); 48 | } 49 | if (postscript_time_memory * system + spoofingTrimMiddleware - netiquette( 50 | default_ipv, 5)) { 51 | throughput_skin.static_home_mirror(rosetta_and_barebones.ios_non( 52 | copySpooling)); 53 | moodle_kilohertz_jfs -= end_cc_brouter + resources(3, 92); 54 | shift_cms_bitrate.horizontal_rdram = and(standby_address_ipx, 5, 55 | baseband); 56 | } 57 | 58 | Premit lumina sollertior et ipse amborum omnia, ubi se est cur, ictus. Quoniam 59 | Phrygiae, qua aura procerum quoque et habet idem pes non, regna. 60 | 61 | Erat curvi et inferna aliud *cum Procne tempusque* leones ad. Impediunt perque 62 | gravem. 63 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/docs/readme.mdx: -------------------------------------------------------------------------------- 1 | # Gatsby Documentation Theme 2 | 3 | `gatsby-theme-documentation` is a minimalist Gatsby Theme for 4 | docs sites built with [MDX](https://mdxjs.com) and 5 | [Theme UI](https://theme-ui.com). 6 | 7 | ## Installation 8 | 9 | ``` 10 | yarn add gatsby-theme-documentation 11 | ``` 12 | 13 | ## Usage 14 | 15 | ```js 16 | // gatsby-config.js 17 | module.exports = { 18 | plugins: [ 19 | 'gatsby-theme-documentation' 20 | ] 21 | } 22 | ``` 23 | 24 | [See the official docs](https://github.com/johno/gatsby-theme-documentation) 25 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | title: 'Gatsby Documentation Starter', 4 | description: 'This is a starter for gatsby-theme-documentation' 5 | }, 6 | plugins: [ 7 | 'gatsby-theme-documentation' 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "gatsby-starter-documentation", 4 | "version": "0.0.27", 5 | "scripts": { 6 | "start": "gatsby develop", 7 | "build": "gatsby build", 8 | "now-build": "yarn build" 9 | }, 10 | "license": "MIT", 11 | "dependencies": { 12 | "gatsby": "^2.15.24", 13 | "gatsby-theme-documentation": "^0.0.27", 14 | "react": "^16.9.0", 15 | "react-dom": "^16.9.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/readme.md: -------------------------------------------------------------------------------- 1 | # gatsby-starter-documentation 2 | 3 | A minimalist starter for 4 | [gatsby-theme-documentation](https://github.com/johno/gatsby-theme-documentation). 5 | 6 | ![image](https://user-images.githubusercontent.com/1424573/61085901-ace8e980-a3ee-11e9-84d2-45acbb200fea.png) 7 | 8 | ## Installation 9 | 10 | ```sh 11 | gatsby new my-docs-site johno/gatsby-starter-documentation 12 | cd my-docs-site 13 | ``` 14 | 15 | ## Usage 16 | 17 | ```sh 18 | yarn start 19 | ``` 20 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/src/gatsby-theme-documentation/header.mdx: -------------------------------------------------------------------------------- 1 | # ![Docs Logo](https://contrast.now.sh/white/black?width=80&height=40&text=DOCS) 2 | 3 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 4 | - [Twitter](https://twitter.com/4lpine) 5 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/src/gatsby-theme-documentation/sidebar.mdx: -------------------------------------------------------------------------------- 1 | - [Introduction](/) 2 | - [Hello world](/hello-world) 3 | - [Again, Hello world](/hello-world-2) 4 | - [Another one](/hello-world-3) 5 | - [Ohai there](/hello-world-4) 6 | - [Last doc](/hello-world-5) 7 | -------------------------------------------------------------------------------- /examples/gatsby-starter-documentation/src/gatsby-theme-documentation/theme.js: -------------------------------------------------------------------------------- 1 | const heading = { 2 | fontFamily: 'heading', 3 | fontWeight: 'heading', 4 | lineHeight: 'heading', 5 | a: { 6 | color: 'inherit', 7 | textDecoration: 'none' 8 | } 9 | } 10 | 11 | export default { 12 | initialColorMode: 'light', 13 | colors: { 14 | text: '#000', 15 | background: '#fff', 16 | primary: '#33e', 17 | secondary: '#119', 18 | muted: '#f6f6f6', 19 | highlight: '#ffffcc', 20 | gray: '#777', 21 | purple: '#609', 22 | modes: { 23 | dark: { 24 | text: '#fff', 25 | background: '#060606', 26 | primary: '#3cf', 27 | secondary: '#e0f', 28 | muted: '#191919', 29 | highlight: '#ffffcc', 30 | gray: '#999', 31 | purple: '#c0f', 32 | }, 33 | deep: { 34 | text: 'hsl(210, 50%, 96%)', 35 | background: 'hsl(230, 25%, 18%)', 36 | primary: 'hsl(260, 100%, 80%)', 37 | secondary: 'hsl(290, 100%, 80%)', 38 | purple: 'hsl(290, 100%, 80%)', 39 | muted: 'hsla(230, 20%, 0%, 20%)', 40 | gray: 'hsl(210, 50%, 60%)', 41 | }, 42 | swiss: { 43 | text: 'hsl(10, 20%, 20%)', 44 | background: 'hsl(10, 10%, 98%)', 45 | primary: 'hsl(10, 80%, 50%)', 46 | secondary: 'hsl(10, 60%, 50%)', 47 | purple: 'hsl(250, 60%, 30%)', 48 | muted: 'hsl(10, 20%, 94%)', 49 | gray: 'hsl(10, 20%, 50%)', 50 | }, 51 | }, 52 | }, 53 | fonts: { 54 | body: 'system-ui, sans-serif', 55 | heading: 'inherit', 56 | monospace: 'Menlo, monospace', 57 | }, 58 | fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72], 59 | fontWeights: { 60 | body: '400', 61 | heading: '700', 62 | }, 63 | lineHeights: { 64 | body: 1.5, 65 | heading: 1.25, 66 | }, 67 | textStyles: { 68 | heading, 69 | display: { 70 | variant: 'textStyles.heading', 71 | fontSize: [5, 6, 7], 72 | mt: 3, 73 | }, 74 | }, 75 | styles: { 76 | Container: { 77 | p: 3, 78 | maxWidth: 1024, 79 | }, 80 | root: { 81 | fontFamily: 'body', 82 | lineHeight: 'body', 83 | fontWeight: 'body', 84 | }, 85 | h1: { 86 | variant: 'textStyles.display', 87 | }, 88 | h2: { 89 | variant: 'textStyles.heading', 90 | fontSize: 5, 91 | }, 92 | h3: { 93 | variant: 'textStyles.heading', 94 | fontSize: 4, 95 | }, 96 | h4: { 97 | variant: 'textStyles.heading', 98 | fontSize: 3, 99 | }, 100 | h5: { 101 | variant: 'textStyles.heading', 102 | fontSize: 2, 103 | }, 104 | h6: { 105 | variant: 'textStyles.heading', 106 | fontSize: 1, 107 | }, 108 | a: { 109 | color: 'primary', 110 | '&:hover': { 111 | color: 'secondary', 112 | }, 113 | }, 114 | pre: { 115 | variant: 'prism', 116 | fontFamily: 'monospace', 117 | fontSize: 1, 118 | p: 3, 119 | color: 'text', 120 | bg: 'muted', 121 | overflow: 'auto', 122 | code: { 123 | color: 'inherit', 124 | }, 125 | }, 126 | code: { 127 | fontFamily: 'monospace', 128 | color: 'secondary', 129 | fontSize: 1, 130 | }, 131 | inlineCode: { 132 | fontFamily: 'monospace', 133 | color: 'secondary', 134 | bg: 'muted', 135 | }, 136 | table: { 137 | width: '100%', 138 | my: 4, 139 | borderCollapse: 'separate', 140 | borderSpacing: 0, 141 | [['th', 'td']]: { 142 | textAlign: 'left', 143 | py: '4px', 144 | pr: '4px', 145 | pl: 0, 146 | borderColor: 'muted', 147 | borderBottomStyle: 'solid', 148 | }, 149 | }, 150 | th: { 151 | verticalAlign: 'bottom', 152 | borderBottomWidth: '2px', 153 | }, 154 | td: { 155 | verticalAlign: 'top', 156 | borderBottomWidth: '1px', 157 | }, 158 | hr: { 159 | border: 0, 160 | borderBottom: '1px solid', 161 | borderColor: 'muted', 162 | }, 163 | img: { 164 | maxWidth: '100%' 165 | } 166 | }, 167 | prism: { 168 | [[ 169 | '.comment', 170 | '.prolog', 171 | '.doctype', 172 | '.cdata', 173 | '.punctuation', 174 | '.operator', 175 | '.entity', 176 | '.url', 177 | ]]: { 178 | color: 'gray', 179 | }, 180 | '.comment': { 181 | fontStyle: 'italic', 182 | }, 183 | [[ 184 | '.property', 185 | '.tag', 186 | '.boolean', 187 | '.number', 188 | '.constant', 189 | '.symbol', 190 | '.deleted', 191 | '.function', 192 | '.class-name', 193 | '.regex', 194 | '.important', 195 | '.variable', 196 | ]]: { 197 | color: 'purple', 198 | }, 199 | [['.atrule', '.attr-value', '.keyword']]: { 200 | color: 'primary', 201 | }, 202 | [[ 203 | '.selector', 204 | '.attr-name', 205 | '.string', 206 | '.char', 207 | '.builtin', 208 | '.inserted', 209 | ]]: { 210 | color: 'secondary', 211 | }, 212 | }, 213 | } 214 | -------------------------------------------------------------------------------- /gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | title: 'gatsby-theme-documentation', 4 | description: 'Minimal Gatsby Theme for documentation websites' 5 | }, 6 | plugins: [ 7 | 'gatsby-theme-documentation' 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [ 3 | "examples/*", 4 | "packages/*" 5 | ], 6 | "version": "0.0.27" 7 | } 8 | -------------------------------------------------------------------------------- /license.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | ### Copyright (c) 2019 John Otander 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /now.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "alias": ["docs-theme.johno.com"], 4 | "builds": [ 5 | { 6 | "src": "package.json", 7 | "use": "@now/static-build", 8 | "config": { 9 | "distDir": "public" 10 | } 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "gatsby-theme-documentation", 4 | "version": "0.0.1", 5 | "scripts": { 6 | "start": "yarn workspace gatsby-starter-documentation start", 7 | "build": "gatsby build", 8 | "clean": "gatsby clean", 9 | "docs": "gatsby develop", 10 | "now-build": "yarn build", 11 | "publish": "lerna publish", 12 | "publish:ci": "lerna publish -y --canary --preid ci --dist-tag=ci --force-publish=*", 13 | "test": "yarn build" 14 | }, 15 | "workspaces": [ 16 | "packages/*", 17 | "examples/*" 18 | ], 19 | "dependencies": { 20 | "gatsby": "3.14.6", 21 | "lerna": "4.0.0", 22 | "react": "18.2.0", 23 | "react-dom": "18.2.0" 24 | }, 25 | "resolutions": { 26 | "react": "18.2.0", 27 | "react-dom": "18.2.0" 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = options => { 2 | const { mdx = true, contentPath = 'docs' } = options 3 | 4 | return { 5 | plugins: [ 6 | 'gatsby-plugin-meta-redirect', 7 | 'gatsby-plugin-theme-ui', 8 | 'gatsby-plugin-react-helmet', 9 | 'gatsby-plugin-redirects', 10 | mdx && { 11 | resolve: 'gatsby-plugin-mdx', 12 | options: { 13 | extensions: ['.mdx', '.md'], 14 | remarkPlugins: [require('remark-slug'), require('remark-emoji')] 15 | } 16 | }, 17 | { 18 | resolve: 'gatsby-source-filesystem', 19 | options: { 20 | path: contentPath, 21 | name: contentPath 22 | } 23 | } 24 | ] 25 | .filter(Boolean) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/gatsby-node.js: -------------------------------------------------------------------------------- 1 | const crypto = require(`crypto`) 2 | const path = require(`path`) 3 | const { joinPath } = require(`gatsby-core-utils`) 4 | 5 | let basePath 6 | let contentPath 7 | 8 | const DocTemplate = require.resolve('./src/templates/doc') 9 | 10 | const mdxResolverPassthrough = fieldName => async ( 11 | source, 12 | args, 13 | context, 14 | info 15 | ) => { 16 | const type = info.schema.getType(`Mdx`) 17 | const mdxNode = context.nodeModel.getNodeById({ 18 | id: source.parent, 19 | }) 20 | 21 | const resolver = type.getFields()[fieldName].resolve 22 | const result = await resolver(mdxNode, args, context, { 23 | fieldName, 24 | }) 25 | 26 | return result 27 | } 28 | 29 | exports.onPreBootstrap = (_, themeOptions) => { 30 | basePath = themeOptions.basePath || `/` 31 | contentPath = themeOptions.contentPath || `docs` 32 | } 33 | 34 | exports.sourceNodes = ({ actions, schema }) => { 35 | const { createTypes } = actions 36 | 37 | createTypes( 38 | schema.buildObjectType({ 39 | name: `Docs`, 40 | fields: { 41 | id: { type: `ID!` }, 42 | title: { type: `String!`, }, 43 | description: { type: `String`, }, 44 | slug: { type: `String!`, }, 45 | headings: { 46 | type: `[MdxHeadingMdx!]`, 47 | resolve: mdxResolverPassthrough(`headings`), 48 | }, 49 | excerpt: { 50 | type: `String!`, 51 | args: { 52 | pruneLength: { 53 | type: `Int`, 54 | defaultValue: 140, 55 | }, 56 | }, 57 | resolve: mdxResolverPassthrough(`excerpt`), 58 | }, 59 | body: { 60 | type: `String!`, 61 | resolve: mdxResolverPassthrough(`body`), 62 | }, 63 | }, 64 | interfaces: [`Node`], 65 | }) 66 | ) 67 | } 68 | 69 | exports.onCreateNode = async ({ node, actions, getNode, createNodeId }) => { 70 | const { createNode, createParentChildLink, createRedirect } = actions 71 | 72 | const isReadme = name => /readme/i.test(name) 73 | const isIndexPath = name => name === 'index' || isReadme(name) 74 | 75 | const toOriginalDocsPath = node => { 76 | const { dir } = path.parse(node.relativePath) 77 | const fullPath = [ 78 | basePath, 79 | dir, 80 | node.name 81 | ] 82 | return joinPath(...fullPath).replace(/\\+/g, ``) 83 | } 84 | const toDocsPath = node => { 85 | const { dir } = path.parse(node.relativePath) 86 | const fullPath = [ 87 | basePath, 88 | dir, 89 | !isIndexPath(node.name) && node.name 90 | ].filter(Boolean) 91 | return joinPath(...fullPath).replace(/\\+/g, ``) 92 | } 93 | 94 | // Make sure it's an MDX node 95 | if (node.internal.type !== `Mdx`) { 96 | return 97 | } 98 | 99 | // Create source field (according to contentPath) 100 | const fileNode = getNode(node.parent) 101 | const source = fileNode.sourceInstanceName 102 | 103 | if (node.internal.type === `Mdx` && source === contentPath) { 104 | const slug = toDocsPath(fileNode) 105 | 106 | // Redirect file/path/readme to file/path/ in order to handle 107 | // potential links that are meant to work with GitHub-style index 108 | // pages. 109 | if (isReadme(fileNode.name)) { 110 | createRedirect({ 111 | fromPath: toOriginalDocsPath(fileNode), 112 | toPath: toDocsPath(fileNode), 113 | isPermanent: true 114 | }) 115 | } 116 | 117 | const title = node.frontmatter.title 118 | const description = node.frontmatter.description 119 | 120 | const fieldData = { title, description, slug } 121 | const mdxDocId = createNodeId(`${node.id} >>> Docs`) 122 | 123 | await createNode({ 124 | ...fieldData, 125 | id: mdxDocId, 126 | parent: node.id, 127 | children: [], 128 | internal: { 129 | type: `Docs`, 130 | contentDigest: crypto 131 | .createHash(`md5`) 132 | .update(JSON.stringify(fieldData)) 133 | .digest(`hex`), 134 | content: JSON.stringify(fieldData), 135 | description: `Docs`, 136 | }, 137 | }) 138 | 139 | createParentChildLink({ parent: node, child: getNode(mdxDocId) }) 140 | } 141 | } 142 | 143 | exports.createPages = async ({ graphql, actions, reporter }) => { 144 | const { createPage } = actions 145 | 146 | const result = await graphql(` 147 | { 148 | docs: allDocs { 149 | nodes { 150 | id 151 | slug 152 | } 153 | } 154 | } 155 | `) 156 | 157 | if (result.errors) { 158 | reporter.panic(result.errors) 159 | } 160 | 161 | const docs = result.data.docs.nodes 162 | 163 | docs.forEach((doc, index) => { 164 | const previous = index === docs.length - 1 ? null : docs[index + 1] 165 | const next = index === 0 ? null : docs[index - 1] 166 | const { slug } = doc 167 | 168 | createPage({ 169 | path: slug, 170 | component: DocTemplate, 171 | context: { 172 | ...doc, 173 | previous, 174 | next, 175 | }, 176 | }) 177 | }) 178 | } 179 | 180 | exports.onCreateWebpackConfig = ({ actions }) => { 181 | actions.setWebpackConfig({ 182 | node: { 183 | fs: 'empty' 184 | } 185 | }) 186 | } 187 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/index.js: -------------------------------------------------------------------------------- 1 | // Noop 2 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gatsby-theme-documentation", 3 | "version": "0.0.27", 4 | "author": "John Otander", 5 | "license": "MIT", 6 | "repository": "johno/gatsby-theme-documentation", 7 | "keywords": [ 8 | "gatsby", 9 | "gatsby-theme", 10 | "gatsby-plugin" 11 | ], 12 | "dependencies": { 13 | "@emotion/core": "10.3.1", 14 | "@mdx-js/mdx": "1.6.22", 15 | "@mdx-js/react": "1.6.22", 16 | "@theme-ui/presets": "0.9.1", 17 | "@theme-ui/prism": "0.3.5", 18 | "@theme-ui/sidenav": "0.9.1", 19 | "gatsby-plugin-mdx": "2.14.2", 20 | "gatsby-plugin-meta-redirect": "1.1.1", 21 | "gatsby-plugin-react-helmet": "4.14.0", 22 | "gatsby-plugin-redirects": "1.0.0", 23 | "gatsby-plugin-theme-ui": "0.3.5", 24 | "gatsby-source-filesystem": "3.14.0", 25 | "is-absolute-url": "4.0.1", 26 | "react-helmet": "6.1.0", 27 | "remark-emoji": "2.2.0", 28 | "remark-slug": "6.1.0", 29 | "theme-ui": "0.2.52" 30 | }, 31 | "devDependencies": { 32 | "gatsby": "3.14.6", 33 | "react": "18.2.0", 34 | "react-dom": "18.2.0" 35 | }, 36 | "peerDependencies": { 37 | "gatsby": "^2.15.24 || ^3.0.0", 38 | "react": "^16.9.0 || ^17.0.0 || ^18.0.0", 39 | "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/readme.md: -------------------------------------------------------------------------------- 1 | # gatsby-theme-documentation 2 | 3 | A minimalist [Gatsby Theme](https://gatsbyjs.org/docs/themes) 4 | for documentation sites built with [MDX](https://mdxjs.com) 5 | and [Theme UI](https://theme-ui.com). 6 | 7 | Get up and running in seconds with a beautiful docs site so 8 | you can do what's more important: **write docs**. 9 | 10 | ![image](https://user-images.githubusercontent.com/1424573/61085901-ace8e980-a3ee-11e9-84d2-45acbb200fea.png) 11 | 12 | ## Features 13 | 14 | - 📑 MDX files for JSX in Markdown 15 | - 🎨 Theme UI-based theming 16 | - 💻 Syntax highlighting 17 | - 📰 [MDX-based sidebar navigation](#customizing-the-sidebar) 18 | - 🛣 [Automatic readme routing](#readme-routing) 19 | - 🧩 [Shortcode support with React components](#shortcodes) 20 | - 🍔 Collapsible menu 21 | - 📱 Mobile friendly 22 | - 🎣 [Custom docs schema](#docs-schema) 23 | 24 | ## Installation 25 | 26 | ``` 27 | yarn add gatsby-theme-documentation 28 | ``` 29 | 30 | ### Install as a starter 31 | 32 | Name | Command 33 | ---- | ------- 34 | [Base](https://github.com/johno/gatsby-starter-documentation) | `gatsby new johno/gatsby-starter-documentation` 35 | [Dark](https://github.com/johno/gatsby-starter-documentation-dark) | `gatsby new johno/gatsby-starter-documentation-dark` 36 | [Tomato](https://github.com/johno/gatsby-starter-documentation-tomato) | `gatsby new johno/gatsby-starter-documentation-tomato` 37 | 38 | [Read the full setup guide](https://johno.com/creating-a-minimalist-docs-site-with-gatsby-and-mdx) 39 | 40 | ## Usage 41 | 42 | ```js 43 | // gatsby-config.js 44 | module.exports = { 45 | plugins: [ 46 | 'gatsby-theme-documentation' 47 | ] 48 | } 49 | ``` 50 | 51 | ### Customizing the sidebar 52 | 53 | `gatsby-theme-documentation` uses a `sidebar.mdx` file to populate the navigation. 54 | In order to customize it you can shadow it by creating a file at 55 | `src/gatsby-theme-documentation/sidebar.mdx`. 56 | 57 | #### Example `sidebar.mdx` 58 | 59 | ```mdx 60 | - [Introduction](/introduction/) 61 | - [Getting Started](/getting-started/) 62 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 63 | ``` 64 | 65 | ### Customizing the header 66 | 67 | Similarly to sidebar customization, you can also change the header content by 68 | writing MDX. You can shadow the default header by creating a file at 69 | `src/gatsby-theme-documentation/header.mdx` 70 | 71 | #### Example `header.mdx` 72 | 73 | ```mdx 74 | # ![Docs Logo](https://contrast.now.sh/white/black?width=80&height=40&text=DOCS) 75 | 76 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 77 | - [Twitter](https://twitter.com/4lpine) 78 | ``` 79 | 80 | ### Adding component shortcodes 81 | 82 | You can add shortcodes to your docs site which can be used throughout 83 | your docs pages by extending the components passed to MDXProvider. You 84 | can do this by using component shadowing and creating the following file 85 | in the root of your project: `src/gatsby-theme-documentation/components.js`. 86 | 87 | #### Example `components.js` 88 | 89 | ```js 90 | import baseComponents from 'gatsby-theme-documentation/src/components' 91 | 92 | import MyCustomH1 from '../components/my-custom-h1' 93 | 94 | export default { 95 | ...baseComponents, 96 | h1: MyCustomH1 97 | } 98 | ``` 99 | 100 | ### Readme routing 101 | 102 | In order to get documents rendered in directories on GitHub, it's common 103 | to specify a `readme.md` similarly to the `index.html` on normal websites. 104 | Since this theme is meant to work seamlessly with docs directories on GitHub, 105 | `file/path/readme.md` will be automatically turned into `/file/path/index.html` 106 | in the built site. Links will also be redirected to support the new url scheme. 107 | 108 | ### Docs schema 109 | 110 | This theme creates a `Docs` type which can be queried as 111 | an individual document or a collection. This data can be 112 | used to create additional pages, create summaries, etc. 113 | 114 | #### Query an individual document 115 | 116 | ```graphql 117 | { 118 | docs(slug: {eq: "/some-page"}) { 119 | slug 120 | body 121 | } 122 | } 123 | ``` 124 | 125 | #### Query a collection 126 | 127 | ```graphql 128 | { 129 | allDocs { 130 | slug 131 | } 132 | } 133 | ``` 134 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/components.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PrismCodeBlock from '@theme-ui/prism' 3 | 4 | export default { 5 | pre: ({ children }) => <>{children}, 6 | code: PrismCodeBlock 7 | } 8 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/components/button.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from 'theme-ui' 3 | 4 | export default props => ( 5 | 64 | 65 | 66 | 67 | 68 | ) 69 | } 70 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/components/layout.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { useState, useRef } from 'react' 3 | import { Global } from '@emotion/core' 4 | import { Styled, Layout, Main, Container, jsx, useThemeUI } from 'theme-ui' 5 | 6 | import Header from './header' 7 | import Sidenav from './sidenav' 8 | 9 | export default ({ children }) => { 10 | const { theme: { colors = {} } } = useThemeUI() 11 | const [menuOpen, setMenuOpen] = useState(false) 12 | const nav = useRef(null) 13 | 14 | const bodyStyles = { 15 | body: { 16 | margin: 0, 17 | color: colors.text, 18 | backgroundColor: colors.background 19 | } 20 | } 21 | 22 | return ( 23 | 24 | 25 | 26 |
27 |
28 | 29 |
36 | setMenuOpen(true)} 40 | onBlur={() => setMenuOpen(false)} 41 | onClick={() => setMenuOpen(false)} 42 | /> 43 |
49 | {children} 50 |
51 |
52 |
53 |
54 | 55 | 56 | ) 57 | } 58 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/components/menu-button.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from 'theme-ui' 3 | 4 | const Burger = ({ size = '1em' }) => ( 5 | 16 | 17 | 18 | ) 19 | 20 | export default props => ( 21 | 45 | ) 46 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/components/nav-link.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from 'theme-ui' 3 | import { Link } from 'gatsby' 4 | import isAbsoluteURL from 'is-absolute-url' 5 | 6 | const styles = { 7 | display: 'block', 8 | px: 2, 9 | py: 2, 10 | color: 'inherit', 11 | textDecoration: 'none', 12 | fontSize: 1, 13 | fontWeight: 'bold', 14 | '&.active': { 15 | color: 'primary', 16 | }, 17 | } 18 | 19 | export default ({ href, children, ...props }) => { 20 | const isExternal = isAbsoluteURL(href || '') 21 | 22 | if (isExternal) { 23 | return {children} 24 | } 25 | 26 | const to = props.to || href 27 | 28 | return ( 29 | 35 | {children} 36 | 37 | ) 38 | } 39 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/components/seo.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useStaticQuery, graphql } from 'gatsby' 3 | import { Helmet } from 'react-helmet' 4 | 5 | export default ({ title, description }) => { 6 | const { site: { siteMetadata } } = useStaticQuery(graphql` 7 | { 8 | site { 9 | siteMetadata { 10 | title 11 | description 12 | } 13 | } 14 | } 15 | `) 16 | 17 | const fullTitle = title ? `${title} | ${siteMetadata.title}` : siteMetadata.title 18 | 19 | return ( 20 | 21 | {fullTitle} 22 | 23 | 24 | 25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/components/sidenav.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from 'theme-ui' 3 | import { AccordionNav } from '@theme-ui/sidenav' 4 | import NavLink from './nav-link' 5 | import Sidebar from '../sidebar.mdx' 6 | 7 | const components = { 8 | wrapper: AccordionNav, 9 | a: NavLink, 10 | } 11 | 12 | export default props => ( 13 | 25 | ) 26 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/gatsby-plugin-theme-ui/components.js: -------------------------------------------------------------------------------- 1 | export { default } from '../components' 2 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/gatsby-plugin-theme-ui/index.js: -------------------------------------------------------------------------------- 1 | export { default } from '../theme' 2 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/header.mdx: -------------------------------------------------------------------------------- 1 | # ![Docs Logo](https://contrast.now.sh/white/black?width=80&height=40&text=DOCS) 2 | 3 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 4 | - [Twitter](https://twitter.com/4lpine) 5 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/sidebar.mdx: -------------------------------------------------------------------------------- 1 | - Hello, world! 2 | - Create a `src/gatsby-theme-documentation/sidebar.mdx` file! 3 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/templates/doc.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { graphql } from "gatsby" 3 | 4 | import Doc from '../components/doc' 5 | 6 | export default ({ data }) => ( 7 | 8 | ) 9 | 10 | export const pageQuery = graphql` 11 | query($id: String!) { 12 | doc: docs(id: { eq: $id }) { 13 | id 14 | title 15 | description 16 | excerpt 17 | body 18 | headings { 19 | value 20 | } 21 | } 22 | } 23 | ` 24 | -------------------------------------------------------------------------------- /packages/gatsby-theme-documentation/src/theme.js: -------------------------------------------------------------------------------- 1 | const heading = { 2 | fontFamily: 'heading', 3 | fontWeight: 'heading', 4 | lineHeight: 'heading', 5 | a: { 6 | color: 'inherit', 7 | textDecoration: 'none' 8 | } 9 | } 10 | 11 | export default { 12 | initialColorMode: 'light', 13 | colors: { 14 | text: '#000', 15 | background: '#fff', 16 | primary: '#33e', 17 | secondary: '#119', 18 | muted: '#f6f6f6', 19 | highlight: '#ffffcc', 20 | gray: '#777', 21 | purple: '#609', 22 | modes: { 23 | dark: { 24 | text: '#fff', 25 | background: '#060606', 26 | primary: '#3cf', 27 | secondary: '#e0f', 28 | muted: '#191919', 29 | highlight: '#ffffcc', 30 | gray: '#999', 31 | purple: '#c0f', 32 | }, 33 | deep: { 34 | text: 'hsl(210, 50%, 96%)', 35 | background: 'hsl(230, 25%, 18%)', 36 | primary: 'hsl(260, 100%, 80%)', 37 | secondary: 'hsl(290, 100%, 80%)', 38 | purple: 'hsl(290, 100%, 80%)', 39 | muted: 'hsla(230, 20%, 0%, 20%)', 40 | gray: 'hsl(210, 50%, 60%)', 41 | }, 42 | swiss: { 43 | text: 'hsl(10, 20%, 20%)', 44 | background: 'hsl(10, 10%, 98%)', 45 | primary: 'hsl(10, 80%, 50%)', 46 | secondary: 'hsl(10, 60%, 50%)', 47 | purple: 'hsl(250, 60%, 30%)', 48 | muted: 'hsl(10, 20%, 94%)', 49 | gray: 'hsl(10, 20%, 50%)', 50 | }, 51 | }, 52 | }, 53 | fonts: { 54 | body: 'system-ui, sans-serif', 55 | heading: 'inherit', 56 | monospace: 'Menlo, monospace', 57 | }, 58 | fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72], 59 | fontWeights: { 60 | body: '400', 61 | heading: '700', 62 | }, 63 | lineHeights: { 64 | body: 1.5, 65 | heading: 1.25, 66 | }, 67 | textStyles: { 68 | heading, 69 | display: { 70 | variant: 'textStyles.heading', 71 | fontSize: [5, 6, 7], 72 | mt: 3, 73 | }, 74 | }, 75 | styles: { 76 | Container: { 77 | p: 3, 78 | maxWidth: 1024, 79 | }, 80 | root: { 81 | fontFamily: 'body', 82 | lineHeight: 'body', 83 | fontWeight: 'body', 84 | }, 85 | h1: { 86 | variant: 'textStyles.display', 87 | }, 88 | h2: { 89 | variant: 'textStyles.heading', 90 | fontSize: 5, 91 | }, 92 | h3: { 93 | variant: 'textStyles.heading', 94 | fontSize: 4, 95 | }, 96 | h4: { 97 | variant: 'textStyles.heading', 98 | fontSize: 3, 99 | }, 100 | h5: { 101 | variant: 'textStyles.heading', 102 | fontSize: 2, 103 | }, 104 | h6: { 105 | variant: 'textStyles.heading', 106 | fontSize: 1, 107 | }, 108 | a: { 109 | color: 'primary', 110 | '&:hover': { 111 | color: 'secondary', 112 | }, 113 | }, 114 | pre: { 115 | variant: 'prism', 116 | fontFamily: 'monospace', 117 | fontSize: 1, 118 | p: 3, 119 | color: 'text', 120 | bg: 'muted', 121 | overflow: 'auto', 122 | code: { 123 | color: 'inherit', 124 | }, 125 | }, 126 | code: { 127 | fontFamily: 'monospace', 128 | color: 'secondary', 129 | fontSize: 1, 130 | }, 131 | inlineCode: { 132 | fontFamily: 'monospace', 133 | color: 'secondary', 134 | bg: 'muted', 135 | }, 136 | table: { 137 | width: '100%', 138 | my: 4, 139 | borderCollapse: 'separate', 140 | borderSpacing: 0, 141 | [['th', 'td']]: { 142 | textAlign: 'left', 143 | py: '4px', 144 | pr: '4px', 145 | pl: 0, 146 | borderColor: 'muted', 147 | borderBottomStyle: 'solid', 148 | }, 149 | }, 150 | th: { 151 | verticalAlign: 'bottom', 152 | borderBottomWidth: '2px', 153 | }, 154 | td: { 155 | verticalAlign: 'top', 156 | borderBottomWidth: '1px', 157 | }, 158 | hr: { 159 | border: 0, 160 | borderBottom: '1px solid', 161 | borderColor: 'muted', 162 | } 163 | }, 164 | prism: { 165 | [[ 166 | '.comment', 167 | '.prolog', 168 | '.doctype', 169 | '.cdata', 170 | '.punctuation', 171 | '.operator', 172 | '.entity', 173 | '.url', 174 | ]]: { 175 | color: 'gray', 176 | }, 177 | '.comment': { 178 | fontStyle: 'italic', 179 | }, 180 | [[ 181 | '.property', 182 | '.tag', 183 | '.boolean', 184 | '.number', 185 | '.constant', 186 | '.symbol', 187 | '.deleted', 188 | '.function', 189 | '.class-name', 190 | '.regex', 191 | '.important', 192 | '.variable', 193 | ]]: { 194 | color: 'purple', 195 | }, 196 | [['.atrule', '.attr-value', '.keyword']]: { 197 | color: 'primary', 198 | }, 199 | [[ 200 | '.selector', 201 | '.attr-name', 202 | '.string', 203 | '.char', 204 | '.builtin', 205 | '.inserted', 206 | ]]: { 207 | color: 'secondary', 208 | }, 209 | }, 210 | } 211 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | packages/gatsby-theme-documentation/readme.md -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "automerge": true, 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /src/gatsby-theme-documentation/header.mdx: -------------------------------------------------------------------------------- 1 | # ![Docs Logo](https://contrast.now.sh/white/black?width=80&height=40&text=DOCS) 2 | 3 | - [GitHub](https://github.com/johno/gatsby-theme-documentation) 4 | - [Twitter](https://twitter.com/4lpine) 5 | -------------------------------------------------------------------------------- /src/gatsby-theme-documentation/sidebar.mdx: -------------------------------------------------------------------------------- 1 | - [Introduction](/) 2 | - [Getting Started](/getting-started) 3 | - [Customizing](/customizing) 4 | - [Motivation](/motivation) 5 | - [License](/license) 6 | -------------------------------------------------------------------------------- /src/gatsby-theme-documentation/theme.js: -------------------------------------------------------------------------------- 1 | const heading = { 2 | fontFamily: 'heading', 3 | fontWeight: 'heading', 4 | lineHeight: 'heading', 5 | a: { 6 | color: 'inherit', 7 | textDecoration: 'none' 8 | } 9 | } 10 | 11 | export default { 12 | initialColorMode: 'light', 13 | colors: { 14 | text: '#000', 15 | background: '#fff', 16 | primary: '#33e', 17 | secondary: '#119', 18 | muted: '#f6f6f6', 19 | highlight: '#ffffcc', 20 | gray: '#777', 21 | purple: '#609', 22 | modes: { 23 | dark: { 24 | text: '#fff', 25 | background: '#060606', 26 | primary: '#3cf', 27 | secondary: '#e0f', 28 | muted: '#191919', 29 | highlight: '#ffffcc', 30 | gray: '#999', 31 | purple: '#c0f', 32 | }, 33 | deep: { 34 | text: 'hsl(210, 50%, 96%)', 35 | background: 'hsl(230, 25%, 18%)', 36 | primary: 'hsl(260, 100%, 80%)', 37 | secondary: 'hsl(290, 100%, 80%)', 38 | purple: 'hsl(290, 100%, 80%)', 39 | muted: 'hsla(230, 20%, 0%, 20%)', 40 | gray: 'hsl(210, 50%, 60%)', 41 | }, 42 | swiss: { 43 | text: 'hsl(10, 20%, 20%)', 44 | background: 'hsl(10, 10%, 98%)', 45 | primary: 'hsl(10, 80%, 50%)', 46 | secondary: 'hsl(10, 60%, 50%)', 47 | purple: 'hsl(250, 60%, 30%)', 48 | muted: 'hsl(10, 20%, 94%)', 49 | gray: 'hsl(10, 20%, 50%)', 50 | }, 51 | }, 52 | }, 53 | fonts: { 54 | body: 'system-ui, sans-serif', 55 | heading: 'inherit', 56 | monospace: 'Menlo, monospace', 57 | }, 58 | fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72], 59 | fontWeights: { 60 | body: '400', 61 | heading: '700', 62 | }, 63 | lineHeights: { 64 | body: 1.5, 65 | heading: 1.25, 66 | }, 67 | textStyles: { 68 | heading, 69 | display: { 70 | variant: 'textStyles.heading', 71 | fontSize: [5, 6, 7], 72 | mt: 3, 73 | }, 74 | }, 75 | styles: { 76 | Container: { 77 | p: 3, 78 | maxWidth: 1024, 79 | }, 80 | root: { 81 | fontFamily: 'body', 82 | lineHeight: 'body', 83 | fontWeight: 'body', 84 | }, 85 | h1: { 86 | variant: 'textStyles.display', 87 | }, 88 | h2: { 89 | variant: 'textStyles.heading', 90 | fontSize: 5, 91 | }, 92 | h3: { 93 | variant: 'textStyles.heading', 94 | fontSize: 4, 95 | }, 96 | h4: { 97 | variant: 'textStyles.heading', 98 | fontSize: 3, 99 | }, 100 | h5: { 101 | variant: 'textStyles.heading', 102 | fontSize: 2, 103 | }, 104 | h6: { 105 | variant: 'textStyles.heading', 106 | fontSize: 1, 107 | }, 108 | a: { 109 | color: 'primary', 110 | '&:hover': { 111 | color: 'secondary', 112 | }, 113 | }, 114 | p: { 115 | fontSize: [3, 4, 4] 116 | }, 117 | li: { 118 | fontSize: [3, 4, 4] 119 | }, 120 | pre: { 121 | variant: 'prism', 122 | fontFamily: 'monospace', 123 | fontSize: 3, 124 | p: 3, 125 | color: 'text', 126 | bg: 'muted', 127 | overflow: 'auto', 128 | code: { 129 | color: 'inherit', 130 | }, 131 | }, 132 | code: { 133 | fontFamily: 'monospace', 134 | color: 'secondary', 135 | fontSize: 3, 136 | }, 137 | inlineCode: { 138 | fontFamily: 'monospace', 139 | color: 'secondary', 140 | bg: 'muted', 141 | }, 142 | table: { 143 | width: '100%', 144 | my: 4, 145 | fontSize: 3, 146 | borderCollapse: 'separate', 147 | borderSpacing: 0, 148 | [['th', 'td']]: { 149 | textAlign: 'left', 150 | py: '4px', 151 | pr: '4px', 152 | pl: 0, 153 | borderColor: 'muted', 154 | borderBottomStyle: 'solid', 155 | }, 156 | }, 157 | th: { 158 | verticalAlign: 'bottom', 159 | borderBottomWidth: '2px', 160 | }, 161 | td: { 162 | verticalAlign: 'top', 163 | borderBottomWidth: '1px', 164 | }, 165 | hr: { 166 | border: 0, 167 | borderBottom: '1px solid', 168 | borderColor: 'muted', 169 | }, 170 | img: { 171 | maxWidth: '100%' 172 | } 173 | }, 174 | prism: { 175 | [[ 176 | '.comment', 177 | '.prolog', 178 | '.doctype', 179 | '.cdata', 180 | '.punctuation', 181 | '.operator', 182 | '.entity', 183 | '.url', 184 | ]]: { 185 | color: 'gray', 186 | }, 187 | '.comment': { 188 | fontStyle: 'italic', 189 | }, 190 | [[ 191 | '.property', 192 | '.tag', 193 | '.boolean', 194 | '.number', 195 | '.constant', 196 | '.symbol', 197 | '.deleted', 198 | '.function', 199 | '.class-name', 200 | '.regex', 201 | '.important', 202 | '.variable', 203 | ]]: { 204 | color: 'purple', 205 | }, 206 | [['.atrule', '.attr-value', '.keyword']]: { 207 | color: 'primary', 208 | }, 209 | [[ 210 | '.selector', 211 | '.attr-name', 212 | '.string', 213 | '.char', 214 | '.builtin', 215 | '.inserted', 216 | ]]: { 217 | color: 'secondary', 218 | }, 219 | }, 220 | } 221 | --------------------------------------------------------------------------------