Spaces:
Sleeping
Sleeping
| import ReactMD from 'react-markdown'; | |
| import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; | |
| import { oneDark } from 'react-syntax-highlighter/dist/esm/styles/prism'; | |
| import type { ReactElement } from 'react'; | |
| interface CodeProps { | |
| node?: any; | |
| inline?: boolean; | |
| className?: string; | |
| children?: React.ReactNode; | |
| } | |
| const CodeBlock = ({ node, inline, className, children, ...props }: CodeProps): ReactElement => { | |
| const match = /language-(\w+)/.exec(className || ''); | |
| return !inline && match ? ( | |
| <SyntaxHighlighter PreTag="div" language={match[1]} style={oneDark} {...props}> | |
| {String(children).replace(/\n$/, '')} | |
| </SyntaxHighlighter> | |
| ) : ( | |
| <code className={className} {...props}> | |
| {children} | |
| </code> | |
| ); | |
| }; | |
| interface IProps { | |
| markdownContent: string; | |
| className?: string; | |
| } | |
| const Markdown = (props: IProps): ReactElement => { | |
| const { markdownContent, className } = props; | |
| return ( | |
| <ReactMD | |
| className={className} | |
| components={{ | |
| code: CodeBlock | |
| }} | |
| > | |
| {markdownContent} | |
| </ReactMD> | |
| ); | |
| }; | |
| export default Markdown; | |