mui-markdown
uses markdown-to-jsx and MUI(formerly material-ui) to help you render MD/MDX files with MUI components.
# with npm
npm i mui-markdown@latest
# with yarn
yarn add mui-markdown
The example below will render the h1
tag using MUI Typography
component.
import React from 'react';
import { MuiMarkdown } from 'mui-markdown';
// You can also use
// import MuiMarkdown from 'mui-markdown';
// But the first approach is recommended.
const App = () => {
return <MuiMarkdown>{`# Hello markdown!`}</MuiMarkdown>;
};
export default App;
Props available for MuiMarkdown
component:
Name | Type | Default | Optional or Mandatory |
---|---|---|---|
key | React.key | - | optional |
children | string | - | optional |
overrides | MarkdownToJSX.Overrides | defaultOverrides | optional |
options | MarkdownToJSX.Options | - | optional |
codeWrapperStyles | CSSProperties | - | optional |
prismTheme | PrismTheme | vsDark | optional |
Highlight | HighlightComponent | - | optional |
themes | HighlightThemes | - | optional |
hideLineNumbers | boolean | false | optional |
NOTE: You cannot use overrides and options at the same time.
You can optionally override a tag to use your component.
An example of override with a regular HTML tag:
JS and JSX:
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
const App = () => {
return (
<MuiMarkdown
overrides={{
...getOverrides({}), // This will keep the other default overrides.
h1: {
component: 'p',
props: {
style: { color: 'red' },
},
},
}}
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;
TS and TSX:
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
const App = () => {
return (
<MuiMarkdown
overrides={{
...getOverrides(), // This will keep the other default overrides.
h1: {
component: 'p',
props: {
style: { color: 'red' },
} as React.HTMLProps<HTMLParagraphElement>,
},
}}
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;
An example of override with your component:
JS and JSX:
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
import CustomTypography from './components/CustomTypography';
const App = () => {
return (
<MuiMarkdown
overrides={{
...getOverrides(), // This will keep the other default overrides.
h1: {
component: CustomTypography,
props: {
// custom props
},
},
}}
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;
TS and TSX:
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
import CustomTypography, {
CustomTypographyProps,
} from './components/CustomTypography';
const App = () => {
return (
<MuiMarkdown
overrides={{
...getOverrides(), // This will keep the other default overrides.
h1: {
component: CustomTypography,
props: {
// custom props
} as CustomTypographyProps,
},
}}
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;
You can read about options in the markdown-to-jsx docs.
Note: If you want to override something and also need to set some options, add the overrides
property in the options
. Don't use overrides and options property together on the MuiMarkdown
component.
You can pass your desired styles for the syntax highlighter component. These are the default styles:
...
borderRadius: '0.5rem',
padding: '0.5rem 0.75rem',
overflow: 'auto',
...
mui-markdown
uses prism-react-renderer to highlight code blocks. As this is an optional dependencies, you need to install it if you want to have a syntax highlighter. So to highlight your code:
- First install
prism-react-renderer
# with npm
npm i prism-react-renderer
# with yarn
yarn add prism-react-renderer
- Then pass the
Highlight
and thethemes
to theMuiMarkdown
component
import React from 'react';
import { MuiMarkdown } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';
const App = () => {
return (
<MuiMarkdown
Highlight={Highlight}
themes={themes}
prismTheme={themes.github}
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;
With the prismTheme
property you can change the highlight theme.
import React from 'react';
import { MuiMarkdown } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';
const App = () => {
return (
<MuiMarkdown
Highlight={Highlight}
themes={themes}
prismTheme={themes.github}
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;
Also to disable the line numbers in the code block you can use the hideLineNumbers
.
import React from 'react';
import { MuiMarkdown } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';
const App = () => {
return (
<MuiMarkdown
Highlight={Highlight}
themes={themes}
prismTheme={themes.github}
hideLineNumbers
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;
When you use overrides, you can have the syntax highlight by passing the Highlight
, themes
, and themes.github
(or your favorite one) to the getOverrides
function.
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';
const App = () => {
return (
<MuiMarkdown
overrides={{
...getOverrides({ Highlight, themes, theme: themes.github }), // This will keep the other default overrides.
h1: {
component: 'p',
props: {
style: { color: 'red' },
},
},
}}
>
{`# Hello markdown!`}
</MuiMarkdown>
);
};
export default App;