schematex 0.4.3 → 0.5.2

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.
Files changed (98) hide show
  1. package/README.md +36 -7
  2. package/dist/ai/ai-sdk.cjs +19 -13
  3. package/dist/ai/ai-sdk.cjs.map +1 -1
  4. package/dist/ai/ai-sdk.d.cts +4 -3
  5. package/dist/ai/ai-sdk.d.ts +4 -3
  6. package/dist/ai/ai-sdk.js +15 -9
  7. package/dist/ai/ai-sdk.js.map +1 -1
  8. package/dist/ai/index.cjs +16 -12
  9. package/dist/ai/index.d.cts +20 -153
  10. package/dist/ai/index.d.ts +20 -153
  11. package/dist/ai/index.js +4 -4
  12. package/dist/api-C5SECOxZ.d.cts +69 -0
  13. package/dist/api-Cr_MxttI.d.ts +69 -0
  14. package/dist/browser.cjs +24 -6
  15. package/dist/browser.cjs.map +1 -1
  16. package/dist/browser.d.cts +12 -3
  17. package/dist/browser.d.ts +12 -3
  18. package/dist/browser.js +14 -6
  19. package/dist/browser.js.map +1 -1
  20. package/dist/{chunk-SMXU3KYA.cjs → chunk-4QPDZJAL.cjs} +6337 -120
  21. package/dist/chunk-4QPDZJAL.cjs.map +1 -0
  22. package/dist/{chunk-N3SLYVNW.cjs → chunk-HK56GQQP.cjs} +751 -80
  23. package/dist/chunk-HK56GQQP.cjs.map +1 -0
  24. package/dist/{chunk-KWQTF6ZL.js → chunk-OK5ZS3LU.js} +6330 -119
  25. package/dist/chunk-OK5ZS3LU.js.map +1 -0
  26. package/dist/{chunk-2Z543TC3.cjs → chunk-QMTWG6JL.cjs} +1297 -1151
  27. package/dist/chunk-QMTWG6JL.cjs.map +1 -0
  28. package/dist/{chunk-VITE3MZQ.cjs → chunk-QTNPMIO2.cjs} +99 -5
  29. package/dist/chunk-QTNPMIO2.cjs.map +1 -0
  30. package/dist/{chunk-6IGSKU6D.js → chunk-UFTYX73U.js} +99 -5
  31. package/dist/chunk-UFTYX73U.js.map +1 -0
  32. package/dist/{chunk-J7JWMQD5.js → chunk-VCH7RI5H.js} +1297 -1151
  33. package/dist/chunk-VCH7RI5H.js.map +1 -0
  34. package/dist/{chunk-UBTKM2TB.js → chunk-VKPCR7BG.js} +751 -81
  35. package/dist/chunk-VKPCR7BG.js.map +1 -0
  36. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  37. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  38. package/dist/diagrams/circuit/index.cjs +7 -7
  39. package/dist/diagrams/circuit/index.d.cts +1 -1
  40. package/dist/diagrams/circuit/index.d.ts +1 -1
  41. package/dist/diagrams/circuit/index.js +1 -1
  42. package/dist/diagrams/ecomap/index.d.cts +1 -1
  43. package/dist/diagrams/ecomap/index.d.ts +1 -1
  44. package/dist/diagrams/entity/index.d.cts +1 -1
  45. package/dist/diagrams/entity/index.d.ts +1 -1
  46. package/dist/diagrams/fishbone/index.d.cts +1 -1
  47. package/dist/diagrams/fishbone/index.d.ts +1 -1
  48. package/dist/diagrams/flowchart/index.cjs +7 -7
  49. package/dist/diagrams/flowchart/index.d.cts +2 -2
  50. package/dist/diagrams/flowchart/index.d.ts +2 -2
  51. package/dist/diagrams/flowchart/index.js +1 -1
  52. package/dist/diagrams/genogram/index.d.cts +1 -1
  53. package/dist/diagrams/genogram/index.d.ts +1 -1
  54. package/dist/diagrams/ladder/index.d.cts +1 -1
  55. package/dist/diagrams/ladder/index.d.ts +1 -1
  56. package/dist/diagrams/logic/index.d.cts +1 -1
  57. package/dist/diagrams/logic/index.d.ts +1 -1
  58. package/dist/diagrams/orgchart/index.d.cts +1 -1
  59. package/dist/diagrams/orgchart/index.d.ts +1 -1
  60. package/dist/diagrams/pedigree/index.d.cts +1 -1
  61. package/dist/diagrams/pedigree/index.d.ts +1 -1
  62. package/dist/diagrams/phylo/index.d.cts +1 -1
  63. package/dist/diagrams/phylo/index.d.ts +1 -1
  64. package/dist/diagrams/sld/index.d.cts +1 -1
  65. package/dist/diagrams/sld/index.d.ts +1 -1
  66. package/dist/diagrams/sociogram/index.d.cts +1 -1
  67. package/dist/diagrams/sociogram/index.d.ts +1 -1
  68. package/dist/diagrams/timing/index.d.cts +1 -1
  69. package/dist/diagrams/timing/index.d.ts +1 -1
  70. package/dist/diagrams/venn/index.d.cts +1 -1
  71. package/dist/diagrams/venn/index.d.ts +1 -1
  72. package/dist/{index-DYpJXJcy.d.cts → index-BD2yDfQM.d.cts} +1 -1
  73. package/dist/{index-BeUVaQiD.d.ts → index-C30zQWZI.d.ts} +1 -1
  74. package/dist/index.cjs +35 -11
  75. package/dist/index.d.cts +10 -4
  76. package/dist/index.d.ts +10 -4
  77. package/dist/index.js +3 -3
  78. package/dist/react.cjs +8 -10
  79. package/dist/react.cjs.map +1 -1
  80. package/dist/react.d.cts +3 -2
  81. package/dist/react.d.ts +3 -2
  82. package/dist/react.js +8 -10
  83. package/dist/react.js.map +1 -1
  84. package/dist/tools-BHWaJPOl.d.ts +153 -0
  85. package/dist/tools-DlpuE76u.d.cts +153 -0
  86. package/dist/{types-DKdo-Ua_.d.cts → types-WTr9W5Ud.d.cts} +3 -3
  87. package/dist/{types-DKdo-Ua_.d.ts → types-WTr9W5Ud.d.ts} +3 -3
  88. package/package.json +2 -2
  89. package/dist/api-BIj9t4Oc.d.cts +0 -22
  90. package/dist/api-BIj9t4Oc.d.ts +0 -22
  91. package/dist/chunk-2Z543TC3.cjs.map +0 -1
  92. package/dist/chunk-6IGSKU6D.js.map +0 -1
  93. package/dist/chunk-J7JWMQD5.js.map +0 -1
  94. package/dist/chunk-KWQTF6ZL.js.map +0 -1
  95. package/dist/chunk-N3SLYVNW.cjs.map +0 -1
  96. package/dist/chunk-SMXU3KYA.cjs.map +0 -1
  97. package/dist/chunk-UBTKM2TB.js.map +0 -1
  98. package/dist/chunk-VITE3MZQ.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/decisiontree/parser.ts","../src/diagrams/decisiontree/layout.ts","../src/diagrams/decisiontree/renderer.ts","../src/diagrams/decisiontree/index.ts","../src/diagrams/timeline/dates.ts","../src/diagrams/timeline/parser.ts","../src/diagrams/timeline/layout.ts","../src/diagrams/timeline/renderer.ts","../src/diagrams/timeline/index.ts","../src/diagrams/state/parser.ts","../src/diagrams/state/layout.ts","../src/diagrams/state/renderer.ts","../src/diagrams/state/index.ts","../src/diagrams/pid/parser.ts","../src/diagrams/pid/symbols.ts","../src/diagrams/pid/layout.ts","../src/diagrams/pid/renderer.ts","../src/diagrams/pid/index.ts","../src/diagrams/mindmap/inline.ts","../src/diagrams/mindmap/parser.ts","../src/diagrams/mindmap/layout.ts","../src/diagrams/mindmap/renderer.ts","../src/diagrams/mindmap/index.ts","../src/diagrams/matrix/templates.ts","../src/diagrams/matrix/parser.ts","../src/diagrams/matrix/layout.ts","../src/diagrams/matrix/renderer.ts","../src/diagrams/matrix/index.ts","../src/diagrams/erd/parser.ts","../src/diagrams/erd/layout.ts","../src/diagrams/erd/renderer.ts","../src/diagrams/erd/index.ts","../src/diagrams/breadboard/parser.ts","../src/diagrams/breadboard/parts.ts","../src/diagrams/breadboard/layout.ts","../src/diagrams/breadboard/renderer.ts","../src/diagrams/breadboard/index.ts","../src/diagrams/bpmn/parser.ts","../src/diagrams/bpmn/layout.ts","../src/diagrams/bpmn/renderer.ts","../src/diagrams/bpmn/index.ts","../src/diagrams/fbd/blocks.ts","../src/diagrams/fbd/parser.ts","../src/diagrams/fbd/layout.ts","../src/diagrams/fbd/renderer.ts","../src/diagrams/fbd/index.ts","../src/diagrams/sfc/parser.ts","../src/diagrams/sfc/layout.ts","../src/diagrams/sfc/renderer.ts","../src/diagrams/sfc/index.ts","../src/core/api.ts"],"names":["line","text","title","stub","startX","startY","endX","endY","PADDING","rect","circle","polygon","path","group","resolveBaseTheme","desc","el","svgRoot","escapeXml","preprocess","nextId","parsed","x","ERA_BAND_HEIGHT","resolveTimelineTheme","defs","cssCustomProperties","wrapText","unquote","node","layoutFlowchart","sign","activityText","STYLE","renderLayout","idCounter","ln","height","renderLine","renderNode","underlineY","resolveMindmapTheme","readQuoted","parseNumberList","parseProperties","renderLegend","declRaw","id","name","attributes","buildCss","renderEdge","stripComment","lex","PITCH","stripY","y","pins","multilineText","state","matchQuotedTitle","tokenizeLines","parseVarDecl","parseAttrs","totalW","maxH","totalH","STYLES","genogram","ecomap","pedigree","phylo","sociogram","timing","logic","circuit","blockdiagram","ladder","sld","entity","fishbone","venn","flowchart","orgchart","parseFrontmatter"],"mappings":"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","file":"chunk-SMXU3KYA.cjs","sourcesContent":["import type {\n DTreeAST,\n DTreeBranchLabels,\n DTreeDirection,\n DTreeEdgeStyle,\n DTreeImpurity,\n DTreeMode,\n DTreeNode,\n} from \"./types\";\n\nexport class DTreeParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"DTreeParseError\";\n }\n}\n\ninterface RawLine {\n indent: number;\n text: string;\n line: number;\n}\n\nfunction preprocess(src: string): RawLine[] {\n const out: RawLine[] = [];\n const lines = src.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i];\n if (raw === undefined) continue;\n if (!raw.trim() || raw.trim().startsWith(\"#\") || raw.trim().startsWith(\"//\")) continue;\n const indentSpaces = raw.length - raw.replace(/^\\s+/, \"\").length;\n out.push({ indent: Math.floor(indentSpaces / 2), text: raw.trim(), line: i + 1 });\n }\n return out;\n}\n\n// ─── Tokenizer ───────────────────────────────────────────────\n// Split a line into tokens, honoring double-quoted strings and bracket lists.\nfunction tokenize(s: string): string[] {\n const tokens: string[] = [];\n let i = 0;\n while (i < s.length) {\n const ch = s[i]!;\n if (/\\s/.test(ch)) { i++; continue; }\n if (ch === '\"') {\n const end = s.indexOf('\"', i + 1);\n if (end < 0) throw new DTreeParseError(`Unterminated string: ${s}`);\n tokens.push(s.slice(i, end + 1));\n i = end + 1;\n continue;\n }\n // Read until whitespace or start of quoted string, but allow `=` and brackets inside\n let j = i;\n let bracket = 0;\n while (j < s.length) {\n const c = s[j]!;\n if (c === \"[\") bracket++;\n else if (c === \"]\") bracket--;\n else if (bracket === 0 && /\\s/.test(c)) break;\n else if (bracket === 0 && c === '\"') break;\n j++;\n }\n tokens.push(s.slice(i, j));\n i = j;\n }\n return tokens;\n}\n\nfunction unquote(s: string): string {\n if (s.startsWith('\"') && s.endsWith('\"')) return s.slice(1, -1);\n return s;\n}\n\nfunction parseKV(tokens: string[]): { keys: Record<string, string>; labels: string[]; rest: string[] } {\n const keys: Record<string, string> = {};\n const labels: string[] = [];\n const rest: string[] = [];\n for (const tok of tokens) {\n if (tok.startsWith('\"') && tok.endsWith('\"')) {\n labels.push(unquote(tok));\n } else if (tok.includes(\"=\")) {\n const idx = tok.indexOf(\"=\");\n const k = tok.slice(0, idx);\n const v = tok.slice(idx + 1);\n keys[k] = v;\n } else {\n rest.push(tok);\n }\n }\n return { keys, labels, rest };\n}\n\nfunction parseNumberList(s: string): number[] {\n const inner = s.replace(/^\\[/, \"\").replace(/\\]$/, \"\");\n return inner.split(\",\").map((p) => Number(p.trim())).filter((n) => !Number.isNaN(n));\n}\n\n// ─── Parser ──────────────────────────────────────────────────\n\nlet idCounter = 0;\nfunction nextId(prefix = \"n\"): string {\n idCounter++;\n return `${prefix}${idCounter}`;\n}\n\ninterface ParseContext {\n mode: DTreeMode;\n regression: boolean;\n}\n\nfunction parseDecisionLine(tokens: string[], _ctx: ParseContext, lineNum: number): DTreeNode {\n // First token is keyword; possible: decision, chance, end, choice, prob\n // prob/choice are edge-wrappers: they may be prefixes before a real node kind.\n let idx = 0;\n let incomingChoice: string | undefined;\n let incomingProb: number | undefined;\n\n if (tokens[idx] === \"choice\") {\n idx++;\n const next = tokens[idx];\n if (!next || !next.startsWith('\"')) throw new DTreeParseError(`\"choice\" requires a label`, lineNum);\n incomingChoice = unquote(next);\n idx++;\n // If no more tokens, choice is a wrapper — child will be nested. Return placeholder.\n if (idx >= tokens.length) {\n return {\n id: nextId(),\n kind: \"decision\", // placeholder; will be overridden if sole child exists\n label: \"\",\n children: [],\n incomingChoice,\n // special marker so parseBody knows this is a wrapper\n _wrapper: \"choice\",\n } as DTreeNode & { _wrapper?: string };\n }\n } else if (tokens[idx] === \"prob\") {\n idx++;\n const p = Number(tokens[idx]);\n if (Number.isNaN(p)) throw new DTreeParseError(`\"prob\" requires a numeric probability`, lineNum);\n incomingProb = p;\n idx++;\n }\n\n const kw = tokens[idx];\n if (!kw) throw new DTreeParseError(`Missing node kind`, lineNum);\n const rest = tokens.slice(idx + 1);\n const parsed = parseKV(rest);\n\n let kind: DTreeNode[\"kind\"];\n if (kw === \"decision\") kind = \"decision\";\n else if (kw === \"chance\") kind = \"chance\";\n else if (kw === \"end\" || kw === \"outcome\") kind = \"end\";\n else throw new DTreeParseError(`Unknown node kind \"${kw}\" in decision mode`, lineNum);\n\n const label = parsed.labels[0] ?? \"\";\n const payoffStr = parsed.keys.payoff;\n const payoff = payoffStr !== undefined ? Number(payoffStr) : undefined;\n\n return {\n id: nextId(),\n kind,\n label,\n children: [],\n incomingChoice,\n incomingProb,\n payoff,\n };\n}\n\nfunction parseMlLine(tokens: string[], ctx: ParseContext, lineNum: number): DTreeNode {\n // Optional `true`/`false` prefix for branch direction.\n let idx = 0;\n let mlBranch: \"true\" | \"false\" | undefined;\n if (tokens[idx] === \"true\" || tokens[idx] === \"false\") {\n mlBranch = tokens[idx] as \"true\" | \"false\";\n idx++;\n }\n\n const kw = tokens[idx];\n if (!kw) throw new DTreeParseError(`Missing ML node kind`, lineNum);\n idx++;\n const rest = tokens.slice(idx);\n const parsed = parseKV(rest);\n\n let kind: DTreeNode[\"kind\"];\n if (kw === \"split\") kind = \"split\";\n else if (kw === \"leaf\") kind = \"leaf\";\n else throw new DTreeParseError(`Unknown ML node kind \"${kw}\"`, lineNum);\n\n const label = parsed.labels[0] ?? \"\";\n const k = parsed.keys;\n\n let value: number[] | number | undefined;\n if (k.value !== undefined) {\n if (k.value.startsWith(\"[\")) value = parseNumberList(k.value);\n else value = Number(k.value);\n }\n if (typeof value === \"number\") ctx.regression = true;\n\n // Impurity number — extract from any of gini/entropy/mse/gain/impurity\n let impurity: number | undefined;\n for (const impKey of [\"gini\", \"entropy\", \"mse\", \"gain\", \"impurity\"]) {\n if (k[impKey] !== undefined) {\n impurity = Number(k[impKey]);\n break;\n }\n }\n\n return {\n id: nextId(),\n kind,\n label,\n children: [],\n feature: k.feature,\n op: k.op,\n threshold: k.threshold !== undefined ? (Number.isNaN(Number(k.threshold)) ? k.threshold : Number(k.threshold)) : undefined,\n samples: k.samples !== undefined ? Number(k.samples) : undefined,\n value,\n impurity,\n mlBranch,\n className: k.class,\n };\n}\n\nfunction parseTaxonomyLine(tokens: string[], _ctx: ParseContext, lineNum: number): DTreeNode {\n // Forms:\n // q \"...\" → question\n // question \"...\" → question\n // a \"...\" → answer / leaf\n // answer \"...\" → answer / leaf\n // leaf \"...\" → answer\n // yes: q \"...\" → question with branchLabel=\"yes\"\n // no: a \"...\" → answer with branchLabel=\"no\"\n // label \"X\": a \"Y\" → answer with branchLabel=\"X\"\n let idx = 0;\n let branchLabel: string | undefined;\n\n if (tokens[idx] === \"yes:\" || tokens[idx] === \"no:\") {\n branchLabel = tokens[idx]!.replace(\":\", \"\");\n idx++;\n } else if (tokens[idx] === \"label\") {\n idx++;\n const lbl = tokens[idx];\n if (!lbl || !lbl.startsWith('\"')) throw new DTreeParseError(`\"label\" requires a quoted string`, lineNum);\n // Allow trailing colon form: label \"X\": ...\n branchLabel = unquote(lbl.replace(/\":?$/, '\"'));\n // Handle `\"X\":` (colon attached)\n if (lbl.endsWith(':\"')) {/* unreachable */}\n idx++;\n if (tokens[idx] === \":\") idx++;\n }\n\n const kw = tokens[idx];\n if (!kw) throw new DTreeParseError(`Missing taxonomy node kind`, lineNum);\n idx++;\n const rest = tokens.slice(idx);\n const parsed = parseKV(rest);\n\n let kind: DTreeNode[\"kind\"];\n if (kw === \"q\" || kw === \"question\") kind = \"question\";\n else if (kw === \"a\" || kw === \"answer\" || kw === \"leaf\") kind = \"answer\";\n else throw new DTreeParseError(`Unknown taxonomy node kind \"${kw}\"`, lineNum);\n\n return {\n id: nextId(),\n kind,\n label: parsed.labels[0] ?? \"\",\n children: [],\n branchLabel,\n };\n}\n\nfunction parseNodeLine(text: string, mode: DTreeMode, ctx: ParseContext, lineNum: number): DTreeNode {\n // Handle `yes: q \"...\"` style where `yes:` is glued but tokenizer splits fine.\n // Handle `label \"X\":` pattern for taxonomy with inline colon.\n const normalized = text.replace(/\"\\s*:\\s*/g, '\" : ');\n const tokens = tokenize(normalized).filter((t) => t !== \":\");\n if (mode === \"decision\") return parseDecisionLine(tokens, ctx, lineNum);\n if (mode === \"ml\") return parseMlLine(tokens, ctx, lineNum);\n return parseTaxonomyLine(tokens, ctx, lineNum);\n}\n\nfunction buildTree(lines: RawLine[], mode: DTreeMode, ctx: ParseContext): DTreeNode {\n if (lines.length === 0) throw new DTreeParseError(\"No tree body\");\n const [first, ...rest] = lines;\n if (!first) throw new DTreeParseError(\"No tree body\");\n const root = parseNodeLine(first.text, mode, ctx, first.line);\n const stack: Array<{ node: DTreeNode; indent: number }> = [{ node: root, indent: first.indent }];\n\n for (const line of rest) {\n const node = parseNodeLine(line.text, mode, ctx, line.line);\n while (stack.length > 0 && stack[stack.length - 1]!.indent >= line.indent) stack.pop();\n const parent = stack[stack.length - 1];\n if (!parent) throw new DTreeParseError(`Orphan line (bad indent): ${line.text}`, line.line);\n parent.node.children.push(node);\n stack.push({ node, indent: line.indent });\n }\n\n return collapseWrappers(root);\n}\n\n// Collapse `choice` wrappers (they carry incomingChoice to their sole child)\nfunction collapseWrappers(node: DTreeNode): DTreeNode {\n node.children = node.children.map(collapseWrappers).flatMap((c) => {\n const anyC = c as DTreeNode & { _wrapper?: string };\n if (anyC._wrapper === \"choice\") {\n return c.children.map((gc) => ({ ...gc, incomingChoice: c.incomingChoice }));\n }\n return [c];\n });\n return node;\n}\n\n// ─── EV Rollback (decision mode) ─────────────────────────────\n\nfunction computeEV(node: DTreeNode): void {\n for (const c of node.children) computeEV(c);\n if (node.kind === \"end\") {\n node.ev = node.payoff ?? 0;\n return;\n }\n if (node.kind === \"chance\") {\n let sum = 0;\n for (const c of node.children) sum += (c.incomingProb ?? 0) * (c.ev ?? 0);\n node.ev = sum;\n return;\n }\n if (node.kind === \"decision\") {\n let best = -Infinity;\n for (const c of node.children) {\n if ((c.ev ?? -Infinity) > best) best = c.ev ?? -Infinity;\n }\n node.ev = best;\n for (const c of node.children) {\n if ((c.ev ?? -Infinity) === best) c.optimal = true;\n }\n return;\n }\n}\n\nfunction validateDecision(node: DTreeNode, lineMap: Map<string, number>): void {\n if (node.kind === \"chance\" && node.children.length > 0) {\n const sum = node.children.reduce((a, c) => a + (c.incomingProb ?? 0), 0);\n if (Math.abs(sum - 1) > 0.01) {\n throw new DTreeParseError(\n `chance \"${node.label}\" probabilities do not sum to 1.0 (got ${sum.toFixed(3)})`,\n );\n }\n }\n for (const c of node.children) validateDecision(c, lineMap);\n}\n\n// ─── Top-level ───────────────────────────────────────────────\n\nexport function parseDecisionTree(src: string): DTreeAST {\n idCounter = 0;\n const lines = preprocess(src);\n if (lines.length === 0) throw new DTreeParseError(\"Empty input\");\n\n // Header: `decisiontree[:mode] \"title\"?`\n const header = lines.shift()!;\n const headerMatch = header.text.match(/^decisiontree(?::(\\w+))?(?:\\s+\"([^\"]*)\")?\\s*$/i);\n if (!headerMatch) throw new DTreeParseError(`Invalid header: ${header.text}`, header.line);\n const modeRaw = (headerMatch[1] ?? \"taxonomy\").toLowerCase();\n const mode: DTreeMode =\n modeRaw === \"decision\" || modeRaw === \"da\" ? \"decision\"\n : modeRaw === \"ml\" ? \"ml\"\n : \"taxonomy\";\n const title = headerMatch[2];\n\n // Config block: lines with `key: value` before the tree body, at indent 0.\n // Tree body starts at the first line whose first token is a recognized node keyword.\n const nodeKeywords = new Set([\n \"decision\", \"chance\", \"end\", \"outcome\", \"choice\", \"prob\",\n \"split\", \"leaf\", \"true\", \"false\",\n \"q\", \"question\", \"a\", \"answer\", \"yes:\", \"no:\", \"label\",\n ]);\n const config: Record<string, string> = {};\n while (lines.length > 0) {\n const l = lines[0]!;\n const firstTok = l.text.split(/\\s+/)[0]!;\n if (nodeKeywords.has(firstTok)) break;\n const m = l.text.match(/^([a-zA-Z][\\w-]*)\\s*:\\s*(.+)$/);\n if (!m) break;\n config[m[1]!] = m[2]!.trim();\n lines.shift();\n }\n\n let direction: DTreeDirection = \"top-down\";\n if (config.direction === \"left-right\" || config.direction === \"lr\") direction = \"left-right\";\n if (mode === \"decision\" && !config.direction) direction = \"left-right\";\n\n const classes = config.classes\n ? config.classes.split(\",\").map((s) => s.trim()).filter(Boolean)\n : undefined;\n\n let impurityName: DTreeImpurity | undefined;\n if (config.impurity) {\n const v = config.impurity.toLowerCase();\n if (v === \"gini\" || v === \"entropy\" || v === \"mse\" || v === \"gain\") impurityName = v;\n }\n\n const branchLabels: DTreeBranchLabels | undefined =\n config.branchLabels === \"relation\" || config[\"branch-labels\"] === \"relation\" ? \"relation\" : \"boolean\";\n\n const branchLengthProb = config.branchLength === \"probability\" || config[\"branch-length\"] === \"probability\";\n\n let edgeStyle: DTreeEdgeStyle | undefined;\n const es = (config.edgeStyle || config[\"edge-style\"] || \"\").toLowerCase();\n if (es === \"diagonal\" || es === \"orthogonal\" || es === \"bracket\") edgeStyle = es;\n\n const ctx: ParseContext = { mode, regression: false };\n const root = buildTree(lines, mode, ctx);\n\n if (mode === \"decision\") {\n validateDecision(root, new Map());\n computeEV(root);\n }\n\n return {\n type: \"decisiontree\",\n mode,\n title,\n direction,\n classes,\n impurityName: impurityName ?? (mode === \"ml\" ? \"gini\" : undefined),\n branchLabels,\n branchLengthProb,\n edgeStyle,\n regression: ctx.regression,\n root,\n };\n}\n","import type {\n DTreeAST,\n DTreeEdgeStyle,\n DTreeLayoutEdge,\n DTreeLayoutNode,\n DTreeLayoutResult,\n DTreeNode,\n} from \"./types\";\n\ninterface NodeSize { w: number; h: number; }\n\nfunction sizeOf(node: DTreeNode, mode: DTreeAST[\"mode\"]): NodeSize {\n if (mode === \"decision\") {\n if (node.kind === \"decision\") return { w: 58, h: 36 };\n if (node.kind === \"chance\") return { w: 34, h: 34 };\n return { w: 22, h: 22 }; // end triangle\n }\n if (mode === \"ml\") {\n if (node.kind === \"split\") return { w: 200, h: 100 };\n return { w: 200, h: 82 };\n }\n return { w: 150, h: 50 };\n}\n\ninterface WN {\n node: DTreeNode;\n size: NodeSize;\n depth: number;\n parent?: WN;\n children: WN[];\n prelim: number;\n mod: number;\n xFinal: number;\n yFinal: number;\n}\n\nfunction wrap(node: DTreeNode, mode: DTreeAST[\"mode\"], depth: number, parent?: WN): WN {\n const w: WN = {\n node, size: sizeOf(node, mode), depth, parent,\n children: [], prelim: 0, mod: 0, xFinal: 0, yFinal: 0,\n };\n w.children = node.children.map((c) => wrap(c, mode, depth + 1, w));\n return w;\n}\n\nfunction collect(w: WN, out: WN[]): void { out.push(w); for (const c of w.children) collect(c, out); }\n\n/** Sibling-axis extent (perpendicular to depth growth). */\nfunction sibExtent(w: WN, sibH: boolean): number {\n return sibH ? w.size.w : w.size.h;\n}\n\n/**\n * Balanced layout. Each leaf gets 1 unit; a direct-leaf sibling of a tall subtree\n * still gets 1 unit but is PLACED with extra padding so the diagonal from the\n * parent doesn't cross the sibling subtree. The padding equals the sibling\n * subtree's half-extent.\n */\nfunction assignLeafPositions(w: WN, sibH: boolean, unit: number, leafGap: number, cursor: { v: number }): void {\n if (w.children.length === 0) {\n w.prelim = cursor.v;\n const extent = sibExtent(w, sibH);\n cursor.v += Math.max(extent, unit) + leafGap;\n return;\n }\n for (const c of w.children) assignLeafPositions(c, sibH, unit, leafGap, cursor);\n const first = w.children[0]!.prelim;\n const last = w.children[w.children.length - 1]!.prelim;\n w.prelim = (first + last) / 2;\n}\n\n/** Subtree min/max along sibling axis (uses current prelim values). */\nfunction subtreeSibRange(w: WN, sibH: boolean): { lo: number; hi: number } {\n const e = sibExtent(w, sibH);\n let lo = w.prelim - e / 2;\n let hi = w.prelim + e / 2;\n for (const c of w.children) {\n const cr = subtreeSibRange(c, sibH);\n if (cr.lo < lo) lo = cr.lo;\n if (cr.hi > hi) hi = cr.hi;\n }\n return { lo, hi };\n}\n\n/**\n * Ensure min sibling gap between adjacent SUBTREES, shifting right-subtree if too close.\n * This is what keeps a direct-leaf sibling visually separated from a tall subtree.\n */\nfunction enforceSibGap(w: WN, sibH: boolean, sibGap: number): void {\n for (const c of w.children) enforceSibGap(c, sibH, sibGap);\n for (let i = 1; i < w.children.length; i++) {\n const prev = w.children[i - 1]!;\n const cur = w.children[i]!;\n const prevR = subtreeSibRange(prev, sibH);\n const curR = subtreeSibRange(cur, sibH);\n const gap = curR.lo - prevR.hi;\n if (gap < sibGap) {\n shiftSubtree(cur, sibGap - gap);\n }\n }\n if (w.children.length > 0) {\n const first = w.children[0]!.prelim;\n const last = w.children[w.children.length - 1]!.prelim;\n w.prelim = (first + last) / 2;\n }\n}\n\nfunction shiftSubtree(w: WN, dx: number): void {\n w.prelim += dx;\n for (const c of w.children) shiftSubtree(c, dx);\n}\n\nfunction computeLevelOffsets(root: WN, sibH: boolean, levelGap: number): number[] {\n const depthSizes: number[] = [];\n const all: WN[] = [];\n collect(root, all);\n for (const n of all) {\n const dSize = sibH ? n.size.h : n.size.w;\n depthSizes[n.depth] = Math.max(depthSizes[n.depth] ?? 0, dSize);\n }\n const offsets: number[] = [];\n let acc = 0;\n for (let i = 0; i < depthSizes.length; i++) {\n if (i === 0) acc = 0;\n else acc += (depthSizes[i - 1]! / 2) + levelGap + (depthSizes[i]! / 2);\n offsets.push(acc);\n }\n return offsets;\n}\n\nfunction setFinal(w: WN, sibH: boolean, levelOffsets: number[]): void {\n const d = levelOffsets[w.depth] ?? 0;\n if (sibH) { w.xFinal = w.prelim; w.yFinal = d; }\n else { w.xFinal = d; w.yFinal = w.prelim; }\n for (const c of w.children) setFinal(c, sibH, levelOffsets);\n}\n\n// ─── Edge routing ────────────────────────────────────────────\n\ninterface EdgeGeom {\n path: string;\n labelX: number;\n labelY: number;\n angle: number; // degrees\n}\n\nfunction routeEdge(\n style: DTreeEdgeStyle,\n sibH: boolean,\n p: DTreeLayoutNode,\n c: DTreeLayoutNode,\n rail?: number,\n): EdgeGeom {\n const px = p.x, py = p.y, cx = c.x, cy = c.y;\n let startX: number, startY: number, endX: number, endY: number;\n if (sibH) {\n startX = px; startY = py + p.height / 2;\n endX = cx; endY = cy - c.height / 2;\n } else {\n startX = px + p.width / 2; startY = py;\n endX = cx - c.width / 2; endY = cy;\n }\n\n if (style === \"diagonal\") {\n // Place label at 68% along edge (toward child) — separates labels sharing a parent.\n const tLabel = 0.68;\n const lx = startX + (endX - startX) * tLabel;\n const ly = startY + (endY - startY) * tLabel;\n const dx = endX - startX;\n const dy = endY - startY;\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI;\n if (angle > 90) angle -= 180;\n if (angle < -90) angle += 180;\n return {\n path: `M ${startX} ${startY} L ${endX} ${endY}`,\n labelX: lx,\n labelY: ly,\n angle,\n };\n }\n\n if (style === \"bracket\") {\n // Parent short stub, then diagonal to child\n if (sibH) {\n const stub = Math.min(18, Math.abs(endY - startY) * 0.25);\n const elbowY = startY + stub;\n const midX = (startX + endX) / 2;\n const midY = (elbowY + endY) / 2;\n const angle = (Math.atan2(endY - elbowY, endX - startX) * 180) / Math.PI;\n return {\n path: `M ${startX} ${startY} L ${startX} ${elbowY} L ${endX} ${endY}`,\n labelX: midX,\n labelY: midY,\n angle: angle > 90 ? angle - 180 : angle < -90 ? angle + 180 : angle,\n };\n }\n const stub = Math.min(18, Math.abs(endX - startX) * 0.25);\n const elbowX = startX + stub;\n return {\n path: `M ${startX} ${startY} L ${elbowX} ${startY} L ${endX} ${endY}`,\n labelX: (elbowX + endX) / 2,\n labelY: (startY + endY) / 2,\n angle: (Math.atan2(endY - startY, endX - elbowX) * 180) / Math.PI,\n };\n }\n\n // orthogonal L-shape — use per-level rail if provided so siblings align\n if (sibH) {\n const railY = rail ?? (startY + endY) / 2;\n return {\n path: `M ${startX} ${startY} L ${startX} ${railY} L ${endX} ${railY} L ${endX} ${endY}`,\n labelX: (startX + endX) / 2,\n labelY: railY,\n angle: 0,\n };\n }\n const railX = rail ?? (startX + endX) / 2;\n return {\n path: `M ${startX} ${startY} L ${railX} ${startY} L ${railX} ${endY} L ${endX} ${endY}`,\n labelX: railX,\n labelY: (startY + endY) / 2,\n angle: 0,\n };\n}\n\n/**\n * Route for an end-node that was snapped away from its natural column to align with\n * the payoff column. Diagonal from parent to the natural column at child's y, then\n * horizontal to the snapped triangle. Makes shallow end-nodes look like they \"extend\n * out\" to the rightmost column rather than a single ugly long diagonal.\n */\nfunction routeSnappedEnd(sibH: boolean, p: DTreeLayoutNode, c: DTreeLayoutNode): EdgeGeom {\n if (sibH) {\n // Top-down: rarely used for decision mode; fall back to plain diagonal.\n const startX = p.x, startY = p.y + p.height / 2;\n const endX = c.x, endY = c.y - c.height / 2;\n return {\n path: `M ${startX} ${startY} L ${endX} ${endY}`,\n labelX: (startX + endX) / 2, labelY: (startY + endY) / 2, angle: 0,\n };\n }\n // Left-right (the normal decision-mode direction).\n const startX = p.x + p.width / 2;\n const startY = p.y;\n const endX = c.x - c.width / 2;\n const endY = c.y;\n // Bend point: at natural child x, at child y. Clamp to be strictly right of parent.\n const naturalCx = c.naturalX ?? c.x;\n const bendX = Math.max(naturalCx, startX + 20);\n const dx = bendX - startX;\n const dy = endY - startY;\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI;\n if (angle > 90) angle -= 180;\n if (angle < -90) angle += 180;\n // Label at 70% along the diagonal portion — stays on the diagonal, not the horizontal.\n const t = 0.7;\n const labelX = startX + (bendX - startX) * t;\n const labelY = startY + (endY - startY) * t;\n return {\n path: `M ${startX} ${startY} L ${bendX} ${endY} L ${endX} ${endY}`,\n labelX,\n labelY,\n angle,\n };\n}\n\n// ─── Main ────────────────────────────────────────────────────\n\nexport function layoutDecisionTree(ast: DTreeAST): DTreeLayoutResult {\n const sibH = ast.direction === \"top-down\";\n const root = wrap(ast.root, ast.mode, 0);\n\n // Mode-tuned spacing.\n const all: WN[] = []; collect(root, all);\n\n // Pad all nodes at the same depth to the same DEPTH-axis size (height in TD,\n // width in LR). This makes orthogonal rails align cleanly.\n const perDepthDepthSize: number[] = [];\n for (const w of all) {\n const d = sibH ? w.size.h : w.size.w;\n perDepthDepthSize[w.depth] = Math.max(perDepthDepthSize[w.depth] ?? 0, d);\n }\n for (const w of all) {\n const target = perDepthDepthSize[w.depth]!;\n if (sibH) w.size.h = target;\n else w.size.w = target;\n }\n\n const maxSibExtent = Math.max(...all.map((w) => sibExtent(w, sibH)));\n\n let leafGap: number, levelGap: number, sibGap: number;\n if (ast.mode === \"ml\") { leafGap = 40; levelGap = 80; sibGap = 40; }\n else if (ast.mode === \"decision\") { leafGap = sibH ? 40 : 36; levelGap = sibH ? 90 : 110; sibGap = 30; }\n else { leafGap = sibH ? 30 : 22; levelGap = sibH ? 80 : 90; sibGap = 26; }\n\n const unit = Math.max(maxSibExtent, sibH ? 120 : 50);\n const cursor = { v: 0 };\n assignLeafPositions(root, sibH, unit, leafGap, cursor);\n enforceSibGap(root, sibH, sibGap);\n\n const levelOffsets = computeLevelOffsets(root, sibH, levelGap);\n setFinal(root, sibH, levelOffsets);\n\n // Bounding box — extra left padding for decision-mode left-right (root label sits outside the rect)\n const PADDING = 40;\n const extraLeft = ast.mode === \"decision\" && !sibH ? 110 : 0;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of all) {\n minX = Math.min(minX, n.xFinal - n.size.w / 2);\n minY = Math.min(minY, n.yFinal - n.size.h / 2);\n maxX = Math.max(maxX, n.xFinal + n.size.w / 2);\n maxY = Math.max(maxY, n.yFinal + n.size.h / 2);\n }\n\n // For decision mode (left-right), reserve a rightmost column for payoff text.\n const needsPayoffCol = ast.mode === \"decision\" && !sibH;\n const payoffColGap = needsPayoffCol ? 110 : 0;\n const extraRight = needsPayoffCol ? 180 : ast.mode === \"decision\" ? 110 : 20;\n\n // Capture natural x BEFORE snapping — needed to route shallow end-node edges via\n // an L-shape (diagonal to natural column, then horizontal to snapped column).\n const naturalXMap = new Map<string, number>();\n for (const w of all) naturalXMap.set(w.node.id, w.xFinal);\n\n // If needed, snap all end nodes to the same rightmost x so payoffs align.\n if (needsPayoffCol) {\n let endMaxX = -Infinity;\n for (const w of all) if (w.node.kind === \"end\") endMaxX = Math.max(endMaxX, w.xFinal);\n for (const w of all) if (w.node.kind === \"end\") w.xFinal = endMaxX;\n // Recompute bounds after snap\n minX = Infinity; maxX = -Infinity;\n for (const n of all) {\n minX = Math.min(minX, n.xFinal - n.size.w / 2);\n maxX = Math.max(maxX, n.xFinal + n.size.w / 2);\n }\n }\n\n const offsetX = PADDING + extraLeft - minX;\n const offsetY = PADDING - minY;\n\n const layoutNodes: DTreeLayoutNode[] = all.map((w) => ({\n node: w.node,\n x: w.xFinal + offsetX,\n y: w.yFinal + offsetY,\n width: w.size.w,\n height: w.size.h,\n depth: w.depth,\n naturalX: (naturalXMap.get(w.node.id) ?? w.xFinal) + offsetX,\n naturalY: w.yFinal + offsetY,\n }));\n\n const nodeById = new Map(layoutNodes.map((n) => [n.node.id, n]));\n\n // Edge style resolution\n const edgeStyle: DTreeEdgeStyle =\n ast.edgeStyle ?? (ast.mode === \"decision\" ? \"diagonal\" : \"orthogonal\");\n\n // Level rails — for orthogonal, precompute the elbow position per child-depth so\n // all siblings at the same depth share the same rail (keeps True/False aligned).\n const levelRails: number[] = [];\n if (edgeStyle === \"orthogonal\") {\n // For each child depth d>=1, rail = midpoint between parent-level bottom and child-level top.\n for (let d = 1; d < perDepthDepthSize.length; d++) {\n const parentBotY = (levelOffsets[d - 1] ?? 0) + (perDepthDepthSize[d - 1]! / 2);\n const childTopY = (levelOffsets[d] ?? 0) - (perDepthDepthSize[d]! / 2);\n levelRails[d] = (parentBotY + childTopY) / 2 + (sibH ? offsetY : offsetX);\n }\n }\n\n const labelAnchors: Record<string, { x: number; y: number; angle: number }> = {};\n const edges: DTreeLayoutEdge[] = [];\n for (const w of all) {\n for (const c of w.children) {\n const pn = nodeById.get(w.node.id)!;\n const cn = nodeById.get(c.node.id)!;\n // Special route: end node snapped from its natural x to the payoff column.\n // Route as diagonal (parent → naturalX, childY) then horizontal to (snappedX, childY).\n const wasSnapped = needsPayoffCol && c.node.kind === \"end\" && cn.naturalX !== undefined && Math.abs(cn.naturalX - cn.x) > 1;\n const geom = wasSnapped\n ? routeSnappedEnd(sibH, pn, cn)\n : routeEdge(edgeStyle, sibH, pn, cn, levelRails[c.depth]);\n\n const isOptimal = c.node.optimal === true;\n let strokeWidth = 1.6;\n if (isOptimal) strokeWidth = 3;\n if (ast.branchLengthProb && c.node.incomingProb !== undefined) {\n strokeWidth = 1 + c.node.incomingProb * 2.5;\n }\n\n let label: string | undefined;\n if (ast.mode === \"decision\") {\n if (c.node.incomingChoice !== undefined) label = c.node.incomingChoice;\n else if (c.node.incomingProb !== undefined) label = formatProb(c.node.incomingProb);\n } else if (ast.mode === \"ml\") {\n if (c.node.mlBranch) {\n if (ast.branchLabels === \"relation\" && w.node.op && w.node.threshold !== undefined) {\n const op = c.node.mlBranch === \"true\" ? w.node.op : flipOp(w.node.op);\n label = `${op} ${w.node.threshold}`;\n } else {\n label = c.node.mlBranch === \"true\" ? \"True\" : \"False\";\n }\n }\n } else {\n if (c.node.branchLabel) label = c.node.branchLabel;\n }\n\n labelAnchors[c.node.id] = { x: geom.labelX, y: geom.labelY, angle: geom.angle };\n\n edges.push({ from: w.node.id, to: c.node.id, path: geom.path, label, isOptimal, strokeWidth });\n }\n }\n\n // Payoff column X (in final coordinates)\n let payoffColumnX: number | undefined;\n if (needsPayoffCol) {\n let endX = 0;\n for (const n of layoutNodes) if (n.node.kind === \"end\") endX = Math.max(endX, n.x + n.width / 2);\n payoffColumnX = endX + payoffColGap;\n }\n\n const width = Math.ceil(maxX - minX + PADDING * 2 + extraRight + extraLeft);\n const height = Math.ceil(maxY - minY + PADDING * 2);\n\n return {\n width,\n height,\n nodes: layoutNodes,\n edges,\n levelRails: edgeStyle === \"orthogonal\" ? levelRails : undefined,\n title: ast.title,\n mode: ast.mode,\n direction: ast.direction,\n edgeStyle,\n labelAnchors,\n payoffColumnX,\n };\n}\n\nfunction flipOp(op: string): string {\n if (op === \"<=\") return \">\";\n if (op === \"<\") return \">=\";\n if (op === \">=\") return \"<\";\n if (op === \">\") return \"<=\";\n return op;\n}\n\nfunction formatProb(p: number): string {\n if (p >= 0.01 && p <= 0.99) {\n const pct = Math.round(p * 100);\n if (Math.abs(p * 100 - pct) < 0.01) return `p=${pct}%`;\n }\n return `p=${p}`;\n}\n","import type { RenderConfig } from \"../../core/types\";\nimport {\n svgRoot,\n group,\n el,\n path as pathEl,\n text as textEl,\n title as titleEl,\n desc,\n rect,\n circle,\n polygon,\n escapeXml,\n} from \"../../core/svg\";\nimport { resolveBaseTheme, type BaseTheme } from \"../../core/theme\";\nimport { layoutDecisionTree } from \"./layout\";\nimport type { DTreeAST, DTreeLayoutNode, DTreeLayoutResult, DTreeNode } from \"./types\";\n\nconst CLASS_PALETTE = [\n \"#0ea5e9\", \"#10b981\", \"#f59e0b\", \"#f43f5e\", \"#8b5cf6\",\n \"#14b8a6\", \"#ec4899\", \"#84cc16\", \"#06b6d4\", \"#f97316\",\n];\n\nfunction buildCss(t: BaseTheme): string {\n return `\n.lt-dtree { font-family: system-ui, -apple-system, sans-serif; }\n.lt-dtree-title { font: 500 16px sans-serif; fill: ${t.text}; }\n.lt-dtree-edge { fill: none; stroke: ${t.stroke}; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }\n.lt-dtree-edge-optimal { fill: none; stroke: ${t.positive}; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; }\n.lt-dtree-edge-leader { fill: none; stroke: ${t.stroke}; stroke-width: 1; stroke-dasharray: 2 2; opacity: 0.55; }\n.lt-dtree-edge-label { font: 500 11px sans-serif; fill: ${t.text}; text-anchor: middle; dominant-baseline: middle; }\n.lt-dtree-edge-prob { font: italic 400 10px sans-serif; fill: ${t.textMuted}; text-anchor: middle; dominant-baseline: middle; }\n.lt-dtree-edge-label-bg { fill: ${t.bg}; stroke: none; }\n.lt-dtree-decision { fill: #dbeafe; stroke: #1d4ed8; stroke-width: 1.6; }\n.lt-dtree-chance { fill: #fef3c7; stroke: #b45309; stroke-width: 1.6; }\n.lt-dtree-outcome { fill: #f1f5f9; stroke: ${t.stroke}; stroke-width: 1.4; }\n.lt-dtree-node-label { font: 500 12px sans-serif; fill: ${t.text}; }\n.lt-dtree-ev { font: 500 10px \"SF Mono\", monospace; fill: ${t.textMuted}; }\n.lt-dtree-ev-optimal { font: 600 10px \"SF Mono\", monospace; fill: ${t.positive}; }\n.lt-dtree-payoff { font: 600 12px \"SF Mono\", monospace; fill: ${t.text}; }\n.lt-dtree-payoff-neg { font: 600 12px \"SF Mono\", monospace; fill: ${t.negative ?? \"#dc2626\"}; }\n.lt-dtree-ml-rect { stroke: ${t.stroke}; stroke-width: 1; }\n.lt-dtree-ml-line-1 { font: 500 12px sans-serif; fill: ${t.text}; }\n.lt-dtree-ml-line-muted { font: 400 10px sans-serif; fill: ${t.textMuted}; }\n.lt-dtree-ml-mono { font: 400 10px \"SF Mono\", monospace; fill: ${t.textMuted}; }\n.lt-dtree-ml-class { font: 600 11px sans-serif; }\n.lt-dtree-taxon { fill: #eef2ff; stroke: #4f46e5; stroke-width: 1.4; }\n.lt-dtree-taxon-leaf { fill: #ecfdf5; stroke: #059669; stroke-width: 1.4; }\n.lt-dtree-taxon-label { font: 500 12px sans-serif; fill: ${t.text}; text-anchor: middle; }\n`.trim();\n}\n\n// ─── Decision-mode node rendering ────────────────────────────\n\nfunction renderDecisionNode(ln: DTreeLayoutNode, layout: DTreeLayoutResult): string {\n const n = ln.node;\n const parts: string[] = [];\n const sibH = layout.direction === \"top-down\";\n\n if (n.kind === \"decision\") {\n parts.push(rect({\n x: ln.x - ln.width / 2,\n y: ln.y - ln.height / 2,\n width: ln.width,\n height: ln.height,\n rx: 2,\n ry: 2,\n class: \"lt-dtree-decision\",\n }));\n if (n.label) {\n // Place label above (top-down) or to the left (left-right)\n if (sibH) {\n parts.push(textEl({\n x: ln.x, y: ln.y - ln.height / 2 - 8,\n class: \"lt-dtree-node-label\", \"text-anchor\": \"middle\",\n }, n.label));\n } else {\n parts.push(textEl({\n x: ln.x - ln.width / 2 - 8, y: ln.y + 4,\n class: \"lt-dtree-node-label\", \"text-anchor\": \"end\",\n }, n.label));\n }\n }\n if (n.ev !== undefined) {\n parts.push(textEl({\n x: ln.x, y: ln.y + ln.height / 2 + 13,\n class: \"lt-dtree-ev\", \"text-anchor\": \"middle\",\n }, `EV=${formatNum(n.ev)}`));\n }\n } else if (n.kind === \"chance\") {\n parts.push(circle({\n cx: ln.x, cy: ln.y, r: ln.width / 2,\n class: \"lt-dtree-chance\",\n }));\n if (n.label) {\n if (sibH) {\n parts.push(textEl({\n x: ln.x, y: ln.y - ln.height / 2 - 8,\n class: \"lt-dtree-node-label\", \"text-anchor\": \"middle\",\n }, n.label));\n } else {\n parts.push(textEl({\n x: ln.x, y: ln.y - ln.height / 2 - 6,\n class: \"lt-dtree-node-label\", \"text-anchor\": \"middle\",\n }, n.label));\n }\n }\n if (n.ev !== undefined) {\n parts.push(textEl({\n x: ln.x, y: ln.y + ln.height / 2 + 13,\n class: n.optimal ? \"lt-dtree-ev-optimal\" : \"lt-dtree-ev\",\n \"text-anchor\": \"middle\",\n }, `EV=${formatNum(n.ev)}`));\n }\n } else if (n.kind === \"end\") {\n // Right-pointing triangle\n const halfW = ln.width / 2;\n const halfH = ln.height / 2;\n const pts = [\n `${ln.x - halfW},${ln.y - halfH}`,\n `${ln.x + halfW},${ln.y}`,\n `${ln.x - halfW},${ln.y + halfH}`,\n ].join(\" \");\n parts.push(polygon({ points: pts, class: \"lt-dtree-outcome\" }));\n\n // Payoff column: if available, leader-line from triangle tip to column; else inline.\n const colX = layout.payoffColumnX;\n const tipX = ln.x + halfW;\n const textY = ln.y + 4;\n const payoffCls = n.payoff !== undefined && n.payoff < 0 ? \"lt-dtree-payoff-neg\" : \"lt-dtree-payoff\";\n const payoffStr = n.payoff !== undefined ? formatPayoff(n.payoff) : \"\";\n\n if (colX !== undefined && colX > tipX + 20) {\n // Leader line (dashed) to column\n parts.push(pathEl({\n d: `M ${tipX + 2} ${ln.y} L ${colX - 6} ${ln.y}`,\n class: \"lt-dtree-edge-leader\",\n }));\n // Outcome label above leader (midpoint)\n if (n.label) {\n parts.push(textEl({\n x: (tipX + colX) / 2, y: ln.y - 6,\n class: \"lt-dtree-edge-label\", \"text-anchor\": \"middle\",\n }, n.label));\n }\n if (payoffStr) {\n parts.push(textEl({\n x: colX, y: textY, class: payoffCls, \"text-anchor\": \"start\",\n }, payoffStr));\n }\n } else {\n const labelParts: string[] = [];\n if (payoffStr) labelParts.push(payoffStr);\n if (n.label) labelParts.push(n.label);\n if (labelParts.length > 0) {\n parts.push(textEl({\n x: tipX + 8, y: textY, class: payoffCls,\n }, labelParts.join(\" · \")));\n }\n }\n }\n\n return group({\n \"data-node-id\": n.id,\n \"data-node-kind\": n.kind,\n \"data-ev\": n.ev !== undefined ? String(n.ev) : \"\",\n }, parts);\n}\n\nfunction formatNum(n: number): string {\n if (Math.abs(n) >= 10000) return n.toLocaleString(undefined, { maximumFractionDigits: 0 });\n if (Number.isInteger(n)) return String(n);\n return n.toFixed(2);\n}\n\nfunction formatPayoff(n: number): string {\n const abs = Math.abs(n);\n const sign = n < 0 ? \"-\" : \"\";\n if (abs >= 1000000) return `${sign}$${(abs / 1000000).toFixed(abs >= 10000000 ? 0 : 1)}M`;\n if (abs >= 1000) return `${sign}$${abs.toLocaleString()}`;\n return String(n);\n}\n\n// ─── ML-mode node rendering ──────────────────────────────────\n\nfunction classColor(i: number): string { return CLASS_PALETTE[i % CLASS_PALETTE.length]!; }\n\nfunction mlNodeFillColor(n: DTreeNode): { fill: string } {\n if (!Array.isArray(n.value)) return { fill: \"#f1f5f9\" };\n const arr = n.value as number[];\n const sum = arr.reduce((a, b) => a + b, 0);\n if (sum === 0) return { fill: \"#f1f5f9\" };\n let maxIdx = 0;\n for (let i = 1; i < arr.length; i++) if (arr[i]! > arr[maxIdx]!) maxIdx = i;\n const purity = arr[maxIdx]! / sum;\n const nClasses = arr.length;\n const minPurity = 1 / nClasses;\n const alpha = Math.max(0.12, 0.12 + 0.8 * ((purity - minPurity) / (1 - minPurity)));\n return { fill: hexWithAlpha(classColor(maxIdx), alpha) };\n}\n\nfunction hexWithAlpha(hex: string, alpha: number): string {\n return hex + Math.round(alpha * 255).toString(16).padStart(2, \"0\");\n}\n\nfunction renderMlNode(ln: DTreeLayoutNode, ast: DTreeAST): string {\n const n = ln.node;\n const { fill } = mlNodeFillColor(n);\n const parts: string[] = [];\n const x = ln.x - ln.width / 2;\n const y = ln.y - ln.height / 2;\n\n parts.push(rect({\n x, y, width: ln.width, height: ln.height, rx: 6, ry: 6,\n fill, class: \"lt-dtree-ml-rect\",\n }));\n\n const textX = ln.x;\n let textY = y + 16;\n const lineH = 14;\n\n if (n.kind === \"split\" && n.feature) {\n const thresh = typeof n.threshold === \"number\" ? formatNum(n.threshold) : n.threshold ?? \"\";\n parts.push(textEl({ x: textX, y: textY, class: \"lt-dtree-ml-line-1\", \"text-anchor\": \"middle\" },\n `${n.feature} ${n.op ?? \"\"} ${thresh}`));\n textY += lineH;\n } else if (n.label) {\n parts.push(textEl({ x: textX, y: textY, class: \"lt-dtree-ml-line-1\", \"text-anchor\": \"middle\" }, n.label));\n textY += lineH;\n }\n if (n.impurity !== undefined) {\n const impName = ast.impurityName ?? \"gini\";\n parts.push(textEl({ x: textX, y: textY, class: \"lt-dtree-ml-line-muted\", \"text-anchor\": \"middle\" },\n `${impName} = ${formatNum(n.impurity)}`));\n textY += lineH;\n }\n if (n.samples !== undefined) {\n parts.push(textEl({ x: textX, y: textY, class: \"lt-dtree-ml-line-muted\", \"text-anchor\": \"middle\" },\n `samples = ${n.samples}`));\n textY += lineH;\n }\n if (n.value !== undefined) {\n const vStr = Array.isArray(n.value)\n ? `value = [${n.value.join(\", \")}]`\n : `value = ${formatNum(n.value)}`;\n parts.push(textEl({ x: textX, y: textY, class: \"lt-dtree-ml-mono\", \"text-anchor\": \"middle\" }, vStr));\n textY += lineH;\n }\n if (n.className) {\n let colorIdx = 0;\n if (ast.classes) {\n const idx = ast.classes.indexOf(n.className);\n if (idx >= 0) colorIdx = idx;\n }\n parts.push(textEl({ x: textX, y: textY, class: \"lt-dtree-ml-class\", \"text-anchor\": \"middle\", fill: classColor(colorIdx) },\n `class = ${n.className}`));\n textY += lineH;\n } else if (typeof n.value === \"number\") {\n parts.push(textEl({ x: textX, y: textY, class: \"lt-dtree-ml-class\", \"text-anchor\": \"middle\", fill: \"#0f172a\" },\n `predicted = ${formatNum(n.value)}`));\n textY += lineH;\n }\n\n if (Array.isArray(n.value) && ast.classes) {\n const arr = n.value as number[];\n const sum = arr.reduce((a, b) => a + b, 0);\n if (sum > 0) {\n const barY = y + ln.height - 10;\n const barX = x + 10;\n const barW = ln.width - 20;\n let cursor = barX;\n for (let i = 0; i < arr.length; i++) {\n const seg = (arr[i]! / sum) * barW;\n if (seg > 0) {\n parts.push(rect({ x: cursor, y: barY, width: seg, height: 5, fill: classColor(i), stroke: \"none\" }));\n }\n cursor += seg;\n }\n }\n }\n\n return group({\n \"data-node-id\": n.id,\n \"data-node-kind\": n.kind,\n \"data-samples\": n.samples !== undefined ? String(n.samples) : \"\",\n \"data-class\": n.className ?? \"\",\n }, parts);\n}\n\n// ─── Taxonomy-mode node rendering ────────────────────────────\n\nfunction renderTaxonomyNode(ln: DTreeLayoutNode): string {\n const n = ln.node;\n const isLeaf = n.kind === \"answer\" || n.children.length === 0;\n const cls = isLeaf ? \"lt-dtree-taxon-leaf\" : \"lt-dtree-taxon\";\n\n const parts: string[] = [];\n parts.push(rect({\n x: ln.x - ln.width / 2,\n y: ln.y - ln.height / 2,\n width: ln.width,\n height: ln.height,\n rx: 8,\n ry: 8,\n class: cls,\n }));\n\n const lines = wrapText(n.label, 22);\n const totalH = lines.length * 14;\n let ty = ln.y - totalH / 2 + 11;\n for (const line of lines) {\n parts.push(textEl({ x: ln.x, y: ty, class: \"lt-dtree-taxon-label\" }, line));\n ty += 14;\n }\n\n return group({\n \"data-node-id\": n.id,\n \"data-node-kind\": n.kind,\n \"data-leaf\": isLeaf ? \"true\" : \"false\",\n }, parts);\n}\n\nfunction wrapText(text: string, maxChars: number): string[] {\n if (text.length <= maxChars) return [text];\n const words = text.split(/\\s+/);\n const lines: string[] = [];\n let cur = \"\";\n for (const w of words) {\n if (!cur) cur = w;\n else if ((cur + \" \" + w).length > maxChars) { lines.push(cur); cur = w; }\n else cur = cur + \" \" + w;\n if (lines.length >= 1 && cur.length >= maxChars) { lines.push(cur); cur = \"\"; break; }\n }\n if (cur) lines.push(cur);\n return lines.slice(0, 2);\n}\n\n// ─── Top-level renderer ──────────────────────────────────────\n\nexport function renderDecisionTree(ast: DTreeAST, config?: RenderConfig): string {\n const t = resolveBaseTheme(config?.theme ?? \"default\");\n const layout = layoutDecisionTree(ast);\n\n const titleOffset = ast.title ? 36 : 10;\n const width = Math.ceil(layout.width);\n const height = Math.ceil(layout.height + titleOffset);\n\n const children: string[] = [];\n children.push(titleEl(ast.title ?? \"Decision Tree\"));\n children.push(desc(`Decision tree (${ast.mode} mode) with ${layout.nodes.length} nodes and ${layout.edges.length} edges`));\n children.push(el(\"style\", {}, buildCss(t)));\n\n if (ast.title) {\n children.push(textEl({ x: 20, y: 24, class: \"lt-dtree-title\" }, ast.title));\n }\n\n const inner: string[] = [];\n\n // Edges first (back layer)\n for (const e of layout.edges) {\n const cls = e.isOptimal ? \"lt-dtree-edge-optimal\" : \"lt-dtree-edge\";\n const attrs: Record<string, string | number> = { d: e.path, class: cls, \"data-edge\": `${e.from}->${e.to}` };\n if (e.strokeWidth !== undefined && !e.isOptimal) attrs[\"stroke-width\"] = e.strokeWidth;\n inner.push(pathEl(attrs));\n }\n\n // Edge labels — use layout.labelAnchors for accurate placement (works for all edge styles).\n const anchors = layout.labelAnchors ?? {};\n for (const e of layout.edges) {\n if (!e.label) continue;\n const a = anchors[e.to];\n if (!a) continue;\n\n // Decision mode: probability vs choice styling\n const isProb = ast.mode === \"decision\" && /^p=/i.test(e.label);\n const labelClass = isProb ? \"lt-dtree-edge-prob\" : \"lt-dtree-edge-label\";\n\n // For diagonal/bracket, nudge label slightly perpendicular to edge to avoid covering the line\n let lx = a.x;\n let ly = a.y;\n const absAngle = Math.abs(a.angle);\n const perpOffset = layout.edgeStyle === \"diagonal\" || layout.edgeStyle === \"bracket\" ? 9 : 0;\n if (perpOffset > 0 && absAngle > 1 && absAngle < 89) {\n // Move perpendicular to edge direction\n const rad = (a.angle * Math.PI) / 180;\n const nx = -Math.sin(rad);\n const ny = Math.cos(rad);\n // Flip so label sits \"above\" the edge consistently\n const flip = ny < 0 ? -1 : 1;\n lx += nx * perpOffset * flip;\n ly += ny * perpOffset * flip;\n }\n\n const charW = isProb ? 5.5 : 6.2;\n const w = Math.max(e.label.length * charW + 10, 18);\n const h = 14;\n inner.push(rect({\n x: lx - w / 2, y: ly - h / 2, width: w, height: h,\n class: \"lt-dtree-edge-label-bg\", rx: 3, ry: 3,\n }));\n inner.push(textEl({ x: lx, y: ly, class: labelClass }, e.label));\n }\n\n // Nodes on top\n for (const ln of layout.nodes) {\n if (ast.mode === \"decision\") inner.push(renderDecisionNode(ln, layout));\n else if (ast.mode === \"ml\") inner.push(renderMlNode(ln, ast));\n else inner.push(renderTaxonomyNode(ln));\n }\n\n children.push(group({ transform: `translate(0, ${titleOffset})`, \"data-mode\": ast.mode }, inner));\n\n return svgRoot({\n class: \"lt-dtree\",\n role: \"img\",\n \"aria-label\": escapeXml(ast.title ?? `Decision tree (${ast.mode})`),\n width,\n height,\n viewBox: `0 0 ${width} ${height}`,\n }, children);\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseDecisionTree } from \"./parser\";\nimport { renderDecisionTree } from \"./renderer\";\n\nexport const decisiontree: DiagramPlugin = {\n type: \"decisiontree\" as DiagramPlugin[\"type\"],\n detect(text) {\n return /^\\s*decisiontree\\b/i.test(text);\n },\n parse: parseDecisionTree,\n\n render(text, config?: RenderConfig) {\n const ast = parseDecisionTree(text);\n return renderDecisionTree(ast, config);\n },\n};\n\nexport { parseDecisionTree, DTreeParseError } from \"./parser\";\nexport { renderDecisionTree } from \"./renderer\";\nexport { layoutDecisionTree } from \"./layout\";\nexport type * from \"./types\";\n","import type { TimelineDate } from \"./types\";\n\n/**\n * Parse a single DSL date token into a TimelineDate.\n *\n * Accepted forms:\n * - ISO 8601 date: 2024-11-05, 1969-07-20\n * - ISO year-month: 2024-11\n * - Year: 1969\n * - BC year (negative): -753\n * - BC year (suffix): 753BC, 753BCE\n * - Relative (geologic): 540Ma, 4.6Ga, 12ka\n */\nexport function parseDate(raw: string): TimelineDate {\n const s = raw.trim();\n\n // Ma / Ga / ka\n const mGeo = /^(-?\\d+(?:\\.\\d+)?)\\s*(Ma|Ga|ka)$/i.exec(s);\n if (mGeo) {\n const n = parseFloat(mGeo[1]!);\n const unit = mGeo[2]!.toLowerCase();\n const mult = unit === \"ga\" ? 1e9 : unit === \"ma\" ? 1e6 : 1e3;\n return {\n value: 1970 - n * mult,\n raw: s,\n precision: \"ma\",\n };\n }\n\n // BC suffix\n const mBC = /^(\\d+)\\s*(BC|BCE)$/i.exec(s);\n if (mBC) {\n return { value: -parseInt(mBC[1]!, 10), raw: s, precision: \"year\" };\n }\n\n // ISO date yyyy-mm-dd\n const mIso = /^(-?\\d{1,5})-(\\d{1,2})-(\\d{1,2})$/.exec(s);\n if (mIso) {\n const y = parseInt(mIso[1]!, 10);\n const mo = parseInt(mIso[2]!, 10);\n const d = parseInt(mIso[3]!, 10);\n return {\n value: y + (dayOfYear(y, mo, d) - 1) / daysInYear(y),\n raw: s,\n precision: \"day\",\n };\n }\n\n // ISO year-month\n const mYm = /^(-?\\d{1,5})-(\\d{1,2})$/.exec(s);\n if (mYm) {\n const y = parseInt(mYm[1]!, 10);\n const mo = parseInt(mYm[2]!, 10);\n return {\n value: y + (mo - 1) / 12,\n raw: s,\n precision: \"month\",\n };\n }\n\n // Year-Quarter (2026-Q1 style was caught above if QN part; handle separately)\n const mYq = /^(-?\\d{1,5})-?Q([1-4])$/i.exec(s);\n if (mYq) {\n const y = parseInt(mYq[1]!, 10);\n const q = parseInt(mYq[2]!, 10);\n return { value: y + (q - 1) * 0.25, raw: s, precision: \"month\" };\n }\n\n // Plain year (may be negative for BC)\n const mY = /^(-?\\d+)$/.exec(s);\n if (mY) {\n return { value: parseInt(mY[1]!, 10), raw: s, precision: \"year\" };\n }\n\n throw new Error(`Cannot parse date: \"${raw}\"`);\n}\n\nfunction daysInYear(y: number): number {\n const leap = (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;\n return leap ? 366 : 365;\n}\n\nfunction dayOfYear(y: number, m: number, d: number): number {\n const dim = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if ((y % 4 === 0 && y % 100 !== 0) || y % 400 === 0) dim[1] = 29;\n let total = d;\n for (let i = 0; i < m - 1; i++) total += dim[i]!;\n return total;\n}\n\n/**\n * Format a scalar `value` (fractional year) as a tick label, given a span.\n */\nexport function formatYear(value: number, span: number): string {\n const y = Math.round(value);\n if (span >= 2e6) return `${Math.round((1970 - value) / 1e6)} Ma`;\n if (span >= 2000) return y < 0 ? `${-y} BC` : `${y}`;\n if (span >= 50) return y < 0 ? `${-y} BC` : `${y}`;\n // For smaller spans show year (optionally with month)\n return y < 0 ? `${-y} BC` : `${y}`;\n}\n\n/**\n * Format a TimelineDate for display in its original precision.\n */\nexport function formatDate(d: TimelineDate): string {\n return d.raw;\n}\n","import type {\n TimelineAST,\n TimelineAxisPosition,\n TimelineDate,\n TimelineEra,\n TimelineEvent,\n TimelineEventShape,\n TimelineOrientation,\n TimelineScale,\n TimelineSide,\n TimelineStyle,\n} from \"./types\";\nimport { parseDate } from \"./dates\";\n\nexport class TimelineParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"TimelineParseError\";\n }\n}\n\ninterface RawLine {\n indent: number;\n text: string;\n line: number;\n}\n\nfunction preprocess(src: string): RawLine[] {\n const out: RawLine[] = [];\n const lines = src.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i];\n if (raw === undefined) continue;\n const trimmed = raw.trim();\n if (!trimmed) continue;\n if (trimmed.startsWith(\"#\") || trimmed.startsWith(\"//\")) continue;\n const spaces = raw.length - raw.replace(/^\\s+/, \"\").length;\n out.push({ indent: Math.floor(spaces / 2), text: trimmed, line: i + 1 });\n }\n return out;\n}\n\n// Quoted string reader. Returns [string, rest].\nfunction readQuoted(s: string, lineNum: number): [string, string] {\n const t = s.trimStart();\n if (!t.startsWith('\"')) {\n throw new TimelineParseError(`Expected quoted string, got: ${s}`, lineNum);\n }\n const end = t.indexOf('\"', 1);\n if (end < 0) throw new TimelineParseError(`Unterminated string: ${s}`, lineNum);\n return [t.slice(1, end), t.slice(end + 1)];\n}\n\n// Parse trailing `[k: v, k2: v2]` properties.\nfunction parseProperties(s: string, lineNum: number): { props: Record<string, string>; rest: string } {\n const t = s.trimEnd();\n if (!t.endsWith(\"]\")) return { props: {}, rest: s };\n const open = t.lastIndexOf(\"[\");\n if (open < 0) return { props: {}, rest: s };\n const inner = t.slice(open + 1, -1);\n const props: Record<string, string> = {};\n const parts = splitTopLevel(inner, \",\");\n for (const p of parts) {\n const pt = p.trim();\n if (!pt) continue;\n const idx = pt.indexOf(\":\");\n if (idx < 0) {\n throw new TimelineParseError(`Invalid property (missing ':'): ${pt}`, lineNum);\n }\n const k = pt.slice(0, idx).trim();\n let v = pt.slice(idx + 1).trim();\n if (v.startsWith('\"') && v.endsWith('\"')) v = v.slice(1, -1);\n props[k] = v;\n }\n return { props, rest: t.slice(0, open).trimEnd() };\n}\n\nfunction splitTopLevel(s: string, sep: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let inQuote = false;\n let start = 0;\n for (let i = 0; i < s.length; i++) {\n const ch = s[i]!;\n if (ch === '\"') inQuote = !inQuote;\n if (inQuote) continue;\n if (ch === \"[\" || ch === \"(\") depth++;\n else if (ch === \"]\" || ch === \")\") depth--;\n else if (ch === sep && depth === 0) {\n out.push(s.slice(start, i));\n start = i + 1;\n }\n }\n out.push(s.slice(start));\n return out;\n}\n\n/**\n * Split the leading \"date\" or \"date - date\" / \"date .. date\" segment from\n * `label-and-rest`. Returns [dateSegment, rest-after-colon].\n *\n * Tricky bit: a bare BC year is negative (`-753`), so we must distinguish the\n * date-range separator (space-hyphen-space or `..`) from an intra-date minus.\n */\nfunction splitDateAndBody(s: string, lineNum: number): { date: string; end?: string; body: string } {\n // Find unquoted colon that ends the date spec\n let inQuote = false;\n let colon = -1;\n for (let i = 0; i < s.length; i++) {\n const c = s[i]!;\n if (c === '\"') inQuote = !inQuote;\n if (inQuote) continue;\n if (c === \":\") { colon = i; break; }\n }\n if (colon < 0) throw new TimelineParseError(`Expected ':' after date: ${s}`, lineNum);\n const datePart = s.slice(0, colon).trim();\n const body = s.slice(colon + 1).trim();\n\n // Detect `..` range\n const dd = datePart.indexOf(\"..\");\n if (dd > 0) {\n return {\n date: datePart.slice(0, dd).trim(),\n end: datePart.slice(dd + 2).trim(),\n body,\n };\n }\n // Detect ` - ` (with surrounding whitespace) for range\n const mDash = / - /.exec(datePart);\n if (mDash && mDash.index > 0) {\n return {\n date: datePart.slice(0, mDash.index).trim(),\n end: datePart.slice(mDash.index + 3).trim(),\n body,\n };\n }\n return { date: datePart, body };\n}\n\nexport function parseTimeline(src: string): TimelineAST {\n const lines = preprocess(src);\n if (!lines.length) throw new TimelineParseError(\"Empty timeline\");\n\n const ast: TimelineAST = {\n type: \"timeline\",\n title: undefined,\n style: \"swimlane\",\n orientation: \"horizontal\",\n scale: \"proportional\",\n axis: \"bottom\",\n events: [],\n eras: [],\n tracks: [],\n };\n\n let i = 0;\n let autoId = 0;\n const nextId = (prefix: string) => `${prefix}-${++autoId}`;\n\n // ─── header: `timeline \"Title\"` or `timeline` ───\n const first = lines[0]!;\n if (/^timeline\\b/i.test(first.text)) {\n const rest = first.text.replace(/^timeline\\b/i, \"\").trim();\n if (rest) {\n if (rest.startsWith('\"')) {\n const [title] = readQuoted(rest, first.line);\n ast.title = title;\n } else {\n ast.title = rest;\n }\n }\n i = 1;\n }\n\n while (i < lines.length) {\n const L = lines[i]!;\n const text = L.text;\n\n // config:\n if (/^config\\s*:/i.test(text)) {\n const body = text.replace(/^config\\s*:\\s*/i, \"\");\n const eq = body.indexOf(\"=\");\n if (eq < 0) throw new TimelineParseError(`Expected 'key = value' in config: ${text}`, L.line);\n const k = body.slice(0, eq).trim();\n const v = body.slice(eq + 1).trim();\n applyConfig(ast, k, v, L.line);\n i++;\n continue;\n }\n\n // era ...\n if (/^era\\b/i.test(text)) {\n const body = text.replace(/^era\\s+/i, \"\");\n const { props, rest } = parseProperties(body, L.line);\n const { date, end, body: labelPart } = splitDateAndBody(rest, L.line);\n if (!end) throw new TimelineParseError(`era requires a date range: ${text}`, L.line);\n const [label] = readQuoted(labelPart, L.line);\n const era: TimelineEra = {\n id: nextId(\"era\"),\n label,\n start: safeParseDate(date, L.line),\n end: safeParseDate(end, L.line),\n color: props[\"color\"],\n };\n ast.eras.push(era);\n i++;\n continue;\n }\n\n // `track \"Name\":` (indented body) OR `section \"Name\"` / `section Foo` (Mermaid-style, flat).\n const isTrack = /^track\\b/i.test(text);\n const isSection = /^section\\b/i.test(text);\n if (isTrack || isSection) {\n const keyword = isTrack ? \"track\" : \"section\";\n const body = text.replace(new RegExp(`^${keyword}\\\\s+`, \"i\"), \"\");\n let name: string;\n if (body.startsWith('\"')) {\n const [n] = readQuoted(body, L.line);\n name = n;\n } else {\n // Bare name (Mermaid-style). Strip trailing colon if present.\n name = body.replace(/:\\s*$/, \"\").trim();\n if (!name) {\n throw new TimelineParseError(`Expected name after '${keyword}'`, L.line);\n }\n }\n const trackId = nextId(\"track\");\n ast.tracks.push({ id: trackId, label: name });\n i++;\n // `track` requires deeper indent for its events; `section` is flat and\n // ends at the next section/track or EOF.\n const baseIndent = L.indent;\n while (i < lines.length) {\n const child = lines[i]!;\n if (child.indent <= baseIndent && /^(section|track)\\b/i.test(child.text)) break;\n if (isTrack && child.indent <= baseIndent) break;\n if (/^note\\s*:/i.test(child.text)) { i++; continue; }\n const parsed = parseEventLine(child.text, child.line, nextId);\n if (!parsed) throw new TimelineParseError(`Unrecognized line in ${keyword}: ${child.text}`, child.line);\n parsed.event.trackId = trackId;\n ast.events.push(parsed.event);\n i++;\n if (i < lines.length && /^note\\s*:/i.test(lines[i]!.text) && lines[i]!.indent > child.indent) {\n const noteBody = lines[i]!.text.replace(/^note\\s*:\\s*/i, \"\");\n const [note] = readQuoted(noteBody, lines[i]!.line);\n parsed.event.note = note;\n i++;\n }\n }\n continue;\n }\n\n // Otherwise: flat event line\n const parsed = parseEventLine(text, L.line, nextId);\n if (parsed) {\n ast.events.push(parsed.event);\n i++;\n // Optional note block on next line (indented)\n if (i < lines.length && /^note\\s*:/i.test(lines[i]!.text) && lines[i]!.indent > L.indent) {\n const noteBody = lines[i]!.text.replace(/^note\\s*:\\s*/i, \"\");\n const [note] = readQuoted(noteBody, lines[i]!.line);\n parsed.event.note = note;\n i++;\n }\n continue;\n }\n\n throw new TimelineParseError(`Unrecognized line: ${text}`, L.line);\n }\n\n return ast;\n}\n\nfunction safeParseDate(raw: string, line: number): TimelineDate {\n try {\n return parseDate(raw);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new TimelineParseError(msg, line);\n }\n}\n\nfunction applyConfig(ast: TimelineAST, k: string, v: string, line: number): void {\n switch (k) {\n case \"style\": {\n const normalized = v === \"gantt-project\" ? \"gantt\" : v;\n if (normalized !== \"swimlane\" && normalized !== \"gantt\" && normalized !== \"lollipop\") {\n throw new TimelineParseError(`Invalid style: ${v}`, line);\n }\n ast.style = normalized as TimelineStyle;\n break;\n }\n case \"orientation\":\n if (v !== \"horizontal\" && v !== \"vertical\") {\n throw new TimelineParseError(`Invalid orientation: ${v}`, line);\n }\n ast.orientation = v as TimelineOrientation;\n break;\n case \"scale\":\n if (v !== \"proportional\" && v !== \"equidistant\" && v !== \"log\") {\n throw new TimelineParseError(`Invalid scale: ${v}`, line);\n }\n ast.scale = v as TimelineScale;\n break;\n case \"axis\":\n if (v !== \"bottom\" && v !== \"center\") {\n throw new TimelineParseError(`Invalid axis: ${v}`, line);\n }\n ast.axis = v as TimelineAxisPosition;\n break;\n default:\n (ast.metadata ??= {})[k] = v;\n }\n}\n\n/**\n * Parse a single event line. Returns `null` if the line isn't an event line\n * (e.g. unknown keyword).\n */\nfunction parseEventLine(\n text: string,\n line: number,\n nextId: (p: string) => string\n): { event: TimelineEvent; hasNote: boolean } | null {\n const { props, rest } = parseProperties(text, line);\n const { date, end, body } = splitDateAndBody(rest, line);\n\n // body forms:\n // milestone \"label\"\n // \"label\"\n let kind: \"point\" | \"range\" | \"milestone\" = end ? \"range\" : \"point\";\n let bodyS = body.trim();\n if (/^milestone\\b/i.test(bodyS)) {\n kind = \"milestone\";\n bodyS = bodyS.replace(/^milestone\\s+/i, \"\");\n }\n if (!bodyS.startsWith('\"')) return null;\n const [label] = readQuoted(bodyS, line);\n\n const sideRaw = props[\"side\"];\n const side: TimelineSide | undefined =\n sideRaw === \"above\" || sideRaw === \"below\" ? sideRaw : undefined;\n\n const ev: TimelineEvent = {\n id: nextId(\"ev\"),\n label,\n kind,\n start: safeParseDate(date, line),\n end: end ? safeParseDate(end, line) : undefined,\n icon: props[\"icon\"],\n shape: props[\"shape\"] as TimelineEventShape | undefined,\n color: props[\"color\"],\n category: props[\"category\"],\n side,\n };\n return { event: ev, hasNote: false };\n}\n","import type {\n TimelineAST,\n TimelineCardLayout,\n TimelineEra,\n TimelineEraLayout,\n TimelineEvent,\n TimelineEventLayout,\n TimelineLaneLayout,\n TimelineLayoutResult,\n TimelineLegendItem,\n TimelinePinLayout,\n TimelineSide,\n TimelineTick,\n TimelineTrack,\n} from \"./types\";\nimport { formatYear } from \"./dates\";\n\nconst CANVAS_WIDTH = 960;\nconst PAD_LEFT_WITH_TRACKS = 140;\nconst PAD_LEFT_NO_TRACKS = 40;\nconst PAD_RIGHT = 40;\nconst PAD_TOP_BASE = 40;\nconst ERA_BAND_HEIGHT = 16;\nconst AXIS_HEIGHT = 40;\nconst LANE_HEIGHT_RANGE = 36;\nconst LANE_HEIGHT_POINT = 28;\nconst LANE_GAP = 8;\n\n// Palette used when a renderer-level theme palette isn't threaded through.\n// Kept in sync with BaseTheme.palette defaults so auto-pack colors look the\n// same in the swimlane baseline before theme tokens are applied.\nconst DEFAULT_CATEGORY_PALETTE = [\n \"#2563eb\", \"#059669\", \"#d97706\", \"#7c3aed\",\n \"#dc2626\", \"#0891b2\", \"#db2777\", \"#475569\",\n];\n\nexport function layoutTimeline(ast: TimelineAST): TimelineLayoutResult {\n switch (ast.style) {\n case \"gantt\": return layoutGantt(ast);\n case \"lollipop\": return layoutLollipop(ast);\n case \"swimlane\":\n default: return layoutSwimlane(ast);\n }\n}\n\n// ─── Shared helpers ──────────────────────────────────────\n\nfunction timeExtent(ast: TimelineAST): { min: number; max: number; span: number } {\n const starts = [\n ...ast.events.map(e => e.start.value),\n ...ast.eras.map(e => e.start.value),\n ];\n const ends = [\n ...ast.events.map(e => e.end?.value ?? e.start.value),\n ...ast.eras.map(e => e.end.value),\n ];\n if (!starts.length) return { min: 0, max: 1, span: 1 };\n const min = Math.min(...starts);\n const max = Math.max(...ends);\n const span = max - min || 1;\n return { min, max, span };\n}\n\nfunction buildScale(\n mode: TimelineAST[\"scale\"],\n events: TimelineEvent[],\n tMin: number,\n tMax: number,\n plotX: number,\n plotW: number,\n): (v: number) => number {\n if (mode === \"equidistant\") {\n const sorted = events.slice().sort((a, b) => a.start.value - b.start.value);\n const n = sorted.length || 1;\n const indexByValue = new Map<number, number>();\n sorted.forEach((e, i) => indexByValue.set(e.start.value, i));\n return (v: number) => {\n const idx = indexByValue.get(v);\n if (idx !== undefined) {\n return plotX + (n === 1 ? plotW / 2 : (idx / (n - 1)) * plotW);\n }\n return plotX + ((v - tMin) / (tMax - tMin)) * plotW;\n };\n }\n if (mode === \"log\") {\n const now = Math.max(tMax, 0);\n const toAgo = (v: number) => Math.max(1, now - v + 1);\n const minAgo = toAgo(tMax);\n const maxAgo = toAgo(tMin);\n const logMin = Math.log10(minAgo);\n const logMax = Math.log10(maxAgo);\n const range = logMax - logMin || 1;\n return (v: number) => {\n const frac = (logMax - Math.log10(toAgo(v))) / range;\n return plotX + frac * plotW;\n };\n }\n const span = tMax - tMin || 1;\n return (v: number) => plotX + ((v - tMin) / span) * plotW;\n}\n\nfunction packEraRows(eras: TimelineEra[]): { rows: number; rowOf: number[] } {\n if (!eras.length) return { rows: 0, rowOf: [] };\n const rowsEnd: number[] = [];\n const rowOf: number[] = [];\n for (const e of eras) {\n let placed = -1;\n for (let i = 0; i < rowsEnd.length; i++) {\n if (rowsEnd[i]! <= e.start.value) { placed = i; break; }\n }\n if (placed < 0) {\n rowsEnd.push(e.end.value);\n placed = rowsEnd.length - 1;\n } else {\n rowsEnd[placed] = e.end.value;\n }\n rowOf.push(placed);\n }\n return { rows: rowsEnd.length, rowOf };\n}\n\nfunction generateTicks(\n tMin: number,\n tMax: number,\n span: number,\n xScale: (v: number) => number,\n mode: TimelineAST[\"scale\"],\n): TimelineTick[] {\n const ticks: TimelineTick[] = [];\n\n if (mode === \"log\") {\n const now = Math.max(tMax, 0);\n const minAgo = Math.max(1, now - tMax + 1);\n const maxAgo = Math.max(1, now - tMin + 1);\n const logMin = Math.floor(Math.log10(minAgo));\n const logMax = Math.ceil(Math.log10(maxAgo));\n for (let p = logMin; p <= logMax; p++) {\n const ago = Math.pow(10, p);\n const v = now - ago;\n if (v < tMin || v > tMax) continue;\n const label = ago >= 1e6 ? `${ago / 1e6} Ma` : ago >= 1e3 ? `${ago / 1e3} ka` : `${ago} yr`;\n ticks.push({ value: v, x: xScale(v), label, major: true });\n }\n return ticks;\n }\n\n const step = niceStep(span);\n const start = Math.ceil(tMin / step) * step;\n for (let v = start; v <= tMax; v += step) {\n ticks.push({ value: v, x: xScale(v), label: formatYear(v, span), major: true });\n }\n return ticks;\n}\n\nfunction niceStep(span: number): number {\n const candidates = [\n 0.01, 0.02, 0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 20, 25, 50,\n 100, 200, 500, 1000, 2000, 5000, 10000, 50000, 100000, 500000, 1e6,\n ];\n for (const c of candidates) {\n if (span / c <= 10) return c;\n }\n return Math.pow(10, Math.ceil(Math.log10(span / 10)));\n}\n\nfunction estimateLabelWidth(label: string, icon?: string): number {\n const iconW = icon ? 14 : 0;\n return 6.5 * label.length + iconW + 4;\n}\n\n// ─── Swimlane (default, baseline) ────────────────────────\n\nfunction layoutSwimlane(ast: TimelineAST): TimelineLayoutResult {\n const events = ast.events.slice().sort((a, b) => a.start.value - b.start.value);\n const allTracks = resolveTracks(ast, events);\n assignAutoTracks(events, allTracks);\n\n const { min: startVal, max: endVal, span } = timeExtent(ast);\n const paddedStart = startVal - span * 0.02;\n const paddedEnd = endVal + span * 0.02;\n\n const hasNamedTracks = ast.tracks.length > 0;\n const plotX = hasNamedTracks ? PAD_LEFT_WITH_TRACKS : PAD_LEFT_NO_TRACKS;\n const plotRight = CANVAS_WIDTH - PAD_RIGHT;\n const plotW = plotRight - plotX;\n\n const xScale = buildScale(ast.scale, events, paddedStart, paddedEnd, plotX, plotW);\n\n const eraRows = packEraRows(ast.eras);\n const eraBandTotal = eraRows.rows * (ERA_BAND_HEIGHT + 2);\n\n const titleOffset = ast.title ? 28 : 0;\n const plotY = PAD_TOP_BASE + titleOffset + eraBandTotal;\n\n const lanes: TimelineLaneLayout[] = [];\n let cursorY = plotY + 8;\n for (const t of allTracks) {\n const hasRange = events.some(e => e.trackId === t.id && e.kind === \"range\");\n const h = hasRange ? LANE_HEIGHT_RANGE : LANE_HEIGHT_POINT;\n lanes.push({ trackId: t.id, label: t.label, y: cursorY, height: h });\n cursorY += h + LANE_GAP;\n }\n const plotH = cursorY - plotY;\n const axisY = cursorY + 4;\n const height = axisY + AXIS_HEIGHT + 20;\n\n const eraLayouts: TimelineEraLayout[] = ast.eras.map((e, idx) => ({\n era: e,\n x: xScale(e.start.value),\n width: Math.max(2, xScale(e.end.value) - xScale(e.start.value)),\n bandRow: eraRows.rowOf[idx]!,\n }));\n\n const laneByTrack = new Map(lanes.map(l => [l.trackId, l]));\n const eventLayouts: TimelineEventLayout[] = [];\n const labelBoxes: Array<{ x1: number; x2: number; y: number }> = [];\n for (const ev of events) {\n const lane = laneByTrack.get(ev.trackId!)!;\n if (!lane) continue;\n if (ev.kind === \"range\") {\n const x = xScale(ev.start.value);\n const xe = xScale(ev.end!.value);\n const w = Math.max(4, xe - x);\n eventLayouts.push({\n event: ev,\n x,\n w,\n y: lane.y + 6,\n h: lane.height - 12,\n labelX: x + w / 2,\n labelY: lane.y + lane.height / 2 + 4,\n labelAnchor: \"middle\",\n });\n } else {\n const x = xScale(ev.start.value);\n const cy = lane.y + lane.height / 2;\n const labelW = estimateLabelWidth(ev.label, ev.icon);\n // Bidirectional cascade: try above first, then below, growing outward.\n // This roughly doubles the usable label slots compared to above-only.\n const candidates = [\n cy - 14, cy + 18, cy - 28, cy + 32,\n cy - 42, cy + 46, cy - 56, cy + 60,\n ];\n let labelY = candidates[0]!;\n for (const y of candidates) {\n const box = { x1: x - labelW / 2, x2: x + labelW / 2, y };\n const collide = labelBoxes.some(b => Math.abs(b.y - box.y) < 13 && b.x1 < box.x2 && b.x2 > box.x1);\n if (!collide) { labelY = y; labelBoxes.push(box); break; }\n }\n eventLayouts.push({\n event: ev,\n x,\n y: cy,\n h: LANE_HEIGHT_POINT,\n labelX: x,\n labelY,\n labelAnchor: \"middle\",\n noteX: ev.note ? x + 12 : undefined,\n noteY: ev.note ? cy + 16 : undefined,\n });\n }\n }\n\n return {\n width: CANVAS_WIDTH,\n height,\n style: \"swimlane\",\n plotX,\n plotY,\n plotW,\n plotH,\n lanes,\n events: eventLayouts,\n eras: eraLayouts,\n ticks: generateTicks(paddedStart, paddedEnd, span, xScale, ast.scale)\n .filter(t => t.x >= plotX - 2 && t.x <= plotX + plotW + 2),\n axisY,\n title: ast.title,\n };\n}\n\nfunction resolveTracks(ast: TimelineAST, events: TimelineEvent[]): TimelineTrack[] {\n const namedIds = new Set(ast.tracks.map(t => t.id));\n const tracks: TimelineTrack[] = ast.tracks.slice();\n for (const ev of events) {\n if (ev.trackId && !namedIds.has(ev.trackId)) {\n ev.trackId = undefined;\n }\n }\n return tracks;\n}\n\nfunction assignAutoTracks(events: TimelineEvent[], tracks: TimelineTrack[]): void {\n const unassigned = events.filter(e => !e.trackId);\n if (unassigned.length === 0) return;\n\n const pointsOnly = unassigned.every(e => e.kind !== \"range\");\n\n if (pointsOnly) {\n let lane = tracks.find(t => t.id === \"__auto_points__\");\n if (!lane) {\n lane = { id: \"__auto_points__\", label: \"\" };\n tracks.push(lane);\n }\n for (const ev of unassigned) ev.trackId = lane.id;\n return;\n }\n\n const packed: Array<{ id: string; endX: number }> = [];\n const pointLane: TimelineTrack = { id: \"__auto_points__\", label: \"\" };\n const pointEvents: TimelineEvent[] = [];\n\n for (const ev of unassigned) {\n if (ev.kind !== \"range\") {\n pointEvents.push(ev);\n continue;\n }\n let placed = false;\n for (const lane of packed) {\n if (ev.start.value >= lane.endX) {\n ev.trackId = lane.id;\n lane.endX = ev.end!.value;\n placed = true;\n break;\n }\n }\n if (!placed) {\n const id = `__auto_${packed.length}__`;\n tracks.push({ id, label: \"\" });\n packed.push({ id, endX: ev.end!.value });\n ev.trackId = id;\n }\n }\n if (pointEvents.length) {\n tracks.push(pointLane);\n for (const ev of pointEvents) ev.trackId = pointLane.id;\n }\n}\n\n// ─── Gantt (project-plan) ────────────────────────────────\n\nconst GANTT_PIN_ZONE = 70;\nconst GANTT_LANE_H = 30;\nconst GANTT_LEGEND_W = 140;\n\nfunction layoutGantt(ast: TimelineAST): TimelineLayoutResult {\n const events = ast.events.slice().sort((a, b) => a.start.value - b.start.value);\n const { min: startVal, max: endVal, span } = timeExtent(ast);\n const padSpan = span * 0.03;\n const paddedStart = startVal - padSpan;\n const paddedEnd = endVal + padSpan;\n\n // Derive categories from events that have `category`, then named tracks, then auto.\n const categories: string[] = [];\n const catSeen = new Set<string>();\n for (const ev of events) {\n const c = ev.category ?? (ev.kind === \"range\" ? ast.tracks.find(t => t.id === ev.trackId)?.label : undefined);\n if (c && !catSeen.has(c)) { catSeen.add(c); categories.push(c); }\n }\n // Fallback: if no categories but there are range events, put them under \"Tasks\".\n if (!categories.length && events.some(e => e.kind === \"range\")) {\n categories.push(\"Tasks\");\n }\n\n const hasLegend = categories.length > 0;\n const plotX = hasLegend ? PAD_LEFT_WITH_TRACKS - 20 : PAD_LEFT_NO_TRACKS;\n const plotRight = CANVAS_WIDTH - (hasLegend ? GANTT_LEGEND_W + 20 : PAD_RIGHT);\n const plotW = plotRight - plotX;\n\n const xScale = buildScale(ast.scale, events, paddedStart, paddedEnd, plotX, plotW);\n\n const eraRows = packEraRows(ast.eras);\n const eraBandTotal = eraRows.rows * (ERA_BAND_HEIGHT + 2);\n\n const titleOffset = ast.title ? 28 : 0;\n const pinZoneTop = PAD_TOP_BASE + titleOffset + eraBandTotal;\n const pinZoneBottom = pinZoneTop + GANTT_PIN_ZONE;\n const axisY = pinZoneBottom;\n\n const lanes: TimelineLaneLayout[] = categories.map((c, i) => ({\n trackId: `__cat_${i}__`,\n label: c,\n y: axisY + 14 + i * GANTT_LANE_H,\n height: GANTT_LANE_H - 8,\n }));\n\n const plotY = pinZoneTop;\n const plotH = (lanes.length ? (lanes[lanes.length - 1]!.y + lanes[lanes.length - 1]!.height - plotY) : GANTT_PIN_ZONE);\n const height = (lanes.length ? lanes[lanes.length - 1]!.y + lanes[lanes.length - 1]!.height + 40 : axisY + 60);\n\n const palette = DEFAULT_CATEGORY_PALETTE;\n const colorFor = (cat: string | undefined): string => {\n if (!cat) return palette[0]!;\n const idx = categories.indexOf(cat);\n return palette[(idx < 0 ? 0 : idx) % palette.length]!;\n };\n\n const laneByCat = new Map(lanes.map(l => [l.label, l]));\n\n // Events: split into pins (point/milestone above axis) and bars (range in lane).\n const pins: TimelinePinLayout[] = [];\n const eventLayouts: TimelineEventLayout[] = [];\n\n // Cascade pin label rows to minimize overlap\n const pinBoxes: Array<{ x1: number; x2: number; y: number }> = [];\n for (const ev of events) {\n if (ev.kind === \"range\") {\n const cat = ev.category ?? \"Tasks\";\n const lane = laneByCat.get(cat) ?? lanes[0];\n if (!lane) continue;\n const x = xScale(ev.start.value);\n const xe = xScale(ev.end!.value);\n const w = Math.max(4, xe - x);\n eventLayouts.push({\n event: ev,\n x,\n w,\n y: lane.y + 4,\n h: lane.height - 8,\n labelX: x + w / 2,\n labelY: lane.y + lane.height / 2 + 4,\n labelAnchor: \"middle\",\n });\n continue;\n }\n // Pin\n const x = xScale(ev.start.value);\n const labelW = estimateLabelWidth(ev.label, ev.icon);\n let labelY = pinZoneTop + 12;\n let step = 0;\n while (step < 4) {\n const box = { x1: x - labelW / 2, x2: x + labelW / 2, y: labelY };\n const collide = pinBoxes.some(b => Math.abs(b.y - box.y) < 14 && b.x1 < box.x2 && b.x2 > box.x1);\n if (!collide) { pinBoxes.push(box); break; }\n labelY += 16;\n step++;\n }\n pins.push({\n event: ev,\n x,\n labelY,\n axisY,\n color: colorFor(ev.category),\n });\n }\n\n const eraLayouts: TimelineEraLayout[] = ast.eras.map((e, idx) => ({\n era: e,\n x: xScale(e.start.value),\n width: Math.max(2, xScale(e.end.value) - xScale(e.start.value)),\n bandRow: eraRows.rowOf[idx]!,\n }));\n\n const legend: TimelineLegendItem[] = categories.map(c => ({ label: c, color: colorFor(c) }));\n\n return {\n width: CANVAS_WIDTH,\n height,\n style: \"gantt\",\n plotX,\n plotY,\n plotW,\n plotH,\n lanes,\n events: eventLayouts,\n eras: eraLayouts,\n ticks: generateTicks(paddedStart, paddedEnd, span, xScale, ast.scale)\n .filter(t => t.x >= plotX - 2 && t.x <= plotX + plotW + 2),\n axisY,\n title: ast.title,\n pins,\n legend: hasLegend ? legend : undefined,\n };\n}\n\n// ─── Lollipop (alternating cards) ────────────────────────\n\nconst LOLLIPOP_CARD_W = 180;\nconst LOLLIPOP_CARD_H = 54;\nconst LOLLIPOP_STEM_BASE = 26;\nconst LOLLIPOP_STEM_STACK = 18;\n\nfunction layoutLollipop(ast: TimelineAST): TimelineLayoutResult {\n const events = ast.events.slice().sort((a, b) => a.start.value - b.start.value);\n\n // Event-only time extent so the axis doesn't extend past the last event\n // just to accommodate an era that ends later.\n const eStarts = events.map(e => e.start.value);\n const eEnds = events.map(e => e.end?.value ?? e.start.value);\n const eStart = eStarts.length ? Math.min(...eStarts) : 0;\n const eEnd = eEnds.length ? Math.max(...eEnds) : 1;\n const span = Math.max(1e-9, eEnd - eStart);\n const padSpan = span * 0.02;\n const paddedStart = eStart - padSpan;\n const paddedEnd = eEnd + padSpan;\n\n const plotX = PAD_LEFT_NO_TRACKS + 20;\n const plotRight = CANVAS_WIDTH - PAD_RIGHT - 20;\n const plotW = plotRight - plotX;\n\n // Reserve half-card room at axis ends so cards can't overhang plot bounds.\n const CARD_HALF = LOLLIPOP_CARD_W / 2;\n const axisInset = CARD_HALF + 8;\n const axisStart = plotX + axisInset;\n const axisEnd = plotRight - axisInset;\n const axisW = Math.max(1, axisEnd - axisStart);\n\n const rawScale = buildScale(ast.scale, events, paddedStart, paddedEnd, axisStart, axisW);\n const xScale = (v: number) => Math.max(plotX, Math.min(plotRight, rawScale(v)));\n\n const eraRows = packEraRows(ast.eras);\n const eraBandTotal = eraRows.rows * (ERA_BAND_HEIGHT + 2);\n\n const titleOffset = ast.title ? 28 : 0;\n // Estimate 2 stacked rows per side at worst; compute actual after card assignment.\n const plotY = PAD_TOP_BASE + titleOffset + eraBandTotal;\n\n // Assign sides: explicit first, then alternate\n const cards: TimelineCardLayout[] = [];\n let alt: TimelineSide = \"above\";\n const palette = DEFAULT_CATEGORY_PALETTE;\n\n // Track column occupancy to stagger stems when cards would overlap.\n const aboveRows: number[] = []; // stores last-right-edge x per stack row\n const belowRows: number[] = [];\n\n for (let i = 0; i < events.length; i++) {\n const ev = events[i]!;\n if (ev.kind === \"range\") continue; // ranges rendered as thin bars on axis\n const side: TimelineSide = ev.side ?? alt;\n if (!ev.side) alt = alt === \"above\" ? \"below\" : \"above\";\n\n const x = xScale(ev.start.value);\n const cardX = x - LOLLIPOP_CARD_W / 2;\n const cardRight = cardX + LOLLIPOP_CARD_W;\n const rows = side === \"above\" ? aboveRows : belowRows;\n // Find first row where left edge doesn't collide. Allow 2px tolerance so\n // cards whose borders would just-barely kiss stay on the same row instead\n // of cascading up — equidistant layouts depend on this to keep all\n // same-side cards horizontally aligned.\n let row = 0;\n for (; row < rows.length; row++) {\n if (rows[row]! <= cardX + 2) { rows[row] = cardRight; break; }\n }\n if (row === rows.length) { rows.push(cardRight); }\n\n const stemLen = LOLLIPOP_STEM_BASE + row * LOLLIPOP_STEM_STACK;\n\n cards.push({\n event: ev,\n x,\n axisY: 0, // filled after we know axisY\n side,\n cardX,\n cardY: 0,\n cardW: LOLLIPOP_CARD_W,\n cardH: LOLLIPOP_CARD_H,\n stemY1: 0,\n stemY2: 0,\n color: ev.color ?? palette[i % palette.length]!,\n index: row,\n });\n // store stemLen in a transient property via cardH field hack? Use index+side map instead.\n (cards[cards.length - 1] as unknown as { _stemLen: number })._stemLen = stemLen;\n }\n\n const maxAboveStems = aboveRows.length;\n const maxBelowStems = belowRows.length;\n const topExtent = LOLLIPOP_CARD_H + LOLLIPOP_STEM_BASE + Math.max(0, maxAboveStems - 1) * LOLLIPOP_STEM_STACK;\n const realAxisY = plotY + topExtent + 10;\n const bottomExtent = LOLLIPOP_CARD_H + LOLLIPOP_STEM_BASE + Math.max(0, maxBelowStems - 1) * LOLLIPOP_STEM_STACK;\n const height = realAxisY + bottomExtent + 40;\n\n // Fill in card axis/stem/card positions now that we know realAxisY\n for (const c of cards) {\n const stemLen = (c as unknown as { _stemLen: number })._stemLen ?? LOLLIPOP_STEM_BASE;\n c.axisY = realAxisY;\n if (c.side === \"above\") {\n c.stemY1 = realAxisY - 3;\n c.stemY2 = realAxisY - stemLen;\n c.cardY = c.stemY2 - c.cardH;\n } else {\n c.stemY1 = realAxisY + 3;\n c.stemY2 = realAxisY + stemLen;\n c.cardY = c.stemY2;\n }\n delete (c as unknown as { _stemLen?: number })._stemLen;\n }\n\n // Ranges → thin bars on axis\n const eventLayouts: TimelineEventLayout[] = [];\n for (const ev of events) {\n if (ev.kind !== \"range\") continue;\n const x = xScale(ev.start.value);\n const xe = xScale(ev.end!.value);\n const w = Math.max(4, xe - x);\n eventLayouts.push({\n event: ev,\n x,\n w,\n y: realAxisY - 5,\n h: 10,\n labelX: x + w / 2,\n labelY: realAxisY - 10,\n labelAnchor: \"middle\",\n });\n }\n\n const eraLayouts: TimelineEraLayout[] = ast.eras.map((e, idx) => ({\n era: e,\n x: xScale(e.start.value),\n width: Math.max(2, xScale(e.end.value) - xScale(e.start.value)),\n bandRow: eraRows.rowOf[idx]!,\n }));\n\n // Per-row leftmost/rightmost extension: ensure era covers full plot width\n // so cards at axis extremes never overhang a gap.\n const leftmostIdxByRow = new Map<number, number>();\n const rightmostIdxByRow = new Map<number, number>();\n eraLayouts.forEach((e, i) => {\n const curL = leftmostIdxByRow.get(e.bandRow);\n if (curL === undefined || e.x < eraLayouts[curL]!.x) leftmostIdxByRow.set(e.bandRow, i);\n const curR = rightmostIdxByRow.get(e.bandRow);\n const right = e.x + e.width;\n if (curR === undefined || right > eraLayouts[curR]!.x + eraLayouts[curR]!.width) {\n rightmostIdxByRow.set(e.bandRow, i);\n }\n });\n for (const [, i] of leftmostIdxByRow) {\n const e = eraLayouts[i]!;\n const right = e.x + e.width;\n e.x = Math.min(e.x, plotX);\n e.width = right - e.x;\n }\n for (const [, i] of rightmostIdxByRow) {\n const e = eraLayouts[i]!;\n e.width = Math.max(e.width, plotRight - e.x);\n }\n\n return {\n width: CANVAS_WIDTH,\n height,\n style: \"lollipop\",\n plotX,\n plotY,\n plotW,\n plotH: height - plotY - 20,\n lanes: [],\n events: eventLayouts,\n eras: eraLayouts,\n ticks: generateTicks(paddedStart, paddedEnd, span, xScale, ast.scale)\n .filter(t => t.x >= plotX - 2 && t.x <= plotX + plotW + 2),\n axisY: realAxisY,\n title: ast.title,\n cards,\n };\n}\n","import type { RenderConfig } from \"../../core/types\";\nimport { svgRoot, group, rect, line, path, text as textEl, title as titleEl, desc as descEl, defs, circle, escapeXml } from \"../../core/svg\";\nimport { resolveTimelineTheme, cssCustomProperties, type ResolvedTheme, type TimelineTokens } from \"../../core/theme\";\nimport { parseTimeline } from \"./parser\";\nimport { layoutTimeline } from \"./layout\";\nimport type {\n TimelineCardLayout,\n TimelineEventLayout,\n TimelineLayoutResult,\n TimelinePinLayout,\n} from \"./types\";\n\ntype Theme = ResolvedTheme<TimelineTokens>;\n\nconst ERA_BAND_HEIGHT = 16;\nconst ERA_ROW_GAP = 2;\n\nexport function renderTimeline(src: string, config?: RenderConfig): string {\n const ast = parseTimeline(src);\n const layout = layoutTimeline(ast);\n const theme = resolveTimelineTheme(config?.theme ?? \"default\");\n\n const styleBlock = styleForTheme(theme, config?.fontFamily);\n\n const children: string[] = [\n titleEl(ast.title ? `Timeline — ${ast.title}` : \"Timeline\"),\n descEl(\"Schematex timeline diagram\"),\n defs([`<style>${styleBlock}</style>`]),\n ];\n\n if (ast.title) {\n children.push(\n textEl(\n { x: layout.width / 2, y: 26, \"text-anchor\": \"middle\", class: \"st-title\" },\n ast.title,\n ),\n );\n }\n\n children.push(renderEras(layout, theme));\n\n switch (layout.style) {\n case \"gantt\":\n children.push(renderGantt(layout, theme));\n break;\n case \"lollipop\":\n children.push(renderLollipop(layout, theme));\n break;\n case \"swimlane\":\n default:\n children.push(renderSwimlane(layout, theme));\n break;\n }\n\n children.push(renderAxis(layout));\n\n return svgRoot(\n {\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n width: layout.width,\n height: layout.height,\n class: `st-timeline st-timeline-${layout.style}`,\n \"data-diagram-type\": \"timeline\",\n \"data-style\": layout.style,\n role: \"graphics-document\",\n },\n children,\n );\n}\n\n// ─── Styles ───────────────────────────────────────────────\n\nfunction styleForTheme(theme: Theme, fontFamily?: string): string {\n const font = fontFamily ?? \"system-ui, -apple-system, sans-serif\";\n return `\n .st-timeline { ${cssCustomProperties(theme)}\n --st-axis: ${theme.axis};\n --st-axis-label: ${theme.axisLabel};\n --st-era-label: ${theme.eraLabel};\n --st-lane-stripe: ${theme.laneStripe};\n --st-marker-ring: ${theme.markerRing};\n --st-marker-fill: ${theme.markerFill};\n --st-milestone-fill: ${theme.milestoneFill};\n --st-pin-shaft: ${theme.pinShaft};\n --st-card-bg: ${theme.cardBg};\n --st-card-stroke: ${theme.cardStroke};\n --st-card-text: ${theme.cardText};\n --st-legend-bg: ${theme.legendBg};\n --st-legend-stroke: ${theme.legendStroke};\n font-family: ${font}; }\n .st-title { font-size: 16px; font-weight: 600; fill: var(--schematex-text); }\n .st-axis-line { stroke: var(--st-axis); stroke-width: 1.5; fill: none; }\n .st-axis-tick { stroke: var(--st-axis); stroke-width: 1; opacity: 0.55; }\n .st-axis-label { font-size: 11px; fill: var(--st-axis-label); }\n .st-era-rect { opacity: ${theme.eraOpacity}; }\n .st-era-strip { opacity: ${theme.eraPlotOpacity}; }\n .st-era-label { font-size: 11px; font-weight: 500; fill: var(--st-era-label); }\n .st-event-dot { stroke: var(--st-marker-fill); stroke-width: 1.5; }\n .st-event-label { font-size: 12px; fill: var(--schematex-text); }\n .st-range-bar { opacity: 0.88; }\n .st-range-label { font-size: 11px; fill: #fff; font-weight: 500; }\n .st-milestone { stroke: var(--st-marker-fill); stroke-width: 2; }\n .st-milestone-label { font-size: 12px; fill: var(--schematex-text); font-weight: 600; }\n .st-track-label { font-size: 12px; font-weight: 600; fill: var(--schematex-text); }\n .st-lane-stripe { fill: var(--st-lane-stripe); opacity: ${theme.laneStripeOpacity}; }\n .st-callout-line { stroke: var(--st-axis); stroke-width: 0.8; stroke-dasharray: 2 2; opacity: 0.5; fill: none; }\n .st-callout-text { font-size: 10.5px; fill: var(--schematex-text-muted); }\n .st-label-leader { stroke: var(--st-axis); stroke-width: 0.75; opacity: 0.35; fill: none; }\n .st-icon { font-size: 14px; }\n /* Gantt */\n .st-pin-shaft { stroke: var(--st-pin-shaft); stroke-width: 1.25; stroke-dasharray: 3 2; fill: none; }\n .st-pin-label { font-size: 11.5px; fill: var(--schematex-text); font-weight: 500; }\n .st-pin-head { stroke: var(--st-marker-fill); stroke-width: 1.5; }\n .st-lane-label { font-size: 11px; fill: var(--schematex-text-muted); font-weight: 500; }\n .st-legend-box { fill: var(--st-legend-bg); stroke: var(--st-legend-stroke); stroke-width: 1; }\n .st-legend-title { font-size: 11px; font-weight: 600; fill: var(--schematex-text-muted); }\n .st-legend-label { font-size: 11px; fill: var(--schematex-text); }\n /* Lollipop */\n .st-card { fill: var(--st-card-bg); stroke: var(--st-card-stroke); stroke-width: 1; }\n .st-card-title { font-size: 12px; font-weight: 600; fill: var(--st-card-text); }\n .st-card-date { font-size: 10.5px; fill: var(--schematex-text-muted); }\n .st-card-icon { font-size: 16px; }\n .st-stem { stroke: var(--st-axis); stroke-width: 1.25; opacity: 0.55; fill: none; }\n .st-lp-marker-ring { stroke-width: 2.5; }\n .st-lp-marker-core { stroke: none; }\n `;\n}\n\n// ─── Shared sections ──────────────────────────────────────\n\nfunction renderEras(layout: TimelineLayoutResult, theme: Theme): string {\n if (!layout.eras.length) return \"\";\n const topBase = layout.title ? 54 : 40;\n const palette = theme.palette;\n // Find leftmost + rightmost eras per band row so we can extend their plot\n // strips to cover overhang (e.g. lollipop cards extending past plot edges).\n const leftmostOnRow = new Map<number, number>();\n const rightmostOnRow = new Map<number, number>();\n layout.eras.forEach((e, i) => {\n const l = leftmostOnRow.get(e.bandRow);\n if (l === undefined || e.x < layout.eras[l]!.x) leftmostOnRow.set(e.bandRow, i);\n const r = rightmostOnRow.get(e.bandRow);\n if (r === undefined || e.x + e.width > layout.eras[r]!.x + layout.eras[r]!.width) rightmostOnRow.set(e.bandRow, i);\n });\n const plotEnd = layout.plotX + layout.plotW;\n\n const items = layout.eras.map((e, i) => {\n const y = topBase + e.bandRow * (ERA_BAND_HEIGHT + ERA_ROW_GAP);\n const fill = e.era.color ?? palette[i % palette.length]!;\n const labelX = e.x + 6;\n // Plot strip extends to plot edges for the leftmost/rightmost era on its\n // band row — otherwise cards overhanging the first/last event sit on bare\n // background.\n const isLeftmost = leftmostOnRow.get(e.bandRow) === i;\n const isRightmost = rightmostOnRow.get(e.bandRow) === i;\n const stripX = isLeftmost ? Math.min(e.x, layout.plotX) : e.x;\n const stripEnd = isRightmost ? Math.max(e.x + e.width, plotEnd) : e.x + e.width;\n return [\n rect({\n x: e.x,\n y,\n width: e.width,\n height: ERA_BAND_HEIGHT,\n fill,\n class: \"st-era-rect\",\n \"data-era-id\": e.era.id,\n }),\n rect({\n x: stripX,\n y: layout.plotY,\n width: stripEnd - stripX,\n height: layout.plotH,\n fill,\n class: \"st-era-strip\",\n }),\n textEl(\n { x: labelX, y: y + 12, class: \"st-era-label\" },\n truncate(e.era.label, Math.max(4, Math.floor(e.width / 7))),\n ),\n ].join(\"\");\n });\n return group({ class: \"st-eras\" }, items);\n}\n\nfunction renderAxis(layout: TimelineLayoutResult): string {\n const ax = layout.axisY;\n const items: string[] = [\n line({ x1: layout.plotX, y1: ax, x2: layout.plotX + layout.plotW, y2: ax, class: \"st-axis-line\" }),\n ];\n for (const t of layout.ticks) {\n items.push(line({ x1: t.x, y1: ax, x2: t.x, y2: ax + 5, class: \"st-axis-tick\" }));\n items.push(textEl({ x: t.x, y: ax + 18, \"text-anchor\": \"middle\", class: \"st-axis-label\" }, t.label));\n }\n return group({ class: \"st-axis\" }, items);\n}\n\n// ─── Swimlane renderer ────────────────────────────────────\n\nfunction renderSwimlane(layout: TimelineLayoutResult, theme: Theme): string {\n const parts: string[] = [];\n parts.push(renderTrackLabels(layout));\n parts.push(renderLaneStripes(layout));\n parts.push(renderSwimlaneRanges(layout, theme));\n parts.push(renderSwimlanePoints(layout, theme));\n parts.push(renderLabels(layout));\n parts.push(renderNotes(layout));\n return parts.join(\"\");\n}\n\nfunction renderTrackLabels(layout: TimelineLayoutResult): string {\n const items = layout.lanes\n .filter(l => l.label)\n .map(l => textEl(\n { x: layout.plotX - 12, y: l.y + l.height / 2 + 4, \"text-anchor\": \"end\", class: \"st-track-label\" },\n l.label,\n ));\n return group({ class: \"st-track-labels\" }, items);\n}\n\nfunction renderLaneStripes(layout: TimelineLayoutResult): string {\n const items = layout.lanes.map((l, i) => {\n if (i % 2 !== 0) return \"\";\n return rect({\n x: layout.plotX,\n y: l.y,\n width: layout.plotW,\n height: l.height,\n class: \"st-lane-stripe\",\n });\n }).filter(Boolean);\n return group({ class: \"st-lanes\" }, items);\n}\n\nfunction renderSwimlaneRanges(layout: TimelineLayoutResult, theme: Theme): string {\n const items: string[] = [];\n // Map track id → palette index for stable color per lane.\n const trackOrder = layout.lanes.map(l => l.trackId);\n const palette = theme.categoryPalette;\n for (const ev of layout.events) {\n if (ev.event.kind !== \"range\") continue;\n const idx = trackOrder.indexOf(ev.event.trackId!);\n const fill = ev.event.color ?? palette[(idx < 0 ? 0 : idx) % palette.length]!;\n items.push(rect({\n x: ev.x,\n y: ev.y,\n width: ev.w ?? 4,\n height: ev.h,\n rx: 4,\n ry: 4,\n fill,\n class: \"st-range-bar\",\n \"data-event-id\": ev.event.id,\n }));\n const w = ev.w ?? 0;\n if (w >= 60) {\n items.push(textEl(\n { x: ev.labelX, y: ev.labelY, \"text-anchor\": \"middle\", class: \"st-range-label\" },\n truncate(ev.event.label, Math.floor(w / 6)),\n ));\n } else if (w > 0) {\n items.push(textEl(\n { x: ev.x + w + 4, y: ev.labelY, \"text-anchor\": \"start\", class: \"st-event-label\" },\n ev.event.label,\n ));\n }\n }\n return group({ class: \"st-ranges\" }, items);\n}\n\nfunction renderSwimlanePoints(layout: TimelineLayoutResult, theme: Theme): string {\n const items: string[] = [];\n for (const ev of layout.events) {\n if (ev.event.kind === \"range\") continue;\n const isMilestone = ev.event.kind === \"milestone\";\n const color = ev.event.color ?? (isMilestone ? theme.milestoneFill : theme.markerRing);\n const shape = ev.event.shape ?? (isMilestone ? \"star\" : \"circle\");\n items.push(renderMarker(ev, color, shape, isMilestone));\n }\n return group({ class: \"st-points\" }, items);\n}\n\nfunction renderMarker(\n ev: TimelineEventLayout,\n color: string,\n shape: \"circle\" | \"square\" | \"diamond\" | \"star\" | \"flag\",\n isMilestone: boolean,\n): string {\n const x = ev.x;\n const y = ev.y;\n const r = isMilestone ? 8 : 5;\n const klass = isMilestone ? \"st-milestone\" : \"st-event-dot\";\n switch (shape) {\n case \"square\":\n return rect({ x: x - r, y: y - r, width: r * 2, height: r * 2, fill: color, class: klass, \"data-event-id\": ev.event.id });\n case \"diamond\":\n return path({ d: `M ${x},${y - r} L ${x + r},${y} L ${x},${y + r} L ${x - r},${y} Z`, fill: color, class: klass, \"data-event-id\": ev.event.id });\n case \"star\":\n return path({ d: starPath(x, y, r + 2, (r + 2) / 2.5, 5), fill: color, class: klass, \"data-event-id\": ev.event.id });\n case \"flag\":\n return path({ d: `M ${x - r},${y + r} L ${x - r},${y - r - 4} L ${x + r + 4},${y - r - 1} L ${x - r},${y + 2}`, fill: color, class: klass, \"data-event-id\": ev.event.id });\n case \"circle\":\n default:\n return circle({ cx: x, cy: y, r, fill: color, class: klass, \"data-event-id\": ev.event.id });\n }\n}\n\nfunction renderLabels(layout: TimelineLayoutResult): string {\n const items: string[] = [];\n for (const ev of layout.events) {\n if (ev.event.kind === \"range\") continue;\n const cls = ev.event.kind === \"milestone\" ? \"st-milestone-label\" : \"st-event-label\";\n const text = ev.event.icon\n ? `${ev.event.icon} ${ev.event.label}`\n : ev.event.label;\n // Leader line when label was pushed far from marker by cascade.\n const dy = ev.labelY - ev.y;\n if (Math.abs(dy) > 22) {\n const y1 = dy < 0 ? ev.y - 6 : ev.y + 6;\n const y2 = dy < 0 ? ev.labelY + 3 : ev.labelY - 10;\n items.push(line({ x1: ev.x, y1, x2: ev.x, y2, class: \"st-label-leader\" }));\n }\n items.push(textEl(\n { x: ev.labelX, y: ev.labelY, \"text-anchor\": ev.labelAnchor, class: cls },\n text,\n ));\n }\n return group({ class: \"st-labels\" }, items);\n}\n\nfunction renderNotes(layout: TimelineLayoutResult): string {\n const items: string[] = [];\n for (const ev of layout.events) {\n if (!ev.event.note) continue;\n const x = ev.x;\n const ny = (ev.noteY ?? ev.y + 18);\n const nx = (ev.noteX ?? x + 10);\n const wrapped = wrapText(ev.event.note, 46);\n items.push(path({ d: `M ${x} ${ev.y + 6} Q ${x + 4} ${ny - 4} ${nx} ${ny}`, class: \"st-callout-line\" }));\n wrapped.forEach((ln, i) => {\n items.push(textEl(\n { x: nx, y: ny + i * 13, class: \"st-callout-text\" },\n ln,\n ));\n });\n }\n return group({ class: \"st-notes\" }, items);\n}\n\n// ─── Gantt renderer ───────────────────────────────────────\n\nfunction renderGantt(layout: TimelineLayoutResult, theme: Theme): string {\n const parts: string[] = [];\n // Lane stripes + labels\n parts.push(renderGanttLanes(layout));\n // Task bars (range events)\n parts.push(renderGanttBars(layout, theme));\n // Pins (point/milestone events)\n parts.push(renderGanttPins(layout));\n // Legend\n if (layout.legend && layout.legend.length) {\n parts.push(renderLegend(layout));\n }\n return parts.join(\"\");\n}\n\nfunction renderGanttLanes(layout: TimelineLayoutResult): string {\n const items: string[] = [];\n layout.lanes.forEach((l, i) => {\n if (i % 2 === 0) {\n items.push(rect({\n x: layout.plotX,\n y: l.y,\n width: layout.plotW,\n height: l.height,\n class: \"st-lane-stripe\",\n }));\n }\n items.push(textEl({\n x: layout.plotX - 10,\n y: l.y + l.height / 2 + 4,\n \"text-anchor\": \"end\",\n class: \"st-lane-label\",\n }, l.label));\n });\n return group({ class: \"st-gantt-lanes\" }, items);\n}\n\nfunction renderGanttBars(layout: TimelineLayoutResult, theme: Theme): string {\n const items: string[] = [];\n const laneByCat = new Map(layout.lanes.map(l => [l.label, l]));\n const legendByLabel = new Map((layout.legend ?? []).map(l => [l.label, l.color]));\n for (const ev of layout.events) {\n if (ev.event.kind !== \"range\") continue;\n const cat = ev.event.category ?? layout.lanes[0]?.label ?? \"\";\n const color = ev.event.color ?? legendByLabel.get(cat) ?? theme.categoryPalette[0]!;\n const w = ev.w ?? 4;\n items.push(rect({\n x: ev.x,\n y: ev.y,\n width: w,\n height: ev.h,\n rx: 5,\n ry: 5,\n fill: color,\n class: \"st-range-bar\",\n \"data-event-id\": ev.event.id,\n \"data-category\": cat,\n }));\n if (w >= 60) {\n items.push(textEl(\n { x: ev.labelX, y: ev.labelY, \"text-anchor\": \"middle\", class: \"st-range-label\" },\n truncate(ev.event.label, Math.floor(w / 6)),\n ));\n } else if (w > 0) {\n const lane = laneByCat.get(cat);\n const ly = lane ? lane.y + lane.height / 2 + 4 : ev.labelY;\n items.push(textEl(\n { x: ev.x + w + 4, y: ly, \"text-anchor\": \"start\", class: \"st-event-label\" },\n ev.event.label,\n ));\n }\n }\n return group({ class: \"st-gantt-bars\" }, items);\n}\n\nfunction renderGanttPins(layout: TimelineLayoutResult): string {\n const pins = layout.pins ?? [];\n if (!pins.length) return \"\";\n const items: string[] = [];\n for (const p of pins) {\n items.push(renderPin(p));\n }\n return group({ class: \"st-gantt-pins\" }, items);\n}\n\nfunction renderPin(p: TimelinePinLayout): string {\n const isMilestone = p.event.kind === \"milestone\";\n const shaft = path({\n d: `M ${p.x} ${p.labelY + 2} L ${p.x} ${p.axisY - 4}`,\n class: \"st-pin-shaft\",\n });\n const head = isMilestone\n ? path({\n d: starPath(p.x, p.axisY - 6, 7, 3, 5),\n fill: p.color,\n class: \"st-pin-head\",\n \"data-event-id\": p.event.id,\n })\n : circle({\n cx: p.x,\n cy: p.axisY - 6,\n r: 5,\n fill: p.color,\n class: \"st-pin-head\",\n \"data-event-id\": p.event.id,\n });\n const txt = p.event.icon ? `${p.event.icon} ${p.event.label}` : p.event.label;\n const label = textEl(\n { x: p.x, y: p.labelY, \"text-anchor\": \"middle\", class: \"st-pin-label\" },\n txt,\n );\n return shaft + head + label;\n}\n\nfunction renderLegend(layout: TimelineLayoutResult): string {\n const legend = layout.legend ?? [];\n if (!legend.length) return \"\";\n const boxW = 130;\n const padding = 10;\n const rowH = 18;\n const h = padding * 2 + 18 + legend.length * rowH;\n const x = layout.width - boxW - 16;\n const y = layout.plotY;\n const items: string[] = [\n rect({ x, y, width: boxW, height: h, rx: 6, ry: 6, class: \"st-legend-box\" }),\n textEl({ x: x + padding, y: y + padding + 12, class: \"st-legend-title\" }, \"Teams\"),\n ];\n legend.forEach((it, i) => {\n const rowY = y + padding + 18 + i * rowH + 8;\n items.push(rect({ x: x + padding, y: rowY - 7, width: 12, height: 12, rx: 2, ry: 2, fill: it.color }));\n items.push(textEl({ x: x + padding + 20, y: rowY + 3, class: \"st-legend-label\" }, truncate(it.label, 14)));\n });\n return group({ class: \"st-legend\" }, items);\n}\n\n// ─── Lollipop renderer ────────────────────────────────────\n\nfunction renderLollipop(layout: TimelineLayoutResult, theme: Theme): string {\n const parts: string[] = [];\n // Ranges as thin bars on axis\n parts.push(renderLollipopRanges(layout, theme));\n // Cards + stems + markers\n parts.push(renderLollipopCards(layout, theme));\n return parts.join(\"\");\n}\n\nfunction renderLollipopRanges(layout: TimelineLayoutResult, theme: Theme): string {\n const items: string[] = [];\n for (const ev of layout.events) {\n if (ev.event.kind !== \"range\") continue;\n const color = ev.event.color ?? theme.categoryPalette[0]!;\n items.push(rect({\n x: ev.x,\n y: ev.y,\n width: ev.w ?? 4,\n height: ev.h,\n rx: 3,\n ry: 3,\n fill: color,\n class: \"st-range-bar\",\n \"data-event-id\": ev.event.id,\n }));\n }\n return group({ class: \"st-lp-ranges\" }, items);\n}\n\nfunction renderLollipopCards(layout: TimelineLayoutResult, theme: Theme): string {\n const cards = layout.cards ?? [];\n if (!cards.length) return \"\";\n const items: string[] = [];\n for (const c of cards) {\n items.push(renderLollipopCard(c, theme));\n }\n return group({ class: \"st-lp-cards\" }, items);\n}\n\nfunction renderLollipopCard(c: TimelineCardLayout, theme: Theme): string {\n const parts: string[] = [];\n // Stem\n parts.push(path({ d: `M ${c.x} ${c.stemY1} L ${c.x} ${c.stemY2}`, class: \"st-stem\" }));\n // Marker on axis — ring with core\n parts.push(circle({ cx: c.x, cy: c.axisY, r: 7, fill: theme.markerFill, stroke: c.color, class: \"st-lp-marker-ring\" }));\n parts.push(circle({ cx: c.x, cy: c.axisY, r: 3.2, fill: c.color, class: \"st-lp-marker-core\" }));\n // Card\n parts.push(rect({\n x: c.cardX,\n y: c.cardY,\n width: c.cardW,\n height: c.cardH,\n rx: 8,\n ry: 8,\n class: \"st-card\",\n }));\n // Left color stripe\n parts.push(rect({\n x: c.cardX,\n y: c.cardY,\n width: 4,\n height: c.cardH,\n rx: 2,\n ry: 2,\n fill: c.color,\n }));\n const padX = c.cardX + 14;\n const titleText = c.event.icon ? `${c.event.icon} ${c.event.label}` : c.event.label;\n parts.push(textEl(\n { x: padX, y: c.cardY + 22, class: \"st-card-title\" },\n truncate(titleText, 26),\n ));\n parts.push(textEl(\n { x: padX, y: c.cardY + 40, class: \"st-card-date\" },\n c.event.start.raw,\n ));\n return parts.join(\"\");\n}\n\n// ─── Utilities ────────────────────────────────────────────\n\nfunction truncate(s: string, maxChars: number): string {\n if (s.length <= maxChars) return s;\n if (maxChars < 4) return \"\";\n return s.slice(0, maxChars - 1) + \"…\";\n}\n\nfunction wrapText(s: string, max: number): string[] {\n const words = s.split(/\\s+/);\n const out: string[] = [];\n let cur = \"\";\n for (const w of words) {\n if ((cur + \" \" + w).trim().length > max) {\n if (cur) out.push(cur);\n cur = w;\n } else {\n cur = (cur ? cur + \" \" : \"\") + w;\n }\n }\n if (cur) out.push(cur);\n return out.slice(0, 4);\n}\n\nfunction starPath(cx: number, cy: number, rOuter: number, rInner: number, points: number): string {\n const step = Math.PI / points;\n let d = \"\";\n for (let i = 0; i < points * 2; i++) {\n const r = i % 2 === 0 ? rOuter : rInner;\n const a = i * step - Math.PI / 2;\n const x = cx + r * Math.cos(a);\n const y = cy + r * Math.sin(a);\n d += (i === 0 ? \"M\" : \"L\") + x.toFixed(2) + \",\" + y.toFixed(2) + \" \";\n }\n return d + \"Z\";\n}\n\nvoid escapeXml;\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseTimeline } from \"./parser\";\nimport { renderTimeline } from \"./renderer\";\n\nexport const timeline: DiagramPlugin = {\n type: \"timeline\" as DiagramPlugin[\"type\"],\n detect(text) {\n return /^\\s*timeline\\b/i.test(text);\n },\n parse: parseTimeline,\n render(text, config?: RenderConfig) {\n return renderTimeline(text, config);\n },\n};\n\nexport { parseTimeline, TimelineParseError } from \"./parser\";\nexport { layoutTimeline } from \"./layout\";\nexport { renderTimeline } from \"./renderer\";\nexport type * from \"./types\";\n","import type {\n PseudoStateKind,\n StateActivity,\n StateDiagramAST,\n StateDirection,\n StateNode,\n StateNote,\n StateTransition,\n} from \"./types\";\n\nexport class StateParseError extends Error {\n constructor(message: string, public line?: number) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"StateParseError\";\n }\n}\n\ninterface RawLine {\n indent: number;\n text: string;\n line: number;\n}\n\nconst PSEUDO_KEYWORDS: Record<string, PseudoStateKind> = {\n initial: \"initial\",\n final: \"final\",\n choice: \"choice\",\n junction: \"junction\",\n fork: \"fork\",\n join: \"join\",\n history: \"history\",\n dhistory: \"dhistory\",\n terminate: \"terminate\",\n entry_point: \"entry_point\",\n exit_point: \"exit_point\",\n};\n\n// Mermaid-style stereotype keywords: state X <<choice>>\nconst MERMAID_STEREOTYPE: Record<string, PseudoStateKind> = {\n choice: \"choice\",\n fork: \"fork\",\n join: \"join\",\n end: \"final\",\n};\n\nfunction preprocess(src: string): RawLine[] {\n const out: RawLine[] = [];\n const lines = src.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i];\n if (raw === undefined) continue;\n const trimmed = raw.trim();\n if (!trimmed) continue;\n // Comment forms: # // and Mermaid's %%\n if (trimmed.startsWith(\"#\") || trimmed.startsWith(\"//\") || trimmed.startsWith(\"%%\")) continue;\n const indent = raw.length - raw.replace(/^\\s+/, \"\").length;\n out.push({ indent, text: trimmed, line: i + 1 });\n }\n return out;\n}\n\nfunction unquote(s: string): string {\n if (s.length >= 2 && s.startsWith('\"') && s.endsWith('\"')) {\n return s.slice(1, -1);\n }\n return s;\n}\n\nfunction parseProps(s: string): Record<string, string> {\n // [direction: LR, style: uml]\n const out: Record<string, string> = {};\n const inner = s.replace(/^\\[/, \"\").replace(/\\]$/, \"\");\n if (!inner.trim()) return out;\n for (const part of inner.split(\",\")) {\n const idx = part.indexOf(\":\");\n if (idx < 0) continue;\n out[part.slice(0, idx).trim()] = unquote(part.slice(idx + 1).trim());\n }\n return out;\n}\n\nfunction parseTransitionLabel(label: string): {\n trigger?: string;\n guard?: string;\n action?: string;\n} {\n const out: { trigger?: string; guard?: string; action?: string } = {};\n let rest = label.trim();\n if (!rest) return out;\n\n let depth = 0;\n let slashIdx = -1;\n for (let i = 0; i < rest.length; i++) {\n const c = rest[i];\n if (c === \"[\") depth++;\n else if (c === \"]\") depth--;\n else if (c === \"/\" && depth === 0) {\n slashIdx = i;\n break;\n }\n }\n if (slashIdx >= 0) {\n out.action = rest.slice(slashIdx + 1).trim();\n rest = rest.slice(0, slashIdx).trim();\n }\n\n const gMatch = rest.match(/^(?<trig>[^[]*?)\\s*\\[(?<guard>[^\\]]*)\\]\\s*$/);\n if (gMatch?.groups) {\n out.guard = gMatch.groups.guard.trim();\n const trig = gMatch.groups.trig.trim();\n if (trig) out.trigger = trig;\n } else if (rest.length) {\n out.trigger = rest;\n }\n return out;\n}\n\nfunction parseActivityLine(text: string): StateActivity | undefined {\n const match = text.match(/^(entry|exit|do)\\s*\\/\\s*(.*)$/);\n if (match) {\n return { kind: match[1] as \"entry\" | \"exit\" | \"do\", action: match[2].trim() };\n }\n const parsed = parseTransitionLabel(text);\n if (!parsed.trigger && !parsed.guard && !parsed.action) return undefined;\n return {\n kind: \"internal\",\n trigger: parsed.trigger,\n guard: parsed.guard,\n action: parsed.action,\n };\n}\n\ninterface ParseContext {\n states: StateNode[];\n transitions: StateTransition[];\n notes: StateNote[];\n pseudoCounter: number;\n noteCounter: number;\n transCounter: number;\n byId: Map<string, StateNode>;\n initialAlias?: string;\n finalAlias?: string;\n}\n\nfunction newPseudoId(ctx: ParseContext, kind: PseudoStateKind): string {\n ctx.pseudoCounter += 1;\n return `__${kind}_${ctx.pseudoCounter}`;\n}\n\nfunction ensureInitialAlias(ctx: ParseContext, parent?: StateNode): StateNode {\n if (!parent) {\n if (ctx.initialAlias) {\n const existing = ctx.byId.get(ctx.initialAlias);\n if (existing) return existing;\n }\n const node: StateNode = {\n id: newPseudoId(ctx, \"initial\"),\n label: \"\",\n kind: \"pseudo\",\n pseudoKind: \"initial\",\n activities: [],\n children: [],\n };\n ctx.initialAlias = node.id;\n ctx.byId.set(node.id, node);\n ctx.states.push(node);\n return node;\n }\n for (const child of parent.children) {\n if (child.id.startsWith(\"__initial_\") && child.label === \"\") return child;\n }\n const node: StateNode = {\n id: newPseudoId(ctx, \"initial\"),\n label: \"\",\n kind: \"pseudo\",\n pseudoKind: \"initial\",\n activities: [],\n children: [],\n parent: parent.id,\n };\n ctx.byId.set(node.id, node);\n parent.children.push(node);\n return node;\n}\n\nfunction ensureFinalAlias(ctx: ParseContext, parent?: StateNode): StateNode {\n if (!parent) {\n if (ctx.finalAlias) {\n const existing = ctx.byId.get(ctx.finalAlias);\n if (existing) return existing;\n }\n const node: StateNode = {\n id: newPseudoId(ctx, \"final\"),\n label: \"\",\n kind: \"pseudo\",\n pseudoKind: \"final\",\n activities: [],\n children: [],\n };\n ctx.finalAlias = node.id;\n ctx.byId.set(node.id, node);\n ctx.states.push(node);\n return node;\n }\n for (const child of parent.children) {\n if (child.id.startsWith(\"__final_\") && child.label === \"\") return child;\n }\n const node: StateNode = {\n id: newPseudoId(ctx, \"final\"),\n label: \"\",\n kind: \"pseudo\",\n pseudoKind: \"final\",\n activities: [],\n children: [],\n parent: parent.id,\n };\n ctx.byId.set(node.id, node);\n parent.children.push(node);\n return node;\n}\n\nfunction ensureSimpleState(\n ctx: ParseContext,\n id: string,\n parent?: StateNode\n): StateNode {\n const existing = ctx.byId.get(id);\n if (existing) return existing;\n const node: StateNode = {\n id,\n label: id,\n kind: \"simple\",\n activities: [],\n children: [],\n parent: parent?.id,\n };\n ctx.byId.set(id, node);\n if (parent) parent.children.push(node);\n else ctx.states.push(node);\n return node;\n}\n\nfunction isIdent(tok: string): boolean {\n return /^[A-Za-z_][A-Za-z0-9_]*$/.test(tok);\n}\n\n/**\n * Parse a state-diagram DSL.\n *\n * Accepts both the native Schematex syntax and the full Mermaid `stateDiagram-v2`\n * vocabulary as a strict superset:\n * - `[*]` for initial / final (direction-resolved)\n * - `state \"Long name\" as ID`\n * - `Foo: description` to label an existing/new state\n * - `state X <<choice>>` / `<<fork>>` / `<<join>>` / `<<end>>` stereotypes\n * - `note right of X` ... `end note` / `note right of X : single-line text`\n * - `--` (Mermaid) and `---` (Schematex) separators inside composites\n * - `%%`, `#`, `//` comments\n *\n * Composite blocks use `composite ID { ... }` (Schematex) or `state ID { ... }`\n * (Mermaid). Default direction is TB to match Mermaid's default — override\n * with `direction LR` (top-level statement) or `[direction: LR]` (header attrs).\n */\nexport function parseStateDiagram(src: string): StateDiagramAST {\n const lines = preprocess(src);\n if (lines.length === 0) {\n throw new StateParseError(\"Empty document\");\n }\n\n // Header: must start with `state` or `stateDiagram` (Mermaid-compat) or `stateDiagram-v2`.\n const header = lines[0]!;\n const headerTok = header.text.match(/^(stateDiagram-v2|stateDiagram|state)\\b/i);\n if (!headerTok) {\n throw new StateParseError(\n `Expected 'state' or 'stateDiagram' header, got '${header.text}'`,\n header.line\n );\n }\n\n let title: string | undefined;\n let direction: StateDirection = \"TB\";\n\n const headerRest = header.text.slice(headerTok[0].length).trim();\n // Parse optional `direction LR` on the header line itself (Mermaid permits this on a separate line too)\n const propsMatch = headerRest.match(/\\[[^\\]]*\\]\\s*$/);\n let beforeProps = headerRest;\n if (propsMatch) {\n const props = parseProps(propsMatch[0]);\n if (props.direction === \"TB\" || props.direction === \"LR\") direction = props.direction;\n beforeProps = headerRest.slice(0, propsMatch.index).trim();\n }\n if (beforeProps.startsWith('\"')) title = unquote(beforeProps);\n else if (beforeProps.length > 0) title = beforeProps;\n\n const ctx: ParseContext = {\n states: [],\n transitions: [],\n notes: [],\n pseudoCounter: 0,\n noteCounter: 0,\n transCounter: 0,\n byId: new Map(),\n };\n\n // Composite-stack: each entry is the current parent. Empty = root.\n const compositeStack: Array<{\n parent?: StateNode;\n regionMode: boolean;\n }> = [{ parent: undefined, regionMode: false }];\n\n let i = 1;\n while (i < lines.length) {\n const ln = lines[i]!;\n const text = ln.text;\n\n const ctxTop = compositeStack[compositeStack.length - 1]!;\n const parent = ctxTop.parent;\n\n // Closing `}`\n if (text === \"}\") {\n if (compositeStack.length <= 1) {\n throw new StateParseError(\"Unexpected '}'\", ln.line);\n }\n compositeStack.pop();\n i++;\n continue;\n }\n\n // Region separator `---` (Schematex) or `--` (Mermaid)\n if (text === \"---\" || text === \"--\") {\n if (!parent) {\n throw new StateParseError(\n \"Region separator only allowed inside a composite\",\n ln.line\n );\n }\n ctxTop.regionMode = true;\n if (!parent.regions) parent.regions = [];\n const lastIdx = parent.regions.reduce((s, r) => s + r.length, 0);\n const slice = parent.children.slice(lastIdx);\n parent.regions.push(slice);\n i++;\n continue;\n }\n\n // Top-level `direction LR` directive (Mermaid)\n const dirMatch = text.match(/^direction\\s+(TB|BT|LR|RL)\\s*$/);\n if (dirMatch) {\n const d = dirMatch[1] as \"TB\" | \"BT\" | \"LR\" | \"RL\";\n direction = d === \"BT\" ? \"TB\" : d === \"RL\" ? \"LR\" : (d as StateDirection);\n i++;\n continue;\n }\n\n // ── Composite definition: composite IDENT { OR state IDENT { (Mermaid) ──\n const compMatch = text.match(/^(?:composite|state)\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*\\{?\\s*$/);\n const isCompositeWithBrace = compMatch && text.endsWith(\"{\");\n if (isCompositeWithBrace) {\n const id = compMatch![1];\n const node = ensureSimpleState(ctx, id, parent);\n node.kind = \"composite\";\n compositeStack.push({ parent: node, regionMode: false });\n i++;\n continue;\n }\n\n // ── Mermaid alias: `state \"Long name\" as ID` ──\n const aliasMatch = text.match(/^state\\s+\"([^\"]*)\"\\s+as\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/);\n if (aliasMatch) {\n const node = ensureSimpleState(ctx, aliasMatch[2], parent);\n node.label = aliasMatch[1];\n i++;\n continue;\n }\n\n // ── Mermaid stereotype: `state ID <<choice>>` / `<<fork>>` / `<<join>>` / `<<end>>` ──\n const stereoMatch = text.match(/^state\\s+([A-Za-z_][A-Za-z0-9_]*)\\s+<<\\s*(choice|fork|join|end)\\s*>>\\s*$/);\n if (stereoMatch) {\n const id = stereoMatch[1];\n const kind = MERMAID_STEREOTYPE[stereoMatch[2]];\n const node: StateNode = {\n id,\n label: \"\",\n kind: \"pseudo\",\n pseudoKind: kind,\n activities: [],\n children: [],\n parent: parent?.id,\n };\n ctx.byId.set(id, node);\n if (parent) parent.children.push(node);\n else ctx.states.push(node);\n i++;\n continue;\n }\n\n // ── `state ID : description` (Mermaid declares + labels) ──\n const stateLabelMatch = text.match(/^state\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*(.+)$/);\n if (stateLabelMatch) {\n const node = ensureSimpleState(ctx, stateLabelMatch[1], parent);\n node.label = unquote(stateLabelMatch[2].trim());\n i++;\n continue;\n }\n\n // ── Schematex pseudo-state declaration: initial X / fork F / etc. ──\n const pseudoMatch = text.match(\n /^(initial|final|choice|junction|fork|join|history|dhistory|terminate|entry_point|exit_point)\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/\n );\n if (pseudoMatch) {\n const kindKw = pseudoMatch[1];\n const id = pseudoMatch[2];\n const pkind = PSEUDO_KEYWORDS[kindKw];\n const node: StateNode = {\n id,\n label: \"\",\n kind: \"pseudo\",\n pseudoKind: pkind,\n activities: [],\n children: [],\n parent: parent?.id,\n };\n ctx.byId.set(id, node);\n if (parent) parent.children.push(node);\n else ctx.states.push(node);\n i++;\n continue;\n }\n\n // ── Activities inside composite ──\n if (parent) {\n const activity = parseActivityLine(text);\n if (activity && (activity.kind === \"entry\" || activity.kind === \"exit\" || activity.kind === \"do\")) {\n parent.activities.push(activity);\n i++;\n continue;\n }\n }\n\n // ── Notes ──\n // Single-line: `note right_of X : text` / `note right of X : text`\n const noteSimple = text.match(\n /^note\\s+(left[_ ]of|right[_ ]of)\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*(.*)$/\n );\n if (noteSimple) {\n const side = noteSimple[1].startsWith(\"left\") ? \"left\" : \"right\";\n const target = noteSimple[2];\n ctx.noteCounter += 1;\n ctx.notes.push({\n id: `__note_${ctx.noteCounter}`,\n target,\n side,\n text: noteSimple[3].trim(),\n });\n i++;\n continue;\n }\n // Block forms:\n // Schematex: note X { ... } or note left_of X { ... }\n // Mermaid: note right of X \\n ... \\n end note\n const noteBlockMermaid = text.match(\n /^note\\s+(left[_ ]of|right[_ ]of)\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/\n );\n if (noteBlockMermaid) {\n const side = noteBlockMermaid[1].startsWith(\"left\") ? \"left\" : \"right\";\n const target = noteBlockMermaid[2];\n const buf: string[] = [];\n i++;\n while (i < lines.length) {\n const t = lines[i]!.text;\n if (t === \"end note\" || t === \"}\") break;\n buf.push(t);\n i++;\n }\n if (i >= lines.length) {\n throw new StateParseError(\"Unterminated note block\", ln.line);\n }\n i++; // consume end note / }\n ctx.noteCounter += 1;\n ctx.notes.push({\n id: `__note_${ctx.noteCounter}`,\n target,\n side,\n text: buf.join(\"\\n\"),\n });\n continue;\n }\n const noteBlockSchematex = text.match(\n /^note\\s+(left[_ ]of\\s+|right[_ ]of\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*\\{\\s*$/\n );\n if (noteBlockSchematex) {\n const side = noteBlockSchematex[1]?.startsWith(\"left\") ? \"left\" : \"right\";\n const target = noteBlockSchematex[2];\n const buf: string[] = [];\n i++;\n while (i < lines.length && lines[i]!.text !== \"}\") {\n buf.push(lines[i]!.text);\n i++;\n }\n if (i >= lines.length) {\n throw new StateParseError(\"Unterminated note block\", ln.line);\n }\n i++;\n ctx.noteCounter += 1;\n ctx.notes.push({\n id: `__note_${ctx.noteCounter}`,\n target,\n side,\n text: buf.join(\"\\n\"),\n });\n continue;\n }\n\n // ── Transition: A -> B [: label] OR Mermaid `A --> B [: label]` ──\n const transMatch = text.match(\n /^(\\[\\*\\]|[A-Za-z_][A-Za-z0-9_]*)\\s*-+>\\s*(\\[\\*\\]|[A-Za-z_][A-Za-z0-9_]*)\\s*(?::\\s*(.*))?$/\n );\n if (transMatch) {\n const fromTok = transMatch[1];\n const toTok = transMatch[2];\n const labelRaw = transMatch[3];\n\n const resolveTok = (\n tok: string,\n position: \"from\" | \"to\"\n ): string => {\n if (tok === \"[*]\") {\n if (position === \"from\") return ensureInitialAlias(ctx, parent).id;\n return ensureFinalAlias(ctx, parent).id;\n }\n return ensureSimpleState(ctx, tok, parent).id;\n };\n\n const fromId = resolveTok(fromTok, \"from\");\n const toId = resolveTok(toTok, \"to\");\n\n ctx.transCounter += 1;\n const tid = `t${ctx.transCounter}`;\n const parsedLabel = labelRaw ? parseTransitionLabel(labelRaw) : {};\n ctx.transitions.push({\n id: tid,\n from: fromId,\n to: toId,\n trigger: parsedLabel.trigger,\n guard: parsedLabel.guard,\n action: parsedLabel.action,\n });\n i++;\n continue;\n }\n\n // ── Mermaid `Foo: description` to label an existing/new state ──\n const labelOnlyMatch = text.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*(.+)$/);\n if (labelOnlyMatch && isIdent(labelOnlyMatch[1])) {\n const node = ensureSimpleState(ctx, labelOnlyMatch[1], parent);\n node.label = unquote(labelOnlyMatch[2].trim());\n i++;\n continue;\n }\n\n // ── Bare state declaration: `IDENT` ──\n const bareIdent = text.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*$/);\n if (bareIdent) {\n ensureSimpleState(ctx, bareIdent[1], parent);\n i++;\n continue;\n }\n\n throw new StateParseError(`Unparseable line: ${text}`, ln.line);\n }\n\n if (compositeStack.length > 1) {\n throw new StateParseError(\"Unclosed composite block (expected '}')\");\n }\n\n function finalizeRegions(node: StateNode) {\n if (node.regions) {\n const consumed = node.regions.reduce((s, r) => s + r.length, 0);\n if (node.children.length > consumed) {\n node.regions.push(node.children.slice(consumed));\n }\n }\n for (const child of node.children) finalizeRegions(child);\n }\n for (const s of ctx.states) finalizeRegions(s);\n\n return {\n type: \"state\",\n title,\n direction,\n states: ctx.states,\n transitions: ctx.transitions,\n notes: ctx.notes,\n };\n}\n","/**\n * State diagram layout — converts the StateDiagramAST into a synthetic\n * FlowchartAST and runs the existing Sugiyama-style flowchart layout\n * (cycle removal → layering → crossing-min → BK x-coords → Manhattan\n * routing). The state-specific renderer then draws state symbols at\n * the layout-computed positions.\n *\n * This gives us — for free — the same layout quality as the flowchart\n * diagram: cycle handling for state machines (idle ⇄ running),\n * orthogonal edge routing that detours around node bboxes, and\n * subgraph-aware composite-state rendering.\n */\n\nimport { layoutFlowchart } from \"../flowchart/layout\";\nimport type {\n FlowchartAST,\n FlowchartDirection,\n FlowchartEdge,\n FlowchartNode,\n FlowchartShape,\n FlowchartSubgraph,\n} from \"../../core/types\";\nimport type {\n StateDiagramAST,\n StateLayoutCluster,\n StateLayoutEdge,\n StateLayoutNode,\n StateLayoutNote,\n StateLayoutResult,\n StateNode,\n StateTransition,\n} from \"./types\";\n\n// ── Pseudo-state symbol sizes (rendered geometry; layout reserves bbox) ──\nconst PSEUDO_BBOX = {\n initial: { w: 22, h: 22 },\n final: { w: 28, h: 28 },\n choice: { w: 32, h: 32 },\n junction: { w: 16, h: 16 },\n fork: { w: 100, h: 8 }, // horizontal bar — rotated for LR direction below\n join: { w: 100, h: 8 },\n history: { w: 26, h: 26 },\n dhistory: { w: 30, h: 30 },\n terminate: { w: 22, h: 22 },\n entry_point: { w: 18, h: 18 },\n exit_point: { w: 18, h: 18 },\n} as const;\n\nconst NOTE_W = 180;\nconst NOTE_LINE_H = 14;\n\n// ── State → Flowchart conversion ────────────────────────────\n\ninterface ConversionResult {\n ast: FlowchartAST;\n /** state-id → its size override (so we can later restore pseudo bboxes if needed) */\n pseudoSizes: Map<string, { w: number; h: number }>;\n}\n\nfunction shapeForState(node: StateNode): FlowchartShape {\n if (node.kind === \"simple\") return \"round\";\n if (node.kind === \"composite\") return \"round\"; // becomes a subgraph; not actually drawn as node\n // pseudo\n switch (node.pseudoKind) {\n case \"initial\":\n case \"final\":\n case \"junction\":\n case \"history\":\n case \"dhistory\":\n case \"terminate\":\n case \"entry_point\":\n case \"exit_point\":\n return \"circle\";\n case \"choice\":\n return \"diamond\";\n case \"fork\":\n case \"join\":\n return \"rect\";\n default:\n return \"round\";\n }\n}\n\nfunction buildLabel(t: StateTransition): string | undefined {\n const parts: string[] = [];\n if (t.trigger) parts.push(t.trigger);\n if (t.guard) parts.push(`[${t.guard}]`);\n let s = parts.join(\" \");\n if (t.action) s = s ? `${s} / ${t.action}` : `/ ${t.action}`;\n return s.trim() || undefined;\n}\n\nfunction convertToFlowchart(ast: StateDiagramAST): ConversionResult {\n const fcNodes: FlowchartNode[] = [];\n const fcSubgraphs: FlowchartSubgraph[] = [];\n const pseudoSizes = new Map<string, { w: number; h: number }>();\n // composite-id → preferred entry/exit node id (for edges that target a composite)\n const compositeEntryFor = new Map<string, string>();\n const compositeExitFor = new Map<string, string>();\n\n const visit = (s: StateNode, parentId?: string): void => {\n if (s.kind === \"composite\") {\n // Composite → subgraph. Pick a representative entry/exit child:\n // entry = a child `initial` pseudo-state, else first child\n // exit = a child `final` pseudo-state, else last child\n const childIds: string[] = [];\n const childSgIds: string[] = [];\n for (const child of s.children) {\n if (child.kind === \"composite\") childSgIds.push(child.id);\n else childIds.push(child.id);\n }\n let entryChild: string | undefined;\n let exitChild: string | undefined;\n for (const child of s.children) {\n if (child.kind === \"pseudo\" && child.pseudoKind === \"initial\" && !entryChild) {\n entryChild = child.id;\n }\n if (child.kind === \"pseudo\" && child.pseudoKind === \"final\") {\n exitChild = child.id;\n }\n }\n if (!entryChild) entryChild = s.children[0]?.id;\n if (!exitChild) exitChild = s.children[s.children.length - 1]?.id;\n if (entryChild) compositeEntryFor.set(s.id, entryChild);\n if (exitChild) compositeExitFor.set(s.id, exitChild);\n\n fcSubgraphs.push({\n id: s.id,\n label: s.label || s.id,\n direction: ast.direction,\n children: childIds,\n subgraphs: childSgIds,\n });\n for (const child of s.children) visit(child, s.id);\n return;\n }\n // Simple or pseudo\n const node: FlowchartNode = {\n id: s.id,\n label: labelForFlowchart(s),\n shape: shapeForState(s),\n parent: parentId,\n };\n fcNodes.push(node);\n if (s.kind === \"pseudo\" && s.pseudoKind) {\n pseudoSizes.set(s.id, { ...PSEUDO_BBOX[s.pseudoKind] });\n }\n };\n\n for (const s of ast.states) visit(s, undefined);\n\n // Redirect transitions whose endpoint is a composite to the composite's\n // representative entry/exit child. Without this, flowchart's\n // auto-implicit-node creation would render a phantom box for the composite\n // (since the composite became a subgraph, not a node).\n const fcEdges: FlowchartEdge[] = ast.transitions.map((t) => {\n let from = t.from;\n let to = t.to;\n const fromExit = compositeExitFor.get(t.from);\n if (fromExit) from = fromExit;\n const toEntry = compositeEntryFor.get(t.to);\n if (toEntry) to = toEntry;\n return {\n id: t.id,\n from,\n to,\n kind: \"solid\",\n label: buildLabel(t),\n };\n });\n\n const fc: FlowchartAST = {\n type: \"flowchart\",\n title: ast.title,\n direction: ast.direction === \"LR\" ? \"LR\" : (\"TB\" as FlowchartDirection),\n nodes: fcNodes,\n edges: fcEdges,\n subgraphs: fcSubgraphs,\n classDefs: [],\n linkStyles: new Map(),\n };\n return { ast: fc, pseudoSizes };\n}\n\n/**\n * Flowchart auto-derives node bbox from label. For pseudo-states we want a\n * fixed small symbol. Trick: pass a single-character placeholder label so\n * minNodeWidth (72) still applies to keep the layout's spacing reasonable;\n * the renderer ignores the bbox and draws the appropriate symbol centered.\n *\n * For simple states with no activities we use the actual label so the\n * rounded-rect width hugs the text.\n */\nfunction labelForFlowchart(s: StateNode): string {\n if (s.kind === \"pseudo\") return \"\"; // becomes 0-width; flowchart clamps to minNodeWidth\n // simple state — use label, augmented with activity hint so the box is tall enough\n if (s.activities.length === 0) return s.label || s.id;\n // Reserve vertical space by appending newline-equivalent (flowchart layout\n // doesn't currently wrap, so just use the longest activity for sizing).\n const activityWidth = s.activities\n .map((a) => activityText(a).length)\n .reduce((m, n) => Math.max(m, n), 0);\n const label = s.label || s.id;\n return label.length >= activityWidth ? label : \"x\".repeat(activityWidth);\n}\n\nfunction activityText(a: { kind: string; trigger?: string; guard?: string; action?: string }): string {\n if (a.kind === \"entry\" || a.kind === \"exit\" || a.kind === \"do\") {\n return `${a.kind} / ${a.action ?? \"\"}`;\n }\n const parts: string[] = [];\n if (a.trigger) parts.push(a.trigger);\n if (a.guard) parts.push(`[${a.guard}]`);\n let s = parts.join(\" \");\n if (a.action) s = s ? `${s} / ${a.action}` : `/ ${a.action}`;\n return s;\n}\n\n// ── Note placement (post-layout) ────────────────────────────\n\nfunction wrapNoteText(text: string, charsPerLine = 28): string[] {\n const out: string[] = [];\n for (const para of text.split(/\\n/)) {\n const words = para.split(/\\s+/);\n let cur = \"\";\n for (const w of words) {\n if (!cur) cur = w;\n else if (cur.length + w.length + 1 <= charsPerLine) cur += ` ${w}`;\n else {\n out.push(cur);\n cur = w;\n }\n }\n if (cur) out.push(cur);\n if (para === \"\") out.push(\"\");\n }\n return out.length ? out : [\"\"];\n}\n\n// ── Self-loop arc generation ────────────────────────────────\n\nfunction selfLoopPath(\n cx: number,\n cy: number,\n w: number,\n h: number\n): { path: string; labelX: number; labelY: number } {\n // Loop on the right side of the node — from (right-edge, +0.25h) curving up\n // and back to (top-edge, +0.25w). Renderer handles the arrow marker.\n const startX = cx + w / 2;\n const startY = cy - h * 0.15;\n const endX = cx + w * 0.15;\n const endY = cy - h / 2;\n const c1x = startX + 28;\n const c1y = startY - 12;\n const c2x = endX + 28;\n const c2y = endY - 28;\n const path = `M ${startX} ${startY} C ${c1x} ${c1y}, ${c2x} ${c2y}, ${endX} ${endY}`;\n return { path, labelX: startX + 28, labelY: startY - 18 };\n}\n\n// ── Public entry point ──────────────────────────────────────\n\nexport function layoutStateDiagram(ast: StateDiagramAST): StateLayoutResult {\n const { ast: fcAst, pseudoSizes } = convertToFlowchart(ast);\n\n // Self-loops would confuse Sugiyama's layering (re-visiting a node creates\n // back-edges that get reversed). Strip them before running flowchart layout\n // and re-add after as decorations on top of the placed node.\n const selfLoops: StateTransition[] = [];\n fcAst.edges = fcAst.edges.filter((e) => {\n if (e.from === e.to) {\n const t = ast.transitions.find((tr) => tr.id === e.id);\n if (t) selfLoops.push(t);\n return false;\n }\n return true;\n });\n\n const fcResult = layoutFlowchart(fcAst);\n\n // Build state-id → AST node map for quick lookup\n const stateById = new Map<string, StateNode>();\n const collectStates = (s: StateNode): void => {\n stateById.set(s.id, s);\n for (const c of s.children) collectStates(c);\n };\n for (const s of ast.states) collectStates(s);\n\n // Convert flowchart layout nodes → state layout nodes.\n // Pseudo-states get their bbox shrunk to PSEUDO_BBOX values, centered on the\n // flowchart placement (so spacing stays generous but the symbol is small).\n const stateNodes: StateLayoutNode[] = [];\n for (const fcNode of fcResult.nodes) {\n if (fcNode.isDummy) continue;\n const s = stateById.get(fcNode.node.id);\n if (!s) continue;\n if (s.kind === \"composite\") continue; // composite handled as cluster\n\n const cx = fcNode.x + fcNode.width / 2;\n const cy = fcNode.y + fcNode.height / 2;\n\n let w = fcNode.width;\n let h = fcNode.height;\n if (s.kind === \"pseudo\" && s.pseudoKind) {\n const ps = pseudoSizes.get(s.id);\n if (ps) {\n // For fork/join, orient bar perpendicular to flow direction.\n if ((s.pseudoKind === \"fork\" || s.pseudoKind === \"join\") && ast.direction === \"LR\") {\n w = 8;\n h = 100;\n } else {\n w = ps.w;\n h = ps.h;\n }\n }\n }\n\n stateNodes.push({\n id: s.id,\n x: cx - w / 2,\n y: cy - h / 2,\n width: w,\n height: h,\n cx,\n cy,\n layer: fcNode.layer,\n node: s,\n parent: s.parent,\n });\n }\n\n // Composite clusters\n const clusters: StateLayoutCluster[] = fcResult.clusters.map((c) => {\n const s = stateById.get(c.subgraph.id);\n if (!s) {\n return {\n id: c.subgraph.id,\n state: { id: c.subgraph.id, label: c.subgraph.label, kind: \"composite\", activities: [], children: [] },\n x: c.x,\n y: c.y,\n width: c.width,\n height: c.height,\n };\n }\n return {\n id: c.subgraph.id,\n state: s,\n x: c.x,\n y: c.y,\n width: c.width,\n height: c.height,\n };\n });\n\n // Edges from the flowchart layout (already routed orthogonally + label anchored)\n const stateById2 = new Map(stateNodes.map((n) => [n.id, n] as const));\n const stateEdges: StateLayoutEdge[] = [];\n for (const fcEdge of fcResult.edges) {\n const t = ast.transitions.find((tr) => tr.id === fcEdge.edge.id);\n if (!t) continue;\n // The flowchart layout routed the edge to the bbox edge of each endpoint.\n // For pseudo-state nodes the bbox is much bigger than the visible symbol\n // (e.g. an initial dot is r=8 inside an 80×80 bbox), leaving a visible\n // gap between the arrow and the symbol. Extend the path endpoints inward\n // so they land on the actual symbol's perimeter.\n let path = fcEdge.path;\n const sourceNode = stateById2.get(fcEdge.edge.from);\n const targetNode = stateById2.get(fcEdge.edge.to);\n if (sourceNode && sourceNode.node.kind === \"pseudo\") {\n path = trimPathStart(path, sourceNode.cx, sourceNode.cy, symbolRadius(sourceNode));\n }\n if (targetNode && targetNode.node.kind === \"pseudo\") {\n path = trimPathEnd(path, targetNode.cx, targetNode.cy, symbolRadius(targetNode));\n }\n stateEdges.push({\n id: t.id,\n from: t.from,\n to: t.to,\n path,\n label: buildLabel(t),\n labelX: fcEdge.labelAnchor?.x ?? 0,\n labelY: fcEdge.labelAnchor?.y ?? 0,\n labelAnchor: fcEdge.labelAnchor?.textAnchor ?? \"middle\",\n });\n }\n\n // Re-add self-loops as arcs on top of their host node.\n for (const sl of selfLoops) {\n const host = stateById2.get(sl.from);\n if (!host) continue;\n const { path, labelX, labelY } = selfLoopPath(host.cx, host.cy, host.width, host.height);\n stateEdges.push({\n id: sl.id,\n from: sl.from,\n to: sl.to,\n path,\n label: buildLabel(sl),\n labelX,\n labelY,\n labelAnchor: \"start\",\n selfLoop: true,\n });\n }\n\n // Notes\n const notes: StateLayoutNote[] = [];\n for (const note of ast.notes) {\n const target = stateById2.get(note.target);\n if (!target) continue;\n const lines = wrapNoteText(note.text);\n const w = NOTE_W;\n const h = lines.length * NOTE_LINE_H + 14;\n let x: number;\n let y: number;\n let leaderX1: number;\n let leaderX2: number;\n if (note.side === \"left\") {\n x = target.x - w - 24;\n y = target.cy - h / 2;\n leaderX1 = target.x;\n leaderX2 = x + w;\n } else {\n x = target.x + target.width + 24;\n y = target.cy - h / 2;\n leaderX1 = target.x + target.width;\n leaderX2 = x;\n }\n notes.push({\n note,\n x,\n y,\n width: w,\n height: h,\n lines,\n leader: { x1: leaderX1, y1: target.cy, x2: leaderX2, y2: y + h / 2 },\n });\n }\n\n // Compute final bounds — flowchart layout already includes padding; expand\n // for notes and self-loop arcs. If left-side notes push content off the\n // left edge (negative x), shift everything right.\n let maxX = fcResult.width;\n let maxY = fcResult.height;\n let minX = 0;\n for (const n of notes) {\n maxX = Math.max(maxX, n.x + n.width + 8);\n maxY = Math.max(maxY, n.y + n.height + 8);\n minX = Math.min(minX, n.x - 8);\n }\n if (minX < 0) {\n const dx = -minX;\n for (const n of stateNodes) {\n n.x += dx;\n n.cx += dx;\n }\n for (const c of clusters) {\n c.x += dx;\n }\n for (const e of stateEdges) {\n e.path = shiftPathX(e.path, dx);\n e.labelX += dx;\n }\n for (const n of notes) {\n n.x += dx;\n n.leader.x1 += dx;\n n.leader.x2 += dx;\n }\n maxX += dx;\n }\n for (const e of stateEdges) {\n if (!e.selfLoop) continue;\n maxX = Math.max(maxX, e.labelX + 60);\n maxY = Math.max(maxY, e.labelY + 60);\n }\n\n // Title bar reserves vertical space.\n const titleOffset = ast.title ? 28 : 0;\n if (titleOffset) {\n for (const n of stateNodes) {\n n.y += titleOffset;\n n.cy += titleOffset;\n }\n for (const c of clusters) {\n c.y += titleOffset;\n }\n for (const e of stateEdges) {\n e.path = shiftPathY(e.path, titleOffset);\n e.labelY += titleOffset;\n }\n for (const n of notes) {\n n.y += titleOffset;\n n.leader.y1 += titleOffset;\n n.leader.y2 += titleOffset;\n }\n maxY += titleOffset;\n }\n\n return {\n width: maxX,\n height: maxY,\n nodes: stateNodes,\n edges: stateEdges,\n clusters,\n notes,\n title: ast.title,\n direction: ast.direction,\n };\n}\n\n/**\n * Visible-symbol radius for a pseudo-state. Used to extend Manhattan path\n * endpoints from the layout's bbox edge inward to land on the actual\n * symbol perimeter (the bbox is much larger than the rendered symbol).\n *\n * The values mirror the geometry the renderer draws (renderer.ts).\n */\nfunction symbolRadius(node: StateLayoutNode): number {\n const k = node.node.pseudoKind;\n switch (k) {\n case \"initial\": return 8;\n case \"final\": return 11;\n case \"choice\": return 14;\n case \"junction\": return 6;\n case \"history\": return 12;\n case \"dhistory\": return 13;\n case \"terminate\": return 8;\n case \"entry_point\":\n case \"exit_point\": return 7;\n case \"fork\":\n case \"join\":\n // bar — handled separately (long axis is `width` for TB, `height` for LR)\n return Math.min(node.width, node.height) / 2;\n default: return Math.min(node.width, node.height) / 2;\n }\n}\n\ninterface PathPoint { x: number; y: number; }\n\nfunction parsePathPoints(d: string): PathPoint[] | null {\n // Only Manhattan paths with M / L commands are produced by the flowchart\n // routing; a single C-spline (self-loop) is handled separately.\n if (/[CSQTA]/.test(d)) return null;\n const tokens = d.match(/[ML]\\s+(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/g) ?? [];\n const out: PathPoint[] = [];\n for (const tok of tokens) {\n const m = tok.match(/[ML]\\s+(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/);\n if (!m) continue;\n out.push({ x: parseFloat(m[1]), y: parseFloat(m[2]) });\n }\n return out;\n}\n\nfunction pointsToPath(pts: PathPoint[]): string {\n if (pts.length === 0) return \"\";\n const head = `M ${pts[0]!.x} ${pts[0]!.y}`;\n const rest = pts.slice(1).map((p) => `L ${p.x} ${p.y}`).join(\" \");\n return rest ? `${head} ${rest}` : head;\n}\n\n/**\n * Replace the FIRST point of the path with one that sits on the symbol's\n * perimeter (radius `r` from (cx,cy)). For a Manhattan path the first\n * segment is axis-aligned, so we move the start point along that axis.\n */\nfunction trimPathStart(d: string, cx: number, cy: number, r: number): string {\n const pts = parsePathPoints(d);\n if (!pts || pts.length < 2) return d;\n const p0 = pts[0]!;\n const p1 = pts[1]!;\n const newP0 = projectOnPerimeter(p0, p1, cx, cy, r);\n pts[0] = newP0;\n return pointsToPath(pts);\n}\n\nfunction trimPathEnd(d: string, cx: number, cy: number, r: number): string {\n const pts = parsePathPoints(d);\n if (!pts || pts.length < 2) return d;\n const last = pts[pts.length - 1]!;\n const prev = pts[pts.length - 2]!;\n const newLast = projectOnPerimeter(last, prev, cx, cy, r);\n pts[pts.length - 1] = newLast;\n return pointsToPath(pts);\n}\n\n/**\n * Given an axis-aligned segment (p_endpoint, p_neighbor) where p_endpoint sits\n * on the bbox edge of a node centered at (cx,cy), return a new endpoint that\n * sits at distance r from (cx,cy) along the same axis.\n */\nfunction projectOnPerimeter(\n endpoint: PathPoint,\n neighbor: PathPoint,\n cx: number,\n cy: number,\n r: number\n): PathPoint {\n const dx = endpoint.x - neighbor.x;\n const dy = endpoint.y - neighbor.y;\n if (Math.abs(dx) > Math.abs(dy)) {\n // horizontal segment — adjust x\n const sign = dx >= 0 ? 1 : -1;\n return { x: cx - sign * r, y: cy };\n }\n // vertical segment — adjust y\n const sign = dy >= 0 ? 1 : -1;\n return { x: cx, y: cy - sign * r };\n}\n\nfunction shiftPathX(d: string, dx: number): string {\n return d.replace(/([MLCQ])\\s*((?:-?\\d+(?:\\.\\d+)?\\s+){1,5}-?\\d+(?:\\.\\d+)?)/g, (_, cmd, args) => {\n const nums = args.trim().split(/\\s+/).map(Number);\n const out: number[] = [];\n for (let i = 0; i < nums.length; i++) {\n out.push(i % 2 === 0 ? nums[i] + dx : nums[i]);\n }\n return `${cmd} ${out.join(\" \")}`;\n });\n}\n\nfunction shiftPathY(d: string, dy: number): string {\n // Shift every (x y) coordinate pair in the path. Path format is the\n // flowchart routing's \"M x y L x y L ...\" with simple commands.\n return d.replace(/([MLCQ])\\s*((?:-?\\d+(?:\\.\\d+)?\\s+){1,5}-?\\d+(?:\\.\\d+)?)/g, (_, cmd, args) => {\n const nums = args.trim().split(/\\s+/).map(Number);\n const out: number[] = [];\n for (let i = 0; i < nums.length; i++) {\n // Every odd index is a Y coordinate (commands operate on x,y pairs).\n out.push(i % 2 === 1 ? nums[i] + dy : nums[i]);\n }\n return `${cmd} ${out.join(\" \")}`;\n });\n}\n","import { circle, defs, el, escapeXml, group, line, path, polygon, rect, svgRoot, text } from \"../../core/svg\";\nimport type { RenderConfig } from \"../../core/types\";\nimport { layoutStateDiagram } from \"./layout\";\nimport { parseStateDiagram } from \"./parser\";\nimport type {\n StateActivity,\n StateDiagramAST,\n StateLayoutCluster,\n StateLayoutEdge,\n StateLayoutNode,\n StateLayoutNote,\n StateLayoutResult,\n} from \"./types\";\n\nconst ARROW_MARKER_ID = \"lt-state-arrow\";\n\nconst STYLE = `\n.lt-state-body { fill: #ffffff; stroke: #2a2a2a; stroke-width: 1.6; }\n.lt-state-name { font: 600 12px system-ui, sans-serif; fill: #1a1a1a; }\n.lt-state-div { stroke: #2a2a2a; stroke-width: 1; }\n.lt-state-activity { font: 11px ui-monospace, monospace; fill: #444; }\n\n.lt-composite-body { fill: #fafafa; stroke: #2a2a2a; stroke-width: 1.6; }\n.lt-composite-title { font: 600 12px system-ui, sans-serif; fill: #1a1a1a; }\n.lt-composite-titlebar { fill: #f0f0f0; stroke: #2a2a2a; stroke-width: 1; }\n.lt-region-div { stroke: #888; stroke-width: 1; stroke-dasharray: 6 4; }\n\n.lt-ps-initial { fill: #1a1a1a; }\n.lt-ps-final-outer { fill: #ffffff; stroke: #1a1a1a; stroke-width: 1.6; }\n.lt-ps-final-inner { fill: #1a1a1a; }\n.lt-ps-choice { fill: #ffffff; stroke: #1a1a1a; stroke-width: 1.6; }\n.lt-ps-junction { fill: #1a1a1a; }\n.lt-ps-bar { fill: #1a1a1a; }\n.lt-ps-history-body { fill: #ffffff; stroke: #1a1a1a; stroke-width: 1.6; }\n.lt-ps-history-text { font: 600 11px serif; fill: #1a1a1a; }\n.lt-ps-terminate { stroke: #1a1a1a; stroke-width: 2; }\n.lt-ps-entrypoint { fill: #ffffff; stroke: #1a1a1a; stroke-width: 1.6; }\n.lt-ps-exitpoint { fill: #ffffff; stroke: #1a1a1a; stroke-width: 1.6; }\n\n.lt-transition { stroke: #2a2a2a; stroke-width: 1.4; fill: none; }\n.lt-transition-label { font: 11px system-ui, sans-serif; fill: #1a1a1a; }\n.lt-transition-label-bg { fill: #ffffff; opacity: 0.92; }\n\n.lt-note-body { fill: #fff8c5; stroke: #b79400; stroke-width: 1; }\n.lt-note-text { font: 11px system-ui, sans-serif; fill: #2a2a2a; }\n.lt-note-leader { stroke: #b79400; stroke-width: 1; stroke-dasharray: 3 3; fill: none; }\n\n.lt-title { font: 600 14px system-ui, sans-serif; fill: #1a1a1a; }\n`;\n\nfunction renderArrowMarker(): string {\n return el(\n \"marker\",\n {\n id: ARROW_MARKER_ID,\n markerWidth: 10,\n markerHeight: 10,\n refX: 9,\n refY: 3,\n orient: \"auto\",\n markerUnits: \"strokeWidth\",\n },\n [polygon({ points: \"0,0 10,3 0,6\", fill: \"#2a2a2a\" })]\n );\n}\n\n// ── Activity rendering helper ───────────────────────────────\n\nfunction activityText(a: StateActivity): string {\n if (a.kind === \"entry\" || a.kind === \"exit\" || a.kind === \"do\") {\n return `${a.kind} / ${a.action ?? \"\"}`;\n }\n const parts: string[] = [];\n if (a.trigger) parts.push(a.trigger);\n if (a.guard) parts.push(`[${a.guard}]`);\n let s = parts.join(\" \");\n if (a.action) s = s ? `${s} / ${a.action}` : `/ ${a.action}`;\n return s;\n}\n\n// ── Simple state ────────────────────────────────────────────\n\nfunction renderSimple(node: StateLayoutNode): string {\n const { x, y, width, height } = node;\n const children: string[] = [\n rect({ x, y, width, height, rx: 8, ry: 8, class: \"lt-state-body\" }),\n ];\n const label = node.node.label || node.id;\n\n if (node.node.activities.length === 0) {\n children.push(\n text(\n { x: x + width / 2, y: y + height / 2 + 4, \"text-anchor\": \"middle\", class: \"lt-state-name\" },\n label\n )\n );\n } else {\n children.push(\n text(\n { x: x + width / 2, y: y + 16, \"text-anchor\": \"middle\", class: \"lt-state-name\" },\n label\n )\n );\n children.push(\n line({ x1: x, y1: y + 22, x2: x + width, y2: y + 22, class: \"lt-state-div\" })\n );\n let cy = y + 36;\n for (const a of node.node.activities) {\n children.push(text({ x: x + 8, y: cy, class: \"lt-state-activity\" }, activityText(a)));\n cy += 14;\n }\n }\n return group({ class: \"lt-state lt-simple\", \"data-id\": node.id }, children);\n}\n\n// ── Composite cluster ───────────────────────────────────────\n\nfunction renderComposite(c: StateLayoutCluster): string {\n const { x, y, width, height } = c;\n const titleBarH = 22;\n const acts = c.state.activities;\n const actsH = acts.length ? acts.length * 14 + 6 : 0;\n\n const parts: string[] = [\n rect({ x, y, width, height, rx: 10, ry: 10, class: \"lt-composite-body\" }),\n // Title bar background — only the top strip\n path({\n d: `M ${x + 1} ${y + titleBarH} L ${x + width - 1} ${y + titleBarH}`,\n class: \"lt-state-div\",\n }),\n text(\n { x: x + 12, y: y + 16, class: \"lt-composite-title\" },\n c.state.label || c.state.id\n ),\n ];\n\n // Activity compartment beneath title (entry/exit/do)\n if (acts.length) {\n let cy = y + titleBarH + 14;\n for (const a of acts) {\n parts.push(text({ x: x + 12, y: cy, class: \"lt-state-activity\" }, activityText(a)));\n cy += 14;\n }\n parts.push(\n path({\n d: `M ${x + 1} ${y + titleBarH + actsH} L ${x + width - 1} ${y + titleBarH + actsH}`,\n class: \"lt-state-div\",\n })\n );\n }\n\n // Region dividers if requested\n if (c.regionDividers) {\n for (const yy of c.regionDividers) {\n parts.push(\n line({ x1: x + 1, y1: yy, x2: x + width - 1, y2: yy, class: \"lt-region-div\" })\n );\n }\n }\n\n return group(\n { class: \"lt-state lt-composite\", \"data-id\": c.id },\n parts\n );\n}\n\n// ── Pseudo-states ───────────────────────────────────────────\n\nfunction renderPseudo(node: StateLayoutNode): string {\n const cx = node.cx;\n const cy = node.cy;\n const k = node.node.pseudoKind;\n switch (k) {\n case \"initial\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"initial\" },\n [circle({ cx, cy, r: 8, class: \"lt-ps-initial\" })]\n );\n case \"final\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"final\" },\n [\n circle({ cx, cy, r: 11, class: \"lt-ps-final-outer\" }),\n circle({ cx, cy, r: 6, class: \"lt-ps-final-inner\" }),\n ]\n );\n case \"choice\": {\n const r = 14;\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"choice\" },\n [\n polygon({\n points: `${cx},${cy - r} ${cx + r},${cy} ${cx},${cy + r} ${cx - r},${cy}`,\n class: \"lt-ps-choice\",\n }),\n ]\n );\n }\n case \"junction\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"junction\" },\n [circle({ cx, cy, r: 6, class: \"lt-ps-junction\" })]\n );\n case \"fork\":\n case \"join\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": k },\n [rect({ x: node.x, y: node.y, width: node.width, height: node.height, rx: 2, ry: 2, class: \"lt-ps-bar\" })]\n );\n case \"history\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"history\" },\n [\n circle({ cx, cy, r: 12, class: \"lt-ps-history-body\" }),\n text({ x: cx, y: cy + 4, \"text-anchor\": \"middle\", class: \"lt-ps-history-text\" }, \"H\"),\n ]\n );\n case \"dhistory\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"dhistory\" },\n [\n circle({ cx, cy, r: 13, class: \"lt-ps-history-body\" }),\n text({ x: cx, y: cy + 4, \"text-anchor\": \"middle\", class: \"lt-ps-history-text\" }, \"H*\"),\n ]\n );\n case \"terminate\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"terminate\" },\n [\n line({ x1: cx - 8, y1: cy - 8, x2: cx + 8, y2: cy + 8, class: \"lt-ps-terminate\" }),\n line({ x1: cx + 8, y1: cy - 8, x2: cx - 8, y2: cy + 8, class: \"lt-ps-terminate\" }),\n ]\n );\n case \"entry_point\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"entry_point\" },\n [circle({ cx, cy, r: 7, class: \"lt-ps-entrypoint\" })]\n );\n case \"exit_point\":\n return group(\n { class: \"lt-state lt-pseudo\", \"data-id\": node.id, \"data-kind\": \"exit_point\" },\n [\n circle({ cx, cy, r: 7, class: \"lt-ps-exitpoint\" }),\n line({ x1: cx - 4, y1: cy - 4, x2: cx + 4, y2: cy + 4, class: \"lt-ps-terminate\" }),\n line({ x1: cx + 4, y1: cy - 4, x2: cx - 4, y2: cy + 4, class: \"lt-ps-terminate\" }),\n ]\n );\n default:\n return \"\";\n }\n}\n\nfunction renderNode(node: StateLayoutNode): string {\n if (node.node.kind === \"pseudo\") return renderPseudo(node);\n return renderSimple(node);\n}\n\n// ── Edges + notes ──────────────────────────────────────────\n\nfunction renderEdge(edge: StateLayoutEdge): string {\n const parts: string[] = [\n path({\n d: edge.path,\n class: \"lt-transition\",\n \"marker-end\": `url(#${ARROW_MARKER_ID})`,\n \"data-from\": edge.from,\n \"data-to\": edge.to,\n }),\n ];\n if (edge.label) {\n const w = Math.max(20, edge.label.length * 6.4 + 8);\n const anchor = edge.labelAnchor ?? \"middle\";\n const dx = anchor === \"start\" ? 0 : anchor === \"end\" ? -w : -w / 2;\n parts.push(\n rect({\n x: edge.labelX + dx,\n y: edge.labelY - 10,\n width: w,\n height: 14,\n rx: 2,\n ry: 2,\n class: \"lt-transition-label-bg\",\n })\n );\n parts.push(\n text(\n {\n x: edge.labelX,\n y: edge.labelY,\n \"text-anchor\": anchor,\n class: \"lt-transition-label\",\n },\n edge.label\n )\n );\n }\n return group({ class: \"lt-edge\", \"data-edge-id\": edge.id }, parts);\n}\n\nfunction renderNote(n: StateLayoutNote): string {\n const parts: string[] = [\n line({\n x1: n.leader.x1,\n y1: n.leader.y1,\n x2: n.leader.x2,\n y2: n.leader.y2,\n class: \"lt-note-leader\",\n }),\n rect({ x: n.x, y: n.y, width: n.width, height: n.height, rx: 4, ry: 4, class: \"lt-note-body\" }),\n ];\n let yy = n.y + 14;\n for (const ln of n.lines) {\n parts.push(text({ x: n.x + 8, y: yy, class: \"lt-note-text\" }, ln));\n yy += 14;\n }\n return group({ class: \"lt-note\", \"data-target\": n.note.target }, parts);\n}\n\n// ── Public API ──────────────────────────────────────────────\n\nexport function renderStateDiagram(\n ast: StateDiagramAST,\n _config?: RenderConfig\n): string {\n const layout = layoutStateDiagram(ast);\n return renderLayout(layout);\n}\n\nexport function renderState(text: string, config?: RenderConfig): string {\n const ast = parseStateDiagram(text);\n return renderStateDiagram(ast, config);\n}\n\nfunction renderLayout(layout: StateLayoutResult): string {\n const titleNode = layout.title\n ? text({ x: 16, y: 22, class: \"lt-title\" }, layout.title)\n : \"\";\n\n return svgRoot(\n {\n width: layout.width,\n height: layout.height,\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n class: \"lt-state\",\n \"data-diagram-type\": \"state\",\n },\n [\n el(\"title\", {}, escapeXml(`State Diagram${layout.title ? \" — \" + layout.title : \"\"}`)),\n el(\"desc\", {}, \"UML 2.5 / Harel statechart rendered by Schematex\"),\n defs([renderArrowMarker(), el(\"style\", {}, STYLE)]),\n titleNode,\n // Composite clusters first so simple-state bodies sit on top.\n group({ class: \"lt-clusters\" }, layout.clusters.map(renderComposite)),\n group({ class: \"lt-state-bodies\" }, layout.nodes.map(renderNode)),\n group({ class: \"lt-edges\" }, layout.edges.map(renderEdge)),\n group({ class: \"lt-notes\" }, layout.notes.map(renderNote)),\n ]\n );\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseStateDiagram } from \"./parser\";\nimport { renderStateDiagram } from \"./renderer\";\n\nexport const state: DiagramPlugin = {\n type: \"state\" as DiagramPlugin[\"type\"],\n detect(text) {\n return /^\\s*state\\b/i.test(text);\n },\n parse: parseStateDiagram,\n render(text, config?: RenderConfig) {\n const ast = parseStateDiagram(text);\n return renderStateDiagram(ast, config);\n },\n};\n\nexport { parseStateDiagram, StateParseError } from \"./parser\";\nexport { renderStateDiagram, renderState } from \"./renderer\";\nexport { layoutStateDiagram } from \"./layout\";\nexport type * from \"./types\";\n","import type {\n PidAST,\n PidAnchor,\n PidDirection,\n PidEquipType,\n PidEquipment,\n PidInstrument,\n PidInstrumentCategory,\n PidLine,\n PidLineType,\n} from \"./types\";\n\nexport class PidParseError extends Error {\n constructor(message: string, public line?: number) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"PidParseError\";\n }\n}\n\nconst EQUIP_TYPES = new Set<PidEquipType>([\n \"tank_atm\", \"tank_cone_roof\",\n \"vessel_v\", \"vessel_h\", \"sphere\",\n \"column_tray\", \"column_packed\",\n \"hx_shell_tube\", \"hx_air_cooled\", \"reboiler\", \"condenser\",\n \"pump_centrifugal\", \"pump_pd\",\n \"compressor\", \"blower\",\n \"reactor_cstr\", \"reactor_pfr\",\n \"filter\", \"cyclone\", \"flare\", \"cooling_tower\",\n \"valve_gate\", \"valve_ball\", \"valve_globe\", \"valve_butterfly\",\n \"valve_check\", \"valve_control\", \"valve_psv\",\n]);\n\nconst LINE_TYPES = new Set<PidLineType>([\n \"process\", \"process_minor\", \"pneumatic\", \"electric\",\n \"hydraulic\", \"capillary\", \"software\", \"mechanical\",\n]);\n\nconst INST_CATEGORIES = new Set<PidInstrumentCategory>([\n \"field_discrete\", \"field_shared\", \"field_computer\", \"field_plc\",\n \"cr_discrete\", \"cr_shared\", \"cr_computer\", \"cr_plc\",\n \"local_discrete\", \"local_shared\",\n]);\n\ninterface RawLine {\n text: string;\n indent: number;\n line: number;\n}\n\nfunction preprocess(src: string): RawLine[] {\n const out: RawLine[] = [];\n const lines = src.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i];\n if (raw === undefined) continue;\n let stripped = \"\";\n let inQuote = false;\n for (const ch of raw) {\n if (ch === '\"') inQuote = !inQuote;\n if (ch === \"#\" && !inQuote) break;\n stripped += ch;\n }\n const trimmed = stripped.trim();\n if (!trimmed) continue;\n const indent = stripped.length - stripped.replace(/^\\s+/, \"\").length;\n out.push({ text: trimmed, indent, line: i + 1 });\n }\n return out;\n}\n\nfunction unquote(s: string): string {\n const t = s.trim();\n if (t.length >= 2 && t.startsWith('\"') && t.endsWith('\"')) {\n // Handle escaped quotes \\\" → \"\n return t.slice(1, -1).replace(/\\\\\"/g, '\"');\n }\n return t;\n}\n\nfunction parseAttrList(inside: string): Record<string, string> {\n const out: Record<string, string> = {};\n const parts: string[] = [];\n let depth = 0;\n let inQuote = false;\n let cur = \"\";\n for (const ch of inside) {\n if (ch === '\"') inQuote = !inQuote;\n if (!inQuote && ch === \"[\") depth++;\n if (!inQuote && ch === \"]\") depth--;\n if (!inQuote && depth === 0 && ch === \",\") {\n parts.push(cur);\n cur = \"\";\n } else {\n cur += ch;\n }\n }\n if (cur.trim()) parts.push(cur);\n for (const p of parts) {\n const idx = p.indexOf(\":\");\n if (idx < 0) continue;\n const key = p.slice(0, idx).trim();\n const val = unquote(p.slice(idx + 1).trim());\n out[key] = val;\n }\n return out;\n}\n\nfunction extractAttrs(text: string): { rest: string; attrs: Record<string, string> } {\n // Find a trailing [...] (respecting quotes & brackets).\n let depth = 0;\n let inQuote = false;\n let openIdx = -1;\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (ch === '\"') inQuote = !inQuote;\n if (inQuote) continue;\n if (ch === \"[\") {\n if (depth === 0) openIdx = i;\n depth++;\n } else if (ch === \"]\") {\n depth--;\n if (depth === 0 && i === text.length - 1) {\n const inside = text.slice(openIdx + 1, i);\n return {\n rest: text.slice(0, openIdx).trim(),\n attrs: parseAttrList(inside),\n };\n }\n }\n }\n return { rest: text, attrs: {} };\n}\n\nfunction parseAnchor(tok: string): PidAnchor {\n const dot = tok.indexOf(\".\");\n if (dot < 0) return { id: tok };\n return { id: tok.slice(0, dot), port: tok.slice(dot + 1) };\n}\n\nfunction tokenize(s: string): string[] {\n const out: string[] = [];\n let i = 0;\n while (i < s.length) {\n const ch = s[i]!;\n if (/\\s/.test(ch)) { i++; continue; }\n if (ch === '\"') {\n const end = s.indexOf('\"', i + 1);\n if (end < 0) throw new PidParseError(`Unterminated string: ${s}`);\n out.push(s.slice(i, end + 1));\n i = end + 1;\n continue;\n }\n let j = i;\n let bracket = 0;\n while (j < s.length) {\n const c = s[j]!;\n if (c === \"[\") bracket++;\n else if (c === \"]\") bracket--;\n else if (bracket === 0 && /\\s/.test(c)) break;\n j++;\n }\n out.push(s.slice(i, j));\n i = j;\n }\n return out;\n}\n\nexport function parsePid(src: string): PidAST {\n const lines = preprocess(src);\n if (lines.length === 0) {\n throw new PidParseError(\"Empty document\");\n }\n\n const header = lines[0]!;\n if (!/^pid\\b/i.test(header.text)) {\n throw new PidParseError(`Expected 'pid' header, got '${header.text}'`, header.line);\n }\n\n let title: string | undefined;\n let direction: PidDirection = \"LR\";\n\n // header: pid \"title\" [direction: LR]\n const headerRest = header.text.replace(/^pid\\b/i, \"\").trim();\n const { rest, attrs: headerAttrs } = extractAttrs(headerRest);\n if (headerAttrs.direction === \"TB\") direction = \"TB\";\n if (headerAttrs.direction === \"LR\") direction = \"LR\";\n if (rest) title = unquote(rest);\n\n const equipment: PidEquipment[] = [];\n const linesAst: PidLine[] = [];\n const instruments: PidInstrument[] = [];\n\n let lineIdCounter = 0;\n\n // Track current statement context (e.g. instrument followed by indented `measures`/`controls`).\n let currentInst: PidInstrument | undefined;\n\n for (let idx = 1; idx < lines.length; idx++) {\n const ln = lines[idx]!;\n const text = ln.text;\n\n // ── Indented continuation for an instrument ───────────\n const measuresMatch = text.match(/^measures\\s+(.+)$/);\n if (measuresMatch && currentInst) {\n currentInst.measures = measuresMatch[1].trim();\n continue;\n }\n const controlsMatch = text.match(/^controls\\s+(.+)$/);\n if (controlsMatch && currentInst) {\n currentInst.controls = controlsMatch[1].trim();\n continue;\n }\n // Reset the contextual instrument on any non-continuation line.\n currentInst = undefined;\n\n // ── equip ID : type [attrs] ───────────────────────────\n const equipMatch = text.match(/^equip\\s+([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.+)$/);\n if (equipMatch) {\n const id = equipMatch[1];\n const tail = equipMatch[2];\n const { rest: typeRest, attrs } = extractAttrs(tail);\n const equipType = typeRest.trim() as PidEquipType;\n if (!EQUIP_TYPES.has(equipType)) {\n throw new PidParseError(`Unknown equipment type '${equipType}'`, ln.line);\n }\n equipment.push({\n id,\n equipType,\n tag: attrs.tag ?? id,\n attrs,\n });\n continue;\n }\n\n // ── line ID from X.port to Y.port [attrs] ─────────────\n const lineMatch = text.match(/^line\\s+([A-Za-z0-9_-]+)\\s+from\\s+(\\S+)\\s+to\\s+(\\S+)\\s*(.*)$/);\n if (lineMatch) {\n const id = lineMatch[1];\n const fromTok = lineMatch[2];\n const toTok = lineMatch[3];\n const tail = lineMatch[4];\n const { attrs } = extractAttrs(tail);\n const lt = (attrs.type ?? \"process\") as PidLineType;\n if (!LINE_TYPES.has(lt)) {\n throw new PidParseError(`Unknown line type '${lt}'`, ln.line);\n }\n linesAst.push({\n id,\n from: parseAnchor(fromTok),\n to: parseAnchor(toTok),\n lineType: lt,\n tag: attrs.tag,\n size: attrs.size,\n service: attrs.service,\n attrs,\n });\n lineIdCounter += 1;\n continue;\n }\n\n // ── inst TAG : category [attrs] ───────────────────────\n const instMatch = text.match(/^inst\\s+([A-Z][A-Z0-9]*-[A-Za-z0-9]+)\\s*:\\s*(.+)$/);\n if (instMatch) {\n const tag = instMatch[1];\n const { rest: catRest, attrs } = extractAttrs(instMatch[2]);\n const category = catRest.trim() as PidInstrumentCategory;\n if (!INST_CATEGORIES.has(category)) {\n throw new PidParseError(`Unknown instrument category '${category}'`, ln.line);\n }\n const inst: PidInstrument = {\n tag,\n category,\n attrs,\n };\n instruments.push(inst);\n currentInst = inst;\n continue;\n }\n\n throw new PidParseError(`Unparseable line: ${text}`, ln.line);\n }\n\n // Strip unused id counter — it's just there to silence linter's unused-var.\n void lineIdCounter;\n void tokenize;\n\n return {\n type: \"pid\",\n title,\n direction,\n equipment,\n lines: linesAst,\n instruments,\n };\n}\n","import { circle, group, line, path, polygon, rect, text } from \"../../core/svg\";\nimport type { PidEquipType } from \"./types\";\n\n/**\n * Symbol library for ISA-5.1 / ISO 10628 equipment.\n *\n * Each symbol returns SVG centered at (0, 0). The geometry record below\n * encodes the bounding box and the standard set of port anchors (relative\n * to the center) used by the layout engine.\n */\n\nexport interface PortMap {\n [name: string]: { x: number; y: number };\n}\n\nexport interface SymbolGeometry {\n width: number;\n height: number;\n /** Port name → (x,y) relative to the symbol's CENTER. */\n ports: PortMap;\n}\n\nconst HALF = (n: number) => n / 2;\n\nexport const GEOMETRY: Record<PidEquipType, SymbolGeometry> = {\n // ── Tanks & vessels ─────────────────────────────────────\n tank_atm: {\n width: 90,\n height: 90,\n ports: {\n top: { x: 0, y: -45 },\n bottom: { x: 0, y: 45 },\n left: { x: -45, y: 0 },\n right: { x: 45, y: 0 },\n in: { x: -45, y: 0 },\n out: { x: 45, y: 0 },\n },\n },\n tank_cone_roof: {\n width: 90,\n height: 100,\n ports: {\n top: { x: 0, y: -50 },\n bottom: { x: 0, y: 50 },\n left: { x: -45, y: 0 },\n right: { x: 45, y: 0 },\n },\n },\n vessel_v: {\n width: 70,\n height: 130,\n ports: {\n top: { x: 0, y: -65 },\n bottom: { x: 0, y: 65 },\n left: { x: -35, y: 0 },\n right: { x: 35, y: 0 },\n in: { x: -35, y: -25 },\n out: { x: 35, y: 25 },\n },\n },\n vessel_h: {\n width: 130,\n height: 70,\n ports: {\n top: { x: 0, y: -35 },\n bottom: { x: 0, y: 35 },\n left: { x: -65, y: 0 },\n right: { x: 65, y: 0 },\n in: { x: -65, y: 0 },\n out: { x: 65, y: 0 },\n },\n },\n sphere: {\n width: 90,\n height: 90,\n ports: {\n top: { x: 0, y: -45 },\n bottom: { x: 0, y: 45 },\n left: { x: -45, y: 0 },\n right: { x: 45, y: 0 },\n },\n },\n column_tray: {\n width: 60,\n height: 180,\n ports: {\n top: { x: 0, y: -90 },\n bottom: { x: 0, y: 90 },\n feed: { x: -30, y: 0 },\n reflux: { x: 0, y: -90 },\n bottom_return: { x: -30, y: 70 },\n vapor_out: { x: 0, y: -90 },\n liquid_out: { x: 0, y: 90 },\n },\n },\n column_packed: {\n width: 60,\n height: 180,\n ports: {\n top: { x: 0, y: -90 },\n bottom: { x: 0, y: 90 },\n feed: { x: -30, y: 0 },\n },\n },\n hx_shell_tube: {\n width: 130,\n height: 60,\n ports: {\n shell_in: { x: 0, y: -30 },\n shell_out: { x: 0, y: 30 },\n tube_in: { x: -65, y: 0 },\n tube_out: { x: 65, y: 0 },\n in: { x: -65, y: 0 },\n out: { x: 65, y: 0 },\n },\n },\n hx_air_cooled: {\n width: 130,\n height: 80,\n ports: {\n in: { x: -65, y: 10 },\n out: { x: 65, y: 10 },\n },\n },\n reboiler: {\n width: 110,\n height: 60,\n ports: {\n in: { x: -55, y: 0 },\n out: { x: 55, y: 0 },\n bottom: { x: 0, y: 30 },\n },\n },\n condenser: {\n width: 130,\n height: 60,\n ports: {\n shell_in: { x: -50, y: -30 },\n shell_out: { x: 50, y: 30 },\n tube_in: { x: -65, y: 0 },\n tube_out: { x: 65, y: 0 },\n in: { x: -65, y: 0 },\n out: { x: 65, y: 0 },\n },\n },\n pump_centrifugal: {\n width: 70,\n height: 60,\n ports: {\n in: { x: -30, y: 0 },\n out: { x: 28, y: -22 },\n top: { x: 28, y: -22 },\n left: { x: -30, y: 0 },\n right: { x: 28, y: -22 },\n },\n },\n pump_pd: {\n width: 70,\n height: 60,\n ports: {\n in: { x: -35, y: 0 },\n out: { x: 35, y: 0 },\n },\n },\n compressor: {\n width: 90,\n height: 60,\n ports: {\n in: { x: -45, y: 0 },\n out: { x: 45, y: 0 },\n },\n },\n blower: {\n width: 70,\n height: 60,\n ports: {\n in: { x: -35, y: 0 },\n out: { x: 35, y: 0 },\n },\n },\n reactor_cstr: {\n width: 90,\n height: 110,\n ports: {\n top: { x: 0, y: -55 },\n bottom: { x: 0, y: 55 },\n in: { x: -45, y: -10 },\n out: { x: 0, y: 55 },\n },\n },\n reactor_pfr: {\n width: 130,\n height: 50,\n ports: {\n in: { x: -65, y: 0 },\n out: { x: 65, y: 0 },\n },\n },\n filter: {\n width: 70,\n height: 70,\n ports: {\n in: { x: -35, y: 0 },\n out: { x: 35, y: 0 },\n },\n },\n cyclone: {\n width: 70,\n height: 100,\n ports: {\n top: { x: 0, y: -50 },\n in: { x: -35, y: -30 },\n bottom: { x: 0, y: 50 },\n out: { x: 0, y: -50 },\n },\n },\n flare: {\n width: 30,\n height: 110,\n ports: {\n top: { x: 0, y: -55 },\n bottom: { x: 0, y: 55 },\n in: { x: 0, y: 55 },\n },\n },\n cooling_tower: {\n width: 100,\n height: 90,\n ports: {\n top: { x: 0, y: -45 },\n in: { x: -50, y: 0 },\n out: { x: 50, y: 0 },\n },\n },\n\n // ── Valves (in-line) ──────────────────────────────────\n valve_gate: {\n width: 36,\n height: 22,\n ports: { in: { x: -18, y: 0 }, out: { x: 18, y: 0 }, left: { x: -18, y: 0 }, right: { x: 18, y: 0 } },\n },\n valve_ball: {\n width: 36,\n height: 22,\n ports: { in: { x: -18, y: 0 }, out: { x: 18, y: 0 } },\n },\n valve_globe: {\n width: 36,\n height: 28,\n ports: { in: { x: -18, y: 0 }, out: { x: 18, y: 0 } },\n },\n valve_butterfly: {\n width: 36,\n height: 22,\n ports: { in: { x: -18, y: 0 }, out: { x: 18, y: 0 } },\n },\n valve_check: {\n width: 36,\n height: 22,\n ports: { in: { x: -18, y: 0 }, out: { x: 18, y: 0 } },\n },\n valve_control: {\n width: 36,\n height: 60,\n ports: { in: { x: -18, y: 12 }, out: { x: 18, y: 12 }, top: { x: 0, y: -22 } },\n },\n valve_psv: {\n width: 36,\n height: 60,\n ports: { in: { x: -18, y: 12 }, out: { x: 18, y: -8 } },\n },\n};\n\n// ── Renderers — each draws around (0,0). ─────────────────────\n\nconst STROKE_BLACK = \"#1d1d1d\";\nconst FILL_WHITE = \"#ffffff\";\n\nfunction bowtie(): string {\n // Two triangles meeting at center.\n return polygon({\n points: \"-18,-11 0,0 -18,11 18,11 0,0 18,-11\",\n class: \"lt-pid-valve-body\",\n });\n}\n\nexport function renderEquip(type: PidEquipType, label: string): string {\n switch (type) {\n case \"tank_atm\": {\n const w = 90;\n const h = 90;\n const cylTop = -h / 2 + 14;\n const parts = [\n // dome top\n path({\n d: `M ${-w / 2} ${cylTop} A ${w / 2} 14 0 0 1 ${w / 2} ${cylTop}`,\n class: \"lt-pid-equip\",\n }),\n // body\n rect({\n x: -w / 2,\n y: cylTop,\n width: w,\n height: h - 14,\n class: \"lt-pid-equip\",\n }),\n // tag\n text(\n { x: 0, y: 4, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" },\n label\n ),\n ];\n return group({ class: \"lt-pid-equip-group\" }, parts);\n }\n case \"tank_cone_roof\": {\n const w = 90;\n const h = 100;\n const roofH = 18;\n const top = -h / 2;\n return group({}, [\n polygon({\n points: `${-w / 2},${top + roofH} 0,${top} ${w / 2},${top + roofH}`,\n class: \"lt-pid-equip\",\n }),\n rect({\n x: -w / 2,\n y: top + roofH,\n width: w,\n height: h - roofH,\n class: \"lt-pid-equip\",\n }),\n text({ x: 0, y: 4, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"vessel_v\": {\n const w = 70;\n const h = 130;\n const headH = 16;\n const top = -h / 2;\n const bot = h / 2;\n return group({}, [\n path({\n d: `M ${-w / 2} ${top + headH}\n A ${w / 2} ${headH} 0 0 1 ${w / 2} ${top + headH}\n L ${w / 2} ${bot - headH}\n A ${w / 2} ${headH} 0 0 1 ${-w / 2} ${bot - headH}\n Z`,\n class: \"lt-pid-equip\",\n }),\n text(\n { x: 0, y: 4, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" },\n label\n ),\n ]);\n }\n case \"vessel_h\": {\n const w = 130;\n const h = 70;\n const headW = 14;\n const left = -w / 2;\n const right = w / 2;\n return group({}, [\n path({\n d: `M ${left + headW} ${-h / 2}\n L ${right - headW} ${-h / 2}\n A ${headW} ${h / 2} 0 0 1 ${right - headW} ${h / 2}\n L ${left + headW} ${h / 2}\n A ${headW} ${h / 2} 0 0 1 ${left + headW} ${-h / 2}\n Z`,\n class: \"lt-pid-equip\",\n }),\n text(\n { x: 0, y: 4, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" },\n label\n ),\n ]);\n }\n case \"sphere\": {\n return group({}, [\n circle({ cx: 0, cy: 0, r: 45, class: \"lt-pid-equip\" }),\n text({ x: 0, y: 4, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"column_tray\": {\n const w = 60;\n const h = 180;\n const headH = 12;\n const trays = 12;\n const inner = h - headH * 2;\n const traySpacing = inner / (trays + 1);\n const trayLines: string[] = [];\n for (let i = 1; i <= trays; i++) {\n const y = -h / 2 + headH + traySpacing * i;\n trayLines.push(\n line({\n x1: -w / 2 + 6,\n y1: y,\n x2: w / 2 - 6,\n y2: y,\n class: \"lt-pid-tray-line\",\n })\n );\n }\n return group({}, [\n path({\n d: `M ${-w / 2} ${-h / 2 + headH}\n A ${w / 2} ${headH} 0 0 1 ${w / 2} ${-h / 2 + headH}\n L ${w / 2} ${h / 2 - headH}\n A ${w / 2} ${headH} 0 0 1 ${-w / 2} ${h / 2 - headH}\n Z`,\n class: \"lt-pid-equip\",\n }),\n ...trayLines,\n text(\n {\n x: 0,\n y: -h / 2 - 6,\n \"text-anchor\": \"middle\",\n class: \"lt-pid-equip-tag\",\n },\n label\n ),\n ]);\n }\n case \"column_packed\": {\n const w = 60;\n const h = 180;\n const headH = 12;\n // X-shaped packing pattern, rendered as repeated `<` and `>` characters\n const packing = path({\n d: `M ${-w / 2 + 6} ${-h / 2 + headH + 6}\n L ${w / 2 - 6} ${h / 2 - headH - 6}\n M ${w / 2 - 6} ${-h / 2 + headH + 6}\n L ${-w / 2 + 6} ${h / 2 - headH - 6}`,\n class: \"lt-pid-tray-line\",\n });\n return group({}, [\n path({\n d: `M ${-w / 2} ${-h / 2 + headH}\n A ${w / 2} ${headH} 0 0 1 ${w / 2} ${-h / 2 + headH}\n L ${w / 2} ${h / 2 - headH}\n A ${w / 2} ${headH} 0 0 1 ${-w / 2} ${h / 2 - headH}\n Z`,\n class: \"lt-pid-equip\",\n }),\n packing,\n text(\n {\n x: 0,\n y: -h / 2 - 6,\n \"text-anchor\": \"middle\",\n class: \"lt-pid-equip-tag\",\n },\n label\n ),\n ]);\n }\n case \"hx_shell_tube\": {\n const w = 130;\n const h = 60;\n const headW = 12;\n const left = -w / 2;\n const right = w / 2;\n const tubes: string[] = [];\n for (let yy = -h / 2 + 12; yy <= h / 2 - 12; yy += 8) {\n tubes.push(\n line({\n x1: left + headW + 4,\n y1: yy,\n x2: right - headW - 4,\n y2: yy,\n class: \"lt-pid-tray-line\",\n })\n );\n }\n return group({}, [\n path({\n d: `M ${left + headW} ${-h / 2}\n L ${right - headW} ${-h / 2}\n A ${headW} ${h / 2} 0 0 1 ${right - headW} ${h / 2}\n L ${left + headW} ${h / 2}\n A ${headW} ${h / 2} 0 0 1 ${left + headW} ${-h / 2}\n Z`,\n class: \"lt-pid-equip\",\n }),\n ...tubes,\n text(\n {\n x: 0,\n y: h / 2 + 14,\n \"text-anchor\": \"middle\",\n class: \"lt-pid-equip-tag\",\n },\n label\n ),\n ]);\n }\n case \"hx_air_cooled\": {\n const w = 130;\n const h = 80;\n return group({}, [\n rect({\n x: -w / 2,\n y: -h / 2 + 18,\n width: w,\n height: h - 18,\n class: \"lt-pid-equip\",\n }),\n circle({ cx: 0, cy: -h / 2 + 14, r: 18, class: \"lt-pid-equip\" }),\n // 3-blade fan\n path({\n d: `M 0 ${-h / 2 + 14} L 14 ${-h / 2 + 6}\n M 0 ${-h / 2 + 14} L -14 ${-h / 2 + 6}\n M 0 ${-h / 2 + 14} L 0 ${-h / 2 + 30}`,\n class: \"lt-pid-tray-line\",\n }),\n text(\n { x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" },\n label\n ),\n ]);\n }\n case \"reboiler\": {\n const w = 110;\n const h = 60;\n const headW = 14;\n return group({}, [\n path({\n d: `M ${-w / 2 + headW} ${-h / 2}\n L ${w / 2 - headW} ${-h / 2}\n A ${headW} ${h / 2} 0 0 1 ${w / 2 - headW} ${h / 2}\n L ${-w / 2 + headW} ${h / 2}\n A ${headW} ${h / 2} 0 0 1 ${-w / 2 + headW} ${-h / 2}\n Z`,\n class: \"lt-pid-equip\",\n }),\n line({\n x1: -w / 2 + headW + 4,\n y1: -10,\n x2: w / 2 - headW - 4,\n y2: -10,\n class: \"lt-pid-tray-line\",\n }),\n line({\n x1: -w / 2 + headW + 4,\n y1: 0,\n x2: w / 2 - headW - 4,\n y2: 0,\n class: \"lt-pid-tray-line\",\n }),\n line({\n x1: -w / 2 + headW + 4,\n y1: 10,\n x2: w / 2 - headW - 4,\n y2: 10,\n class: \"lt-pid-tray-line\",\n }),\n text({ x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"condenser\": {\n // Visually identical to a horizontal HX with a label hint.\n const w = 130;\n const h = 60;\n const headW = 12;\n const left = -w / 2;\n const right = w / 2;\n const tubes: string[] = [];\n for (let yy = -h / 2 + 12; yy <= h / 2 - 12; yy += 10) {\n tubes.push(\n line({\n x1: left + headW + 4,\n y1: yy,\n x2: right - headW - 4,\n y2: yy,\n class: \"lt-pid-tray-line\",\n })\n );\n }\n return group({}, [\n path({\n d: `M ${left + headW} ${-h / 2}\n L ${right - headW} ${-h / 2}\n A ${headW} ${h / 2} 0 0 1 ${right - headW} ${h / 2}\n L ${left + headW} ${h / 2}\n A ${headW} ${h / 2} 0 0 1 ${left + headW} ${-h / 2}\n Z`,\n class: \"lt-pid-equip\",\n }),\n ...tubes,\n text({ x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"pump_centrifugal\": {\n // Circle + right-side triangle outlet.\n const r = 22;\n return group({}, [\n circle({ cx: 0, cy: 0, r, class: \"lt-pid-equip\" }),\n polygon({\n points: `${r * 0.4},${-r * 0.9} ${r + 6},${-r * 0.9} ${r * 0.4},${0}`,\n class: \"lt-pid-equip\",\n }),\n text(\n { x: 0, y: r + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" },\n label\n ),\n ]);\n }\n case \"pump_pd\": {\n const r = 22;\n return group({}, [\n circle({ cx: 0, cy: 0, r, class: \"lt-pid-equip\" }),\n circle({ cx: -8, cy: 0, r: 6, class: \"lt-pid-tray-line\", fill: \"none\" }),\n circle({ cx: 8, cy: 0, r: 6, class: \"lt-pid-tray-line\", fill: \"none\" }),\n text(\n { x: 0, y: r + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" },\n label\n ),\n ]);\n }\n case \"compressor\": {\n // Trapezoid (left wide → right narrow inverted = compressor)\n return group({}, [\n polygon({\n points: \"-45,-20 45,-12 45,12 -45,20\",\n class: \"lt-pid-equip\",\n }),\n text({ x: 0, y: 36, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"blower\": {\n const r = 22;\n return group({}, [\n circle({ cx: 0, cy: 0, r, class: \"lt-pid-equip\" }),\n path({\n d: `M 0 0 L ${r * 0.8} ${-r * 0.5} M 0 0 L ${-r * 0.6} ${-r * 0.6} M 0 0 L 0 ${r * 0.8}`,\n class: \"lt-pid-tray-line\",\n }),\n text({ x: 0, y: r + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"reactor_cstr\": {\n const w = 90;\n const h = 110;\n const headH = 14;\n const top = -h / 2;\n const bot = h / 2;\n return group({}, [\n path({\n d: `M ${-w / 2} ${top + headH}\n A ${w / 2} ${headH} 0 0 1 ${w / 2} ${top + headH}\n L ${w / 2} ${bot - headH}\n A ${w / 2} ${headH} 0 0 1 ${-w / 2} ${bot - headH}\n Z`,\n class: \"lt-pid-equip\",\n }),\n // agitator shaft + paddle\n line({ x1: 0, y1: top - 14, x2: 0, y2: 4, class: \"lt-pid-tray-line\" }),\n rect({ x: -10, y: 4, width: 20, height: 4, class: \"lt-pid-equip\" }),\n text(\n { x: 0, y: bot + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" },\n label\n ),\n ]);\n }\n case \"reactor_pfr\": {\n const w = 130;\n const h = 50;\n const headW = 12;\n const left = -w / 2;\n const right = w / 2;\n // Packed-bed style fill\n const dots: string[] = [];\n for (let xx = left + headW + 8; xx <= right - headW - 8; xx += 12) {\n for (let yy = -h / 2 + 12; yy <= h / 2 - 8; yy += 10) {\n dots.push(circle({ cx: xx, cy: yy, r: 1.6, fill: STROKE_BLACK }));\n }\n }\n return group({}, [\n path({\n d: `M ${left + headW} ${-h / 2}\n L ${right - headW} ${-h / 2}\n A ${headW} ${h / 2} 0 0 1 ${right - headW} ${h / 2}\n L ${left + headW} ${h / 2}\n A ${headW} ${h / 2} 0 0 1 ${left + headW} ${-h / 2}\n Z`,\n class: \"lt-pid-equip\",\n }),\n ...dots,\n text({ x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"filter\": {\n const w = 70;\n const h = 70;\n // diagonal hatch via 3 lines\n return group({}, [\n rect({ x: -w / 2, y: -h / 2, width: w, height: h, class: \"lt-pid-equip\" }),\n line({ x1: -w / 2, y1: 0, x2: w / 2, y2: 0, class: \"lt-pid-tray-line\" }),\n line({ x1: -w / 2 + 8, y1: -h / 2 + 8, x2: w / 2 - 8, y2: -8, class: \"lt-pid-tray-line\" }),\n line({ x1: -w / 2 + 8, y1: 8, x2: w / 2 - 8, y2: h / 2 - 8, class: \"lt-pid-tray-line\" }),\n text({ x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"cyclone\": {\n const w = 70;\n const h = 100;\n const cyl = 30;\n return group({}, [\n path({\n d: `M ${-w / 2} ${-h / 2}\n L ${w / 2} ${-h / 2}\n L ${w / 2} ${-h / 2 + cyl}\n L 0 ${h / 2}\n L ${-w / 2} ${-h / 2 + cyl}\n Z`,\n class: \"lt-pid-equip\",\n }),\n text({ x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"flare\": {\n const w = 30;\n const h = 110;\n return group({}, [\n rect({ x: -w / 2, y: -h / 2, width: w, height: h, class: \"lt-pid-equip\" }),\n polygon({\n points: `${-8},${-h / 2 - 4} 0,${-h / 2 - 22} 8,${-h / 2 - 4}`,\n fill: \"#ff7755\",\n stroke: STROKE_BLACK,\n }),\n text({ x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n case \"cooling_tower\": {\n const w = 100;\n const h = 90;\n return group({}, [\n path({\n d: `M ${-w / 2} ${-h / 2}\n L ${w / 2} ${-h / 2}\n L ${w / 4} 0\n L ${w / 2} ${h / 2}\n L ${-w / 2} ${h / 2}\n L ${-w / 4} 0\n Z`,\n class: \"lt-pid-equip\",\n }),\n text({ x: 0, y: h / 2 + 14, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n\n // ── Valves ──────────────────────────────────────────\n case \"valve_gate\":\n return group({}, [\n bowtie(),\n text({ x: 0, y: 22, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n case \"valve_ball\":\n return group({}, [\n bowtie(),\n circle({ cx: 0, cy: 0, r: 4, fill: STROKE_BLACK }),\n text({ x: 0, y: 22, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n case \"valve_globe\":\n return group({}, [\n bowtie(),\n circle({ cx: 0, cy: -5, r: 5, class: \"lt-pid-valve-body\", fill: FILL_WHITE }),\n text({ x: 0, y: 22, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n case \"valve_butterfly\":\n return group({}, [\n bowtie(),\n line({ x1: 0, y1: -10, x2: 0, y2: 10, class: \"lt-pid-tray-line\" }),\n text({ x: 0, y: 22, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n case \"valve_check\":\n return group({}, [\n bowtie(),\n path({ d: \"M -10 -8 A 10 10 0 0 1 -10 8\", class: \"lt-pid-tray-line\", fill: \"none\" }),\n text({ x: 0, y: 22, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n case \"valve_control\":\n return group({}, [\n bowtie(),\n // actuator: diaphragm\n line({ x1: 0, y1: -11, x2: 0, y2: -22, class: \"lt-pid-tray-line\" }),\n path({ d: \"M -14 -22 A 14 8 0 0 1 14 -22 L -14 -22 Z\", class: \"lt-pid-equip\" }),\n text({ x: 0, y: 24, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n case \"valve_psv\":\n return group({}, [\n bowtie(),\n // diagonal outlet (45°)\n line({\n x1: 18, y1: -11,\n x2: 26, y2: -22,\n class: \"lt-pid-process\",\n }),\n // spring stack\n path({\n d: \"M -6 -11 L -10 -16 L -2 -20 L -10 -24 L -2 -28\",\n class: \"lt-pid-tray-line\",\n fill: \"none\",\n }),\n text({ x: 0, y: 24, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n\n default:\n return group({}, [\n rect({ x: -30, y: -20, width: 60, height: 40, class: \"lt-pid-equip\" }),\n text({ x: 0, y: 4, \"text-anchor\": \"middle\", class: \"lt-pid-equip-tag\" }, label),\n ]);\n }\n}\n\n// ── Instrument bubble renderer ──────────────────────────────\n\nexport function renderInstrument(\n category: string,\n letterCode: string,\n loopNumber: string\n): string {\n const r = 14;\n\n const isComputer = category.endsWith(\"computer\");\n const isPlc = category.endsWith(\"plc\");\n const isShared = category.endsWith(\"shared\");\n const isControlRoom = category.startsWith(\"cr_\");\n const isLocal = category.startsWith(\"local_\");\n\n const parts: string[] = [];\n\n // Outer body\n if (isComputer) {\n // Diamond inscribed\n parts.push(circle({ cx: 0, cy: 0, r, class: \"lt-inst-body\" }));\n parts.push(\n polygon({\n points: `0,${-r + 1} ${r - 1},0 0,${r - 1} ${-(r - 1)},0`,\n class: \"lt-inst-body\",\n fill: \"none\",\n })\n );\n } else if (isPlc) {\n // Square inscribed\n parts.push(circle({ cx: 0, cy: 0, r, class: \"lt-inst-body\" }));\n const side = r * Math.SQRT1_2 * 2 - 2;\n parts.push(\n rect({\n x: -side / 2,\n y: -side / 2,\n width: side,\n height: side,\n class: \"lt-inst-body\",\n fill: \"none\",\n })\n );\n } else if (isShared) {\n // Hexagon inscribed (point-up)\n parts.push(circle({ cx: 0, cy: 0, r, class: \"lt-inst-body\" }));\n const hex: string[] = [];\n for (let i = 0; i < 6; i++) {\n const a = (Math.PI / 3) * i - Math.PI / 2;\n hex.push(`${(r - 2) * Math.cos(a)},${(r - 2) * Math.sin(a)}`);\n }\n parts.push(\n polygon({\n points: hex.join(\" \"),\n class: \"lt-inst-body\",\n fill: \"none\",\n })\n );\n } else {\n // discrete — circle only\n parts.push(circle({ cx: 0, cy: 0, r, class: \"lt-inst-body\" }));\n }\n\n // Location indicator (horizontal line for control room; dashed for local).\n if (isControlRoom) {\n parts.push(line({ x1: -r, y1: 0, x2: r, y2: 0, class: \"lt-inst-cr-line\" }));\n } else if (isLocal) {\n parts.push(line({ x1: -r, y1: 0, x2: r, y2: 0, class: \"lt-inst-local-line\" }));\n }\n\n // Tag text — split into letter-code + loop-number, one above and one below center.\n parts.push(\n text(\n {\n x: 0,\n y: -3,\n \"text-anchor\": \"middle\",\n class: \"lt-inst-tag\",\n },\n letterCode\n )\n );\n parts.push(\n text(\n {\n x: 0,\n y: 9,\n \"text-anchor\": \"middle\",\n class: \"lt-inst-tag\",\n },\n loopNumber\n )\n );\n\n return group({ class: \"lt-inst-symbol\" }, parts);\n}\n\nvoid HALF;\n","import { GEOMETRY } from \"./symbols\";\nimport type {\n PidAST,\n PidEquipment,\n PidLayoutEquipment,\n PidLayoutInstrument,\n PidLayoutLine,\n PidLayoutResult,\n PidLine,\n} from \"./types\";\n\nconst PADDING = 30;\nconst TITLE_AREA = 26;\nconst EQUIP_GAP_X = 70;\nconst INST_RADIUS = 14;\nconst INST_OFFSET = 38; // distance from equipment edge to instrument\n\ninterface AnchorPoint {\n x: number;\n y: number;\n /** Outward direction relative to the equipment edge (used for routing offsets). */\n side: \"left\" | \"right\" | \"top\" | \"bottom\";\n}\n\nfunction defaultPort(direction: \"in\" | \"out\", equip: PidEquipment): string {\n // Sensible defaults per equipment family.\n if (equip.equipType === \"tank_atm\" || equip.equipType === \"tank_cone_roof\") {\n return direction === \"out\" ? \"bottom\" : \"top\";\n }\n if (equip.equipType === \"vessel_v\" || equip.equipType === \"column_tray\" || equip.equipType === \"column_packed\") {\n return direction === \"out\" ? \"bottom\" : \"top\";\n }\n return direction === \"out\" ? \"out\" : \"in\";\n}\n\nfunction resolveSide(port: string): \"left\" | \"right\" | \"top\" | \"bottom\" {\n if (port === \"top\" || port === \"vapor_out\" || port === \"reflux\") return \"top\";\n if (port === \"bottom\" || port === \"liquid_out\" || port === \"bottom_return\") return \"bottom\";\n if (port === \"left\" || port === \"in\" || port === \"feed\" || port === \"tube_in\" || port === \"shell_in\") return \"left\";\n return \"right\";\n}\n\nfunction getAnchor(\n layoutEq: PidLayoutEquipment,\n port: string | undefined,\n fallback: \"in\" | \"out\"\n): AnchorPoint {\n const ports = layoutEq.ports;\n let key = port;\n if (!key || !(key in ports)) {\n key = defaultPort(fallback, layoutEq.equip);\n }\n const p = ports[key] ?? ports.right ?? ports.out ?? ports.left ?? ports.in;\n if (!p) return { x: layoutEq.cx, y: layoutEq.cy, side: \"right\" };\n return { x: p.x, y: p.y, side: resolveSide(key ?? \"right\") };\n}\n\nfunction manhattanPath(\n fromX: number,\n fromY: number,\n fromSide: AnchorPoint[\"side\"],\n toX: number,\n toY: number,\n toSide: AnchorPoint[\"side\"]\n): { d: string; midX: number; midY: number } {\n // Choose elbow strategy based on the originating side.\n // For horizontal exits (left/right) we route H → V → H.\n // For vertical exits (top/bottom) we route V → H → V.\n const isHFrom = fromSide === \"left\" || fromSide === \"right\";\n const isHTo = toSide === \"left\" || toSide === \"right\";\n\n if (isHFrom && isHTo) {\n const midX = (fromX + toX) / 2;\n return {\n d: `M ${fromX} ${fromY} L ${midX} ${fromY} L ${midX} ${toY} L ${toX} ${toY}`,\n midX,\n midY: (fromY + toY) / 2,\n };\n }\n if (!isHFrom && !isHTo) {\n const midY = (fromY + toY) / 2;\n return {\n d: `M ${fromX} ${fromY} L ${fromX} ${midY} L ${toX} ${midY} L ${toX} ${toY}`,\n midX: (fromX + toX) / 2,\n midY,\n };\n }\n // Mixed: simple L-shape.\n if (isHFrom) {\n return {\n d: `M ${fromX} ${fromY} L ${toX} ${fromY} L ${toX} ${toY}`,\n midX: toX,\n midY: (fromY + toY) / 2,\n };\n }\n return {\n d: `M ${fromX} ${fromY} L ${fromX} ${toY} L ${toX} ${toY}`,\n midX: (fromX + toX) / 2,\n midY: toY,\n };\n}\n\nexport function layoutPid(ast: PidAST): PidLayoutResult {\n // 1. Place equipment in declaration order along the primary direction.\n const equipment: PidLayoutEquipment[] = [];\n const equipById = new Map<string, PidLayoutEquipment>();\n\n // Determine row Y based on max equipment height for alignment.\n const heights = ast.equipment.map((e) => GEOMETRY[e.equipType]?.height ?? 60);\n const maxH = Math.max(...heights, 0);\n const rowY = PADDING + TITLE_AREA + maxH / 2 + 30; // give room for top labels\n\n let cursorX = PADDING + 40;\n\n for (const equip of ast.equipment) {\n const geo = GEOMETRY[equip.equipType] ?? { width: 60, height: 40, ports: {} };\n const cx = cursorX + geo.width / 2;\n const cy = rowY;\n const x = cx - geo.width / 2;\n const y = cy - geo.height / 2;\n\n const ports: Record<string, { x: number; y: number }> = {};\n for (const [name, p] of Object.entries(geo.ports)) {\n ports[name] = { x: cx + p.x, y: cy + p.y };\n }\n\n const layoutEq: PidLayoutEquipment = {\n equip,\n x,\n y,\n width: geo.width,\n height: geo.height,\n cx,\n cy,\n ports,\n };\n equipment.push(layoutEq);\n equipById.set(equip.id, layoutEq);\n cursorX += geo.width + EQUIP_GAP_X;\n }\n\n // 2. Place instruments.\n // Field instruments → near their measured equipment (below it).\n // Control-room instruments → above the equipment row (in a virtual control-room band).\n const instruments: PidLayoutInstrument[] = [];\n const instById = new Map<string, PidLayoutInstrument>();\n\n const crBandY = PADDING + TITLE_AREA + 40;\n // Stagger CR instrument x positions to avoid overlap.\n let crSlot = 0;\n for (const inst of ast.instruments) {\n let cx = 0;\n let cy = 0;\n if (inst.category.startsWith(\"cr_\")) {\n // place in CR band; x aligns roughly to the controlled valve or the measured equipment.\n const tgt = inst.controls ?? inst.measures ?? \"\";\n const tgtEq = equipById.get(tgt);\n cx = tgtEq ? tgtEq.cx : PADDING + 80 + crSlot * (INST_RADIUS * 2 + 28);\n cy = crBandY;\n crSlot += 1;\n } else if (inst.category.startsWith(\"local_\")) {\n cy = rowY + maxH / 2 + INST_OFFSET + INST_RADIUS;\n const tgt = inst.measures ?? inst.controls ?? \"\";\n const tgtEq = equipById.get(tgt);\n cx = tgtEq ? tgtEq.cx : PADDING + 80;\n } else {\n // field — directly below the related equipment\n cy = rowY + maxH / 2 + INST_OFFSET;\n const tgt = inst.measures ?? inst.controls ?? \"\";\n const tgtEq = equipById.get(tgt);\n cx = tgtEq ? tgtEq.cx : PADDING + 80;\n }\n\n const lay: PidLayoutInstrument = {\n inst,\n cx,\n cy,\n r: INST_RADIUS,\n };\n instruments.push(lay);\n instById.set(inst.tag, lay);\n }\n\n // Avoid overlapping field/local instruments by nudging their x where needed.\n const sameRow = (a: PidLayoutInstrument, b: PidLayoutInstrument) =>\n Math.abs(a.cy - b.cy) < INST_RADIUS && Math.abs(a.cx - b.cx) < INST_RADIUS * 2 + 8;\n const sortedByX = [...instruments].sort((a, b) => a.cx - b.cx);\n for (let i = 1; i < sortedByX.length; i++) {\n const prev = sortedByX[i - 1]!;\n const cur = sortedByX[i]!;\n if (sameRow(prev, cur)) {\n cur.cx = prev.cx + INST_RADIUS * 2 + 14;\n }\n }\n\n // 3. Route lines.\n const lines: PidLayoutLine[] = [];\n for (const ln of ast.lines) {\n const path = routeLine(ln, equipById, instById);\n if (path) lines.push(path);\n }\n\n // 4. Compute total bounds.\n const allX: number[] = [];\n const allY: number[] = [];\n for (const e of equipment) {\n // Pad horizontally so equipment tags (which can extend beyond the symbol's\n // bounding box) aren't clipped at the SVG edge.\n const tagPad = Math.max(0, ((e.equip.tag ?? e.equip.id).length * 6.6 - e.width) / 2 + 4);\n allX.push(e.x - tagPad, e.x + e.width + tagPad);\n allY.push(e.y, e.y + e.height + 30);\n }\n for (const i of instruments) {\n allX.push(i.cx - i.r, i.cx + i.r);\n allY.push(i.cy - i.r, i.cy + i.r + 14);\n }\n if (allX.length === 0) { allX.push(0, 400); allY.push(0, 200); }\n const maxX = Math.max(...allX);\n const maxY = Math.max(...allY);\n\n return {\n width: Math.max(maxX + PADDING, 400),\n height: Math.max(maxY + PADDING, 200),\n equipment,\n instruments,\n lines,\n title: ast.title,\n };\n}\n\nfunction routeLine(\n ln: PidLine,\n equipById: Map<string, PidLayoutEquipment>,\n instById: Map<string, PidLayoutInstrument>\n): PidLayoutLine | undefined {\n const fromAnchor = resolveAnchor(ln.from.id, ln.from.port, \"out\", equipById, instById);\n const toAnchor = resolveAnchor(ln.to.id, ln.to.port, \"in\", equipById, instById);\n if (!fromAnchor || !toAnchor) return undefined;\n\n const { d, midX, midY } = manhattanPath(\n fromAnchor.x,\n fromAnchor.y,\n fromAnchor.side,\n toAnchor.x,\n toAnchor.y,\n toAnchor.side\n );\n\n return {\n line: ln,\n path: d,\n midX,\n midY,\n };\n}\n\nfunction resolveAnchor(\n id: string,\n port: string | undefined,\n fallback: \"in\" | \"out\",\n equipById: Map<string, PidLayoutEquipment>,\n instById: Map<string, PidLayoutInstrument>\n): AnchorPoint | undefined {\n const eq = equipById.get(id);\n if (eq) return getAnchor(eq, port, fallback);\n\n const inst = instById.get(id);\n if (inst) {\n return {\n x: inst.cx,\n y: inst.cy,\n side: fallback === \"out\" ? \"right\" : \"left\",\n };\n }\n // If the line references the id of another line (e.g. `measures L2`), no anchor is generated.\n return undefined;\n}\n","import { defs, el, escapeXml, group, line as lineEl, path as pathEl, polygon, rect, svgRoot, text as textEl } from \"../../core/svg\";\nimport type { RenderConfig } from \"../../core/types\";\nimport { layoutPid } from \"./layout\";\nimport { parsePid } from \"./parser\";\nimport { renderEquip, renderInstrument } from \"./symbols\";\nimport type { PidAST, PidLayoutLine, PidLayoutResult } from \"./types\";\n\nconst STYLE = `\n.lt-pid-equip { fill: #ffffff; stroke: #1d1d1d; stroke-width: 1.6; }\n.lt-pid-equip-tag { font: 600 11px system-ui, sans-serif; fill: #1d1d1d; }\n.lt-pid-tray-line { stroke: #555; stroke-width: 1; fill: none; }\n\n.lt-pid-process { stroke: #1d1d1d; stroke-width: 2.6; fill: none; }\n.lt-pid-process-min { stroke: #1d1d1d; stroke-width: 1.5; fill: none; }\n.lt-pid-pneumatic { stroke: #1d1d1d; stroke-width: 1.4; fill: none; }\n.lt-pid-electric { stroke: #1d1d1d; stroke-width: 1.4; fill: none; stroke-dasharray: 6 4; }\n.lt-pid-hydraulic { stroke: #1d1d1d; stroke-width: 1.4; fill: none; stroke-dasharray: 10 4; }\n.lt-pid-capillary { stroke: #1d1d1d; stroke-width: 1.4; fill: none; stroke-dasharray: 1 5; stroke-linecap: round; }\n.lt-pid-software { stroke: #6a6a6a; stroke-width: 1.3; fill: none; stroke-dasharray: 2 4; }\n.lt-pid-mechanical { stroke: #1d1d1d; stroke-width: 1.4; fill: none; stroke-dasharray: 3 2 1 2; }\n\n.lt-pid-pneumatic-tick { stroke: #1d1d1d; stroke-width: 1.2; }\n\n.lt-inst-body { fill: #ffffff; stroke: #1d1d1d; stroke-width: 1.4; }\n.lt-inst-tag { font: 600 9.5px system-ui, sans-serif; fill: #1d1d1d; }\n.lt-inst-cr-line { stroke: #1d1d1d; stroke-width: 1; }\n.lt-inst-local-line { stroke: #1d1d1d; stroke-width: 1; stroke-dasharray: 2 2; }\n.lt-pid-valve-body { fill: #ffffff; stroke: #1d1d1d; stroke-width: 1.4; }\n\n.lt-pid-line-tag-bg { fill: #ffffff; stroke: #1d1d1d; stroke-width: 0.6; }\n.lt-pid-line-tag-text { font: 9px ui-monospace, monospace; fill: #1d1d1d; }\n\n.lt-pid-title { font: 600 14px system-ui, sans-serif; fill: #1d1d1d; }\n`;\n\nconst ARROW_ID = \"lt-pid-arrow\";\n\nfunction lineClass(t: PidLayoutLine[\"line\"][\"lineType\"]): string {\n return `lt-pid-${t.replace(\"_\", \"-\")}`;\n}\n\nfunction renderLine(l: PidLayoutLine): string {\n const cls = lineClass(l.line.lineType);\n const parts: string[] = [\n pathEl({\n d: l.path,\n class: cls,\n \"data-line-id\": l.line.id,\n \"data-service\": l.line.service ?? \"\",\n }),\n ];\n\n // Pneumatic: overlay tick marks every ~30 px along the path.\n if (l.line.lineType === \"pneumatic\") {\n parts.push(...pneumaticTicks(l.path));\n }\n\n // Render the line tag in the middle of the segment, if provided.\n if (l.line.tag) {\n const w = Math.max(28, l.line.tag.length * 6);\n parts.push(\n rect({\n x: l.midX - w / 2,\n y: l.midY - 8,\n width: w,\n height: 14,\n rx: 2,\n ry: 2,\n class: \"lt-pid-line-tag-bg\",\n })\n );\n parts.push(\n textEl(\n {\n x: l.midX,\n y: l.midY + 3,\n \"text-anchor\": \"middle\",\n class: \"lt-pid-line-tag-text\",\n },\n l.line.tag\n )\n );\n }\n\n return group({ class: \"lt-pid-line\", \"data-id\": l.line.id }, parts);\n}\n\nfunction pneumaticTicks(d: string): string[] {\n // Simple approach: parse \"M x y L x y L ...\" and emit ticks along straight segments.\n const tokens = d.match(/([MLC])\\s+(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/g) ?? [];\n const points: Array<{ x: number; y: number }> = [];\n for (const t of tokens) {\n const m = t.match(/[MLC]\\s+(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/);\n if (!m) continue;\n points.push({ x: parseFloat(m[1]), y: parseFloat(m[2]) });\n }\n const ticks: string[] = [];\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1]!;\n const b = points[i]!;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n if (len < 12) continue;\n const ux = dx / len;\n const uy = dy / len;\n // perpendicular unit\n const px = -uy;\n const py = ux;\n for (let s = 18; s < len; s += 26) {\n const cx = a.x + ux * s;\n const cy = a.y + uy * s;\n ticks.push(\n lineEl({\n x1: cx + px * 4 - ux * 4,\n y1: cy + py * 4 - uy * 4,\n x2: cx - px * 4 + ux * 4,\n y2: cy - py * 4 + uy * 4,\n class: \"lt-pid-pneumatic-tick\",\n })\n );\n }\n }\n return ticks;\n}\n\nexport function renderPidAST(ast: PidAST, _config?: RenderConfig): string {\n const layout = layoutPid(ast);\n return renderLayout(layout);\n}\n\nexport function renderPid(text: string, config?: RenderConfig): string {\n const ast = parsePid(text);\n return renderPidAST(ast, config);\n}\n\nfunction renderLayout(layout: PidLayoutResult): string {\n const equipNodes = layout.equipment.map((eq) => {\n const symbol = renderEquip(eq.equip.equipType, eq.equip.tag ?? eq.equip.id);\n return group(\n {\n class: \"lt-pid-equip-wrap\",\n \"data-id\": eq.equip.id,\n \"data-type\": eq.equip.equipType,\n transform: `translate(${eq.cx} ${eq.cy})`,\n },\n [symbol]\n );\n });\n\n const instNodes = layout.instruments.map((i) => {\n const { letter, number } = parseTag(i.inst.tag);\n return group(\n {\n class: \"lt-inst\",\n \"data-tag\": i.inst.tag,\n \"data-category\": i.inst.category,\n transform: `translate(${i.cx} ${i.cy})`,\n },\n [renderInstrument(i.inst.category, letter, number)]\n );\n });\n\n // Auto-generate signal connections from instrument relations:\n // - measures: dashed signal line from instrument to the measured equipment center\n // - controls: pneumatic signal line from instrument to the controlled valve actuator (or center)\n const autoSignals: string[] = [];\n for (const i of layout.instruments) {\n if (i.inst.measures) {\n const eq = layout.equipment.find((e) => e.equip.id === i.inst.measures);\n if (eq) {\n const ax = i.cx;\n const ay = i.cy;\n const bx = eq.cx;\n const by = eq.cy + eq.height / 2;\n autoSignals.push(\n pathEl({\n d: `M ${ax} ${ay} L ${ax} ${by + 8} L ${bx} ${by + 8} L ${bx} ${by}`,\n class: \"lt-pid-electric\",\n })\n );\n }\n }\n if (i.inst.controls) {\n const eq = layout.equipment.find((e) => e.equip.id === i.inst.controls);\n if (eq) {\n const ax = i.cx;\n const ay = i.cy + i.r;\n const bx = eq.cx;\n const by = eq.y;\n autoSignals.push(\n pathEl({\n d: `M ${ax} ${ay} L ${bx} ${ay} L ${bx} ${by}`,\n class: \"lt-pid-pneumatic\",\n })\n );\n }\n }\n }\n\n const titleNode = layout.title\n ? textEl({ x: 16, y: 22, class: \"lt-pid-title\" }, layout.title)\n : \"\";\n\n return svgRoot(\n {\n width: layout.width,\n height: layout.height,\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n class: \"lt-pid\",\n \"data-diagram-type\": \"pid\",\n },\n [\n el(\"title\", {}, escapeXml(`P&ID${layout.title ? \" — \" + layout.title : \"\"}`)),\n el(\"desc\", {}, \"ISA-5.1 / ISO 10628 P&ID rendered by Schematex\"),\n defs([\n el(\n \"marker\",\n {\n id: ARROW_ID,\n markerWidth: 10,\n markerHeight: 10,\n refX: 9,\n refY: 3,\n orient: \"auto\",\n markerUnits: \"strokeWidth\",\n },\n [polygon({ points: \"0,0 10,3 0,6\", fill: \"#1d1d1d\" })]\n ),\n el(\"style\", {}, STYLE),\n ]),\n titleNode,\n group({ class: \"lt-pid-equipment\" }, equipNodes),\n group({ class: \"lt-pid-lines\" }, layout.lines.map(renderLine)),\n group({ class: \"lt-pid-signals\" }, autoSignals),\n group({ class: \"lt-pid-instruments\" }, instNodes),\n ]\n );\n}\n\nfunction parseTag(tag: string): { letter: string; number: string } {\n const idx = tag.indexOf(\"-\");\n if (idx < 0) return { letter: tag, number: \"\" };\n return { letter: tag.slice(0, idx), number: tag.slice(idx + 1) };\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parsePid } from \"./parser\";\nimport { renderPidAST } from \"./renderer\";\n\nexport const pid: DiagramPlugin = {\n type: \"pid\" as DiagramPlugin[\"type\"],\n detect(text) {\n return /^\\s*pid\\b/i.test(text);\n },\n parse: parsePid,\n render(text, config?: RenderConfig) {\n const ast = parsePid(text);\n return renderPidAST(ast, config);\n },\n};\n\nexport { parsePid, PidParseError } from \"./parser\";\nexport { renderPid, renderPidAST } from \"./renderer\";\nexport { layoutPid } from \"./layout\";\nexport type * from \"./types\";\n","import type { InlineToken } from \"../../core/types\";\n\n/**\n * Inline markdown tokenizer for mindmap labels.\n *\n * Supported (Phase A):\n * **bold**, *italic*\n * `code`\n * [text](url)\n * leading `[ ]` / `[x]` → checkbox token (task list)\n *\n * Phase B adds wrap() for multi-line layout.\n *\n * Deliberately tiny — ~150 lines, no dep on marked/markdown-it. Not a\n * conforming CommonMark parser: nested bold+italic within links works, but\n * we don't try to handle every edge case (unbalanced `**`, escapes in code,\n * etc.). Unmatched delimiters fall through as literal text.\n */\n\nconst RE_TASK = /^\\[( |x|X)\\]\\s+(.*)$/;\n\nexport function tokenizeInline(raw: string): InlineToken[] {\n const tokens: InlineToken[] = [];\n let text = raw;\n\n // Leading task-list checkbox\n const task = text.match(RE_TASK);\n if (task) {\n tokens.push({ kind: \"checkbox\", checked: task[1].toLowerCase() === \"x\" });\n text = task[2];\n }\n\n parseInto(text, tokens, { bold: false, italic: false });\n return tokens;\n}\n\ninterface Style {\n bold: boolean;\n italic: boolean;\n}\n\n// Walks `src` appending tokens into `out`. Handles code/link/bold/italic.\nfunction parseInto(src: string, out: InlineToken[], style: Style): void {\n let i = 0;\n let plain = \"\";\n const flushPlain = () => {\n if (plain.length === 0) return;\n out.push({ kind: \"text\", value: plain, bold: style.bold || undefined, italic: style.italic || undefined });\n plain = \"\";\n };\n\n while (i < src.length) {\n const ch = src[i];\n\n // `code` — terminated by matching backtick; no formatting inside\n if (ch === \"`\") {\n const end = src.indexOf(\"`\", i + 1);\n if (end > i) {\n flushPlain();\n out.push({ kind: \"code\", value: src.slice(i + 1, end) });\n i = end + 1;\n continue;\n }\n }\n\n // [text](url)\n if (ch === \"[\") {\n const closeBracket = findUnescaped(src, \"]\", i + 1);\n if (closeBracket > 0 && src[closeBracket + 1] === \"(\") {\n const closeParen = findUnescaped(src, \")\", closeBracket + 2);\n if (closeParen > 0) {\n flushPlain();\n const inner: InlineToken[] = [];\n parseInto(src.slice(i + 1, closeBracket), inner, style);\n out.push({ kind: \"link\", href: src.slice(closeBracket + 2, closeParen), value: inner });\n i = closeParen + 1;\n continue;\n }\n }\n }\n\n // **bold**\n if (ch === \"*\" && src[i + 1] === \"*\") {\n const end = src.indexOf(\"**\", i + 2);\n if (end > i) {\n flushPlain();\n parseInto(src.slice(i + 2, end), out, { ...style, bold: true });\n i = end + 2;\n continue;\n }\n }\n\n // *italic*\n if (ch === \"*\") {\n const end = src.indexOf(\"*\", i + 1);\n if (end > i && src[end + 1] !== \"*\") {\n flushPlain();\n parseInto(src.slice(i + 1, end), out, { ...style, italic: true });\n i = end + 1;\n continue;\n }\n }\n\n plain += ch;\n i++;\n }\n flushPlain();\n}\n\nfunction findUnescaped(s: string, ch: string, from: number): number {\n for (let i = from; i < s.length; i++) {\n if (s[i] === \"\\\\\") { i++; continue; }\n if (s[i] === ch) return i;\n }\n return -1;\n}\n\n// ─── Measurement ─────────────────────────────────────────────────────────\n\n// Per-em width multipliers. Heuristic — refined by font but single-factor is\n// close enough for layout purposes (we give labels some padding anyway).\nconst EM_REGULAR = 0.58;\nconst EM_BOLD = 0.62;\nconst EM_CODE = 0.62;\nconst CHECKBOX_EM = 1.05; // checkbox + trailing space, in units of fontSize\n\nexport function measureTokens(tokens: readonly InlineToken[], fontSize: number): number {\n let w = 0;\n for (const t of tokens) {\n w += tokenWidth(t, fontSize);\n }\n return w;\n}\n\nfunction tokenWidth(t: InlineToken, fs: number): number {\n switch (t.kind) {\n case \"text\": {\n const em = t.bold ? EM_BOLD : EM_REGULAR;\n return t.value.length * fs * em;\n }\n case \"code\":\n // +4px for code background horizontal padding (2px each side)\n return t.value.length * fs * EM_CODE + 4;\n case \"link\":\n return measureTokens(t.value, fs);\n case \"checkbox\":\n return fs * CHECKBOX_EM;\n }\n}\n\n// ─── Plain-text extraction (for aria-label / title / tooltip) ────────────\n\nexport function tokensToPlainText(tokens: readonly InlineToken[]): string {\n let out = \"\";\n for (const t of tokens) {\n switch (t.kind) {\n case \"text\":\n case \"code\":\n out += t.value;\n break;\n case \"link\":\n out += tokensToPlainText(t.value);\n break;\n case \"checkbox\":\n out += t.checked ? \"[x] \" : \"[ ] \";\n break;\n }\n }\n return out;\n}\n\n// ─── Phase B: line wrapping ──────────────────────────────────────────────\n\nexport interface TokenLine {\n tokens: InlineToken[];\n width: number;\n}\n\n/**\n * Wrap tokens to `maxWidth`. Breaks at word boundaries within text tokens;\n * code/link/checkbox are atomic (not split). Words longer than maxWidth go\n * on their own line (overflow rather than hyphenate).\n *\n * Returns at least one line (possibly empty if tokens are empty).\n */\nexport function wrapTokens(\n tokens: readonly InlineToken[],\n maxWidth: number,\n fontSize: number\n): TokenLine[] {\n const lines: TokenLine[] = [];\n let line: InlineToken[] = [];\n let lineW = 0;\n\n const pushLine = () => {\n lines.push({ tokens: line, width: lineW });\n line = [];\n lineW = 0;\n };\n\n const pushAtomic = (t: InlineToken, w: number) => {\n if (lineW > 0 && lineW + w > maxWidth) pushLine();\n line.push(t);\n lineW += w;\n };\n\n for (const t of tokens) {\n if (t.kind === \"text\") {\n // Split on spaces but preserve them by appending to preceding word.\n const words = splitWordsWithTrailingSpace(t.value);\n for (const w of words) {\n const wt: InlineToken = { kind: \"text\", value: w, bold: t.bold, italic: t.italic };\n const ww = tokenWidth(wt, fontSize);\n if (lineW > 0 && lineW + ww > maxWidth) {\n // Current word wraps to new line; strip leading space\n pushLine();\n const trimmed = w.replace(/^ +/, \"\");\n if (trimmed.length === 0) continue;\n const tt: InlineToken = { kind: \"text\", value: trimmed, bold: t.bold, italic: t.italic };\n line.push(tt);\n lineW = tokenWidth(tt, fontSize);\n } else {\n line.push(wt);\n lineW += ww;\n }\n }\n } else {\n pushAtomic(t, tokenWidth(t, fontSize));\n }\n }\n pushLine();\n return lines;\n}\n\n// Split \"foo bar baz\" into [\"foo \", \"bar \", \" baz\"]-ish — each word keeps\n// its trailing space so measurements stay stable across the split.\nfunction splitWordsWithTrailingSpace(s: string): string[] {\n if (s.length === 0) return [];\n const out: string[] = [];\n const re = /(\\S+\\s*)|(\\s+)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(s)) !== null) {\n out.push(m[0]);\n }\n return out.length > 0 ? out : [s];\n}\n","import type { MindmapAST, MindmapNode, MindmapStyle } from \"../../core/types\";\nimport { tokenizeInline } from \"./inline\";\n\n/**\n * Mindmap DSL parser — markdown-heading + bullet list with inline markdown.\n *\n * Grammar (EBNF):\n * document = directive* heading (heading | bullet)*\n * directive = \"%%\" key \":\" value NEWLINE\n * heading = \"#\"+ SPACE text NEWLINE\n * bullet = INDENT (\"-\" | \"*\" | \"+\") SPACE text NEWLINE\n * INDENT = / *\\/ (2 spaces = 1 level)\n *\n * `text` may contain inline markdown (bold / italic / code / link /\n * leading `[ ]` task checkbox). Tokens are parsed here and attached to\n * the node; layout & renderer consume `tokens` rather than `label`.\n *\n * Directives: `style`, `theme`, `maxLabelWidth`.\n */\n\nexport class MindmapParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"MindmapParseError\";\n }\n}\n\nconst VALID_STYLES: readonly MindmapStyle[] = [\"map\", \"logic-right\"];\nconst DEFAULT_MAX_LABEL_WIDTH = 240;\n\ninterface Directives {\n style: MindmapStyle;\n themeOverride?: string;\n maxLabelWidth: number;\n}\n\nfunction parseDirective(line: string, out: Directives): void {\n const body = line.replace(/^%%\\s*/, \"\").trim();\n const idx = body.indexOf(\":\");\n if (idx < 0) return;\n const key = body.slice(0, idx).trim().toLowerCase();\n const val = body.slice(idx + 1).trim();\n if (key === \"style\" && (VALID_STYLES as readonly string[]).includes(val)) {\n out.style = val as MindmapStyle;\n } else if (key === \"theme\") {\n out.themeOverride = val;\n } else if (key === \"maxlabelwidth\") {\n const n = Number(val);\n if (Number.isFinite(n) && n >= 80 && n <= 1000) out.maxLabelWidth = n;\n }\n}\n\nfunction makeNode(id: string, label: string, depth: number): MindmapNode {\n return { id, label, tokens: tokenizeInline(label), depth, children: [] };\n}\n\nexport function parseMindmap(text: string): MindmapAST {\n const allLines = text.split(/\\r?\\n/);\n let lineOffset = 0;\n\n // Skip optional leading \"mindmap\" marker.\n if (allLines[0]?.trim().toLowerCase() === \"mindmap\") {\n allLines.shift();\n lineOffset = 1;\n }\n const lines = allLines;\n\n const directives: Directives = { style: \"map\", maxLabelWidth: DEFAULT_MAX_LABEL_WIDTH };\n let root: MindmapNode | null = null;\n let idCounter = 0;\n const nextId = () => `n${idCounter++}`;\n\n // Parent stack — tracks (node, depth). Bullet depth = lastHeadingDepth + 1 + floor(indent / 2).\n const stack: { node: MindmapNode; depth: number }[] = [];\n let lastHeadingDepth = 0;\n\n const attach = (node: MindmapNode, depth: number, lineNo: number, source: string) => {\n while (stack.length && stack[stack.length - 1].depth >= depth) stack.pop();\n const parent = stack[stack.length - 1]?.node;\n if (!parent) throw new MindmapParseError(\"orphan node — expected root # heading first\", lineNo, undefined, source);\n node.depth = parent.depth + 1;\n parent.children.push(node);\n stack.push({ node, depth });\n };\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i] ?? \"\";\n const lineNo = i + 1 + lineOffset;\n const line = raw.replace(/\\s+$/, \"\");\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith(\"%%\")) {\n parseDirective(trimmed, directives);\n continue;\n }\n\n const heading = line.match(/^\\s*(#{1,6})\\s+(.+)$/);\n if (heading) {\n const depth = heading[1].length - 1; // H1 → 0 (root), H2 → 1, ...\n const label = heading[2].trim();\n const node = makeNode(nextId(), label, depth);\n if (depth === 0) {\n if (root) throw new MindmapParseError(\"multiple `#` center nodes not allowed\", lineNo, undefined, line);\n root = node;\n stack.length = 0;\n stack.push({ node, depth: 0 });\n } else {\n attach(node, depth, lineNo, line);\n }\n lastHeadingDepth = depth;\n continue;\n }\n\n const bullet = line.match(/^(\\s*)[-*+]\\s+(.+)$/);\n if (bullet) {\n const indent = bullet[1].length;\n const depth = lastHeadingDepth + 1 + Math.floor(indent / 2);\n const label = bullet[2].trim();\n const node = makeNode(nextId(), label, depth);\n attach(node, depth, lineNo, line);\n continue;\n }\n }\n\n if (!root) throw new MindmapParseError(\"missing central topic — start with `# Title`\");\n\n const ast: MindmapAST = {\n type: \"mindmap\",\n style: directives.style,\n root,\n maxLabelWidth: directives.maxLabelWidth,\n };\n if (directives.themeOverride) ast.themeOverride = directives.themeOverride;\n return ast;\n}\n","import type {\n MindmapAST,\n MindmapLabelLine,\n MindmapLayoutEdge,\n MindmapLayoutNode,\n MindmapLayoutResult,\n MindmapNode,\n MindmapStyle,\n} from \"../../core/types\";\nimport { measureTokens, wrapTokens } from \"./inline\";\n\n/**\n * Mindmap layout — two XMind-inspired styles:\n * map — center + branches split left/right, each side vertically stacked\n * logic-right — root on left, tidy tree extending right (markmap-compatible)\n *\n * Layout invariants:\n * • Each node's n.x is its label's horizontal CENTER. Text renders\n * anchor-middle at n.x.\n * • Labels can be multi-line (inline markdown wrapped at maxLabelWidth).\n * labelHeight = lines × lineHeight + padding; labelWidth = max line width.\n * • Per-depth columns are globally aligned to the max label width at that\n * depth (incl. post-wrap width), so sibling branches stay flush.\n * • Tidy-tree packing uses each node's true labelHeight, so rich labels\n * automatically push neighbors apart without overlap.\n * • Bezier edges travel from parent's outer label edge to child's inner\n * label edge. Main-branch underlines merge visually with the curve.\n */\n\nconst PADDING = 40;\nconst SIBLING_GAP = 18; // vertical gap between sibling subtree rects\nconst MAIN_GAP = 44; // vertical gap between main branches on same side\nconst UNDERLINE_GAP = 4; // px between text bottom and underline stroke\nconst LINE_GAP = 4; // extra px between wrapped lines\n\n// Horizontal span of the Bezier curve between consecutive slot columns.\nfunction bezierGapFor(childDepth: number): number {\n if (childDepth <= 1) return 90;\n if (childDepth === 2) return 60;\n return 45;\n}\n\nconst FONT_CENTRAL = 20;\nconst FONT_MAIN = 15;\nconst FONT_SUB = 13;\n\nfunction fontSizeOf(depth: number): number {\n if (depth === 0) return FONT_CENTRAL;\n if (depth === 1) return FONT_MAIN;\n return FONT_SUB;\n}\n\nfunction lineHeightOf(fs: number): number {\n return fs + LINE_GAP;\n}\n\n// Root font (20pt) is ~1.5× sub font (13pt), so a single maxLabelWidth budget\n// would wrap root text far sooner than body text. Scale the budget by depth\n// so root gets room to breathe before wrapping.\nfunction widthBudget(depth: number, maxLabelWidth: number): number {\n if (depth === 0) return maxLabelWidth * 1.5;\n return maxLabelWidth;\n}\n\n// ─── Label measurement ──────────────────────────────────────────────────\n\ninterface LabelMetrics {\n lines: MindmapLabelLine[];\n width: number; // max line width\n height: number; // lines × lineHeight + padding (for leaves)\n}\n\nfunction measureLabel(node: MindmapNode, maxWidth: number): LabelMetrics {\n const fs = fontSizeOf(node.depth);\n // Unwrapped width first — if it fits, skip wrapping.\n const raw = measureTokens(node.tokens, fs);\n let lines: MindmapLabelLine[];\n if (raw <= maxWidth) {\n lines = [{ tokens: node.tokens.slice(), width: raw }];\n } else {\n lines = wrapTokens(node.tokens, maxWidth, fs);\n }\n let maxW = 0;\n for (const ln of lines) if (ln.width > maxW) maxW = ln.width;\n const lh = lineHeightOf(fs);\n // Label block = text lines + underline gap. No surrounding box/padding —\n // underline sits at the bottom edge, edges enter/leave at that y.\n const height = lines.length * lh + UNDERLINE_GAP;\n return { lines, width: Math.max(32, maxW), height };\n}\n\n// ─── Column bookkeeping ──────────────────────────────────────────────────\n\ninterface Columns {\n center: number[];\n}\n\n// Scan subtree(s) and return the max measured label width at each depth.\n// Used both for column positioning AND for equalizing every node's rendered\n// underline width at its depth (so sibling bezier curves span identical gaps).\nfunction computeMaxLW(\n subtreeRoots: MindmapNode[],\n maxLabelWidth: number\n): number[] {\n const maxLW: number[] = [];\n const walk = (n: MindmapNode) => {\n const m = measureLabel(n, widthBudget(n.depth, maxLabelWidth));\n if (maxLW[n.depth] === undefined || m.width > maxLW[n.depth]) maxLW[n.depth] = m.width;\n for (const c of n.children) walk(c);\n };\n for (const r of subtreeRoots) walk(r);\n return maxLW;\n}\n\nfunction buildColumns(\n maxLW: number[],\n firstColStartX: number,\n rootDepth: number\n): Columns {\n const center: number[] = [];\n if (maxLW[rootDepth] === undefined) return { center };\n let slotLeft = firstColStartX;\n center[rootDepth] = slotLeft + maxLW[rootDepth] / 2;\n for (let d = rootDepth + 1; d < maxLW.length; d++) {\n slotLeft = slotLeft + maxLW[d - 1] + bezierGapFor(d);\n center[d] = slotLeft + (maxLW[d] ?? 0) / 2;\n }\n return { center };\n}\n\n// ─── Tidy tree extending rightward ──────────────────────────────────────\n\nfunction tidyRight(\n node: MindmapNode,\n yTop: number,\n branchIdx: number,\n columns: Columns,\n maxLabelWidth: number,\n maxLW: number[],\n out: MindmapLayoutNode[]\n): { layoutNode: MindmapLayoutNode; height: number } {\n const m = measureLabel(node, widthBudget(node.depth, maxLabelWidth));\n const x = columns.center[node.depth];\n const fs = fontSizeOf(node.depth);\n // Expand to the max width at this depth so all same-depth nodes share\n // the same underline length and bezier endpoints stay consistent.\n const labelWidth = Math.max(m.width, maxLW[node.depth] ?? m.width);\n\n if (node.children.length === 0) {\n const ln: MindmapLayoutNode = {\n node,\n x,\n y: yTop + m.height / 2,\n side: \"right\",\n branchIndex: branchIdx,\n labelWidth,\n labelHeight: m.height,\n fontSize: fs,\n lines: m.lines,\n };\n out.push(ln);\n return { layoutNode: ln, height: m.height };\n }\n\n let cursor = yTop;\n const childLayouts: MindmapLayoutNode[] = [];\n for (let i = 0; i < node.children.length; i++) {\n if (i > 0) cursor += SIBLING_GAP;\n const { layoutNode: cln, height } = tidyRight(\n node.children[i],\n cursor,\n branchIdx,\n columns,\n maxLabelWidth,\n maxLW,\n out\n );\n childLayouts.push(cln);\n cursor += height;\n }\n const totalH = Math.max(m.height, cursor - yTop);\n\n const firstY = childLayouts[0].y;\n const lastY = childLayouts[childLayouts.length - 1].y;\n const parentY = (firstY + lastY) / 2;\n\n const ln: MindmapLayoutNode = {\n node,\n x,\n y: parentY,\n side: \"right\",\n branchIndex: branchIdx,\n labelWidth,\n labelHeight: m.height,\n fontSize: fs,\n lines: m.lines,\n };\n out.push(ln);\n return { layoutNode: ln, height: totalH };\n}\n\n// ─── Edge geometry helpers ───────────────────────────────────────────────\n\nfunction labelEdgeX(n: MindmapLayoutNode, outward: boolean): number {\n if (n.side === \"center\") return n.x;\n const dir = n.side === \"left\" ? -1 : 1;\n return n.x + (outward ? dir : -dir) * n.labelWidth / 2;\n}\n\nfunction bezierH(x1: number, y1: number, x2: number, y2: number): string {\n const k = (x2 - x1) * 0.55;\n return `M ${x1.toFixed(1)} ${y1.toFixed(1)} C ${(x1 + k).toFixed(1)} ${y1.toFixed(1)}, ${(x2 - k).toFixed(1)} ${y2.toFixed(1)}, ${x2.toFixed(1)} ${y2.toFixed(1)}`;\n}\n\nfunction edgeWidthFor(depth: number): number {\n if (depth <= 1) return 2.2;\n if (depth === 2) return 1.6;\n return 1.2;\n}\n\n/** Underline stroke width for a node at this depth. */\nfunction underlineWidthFor(depth: number): number {\n if (depth === 0) return 2.4;\n if (depth === 1) return 2.2;\n if (depth === 2) return 1.6;\n return 1.2;\n}\n\n// ─── Canvas normalization ────────────────────────────────────────────────\n\nfunction normalize(nodes: MindmapLayoutNode[]): { width: number; height: number } {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of nodes) {\n const lw = n.labelWidth;\n const lh = n.labelHeight;\n const leftX = n.x - lw / 2;\n const rightX = n.x + lw / 2;\n minX = Math.min(minX, leftX);\n maxX = Math.max(maxX, rightX);\n minY = Math.min(minY, n.y - lh / 2);\n maxY = Math.max(maxY, n.y + lh / 2);\n }\n const dx = PADDING - minX;\n const dy = PADDING - minY;\n for (const n of nodes) {\n n.x += dx;\n n.y += dy;\n }\n return { width: (maxX - minX) + PADDING * 2, height: (maxY - minY) + PADDING * 2 };\n}\n\n/** y of a node's bottom underline — where edges enter/leave.\n * Matches renderer: stroke sits mid-UNDERLINE_GAP, not at the raw bottom. */\nfunction underlineY(n: MindmapLayoutNode): number {\n return n.y + n.labelHeight / 2 - UNDERLINE_GAP / 2;\n}\n\nfunction buildEdges(root: MindmapNode, byId: Map<string, MindmapLayoutNode>): MindmapLayoutEdge[] {\n const edges: MindmapLayoutEdge[] = [];\n const walk = (parent: MindmapNode) => {\n const pln = byId.get(parent.id)!;\n const pUY = underlineY(pln);\n for (const c of parent.children) {\n const cln = byId.get(c.id)!;\n let fromX: number;\n if (pln.side === \"center\") {\n const halfW = pln.labelWidth / 2;\n fromX = cln.side === \"left\" ? pln.x - halfW : pln.x + halfW;\n } else {\n fromX = labelEdgeX(pln, true);\n }\n const toX = labelEdgeX(cln, false);\n edges.push({\n from: parent.id,\n to: c.id,\n path: bezierH(fromX, pUY, toX, underlineY(cln)),\n color: \"\",\n width: edgeWidthFor(c.depth),\n });\n walk(c);\n }\n };\n walk(root);\n return edges;\n}\n\n// ─── Style: Map (balanced left/right) ────────────────────────────────────\n\nfunction layoutMap(ast: MindmapAST): MindmapLayoutResult {\n const root = ast.root;\n const mains = root.children;\n const rightCount = Math.ceil(mains.length / 2);\n const rightMains = mains.slice(0, rightCount);\n const leftMains = mains.slice(rightCount);\n\n const nodes: MindmapLayoutNode[] = [];\n const mw = ast.maxLabelWidth;\n\n const rootM = measureLabel(root, widthBudget(0, mw));\n const firstColLeft = rootM.width / 2 + bezierGapFor(1);\n\n // Single global maxLW scan over both sides so L/R siblings share width.\n const maxLW = computeMaxLW([...rightMains, ...leftMains], mw);\n const cols = buildColumns(maxLW, firstColLeft, 1);\n\n let rightCursor = 0;\n for (let i = 0; i < rightMains.length; i++) {\n if (i > 0) rightCursor += MAIN_GAP;\n const { height } = tidyRight(rightMains[i], rightCursor, i, cols, mw, maxLW, nodes);\n rightCursor += height;\n }\n const rightHeight = rightCursor;\n\n const leftStart = nodes.length;\n let leftCursor = 0;\n for (let i = 0; i < leftMains.length; i++) {\n if (i > 0) leftCursor += MAIN_GAP;\n const { height } = tidyRight(leftMains[i], leftCursor, rightCount + i, cols, mw, maxLW, nodes);\n leftCursor += height;\n }\n const leftHeight = leftCursor;\n for (let k = leftStart; k < nodes.length; k++) {\n nodes[k].x = -nodes[k].x;\n nodes[k].side = \"left\";\n }\n\n const rootY = Math.max(rightHeight, leftHeight) / 2;\n const rootNode: MindmapLayoutNode = {\n node: root,\n x: 0,\n y: rootY,\n side: \"center\",\n branchIndex: -1,\n labelWidth: rootM.width,\n labelHeight: rootM.height,\n fontSize: fontSizeOf(0),\n lines: rootM.lines,\n };\n nodes.push(rootNode);\n\n const { width, height } = normalize(nodes);\n const byId = new Map(nodes.map((n) => [n.node.id, n]));\n const edges = buildEdges(root, byId);\n\n return { width, height, style: \"map\", nodes, edges, title: ast.title };\n}\n\n// ─── Style: Logic-Right (horizontal tidy tree) ───────────────────────────\n\nfunction layoutLogicRight(ast: MindmapAST): MindmapLayoutResult {\n const root = ast.root;\n const nodes: MindmapLayoutNode[] = [];\n const mw = ast.maxLabelWidth;\n\n const rootM = measureLabel(root, widthBudget(0, mw));\n const firstColLeft = rootM.width / 2 + bezierGapFor(1);\n\n const maxLW = computeMaxLW(root.children, mw);\n const cols = buildColumns(maxLW, firstColLeft, 1);\n let cursor = 0;\n for (let i = 0; i < root.children.length; i++) {\n if (i > 0) cursor += MAIN_GAP;\n const { height } = tidyRight(root.children[i], cursor, i, cols, mw, maxLW, nodes);\n cursor += height;\n }\n const totalHeight = cursor;\n\n const rootNode: MindmapLayoutNode = {\n node: root,\n x: 0,\n y: totalHeight / 2,\n side: \"center\",\n branchIndex: -1,\n labelWidth: rootM.width,\n labelHeight: rootM.height,\n fontSize: fontSizeOf(0),\n lines: rootM.lines,\n };\n nodes.push(rootNode);\n\n const { width, height } = normalize(nodes);\n const byId = new Map(nodes.map((n) => [n.node.id, n]));\n const edges = buildEdges(root, byId);\n\n return { width, height, style: \"logic-right\", nodes, edges, title: ast.title };\n}\n\n// ─── Dispatcher ──────────────────────────────────────────────────────────\n\nexport function layoutMindmap(ast: MindmapAST): MindmapLayoutResult {\n const style: MindmapStyle = ast.style;\n if (style === \"logic-right\") return layoutLogicRight(ast);\n return layoutMap(ast);\n}\n\nexport { fontSizeOf, lineHeightOf, LINE_GAP, UNDERLINE_GAP, underlineWidthFor };\n","import type { InlineToken, MindmapAST, MindmapLayoutNode, MindmapLabelLine } from \"../../core/types\";\nimport { resolveMindmapTheme, type MindmapTokens } from \"../../core/theme\";\nimport type { ResolvedTheme } from \"../../core/theme\";\nimport {\n svgRoot,\n group,\n rect,\n path as svgPath,\n title as svgTitle,\n desc as svgDesc,\n el,\n escapeXml,\n} from \"../../core/svg\";\nimport { parseMindmap } from \"./parser\";\nimport { layoutMindmap, lineHeightOf, UNDERLINE_GAP, underlineWidthFor } from \"./layout\";\nimport { tokensToPlainText } from \"./inline\";\n\ntype Theme = ResolvedTheme<MindmapTokens>;\n\n// Monochrome theme halves all stroke widths so a pure-black line doesn't\n// overpower the text. Applied uniformly via this scale factor.\nfunction strokeScale(theme: Theme): number {\n return theme.branchPalette.length <= 1 ? 0.7 : 1;\n}\n\nfunction paletteColor(theme: Theme, branchIndex: number): string {\n if (branchIndex < 0) return theme.centralFill;\n return theme.branchPalette[branchIndex % theme.branchPalette.length];\n}\n\n// ─── Inline-token rendering ──────────────────────────────────────────────\n//\n// Each `MindmapLabelLine` becomes one `<text>` element positioned at its\n// baseline y. The line's tokens are emitted as `<tspan>`s, each with its\n// own font-weight/style/fill and a measured x offset. Code tokens additionally\n// get a background `<rect>` drawn BEFORE the text element (rect list returned\n// separately so it renders under the tspans). Link tokens wrap in `<a>`.\n\ninterface LineRenderResult {\n textElement: string;\n decorations: string[]; // rects/lines drawn under text (code bg, checkbox)\n}\n\nfunction renderLine(\n line: MindmapLabelLine,\n leftX: number, // fixed left edge for all lines in this node (left-aligned)\n cy: number, // vertical center of the line\n fontSize: number,\n fontFamily: string,\n fontWeight: number,\n theme: Theme\n): LineRenderResult {\n const baselineY = cy + fontSize * 0.35;\n\n // Build tspans AND decorations in sequence, tracking cursor.\n const tspans: string[] = [];\n const decorations: string[] = [];\n let cursor = leftX;\n\n const emit = (tok: InlineToken, inheritedHref?: string) => {\n switch (tok.kind) {\n case \"text\": {\n const w = measureToken(tok, fontSize);\n tspans.push(\n tspan({\n x: cursor,\n y: baselineY,\n fill: inheritedHref ? theme.linkColor : theme.text,\n \"font-weight\": tok.bold ? 700 : fontWeight,\n \"font-style\": tok.italic ? \"italic\" : undefined,\n \"text-decoration\": inheritedHref ? \"underline\" : undefined,\n }, tok.value)\n );\n cursor += w;\n break;\n }\n case \"code\": {\n const w = measureToken(tok, fontSize);\n // Background pill — sits under text\n decorations.push(rect({\n x: cursor,\n y: cy - fontSize * 0.6,\n width: w,\n height: fontSize * 1.2,\n rx: 3,\n ry: 3,\n fill: theme.codeBg,\n }));\n tspans.push(\n tspan({\n x: cursor + 2,\n y: baselineY,\n fill: theme.codeFg,\n \"font-family\": \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\",\n \"font-size\": fontSize * 0.92,\n }, tok.value)\n );\n cursor += w;\n break;\n }\n case \"link\": {\n // Render inner tokens as if link-styled; wrap in <a>\n const aStart = `<a href=\"${escapeXml(tok.href)}\" target=\"_blank\" rel=\"noopener\">`;\n const innerStart = tspans.length;\n for (const inner of tok.value) emit(inner, tok.href);\n // Wrap the inner tspans in <a>\n const innerTspans = tspans.splice(innerStart).join(\"\");\n tspans.push(aStart + innerTspans + \"</a>\");\n break;\n }\n case \"checkbox\": {\n const size = fontSize * 0.85;\n const boxX = cursor;\n const boxY = cy - size / 2;\n decorations.push(rect({\n x: boxX,\n y: boxY,\n width: size,\n height: size,\n rx: 2,\n ry: 2,\n fill: tok.checked ? theme.checkboxFill : \"none\",\n stroke: tok.checked ? theme.checkboxFill : theme.checkboxStroke,\n \"stroke-width\": 1.5,\n }));\n if (tok.checked) {\n // Check mark\n const p = `M ${(boxX + size * 0.2).toFixed(1)} ${(boxY + size * 0.5).toFixed(1)} L ${(boxX + size * 0.42).toFixed(1)} ${(boxY + size * 0.72).toFixed(1)} L ${(boxX + size * 0.82).toFixed(1)} ${(boxY + size * 0.28).toFixed(1)}`;\n decorations.push(svgPath({\n d: p,\n fill: \"none\",\n stroke: \"#ffffff\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n }));\n }\n cursor += size + fontSize * 0.25;\n break;\n }\n }\n };\n\n for (const tok of line.tokens) emit(tok);\n\n const textElement = el(\"text\", {\n \"font-family\": fontFamily,\n \"font-size\": fontSize,\n \"font-weight\": fontWeight,\n }, tspans.join(\"\"));\n return { textElement, decorations };\n}\n\nfunction measureToken(tok: InlineToken, fs: number): number {\n switch (tok.kind) {\n case \"text\":\n return tok.value.length * fs * (tok.bold ? 0.62 : 0.58);\n case \"code\":\n return tok.value.length * fs * 0.62 + 4;\n case \"link\": {\n let w = 0;\n for (const t of tok.value) w += measureToken(t, fs);\n return w;\n }\n case \"checkbox\":\n return fs * 0.85 + fs * 0.25;\n }\n}\n\n// Manual tspan builder — svg.ts doesn't have one.\nfunction tspan(attrs: Record<string, string | number | undefined>, content: string): string {\n const pairs: string[] = [];\n for (const [k, v] of Object.entries(attrs)) {\n if (v === undefined) continue;\n pairs.push(`${k}=\"${typeof v === \"number\" ? String(v) : escapeXml(String(v))}\"`);\n }\n return `<tspan ${pairs.join(\" \")}>${escapeXml(content)}</tspan>`;\n}\n\n// ─── Unified node renderer (markmap-style underline) ────────────────────\n//\n// All nodes — root included — use the same visual model: text sits above a\n// horizontal underline that spans the label width. The incoming edge bezier\n// terminates at one end of the underline and flows seamlessly into it; the\n// outgoing bezier departs from the other end. No box, no pill, no border.\n//\n// Root uses `centralFill` (neutral) for its underline to distinguish it as\n// the trunk; branch nodes inherit their branch's palette color. Underline\n// stroke width tapers with depth — root & main branches are thickest,\n// deeper leaves thinner — keeping the visual hierarchy legible.\n\nfunction renderNode(\n n: MindmapLayoutNode,\n color: string,\n theme: Theme,\n fontFamily: string\n): string {\n const isRoot = n.node.depth === 0;\n const isMain = n.node.depth === 1;\n const fs = n.fontSize;\n const lh = lineHeightOf(fs);\n const lineCount = n.lines.length;\n\n // Label block: text block sits at TOP of labelHeight, underline at BOTTOM.\n // Text top is at (n.y - labelHeight/2); lines center at top + (i+0.5)*lh.\n const topY = n.y - n.labelHeight / 2;\n const underlineY = n.y + n.labelHeight / 2 - UNDERLINE_GAP / 2;\n\n const children: string[] = [];\n const decorations: string[] = [];\n const weight = isRoot ? 700 : isMain ? 600 : 400;\n\n // All lines start at the column's left edge (same as underline left).\n // Uses equalized labelWidth so all same-depth nodes are flush-left aligned.\n const textLeft = n.x - n.labelWidth / 2;\n\n for (let i = 0; i < lineCount; i++) {\n const line = n.lines[i];\n const cy = topY + (i + 0.5) * lh;\n const r = renderLine(line, textLeft, cy, fs, fontFamily, weight, theme);\n decorations.push(...r.decorations);\n children.push(r.textElement);\n }\n\n // Underline — matches the incoming bezier's terminus Y, so edge+line\n // read as one continuous stroke.\n const ux1 = n.x - n.labelWidth / 2;\n const ux2 = n.x + n.labelWidth / 2;\n const sw = underlineWidthFor(n.node.depth) * strokeScale(theme);\n children.push(\n el(\"line\", {\n x1: ux1,\n y1: underlineY,\n x2: ux2,\n y2: underlineY,\n stroke: color,\n \"stroke-width\": sw,\n \"stroke-linecap\": \"round\",\n })\n );\n\n const cls = isRoot\n ? \"schematex-mindmap-central\"\n : isMain\n ? \"schematex-mindmap-main\"\n : \"schematex-mindmap-leaf\";\n\n return group(\n {\n class: cls,\n \"data-node-id\": n.node.id,\n \"data-depth\": n.node.depth,\n \"data-branch-idx\": n.branchIndex,\n },\n [...decorations, ...children]\n );\n}\n\n// ─── Top-level render ────────────────────────────────────────────────────\n\nexport function renderMindmapAST(\n ast: MindmapAST,\n themeName = \"default\",\n fontFamily = \"system-ui, -apple-system, sans-serif\"\n): string {\n const theme = resolveMindmapTheme(ast.themeOverride ?? themeName);\n const layout = layoutMindmap(ast);\n const byId = new Map(layout.nodes.map((n) => [n.node.id, n]));\n\n const edgeSvgs: string[] = [];\n for (const e of layout.edges) {\n const target = byId.get(e.to);\n if (!target) continue;\n const color = paletteColor(theme, target.branchIndex);\n edgeSvgs.push(\n svgPath({\n d: e.path,\n fill: \"none\",\n stroke: color,\n \"stroke-width\": e.width,\n \"stroke-linecap\": \"round\",\n })\n );\n }\n\n const nodeSvgs: string[] = [];\n for (const n of layout.nodes) {\n const color = n.node.depth === 0 ? theme.centralFill : paletteColor(theme, n.branchIndex);\n nodeSvgs.push(renderNode(n, color, theme, fontFamily));\n }\n\n const title = ast.title ?? tokensToPlainText(ast.root.tokens);\n\n return svgRoot(\n {\n viewBox: `0 0 ${layout.width.toFixed(1)} ${layout.height.toFixed(1)}`,\n width: layout.width.toFixed(1),\n height: layout.height.toFixed(1),\n role: \"graphics-document\",\n \"aria-label\": `Mindmap: ${escapeXml(title)}`,\n },\n [\n svgTitle(title),\n svgDesc(`${layout.style} mindmap with ${layout.nodes.length} nodes`),\n rect({ x: 0, y: 0, width: layout.width, height: layout.height, fill: theme.bg }),\n group({ class: \"schematex-mindmap-edges\", \"aria-hidden\": \"true\" }, edgeSvgs),\n group({ class: \"schematex-mindmap-nodes\" }, nodeSvgs),\n ]\n );\n}\n\nexport function renderMindmap(text: string, opts?: { theme?: string; fontFamily?: string }): string {\n const ast = parseMindmap(text);\n return renderMindmapAST(ast, opts?.theme, opts?.fontFamily);\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseMindmap } from \"./parser\";\nimport { renderMindmap } from \"./renderer\";\n\nexport const mindmap: DiagramPlugin = {\n type: \"mindmap\",\n detect(text: string): boolean {\n const lines = text.trim().split(\"\\n\");\n const first = lines[0]?.trim().toLowerCase() ?? \"\";\n if (first.startsWith(\"mindmap\")) return true;\n // Detect markdown-heading DSL: first non-directive line starts with `# `\n for (const ln of lines) {\n const t = ln.trim();\n if (!t) continue;\n if (t.startsWith(\"%%\")) continue;\n return /^#\\s+\\S/.test(t);\n }\n return false;\n },\n parse: parseMindmap,\n\n render(text: string, config?: RenderConfig): string {\n return renderMindmap(text, {\n theme: config?.theme,\n fontFamily: config?.fontFamily,\n });\n },\n};\n\nexport { parseMindmap } from \"./parser\";\nexport { layoutMindmap } from \"./layout\";\nexport { renderMindmap, renderMindmapAST } from \"./renderer\";\n","import type {\n MatrixAST,\n MatrixAxis,\n MatrixQuadrantAnnotation,\n MatrixTemplate,\n MatrixCellLabel,\n} from \"./types\";\n\nexport interface TemplateSpec {\n title?: string;\n grid: \"2x2\" | \"3x3\" | \"NxM\";\n cols?: number;\n rows?: number;\n mode?: \"quadrant\" | \"heatmap\";\n xAxis: MatrixAxis;\n yAxis: MatrixAxis;\n annotations?: MatrixQuadrantAnnotation[];\n cellLabels?: MatrixCellLabel[];\n rowLabels?: string[];\n colLabels?: string[];\n}\n\nexport const TEMPLATES: Record<MatrixTemplate, TemplateSpec> = {\n \"eisenhower\": {\n grid: \"2x2\",\n xAxis: { low: \"Urgent\", high: \"Not Urgent\" },\n yAxis: { low: \"Not Important\", high: \"Important\" },\n annotations: [\n { q: 1, label: \"Schedule\" },\n { q: 2, label: \"Do First\" },\n { q: 3, label: \"Delete\" },\n { q: 4, label: \"Delegate\" },\n ],\n },\n \"impact-effort\": {\n grid: \"2x2\",\n xAxis: { low: \"Low Effort\", high: \"High Effort\" },\n yAxis: { low: \"Low Impact\", high: \"High Impact\" },\n annotations: [\n { q: 1, label: \"Major Projects\" },\n { q: 2, label: \"Quick Wins\" },\n { q: 3, label: \"Fill-ins\" },\n { q: 4, label: \"Thankless\" },\n ],\n },\n \"rice\": {\n grid: \"2x2\",\n xAxis: { low: \"Low Effort\", high: \"High Effort\" },\n yAxis: { low: \"Low Reach × Impact\", high: \"High Reach × Impact\" },\n annotations: [\n { q: 1, label: \"Strategic Bets\" },\n { q: 2, label: \"High RICE\" },\n { q: 3, label: \"Backlog\" },\n { q: 4, label: \"Reconsider\" },\n ],\n },\n \"bcg\": {\n grid: \"2x2\",\n // BCG convention: high market share on left (x-axis reversed)\n xAxis: { low: \"High Market Share\", high: \"Low Market Share\" },\n yAxis: { low: \"Low Growth\", high: \"High Growth\" },\n annotations: [\n { q: 1, label: \"Question Marks\" },\n { q: 2, label: \"Stars\" },\n { q: 3, label: \"Cash Cows\" },\n { q: 4, label: \"Dogs\" },\n ],\n },\n \"ansoff\": {\n grid: \"2x2\",\n xAxis: { low: \"Existing Products\", high: \"New Products\" },\n yAxis: { low: \"Existing Markets\", high: \"New Markets\" },\n annotations: [\n { q: 1, label: \"Diversification\" },\n { q: 2, label: \"Market Development\" },\n { q: 3, label: \"Market Penetration\" },\n { q: 4, label: \"Product Development\" },\n ],\n },\n \"johari\": {\n grid: \"2x2\",\n xAxis: { low: \"Known to Self\", high: \"Not Known to Self\" },\n yAxis: { low: \"Not Known to Others\", high: \"Known to Others\" },\n annotations: [\n { q: 1, label: \"Blind\" },\n { q: 2, label: \"Open / Arena\" },\n { q: 3, label: \"Hidden / Façade\" },\n { q: 4, label: \"Unknown\" },\n ],\n },\n \"9-box\": {\n grid: \"3x3\",\n cols: 3,\n rows: 3,\n xAxis: { low: \"Low Performance\", high: \"High Performance\" },\n yAxis: { low: \"Low Potential\", high: \"High Potential\" },\n cellLabels: [\n { col: 0, row: 2, label: \"Enigma\" },\n { col: 1, row: 2, label: \"Growth Employee\" },\n { col: 2, row: 2, label: \"Future Leader\" },\n { col: 0, row: 1, label: \"Dilemma\" },\n { col: 1, row: 1, label: \"Core Player\" },\n { col: 2, row: 1, label: \"High Impact\" },\n { col: 0, row: 0, label: \"Under-performer\" },\n { col: 1, row: 0, label: \"Effective\" },\n { col: 2, row: 0, label: \"Trusted Pro\" },\n ],\n },\n \"risk-matrix\": {\n grid: \"NxM\",\n mode: \"heatmap\",\n cols: 5,\n rows: 5,\n xAxis: { low: \"Negligible\", high: \"Severe\" },\n yAxis: { low: \"Rare\", high: \"Certain\" },\n rowLabels: [\"Rare\", \"Unlikely\", \"Possible\", \"Likely\", \"Certain\"],\n colLabels: [\"Negligible\", \"Minor\", \"Moderate\", \"Major\", \"Severe\"],\n },\n};\n\nexport function resolveTemplate(name: string): TemplateSpec | undefined {\n if (name in TEMPLATES) return TEMPLATES[name as MatrixTemplate];\n return undefined;\n}\n\n/**\n * Apply a template's defaults to an AST in-place (fills axes / annotations /\n * cell labels only when the DSL hasn't already set them).\n */\nexport function applyTemplateDefaults(ast: MatrixAST, spec: TemplateSpec): void {\n if (spec.grid === \"3x3\") {\n ast.grid = \"3x3\";\n ast.cols = 3;\n ast.rows = 3;\n } else if (spec.grid === \"NxM\") {\n ast.grid = \"NxM\";\n ast.cols = spec.cols ?? 5;\n ast.rows = spec.rows ?? 5;\n } else {\n ast.grid = \"2x2\";\n ast.cols = 2;\n ast.rows = 2;\n }\n if (spec.mode) ast.mode = spec.mode;\n if (!ast.xAxis.low && !ast.xAxis.high) ast.xAxis = { ...spec.xAxis };\n if (!ast.yAxis.low && !ast.yAxis.high) ast.yAxis = { ...spec.yAxis };\n if (spec.annotations && ast.annotations.length === 0) {\n ast.annotations = spec.annotations.map((a) => ({ ...a }));\n }\n if (spec.cellLabels && ast.cellLabels.length === 0) {\n ast.cellLabels = spec.cellLabels.map((c) => ({ ...c }));\n }\n if (spec.rowLabels && !ast.rowLabels) ast.rowLabels = [...spec.rowLabels];\n if (spec.colLabels && !ast.colLabels) ast.colLabels = [...spec.colLabels];\n}\n","import type {\n MatrixAST,\n MatrixPoint,\n MatrixCell,\n MatrixConfig,\n MatrixAxis,\n LabelCollisionMode,\n MatrixTemplate,\n} from \"./types\";\nimport { resolveTemplate, applyTemplateDefaults } from \"./templates\";\n\nconst TEMPLATE_NAMES: ReadonlySet<string> = new Set([\n \"eisenhower\",\n \"impact-effort\",\n \"rice\",\n \"bcg\",\n \"ansoff\",\n \"johari\",\n \"9-box\",\n \"risk-matrix\",\n]);\n\nconst DEFAULT_CONFIG: MatrixConfig = {\n quadrantBg: true,\n gridLines: true,\n axisArrows: true,\n labelCollision: \"auto\",\n bubbleScale: \"area\",\n quadrantAnnotations: true,\n legendPosition: \"bottom-right\",\n offChartPolicy: \"clamp-badge\",\n showAxis: \"auto\",\n margins: false,\n};\n\ninterface ParseState {\n ast: MatrixAST;\n pointIdSeq: number;\n}\n\nfunction emptyAxis(): MatrixAxis {\n return { low: \"\", high: \"\" };\n}\n\nfunction quadrantToCell(q: 1 | 2 | 3 | 4): { col: number; row: number } {\n // 2×2 mapping: Q1=top-right, Q2=top-left, Q3=bottom-left, Q4=bottom-right\n // (rows: 0=bottom, 1=top)\n switch (q) {\n case 1: return { col: 1, row: 1 };\n case 2: return { col: 0, row: 1 };\n case 3: return { col: 0, row: 0 };\n case 4: return { col: 1, row: 0 };\n }\n}\n\nfunction newAST(): MatrixAST {\n return {\n type: \"matrix\",\n mode: \"quadrant\",\n grid: \"2x2\",\n cols: 2,\n rows: 2,\n xAxis: emptyAxis(),\n yAxis: emptyAxis(),\n points: [],\n cells: [],\n cellLabels: [],\n annotations: [],\n config: { ...DEFAULT_CONFIG },\n };\n}\n\nfunction stripQuotes(s: string): string {\n const t = s.trim();\n if ((t.startsWith('\"') && t.endsWith('\"')) || (t.startsWith(\"'\") && t.endsWith(\"'\"))) {\n return t.slice(1, -1);\n }\n return t;\n}\n\nfunction readQuoted(line: string, from: number): { text: string; next: number } | null {\n // skip whitespace\n let i = from;\n while (i < line.length && /\\s/.test(line[i]!)) i++;\n if (line[i] !== '\"' && line[i] !== \"'\") return null;\n const quote = line[i]!;\n const start = i + 1;\n let end = start;\n while (end < line.length && line[end] !== quote) end++;\n if (end >= line.length) return null;\n return { text: line.slice(start, end), next: end + 1 };\n}\n\nfunction parseAxis(raw: string): MatrixAxis {\n // \"Low Effort → High Effort\" or \"High Market Share ← Low Market Share\"\n // or \"Low → High\" or \"Low ↑ High\" etc.\n const arrowMatch = raw.match(/\\s*(→|↑|->|>|↓|←|<-|<)\\s*/);\n if (arrowMatch) {\n const arrow = arrowMatch[1]!;\n const idx = arrowMatch.index!;\n const left = raw.slice(0, idx).trim();\n const right = raw.slice(idx + arrowMatch[0].length).trim();\n const reversed = arrow === \"←\" || arrow === \"<-\" || arrow === \"<\";\n if (reversed) {\n return { low: right, high: left, reversed: true };\n }\n return { low: left, high: right };\n }\n // Plain text: treat as high label, low stays empty\n return { low: \"\", high: raw.trim() };\n}\n\nfunction parseNumberList(raw: string): string[] {\n // \"[A, B, C]\" → [\"A\",\"B\",\"C\"]\n const t = raw.trim();\n const inner = t.startsWith(\"[\") && t.endsWith(\"]\") ? t.slice(1, -1) : t;\n return inner\n .split(\",\")\n .map((s) => stripQuotes(s.trim()))\n .filter((s) => s.length > 0);\n}\n\nfunction parseProperties(\n raw: string,\n point: MatrixPoint\n): void {\n // e.g. size: 5 category: design note: \"foo\" highlight: true\n let i = 0;\n while (i < raw.length) {\n // skip whitespace\n while (i < raw.length && /\\s/.test(raw[i]!)) i++;\n if (i >= raw.length) break;\n // read key\n const keyMatch = raw.slice(i).match(/^([a-zA-Z_-]+)\\s*:\\s*/);\n if (!keyMatch) break;\n const key = keyMatch[1]!.toLowerCase();\n i += keyMatch[0].length;\n // read value: quoted, number, true/false, or bareword\n if (raw[i] === '\"' || raw[i] === \"'\") {\n const q = readQuoted(raw, i);\n if (!q) break;\n if (key === \"note\") point.note = q.text;\n else if (key === \"label\") point.label = q.text;\n i = q.next;\n } else {\n // bareword until whitespace + next \"key:\"\n const rest = raw.slice(i);\n const endMatch = rest.match(/\\s+[a-zA-Z_-]+\\s*:/);\n const end = endMatch ? endMatch.index! : rest.length;\n const val = rest.slice(0, end).trim();\n i += end;\n if (key === \"size\") {\n const n = Number(val);\n if (!Number.isNaN(n)) point.size = n;\n } else if (key === \"category\") {\n point.category = val;\n } else if (key === \"color\") {\n point.color = val;\n } else if (key === \"shape\") {\n if (val === \"circle\" || val === \"square\" || val === \"triangle\" || val === \"diamond\") {\n point.shape = val;\n }\n } else if (key === \"highlight\") {\n point.highlight = val === \"true\" || val === \"1\";\n }\n }\n }\n}\n\nfunction parsePointLine(line: string, st: ParseState): boolean {\n // `\"Label\" at (x, y) size: 3 category: infra`\n const q = readQuoted(line, 0);\n if (!q) return false;\n const rest = line.slice(q.next).trim();\n const atMatch = rest.match(/^at\\s*\\(\\s*(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)\\s*\\)\\s*(.*)$/);\n if (!atMatch) return false;\n const x = Number(atMatch[1]);\n const y = Number(atMatch[2]);\n const props = atMatch[3]!;\n const offChart = x < 0 || x > 1 || y < 0 || y > 1;\n const clampedX = Math.max(0, Math.min(1, x));\n const clampedY = Math.max(0, Math.min(1, y));\n const point: MatrixPoint = {\n id: `p${st.pointIdSeq++}`,\n label: q.text,\n x: clampedX,\n y: clampedY,\n offChart,\n origX: offChart ? x : undefined,\n origY: offChart ? y : undefined,\n };\n if (props) parseProperties(props, point);\n st.ast.points.push(point);\n return true;\n}\n\nfunction parseCellLine(line: string, st: ParseState): boolean {\n // `cell (i,j) value: 9 label: \"foo\"`\n const m = line.match(/^cell\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*(.*)$/i);\n if (!m) return false;\n const col = Number(m[1]);\n const row = Number(m[2]);\n const rest = m[3]!;\n const cell: MatrixCell = { col, row };\n const valMatch = rest.match(/value:\\s*(-?\\d+(?:\\.\\d+)?)/i);\n if (valMatch) cell.value = Number(valMatch[1]);\n const labMatch = rest.match(/label:\\s*\"([^\"]*)\"/i);\n if (labMatch) cell.label = labMatch[1]!;\n const lvlMatch = rest.match(/level:\\s*(strong|medium|weak)\\b/i);\n if (lvlMatch) {\n const lv = lvlMatch[1]!.toLowerCase() as \"strong\" | \"medium\" | \"weak\";\n cell.level = lv;\n if (cell.value === undefined) cell.value = lv === \"strong\" ? 3 : lv === \"medium\" ? 2 : 1;\n }\n st.ast.cells.push(cell);\n if (cell.label) {\n st.ast.cellLabels.push({ col, row, label: cell.label });\n }\n return true;\n}\n\nfunction parseConfigLine(key: string, value: string, ast: MatrixAST): void {\n const k = key.trim().toLowerCase();\n const v = value.trim();\n if (k === \"quadrantbg\") ast.config.quadrantBg = v === \"true\";\n else if (k === \"gridlines\") ast.config.gridLines = v === \"true\";\n else if (k === \"axisarrows\") ast.config.axisArrows = v === \"true\";\n else if (k === \"labelcollision\") ast.config.labelCollision = v.replace(/\"/g, \"\") as LabelCollisionMode;\n else if (k === \"bubblescale\") ast.config.bubbleScale = v === \"radius\" ? \"radius\" : \"area\";\n else if (k === \"quadrantannotations\") ast.config.quadrantAnnotations = v === \"true\";\n else if (k === \"legendposition\") {\n const t = v.replace(/\"/g, \"\") as MatrixConfig[\"legendPosition\"];\n ast.config.legendPosition = t;\n } else if (k === \"offchartpolicy\") {\n const t = v.replace(/\"/g, \"\") as MatrixConfig[\"offChartPolicy\"];\n ast.config.offChartPolicy = t;\n }\n}\n\nfunction parseHeader(line: string, ast: MatrixAST): MatrixTemplate | undefined {\n // `matrix eisenhower \"Week\"` / `matrix \"Title\"` / `matrix heatmap 5x5`\n const t = line.trim();\n const rest = t.slice(\"matrix\".length).trim();\n // heatmap NxM\n const heatMatch = rest.match(/^heatmap\\s+(\\d+)\\s*x\\s*(\\d+)\\s*(.*)$/i);\n if (heatMatch) {\n ast.mode = \"heatmap\";\n ast.grid = \"NxM\";\n ast.cols = Number(heatMatch[1]);\n ast.rows = Number(heatMatch[2]);\n const title = heatMatch[3]!.trim();\n if (title) ast.title = stripQuotes(title);\n return undefined;\n }\n // correlation [NxM] \"title\" — rows/cols come from rows:/cols: directive if not here\n const corrMatch = rest.match(/^correlation\\s*(?:(\\d+)\\s*x\\s*(\\d+))?\\s*(.*)$/i);\n if (corrMatch) {\n ast.mode = \"correlation\";\n ast.grid = \"NxM\";\n if (corrMatch[1] && corrMatch[2]) {\n ast.cols = Number(corrMatch[1]);\n ast.rows = Number(corrMatch[2]);\n }\n const title = corrMatch[3]!.trim();\n if (title) ast.title = stripQuotes(title);\n return undefined;\n }\n // template name + optional title\n const tokenMatch = rest.match(/^([a-zA-Z0-9_-]+)\\s*(.*)$/);\n if (tokenMatch) {\n const tok = tokenMatch[1]!.toLowerCase();\n const remainder = tokenMatch[2]!.trim();\n if (TEMPLATE_NAMES.has(tok)) {\n if (remainder) ast.title = stripQuotes(remainder);\n return tok as MatrixTemplate;\n }\n // treat as quoted title\n if (rest.startsWith('\"') || rest.startsWith(\"'\")) {\n ast.title = stripQuotes(rest);\n } else if (rest.length > 0) {\n ast.title = stripQuotes(rest);\n }\n }\n return undefined;\n}\n\nexport function parseMatrix(text: string): MatrixAST {\n const st: ParseState = { ast: newAST(), pointIdSeq: 0 };\n const lines = text.split(/\\r?\\n/);\n let templateName: MatrixTemplate | undefined;\n let inConfig = false;\n\n for (const raw of lines) {\n // strip trailing comments (but keep # inside quotes)\n let line = raw;\n const hashIdx = findCommentStart(line);\n if (hashIdx >= 0) line = line.slice(0, hashIdx);\n line = line.trim();\n if (!line) {\n inConfig = false;\n continue;\n }\n\n if (/^matrix\\b/i.test(line)) {\n templateName = parseHeader(line, st.ast);\n continue;\n }\n\n if (/^config\\s*:/i.test(line)) {\n inConfig = true;\n continue;\n }\n\n // config key: value (indented under `config:`)\n if (inConfig) {\n const kv = line.match(/^([a-zA-Z]+)\\s*:\\s*(.+)$/);\n if (kv) {\n parseConfigLine(kv[1]!, kv[2]!, st.ast);\n continue;\n }\n inConfig = false;\n }\n\n if (/^title\\s*:/i.test(line)) {\n st.ast.title = stripQuotes(line.replace(/^title\\s*:\\s*/i, \"\"));\n continue;\n }\n if (/^x-axis\\s*:/i.test(line)) {\n st.ast.xAxis = parseAxis(line.replace(/^x-axis\\s*:\\s*/i, \"\"));\n continue;\n }\n if (/^y-axis\\s*:/i.test(line)) {\n st.ast.yAxis = parseAxis(line.replace(/^y-axis\\s*:\\s*/i, \"\"));\n continue;\n }\n if (/^rows\\s*:/i.test(line)) {\n st.ast.rowLabels = parseNumberList(line.replace(/^rows\\s*:\\s*/i, \"\"));\n if (st.ast.mode !== \"quadrant\") st.ast.rows = st.ast.rowLabels.length;\n continue;\n }\n if (/^cols\\s*:/i.test(line)) {\n st.ast.colLabels = parseNumberList(line.replace(/^cols\\s*:\\s*/i, \"\"));\n if (st.ast.mode !== \"quadrant\") st.ast.cols = st.ast.colLabels.length;\n continue;\n }\n if (/^grid\\s*:/i.test(line)) {\n const v = line.replace(/^grid\\s*:\\s*/i, \"\").trim().toLowerCase();\n const gm = v.match(/^(\\d+)\\s*x\\s*(\\d+)$/);\n if (gm) {\n const c = Number(gm[1]);\n const r = Number(gm[2]);\n st.ast.cols = c;\n st.ast.rows = r;\n if (c === 2 && r === 2) st.ast.grid = \"2x2\";\n else if (c === 3 && r === 3) st.ast.grid = \"3x3\";\n else st.ast.grid = \"NxM\";\n }\n continue;\n }\n if (/^quadrant\\s+/i.test(line)) {\n // `quadrant Q1 \"Do First\" description: \"...\"`\n const m = line.match(/^quadrant\\s+(?:Q)?(\\d)\\s*\"([^\"]*)\"(.*)$/i);\n if (m) {\n const q = Number(m[1]) as 1 | 2 | 3 | 4;\n const rest = m[3]!.trim();\n const descMatch = rest.match(/description:\\s*\"([^\"]*)\"/i);\n const description = descMatch ? descMatch[1]! : undefined;\n if (q >= 1 && q <= 4) {\n const existing = st.ast.annotations.find((a) => a.q === q);\n if (existing) {\n existing.label = m[2]!;\n if (description) existing.description = description;\n } else {\n st.ast.annotations.push({ q, label: m[2]!, description });\n }\n }\n }\n continue;\n }\n\n if (/^axis\\s*:/i.test(line)) {\n const v = line.replace(/^axis\\s*:\\s*/i, \"\").trim().toLowerCase().replace(/\"/g, \"\");\n if (v === \"none\" || v === \"off\" || v === \"hidden\") st.ast.config.showAxis = \"off\";\n else if (v === \"on\" || v === \"show\" || v === \"visible\") st.ast.config.showAxis = \"on\";\n else st.ast.config.showAxis = \"auto\";\n continue;\n }\n\n if (/^margins\\s*:/i.test(line)) {\n const v = line.replace(/^margins\\s*:\\s*/i, \"\").trim().toLowerCase();\n st.ast.config.margins = v === \"true\" || v === \"on\" || v === \"1\";\n continue;\n }\n\n if (/^style\\s*:/i.test(line)) {\n const v = line.replace(/^style\\s*:\\s*/i, \"\").trim().toLowerCase().replace(/\"/g, \"\");\n if (v === \"table\") {\n st.ast.config.showAxis = \"off\";\n st.ast.config.axisArrows = false;\n st.ast.config.gridLines = false;\n st.ast.config.quadrantAnnotations = false;\n st.ast.style = \"table\";\n }\n continue;\n }\n\n if (/^cell\\s*\\(/i.test(line)) {\n parseCellLine(line, st);\n continue;\n }\n\n // `Q1: \"label\"` shorthand for 2×2 cellLabel (Q1=TR, Q2=TL, Q3=BL, Q4=BR)\n const qShort = line.match(/^q([1-4])\\s*:\\s*(.+)$/i);\n if (qShort) {\n const q = Number(qShort[1]) as 1 | 2 | 3 | 4;\n const labelRaw = qShort[2]!.trim();\n const label = stripQuotes(labelRaw);\n const cell = quadrantToCell(q);\n st.ast.cellLabels.push({ col: cell.col, row: cell.row, label });\n continue;\n }\n\n // point line (starts with a quote)\n if (line.startsWith('\"') || line.startsWith(\"'\")) {\n if (parsePointLine(line, st)) continue;\n }\n }\n\n // Apply template defaults last (so explicit x-axis/y-axis override template)\n if (templateName) {\n const spec = resolveTemplate(templateName);\n if (spec) {\n applyTemplateDefaults(st.ast, spec);\n st.ast.template = templateName;\n }\n }\n\n // Promote 3x3 / NxM where cols/rows already say so but grid wasn't set\n if (st.ast.cols === 3 && st.ast.rows === 3 && st.ast.grid !== \"NxM\") {\n st.ast.grid = \"3x3\";\n }\n if (st.ast.mode === \"heatmap\" || st.ast.mode === \"correlation\") st.ast.grid = \"NxM\";\n\n return st.ast;\n}\n\nfunction findCommentStart(line: string): number {\n let inQuote: string | null = null;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i]!;\n if (inQuote) {\n if (ch === inQuote) inQuote = null;\n } else if (ch === '\"' || ch === \"'\") {\n inQuote = ch;\n } else if (ch === \"#\") {\n return i;\n }\n }\n return -1;\n}\n\n// also export for testing\nexport { DEFAULT_CONFIG };\n","import type { MatrixAST, MatrixPoint } from \"./types\";\n\nexport interface PlotBox {\n x0: number;\n y0: number;\n w: number;\n h: number;\n}\n\nexport interface PointLayout {\n point: MatrixPoint;\n /** Center px */\n px: number;\n py: number;\n /** Bubble radius px */\n r: number;\n /** Estimated label bbox */\n label: LabelLayout;\n}\n\nexport interface LabelLayout {\n text: string;\n /** anchor pos (where the leader line starts if external) */\n ax: number;\n ay: number;\n /** label center pos */\n lx: number;\n ly: number;\n width: number;\n height: number;\n external: boolean;\n textAnchor: \"start\" | \"middle\" | \"end\";\n}\n\nexport interface MatrixLayoutResult {\n canvasWidth: number;\n canvasHeight: number;\n plot: PlotBox;\n points: PointLayout[];\n categories: string[];\n}\n\nconst CANVAS_W = 720;\nconst CANVAS_H = 560;\nconst PADDING_X = 110;\nconst PADDING_Y = 90;\nconst CHAR_W = 6.2;\nconst LABEL_H = 14;\n\nfunction estimateWidth(text: string): number {\n // crude monospace-ish estimate — wider for CJK handled trivially\n const cjk = (text.match(/[\\u3000-\\u9fff]/g) ?? []).length;\n return (text.length - cjk) * CHAR_W + cjk * 12 + 8;\n}\n\nfunction clamp01(v: number): number {\n return Math.max(0.02, Math.min(0.98, v));\n}\n\nfunction placePoint(p: MatrixPoint, plot: PlotBox): { px: number; py: number } {\n const nx = clamp01(p.x);\n const ny = clamp01(p.y);\n const px = plot.x0 + nx * plot.w;\n const py = plot.y0 + (1 - ny) * plot.h;\n return { px, py };\n}\n\nfunction computeRadius(p: MatrixPoint, maxSize: number, plot: PlotBox, scale: \"area\" | \"radius\"): number {\n if (p.size === undefined) return 6;\n const maxRadius = Math.max(14, plot.h * 0.08);\n const minRadius = 4;\n if (maxSize <= 0) return 6;\n const ratio = p.size / maxSize;\n if (scale === \"radius\") {\n return Math.max(minRadius, ratio * maxRadius);\n }\n // area-proportional (Tufte)\n const maxArea = Math.PI * maxRadius * maxRadius;\n const area = ratio * maxArea;\n const r = Math.sqrt(area / Math.PI);\n return Math.max(minRadius, r);\n}\n\n/**\n * Force-based label collision avoidance.\n * Starts each label offset NE of its point; iterates pushing overlapping\n * bboxes apart. If a label ends up far from its point, switches it to\n * external + leader line.\n */\nfunction resolveLabelCollisions(\n points: PointLayout[],\n plot: PlotBox,\n mode: \"auto\" | \"offset-only\" | \"leader-only\" | \"off\"\n): void {\n if (mode === \"off\") {\n for (const p of points) {\n p.label.lx = p.px + p.r + 4 + p.label.width / 2;\n p.label.ly = p.py - p.r - 4;\n }\n return;\n }\n\n // init anchor\n for (const p of points) {\n p.label.ax = p.px;\n p.label.ay = p.py;\n p.label.lx = p.px + p.r + 4 + p.label.width / 2;\n p.label.ly = p.py - p.r - 4;\n p.label.external = false;\n p.label.textAnchor = \"middle\";\n }\n\n if (mode === \"leader-only\") {\n // force all to leader mode immediately\n for (const p of points) {\n p.label.external = true;\n p.label.lx = p.px + p.r + 12 + p.label.width / 2;\n p.label.ly = p.py;\n p.label.textAnchor = \"middle\";\n }\n return;\n }\n\n const PAD = 3;\n for (let iter = 0; iter < 30; iter++) {\n let moved = false;\n for (let i = 0; i < points.length; i++) {\n for (let j = i + 1; j < points.length; j++) {\n const a = points[i]!.label;\n const b = points[j]!.label;\n const ax0 = a.lx - a.width / 2 - PAD;\n const ax1 = a.lx + a.width / 2 + PAD;\n const ay0 = a.ly - a.height / 2 - PAD;\n const ay1 = a.ly + a.height / 2 + PAD;\n const bx0 = b.lx - b.width / 2 - PAD;\n const bx1 = b.lx + b.width / 2 + PAD;\n const by0 = b.ly - b.height / 2 - PAD;\n const by1 = b.ly + b.height / 2 + PAD;\n const overlapX = Math.min(ax1, bx1) - Math.max(ax0, bx0);\n const overlapY = Math.min(ay1, by1) - Math.max(ay0, by0);\n if (overlapX > 0 && overlapY > 0) {\n // push along y (smaller dimension usually), then x\n const dx = (a.lx - b.lx) || 0.1;\n const dy = (a.ly - b.ly) || 0.1;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const step = Math.min(3, Math.min(overlapX, overlapY) / 2 + 0.5);\n a.lx += ux * step;\n a.ly += uy * step;\n b.lx -= ux * step;\n b.ly -= uy * step;\n moved = true;\n }\n }\n // keep label within plot bounds\n const lb = points[i]!.label;\n if (lb.lx - lb.width / 2 < plot.x0 + 2) lb.lx = plot.x0 + 2 + lb.width / 2;\n if (lb.lx + lb.width / 2 > plot.x0 + plot.w - 2) lb.lx = plot.x0 + plot.w - 2 - lb.width / 2;\n if (lb.ly - lb.height / 2 < plot.y0 + 2) lb.ly = plot.y0 + 2 + lb.height / 2;\n if (lb.ly + lb.height / 2 > plot.y0 + plot.h - 2) lb.ly = plot.y0 + plot.h - 2 - lb.height / 2;\n }\n if (!moved) break;\n }\n\n // Upgrade to leader line if drift is too large\n if (mode === \"auto\") {\n for (const p of points) {\n const dx = p.label.lx - p.px;\n const dy = p.label.ly - p.py;\n if (Math.hypot(dx, dy) > 40) {\n p.label.external = true;\n }\n }\n }\n}\n\nexport function layoutMatrix(ast: MatrixAST): MatrixLayoutResult {\n const canvasWidth = CANVAS_W;\n const canvasHeight = CANVAS_H;\n const plot: PlotBox = {\n x0: PADDING_X,\n y0: PADDING_Y - 30,\n w: canvasWidth - PADDING_X * 2,\n h: canvasHeight - PADDING_Y * 2,\n };\n\n const points: PointLayout[] = [];\n const categoriesSet = new Set<string>();\n\n if (ast.mode === \"quadrant\") {\n // Determine max size for bubble scaling\n let maxSize = 0;\n for (const p of ast.points) {\n if (p.size !== undefined && p.size > maxSize) maxSize = p.size;\n }\n\n for (const p of ast.points) {\n const { px, py } = placePoint(p, plot);\n const r = computeRadius(p, maxSize, plot, ast.config.bubbleScale);\n const width = estimateWidth(p.label);\n const label: LabelLayout = {\n text: p.label,\n ax: px,\n ay: py,\n lx: px + r + 4 + width / 2,\n ly: py - r - 4,\n width,\n height: LABEL_H,\n external: false,\n textAnchor: \"middle\",\n };\n points.push({ point: p, px, py, r, label });\n if (p.category) categoriesSet.add(p.category);\n }\n\n resolveLabelCollisions(points, plot, ast.config.labelCollision);\n }\n\n return {\n canvasWidth,\n canvasHeight,\n plot,\n points,\n categories: [...categoriesSet],\n };\n}\n","import type { MatrixAST, MatrixPoint } from \"./types\";\nimport { parseMatrix } from \"./parser\";\nimport { layoutMatrix, type MatrixLayoutResult, type PointLayout } from \"./layout\";\nimport {\n svgRoot,\n group,\n rect,\n circle,\n line as lineEl,\n text as textEl,\n title as titleEl,\n desc as descEl,\n polygon,\n defs,\n el,\n escapeXml,\n} from \"../../core/svg\";\n\n// Category palette (colorblind-friendly set)\nconst CATEGORY_COLORS = [\n \"#2563eb\", \"#16a34a\", \"#dc2626\", \"#9333ea\",\n \"#ea580c\", \"#0891b2\", \"#ca8a04\", \"#db2777\",\n];\n\nconst QUADRANT_TINTS: [string, string, string, string] = [\n // Q1 TR, Q2 TL, Q3 BL, Q4 BR\n \"#dbeafe\", \"#dcfce7\", \"#f3f4f6\", \"#fed7aa\",\n];\n\nconst HEAT_RAMP = [\n \"#f0fdf4\", \"#bbf7d0\", \"#fde68a\", \"#fdba74\", \"#f87171\", \"#ef4444\", \"#b91c1c\",\n];\n\nconst CSS = `\n.sx-matrix { font-family: system-ui, -apple-system, \"Segoe UI\", sans-serif; }\n.sx-matrix-title { font: 600 16px sans-serif; fill: #111; }\n.sx-matrix-grid { stroke: #e5e7eb; stroke-width: 1; fill: none; }\n.sx-matrix-mid { stroke: #9ca3af; stroke-width: 1.2; stroke-dasharray: 4 3; fill: none; }\n.sx-matrix-plot-border { stroke: #374151; stroke-width: 1.2; fill: none; }\n.sx-matrix-axis-label { font: 500 12px sans-serif; fill: #374151; }\n.sx-matrix-axis-end { font: 500 11px sans-serif; fill: #6b7280; }\n.sx-matrix-quad-annot { font: 600 13px sans-serif; fill: #475569; opacity: 0.75; }\n.sx-matrix-quad-desc { font: 400 10.5px sans-serif; fill: #64748b; opacity: 0.85; }\n.sx-matrix-corr-header { font: 600 11.5px sans-serif; fill: #1f2937; text-anchor: middle; }\n.sx-matrix-corr-rowlabel { font: 500 11.5px sans-serif; fill: #1f2937; text-anchor: end; dominant-baseline: central; }\n.sx-matrix-corr-margin { font: 500 11px sans-serif; fill: #374151; text-anchor: middle; dominant-baseline: central; }\n.sx-matrix-corr-margin-best { font: 700 11.5px sans-serif; fill: #111; text-anchor: middle; dominant-baseline: central; }\n.sx-matrix-corr-grid { stroke: #d1d5db; stroke-width: 0.8; fill: none; }\n.sx-matrix-corr-rowbg-a { fill: #f0fdf4; }\n.sx-matrix-corr-rowbg-b { fill: #fff; }\n.sx-matrix-cell-label { font: 500 12px sans-serif; fill: #1f2937; text-anchor: middle; }\n.sx-matrix-cell-title { font: 600 13px sans-serif; fill: #111827; }\n.sx-matrix-cell-subtitle { font: 400 11px sans-serif; fill: #6b7280; }\n.sx-matrix-cell-item { font: 500 12px sans-serif; fill: #1f2937; }\n.sx-matrix-cell-value { font: 600 18px sans-serif; fill: #111; text-anchor: middle; }\n.sx-matrix-bubble { stroke-width: 1.5; }\n.sx-matrix-label { font: 500 11px sans-serif; fill: #111827; text-anchor: middle; dominant-baseline: central; pointer-events: none; }\n.sx-matrix-leader { stroke: #94a3b8; stroke-width: 0.6; opacity: 0.7; fill: none; }\n.sx-matrix-legend-text { font: 500 11px sans-serif; fill: #374151; }\n.sx-matrix-offchart { fill: #ea580c; }\n`.trim();\n\nfunction axisArrow(): string {\n return el(\n \"marker\",\n {\n id: \"sx-matrix-arrow\",\n viewBox: \"0 0 10 10\",\n refX: 8,\n refY: 5,\n markerWidth: 8,\n markerHeight: 8,\n orient: \"auto-start-reverse\",\n },\n [el(\"path\", { d: \"M0,0 L10,5 L0,10 z\", fill: \"#374151\" })]\n );\n}\n\nfunction bubbleFill(p: MatrixPoint, categories: string[]): string {\n if (p.color) return p.color;\n if (p.category) {\n const idx = categories.indexOf(p.category);\n if (idx >= 0) return CATEGORY_COLORS[idx % CATEGORY_COLORS.length]!;\n }\n return \"#2563eb\";\n}\n\nfunction renderQuadrantBackground(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (!ast.config.quadrantBg) return \"\";\n const { plot } = lay;\n\n if (ast.grid === \"2x2\") {\n const halfW = plot.w / 2;\n const halfH = plot.h / 2;\n // Q1 TR, Q2 TL, Q3 BL, Q4 BR\n const rects = [\n { x: plot.x0 + halfW, y: plot.y0, w: halfW, h: halfH, fill: QUADRANT_TINTS[0] },\n { x: plot.x0, y: plot.y0, w: halfW, h: halfH, fill: QUADRANT_TINTS[1] },\n { x: plot.x0, y: plot.y0 + halfH, w: halfW, h: halfH, fill: QUADRANT_TINTS[2] },\n { x: plot.x0 + halfW, y: plot.y0 + halfH, w: halfW, h: halfH, fill: QUADRANT_TINTS[3] },\n ];\n return group(\n { id: \"sx-matrix-quad-bg\" },\n rects.map((r) =>\n rect({ x: r.x, y: r.y, width: r.w, height: r.h, fill: r.fill, \"fill-opacity\": 0.55 })\n )\n );\n }\n\n // 3×3 table mode: subtle diagonal heatmap (top-right green, mid yellow, bottom-left red).\n // Convention used in GE/McKinsey 9-box: anti-diagonal severity from \"stars\" → \"PIP\".\n if (ast.grid === \"3x3\" && ast.style === \"table\") {\n const cellW = plot.w / 3;\n const cellH = plot.h / 3;\n // score = col + row (0..4). 4 = top-right (best), 0 = bottom-left (worst).\n const TINT_3x3 = [\n \"#fee2e2\", // 0: red-100\n \"#fef3c7\", // 1: amber-100\n \"#fef3c7\", // 2: amber-100\n \"#dcfce7\", // 3: green-100\n \"#dcfce7\", // 4: green-100\n ];\n const cells: string[] = [];\n for (let col = 0; col < 3; col++) {\n for (let row = 0; row < 3; row++) {\n const score = col + row;\n const fill = TINT_3x3[score]!;\n const x = plot.x0 + col * cellW;\n const y = plot.y0 + (2 - row) * cellH;\n cells.push(\n rect({ x, y, width: cellW, height: cellH, fill, \"fill-opacity\": 0.6 })\n );\n }\n }\n return group({ id: \"sx-matrix-quad-bg\" }, cells);\n }\n\n return \"\";\n}\n\nfunction renderTableChrome(ast: MatrixAST, lay: MatrixLayoutResult): string {\n // Always draw grid lines + outer border in table mode (overrides gridLines:false\n // that style:table sets). Without this, cells are invisible — text floats.\n if (ast.style !== \"table\") return \"\";\n if (ast.mode !== \"quadrant\") return \"\";\n const { plot } = lay;\n const lines: string[] = [];\n for (let i = 1; i < ast.cols; i++) {\n const x = plot.x0 + (plot.w * i) / ast.cols;\n lines.push(lineEl({ x1: x, y1: plot.y0, x2: x, y2: plot.y0 + plot.h, class: \"sx-matrix-grid\" }));\n }\n for (let j = 1; j < ast.rows; j++) {\n const y = plot.y0 + (plot.h * j) / ast.rows;\n lines.push(lineEl({ x1: plot.x0, y1: y, x2: plot.x0 + plot.w, y2: y, class: \"sx-matrix-grid\" }));\n }\n lines.push(\n rect({\n x: plot.x0,\n y: plot.y0,\n width: plot.w,\n height: plot.h,\n class: \"sx-matrix-plot-border\",\n fill: \"none\",\n })\n );\n return group({ id: \"sx-matrix-table-chrome\" }, lines);\n}\n\nfunction renderGrid(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (!ast.config.gridLines) return \"\";\n if (ast.mode === \"correlation\") return \"\"; // correlation draws its own grid\n const { plot } = lay;\n const lines: string[] = [];\n const cols = ast.cols;\n const rows = ast.rows;\n for (let i = 1; i < cols; i++) {\n const x = plot.x0 + (plot.w * i) / cols;\n const cls = cols === 2 && i === 1 ? \"sx-matrix-mid\" : \"sx-matrix-grid\";\n lines.push(lineEl({ x1: x, y1: plot.y0, x2: x, y2: plot.y0 + plot.h, class: cls }));\n }\n for (let j = 1; j < rows; j++) {\n const y = plot.y0 + (plot.h * j) / rows;\n const cls = rows === 2 && j === 1 ? \"sx-matrix-mid\" : \"sx-matrix-grid\";\n lines.push(lineEl({ x1: plot.x0, y1: y, x2: plot.x0 + plot.w, y2: y, class: cls }));\n }\n // plot border\n lines.push(\n rect({\n x: plot.x0,\n y: plot.y0,\n width: plot.w,\n height: plot.h,\n class: \"sx-matrix-plot-border\",\n fill: \"none\",\n })\n );\n return group({ id: \"sx-matrix-grid\" }, lines);\n}\n\nfunction shouldShowAxis(ast: MatrixAST): boolean {\n if (ast.config.showAxis === \"on\") return true;\n if (ast.config.showAxis === \"off\") return false;\n return ast.mode === \"quadrant\";\n}\n\nfunction renderAxes(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (!shouldShowAxis(ast)) return \"\";\n const { plot } = lay;\n const els: string[] = [];\n const marker = ast.config.axisArrows ? { \"marker-end\": \"url(#sx-matrix-arrow)\" } : {};\n\n // x-axis line at bottom of plot\n const xy = plot.y0 + plot.h + 14;\n const yx = plot.x0 - 14;\n els.push(\n lineEl({\n x1: plot.x0,\n y1: xy,\n x2: plot.x0 + plot.w,\n y2: xy,\n stroke: \"#374151\",\n \"stroke-width\": 1.2,\n ...marker,\n })\n );\n els.push(\n lineEl({\n x1: yx,\n y1: plot.y0 + plot.h,\n x2: yx,\n y2: plot.y0,\n stroke: \"#374151\",\n \"stroke-width\": 1.2,\n ...marker,\n })\n );\n\n // x-axis end labels\n if (ast.xAxis.low) {\n els.push(\n textEl(\n { x: plot.x0, y: xy + 20, class: \"sx-matrix-axis-end\", \"text-anchor\": \"start\" },\n ast.xAxis.low\n )\n );\n }\n if (ast.xAxis.high) {\n els.push(\n textEl(\n { x: plot.x0 + plot.w, y: xy + 20, class: \"sx-matrix-axis-end\", \"text-anchor\": \"end\" },\n ast.xAxis.high\n )\n );\n }\n // y-axis end labels (rotated)\n if (ast.yAxis.low) {\n els.push(\n textEl(\n {\n x: yx - 24,\n y: plot.y0 + plot.h,\n class: \"sx-matrix-axis-end\",\n \"text-anchor\": \"end\",\n transform: `rotate(-90 ${yx - 24} ${plot.y0 + plot.h})`,\n },\n ast.yAxis.low\n )\n );\n }\n if (ast.yAxis.high) {\n els.push(\n textEl(\n {\n x: yx - 24,\n y: plot.y0,\n class: \"sx-matrix-axis-end\",\n \"text-anchor\": \"start\",\n transform: `rotate(-90 ${yx - 24} ${plot.y0})`,\n },\n ast.yAxis.high\n )\n );\n }\n return group({ id: \"sx-matrix-axes\" }, els);\n}\n\nfunction renderQuadAnnotations(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (!ast.config.quadrantAnnotations || ast.grid !== \"2x2\" || ast.annotations.length === 0) return \"\";\n // table style renders annotations as cell-titles inside renderCellTable\n if (ast.style === \"table\") return \"\";\n const { plot } = lay;\n const halfW = plot.w / 2;\n const halfH = plot.h / 2;\n const padding = 14;\n const positions: Record<1 | 2 | 3 | 4, { x: number; y: number; anchor: string }> = {\n 1: { x: plot.x0 + plot.w - padding, y: plot.y0 + padding + 14, anchor: \"end\" }, // TR\n 2: { x: plot.x0 + padding, y: plot.y0 + padding + 14, anchor: \"start\" }, // TL\n 3: { x: plot.x0 + padding, y: plot.y0 + plot.h - padding, anchor: \"start\" }, // BL\n 4: { x: plot.x0 + plot.w - padding, y: plot.y0 + plot.h - padding, anchor: \"end\" }, // BR\n };\n // suppress unused warnings\n void halfW;\n void halfH;\n\n const nodes: string[] = [];\n for (const a of ast.annotations) {\n const pos = positions[a.q];\n const growsUp = a.q === 3 || a.q === 4;\n const descLines = a.description ? wrapLabel(a.description, 28) : [];\n // For bottom quadrants, stack label + desc so description goes ABOVE label.\n const labelY = growsUp && descLines.length > 0 ? pos.y - descLines.length * 12 : pos.y;\n nodes.push(\n textEl(\n { x: pos.x, y: labelY, class: \"sx-matrix-quad-annot\", \"text-anchor\": pos.anchor },\n a.label\n )\n );\n for (let i = 0; i < descLines.length; i++) {\n nodes.push(\n textEl(\n {\n x: pos.x,\n y: labelY + 14 + i * 12,\n class: \"sx-matrix-quad-desc\",\n \"text-anchor\": pos.anchor,\n },\n descLines[i]!\n )\n );\n }\n }\n return group({ id: \"sx-matrix-quad-annot\" }, nodes);\n}\n\nfunction wrapLabel(text: string, maxChars: number): string[] {\n const words = text.split(/\\s+/);\n const out: string[] = [];\n let cur = \"\";\n for (const w of words) {\n if ((cur + \" \" + w).trim().length > maxChars) {\n if (cur) out.push(cur);\n cur = w;\n } else {\n cur = (cur ? cur + \" \" : \"\") + w;\n }\n }\n if (cur) out.push(cur);\n return out;\n}\n\nfunction quadrantOf(col: number, row: number, cols: number, rows: number): 1 | 2 | 3 | 4 | undefined {\n if (cols !== 2 || rows !== 2) return undefined;\n if (col === 1 && row === 1) return 1; // TR\n if (col === 0 && row === 1) return 2; // TL\n if (col === 0 && row === 0) return 3; // BL\n if (col === 1 && row === 0) return 4; // BR\n return undefined;\n}\n\nfunction renderCellLabels(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.mode !== \"quadrant\" || ast.cellLabels.length === 0) return \"\";\n if (ast.grid !== \"2x2\" && ast.grid !== \"3x3\") return \"\";\n\n const { plot } = lay;\n const cellW = plot.w / ast.cols;\n const cellH = plot.h / ast.rows;\n // Group cellLabels by (col,row) so multiple `cell (..)` lines stack as a list\n const buckets = new Map<string, string[]>();\n for (const cl of ast.cellLabels) {\n const k = `${cl.col},${cl.row}`;\n const arr = buckets.get(k) ?? [];\n arr.push(cl.label);\n buckets.set(k, arr);\n }\n\n const nodes: string[] = [];\n const maxCharsPerLine = Math.max(8, Math.floor((cellW - 24) / 6.6));\n const tableMode = ast.style === \"table\";\n\n // In table mode, also render cell titles for annotated quadrants that have NO items —\n // gives the canonical \"Eisenhower 4-quadrant grid\" feel even with sparse data.\n if (tableMode && ast.grid === \"2x2\") {\n for (const a of ast.annotations) {\n const cell = (() => {\n switch (a.q) {\n case 1: return { col: 1, row: 1 };\n case 2: return { col: 0, row: 1 };\n case 3: return { col: 0, row: 0 };\n case 4: return { col: 1, row: 0 };\n }\n })();\n const k = `${cell.col},${cell.row}`;\n if (!buckets.has(k)) buckets.set(k, []);\n }\n }\n\n for (const [k, items] of buckets) {\n const [col, row] = k.split(\",\").map(Number) as [number, number];\n const cellX = plot.x0 + cellW * col;\n const cellY = plot.y0 + cellH * (ast.rows - 1 - row);\n\n // Single label, no quadrant title → keep classic centered placement (3x3 9-box look)\n if (items.length === 1 && !tableMode) {\n const cx = cellX + cellW / 2;\n const cy = cellY + cellH / 2;\n nodes.push(textEl({ x: cx, y: cy, class: \"sx-matrix-cell-label\" }, items[0]!));\n continue;\n }\n\n // Table-style: optional cell-title (quadrant annotation) + bullet list, top-anchored\n const padX = 14;\n const padY = 14;\n let cursorY = cellY + padY + 12;\n\n if (tableMode) {\n const q = quadrantOf(col, row, ast.cols, ast.rows);\n const annot = q ? ast.annotations.find((a) => a.q === q) : undefined;\n if (annot) {\n nodes.push(\n textEl(\n { x: cellX + cellW / 2, y: cursorY, class: \"sx-matrix-cell-title\", \"text-anchor\": \"middle\" },\n annot.label,\n ),\n );\n cursorY += 22;\n if (annot.description) {\n const descLines = wrapLabel(annot.description, Math.max(12, maxCharsPerLine));\n for (const dl of descLines) {\n nodes.push(\n textEl(\n { x: cellX + cellW / 2, y: cursorY, class: \"sx-matrix-cell-subtitle\", \"text-anchor\": \"middle\" },\n dl,\n ),\n );\n cursorY += 13;\n }\n cursorY += 4;\n }\n }\n }\n\n for (const item of items) {\n const lines = wrapLabel(item, maxCharsPerLine);\n for (let i = 0; i < lines.length; i++) {\n const prefix = tableMode ? (i === 0 ? \"• \" : \" \") : \"\";\n nodes.push(\n textEl(\n { x: cellX + padX, y: cursorY, class: \"sx-matrix-cell-item\", \"text-anchor\": \"start\" },\n prefix + lines[i]!,\n ),\n );\n cursorY += 16;\n }\n }\n }\n\n return group({ id: \"sx-matrix-cell-labels\" }, nodes);\n}\n\nfunction renderHeatmap(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.mode !== \"heatmap\") return \"\";\n const { plot } = lay;\n const cellW = plot.w / ast.cols;\n const cellH = plot.h / ast.rows;\n const maxVal = Math.max(\n 1,\n ...ast.cells.map((c) => c.value ?? (c.col + 1) * (c.row + 1))\n );\n\n const cells: string[] = [];\n\n // Color every cell in the grid (use cell.value if set, else derived product)\n for (let col = 0; col < ast.cols; col++) {\n for (let row = 0; row < ast.rows; row++) {\n const found = ast.cells.find((c) => c.col === col && c.row === row);\n const value = found?.value ?? (col + 1) * (row + 1);\n const ratio = Math.min(1, value / maxVal);\n const idx = Math.min(HEAT_RAMP.length - 1, Math.floor(ratio * HEAT_RAMP.length));\n const color = HEAT_RAMP[idx]!;\n const x = plot.x0 + col * cellW;\n const y = plot.y0 + (ast.rows - 1 - row) * cellH;\n cells.push(\n rect({\n x,\n y,\n width: cellW,\n height: cellH,\n fill: color,\n stroke: \"#fff\",\n \"stroke-width\": 2,\n })\n );\n }\n }\n\n // Row labels (outside plot, left side)\n if (ast.rowLabels) {\n for (let row = 0; row < ast.rows; row++) {\n const lbl = ast.rowLabels[row];\n if (!lbl) continue;\n const y = plot.y0 + (ast.rows - 1 - row + 0.5) * cellH;\n cells.push(\n textEl(\n {\n x: plot.x0 - 8,\n y,\n class: \"sx-matrix-axis-end\",\n \"text-anchor\": \"end\",\n \"dominant-baseline\": \"central\",\n },\n lbl\n )\n );\n }\n }\n // Col labels (bottom)\n if (ast.colLabels) {\n for (let col = 0; col < ast.cols; col++) {\n const lbl = ast.colLabels[col];\n if (!lbl) continue;\n const x = plot.x0 + (col + 0.5) * cellW;\n cells.push(\n textEl(\n {\n x,\n y: plot.y0 + plot.h + 16,\n class: \"sx-matrix-axis-end\",\n \"text-anchor\": \"middle\",\n },\n lbl\n )\n );\n }\n }\n\n // Cell labels\n for (const cl of ast.cellLabels) {\n const cx = plot.x0 + cellW * (cl.col + 0.5);\n const cy = plot.y0 + cellH * (ast.rows - 1 - cl.row + 0.5);\n // wrap labels\n const words = cl.label.split(/\\s+/);\n const lines: string[] = [];\n let cur = \"\";\n for (const w of words) {\n if ((cur + \" \" + w).trim().length > 14) {\n if (cur) lines.push(cur);\n cur = w;\n } else {\n cur = (cur ? cur + \" \" : \"\") + w;\n }\n }\n if (cur) lines.push(cur);\n const lineH = 13;\n const startY = cy - ((lines.length - 1) * lineH) / 2;\n for (let i = 0; i < lines.length; i++) {\n cells.push(\n textEl(\n {\n x: cx,\n y: startY + i * lineH,\n class: \"sx-matrix-cell-label\",\n \"dominant-baseline\": \"central\",\n },\n lines[i]!\n )\n );\n }\n }\n\n return group({ id: \"sx-matrix-heatmap\" }, cells);\n}\n\nconst DOT_COLORS: Record<\"strong\" | \"medium\" | \"weak\", string> = {\n strong: \"#16a34a\",\n medium: \"#86efac\",\n weak: \"#9ca3af\",\n};\n\nfunction levelFromValue(v: number): \"strong\" | \"medium\" | \"weak\" {\n if (v >= 3) return \"strong\";\n if (v >= 2) return \"medium\";\n return \"weak\";\n}\n\nfunction renderCorrelation(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.mode !== \"correlation\") return \"\";\n const { plot } = lay;\n const marginCols = ast.config.margins ? 2 : 0; // Score, Rank\n const marginRows = ast.config.margins ? 2 : 0;\n const cellW = plot.w / (ast.cols + marginCols);\n const cellH = plot.h / (ast.rows + marginRows);\n const gridW = cellW * ast.cols;\n const gridH = cellH * ast.rows;\n const nodes: string[] = [];\n\n // alternating row-band backgrounds for readability (image-1 style)\n for (let row = 0; row < ast.rows; row++) {\n const y = plot.y0 + (ast.rows - 1 - row) * cellH;\n nodes.push(\n rect({\n x: plot.x0,\n y,\n width: gridW,\n height: cellH,\n class: row % 2 === 0 ? \"sx-matrix-corr-rowbg-a\" : \"sx-matrix-corr-rowbg-b\",\n })\n );\n }\n\n // grid lines\n for (let i = 0; i <= ast.cols; i++) {\n const x = plot.x0 + i * cellW;\n nodes.push(lineEl({ x1: x, y1: plot.y0, x2: x, y2: plot.y0 + gridH, class: \"sx-matrix-corr-grid\" }));\n }\n for (let j = 0; j <= ast.rows; j++) {\n const y = plot.y0 + j * cellH;\n nodes.push(lineEl({ x1: plot.x0, y1: y, x2: plot.x0 + gridW, y2: y, class: \"sx-matrix-corr-grid\" }));\n }\n\n // dots\n const dotR = Math.max(4, Math.min(cellW, cellH) * 0.28);\n const rowSums = new Array(ast.rows).fill(0);\n const colSums = new Array(ast.cols).fill(0);\n for (const c of ast.cells) {\n if (c.col < 0 || c.col >= ast.cols || c.row < 0 || c.row >= ast.rows) continue;\n const v = c.value ?? (c.level ? (c.level === \"strong\" ? 3 : c.level === \"medium\" ? 2 : 1) : 0);\n if (v <= 0) continue;\n rowSums[c.row] += v;\n colSums[c.col] += v;\n const lvl = c.level ?? levelFromValue(v);\n const cx = plot.x0 + (c.col + 0.5) * cellW;\n const cy = plot.y0 + (ast.rows - 1 - c.row + 0.5) * cellH;\n nodes.push(\n circle({\n cx,\n cy,\n r: dotR,\n fill: DOT_COLORS[lvl],\n stroke: DOT_COLORS[lvl],\n \"stroke-width\": 1,\n })\n );\n }\n\n // col headers (top)\n if (ast.colLabels) {\n for (let col = 0; col < ast.cols; col++) {\n const label = ast.colLabels[col];\n if (!label) continue;\n const cx = plot.x0 + (col + 0.5) * cellW;\n const lines = wrapLabel(label, 10);\n const startY = plot.y0 - 8 - (lines.length - 1) * 12;\n for (let i = 0; i < lines.length; i++) {\n nodes.push(\n textEl(\n { x: cx, y: startY + i * 12, class: \"sx-matrix-corr-header\" },\n lines[i]!\n )\n );\n }\n }\n }\n\n // row labels (left)\n if (ast.rowLabels) {\n for (let row = 0; row < ast.rows; row++) {\n const label = ast.rowLabels[row];\n if (!label) continue;\n const y = plot.y0 + (ast.rows - 1 - row + 0.5) * cellH;\n nodes.push(\n textEl({ x: plot.x0 - 8, y, class: \"sx-matrix-corr-rowlabel\" }, label)\n );\n }\n }\n\n if (ast.config.margins) {\n // compute ranks (1 = highest)\n const rowRanks = rankOf(rowSums);\n const colRanks = rankOf(colSums);\n const bestRow = rowSums.length > 0 ? Math.max(...rowSums) : 0;\n const bestCol = colSums.length > 0 ? Math.max(...colSums) : 0;\n\n // right: Score col + Rank col\n const scoreColX = plot.x0 + gridW + cellW * 0.5;\n const rankColX = plot.x0 + gridW + cellW * 1.5;\n nodes.push(textEl({ x: scoreColX, y: plot.y0 - 8, class: \"sx-matrix-corr-header\" }, \"Score\"));\n nodes.push(textEl({ x: rankColX, y: plot.y0 - 8, class: \"sx-matrix-corr-header\" }, \"Rank\"));\n for (let row = 0; row < ast.rows; row++) {\n const y = plot.y0 + (ast.rows - 1 - row + 0.5) * cellH;\n const sum = rowSums[row];\n const rank = rowRanks[row];\n const cls = sum === bestRow && sum > 0\n ? \"sx-matrix-corr-margin-best\"\n : \"sx-matrix-corr-margin\";\n nodes.push(textEl({ x: scoreColX, y, class: cls }, String(sum)));\n nodes.push(\n textEl({ x: rankColX, y, class: rank === 1 ? \"sx-matrix-corr-margin-best\" : \"sx-matrix-corr-margin\" }, String(rank))\n );\n }\n // bottom: Score row + Rank row\n const scoreRowY = plot.y0 + gridH + cellH * 0.5;\n const rankRowY = plot.y0 + gridH + cellH * 1.5;\n nodes.push(\n textEl(\n { x: plot.x0 - 8, y: scoreRowY, class: \"sx-matrix-corr-rowlabel\" },\n \"Score\"\n )\n );\n nodes.push(\n textEl(\n { x: plot.x0 - 8, y: rankRowY, class: \"sx-matrix-corr-rowlabel\" },\n \"Rank\"\n )\n );\n for (let col = 0; col < ast.cols; col++) {\n const cx = plot.x0 + (col + 0.5) * cellW;\n const sum = colSums[col];\n const rank = colRanks[col];\n nodes.push(\n textEl(\n {\n x: cx,\n y: scoreRowY,\n class: sum === bestCol && sum > 0 ? \"sx-matrix-corr-margin-best\" : \"sx-matrix-corr-margin\",\n },\n String(sum)\n )\n );\n nodes.push(\n textEl(\n {\n x: cx,\n y: rankRowY,\n class: rank === 1 ? \"sx-matrix-corr-margin-best\" : \"sx-matrix-corr-margin\",\n },\n String(rank)\n )\n );\n }\n }\n\n return group({ id: \"sx-matrix-correlation\" }, nodes);\n}\n\nfunction rankOf(vals: number[]): number[] {\n const sorted = [...vals].map((v, i) => ({ v, i })).sort((a, b) => b.v - a.v);\n const ranks = new Array(vals.length).fill(0);\n let prev = -Infinity;\n let rank = 0;\n let seen = 0;\n for (const e of sorted) {\n seen++;\n if (e.v !== prev) {\n rank = seen;\n prev = e.v;\n }\n ranks[e.i] = rank;\n }\n return ranks;\n}\n\nfunction renderCorrelationLegend(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.mode !== \"correlation\") return \"\";\n const xBase = lay.plot.x0 + lay.plot.w + 20;\n const yBase = lay.plot.y0 + 8;\n const items: Array<[\"strong\" | \"medium\" | \"weak\", string]> = [\n [\"strong\", \"Strong (3)\"],\n [\"medium\", \"Medium (2)\"],\n [\"weak\", \"Weak (1)\"],\n ];\n const rows = items.map((it, i) =>\n group({ transform: `translate(${xBase}, ${yBase + i * 18})` }, [\n circle({ cx: 6, cy: 6, r: 5, fill: DOT_COLORS[it[0]], stroke: DOT_COLORS[it[0]] }),\n textEl({ x: 18, y: 10, class: \"sx-matrix-legend-text\" }, it[1]),\n ])\n );\n return group({ id: \"sx-matrix-corr-legend\" }, rows);\n}\n\nfunction renderPoints(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.mode !== \"quadrant\") return \"\";\n const nodes: string[] = [];\n for (const p of lay.points) {\n nodes.push(renderOnePoint(p, lay.categories));\n }\n return group({ id: \"sx-matrix-points\" }, nodes);\n}\n\nfunction renderOnePoint(pl: PointLayout, categories: string[]): string {\n const p = pl.point;\n const color = bubbleFill(p, categories);\n const shape = p.shape ?? \"circle\";\n let shapeEl: string;\n const stroke = p.highlight ? \"#111\" : color;\n const strokeWidth = p.highlight ? 2.2 : 1.5;\n const fillOpacity = p.size !== undefined ? 0.45 : 0.75;\n if (shape === \"circle\") {\n shapeEl = circle({\n cx: pl.px,\n cy: pl.py,\n r: pl.r,\n fill: color,\n \"fill-opacity\": fillOpacity,\n stroke,\n \"stroke-width\": strokeWidth,\n class: \"sx-matrix-bubble\",\n });\n } else if (shape === \"square\") {\n shapeEl = rect({\n x: pl.px - pl.r,\n y: pl.py - pl.r,\n width: pl.r * 2,\n height: pl.r * 2,\n fill: color,\n \"fill-opacity\": fillOpacity,\n stroke,\n \"stroke-width\": strokeWidth,\n class: \"sx-matrix-bubble\",\n });\n } else if (shape === \"diamond\") {\n const r = pl.r;\n shapeEl = polygon({\n points: `${pl.px},${pl.py - r} ${pl.px + r},${pl.py} ${pl.px},${pl.py + r} ${pl.px - r},${pl.py}`,\n fill: color,\n \"fill-opacity\": fillOpacity,\n stroke,\n \"stroke-width\": strokeWidth,\n class: \"sx-matrix-bubble\",\n });\n } else {\n // triangle\n const r = pl.r;\n shapeEl = polygon({\n points: `${pl.px},${pl.py - r} ${pl.px + r},${pl.py + r * 0.8} ${pl.px - r},${pl.py + r * 0.8}`,\n fill: color,\n \"fill-opacity\": fillOpacity,\n stroke,\n \"stroke-width\": strokeWidth,\n class: \"sx-matrix-bubble\",\n });\n }\n\n const leader = pl.label.external\n ? lineEl({\n x1: pl.px,\n y1: pl.py,\n x2: pl.label.lx,\n y2: pl.label.ly,\n class: \"sx-matrix-leader\",\n })\n : \"\";\n\n const label = textEl(\n { x: pl.label.lx, y: pl.label.ly, class: \"sx-matrix-label\" },\n pl.label.text\n );\n\n // off-chart badge\n let badge = \"\";\n if (p.offChart) {\n const bx = pl.px;\n const by = pl.py;\n badge = textEl(\n { x: bx + pl.r + 4, y: by - pl.r - 2, class: \"sx-matrix-offchart\", \"font-size\": 14, \"font-weight\": 700 },\n \"↗\"\n );\n }\n\n const titleStr = p.note\n ? `${p.label} · (${p.origX ?? p.x}, ${p.origY ?? p.y}) — ${p.note}`\n : `${p.label} · (${(p.origX ?? p.x).toFixed(2)}, ${(p.origY ?? p.y).toFixed(2)})${p.size !== undefined ? ` · size ${p.size}` : \"\"}`;\n\n return group(\n {\n class: \"sx-matrix-point\",\n \"data-point-id\": p.id,\n \"data-label\": p.label,\n ...(p.category ? { \"data-category\": p.category } : {}),\n },\n [titleEl(titleStr), shapeEl, leader, label, badge].filter((s) => s.length > 0)\n );\n}\n\nfunction renderLegend(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.config.legendPosition === \"none\") return \"\";\n if (ast.mode === \"heatmap\") {\n // color ramp\n const x = lay.plot.x0 + lay.plot.w - 220;\n const y = lay.plot.y0 + lay.plot.h + 40;\n const w = 210;\n const h = 10;\n const stops = HEAT_RAMP.map((c, i) =>\n el(\"stop\", { offset: `${(i / (HEAT_RAMP.length - 1)) * 100}%`, \"stop-color\": c })\n );\n const grad = el(\n \"linearGradient\",\n { id: \"sx-matrix-heatgrad\", x1: \"0%\", x2: \"100%\" },\n stops\n );\n return group({ id: \"sx-matrix-legend\" }, [\n el(\"defs\", {}, [grad]),\n rect({ x, y, width: w, height: h, fill: \"url(#sx-matrix-heatgrad)\", stroke: \"#d1d5db\" }),\n textEl({ x, y: y - 4, class: \"sx-matrix-legend-text\", \"text-anchor\": \"start\" }, \"Low\"),\n textEl(\n { x: x + w, y: y - 4, class: \"sx-matrix-legend-text\", \"text-anchor\": \"end\" },\n \"High\"\n ),\n ]);\n }\n if (lay.categories.length === 0) return \"\";\n const xBase = lay.plot.x0 + lay.plot.w + 12;\n const yBase = lay.plot.y0 + 8;\n const rows: string[] = lay.categories.map((cat, i) => {\n const color = CATEGORY_COLORS[i % CATEGORY_COLORS.length]!;\n return group({ transform: `translate(${xBase}, ${yBase + i * 18})` }, [\n circle({ cx: 6, cy: 6, r: 5, fill: color, \"fill-opacity\": 0.7, stroke: color }),\n textEl({ x: 18, y: 10, class: \"sx-matrix-legend-text\" }, cat),\n ]);\n });\n return group({ id: \"sx-matrix-legend\" }, rows);\n}\n\nfunction renderTitle(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (!ast.title) return \"\";\n return textEl(\n { x: lay.canvasWidth / 2, y: 28, class: \"sx-matrix-title\", \"text-anchor\": \"middle\" },\n ast.title\n );\n}\n\nexport function renderMatrixAST(ast: MatrixAST): string {\n const lay = layoutMatrix(ast);\n const needsLegendSpace =\n lay.categories.length > 0 || ast.mode === \"correlation\";\n const extraWidth =\n needsLegendSpace && lay.plot.x0 + lay.plot.w + 140 > lay.canvasWidth ? 160 : 0;\n const canvasWidth = lay.canvasWidth + extraWidth;\n\n const body = [\n renderTitle(ast, lay),\n renderQuadrantBackground(ast, lay),\n renderGrid(ast, lay),\n renderTableChrome(ast, lay),\n renderQuadAnnotations(ast, lay),\n renderCellLabels(ast, lay),\n renderHeatmap(ast, lay),\n renderCorrelation(ast, lay),\n renderAxes(ast, lay),\n renderPoints(ast, lay),\n renderLegend(ast, lay),\n renderCorrelationLegend(ast, lay),\n ].filter((s) => s.length > 0);\n\n return svgRoot(\n {\n class: \"sx-matrix\",\n \"data-diagram-type\": \"matrix\",\n \"data-mode\": ast.mode,\n width: canvasWidth,\n height: lay.canvasHeight,\n viewBox: `0 0 ${canvasWidth} ${lay.canvasHeight}`,\n role: \"graphics-document\",\n },\n [\n titleEl(ast.title ? `Matrix — ${escapeXml(ast.title)}` : \"Matrix diagram\"),\n descEl(\n `Matrix diagram${ast.template ? ` (${ast.template} template)` : \"\"}, ${ast.mode} mode, ${ast.points.length} point(s)`\n ),\n defs([el(\"style\", {}, CSS), axisArrow()]),\n ...body,\n ]\n );\n}\n\nexport function renderMatrix(text: string): string {\n const ast = parseMatrix(text);\n return renderMatrixAST(ast);\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseMatrix } from \"./parser\";\nimport { renderMatrix } from \"./renderer\";\n\nexport const matrix: DiagramPlugin = {\n type: \"matrix\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"matrix\");\n },\n parse: parseMatrix,\n\n render(text: string): string {\n return renderMatrix(text);\n },\n};\n\nexport { parseMatrix } from \"./parser\";\nexport { renderMatrix, renderMatrixAST } from \"./renderer\";\nexport { layoutMatrix } from \"./layout\";\n","import type {\n ErdAst,\n ErdAttribute,\n ErdCardinality,\n ErdEntity,\n ErdNotation,\n ErdRef,\n} from \"../../core/types\";\n\nexport class ErdParseError extends Error {\n constructor(message: string, public lineNumber?: number) {\n super(lineNumber !== undefined ? `[line ${lineNumber}] ${message}` : message);\n this.name = \"ErdParseError\";\n }\n}\n\n// ─── Lexical helpers ──────────────────────────────────────────\n\nfunction stripComment(s: string): string {\n let out = \"\";\n let inQuote = false;\n for (let i = 0; i < s.length; i++) {\n const ch = s[i];\n if (ch === '\"') inQuote = !inQuote;\n if (!inQuote) {\n if (ch === \"/\" && s[i + 1] === \"/\") break;\n if (ch === \"#\") break;\n }\n out += ch;\n }\n return out;\n}\n\nfunction unquote(v: string): string {\n const t = v.trim();\n if (t.length >= 2 && t.startsWith('\"') && t.endsWith('\"')) return t.slice(1, -1);\n return t;\n}\n\n// ─── Cardinality tokens ───────────────────────────────────────\n\nconst NAMED_CARDS: Record<string, ErdCardinality> = {\n \"one-mandatory\": \"one-mandatory\",\n \"one-optional\": \"one-optional\",\n \"many-mandatory\": \"many-mandatory\",\n \"many-optional\": \"many-optional\",\n \"1..1\": \"one-mandatory\",\n \"0..1\": \"one-optional\",\n \"1..n\": \"many-mandatory\",\n \"0..n\": \"many-optional\",\n \"1..*\": \"many-mandatory\",\n \"0..*\": \"many-optional\",\n};\n\n/**\n * Mermaid ASCII glyph parser. Reads either a left-side or right-side glyph.\n * Left side examples: `||`, `|o`, `}o`, `}|`\n * Right side examples: `||`, `o|`, `o{`, `|{`\n */\nfunction parseMermaidGlyph(token: string, side: \"left\" | \"right\"): ErdCardinality | null {\n // Normalize to a stable key.\n const t = token.toLowerCase();\n if (side === \"left\") {\n if (t === \"||\") return \"one-mandatory\";\n if (t === \"|o\") return \"one-optional\";\n if (t === \"}|\") return \"many-mandatory\";\n if (t === \"}o\") return \"many-optional\";\n } else {\n if (t === \"||\") return \"one-mandatory\";\n if (t === \"o|\") return \"one-optional\";\n if (t === \"|{\") return \"many-mandatory\";\n if (t === \"o{\") return \"many-optional\";\n }\n return null;\n}\n\nfunction parseCardToken(raw: string, side: \"left\" | \"right\"): ErdCardinality | null {\n const tok = raw.trim().toLowerCase();\n if (!tok) return null;\n if (NAMED_CARDS[tok]) return NAMED_CARDS[tok];\n // Mermaid ASCII fallback.\n return parseMermaidGlyph(tok, side);\n}\n\n// ─── Top-level parser ─────────────────────────────────────────\n\ninterface RawLine {\n text: string;\n lineNumber: number;\n}\n\nfunction lex(text: string): RawLine[] {\n return text.split(/\\r?\\n/).map((raw, i) => ({\n text: stripComment(raw).trim(),\n lineNumber: i + 1,\n })).filter((l) => l.text.length > 0);\n}\n\nexport function parseErd(text: string): ErdAst {\n const lines = lex(text);\n if (lines.length === 0) throw new ErdParseError(\"Empty input\");\n\n // Header.\n const header = lines[0]!;\n const headerWords = header.text.split(/\\s+/);\n if (headerWords[0]?.toLowerCase() !== \"erd\") {\n throw new ErdParseError(`Expected 'erd' header, got: ${header.text}`, header.lineNumber);\n }\n\n let i = 1;\n let notation: ErdNotation = \"crowsfoot\";\n let direction: \"LR\" | \"TB\" = \"LR\";\n let title: string | undefined;\n\n // Header attribute lines (notation:, direction:, title:) — order-insensitive, before the first table/ref.\n while (i < lines.length) {\n const line = lines[i]!;\n const t = line.text;\n const lower = t.toLowerCase();\n if (lower.startsWith(\"notation:\")) {\n const v = t.slice(\"notation:\".length).trim().toLowerCase();\n if (v !== \"crowsfoot\" && v !== \"chen\" && v !== \"barker\") {\n throw new ErdParseError(`Unknown notation '${v}'. Supported: crowsfoot.`, line.lineNumber);\n }\n if (v !== \"crowsfoot\") {\n // v0.1 only renders crow's foot. Fail loudly so callers know.\n throw new ErdParseError(\n `notation '${v}' is documented but not yet implemented in v0.1; use 'crowsfoot'.`,\n line.lineNumber\n );\n }\n notation = v;\n i++;\n continue;\n }\n if (lower.startsWith(\"direction:\")) {\n const v = t.slice(\"direction:\".length).trim().toUpperCase();\n if (v !== \"LR\" && v !== \"TB\") {\n throw new ErdParseError(`Unknown direction '${v}'. Use LR or TB.`, line.lineNumber);\n }\n direction = v;\n i++;\n continue;\n }\n if (lower.startsWith(\"title:\")) {\n title = unquote(t.slice(\"title:\".length).trim());\n i++;\n continue;\n }\n break;\n }\n\n const entities: ErdEntity[] = [];\n const refs: ErdRef[] = [];\n\n while (i < lines.length) {\n const line = lines[i]!;\n const t = line.text;\n const head = t.split(/\\s+/)[0]?.toLowerCase();\n\n if (head === \"table\") {\n const consumed = parseTableBlock(lines, i, entities);\n i = consumed;\n continue;\n }\n\n if (head === \"ref\") {\n parseRefLine(t, line.lineNumber, refs);\n i++;\n continue;\n }\n\n throw new ErdParseError(`Unexpected line: ${t}`, line.lineNumber);\n }\n\n // Validate FK targets exist (warn-style: we add anyway, but reject obvious typos).\n const entityIds = new Set(entities.map((e) => e.id.toLowerCase()));\n for (const e of entities) {\n for (const a of e.attributes) {\n if (a.fkTarget) {\n const [tableName] = a.fkTarget.split(\".\");\n if (tableName && !entityIds.has(tableName.toLowerCase())) {\n throw new ErdParseError(\n `FK target table '${tableName}' (in ${e.id}.${a.name}) does not exist.`\n );\n }\n }\n }\n }\n\n return {\n type: \"erd\",\n notation,\n direction,\n title,\n entities,\n refs,\n };\n}\n\n// ─── `table` block parser ─────────────────────────────────────\n\nfunction parseTableBlock(\n lines: RawLine[],\n startIdx: number,\n outEntities: ErdEntity[]\n): number {\n const head = lines[startIdx]!;\n // Two accepted shapes:\n // table Name { (multi-line: attributes follow)\n // table Name { id int PK; email varchar UK } (single-line: ; separated)\n const inlineMatch = /^table\\s+(.+?)\\s*\\{\\s*(.*?)\\s*\\}\\s*$/i.exec(head.text);\n if (inlineMatch) {\n const declRaw = inlineMatch[1]!.trim();\n const inside = inlineMatch[2]!.trim();\n const { id, name } = splitDecl(declRaw, head.lineNumber);\n if (outEntities.some((e) => e.id === id)) {\n throw new ErdParseError(`Duplicate table id '${id}'.`, head.lineNumber);\n }\n const attributes: ErdAttribute[] = [];\n if (inside.length > 0) {\n const attrLines = inside.split(\";\").map((s) => s.trim()).filter(Boolean);\n for (const a of attrLines) {\n attributes.push(parseAttributeLine(a, head.lineNumber, id));\n }\n }\n outEntities.push({ id, name, attributes });\n return startIdx + 1;\n }\n\n const m = /^table\\s+(.+?)\\s*\\{$/i.exec(head.text);\n if (!m) {\n throw new ErdParseError(\n `Expected 'table NAME {' (with brace at end of line) or 'table NAME { ... }' inline form, got: ${head.text}`,\n head.lineNumber\n );\n }\n const declRaw = m[1]!.trim();\n const { id, name } = splitDecl(declRaw, head.lineNumber);\n\n if (outEntities.some((e) => e.id === id)) {\n throw new ErdParseError(`Duplicate table id '${id}'.`, head.lineNumber);\n }\n\n const attributes: ErdAttribute[] = [];\n let i = startIdx + 1;\n while (i < lines.length) {\n const line = lines[i]!;\n if (line.text === \"}\") {\n outEntities.push({ id, name, attributes });\n return i + 1;\n }\n const attr = parseAttributeLine(line.text, line.lineNumber, id);\n attributes.push(attr);\n i++;\n }\n throw new ErdParseError(`Unterminated table block '${id}'.`, head.lineNumber);\n}\n\nfunction splitDecl(declRaw: string, lineNumber: number): { id: string; name: string } {\n void lineNumber;\n const aliasMatch = /^\"([^\"]+)\"\\s+as\\s+([A-Za-z_][\\w]*)$/i.exec(declRaw);\n if (aliasMatch) {\n return { id: aliasMatch[2]!, name: aliasMatch[1]! };\n }\n const idOnly = declRaw.replace(/^\"|\"$/g, \"\");\n return { id: idOnly, name: idOnly };\n}\n\n/**\n * Attribute line grammar:\n * name [type] [marker]* [-> Other.col] [: \"comment\"]\n * markers ∈ {PK, FK, UK, NN, *, !}, case-insensitive\n * `*` and `!` are aliases for NOT NULL (Barker convention)\n */\nfunction parseAttributeLine(raw: string, lineNumber: number, tableId: string): ErdAttribute {\n let s = raw.trim();\n // Comment after ':' at end (only if not part of \"type\" — types do not contain ':').\n let comment: string | undefined;\n const colonIdx = findUnquotedChar(s, \":\");\n if (colonIdx >= 0) {\n comment = unquote(s.slice(colonIdx + 1).trim());\n s = s.slice(0, colonIdx).trim();\n }\n\n // FK target: ` -> Table.col` or ` => Table.col`\n let fkTarget: string | undefined;\n const arrowMatch = /\\s+(?:->|=>)\\s+([A-Za-z_][\\w]*\\.[A-Za-z_][\\w]*)\\s*$/.exec(s);\n if (arrowMatch) {\n fkTarget = arrowMatch[1];\n s = s.slice(0, arrowMatch.index).trim();\n }\n\n const tokens = s.split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) {\n throw new ErdParseError(`Empty attribute in table '${tableId}'.`, lineNumber);\n }\n\n const name = tokens[0]!;\n const rest = tokens.slice(1);\n\n const flags = { pk: false, fk: false, uk: false, nn: false };\n const typeParts: string[] = [];\n for (const tok of rest) {\n const upper = tok.toUpperCase();\n if (upper === \"PK\") flags.pk = true;\n else if (upper === \"FK\") flags.fk = true;\n else if (upper === \"UK\" || upper === \"UNIQUE\") flags.uk = true;\n else if (upper === \"NN\" || upper === \"NOT-NULL\" || upper === \"NOTNULL\") flags.nn = true;\n else if (tok === \"*\" || tok === \"!\") flags.nn = true;\n else typeParts.push(tok);\n }\n\n if (fkTarget) flags.fk = true;\n if (flags.pk) flags.nn = true; // PK implies NOT NULL.\n\n return {\n name,\n type: typeParts.length > 0 ? typeParts.join(\" \") : undefined,\n pk: flags.pk || undefined,\n fk: flags.fk || undefined,\n uk: flags.uk || undefined,\n notNull: flags.nn || undefined,\n fkTarget,\n comment,\n };\n}\n\nfunction findUnquotedChar(s: string, ch: string): number {\n let inQuote = false;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === '\"') inQuote = !inQuote;\n if (!inQuote && s[i] === ch) return i;\n }\n return -1;\n}\n\n// ─── `ref` line parser ────────────────────────────────────────\n\n/**\n * Two accepted forms:\n *\n * ref Source <leftCard> -- <rightCard> Target [: \"label\"]\n *\n * where leftCard / rightCard are named cardinalities, e.g.\n * `many-mandatory`, `one-optional`, `0..1`, `1..N`.\n *\n * ref Source <mermaidGlyph><line><mermaidGlyph> Target [: \"label\"]\n *\n * where line is `--` (identifying) or `..` (non-identifying), and\n * glyphs are Mermaid: `}o`, `}|`, `|o`, `||`, `o{`, `|{`, `o|`.\n *\n * Source / Target may be `Table` or `Table.column`.\n */\nfunction parseRefLine(raw: string, lineNumber: number, outRefs: ErdRef[]): void {\n // Strip leading 'ref'.\n let s = raw.replace(/^ref\\s+/i, \"\").trim();\n\n // Optional trailing : \"label\"\n let label: string | undefined;\n const colonIdx = findUnquotedChar(s, \":\");\n if (colonIdx >= 0) {\n label = unquote(s.slice(colonIdx + 1).trim());\n s = s.slice(0, colonIdx).trim();\n }\n\n // Try Mermaid-style: <left-glyph><line><right-glyph>\n // line is one of: --, .., ~~ (treated as non-identifying)\n const merm = /^(\\S+)\\s+([}|o][o|]|\\|\\||\\|o)(\\.\\.|--|~~)([}|o][{|]|\\|\\||o\\|)\\s+(\\S+)$/.exec(s);\n if (merm) {\n const [, src, lg, line, rg, tgt] = merm;\n const fromCard = parseMermaidGlyph(lg!, \"left\");\n const toCard = parseMermaidGlyph(rg!, \"right\");\n if (!fromCard || !toCard) {\n throw new ErdParseError(`Invalid Mermaid cardinality glyph in: ${raw}`, lineNumber);\n }\n outRefs.push({\n from: src!,\n to: tgt!,\n fromCard,\n toCard,\n identifying: line === \"--\",\n label,\n });\n return;\n }\n\n // Named-cardinality form. Split on the line-style token (-- or ..).\n // Capture left card (1+ tokens), then \"--\" or \"..\", then right card (1 token), then target.\n const named = /^(\\S+)\\s+(\\S+(?:[-_/]\\S+)*|\\d+\\.\\.\\d+|\\d+\\.\\.[Nn*])\\s+(--|\\.\\.|~~)\\s+(\\S+(?:[-_/]\\S+)*|\\d+\\.\\.\\d+|\\d+\\.\\.[Nn*])\\s+(\\S+)$/.exec(s);\n if (named) {\n const [, src, leftCard, line, rightCard, tgt] = named;\n const fromCard = parseCardToken(leftCard!, \"left\");\n const toCard = parseCardToken(rightCard!, \"right\");\n if (!fromCard) {\n throw new ErdParseError(`Unknown left cardinality '${leftCard}'.`, lineNumber);\n }\n if (!toCard) {\n throw new ErdParseError(`Unknown right cardinality '${rightCard}'.`, lineNumber);\n }\n outRefs.push({\n from: src!,\n to: tgt!,\n fromCard,\n toCard,\n identifying: line === \"--\",\n label,\n });\n return;\n }\n\n throw new ErdParseError(\n `Unrecognized ref line: ${raw}\\n` +\n `Expected: ref Source <card> -- <card> Target [: \"label\"] or Mermaid form e.g. ref A }o--|| B`,\n lineNumber\n );\n}\n","import type {\n ErdAst,\n ErdEntity,\n ErdLayoutEdge,\n ErdLayoutEntity,\n ErdLayoutResult,\n ErdLayoutRow,\n ErdRef,\n} from \"../../core/types\";\n\n// ─── Layout constants ─────────────────────────────────────────\n\nexport const ERD_CONST = {\n ENTITY_MIN_WIDTH: 180,\n ENTITY_PADDING_X: 14,\n HEADER_HEIGHT: 28,\n ROW_HEIGHT: 22,\n ROW_PAD_Y: 4,\n COL_GAP: 90,\n ROW_GAP: 56,\n PADDING: 32,\n\n HEADER_FONT_PX: 13,\n ROW_FONT_PX: 12,\n MARKER_FONT_PX: 10,\n CHAR_W_HEADER: 7.6,\n CHAR_W_ROW: 6.7,\n CHAR_W_MARKER: 6,\n TYPE_GAP: 16,\n\n GLYPH_OFFSET: 18, // distance from entity edge to glyph anchor\n GLYPH_FOOT_LEN: 10, // crow's-foot fan length\n GLYPH_BAR_HALF: 6, // bar half-length perpendicular to line\n GLYPH_CIRCLE_R: 4, // open-circle radius\n LABEL_OFFSET: 6,\n\n /** Pixels between adjacent vertical-segment x-coordinates of nearby edges\n * to keep their bend points from overlapping. */\n EDGE_BEND_STAGGER: 10,\n};\n\n// ─── Entity sizing ────────────────────────────────────────────\n\nfunction measureEntity(ent: ErdEntity): { width: number; height: number; rows: ErdLayoutRow[] } {\n const C = ERD_CONST;\n\n const headerWidth = C.ENTITY_PADDING_X * 2 + ent.name.length * C.CHAR_W_HEADER;\n\n let widest = headerWidth;\n const rows: ErdLayoutRow[] = [];\n for (let i = 0; i < ent.attributes.length; i++) {\n const a = ent.attributes[i]!;\n const namePart = a.name;\n const typePart = a.type ?? \"\";\n const markerCount =\n (a.pk ? 1 : 0) + (a.fk ? 1 : 0) + (a.uk ? 1 : 0) + (a.notNull && !a.pk ? 1 : 0);\n const markerWidth = markerCount * (C.CHAR_W_MARKER * 2.4 + 4);\n const w =\n C.ENTITY_PADDING_X * 2 +\n namePart.length * C.CHAR_W_ROW +\n (typePart ? C.TYPE_GAP + typePart.length * C.CHAR_W_ROW : 0) +\n markerWidth;\n if (w > widest) widest = w;\n\n const yCenter = C.HEADER_HEIGHT + i * C.ROW_HEIGHT + C.ROW_HEIGHT / 2;\n rows.push({ attribute: a, yCenter });\n }\n\n const width = Math.max(widest, C.ENTITY_MIN_WIDTH);\n const height = C.HEADER_HEIGHT + ent.attributes.length * C.ROW_HEIGHT + C.ROW_PAD_Y;\n return { width, height, rows };\n}\n\n// ─── Layer assignment ─────────────────────────────────────────\n\ninterface RefPair {\n from: string;\n to: string;\n}\n\nfunction buildColumnAssignment(ast: ErdAst): Map<string, number> {\n const ids = ast.entities.map((e) => e.id);\n const idToIdx = new Map(ids.map((id, i) => [id, i] as const));\n\n const pairs: RefPair[] = [];\n for (const r of ast.refs) {\n const f = parseRefSide(r.from);\n const t = parseRefSide(r.to);\n if (idToIdx.has(f.table) && idToIdx.has(t.table)) {\n const oneIsTo = isOne(r.toCard) && !isOne(r.fromCard);\n const oneIsFrom = isOne(r.fromCard) && !isOne(r.toCard);\n if (oneIsTo) pairs.push({ from: t.table, to: f.table });\n else if (oneIsFrom) pairs.push({ from: f.table, to: t.table });\n else pairs.push({ from: f.table, to: t.table });\n }\n }\n\n const layer = new Map<string, number>();\n for (const id of ids) layer.set(id, 0);\n let changed = true;\n let guard = 0;\n while (changed && guard < ids.length + 4) {\n changed = false;\n for (const p of pairs) {\n const lf = layer.get(p.from) ?? 0;\n const lt = layer.get(p.to) ?? 0;\n if (lt < lf + 1) {\n layer.set(p.to, lf + 1);\n changed = true;\n }\n }\n guard++;\n }\n return layer;\n}\n\nfunction parseRefSide(s: string): { table: string; column?: string } {\n const dot = s.indexOf(\".\");\n if (dot < 0) return { table: s };\n return { table: s.slice(0, dot), column: s.slice(dot + 1) };\n}\n\nfunction isOne(c: ErdRef[\"fromCard\"]): boolean {\n return c === \"one-mandatory\" || c === \"one-optional\";\n}\n\n// ─── Within-layer barycenter ordering ─────────────────────────\n\n/**\n * Reorder entities within each layer to reduce expected edge crossings,\n * using a multi-pass barycenter heuristic (Sugiyama phase 3). Each entity\n * is sorted by the median index of its neighbors in the adjacent layer.\n */\nfunction reorderByBarycenter(\n layerToEnts: Map<number, string[]>,\n layers: number[],\n refs: ErdRef[]\n): void {\n if (layers.length < 2) return;\n\n const neighbors = new Map<string, Set<string>>();\n for (const r of refs) {\n const a = parseRefSide(r.from).table;\n const b = parseRefSide(r.to).table;\n if (!neighbors.has(a)) neighbors.set(a, new Set());\n if (!neighbors.has(b)) neighbors.set(b, new Set());\n neighbors.get(a)!.add(b);\n neighbors.get(b)!.add(a);\n }\n\n function sweep(direction: \"down\" | \"up\"): void {\n const ordered = direction === \"down\" ? layers : [...layers].reverse();\n for (let i = 1; i < ordered.length; i++) {\n const prev = ordered[i - 1]!;\n const cur = ordered[i]!;\n const prevList = layerToEnts.get(prev)!;\n const curList = layerToEnts.get(cur)!;\n const prevIdx = new Map(prevList.map((id, idx) => [id, idx] as const));\n const baryByEnt = new Map<string, number>();\n for (let j = 0; j < curList.length; j++) {\n const id = curList[j]!;\n const ns = neighbors.get(id);\n if (!ns) {\n baryByEnt.set(id, j);\n continue;\n }\n const indices: number[] = [];\n for (const n of ns) {\n if (prevIdx.has(n)) indices.push(prevIdx.get(n)!);\n }\n if (indices.length === 0) {\n baryByEnt.set(id, j);\n } else {\n // Median is more robust than mean for graphs with hubs.\n indices.sort((x, y) => x - y);\n const m = indices.length;\n const med = m % 2 === 1\n ? indices[(m - 1) / 2]!\n : (indices[m / 2 - 1]! + indices[m / 2]!) / 2;\n baryByEnt.set(id, med);\n }\n }\n curList.sort((a, b) => {\n const da = baryByEnt.get(a) ?? 0;\n const db = baryByEnt.get(b) ?? 0;\n if (da === db) return 0;\n return da - db;\n });\n }\n }\n\n // Down-up-down typically converges for ERD-shaped graphs.\n sweep(\"down\");\n sweep(\"up\");\n sweep(\"down\");\n}\n\n// ─── Brandes-Köpf-lite y-coordinate assignment ────────────────\n\ninterface PlacedSlot {\n id: string;\n /** Top-edge y of the entity. */\n y: number;\n height: number;\n width: number;\n /** Order of the entity inside its layer. */\n layerOrder: number;\n}\n\n/**\n * For each layer (left-to-right), place entities at a y-coordinate that\n * approximates the average of their already-placed neighbors' y-centers.\n * Falls back to top-down packing with collision avoidance.\n *\n * After the forward pass we run a backward refinement pass — entities with\n * slack above (no forward-pass neighbor pulled them down) get nudged toward\n * their backward-pass barycenter target, which evens out chains where the\n * primary \"anchor\" is in a later layer.\n */\nfunction assignYCoordinates(\n orderedLayers: { layer: number; ids: string[] }[],\n measured: Map<string, { width: number; height: number }>,\n neighbors: Map<string, Set<string>>\n): Map<string, number> {\n const C = ERD_CONST;\n const placed = new Map<string, PlacedSlot>();\n\n // Forward pass.\n for (const ls of orderedLayers) {\n let prevBottom = C.PADDING - C.ROW_GAP;\n for (let i = 0; i < ls.ids.length; i++) {\n const id = ls.ids[i]!;\n const m = measured.get(id)!;\n const ns = neighbors.get(id);\n let target = C.PADDING;\n if (ns) {\n const placedNeighborCenters: number[] = [];\n for (const n of ns) {\n const p = placed.get(n);\n if (p) placedNeighborCenters.push(p.y + p.height / 2);\n }\n if (placedNeighborCenters.length > 0) {\n placedNeighborCenters.sort((a, b) => a - b);\n const k = placedNeighborCenters.length;\n const med = k % 2 === 1\n ? placedNeighborCenters[(k - 1) / 2]!\n : (placedNeighborCenters[k / 2 - 1]! + placedNeighborCenters[k / 2]!) / 2;\n target = med - m.height / 2;\n }\n }\n const y = Math.max(target, prevBottom + C.ROW_GAP);\n placed.set(id, {\n id,\n y,\n height: m.height,\n width: m.width,\n layerOrder: i,\n });\n prevBottom = y + m.height;\n }\n }\n\n // Backward refinement pass: for each layer right-to-left, try to pull\n // entities upward toward their full-graph barycenter while preserving\n // ordering and minimum spacing.\n for (let li = orderedLayers.length - 1; li >= 0; li--) {\n const ls = orderedLayers[li]!;\n let prevBottom = C.PADDING - C.ROW_GAP;\n for (let i = 0; i < ls.ids.length; i++) {\n const id = ls.ids[i]!;\n const slot = placed.get(id)!;\n const ns = neighbors.get(id);\n let target = slot.y;\n if (ns && ns.size > 0) {\n const centers: number[] = [];\n for (const n of ns) {\n const p = placed.get(n);\n if (p) centers.push(p.y + p.height / 2);\n }\n if (centers.length > 0) {\n centers.sort((a, b) => a - b);\n const k = centers.length;\n const med = k % 2 === 1\n ? centers[(k - 1) / 2]!\n : (centers[k / 2 - 1]! + centers[k / 2]!) / 2;\n target = med - slot.height / 2;\n }\n }\n // Maintain monotone non-overlap with the previous entity in this layer.\n const lower = prevBottom + C.ROW_GAP;\n // Don't move BELOW current y (forward pass already enforced that path);\n // we only relax UPWARD here so chains can pull together.\n const newY = Math.max(lower, Math.min(slot.y, target));\n slot.y = newY;\n prevBottom = newY + slot.height;\n }\n }\n\n const out = new Map<string, number>();\n for (const [id, p] of placed) out.set(id, p.y);\n return out;\n}\n\n// ─── Main layout ──────────────────────────────────────────────\n\nexport function layoutErd(ast: ErdAst): ErdLayoutResult {\n const C = ERD_CONST;\n const isLR = ast.direction === \"LR\";\n\n // Measure all entities first.\n const measured = new Map<string, { ent: ErdEntity; width: number; height: number; rows: ErdLayoutRow[] }>();\n for (const e of ast.entities) {\n const m = measureEntity(e);\n measured.set(e.id, { ent: e, ...m });\n }\n\n const layer = buildColumnAssignment(ast);\n\n // Group entities by layer.\n const layerToEnts = new Map<number, string[]>();\n for (const e of ast.entities) {\n const l = layer.get(e.id) ?? 0;\n if (!layerToEnts.has(l)) layerToEnts.set(l, []);\n layerToEnts.get(l)!.push(e.id);\n }\n const layers = Array.from(layerToEnts.keys()).sort((a, b) => a - b);\n\n // Within-layer ordering: barycenter sort to minimize expected crossings.\n reorderByBarycenter(layerToEnts, layers, ast.refs);\n\n // Build undirected neighbor map (for y-coordinate assignment).\n const neighbors = new Map<string, Set<string>>();\n for (const r of ast.refs) {\n const a = parseRefSide(r.from).table;\n const b = parseRefSide(r.to).table;\n if (!neighbors.has(a)) neighbors.set(a, new Set());\n if (!neighbors.has(b)) neighbors.set(b, new Set());\n neighbors.get(a)!.add(b);\n neighbors.get(b)!.add(a);\n }\n\n // Per-layer max width / max height (the layer occupies one column or one row).\n const layerSizes = layers.map((l) => {\n const ids = layerToEnts.get(l)!;\n return {\n layer: l,\n ids,\n maxWidth: Math.max(...ids.map((id) => measured.get(id)!.width)),\n maxHeight: Math.max(...ids.map((id) => measured.get(id)!.height)),\n };\n });\n\n // For LR: sizing dim = max width per column, ordering dim = y.\n // For TB: sizing dim = max height per row, ordering dim = x.\n // We assign the ordering coordinate using neighbor-aware barycenter targets.\n // The \"measured\" map for assignYCoordinates needs the right (ordering, sizing) pair.\n const orderedLayers = layerSizes.map((ls) => ({ layer: ls.layer, ids: ls.ids }));\n\n // For y-assignment in LR mode (and x-assignment in TB mode), we need\n // entity height when packing y, entity width when packing x.\n const measureForOrdering = new Map<string, { width: number; height: number }>();\n if (isLR) {\n for (const [id, m] of measured) {\n measureForOrdering.set(id, { width: m.width, height: m.height });\n }\n } else {\n // Swap so the algorithm's \"height\" is treated as the entity's width\n // (the dimension we pack along the x axis).\n for (const [id, m] of measured) {\n measureForOrdering.set(id, { width: m.height, height: m.width });\n }\n }\n const orderingCoord = assignYCoordinates(orderedLayers, measureForOrdering, neighbors);\n\n const placed: ErdLayoutEntity[] = [];\n\n if (isLR) {\n let cursorX = C.PADDING;\n for (const ls of layerSizes) {\n for (const id of ls.ids) {\n const m = measured.get(id)!;\n const x = cursorX + (ls.maxWidth - m.width) / 2;\n const y = orderingCoord.get(id) ?? C.PADDING;\n placed.push({\n entity: m.ent,\n x,\n y,\n width: m.width,\n height: m.height,\n headerHeight: C.HEADER_HEIGHT,\n rows: m.rows,\n });\n }\n cursorX += ls.maxWidth + C.COL_GAP;\n }\n } else {\n let cursorY = C.PADDING;\n for (const ls of layerSizes) {\n for (const id of ls.ids) {\n const m = measured.get(id)!;\n // In TB mode, the ordering coord IS x (we swapped width/height above).\n const x = orderingCoord.get(id) ?? C.PADDING;\n const y = cursorY + (ls.maxHeight - m.height) / 2;\n placed.push({\n entity: m.ent,\n x,\n y,\n width: m.width,\n height: m.height,\n headerHeight: C.HEADER_HEIGHT,\n rows: m.rows,\n });\n }\n cursorY += ls.maxHeight + C.ROW_GAP;\n }\n }\n\n // Compute overall bounds.\n let maxX = 0;\n let maxY = 0;\n for (const e of placed) {\n if (e.x + e.width > maxX) maxX = e.x + e.width;\n if (e.y + e.height > maxY) maxY = e.y + e.height;\n }\n const width = maxX + C.PADDING;\n const height = maxY + C.PADDING;\n\n // Edges: orthogonal Manhattan with bend-point staggering.\n const placedById = new Map(placed.map((p) => [p.entity.id, p] as const));\n const edges: ErdLayoutEdge[] = [];\n const bendBucketUses = new Map<string, number>();\n\n for (const r of ast.refs) {\n const fromTable = parseRefSide(r.from).table;\n const toTable = parseRefSide(r.to).table;\n const a = placedById.get(fromTable);\n const b = placedById.get(toTable);\n if (!a || !b) continue;\n\n const fromCol = parseRefSide(r.from).column;\n const toCol = parseRefSide(r.to).column;\n const route = routeOrthogonal(a, b, fromCol, toCol, bendBucketUses);\n edges.push({\n ref: r,\n path: route.path,\n fromAnchor: route.fromAnchor,\n toAnchor: route.toAnchor,\n labelAt: route.labelAt,\n });\n }\n\n return {\n ast,\n entities: placed,\n edges,\n width,\n height,\n };\n}\n\n// ─── Orthogonal routing (single-bend Manhattan w/ stagger) ────\n\nfunction rowYByColumn(e: ErdLayoutEntity, col: string | undefined): number {\n if (col) {\n const idx = e.rows.findIndex((r) => r.attribute.name.toLowerCase() === col.toLowerCase());\n if (idx >= 0) return e.y + e.rows[idx]!.yCenter;\n }\n return e.y + e.height / 2;\n}\n\nfunction routeOrthogonal(\n a: ErdLayoutEntity,\n b: ErdLayoutEntity,\n fromCol: string | undefined,\n toCol: string | undefined,\n bendBucketUses: Map<string, number>\n): {\n path: string;\n fromAnchor: ErdLayoutEdge[\"fromAnchor\"];\n toAnchor: ErdLayoutEdge[\"toAnchor\"];\n labelAt: { x: number; y: number };\n} {\n const C = ERD_CONST;\n\n const aCenterX = a.x + a.width / 2;\n const bCenterX = b.x + b.width / 2;\n const aCenterY = a.y + a.height / 2;\n const bCenterY = b.y + b.height / 2;\n\n const dx = bCenterX - aCenterX;\n const dy = bCenterY - aCenterY;\n\n type Side = \"left\" | \"right\" | \"top\" | \"bottom\";\n let aSide: Side;\n let bSide: Side;\n if (Math.abs(dx) >= Math.abs(dy)) {\n aSide = dx >= 0 ? \"right\" : \"left\";\n bSide = dx >= 0 ? \"left\" : \"right\";\n } else {\n aSide = dy >= 0 ? \"bottom\" : \"top\";\n bSide = dy >= 0 ? \"top\" : \"bottom\";\n }\n\n const aAnchor = sideAnchor(a, aSide, fromCol);\n const bAnchor = sideAnchor(b, bSide, toCol);\n\n if (aSide === \"right\" || aSide === \"left\") {\n const baseMidX = (aAnchor.x + bAnchor.x) / 2;\n // Bucket by integer midX to detect collisions; stagger by use count.\n const bucketKey = `H:${Math.round(baseMidX / 4) * 4}`;\n const useIdx = bendBucketUses.get(bucketKey) ?? 0;\n bendBucketUses.set(bucketKey, useIdx + 1);\n // Alternate left / right of the base midpoint by stagger amount.\n const sign = useIdx % 2 === 0 ? 1 : -1;\n const stagger = Math.ceil(useIdx / 2) * C.EDGE_BEND_STAGGER * sign;\n const midX = baseMidX + stagger;\n\n const path =\n `M ${aAnchor.x} ${aAnchor.y} ` +\n `L ${midX} ${aAnchor.y} ` +\n `L ${midX} ${bAnchor.y} ` +\n `L ${bAnchor.x} ${bAnchor.y}`;\n return {\n path,\n fromAnchor: { x: aAnchor.x, y: aAnchor.y, side: aSide },\n toAnchor: { x: bAnchor.x, y: bAnchor.y, side: bSide },\n labelAt: { x: midX, y: (aAnchor.y + bAnchor.y) / 2 - C.LABEL_OFFSET },\n };\n } else {\n const baseMidY = (aAnchor.y + bAnchor.y) / 2;\n const bucketKey = `V:${Math.round(baseMidY / 4) * 4}`;\n const useIdx = bendBucketUses.get(bucketKey) ?? 0;\n bendBucketUses.set(bucketKey, useIdx + 1);\n const sign = useIdx % 2 === 0 ? 1 : -1;\n const stagger = Math.ceil(useIdx / 2) * C.EDGE_BEND_STAGGER * sign;\n const midY = baseMidY + stagger;\n\n const path =\n `M ${aAnchor.x} ${aAnchor.y} ` +\n `L ${aAnchor.x} ${midY} ` +\n `L ${bAnchor.x} ${midY} ` +\n `L ${bAnchor.x} ${bAnchor.y}`;\n return {\n path,\n fromAnchor: { x: aAnchor.x, y: aAnchor.y, side: aSide },\n toAnchor: { x: bAnchor.x, y: bAnchor.y, side: bSide },\n labelAt: { x: (aAnchor.x + bAnchor.x) / 2, y: midY - C.LABEL_OFFSET },\n };\n }\n}\n\nfunction sideAnchor(\n e: ErdLayoutEntity,\n side: \"left\" | \"right\" | \"top\" | \"bottom\",\n col: string | undefined\n): { x: number; y: number } {\n switch (side) {\n case \"right\":\n return { x: e.x + e.width, y: rowYByColumn(e, col) };\n case \"left\":\n return { x: e.x, y: rowYByColumn(e, col) };\n case \"top\":\n return { x: e.x + e.width / 2, y: e.y };\n case \"bottom\":\n return { x: e.x + e.width / 2, y: e.y + e.height };\n }\n}\n","import type {\n ErdAttribute,\n ErdCardinality,\n ErdLayoutEdge,\n ErdLayoutEntity,\n ErdLayoutResult,\n RenderConfig,\n} from \"../../core/types\";\nimport {\n svgRoot,\n group,\n rect,\n path as pathEl,\n line as lineEl,\n circle as circleEl,\n text as textEl,\n title as titleEl,\n desc as descEl,\n el,\n escapeXml,\n} from \"../../core/svg\";\nimport { resolveBaseTheme, type BaseTheme } from \"../../core/theme\";\nimport { layoutErd, ERD_CONST } from \"./layout\";\nimport { parseErd } from \"./parser\";\n\n// ─── CSS ──────────────────────────────────────────────────────\n\nfunction buildCss(t: BaseTheme): string {\n return `\n.lt-erd { font-family: system-ui, -apple-system, sans-serif; }\n.lt-erd-title { font: bold 16px sans-serif; fill: ${t.text}; }\n.lt-erd-entity-bg { fill: ${t.bg}; stroke: ${t.stroke}; stroke-width: 1.5; }\n.lt-erd-entity-header-bg { fill: ${t.fill}; stroke: ${t.stroke}; stroke-width: 1.5; }\n.lt-erd-entity-header { font: 600 13px sans-serif; fill: ${t.text}; text-anchor: middle; dominant-baseline: middle; }\n.lt-erd-attr-name { font: 500 12px sans-serif; fill: ${t.text}; dominant-baseline: middle; }\n.lt-erd-attr-name-pk { font: 600 12px sans-serif; fill: ${t.text}; text-decoration: underline; dominant-baseline: middle; }\n.lt-erd-attr-type { font: 11px monospace; fill: ${t.textMuted}; dominant-baseline: middle; }\n.lt-erd-attr-marker { font: 700 10px sans-serif; fill: ${t.bg}; text-anchor: middle; dominant-baseline: middle; letter-spacing: 0.3px; }\n.lt-erd-attr-marker-bg-pk { fill: ${t.accent}; stroke: none; }\n.lt-erd-attr-marker-bg-fk { fill: ${t.warn}; stroke: none; }\n.lt-erd-attr-marker-bg-uk { fill: ${t.positive}; stroke: none; }\n.lt-erd-attr-marker-bg-nn { fill: ${t.neutral}; stroke: none; }\n.lt-erd-row-divider { stroke: ${t.fillMuted}; stroke-width: 1; }\n.lt-erd-edge { fill: none; stroke: ${t.stroke}; stroke-width: 1.5; }\n.lt-erd-edge-non-identifying { stroke-dasharray: 5,4; }\n.lt-erd-glyph { stroke: ${t.stroke}; stroke-width: 1.5; fill: none; }\n.lt-erd-glyph-circle { stroke: ${t.stroke}; stroke-width: 1.5; fill: ${t.bg}; }\n.lt-erd-edge-label-bg { fill: ${t.bg}; stroke: ${t.fillMuted}; stroke-width: 1; }\n.lt-erd-edge-label { font: 500 10px sans-serif; fill: ${t.textMuted}; text-anchor: middle; dominant-baseline: middle; }\n`.trim();\n}\n\n// ─── Marker rendering helpers ─────────────────────────────────\n\nfunction attrMarkers(a: ErdAttribute): { label: string; cls: string }[] {\n const out: { label: string; cls: string }[] = [];\n if (a.pk) out.push({ label: \"PK\", cls: \"lt-erd-attr-marker-bg-pk\" });\n if (a.fk) out.push({ label: \"FK\", cls: \"lt-erd-attr-marker-bg-fk\" });\n if (a.uk) out.push({ label: \"UK\", cls: \"lt-erd-attr-marker-bg-uk\" });\n if (a.notNull && !a.pk) out.push({ label: \"*\", cls: \"lt-erd-attr-marker-bg-nn\" });\n return out;\n}\n\nfunction renderEntity(e: ErdLayoutEntity): string {\n const C = ERD_CONST;\n const body: string[] = [];\n\n // Outer frame.\n body.push(\n rect({\n x: e.x,\n y: e.y,\n width: e.width,\n height: e.height,\n rx: 4,\n class: \"lt-erd-entity-bg\",\n })\n );\n\n // Header background (top portion only) — drawn as a separate filled rect.\n body.push(\n pathEl({\n d:\n `M ${e.x} ${e.y + 4} ` +\n `Q ${e.x} ${e.y} ${e.x + 4} ${e.y} ` +\n `L ${e.x + e.width - 4} ${e.y} ` +\n `Q ${e.x + e.width} ${e.y} ${e.x + e.width} ${e.y + 4} ` +\n `L ${e.x + e.width} ${e.y + e.headerHeight} ` +\n `L ${e.x} ${e.y + e.headerHeight} Z`,\n class: \"lt-erd-entity-header-bg\",\n })\n );\n\n // Header label.\n body.push(\n textEl(\n {\n x: e.x + e.width / 2,\n y: e.y + e.headerHeight / 2,\n class: \"lt-erd-entity-header\",\n },\n e.entity.name\n )\n );\n\n // Attribute rows.\n for (let i = 0; i < e.rows.length; i++) {\n const row = e.rows[i]!;\n const a = row.attribute;\n const cy = e.y + row.yCenter;\n\n // Row divider above (skip first).\n if (i > 0) {\n body.push(\n lineEl({\n x1: e.x,\n y1: e.y + e.headerHeight + i * C.ROW_HEIGHT,\n x2: e.x + e.width,\n y2: e.y + e.headerHeight + i * C.ROW_HEIGHT,\n class: \"lt-erd-row-divider\",\n })\n );\n }\n\n // Name (PK gets underline).\n body.push(\n textEl(\n {\n x: e.x + C.ENTITY_PADDING_X,\n y: cy,\n class: a.pk ? \"lt-erd-attr-name-pk\" : \"lt-erd-attr-name\",\n },\n a.name\n )\n );\n\n // Type (right-aligned-ish: drawn at center-ish, before markers).\n const markers = attrMarkers(a);\n const markerW = 26;\n const markerGap = 4;\n const markersBlockW = markers.length * markerW + (markers.length - 1) * markerGap;\n const markersStartX = e.x + e.width - C.ENTITY_PADDING_X - markersBlockW;\n\n if (a.type) {\n body.push(\n textEl(\n {\n x: markersStartX - 8,\n y: cy,\n class: \"lt-erd-attr-type\",\n \"text-anchor\": \"end\",\n },\n a.type\n )\n );\n }\n\n // Marker pills.\n for (let j = 0; j < markers.length; j++) {\n const m = markers[j]!;\n const px = markersStartX + j * (markerW + markerGap);\n body.push(\n rect({\n x: px,\n y: cy - 8,\n width: markerW,\n height: 16,\n rx: 3,\n class: m.cls,\n })\n );\n body.push(\n textEl(\n {\n x: px + markerW / 2,\n y: cy + 1,\n class: \"lt-erd-attr-marker\",\n },\n m.label\n )\n );\n }\n }\n\n return group(\n {\n class: \"lt-erd-entity\",\n \"data-id\": e.entity.id,\n },\n body\n );\n}\n\n// ─── Crow's-foot endpoint glyph ───────────────────────────────\n\n/**\n * Produce a small SVG fragment representing the cardinality glyph.\n * Anchor (ax, ay) is the tip of the line on the entity edge; the glyph extends\n * INWARD along the line (toward the bend). `dirX`/`dirY` is the unit vector\n * pointing from the entity along the line (i.e. away from the entity).\n */\nfunction renderGlyph(\n ax: number,\n ay: number,\n dirX: number,\n dirY: number,\n card: ErdCardinality\n): string {\n const C = ERD_CONST;\n // Perpendicular vector (rotate dir by 90°).\n const px = -dirY;\n const py = dirX;\n\n // The bar / circle sits at `barDist` along the line, the crow's-foot fan span.\n const barDist = C.GLYPH_OFFSET; // distance from edge to bar/circle\n const barX = ax + dirX * barDist;\n const barY = ay + dirY * barDist;\n\n // The \"many\" foot fans out at the entity edge (inside `barDist`).\n const footTipX = ax;\n const footTipY = ay;\n const footBaseX = ax + dirX * C.GLYPH_FOOT_LEN;\n const footBaseY = ay + dirY * C.GLYPH_FOOT_LEN;\n\n const parts: string[] = [];\n\n switch (card) {\n case \"one-mandatory\": {\n // Single perpendicular bar at barDist.\n parts.push(\n lineEl({\n x1: barX + px * C.GLYPH_BAR_HALF,\n y1: barY + py * C.GLYPH_BAR_HALF,\n x2: barX - px * C.GLYPH_BAR_HALF,\n y2: barY - py * C.GLYPH_BAR_HALF,\n class: \"lt-erd-glyph\",\n })\n );\n break;\n }\n case \"one-optional\": {\n // Open circle at barDist.\n parts.push(\n circleEl({\n cx: barX,\n cy: barY,\n r: C.GLYPH_CIRCLE_R,\n class: \"lt-erd-glyph-circle\",\n })\n );\n break;\n }\n case \"many-mandatory\": {\n // Bar at barDist + crow's foot fanning to entity edge.\n parts.push(\n lineEl({\n x1: barX + px * C.GLYPH_BAR_HALF,\n y1: barY + py * C.GLYPH_BAR_HALF,\n x2: barX - px * C.GLYPH_BAR_HALF,\n y2: barY - py * C.GLYPH_BAR_HALF,\n class: \"lt-erd-glyph\",\n })\n );\n // Three legs from footBase to spread points at the entity edge.\n parts.push(\n lineEl({ x1: footBaseX, y1: footBaseY, x2: footTipX, y2: footTipY, class: \"lt-erd-glyph\" })\n );\n parts.push(\n lineEl({\n x1: footBaseX,\n y1: footBaseY,\n x2: footTipX + px * C.GLYPH_BAR_HALF,\n y2: footTipY + py * C.GLYPH_BAR_HALF,\n class: \"lt-erd-glyph\",\n })\n );\n parts.push(\n lineEl({\n x1: footBaseX,\n y1: footBaseY,\n x2: footTipX - px * C.GLYPH_BAR_HALF,\n y2: footTipY - py * C.GLYPH_BAR_HALF,\n class: \"lt-erd-glyph\",\n })\n );\n break;\n }\n case \"many-optional\": {\n // Open circle at barDist + crow's foot.\n parts.push(\n circleEl({\n cx: barX,\n cy: barY,\n r: C.GLYPH_CIRCLE_R,\n class: \"lt-erd-glyph-circle\",\n })\n );\n parts.push(\n lineEl({ x1: footBaseX, y1: footBaseY, x2: footTipX, y2: footTipY, class: \"lt-erd-glyph\" })\n );\n parts.push(\n lineEl({\n x1: footBaseX,\n y1: footBaseY,\n x2: footTipX + px * C.GLYPH_BAR_HALF,\n y2: footTipY + py * C.GLYPH_BAR_HALF,\n class: \"lt-erd-glyph\",\n })\n );\n parts.push(\n lineEl({\n x1: footBaseX,\n y1: footBaseY,\n x2: footTipX - px * C.GLYPH_BAR_HALF,\n y2: footTipY - py * C.GLYPH_BAR_HALF,\n class: \"lt-erd-glyph\",\n })\n );\n break;\n }\n }\n\n return parts.join(\"\");\n}\n\nfunction sideToOutwardDir(side: \"left\" | \"right\" | \"top\" | \"bottom\"): { x: number; y: number } {\n switch (side) {\n case \"right\":\n return { x: 1, y: 0 };\n case \"left\":\n return { x: -1, y: 0 };\n case \"bottom\":\n return { x: 0, y: 1 };\n case \"top\":\n return { x: 0, y: -1 };\n }\n}\n\n// ─── Edge rendering ───────────────────────────────────────────\n\nfunction renderEdge(edge: ErdLayoutEdge): string {\n const parts: string[] = [];\n parts.push(\n pathEl({\n d: edge.path,\n class: edge.ref.identifying ? \"lt-erd-edge\" : \"lt-erd-edge lt-erd-edge-non-identifying\",\n })\n );\n\n const fromDir = sideToOutwardDir(edge.fromAnchor.side);\n const toDir = sideToOutwardDir(edge.toAnchor.side);\n\n parts.push(\n renderGlyph(\n edge.fromAnchor.x,\n edge.fromAnchor.y,\n fromDir.x,\n fromDir.y,\n edge.ref.fromCard\n )\n );\n parts.push(\n renderGlyph(\n edge.toAnchor.x,\n edge.toAnchor.y,\n toDir.x,\n toDir.y,\n edge.ref.toCard\n )\n );\n\n if (edge.ref.label && edge.labelAt) {\n const label = edge.ref.label;\n const w = label.length * 6 + 14;\n parts.push(\n rect({\n x: edge.labelAt.x - w / 2,\n y: edge.labelAt.y - 9,\n width: w,\n height: 16,\n rx: 3,\n class: \"lt-erd-edge-label-bg\",\n })\n );\n parts.push(\n textEl(\n {\n x: edge.labelAt.x,\n y: edge.labelAt.y,\n class: \"lt-erd-edge-label\",\n },\n label\n )\n );\n }\n\n return group({ class: \"lt-erd-edge-group\" }, parts);\n}\n\n// ─── Top-level render ─────────────────────────────────────────\n\nexport function renderErdAst(\n result: ErdLayoutResult,\n themeName: \"default\" | \"monochrome\" | \"dark\" = \"default\"\n): string {\n const theme = resolveBaseTheme(themeName);\n const { entities, edges, width, height, ast } = result;\n\n const cssBlock = el(\"style\", {}, buildCss(theme));\n const titleNode = titleEl(ast.title ?? \"Schematex ERD\");\n const descNode = descEl(\n `Entity-Relationship Diagram with ${entities.length} entities and ${edges.length} relationships.`\n );\n\n const titleSvgBlock = ast.title\n ? textEl(\n {\n x: 12,\n y: 18,\n class: \"lt-erd-title\",\n },\n ast.title\n )\n : \"\";\n\n const offset = ast.title ? 28 : 0;\n\n const entitiesG = group(\n { class: \"lt-erd-entities\", transform: `translate(0, ${offset})` },\n entities.map(renderEntity)\n );\n const edgesG = group(\n { class: \"lt-erd-edges\", transform: `translate(0, ${offset})` },\n edges.map(renderEdge)\n );\n\n return svgRoot(\n {\n width,\n height: height + offset,\n viewBox: `0 0 ${width} ${height + offset}`,\n class: \"lt-erd\",\n },\n [titleNode, descNode, cssBlock, titleSvgBlock, edgesG, entitiesG]\n );\n}\n\nexport function renderErd(\n text: string,\n config?: RenderConfig\n): string {\n const ast = parseErd(text);\n const layout = layoutErd(ast);\n const themeName = ((config?.theme as \"default\" | \"monochrome\" | \"dark\") ?? \"default\");\n return renderErdAst(layout, themeName);\n}\n\n// Suppress unused-import warning for escapeXml; kept for future label escaping.\nvoid escapeXml;\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseErd } from \"./parser\";\nimport { renderErd } from \"./renderer\";\n\nexport const erd: DiagramPlugin = {\n type: \"erd\",\n detect(text: string): boolean {\n for (const raw of text.split(/\\r?\\n/)) {\n const t = raw.trim();\n if (t.length === 0) continue;\n if (t.startsWith(\"//\") || t.startsWith(\"#\")) continue;\n const first = t.split(/\\s+/)[0]?.toLowerCase() ?? \"\";\n return first === \"erd\";\n }\n return false;\n },\n parse: parseErd,\n render(text: string, config?: RenderConfig): string {\n return renderErd(text, config);\n },\n};\n\nexport { parseErd } from \"./parser\";\nexport { renderErd, renderErdAst } from \"./renderer\";\nexport { layoutErd, ERD_CONST } from \"./layout\";\n","/**\n * Breadboard DSL parser. Section-based:\n *\n * breadboard\n * board: half | full | mini\n * title: \"...\"\n * parts\n * id : kind [arg=value ...] @placement\n * wires\n * <endpoint> --color-- <endpoint> [via @coord]\n */\n\nimport type {\n BreadboardAst,\n BreadboardCoord,\n BreadboardEndpoint,\n BreadboardForm,\n BreadboardPart,\n BreadboardPartKind,\n BreadboardPlacement,\n BreadboardRail,\n BreadboardSidePlacement,\n BreadboardWire,\n BreadboardWireColor,\n} from \"../../core/types\";\n\nexport class BreadboardParseError extends Error {\n constructor(message: string, public lineNumber?: number) {\n super(lineNumber !== undefined ? `[line ${lineNumber}] ${message}` : message);\n this.name = \"BreadboardParseError\";\n }\n}\n\n// ─── Lex helpers ─────────────────────────────────────────────\n\nfunction stripComment(s: string): string {\n let out = \"\";\n let inQuote = false;\n for (let i = 0; i < s.length; i++) {\n const ch = s[i];\n if (ch === '\"') inQuote = !inQuote;\n if (!inQuote) {\n if (ch === \"/\" && s[i + 1] === \"/\") break;\n if (ch === \"#\") break;\n }\n out += ch;\n }\n return out;\n}\n\nfunction unquote(v: string): string {\n const t = v.trim();\n if (t.length >= 2 && t.startsWith('\"') && t.endsWith('\"')) return t.slice(1, -1);\n return t;\n}\n\ninterface RawLine { text: string; lineNumber: number; }\n\nfunction lex(text: string): RawLine[] {\n return text.split(/\\r?\\n/).map((raw, i) => ({\n text: stripComment(raw).trimEnd().replace(/^\\s+/, \"\"),\n lineNumber: i + 1,\n })).filter((l) => l.text.length > 0);\n}\n\n// ─── Coordinate parser ───────────────────────────────────────\n\nconst ROW_LETTERS = new Set([\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\"]);\n\nexport function parseCoord(token: string, lineNumber: number): BreadboardCoord {\n const t = token.startsWith(\"@\") ? token.slice(1) : token;\n // Rail forms: +t8, -t8, +b14, -b14\n const railMatch = /^([+-])([tb])(\\d+)$/.exec(t);\n if (railMatch) {\n const sign = railMatch[1] as \"+\" | \"-\";\n const half = railMatch[2] as \"t\" | \"b\";\n const col = parseInt(railMatch[3]!, 10);\n if (col < 1) throw new BreadboardParseError(`Rail column must be ≥ 1, got ${col}`, lineNumber);\n return { kind: \"rail\", rail: `${sign}${half}` as BreadboardRail, col };\n }\n // Hole forms: 5e, 12g\n const holeMatch = /^(\\d+)([a-jA-J])$/.exec(t);\n if (holeMatch) {\n const col = parseInt(holeMatch[1]!, 10);\n const row = holeMatch[2]!.toLowerCase();\n if (col < 1) throw new BreadboardParseError(`Column must be ≥ 1, got ${col}`, lineNumber);\n if (!ROW_LETTERS.has(row)) throw new BreadboardParseError(`Unknown row '${row}'`, lineNumber);\n return { kind: \"hole\", col, row: row as \"a\" };\n }\n throw new BreadboardParseError(`Invalid coordinate '${token}' (expected @5e, @+t8, @-b14, etc.)`, lineNumber);\n}\n\nconst SIDE_PLACEMENTS = new Set([\"beside-left\", \"beside-right\", \"above\", \"below\"]);\n\nfunction parsePlacement(rest: string, lineNumber: number): BreadboardPlacement {\n const t = rest.trim();\n if (!t.startsWith(\"@\")) {\n throw new BreadboardParseError(`Placement must start with '@', got '${t}'`, lineNumber);\n }\n const body = t.slice(1).trim();\n if (SIDE_PLACEMENTS.has(body)) {\n return { kind: \"side\", side: body as BreadboardSidePlacement };\n }\n // span: @5e..9e\n const spanIdx = body.indexOf(\"..\");\n if (spanIdx >= 0) {\n const fromRaw = body.slice(0, spanIdx).trim();\n const toRaw = body.slice(spanIdx + 2).trim();\n return {\n kind: \"span\",\n from: parseCoord(fromRaw, lineNumber),\n to: parseCoord(toRaw, lineNumber),\n };\n }\n return { kind: \"point\", at: parseCoord(body, lineNumber) };\n}\n\n// ─── Part declaration parser ─────────────────────────────────\n\nconst KIND_ALIASES: Record<string, BreadboardPartKind> = {\n resistor: \"resistor\",\n led: \"led\",\n cap: \"cap-elec\",\n \"cap-elec\": \"cap-elec\",\n \"cap-ceramic\": \"cap-ceramic\",\n diode: \"diode\",\n button: \"button\",\n dip: \"dip\",\n header: \"header\",\n // multi-token forms handled separately: \"mcu uno\", \"sensor hcsr04\", etc.\n};\n\nconst MCU_SUBTYPES: Record<string, BreadboardPartKind> = {\n uno: \"mcu-uno\", nano: \"mcu-nano\", esp32: \"mcu-esp32\", pico: \"mcu-pico\",\n};\n\nconst SENSOR_SUBTYPES: Record<string, BreadboardPartKind> = {\n hcsr04: \"sensor-hcsr04\", \"hc-sr04\": \"sensor-hcsr04\",\n dht11: \"sensor-dht11\", dht22: \"sensor-dht22\",\n};\n\nconst DISPLAY_SUBTYPES: Record<string, BreadboardPartKind> = {\n \"oled-ssd1306\": \"display-oled-ssd1306\",\n oled: \"display-oled-ssd1306\",\n \"lcd-1602-i2c\": \"display-lcd-1602-i2c\",\n lcd: \"display-lcd-1602-i2c\",\n};\n\nconst MODULE_SUBTYPES: Record<string, BreadboardPartKind> = {\n \"rotary-ky040\": \"module-rotary-ky040\",\n rotary: \"module-rotary-ky040\",\n};\n\nconst ACTUATOR_SUBTYPES: Record<string, BreadboardPartKind> = {\n \"servo-sg90\": \"actuator-servo-sg90\",\n servo: \"actuator-servo-sg90\",\n};\n\nfunction resolveKind(tokens: string[], lineNumber: number): { kind: BreadboardPartKind; consumed: number } {\n const head = tokens[0]?.toLowerCase() ?? \"\";\n if (head === \"mcu\") {\n const sub = tokens[1]?.toLowerCase() ?? \"\";\n if (!MCU_SUBTYPES[sub]) throw new BreadboardParseError(`Unknown mcu subtype '${sub}'`, lineNumber);\n return { kind: MCU_SUBTYPES[sub]!, consumed: 2 };\n }\n if (head === \"sensor\") {\n const sub = tokens[1]?.toLowerCase() ?? \"\";\n if (!SENSOR_SUBTYPES[sub]) throw new BreadboardParseError(`Unknown sensor subtype '${sub}'`, lineNumber);\n return { kind: SENSOR_SUBTYPES[sub]!, consumed: 2 };\n }\n if (head === \"display\") {\n const sub = tokens[1]?.toLowerCase() ?? \"\";\n if (!DISPLAY_SUBTYPES[sub]) throw new BreadboardParseError(`Unknown display subtype '${sub}'`, lineNumber);\n return { kind: DISPLAY_SUBTYPES[sub]!, consumed: 2 };\n }\n if (head === \"module\") {\n const sub = tokens[1]?.toLowerCase() ?? \"\";\n if (!MODULE_SUBTYPES[sub]) throw new BreadboardParseError(`Unknown module subtype '${sub}'`, lineNumber);\n return { kind: MODULE_SUBTYPES[sub]!, consumed: 2 };\n }\n if (head === \"actuator\") {\n const sub = tokens[1]?.toLowerCase() ?? \"\";\n if (!ACTUATOR_SUBTYPES[sub]) throw new BreadboardParseError(`Unknown actuator subtype '${sub}'`, lineNumber);\n return { kind: ACTUATOR_SUBTYPES[sub]!, consumed: 2 };\n }\n if (KIND_ALIASES[head]) return { kind: KIND_ALIASES[head]!, consumed: 1 };\n throw new BreadboardParseError(`Unknown part kind '${head}'`, lineNumber);\n}\n\nfunction parsePart(rawLine: string, lineNumber: number): BreadboardPart {\n // id : kind [args] @placement\n const colonIdx = rawLine.indexOf(\":\");\n if (colonIdx < 0) {\n throw new BreadboardParseError(`Part declaration must use 'id: kind ...' syntax`, lineNumber);\n }\n const id = rawLine.slice(0, colonIdx).trim();\n if (!/^[a-zA-Z][\\w-]*$/.test(id)) {\n throw new BreadboardParseError(`Invalid part id '${id}'`, lineNumber);\n }\n const after = rawLine.slice(colonIdx + 1).trim();\n // Split on '@' to separate kind+args from placement.\n const atIdx = after.indexOf(\"@\");\n if (atIdx < 0) {\n throw new BreadboardParseError(`Part '${id}' missing placement (use '@5e' or '@beside-left')`, lineNumber);\n }\n const kindAndArgs = after.slice(0, atIdx).trim();\n const placementStr = after.slice(atIdx).trim();\n\n const tokens = kindAndArgs.split(/\\s+/).filter((t) => t.length > 0);\n if (tokens.length === 0) throw new BreadboardParseError(`Part '${id}' missing kind`, lineNumber);\n const { kind, consumed } = resolveKind(tokens, lineNumber);\n const argTokens = tokens.slice(consumed);\n\n const args: Record<string, string | number> = {};\n for (const tok of argTokens) {\n const eq = tok.indexOf(\"=\");\n if (eq >= 0) {\n const k = tok.slice(0, eq).trim();\n const v = tok.slice(eq + 1).trim();\n const n = Number(v);\n args[k] = Number.isFinite(n) && /^-?\\d/.test(v) ? n : v;\n } else {\n // Bare token treated as the canonical \"value\" arg (e.g. resistor 220 → value=220, led red → color=red)\n const n = Number(tok);\n if (Number.isFinite(n) && /^-?\\d/.test(tok)) args.value = n;\n else if (kind === \"led\") args.color = tok;\n else args.value = tok;\n }\n }\n\n // Resistor with span placement — derive cols from span length so part width matches exactly.\n const placement = parsePlacement(placementStr, lineNumber);\n if (kind === \"resistor\" && placement.kind === \"span\") {\n const colSpan = Math.abs(getCol(placement.to) - getCol(placement.from));\n if (colSpan > 0) args.cols = colSpan;\n }\n if (kind === \"diode\" && placement.kind === \"span\") {\n const colSpan = Math.abs(getCol(placement.to) - getCol(placement.from));\n if (colSpan > 0) args.cols = colSpan;\n }\n\n return { id, kind, args, placement };\n}\n\nfunction getCol(c: BreadboardCoord): number {\n return c.col;\n}\n\n// ─── Wire parser ─────────────────────────────────────────────\n\nconst WIRE_COLORS: Record<string, BreadboardWireColor> = {\n red: \"red\", black: \"black\", blue: \"blue\", yellow: \"yellow\",\n orange: \"orange\", green: \"green\", white: \"white\", purple: \"purple\",\n brown: \"brown\", grey: \"grey\", gray: \"grey\",\n};\n\nfunction parseEndpoint(token: string, lineNumber: number): BreadboardEndpoint {\n if (token.startsWith(\"@\")) {\n return { kind: \"coord\", at: parseCoord(token, lineNumber) };\n }\n const colonIdx = token.indexOf(\":\");\n if (colonIdx <= 0) {\n throw new BreadboardParseError(`Wire endpoint must be '@<coord>' or 'partId:pin', got '${token}'`, lineNumber);\n }\n const partId = token.slice(0, colonIdx).trim();\n const pin = token.slice(colonIdx + 1).trim();\n if (!partId || !pin) throw new BreadboardParseError(`Malformed pin endpoint '${token}'`, lineNumber);\n return { kind: \"pin\", partId, pin };\n}\n\nfunction parseWire(rawLine: string, lineNumber: number): BreadboardWire {\n // <ep1> --color-- <ep2> [via @coord]\n // The color sits between two double-dashes.\n const m = /^(\\S+)\\s+--([a-zA-Z]+)--\\s+(\\S+)(?:\\s+via\\s+(\\S+))?\\s*$/.exec(rawLine);\n if (!m) {\n throw new BreadboardParseError(`Malformed wire line '${rawLine}' (expected '<ep> --color-- <ep>')`, lineNumber);\n }\n const fromTok = m[1]!;\n const colorTok = m[2]!.toLowerCase();\n const toTok = m[3]!;\n const viaTok = m[4];\n\n const color = WIRE_COLORS[colorTok];\n if (!color) {\n throw new BreadboardParseError(`Unknown wire color '${colorTok}'`, lineNumber);\n }\n const wire: BreadboardWire = {\n from: parseEndpoint(fromTok, lineNumber),\n to: parseEndpoint(toTok, lineNumber),\n color,\n };\n if (viaTok) wire.via = parseCoord(viaTok, lineNumber);\n return wire;\n}\n\n// ─── Top-level parser ────────────────────────────────────────\n\nconst VALID_BOARDS = new Set<BreadboardForm>([\"mini\", \"half\", \"full\"]);\n\nexport function parseBreadboard(text: string): BreadboardAst {\n const lines = lex(text);\n if (lines.length === 0) throw new BreadboardParseError(\"Empty input\");\n\n // Header.\n const header = lines[0]!;\n if (header.text.split(/\\s+/)[0]?.toLowerCase() !== \"breadboard\") {\n throw new BreadboardParseError(`Expected 'breadboard' header, got: ${header.text}`, header.lineNumber);\n }\n\n let i = 1;\n let board: BreadboardForm = \"half\";\n let title: string | undefined;\n\n // Header attributes: board:, title: (order-insensitive, before first section).\n while (i < lines.length) {\n const line = lines[i]!;\n const lower = line.text.toLowerCase();\n if (lower.startsWith(\"board:\")) {\n const v = line.text.slice(\"board:\".length).trim().toLowerCase() as BreadboardForm;\n if (!VALID_BOARDS.has(v)) {\n throw new BreadboardParseError(`Unknown board '${v}'. Use mini | half | full.`, line.lineNumber);\n }\n board = v;\n i++;\n continue;\n }\n if (lower.startsWith(\"title:\")) {\n title = unquote(line.text.slice(\"title:\".length).trim());\n i++;\n continue;\n }\n break;\n }\n\n const parts: BreadboardPart[] = [];\n const wires: BreadboardWire[] = [];\n\n // Section dispatch.\n let mode: \"parts\" | \"wires\" | null = null;\n while (i < lines.length) {\n const line = lines[i]!;\n const t = line.text;\n const lower = t.toLowerCase();\n if (lower === \"parts\") { mode = \"parts\"; i++; continue; }\n if (lower === \"wires\") { mode = \"wires\"; i++; continue; }\n if (mode === \"parts\") {\n parts.push(parsePart(t, line.lineNumber));\n } else if (mode === \"wires\") {\n wires.push(parseWire(t, line.lineNumber));\n } else {\n throw new BreadboardParseError(`Unexpected line outside parts/wires section: '${t}'`, line.lineNumber);\n }\n i++;\n }\n\n // Validation.\n const partIds = new Set(parts.map((p) => p.id));\n for (const part of parts) {\n if (parts.filter((p) => p.id === part.id).length > 1) {\n throw new BreadboardParseError(`Duplicate part id '${part.id}'`);\n }\n }\n for (const wire of wires) {\n for (const ep of [wire.from, wire.to]) {\n if (ep.kind === \"pin\" && !partIds.has(ep.partId)) {\n throw new BreadboardParseError(`Wire references unknown part '${ep.partId}'`);\n }\n }\n }\n // Mini boards have no rails — reject rail coordinates.\n if (board === \"mini\") {\n const checkCoord = (c: BreadboardCoord) => {\n if (c.kind === \"rail\") {\n throw new BreadboardParseError(`Mini boards have no power rails; '${railToken(c)}' is invalid`);\n }\n };\n for (const part of parts) {\n if (part.placement.kind === \"point\") checkCoord(part.placement.at);\n if (part.placement.kind === \"span\") { checkCoord(part.placement.from); checkCoord(part.placement.to); }\n }\n for (const wire of wires) {\n for (const ep of [wire.from, wire.to]) {\n if (ep.kind === \"coord\") checkCoord(ep.at);\n }\n if (wire.via) checkCoord(wire.via);\n }\n }\n\n return { type: \"breadboard\", board, title, parts, wires };\n}\n\nfunction railToken(c: BreadboardCoord): string {\n if (c.kind === \"rail\") return `@${c.rail}${c.col}`;\n return `@${c.col}${c.row}`;\n}\n","/**\n * Breadboard part catalog. Each entry describes a kind's footprint, pin\n * positions (relative to the part's local origin), and an SVG fragment\n * builder. The catalog is the single source of truth for both layout\n * (which uses footprint + pin positions) and renderer (which calls\n * `svg(part, theme)`).\n *\n * Coordinate convention for part-local space:\n * x → grows to the right\n * y → grows downward\n * For span parts, origin is the *first* pin (the @start coordinate);\n * for point parts, origin is the part center.\n */\n\nimport type {\n BreadboardPart,\n BreadboardPartKind,\n} from \"../../core/types\";\nimport { el, escapeXml } from \"../../core/svg\";\n\nexport interface PartPin {\n /** Pin label, e.g. \"5V\", \"GND\", \"D2\", \"1\", \"VCC\", \"ANODE\". */\n name: string;\n /** Pin center, relative to part-local origin. */\n x: number;\n y: number;\n}\n\nexport interface PartSpec {\n kind: BreadboardPartKind;\n /** \"grid\" parts snap to breadboard holes (resistor, led, dip).\n * \"side\" parts sit beside the substrate (Arduino Uno).\n * \"module\" parts have their own PCB footprint placed at a hole anchor. */\n category: \"grid\" | \"side\" | \"module\";\n /** Bounding box width / height in canvas px. */\n width: number;\n height: number;\n pins: PartPin[];\n /** Whether the part spans the trough (DIPs, MCUs that straddle). */\n straddlesTrough?: boolean;\n /** SVG body. Receives part, args, and the resolved width/height. */\n body: (part: BreadboardPart, w: number, h: number) => string;\n}\n\nconst PITCH = 14;\n\n// ─── helpers ─────────────────────────────────────────────────\n\nfunction rectShape(x: number, y: number, w: number, h: number, attrs: Record<string, string | number>): string {\n return el(\"rect\", { x, y, width: w, height: h, ...attrs });\n}\n\nfunction circShape(cx: number, cy: number, r: number, attrs: Record<string, string | number>): string {\n return el(\"circle\", { cx, cy, r, ...attrs });\n}\n\nfunction lineShape(x1: number, y1: number, x2: number, y2: number, attrs: Record<string, string | number>): string {\n return el(\"line\", { x1, y1, x2, y2, ...attrs });\n}\n\nfunction pathShape(d: string, attrs: Record<string, string | number>): string {\n return el(\"path\", { d, ...attrs });\n}\n\nfunction textShape(x: number, y: number, content: string, attrs: Record<string, string | number>): string {\n return el(\"text\", { x, y, ...attrs }, escapeXml(content));\n}\n\n// ─── Resistor color bands (decorative) ────────────────────────\n\nconst BAND_COLORS: Record<string, string> = {\n \"0\": \"#1f2937\", \"1\": \"#92400e\", \"2\": \"#dc2626\", \"3\": \"#f97316\",\n \"4\": \"#facc15\", \"5\": \"#16a34a\", \"6\": \"#2563eb\", \"7\": \"#7c3aed\",\n \"8\": \"#6b7280\", \"9\": \"#f3f4f6\",\n};\n\nfunction resistorBands(value: string | number | undefined): string[] {\n if (value === undefined) return [\"#92400e\", \"#92400e\", \"#1f2937\", \"#facc15\"];\n const s = String(value).replace(/[^\\d.kKmMrRΩ]/g, \"\");\n // Crude: parse leading number, treat 'k' = ×1000, 'M' = ×1e6.\n const m = s.match(/^([\\d.]+)\\s*([kKmM]?)/);\n if (!m) return [\"#92400e\", \"#92400e\", \"#1f2937\", \"#facc15\"];\n const num = parseFloat(m[1]!);\n const mult = m[2] === \"k\" || m[2] === \"K\" ? 1000 : m[2] === \"m\" || m[2] === \"M\" ? 1e6 : 1;\n const ohms = Math.round(num * mult);\n if (!Number.isFinite(ohms) || ohms <= 0) return [\"#92400e\", \"#92400e\", \"#1f2937\", \"#facc15\"];\n const str = String(ohms);\n if (str.length <= 1) return [BAND_COLORS[\"0\"]!, BAND_COLORS[str[0]!]!, BAND_COLORS[\"0\"]!, \"#facc15\"];\n const d1 = str[0]!;\n const d2 = str[1]!;\n const exp = String(str.length - 2);\n return [\n BAND_COLORS[d1] ?? \"#1f2937\",\n BAND_COLORS[d2] ?? \"#1f2937\",\n BAND_COLORS[exp] ?? \"#1f2937\",\n \"#facc15\", // gold tolerance band\n ];\n}\n\n// ─── Catalog entries ─────────────────────────────────────────\n\nconst RESISTOR: PartSpec = {\n kind: \"resistor\",\n category: \"grid\",\n width: 4 * PITCH,\n height: PITCH,\n pins: [\n { name: \"1\", x: 0, y: 0 },\n { name: \"2\", x: 4 * PITCH, y: 0 },\n ],\n body: (part, w, h) => {\n const bands = resistorBands(part.args.value);\n const cy = h / 2;\n const bodyW = w * 0.55;\n const bodyX = (w - bodyW) / 2;\n const lead1 = pathShape(`M 0 ${cy} L ${bodyX} ${cy}`, { class: \"lt-bb-lead\" });\n const lead2 = pathShape(`M ${bodyX + bodyW} ${cy} L ${w} ${cy}`, { class: \"lt-bb-lead\" });\n const body = rectShape(bodyX, cy - 4, bodyW, 8, { class: \"lt-bb-resistor\", rx: 3 });\n const bandW = 2;\n const bandStart = bodyX + bodyW * 0.18;\n const bandGap = (bodyW * 0.64) / Math.max(1, bands.length - 1);\n const bandEls = bands.map((color, i) =>\n rectShape(bandStart + i * bandGap - bandW / 2, cy - 4, bandW, 8, { fill: color })\n ).join(\"\");\n return lead1 + lead2 + body + bandEls;\n },\n};\n\nconst LED: PartSpec = {\n kind: \"led\",\n category: \"grid\",\n width: PITCH,\n height: PITCH,\n pins: [\n { name: \"anode\", x: 0, y: 0 },\n { name: \"cathode\", x: PITCH, y: 0 },\n ],\n body: (part, w, h) => {\n const color = String(part.args.color ?? \"red\").toLowerCase();\n const fill = ({\n red: \"#dc2626\", green: \"#16a34a\", blue: \"#2563eb\",\n yellow: \"#facc15\", white: \"#f3f4f6\", orange: \"#f97316\",\n } as Record<string, string>)[color] ?? \"#dc2626\";\n const cx = w / 2;\n const cy = h / 2 - 4;\n return [\n // Leads: anode = long (left), cathode = short (right)\n pathShape(`M 0 ${h / 2} L ${cx - 5} ${cy + 1}`, { class: \"lt-bb-lead\" }),\n pathShape(`M ${w} ${h / 2} L ${cx + 5} ${cy + 3}`, { class: \"lt-bb-lead\" }),\n circShape(cx, cy, 6, { fill, stroke: \"#0f172a\", \"stroke-width\": 1, opacity: 0.92 }),\n // highlight\n circShape(cx - 1.5, cy - 1.5, 1.6, { fill: \"#fff\", opacity: 0.6 }),\n // cathode flat-flag (small bar near right lead)\n lineShape(cx + 4, cy - 4, cx + 4, cy + 4, { stroke: \"#0f172a\", \"stroke-width\": 1.2 }),\n ].join(\"\");\n },\n};\n\nconst CAP_ELEC: PartSpec = {\n kind: \"cap-elec\",\n category: \"grid\",\n width: PITCH,\n height: PITCH,\n pins: [\n { name: \"+\", x: 0, y: 0 },\n { name: \"-\", x: PITCH, y: 0 },\n ],\n body: (_part, w, h) => {\n const cx = w / 2;\n const cy = h / 2 - 4;\n return [\n pathShape(`M 0 ${h / 2} L ${cx - 4} ${cy + 4}`, { class: \"lt-bb-lead\" }),\n pathShape(`M ${w} ${h / 2} L ${cx + 4} ${cy + 4}`, { class: \"lt-bb-lead\" }),\n circShape(cx, cy, 7, { class: \"lt-bb-cap-can\" }),\n // negative stripe\n pathShape(`M ${cx + 2} ${cy - 7} A 7 7 0 0 1 ${cx + 2} ${cy + 7}`, { fill: \"#94a3b8\", opacity: 0.7 }),\n textShape(cx + 4, cy + 1, \"−\", { fill: \"#fff\", \"font-size\": 7, \"font-weight\": 700, \"text-anchor\": \"middle\", \"dominant-baseline\": \"middle\" }),\n ].join(\"\");\n },\n};\n\nconst CAP_CERAMIC: PartSpec = {\n kind: \"cap-ceramic\",\n category: \"grid\",\n width: PITCH,\n height: PITCH,\n pins: [\n { name: \"1\", x: 0, y: 0 },\n { name: \"2\", x: PITCH, y: 0 },\n ],\n body: (_part, w, h) => {\n const cx = w / 2;\n const cy = h / 2 - 4;\n return [\n pathShape(`M 0 ${h / 2} L ${cx - 3} ${cy + 4}`, { class: \"lt-bb-lead\" }),\n pathShape(`M ${w} ${h / 2} L ${cx + 3} ${cy + 4}`, { class: \"lt-bb-lead\" }),\n circShape(cx, cy, 6, { fill: \"#facc15\", stroke: \"#a16207\", \"stroke-width\": 0.8 }),\n ].join(\"\");\n },\n};\n\nconst DIODE: PartSpec = {\n kind: \"diode\",\n category: \"grid\",\n width: 3 * PITCH,\n height: PITCH,\n pins: [\n { name: \"anode\", x: 0, y: 0 },\n { name: \"cathode\", x: 3 * PITCH, y: 0 },\n ],\n body: (_part, w, h) => {\n const cy = h / 2;\n const bodyW = w * 0.55;\n const bodyX = (w - bodyW) / 2;\n return [\n pathShape(`M 0 ${cy} L ${bodyX} ${cy}`, { class: \"lt-bb-lead\" }),\n pathShape(`M ${bodyX + bodyW} ${cy} L ${w} ${cy}`, { class: \"lt-bb-lead\" }),\n rectShape(bodyX, cy - 4, bodyW, 8, { fill: \"#1f2937\", rx: 2 }),\n rectShape(bodyX + bodyW * 0.78, cy - 4, 2, 8, { fill: \"#e5e7eb\" }),\n ].join(\"\");\n },\n};\n\nconst BUTTON: PartSpec = {\n kind: \"button\",\n category: \"grid\",\n width: 2 * PITCH,\n height: 5 * PITCH,\n pins: [\n // tactile: 4 leads at ±1 col / ±2 rows. Pin1=top-left, Pin2=top-right, Pin3=bottom-left, Pin4=bottom-right\n { name: \"1\", x: 0, y: 0 },\n { name: \"2\", x: 2 * PITCH, y: 0 },\n { name: \"3\", x: 0, y: 5 * PITCH },\n { name: \"4\", x: 2 * PITCH, y: 5 * PITCH },\n ],\n straddlesTrough: true,\n body: (_part, w, h) => {\n const bx = w / 2 - 9;\n const by = h / 2 - 9;\n return [\n rectShape(bx, by, 18, 18, { class: \"lt-bb-button\" }),\n circShape(w / 2, h / 2, 5, { fill: \"#1f2937\" }),\n ].join(\"\");\n },\n};\n\nfunction dipSpec(): PartSpec {\n return {\n kind: \"dip\",\n category: \"grid\",\n // width depends on pin count (set by layout based on args.pins)\n width: 7 * PITCH,\n height: 3 * PITCH,\n pins: [],\n straddlesTrough: true,\n body: (part, w, h) => {\n const pins = Math.max(4, Number(part.args.pins ?? 8));\n const perSide = pins / 2;\n const bodyMargin = PITCH / 2;\n return [\n rectShape(bodyMargin, 4, w - 2 * bodyMargin, h - 8, { class: \"lt-bb-dip-body\", rx: 2 }),\n // notch\n circShape(bodyMargin + 6, h / 2, 3, { fill: \"#0f172a\", stroke: \"#475569\", \"stroke-width\": 0.5 }),\n // pin 1 dot\n circShape(bodyMargin + PITCH * 0.6, h / 2 + (h / 2 - 6), 1.2, { fill: \"#fbbf24\" }),\n textShape(w / 2, h / 2 + 1, `IC${perSide * 2}`, { class: \"lt-bb-dip-silk\", \"text-anchor\": \"middle\", \"dominant-baseline\": \"middle\" }),\n ].join(\"\");\n },\n };\n}\n\nconst HEADER: PartSpec = {\n kind: \"header\",\n category: \"grid\",\n width: 4 * PITCH,\n height: PITCH,\n pins: [],\n body: (part, _w, h) => {\n const pins = Math.max(2, Number(part.args.pins ?? 4));\n const dots: string[] = [];\n for (let i = 0; i < pins; i++) {\n dots.push(circShape(i * PITCH, h / 2, 2, { fill: \"#facc15\", stroke: \"#a16207\", \"stroke-width\": 0.6 }));\n }\n return rectShape(-3, h / 2 - 4, pins * PITCH - 8, 8, { fill: \"#0f172a\", rx: 1 }) + dots.join(\"\");\n },\n};\n\n// ─── MCUs (off-board) ────────────────────────────────────────\n\ninterface McuPinSlot { name: string; side: \"left\" | \"right\" | \"top\" | \"bottom\"; idx: number; }\n\nfunction mcuSpec(\n kind: BreadboardPartKind,\n pcbColor: string,\n label: string,\n slots: McuPinSlot[],\n geometry: { width: number; height: number; cornerR: number }\n): PartSpec {\n const { width, height, cornerR } = geometry;\n const pins: PartPin[] = slots.map((s) => {\n const stride = 12;\n if (s.side === \"left\") return { name: s.name, x: 4, y: 14 + s.idx * stride };\n if (s.side === \"right\") return { name: s.name, x: width - 4, y: 14 + s.idx * stride };\n if (s.side === \"top\") return { name: s.name, x: 14 + s.idx * stride, y: 4 };\n return { name: s.name, x: 14 + s.idx * stride, y: height - 4 };\n });\n return {\n kind,\n category: \"side\",\n width,\n height,\n pins,\n body: () => {\n const board = rectShape(0, 0, width, height, { fill: pcbColor, stroke: \"#1e293b\", \"stroke-width\": 1, rx: cornerR });\n const dotEls = pins.map((p) =>\n circShape(p.x, p.y, 2.5, { fill: \"#0f172a\", stroke: \"#facc15\", \"stroke-width\": 0.8 })\n ).join(\"\");\n // pin labels (small text just inside the PCB)\n const labelEls = slots.map((s, i) => {\n const p = pins[i]!;\n const dx = s.side === \"left\" ? 8 : s.side === \"right\" ? -8 : 0;\n const dy = s.side === \"top\" ? 8 : s.side === \"bottom\" ? -8 : 0;\n const anchor = s.side === \"left\" ? \"start\" : s.side === \"right\" ? \"end\" : \"middle\";\n return textShape(p.x + dx, p.y + dy + 3, s.name, {\n class: \"lt-bb-pin-label\",\n \"text-anchor\": anchor,\n });\n }).join(\"\");\n const titleEl = textShape(width / 2, height - 8, label, {\n class: \"lt-bb-board-title\",\n \"text-anchor\": \"middle\",\n });\n return board + dotEls + labelEls + titleEl;\n },\n };\n}\n\n// Subset of Uno pinout: power + commonly-used digital + analog\nconst UNO_SLOTS: McuPinSlot[] = [\n // right edge: digital 13 → 0 (top→bottom)\n { name: \"D13\", side: \"right\", idx: 0 },\n { name: \"D12\", side: \"right\", idx: 1 },\n { name: \"D11\", side: \"right\", idx: 2 },\n { name: \"D10\", side: \"right\", idx: 3 },\n { name: \"D9\", side: \"right\", idx: 4 },\n { name: \"D8\", side: \"right\", idx: 5 },\n { name: \"D7\", side: \"right\", idx: 6 },\n { name: \"D6\", side: \"right\", idx: 7 },\n { name: \"D5\", side: \"right\", idx: 8 },\n { name: \"D4\", side: \"right\", idx: 9 },\n { name: \"D3\", side: \"right\", idx: 10 },\n { name: \"D2\", side: \"right\", idx: 11 },\n { name: \"TX\", side: \"right\", idx: 12 },\n { name: \"RX\", side: \"right\", idx: 13 },\n // left edge: power + analog\n { name: \"RST\", side: \"left\", idx: 0 },\n { name: \"3V3\", side: \"left\", idx: 1 },\n { name: \"5V\", side: \"left\", idx: 2 },\n { name: \"GND\", side: \"left\", idx: 3 },\n { name: \"VIN\", side: \"left\", idx: 4 },\n { name: \"A0\", side: \"left\", idx: 6 },\n { name: \"A1\", side: \"left\", idx: 7 },\n { name: \"A2\", side: \"left\", idx: 8 },\n { name: \"A3\", side: \"left\", idx: 9 },\n { name: \"A4\", side: \"left\", idx: 10 },\n { name: \"A5\", side: \"left\", idx: 11 },\n];\n\nconst ESP32_SLOTS: McuPinSlot[] = [\n { name: \"3V3\", side: \"left\", idx: 0 },\n { name: \"GND\", side: \"left\", idx: 1 },\n { name: \"GPIO15\", side: \"left\", idx: 2 },\n { name: \"GPIO2\", side: \"left\", idx: 3 },\n { name: \"GPIO4\", side: \"left\", idx: 4 },\n { name: \"GPIO5\", side: \"left\", idx: 5 },\n { name: \"GPIO18\", side: \"left\", idx: 6 },\n { name: \"GPIO19\", side: \"left\", idx: 7 },\n { name: \"GPIO21\", side: \"left\", idx: 8 },\n { name: \"GPIO22\", side: \"left\", idx: 9 },\n { name: \"VIN\", side: \"right\", idx: 0 },\n { name: \"GND\", side: \"right\", idx: 1 },\n { name: \"GPIO13\", side: \"right\", idx: 2 },\n { name: \"GPIO12\", side: \"right\", idx: 3 },\n { name: \"GPIO14\", side: \"right\", idx: 4 },\n { name: \"GPIO27\", side: \"right\", idx: 5 },\n { name: \"GPIO26\", side: \"right\", idx: 6 },\n { name: \"GPIO25\", side: \"right\", idx: 7 },\n { name: \"GPIO33\", side: \"right\", idx: 8 },\n { name: \"GPIO32\", side: \"right\", idx: 9 },\n];\n\n// ─── Sensor / display modules ────────────────────────────────\n\nfunction moduleSpec(\n kind: BreadboardPartKind,\n width: number,\n height: number,\n pcbColor: string,\n pinNames: string[],\n label: string\n): PartSpec {\n const stride = (width - 16) / Math.max(1, pinNames.length - 1);\n const pins: PartPin[] = pinNames.map((name, i) => ({\n name,\n x: 8 + i * stride,\n y: height - 4,\n }));\n return {\n kind,\n category: \"module\",\n width,\n height,\n pins,\n body: () => {\n const board = rectShape(0, 0, width, height, { fill: pcbColor, stroke: \"#0f172a\", \"stroke-width\": 1, rx: 4 });\n const headerStrip = rectShape(4, height - 8, width - 8, 5, { fill: \"#0f172a\", rx: 1 });\n const pinDots = pins.map((p) =>\n circShape(p.x, p.y, 2, { fill: \"#facc15\", stroke: \"#a16207\", \"stroke-width\": 0.5 })\n ).join(\"\");\n const pinLabels = pinNames.map((name, i) => {\n const p = pins[i]!;\n return textShape(p.x, height - 12, name, {\n class: \"lt-bb-pin-label-sensor\",\n \"text-anchor\": \"middle\",\n });\n }).join(\"\");\n const titleEl = textShape(width / 2, 18, label, {\n class: \"lt-bb-board-title-sensor\",\n \"text-anchor\": \"middle\",\n });\n return board + headerStrip + pinDots + pinLabels + titleEl;\n },\n };\n}\n\n// ─── Catalog map ─────────────────────────────────────────────\n\nexport const PART_CATALOG: Record<BreadboardPartKind, PartSpec> = {\n resistor: RESISTOR,\n led: LED,\n \"cap-elec\": CAP_ELEC,\n \"cap-ceramic\": CAP_CERAMIC,\n diode: DIODE,\n button: BUTTON,\n dip: dipSpec(),\n header: HEADER,\n \"mcu-uno\": mcuSpec(\"mcu-uno\", \"#0d9488\", \"Arduino Uno\", UNO_SLOTS, { width: 110, height: 200, cornerR: 6 }),\n \"mcu-nano\": mcuSpec(\"mcu-nano\", \"#0d9488\", \"Arduino Nano\", UNO_SLOTS.slice(0, 18), { width: 90, height: 180, cornerR: 4 }),\n \"mcu-esp32\": mcuSpec(\"mcu-esp32\", \"#1e293b\", \"ESP32 DevKit\", ESP32_SLOTS, { width: 110, height: 180, cornerR: 4 }),\n \"mcu-pico\": mcuSpec(\"mcu-pico\", \"#1e3a8a\", \"Raspberry Pi Pico\", ESP32_SLOTS, { width: 100, height: 180, cornerR: 4 }),\n \"sensor-hcsr04\": moduleSpec(\"sensor-hcsr04\", 100, 60, \"#1e3a8a\", [\"VCC\", \"TRIG\", \"ECHO\", \"GND\"], \"HC-SR04\"),\n \"sensor-dht11\": moduleSpec(\"sensor-dht11\", 70, 60, \"#1e40af\", [\"VCC\", \"DATA\", \"GND\"], \"DHT11\"),\n \"sensor-dht22\": moduleSpec(\"sensor-dht22\", 70, 60, \"#1e40af\", [\"VCC\", \"DATA\", \"GND\"], \"DHT22\"),\n \"display-oled-ssd1306\": moduleSpec(\"display-oled-ssd1306\", 90, 60, \"#0f172a\", [\"GND\", \"VCC\", \"SCL\", \"SDA\"], \"OLED 128×64\"),\n \"display-lcd-1602-i2c\": moduleSpec(\"display-lcd-1602-i2c\", 130, 60, \"#166534\", [\"GND\", \"VCC\", \"SDA\", \"SCL\"], \"LCD 1602 I²C\"),\n \"module-rotary-ky040\": moduleSpec(\"module-rotary-ky040\", 80, 60, \"#7c2d12\", [\"CLK\", \"DT\", \"SW\", \"VCC\", \"GND\"], \"KY-040\"),\n \"actuator-servo-sg90\": moduleSpec(\"actuator-servo-sg90\", 60, 60, \"#475569\", [\"GND\", \"VCC\", \"SIG\"], \"Servo SG90\"),\n};\n\nexport function partSpec(kind: BreadboardPartKind, args: Record<string, string | number> = {}): PartSpec {\n const base = PART_CATALOG[kind];\n if (!base) throw new Error(`Unknown breadboard part kind: ${kind}`);\n\n // Resistor: width grows with span (cols arg, default 4)\n if (kind === \"resistor\") {\n const cols = Math.max(2, Number(args.cols ?? 4));\n return {\n ...base,\n width: cols * PITCH,\n pins: [\n { name: \"1\", x: 0, y: 0 },\n { name: \"2\", x: cols * PITCH, y: 0 },\n ],\n };\n }\n // Diode: same pattern\n if (kind === \"diode\") {\n const cols = Math.max(2, Number(args.cols ?? 3));\n return {\n ...base,\n width: cols * PITCH,\n pins: [\n { name: \"anode\", x: 0, y: 0 },\n { name: \"cathode\", x: cols * PITCH, y: 0 },\n ],\n };\n }\n // DIP: width = (pins/2) cols; pins along long edges\n if (kind === \"dip\") {\n const pinCount = Math.max(4, Number(args.pins ?? 8));\n const perSide = pinCount / 2;\n const w = perSide * PITCH;\n const h = 3 * PITCH; // straddles trough: 3 rows tall (top half row e + trough + bottom half row f)\n const pins: PartPin[] = [];\n for (let i = 0; i < perSide; i++) {\n pins.push({ name: String(i + 1), x: i * PITCH, y: 0 });\n pins.push({ name: String(pinCount - i), x: i * PITCH, y: h });\n }\n return { ...base, width: w, height: h, pins };\n }\n // Header: width grows with pins\n if (kind === \"header\") {\n const pinCount = Math.max(2, Number(args.pins ?? 4));\n const pins: PartPin[] = [];\n for (let i = 0; i < pinCount; i++) pins.push({ name: String(i + 1), x: i * PITCH, y: 0 });\n return { ...base, width: pinCount * PITCH, pins };\n }\n // LED color is rendered via body() — same footprint regardless of color.\n return base;\n}\n\n// ─── Public utilities ────────────────────────────────────────\n\n/** The default hole pitch in canvas pixels. Exported so layout / renderer agree. */\nexport const HOLE_PITCH = PITCH;\n","/**\n * Breadboard layout. Resolves DSL coordinates to canvas pixels:\n * 1. Determine substrate geometry (cols, rails, trough).\n * 2. Place grid parts at hole-snapped coordinates.\n * 3. Place side-placed MCUs to left/right/above/below the substrate\n * with padding so pin labels are readable.\n * 4. Resolve wire endpoints to canvas px and compute Bézier paths.\n */\n\nimport type {\n BreadboardAst,\n BreadboardCoord,\n BreadboardEndpoint,\n BreadboardLayoutPart,\n BreadboardLayoutResult,\n BreadboardLayoutSubstrate,\n BreadboardLayoutWire,\n BreadboardPart,\n} from \"../../core/types\";\nimport { partSpec, HOLE_PITCH } from \"./parts\";\n\nexport const BB_CONST = {\n PITCH: HOLE_PITCH,\n RAIL_HEIGHT: 18,\n TROUGH: HOLE_PITCH,\n BOARD_PAD_X: 24,\n BOARD_PAD_Y: 16,\n ROW_LABEL_W: 14,\n COL_LABEL_H: 12,\n MCU_GAP: 28,\n MARGIN: 24,\n} as const;\n\nconst ROW_INDEX: Record<string, number> = { a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9 };\n\n// ─── Substrate sizing ────────────────────────────────────────\n\nfunction substrateGeom(form: BreadboardAst[\"board\"]): {\n cols: number;\n hasRails: boolean;\n railsBreak: boolean;\n} {\n if (form === \"mini\") return { cols: 17, hasRails: false, railsBreak: false };\n if (form === \"half\") return { cols: 30, hasRails: true, railsBreak: false };\n return { cols: 63, hasRails: true, railsBreak: true };\n}\n\nfunction buildSubstrate(form: BreadboardAst[\"board\"], originX: number, originY: number): BreadboardLayoutSubstrate {\n const { cols, hasRails, railsBreak } = substrateGeom(form);\n const PITCH = BB_CONST.PITCH;\n // Inner grid: 10 rows (a..j). Plus 2 rails on top, 2 rails on bottom (if hasRails).\n const innerW = (cols + 1) * PITCH + BB_CONST.ROW_LABEL_W * 2;\n const railH = hasRails ? BB_CONST.RAIL_HEIGHT * 2 : 0;\n const gridH = 10 * PITCH + BB_CONST.TROUGH;\n const innerH = railH + gridH + BB_CONST.COL_LABEL_H * 2;\n const x = originX;\n const y = originY;\n const width = innerW + BB_CONST.BOARD_PAD_X * 2;\n const height = innerH + BB_CONST.BOARD_PAD_Y * 2;\n // Trough sits between row e and row f. Top rails (if any) → col labels → rows a..e → trough → rows f..j → col labels → bottom rails.\n const topRailsH = hasRails ? BB_CONST.RAIL_HEIGHT : 0;\n const troughY = y + BB_CONST.BOARD_PAD_Y + topRailsH + BB_CONST.COL_LABEL_H + 5 * PITCH + PITCH / 2;\n return {\n x, y, width, height, pitch: PITCH, cols, hasRails, railsBreak,\n troughY, troughHeight: BB_CONST.TROUGH,\n };\n}\n\n// ─── Coord → canvas px ───────────────────────────────────────\n\nfunction holeXY(sub: BreadboardLayoutSubstrate, c: BreadboardCoord): { x: number; y: number } {\n const PITCH = sub.pitch;\n const gridX0 = sub.x + BB_CONST.BOARD_PAD_X + BB_CONST.ROW_LABEL_W + PITCH / 2;\n const topRailsH = sub.hasRails ? BB_CONST.RAIL_HEIGHT : 0;\n const gridY0 = sub.y + BB_CONST.BOARD_PAD_Y + topRailsH + BB_CONST.COL_LABEL_H + PITCH / 2;\n if (c.kind === \"hole\") {\n const colX = gridX0 + (c.col - 1) * PITCH;\n const rowI = ROW_INDEX[c.row]!;\n let rowY = gridY0 + rowI * PITCH;\n if (rowI >= 5) rowY += BB_CONST.TROUGH; // gap between e and f\n return { x: colX, y: rowY };\n }\n // Rail: top or bottom edge, positive or negative stripe.\n const railColX = gridX0 + (c.col - 1) * PITCH;\n const isTop = c.rail.endsWith(\"t\");\n const isPositive = c.rail.startsWith(\"+\");\n if (isTop) {\n const railsTopY = sub.y + BB_CONST.BOARD_PAD_Y;\n const stripY = isPositive ? railsTopY + 4 : railsTopY + BB_CONST.RAIL_HEIGHT - 4;\n return { x: railColX, y: stripY };\n }\n const railsBottomY = sub.y + sub.height - BB_CONST.BOARD_PAD_Y - BB_CONST.RAIL_HEIGHT;\n const stripY = isPositive ? railsBottomY + 4 : railsBottomY + BB_CONST.RAIL_HEIGHT - 4;\n return { x: railColX, y: stripY };\n}\n\n// ─── Part placement ─────────────────────────────────────────\n\nfunction placePart(\n sub: BreadboardLayoutSubstrate,\n part: BreadboardPart,\n reservedSides: { left: number; right: number; above: number; below: number }\n): BreadboardLayoutPart {\n const spec = partSpec(part.kind, part.args);\n if (spec.category === \"side\") {\n const placement = part.placement.kind === \"side\" ? part.placement.side : \"beside-left\";\n let x = 0, y = 0;\n if (placement === \"beside-left\") {\n x = sub.x - BB_CONST.MCU_GAP - spec.width;\n y = sub.y + (sub.height - spec.height) / 2;\n } else if (placement === \"beside-right\") {\n x = sub.x + sub.width + BB_CONST.MCU_GAP;\n y = sub.y + (sub.height - spec.height) / 2;\n } else if (placement === \"above\") {\n x = sub.x + (sub.width - spec.width) / 2;\n y = sub.y - BB_CONST.MCU_GAP - spec.height;\n } else {\n x = sub.x + (sub.width - spec.width) / 2;\n y = sub.y + sub.height + BB_CONST.MCU_GAP;\n }\n const pins: Record<string, { x: number; y: number }> = {};\n for (const p of spec.pins) pins[p.name] = { x: x + p.x, y: y + p.y };\n // track reservations\n if (placement === \"beside-left\") reservedSides.left = Math.max(reservedSides.left, spec.width + BB_CONST.MCU_GAP);\n if (placement === \"beside-right\") reservedSides.right = Math.max(reservedSides.right, spec.width + BB_CONST.MCU_GAP);\n if (placement === \"above\") reservedSides.above = Math.max(reservedSides.above, spec.height + BB_CONST.MCU_GAP);\n if (placement === \"below\") reservedSides.below = Math.max(reservedSides.below, spec.height + BB_CONST.MCU_GAP);\n return {\n part, x, y, width: spec.width, height: spec.height, rotation: 0, pins,\n };\n }\n\n // Grid / module: anchor on first pin coordinate.\n let anchor: BreadboardCoord;\n if (part.placement.kind === \"point\") anchor = part.placement.at;\n else if (part.placement.kind === \"span\") anchor = part.placement.from;\n else throw new Error(`Grid/module part '${part.id}' must use @coord placement`);\n const anchorXY = holeXY(sub, anchor);\n\n // For module parts (sensors / displays): anchor is the first pin (lower-left of module),\n // so module sits *above* the anchor with pin row at its bottom edge.\n if (spec.category === \"module\") {\n // Compute total pin span:\n const lastPin = spec.pins[spec.pins.length - 1]!;\n const pinSpanX = lastPin.x - spec.pins[0]!.x;\n // Position module so first pin lands on anchor.\n const x = anchorXY.x - spec.pins[0]!.x;\n const y = anchorXY.y - spec.pins[0]!.y; // pin y is near bottom of module body\n void pinSpanX;\n const pins: Record<string, { x: number; y: number }> = {};\n for (const p of spec.pins) pins[p.name] = { x: x + p.x, y: y + p.y };\n return { part, x, y, width: spec.width, height: spec.height, rotation: 0, pins };\n }\n\n // Grid part: pins[0] sits at anchor.\n const x = anchorXY.x;\n let y = anchorXY.y;\n // For DIPs / button which straddle trough: anchor is row e, top edge — body extends across trough.\n if (spec.straddlesTrough) {\n // Center body so pin row 1 (y=0) stays at anchor row, pin row 2 (y=h) reaches the matching row across trough.\n // anchor y is the *top* pin row; the layout coord anchor must be on row e (or symmetrical).\n }\n // Adjust y so pin centerline aligns with anchor when part is one-row tall.\n if (spec.height === BB_CONST.PITCH) {\n y = anchorXY.y - spec.height / 2;\n }\n const pins: Record<string, { x: number; y: number }> = {};\n for (const p of spec.pins) pins[p.name] = { x: x + p.x, y: y + p.y };\n return { part, x, y, width: spec.width, height: spec.height, rotation: 0, pins };\n}\n\n// ─── Wire endpoint resolution ───────────────────────────────\n\nfunction endpointXY(\n ep: BreadboardEndpoint,\n parts: BreadboardLayoutPart[],\n sub: BreadboardLayoutSubstrate\n): { x: number; y: number } {\n if (ep.kind === \"coord\") return holeXY(sub, ep.at);\n const part = parts.find((p) => p.part.id === ep.partId);\n if (!part) throw new Error(`Wire references unknown part '${ep.partId}'`);\n const pin = part.pins[ep.pin];\n if (!pin) throw new Error(`Part '${ep.partId}' has no pin named '${ep.pin}'`);\n // Return a copy so post-layout translation doesn't double-shift this point\n // through both part.pins[name] and lw.fromXY.\n return { x: pin.x, y: pin.y };\n}\n\nfunction bezierPath(p1: { x: number; y: number }, p2: { x: number; y: number }, via?: { x: number; y: number }): string {\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < 1) return `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n // Perpendicular unit vector\n const nx = -dy / dist;\n const ny = dx / dist;\n // Magnitude: 0.4 × max(|dx|,|dy|), but at least 14 so short wires still arc visibly.\n const mag = Math.max(14, 0.4 * Math.max(Math.abs(dx), Math.abs(dy)));\n // For \"natural\" arc: bow upward (negative y) when chord runs left→right horizontally;\n // bow rightward when chord runs top→bottom.\n // We pick perpendicular sign so the wire arcs away from the substrate center for off-board MCUs,\n // but a single-sign default works fine: use +nx,+ny for left→right, flip for right→left.\n const sign = dx >= 0 ? 1 : -1;\n let cp1x: number, cp1y: number, cp2x: number, cp2y: number;\n if (via) {\n // Steer both control points toward 'via'.\n cp1x = (p1.x + via.x) / 2;\n cp1y = (p1.y + via.y) / 2;\n cp2x = (via.x + p2.x) / 2;\n cp2y = (via.y + p2.y) / 2;\n } else {\n const offX = nx * mag * sign;\n const offY = ny * mag * sign;\n cp1x = p1.x + dx * 0.25 + offX;\n cp1y = p1.y + dy * 0.25 + offY;\n cp2x = p1.x + dx * 0.75 + offX;\n cp2y = p1.y + dy * 0.75 + offY;\n }\n return `M ${p1.x.toFixed(2)} ${p1.y.toFixed(2)} C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)} ${cp2x.toFixed(2)} ${cp2y.toFixed(2)} ${p2.x.toFixed(2)} ${p2.y.toFixed(2)}`;\n}\n\n// ─── Public API ─────────────────────────────────────────────\n\nexport function layoutBreadboard(ast: BreadboardAst): BreadboardLayoutResult {\n // Place parts to discover side reservations.\n const reserved = { left: 0, right: 0, above: 0, below: 0 };\n // Pre-scan side-placed parts only to compute final substrate offset.\n for (const part of ast.parts) {\n if (part.placement.kind === \"side\") {\n const spec = partSpec(part.kind, part.args);\n const side = part.placement.side;\n if (side === \"beside-left\") reserved.left = Math.max(reserved.left, spec.width + BB_CONST.MCU_GAP);\n if (side === \"beside-right\") reserved.right = Math.max(reserved.right, spec.width + BB_CONST.MCU_GAP);\n if (side === \"above\") reserved.above = Math.max(reserved.above, spec.height + BB_CONST.MCU_GAP);\n if (side === \"below\") reserved.below = Math.max(reserved.below, spec.height + BB_CONST.MCU_GAP);\n }\n }\n\n // Final substrate origin: shift right by `reserved.left`, down by `reserved.above`.\n const sub = buildSubstrate(\n ast.board,\n BB_CONST.MARGIN + reserved.left,\n BB_CONST.MARGIN + reserved.above + (ast.title ? 30 : 0)\n );\n\n // Now place all parts against final substrate.\n const reservedFinal = { left: 0, right: 0, above: 0, below: 0 };\n const parts: BreadboardLayoutPart[] = ast.parts.map((p) => placePart(sub, p, reservedFinal));\n\n // Wires.\n const wires: BreadboardLayoutWire[] = ast.wires.map((wire) => {\n const fromXY = endpointXY(wire.from, parts, sub);\n const toXY = endpointXY(wire.to, parts, sub);\n return {\n wire,\n path: \"\", // computed after final shift below\n fromXY,\n toXY,\n color: wire.color,\n };\n });\n\n // Canvas size — bounding box across substrate + side parts + wires.\n let minX = sub.x;\n let minY = sub.y;\n let maxX = sub.x + sub.width;\n let maxY = sub.y + sub.height;\n for (const lp of parts) {\n minX = Math.min(minX, lp.x);\n minY = Math.min(minY, lp.y);\n maxX = Math.max(maxX, lp.x + lp.width);\n maxY = Math.max(maxY, lp.y + lp.height);\n }\n for (const lw of wires) {\n minX = Math.min(minX, lw.fromXY.x, lw.toXY.x);\n minY = Math.min(minY, lw.fromXY.y, lw.toXY.y);\n maxX = Math.max(maxX, lw.fromXY.x, lw.toXY.x);\n maxY = Math.max(maxY, lw.fromXY.y, lw.toXY.y);\n }\n // Translate everything so origin is at (MARGIN, MARGIN).\n const shiftX = BB_CONST.MARGIN - minX;\n const shiftY = BB_CONST.MARGIN - minY;\n if (shiftX !== 0 || shiftY !== 0) {\n sub.x += shiftX;\n sub.y += shiftY;\n sub.troughY += shiftY;\n for (const lp of parts) {\n lp.x += shiftX;\n lp.y += shiftY;\n for (const k of Object.keys(lp.pins)) {\n lp.pins[k]!.x += shiftX;\n lp.pins[k]!.y += shiftY;\n }\n }\n for (const lw of wires) {\n lw.fromXY.x += shiftX;\n lw.fromXY.y += shiftY;\n lw.toXY.x += shiftX;\n lw.toXY.y += shiftY;\n }\n }\n // Render wire paths AFTER the substrate-relative shift so via coords also align.\n for (let i = 0; i < wires.length; i++) {\n const lw = wires[i]!;\n const wire = ast.wires[i]!;\n const viaXY = wire.via ? holeXY(sub, wire.via) : undefined;\n lw.path = bezierPath(lw.fromXY, lw.toXY, viaXY);\n }\n const width = (maxX - minX) + BB_CONST.MARGIN * 2;\n const height = (maxY - minY) + BB_CONST.MARGIN * 2;\n\n return { ast, substrate: sub, parts, wires, width, height };\n}\n","/**\n * Breadboard renderer. Z-order: substrate → rails/labels → holes → parts → wires.\n */\n\nimport type {\n BreadboardLayoutPart,\n BreadboardLayoutResult,\n BreadboardLayoutSubstrate,\n RenderConfig,\n} from \"../../core/types\";\nimport {\n svgRoot,\n group,\n rect as rectEl,\n circle as circleEl,\n text as textEl,\n path as pathEl,\n title as titleEl,\n desc as descEl,\n el,\n escapeXml,\n} from \"../../core/svg\";\nimport { resolveBaseTheme, type BaseTheme } from \"../../core/theme\";\nimport { partSpec } from \"./parts\";\nimport { layoutBreadboard, BB_CONST } from \"./layout\";\nimport { parseBreadboard } from \"./parser\";\n\nconst WIRE_COLOR_MAP: Record<string, string> = {\n red: \"#dc2626\",\n black: \"#1f2937\",\n blue: \"#2563eb\",\n yellow: \"#facc15\",\n orange: \"#f97316\",\n green: \"#16a34a\",\n white: \"#f3f4f6\",\n purple: \"#7c3aed\",\n brown: \"#78350f\",\n grey: \"#64748b\",\n};\n\nfunction buildCss(t: BaseTheme): string {\n return `\n.lt-bb { font-family: system-ui, -apple-system, sans-serif; }\n.lt-bb-title { font: 600 16px sans-serif; fill: ${t.text}; }\n.lt-bb-substrate { fill: #e7d8b6; stroke: #b08c4f; stroke-width: 1.5; }\n.lt-bb-rail-pos { fill: #fde2e2; stroke: #dc2626; stroke-width: 0.6; }\n.lt-bb-rail-neg { fill: #dde7fa; stroke: #2563eb; stroke-width: 0.6; }\n.lt-bb-rail-stripe-pos { stroke: #dc2626; stroke-width: 1.2; }\n.lt-bb-rail-stripe-neg { stroke: #2563eb; stroke-width: 1.2; }\n.lt-bb-trough { fill: #fcfaf3; stroke: #b08c4f; stroke-width: 0.6; }\n.lt-bb-hole { fill: #fafaf6; stroke: #78350f; stroke-width: 0.4; }\n.lt-bb-hole-rail { fill: #fafaf6; stroke: #78350f; stroke-width: 0.4; }\n.lt-bb-col-label { font: 7px sans-serif; fill: #78350f; text-anchor: middle; }\n.lt-bb-row-label { font: 7px sans-serif; fill: #78350f; text-anchor: middle; dominant-baseline: middle; }\n.lt-bb-lead { stroke: #94a3b8; stroke-width: 1.6; fill: none; stroke-linecap: round; }\n.lt-bb-resistor { fill: #f5e9c8; stroke: #92400e; stroke-width: 0.7; }\n.lt-bb-cap-can { fill: #94a3b8; stroke: #1f2937; stroke-width: 0.8; }\n.lt-bb-button { fill: #475569; stroke: #1e293b; stroke-width: 0.8; rx: 1; }\n.lt-bb-dip-body { fill: #1f2937; stroke: #475569; stroke-width: 0.8; }\n.lt-bb-dip-silk { font: 600 8px sans-serif; fill: #f3f4f6; }\n.lt-bb-pin-label { font: 6.5px sans-serif; fill: #f3f4f6; dominant-baseline: middle; }\n.lt-bb-pin-label-sensor { font: 6.5px sans-serif; fill: #f3f4f6; dominant-baseline: middle; }\n.lt-bb-board-title { font: 600 9px sans-serif; fill: #f3f4f6; }\n.lt-bb-board-title-sensor { font: 600 9px sans-serif; fill: #f3f4f6; }\n.lt-bb-part-label { font: 600 9px sans-serif; fill: ${t.text}; text-anchor: middle; }\n.lt-bb-wire { fill: none; stroke-width: 2.4; stroke-linecap: round; opacity: 0.95; }\n.lt-bb-wire-dot { stroke: #0f172a; stroke-width: 0.6; }\n`.trim();\n}\n\n// ─── Substrate rendering ─────────────────────────────────────\n\nfunction renderSubstrate(sub: BreadboardLayoutSubstrate): string {\n const PITCH = sub.pitch;\n const elements: string[] = [];\n\n // Substrate body\n elements.push(rectEl({\n x: sub.x, y: sub.y, width: sub.width, height: sub.height,\n rx: 6, class: \"lt-bb-substrate\",\n }));\n\n // Trough\n elements.push(rectEl({\n x: sub.x + BB_CONST.BOARD_PAD_X,\n y: sub.troughY - sub.troughHeight / 2,\n width: sub.width - BB_CONST.BOARD_PAD_X * 2,\n height: sub.troughHeight,\n class: \"lt-bb-trough\",\n }));\n\n // Rails\n if (sub.hasRails) {\n const rails = [\n { y: sub.y + BB_CONST.BOARD_PAD_Y, type: \"top\" },\n { y: sub.y + sub.height - BB_CONST.BOARD_PAD_Y - BB_CONST.RAIL_HEIGHT, type: \"bottom\" },\n ];\n for (const r of rails) {\n // Positive stripe (red, top half of rail strip)\n elements.push(pathEl({\n d: `M ${sub.x + BB_CONST.BOARD_PAD_X} ${r.y + 4} L ${sub.x + sub.width - BB_CONST.BOARD_PAD_X} ${r.y + 4}`,\n class: \"lt-bb-rail-stripe-pos\",\n }));\n // Negative stripe (blue)\n elements.push(pathEl({\n d: `M ${sub.x + BB_CONST.BOARD_PAD_X} ${r.y + BB_CONST.RAIL_HEIGHT - 4} L ${sub.x + sub.width - BB_CONST.BOARD_PAD_X} ${r.y + BB_CONST.RAIL_HEIGHT - 4}`,\n class: \"lt-bb-rail-stripe-neg\",\n }));\n // Rail break (only on full board)\n if (sub.railsBreak) {\n const breakX1 = sub.x + BB_CONST.BOARD_PAD_X + BB_CONST.ROW_LABEL_W + (30) * PITCH - PITCH / 2;\n const breakX2 = breakX1 + PITCH;\n elements.push(rectEl({\n x: breakX1, y: r.y, width: breakX2 - breakX1, height: BB_CONST.RAIL_HEIGHT,\n fill: \"#e7d8b6\",\n }));\n }\n // Rail holes\n for (let c = 1; c <= sub.cols; c++) {\n const cx = sub.x + BB_CONST.BOARD_PAD_X + BB_CONST.ROW_LABEL_W + PITCH / 2 + (c - 1) * PITCH;\n elements.push(circleEl({ cx, cy: r.y + 4, r: 1.4, class: \"lt-bb-hole-rail\" }));\n elements.push(circleEl({ cx, cy: r.y + BB_CONST.RAIL_HEIGHT - 4, r: 1.4, class: \"lt-bb-hole-rail\" }));\n }\n }\n }\n\n // Column labels (every 5)\n const topRailsH = sub.hasRails ? BB_CONST.RAIL_HEIGHT : 0;\n const colLabelY = sub.y + BB_CONST.BOARD_PAD_Y + topRailsH + 8;\n for (let c = 5; c <= sub.cols; c += 5) {\n const cx = sub.x + BB_CONST.BOARD_PAD_X + BB_CONST.ROW_LABEL_W + PITCH / 2 + (c - 1) * PITCH;\n elements.push(textEl({ x: cx, y: colLabelY, class: \"lt-bb-col-label\" }, String(c)));\n }\n // Bottom column labels\n const colLabelY2 = sub.y + sub.height - BB_CONST.BOARD_PAD_Y - (sub.hasRails ? BB_CONST.RAIL_HEIGHT : 0) - 4;\n for (let c = 5; c <= sub.cols; c += 5) {\n const cx = sub.x + BB_CONST.BOARD_PAD_X + BB_CONST.ROW_LABEL_W + PITCH / 2 + (c - 1) * PITCH;\n elements.push(textEl({ x: cx, y: colLabelY2, class: \"lt-bb-col-label\" }, String(c)));\n }\n\n // Row labels (a..e top, f..j bottom) on left and right sides\n const rowsTop = [\"a\", \"b\", \"c\", \"d\", \"e\"];\n const rowsBot = [\"f\", \"g\", \"h\", \"i\", \"j\"];\n const gridY0 = sub.y + BB_CONST.BOARD_PAD_Y + topRailsH + BB_CONST.COL_LABEL_H + PITCH / 2;\n for (let i = 0; i < 5; i++) {\n const yTop = gridY0 + i * PITCH;\n const yBot = gridY0 + (i + 5) * PITCH + BB_CONST.TROUGH;\n elements.push(textEl({ x: sub.x + BB_CONST.BOARD_PAD_X + 4, y: yTop, class: \"lt-bb-row-label\" }, rowsTop[i]!));\n elements.push(textEl({ x: sub.x + sub.width - BB_CONST.BOARD_PAD_X - 4, y: yTop, class: \"lt-bb-row-label\" }, rowsTop[i]!));\n elements.push(textEl({ x: sub.x + BB_CONST.BOARD_PAD_X + 4, y: yBot, class: \"lt-bb-row-label\" }, rowsBot[i]!));\n elements.push(textEl({ x: sub.x + sub.width - BB_CONST.BOARD_PAD_X - 4, y: yBot, class: \"lt-bb-row-label\" }, rowsBot[i]!));\n }\n\n // Holes (10 rows × cols)\n for (let c = 1; c <= sub.cols; c++) {\n for (let r = 0; r < 10; r++) {\n const cx = sub.x + BB_CONST.BOARD_PAD_X + BB_CONST.ROW_LABEL_W + PITCH / 2 + (c - 1) * PITCH;\n let cy = gridY0 + r * PITCH;\n if (r >= 5) cy += BB_CONST.TROUGH;\n elements.push(circleEl({ cx, cy, r: 1.6, class: \"lt-bb-hole\" }));\n }\n }\n\n return group({ class: \"lt-bb-substrate-group\" }, elements);\n}\n\n// ─── Parts ───────────────────────────────────────────────────\n\nfunction renderPart(lp: BreadboardLayoutPart): string {\n const spec = partSpec(lp.part.kind, lp.part.args);\n const body = spec.body(lp.part, lp.width, lp.height);\n const labelText = lp.part.label ?? defaultPartLabel(lp);\n const labelEl = labelText\n ? textEl({\n x: lp.x + lp.width / 2,\n y: spec.category === \"side\" ? lp.y - 6 : lp.y - 4,\n class: \"lt-bb-part-label\",\n }, labelText)\n : \"\";\n return group(\n { class: `lt-bb-part lt-bb-part-${lp.part.kind}`, transform: `translate(${lp.x.toFixed(2)} ${lp.y.toFixed(2)})` },\n [body]\n ) + labelEl;\n}\n\nfunction defaultPartLabel(lp: BreadboardLayoutPart): string | undefined {\n const id = lp.part.id;\n const args = lp.part.args;\n if (lp.part.kind === \"resistor\" && args.value !== undefined) {\n return `${id.toUpperCase()} ${args.value}Ω`;\n }\n if (lp.part.kind === \"led\" && args.color) {\n return `${id.toUpperCase()} (${String(args.color)})`;\n }\n if (lp.part.kind.startsWith(\"mcu-\") || lp.part.kind.startsWith(\"sensor-\") || lp.part.kind.startsWith(\"display-\") || lp.part.kind.startsWith(\"module-\") || lp.part.kind.startsWith(\"actuator-\")) {\n return undefined; // module body draws its own title\n }\n return id.toUpperCase();\n}\n\n// ─── Wires ───────────────────────────────────────────────────\n\nfunction renderWire(lw: BreadboardLayoutResult[\"wires\"][number]): string {\n const stroke = WIRE_COLOR_MAP[lw.color] ?? \"#475569\";\n const path = pathEl({ d: lw.path, class: \"lt-bb-wire\", stroke });\n const dot1 = circleEl({ cx: lw.fromXY.x, cy: lw.fromXY.y, r: 1.8, fill: stroke, class: \"lt-bb-wire-dot\" });\n const dot2 = circleEl({ cx: lw.toXY.x, cy: lw.toXY.y, r: 1.8, fill: stroke, class: \"lt-bb-wire-dot\" });\n return path + dot1 + dot2;\n}\n\n// ─── Public API ─────────────────────────────────────────────\n\nexport function renderBreadboardLayout(layout: BreadboardLayoutResult, config?: RenderConfig): string {\n const theme = resolveBaseTheme(config?.theme ?? \"default\");\n const css = buildCss(theme);\n\n const titleStr = layout.ast.title ?? \"Breadboard\";\n\n const titleNode = layout.ast.title\n ? textEl({ x: BB_CONST.MARGIN, y: 22, class: \"lt-bb-title\" }, layout.ast.title)\n : \"\";\n\n const substrate = renderSubstrate(layout.substrate);\n const parts = layout.parts.map(renderPart).join(\"\\n\");\n const wires = layout.wires.map(renderWire).join(\"\\n\");\n\n const inner = [\n titleEl(escapeXml(titleStr)),\n descEl(\"Breadboard wiring diagram generated by Schematex\"),\n el(\"style\", {}, css),\n titleNode,\n substrate,\n group({ class: \"lt-bb-parts\" }, [parts]),\n group({ class: \"lt-bb-wires\" }, [wires]),\n ];\n\n return svgRoot(\n {\n width: layout.width,\n height: layout.height,\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n class: \"lt-bb\",\n },\n inner\n );\n}\n\nexport function renderBreadboard(text: string, config?: RenderConfig): string {\n const ast = parseBreadboard(text);\n const layout = layoutBreadboard(ast);\n return renderBreadboardLayout(layout, config);\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseBreadboard } from \"./parser\";\nimport { renderBreadboard } from \"./renderer\";\n\nexport const breadboard: DiagramPlugin = {\n type: \"breadboard\",\n detect(text: string): boolean {\n for (const raw of text.split(/\\r?\\n/)) {\n const t = raw.trim();\n if (t.length === 0) continue;\n if (t.startsWith(\"//\") || t.startsWith(\"#\")) continue;\n const first = t.split(/\\s+/)[0]?.toLowerCase() ?? \"\";\n return first === \"breadboard\";\n }\n return false;\n },\n parse: parseBreadboard,\n render(text: string, config?: RenderConfig): string {\n return renderBreadboard(text, config);\n },\n};\n\nexport { parseBreadboard, BreadboardParseError } from \"./parser\";\nexport { renderBreadboard, renderBreadboardLayout } from \"./renderer\";\nexport { layoutBreadboard, BB_CONST } from \"./layout\";\nexport { partSpec, PART_CATALOG, HOLE_PITCH } from \"./parts\";\n","/**\n * BPMN parser — DSL → BpmnAst.\n *\n * Grammar (v0.1, see docs/reference/25-BPMN-STANDARD.md §5):\n *\n * bpmn\n * direction: LR | TB\n * title: \"...\"\n *\n * pool \"Customer\" blackbox\n *\n * pool \"Bank\" {\n * lane \"Clerk\" {\n * id: start \"label\"\n * id: task user \"label\"\n * id: gateway xor \"label\"\n * id: end \"label\"\n * }\n * }\n *\n * flows\n * A --> B\n * G1 --? \"yes\" --> C\n * G1 --* \"default\" --> F\n * \"Customer\" ~~> A : \"Submit\"\n *\n * Validation enforced here:\n * - Pool / lane / object id uniqueness within a pool.\n * - Black-box pools have no children.\n * - Sequence flow stays inside one pool.\n * - Message flow crosses pool boundaries.\n * - At most one default flow per gateway.\n */\nimport type {\n BpmnActivity,\n BpmnAst,\n BpmnDirection,\n BpmnEvent,\n BpmnFlow,\n BpmnFlowKind,\n BpmnGateway,\n BpmnGatewayKind,\n BpmnLane,\n BpmnPool,\n BpmnTaskMarker,\n} from \"../../core/types\";\n\nexport class BpmnParseError extends Error {\n constructor(message: string, public line: number) {\n super(`bpmn:${line}: ${message}`);\n this.name = \"BpmnParseError\";\n }\n}\n\ninterface Line {\n /** Trimmed source. */\n text: string;\n /** 1-based source line number. */\n no: number;\n}\n\nconst STRING_RE = /\"((?:\\\\.|[^\"\\\\])*)\"/;\n\nfunction unquote(s: string): string {\n return s.replace(/^\"|\"$/g, \"\").replace(/\\\\\"/g, '\"');\n}\n\nfunction takeQuoted(rest: string): { value: string; rest: string } | null {\n const m = rest.match(/^\\s*\"((?:\\\\.|[^\"\\\\])*)\"\\s*/);\n if (!m) return null;\n return { value: m[1]!.replace(/\\\\\"/g, '\"'), rest: rest.slice(m[0].length) };\n}\n\nfunction preprocessLines(text: string): Line[] {\n const out: Line[] = [];\n const raw = text.split(/\\r?\\n/);\n for (let i = 0; i < raw.length; i++) {\n let s = raw[i]!;\n // strip line comments — // and # at column start (or after whitespace)\n // Don't strip inside quoted strings: walk char-by-char.\n let inStr = false;\n let stripFrom = -1;\n for (let j = 0; j < s.length; j++) {\n const c = s[j]!;\n if (c === '\"' && (j === 0 || s[j - 1] !== \"\\\\\")) inStr = !inStr;\n if (inStr) continue;\n if (c === \"/\" && s[j + 1] === \"/\") { stripFrom = j; break; }\n if (c === \"#\") { stripFrom = j; break; }\n }\n if (stripFrom >= 0) s = s.slice(0, stripFrom);\n s = s.trim();\n if (s.length === 0) continue;\n out.push({ text: s, no: i + 1 });\n }\n return out;\n}\n\nexport function parseBpmn(text: string): BpmnAst {\n const lines = preprocessLines(text);\n if (lines.length === 0) throw new BpmnParseError(\"empty input\", 1);\n\n // Header: \"bpmn\" must be the first line.\n if (lines[0]!.text.toLowerCase().split(/\\s+/)[0] !== \"bpmn\") {\n throw new BpmnParseError(\n \"diagram must start with `bpmn` keyword\",\n lines[0]!.no\n );\n }\n\n let direction: BpmnDirection = \"LR\";\n let title: string | undefined;\n const pools: BpmnPool[] = [];\n const lanesById = new Map<string, BpmnLane>();\n const events: BpmnEvent[] = [];\n const activities: BpmnActivity[] = [];\n const gateways: BpmnGateway[] = [];\n const flows: BpmnFlow[] = [];\n\n // Object id → owning pool/lane (for cross-checks during flow parsing).\n const objectOwner = new Map<string, { poolId: string; laneId: string }>();\n // Pool labels can be referenced by quoted name in message flows.\n const poolByLabel = new Map<string, BpmnPool>();\n\n let cursor = 1;\n\n // ── Header lines: direction / title / pools / flows ─────────\n while (cursor < lines.length) {\n const ln = lines[cursor]!;\n const lower = ln.text.toLowerCase();\n\n if (lower.startsWith(\"direction:\")) {\n const v = ln.text.slice(\"direction:\".length).trim().toUpperCase();\n if (v !== \"LR\" && v !== \"TB\") {\n throw new BpmnParseError(\n `direction must be LR or TB (got '${v}')`,\n ln.no\n );\n }\n direction = v as BpmnDirection;\n cursor++;\n continue;\n }\n if (lower.startsWith(\"title:\")) {\n const rest = ln.text.slice(\"title:\".length).trim();\n const q = takeQuoted(rest);\n if (q) title = q.value;\n else title = rest;\n cursor++;\n continue;\n }\n\n if (lower === \"flows\" || lower.startsWith(\"flows \")) {\n cursor++;\n while (cursor < lines.length) {\n parseFlowLine(lines[cursor]!, flows, objectOwner, poolByLabel);\n cursor++;\n }\n break;\n }\n\n if (lower.startsWith(\"pool\")) {\n cursor = parsePool(lines, cursor, pools, lanesById, events, activities, gateways, objectOwner, poolByLabel);\n continue;\n }\n\n throw new BpmnParseError(\n `unexpected token at top level: '${ln.text.slice(0, 32)}'`,\n ln.no\n );\n }\n\n // ── Cross-validations ──────────────────────────────────────\n\n // Black-box pools must have zero objects.\n for (const p of pools) {\n if (!p.blackbox) continue;\n const hasObjs = [...events, ...activities, ...gateways].some(\n (o) => o.poolId === p.id\n );\n if (hasObjs) {\n throw new BpmnParseError(\n `black-box pool \"${p.label}\" cannot contain flow objects`,\n 1\n );\n }\n }\n\n // Sequence/conditional/default flows must stay in the same pool.\n // Message flows must cross pool boundaries.\n for (const f of flows) {\n if (f.kind === \"message\") continue;\n const fromOwn = objectOwner.get(f.from);\n const toOwn = objectOwner.get(f.to);\n if (!fromOwn) throw new BpmnParseError(`unknown source '${f.from}' in sequence flow`, 1);\n if (!toOwn) throw new BpmnParseError(`unknown target '${f.to}' in sequence flow`, 1);\n if (fromOwn.poolId !== toOwn.poolId) {\n throw new BpmnParseError(\n `sequence flow '${f.from} --> ${f.to}' crosses pool boundary — use message flow (~~>)`,\n 1\n );\n }\n }\n for (const f of flows) {\n if (f.kind !== \"message\") continue;\n const fromIsPool = poolByLabel.has(f.from);\n const toIsPool = poolByLabel.has(f.to);\n const fromOwn = objectOwner.get(f.from);\n const toOwn = objectOwner.get(f.to);\n const fromPool = fromIsPool ? poolByLabel.get(f.from)!.id : fromOwn?.poolId;\n const toPool = toIsPool ? poolByLabel.get(f.to)!.id : toOwn?.poolId;\n if (!fromPool || !toPool) {\n throw new BpmnParseError(\n `unknown endpoint in message flow '${f.from} ~~> ${f.to}'`,\n 1\n );\n }\n if (fromPool === toPool) {\n throw new BpmnParseError(\n `message flow '${f.from} ~~> ${f.to}' must cross pool boundaries`,\n 1\n );\n }\n }\n\n // ≤1 default flow per gateway.\n const defaultsBySrc = new Map<string, number>();\n for (const f of flows) {\n if (f.kind !== \"default\") continue;\n defaultsBySrc.set(f.from, (defaultsBySrc.get(f.from) ?? 0) + 1);\n }\n for (const [src, n] of defaultsBySrc) {\n if (n > 1) {\n throw new BpmnParseError(\n `gateway '${src}' has ${n} default flows (max 1)`,\n 1\n );\n }\n }\n\n return {\n type: \"bpmn\",\n direction,\n title,\n pools,\n lanes: pools.flatMap((p) => p.lanes.map((id) => lanesById.get(id)!).filter(Boolean)),\n events,\n activities,\n gateways,\n flows,\n };\n}\n\n// ─── Pool / lane parsing ───────────────────────────────────────\n\nfunction parsePool(\n lines: Line[],\n startIdx: number,\n pools: BpmnPool[],\n lanesById: Map<string, BpmnLane>,\n events: BpmnEvent[],\n activities: BpmnActivity[],\n gateways: BpmnGateway[],\n objectOwner: Map<string, { poolId: string; laneId: string }>,\n poolByLabel: Map<string, BpmnPool>\n): number {\n const ln = lines[startIdx]!;\n // pool \"Label\" [blackbox] [{]\n const m = ln.text.match(/^pool\\s+(\"(?:\\\\.|[^\"\\\\])*\")\\s*(.*)$/);\n if (!m) throw new BpmnParseError(\"malformed pool declaration\", ln.no);\n const label = unquote(m[1]!);\n const tail = m[2]!.trim();\n\n let blackbox = false;\n let hasBrace = false;\n let after = tail;\n if (after.startsWith(\"blackbox\")) {\n blackbox = true;\n after = after.slice(\"blackbox\".length).trim();\n }\n if (after === \"{\") hasBrace = true;\n else if (after.length > 0)\n throw new BpmnParseError(`unexpected tokens after pool header: '${after}'`, ln.no);\n\n const poolId = `__pool_${pools.length}`;\n const pool: BpmnPool = { id: poolId, label, blackbox, lanes: [] };\n pools.push(pool);\n if (poolByLabel.has(label)) {\n throw new BpmnParseError(`duplicate pool label \"${label}\"`, ln.no);\n }\n poolByLabel.set(label, pool);\n\n if (!hasBrace) {\n // Single-line pool declaration (typical for blackbox).\n return startIdx + 1;\n }\n\n let i = startIdx + 1;\n while (i < lines.length) {\n const cur = lines[i]!;\n if (cur.text === \"}\") return i + 1;\n\n if (cur.text.toLowerCase().startsWith(\"lane\")) {\n i = parseLane(lines, i, pool, lanesById, events, activities, gateways, objectOwner);\n continue;\n }\n\n // Pool with no lanes — flow objects directly inside pool. Treat as a\n // single implicit lane.\n if (cur.text.match(/^[A-Za-z_][\\w]*\\s*:/)) {\n // create implicit lane lazily\n let implicit = pool.lanes\n .map((id) => lanesById.get(id))\n .find((l) => l?.label === \"\");\n if (!implicit) {\n const laneId = `${poolId}__lane_implicit`;\n implicit = { id: laneId, label: \"\", poolId, children: [] };\n lanesById.set(laneId, implicit);\n pool.lanes.push(laneId);\n }\n i = parseFlowObject(lines, i, pool, implicit, events, activities, gateways, objectOwner);\n continue;\n }\n\n throw new BpmnParseError(\n `unexpected token inside pool: '${cur.text.slice(0, 32)}'`,\n cur.no\n );\n }\n throw new BpmnParseError(`unterminated pool block (missing '}')`, ln.no);\n}\n\nfunction parseLane(\n lines: Line[],\n startIdx: number,\n pool: BpmnPool,\n lanesById: Map<string, BpmnLane>,\n events: BpmnEvent[],\n activities: BpmnActivity[],\n gateways: BpmnGateway[],\n objectOwner: Map<string, { poolId: string; laneId: string }>\n): number {\n const ln = lines[startIdx]!;\n const m = ln.text.match(/^lane\\s+(\"(?:\\\\.|[^\"\\\\])*\")\\s*\\{?\\s*$/);\n if (!m) throw new BpmnParseError(\"malformed lane declaration\", ln.no);\n const label = unquote(m[1]!);\n const hasBrace = ln.text.endsWith(\"{\");\n\n if (pool.blackbox) {\n throw new BpmnParseError(\n `black-box pool \"${pool.label}\" cannot contain lanes`,\n ln.no\n );\n }\n\n const laneId = `${pool.id}__lane_${pool.lanes.length}`;\n const lane: BpmnLane = { id: laneId, label, poolId: pool.id, children: [] };\n lanesById.set(laneId, lane);\n pool.lanes.push(laneId);\n\n if (!hasBrace) return startIdx + 1;\n\n let i = startIdx + 1;\n while (i < lines.length) {\n const cur = lines[i]!;\n if (cur.text === \"}\") return i + 1;\n i = parseFlowObject(lines, i, pool, lane, events, activities, gateways, objectOwner);\n }\n throw new BpmnParseError(`unterminated lane block (missing '}')`, ln.no);\n}\n\n// ─── Flow-object parsing ───────────────────────────────────────\n\nfunction parseFlowObject(\n lines: Line[],\n idx: number,\n pool: BpmnPool,\n lane: BpmnLane,\n events: BpmnEvent[],\n activities: BpmnActivity[],\n gateways: BpmnGateway[],\n objectOwner: Map<string, { poolId: string; laneId: string }>\n): number {\n const ln = lines[idx]!;\n const m = ln.text.match(/^([A-Za-z_][\\w]*)\\s*:\\s*(.+)$/);\n if (!m) {\n throw new BpmnParseError(\n `expected 'id: kind ...' (got '${ln.text.slice(0, 40)}')`,\n ln.no\n );\n }\n const id = m[1]!;\n let body = m[2]!.trim();\n\n if (objectOwner.has(id)) {\n throw new BpmnParseError(`duplicate id '${id}'`, ln.no);\n }\n\n // peel off keyword\n const kw = body.split(/\\s+/)[0]!.toLowerCase();\n body = body.slice(kw.length).trim();\n\n if (kw === \"start\" || kw === \"end\" || kw === \"intermediate\") {\n // optional trigger keyword\n let trigger: BpmnEvent[\"trigger\"] = \"none\";\n const next = body.split(/\\s+/)[0]?.toLowerCase() ?? \"\";\n if (next === \"message\" || next === \"timer\" || next === \"none\") {\n trigger = next as BpmnEvent[\"trigger\"];\n body = body.slice(next.length).trim();\n }\n let label: string | undefined;\n const q = takeQuoted(body);\n if (q) label = q.value;\n // throw vs catch: end events with a trigger throw; start always catch;\n // intermediate without context catch (v0.1 simplification).\n let throwCatch: BpmnEvent[\"throwCatch\"] = \"catch\";\n if (kw === \"end\" && trigger !== \"none\") throwCatch = \"throw\";\n if (kw === \"end\" && trigger === \"none\") throwCatch = \"throw\"; // none-end is a terminator\n const ev: BpmnEvent = {\n id,\n kind: kw as BpmnEvent[\"kind\"],\n trigger,\n throwCatch,\n label,\n laneId: lane.id,\n poolId: pool.id,\n };\n events.push(ev);\n lane.children.push(id);\n objectOwner.set(id, { poolId: pool.id, laneId: lane.id });\n return idx + 1;\n }\n\n if (kw === \"task\") {\n // optional marker + label\n let marker: BpmnTaskMarker = \"abstract\";\n const next = body.split(/\\s+/)[0]?.toLowerCase() ?? \"\";\n if (\n next === \"user\" || next === \"service\" || next === \"send\" ||\n next === \"receive\" || next === \"manual\" || next === \"script\"\n ) {\n marker = next as BpmnTaskMarker;\n body = body.slice(next.length).trim();\n }\n const q = takeQuoted(body);\n if (!q) {\n throw new BpmnParseError(`task '${id}' must have a quoted label`, ln.no);\n }\n const a: BpmnActivity = {\n id,\n kind: \"task\",\n marker,\n label: q.value,\n laneId: lane.id,\n poolId: pool.id,\n };\n activities.push(a);\n lane.children.push(id);\n objectOwner.set(id, { poolId: pool.id, laneId: lane.id });\n return idx + 1;\n }\n\n if (kw === \"subprocess\") {\n const q = takeQuoted(body);\n if (!q) {\n throw new BpmnParseError(\n `subprocess '${id}' must have a quoted label`,\n ln.no\n );\n }\n const after = q.rest.trim();\n if (after !== \"\" && after !== \"collapsed\") {\n throw new BpmnParseError(\n `subprocess '${id}': v0.1 supports collapsed subprocesses only (got '${after}')`,\n ln.no\n );\n }\n const a: BpmnActivity = {\n id,\n kind: \"subprocess-collapsed\",\n marker: \"abstract\",\n label: q.value,\n laneId: lane.id,\n poolId: pool.id,\n };\n activities.push(a);\n lane.children.push(id);\n objectOwner.set(id, { poolId: pool.id, laneId: lane.id });\n return idx + 1;\n }\n\n if (kw === \"gateway\") {\n const next = body.split(/\\s+/)[0]?.toLowerCase() ?? \"\";\n let gatewayKind: BpmnGatewayKind;\n if (next === \"xor\" || next === \"or\" || next === \"and\" || next === \"event\") {\n gatewayKind = next as BpmnGatewayKind;\n body = body.slice(next.length).trim();\n } else {\n throw new BpmnParseError(\n `gateway '${id}' kind must be xor / or / and / event (got '${next}')`,\n ln.no\n );\n }\n let label: string | undefined;\n const q = takeQuoted(body);\n if (q) label = q.value;\n const g: BpmnGateway = {\n id,\n gatewayKind,\n label,\n laneId: lane.id,\n poolId: pool.id,\n };\n gateways.push(g);\n lane.children.push(id);\n objectOwner.set(id, { poolId: pool.id, laneId: lane.id });\n return idx + 1;\n }\n\n throw new BpmnParseError(\n `unknown flow-object kind '${kw}' for id '${id}'`,\n ln.no\n );\n}\n\n// ─── Flow-line parsing ────────────────────────────────────────\n\nfunction parseFlowLine(\n ln: Line,\n flows: BpmnFlow[],\n objectOwner: Map<string, { poolId: string; laneId: string }>,\n poolByLabel: Map<string, BpmnPool>\n): void {\n // Tolerate stand-alone \"flows\" repeats.\n if (ln.text.toLowerCase() === \"flows\") return;\n\n const text = ln.text;\n\n // Endpoint: bare id OR quoted pool name.\n function takeEndpoint(s: string): { ep: string; rest: string } | null {\n const t = s.trimStart();\n if (t.startsWith('\"')) {\n const q = takeQuoted(t);\n if (!q) return null;\n return { ep: q.value, rest: q.rest };\n }\n const m = t.match(/^([A-Za-z_][\\w]*)\\s*/);\n if (!m) return null;\n return { ep: m[1]!, rest: t.slice(m[0].length) };\n }\n\n const head = takeEndpoint(text);\n if (!head) {\n throw new BpmnParseError(\n `flow line: cannot parse source endpoint`,\n ln.no\n );\n }\n let rest = head.rest.trimStart();\n\n // Detect connector kind.\n let kind: BpmnFlowKind;\n let connectorLen: number;\n let connectorLabel: string | undefined;\n\n if (rest.startsWith(\"~~>\")) {\n kind = \"message\";\n connectorLen = 3;\n } else if (rest.startsWith(\"--?\")) {\n // conditional with inline quoted label, then -->\n kind = \"conditional\";\n let r = rest.slice(3).trimStart();\n const q = takeQuoted(r);\n if (q) {\n connectorLabel = q.value;\n r = q.rest.trimStart();\n }\n if (!r.startsWith(\"-->\")) {\n throw new BpmnParseError(\n `conditional flow must end with --> (got '${r.slice(0, 20)}')`,\n ln.no\n );\n }\n connectorLen = rest.length - r.length + 3;\n } else if (rest.startsWith(\"--*\")) {\n kind = \"default\";\n let r = rest.slice(3).trimStart();\n const q = takeQuoted(r);\n if (q) {\n connectorLabel = q.value;\n r = q.rest.trimStart();\n }\n if (!r.startsWith(\"-->\")) {\n throw new BpmnParseError(\n `default flow must end with --> (got '${r.slice(0, 20)}')`,\n ln.no\n );\n }\n connectorLen = rest.length - r.length + 3;\n } else if (rest.startsWith(\"-->\")) {\n kind = \"sequence\";\n connectorLen = 3;\n } else {\n throw new BpmnParseError(\n `unknown flow connector at '${rest.slice(0, 20)}' — use --> / --? / --* / ~~>`,\n ln.no\n );\n }\n\n rest = rest.slice(connectorLen).trimStart();\n const tail = takeEndpoint(rest);\n if (!tail) {\n throw new BpmnParseError(`flow line: cannot parse target endpoint`, ln.no);\n }\n const trailing = tail.rest.trimStart();\n\n // Optional `: \"label\"` (mainly for message flows but allowed everywhere).\n let label: string | undefined = connectorLabel;\n if (trailing.startsWith(\":\")) {\n const q = takeQuoted(trailing.slice(1));\n if (q) label = q.value;\n }\n\n // For message flows, endpoints may be pool names (quoted) — keep raw.\n // Sequence-class flows must have flow-object ids on both ends.\n if (kind !== \"message\") {\n if (poolByLabel.has(head.ep) || poolByLabel.has(tail.ep)) {\n throw new BpmnParseError(\n `non-message flow cannot use a pool name as endpoint`,\n ln.no\n );\n }\n if (!objectOwner.has(head.ep)) {\n throw new BpmnParseError(`unknown source id '${head.ep}'`, ln.no);\n }\n if (!objectOwner.has(tail.ep)) {\n throw new BpmnParseError(`unknown target id '${tail.ep}'`, ln.no);\n }\n } else {\n const fromOk = poolByLabel.has(head.ep) || objectOwner.has(head.ep);\n const toOk = poolByLabel.has(tail.ep) || objectOwner.has(tail.ep);\n if (!fromOk) throw new BpmnParseError(`unknown source '${head.ep}' in message flow`, ln.no);\n if (!toOk) throw new BpmnParseError(`unknown target '${tail.ep}' in message flow`, ln.no);\n }\n\n flows.push({ from: head.ep, to: tail.ep, kind, label });\n}\n\n// Re-export helpers in case tests want them.\nexport { STRING_RE };\n","/**\n * BPMN layout — BpmnAst → BpmnLayoutResult.\n *\n * Strategy (v0.1):\n * 1. Per pool, run longest-path layering using sequence/conditional/default\n * flows to get each object's column index.\n * 2. Within each lane, place objects at their column's X. If multiple\n * objects from the same lane share a column, stack them vertically\n * inside the lane.\n * 3. Lane height = max stack count × row pitch + padding.\n * 4. Pools stacked vertically with a gap; black-box pools render as a\n * thin label band.\n * 5. Routing: Manhattan / orthogonal. Sequence flows bend at the channel\n * midpoint between adjacent columns. Message flows escape upward\n * from the source pool to a routing channel, traverse horizontally,\n * and descend into the target pool.\n */\nimport type {\n BpmnAst,\n BpmnFlowObject,\n BpmnLayoutFlow,\n BpmnLayoutLane,\n BpmnLayoutObject,\n BpmnLayoutPool,\n BpmnLayoutResult,\n BpmnPool,\n} from \"../../core/types\";\n\nexport const BPMN_CONST = {\n taskWidth: 110,\n taskHeight: 60,\n eventRadius: 18,\n gatewaySize: 44,\n /** Horizontal column pitch (center-to-center). */\n colPitch: 150,\n /** Vertical row pitch within a lane (center-to-center). */\n rowPitch: 92,\n /** Padding inside a lane around its content. */\n lanePadX: 28,\n lanePadY: 18,\n /** Lane label band width on left edge. */\n laneLabelWidth: 22,\n /** Pool label band width on left edge. */\n poolLabelWidth: 26,\n /** Minimum lane height. */\n minLaneHeight: 90,\n /** Vertical gap between pools. */\n poolGap: 36,\n /** Top/left page padding. */\n padding: 16,\n /** Black-box pool height. */\n blackboxHeight: 60,\n /** Char width approximation at 12px. */\n charW: 6.4,\n cjkCharW: 12,\n charH: 16,\n} as const;\n\nfunction isCJK(code: number): boolean {\n return (\n (code >= 0x3000 && code <= 0x9fff) ||\n (code >= 0xac00 && code <= 0xd7af) ||\n (code >= 0xff00 && code <= 0xffef)\n );\n}\n\nfunction measureWidth(s: string): number {\n let w = 0;\n for (const ch of s) {\n const c = ch.codePointAt(0) ?? 0;\n w += isCJK(c) ? BPMN_CONST.cjkCharW : BPMN_CONST.charW;\n }\n return w;\n}\n\nfunction objBox(o: BpmnFlowObject): { w: number; h: number } {\n if (\"kind\" in o && (o.kind === \"task\" || o.kind === \"subprocess-collapsed\")) {\n const lblW = measureWidth(o.label) + 26;\n return {\n w: Math.max(BPMN_CONST.taskWidth, Math.min(180, lblW)),\n h: BPMN_CONST.taskHeight,\n };\n }\n if (\"gatewayKind\" in o) {\n return { w: BPMN_CONST.gatewaySize, h: BPMN_CONST.gatewaySize };\n }\n // event\n const r = BPMN_CONST.eventRadius;\n return { w: r * 2, h: r * 2 };\n}\n\nexport function layoutBpmn(ast: BpmnAst): BpmnLayoutResult {\n const allObjects: BpmnFlowObject[] = [\n ...ast.events,\n ...ast.activities,\n ...ast.gateways,\n ];\n const objById = new Map<string, BpmnFlowObject>();\n for (const o of allObjects) objById.set(o.id, o);\n\n // ── 1. Per-pool layering (longest path from sources via sequence-type flows)\n const colByObj = new Map<string, number>();\n for (const pool of ast.pools) {\n if (pool.blackbox) continue;\n layerPool(ast, pool, colByObj);\n }\n\n // ── 2. Per-lane stacking within columns (when multiple lane-objs share col)\n // Within each lane: assign a row index to each object based on column order.\n const rowByObj = new Map<string, number>();\n const laneStackHeight = new Map<string, number>(); // laneId → max rows\n\n for (const lane of ast.lanes) {\n // Group lane children by column.\n const byCol = new Map<number, string[]>();\n for (const childId of lane.children) {\n const col = colByObj.get(childId) ?? 0;\n if (!byCol.has(col)) byCol.set(col, []);\n byCol.get(col)!.push(childId);\n }\n // Stable row assignment: within each column the order in lane.children wins.\n let maxRows = 1;\n for (const [, ids] of byCol) {\n ids.forEach((id, ri) => rowByObj.set(id, ri));\n if (ids.length > maxRows) maxRows = ids.length;\n }\n laneStackHeight.set(lane.id, maxRows);\n }\n\n // ── 3. Compute number of columns globally (pools share x-grid for visual alignment).\n let maxCol = 0;\n for (const c of colByObj.values()) if (c > maxCol) maxCol = c;\n const numCols = maxCol + 1;\n\n // ── 4. Pool / lane geometry.\n const padding = BPMN_CONST.padding;\n const colPitch = BPMN_CONST.colPitch;\n const rowPitch = BPMN_CONST.rowPitch;\n const labelBand = BPMN_CONST.poolLabelWidth + BPMN_CONST.laneLabelWidth;\n\n const innerW = numCols * colPitch + 2 * BPMN_CONST.lanePadX;\n const poolWidth = labelBand + innerW;\n\n const poolLayouts: BpmnLayoutPool[] = [];\n const laneLayouts: BpmnLayoutLane[] = [];\n const objectLayouts: BpmnLayoutObject[] = [];\n\n let cursorY = padding;\n\n for (const pool of ast.pools) {\n const poolY = cursorY;\n\n if (pool.blackbox) {\n const h = BPMN_CONST.blackboxHeight;\n poolLayouts.push({\n pool,\n x: padding,\n y: poolY,\n width: poolWidth,\n height: h,\n labelX: padding,\n labelY: poolY,\n labelWidth: BPMN_CONST.poolLabelWidth,\n });\n cursorY += h + BPMN_CONST.poolGap;\n continue;\n }\n\n // Lanes: stack vertically inside the pool.\n let laneCursor = poolY;\n const poolLaneIds = pool.lanes;\n const poolLaneStartY = poolY;\n let poolH = 0;\n\n for (const laneId of poolLaneIds) {\n const lane = ast.lanes.find((l) => l.id === laneId)!;\n const rows = laneStackHeight.get(lane.id) ?? 1;\n const laneH = Math.max(\n BPMN_CONST.minLaneHeight,\n rows * rowPitch + 2 * BPMN_CONST.lanePadY\n );\n const laneX = padding + BPMN_CONST.poolLabelWidth;\n const laneW = poolWidth - BPMN_CONST.poolLabelWidth;\n laneLayouts.push({\n lane,\n x: laneX,\n y: laneCursor,\n width: laneW,\n height: laneH,\n labelX: laneX,\n labelY: laneCursor,\n labelHeight: BPMN_CONST.laneLabelWidth,\n });\n\n // Place lane children within this lane band.\n const laneInnerLeft = laneX + BPMN_CONST.laneLabelWidth + BPMN_CONST.lanePadX;\n const laneInnerTop = laneCursor + BPMN_CONST.lanePadY;\n\n for (const childId of lane.children) {\n const obj = objById.get(childId)!;\n const col = colByObj.get(childId) ?? 0;\n const row = rowByObj.get(childId) ?? 0;\n const cx = laneInnerLeft + col * colPitch + colPitch / 2;\n const cy = laneInnerTop + row * rowPitch + rowPitch / 2;\n const { w, h } = objBox(obj);\n objectLayouts.push({\n obj,\n x: cx - w / 2,\n y: cy - h / 2,\n width: w,\n height: h,\n });\n }\n\n laneCursor += laneH;\n poolH += laneH;\n }\n\n poolLayouts.push({\n pool,\n x: padding,\n y: poolLaneStartY,\n width: poolWidth,\n height: poolH,\n labelX: padding,\n labelY: poolLaneStartY,\n labelWidth: BPMN_CONST.poolLabelWidth,\n });\n\n cursorY = poolLaneStartY + poolH + BPMN_CONST.poolGap;\n }\n\n const totalHeight = cursorY - BPMN_CONST.poolGap + padding;\n const totalWidth = padding + poolWidth + padding;\n\n // ── 5. Flow routing (Manhattan).\n const objCenter = new Map<string, { x: number; y: number; w: number; h: number }>();\n for (const ol of objectLayouts) {\n objCenter.set(ol.obj.id, {\n x: ol.x + ol.width / 2,\n y: ol.y + ol.height / 2,\n w: ol.width,\n h: ol.height,\n });\n }\n const poolCenter = new Map<string, BpmnLayoutPool>();\n for (const p of poolLayouts) poolCenter.set(p.pool.label, p);\n\n const flowLayouts: BpmnLayoutFlow[] = [];\n for (const f of ast.flows) {\n if (f.kind === \"message\") {\n flowLayouts.push(routeMessageFlow(f, objCenter, poolCenter));\n } else {\n const path = routeSequenceFlow(f, objCenter, objById);\n flowLayouts.push(path);\n }\n }\n\n return {\n ast,\n pools: poolLayouts,\n lanes: laneLayouts,\n objects: objectLayouts,\n flows: flowLayouts,\n width: totalWidth,\n height: totalHeight,\n };\n}\n\n// ─── Per-pool layering ────────────────────────────────────────\n\nfunction layerPool(\n ast: BpmnAst,\n pool: BpmnPool,\n colByObj: Map<string, number>\n): void {\n // Collect objects in this pool.\n const inPool = (id: string): boolean => {\n const ev = ast.events.find((e) => e.id === id);\n if (ev) return ev.poolId === pool.id;\n const a = ast.activities.find((x) => x.id === id);\n if (a) return a.poolId === pool.id;\n const g = ast.gateways.find((x) => x.id === id);\n if (g) return g.poolId === pool.id;\n return false;\n };\n const ids = [\n ...ast.events.filter((e) => e.poolId === pool.id).map((e) => e.id),\n ...ast.activities.filter((a) => a.poolId === pool.id).map((a) => a.id),\n ...ast.gateways.filter((g) => g.poolId === pool.id).map((g) => g.id),\n ];\n\n // Adjacency from sequence-type flows.\n const adj = new Map<string, string[]>();\n const inDeg = new Map<string, number>();\n for (const id of ids) {\n adj.set(id, []);\n inDeg.set(id, 0);\n }\n const allEdges: Array<[string, string]> = [];\n for (const f of ast.flows) {\n if (f.kind === \"message\") continue;\n if (!inPool(f.from) || !inPool(f.to)) continue;\n if (f.from === f.to) continue;\n adj.get(f.from)!.push(f.to);\n inDeg.set(f.to, (inDeg.get(f.to) ?? 0) + 1);\n allEdges.push([f.from, f.to]);\n }\n\n // Cycle break via DFS — back edges (u→v where v is ancestor of u in the\n // DFS tree) get tagged and excluded from longest-path layering. BPMN\n // rework loops (D → C → G → D) are common, so we must handle them.\n const backEdges = new Set<string>();\n const color = new Map<string, number>(); // 0=white, 1=gray, 2=black\n for (const id of ids) color.set(id, 0);\n const dfs = (v: string): void => {\n color.set(v, 1);\n for (const w of adj.get(v) ?? []) {\n const c = color.get(w) ?? 0;\n if (c === 1) {\n // back edge\n backEdges.add(`${v}\\0${w}`);\n } else if (c === 0) {\n dfs(w);\n }\n }\n color.set(v, 2);\n };\n // Start DFS from start events first, then any remaining whites.\n const starts = ast.events.filter((e) => e.poolId === pool.id && e.kind === \"start\").map((e) => e.id);\n for (const s of starts) if ((color.get(s) ?? 0) === 0) dfs(s);\n for (const id of ids) if ((color.get(id) ?? 0) === 0) dfs(id);\n\n // Forward-edge longest path (back edges excluded).\n const fwdAdj = new Map<string, string[]>();\n for (const id of ids) fwdAdj.set(id, []);\n for (const [u, v] of allEdges) {\n if (backEdges.has(`${u}\\0${v}`)) continue;\n fwdAdj.get(u)!.push(v);\n }\n // Topo sort over forward DAG.\n const fwdInDeg = new Map<string, number>();\n for (const id of ids) fwdInDeg.set(id, 0);\n for (const [u, v] of allEdges) {\n if (backEdges.has(`${u}\\0${v}`)) continue;\n fwdInDeg.set(v, (fwdInDeg.get(v) ?? 0) + 1);\n }\n const queue: string[] = [];\n for (const id of ids) if ((fwdInDeg.get(id) ?? 0) === 0) queue.push(id);\n const order: string[] = [];\n const remIn = new Map(fwdInDeg);\n while (queue.length > 0) {\n const v = queue.shift()!;\n order.push(v);\n for (const w of fwdAdj.get(v) ?? []) {\n const d = (remIn.get(w) ?? 0) - 1;\n remIn.set(w, d);\n if (d === 0) queue.push(w);\n }\n }\n for (const id of ids) if (!order.includes(id)) order.push(id);\n\n for (const id of ids) colByObj.set(id, 0);\n for (const v of order) {\n const lv = colByObj.get(v) ?? 0;\n for (const w of fwdAdj.get(v) ?? []) {\n const lw = colByObj.get(w) ?? 0;\n if (lw < lv + 1) colByObj.set(w, lv + 1);\n }\n }\n}\n\n// ─── Routing ──────────────────────────────────────────────────\n\nfunction fmt(n: number): string {\n return (Math.round(n * 100) / 100).toString();\n}\n\nfunction routeSequenceFlow(\n f: BpmnAst[\"flows\"][number],\n objCenter: Map<string, { x: number; y: number; w: number; h: number }>,\n objById: Map<string, BpmnFlowObject>\n): BpmnLayoutFlow {\n const a = objCenter.get(f.from)!;\n const b = objCenter.get(f.to)!;\n // Choose entry/exit sides based on relative position.\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n\n let from = { x: a.x, y: a.y };\n let to = { x: b.x, y: b.y };\n\n // Exit point on source.\n if (Math.abs(dx) >= Math.abs(dy)) {\n from = { x: a.x + (dx >= 0 ? a.w / 2 : -a.w / 2), y: a.y };\n to = { x: b.x + (dx >= 0 ? -b.w / 2 : b.w / 2), y: b.y };\n } else {\n from = { x: a.x, y: a.y + (dy >= 0 ? a.h / 2 : -a.h / 2) };\n to = { x: b.x, y: b.y + (dy >= 0 ? -b.h / 2 : b.h / 2) };\n }\n\n // Adjust for diamond/circle shapes (use square exit for simplicity in v0.1).\n void objById;\n\n // Manhattan: midpoint bend on the dominant axis.\n let path: string;\n let labelAnchor: { x: number; y: number } | undefined;\n if (Math.abs(dx) >= Math.abs(dy)) {\n const midX = (from.x + to.x) / 2;\n path =\n `M ${fmt(from.x)} ${fmt(from.y)} ` +\n `L ${fmt(midX)} ${fmt(from.y)} ` +\n `L ${fmt(midX)} ${fmt(to.y)} ` +\n `L ${fmt(to.x)} ${fmt(to.y)}`;\n labelAnchor = { x: midX, y: (from.y + to.y) / 2 - 6 };\n } else {\n const midY = (from.y + to.y) / 2;\n path =\n `M ${fmt(from.x)} ${fmt(from.y)} ` +\n `L ${fmt(from.x)} ${fmt(midY)} ` +\n `L ${fmt(to.x)} ${fmt(midY)} ` +\n `L ${fmt(to.x)} ${fmt(to.y)}`;\n labelAnchor = { x: (from.x + to.x) / 2, y: midY - 6 };\n }\n\n return { flow: f, path, labelAnchor };\n}\n\nfunction routeMessageFlow(\n f: BpmnAst[\"flows\"][number],\n objCenter: Map<string, { x: number; y: number; w: number; h: number }>,\n poolByLabel: Map<string, BpmnLayoutPool>\n): BpmnLayoutFlow {\n // Endpoint = either pool label (use pool's edge midpoint) or object center.\n const endpoint = (\n ep: string\n ): { x: number; y: number; isPool: boolean; poolY?: number; poolH?: number } => {\n if (poolByLabel.has(ep)) {\n const p = poolByLabel.get(ep)!;\n return {\n x: p.x + p.width / 2,\n y: p.y + p.height / 2,\n isPool: true,\n poolY: p.y,\n poolH: p.height,\n };\n }\n const c = objCenter.get(ep)!;\n return { x: c.x, y: c.y, isPool: false };\n };\n const A = endpoint(f.from);\n const B = endpoint(f.to);\n\n // Strategy: route via vertical channel between the two y's, with a\n // horizontal segment at the midpoint. Sufficient for v0.1.\n const midY = (A.y + B.y) / 2;\n const path =\n `M ${fmt(A.x)} ${fmt(A.y)} ` +\n `L ${fmt(A.x)} ${fmt(midY)} ` +\n `L ${fmt(B.x)} ${fmt(midY)} ` +\n `L ${fmt(B.x)} ${fmt(B.y)}`;\n return { flow: f, path, labelAnchor: { x: (A.x + B.x) / 2, y: midY - 6 } };\n}\n","/**\n * BPMN renderer — BpmnLayoutResult → SVG.\n *\n * Z-order: pools → lanes → flows → objects → labels.\n * Defs include arrowhead markers (filled-triangle for sequence,\n * open-triangle for message) and the small source-end glyphs\n * (conditional diamond, default slash, message-start circle).\n */\nimport {\n defs,\n desc,\n el,\n group,\n multilineText,\n path,\n rect,\n svgRoot,\n text,\n title,\n} from \"../../core/svg\";\nimport type {\n BpmnActivity,\n BpmnEvent,\n BpmnGateway,\n BpmnLayoutFlow,\n BpmnLayoutObject,\n BpmnLayoutPool,\n BpmnLayoutResult,\n RenderConfig,\n} from \"../../core/types\";\nimport { parseBpmn } from \"./parser\";\nimport { layoutBpmn, BPMN_CONST } from \"./layout\";\n\nconst FONT_FAMILY = \"system-ui, -apple-system, 'Segoe UI', sans-serif\";\nconst STROKE = \"#1f2937\";\nconst STROKE_LIGHT = \"#94a3b8\";\nconst POOL_FILL = \"#ffffff\";\nconst LANE_FILL = \"#fafbfc\";\nconst TASK_FILL = \"#ffffff\";\nconst GATEWAY_FILL = \"#fffbeb\";\nconst EVENT_FILL = \"#ffffff\";\nconst LABEL_BAND_FILL = \"#f1f5f9\";\n\nexport function renderBpmn(textInput: string, config?: RenderConfig): string {\n const ast = parseBpmn(textInput);\n const layout = layoutBpmn(ast);\n return renderBpmnLayout(layout, config);\n}\n\nexport function renderBpmnLayout(\n layout: BpmnLayoutResult,\n _config?: RenderConfig\n): string {\n const { width, height, ast } = layout;\n\n const out: string[] = [];\n out.push(title(ast.title ?? \"BPMN diagram\"));\n out.push(desc(`BPMN ${ast.direction} — ${ast.pools.length} pool(s), ${layout.objects.length} flow object(s).`));\n\n out.push(buildDefs());\n\n // Pools\n for (const pl of layout.pools) out.push(renderPool(pl));\n\n // Lanes\n for (const lan of layout.lanes) {\n out.push(\n group({ class: \"schematex-bpmn-lane\" }, [\n rect({\n x: lan.x + lan.labelHeight,\n y: lan.y,\n width: lan.width - lan.labelHeight,\n height: lan.height,\n fill: LANE_FILL,\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n rect({\n x: lan.x,\n y: lan.y,\n width: lan.labelHeight,\n height: lan.height,\n fill: LABEL_BAND_FILL,\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n text(\n {\n x: lan.x + lan.labelHeight / 2,\n y: lan.y + lan.height / 2,\n transform: `rotate(-90 ${lan.x + lan.labelHeight / 2} ${lan.y + lan.height / 2})`,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": \"middle\",\n \"font-family\": FONT_FAMILY,\n \"font-size\": 12,\n fill: STROKE,\n },\n lan.lane.label\n ),\n ])\n );\n }\n\n // Sequence/message flows beneath objects so arrowheads sit clean.\n for (const fl of layout.flows) out.push(renderFlow(fl));\n\n // Objects\n for (const ol of layout.objects) out.push(renderObject(ol));\n\n return svgRoot(\n {\n width,\n height,\n viewBox: `0 0 ${width} ${height}`,\n class: \"schematex-bpmn\",\n },\n out\n );\n}\n\n// ─── Defs (arrow markers) ──────────────────────────────────────\n\nfunction buildDefs(): string {\n return defs([\n // Sequence flow — filled triangle.\n el(\n \"marker\",\n {\n id: \"bpmn-arrow-seq\",\n viewBox: \"0 0 10 10\",\n refX: 9,\n refY: 5,\n markerWidth: 8,\n markerHeight: 8,\n orient: \"auto-start-reverse\",\n },\n [\n el(\"path\", {\n d: \"M 0 0 L 10 5 L 0 10 z\",\n fill: STROKE,\n }),\n ]\n ),\n // Message flow — open triangle.\n el(\n \"marker\",\n {\n id: \"bpmn-arrow-msg\",\n viewBox: \"0 0 10 10\",\n refX: 9,\n refY: 5,\n markerWidth: 9,\n markerHeight: 9,\n orient: \"auto-start-reverse\",\n },\n [\n el(\"path\", {\n d: \"M 0 0 L 10 5 L 0 10 z\",\n fill: \"#ffffff\",\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n ]\n ),\n // Message source dot.\n el(\n \"marker\",\n {\n id: \"bpmn-msg-start\",\n viewBox: \"0 0 10 10\",\n refX: 5,\n refY: 5,\n markerWidth: 6,\n markerHeight: 6,\n orient: \"auto\",\n },\n [\n el(\"circle\", { cx: 5, cy: 5, r: 3, fill: \"#ffffff\", stroke: STROKE }),\n ]\n ),\n ]);\n}\n\n// ─── Pool ──────────────────────────────────────────────────────\n\nfunction renderPool(pl: BpmnLayoutPool): string {\n const labelCx = pl.labelX + pl.labelWidth / 2;\n const labelCy = pl.labelY + pl.height / 2;\n if (pl.pool.blackbox) {\n return group({ class: \"schematex-bpmn-pool blackbox\" }, [\n rect({\n x: pl.x,\n y: pl.y,\n width: pl.width,\n height: pl.height,\n fill: POOL_FILL,\n stroke: STROKE,\n \"stroke-width\": 1.5,\n }),\n rect({\n x: pl.x,\n y: pl.y,\n width: pl.labelWidth,\n height: pl.height,\n fill: LABEL_BAND_FILL,\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n text(\n {\n x: labelCx,\n y: labelCy,\n transform: `rotate(-90 ${labelCx} ${labelCy})`,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": \"middle\",\n \"font-family\": FONT_FAMILY,\n \"font-size\": 13,\n \"font-weight\": \"bold\",\n fill: STROKE,\n },\n pl.pool.label\n ),\n ]);\n }\n return group({ class: \"schematex-bpmn-pool\" }, [\n rect({\n x: pl.x,\n y: pl.y,\n width: pl.width,\n height: pl.height,\n fill: POOL_FILL,\n stroke: STROKE,\n \"stroke-width\": 1.5,\n }),\n rect({\n x: pl.x,\n y: pl.y,\n width: pl.labelWidth,\n height: pl.height,\n fill: LABEL_BAND_FILL,\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n text(\n {\n x: labelCx,\n y: labelCy,\n transform: `rotate(-90 ${labelCx} ${labelCy})`,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": \"middle\",\n \"font-family\": FONT_FAMILY,\n \"font-size\": 13,\n \"font-weight\": \"bold\",\n fill: STROKE,\n },\n pl.pool.label\n ),\n ]);\n}\n\n// ─── Flow object ──────────────────────────────────────────────\n\nfunction renderObject(ol: BpmnLayoutObject): string {\n const o = ol.obj;\n if (\"gatewayKind\" in o) return renderGateway(ol);\n if (\"marker\" in o) return renderActivity(ol);\n return renderEvent(ol);\n}\n\nfunction renderActivity(ol: BpmnLayoutObject): string {\n const a = ol.obj as BpmnActivity;\n const isSubproc = a.kind === \"subprocess-collapsed\";\n const cx = ol.x + ol.width / 2;\n const cy = ol.y + ol.height / 2;\n const children: string[] = [\n rect({\n x: ol.x,\n y: ol.y,\n width: ol.width,\n height: ol.height,\n rx: 10,\n ry: 10,\n fill: TASK_FILL,\n stroke: STROKE,\n \"stroke-width\": 1.5,\n }),\n multilineText(\n {\n x: cx,\n y: cy,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": \"middle\",\n \"font-family\": FONT_FAMILY,\n \"font-size\": 12,\n fill: STROKE,\n },\n a.label,\n 14\n ),\n ];\n // Task marker — small icon top-left (8px from edge).\n if (a.kind === \"task\" && a.marker !== \"abstract\") {\n children.push(taskMarker(ol.x + 6, ol.y + 6, a.marker));\n }\n // Collapsed subprocess [+] marker, bottom-center.\n if (isSubproc) {\n const mx = cx;\n const my = ol.y + ol.height - 10;\n children.push(\n rect({\n x: mx - 6,\n y: my - 6,\n width: 12,\n height: 12,\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n el(\"path\", {\n d: `M ${mx - 4} ${my} L ${mx + 4} ${my} M ${mx} ${my - 4} L ${mx} ${my + 4}`,\n stroke: STROKE,\n \"stroke-width\": 1,\n })\n );\n }\n return group({ class: `schematex-bpmn-task marker-${a.marker}` }, children);\n}\n\nfunction taskMarker(x: number, y: number, marker: string): string {\n const cx = x + 7;\n const cy = y + 7;\n if (marker === \"user\") {\n return el(\"g\", { class: \"marker-user\" }, [\n el(\"circle\", { cx, cy: cy - 1, r: 2.5, fill: \"none\", stroke: STROKE, \"stroke-width\": 1 }),\n el(\"path\", {\n d: `M ${cx - 5} ${cy + 6} Q ${cx} ${cy + 1} ${cx + 5} ${cy + 6}`,\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n ]);\n }\n if (marker === \"service\") {\n // Two overlapping gears (simplified).\n return el(\"g\", { class: \"marker-service\" }, [\n el(\"circle\", { cx, cy, r: 4, fill: \"none\", stroke: STROKE, \"stroke-width\": 1 }),\n el(\"circle\", { cx, cy, r: 1.5, fill: STROKE }),\n el(\"path\", {\n d: `M ${cx} ${cy - 6} L ${cx} ${cy - 4} M ${cx} ${cy + 4} L ${cx} ${cy + 6} M ${cx - 6} ${cy} L ${cx - 4} ${cy} M ${cx + 4} ${cy} L ${cx + 6} ${cy}`,\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n ]);\n }\n if (marker === \"send\") {\n return el(\"g\", { class: \"marker-send\" }, [\n el(\"rect\", { x: cx - 5, y: cy - 3, width: 10, height: 7, fill: STROKE }),\n el(\"path\", { d: `M ${cx - 5} ${cy - 3} L ${cx} ${cy + 1} L ${cx + 5} ${cy - 3}`, stroke: \"#ffffff\", \"stroke-width\": 1, fill: \"none\" }),\n ]);\n }\n if (marker === \"receive\") {\n return el(\"g\", { class: \"marker-receive\" }, [\n el(\"rect\", { x: cx - 5, y: cy - 3, width: 10, height: 7, fill: \"none\", stroke: STROKE, \"stroke-width\": 1 }),\n el(\"path\", { d: `M ${cx - 5} ${cy - 3} L ${cx} ${cy + 1} L ${cx + 5} ${cy - 3}`, stroke: STROKE, \"stroke-width\": 1, fill: \"none\" }),\n ]);\n }\n if (marker === \"manual\") {\n // Hand silhouette (simplified up-pointing finger).\n return el(\"g\", { class: \"marker-manual\" }, [\n el(\"path\", {\n d: `M ${cx - 3} ${cy + 4} L ${cx - 3} ${cy} L ${cx - 1.5} ${cy} L ${cx - 1.5} ${cy - 4} L ${cx} ${cy - 4} L ${cx} ${cy} L ${cx + 1.5} ${cy} L ${cx + 1.5} ${cy + 1} L ${cx + 3} ${cy + 1} L ${cx + 3} ${cy + 4} z`,\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n ]);\n }\n if (marker === \"script\") {\n return el(\"g\", { class: \"marker-script\" }, [\n el(\"path\", {\n d: `M ${cx - 4} ${cy - 5} Q ${cx - 6} ${cy} ${cx - 4} ${cy + 5} L ${cx + 4} ${cy + 5} Q ${cx + 2} ${cy} ${cx + 4} ${cy - 5} z`,\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n el(\"path\", {\n d: `M ${cx - 2} ${cy - 2} L ${cx + 2} ${cy - 2} M ${cx - 2} ${cy} L ${cx + 2} ${cy} M ${cx - 2} ${cy + 2} L ${cx + 2} ${cy + 2}`,\n stroke: STROKE,\n \"stroke-width\": 0.8,\n }),\n ]);\n }\n return \"\";\n}\n\nfunction renderGateway(ol: BpmnLayoutObject): string {\n const g = ol.obj as BpmnGateway;\n const cx = ol.x + ol.width / 2;\n const cy = ol.y + ol.height / 2;\n const r = ol.width / 2;\n const points = `${cx},${cy - r} ${cx + r},${cy} ${cx},${cy + r} ${cx - r},${cy}`;\n const inner: string[] = [];\n if (g.gatewayKind === \"xor\") {\n // X glyph (Silver default).\n const a = r * 0.42;\n inner.push(\n el(\"path\", {\n d: `M ${cx - a} ${cy - a} L ${cx + a} ${cy + a} M ${cx + a} ${cy - a} L ${cx - a} ${cy + a}`,\n stroke: STROKE,\n \"stroke-width\": 2.5,\n \"stroke-linecap\": \"round\",\n })\n );\n } else if (g.gatewayKind === \"and\") {\n const a = r * 0.5;\n inner.push(\n el(\"path\", {\n d: `M ${cx - a} ${cy} L ${cx + a} ${cy} M ${cx} ${cy - a} L ${cx} ${cy + a}`,\n stroke: STROKE,\n \"stroke-width\": 2.5,\n \"stroke-linecap\": \"round\",\n })\n );\n } else if (g.gatewayKind === \"or\") {\n inner.push(\n el(\"circle\", {\n cx,\n cy,\n r: r * 0.45,\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 2,\n })\n );\n } else if (g.gatewayKind === \"event\") {\n // Pentagon inscribed in circle.\n inner.push(\n el(\"circle\", {\n cx,\n cy,\n r: r * 0.55,\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 1,\n })\n );\n const pr = r * 0.32;\n const pts: string[] = [];\n for (let k = 0; k < 5; k++) {\n const ang = -Math.PI / 2 + (k * 2 * Math.PI) / 5;\n pts.push(`${cx + pr * Math.cos(ang)},${cy + pr * Math.sin(ang)}`);\n }\n inner.push(\n el(\"polygon\", {\n points: pts.join(\" \"),\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 1.2,\n })\n );\n }\n const labelStr = g.label ?? \"\";\n const labelEl = labelStr\n ? text(\n {\n x: cx,\n y: ol.y - 6,\n \"text-anchor\": \"middle\",\n \"font-family\": FONT_FAMILY,\n \"font-size\": 11,\n fill: STROKE,\n },\n labelStr\n )\n : \"\";\n return group({ class: `schematex-bpmn-gateway kind-${g.gatewayKind}` }, [\n el(\"polygon\", {\n points,\n fill: GATEWAY_FILL,\n stroke: STROKE,\n \"stroke-width\": 1.5,\n }),\n ...inner,\n labelEl,\n ]);\n}\n\nfunction renderEvent(ol: BpmnLayoutObject): string {\n const e = ol.obj as BpmnEvent;\n const cx = ol.x + ol.width / 2;\n const cy = ol.y + ol.height / 2;\n const r = ol.width / 2;\n const isEnd = e.kind === \"end\";\n const isIntermediate = e.kind === \"intermediate\";\n const strokeW = isEnd ? 3 : 1.2;\n const children: string[] = [];\n children.push(\n el(\"circle\", {\n cx,\n cy,\n r,\n fill: EVENT_FILL,\n stroke: STROKE,\n \"stroke-width\": strokeW,\n })\n );\n if (isIntermediate) {\n children.push(\n el(\"circle\", {\n cx,\n cy,\n r: r - 3,\n fill: \"none\",\n stroke: STROKE,\n \"stroke-width\": 1.2,\n })\n );\n }\n // Trigger glyph\n const filled = e.throwCatch === \"throw\" && (isIntermediate || isEnd);\n if (e.trigger === \"message\") {\n children.push(messageGlyph(cx, cy, r * 0.55, filled));\n } else if (e.trigger === \"timer\") {\n children.push(timerGlyph(cx, cy, r * 0.55));\n }\n // End-event terminator (none trigger): a thick filled disk indicates terminate\n // — we render plain none-end as just the thick ring (no inner glyph).\n // Label below.\n if (e.label) {\n children.push(\n text(\n {\n x: cx,\n y: ol.y + ol.height + 14,\n \"text-anchor\": \"middle\",\n \"font-family\": FONT_FAMILY,\n \"font-size\": 11,\n fill: STROKE,\n },\n e.label\n )\n );\n }\n return group({ class: `schematex-bpmn-event kind-${e.kind} trigger-${e.trigger}` }, children);\n}\n\nfunction messageGlyph(cx: number, cy: number, size: number, filled: boolean): string {\n const w = size;\n const h = size * 0.7;\n const x = cx - w / 2;\n const y = cy - h / 2;\n return el(\"g\", { class: \"trigger-message\" }, [\n el(\"rect\", {\n x,\n y,\n width: w,\n height: h,\n fill: filled ? STROKE : \"#ffffff\",\n stroke: STROKE,\n \"stroke-width\": 1,\n }),\n el(\"path\", {\n d: `M ${x} ${y} L ${cx} ${y + h * 0.55} L ${x + w} ${y}`,\n stroke: filled ? \"#ffffff\" : STROKE,\n \"stroke-width\": 1,\n fill: \"none\",\n }),\n ]);\n}\n\nfunction timerGlyph(cx: number, cy: number, size: number): string {\n const r = size / 2;\n // Clock outline + 12 / 3 / 6 / 9 ticks + hands.\n const ticks: string[] = [];\n for (let k = 0; k < 12; k++) {\n const ang = (k * Math.PI) / 6 - Math.PI / 2;\n const t1x = cx + (r - 1.5) * Math.cos(ang);\n const t1y = cy + (r - 1.5) * Math.sin(ang);\n const t2x = cx + r * Math.cos(ang);\n const t2y = cy + r * Math.sin(ang);\n ticks.push(`M ${t1x} ${t1y} L ${t2x} ${t2y}`);\n }\n return el(\"g\", { class: \"trigger-timer\" }, [\n el(\"circle\", { cx, cy, r, fill: \"none\", stroke: STROKE, \"stroke-width\": 1 }),\n el(\"path\", { d: ticks.join(\" \"), stroke: STROKE, \"stroke-width\": 0.8 }),\n // Hands\n el(\"path\", {\n d: `M ${cx} ${cy} L ${cx} ${cy - r * 0.7} M ${cx} ${cy} L ${cx + r * 0.5} ${cy}`,\n stroke: STROKE,\n \"stroke-width\": 1.2,\n \"stroke-linecap\": \"round\",\n }),\n ]);\n}\n\n// ─── Flow rendering ───────────────────────────────────────────\n\nfunction renderFlow(fl: BpmnLayoutFlow): string {\n const f = fl.flow;\n const isMessage = f.kind === \"message\";\n const dasharray = isMessage ? \"6 4\" : undefined;\n const markerStart = isMessage ? \"url(#bpmn-msg-start)\" : undefined;\n const markerEnd = isMessage ? \"url(#bpmn-arrow-msg)\" : \"url(#bpmn-arrow-seq)\";\n const children: string[] = [\n path({\n d: fl.path,\n fill: \"none\",\n stroke: isMessage ? STROKE_LIGHT : STROKE,\n \"stroke-width\": 1.4,\n \"stroke-dasharray\": dasharray,\n \"marker-start\": markerStart,\n \"marker-end\": markerEnd,\n }),\n ];\n // Conditional flow: small diamond at source.\n if (f.kind === \"conditional\") {\n const head = parseStart(fl.path);\n if (head) {\n children.push(\n el(\"polygon\", {\n points: diamondPoints(head.x, head.y, 5),\n fill: \"#ffffff\",\n stroke: STROKE,\n \"stroke-width\": 1,\n })\n );\n }\n }\n // Default flow: small slash at source.\n if (f.kind === \"default\") {\n const head = parseStart(fl.path);\n if (head) {\n children.push(\n el(\"path\", {\n d: `M ${head.x - 4} ${head.y + 4} L ${head.x + 4} ${head.y - 4}`,\n stroke: STROKE,\n \"stroke-width\": 1.5,\n })\n );\n }\n }\n // Edge label.\n if (f.label && fl.labelAnchor) {\n children.push(\n text(\n {\n x: fl.labelAnchor.x,\n y: fl.labelAnchor.y,\n \"text-anchor\": \"middle\",\n \"font-family\": FONT_FAMILY,\n \"font-size\": 10,\n fill: STROKE,\n },\n f.label\n )\n );\n }\n return group({ class: `schematex-bpmn-flow kind-${f.kind}` }, children);\n}\n\nfunction parseStart(d: string): { x: number; y: number } | null {\n const m = d.match(/^M\\s+(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/);\n if (!m) return null;\n return { x: parseFloat(m[1]!), y: parseFloat(m[2]!) };\n}\n\nfunction diamondPoints(cx: number, cy: number, r: number): string {\n return `${cx - r},${cy} ${cx},${cy - r} ${cx + r},${cy} ${cx},${cy + r}`;\n}\n\n// Re-export const for tests.\nexport { BPMN_CONST };\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseBpmn } from \"./parser\";\nimport { renderBpmn } from \"./renderer\";\n\nexport const bpmn: DiagramPlugin = {\n type: \"bpmn\",\n detect(text: string): boolean {\n for (const raw of text.split(/\\r?\\n/)) {\n const t = raw.trim();\n if (t.length === 0) continue;\n if (t.startsWith(\"//\") || t.startsWith(\"#\") || t.startsWith(\"%%\")) continue;\n const first = t.split(/\\s+/)[0]?.toLowerCase() ?? \"\";\n return first === \"bpmn\";\n }\n return false;\n },\n parse: parseBpmn,\n render(text: string, config?: RenderConfig): string {\n return renderBpmn(text, config);\n },\n};\n\nexport { parseBpmn, BpmnParseError } from \"./parser\";\nexport { renderBpmn, renderBpmnLayout } from \"./renderer\";\nexport { layoutBpmn, BPMN_CONST } from \"./layout\";\n","/**\n * FBD standard-block port specs.\n *\n * Each std block declares its input/output port names, types, and rendering hints\n * (header label, inner symbol). Used by the parser to validate calls and infer\n * port wiring, and by the renderer to draw the right inner glyph.\n *\n * IEC 61131-3 §2.5.1 / §6.4 reference.\n */\n\nimport type { FbdDataType, FbdStdBlockName, FbdPortSide } from \"../../core/types\";\n\nexport interface PortSpec {\n name: string;\n side: FbdPortSide;\n dataType: FbdDataType;\n /** True if this port is variadic (accepts INn for n=1..N). Boolean ANDs, ORs, ADDs etc. */\n variadic?: boolean;\n}\n\nexport interface BlockSpec {\n name: FbdStdBlockName;\n /** Header text rendered at top of block. Defaults to name. */\n header?: string;\n /** Inner symbol drawn inside (IEC distinctive — `&`, `≥1`, `1`, `=1`). */\n innerSymbol?: string;\n /** Output port has a negation bubble in IEC convention (NAND/NOR/NOT/XNOR). */\n outputNegated?: boolean;\n ports: PortSpec[];\n /** Default number of inputs for variadic boolean blocks (AND/OR/NAND/NOR). */\n defaultInputs?: number;\n /** Primary output port (used when LHS = ... wires to a variable). */\n primaryOut?: string;\n}\n\nexport const BLOCK_SPECS: Record<FbdStdBlockName, BlockSpec> = {\n // ─── Boolean Logic ───────────────────────────────────────\n AND: {\n name: \"AND\",\n innerSymbol: \"&\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n OR: {\n name: \"OR\",\n innerSymbol: \"≥1\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n NOT: {\n name: \"NOT\",\n innerSymbol: \"1\",\n outputNegated: true,\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"bool\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n NAND: {\n name: \"NAND\",\n innerSymbol: \"&\",\n outputNegated: true,\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n NOR: {\n name: \"NOR\",\n innerSymbol: \"≥1\",\n outputNegated: true,\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"bool\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n XOR: {\n name: \"XOR\",\n innerSymbol: \"=1\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"bool\" },\n { name: \"IN2\", side: \"in\", dataType: \"bool\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n XNOR: {\n name: \"XNOR\",\n innerSymbol: \"=1\",\n outputNegated: true,\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"bool\" },\n { name: \"IN2\", side: \"in\", dataType: \"bool\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n BUF: {\n name: \"BUF\",\n innerSymbol: \"1\",\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"bool\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n\n // ─── Edge Detect ─────────────────────────────────────────\n R_TRIG: {\n name: \"R_TRIG\",\n ports: [\n { name: \"CLK\", side: \"in\", dataType: \"bool\" },\n { name: \"Q\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"Q\",\n },\n F_TRIG: {\n name: \"F_TRIG\",\n ports: [\n { name: \"CLK\", side: \"in\", dataType: \"bool\" },\n { name: \"Q\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"Q\",\n },\n\n // ─── Bistable ────────────────────────────────────────────\n SR: {\n name: \"SR\",\n ports: [\n { name: \"S1\", side: \"in\", dataType: \"bool\" },\n { name: \"R\", side: \"in\", dataType: \"bool\" },\n { name: \"Q1\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"Q1\",\n },\n RS: {\n name: \"RS\",\n ports: [\n { name: \"S\", side: \"in\", dataType: \"bool\" },\n { name: \"R1\", side: \"in\", dataType: \"bool\" },\n { name: \"Q1\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"Q1\",\n },\n\n // ─── Timers ──────────────────────────────────────────────\n TON: {\n name: \"TON\",\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"bool\" },\n { name: \"PT\", side: \"in\", dataType: \"time\" },\n { name: \"Q\", side: \"out\", dataType: \"bool\" },\n { name: \"ET\", side: \"out\", dataType: \"time\" },\n ],\n primaryOut: \"Q\",\n },\n TOF: {\n name: \"TOF\",\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"bool\" },\n { name: \"PT\", side: \"in\", dataType: \"time\" },\n { name: \"Q\", side: \"out\", dataType: \"bool\" },\n { name: \"ET\", side: \"out\", dataType: \"time\" },\n ],\n primaryOut: \"Q\",\n },\n TP: {\n name: \"TP\",\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"bool\" },\n { name: \"PT\", side: \"in\", dataType: \"time\" },\n { name: \"Q\", side: \"out\", dataType: \"bool\" },\n { name: \"ET\", side: \"out\", dataType: \"time\" },\n ],\n primaryOut: \"Q\",\n },\n\n // ─── Counters ────────────────────────────────────────────\n CTU: {\n name: \"CTU\",\n ports: [\n { name: \"CU\", side: \"in\", dataType: \"bool\" },\n { name: \"R\", side: \"in\", dataType: \"bool\" },\n { name: \"PV\", side: \"in\", dataType: \"int\" },\n { name: \"Q\", side: \"out\", dataType: \"bool\" },\n { name: \"CV\", side: \"out\", dataType: \"int\" },\n ],\n primaryOut: \"Q\",\n },\n CTD: {\n name: \"CTD\",\n ports: [\n { name: \"CD\", side: \"in\", dataType: \"bool\" },\n { name: \"LD\", side: \"in\", dataType: \"bool\" },\n { name: \"PV\", side: \"in\", dataType: \"int\" },\n { name: \"Q\", side: \"out\", dataType: \"bool\" },\n { name: \"CV\", side: \"out\", dataType: \"int\" },\n ],\n primaryOut: \"Q\",\n },\n\n // ─── Math ────────────────────────────────────────────────\n ADD: {\n name: \"ADD\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n SUB: {\n name: \"SUB\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"real\" },\n { name: \"IN2\", side: \"in\", dataType: \"real\" },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n primaryOut: \"OUT\",\n },\n MUL: {\n name: \"MUL\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n DIV: {\n name: \"DIV\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"real\" },\n { name: \"IN2\", side: \"in\", dataType: \"real\" },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n primaryOut: \"OUT\",\n },\n MOD: {\n name: \"MOD\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"int\" },\n { name: \"IN2\", side: \"in\", dataType: \"int\" },\n { name: \"OUT\", side: \"out\", dataType: \"int\" },\n ],\n primaryOut: \"OUT\",\n },\n ABS: {\n name: \"ABS\",\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"real\" },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n primaryOut: \"OUT\",\n },\n NEG: {\n name: \"NEG\",\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"real\" },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n primaryOut: \"OUT\",\n },\n MOVE: {\n name: \"MOVE\",\n ports: [\n { name: \"IN\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"any\" },\n ],\n primaryOut: \"OUT\",\n },\n\n // ─── Comparison ──────────────────────────────────────────\n EQ: {\n name: \"EQ\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"any\" },\n { name: \"IN2\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n NE: {\n name: \"NE\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"any\" },\n { name: \"IN2\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n GT: {\n name: \"GT\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"any\" },\n { name: \"IN2\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n GE: {\n name: \"GE\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"any\" },\n { name: \"IN2\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n LT: {\n name: \"LT\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"any\" },\n { name: \"IN2\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n LE: {\n name: \"LE\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"any\" },\n { name: \"IN2\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"bool\" },\n ],\n primaryOut: \"OUT\",\n },\n\n // ─── Selection ───────────────────────────────────────────\n SEL: {\n name: \"SEL\",\n ports: [\n { name: \"G\", side: \"in\", dataType: \"bool\" },\n { name: \"IN0\", side: \"in\", dataType: \"any\" },\n { name: \"IN1\", side: \"in\", dataType: \"any\" },\n { name: \"OUT\", side: \"out\", dataType: \"any\" },\n ],\n primaryOut: \"OUT\",\n },\n MUX: {\n name: \"MUX\",\n ports: [\n { name: \"K\", side: \"in\", dataType: \"int\" },\n { name: \"IN0\", side: \"in\", dataType: \"any\", variadic: true },\n { name: \"IN1\", side: \"in\", dataType: \"any\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"any\" },\n ],\n primaryOut: \"OUT\",\n },\n MAX: {\n name: \"MAX\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n MIN: {\n name: \"MIN\",\n ports: [\n { name: \"IN1\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"IN2\", side: \"in\", dataType: \"real\", variadic: true },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n defaultInputs: 2,\n primaryOut: \"OUT\",\n },\n LIMIT: {\n name: \"LIMIT\",\n ports: [\n { name: \"MN\", side: \"in\", dataType: \"real\" },\n { name: \"IN\", side: \"in\", dataType: \"real\" },\n { name: \"MX\", side: \"in\", dataType: \"real\" },\n { name: \"OUT\", side: \"out\", dataType: \"real\" },\n ],\n primaryOut: \"OUT\",\n },\n};\n\nexport function isStdBlock(name: string): name is FbdStdBlockName {\n return name in BLOCK_SPECS;\n}\n\nexport function getBlockSpec(name: FbdStdBlockName): BlockSpec {\n return BLOCK_SPECS[name];\n}\n","/**\n * FBD parser — IEC 61131-3 §6.4.\n *\n * Pipeline:\n * 1. Tokenize lines, strip comments.\n * 2. Split into header / variables / networks.\n * 3. Within each network, parse each statement as an assignment of the\n * form `Inst = BLOCK(args)` — args can be nested calls (recursive).\n * 4. Build blocks + wires; wires reference port outputs or declared variables.\n *\n * v0.1 scope: standard blocks only (no user-defined FB pins_in/pins_out, no\n * EN/ENO rails, no page connectors). See 23-FBD-STANDARD.md §11 priority.\n */\n\nimport type {\n FbdAst,\n FbdBlock,\n FbdNetwork,\n FbdPort,\n FbdVarDecl,\n FbdVarScope,\n FbdDataType,\n FbdWire,\n} from \"../../core/types\";\nimport { matchQuotedTitle } from \"../../core/quotes\";\nimport { BLOCK_SPECS, isStdBlock, getBlockSpec } from \"./blocks\";\n\nexport class FbdParseError extends Error {\n line?: number;\n source?: string;\n constructor(message: string, line?: number, source?: string) {\n super(message);\n this.name = \"FbdParseError\";\n if (line !== undefined) this.line = line;\n if (source !== undefined) this.source = source;\n }\n}\n\nconst VALID_DATA_TYPES: FbdDataType[] = [\n \"bool\", \"int\", \"dint\", \"uint\", \"udint\",\n \"real\", \"lreal\", \"time\", \"date\", \"tod\",\n \"string\", \"wstring\", \"byte\", \"word\", \"dword\",\n \"timer\", \"counter\",\n];\n\nconst SCOPE_KEYWORDS: Record<string, FbdVarScope> = {\n var: \"local\",\n var_input: \"input\",\n var_output: \"output\",\n var_in_out: \"in_out\",\n var_global: \"global\",\n var_external: \"external\",\n};\n\ninterface RawLine {\n text: string;\n indent: number;\n lineNo: number;\n}\n\nfunction tokenizeLines(text: string): RawLine[] {\n const out: RawLine[] = [];\n const lines = text.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i].replace(/\\r$/, \"\");\n // Strip `#` line comment but keep `#` inside time literals (T#...) and strings.\n let stripped = \"\";\n let inStr = false;\n for (let j = 0; j < raw.length; j++) {\n const ch = raw[j];\n if (ch === '\"') inStr = !inStr;\n if (!inStr && ch === \"#\") {\n const prev = raw[j - 1];\n if (prev === undefined || /\\s/.test(prev)) break;\n }\n stripped += ch;\n }\n if (!stripped.trim()) continue;\n let indent = 0;\n while (indent < stripped.length && (stripped[indent] === \" \" || stripped[indent] === \"\\t\")) {\n indent += stripped[indent] === \"\\t\" ? 4 : 1;\n }\n out.push({ text: stripped.trim(), indent, lineNo: i + 1 });\n }\n return out;\n}\n\nfunction stripBrackets(s: string): string {\n return s.trim().replace(/^\\[|\\]$/g, \"\").trim();\n}\n\nfunction parseVarDecl(line: RawLine): FbdVarDecl | null {\n const m = line.text.match(/^(var|var_input|var_output|var_in_out|var_global|var_external)\\s+([a-zA-Z_]\\w*)\\s*:\\s*([a-zA-Z_]\\w*)\\s*(?:=\\s*(.+))?$/i);\n if (!m) return null;\n const scope = SCOPE_KEYWORDS[m[1].toLowerCase()] ?? \"local\";\n const name = m[2];\n const typeRaw = m[3].toLowerCase();\n const init = m[4]?.trim();\n const isPrimitive = (VALID_DATA_TYPES as string[]).includes(typeRaw);\n const decl: FbdVarDecl = {\n name,\n scope,\n dataType: isPrimitive ? (typeRaw as FbdDataType) : m[3],\n isUserFb: !isPrimitive,\n };\n if (init !== undefined) decl.initValue = init;\n return decl;\n}\n\ninterface NetworkHeader {\n index: number;\n title?: string;\n}\n\nfunction parseNetworkHeader(line: RawLine): NetworkHeader | null {\n // network 0 \"title\": or network \"title\": or network 1: or network:\n const m = line.text.match(/^network(?:\\s+(\\d+))?(?:\\s+\"([^\"]*)\")?(?:\\s*\\[[^\\]]*\\])?\\s*:\\s*$/i);\n if (!m) return null;\n return {\n index: m[1] ? parseInt(m[1], 10) : -1, // -1 = auto-assigned\n title: m[2],\n };\n}\n\n/**\n * Tokenize the call-arguments string into top-level token segments,\n * respecting parentheses depth and double-quoted strings.\n */\nfunction splitArgs(s: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let inStr = false;\n let buf = \"\";\n for (let i = 0; i < s.length; i++) {\n const ch = s[i];\n if (ch === '\"') {\n inStr = !inStr;\n buf += ch;\n continue;\n }\n if (!inStr) {\n if (ch === \"(\" || ch === \"[\") depth++;\n else if (ch === \")\" || ch === \"]\") depth--;\n else if (ch === \",\" && depth === 0) {\n out.push(buf.trim());\n buf = \"\";\n continue;\n }\n }\n buf += ch;\n }\n if (buf.trim()) out.push(buf.trim());\n return out;\n}\n\ninterface ParsedArg {\n name?: string;\n raw: string;\n negated: boolean;\n}\n\nfunction parseArg(arg: string): ParsedArg {\n let s = arg.trim();\n let name: string | undefined;\n // named? IDENT: value\n const nm = s.match(/^([A-Za-z_]\\w*)\\s*:\\s*(.+)$/);\n if (nm) {\n name = nm[1];\n s = nm[2].trim();\n }\n let negated = false;\n if (s.startsWith(\"~\")) {\n negated = true;\n s = s.slice(1).trim();\n }\n return { name, raw: s, negated };\n}\n\nconst TIME_LIT_RE = /^T#\\d+(ms|s|m|h)(\\d+(ms|s|m|h))*$/i;\nconst NUM_LIT_RE = /^-?\\d+(\\.\\d+)?$/;\n\nfunction isLiteral(s: string): boolean {\n if (TIME_LIT_RE.test(s)) return true;\n if (NUM_LIT_RE.test(s)) return true;\n if (/^(true|false)$/i.test(s)) return true;\n if (/^\"[^\"]*\"$/.test(s)) return true;\n return false;\n}\n\ninterface ParserState {\n variables: FbdVarDecl[];\n varByName: Map<string, FbdVarDecl>;\n blocks: FbdBlock[];\n blocksById: Map<string, FbdBlock>;\n wires: FbdWire[];\n networkIndex: number;\n blockCounter: number;\n /** Variables auto-declared during expression parsing (as bool by default).\n * Mirrors logic engine playbook — be lenient with LLM-generated DSL. */\n autoVars: Set<string>;\n}\n\nfunction freshBlockId(state: ParserState, baseHint?: string): string {\n state.blockCounter++;\n if (baseHint) {\n let id = baseHint;\n let n = 1;\n while (state.blocksById.has(id)) {\n id = `${baseHint}_${n++}`;\n }\n return id;\n }\n return `_blk${state.blockCounter}`;\n}\n\nfunction ensureVar(state: ParserState, name: string, dataType: FbdDataType = \"bool\"): void {\n if (state.varByName.has(name)) return;\n const decl: FbdVarDecl = { name, scope: \"local\", dataType };\n state.variables.push(decl);\n state.varByName.set(name, decl);\n state.autoVars.add(name);\n}\n\n/**\n * Parse a block call string `BLOCK(args)` and return the created block id.\n * Recursive: nested calls produce child blocks.\n *\n * @param callStr the raw `BLOCK(args)` text (no leading instance assignment)\n * @param targetInstance optional instance name to use; if undefined a synthetic id is generated.\n * @param attrs any [props] extracted from the suffix\n */\nfunction parseCall(\n state: ParserState,\n callStr: string,\n targetInstance: string | undefined,\n attrs: Map<string, string>,\n lineNo: number\n): { blockId: string; outPort: string; outType: FbdDataType } {\n // Split BLOCK and args e.g. AND(IN1: A, IN2: B)\n const m = callStr.match(/^([A-Za-z_]\\w*)\\s*\\((.*)\\)\\s*$/);\n if (!m) {\n throw new FbdParseError(`Invalid block call: ${callStr}`, lineNo, callStr);\n }\n const blockType = m[1];\n const argsRaw = m[2];\n\n if (!isStdBlock(blockType.toUpperCase())) {\n throw new FbdParseError(\n `Unknown function block: ${blockType} (v0.1 supports IEC standard blocks only)`,\n lineNo,\n callStr\n );\n }\n const upper = blockType.toUpperCase();\n const spec = getBlockSpec(upper as keyof typeof BLOCK_SPECS);\n\n const args = splitArgs(argsRaw);\n\n // Determine input count for variadic blocks\n let inputCount = spec.defaultInputs ?? 0;\n const inputsAttr = attrs.get(\"inputs\");\n if (inputsAttr) {\n inputCount = Math.max(2, parseInt(inputsAttr, 10) || 2);\n }\n // For pure variadic (AND/OR/etc.), use number of positional args if larger.\n const posArgsCount = args.filter((a) => !/^[A-Za-z_]\\w*\\s*:/.test(a)).length;\n if (spec.defaultInputs !== undefined && posArgsCount > inputCount) {\n inputCount = posArgsCount;\n }\n\n // Build expanded port list for variadic blocks\n const ports: FbdPort[] = [];\n for (const ps of spec.ports) {\n if (ps.variadic && ps.side === \"in\" && spec.defaultInputs !== undefined) {\n // Skip — we'll generate IN1..INn below for the block as a whole.\n continue;\n }\n ports.push({\n name: ps.name,\n side: ps.side,\n dataType: ps.dataType,\n });\n }\n if (spec.defaultInputs !== undefined) {\n // Generate IN1..INn at the front\n const variadicIn: FbdPort[] = [];\n const refType = spec.ports.find((p) => p.variadic && p.side === \"in\")?.dataType ?? \"bool\";\n for (let i = 1; i <= inputCount; i++) {\n variadicIn.push({ name: `IN${i}`, side: \"in\", dataType: refType });\n }\n ports.unshift(...variadicIn);\n }\n\n const blockId = targetInstance ?? freshBlockId(state);\n if (state.blocksById.has(blockId)) {\n throw new FbdParseError(`Duplicate instance name: ${blockId}`, lineNo, callStr);\n }\n const block: FbdBlock = {\n instance: targetInstance,\n blockType: upper,\n isStd: true,\n ports,\n networkIndex: state.networkIndex,\n id: blockId,\n };\n state.blocks.push(block);\n state.blocksById.set(blockId, block);\n\n // Wire each argument to its port\n // Resolve argument-to-port mapping: named first, else positional over the\n // input ports in declaration order.\n const inputPorts = ports.filter((p) => p.side === \"in\");\n const usedPorts = new Set<string>();\n\n // First pass: named\n const positional: ParsedArg[] = [];\n for (const argStr of args) {\n const a = parseArg(argStr);\n if (a.name) {\n bindArg(state, block, a, a.name, lineNo);\n usedPorts.add(a.name);\n } else {\n positional.push(a);\n }\n }\n // Second pass: positional fills remaining input ports in order\n let pi = 0;\n for (const arg of positional) {\n while (pi < inputPorts.length && usedPorts.has(inputPorts[pi].name)) pi++;\n if (pi >= inputPorts.length) {\n throw new FbdParseError(\n `Too many positional arguments for ${upper} (max ${inputPorts.length})`,\n lineNo,\n callStr\n );\n }\n bindArg(state, block, arg, inputPorts[pi].name, lineNo);\n usedPorts.add(inputPorts[pi].name);\n pi++;\n }\n\n const outPortName = spec.primaryOut ?? \"OUT\";\n const outPort = ports.find((p) => p.name === outPortName && p.side === \"out\");\n return {\n blockId,\n outPort: outPortName,\n outType: outPort?.dataType ?? \"any\",\n };\n}\n\nfunction bindArg(\n state: ParserState,\n block: FbdBlock,\n arg: ParsedArg,\n portName: string,\n lineNo: number\n): void {\n const port = block.ports.find((p) => p.name === portName && p.side === \"in\");\n if (!port) {\n throw new FbdParseError(\n `Block ${block.blockType} has no input port \"${portName}\"`,\n lineNo,\n arg.raw\n );\n }\n\n // Inline literal?\n if (isLiteral(arg.raw)) {\n port.constant = arg.raw;\n if (arg.negated) port.negated = true;\n return;\n }\n\n // Nested call?\n if (/^[A-Za-z_]\\w*\\s*\\(/.test(arg.raw)) {\n const sub = parseCall(state, arg.raw, undefined, new Map(), lineNo);\n state.wires.push({\n from: { kind: \"port\", blockId: sub.blockId, portName: sub.outPort },\n to: { kind: \"port\", blockId: block.id, portName },\n dataType: sub.outType,\n negatedAtSink: arg.negated,\n });\n return;\n }\n\n // Port reference Inst.PortName ?\n const portRef = arg.raw.match(/^([A-Za-z_]\\w*)\\.([A-Za-z_]\\w*)$/);\n if (portRef) {\n const srcId = portRef[1];\n const srcPort = portRef[2];\n if (!state.blocksById.has(srcId)) {\n throw new FbdParseError(\n `Unknown instance \"${srcId}\" referenced in ${arg.raw}`,\n lineNo,\n arg.raw\n );\n }\n const srcBlock = state.blocksById.get(srcId)!;\n const srcPortObj = srcBlock.ports.find((p) => p.name === srcPort && p.side === \"out\");\n if (!srcPortObj) {\n throw new FbdParseError(\n `Instance \"${srcId}\" (${srcBlock.blockType}) has no output port \"${srcPort}\"`,\n lineNo,\n arg.raw\n );\n }\n state.wires.push({\n from: { kind: \"port\", blockId: srcId, portName: srcPort },\n to: { kind: \"port\", blockId: block.id, portName },\n dataType: srcPortObj.dataType,\n negatedAtSink: arg.negated,\n });\n return;\n }\n\n // Plain variable reference\n const varName = arg.raw;\n if (!/^[A-Za-z_]\\w*$/.test(varName)) {\n throw new FbdParseError(`Invalid argument: ${arg.raw}`, lineNo, arg.raw);\n }\n ensureVar(state, varName, port.dataType === \"any\" ? \"bool\" : port.dataType);\n state.wires.push({\n from: { kind: \"var\", name: varName },\n to: { kind: \"port\", blockId: block.id, portName },\n dataType: state.varByName.get(varName)!.dataType as FbdDataType,\n negatedAtSink: arg.negated,\n });\n}\n\n/** Top-level parser entrypoint. */\nexport function parseFbd(text: string): FbdAst {\n const lines = tokenizeLines(text);\n if (lines.length === 0) {\n throw new FbdParseError(\"Empty FBD program\");\n }\n const headLine = lines[0];\n if (!/^fbd\\b/i.test(headLine.text)) {\n throw new FbdParseError(`First non-comment line must start with \"fbd\" (got: ${headLine.text})`, headLine.lineNo);\n }\n const title = matchQuotedTitle(headLine.text);\n\n const state: ParserState = {\n variables: [],\n varByName: new Map(),\n blocks: [],\n blocksById: new Map(),\n wires: [],\n networkIndex: 0,\n blockCounter: 0,\n autoVars: new Set(),\n };\n\n const networks: FbdNetwork[] = [];\n\n let i = 1;\n let nextNetworkIndex = 0;\n\n // Parse declarations (variables) until we hit a `network` line\n while (i < lines.length) {\n const ln = lines[i];\n if (/^network\\b/i.test(ln.text)) break;\n const decl = parseVarDecl(ln);\n if (decl) {\n if (state.varByName.has(decl.name)) {\n throw new FbdParseError(`Duplicate variable: ${decl.name}`, ln.lineNo, ln.text);\n }\n state.variables.push(decl);\n state.varByName.set(decl.name, decl);\n i++;\n continue;\n }\n throw new FbdParseError(`Unrecognized line at top level: ${ln.text}`, ln.lineNo, ln.text);\n }\n\n // Parse networks\n while (i < lines.length) {\n const head = lines[i];\n const nh = parseNetworkHeader(head);\n if (!nh) {\n throw new FbdParseError(`Expected \"network ...:\" (got: ${head.text})`, head.lineNo, head.text);\n }\n i++;\n const idx = nh.index === -1 ? nextNetworkIndex : nh.index;\n nextNetworkIndex = idx + 1;\n state.networkIndex = idx;\n\n // Snapshot current block/wire pointers so we can collect this network's\n const blocksBefore = state.blocks.length;\n const wiresBefore = state.wires.length;\n\n // Read indented body\n while (i < lines.length && lines[i].indent > head.indent) {\n const stmt = lines[i];\n parseStatement(state, stmt);\n i++;\n }\n const network: FbdNetwork = {\n index: idx,\n blocks: state.blocks.slice(blocksBefore),\n wires: state.wires.slice(wiresBefore),\n };\n if (nh.title !== undefined) network.title = nh.title;\n networks.push(network);\n }\n\n // Final pass: any block whose instance/output id matches a declared variable\n // wires from outPort to that variable.\n for (const block of state.blocks) {\n if (!block.instance) continue;\n const v = state.varByName.get(block.instance);\n if (!v) continue;\n const spec = getBlockSpec(block.blockType as keyof typeof BLOCK_SPECS);\n const outPort = spec?.primaryOut ?? \"OUT\";\n const out = block.ports.find((p) => p.name === outPort && p.side === \"out\");\n if (!out) continue;\n state.wires.push({\n from: { kind: \"port\", blockId: block.id, portName: outPort },\n to: { kind: \"var\", name: block.instance },\n dataType: out.dataType,\n });\n // Add to the network's wire list too.\n const net = networks.find((n) => n.index === block.networkIndex);\n if (net) {\n net.wires.push(state.wires[state.wires.length - 1]);\n }\n }\n\n const ast: FbdAst = {\n type: \"fbd\",\n variables: state.variables,\n networks,\n };\n if (title !== undefined) ast.title = title;\n return ast;\n}\n\nfunction parseStatement(state: ParserState, line: RawLine): void {\n const text = line.text;\n // Form A: Inst = BLOCK(args) [props]\n const m = text.match(/^([A-Za-z_]\\w*)\\s*=\\s*([A-Za-z_]\\w*\\s*\\(.*\\))\\s*(\\[[^\\]]*\\])?\\s*$/);\n if (m) {\n const lhs = m[1];\n const callStr = m[2];\n const propsRaw = m[3];\n const attrs = parseAttrs(propsRaw, line);\n parseCall(state, callStr, lhs, attrs, line.lineNo);\n return;\n }\n // Form B: bare BLOCK(args) (rare; instance auto-named)\n const mB = text.match(/^([A-Za-z_]\\w*\\s*\\(.*\\))\\s*(\\[[^\\]]*\\])?\\s*$/);\n if (mB) {\n const callStr = mB[1];\n const propsRaw = mB[2];\n const attrs = parseAttrs(propsRaw, line);\n parseCall(state, callStr, undefined, attrs, line.lineNo);\n return;\n }\n throw new FbdParseError(`Unrecognized network statement: ${text}`, line.lineNo, text);\n}\n\nfunction parseAttrs(raw: string | undefined, line: RawLine): Map<string, string> {\n const out = new Map<string, string>();\n if (!raw) return out;\n const inner = stripBrackets(raw);\n for (const part of inner.split(\",\")) {\n const t = part.trim();\n if (!t) continue;\n const colon = t.indexOf(\":\");\n if (colon < 0) {\n out.set(t.toLowerCase(), \"true\");\n } else {\n const key = t.slice(0, colon).trim().toLowerCase();\n const val = t.slice(colon + 1).trim().replace(/^\"|\"$/g, \"\");\n out.set(key, val);\n }\n }\n void line;\n return out;\n}\n","/**\n * FBD layout — layered DAG with named ports.\n *\n * Per network:\n * 1. Build dependency graph from wires (block → block edges).\n * 2. Longest-path layering (sources at layer 0).\n * 3. Compute each block's bbox from port count.\n * 4. Within-layer y-packing.\n * 5. Place input variable terminals on the left of layer 0; output variable\n * terminals on the right of the last layer.\n * 6. Manhattan-route each wire from src port to sink port.\n *\n * Networks stack vertically with NETWORK_GAP_Y.\n */\n\nimport type {\n FbdAst,\n FbdBlock,\n FbdLayoutBlock,\n FbdLayoutNetwork,\n FbdLayoutPort,\n FbdLayoutResult,\n FbdLayoutVarTerm,\n FbdLayoutWire,\n FbdNetwork,\n FbdPort,\n FbdWire,\n} from \"../../core/types\";\nimport { getBlockSpec, isStdBlock } from \"./blocks\";\n\nexport const FBD_CONST = {\n block_min_width: 64,\n block_min_height: 40,\n port_pitch: 18,\n port_stub_length: 12,\n block_padding_x: 8,\n block_padding_y: 6,\n block_header_h: 18,\n network_gap_y: 36,\n network_padding_x: 16,\n network_padding_y: 24,\n layer_spacing: 80,\n inter_block_gap: 20,\n wire_grid: 10,\n negation_bubble_r: 4,\n var_term_w: 90,\n var_term_h: 22,\n var_term_gap: 60,\n network_label_h: 18,\n};\n\nconst FONT_W_HEAD = 7.5; // monospace bold approx 12px\nconst FONT_W_PORT = 6.2; // monospace 10px\n\nfunction computeBlockSize(block: FbdBlock): { w: number; h: number } {\n const inputs = block.ports.filter((p) => p.side === \"in\");\n const outputs = block.ports.filter((p) => p.side === \"out\");\n const maxPorts = Math.max(inputs.length, outputs.length, 1);\n\n const headerText = block.blockType;\n const innerSym = isStdBlock(block.blockType) ? getBlockSpec(block.blockType).innerSymbol : undefined;\n const symW = innerSym ? Math.max(20, innerSym.length * 8) : 0;\n\n const leftLabelW = inputs.reduce((m, p) => Math.max(m, p.name.length * FONT_W_PORT), 0);\n const rightLabelW = outputs.reduce((m, p) => Math.max(m, p.name.length * FONT_W_PORT), 0);\n const headerW = headerText.length * FONT_W_HEAD;\n\n const width = Math.max(\n FBD_CONST.block_min_width,\n leftLabelW + rightLabelW + symW + 24,\n headerW + 16\n );\n const height = Math.max(\n FBD_CONST.block_min_height,\n FBD_CONST.block_header_h + maxPorts * FBD_CONST.port_pitch + FBD_CONST.block_padding_y\n );\n return { w: width, h: height };\n}\n\nfunction buildPorts(block: FbdBlock, x: number, y: number, w: number): FbdLayoutPort[] {\n const inputs = block.ports.filter((p) => p.side === \"in\");\n const outputs = block.ports.filter((p) => p.side === \"out\");\n const portsOut: FbdLayoutPort[] = [];\n inputs.forEach((p, i) => {\n const py = y + FBD_CONST.block_header_h + (i + 0.5) * FBD_CONST.port_pitch;\n portsOut.push(makePort(p, \"left\", x, x - FBD_CONST.port_stub_length, py));\n });\n outputs.forEach((p, i) => {\n const py = y + FBD_CONST.block_header_h + (i + 0.5) * FBD_CONST.port_pitch;\n const ex = x + w;\n portsOut.push(makePort(p, \"right\", ex, ex + FBD_CONST.port_stub_length, py));\n });\n return portsOut;\n}\n\nfunction makePort(p: FbdPort, side: \"left\" | \"right\", edgeX: number, x: number, y: number): FbdLayoutPort {\n const port: FbdLayoutPort = {\n name: p.name,\n side: side === \"left\" ? \"in\" : \"out\",\n x,\n y,\n edgeX,\n dataType: p.dataType,\n };\n if (p.constant !== undefined) port.constant = p.constant;\n if (p.negated) port.negated = true;\n return port;\n}\n\ninterface NetworkGraph {\n /** block id → set of block ids this block depends on (incoming). */\n incoming: Map<string, Set<string>>;\n outgoing: Map<string, Set<string>>;\n /** variable references the block needs as input (left terminals). */\n inputVars: Map<string, Set<string>>; // blockId -> var names\n /** variables the block emits to (right terminals). */\n outputVars: Map<string, Set<string>>; // blockId -> var names\n}\n\nfunction buildGraph(network: FbdNetwork): NetworkGraph {\n const incoming = new Map<string, Set<string>>();\n const outgoing = new Map<string, Set<string>>();\n const inputVars = new Map<string, Set<string>>();\n const outputVars = new Map<string, Set<string>>();\n for (const b of network.blocks) {\n incoming.set(b.id, new Set());\n outgoing.set(b.id, new Set());\n inputVars.set(b.id, new Set());\n outputVars.set(b.id, new Set());\n }\n for (const w of network.wires) {\n if (w.from.kind === \"port\" && w.to.kind === \"port\") {\n incoming.get(w.to.blockId)?.add(w.from.blockId);\n outgoing.get(w.from.blockId)?.add(w.to.blockId);\n } else if (w.from.kind === \"var\" && w.to.kind === \"port\") {\n inputVars.get(w.to.blockId)?.add(w.from.name);\n } else if (w.from.kind === \"port\" && w.to.kind === \"var\") {\n outputVars.get(w.from.blockId)?.add(w.to.name);\n }\n }\n return { incoming, outgoing, inputVars, outputVars };\n}\n\n/** Longest-path layering. Returns blockId -> layer. */\nfunction assignLayers(network: FbdNetwork, graph: NetworkGraph): Map<string, number> {\n const layer = new Map<string, number>();\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const visit = (id: string): number => {\n if (layer.has(id)) return layer.get(id)!;\n if (visiting.has(id)) {\n // cycle — break by treating as layer 0\n return 0;\n }\n visiting.add(id);\n let max = 0;\n for (const dep of graph.incoming.get(id) ?? []) {\n max = Math.max(max, visit(dep) + 1);\n }\n visiting.delete(id);\n layer.set(id, max);\n return max;\n };\n\n for (const b of network.blocks) visit(b.id);\n void visited;\n return layer;\n}\n\nfunction layoutNetwork(network: FbdNetwork, originX: number, originY: number): FbdLayoutNetwork {\n const graph = buildGraph(network);\n\n // Compute sizes\n const sizes = new Map<string, { w: number; h: number }>();\n for (const b of network.blocks) sizes.set(b.id, computeBlockSize(b));\n\n // Layering\n const layerOf = assignLayers(network, graph);\n const maxLayer = Math.max(0, ...Array.from(layerOf.values()));\n\n // Group blocks per layer in declaration order\n const byLayer: string[][] = Array.from({ length: maxLayer + 1 }, () => []);\n for (const b of network.blocks) byLayer[layerOf.get(b.id)!].push(b.id);\n\n // Identify input + output variable terminals that need columns\n const inputVarsAll = new Set<string>();\n const outputVarsAll = new Set<string>();\n for (const b of network.blocks) {\n for (const v of graph.inputVars.get(b.id) ?? []) inputVarsAll.add(v);\n for (const v of graph.outputVars.get(b.id) ?? []) outputVarsAll.add(v);\n }\n const inputVars = Array.from(inputVarsAll);\n const outputVars = Array.from(outputVarsAll);\n\n // X positions: pre-layer var-term column, then per-layer columns, then output-var column.\n const layerX: number[] = [];\n let cursorX = originX + FBD_CONST.network_padding_x;\n if (inputVars.length > 0) {\n cursorX += FBD_CONST.var_term_w + FBD_CONST.var_term_gap;\n } else {\n cursorX += FBD_CONST.var_term_gap;\n }\n // Compute max block width per layer\n const layerWidths: number[] = byLayer.map((ids) =>\n ids.reduce((m, id) => Math.max(m, sizes.get(id)!.w), FBD_CONST.block_min_width)\n );\n for (let l = 0; l <= maxLayer; l++) {\n layerX.push(cursorX);\n cursorX += layerWidths[l] + FBD_CONST.layer_spacing;\n }\n\n // Y positions: per-layer pack from top\n const blockBboxes = new Map<string, { x: number; y: number; w: number; h: number }>();\n let yMax = 0;\n for (let l = 0; l <= maxLayer; l++) {\n let y = originY + FBD_CONST.network_padding_y + FBD_CONST.network_label_h;\n for (const id of byLayer[l]) {\n const sz = sizes.get(id)!;\n const x = layerX[l];\n blockBboxes.set(id, { x, y, w: sz.w, h: sz.h });\n y += sz.h + FBD_CONST.inter_block_gap;\n }\n yMax = Math.max(yMax, y);\n }\n\n // Build layout blocks + ports\n const layoutBlocks: FbdLayoutBlock[] = [];\n for (const b of network.blocks) {\n const bb = blockBboxes.get(b.id)!;\n layoutBlocks.push({\n block: b,\n x: bb.x,\n y: bb.y,\n width: bb.w,\n height: bb.h,\n ports: buildPorts(b, bb.x, bb.y, bb.w),\n });\n }\n\n // Place variable terminals\n const varTerms: FbdLayoutVarTerm[] = [];\n if (inputVars.length > 0) {\n const xCol = originX + FBD_CONST.network_padding_x;\n const startY = originY + FBD_CONST.network_padding_y + FBD_CONST.network_label_h + 4;\n inputVars.forEach((v, idx) => {\n varTerms.push({\n name: v,\n x: xCol,\n y: startY + idx * (FBD_CONST.var_term_h + 6),\n width: FBD_CONST.var_term_w,\n height: FBD_CONST.var_term_h,\n side: \"left\",\n dataType: \"bool\",\n });\n });\n }\n if (outputVars.length > 0) {\n const xCol = layerX[maxLayer] + layerWidths[maxLayer] + FBD_CONST.var_term_gap;\n const startY = originY + FBD_CONST.network_padding_y + FBD_CONST.network_label_h + 4;\n outputVars.forEach((v, idx) => {\n varTerms.push({\n name: v,\n x: xCol,\n y: startY + idx * (FBD_CONST.var_term_h + 6),\n width: FBD_CONST.var_term_w,\n height: FBD_CONST.var_term_h,\n side: \"right\",\n dataType: \"bool\",\n });\n });\n cursorX = xCol + FBD_CONST.var_term_w + FBD_CONST.network_padding_x;\n } else {\n cursorX = layerX[maxLayer] + layerWidths[maxLayer] + FBD_CONST.network_padding_x;\n }\n\n // Wires\n const wires: FbdLayoutWire[] = [];\n const junctions: { x: number; y: number }[] = [];\n // Track fan-out points to render junction circles\n const fanOutCounts = new Map<string, number>();\n for (const w of network.wires) {\n if (w.from.kind === \"port\") {\n const key = `${w.from.blockId}.${w.from.portName}`;\n fanOutCounts.set(key, (fanOutCounts.get(key) ?? 0) + 1);\n } else if (w.from.kind === \"var\") {\n const key = `var:${w.from.name}`;\n fanOutCounts.set(key, (fanOutCounts.get(key) ?? 0) + 1);\n }\n }\n\n const portByKey = new Map<string, FbdLayoutPort>();\n for (const lb of layoutBlocks) {\n for (const p of lb.ports) {\n portByKey.set(`${lb.block.id}.${p.name}`, p);\n }\n }\n const varTermByName = new Map<string, FbdLayoutVarTerm>();\n for (const t of varTerms) varTermByName.set(t.name, t);\n\n // Track per-layer column-x cursors so parallel wires don't overlap\n const colCursor: Map<number, number> = new Map();\n\n for (const w of network.wires) {\n const path = routeWire(w, portByKey, varTermByName, colCursor, layerX, layerWidths);\n if (path) {\n wires.push({ wire: w, path });\n }\n }\n\n // Junctions at fan-out source points\n for (const [key, count] of fanOutCounts) {\n if (count < 2) continue;\n if (key.startsWith(\"var:\")) {\n const name = key.slice(4);\n const t = varTermByName.get(name);\n if (t && t.side === \"left\") {\n junctions.push({ x: t.x + t.width, y: t.y + t.height / 2 });\n }\n } else {\n const p = portByKey.get(key);\n if (p) junctions.push({ x: p.x, y: p.y });\n }\n }\n\n const width = cursorX - originX;\n const height = Math.max(\n yMax - originY + FBD_CONST.network_padding_y,\n FBD_CONST.block_min_height + FBD_CONST.network_label_h + FBD_CONST.network_padding_y * 2\n );\n\n return {\n network,\n x: originX,\n y: originY,\n width,\n height,\n blocks: layoutBlocks,\n wires,\n varTerms,\n junctions,\n };\n}\n\nfunction routeWire(\n w: FbdWire,\n portByKey: Map<string, FbdLayoutPort>,\n varTermByName: Map<string, FbdLayoutVarTerm>,\n colCursor: Map<number, number>,\n layerX: number[],\n layerWidths: number[]\n): string | undefined {\n let sx = 0, sy = 0, ex = 0, ey = 0;\n\n if (w.from.kind === \"port\") {\n const p = portByKey.get(`${w.from.blockId}.${w.from.portName}`);\n if (!p) return undefined;\n sx = p.x;\n sy = p.y;\n } else {\n const t = varTermByName.get(w.from.name);\n if (!t) return undefined;\n sx = t.x + t.width;\n sy = t.y + t.height / 2;\n }\n\n if (w.to.kind === \"port\") {\n const p = portByKey.get(`${w.to.blockId}.${w.to.portName}`);\n if (!p) return undefined;\n ex = p.x;\n ey = p.y;\n } else {\n const t = varTermByName.get(w.to.name);\n if (!t) return undefined;\n ex = t.x;\n ey = t.y + t.height / 2;\n }\n\n // Manhattan with one mid column\n const midX = sx + (ex - sx) / 2;\n // Find layer index between source and sink for column offset\n let layerIdx = -1;\n for (let i = 0; i < layerX.length - 1; i++) {\n const between = layerX[i] + layerWidths[i];\n const next = layerX[i + 1];\n if (sx >= between - 1 && ex <= next + 1) {\n layerIdx = i;\n break;\n }\n }\n let column = midX;\n if (layerIdx >= 0) {\n const offset = colCursor.get(layerIdx) ?? 0;\n column = layerX[layerIdx] + layerWidths[layerIdx] + 16 + offset;\n colCursor.set(layerIdx, offset + FBD_CONST.wire_grid);\n }\n\n if (Math.abs(sy - ey) < 0.5) {\n return `M ${sx} ${sy} L ${ex} ${ey}`;\n }\n return `M ${sx} ${sy} L ${column} ${sy} L ${column} ${ey} L ${ex} ${ey}`;\n}\n\nexport function layoutFbd(ast: FbdAst): FbdLayoutResult {\n const networks: FbdLayoutNetwork[] = [];\n let cursorY = 0;\n let maxWidth = 0;\n for (const net of ast.networks) {\n const ln = layoutNetwork(net, 0, cursorY);\n networks.push(ln);\n cursorY = ln.y + ln.height + FBD_CONST.network_gap_y;\n maxWidth = Math.max(maxWidth, ln.width);\n }\n // Normalize all networks to share the max width (so frames line up)\n for (const n of networks) n.width = maxWidth;\n return {\n ast,\n networks,\n width: maxWidth,\n height: cursorY,\n };\n}\n","/**\n * FBD renderer — Function Block Diagram SVG output.\n * IEC 61131-3 §6.4 visual conventions; see 23-FBD-STANDARD.md.\n */\n\nimport type { FbdAst, FbdDataType, FbdLayoutBlock, FbdLayoutNetwork, FbdLayoutResult } from \"../../core/types\";\nimport { defs, el, group, line, path, rect, svgRoot, text, title, desc, circle, escapeXml } from \"../../core/svg\";\nimport { parseFbd } from \"./parser\";\nimport { layoutFbd, FBD_CONST } from \"./layout\";\nimport { isStdBlock, getBlockSpec } from \"./blocks\";\n\nconst STYLES = `\n.lt-fbd-bg { fill: #ffffff; }\n.lt-fbd-block-body { fill: #ffffff; stroke: #333; stroke-width: 1.5; }\n.lt-fbd-block-header { fill: #f0f0f0; stroke: #333; stroke-width: 1.5; }\n.lt-fbd-block-name { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 12px; font-weight: 700; fill: #111; }\n.lt-fbd-inner-symbol { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 18px; font-weight: 700; fill: #111; }\n.lt-fbd-instance-tag { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-style: italic; font-size: 10px; fill: #555; }\n.lt-fbd-port-label { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 10px; fill: #333; }\n.lt-fbd-const-box { fill: #fffde7; stroke: #c9b14b; stroke-width: 1; }\n.lt-fbd-const-text { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 10px; fill: #5a4a00; }\n.lt-fbd-var-term { fill: #eef4ff; stroke: #3a5fbf; stroke-width: 1.2; }\n.lt-fbd-var-term-text { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 11px; font-weight: 600; fill: #1a3380; }\n.lt-fbd-wire-bool { stroke: #000; stroke-width: 1.5; fill: none; }\n.lt-fbd-wire-int { stroke: #1976d2; stroke-width: 1.5; fill: none; }\n.lt-fbd-wire-real { stroke: #f57c00; stroke-width: 1.5; fill: none; }\n.lt-fbd-wire-time { stroke: #c2185b; stroke-width: 1.5; fill: none; }\n.lt-fbd-wire-string { stroke: #2e7d32; stroke-width: 1.5; fill: none; }\n.lt-fbd-wire-bits { stroke: #000; stroke-width: 1.5; stroke-dasharray: 5 3; fill: none; }\n.lt-fbd-wire-any { stroke: #555; stroke-width: 1.5; fill: none; }\n.lt-fbd-junction { fill: #000; }\n.lt-fbd-negation { fill: #fff; stroke: #333; stroke-width: 1; }\n.lt-fbd-port-stub { stroke: #333; stroke-width: 1.2; fill: none; }\n.lt-fbd-network-frame { fill: none; stroke: #bbb; stroke-dasharray: 4 3; }\n.lt-fbd-network-title { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 11px; fill: #555; }\n.lt-fbd-title { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 14px; font-weight: 700; fill: #111; }\n`;\n\nfunction wireClass(t: FbdDataType): string {\n switch (t) {\n case \"bool\": return \"lt-fbd-wire-bool\";\n case \"int\":\n case \"dint\":\n case \"uint\":\n case \"udint\": return \"lt-fbd-wire-int\";\n case \"real\":\n case \"lreal\": return \"lt-fbd-wire-real\";\n case \"time\":\n case \"date\":\n case \"tod\": return \"lt-fbd-wire-time\";\n case \"string\":\n case \"wstring\": return \"lt-fbd-wire-string\";\n case \"byte\":\n case \"word\":\n case \"dword\": return \"lt-fbd-wire-bits\";\n default: return \"lt-fbd-wire-any\";\n }\n}\n\nfunction renderBlock(lb: FbdLayoutBlock): string {\n const { x, y, width, height, block } = lb;\n const headerH = FBD_CONST.block_header_h;\n const parts: string[] = [];\n\n // Body\n parts.push(rect({ class: \"lt-fbd-block-body\", x, y, width, height, rx: 2, ry: 2 }));\n // Header bar\n parts.push(rect({ class: \"lt-fbd-block-header\", x, y, width, height: headerH }));\n // Header label\n parts.push(text(\n { class: \"lt-fbd-block-name\", x: x + width / 2, y: y + headerH * 0.7, \"text-anchor\": \"middle\" },\n block.blockType\n ));\n\n // Instance tag (italic above header)\n if (block.instance && block.instance !== block.id) {\n parts.push(text(\n { class: \"lt-fbd-instance-tag\", x: x + width / 2, y: y - 4, \"text-anchor\": \"middle\" },\n block.instance\n ));\n }\n\n // Inner IEC symbol\n if (isStdBlock(block.blockType)) {\n const spec = getBlockSpec(block.blockType);\n if (spec.innerSymbol) {\n parts.push(text(\n { class: \"lt-fbd-inner-symbol\", x: x + width / 2, y: y + headerH + (height - headerH) / 2 + 4, \"text-anchor\": \"middle\" },\n spec.innerSymbol\n ));\n }\n }\n\n // Ports\n for (const p of lb.ports) {\n // Port stub line\n parts.push(line({\n class: \"lt-fbd-port-stub\",\n x1: p.edgeX, y1: p.y,\n x2: p.x, y2: p.y,\n }));\n // Port label inside the block\n if (p.side === \"in\") {\n parts.push(text(\n { class: \"lt-fbd-port-label\", x: p.edgeX + 4, y: p.y + 3 },\n p.name\n ));\n } else {\n parts.push(text(\n { class: \"lt-fbd-port-label\", x: p.edgeX - 4, y: p.y + 3, \"text-anchor\": \"end\" },\n p.name\n ));\n }\n // Negation bubble at port outer end\n if (p.negated) {\n const cx = p.side === \"in\" ? p.x - FBD_CONST.negation_bubble_r : p.x + FBD_CONST.negation_bubble_r;\n parts.push(circle({ class: \"lt-fbd-negation\", cx, cy: p.y, r: FBD_CONST.negation_bubble_r }));\n }\n // Inline constant box\n if (p.constant !== undefined) {\n const tw = Math.max(28, p.constant.length * 6 + 8);\n const bx = p.x - tw - 2;\n const by = p.y - 8;\n parts.push(rect({ class: \"lt-fbd-const-box\", x: bx, y: by, width: tw, height: 14, rx: 2, ry: 2 }));\n parts.push(text(\n { class: \"lt-fbd-const-text\", x: bx + tw / 2, y: by + 10, \"text-anchor\": \"middle\" },\n p.constant\n ));\n }\n }\n\n // Output negation (overall) — IEC NAND/NOR/NOT/XNOR\n if (isStdBlock(block.blockType)) {\n const spec = getBlockSpec(block.blockType);\n if (spec.outputNegated) {\n const outPort = lb.ports.find((p) => p.side === \"out\");\n if (outPort) {\n parts.push(circle({\n class: \"lt-fbd-negation\",\n cx: outPort.edgeX + FBD_CONST.negation_bubble_r,\n cy: outPort.y,\n r: FBD_CONST.negation_bubble_r,\n }));\n }\n }\n }\n\n return group(\n {\n class: \"lt-fbd-block\",\n \"data-block-type\": block.blockType,\n \"data-instance\": block.instance ?? \"\",\n },\n parts\n );\n}\n\nfunction renderNetwork(ln: FbdLayoutNetwork): string {\n const parts: string[] = [];\n // Frame\n parts.push(rect({\n class: \"lt-fbd-network-frame\",\n x: ln.x + 4, y: ln.y + 4,\n width: ln.width - 8,\n height: ln.height - 8,\n rx: 4, ry: 4,\n }));\n // Title\n const titleText = ln.network.title\n ? `${ln.network.index} — ${ln.network.title}`\n : `network ${ln.network.index}`;\n parts.push(text(\n { class: \"lt-fbd-network-title\", x: ln.x + 12, y: ln.y + 16 },\n titleText\n ));\n\n // Variable terminals\n for (const t of ln.varTerms) {\n parts.push(rect({\n class: \"lt-fbd-var-term\",\n x: t.x, y: t.y, width: t.width, height: t.height, rx: 3, ry: 3,\n }));\n parts.push(text(\n { class: \"lt-fbd-var-term-text\", x: t.x + t.width / 2, y: t.y + t.height / 2 + 4, \"text-anchor\": \"middle\" },\n t.name\n ));\n }\n\n // Wires\n for (const wl of ln.wires) {\n parts.push(path({\n class: wireClass(wl.wire.dataType),\n d: wl.path,\n \"data-wire-type\": wl.wire.dataType,\n }));\n if (wl.wire.negatedAtSink) {\n // Find sink point — last point of path\n const m = wl.path.match(/L\\s+([\\d.-]+)\\s+([\\d.-]+)\\s*$/);\n if (m) {\n const sx = parseFloat(m[1]);\n const sy = parseFloat(m[2]);\n parts.push(circle({\n class: \"lt-fbd-negation\",\n cx: sx - FBD_CONST.negation_bubble_r,\n cy: sy,\n r: FBD_CONST.negation_bubble_r,\n }));\n }\n }\n }\n\n // Junctions\n for (const j of ln.junctions) {\n parts.push(circle({ class: \"lt-fbd-junction\", cx: j.x, cy: j.y, r: 3 }));\n }\n\n // Blocks (drawn after wires so they sit on top)\n for (const b of ln.blocks) parts.push(renderBlock(b));\n\n return group({ class: \"lt-fbd-network\", \"data-network\": ln.network.index }, parts);\n}\n\nexport function renderFbdLayout(layout: FbdLayoutResult): string {\n const margin = 24;\n const w = layout.width + margin * 2 + 16;\n const h = layout.height + margin * 2;\n const styleBlock = el(\"style\", {}, escapeXml(STYLES).replace(/&quot;/g, '\"'));\n const titleEl = title(`FBD: ${layout.ast.title ?? \"Function Block Diagram\"}`);\n const descEl = desc(`FBD with ${layout.networks.length} network(s).`);\n const root = group(\n { transform: `translate(${margin},${margin})` },\n layout.networks.map(renderNetwork)\n );\n\n return svgRoot(\n {\n width: w,\n height: h,\n viewBox: `0 0 ${w} ${h}`,\n class: \"lt-fbd\",\n \"data-diagram-type\": \"fbd\",\n },\n [\n defs([styleBlock]),\n titleEl,\n descEl,\n rect({ class: \"lt-fbd-bg\", x: 0, y: 0, width: w, height: h }),\n root,\n ]\n );\n}\n\nexport function renderFbd(text: string): string {\n const ast: FbdAst = parseFbd(text);\n const layout = layoutFbd(ast);\n return renderFbdLayout(layout);\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseFbd } from \"./parser\";\nimport { renderFbd } from \"./renderer\";\n\nexport const fbd: DiagramPlugin = {\n type: \"fbd\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"fbd\");\n },\n parse: parseFbd,\n render(text: string): string {\n return renderFbd(text);\n },\n};\n\nexport { parseFbd } from \"./parser\";\nexport { renderFbd, renderFbdLayout } from \"./renderer\";\nexport { layoutFbd } from \"./layout\";\n","/**\n * SFC parser — IEC 61131-3 §6.5.\n *\n * Indent-sensitive grammar for steps, transitions, and branch blocks\n * (`alt`/`sim`). Conditions are stored as opaque strings.\n *\n * v0.1 scope: linear sequences, alt, sim, jumps, action qualifiers\n * (N/S/R/L/D/P/P0/P1/SD/DS/SL). Defers nested-of-nested branches and the\n * full ST condition parser; condition text passes through verbatim.\n */\n\nimport type {\n SfcAltBranch,\n SfcAst,\n SfcAction,\n SfcActionQualifier,\n SfcNode,\n SfcSimBranch,\n SfcStep,\n SfcStepKind,\n SfcTransition,\n SfcVarDecl,\n SfcVarType,\n} from \"../../core/types\";\nimport { matchQuotedTitle } from \"../../core/quotes\";\n\nexport class SfcParseError extends Error {\n line?: number;\n source?: string;\n constructor(message: string, line?: number, source?: string) {\n super(message);\n this.name = \"SfcParseError\";\n if (line !== undefined) this.line = line;\n if (source !== undefined) this.source = source;\n }\n}\n\nconst QUALIFIERS: SfcActionQualifier[] = [\n \"N\", \"S\", \"R\", \"L\", \"D\", \"P\", \"P0\", \"P1\", \"SD\", \"DS\", \"SL\",\n];\n\nconst PRIM_TYPES = new Set([\"bool\", \"int\", \"real\", \"time\", \"timer\", \"counter\"]);\n\ninterface RawLine {\n text: string;\n indent: number;\n lineNo: number;\n}\n\nfunction tokenizeLines(text: string): RawLine[] {\n const out: RawLine[] = [];\n const lines = text.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i].replace(/\\r$/, \"\");\n // Strip `#` line comment but keep `#` inside time literals (T#...) and strings.\n let stripped = \"\";\n let inStr = false;\n for (let j = 0; j < raw.length; j++) {\n const ch = raw[j];\n if (ch === '\"') inStr = !inStr;\n if (!inStr && ch === \"#\") {\n const prev = raw[j - 1];\n // Treat as comment only when preceded by whitespace or at line start.\n if (prev === undefined || /\\s/.test(prev)) break;\n }\n stripped += ch;\n }\n if (!stripped.trim()) continue;\n let indent = 0;\n while (indent < stripped.length && (stripped[indent] === \" \" || stripped[indent] === \"\\t\")) {\n indent += stripped[indent] === \"\\t\" ? 4 : 1;\n }\n out.push({ text: stripped.trim(), indent, lineNo: i + 1 });\n }\n return out;\n}\n\nfunction parseVarDecl(line: RawLine): SfcVarDecl | null {\n const m = line.text.match(/^var\\s+([a-zA-Z_]\\w*)\\s*:\\s*([a-zA-Z_]\\w*)\\s*(?:=\\s*(.+))?$/i);\n if (!m) return null;\n const dt = m[2].toLowerCase();\n const decl: SfcVarDecl = {\n name: m[1],\n dataType: PRIM_TYPES.has(dt) ? (dt as SfcVarType) : m[2],\n };\n if (m[3] !== undefined) decl.initValue = m[3].trim();\n return decl;\n}\n\ninterface ParseState {\n variables: SfcVarDecl[];\n steps: Map<string, SfcStep>;\n transitions: SfcTransition[];\n body: SfcNode[];\n /** Line cursor. */\n lines: RawLine[];\n i: number;\n /** Track first-declared step (becomes the initial step's id if none has [initial]). */\n initialId?: string;\n /** Auto-generated transition ids when not specified. */\n transitionCounter: number;\n}\n\nfunction parseStepHead(line: RawLine): { id: string; kind: SfcStepKind; label?: string } | null {\n const m = line.text.match(/^step\\s+([a-zA-Z_]\\w*)\\s*(\\[[^\\]]*\\])?\\s*$/);\n if (!m) return null;\n const attrs = parseAttrs(m[2]);\n let kind: SfcStepKind = \"normal\";\n if (attrs.has(\"initial\")) kind = \"initial\";\n else if (attrs.has(\"final\")) kind = \"final\";\n const result: { id: string; kind: SfcStepKind; label?: string } = { id: m[1], kind };\n const label = attrs.get(\"label\");\n if (label) result.label = label;\n return result;\n}\n\nfunction parseAttrs(raw: string | undefined): Map<string, string> {\n const out = new Map<string, string>();\n if (!raw) return out;\n const inner = raw.replace(/^\\[|\\]$/g, \"\").trim();\n for (const part of inner.split(\",\")) {\n const t = part.trim();\n if (!t) continue;\n const colon = t.indexOf(\":\");\n if (colon < 0) {\n out.set(t.toLowerCase(), \"true\");\n } else {\n const k = t.slice(0, colon).trim().toLowerCase();\n const v = t.slice(colon + 1).trim().replace(/^\"|\"$/g, \"\");\n out.set(k, v);\n }\n }\n return out;\n}\n\nfunction parseAction(line: RawLine): SfcAction | null {\n // Format: QUAL ActionBody [TIME_LIT]\n // Examples: N FillValve_Open\n // D Mixer_Run T#10s\n // S \"ST inline assignment := 5\"\n const m = line.text.match(/^(N|S|R|L|D|P|P0|P1|SD|DS|SL)\\s+(.+)$/);\n if (!m) return null;\n const qual = m[1] as SfcActionQualifier;\n if (!QUALIFIERS.includes(qual)) return null;\n let body = m[2].trim();\n let time: string | undefined;\n // Trailing T#... ?\n const tm = body.match(/^(.+?)\\s+(T#[0-9]+(?:ms|s|m|h)(?:[0-9]+(?:ms|s|m|h))*)$/i);\n if (tm) {\n body = tm[1].trim();\n time = tm[2];\n }\n // Quoted body\n if (body.startsWith('\"') && body.endsWith('\"')) {\n body = body.slice(1, -1);\n }\n const action: SfcAction = { qualifier: qual, body };\n if (time !== undefined) action.time = time;\n return action;\n}\n\nfunction expectStep(state: ParseState, indent: number): SfcStep | null {\n if (state.i >= state.lines.length) return null;\n const ln = state.lines[state.i];\n if (ln.indent !== indent) return null;\n const head = parseStepHead(ln);\n if (!head) return null;\n state.i++;\n\n const step: SfcStep = {\n id: head.id,\n kind: head.kind,\n actions: [],\n };\n if (head.label !== undefined) step.label = head.label;\n\n // Parse following indented action lines\n while (state.i < state.lines.length) {\n const a = state.lines[state.i];\n if (a.indent <= indent) break;\n const action = parseAction(a);\n if (!action) break;\n step.actions.push(action);\n state.i++;\n }\n if (state.steps.has(step.id)) {\n throw new SfcParseError(`Duplicate step id: ${step.id}`, ln.lineNo, ln.text);\n }\n state.steps.set(step.id, step);\n if (step.kind === \"initial\") {\n if (state.initialId && state.initialId !== step.id) {\n throw new SfcParseError(`Multiple [initial] steps: ${state.initialId} and ${step.id}`, ln.lineNo, ln.text);\n }\n state.initialId = step.id;\n }\n return step;\n}\n\nfunction parseTransitionLine(line: RawLine): SfcTransition | null {\n // transition [id] from: A to: B: condition\n const m = line.text.match(/^transition(?:\\s+([a-zA-Z_]\\w*))?\\s+from\\s*:\\s*([a-zA-Z_]\\w*)\\s+to\\s*:\\s*([a-zA-Z_]\\w*)\\s*:\\s*(.+)$/);\n if (!m) return null;\n const t: SfcTransition = {\n from: m[2],\n to: m[3],\n condition: m[4].trim(),\n };\n if (m[1] !== undefined) t.id = m[1];\n return t;\n}\n\nfunction parseAltBlock(state: ParseState, indent: number): SfcNode | null {\n if (state.i >= state.lines.length) return null;\n const head = state.lines[state.i];\n if (head.indent !== indent) return null;\n const m = head.text.match(/^alt\\s+from\\s*:\\s*([a-zA-Z_]\\w*)\\s*:\\s*$/);\n if (!m) return null;\n state.i++;\n\n const branches: SfcAltBranch[] = [];\n while (state.i < state.lines.length) {\n const ln = state.lines[state.i];\n if (ln.indent <= indent) break;\n const bm = ln.text.match(/^branch\\s*(\\[[^\\]]*\\])?\\s*:\\s*$/);\n if (!bm) break;\n const attrs = parseAttrs(bm[1]);\n state.i++;\n\n // Read branch body: required entry transition, then steps, then exit transition\n const branchIndent = ln.indent;\n let entry: string | undefined;\n let exitCond: string | undefined;\n const body: SfcNode[] = [];\n while (state.i < state.lines.length) {\n const bb = state.lines[state.i];\n if (bb.indent <= branchIndent) break;\n // transition: condition\n const tm = bb.text.match(/^transition\\s*:\\s*(.+)$/);\n if (tm) {\n if (entry === undefined) entry = tm[1].trim();\n else exitCond = tm[1].trim();\n state.i++;\n continue;\n }\n // nested step\n const step = expectStep(state, bb.indent);\n if (step) {\n body.push({ kind: \"step\", stepId: step.id });\n continue;\n }\n // nested alt/sim\n const sub = parseAltBlock(state, bb.indent) ?? parseSimBlock(state, bb.indent);\n if (sub) {\n body.push(sub);\n continue;\n }\n throw new SfcParseError(`Unexpected line in alt branch: ${bb.text}`, bb.lineNo, bb.text);\n }\n const branch: SfcAltBranch = {\n entryCondition: entry ?? \"TRUE\",\n body,\n exitCondition: exitCond ?? \"TRUE\",\n };\n const prio = attrs.get(\"priority\");\n if (prio !== undefined) branch.priority = parseInt(prio, 10);\n branches.push(branch);\n }\n\n // merge_to: STEP\n if (state.i >= state.lines.length) {\n throw new SfcParseError(`alt block missing merge_to clause`, head.lineNo, head.text);\n }\n const mergeLine = state.lines[state.i];\n const mm = mergeLine.text.match(/^merge_to\\s*:\\s*([a-zA-Z_]\\w*)\\s*$/);\n if (!mm) {\n throw new SfcParseError(`Expected \"merge_to: STEP\" (got: ${mergeLine.text})`, mergeLine.lineNo, mergeLine.text);\n }\n state.i++;\n return { kind: \"alt\", branches, mergeTo: mm[1] };\n}\n\nfunction parseSimBlock(state: ParseState, indent: number): SfcNode | null {\n if (state.i >= state.lines.length) return null;\n const head = state.lines[state.i];\n if (head.indent !== indent) return null;\n const m = head.text.match(/^sim\\s+from\\s*:\\s*([a-zA-Z_]\\w*)\\s*:\\s*(.+)$/);\n if (!m) return null;\n const condition = m[2].trim();\n state.i++;\n\n const branches: SfcSimBranch[] = [];\n while (state.i < state.lines.length) {\n const ln = state.lines[state.i];\n if (ln.indent <= indent) break;\n const bm = ln.text.match(/^branch\\s*:\\s*$/);\n if (!bm) break;\n state.i++;\n const branchIndent = ln.indent;\n const body: SfcNode[] = [];\n while (state.i < state.lines.length) {\n const bb = state.lines[state.i];\n if (bb.indent <= branchIndent) break;\n const step = expectStep(state, bb.indent);\n if (step) {\n body.push({ kind: \"step\", stepId: step.id });\n continue;\n }\n const sub = parseAltBlock(state, bb.indent) ?? parseSimBlock(state, bb.indent);\n if (sub) {\n body.push(sub);\n continue;\n }\n throw new SfcParseError(`Unexpected line in sim branch: ${bb.text}`, bb.lineNo, bb.text);\n }\n branches.push({ body });\n }\n\n if (state.i >= state.lines.length) {\n throw new SfcParseError(`sim block missing merge_to clause`, head.lineNo, head.text);\n }\n const mergeLine = state.lines[state.i];\n const mm = mergeLine.text.match(/^merge_to\\s*:\\s*([a-zA-Z_]\\w*)\\s*:\\s*(.+)$/);\n if (!mm) {\n throw new SfcParseError(`Expected \"merge_to: STEP: condition\" (got: ${mergeLine.text})`, mergeLine.lineNo, mergeLine.text);\n }\n state.i++;\n return {\n kind: \"sim\",\n condition,\n branches,\n mergeTo: mm[1],\n mergeCondition: mm[2].trim(),\n };\n}\n\nexport function parseSfc(text: string): SfcAst {\n const lines = tokenizeLines(text);\n if (lines.length === 0) throw new SfcParseError(\"Empty SFC program\");\n if (!/^sfc\\b/i.test(lines[0].text)) {\n throw new SfcParseError(`First non-comment line must start with \"sfc\" (got: ${lines[0].text})`, lines[0].lineNo, lines[0].text);\n }\n const title = matchQuotedTitle(lines[0].text);\n\n const state: ParseState = {\n variables: [],\n steps: new Map(),\n transitions: [],\n body: [],\n lines,\n i: 1,\n transitionCounter: 0,\n };\n\n // Parse variable decls until first step / alt / sim / transition\n while (state.i < lines.length) {\n const ln = lines[state.i];\n const decl = parseVarDecl(ln);\n if (decl) {\n state.variables.push(decl);\n state.i++;\n continue;\n }\n break;\n }\n\n // Parse top-level body — sequence of step / alt / sim entries plus transition lines\n // We scan the file once and build state.body for `step`, alt, sim;\n // transitions go to state.transitions.\n const bodyIndent = state.i < lines.length ? lines[state.i].indent : 0;\n while (state.i < lines.length) {\n const ln = lines[state.i];\n if (ln.indent < bodyIndent) break;\n\n // transition\n const tline = parseTransitionLine(ln);\n if (tline) {\n if (!tline.id) {\n tline.id = `T${state.transitionCounter++}`;\n }\n state.transitions.push(tline);\n state.i++;\n continue;\n }\n // jump\n const jm = ln.text.match(/^jump\\s+from\\s*:\\s*([a-zA-Z_]\\w*)\\s+to\\s*:\\s*([a-zA-Z_]\\w*)\\s*$/);\n if (jm) {\n // Treat as a transition with TRUE condition; no special node type for v0.1.\n state.transitions.push({\n id: `J${state.transitionCounter++}`,\n from: jm[1],\n to: jm[2],\n condition: \"TRUE\",\n });\n state.i++;\n continue;\n }\n\n // step\n const step = expectStep(state, ln.indent);\n if (step) {\n state.body.push({ kind: \"step\", stepId: step.id });\n continue;\n }\n // alt\n const altNode = parseAltBlock(state, ln.indent);\n if (altNode) {\n state.body.push(altNode);\n continue;\n }\n // sim\n const simNode = parseSimBlock(state, ln.indent);\n if (simNode) {\n state.body.push(simNode);\n continue;\n }\n throw new SfcParseError(`Unrecognized SFC line: ${ln.text}`, ln.lineNo, ln.text);\n }\n\n if (!state.initialId) {\n // Promote the first declared step to initial.\n const firstStep = state.steps.values().next().value as SfcStep | undefined;\n if (!firstStep) {\n throw new SfcParseError(\"SFC chart has no steps\");\n }\n firstStep.kind = \"initial\";\n state.initialId = firstStep.id;\n }\n\n // Validate all transitions reference declared steps.\n for (const t of state.transitions) {\n if (!state.steps.has(t.from)) {\n throw new SfcParseError(`Transition references unknown step: ${t.from}`, undefined, `transition from ${t.from}`);\n }\n if (!state.steps.has(t.to)) {\n throw new SfcParseError(`Transition references unknown step: ${t.to}`, undefined, `transition to ${t.to}`);\n }\n }\n\n const ast: SfcAst = {\n type: \"sfc\",\n variables: state.variables,\n steps: state.steps,\n body: state.body,\n transitions: state.transitions,\n };\n if (title !== undefined) ast.title = title;\n return ast;\n}\n","/**\n * SFC layout — strict top-to-bottom.\n *\n * The body is a tree of nodes (steps, alt-blocks, sim-blocks). We compute\n * each node's bounding box by recursive sizing then assign coordinates in a\n * second pass. Branch regions divide horizontally; linear chains stack\n * vertically with `vertical_pitch` between step centers.\n *\n * Free-floating transitions declared via `transition from: A to: B: cond` are\n * placed as bars between linearly-adjacent steps in `body` order; transitions\n * that don't match a body adjacency are rendered as margin jump arrows.\n */\n\nimport type {\n SfcAltBranch,\n SfcAst,\n SfcLayoutAction,\n SfcLayoutBar,\n SfcLayoutJump,\n SfcLayoutResult,\n SfcLayoutStep,\n SfcLayoutTransition,\n SfcLayoutWire,\n SfcNode,\n SfcStep,\n SfcTransition,\n} from \"../../core/types\";\n\nexport const SFC_CONST = {\n step_width: 160,\n step_height: 36,\n step_initial_offset: 4,\n transition_bar_w: 24,\n transition_bar_h: 3,\n simultaneous_bar_gap: 4,\n vertical_pitch: 56,\n branch_x_spacing: 40,\n action_block_w: 200,\n action_block_h: 24,\n action_qualifier_w: 26,\n action_time_h: 14,\n action_gap_x: 8,\n wire_thickness: 1.5,\n branch_wire_clearance: 16,\n margin_x: 60,\n margin_y: 40,\n jump_margin_x: 36,\n};\n\ninterface SizeInfo {\n width: number;\n height: number;\n /** y-distance from top to step center (used to align convergence wire). */\n centerOffsetTop?: number;\n}\n\ninterface PlacedStep {\n step: SfcStep;\n cx: number; // center x\n cy: number; // center y of step rectangle\n}\n\ninterface LayoutContext {\n steps: Map<string, SfcLayoutStep>;\n actions: SfcLayoutAction[];\n transitions: SfcLayoutTransition[];\n bars: SfcLayoutBar[];\n wires: SfcLayoutWire[];\n jumps: SfcLayoutJump[];\n /** Map from step id → placed center coords (for jump routing). */\n placedById: Map<string, PlacedStep>;\n}\n\nfunction actionBlockFullHeight(): number {\n return SFC_CONST.action_block_h; // base; +action_time_h added when time present\n}\n\nfunction sizeStepWithActions(step: SfcStep): SizeInfo {\n const width = SFC_CONST.step_width;\n const height = SFC_CONST.step_height;\n void step;\n return { width, height };\n}\n\nfunction sizeBody(ast: SfcAst, body: SfcNode[]): SizeInfo {\n // Linear stack: take max width, sum heights with vertical_pitch gaps between nodes (transition bars).\n let maxW = SFC_CONST.step_width;\n let totalH = 0;\n for (let i = 0; i < body.length; i++) {\n const node = body[i];\n const sz = sizeNode(ast, node);\n if (sz.width > maxW) maxW = sz.width;\n totalH += sz.height;\n if (i < body.length - 1) {\n totalH += SFC_CONST.vertical_pitch;\n }\n }\n return { width: maxW, height: totalH };\n}\n\nfunction sizeNode(ast: SfcAst, node: SfcNode): SizeInfo {\n if (node.kind === \"step\") {\n const step = ast.steps.get(node.stepId);\n if (!step) return { width: SFC_CONST.step_width, height: SFC_CONST.step_height };\n return sizeStepWithActions(step);\n }\n if (node.kind === \"alt\") {\n let totalW = 0;\n let maxH = 0;\n for (const br of node.branches) {\n const sz = sizeAltBranch(ast, br);\n totalW += sz.width;\n if (sz.height > maxH) maxH = sz.height;\n }\n totalW += (node.branches.length - 1) * SFC_CONST.branch_x_spacing;\n // Plus divergence + convergence overhead: ~2 transition gaps\n const totalH = maxH + SFC_CONST.vertical_pitch * 2;\n return { width: Math.max(totalW, SFC_CONST.step_width), height: totalH };\n }\n // sim\n let totalW = 0;\n let maxH = 0;\n for (const br of node.branches) {\n const sz = sizeBody(ast, br.body);\n totalW += sz.width;\n if (sz.height > maxH) maxH = sz.height;\n }\n totalW += (node.branches.length - 1) * SFC_CONST.branch_x_spacing;\n // shared transition above + double bar + body + double bar + shared transition below\n const totalH = SFC_CONST.vertical_pitch * 3 + maxH;\n return { width: Math.max(totalW, SFC_CONST.step_width), height: totalH };\n}\n\nfunction sizeAltBranch(ast: SfcAst, br: SfcAltBranch): SizeInfo {\n // entry transition + body + exit transition\n let bodyW = SFC_CONST.step_width;\n let bodyH = 0;\n for (let i = 0; i < br.body.length; i++) {\n const sz = sizeNode(ast, br.body[i]);\n if (sz.width > bodyW) bodyW = sz.width;\n bodyH += sz.height;\n if (i < br.body.length - 1) bodyH += SFC_CONST.vertical_pitch;\n }\n return {\n width: bodyW,\n height: bodyH + SFC_CONST.vertical_pitch * 2, // entry + exit transitions\n };\n}\n\n/** Place a linear body returning the y-coordinate at the bottom (for chaining). */\nfunction placeBody(\n ctx: LayoutContext,\n ast: SfcAst,\n body: SfcNode[],\n cx: number,\n startY: number\n): { endY: number; firstStepCy?: number; lastStepCy?: number; firstStepId?: string; lastStepId?: string } {\n let y = startY;\n let firstCy: number | undefined;\n let firstId: string | undefined;\n let lastCy: number | undefined;\n let lastId: string | undefined;\n for (let i = 0; i < body.length; i++) {\n const node = body[i];\n if (i > 0) y += SFC_CONST.vertical_pitch; // gap with transition between\n const placed = placeNode(ctx, ast, node, cx, y);\n if (i === 0) {\n firstCy = placed.firstCy;\n if (placed.firstStepId) firstId = placed.firstStepId;\n }\n lastCy = placed.lastCy;\n if (placed.lastStepId) lastId = placed.lastStepId;\n y = placed.endY;\n }\n return { endY: y, firstStepCy: firstCy, lastStepCy: lastCy, firstStepId: firstId, lastStepId: lastId };\n}\n\ninterface PlaceResult {\n endY: number;\n firstCy: number;\n lastCy: number;\n firstStepId?: string;\n lastStepId?: string;\n}\n\nfunction placeNode(ctx: LayoutContext, ast: SfcAst, node: SfcNode, cx: number, startY: number): PlaceResult {\n if (node.kind === \"step\") {\n const step = ast.steps.get(node.stepId);\n if (!step) {\n return { endY: startY + SFC_CONST.step_height, firstCy: startY + SFC_CONST.step_height / 2, lastCy: startY + SFC_CONST.step_height / 2 };\n }\n return placeStep(ctx, step, cx, startY);\n }\n if (node.kind === \"alt\") {\n return placeAlt(ctx, ast, node, cx, startY);\n }\n return placeSim(ctx, ast, node, cx, startY);\n}\n\nfunction placeStep(ctx: LayoutContext, step: SfcStep, cx: number, y: number): PlaceResult {\n const w = SFC_CONST.step_width;\n const h = SFC_CONST.step_height;\n const x = cx - w / 2;\n const layoutStep: SfcLayoutStep = { step, x, y, width: w, height: h };\n ctx.steps.set(step.id, layoutStep);\n ctx.placedById.set(step.id, { step, cx, cy: y + h / 2 });\n\n // Action blocks to the right\n let ay = y;\n step.actions.forEach((a, idx) => {\n const ax = x + w + SFC_CONST.action_gap_x;\n const ah = a.time ? actionBlockFullHeight() + SFC_CONST.action_time_h : actionBlockFullHeight();\n ctx.actions.push({\n action: a,\n stepId: step.id,\n index: idx,\n x: ax,\n y: ay,\n width: SFC_CONST.action_block_w,\n height: ah,\n qualifierWidth: SFC_CONST.action_qualifier_w,\n });\n ay += ah;\n });\n\n return {\n endY: y + h,\n firstCy: y + h / 2,\n lastCy: y + h / 2,\n firstStepId: step.id,\n lastStepId: step.id,\n };\n}\n\nfunction placeAlt(ctx: LayoutContext, ast: SfcAst, node: Extract<SfcNode, { kind: \"alt\" }>, cx: number, startY: number): PlaceResult {\n // Compute total width\n const branchSizes = node.branches.map((br) => sizeAltBranch(ast, br));\n const totalW = branchSizes.reduce((s, b) => s + b.width, 0)\n + (node.branches.length - 1) * SFC_CONST.branch_x_spacing;\n const leftX = cx - totalW / 2;\n\n // Divergence bar\n const divY = startY + SFC_CONST.vertical_pitch / 2;\n ctx.bars.push({\n kind: \"alt-div\",\n x1: leftX - 12,\n x2: leftX + totalW + 12,\n y: divY,\n });\n\n // Place each branch\n let bx = leftX;\n let maxBranchEnd = 0;\n const branchEndIds: { id: string; cx: number }[] = [];\n for (let bi = 0; bi < node.branches.length; bi++) {\n const br = node.branches[bi];\n const sz = branchSizes[bi];\n const branchCx = bx + sz.width / 2;\n\n // Entry transition (between div bar and first step)\n const entryY = divY + (SFC_CONST.vertical_pitch - SFC_CONST.transition_bar_h) / 2 + SFC_CONST.transition_bar_h;\n const entryT: SfcTransition = {\n id: `_alt${bi}_entry`,\n from: \"_div\", to: \"_div\",\n condition: br.entryCondition,\n };\n ctx.transitions.push({\n transition: entryT,\n cx: branchCx,\n cy: divY + SFC_CONST.vertical_pitch * 0.5,\n w: SFC_CONST.transition_bar_w,\n });\n void entryY;\n\n // Place body inside branch\n const bodyStartY = divY + SFC_CONST.vertical_pitch;\n const placed = placeBody(ctx, ast, br.body, branchCx, bodyStartY);\n const branchEndY = placed.endY;\n // Exit transition\n ctx.transitions.push({\n transition: { id: `_alt${bi}_exit`, from: \"_div\", to: \"_conv\", condition: br.exitCondition },\n cx: branchCx,\n cy: branchEndY + SFC_CONST.vertical_pitch * 0.5,\n w: SFC_CONST.transition_bar_w,\n });\n if (placed.lastStepId) branchEndIds.push({ id: placed.lastStepId, cx: branchCx });\n if (placed.firstStepCy !== undefined) {\n // wire from div bar to entry transition to first step\n ctx.wires.push({ path: `M ${branchCx} ${divY} L ${branchCx} ${placed.firstStepCy - SFC_CONST.step_height / 2}`, cls: \"wire\" });\n }\n if (placed.lastStepCy !== undefined) {\n // wire from last step to exit transition then to conv\n ctx.wires.push({\n path: `M ${branchCx} ${placed.lastStepCy + SFC_CONST.step_height / 2} L ${branchCx} ${branchEndY + SFC_CONST.vertical_pitch}`,\n cls: \"wire\",\n });\n }\n bx += sz.width + SFC_CONST.branch_x_spacing;\n if (branchEndY + SFC_CONST.vertical_pitch > maxBranchEnd) maxBranchEnd = branchEndY + SFC_CONST.vertical_pitch;\n }\n\n // Convergence bar\n const convY = maxBranchEnd;\n ctx.bars.push({\n kind: \"alt-conv\",\n x1: leftX - 12,\n x2: leftX + totalW + 12,\n y: convY,\n });\n\n // Wire from main upstream into div bar (handled by parent body chain).\n // Wire from conv bar onward (handled by body chain).\n return {\n endY: convY,\n firstCy: divY,\n lastCy: convY,\n };\n}\n\nfunction placeSim(ctx: LayoutContext, ast: SfcAst, node: Extract<SfcNode, { kind: \"sim\" }>, cx: number, startY: number): PlaceResult {\n // Compute total width\n const branchSizes = node.branches.map((br) => sizeBody(ast, br.body));\n const totalW = branchSizes.reduce((s, b) => s + b.width, 0)\n + (node.branches.length - 1) * SFC_CONST.branch_x_spacing;\n const leftX = cx - totalW / 2;\n\n // Shared transition (above the double bar)\n const sharedTopY = startY + SFC_CONST.vertical_pitch * 0.5;\n ctx.transitions.push({\n transition: { id: \"_sim_in\", from: \"_pre\", to: \"_div\", condition: node.condition },\n cx,\n cy: sharedTopY,\n w: SFC_CONST.transition_bar_w,\n });\n\n // Double divergence bar\n const divY1 = startY + SFC_CONST.vertical_pitch;\n const divY2 = divY1 + SFC_CONST.simultaneous_bar_gap;\n ctx.bars.push({ kind: \"sim-div\", x1: leftX - 12, x2: leftX + totalW + 12, y: divY1 });\n ctx.bars.push({ kind: \"sim-div\", x1: leftX - 12, x2: leftX + totalW + 12, y: divY2 });\n\n // Place each branch\n let bx = leftX;\n let maxBranchEnd = 0;\n for (let bi = 0; bi < node.branches.length; bi++) {\n const br = node.branches[bi];\n const sz = branchSizes[bi];\n const branchCx = bx + sz.width / 2;\n const placed = placeBody(ctx, ast, br.body, branchCx, divY2 + SFC_CONST.vertical_pitch);\n if (placed.firstStepCy !== undefined) {\n ctx.wires.push({ path: `M ${branchCx} ${divY2} L ${branchCx} ${placed.firstStepCy - SFC_CONST.step_height / 2}`, cls: \"wire\" });\n }\n if (placed.lastStepCy !== undefined) {\n ctx.wires.push({ path: `M ${branchCx} ${placed.lastStepCy + SFC_CONST.step_height / 2} L ${branchCx} ${placed.endY + SFC_CONST.vertical_pitch}`, cls: \"wire\" });\n }\n bx += sz.width + SFC_CONST.branch_x_spacing;\n if (placed.endY + SFC_CONST.vertical_pitch > maxBranchEnd) maxBranchEnd = placed.endY + SFC_CONST.vertical_pitch;\n }\n\n // Double convergence bar\n const convY1 = maxBranchEnd;\n const convY2 = convY1 + SFC_CONST.simultaneous_bar_gap;\n ctx.bars.push({ kind: \"sim-conv\", x1: leftX - 12, x2: leftX + totalW + 12, y: convY1 });\n ctx.bars.push({ kind: \"sim-conv\", x1: leftX - 12, x2: leftX + totalW + 12, y: convY2 });\n\n // Shared transition (below the double bar)\n const sharedBottomY = convY2 + SFC_CONST.vertical_pitch * 0.5;\n ctx.transitions.push({\n transition: { id: \"_sim_out\", from: \"_conv\", to: \"_post\", condition: node.mergeCondition },\n cx,\n cy: sharedBottomY,\n w: SFC_CONST.transition_bar_w,\n });\n\n return {\n endY: convY2 + SFC_CONST.vertical_pitch,\n firstCy: sharedTopY,\n lastCy: convY2,\n };\n}\n\nexport function layoutSfc(ast: SfcAst): SfcLayoutResult {\n const ctx: LayoutContext = {\n steps: new Map(),\n actions: [],\n transitions: [],\n bars: [],\n wires: [],\n jumps: [],\n placedById: new Map(),\n };\n\n // Estimate total width from sized body\n const totalSize = sizeBody(ast, ast.body);\n const cx = SFC_CONST.margin_x + totalSize.width / 2;\n\n // Place body\n const startY = SFC_CONST.margin_y;\n const placed = placeBody(ctx, ast, ast.body, cx, startY);\n\n // Connect adjacent body steps with vertical wires + transition bars from explicit transitions.\n // Build a quick adjacency table of explicit transitions.\n const trByPair = new Map<string, SfcTransition>();\n for (const t of ast.transitions) {\n trByPair.set(`${t.from}\\0${t.to}`, t);\n }\n\n // Walk body to extract linear chain (step ids only at the top level).\n // Add transition bars between adjacent step nodes.\n const linearStepIds: string[] = collectLinearSteps(ast.body);\n for (let i = 0; i < linearStepIds.length - 1; i++) {\n const from = linearStepIds[i];\n const to = linearStepIds[i + 1];\n const t = trByPair.get(`${from}\\0${to}`);\n const fromS = ctx.placedById.get(from);\n const toS = ctx.placedById.get(to);\n if (!fromS || !toS) continue;\n const midY = (fromS.cy + SFC_CONST.step_height / 2 + toS.cy - SFC_CONST.step_height / 2) / 2;\n if (t) {\n ctx.transitions.push({\n transition: t,\n cx: fromS.cx,\n cy: midY,\n w: SFC_CONST.transition_bar_w,\n ...(t.id ? { id: t.id } : {}),\n });\n }\n // Vertical wire (always)\n ctx.wires.push({\n path: `M ${fromS.cx} ${fromS.cy + SFC_CONST.step_height / 2} L ${toS.cx} ${toS.cy - SFC_CONST.step_height / 2}`,\n cls: \"wire\",\n });\n if (t) trByPair.delete(`${from}\\0${to}`);\n }\n\n // Remaining transitions are jumps — draw as margin arrows.\n let jumpIdx = 0;\n for (const t of ast.transitions) {\n if (!trByPair.has(`${t.from}\\0${t.to}`)) continue;\n const fromS = ctx.placedById.get(t.from);\n const toS = ctx.placedById.get(t.to);\n if (!fromS || !toS) continue;\n const onLeft = jumpIdx % 2 === 0;\n jumpIdx++;\n const marginX = onLeft\n ? SFC_CONST.margin_x - SFC_CONST.jump_margin_x\n : (placed.endY, totalSize.width + SFC_CONST.margin_x + SFC_CONST.jump_margin_x);\n const fromX = onLeft\n ? fromS.cx - SFC_CONST.step_width / 2\n : fromS.cx + SFC_CONST.step_width / 2;\n const toX = onLeft\n ? toS.cx - SFC_CONST.step_width / 2\n : toS.cx + SFC_CONST.step_width / 2;\n const fromY = fromS.cy;\n const toY = toS.cy;\n const path = `M ${fromX} ${fromY} L ${marginX} ${fromY} L ${marginX} ${toY} L ${toX} ${toY}`;\n ctx.jumps.push({\n fromStepId: t.from,\n toStepId: t.to,\n path,\n labelX: marginX + (onLeft ? -8 : 8),\n labelY: (fromY + toY) / 2,\n labelText: t.to,\n condition: t.condition,\n });\n }\n\n // Compute final width/height\n const width = totalSize.width + SFC_CONST.margin_x * 2 + SFC_CONST.jump_margin_x * 2 + 80;\n const height = placed.endY + SFC_CONST.margin_y;\n\n return {\n ast,\n steps: Array.from(ctx.steps.values()),\n actions: ctx.actions,\n transitions: ctx.transitions,\n bars: ctx.bars,\n wires: ctx.wires,\n jumps: ctx.jumps,\n width,\n height,\n };\n}\n\nfunction collectLinearSteps(body: SfcNode[]): string[] {\n const out: string[] = [];\n for (const node of body) {\n if (node.kind === \"step\") out.push(node.stepId);\n // alt/sim represent a single \"logical step slot\" but we don't include\n // their internal step ids as part of the linear chain — the chain\n // continues at the merge_to step which appears as a separate step node\n // later in body. Branch internals get wired by the placer.\n }\n return out;\n}\n","/**\n * SFC renderer — Sequential Function Chart SVG output.\n * IEC 61131-3 §6.5 visual conventions; see 24-SFC-STANDARD.md.\n */\n\nimport type { SfcAst, SfcLayoutResult } from \"../../core/types\";\nimport { defs, el, group, line, path, rect, svgRoot, text, title, desc, escapeXml } from \"../../core/svg\";\nimport { parseSfc } from \"./parser\";\nimport { layoutSfc, SFC_CONST } from \"./layout\";\n\nconst STYLES = `\n.lt-sfc-bg { fill: #ffffff; }\n.lt-sfc-step-body { fill: #ffffff; stroke: #333; stroke-width: 1.5; }\n.lt-sfc-step-inner { fill: none; stroke: #333; stroke-width: 1.2; }\n.lt-sfc-step-name { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 12px; font-weight: 600; fill: #111; }\n.lt-sfc-transition-bar { fill: #000; }\n.lt-sfc-transition-condition { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 11px; fill: #333; }\n.lt-sfc-transition-id { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 10px; fill: #888; }\n.lt-sfc-branch-bar { stroke: #000; stroke-width: 1.5; fill: none; }\n.lt-sfc-wire { stroke: #000; stroke-width: 1.5; fill: none; }\n.lt-sfc-action-block { fill: #fafafa; stroke: #333; stroke-width: 1; }\n.lt-sfc-action-qualifier { fill: #f0f0f0; stroke: #333; stroke-width: 1; }\n.lt-sfc-action-qualifier-text { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-weight: 700; font-size: 11px; fill: #111; }\n.lt-sfc-action-body { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 11px; fill: #222; }\n.lt-sfc-action-time { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 10px; fill: #555; }\n.lt-sfc-jump { stroke: #000; stroke-width: 1.5; fill: none; marker-end: url(#sfc-arrow); }\n.lt-sfc-jump-label { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 10px; fill: #555; }\n.lt-sfc-title { font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace; font-size: 14px; font-weight: 700; fill: #111; }\n`;\n\nexport function renderSfcLayout(layout: SfcLayoutResult): string {\n const parts: string[] = [];\n\n const styleEl = el(\"style\", {}, escapeXml(STYLES).replace(/&quot;/g, '\"'));\n const arrowMarker = el(\n \"marker\",\n {\n id: \"sfc-arrow\",\n viewBox: \"0 0 10 10\",\n refX: 9, refY: 5,\n markerWidth: 8, markerHeight: 8,\n orient: \"auto-start-reverse\",\n },\n [el(\"path\", { d: \"M 0 0 L 10 5 L 0 10 z\", fill: \"#000\" })]\n );\n parts.push(defs([styleEl, arrowMarker]));\n parts.push(title(`SFC: ${layout.ast.title ?? \"Sequential Function Chart\"}`));\n parts.push(desc(`SFC with ${layout.steps.length} step(s), ${layout.transitions.length} transition(s).`));\n parts.push(rect({ class: \"lt-sfc-bg\", x: 0, y: 0, width: layout.width, height: layout.height }));\n\n // Title\n if (layout.ast.title) {\n parts.push(text(\n { class: \"lt-sfc-title\", x: layout.width / 2, y: 22, \"text-anchor\": \"middle\" },\n layout.ast.title\n ));\n }\n\n // Wires (under steps so they don't overlap step rects)\n for (const w of layout.wires) {\n parts.push(path({ class: \"lt-sfc-wire\", d: w.path }));\n }\n\n // Branch bars\n for (const b of layout.bars) {\n if (b.kind === \"alt-div\" || b.kind === \"alt-conv\") {\n parts.push(line({ class: \"lt-sfc-branch-bar\", x1: b.x1, y1: b.y, x2: b.x2, y2: b.y }));\n } else {\n // Simultaneous = single line; second line is its own bar entry from the layout\n parts.push(line({ class: \"lt-sfc-branch-bar\", x1: b.x1, y1: b.y, x2: b.x2, y2: b.y }));\n }\n }\n\n // Transitions\n for (const t of layout.transitions) {\n const x = t.cx - t.w;\n const y = t.cy - SFC_CONST.transition_bar_h / 2;\n parts.push(rect({\n class: \"lt-sfc-transition-bar\",\n x, y, width: t.w * 2, height: SFC_CONST.transition_bar_h,\n }));\n if (t.id) {\n parts.push(text(\n { class: \"lt-sfc-transition-id\", x: x - 4, y: y + 4, \"text-anchor\": \"end\" },\n t.id\n ));\n }\n parts.push(text(\n { class: \"lt-sfc-transition-condition\", x: x + t.w * 2 + 6, y: y + 4 },\n t.transition.condition\n ));\n }\n\n // Steps\n for (const ls of layout.steps) {\n const stepGroup: string[] = [];\n stepGroup.push(rect({\n class: \"lt-sfc-step-body\",\n x: ls.x, y: ls.y,\n width: ls.width, height: ls.height,\n }));\n if (ls.step.kind === \"initial\" || ls.step.kind === \"final\") {\n const off = SFC_CONST.step_initial_offset;\n stepGroup.push(rect({\n class: \"lt-sfc-step-inner\",\n x: ls.x + off, y: ls.y + off,\n width: ls.width - off * 2, height: ls.height - off * 2,\n }));\n }\n if (ls.step.kind === \"final\") {\n const off = SFC_CONST.step_initial_offset + 3;\n stepGroup.push(rect({\n class: \"lt-sfc-step-inner\",\n x: ls.x + off, y: ls.y + off,\n width: ls.width - off * 2, height: ls.height - off * 2,\n }));\n }\n stepGroup.push(text(\n { class: \"lt-sfc-step-name\", x: ls.x + ls.width / 2, y: ls.y + ls.height / 2 + 4, \"text-anchor\": \"middle\" },\n ls.step.label ?? ls.step.id\n ));\n parts.push(group(\n { class: \"lt-sfc-step\", \"data-step-id\": ls.step.id, \"data-step-kind\": ls.step.kind },\n stepGroup\n ));\n\n // Connect step to action blocks (small horizontal stub)\n const myActions = layout.actions.filter((a) => a.stepId === ls.step.id);\n if (myActions.length > 0) {\n parts.push(line({\n class: \"lt-sfc-wire\",\n x1: ls.x + ls.width,\n y1: ls.y + ls.height / 2,\n x2: myActions[0].x,\n y2: ls.y + ls.height / 2,\n }));\n }\n }\n\n // Action blocks\n for (const a of layout.actions) {\n const ag: string[] = [];\n ag.push(rect({\n class: \"lt-sfc-action-qualifier\",\n x: a.x, y: a.y,\n width: a.qualifierWidth, height: SFC_CONST.action_block_h,\n }));\n ag.push(rect({\n class: \"lt-sfc-action-block\",\n x: a.x + a.qualifierWidth, y: a.y,\n width: a.width - a.qualifierWidth, height: SFC_CONST.action_block_h,\n }));\n ag.push(text(\n { class: \"lt-sfc-action-qualifier-text\", x: a.x + a.qualifierWidth / 2, y: a.y + SFC_CONST.action_block_h / 2 + 4, \"text-anchor\": \"middle\" },\n a.action.qualifier\n ));\n ag.push(text(\n { class: \"lt-sfc-action-body\", x: a.x + a.qualifierWidth + 6, y: a.y + SFC_CONST.action_block_h / 2 + 4 },\n a.action.body\n ));\n if (a.action.time) {\n const ty = a.y + SFC_CONST.action_block_h;\n ag.push(rect({\n class: \"lt-sfc-action-block\",\n x: a.x, y: ty,\n width: a.width, height: SFC_CONST.action_time_h,\n }));\n ag.push(text(\n { class: \"lt-sfc-action-time\", x: a.x + 6, y: ty + SFC_CONST.action_time_h / 2 + 4 },\n a.action.time\n ));\n }\n parts.push(group(\n { class: \"lt-sfc-action-block-g\", \"data-step-id\": a.stepId, \"data-action-index\": a.index, \"data-qualifier\": a.action.qualifier },\n ag\n ));\n }\n\n // Jumps\n for (const j of layout.jumps) {\n parts.push(path({ class: \"lt-sfc-jump\", d: j.path }));\n const labelParts: string[] = [];\n if (j.condition) labelParts.push(j.condition);\n labelParts.push(`→ ${j.labelText}`);\n parts.push(text(\n { class: \"lt-sfc-jump-label\", x: j.labelX, y: j.labelY, \"text-anchor\": \"middle\" },\n labelParts.join(\" \")\n ));\n }\n\n return svgRoot(\n {\n width: layout.width,\n height: layout.height,\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n class: \"lt-sfc\",\n \"data-diagram-type\": \"sfc\",\n },\n parts\n );\n}\n\nexport function renderSfc(text: string): string {\n const ast: SfcAst = parseSfc(text);\n const layout = layoutSfc(ast);\n return renderSfcLayout(layout);\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseSfc } from \"./parser\";\nimport { renderSfc } from \"./renderer\";\n\nexport const sfc: DiagramPlugin = {\n type: \"sfc\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"sfc\");\n },\n parse: parseSfc,\n render(text: string): string {\n return renderSfc(text);\n },\n};\n\nexport { parseSfc } from \"./parser\";\nexport { renderSfc, renderSfcLayout } from \"./renderer\";\nexport { layoutSfc } from \"./layout\";\n","import type { DiagramPlugin, RenderConfig } from \"./types\";\nimport { parseFrontmatter } from \"./dsl-preprocess\";\nimport { genogram } from \"../diagrams/genogram\";\nimport { ecomap } from \"../diagrams/ecomap\";\nimport { pedigree } from \"../diagrams/pedigree\";\nimport { phylo } from \"../diagrams/phylo\";\nimport { sociogram } from \"../diagrams/sociogram\";\nimport { timing } from \"../diagrams/timing\";\nimport { logic } from \"../diagrams/logic\";\nimport { circuit } from \"../diagrams/circuit\";\nimport { blockdiagram } from \"../diagrams/blockdiagram\";\nimport { ladder } from \"../diagrams/ladder\";\nimport { sld } from \"../diagrams/sld\";\nimport { entity } from \"../diagrams/entity\";\nimport { fishbone } from \"../diagrams/fishbone\";\nimport { venn } from \"../diagrams/venn\";\nimport { flowchart } from \"../diagrams/flowchart\";\nimport { mindmap } from \"../diagrams/mindmap\";\nimport { matrix } from \"../diagrams/matrix\";\nimport { orgchart } from \"../diagrams/orgchart\";\nimport { decisiontree } from \"../diagrams/decisiontree\";\nimport { timeline } from \"../diagrams/timeline\";\nimport { state } from \"../diagrams/state\";\nimport { pid } from \"../diagrams/pid\";\nimport { erd } from \"../diagrams/erd\";\nimport { breadboard } from \"../diagrams/breadboard\";\nimport { bpmn } from \"../diagrams/bpmn\";\nimport { fbd } from \"../diagrams/fbd\";\nimport { sfc } from \"../diagrams/sfc\";\n\nexport interface SchematexConfig {\n type?:\n | \"genogram\"\n | \"ecomap\"\n | \"pedigree\"\n | \"phylo\"\n | \"sociogram\"\n | \"timing\"\n | \"logic\"\n | \"circuit\"\n | \"blockdiagram\"\n | \"ladder\"\n | \"sld\"\n | \"entity\"\n | \"fishbone\"\n | \"venn\"\n | \"flowchart\"\n | \"mindmap\"\n | \"matrix\"\n | \"orgchart\"\n | \"decisiontree\"\n | \"timeline\"\n | \"state\"\n | \"pid\"\n | \"erd\"\n | \"breadboard\"\n | \"bpmn\"\n | \"fbd\"\n | \"sfc\";\n width?: number;\n height?: number;\n padding?: number;\n theme?: string;\n fontFamily?: string;\n}\n\nconst plugins: DiagramPlugin[] = [\n genogram,\n ecomap,\n pedigree,\n phylo,\n sociogram,\n timing,\n logic,\n circuit,\n blockdiagram,\n ladder,\n sld,\n entity,\n fishbone,\n venn,\n flowchart,\n mindmap,\n matrix,\n orgchart,\n decisiontree,\n timeline,\n state,\n pid,\n erd,\n breadboard,\n bpmn,\n fbd,\n sfc,\n];\n\nfunction detectPlugin(text: string, config?: SchematexConfig): DiagramPlugin {\n if (config?.type) {\n const plugin = plugins.find((p) => p.type === config.type);\n if (plugin) return plugin;\n }\n for (const plugin of plugins) {\n if (plugin.detect(text)) return plugin;\n }\n throw new Error(\n \"Cannot detect diagram type. Start your text with 'genogram', 'ecomap', 'pedigree', 'phylo', 'sociogram', 'timing', 'logic', 'circuit', 'blockdiagram', 'ladder', 'sld', 'entity-structure', 'fishbone', 'venn', 'flowchart', 'mindmap', 'matrix', 'orgchart', 'state', 'pid', 'erd', 'breadboard', 'bpmn', 'fbd', or 'sfc'.\"\n );\n}\n\n/**\n * Run the Mermaid-compat frontmatter pass and merge any `title:` into the\n * first header line as a quoted suffix (`flowchart TD` → `flowchart TD \"T\"`).\n *\n * Most per-diagram header regexes already accept a trailing quoted title, or\n * tolerate trailing tokens. Diagram types whose grammar would reject the\n * appended title are left alone — the frontmatter is silently dropped rather\n * than producing a misleading parse error.\n */\nfunction preprocess(text: string): string {\n const { data, body } = parseFrontmatter(text);\n if (!data.title) return body;\n // Strip the title here — `data.title` was already unquoted by parseFrontmatter.\n const safeTitle = data.title.replace(/\"/g, '\\\\\"');\n // Find the first non-blank line in body and append the title if it doesn't\n // already carry a quoted region.\n const lines = body.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i]!.trim();\n if (trimmed === \"\") continue;\n // Already has a quoted title — frontmatter loses.\n if (/[\"“「『«][^\"”」』»]+[\"”」』»]/.test(trimmed)) return body;\n lines[i] = lines[i]!.replace(/\\s*$/, ` \"${safeTitle}\"`);\n return lines.join(\"\\n\");\n }\n return body;\n}\n\n/**\n * Parse DSL text to the diagram's AST and return it as a plain object.\n * Useful for JSON serialization, programmatic inspection, or custom renderers.\n *\n * @example\n * ```ts\n * const ast = parse('genogram\\n alice [female]');\n * console.log(JSON.stringify(ast, null, 2));\n * ```\n */\nexport function parse(text: string, config?: SchematexConfig): unknown {\n const prepared = preprocess(text);\n const plugin = detectPlugin(prepared, config);\n if (plugin.parse) return plugin.parse(prepared);\n throw new Error(\n `Diagram type '${plugin.type}' does not yet expose a parse() method.`\n );\n}\n\nexport function render(text: string, config?: SchematexConfig): string {\n const prepared = preprocess(text);\n const plugin = detectPlugin(prepared, config);\n const renderConfig: RenderConfig = {\n fontFamily: config?.fontFamily ?? \"system-ui, -apple-system, sans-serif\",\n fontSize: 12,\n theme: config?.theme ?? \"default\",\n padding: config?.padding ?? 20,\n };\n return plugin.render(prepared, renderConfig);\n}\n"]}