gatsby-plugin-mdx-code-demo
Create inline code demos with MDX. This plugin is heavily inspired by material-ui’s wonderful documentation. It allows you to write demos like theirs.
Breaking changes in v2. The usage is radically simplified compared to v0 and v1, but they are totally uncompatible.
Example usage
To enable a CodeDemo just add the codeDemo metadata after the language in your MDX code block. The React component you want to demo needs to be default exported.
---
title: Buttons Documentation
---
## Buttons
Here is an example Button in action:
```jsx codeDemo
import React from 'react';
import Button from '@material-ui/core/Button';
function OutlinedButtons() {
return (
<>
<Button variant="outlined">Default</Button>
<Button variant="outlined" color="primary">
Primary
</Button>
<Button variant="outlined" color="secondary">
Secondary
</Button>
<Button variant="outlined" disabled>
Disabled
</Button>
<Button variant="outlined" href="#outlined-buttons">
Link
</Button>
</>
);
}
// Demos must be default exported
export default OutlinedButtons;
```Install
npm install --save gatsby-plugin-mdx gatsby-plugin-mdx-code-demoSetup
- Add
gastby-plugin-mdx-code-demoto yourgastby-config.jsfile
// In your gatsby-config.js
plugins: [
{
resolve: 'gatsby-plugin-mdx',
options: {
gatsbyRemarkPlugins: ['gatsby-plugin-mdx-code-demo'],
},
},
];- Create a
CodeDemocomponent. To highlight thecode blockyou can useprism-react-renderer.
// src/components/CodeDemo.js
import React from 'react';
// This is a container component to render our demos and their code
export function CodeDemo(props) {
const { code, children } = props;
return (
<div>
<pre>{code}</pre> {/* code block as a string */}
<div>
{children} {/* the react rendered demo */}
</div>
</div>
);
}- Make
CodeDemoavailable through yourMDXProvider
// src/components/Layout.js
import React from 'react';
import { MDXProvider } from '@mdx-js/react';
import { CodeDemo } from './CodeDemo';
function Layout(props) {
const mdxComponents = {
h1: (props) => <h1 {...props} />,
// more components
CodeDemo: (props) => <CodeDemo {...props} />,
};
return <MDXProvider components={mdxComponents}>{props.children}</MDXProvider>;
}
export default Layout;FAQ?
-
How does it differ from
react-live?
react-livewill let you live edit your views, but it bringsbubleas a dependency. All ofgatsby-plugin-mdx-code-demo’s magic happens at build time, so there is no dependency included. If you don’t expect your users to edit your demos in real timereact-liveis probably overkill. -
How does it differ from
react-view?
The same as above applies toreact-view, exceptreact-viewbrings inbabelas a dependency. Also,react-viewdoesn’t currently work with Gatsby.