refac/fix: mermaid

This commit is contained in:
Timothy Jaeryang Baek 2025-10-21 17:03:04 -04:00
parent 0a78ceef6d
commit 9942de8011
2 changed files with 20 additions and 3 deletions

View file

@ -6,7 +6,12 @@
import PyodideWorker from '$lib/workers/pyodide.worker?worker';
import { executeCode } from '$lib/apis/utils';
import { copyToClipboard, renderMermaidDiagram, renderVegaVisualization } from '$lib/utils';
import {
copyToClipboard,
initMermaid,
renderMermaidDiagram,
renderVegaVisualization
} from '$lib/utils';
import 'highlight.js/styles/github-dark.min.css';
@ -323,11 +328,19 @@
};
};
let mermaid = null;
const renderMermaid = async (code) => {
if (!mermaid) {
mermaid = await initMermaid();
}
return await renderMermaidDiagram(mermaid, code);
};
const render = async () => {
onUpdate(token);
if (lang === 'mermaid' && (token?.raw ?? '').slice(-4).includes('```')) {
try {
mermaidHtml = await renderMermaidDiagram(code);
mermaidHtml = await renderMermaid(code);
} catch (error) {
console.error('Failed to render mermaid diagram:', error);
const errorMsg = error instanceof Error ? error.message : String(error);

View file

@ -1593,13 +1593,17 @@ export const decodeString = (str: string) => {
}
};
export const renderMermaidDiagram = async (code: string) => {
export const initMermaid = async () => {
const { default: mermaid } = await import('mermaid');
mermaid.initialize({
startOnLoad: false, // Should be false when using render API
theme: document.documentElement.classList.contains('dark') ? 'dark' : 'default',
securityLevel: 'loose'
});
return mermaid;
};
export const renderMermaidDiagram = async (mermaid, code: string) => {
const parseResult = await mermaid.parse(code, { suppressErrors: false });
if (parseResult) {
const { svg } = await mermaid.render(`mermaid-${uuidv4()}`, code);