'use client'; import { useEffect, useId, useState } from 'react'; import { useTheme } from 'next-themes'; export function Mermaid({ chart }: { chart: string }) { const id = useId(); const [svg, setSvg] = useState(''); const { resolvedTheme } = useTheme(); useEffect(() => { let active = true; async function renderChart() { const { default: mermaid } = await import('mermaid'); try { mermaid.initialize({ startOnLoad: false, securityLevel: 'loose', fontFamily: 'inherit', themeCSS: 'margin: 1.5rem auto 0;', theme: resolvedTheme === 'dark' ? 'dark' : 'neutral', }); const { svg: rendered } = await mermaid.render( id.replaceAll(':', ''), chart.replaceAll('\\n', '\n'), ); if (active) setSvg(rendered); } catch (error) { console.error('Error while rendering mermaid', error); } } void renderChart(); return () => { active = false; }; }, [chart, id, resolvedTheme]); return
; }