{"version":3,"sources":["../src/mermaid/index.tsx"],"names":["React","jsx"],"mappings":"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","file":"mermaid.cjs","sourcesContent":["/**\n * stream-md/mermaid — Mermaid diagram rendering (lazy).\n *\n * Detects ` ```mermaid ` fenced blocks and renders them with Mermaid once\n * the block has closed. Mermaid is an *optional* peer dependency.\n *\n * @example\n * ```tsx\n * import { StreamMD } from 'stream-md';\n * import { mermaidBlockPlugin } from 'stream-md/mermaid';\n *\n * <StreamMD text={text} blockPlugins={[mermaidBlockPlugin]} />\n * ```\n *\n * Mermaid blocks won't render until they're complete — streaming partial\n * diagrams would just show parse errors.\n */\n\nimport * as React from \"react\";\nimport type { BlockPlugin } from \"../parser/types\";\n\nlet mermaidPromise: Promise<typeof import(\"mermaid\")> | null = null;\n\nasync function getMermaid(): Promise<typeof import(\"mermaid\")> {\n  if (!mermaidPromise) {\n    mermaidPromise = import(\"mermaid\").then((m) => {\n      // Initialize once.\n      try {\n        m.default.initialize({\n          startOnLoad: false,\n          securityLevel: \"strict\",\n          theme: \"default\",\n        });\n      } catch {\n        /* already initialized */\n      }\n      return m;\n    });\n  }\n  return mermaidPromise;\n}\n\nlet idCounter = 0;\n\n/**\n * Block plugin: matches ` ```mermaid ` opening fence. The standard\n * code-fence parser closes it on ` ``` ` automatically.\n *\n * Note: this plugin only fires when the parser sees the opening line as a\n * fresh block. The default code-fence rule will produce a `code` block\n * with language=\"mermaid\"; this plugin upgrades it to a `custom` block\n * with our renderer attached.\n */\nexport const mermaidBlockPlugin: BlockPlugin = {\n  name: \"mermaid\",\n  openMatch(line) {\n    const m = line.match(/^( {0,3})(`{3,}|~{3,})\\s*mermaid\\s*$/i);\n    if (!m) return null;\n    return {\n      type: \"custom\",\n      content: \"\",\n      meta: { pluginName: \"mermaid\", language: \"mermaid\" },\n    };\n  },\n  isClose(line) {\n    return /^( {0,3})(`{3,}|~{3,})\\s*$/.test(line);\n  },\n  transformLine(line) {\n    return line;\n  },\n  render(block) {\n    return <MermaidDiagram source={block.content} closed={block.closed} />;\n  },\n};\n\nfunction MermaidDiagram({\n  source,\n  closed,\n}: {\n  source: string;\n  closed: boolean;\n}): React.JSX.Element {\n  const [svg, setSvg] = React.useState<string | null>(null);\n  const [error, setError] = React.useState<string | null>(null);\n  const idRef = React.useRef<string>(`smd-mermaid-${++idCounter}`);\n\n  React.useEffect(() => {\n    if (!closed) return;\n    let cancelled = false;\n    void getMermaid().then(async (mod) => {\n      if (cancelled) return;\n      try {\n        const { svg: out } = await mod.default.render(idRef.current, source);\n        if (!cancelled) setSvg(out);\n      } catch (e) {\n        if (!cancelled) setError(String(e));\n      }\n    });\n    return () => {\n      cancelled = true;\n    };\n  }, [source, closed]);\n\n  if (!closed) {\n    return (\n      <pre className=\"smd-pre smd-mermaid-streaming\">\n        <code className=\"smd-code language-mermaid\">{source}</code>\n      </pre>\n    );\n  }\n  if (error) {\n    return (\n      <pre className=\"smd-pre smd-mermaid-error\" title={error}>\n        <code>{source}</code>\n      </pre>\n    );\n  }\n  if (svg === null) {\n    return <div className=\"smd-mermaid-loading\">Rendering diagram…</div>;\n  }\n  return (\n    <div className=\"smd-mermaid\" dangerouslySetInnerHTML={{ __html: svg }} />\n  );\n}\n"]}