import { useEffect, useRef, useState } from "react"; import mermaid from "mermaid"; mermaid.initialize({ startOnLoad: false, theme: "dark", themeVariables: { primaryColor: "#21262d", primaryTextColor: "#e6edf3", primaryBorderColor: "#30363d", lineColor: "#58a6ff", secondaryColor: "#161b22", tertiaryColor: "#0d1117", fontFamily: "inherit", fontSize: "14px", }, }); interface MermaidProps { chart: string; } export function Mermaid({ chart }: MermaidProps) { const ref = useRef(null); const [svg, setSvg] = useState(""); const [error, setError] = useState(""); useEffect(() => { if (!ref.current) return; const id = `mermaid-${Math.random().toString(36).slice(2, 9)}`; mermaid .render(id, chart) .then(({ svg }) => setSvg(svg)) .catch((err) => setError(err.message || "图表渲染失败")); }, [chart]); if (error) { return (
        {error}
      
); } return (
); }