@arach/arc-viewer 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +29610 -46
- package/dist/index.d.cts +31 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.js +29605 -24
- package/package.json +6 -4
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/themes.ts","../src/autoLayout.ts","../src/ArcDiagram.tsx","../src/mermaid/sequence/parseSequence.ts","../src/mermaid/parseMermaid.ts","../src/mermaid/sequence/layout.ts","../src/mermaid/sequence/theme.ts","../src/mermaid/sequence/parts.tsx","../src/mermaid/sequence/SequenceRenderer.tsx","../src/mermaid/registry.tsx","../src/mermaid/ArcMermaid.tsx","../src/mermaid/ArcMermaidPlayer.tsx"],"names":["NODE_SIZES","id","participantIndex","p","xs","min","max","jsxs","jsx","useMemo","useState","useCallback","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["// Diagram color themes - palettes and background treatments\n// Separate from templates (structural) - themes handle colors only\n\nexport type ThemeId = 'default' | 'warm' | 'cool' | 'mono'\n\nexport interface ColorPalette {\n violet: { border: string; bg: string; icon: string; stroke: string }\n emerald: { border: string; bg: string; icon: string; stroke: string }\n blue: { border: string; bg: string; icon: string; stroke: string }\n amber: { border: string; bg: string; icon: string; stroke: string }\n sky: { border: string; bg: string; icon: string; stroke: string }\n zinc: { border: string; bg: string; icon: string; stroke: string }\n rose: { border: string; bg: string; icon: string; stroke: string }\n orange: { border: string; bg: string; icon: string; stroke: string }\n}\n\nexport interface ThemeBackground {\n container: string // Container background + border classes\n grid: {\n color: string // Dot grid color (CSS color value)\n opacity: number // Grid opacity\n size: number // Grid spacing in px\n }\n}\n\nexport interface Theme {\n id: ThemeId\n name: string\n description: string\n light: {\n palette: ColorPalette\n background: ThemeBackground\n text: { primary: string; secondary: string; muted: string }\n }\n dark: {\n palette: ColorPalette\n background: ThemeBackground\n text: { primary: string; secondary: string; muted: string }\n }\n}\n\n// Default theme - clean and neutral\nconst defaultTheme: Theme = {\n id: 'default',\n name: 'Default',\n description: 'Clean, neutral colors',\n light: {\n palette: {\n violet: { border: 'border-violet-300', bg: 'bg-gradient-to-br from-violet-50 to-violet-100/50', icon: 'text-violet-600', stroke: '#8b5cf6' },\n emerald: { border: 'border-emerald-300', bg: 'bg-gradient-to-br from-emerald-50 to-emerald-100/50', icon: 'text-emerald-600', stroke: '#10b981' },\n blue: { border: 'border-blue-300', bg: 'bg-gradient-to-br from-blue-50 to-blue-100/50', icon: 'text-blue-600', stroke: '#3b82f6' },\n amber: { border: 'border-amber-300', bg: 'bg-gradient-to-br from-amber-50 to-amber-100/50', icon: 'text-amber-600', stroke: '#f59e0b' },\n sky: { border: 'border-sky-300', bg: 'bg-gradient-to-br from-sky-50 to-sky-100/50', icon: 'text-sky-600', stroke: '#0ea5e9' },\n zinc: { border: 'border-zinc-300', bg: 'bg-gradient-to-br from-zinc-50 to-zinc-100/50', icon: 'text-zinc-600', stroke: '#71717a' },\n rose: { border: 'border-rose-300', bg: 'bg-gradient-to-br from-rose-50 to-rose-100/50', icon: 'text-rose-600', stroke: '#f43f5e' },\n orange: { border: 'border-orange-300', bg: 'bg-gradient-to-br from-orange-50 to-orange-100/50', icon: 'text-orange-600', stroke: '#f97316' },\n },\n background: {\n container: 'bg-white/80 border border-zinc-200 shadow-lg',\n grid: { color: 'rgba(16, 21, 24, 0.12)', opacity: 0.35, size: 24 },\n },\n text: { primary: 'text-zinc-900', secondary: 'text-zinc-600', muted: 'text-zinc-500' },\n },\n dark: {\n palette: {\n violet: { border: 'border-violet-400/50', bg: 'bg-violet-500/10', icon: 'text-violet-400', stroke: '#a78bfa' },\n emerald: { border: 'border-emerald-400/50', bg: 'bg-emerald-500/10', icon: 'text-emerald-400', stroke: '#34d399' },\n blue: { border: 'border-blue-400/50', bg: 'bg-blue-500/10', icon: 'text-blue-400', stroke: '#60a5fa' },\n amber: { border: 'border-amber-400/50', bg: 'bg-amber-500/10', icon: 'text-amber-400', stroke: '#fbbf24' },\n sky: { border: 'border-sky-400/50', bg: 'bg-sky-500/10', icon: 'text-sky-400', stroke: '#38bdf8' },\n zinc: { border: 'border-zinc-600', bg: 'bg-zinc-800/50', icon: 'text-zinc-400', stroke: '#71717a' },\n rose: { border: 'border-rose-400/50', bg: 'bg-rose-500/10', icon: 'text-rose-400', stroke: '#fb7185' },\n orange: { border: 'border-orange-400/50', bg: 'bg-orange-500/10', icon: 'text-orange-400', stroke: '#fb923c' },\n },\n background: {\n container: 'bg-zinc-950 border border-zinc-800',\n grid: { color: '#71717a', opacity: 0.08, size: 24 },\n },\n text: { primary: 'text-white', secondary: 'text-zinc-400', muted: 'text-zinc-600' },\n },\n}\n\n// Warm theme - editorial, paper-like feel\nconst warmTheme: Theme = {\n id: 'warm',\n name: 'Warm',\n description: 'Soft, editorial warmth',\n light: {\n palette: {\n violet: { border: 'border-violet-300/70', bg: 'bg-gradient-to-br from-violet-50/90 to-violet-100/50', icon: 'text-violet-500', stroke: '#a78bfa' },\n emerald: { border: 'border-emerald-300/70', bg: 'bg-gradient-to-br from-emerald-50/90 to-emerald-100/50', icon: 'text-emerald-500', stroke: '#6ee7b7' },\n blue: { border: 'border-blue-300/70', bg: 'bg-gradient-to-br from-blue-50/90 to-blue-100/50', icon: 'text-blue-500', stroke: '#93c5fd' },\n amber: { border: 'border-amber-300/70', bg: 'bg-gradient-to-br from-amber-50/90 to-amber-100/50', icon: 'text-amber-500', stroke: '#fcd34d' },\n sky: { border: 'border-sky-300/70', bg: 'bg-gradient-to-br from-sky-50/90 to-sky-100/50', icon: 'text-sky-500', stroke: '#7dd3fc' },\n zinc: { border: 'border-stone-300/70', bg: 'bg-gradient-to-br from-stone-50/90 to-stone-100/50', icon: 'text-stone-500', stroke: '#a8a29e' },\n rose: { border: 'border-rose-300/70', bg: 'bg-gradient-to-br from-rose-50/90 to-rose-100/50', icon: 'text-rose-500', stroke: '#fda4af' },\n orange: { border: 'border-orange-300/70', bg: 'bg-gradient-to-br from-orange-50/90 to-orange-100/50', icon: 'text-orange-500', stroke: '#fdba74' },\n },\n background: {\n container: 'bg-gradient-to-br from-amber-50/80 via-orange-50/40 to-stone-100/60 border border-stone-200/60',\n grid: { color: 'rgba(180, 160, 140, 0.3)', opacity: 0.5, size: 24 },\n },\n text: { primary: 'text-stone-800', secondary: 'text-stone-600', muted: 'text-stone-400' },\n },\n dark: {\n palette: {\n violet: { border: 'border-violet-400/40', bg: 'bg-violet-500/8', icon: 'text-violet-300', stroke: '#c4b5fd' },\n emerald: { border: 'border-emerald-400/40', bg: 'bg-emerald-500/8', icon: 'text-emerald-300', stroke: '#a7f3d0' },\n blue: { border: 'border-blue-400/40', bg: 'bg-blue-500/8', icon: 'text-blue-300', stroke: '#bfdbfe' },\n amber: { border: 'border-amber-400/40', bg: 'bg-amber-500/8', icon: 'text-amber-300', stroke: '#fde68a' },\n sky: { border: 'border-sky-400/40', bg: 'bg-sky-500/8', icon: 'text-sky-300', stroke: '#bae6fd' },\n zinc: { border: 'border-stone-500/40', bg: 'bg-stone-600/10', icon: 'text-stone-300', stroke: '#d6d3d1' },\n rose: { border: 'border-rose-400/40', bg: 'bg-rose-500/8', icon: 'text-rose-300', stroke: '#fecdd3' },\n orange: { border: 'border-orange-400/40', bg: 'bg-orange-500/8', icon: 'text-orange-300', stroke: '#fed7aa' },\n },\n background: {\n container: 'bg-gradient-to-br from-stone-950 via-stone-900 to-stone-950 border border-stone-700/50',\n grid: { color: 'rgba(168, 162, 158, 0.15)', opacity: 0.15, size: 24 },\n },\n text: { primary: 'text-stone-100', secondary: 'text-stone-400', muted: 'text-stone-600' },\n },\n}\n\n// Cool theme - crisp, modern blues\nconst coolTheme: Theme = {\n id: 'cool',\n name: 'Cool',\n description: 'Crisp, modern blues',\n light: {\n palette: {\n violet: { border: 'border-indigo-300', bg: 'bg-gradient-to-br from-indigo-50 to-indigo-100/50', icon: 'text-indigo-600', stroke: '#6366f1' },\n emerald: { border: 'border-teal-300', bg: 'bg-gradient-to-br from-teal-50 to-teal-100/50', icon: 'text-teal-600', stroke: '#14b8a6' },\n blue: { border: 'border-blue-300', bg: 'bg-gradient-to-br from-blue-50 to-blue-100/50', icon: 'text-blue-600', stroke: '#3b82f6' },\n amber: { border: 'border-cyan-300', bg: 'bg-gradient-to-br from-cyan-50 to-cyan-100/50', icon: 'text-cyan-600', stroke: '#06b6d4' },\n sky: { border: 'border-sky-300', bg: 'bg-gradient-to-br from-sky-50 to-sky-100/50', icon: 'text-sky-600', stroke: '#0ea5e9' },\n zinc: { border: 'border-slate-300', bg: 'bg-gradient-to-br from-slate-50 to-slate-100/50', icon: 'text-slate-600', stroke: '#64748b' },\n rose: { border: 'border-fuchsia-300', bg: 'bg-gradient-to-br from-fuchsia-50 to-fuchsia-100/50', icon: 'text-fuchsia-600', stroke: '#d946ef' },\n orange: { border: 'border-violet-300', bg: 'bg-gradient-to-br from-violet-50 to-violet-100/50', icon: 'text-violet-600', stroke: '#8b5cf6' },\n },\n background: {\n container: 'bg-gradient-to-br from-slate-50 via-blue-50/30 to-slate-100 border border-slate-200',\n grid: { color: 'rgba(71, 85, 105, 0.15)', opacity: 0.4, size: 24 },\n },\n text: { primary: 'text-slate-900', secondary: 'text-slate-600', muted: 'text-slate-400' },\n },\n dark: {\n palette: {\n violet: { border: 'border-indigo-400/50', bg: 'bg-indigo-500/10', icon: 'text-indigo-400', stroke: '#818cf8' },\n emerald: { border: 'border-teal-400/50', bg: 'bg-teal-500/10', icon: 'text-teal-400', stroke: '#2dd4bf' },\n blue: { border: 'border-blue-400/50', bg: 'bg-blue-500/10', icon: 'text-blue-400', stroke: '#60a5fa' },\n amber: { border: 'border-cyan-400/50', bg: 'bg-cyan-500/10', icon: 'text-cyan-400', stroke: '#22d3ee' },\n sky: { border: 'border-sky-400/50', bg: 'bg-sky-500/10', icon: 'text-sky-400', stroke: '#38bdf8' },\n zinc: { border: 'border-slate-500', bg: 'bg-slate-700/30', icon: 'text-slate-400', stroke: '#94a3b8' },\n rose: { border: 'border-fuchsia-400/50', bg: 'bg-fuchsia-500/10', icon: 'text-fuchsia-400', stroke: '#e879f9' },\n orange: { border: 'border-violet-400/50', bg: 'bg-violet-500/10', icon: 'text-violet-400', stroke: '#a78bfa' },\n },\n background: {\n container: 'bg-gradient-to-br from-slate-950 via-slate-900 to-slate-950 border border-slate-700',\n grid: { color: 'rgba(148, 163, 184, 0.1)', opacity: 0.1, size: 24 },\n },\n text: { primary: 'text-slate-100', secondary: 'text-slate-400', muted: 'text-slate-600' },\n },\n}\n\n// Mono theme - grayscale elegance\nconst monoTheme: Theme = {\n id: 'mono',\n name: 'Mono',\n description: 'Elegant grayscale',\n light: {\n palette: {\n violet: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n emerald: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n blue: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n amber: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n sky: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n zinc: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n rose: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n orange: { border: 'border-zinc-400', bg: 'bg-gradient-to-br from-zinc-100 to-zinc-200/50', icon: 'text-zinc-700', stroke: '#52525b' },\n },\n background: {\n container: 'bg-zinc-100 border border-zinc-300',\n grid: { color: 'rgba(63, 63, 70, 0.08)', opacity: 0.5, size: 20 },\n },\n text: { primary: 'text-zinc-900', secondary: 'text-zinc-600', muted: 'text-zinc-400' },\n },\n dark: {\n palette: {\n violet: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n emerald: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n blue: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n amber: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n sky: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n zinc: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n rose: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n orange: { border: 'border-zinc-600', bg: 'bg-zinc-800/60', icon: 'text-zinc-300', stroke: '#a1a1aa' },\n },\n background: {\n container: 'bg-zinc-900 border border-zinc-700',\n grid: { color: 'rgba(161, 161, 170, 0.06)', opacity: 0.1, size: 20 },\n },\n text: { primary: 'text-zinc-100', secondary: 'text-zinc-400', muted: 'text-zinc-600' },\n },\n}\n\nexport const THEMES: Record<ThemeId, Theme> = {\n default: defaultTheme,\n warm: warmTheme,\n cool: coolTheme,\n mono: monoTheme,\n}\n\nexport const DEFAULT_THEME: ThemeId = 'default'\n\nexport function getTheme(id: ThemeId): Theme {\n return THEMES[id] || THEMES[DEFAULT_THEME]\n}\n\nexport function getThemeList() {\n return Object.values(THEMES).map(t => ({\n id: t.id,\n name: t.name,\n description: t.description,\n }))\n}\n","/**\n * Auto-layout engine for Arc diagrams\n *\n * Layered DAG layout (Sugiyama) with grid-wrapping:\n * when the natural LR layout exceeds the target width,\n * layers wrap into rows — LR within each row, TB between rows.\n * This uses the full 2D canvas instead of a single axis.\n */\n\nimport type { ArcDiagramData, NodePosition, AnchorPosition, Connector } from './ArcDiagram'\n\n// Node sizes matching the viewer\nconst NODE_SIZES: Record<string, { width: number; height: number }> = {\n l: { width: 220, height: 90 },\n m: { width: 160, height: 75 },\n s: { width: 110, height: 48 },\n xs: { width: 44, height: 44 },\n}\n\nexport interface LayoutOptions {\n /** Horizontal gap between columns */\n columnGap?: number\n /** Vertical gap between nodes within a column */\n nodeGap?: number\n /** Vertical gap between wrapped rows */\n rowGap?: number\n /** Padding around the entire diagram */\n padding?: number\n}\n\nconst DEFAULTS: Required<LayoutOptions> = {\n columnGap: 40,\n nodeGap: 24,\n rowGap: 40,\n padding: 32,\n}\n\n/**\n * Assign each node to a layer using longest-path layering (Kahn's algorithm).\n */\nfunction assignLayers(nodeIds: string[], connectors: Connector[]): Map<string, number> {\n const outgoing = new Map<string, string[]>()\n const incoming = new Map<string, string[]>()\n for (const id of nodeIds) {\n outgoing.set(id, [])\n incoming.set(id, [])\n }\n for (const c of connectors) {\n if (outgoing.has(c.from) && incoming.has(c.to)) {\n outgoing.get(c.from)!.push(c.to)\n incoming.get(c.to)!.push(c.from)\n }\n }\n\n const roots = nodeIds.filter(id => incoming.get(id)!.length === 0)\n if (roots.length === 0) roots.push(nodeIds[0])\n\n const layer = new Map<string, number>()\n for (const id of nodeIds) layer.set(id, 0)\n const visited = new Set<string>()\n\n const inDegree = new Map<string, number>()\n for (const id of nodeIds) inDegree.set(id, incoming.get(id)!.length)\n\n const queue = roots.filter(r => inDegree.get(r) === 0)\n if (queue.length === 0) queue.push(nodeIds[0])\n\n while (queue.length > 0) {\n const node = queue.shift()!\n if (visited.has(node)) continue\n visited.add(node)\n for (const next of outgoing.get(node) || []) {\n const newLayer = layer.get(node)! + 1\n if (newLayer > layer.get(next)!) layer.set(next, newLayer)\n const deg = inDegree.get(next)! - 1\n inDegree.set(next, deg)\n if (deg <= 0) queue.push(next)\n }\n }\n\n for (const id of nodeIds) {\n if (!visited.has(id)) layer.set(id, 0)\n }\n return layer\n}\n\n/**\n * Order nodes within each layer to minimize edge crossings (barycenter heuristic).\n */\nfunction orderWithinLayers(\n layers: Map<number, string[]>,\n connectors: Connector[],\n): Map<number, string[]> {\n const layerCount = Math.max(...layers.keys()) + 1\n const outgoing = new Map<string, string[]>()\n const incoming = new Map<string, string[]>()\n for (const [, nodes] of layers) {\n for (const id of nodes) {\n outgoing.set(id, [])\n incoming.set(id, [])\n }\n }\n for (const c of connectors) {\n outgoing.get(c.from)?.push(c.to)\n incoming.get(c.to)?.push(c.from)\n }\n\n const position = new Map<string, number>()\n for (const [, nodes] of layers) {\n nodes.forEach((id, idx) => position.set(id, idx))\n }\n\n for (let sweep = 0; sweep < 4; sweep++) {\n for (let l = 1; l < layerCount; l++) {\n const nodes = layers.get(l) || []\n const indexed = nodes.map(id => {\n const preds = incoming.get(id) || []\n const bc = preds.length === 0\n ? position.get(id) || 0\n : preds.reduce((s, p) => s + (position.get(p) || 0), 0) / preds.length\n return { id, bc }\n })\n indexed.sort((a, b) => a.bc - b.bc)\n const sorted = indexed.map(x => x.id)\n layers.set(l, sorted)\n sorted.forEach((id, idx) => position.set(id, idx))\n }\n for (let l = layerCount - 2; l >= 0; l--) {\n const nodes = layers.get(l) || []\n const indexed = nodes.map(id => {\n const succs = outgoing.get(id) || []\n const bc = succs.length === 0\n ? position.get(id) || 0\n : succs.reduce((s, p) => s + (position.get(p) || 0), 0) / succs.length\n return { id, bc }\n })\n indexed.sort((a, b) => a.bc - b.bc)\n const sorted = indexed.map(x => x.id)\n layers.set(l, sorted)\n sorted.forEach((id, idx) => position.set(id, idx))\n }\n }\n return layers\n}\n\n/**\n * Determine the best anchor pair based on relative node positions.\n */\nfunction inferAnchors(\n fromNode: NodePosition,\n toNode: NodePosition,\n): { fromAnchor: AnchorPosition; toAnchor: AnchorPosition } {\n const fromSize = NODE_SIZES[fromNode.size] || NODE_SIZES.m\n const toSize = NODE_SIZES[toNode.size] || NODE_SIZES.m\n const fromCx = fromNode.x + fromSize.width / 2\n const fromCy = fromNode.y + fromSize.height / 2\n const toCx = toNode.x + toSize.width / 2\n const toCy = toNode.y + toSize.height / 2\n const dx = toCx - fromCx\n const dy = toCy - fromCy\n\n if (Math.abs(dx) > Math.abs(dy) * 0.5) {\n if (dx > 0) {\n if (Math.abs(dy) < fromSize.height * 0.3) return { fromAnchor: 'right', toAnchor: 'left' }\n return dy > 0\n ? { fromAnchor: 'bottomRight', toAnchor: 'left' }\n : { fromAnchor: 'topRight', toAnchor: 'left' }\n } else {\n if (Math.abs(dy) < fromSize.height * 0.3) return { fromAnchor: 'left', toAnchor: 'right' }\n return dy > 0\n ? { fromAnchor: 'bottomLeft', toAnchor: 'right' }\n : { fromAnchor: 'topLeft', toAnchor: 'right' }\n }\n }\n\n return dy > 0\n ? { fromAnchor: 'bottom', toAnchor: 'top' }\n : { fromAnchor: 'top', toAnchor: 'bottom' }\n}\n\n/**\n * Determine how many layers fit in one row given the target width.\n */\nfunction fitLayersPerRow(\n columnWidths: number[],\n targetW: number,\n padding: number,\n columnGap: number,\n): number {\n const available = targetW - 2 * padding\n let width = 0\n for (let i = 0; i < columnWidths.length; i++) {\n const added = columnWidths[i] + (i > 0 ? columnGap : 0)\n if (width + added > available && i > 0) return i\n width += added\n }\n return columnWidths.length\n}\n\n/**\n * Auto-layout an ArcDiagramData.\n *\n * Uses LR flow within rows. When layers exceed the target width,\n * wraps into multiple rows — combining LR and TB to maximize\n * use of the available 2D space.\n */\nexport function autoLayout(\n data: ArcDiagramData,\n options: LayoutOptions = {},\n): ArcDiagramData {\n const opts = { ...DEFAULTS, ...options }\n const nodeIds = Object.keys(data.nodes)\n\n if (nodeIds.length === 0) return data\n\n const targetW = data.layout.width\n const targetH = data.layout.height\n\n // Step 1: Layer assignment and ordering\n const layerMap = assignLayers(nodeIds, data.connectors)\n const layers = new Map<number, string[]>()\n for (const [id, layer] of layerMap) {\n if (!layers.has(layer)) layers.set(layer, [])\n layers.get(layer)!.push(id)\n }\n const orderedLayers = orderWithinLayers(layers, data.connectors)\n\n const layerCount = Math.max(...orderedLayers.keys()) + 1\n const columnWidths: number[] = []\n const columnNodes: string[][] = []\n\n for (let l = 0; l < layerCount; l++) {\n const nodes = orderedLayers.get(l) || []\n columnNodes.push(nodes)\n let maxWidth = 0\n for (const id of nodes) {\n const size = NODE_SIZES[data.nodes[id]?.size || 'm'] || NODE_SIZES.m\n maxWidth = Math.max(maxWidth, size.width)\n }\n columnWidths.push(maxWidth)\n }\n\n // Step 2: Determine how many layers fit per row\n const layersPerRow = fitLayersPerRow(columnWidths, targetW, opts.padding, opts.columnGap)\n const numRows = Math.ceil(layerCount / layersPerRow)\n\n // Step 3: Split layers into row groups\n const rowGroups: number[][] = [] // each group is array of layer indices\n for (let r = 0; r < numRows; r++) {\n const start = r * layersPerRow\n const end = Math.min(start + layersPerRow, layerCount)\n const group: number[] = []\n for (let l = start; l < end; l++) group.push(l)\n rowGroups.push(group)\n }\n\n // Step 4: Calculate column gaps per row (distribute remaining space)\n const newNodes: Record<string, NodePosition> = {}\n let yOffset = opts.padding\n\n for (let r = 0; r < rowGroups.length; r++) {\n const group = rowGroups[r]\n\n // Width of nodes in this row — use consistent gap, don't stretch\n const colGap = opts.columnGap\n\n // Height of the tallest column in this row\n let rowMaxHeight = 0\n for (const l of group) {\n const nodes = columnNodes[l]\n let colH = 0\n for (const id of nodes) {\n const size = NODE_SIZES[data.nodes[id]?.size || 'm'] || NODE_SIZES.m\n colH += size.height\n }\n colH += Math.max(0, nodes.length - 1) * opts.nodeGap\n rowMaxHeight = Math.max(rowMaxHeight, colH)\n }\n\n // Position columns in this row\n let x = opts.padding\n for (const l of group) {\n const nodes = columnNodes[l]\n\n // Column height for vertical centering\n let colH = 0\n for (const id of nodes) {\n const size = NODE_SIZES[data.nodes[id]?.size || 'm'] || NODE_SIZES.m\n colH += size.height\n }\n colH += Math.max(0, nodes.length - 1) * opts.nodeGap\n\n let y = yOffset + (rowMaxHeight - colH) / 2\n\n for (const id of nodes) {\n const origNode = data.nodes[id]\n const size = NODE_SIZES[origNode?.size || 'm'] || NODE_SIZES.m\n const nodeX = x + (columnWidths[l] - size.width) / 2\n\n newNodes[id] = { x: nodeX, y, size: origNode?.size || 'm' }\n y += size.height + opts.nodeGap\n }\n\n x += columnWidths[l] + colGap\n }\n\n yOffset += rowMaxHeight + opts.rowGap\n }\n\n // Step 5: Infer connector anchors\n const newConnectors: Connector[] = data.connectors.map(c => {\n const fromNode = newNodes[c.from]\n const toNode = newNodes[c.to]\n if (!fromNode || !toNode) return c\n const { fromAnchor, toAnchor } = inferAnchors(fromNode, toNode)\n return { ...c, fromAnchor, toAnchor }\n })\n\n // Step 6: Calculate final dimensions\n let maxX = 0\n let maxY = 0\n for (const node of Object.values(newNodes)) {\n const size = NODE_SIZES[node.size] || NODE_SIZES.m\n maxX = Math.max(maxX, node.x + size.width)\n maxY = Math.max(maxY, node.y + size.height)\n }\n\n return {\n ...data,\n layout: {\n width: Math.max(targetW, maxX + opts.padding),\n height: Math.max(targetH, maxY + opts.padding),\n },\n nodes: newNodes,\n connectors: newConnectors,\n }\n}\n\n/**\n * Generate a diagram from minimal input — no positions or anchors needed.\n */\nexport interface AutoDiagramInput {\n nodeData: ArcDiagramData['nodeData']\n connectors: Array<Omit<Connector, 'fromAnchor' | 'toAnchor'> & {\n fromAnchor?: AnchorPosition\n toAnchor?: AnchorPosition\n }>\n connectorStyles: ArcDiagramData['connectorStyles']\n layout?: LayoutOptions\n}\n\nexport function createAutoLayout(input: AutoDiagramInput): ArcDiagramData {\n const nodes: Record<string, NodePosition> = {}\n for (const id of Object.keys(input.nodeData)) {\n nodes[id] = { x: 0, y: 0, size: 'm' }\n }\n\n const connectors: Connector[] = input.connectors.map(c => ({\n from: c.from,\n to: c.to,\n fromAnchor: c.fromAnchor || 'right',\n toAnchor: c.toAnchor || 'left',\n style: c.style,\n ...(c.curve ? { curve: c.curve } : {}),\n }))\n\n const data: ArcDiagramData = {\n layout: { width: 800, height: 400 },\n nodes,\n nodeData: input.nodeData,\n connectors,\n connectorStyles: input.connectorStyles,\n }\n\n return autoLayout(data, input.layout)\n}\n","\"use client\"\nimport React, { useState, useCallback, useMemo } from 'react'\nimport * as LucideIcons from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { getTheme, type ThemeId, type Theme } from './themes'\nimport { autoLayout } from './autoLayout'\n\n// ============================================\n// Types\n// ============================================\n\nexport type NodeSize = 'xs' | 's' | 'm' | 'l'\nexport type AnchorPosition = 'left' | 'right' | 'top' | 'bottom' | 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight'\nexport type DiagramColor = 'violet' | 'emerald' | 'blue' | 'amber' | 'sky' | 'zinc' | 'rose' | 'orange'\n\nexport interface NodePosition {\n x: number\n y: number\n size: NodeSize\n}\n\nexport interface NodeData {\n icon: string\n name: string\n subtitle?: string\n description?: string\n color: DiagramColor\n}\n\nexport interface Connector {\n from: string\n to: string\n fromAnchor: AnchorPosition\n toAnchor: AnchorPosition\n style: string\n curve?: 'natural' | 'step'\n}\n\nexport type LabelAlign = 'left' | 'right' | 'center'\n\nexport interface ConnectorStyle {\n color: DiagramColor\n strokeWidth: number\n label?: string\n labelAlign?: LabelAlign // For vertical: 'right' = right of line, 'left' = left of line. Default: 'right'\n dashed?: boolean\n}\n\nexport interface DiagramLayout {\n width: number\n height: number\n}\n\nexport interface ArcDiagramData {\n id?: string\n layout: DiagramLayout\n nodes: Record<string, NodePosition>\n nodeData: Record<string, NodeData>\n connectors: Connector[]\n connectorStyles: Record<string, ConnectorStyle>\n}\n\n// ============================================\n// Hover Effects\n// ============================================\n\nexport interface HoverEffectsConfig {\n /** Dim unrelated nodes/connectors. Default: true */\n dim?: boolean\n /** 0–1 opacity for dimmed nodes. Connectors dim to ~56% of this. Default: 0.45 */\n dimOpacity?: number\n /** Lift hovered node up 2px. Default: true */\n lift?: boolean\n /** Colored glow shadow on hover. Default: true */\n glow?: boolean\n /** Thicken connected edges. Default: true */\n highlightEdges?: boolean\n}\n\ninterface ResolvedHoverEffects {\n enabled: boolean\n dim: boolean\n dimOpacity: number\n connectorDimOpacity: number\n lift: boolean\n glow: boolean\n highlightEdges: boolean\n}\n\nfunction resolveHoverEffects(input?: boolean | HoverEffectsConfig): ResolvedHoverEffects {\n if (input === false) return { enabled: false, dim: false, dimOpacity: 1, connectorDimOpacity: 1, lift: false, glow: false, highlightEdges: false }\n const cfg = typeof input === 'object' ? input : {}\n const dimOpacity = cfg.dimOpacity ?? 0.45\n return {\n enabled: true,\n dim: cfg.dim ?? true,\n dimOpacity,\n connectorDimOpacity: dimOpacity * 0.56,\n lift: cfg.lift ?? true,\n glow: cfg.glow ?? true,\n highlightEdges: cfg.highlightEdges ?? true,\n }\n}\n\n// ============================================\n// Constants\n// ============================================\n\nconst NODE_SIZES: Record<NodeSize, { width: number; height: number }> = {\n l: { width: 200, height: 68 },\n m: { width: 140, height: 52 },\n s: { width: 100, height: 40 },\n xs: { width: 36, height: 52 },\n}\n\n// Mode = light/dark appearance, Theme = color palette\nexport type DiagramMode = 'dark' | 'light'\nexport { type ThemeId } from './themes'\n\n// ============================================\n// Components\n// ============================================\n\ninterface NodeProps {\n node: NodePosition\n data: NodeData\n mode: DiagramMode\n themeColors: Theme['light'] | Theme['dark']\n editable?: boolean\n onDragStart?: (e: React.MouseEvent) => void\n hovered?: boolean\n dimmed?: boolean\n lift?: boolean\n glow?: boolean\n dimOpacity?: number\n onMouseEnter?: () => void\n onMouseLeave?: () => void\n onClick?: () => void\n}\n\nfunction Node({ node, data, mode, themeColors, editable, onDragStart, hovered, dimmed, lift = true, glow = true, dimOpacity = 0.45, onMouseEnter, onMouseLeave, onClick }: NodeProps) {\n const size = NODE_SIZES[node.size]\n const color = themeColors.palette[data.color] || themeColors.palette.zinc\n const Icon = (LucideIcons as unknown as Record<string, LucideIcon>)[data.icon] || LucideIcons.Box\n\n const isLarge = node.size === 'l'\n const isSmall = node.size === 's'\n const isXs = node.size === 'xs'\n const isLight = mode === 'light'\n\n const dragProps = editable ? {\n onMouseDown: (e: React.MouseEvent) => { e.stopPropagation(); onDragStart?.(e) },\n } : {}\n\n const editClass = editable ? 'cursor-move hover:brightness-110' : ''\n\n // XS: icon-only circle with label underneath\n if (isXs) {\n return (\n <div\n className={`absolute flex flex-col items-center transition-all duration-200 ease-out ${editClass}`}\n style={{\n left: node.x,\n top: node.y,\n width: size.width,\n zIndex: hovered ? 10 : editable ? 1 : undefined,\n transform: hovered && lift ? 'translateY(-2px)' : 'none',\n opacity: dimmed ? dimOpacity : 1,\n cursor: onClick ? 'pointer' : undefined,\n }}\n data-arc-node\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onClick={onClick}\n {...dragProps}\n >\n <div className={`\n rounded-full w-9 h-9 flex items-center justify-center\n ${isLight ? 'bg-white border border-zinc-200/80 shadow-sm' : 'bg-zinc-800/90 border border-zinc-700/60'}\n `}>\n <Icon className={`w-4 h-4 ${color.icon}`} strokeWidth={1.5} />\n </div>\n {data.name && (\n <div className={`mt-1.5 text-center ${themeColors.text.muted} text-[8px] tracking-wide uppercase`}\n style={{ fontFamily: 'ui-sans-serif, system-ui, sans-serif' }}\n >\n {data.name}\n </div>\n )}\n </div>\n )\n }\n\n // S/M/L: clean card — icon is inline color dot, not a boxed element\n return (\n <div\n className={`\n absolute rounded-lg border transition-all duration-200 ease-out\n ${isLight\n ? 'bg-white/90 border-zinc-200/70 shadow-sm'\n : 'bg-zinc-900/80 border-zinc-700/50'\n }\n ${editClass}\n `}\n style={{\n left: node.x,\n top: node.y,\n width: size.width,\n zIndex: hovered ? 10 : editable ? 1 : undefined,\n backdropFilter: 'blur(8px)',\n transform: hovered && lift ? 'translateY(-2px)' : 'none',\n boxShadow: hovered && glow\n ? `0 8px 24px -4px ${color.stroke}33, 0 0 0 1px ${color.stroke}22`\n : 'none',\n opacity: dimmed ? dimOpacity : 1,\n cursor: onClick ? 'pointer' : undefined,\n }}\n data-arc-node\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onClick={onClick}\n {...dragProps}\n >\n {/* Accent top edge */}\n <div\n className=\"absolute top-0 left-3 right-3 h-[2px] rounded-full\"\n style={{ backgroundColor: color.stroke, opacity: 0.6 }}\n />\n\n <div className={`${isLarge ? 'px-4 py-3' : isSmall ? 'px-2.5 py-1.5' : 'px-3 py-2'}`}>\n <div className=\"flex items-center gap-2\">\n <Icon\n className={`flex-shrink-0 ${isLarge ? 'w-4 h-4' : isSmall ? 'w-3 h-3' : 'w-3.5 h-3.5'}`}\n style={{ color: color.stroke }}\n strokeWidth={1.5}\n />\n <span className={`font-medium ${themeColors.text.primary} ${isLarge ? 'text-[13px]' : isSmall ? 'text-[10px]' : 'text-[11px]'} leading-tight`}>\n {data.name}\n </span>\n </div>\n {data.subtitle && (\n <div className={`${themeColors.text.muted} ${isSmall ? 'text-[8px] mt-0.5' : 'text-[9px] mt-1'} leading-tight`}\n style={{ fontFamily: 'ui-monospace, monospace' }}\n >\n {data.subtitle}\n </div>\n )}\n {data.description && !isSmall && (\n <div className={`mt-1 ${themeColors.text.secondary} text-[9px] leading-relaxed`}>\n {data.description}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nfunction getAnchorPoint(node: NodePosition, anchor: AnchorPosition): { x: number; y: number } {\n const size = NODE_SIZES[node.size]\n const gap = 6\n\n const anchors: Record<AnchorPosition, { x: number; y: number }> = {\n left: { x: node.x - gap, y: node.y + size.height / 2 },\n right: { x: node.x + size.width + gap, y: node.y + size.height / 2 },\n top: { x: node.x + size.width / 2, y: node.y - gap },\n bottom: { x: node.x + size.width / 2, y: node.y + size.height + gap },\n bottomRight: { x: node.x + size.width + gap, y: node.y + size.height - 12 },\n bottomLeft: { x: node.x - gap, y: node.y + size.height - 12 },\n topRight: { x: node.x + size.width + gap, y: node.y + 12 },\n topLeft: { x: node.x - gap, y: node.y + 12 },\n }\n\n return anchors[anchor]\n}\n\n// Calculate angle between two points for arrow rotation\nfunction getAngle(from: { x: number; y: number }, to: { x: number; y: number }): number {\n return Math.atan2(to.y - from.y, to.x - from.x) * (180 / Math.PI)\n}\n\ninterface ConnectorProps {\n connector: Connector\n connectorIndex: number\n nodes: Record<string, NodePosition>\n styles: Record<string, ConnectorStyle>\n themeColors: Theme['light'] | Theme['dark']\n highlighted?: boolean\n dimmed?: boolean\n dimOpacity?: number\n}\n\nfunction ConnectorPath({ connector, connectorIndex, nodes, styles, themeColors, highlighted, dimmed, dimOpacity = 0.25 }: ConnectorProps) {\n const fromNode = nodes[connector.from]\n const toNode = nodes[connector.to]\n if (!fromNode || !toNode) return null\n\n const style = styles[connector.style] || { color: 'zinc', strokeWidth: 2 }\n const from = getAnchorPoint(fromNode, connector.fromAnchor)\n const to = getAnchorPoint(toNode, connector.toAnchor)\n const color = themeColors.palette[style.color]?.stroke || themeColors.palette.zinc.stroke\n const gradientId = `connector-gradient-${connectorIndex}`\n\n // Calculate path\n let path: string\n const isVertical = Math.abs(to.y - from.y) > Math.abs(to.x - from.x)\n const labelAlign = style.labelAlign || (isVertical ? 'right' : 'center')\n\n // Label positioning\n let labelPos: { x: number; y: number }\n let labelOffset = { x: 0, y: 0 }\n let textAnchor: 'start' | 'middle' | 'end' = 'middle'\n\n // Always use smooth bezier curves unless explicitly step\n const dx = to.x - from.x\n const dy = to.y - from.y\n\n if (connector.curve === 'step') {\n // Orthogonal step path\n const midX = from.x + dx / 2\n path = `M ${from.x} ${from.y} L ${midX} ${from.y} L ${midX} ${to.y} L ${to.x} ${to.y}`\n } else {\n // Smooth bezier — control points follow the dominant axis\n const tension = 0.5\n if (isVertical) {\n const cpy = dy * tension\n path = `M ${from.x} ${from.y} C ${from.x} ${from.y + cpy}, ${to.x} ${to.y - cpy}, ${to.x} ${to.y}`\n } else {\n const cpx = dx * tension\n path = `M ${from.x} ${from.y} C ${from.x + cpx} ${from.y}, ${to.x - cpx} ${to.y}, ${to.x} ${to.y}`\n }\n }\n\n labelPos = { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 }\n\n if (isVertical) {\n if (labelAlign === 'right') {\n labelOffset = { x: 8, y: 4 }\n textAnchor = 'start'\n } else if (labelAlign === 'left') {\n labelOffset = { x: -8, y: 4 }\n textAnchor = 'end'\n } else {\n labelOffset = { x: 0, y: -8 }\n textAnchor = 'middle'\n }\n } else {\n labelOffset = { x: 0, y: -8 }\n textAnchor = 'middle'\n }\n\n // Calculate arrow angle at endpoint\n const angle = getAngle(from, to)\n const arrowSize = 6\n\n return (\n <g style={{\n opacity: dimmed ? dimOpacity : 1,\n transition: 'opacity 200ms ease-out',\n }}>\n {/* Gradient definition - fades at both ends */}\n <defs>\n <linearGradient\n id={gradientId}\n x1={from.x}\n y1={from.y}\n x2={to.x}\n y2={to.y}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0%\" stopColor={color} stopOpacity={highlighted ? 0.6 : 0.4} />\n <stop offset=\"10%\" stopColor={color} stopOpacity={highlighted ? 0.9 : 0.7} />\n <stop offset=\"90%\" stopColor={color} stopOpacity={highlighted ? 0.9 : 0.7} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={highlighted ? 0.6 : 0.4} />\n </linearGradient>\n </defs>\n\n {/* Main path with gradient */}\n <path\n d={path}\n fill=\"none\"\n stroke={`url(#${gradientId})`}\n strokeWidth={highlighted ? style.strokeWidth + 1 : style.strokeWidth}\n strokeDasharray={style.dashed ? '6 3' : undefined}\n style={{ transition: 'stroke-width 200ms ease-out' }}\n />\n\n {/* Arrow head - triangle at end point */}\n <g transform={`translate(${to.x}, ${to.y}) rotate(${angle})`}>\n <polygon\n points={`0,0 ${-arrowSize},-${arrowSize/2.5} ${-arrowSize},${arrowSize/2.5}`}\n fill={color}\n />\n </g>\n\n {/* Label with background pill */}\n {style.label && (\n <g style={{ transition: 'opacity 200ms ease-out' }}>\n <rect\n x={labelPos.x + labelOffset.x - (textAnchor === 'middle' ? style.label.length * 3.2 : textAnchor === 'end' ? style.label.length * 6.4 : 0) - 4}\n y={labelPos.y + labelOffset.y - 10}\n width={style.label.length * 6.4 + 8}\n height={14}\n rx={4}\n fill={color}\n opacity={highlighted ? 0.3 : 0.15}\n />\n <text\n x={labelPos.x + labelOffset.x}\n y={labelPos.y + labelOffset.y}\n textAnchor={textAnchor}\n fill={color}\n className=\"text-[9px] font-mono\"\n style={{ fontFamily: 'ui-monospace, monospace', fontWeight: highlighted ? 700 : 500 }}\n >\n {style.label}\n </text>\n </g>\n )}\n </g>\n )\n}\n\n// ============================================\n// Zoom Controls\n// ============================================\n\nconst ZOOM_LEVELS = [0.5, 0.75, 1, 1.25, 1.5, 2]\n\ninterface ZoomControlsProps {\n zoom: number\n onZoomIn: () => void\n onZoomOut: () => void\n onReset: () => void\n mode: DiagramMode\n}\n\nfunction ZoomControls({ zoom, onZoomIn, onZoomOut, onReset, mode }: ZoomControlsProps) {\n const { ZoomIn, ZoomOut } = LucideIcons\n const isLight = mode === 'light'\n\n return (\n <div className={`absolute bottom-3 right-3 flex items-center backdrop-blur-sm rounded-md z-10 ${\n isLight\n ? 'bg-white/90 border border-zinc-200 shadow-sm'\n : 'bg-zinc-900/90 border border-zinc-700'\n }`}>\n <button\n onClick={onZoomOut}\n disabled={zoom <= ZOOM_LEVELS[0]}\n className={`p-1 disabled:opacity-30 disabled:cursor-not-allowed transition-colors rounded-l-md ${\n isLight ? 'hover:bg-zinc-100' : 'hover:bg-zinc-700'\n }`}\n title=\"Zoom out\"\n >\n <ZoomOut className={`w-3 h-3 ${isLight ? 'text-zinc-500' : 'text-zinc-400'}`} />\n </button>\n <button\n onClick={onReset}\n className={`px-1.5 py-1 text-[9px] font-mono transition-colors min-w-[36px] ${\n isLight\n ? 'text-zinc-500 hover:bg-zinc-100 border-x border-zinc-200'\n : 'text-zinc-400 hover:bg-zinc-700 border-x border-zinc-700'\n }`}\n title=\"Reset zoom\"\n >\n {Math.round(zoom * 100)}%\n </button>\n <button\n onClick={onZoomIn}\n disabled={zoom >= ZOOM_LEVELS[ZOOM_LEVELS.length - 1]}\n className={`p-1 disabled:opacity-30 disabled:cursor-not-allowed transition-colors rounded-r-md ${\n isLight ? 'hover:bg-zinc-100' : 'hover:bg-zinc-700'\n }`}\n title=\"Zoom in\"\n >\n <ZoomIn className={`w-3 h-3 ${isLight ? 'text-zinc-500' : 'text-zinc-400'}`} />\n </button>\n </div>\n )\n}\n\n// ============================================\n// .arc View & Controls\n// ============================================\n\nfunction generateSource(data: ArcDiagramData): string {\n const clean = {\n id: data.id,\n layout: data.layout,\n nodes: data.nodes,\n nodeData: data.nodeData,\n connectors: data.connectors,\n connectorStyles: data.connectorStyles,\n }\n const json = JSON.stringify(clean, null, 2)\n .replace(/\"([^\"]+)\":/g, '$1:')\n .replace(/\"/g, \"'\")\n\n return `import type { ArcDiagramData } from '@arach/arc'\\n\\nconst diagram: ArcDiagramData = ${json}\\n\\nexport default diagram\\n`\n}\n\nfunction ArcSourceView({ source, mode }: {\n source: string\n mode: DiagramMode\n}) {\n const isLight = mode === 'light'\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(source).then(() => {\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n })\n }, [source])\n\n const { Copy, Check } = LucideIcons\n\n return (\n <div className=\"absolute inset-0 overflow-auto z-[5]\" style={{\n backgroundColor: isLight ? 'rgba(250,250,250,0.97)' : 'rgba(9,9,11,0.97)',\n }}>\n <div className=\"flex items-center justify-end gap-1 px-4 pt-3\">\n <button\n onClick={handleCopy}\n className={`p-1 rounded transition-colors ${\n isLight\n ? 'hover:bg-zinc-200/60 text-zinc-400'\n : 'hover:bg-zinc-700/60 text-zinc-500'\n }`}\n title={copied ? 'Copied!' : 'Copy'}\n >\n {copied\n ? <Check className=\"w-3 h-3 text-emerald-500\" />\n : <Copy className=\"w-3 h-3\" />\n }\n </button>\n </div>\n <pre\n className={`px-5 pb-5 pt-2 text-[11px] leading-relaxed font-mono whitespace-pre ${\n isLight ? 'text-zinc-600' : 'text-zinc-400'\n }`}\n style={{ fontFamily: '\"JetBrains Mono\", \"Fira Code\", \"SF Mono\", Consolas, monospace', tabSize: 2 }}\n >\n {source}\n </pre>\n </div>\n )\n}\n\nfunction ViewToggle({ showArc, onToggle, mode }: {\n showArc: boolean\n onToggle: () => void\n mode: DiagramMode\n}) {\n const isLight = mode === 'light'\n const { Braces, Layers } = LucideIcons\n\n return (\n <button\n onClick={onToggle}\n className={`absolute top-3 right-3 flex items-center gap-1.5 px-2 py-1 rounded-md backdrop-blur-sm z-10 text-[10px] font-mono transition-colors ${\n isLight\n ? 'bg-white/90 border border-zinc-200 shadow-sm text-zinc-500 hover:text-zinc-700 hover:bg-zinc-50'\n : 'bg-zinc-900/90 border border-zinc-700 text-zinc-500 hover:text-zinc-300 hover:bg-zinc-800'\n }`}\n title={showArc ? 'Back to diagram' : 'View source'}\n >\n {showArc\n ? <><Layers className=\"w-3 h-3\" /> Diagram</>\n : <><Braces className=\"w-3 h-3\" /> Source</>\n }\n </button>\n )\n}\n\nfunction AutoLayoutButton({ active, onToggle, mode }: {\n active: boolean\n onToggle: () => void\n mode: DiagramMode\n}) {\n const isLight = mode === 'light'\n const { Wand2 } = LucideIcons\n\n return (\n <button\n onClick={onToggle}\n className={`flex items-center gap-1.5 px-2 py-1 rounded-md backdrop-blur-sm text-[10px] font-mono transition-colors ${\n active\n ? isLight\n ? 'bg-violet-50 border border-violet-200 text-violet-600 shadow-sm'\n : 'bg-violet-950/80 border border-violet-700 text-violet-400'\n : isLight\n ? 'bg-white/90 border border-zinc-200 shadow-sm text-zinc-500 hover:text-zinc-700 hover:bg-zinc-50'\n : 'bg-zinc-900/90 border border-zinc-700 text-zinc-500 hover:text-zinc-300 hover:bg-zinc-800'\n }`}\n title={active ? 'Reset to original layout' : 'Auto-layout nodes'}\n >\n <Wand2 className=\"w-3 h-3\" /> Auto\n </button>\n )\n}\n\nfunction EditButton({ url, mode }: { url: string; mode: DiagramMode }) {\n const isLight = mode === 'light'\n const { Pencil } = LucideIcons\n\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`flex items-center gap-1.5 px-2 py-1 rounded-md backdrop-blur-sm text-[10px] font-mono transition-colors no-underline ${\n isLight\n ? 'bg-white/90 border border-zinc-200 shadow-sm text-zinc-500 hover:text-zinc-700 hover:bg-zinc-50'\n : 'bg-zinc-900/90 border border-zinc-700 text-zinc-500 hover:text-zinc-300 hover:bg-zinc-800'\n }`}\n title=\"Open in Arc editor\"\n >\n <Pencil className=\"w-3 h-3\" /> Edit\n </a>\n )\n}\n\n// ============================================\n// Main Component\n// ============================================\n\nexport interface ArcDiagramProps {\n data: ArcDiagramData\n className?: string\n interactive?: boolean // Enable zoom/pan controls\n mode?: DiagramMode // Light/dark appearance\n theme?: ThemeId // Color palette theme\n /** Show the source toggle button. Default: true */\n showArcToggle?: boolean\n /** Show the auto-layout button. Default: false */\n showAutoLayout?: boolean\n /** Enable drag-to-reposition nodes. Default: false */\n editable?: boolean\n /** URL of the Arc editor. When set with editable, shows an \"Edit\" button. */\n editorUrl?: string\n /** Metadata to pass to the editor (viewport size, theme, mode). */\n editorMeta?: { viewport?: { width: number; height: number }; theme?: string; mode?: string }\n /** Control hover behavior. true = all effects (default), false = none, object = granular control */\n hoverEffects?: boolean | HoverEffectsConfig\n /** Called when a node is hovered/clicked (nodeId) or released (null) */\n onNodeHover?: (nodeId: string | null) => void\n}\n\nexport function ArcDiagram({ data, className = '', interactive = true, mode = 'dark', theme = 'default', showArcToggle = true, showAutoLayout = false, editable = false, editorUrl, editorMeta, hoverEffects, onNodeHover }: ArcDiagramProps) {\n const isLight = mode === 'light'\n const [showArc, setShowArc] = useState(false)\n const [useAutoLayout, setUseAutoLayout] = useState(false)\n const [hoveredNodeId, setHoveredNodeId] = useState<string | null>(null)\n const [lockedNodeId, setLockedNodeId] = useState<string | null>(null)\n const fx = useMemo(() => resolveHoverEffects(hoverEffects), [hoverEffects])\n\n // Active node = locked takes priority over hovered\n const activeNodeId = fx.enabled ? (lockedNodeId ?? hoveredNodeId) : null\n\n // Click-to-lock: clicking a node locks the highlight, clicking background or same node unlocks\n const handleNodeClick = useCallback((nodeId: string) => {\n setLockedNodeId(prev => {\n const next = prev === nodeId ? null : nodeId\n onNodeHover?.(next)\n return next\n })\n }, [onNodeHover])\n\n // Apply auto-layout if toggled\n const baseData = useMemo(\n () => useAutoLayout ? autoLayout(data) : data,\n [data, useAutoLayout],\n )\n\n // Persistence key for localStorage\n const storageKey = editable && data.id ? `arc-drag-${data.id}` : null\n\n // Editable node positions — override base positions when dragged\n const [draggedPositions, setDraggedPositions] = useState<Record<string, { x: number; y: number }>>(() => {\n if (!storageKey) return {}\n try {\n const saved = localStorage.getItem(storageKey)\n return saved ? JSON.parse(saved) : {}\n } catch { return {} }\n })\n const [draggingNode, setDraggingNode] = useState<{ id: string; startX: number; startY: number; nodeX: number; nodeY: number } | null>(null)\n\n // Persist dragged positions to localStorage\n React.useEffect(() => {\n if (!storageKey) return\n if (Object.keys(draggedPositions).length === 0) {\n localStorage.removeItem(storageKey)\n } else {\n localStorage.setItem(storageKey, JSON.stringify(draggedPositions))\n }\n }, [draggedPositions, storageKey])\n\n // Reset dragged positions when auto-layout toggled\n React.useEffect(() => {\n setDraggedPositions({})\n }, [useAutoLayout])\n\n // Merge dragged positions into active data\n const activeData = useMemo(() => {\n if (Object.keys(draggedPositions).length === 0) return baseData\n const mergedNodes = { ...baseData.nodes }\n for (const [id, pos] of Object.entries(draggedPositions)) {\n if (mergedNodes[id]) {\n mergedNodes[id] = { ...mergedNodes[id], x: pos.x, y: pos.y }\n }\n }\n return { ...baseData, nodes: mergedNodes }\n }, [baseData, draggedPositions])\n\n const { id, layout, nodes, nodeData, connectors, connectorStyles } = activeData\n\n // Resolve theme colors based on mode\n const themeData = getTheme(theme)\n const themeColors = isLight ? themeData.light : themeData.dark\n\n // Generate source from the active data (reflects dragged positions)\n const sourceCode = useMemo(() => generateSource(activeData), [activeData])\n\n // Zoom & pan state\n const [zoom, setZoom] = useState(1)\n const [pan, setPan] = useState({ x: 0, y: 0 })\n const [isPanning, setIsPanning] = useState(false)\n const [panStart, setPanStart] = useState({ x: 0, y: 0 })\n\n const handleZoomIn = useCallback(() => {\n setZoom(z => {\n const idx = ZOOM_LEVELS.findIndex(l => l >= z)\n return ZOOM_LEVELS[Math.min(idx + 1, ZOOM_LEVELS.length - 1)]\n })\n }, [])\n\n const handleZoomOut = useCallback(() => {\n setZoom(z => {\n const idx = ZOOM_LEVELS.findIndex(l => l >= z)\n return ZOOM_LEVELS[Math.max(idx - 1, 0)]\n })\n }, [])\n\n const handleReset = useCallback(() => {\n setZoom(1)\n setPan({ x: 0, y: 0 })\n }, [])\n\n const handleWheel = useCallback((e: React.WheelEvent) => {\n if (!interactive) return\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault()\n if (e.deltaY < 0) handleZoomIn()\n else handleZoomOut()\n }\n }, [interactive, handleZoomIn, handleZoomOut])\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (!interactive || draggingNode) return\n // Clicking background clears locked node\n if (lockedNodeId && (e.target as HTMLElement).closest('[data-arc-node]') === null) {\n setLockedNodeId(null)\n onNodeHover?.(null)\n }\n setIsPanning(true)\n setPanStart({ x: e.clientX - pan.x, y: e.clientY - pan.y })\n }, [interactive, pan, draggingNode, lockedNodeId, onNodeHover])\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (draggingNode) {\n const dx = (e.clientX - draggingNode.startX) / zoom\n const dy = (e.clientY - draggingNode.startY) / zoom\n setDraggedPositions(prev => ({\n ...prev,\n [draggingNode.id]: {\n x: Math.round(draggingNode.nodeX + dx),\n y: Math.round(draggingNode.nodeY + dy),\n },\n }))\n return\n }\n if (!isPanning) return\n setPan({\n x: e.clientX - panStart.x,\n y: e.clientY - panStart.y,\n })\n }, [isPanning, panStart, draggingNode, zoom])\n\n const handleMouseUp = useCallback(() => {\n setIsPanning(false)\n setDraggingNode(null)\n }, [])\n\n return (\n <div\n className={`rounded-2xl overflow-hidden relative ${themeColors.background.container} ${className}`}\n onWheel={handleWheel}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n style={{ cursor: draggingNode ? 'grabbing' : interactive ? (isPanning ? 'grabbing' : 'grab') : 'default' }}\n >\n <div\n className=\"relative transition-transform duration-150 ease-out\"\n style={{\n width: layout.width,\n height: layout.height,\n minWidth: layout.width,\n transform: `scale(${zoom}) translate(${pan.x / zoom}px, ${pan.y / zoom}px)`,\n transformOrigin: 'top left',\n }}\n >\n {/* Grid background - extends beyond content for pan */}\n <div\n className=\"absolute\"\n style={{\n top: -2000,\n left: -2000,\n width: layout.width + 4000,\n height: layout.height + 4000,\n backgroundImage: `radial-gradient(circle, ${themeColors.background.grid.color} 1px, transparent 1px)`,\n backgroundSize: `${themeColors.background.grid.size}px ${themeColors.background.grid.size}px`,\n opacity: themeColors.background.grid.opacity,\n }}\n />\n\n {/* Connectors */}\n <svg\n className=\"absolute inset-0 w-full h-full pointer-events-none\"\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {connectors.map((conn, i) => {\n const isConnected = activeNodeId != null && (conn.from === activeNodeId || conn.to === activeNodeId)\n return (\n <ConnectorPath\n key={i}\n connector={conn}\n connectorIndex={i}\n nodes={nodes}\n styles={connectorStyles}\n themeColors={themeColors}\n highlighted={fx.highlightEdges && isConnected}\n dimmed={fx.dim && activeNodeId != null && !isConnected}\n dimOpacity={fx.connectorDimOpacity}\n />\n )\n })}\n </svg>\n\n {/* Nodes */}\n {Object.entries(nodes).map(([nodeId, node]) => {\n const isActive = activeNodeId === nodeId\n return (\n <Node\n key={nodeId}\n node={node}\n data={nodeData[nodeId]}\n mode={mode}\n themeColors={themeColors}\n editable={editable}\n onDragStart={editable ? (e: React.MouseEvent) => {\n setDraggingNode({ id: nodeId, startX: e.clientX, startY: e.clientY, nodeX: node.x, nodeY: node.y })\n } : undefined}\n hovered={isActive}\n dimmed={fx.dim && activeNodeId != null && !isActive}\n lift={fx.lift}\n glow={fx.glow}\n dimOpacity={fx.dimOpacity}\n onMouseEnter={() => { if (!lockedNodeId) { setHoveredNodeId(nodeId); onNodeHover?.(nodeId) } }}\n onMouseLeave={() => { if (!lockedNodeId) { setHoveredNodeId(null); onNodeHover?.(null) } }}\n onClick={() => handleNodeClick(nodeId)}\n />\n )\n })}\n </div>\n\n {/* Viewer chrome - fixed position regardless of zoom/pan */}\n\n {/* .arc source overlay */}\n {showArc && (\n <ArcSourceView source={sourceCode} mode={mode} />\n )}\n\n {/* .arc toggle - top right */}\n {showArcToggle && (\n <ViewToggle\n showArc={showArc}\n onToggle={() => setShowArc(s => !s)}\n mode={mode}\n />\n )}\n\n {/* Top-left controls */}\n {!showArc && (\n <div className=\"absolute top-3 left-3 flex items-center gap-1.5 z-10\">\n {showAutoLayout && (\n <AutoLayoutButton\n active={useAutoLayout}\n onToggle={() => setUseAutoLayout(v => !v)}\n mode={mode}\n />\n )}\n {editable && editorUrl && (\n <EditButton url={`${editorUrl}#data=${btoa(JSON.stringify({ ...activeData, _viewport: editorMeta?.viewport, _theme: editorMeta?.theme, _mode: editorMeta?.mode }))}`} mode={mode} />\n )}\n </div>\n )}\n\n {/* Diagram ID - bottom left */}\n {id && (\n <div className={`absolute bottom-3 left-3 font-mono text-[9px] tracking-wider z-10 ${themeColors.text.muted}`}>\n {id}\n </div>\n )}\n\n {/* Zoom controls - bottom right */}\n {interactive && !showArc && (\n <ZoomControls\n zoom={zoom}\n onZoomIn={handleZoomIn}\n onZoomOut={handleZoomOut}\n onReset={handleReset}\n mode={mode}\n />\n )}\n </div>\n )\n}\n\nexport default ArcDiagram\n","/**\n * Native sequenceDiagram parser → ArcSequenceDocument\n */\n\nimport type {\n ArcSequenceDocument,\n MermaidDiagnostic,\n MermaidSourceRange,\n SequenceEvent,\n SequenceFragmentKind,\n SequenceParticipant,\n SequenceParticipantKind,\n} from '../types'\n\nconst SUPPORTED_FRAGMENTS = new Set<string>([\n 'alt',\n 'else',\n 'opt',\n 'loop',\n 'par',\n 'critical',\n 'break',\n 'rect',\n])\n\n/** Fully unsupported constructs — recorded, body not silently dropped when we can detect end */\nconst UNSUPPORTED_LINE_START =\n /^(activate|deactivate|autonumber|box|create|destroy)\\b/i\n\nfunction range(line: number): MermaidSourceRange {\n return { startLine: line, endLine: line }\n}\n\nfunction sanitizeId(raw: string): string {\n return raw.replace(/[^a-zA-Z0-9_-]/g, '_')\n}\n\nfunction splitStructuredText(raw: string): string[] {\n return raw\n .split(/<br\\s*\\/?\\s*>/gi)\n .map((p) => p.trim())\n .filter((p) => p.length > 0)\n}\n\nfunction stripQuotes(s: string): string {\n const t = s.trim()\n if (\n (t.startsWith('\"') && t.endsWith('\"')) ||\n (t.startsWith(\"'\") && t.endsWith(\"'\"))\n ) {\n return t.slice(1, -1)\n }\n return t\n}\n\nexport interface ParseSequenceResult {\n document: ArcSequenceDocument\n diagnostics: MermaidDiagnostic[]\n}\n\n/**\n * Parse a sequenceDiagram body (including the declaration line).\n * `baseLine` is the 1-based line number of the declaration in the full source.\n */\nexport function parseSequenceSource(\n source: string,\n baseLine = 1,\n): ParseSequenceResult {\n const diagnostics: MermaidDiagnostic[] = []\n const lines = source.replace(/\\r\\n?/g, '\\n').split('\\n')\n const declaration = lines[0]?.trim() || 'sequenceDiagram'\n\n const participants: SequenceParticipant[] = []\n const participantIndex = new Map<string, number>() // raw id → index\n const events: SequenceEvent[] = []\n let order = 0\n let eventSeq = 0\n let fragmentSeq = 0\n\n type FragFrame = { id: string; kind: SequenceFragmentKind; depth: number }\n const fragStack: FragFrame[] = []\n\n const ensureParticipant = (\n rawId: string,\n label: string | undefined,\n kind: SequenceParticipantKind,\n lineNo: number,\n ): string => {\n const existingIndex = participantIndex.get(rawId)\n if (existingIndex !== undefined) {\n const existing = participants[existingIndex]\n if (\n label &&\n existing &&\n (existing.label === rawId || existing.label === existing.id)\n ) {\n existing.label = label\n }\n if (existing && kind === 'actor') existing.kind = 'actor'\n return existing?.id ?? sanitizeId(rawId)\n }\n\n const baseId = sanitizeId(rawId) || `participant_${participants.length + 1}`\n let id = baseId\n if (participants.some((p) => p.id === baseId)) {\n diagnostics.push({\n severity: 'error',\n code: 'id-collision',\n message: `Participant id collision after sanitization: \"${rawId}\" → \"${baseId}\"`,\n range: range(lineNo),\n })\n let suffix = 2\n while (participants.some((p) => p.id === `${baseId}_${suffix}`)) {\n suffix += 1\n }\n id = `${baseId}_${suffix}`\n }\n const p: SequenceParticipant = {\n id,\n label: label ?? rawId,\n kind,\n order: participants.length,\n range: range(lineNo),\n }\n participantIndex.set(rawId, participants.length)\n participants.push(p)\n return id\n }\n\n // Skip declaration line\n for (let i = 1; i < lines.length; i++) {\n const lineNo = baseLine + i\n const rawLine = lines[i]\n const line = rawLine.trim()\n if (!line || line.startsWith('%%')) continue\n\n // participant / actor\n const pMatch = line.match(\n /^(participant|actor)\\s+(\\S+)(?:\\s+as\\s+(.+))?$/i,\n )\n if (pMatch) {\n const kind = pMatch[1].toLowerCase() as SequenceParticipantKind\n const rawId = pMatch[2]\n const alias = pMatch[3] ? stripQuotes(pMatch[3]) : undefined\n ensureParticipant(rawId, alias, kind, lineNo)\n continue\n }\n\n // Notes: Note left of X: text | Note right of X: text | Note over A,B: text\n const noteMatch = line.match(\n /^Note\\s+(left of|right of|over)\\s+([^:]+)\\s*:\\s*(.+)$/i,\n )\n if (noteMatch) {\n const placementRaw = noteMatch[1].toLowerCase()\n const placement =\n placementRaw === 'left of'\n ? 'left'\n : placementRaw === 'right of'\n ? 'right'\n : 'over'\n const targetRaw = noteMatch[2].trim()\n const text = splitStructuredText(noteMatch[3])\n const targetIds = targetRaw.split(/\\s*,\\s*/).map((t) => {\n const cleaned = stripQuotes(t.trim())\n return ensureParticipant(cleaned, undefined, 'participant', lineNo)\n })\n events.push({\n type: 'note',\n id: `note-${++eventSeq}`,\n placement,\n participants: targetIds,\n text: text.length ? text : [noteMatch[3].trim()],\n order: order++,\n range: range(lineNo),\n })\n continue\n }\n\n // Messages — arrows: ->>, -->>, ->, -->, -), --), ->>+, etc.\n // Order matters: longer dashed forms first\n const msgMatch = line.match(\n /^(\\S+?)\\s*(-->>|->>|-->|->|--\\)|-\\)|--x|-x)\\s*([+-])?\\s*(\\S+?)\\s*:\\s*(.+)$/,\n )\n if (msgMatch) {\n const fromRaw = msgMatch[1]\n const arrowTok = msgMatch[2]\n const actMark = msgMatch[3]\n const toRaw = msgMatch[4]\n const labelRaw = msgMatch[5]\n const from = ensureParticipant(fromRaw, undefined, 'participant', lineNo)\n const to = ensureParticipant(toRaw, undefined, 'participant', lineNo)\n const dashed = arrowTok.startsWith('--')\n const open = arrowTok.endsWith(')') || arrowTok.endsWith('x')\n events.push({\n type: 'message',\n id: `msg-${++eventSeq}`,\n from,\n to,\n label: splitStructuredText(labelRaw).length\n ? splitStructuredText(labelRaw)\n : [labelRaw.trim()],\n line: dashed ? 'dashed' : 'solid',\n arrow: open ? 'open' : 'filled',\n activateTarget: actMark === '+',\n deactivateTarget: actMark === '-',\n order: order++,\n range: range(lineNo),\n })\n continue\n }\n\n // Fragment keywords\n const fragMatch = line.match(\n /^(alt|else|opt|loop|par|critical|break|rect)(?:\\s+(.*))?$/i,\n )\n if (fragMatch) {\n const keyword = fragMatch[1].toLowerCase()\n const label = fragMatch[2]?.trim() || undefined\n\n if (keyword === 'else') {\n const parent = fragStack[fragStack.length - 1]\n if (!parent) {\n diagnostics.push({\n severity: 'error',\n code: 'orphan-else',\n message: '`else` without matching fragment',\n range: range(lineNo),\n })\n continue\n }\n events.push({\n type: 'fragmentElse',\n id: `frag-else-${++fragmentSeq}`,\n fragmentId: parent.id,\n label,\n depth: parent.depth,\n order: order++,\n range: range(lineNo),\n })\n continue\n }\n\n const kind = keyword as SequenceFragmentKind\n if (!SUPPORTED_FRAGMENTS.has(keyword)) {\n diagnostics.push({\n severity: 'unsupported',\n code: 'unsupported-fragment',\n message: `Fragment kind \"${keyword}\" is not rendered yet`,\n capability: keyword,\n range: range(lineNo),\n })\n }\n\n // First slice fully models alt (and else/end). Other kinds are recorded\n // in the tree so bodies are not dropped, with an unsupported diagnostic\n // when they are not alt.\n if (kind !== 'alt' && kind !== 'opt' && kind !== 'loop') {\n diagnostics.push({\n severity: 'unsupported',\n code: 'partial-fragment',\n message: `Fragment \"${kind}\" is parsed but has limited visual treatment`,\n capability: kind,\n range: range(lineNo),\n })\n }\n\n const id = `frag-${++fragmentSeq}`\n const depth = fragStack.length\n fragStack.push({ id, kind, depth })\n events.push({\n type: 'fragmentStart',\n id,\n kind,\n label,\n depth,\n order: order++,\n range: range(lineNo),\n })\n continue\n }\n\n if (/^end$/i.test(line)) {\n const frame = fragStack.pop()\n if (!frame) {\n diagnostics.push({\n severity: 'warning',\n code: 'orphan-end',\n message: '`end` without matching fragment',\n range: range(lineNo),\n })\n continue\n }\n events.push({\n type: 'fragmentEnd',\n id: `frag-end-${++fragmentSeq}`,\n fragmentId: frame.id,\n depth: frame.depth,\n order: order++,\n range: range(lineNo),\n })\n continue\n }\n\n if (UNSUPPORTED_LINE_START.test(line)) {\n const cap = line.split(/\\s/)[0].toLowerCase()\n diagnostics.push({\n severity: 'unsupported',\n code: 'unsupported-construct',\n message: `Unsupported sequence construct: ${cap}`,\n capability: cap,\n range: range(lineNo),\n })\n continue\n }\n\n diagnostics.push({\n severity: 'warning',\n code: 'unrecognized-line',\n message: `Skipped unrecognized line: \"${line.substring(0, 80)}\"`,\n range: range(lineNo),\n })\n }\n\n while (fragStack.length) {\n const frame = fragStack.pop()!\n diagnostics.push({\n severity: 'error',\n code: 'unclosed-fragment',\n message: `Unclosed fragment \"${frame.kind}\" (${frame.id})`,\n })\n }\n\n return {\n document: {\n family: 'sequence',\n declaration,\n participants,\n events,\n },\n diagnostics,\n }\n}\n","/**\n * parseMermaid — native Mermaid → typed ArcMermaidDocument\n */\n\nimport type {\n ArcMermaidDocument,\n ArcMermaidParseResult,\n MermaidDiagnostic,\n} from './types'\nimport { parseSequenceSource } from './sequence/parseSequence'\n\nfunction normalizeSource(source: string): string {\n return source.replace(/\\r\\n?/g, '\\n')\n}\n\nfunction findDeclaration(lines: string[]): number {\n return lines.findIndex((line) => {\n const trimmed = line.trim()\n return trimmed.length > 0 && !trimmed.startsWith('%%')\n })\n}\n\n/**\n * Parse Mermaid source into a typed native document.\n * Does not project into ArcDiagramData.\n */\nexport function parseMermaid(source: string): ArcMermaidParseResult {\n const normalized = normalizeSource(source)\n const lines = normalized.split('\\n')\n const declarationIndex = findDeclaration(lines)\n\n if (declarationIndex === -1) {\n return {\n document: null,\n diagnostics: [\n {\n severity: 'error',\n code: 'no-declaration',\n message: 'Mermaid source does not contain a diagram declaration',\n },\n ],\n source: normalized,\n }\n }\n\n const body = lines.slice(declarationIndex).join('\\n').trim()\n const firstLine = body.split('\\n')[0].trim()\n const baseLine = declarationIndex + 1\n const diagnostics: MermaidDiagnostic[] = []\n\n if (/^sequenceDiagram\\b/i.test(firstLine)) {\n const result = parseSequenceSource(body, baseLine)\n return {\n document: result.document,\n diagnostics: result.diagnostics,\n source: normalized,\n }\n }\n\n if (/^flowchart\\b/i.test(firstLine) || /^graph\\b/i.test(firstLine)) {\n const document: ArcMermaidDocument = {\n family: 'flowchart',\n declaration: firstLine.split(/\\s/)[0],\n raw: body,\n }\n diagnostics.push({\n severity: 'unsupported',\n code: 'native-renderer-pending',\n message: 'Flowchart native rendering is not available yet',\n capability: 'flowchart-native-renderer',\n })\n return { document, diagnostics, source: normalized }\n }\n\n if (/^stateDiagram-v2\\b/i.test(firstLine) || /^stateDiagram\\b/i.test(firstLine)) {\n const document: ArcMermaidDocument = {\n family: 'state',\n declaration: firstLine.split(/\\s/)[0],\n raw: body,\n }\n diagnostics.push({\n severity: 'unsupported',\n code: 'native-renderer-pending',\n message: 'State diagram native rendering is not available yet',\n capability: 'state-native-renderer',\n })\n return { document, diagnostics, source: normalized }\n }\n\n return {\n document: null,\n diagnostics: [\n {\n severity: 'error',\n code: 'unrecognized-type',\n message: `Unrecognized diagram type: \"${firstLine}\"`,\n capability: firstLine.split(/\\s/)[0],\n },\n ],\n source: normalized,\n }\n}\n","/**\n * Deterministic sequence layout — pure functions, no DOM measurement.\n * Long labels wrap within maxLabelWidth and grow their row height.\n */\n\nimport type {\n ArcSequenceDocument,\n SequenceEvent,\n SequenceFragmentElseEvent,\n SequenceFragmentStartEvent,\n SequenceMessageEvent,\n SequenceNoteEvent,\n} from '../types'\nimport type {\n SequenceLaidOutFragment,\n SequenceLaidOutFragmentLane,\n SequenceLaidOutMessage,\n SequenceLaidOutNote,\n SequenceLayout,\n SequenceLayoutMetrics,\n} from './types'\n\nconst DEFAULT_WIDTH = 960\nconst PADDING_X = 22\nconst PADDING_Y = 16\nconst HEADER_HEIGHT = 46\nconst HEADER_BOX_W = 102\nconst HEADER_BOX_H = 34\nconst MIN_PARTICIPANT_GAP = 112\nconst ROW_GAP = 7\nconst MESSAGE_MIN_HEIGHT = 24\nconst NOTE_PAD_Y = 8\nconst NOTE_PAD_X = 10\nconst FRAGMENT_PAD = 9\nconst FRAGMENT_LABEL_H = 18\nconst LANE_SEP = 6\nconst CHAR_WIDTH = 6.8\nconst LINE_HEIGHT = 14\n\nfunction estimateTextWidth(text: string, maxWidth: number): { lines: string[]; height: number; width: number } {\n if (!text) return { lines: [''], height: LINE_HEIGHT, width: 0 }\n const words = text.split(/\\s+/)\n const lines: string[] = []\n let current = ''\n for (const word of words) {\n const next = current ? `${current} ${word}` : word\n if (next.length * CHAR_WIDTH > maxWidth && current) {\n lines.push(current)\n current = word\n } else {\n current = next\n }\n }\n if (current) lines.push(current)\n if (lines.length === 0) lines.push('')\n const width = Math.min(\n maxWidth,\n Math.max(...lines.map((l) => l.length * CHAR_WIDTH)),\n )\n return { lines, height: lines.length * LINE_HEIGHT, width }\n}\n\nfunction estimateLabelBlock(label: string[], maxWidth: number): { height: number; width: number; lines: string[] } {\n if (label.length === 0) return { height: LINE_HEIGHT, width: 0, lines: [''] }\n const allLines: string[] = []\n let maxW = 0\n let totalH = 0\n for (const segment of label) {\n const est = estimateTextWidth(segment, maxWidth)\n allLines.push(...est.lines)\n maxW = Math.max(maxW, est.width)\n totalH += est.height\n }\n return { height: Math.max(LINE_HEIGHT, totalH), width: maxW, lines: allLines }\n}\n\ninterface FlatRow {\n kind: 'message' | 'note' | 'fragmentStart' | 'fragmentElse' | 'fragmentEnd' | 'spacer'\n event?: SequenceEvent\n height: number\n order: number\n}\n\nfunction participantIndex(\n doc: ArcSequenceDocument,\n id: string,\n): number {\n const idx = doc.participants.findIndex((p) => p.id === id)\n return idx >= 0 ? idx : 0\n}\n\nfunction spanX(\n participantX: Record<string, number>,\n ids: string[],\n boxHalf = HEADER_BOX_W / 2,\n): { x: number; width: number } {\n if (ids.length === 0) {\n const xs = Object.values(participantX)\n const min = Math.min(...xs)\n const max = Math.max(...xs)\n return { x: min - boxHalf, width: max - min + boxHalf * 2 }\n }\n const xs = ids.map((id) => participantX[id] ?? 0)\n const min = Math.min(...xs)\n const max = Math.max(...xs)\n return { x: min - boxHalf, width: Math.max(boxHalf * 2, max - min + boxHalf * 2) }\n}\n\nexport interface SequenceLayoutOptions {\n width?: number\n maxLabelWidth?: number\n}\n\nexport function layoutSequence(\n document: ArcSequenceDocument,\n options: SequenceLayoutOptions = {},\n): SequenceLayout {\n const targetWidth = options.width ?? DEFAULT_WIDTH\n const maxLabelWidth = options.maxLabelWidth ?? 160\n const n = document.participants.length || 1\n\n const usable = targetWidth - PADDING_X * 2\n const gap = Math.max(MIN_PARTICIPANT_GAP, usable / Math.max(n, 1))\n const contentWidth = Math.max(targetWidth, PADDING_X * 2 + gap * (n - 1) + HEADER_BOX_W)\n const startX = PADDING_X + HEADER_BOX_W / 2 + Math.max(0, (contentWidth - PADDING_X * 2 - gap * (n - 1) - HEADER_BOX_W) / 2)\n\n const participantX: Record<string, number> = {}\n document.participants.forEach((p, i) => {\n participantX[p.id] = startX + i * gap\n })\n\n // Build rows in authored order\n const rows: FlatRow[] = []\n for (const event of document.events) {\n if (event.type === 'message') {\n const est = estimateLabelBlock(event.label, maxLabelWidth)\n const self = event.from === event.to\n const h = Math.max(MESSAGE_MIN_HEIGHT, est.height + (self ? 24 : 12)) + ROW_GAP\n rows.push({ kind: 'message', event, height: h, order: event.order })\n } else if (event.type === 'note') {\n const est = estimateLabelBlock(event.text, maxLabelWidth + 40)\n const h = Math.max(36, est.height + NOTE_PAD_Y * 2) + ROW_GAP\n rows.push({ kind: 'note', event, height: h, order: event.order })\n } else if (event.type === 'fragmentStart') {\n rows.push({\n kind: 'fragmentStart',\n event,\n height: FRAGMENT_LABEL_H + FRAGMENT_PAD,\n order: event.order,\n })\n } else if (event.type === 'fragmentElse') {\n rows.push({\n kind: 'fragmentElse',\n event,\n height: FRAGMENT_LABEL_H + LANE_SEP,\n order: event.order,\n })\n } else if (event.type === 'fragmentEnd') {\n rows.push({\n kind: 'fragmentEnd',\n event,\n height: FRAGMENT_PAD,\n order: event.order,\n })\n }\n }\n\n const headerY = PADDING_Y\n let y = headerY + HEADER_HEIGHT + 12\n const rowTops: number[] = []\n const rowHeights: number[] = []\n const orderY = new Map<number, number>()\n const orderH = new Map<number, number>()\n\n for (const row of rows) {\n rowTops.push(y)\n rowHeights.push(row.height)\n orderY.set(row.order, y)\n orderH.set(row.order, row.height)\n y += row.height\n }\n\n const contentBottom = y + PADDING_Y\n const metrics: SequenceLayoutMetrics = {\n width: contentWidth,\n height: contentBottom,\n paddingX: PADDING_X,\n paddingY: PADDING_Y,\n headerHeight: HEADER_HEIGHT,\n participantGap: gap,\n participantX,\n rowTops,\n rowHeights,\n }\n\n const messages: SequenceLaidOutMessage[] = []\n const notes: SequenceLaidOutNote[] = []\n\n for (const row of rows) {\n if (row.kind === 'message' && row.event?.type === 'message') {\n const ev = row.event as SequenceMessageEvent\n const fromX = participantX[ev.from] ?? startX\n const toX = participantX[ev.to] ?? startX\n const top = orderY.get(ev.order) ?? 0\n const h = orderH.get(ev.order) ?? MESSAGE_MIN_HEIGHT\n messages.push({\n event: ev,\n y: top + h / 2 - ROW_GAP / 2,\n fromX,\n toX,\n self: ev.from === ev.to,\n })\n }\n if (row.kind === 'note' && row.event?.type === 'note') {\n const ev = row.event as SequenceNoteEvent\n const top = orderY.get(ev.order) ?? 0\n const h = (orderH.get(ev.order) ?? 36) - ROW_GAP\n const spanIds =\n ev.placement === 'over'\n ? expandParticipantRange(document, ev.participants)\n : ev.participants\n const { x, width } = spanX(participantX, spanIds)\n const est = estimateLabelBlock(ev.text, Math.max(80, width - NOTE_PAD_X * 2))\n notes.push({\n event: ev,\n x,\n y: top,\n width: Math.max(width, est.width + NOTE_PAD_X * 2),\n height: h,\n })\n }\n }\n\n // Fragments: pair start/else/end by stack\n const fragments = layoutFragments(document, rows, orderY, orderH, participantX, startX)\n\n return { metrics, messages, notes, fragments }\n}\n\nfunction expandParticipantRange(\n doc: ArcSequenceDocument,\n ids: string[],\n): string[] {\n if (ids.length <= 1) return ids\n const a = participantIndex(doc, ids[0])\n const b = participantIndex(doc, ids[ids.length - 1])\n const lo = Math.min(a, b)\n const hi = Math.max(a, b)\n return doc.participants.slice(lo, hi + 1).map((p) => p.id)\n}\n\nfunction layoutFragments(\n document: ArcSequenceDocument,\n rows: FlatRow[],\n orderY: Map<number, number>,\n orderH: Map<number, number>,\n participantX: Record<string, number>,\n _startX: number,\n): SequenceLaidOutFragment[] {\n const fragments: SequenceLaidOutFragment[] = []\n type Frame = {\n start: SequenceFragmentStartEvent\n elses: SequenceFragmentElseEvent[]\n endOrder?: number\n }\n const stack: Frame[] = []\n const completed: Frame[] = []\n\n for (const row of rows) {\n if (row.kind === 'fragmentStart' && row.event?.type === 'fragmentStart') {\n stack.push({ start: row.event, elses: [] })\n } else if (row.kind === 'fragmentElse' && row.event?.type === 'fragmentElse') {\n const top = stack[stack.length - 1]\n if (top) top.elses.push(row.event)\n } else if (row.kind === 'fragmentEnd' && row.event?.type === 'fragmentEnd') {\n const frame = stack.pop()\n if (frame) {\n frame.endOrder = row.event.order\n completed.push(frame)\n }\n }\n }\n\n // All participants for fragment width (full interaction width)\n const allIds = document.participants.map((p) => p.id)\n const { x, width } = spanX(participantX, allIds, HEADER_BOX_W / 2 + 8)\n\n for (const frame of completed) {\n const startY = orderY.get(frame.start.order) ?? 0\n const endOrder = frame.endOrder ?? frame.start.order\n const endY = (orderY.get(endOrder) ?? startY) + (orderH.get(endOrder) ?? 0)\n const height = Math.max(40, endY - startY)\n\n const lanes: SequenceLaidOutFragmentLane[] = []\n // First lane: from start to first else (or end)\n const firstElse = frame.elses[0]\n const firstEnd = firstElse ? firstElse.order : endOrder\n lanes.push({\n label: frame.start.label,\n y: startY,\n height: Math.max(\n FRAGMENT_LABEL_H,\n (orderY.get(firstEnd) ?? startY) - startY,\n ),\n startOrder: frame.start.order,\n endOrder: firstEnd,\n })\n\n for (let i = 0; i < frame.elses.length; i++) {\n const el = frame.elses[i]\n const next = frame.elses[i + 1]\n const laneEnd = next ? next.order : endOrder\n const ly = orderY.get(el.order) ?? startY\n lanes.push({\n label: el.label,\n y: ly,\n height: Math.max(\n FRAGMENT_LABEL_H,\n (orderY.get(laneEnd) ?? ly) - ly,\n ),\n startOrder: el.order,\n endOrder: laneEnd,\n })\n }\n\n fragments.push({\n id: frame.start.id,\n kind: frame.start.kind,\n label: frame.start.label,\n x: x - 4,\n y: startY,\n width: width + 8,\n height,\n depth: frame.start.depth,\n lanes,\n })\n }\n\n return fragments\n}\n\nexport { estimateLabelBlock, HEADER_BOX_W, HEADER_BOX_H, HEADER_HEIGHT, PADDING_Y }\n","import { getTheme, type ThemeId } from '../../themes'\n\nfunction withAlpha(hex: string, alpha: number): string {\n const value = hex.replace('#', '')\n if (!/^[0-9a-f]{6}$/i.test(value)) return hex\n const red = Number.parseInt(value.slice(0, 2), 16)\n const green = Number.parseInt(value.slice(2, 4), 16)\n const blue = Number.parseInt(value.slice(4, 6), 16)\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`\n}\nimport type { SequenceThemeTokens } from './types'\n\nexport function getSequenceThemeTokens(\n mode: 'light' | 'dark',\n themeId: ThemeId = 'default',\n): SequenceThemeTokens {\n const arcTheme = getTheme(themeId)[mode]\n const violet = arcTheme.palette.violet.stroke\n const emerald = arcTheme.palette.emerald.stroke\n const amber = arcTheme.palette.amber.stroke\n\n if (mode === 'dark') {\n return {\n background: '#09090b',\n surface: '#18181b',\n border: '#3f3f46',\n text: '#fafafa',\n textSecondary: '#a1a1aa',\n textMuted: '#71717a',\n lifeline: '#3f3f46',\n messageSolid: '#a1a1aa',\n messageDashed: '#71717a',\n messageLabel: '#e4e4e7',\n actorFill: withAlpha(violet, 0.14),\n actorStroke: violet,\n actorText: '#ddd6fe',\n participantFill: '#18181b',\n participantStroke: '#52525b',\n participantText: '#e4e4e7',\n noteFill: 'rgba(39, 39, 42, 0.95)',\n noteStroke: '#52525b',\n noteText: '#d4d4d8',\n localFill: withAlpha(emerald, 0.12),\n localStroke: emerald,\n localText: '#a7f3d0',\n modelFill: withAlpha(amber, 0.12),\n modelStroke: amber,\n modelText: '#fde68a',\n fragmentFill: 'rgba(113, 113, 122, 0.08)',\n fragmentStroke: '#52525b',\n fragmentLabelBg: '#27272a',\n fragmentLabelText: '#e4e4e7',\n fragmentDivider: '#3f3f46',\n highlight: violet,\n dimOpacity: 0.45,\n }\n }\n\n return {\n background: '#ffffff',\n surface: '#fafafa',\n border: '#e4e4e7',\n text: '#18181b',\n textSecondary: '#52525b',\n textMuted: '#71717a',\n lifeline: '#d4d4d8',\n messageSolid: '#3f3f46',\n messageDashed: '#71717a',\n messageLabel: '#27272a',\n actorFill: withAlpha(violet, 0.1),\n actorStroke: violet,\n actorText: '#5b21b6',\n participantFill: '#ffffff',\n participantStroke: '#a1a1aa',\n participantText: '#18181b',\n noteFill: '#f4f4f5',\n noteStroke: '#d4d4d8',\n noteText: '#3f3f46',\n localFill: withAlpha(emerald, 0.1),\n localStroke: emerald,\n localText: '#065f46',\n modelFill: withAlpha(amber, 0.1),\n modelStroke: amber,\n modelText: '#92400e',\n fragmentFill: 'rgba(113, 113, 122, 0.06)',\n fragmentStroke: '#a1a1aa',\n fragmentLabelBg: '#f4f4f5',\n fragmentLabelText: '#3f3f46',\n fragmentDivider: '#d4d4d8',\n highlight: violet,\n dimOpacity: 0.45,\n }\n}\n\n/** Classify note text for cool (local) vs warm (model) accent */\nexport function classifyNoteAccent(\n text: string[],\n): 'local' | 'model' | 'default' {\n const joined = text.join(' ').toLowerCase()\n if (/no model|local|control plane|sse|broker|menu/.test(joined)) {\n return 'local'\n }\n if (\n /model|inference|token|allowance|api|prompt|skill|agents\\.md|reply context/.test(\n joined,\n )\n ) {\n return 'model'\n }\n return 'default'\n}\n","/**\n * Default sequence part renderers — SVG building blocks.\n * Replace any via SequenceRendererParts for customization.\n */\n\nimport {\n HEADER_BOX_H,\n HEADER_BOX_W,\n} from './layout'\nimport type {\n ActorHeaderProps,\n FragmentPartProps,\n LifelineProps,\n MessagePartProps,\n NotePartProps,\n ParticipantHeaderProps,\n SequenceRendererParts,\n} from './types'\n\nfunction wrapLines(\n text: string[],\n maxChars: number,\n): string[] {\n const out: string[] = []\n for (const segment of text) {\n if (segment.length <= maxChars) {\n out.push(segment)\n continue\n }\n const words = segment.split(/\\s+/)\n let cur = ''\n for (const w of words) {\n const next = cur ? `${cur} ${w}` : w\n if (next.length > maxChars && cur) {\n out.push(cur)\n cur = w\n } else {\n cur = next\n }\n }\n if (cur) out.push(cur)\n }\n return out.length ? out : ['']\n}\n\nexport function DefaultActorHeader({\n participant,\n x,\n y,\n width,\n height,\n context,\n emphasized,\n onPointerEnter,\n onPointerLeave,\n onFocus,\n onBlur,\n onClick,\n}: ActorHeaderProps) {\n const { tokens, interactive } = context\n const opacity = context.dimmed && !emphasized ? tokens.dimOpacity : 1\n const cx = x\n const top = y + 3\n const stroke = emphasized ? tokens.highlight : tokens.actorStroke\n\n return (\n <g\n opacity={opacity}\n style={{ transition: 'opacity 160ms ease-out' }}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n onFocus={onFocus}\n onBlur={onBlur}\n onClick={onClick}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? 'button' : undefined}\n aria-label={`Actor ${participant.label}`}\n >\n {/* Compact \"human spark\": a tiny orbital portrait rather than a stick figure. */}\n <circle\n cx={cx}\n cy={top + 6}\n r={6.5}\n fill=\"none\"\n stroke={stroke}\n strokeWidth={1}\n opacity={emphasized ? 0.5 : 0.26}\n />\n <circle\n cx={cx}\n cy={top + 6}\n r={3.7}\n fill={tokens.actorFill}\n stroke={stroke}\n strokeWidth={emphasized ? 1.7 : 1.3}\n />\n <path\n d={`M ${cx - 9.5} ${top + 22} C ${cx - 9} ${top + 16.5}, ${cx - 5.5} ${top + 14}, ${cx - 2.5} ${top + 13.5} M ${cx + 2.5} ${top + 13.5} C ${cx + 5.5} ${top + 14}, ${cx + 9} ${top + 16.5}, ${cx + 9.5} ${top + 22}`}\n fill=\"none\"\n stroke={stroke}\n strokeWidth={emphasized ? 1.8 : 1.4}\n strokeLinecap=\"round\"\n />\n <text\n x={cx}\n y={y + height}\n textAnchor=\"middle\"\n fill={tokens.actorText}\n fontSize={10}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n fontWeight={600}\n >\n {participant.label}\n </text>\n {/* invisible hit target */}\n <rect\n x={x - width / 2}\n y={y}\n width={width}\n height={height + 14}\n fill=\"transparent\"\n />\n </g>\n )\n}\n\nexport function DefaultParticipantHeader({\n participant,\n x,\n y,\n width,\n height,\n context,\n emphasized,\n onPointerEnter,\n onPointerLeave,\n onFocus,\n onBlur,\n onClick,\n}: ParticipantHeaderProps) {\n const { tokens, interactive } = context\n const opacity = context.dimmed && !emphasized ? tokens.dimOpacity : 1\n const boxW = width\n const boxH = height\n const lines = wrapLines([participant.label], Math.floor(boxW / 7))\n\n return (\n <g\n opacity={opacity}\n style={{ transition: 'opacity 160ms ease-out' }}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n onFocus={onFocus}\n onBlur={onBlur}\n onClick={onClick}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? 'button' : undefined}\n aria-label={`Participant ${participant.label}`}\n >\n <rect\n x={x - boxW / 2}\n y={y}\n width={boxW}\n height={boxH}\n rx={7}\n ry={7}\n fill={tokens.participantFill}\n stroke={emphasized ? tokens.highlight : tokens.participantStroke}\n strokeWidth={emphasized ? 1.75 : 1}\n />\n {lines.map((ln, i) => (\n <text\n key={i}\n x={x}\n y={y + boxH / 2 + (i - (lines.length - 1) / 2) * 12}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill={tokens.participantText}\n fontSize={10}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n fontWeight={600}\n >\n {ln}\n </text>\n ))}\n </g>\n )\n}\n\nexport function DefaultLifeline({\n participant,\n x,\n y1,\n y2,\n context,\n emphasized,\n}: LifelineProps) {\n const { tokens } = context\n const opacity = context.dimmed && !emphasized ? tokens.dimOpacity : 1\n return (\n <line\n x1={x}\n y1={y1}\n x2={x}\n y2={y2}\n stroke={emphasized ? tokens.highlight : tokens.lifeline}\n strokeWidth={emphasized ? 1.5 : 0.85}\n strokeDasharray={emphasized ? undefined : '3 4'}\n opacity={opacity}\n style={{ transition: 'opacity 160ms ease-out, stroke 160ms ease-out' }}\n data-participant={participant.id}\n />\n )\n}\n\nexport function DefaultMessage({\n laidOut,\n context,\n emphasized,\n onPointerEnter,\n onPointerLeave,\n onActivate,\n}: MessagePartProps) {\n const { tokens, interactive } = context\n const { event, y, fromX, toX, self } = laidOut\n const dashed = event.line === 'dashed'\n const stroke = dashed ? tokens.messageDashed : tokens.messageSolid\n const color = emphasized ? tokens.highlight : stroke\n const opacity = context.dimmed && !emphasized ? tokens.dimOpacity : 1\n const markerId = `${context.idPrefix}-arrow-${event.id}`\n const label = event.label.join(' ')\n const lines = wrapLines(event.label, 28)\n\n const arrowHead = (\n <marker\n id={markerId}\n markerWidth=\"7\"\n markerHeight=\"7\"\n refX=\"5.5\"\n refY=\"2.75\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n {event.arrow === 'open' ? (\n <path d=\"M0,0 L5.5,2.75 L0,5.5\" fill=\"none\" stroke={color} strokeWidth=\"1.1\" />\n ) : (\n <path d=\"M0,0 L5.5,2.75 L0,5.5 Z\" fill={color} />\n )}\n </marker>\n )\n\n if (self) {\n const loopW = 36\n const loopH = 18\n const path = `M ${fromX} ${y - loopH / 2} L ${fromX + loopW} ${y - loopH / 2} L ${fromX + loopW} ${y + loopH / 2} L ${fromX} ${y + loopH / 2}`\n return (\n <g\n opacity={opacity}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n onClick={onActivate}\n style={{ cursor: interactive ? 'pointer' : undefined }}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n aria-label={`Message: ${label}`}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onActivate?.()\n }\n }\n : undefined\n }\n >\n <defs>{arrowHead}</defs>\n <path\n d={path}\n fill=\"none\"\n stroke={color}\n strokeWidth={emphasized ? 2 : 1.5}\n strokeDasharray={dashed ? '5 4' : undefined}\n markerEnd={`url(#${markerId})`}\n />\n <text\n x={fromX + loopW + 6}\n y={y + 1}\n fill={tokens.messageLabel}\n fontSize={10}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n dominantBaseline=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n }\n\n const dir = toX >= fromX ? 1 : -1\n const x1 = fromX\n const x2 = toX - dir * 2\n const midX = (x1 + x2) / 2\n const labelY = y - 5 - (lines.length - 1) * 5.5\n\n return (\n <g\n opacity={opacity}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n onClick={onActivate}\n style={{\n cursor: interactive ? 'pointer' : undefined,\n transition: 'opacity 160ms ease-out',\n }}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n aria-label={`Message: ${label}`}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onActivate?.()\n }\n }\n : undefined\n }\n >\n <defs>{arrowHead}</defs>\n <line\n x1={x1}\n y1={y}\n x2={x2}\n y2={y}\n stroke={color}\n strokeWidth={emphasized ? 2 : 1.35}\n strokeDasharray={dashed ? '5 4' : undefined}\n markerEnd={`url(#${markerId})`}\n />\n {/* hit area */}\n <line\n x1={x1}\n y1={y}\n x2={x2}\n y2={y}\n stroke=\"transparent\"\n strokeWidth={12}\n />\n {lines.map((ln, i) => (\n <text\n key={i}\n x={midX}\n y={labelY + i * 11}\n textAnchor=\"middle\"\n fill={tokens.messageLabel}\n fontSize={10}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n fontWeight={dashed ? 400 : 500}\n >\n {ln}\n </text>\n ))}\n </g>\n )\n}\n\nexport function DefaultNote({ laidOut, context, emphasized }: NotePartProps) {\n const { tokens } = context\n const accent = context.noteAccent(laidOut.event)\n const fill =\n accent === 'local'\n ? tokens.localFill\n : accent === 'model'\n ? tokens.modelFill\n : tokens.noteFill\n const stroke =\n accent === 'local'\n ? tokens.localStroke\n : accent === 'model'\n ? tokens.modelStroke\n : tokens.noteStroke\n const textColor =\n accent === 'local'\n ? tokens.localText\n : accent === 'model'\n ? tokens.modelText\n : tokens.noteText\n const opacity = context.dimmed && !emphasized ? tokens.dimOpacity : 1\n const lines = wrapLines(\n laidOut.event.text,\n Math.max(12, Math.floor((laidOut.width - 16) / 6.5)),\n )\n const { x, y, width, height } = laidOut\n\n return (\n <g opacity={opacity} style={{ transition: 'opacity 160ms ease-out' }}>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n rx={8}\n ry={8}\n fill={fill}\n stroke={emphasized ? tokens.highlight : stroke}\n strokeWidth={emphasized ? 1.5 : 1}\n />\n {lines.map((ln, i) => (\n <text\n key={i}\n x={x + width / 2}\n y={y + height / 2 + (i - (lines.length - 1) / 2) * 12}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill={textColor}\n fontSize={10}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n >\n {ln}\n </text>\n ))}\n </g>\n )\n}\n\nexport function DefaultFragment({ laidOut, context }: FragmentPartProps) {\n const { tokens } = context\n const { x, y, width, height, kind, label, lanes } = laidOut\n const kindLabel = kind.toUpperCase()\n\n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n rx={8}\n ry={8}\n fill={tokens.fragmentFill}\n stroke={tokens.fragmentStroke}\n strokeWidth={1}\n />\n {/* kind badge */}\n <rect\n x={x + 7}\n y={y + 4}\n width={Math.max(34, kindLabel.length * 6.5 + 14)}\n height={16}\n rx={4}\n ry={4}\n fill={tokens.fragmentLabelBg}\n stroke={tokens.fragmentStroke}\n strokeWidth={1}\n />\n <text\n x={x + 7 + Math.max(34, kindLabel.length * 6.5 + 14) / 2}\n y={y + 12}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill={tokens.fragmentLabelText}\n fontSize={9}\n fontWeight={700}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n >\n {kindLabel}\n </text>\n {label && (\n <text\n x={x + 7 + Math.max(34, kindLabel.length * 6.5 + 14) + 7}\n y={y + 12}\n dominantBaseline=\"middle\"\n fill={tokens.textSecondary}\n fontSize={10}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n >\n {label}\n </text>\n )}\n {/* else lane dividers + labels */}\n {lanes.slice(1).map((lane, i) => (\n <g key={i}>\n <line\n x1={x + 6}\n y1={lane.y}\n x2={x + width - 6}\n y2={lane.y}\n stroke={tokens.fragmentDivider}\n strokeWidth={1}\n strokeDasharray=\"4 3\"\n />\n <text\n x={x + 12}\n y={lane.y + 12}\n fill={tokens.textSecondary}\n fontSize={10}\n fontWeight={600}\n fontFamily=\"ui-sans-serif, system-ui, -apple-system, sans-serif\"\n >\n {`else${lane.label ? ` ${lane.label}` : ''}`}\n </text>\n </g>\n ))}\n </g>\n )\n}\n\nexport const defaultSequenceParts: Required<SequenceRendererParts> = {\n ActorHeader: DefaultActorHeader,\n ParticipantHeader: DefaultParticipantHeader,\n Lifeline: DefaultLifeline,\n Message: DefaultMessage,\n Note: DefaultNote,\n Fragment: DefaultFragment,\n}\n\nexport { HEADER_BOX_W, HEADER_BOX_H }\n","/**\n * Native Arc sequence diagram renderer (not an ArcDiagramData projection).\n */\n\nimport { useId, useMemo, useState, useCallback } from 'react'\nimport type { ThemeId } from '../../themes'\nimport type { ArcSequenceDocument, SequenceMessageEvent } from '../types'\nimport { layoutSequence, HEADER_BOX_W, HEADER_BOX_H, HEADER_HEIGHT, PADDING_Y } from './layout'\nimport { getSequenceThemeTokens } from './theme'\nimport { defaultSequenceParts } from './parts'\nimport type {\n SequencePartContext,\n SequencePresentationOptions,\n SequenceRendererParts,\n} from './types'\n\nexport interface SequenceRendererProps {\n document: ArcSequenceDocument\n mode?: 'light' | 'dark'\n theme?: ThemeId\n interactive?: boolean\n className?: string\n title?: string\n description?: string\n presentation?: SequencePresentationOptions\n}\n\nfunction resolveParts(overrides?: SequenceRendererParts): Required<SequenceRendererParts> {\n return {\n ActorHeader: overrides?.ActorHeader ?? defaultSequenceParts.ActorHeader,\n ParticipantHeader:\n overrides?.ParticipantHeader ?? defaultSequenceParts.ParticipantHeader,\n Lifeline: overrides?.Lifeline ?? defaultSequenceParts.Lifeline,\n Message: overrides?.Message ?? defaultSequenceParts.Message,\n Note: overrides?.Note ?? defaultSequenceParts.Note,\n Fragment: overrides?.Fragment ?? defaultSequenceParts.Fragment,\n }\n}\n\nfunction neutralNoteAccent(): 'default' {\n return 'default'\n}\n\nexport function SequenceRenderer({\n document,\n mode = 'light',\n theme = 'default',\n interactive = true,\n className = '',\n title,\n description,\n presentation,\n}: SequenceRendererProps) {\n const idPrefix = `arc-seq-${useId().replace(/:/g, '')}`\n const tokens = useMemo(\n () => ({\n ...getSequenceThemeTokens(mode, theme),\n ...presentation?.tokens,\n }),\n [mode, theme, presentation?.tokens],\n )\n\n const layout = useMemo(\n () =>\n layoutSequence(document, {\n width: presentation?.width ?? 960,\n maxLabelWidth: presentation?.maxLabelWidth ?? 160,\n }),\n [document, presentation?.width, presentation?.maxLabelWidth],\n )\n\n const parts = useMemo(\n () => resolveParts(presentation?.parts),\n [presentation?.parts],\n )\n\n const interactions = presentation?.interactions\n const activeMessage = useMemo<SequenceMessageEvent | undefined>(\n () =>\n interactions?.activeMessageId\n ? document.events.find(\n (event): event is SequenceMessageEvent =>\n event.type === 'message' &&\n event.id === interactions.activeMessageId,\n )\n : undefined,\n [document.events, interactions?.activeMessageId],\n )\n const controlledHighlight = interactions?.highlightedParticipantId\n const [internalHighlight, setInternalHighlight] = useState<string | null>(null)\n const highlight =\n controlledHighlight !== undefined ? controlledHighlight : internalHighlight\n\n const dimUnrelated =\n interactions?.dimUnrelated ??\n (interactive && (highlight != null || activeMessage != null))\n\n const relatedIds = useMemo(() => {\n if (!highlight) return null\n const set = new Set<string>([highlight])\n for (const m of document.events) {\n if (m.type === 'message' && (m.from === highlight || m.to === highlight)) {\n set.add(m.from)\n set.add(m.to)\n }\n if (m.type === 'note' && m.participants.includes(highlight)) {\n m.participants.forEach((p) => set.add(p))\n }\n }\n return set\n }, [document.events, highlight])\n\n const isEmphasizedParticipant = useCallback(\n (id: string) => {\n if (activeMessage) {\n return activeMessage.from === id || activeMessage.to === id\n }\n if (!highlight) return false\n return relatedIds?.has(id) ?? id === highlight\n },\n [activeMessage, highlight, relatedIds],\n )\n\n const isEmphasizedMessage = useCallback(\n (id: string, from: string, to: string) => {\n if (activeMessage) {\n return activeMessage.id === id\n }\n if (!highlight) return false\n return from === highlight || to === highlight\n },\n [activeMessage, highlight],\n )\n\n const setHighlight = useCallback(\n (id: string | null) => {\n if (controlledHighlight === undefined) setInternalHighlight(id)\n interactions?.onParticipantHover?.(id)\n },\n [controlledHighlight, interactions],\n )\n\n const a11yTitle =\n title ??\n `Sequence diagram with ${document.participants.length} participants`\n const a11yDesc =\n description ??\n buildAutoDescription(document)\n\n const context: SequencePartContext = {\n idPrefix,\n mode,\n themeId: theme,\n tokens,\n layout,\n document,\n interactive,\n highlightedParticipantId: highlight,\n dimmed: Boolean(dimUnrelated && (highlight || activeMessage)),\n noteAccent: presentation?.noteAccent ?? neutralNoteAccent,\n }\n\n const { metrics } = layout\n const lifelineTop = PADDING_Y + HEADER_HEIGHT\n const lifelineBottom = metrics.height - 12\n\n const {\n ActorHeader,\n ParticipantHeader,\n Lifeline,\n Message,\n Note,\n Fragment,\n } = parts\n\n return (\n <div\n className={className}\n style={{\n width: '100%',\n minWidth: 0,\n overflowX: 'auto',\n ...presentation?.style,\n }}\n data-arc-mermaid-family=\"sequence\"\n >\n <svg\n viewBox={`0 0 ${metrics.width} ${metrics.height}`}\n width={`${(presentation?.scale ?? 1) * 100}%`}\n height=\"auto\"\n role=\"img\"\n aria-labelledby={`${idPrefix}-title ${idPrefix}-desc`}\n style={{\n display: 'block',\n background: tokens.background,\n borderRadius: 10,\n minWidth: Math.min(metrics.width * (presentation?.scale ?? 1), 680),\n maxWidth: metrics.width * (presentation?.scale ?? 1),\n }}\n >\n <title id={`${idPrefix}-title`}>{a11yTitle}</title>\n <desc id={`${idPrefix}-desc`}>{a11yDesc}</desc>\n\n {/* Background */}\n <rect\n x={0}\n y={0}\n width={metrics.width}\n height={metrics.height}\n fill={tokens.background}\n rx={10}\n />\n\n {/* Fragments behind messages */}\n {layout.fragments.map((f) => (\n <Fragment key={f.id} laidOut={f} context={context} />\n ))}\n\n {/* Lifelines */}\n {document.participants.map((p) => (\n <Lifeline\n key={`life-${p.id}`}\n participant={p}\n x={metrics.participantX[p.id]}\n y1={lifelineTop}\n y2={lifelineBottom}\n context={context}\n emphasized={isEmphasizedParticipant(p.id)}\n />\n ))}\n\n {/* Participant headers */}\n {document.participants.map((p) => {\n const x = metrics.participantX[p.id]\n const y = PADDING_Y\n const emphasized = isEmphasizedParticipant(p.id)\n const handlers = interactive\n ? {\n onPointerEnter: () => setHighlight(p.id),\n onPointerLeave: () => setHighlight(null),\n onFocus: () => {\n setHighlight(p.id)\n interactions?.onParticipantFocus?.(p.id)\n },\n onBlur: () => {\n setHighlight(null)\n interactions?.onParticipantFocus?.(null)\n },\n onClick: () => interactions?.onParticipantActivate?.(p.id),\n }\n : {}\n\n if (p.kind === 'actor') {\n return (\n <ActorHeader\n key={p.id}\n participant={p}\n x={x}\n y={y}\n width={HEADER_BOX_W}\n height={HEADER_BOX_H + 8}\n context={context}\n emphasized={emphasized}\n {...handlers}\n />\n )\n }\n return (\n <ParticipantHeader\n key={p.id}\n participant={p}\n x={x}\n y={y}\n width={HEADER_BOX_W}\n height={HEADER_BOX_H}\n context={context}\n emphasized={emphasized}\n {...handlers}\n />\n )\n })}\n\n {/* Notes */}\n {layout.notes.map((n) => (\n <Note\n key={n.event.id}\n laidOut={n}\n context={context}\n emphasized={\n highlight != null &&\n n.event.participants.some((id) => relatedIds?.has(id))\n }\n />\n ))}\n\n {/* Messages */}\n {layout.messages.map((m) => (\n <Message\n key={m.event.id}\n laidOut={m}\n context={context}\n emphasized={isEmphasizedMessage(\n m.event.id,\n m.event.from,\n m.event.to,\n )}\n onPointerEnter={\n interactive\n ? () => interactions?.onMessageHover?.(m.event.id)\n : undefined\n }\n onPointerLeave={\n interactive\n ? () => interactions?.onMessageHover?.(null)\n : undefined\n }\n onActivate={\n interactive\n ? () => interactions?.onMessageActivate?.(m.event.id)\n : undefined\n }\n />\n ))}\n </svg>\n </div>\n )\n}\n\nfunction buildAutoDescription(doc: ArcSequenceDocument): string {\n const names = doc.participants.map((p) => p.label).join(', ')\n const msgCount = doc.events.filter((e) => e.type === 'message').length\n const noteCount = doc.events.filter((e) => e.type === 'note').length\n const fragCount = doc.events.filter((e) => e.type === 'fragmentStart').length\n return `Participants: ${names}. ${msgCount} messages, ${noteCount} notes, ${fragCount} fragments.`\n}\n\nexport default SequenceRenderer\n","/**\n * Family → renderer registry.\n * Adding a Mermaid family registers here; UI code must not grow type conditionals.\n */\n\nimport type { ComponentType } from 'react'\nimport type { MermaidFamily, ArcMermaidDocument } from './types'\nimport type { ThemeId } from '../themes'\nimport type { SequencePresentationOptions } from './sequence/types'\nimport { SequenceRenderer } from './sequence/SequenceRenderer'\n\nexport interface MermaidRendererProps {\n document: ArcMermaidDocument\n mode?: 'light' | 'dark'\n theme?: ThemeId\n interactive?: boolean\n className?: string\n title?: string\n description?: string\n sequence?: SequencePresentationOptions\n}\n\nexport type MermaidFamilyRenderer = ComponentType<MermaidRendererProps>\n\nfunction SequenceFamilyRenderer({\n document,\n mode,\n theme,\n interactive,\n className,\n title,\n description,\n sequence,\n}: MermaidRendererProps) {\n if (document.family !== 'sequence') return null\n return (\n <SequenceRenderer\n document={document}\n mode={mode}\n theme={theme}\n interactive={interactive}\n className={className}\n title={title}\n description={description}\n presentation={sequence}\n />\n )\n}\n\nfunction PendingFamilyRenderer({ document, className }: MermaidRendererProps) {\n return (\n <div\n className={className}\n data-arc-mermaid-family={document.family}\n style={{\n padding: 16,\n borderRadius: 12,\n border: '1px dashed #a1a1aa',\n color: '#52525b',\n fontFamily: 'ui-sans-serif, system-ui, sans-serif',\n fontSize: 13,\n }}\n >\n Native <strong>{document.family}</strong> rendering is not available yet.\n </div>\n )\n}\n\nconst registry = new Map<MermaidFamily, MermaidFamilyRenderer>([\n ['sequence', SequenceFamilyRenderer],\n ['flowchart', PendingFamilyRenderer],\n ['state', PendingFamilyRenderer],\n])\n\nexport function registerMermaidRenderer(\n family: MermaidFamily,\n renderer: MermaidFamilyRenderer,\n): void {\n registry.set(family, renderer)\n}\n\nexport function getMermaidRenderer(\n family: MermaidFamily,\n): MermaidFamilyRenderer | undefined {\n return registry.get(family)\n}\n\nexport function listMermaidRenderers(): MermaidFamily[] {\n return [...registry.keys()]\n}\n","/**\n * <ArcMermaid /> — family-aware Mermaid renderer via registry.\n */\n\nimport { useMemo } from 'react'\nimport type { ArcMermaidProps } from './types'\nimport { parseMermaid } from './parseMermaid'\nimport { getMermaidRenderer } from './registry'\n\nexport function ArcMermaid({\n source,\n document: documentProp,\n mode = 'light',\n theme = 'default',\n interactive = true,\n className = '',\n title,\n description,\n sequence,\n}: ArcMermaidProps) {\n const parsed = useMemo(() => {\n if (documentProp) {\n return {\n document: documentProp,\n diagnostics: [] as ReturnType<typeof parseMermaid>['diagnostics'],\n source: source ?? '',\n }\n }\n if (source != null) return parseMermaid(source)\n return {\n document: null,\n diagnostics: [\n {\n severity: 'error' as const,\n code: 'no-input',\n message: 'ArcMermaid requires source or document',\n },\n ],\n source: '',\n }\n }, [source, documentProp])\n\n const { document, diagnostics } = parsed\n\n if (!document) {\n return (\n <div\n className={className}\n role=\"alert\"\n style={{\n padding: 16,\n borderRadius: 12,\n border: '1px solid #fca5a5',\n background: '#fef2f2',\n color: '#991b1b',\n fontFamily: 'ui-sans-serif, system-ui, sans-serif',\n fontSize: 13,\n }}\n >\n {diagnostics.map((d, i) => (\n <div key={i}>{d.message}</div>\n ))}\n </div>\n )\n }\n\n const Renderer = getMermaidRenderer(document.family)\n if (!Renderer) {\n return (\n <div className={className} role=\"alert\">\n No renderer registered for family “{document.family}”.\n </div>\n )\n }\n\n return (\n <Renderer\n document={document}\n mode={mode}\n theme={theme}\n interactive={interactive}\n className={className}\n title={title}\n description={description}\n sequence={sequence}\n />\n )\n}\n\nexport default ArcMermaid\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ChevronLeft,\n ChevronRight,\n Expand,\n Minus,\n Pause,\n Play,\n Plus,\n Scan,\n} from 'lucide-react'\nimport { ArcMermaid } from './ArcMermaid'\nimport { parseMermaid } from './parseMermaid'\nimport { getSequenceThemeTokens } from './sequence/theme'\nimport type { ArcMermaidProps, ArcSequenceDocument } from './types'\n\nexport interface ArcMermaidPlayerProps extends ArcMermaidProps {\n defaultZoom?: number | 'fit'\n minZoom?: number\n maxZoom?: number\n zoomStep?: number\n showControls?: boolean\n showPlayback?: boolean\n autoplayMs?: number\n onStepChange?: (step: number, eventId: string | null) => void\n}\n\nfunction getSequenceDocument(\n source: string | undefined,\n document: ArcMermaidProps['document'],\n): ArcSequenceDocument | null {\n if (document?.family === 'sequence') return document\n if (document) return null\n const parsed = source == null ? null : parseMermaid(source).document\n return parsed?.family === 'sequence' ? parsed : null\n}\n\nexport function ArcMermaidPlayer({\n source,\n document,\n mode = 'light',\n theme = 'default',\n className = '',\n title,\n description,\n sequence,\n defaultZoom = 'fit',\n minZoom = 0.5,\n maxZoom = 2.5,\n zoomStep = 0.2,\n showControls = true,\n showPlayback = true,\n autoplayMs = 1400,\n onStepChange,\n}: ArcMermaidPlayerProps) {\n const rootRef = useRef<HTMLDivElement>(null)\n const sequenceDocument = useMemo(\n () => getSequenceDocument(source, document),\n [source, document],\n )\n const steps = useMemo(\n () =>\n sequenceDocument?.events.filter(\n (event): event is Extract<typeof event, { type: 'message' }> =>\n event.type === 'message',\n ) ?? [],\n [sequenceDocument],\n )\n\n const [zoom, setZoom] = useState(defaultZoom === 'fit' ? 1 : defaultZoom)\n const [stepIndex, setStepIndex] = useState(-1)\n const [playing, setPlaying] = useState(false)\n const [fullscreen, setFullscreen] = useState(false)\n\n const activeMessageId =\n stepIndex >= 0 && stepIndex < steps.length ? steps[stepIndex].id : null\n\n useEffect(() => {\n onStepChange?.(stepIndex, activeMessageId)\n }, [activeMessageId, onStepChange, stepIndex])\n\n useEffect(() => {\n if (!playing || steps.length === 0) return\n const timer = window.setInterval(() => {\n setStepIndex((current) => {\n if (current >= steps.length - 1) {\n setPlaying(false)\n return current\n }\n return current + 1\n })\n }, autoplayMs)\n return () => window.clearInterval(timer)\n }, [autoplayMs, playing, steps.length])\n\n useEffect(() => {\n const syncFullscreen = () => {\n setFullscreen(documentElementFullscreen() === rootRef.current)\n }\n globalThis.document?.addEventListener('fullscreenchange', syncFullscreen)\n return () =>\n globalThis.document?.removeEventListener('fullscreenchange', syncFullscreen)\n }, [])\n\n const setBoundedZoom = (next: number) => {\n setZoom(Math.min(maxZoom, Math.max(minZoom, Number(next.toFixed(2)))))\n }\n\n const moveStep = (delta: number) => {\n setPlaying(false)\n setStepIndex((current) =>\n Math.min(steps.length - 1, Math.max(-1, current + delta)),\n )\n }\n\n const togglePlayback = () => {\n if (steps.length === 0) return\n if (stepIndex >= steps.length - 1) setStepIndex(-1)\n setPlaying((value) => !value)\n }\n\n const toggleFullscreen = async () => {\n const element = rootRef.current\n if (!element) return\n if (documentElementFullscreen() === element) {\n await globalThis.document.exitFullscreen?.()\n } else {\n await element.requestFullscreen?.()\n }\n }\n\n const mergedSequence = {\n ...sequence,\n scale: zoom * (sequence?.scale ?? 1),\n interactions: {\n ...sequence?.interactions,\n activeMessageId:\n sequence?.interactions?.activeMessageId !== undefined\n ? sequence.interactions.activeMessageId\n : activeMessageId,\n },\n }\n\n const dark = mode === 'dark'\n const playerTokens = useMemo(\n () => getSequenceThemeTokens(mode, theme),\n [mode, theme],\n )\n const chrome = {\n background: playerTokens.background,\n border: playerTokens.border,\n surface: dark ? 'rgba(24,24,27,.9)' : 'rgba(255,255,255,.92)',\n text: playerTokens.text,\n muted: playerTokens.textSecondary,\n active: playerTokens.highlight,\n }\n\n return (\n <div\n ref={rootRef}\n className={className}\n tabIndex={0}\n onKeyDown={(event) => {\n if (event.key === 'ArrowRight' && showPlayback) moveStep(1)\n if (event.key === 'ArrowLeft' && showPlayback) moveStep(-1)\n }}\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n minWidth: 0,\n minHeight: fullscreen ? '100vh' : undefined,\n background: chrome.background,\n border: `1px solid ${chrome.border}`,\n borderRadius: fullscreen ? 0 : 12,\n overflow: 'hidden',\n color: chrome.text,\n outline: 'none',\n }}\n data-arc-mermaid-player\n >\n {showControls && (\n <div\n style={{\n minHeight: 44,\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: 6,\n padding: '6px 8px',\n borderBottom: `1px solid ${chrome.border}`,\n background: chrome.surface,\n backdropFilter: 'blur(14px)',\n fontFamily: 'ui-sans-serif, system-ui, -apple-system, sans-serif',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <ControlButton\n label=\"Zoom out\"\n color={chrome.text}\n border={chrome.border}\n onClick={() => setBoundedZoom(zoom - zoomStep)}\n >\n <Minus size={15} />\n </ControlButton>\n <button\n type=\"button\"\n onClick={() => setZoom(1)}\n title=\"Fit diagram\"\n style={{\n height: 28,\n minWidth: 50,\n border: `1px solid ${chrome.border}`,\n borderRadius: 8,\n background: 'transparent',\n color: chrome.muted,\n fontSize: 11,\n fontWeight: 650,\n cursor: 'pointer',\n }}\n >\n {Math.round(zoom * 100)}%\n </button>\n <ControlButton\n label=\"Zoom in\"\n color={chrome.text}\n border={chrome.border}\n onClick={() => setBoundedZoom(zoom + zoomStep)}\n >\n <Plus size={15} />\n </ControlButton>\n <ControlButton\n label=\"Fit diagram\"\n color={chrome.text}\n border={chrome.border}\n onClick={() => setZoom(1)}\n >\n <Scan size={15} />\n </ControlButton>\n </div>\n\n <div style={{ flex: 1 }} />\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 5,\n marginLeft: 'auto',\n }}\n >\n {showPlayback && steps.length > 0 && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 5,\n }}\n >\n <ControlButton\n label=\"Previous message\"\n color={chrome.text}\n border={chrome.border}\n disabled={stepIndex < 0}\n onClick={() => moveStep(-1)}\n >\n <ChevronLeft size={16} />\n </ControlButton>\n <ControlButton\n label={playing ? 'Pause sequence' : 'Play sequence'}\n color={playing ? chrome.active : chrome.text}\n border={playing ? chrome.active : chrome.border}\n onClick={togglePlayback}\n >\n {playing ? <Pause size={15} /> : <Play size={15} />}\n </ControlButton>\n <ControlButton\n label=\"Next message\"\n color={chrome.text}\n border={chrome.border}\n disabled={stepIndex >= steps.length - 1}\n onClick={() => moveStep(1)}\n >\n <ChevronRight size={16} />\n </ControlButton>\n <span\n aria-live=\"polite\"\n style={{\n minWidth: 68,\n color: chrome.muted,\n fontSize: 11,\n textAlign: 'center',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {stepIndex < 0 ? 'Overview' : `${stepIndex + 1} / ${steps.length}`}\n </span>\n </div>\n )}\n\n <ControlButton\n label={fullscreen ? 'Exit fullscreen' : 'Expand player'}\n color={chrome.text}\n border={chrome.border}\n onClick={toggleFullscreen}\n >\n <Expand size={15} />\n </ControlButton>\n </div>\n </div>\n )}\n\n <div\n style={{\n flex: 1,\n minWidth: 0,\n overflow: 'auto',\n padding: fullscreen ? 20 : 10,\n background: chrome.background,\n }}\n >\n <ArcMermaid\n source={source}\n document={document}\n mode={mode}\n theme={theme}\n interactive\n title={title}\n description={description}\n sequence={mergedSequence}\n />\n </div>\n </div>\n )\n}\n\nfunction documentElementFullscreen(): Element | null {\n return typeof globalThis.document === 'undefined'\n ? null\n : globalThis.document.fullscreenElement\n}\n\nfunction ControlButton({\n label,\n color,\n border,\n disabled,\n onClick,\n children,\n}: {\n label: string\n color: string\n border: string\n disabled?: boolean\n onClick: () => void\n children: React.ReactNode\n}) {\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n disabled={disabled}\n onClick={onClick}\n style={{\n width: 28,\n height: 28,\n display: 'grid',\n placeItems: 'center',\n border: `1px solid ${border}`,\n borderRadius: 8,\n background: 'transparent',\n color,\n opacity: disabled ? 0.34 : 1,\n cursor: disabled ? 'default' : 'pointer',\n }}\n >\n {children}\n </button>\n )\n}\n"]}
|