|
|
|
|
@ -1,4 +1,5 @@
|
|
|
|
|
import ReactMarkdown from 'react-markdown'
|
|
|
|
|
import ReactEcharts from 'echarts-for-react'
|
|
|
|
|
import 'katex/dist/katex.min.css'
|
|
|
|
|
import RemarkMath from 'remark-math'
|
|
|
|
|
import RemarkBreaks from 'remark-breaks'
|
|
|
|
|
@ -30,6 +31,7 @@ const capitalizationLanguageNameMap: Record<string, string> = {
|
|
|
|
|
mermaid: 'Mermaid',
|
|
|
|
|
markdown: 'MarkDown',
|
|
|
|
|
makefile: 'MakeFile',
|
|
|
|
|
echarts: 'ECharts',
|
|
|
|
|
}
|
|
|
|
|
const getCorrectCapitalizationLanguageName = (language: string) => {
|
|
|
|
|
if (!language)
|
|
|
|
|
@ -107,6 +109,14 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props }
|
|
|
|
|
const match = /language-(\w+)/.exec(className || '')
|
|
|
|
|
const language = match?.[1]
|
|
|
|
|
const languageShowName = getCorrectCapitalizationLanguageName(language || '')
|
|
|
|
|
let chartData = JSON.parse(String('{"title":{"text":"Something went wrong."}}').replace(/\n$/, ''))
|
|
|
|
|
if (language === 'echarts') {
|
|
|
|
|
try {
|
|
|
|
|
chartData = JSON.parse(String(children).replace(/\n$/, ''))
|
|
|
|
|
}
|
|
|
|
|
catch (error) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Use `useMemo` to ensure that `SyntaxHighlighter` only re-renders when necessary
|
|
|
|
|
return useMemo(() => {
|
|
|
|
|
@ -136,19 +146,25 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props }
|
|
|
|
|
</div>
|
|
|
|
|
{(language === 'mermaid' && isSVG)
|
|
|
|
|
? (<Flowchart PrimitiveCode={String(children).replace(/\n$/, '')} />)
|
|
|
|
|
: (<SyntaxHighlighter
|
|
|
|
|
{...props}
|
|
|
|
|
style={atelierHeathLight}
|
|
|
|
|
customStyle={{
|
|
|
|
|
paddingLeft: 12,
|
|
|
|
|
backgroundColor: '#fff',
|
|
|
|
|
}}
|
|
|
|
|
language={match[1]}
|
|
|
|
|
showLineNumbers
|
|
|
|
|
PreTag="div"
|
|
|
|
|
>
|
|
|
|
|
{String(children).replace(/\n$/, '')}
|
|
|
|
|
</SyntaxHighlighter>)}
|
|
|
|
|
: (
|
|
|
|
|
(language === 'echarts')
|
|
|
|
|
? (<div style={{ minHeight: '250px', minWidth: '250px' }}><ReactEcharts
|
|
|
|
|
option={chartData}
|
|
|
|
|
>
|
|
|
|
|
</ReactEcharts></div>)
|
|
|
|
|
: (<SyntaxHighlighter
|
|
|
|
|
{...props}
|
|
|
|
|
style={atelierHeathLight}
|
|
|
|
|
customStyle={{
|
|
|
|
|
paddingLeft: 12,
|
|
|
|
|
backgroundColor: '#fff',
|
|
|
|
|
}}
|
|
|
|
|
language={match[1]}
|
|
|
|
|
showLineNumbers
|
|
|
|
|
PreTag="div"
|
|
|
|
|
>
|
|
|
|
|
{String(children).replace(/\n$/, '')}
|
|
|
|
|
</SyntaxHighlighter>))}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
: (
|
|
|
|
|
|