# mdx-deck ![](https://s3.amazonaws.com/jxnblk/mdx-deck.gif) [MDX][]-based presentation decks (**Beta**) [![Build Status][badge]][travis] [![Version][version-badge]][npm] [![Downloads][downloads-badge]][npm] [badge]: https://img.shields.io/travis/jxnblk/mdx-deck.svg?style=flat-square [travis]: https://travis-ci.org/jxnblk/mdx-deck [version-badge]: https://img.shields.io/npm/v/mdx-deck.svg?style=flat-square [downloads-badge]: https://img.shields.io/npm/dw/mdx-deck.svg?style=flat-square [npm]: https://npmjs.com/package/mdx-deck ```sh npm i -D mdx-deck ``` - :memo: Write presentations in markdown - :atom_symbol: Import and use React components - :nail_care: Customizable [themes](#theming) and [components](#custom-components) - :zero: Zero-config CLI - :tipping_hand_woman: [Presenter mode](#presenter-mode) - :notebook: [Speaker notes](#speaker-notes) [View demo](https://jxnblk.com/mdx-deck) ## Getting Started Create an [MDX][] file and separate each slide with `---`. ````mdx # This is the title of my deck --- # About Me --- ```jsx ``` --- import Demo from './components/Demo' --- # The end ```` Add a run script to your `package.json` with the mdx-deck CLI pointing to the `.mdx` file to start the dev server: ```json "scripts": { "start": "mdx-deck deck.mdx" } ``` Start the dev server: ```sh npm start ``` ### Video Tutorial For a video introduction, see this [egghead tutorial][egghead] by [@andrewdelprete](https://github.com/andrewdelprete). [egghead]: https://egghead.io/lessons/react-build-a-slide-deck-with-mdx-deck-using-markdown-react ## Usage MDX can use Markdown syntax and render React components with JSX. ### Imports To import components, use ES import syntax separated with empty lines from any markdown or JSX syntax. ```mdx import { Box } from 'grid-styled' Hello ``` ### Theming mdx-deck uses [styled-components][] for styling. ### Built-in Themes mdx-deck includes several built-in themes to change the look and feel of the presentation. Export `theme` from your MDX file to enable a theme. ```mdx export { dark as theme } from 'mdx-deck/themes' # Dark Theme ``` The following themes are available from `mdx-deck/themes`: - `theme`: default theme with white background - `dark`: black background dark theme - `future`: dark theme with Avenir Next - `condensed`: dark theme with Roboto Condensed ### Custom Themes A custom theme can be provided by exporting `theme` from the MDX file. ```mdx export { default as theme } from './theme' # Hello ``` The theme should be an object based on [styled-system][]'s theme schema. ```js // example theme.js export default { font: 'Georgia', monospace: 'Menlo, monospace', fontSizes: [ '0.75em', '1em', '1.5em', '2em', '3em' ], colors: { text: '#000', background: 'transparent', link: '#07c', heading: '#000', quote: '#000', pre: '#f0f', preBackground: '#333', code: '#f0f', codeBackground: 'transparent', }, css: { // apply any styles to the root element }, // custom CSS can be provided to any of the default components: heading: { fontWeight: 400 }, link: { textDecoration: 'none', '&:hover': { textDecoration: 'underline', } } } ``` The following keys are available for theming: - `font`: base font family - `monospace`: font family for `
` and ``
- `fontSizes`: array of font sizes from smallest to largest
- `colors`: object of colors used for MDX components
  - `text`: root foreground color
  - `background`: root background color
  - `link`
  - `heading`
  - `blockquote`
  - `pre`
  - `preBackground`
  - `code`
  - `codeBackground`
- `css`: root CSS object
- `heading`: CSS for all headings
- `h1`: CSS for `

` - `h2`: CSS for `

` - `h3`: CSS for `

` - `paragraph`: CSS for `

` - `link`: CSS for `` - `ul`: CSS for `