import React, { useEffect, useRef, useState } from 'react'; import mermaid from 'mermaid'; interface Props { chart: string; theme?: 'light' | 'dark'; } const MermaidDiagram: React.FC = ({ chart, theme = 'light' }) => { const containerRef = useRef(null); const [svg, setSvg] = useState(''); useEffect(() => { mermaid.initialize({ startOnLoad: false, theme: theme === 'dark' ? 'dark' : 'default', securityLevel: 'loose', fontFamily: 'Inter, sans-serif', }); }, [theme]); useEffect(() => { const renderChart = async () => { if (!containerRef.current) return; try { const id = `mermaid-${Math.random().toString(36).substr(2, 9)}`; // Mermaid render returns an object with svg property in newer versions const { svg } = await mermaid.render(id, chart); setSvg(svg); } catch (error) { console.error('Mermaid failed to render:', error); setSvg(''); // Clear on error } }; renderChart(); }, [chart, theme]); if (!svg) return null; return (
); }; export default MermaidDiagram;