"use client"; import { useEffect, useRef, useState } from "react"; import mermaid from "mermaid"; import { motion, AnimatePresence } from "framer-motion"; import { Maximize2, Minimize2 } from "lucide-react"; export default function Mermaid({ chart }: { chart: string }) { const [isExpanded, setIsExpanded] = useState(false); const [isRendered, setIsRendered] = useState(false); const containerRef = useRef(null); useEffect(() => { mermaid.initialize({ startOnLoad: false, theme: "dark", securityLevel: "loose", fontFamily: "monospace", }); // Render the chart once. Use a timeout to ensure DOM is stable. const renderChart = async () => { try { await mermaid.contentLoaded(); setIsRendered(true); } catch (err) { console.error("Mermaid render failed:", err); } }; renderChart(); }, [chart]); // Only re-run if the chart string itself changes return (
!isExpanded && setIsExpanded(true)} > {/* Legend */}
Traffic Flow
Service Node
{/* Chart Area */}
{chart}
{/* Fade Overlay */} {!isExpanded && ( )} {/* Toggle Button */}
); }