"use client" import { useEffect, useRef, useState } from "react" import { cn } from "@/lib/utils" interface MermaidProps { chart: string className?: string } export function Mermaid({ chart, className }: MermaidProps) { const containerRef = useRef(null) const [error, setError] = useState(null) const [rendered, setRendered] = useState(false) useEffect(() => { let cancelled = false async function render() { try { const mermaid = (await import("mermaid")).default mermaid.initialize({ startOnLoad: false, theme: "default", securityLevel: "strict", fontFamily: 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif', flowchart: { htmlLabels: true, curve: "basis", useMaxWidth: true, }, }) const id = `mmd-${Math.random().toString(36).slice(2, 10)}` const { svg } = await mermaid.render(id, chart) if (!cancelled && containerRef.current) { containerRef.current.innerHTML = svg setRendered(true) } } catch (err) { if (!cancelled) { setError(err instanceof Error ? err.message : "Failed to render diagram") } } } render() return () => { cancelled = true } }, [chart]) if (error) { return (

Diagram failed to render

{error}
) } return (
{!rendered && Loading diagram…}
) }