|
@@ -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>
|
|
|
)
|
|
|
: (
|