Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/HPouyanmehr/mui-markdown
mui-markdown helps you render MD/MDX files with MUI components.
https://github.com/HPouyanmehr/mui-markdown
markdown mdx react
Last synced: 3 months ago
JSON representation
mui-markdown helps you render MD/MDX files with MUI components.
- Host: GitHub
- URL: https://github.com/HPouyanmehr/mui-markdown
- Owner: HPouyanmehr
- Created: 2022-01-21T13:42:24.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-14T15:50:34.000Z (4 months ago)
- Last Synced: 2024-08-09T06:39:57.196Z (3 months ago)
- Topics: markdown, mdx, react
- Language: TypeScript
- Homepage:
- Size: 2.28 MB
- Stars: 68
- Watchers: 3
- Forks: 15
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
![Mui Markdown Cover](./.github/assets/mui-markdown.webp)
## About
`mui-markdown` uses [markdown-to-jsx](https://github.com/probablyup/markdown-to-jsx) and [MUI(formerly material-ui)](https://github.com/mui-org/material-ui) to help you render MD/MDX files with MUI components.
## User Guide
### Installation
```bash
# with npm
npm i mui-markdown@latest# with yarn
yarn add mui-markdown
```### Usage
The example below will render the `h1` tag using MUI `Typography` component.
```js
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 {`# Hello markdown!`};
};export default App;
```### Props
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.
### overrides
You can optionally override a tag to use your component.
**An example of override with a regular HTML tag:**
JS and JSX:
```jsx
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';const App = () => {
return (
{`# Hello markdown!`}
);
};export default App;
```TS and TSX:
```tsx
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';const App = () => {
return (
,
},
}}
>
{`# Hello markdown!`}
);
};export default App;
```**An example of override with your component:**
JS and JSX:
```jsx
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
import CustomTypography from './components/CustomTypography';const App = () => {
return (
{`# Hello markdown!`}
);
};export default App;
```TS and TSX:
```tsx
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
import CustomTypography, {
CustomTypographyProps,
} from './components/CustomTypography';const App = () => {
return (
{`# Hello markdown!`}
);
};export default App;
```### options
You can read about options in the [markdown-to-jsx](https://www.npmjs.com/package/markdown-to-jsx#parsing-options) 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.
### codeWrapperStyles
You can pass your desired styles for the syntax highlighter component. These are the default styles:
```tsx
...
borderRadius: '0.5rem',
padding: '0.5rem 0.75rem',
overflow: 'auto',
...
```### Syntax Highlight
`mui-markdown` uses [prism-react-renderer](https://github.com/FormidableLabs/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`
```bash
# with npm
npm i prism-react-renderer# with yarn
yarn add prism-react-renderer
```- Then pass the `Highlight` and the `themes` to the `MuiMarkdown` component
```tsx
import React from 'react';
import { MuiMarkdown } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';const App = () => {
return (
{`# Hello markdown!`}
);
};export default App;
```With the `prismTheme` property you can change the highlight theme.
```tsx
import React from 'react';
import { MuiMarkdown } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';const App = () => {
return (
{`# Hello markdown!`}
);
};export default App;
```Also to disable the line numbers in the code block you can use the `hideLineNumbers`.
```tsx
import React from 'react';
import { MuiMarkdown } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';const App = () => {
return (
{`# Hello markdown!`}
);
};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.
```tsx
import React from 'react';
import { MuiMarkdown, getOverrides } from 'mui-markdown';
import { Highlight, themes } from 'prism-react-renderer';const App = () => {
return (
{`# Hello markdown!`}
);
};export default App;
```## Backers