'use client' import { sanitizeSvg } from '@duck-docs/lib/sanitize-svg' import { cn } from '@gentleduck/libs/cn' import { PreviewPanelDialog } from '@gentleduck/registry-ui/preview-panel' import { Loader } from 'lucide-react' import { useTheme } from 'next-themes' import { useEffect, useMemo, useState } from 'react' export interface IMermaidBlockProps { chart?: string lightSvg?: string darkSvg?: string className?: string __dmcLightSvg__?: string __dmcDarkSvg__?: string __dmcRaw__?: string [key: string]: unknown } export function MermaidBlock(props: IMermaidBlockProps) { const chart = props.chart || props.__dmcRaw__ || '' const preLight = props.lightSvg || props.__dmcLightSvg__ || '' const preDark = props.darkSvg || props.__dmcDarkSvg__ || '' const { resolvedTheme } = useTheme() const [mounted, setMounted] = useState(false) useEffect(() => { setMounted(true) }, []) // SECURITY: the SVG arrives through MDX-routed props typed `[key: string]: // unknown`. Scrub `