schematex 0.3.2 → 0.3.3

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 (171) hide show
  1. package/dist/ai/ai-sdk.cjs +25 -25
  2. package/dist/ai/ai-sdk.d.cts +1 -1
  3. package/dist/ai/ai-sdk.d.ts +1 -1
  4. package/dist/ai/ai-sdk.js +20 -20
  5. package/dist/ai/index.cjs +28 -28
  6. package/dist/ai/index.d.cts +1 -1
  7. package/dist/ai/index.d.ts +1 -1
  8. package/dist/ai/index.js +20 -20
  9. package/dist/browser.cjs +22 -22
  10. package/dist/browser.js +20 -20
  11. package/dist/{chunk-LFZZ4NCP.cjs → chunk-3WNW5Y7P.cjs} +48 -8
  12. package/dist/chunk-3WNW5Y7P.cjs.map +1 -0
  13. package/dist/{chunk-MKKFIPKU.cjs → chunk-55UEHL57.cjs} +46 -46
  14. package/dist/{chunk-MKKFIPKU.cjs.map → chunk-55UEHL57.cjs.map} +1 -1
  15. package/dist/{chunk-BJ65PKDU.js → chunk-5U2W3HQA.js} +3 -3
  16. package/dist/{chunk-BJ65PKDU.js.map → chunk-5U2W3HQA.js.map} +1 -1
  17. package/dist/{chunk-75BMFCP5.cjs → chunk-5UCXMYE7.cjs} +44 -44
  18. package/dist/{chunk-75BMFCP5.cjs.map → chunk-5UCXMYE7.cjs.map} +1 -1
  19. package/dist/{chunk-F6OROIHS.js → chunk-66XQBGX7.js} +3 -3
  20. package/dist/{chunk-F6OROIHS.js.map → chunk-66XQBGX7.js.map} +1 -1
  21. package/dist/{chunk-HIQPEAL7.js → chunk-6TIN33CA.js} +3 -3
  22. package/dist/{chunk-HIQPEAL7.js.map → chunk-6TIN33CA.js.map} +1 -1
  23. package/dist/{chunk-RNGYXGHS.js → chunk-6YUP3QMA.js} +19 -19
  24. package/dist/{chunk-RNGYXGHS.js.map → chunk-6YUP3QMA.js.map} +1 -1
  25. package/dist/{chunk-C3IVD7DI.cjs → chunk-7EWFVNYD.cjs} +25 -25
  26. package/dist/{chunk-C3IVD7DI.cjs.map → chunk-7EWFVNYD.cjs.map} +1 -1
  27. package/dist/{chunk-56LXBM45.js → chunk-AC3XH3LB.js} +4 -4
  28. package/dist/{chunk-56LXBM45.js.map → chunk-AC3XH3LB.js.map} +1 -1
  29. package/dist/{chunk-YTEEZV6J.cjs → chunk-APV4AWQ5.cjs} +422 -422
  30. package/dist/{chunk-YTEEZV6J.cjs.map → chunk-APV4AWQ5.cjs.map} +1 -1
  31. package/dist/{chunk-UK7JF5QB.cjs → chunk-AVIKQZSX.cjs} +37 -37
  32. package/dist/{chunk-UK7JF5QB.cjs.map → chunk-AVIKQZSX.cjs.map} +1 -1
  33. package/dist/{chunk-OK5RYX55.cjs → chunk-CWZKP3CJ.cjs} +26 -26
  34. package/dist/{chunk-OK5RYX55.cjs.map → chunk-CWZKP3CJ.cjs.map} +1 -1
  35. package/dist/{chunk-2J2QWNGI.js → chunk-FIVUMDLF.js} +26 -7
  36. package/dist/chunk-FIVUMDLF.js.map +1 -0
  37. package/dist/{chunk-ZTSO3S4P.js → chunk-FO7BLCEW.js} +3 -3
  38. package/dist/{chunk-ZTSO3S4P.js.map → chunk-FO7BLCEW.js.map} +1 -1
  39. package/dist/{chunk-6BKUD5EJ.js → chunk-GLFBHQSQ.js} +4 -4
  40. package/dist/{chunk-6BKUD5EJ.js.map → chunk-GLFBHQSQ.js.map} +1 -1
  41. package/dist/{chunk-ZNLEUL7T.js → chunk-GVCPFBAV.js} +4 -4
  42. package/dist/chunk-GVCPFBAV.js.map +1 -0
  43. package/dist/{chunk-KUXOHLGC.cjs → chunk-HOI6QKC6.cjs} +52 -52
  44. package/dist/{chunk-KUXOHLGC.cjs.map → chunk-HOI6QKC6.cjs.map} +1 -1
  45. package/dist/{chunk-L2KUGWFR.cjs → chunk-IAEABLIV.cjs} +46 -46
  46. package/dist/{chunk-L2KUGWFR.cjs.map → chunk-IAEABLIV.cjs.map} +1 -1
  47. package/dist/{chunk-M5ZC3LFJ.js → chunk-IQRRZPVZ.js} +3 -3
  48. package/dist/{chunk-M5ZC3LFJ.js.map → chunk-IQRRZPVZ.js.map} +1 -1
  49. package/dist/{chunk-H4CJTKEH.js → chunk-MNOO7STY.js} +5 -5
  50. package/dist/{chunk-H4CJTKEH.js.map → chunk-MNOO7STY.js.map} +1 -1
  51. package/dist/{chunk-XI6JOG76.cjs → chunk-N56YC75X.cjs} +45 -45
  52. package/dist/{chunk-XI6JOG76.cjs.map → chunk-N56YC75X.cjs.map} +1 -1
  53. package/dist/{chunk-X4F6VVEJ.js → chunk-PAG3BNIV.js} +3 -3
  54. package/dist/{chunk-X4F6VVEJ.js.map → chunk-PAG3BNIV.js.map} +1 -1
  55. package/dist/{chunk-W7GIQTJV.cjs → chunk-PG6TDGKI.cjs} +21 -21
  56. package/dist/{chunk-W7GIQTJV.cjs.map → chunk-PG6TDGKI.cjs.map} +1 -1
  57. package/dist/{chunk-7MVDN5UC.cjs → chunk-Q5OFA4I2.cjs} +35 -35
  58. package/dist/{chunk-7MVDN5UC.cjs.map → chunk-Q5OFA4I2.cjs.map} +1 -1
  59. package/dist/{chunk-BUN3CRMP.cjs → chunk-QOLBWCF5.cjs} +65 -65
  60. package/dist/{chunk-BUN3CRMP.cjs.map → chunk-QOLBWCF5.cjs.map} +1 -1
  61. package/dist/{chunk-2UJAVPA4.cjs → chunk-QXL7AY2H.cjs} +26 -26
  62. package/dist/{chunk-2UJAVPA4.cjs.map → chunk-QXL7AY2H.cjs.map} +1 -1
  63. package/dist/{chunk-WHJXRLFD.js → chunk-SYYBKDL7.js} +48 -8
  64. package/dist/chunk-SYYBKDL7.js.map +1 -0
  65. package/dist/{chunk-SE23X5OE.js → chunk-TQU44E46.js} +4 -4
  66. package/dist/{chunk-SE23X5OE.js.map → chunk-TQU44E46.js.map} +1 -1
  67. package/dist/{chunk-SFSZUOFT.js → chunk-U3KRKXF7.js} +3 -3
  68. package/dist/{chunk-SFSZUOFT.js.map → chunk-U3KRKXF7.js.map} +1 -1
  69. package/dist/{chunk-EYHD7LV3.cjs → chunk-UDGU73RL.cjs} +129 -129
  70. package/dist/{chunk-EYHD7LV3.cjs.map → chunk-UDGU73RL.cjs.map} +1 -1
  71. package/dist/{chunk-M3R6RCXY.js → chunk-UDJ2KN2A.js} +3 -3
  72. package/dist/{chunk-M3R6RCXY.js.map → chunk-UDJ2KN2A.js.map} +1 -1
  73. package/dist/{chunk-BJWMPPEA.js → chunk-UT4TIDAA.js} +3 -3
  74. package/dist/{chunk-BJWMPPEA.js.map → chunk-UT4TIDAA.js.map} +1 -1
  75. package/dist/{chunk-RODV6PC4.cjs → chunk-UWRTV6IV.cjs} +7 -7
  76. package/dist/{chunk-RODV6PC4.cjs.map → chunk-UWRTV6IV.cjs.map} +1 -1
  77. package/dist/{chunk-IT2TVXC7.js → chunk-WTF6JXHN.js} +4 -4
  78. package/dist/{chunk-IT2TVXC7.js.map → chunk-WTF6JXHN.js.map} +1 -1
  79. package/dist/{chunk-7BEJHG43.js → chunk-X5QJO4ZD.js} +3 -3
  80. package/dist/{chunk-7BEJHG43.js.map → chunk-X5QJO4ZD.js.map} +1 -1
  81. package/dist/{chunk-NFT6VW73.js → chunk-XV2DTN6G.js} +3 -3
  82. package/dist/{chunk-NFT6VW73.js.map → chunk-XV2DTN6G.js.map} +1 -1
  83. package/dist/{chunk-XUEROLSB.cjs → chunk-YUPG2M3I.cjs} +16 -16
  84. package/dist/chunk-YUPG2M3I.cjs.map +1 -0
  85. package/dist/{chunk-K5QG53GT.cjs → chunk-ZCW7YH3C.cjs} +26 -26
  86. package/dist/{chunk-K5QG53GT.cjs.map → chunk-ZCW7YH3C.cjs.map} +1 -1
  87. package/dist/{chunk-GYTWJ6VB.cjs → chunk-ZFNZ2FYI.cjs} +67 -48
  88. package/dist/chunk-ZFNZ2FYI.cjs.map +1 -0
  89. package/dist/{chunk-3YXXZ4LT.cjs → chunk-ZZJDGGC3.cjs} +33 -33
  90. package/dist/{chunk-3YXXZ4LT.cjs.map → chunk-ZZJDGGC3.cjs.map} +1 -1
  91. package/dist/diagrams/blockdiagram/index.cjs +6 -6
  92. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  93. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  94. package/dist/diagrams/blockdiagram/index.js +2 -2
  95. package/dist/diagrams/circuit/index.cjs +8 -8
  96. package/dist/diagrams/circuit/index.d.cts +1 -1
  97. package/dist/diagrams/circuit/index.d.ts +1 -1
  98. package/dist/diagrams/circuit/index.js +2 -2
  99. package/dist/diagrams/ecomap/index.cjs +8 -8
  100. package/dist/diagrams/ecomap/index.d.cts +1 -1
  101. package/dist/diagrams/ecomap/index.d.ts +1 -1
  102. package/dist/diagrams/ecomap/index.js +3 -3
  103. package/dist/diagrams/entity/index.cjs +6 -6
  104. package/dist/diagrams/entity/index.d.cts +1 -1
  105. package/dist/diagrams/entity/index.d.ts +1 -1
  106. package/dist/diagrams/entity/index.js +2 -2
  107. package/dist/diagrams/fishbone/index.cjs +8 -8
  108. package/dist/diagrams/fishbone/index.d.cts +1 -1
  109. package/dist/diagrams/fishbone/index.d.ts +1 -1
  110. package/dist/diagrams/fishbone/index.js +2 -2
  111. package/dist/diagrams/flowchart/index.cjs +8 -8
  112. package/dist/diagrams/flowchart/index.d.cts +2 -2
  113. package/dist/diagrams/flowchart/index.d.ts +2 -2
  114. package/dist/diagrams/flowchart/index.js +2 -2
  115. package/dist/diagrams/genogram/index.cjs +10 -10
  116. package/dist/diagrams/genogram/index.d.cts +1 -1
  117. package/dist/diagrams/genogram/index.d.ts +1 -1
  118. package/dist/diagrams/genogram/index.js +3 -3
  119. package/dist/diagrams/ladder/index.cjs +6 -6
  120. package/dist/diagrams/ladder/index.d.cts +1 -1
  121. package/dist/diagrams/ladder/index.d.ts +1 -1
  122. package/dist/diagrams/ladder/index.js +2 -2
  123. package/dist/diagrams/logic/index.cjs +6 -6
  124. package/dist/diagrams/logic/index.d.cts +1 -1
  125. package/dist/diagrams/logic/index.d.ts +1 -1
  126. package/dist/diagrams/logic/index.js +2 -2
  127. package/dist/diagrams/orgchart/index.cjs +7 -7
  128. package/dist/diagrams/orgchart/index.d.cts +1 -1
  129. package/dist/diagrams/orgchart/index.d.ts +1 -1
  130. package/dist/diagrams/orgchart/index.js +2 -2
  131. package/dist/diagrams/pedigree/index.cjs +8 -8
  132. package/dist/diagrams/pedigree/index.d.cts +1 -1
  133. package/dist/diagrams/pedigree/index.d.ts +1 -1
  134. package/dist/diagrams/pedigree/index.js +3 -3
  135. package/dist/diagrams/phylo/index.cjs +7 -7
  136. package/dist/diagrams/phylo/index.d.cts +1 -1
  137. package/dist/diagrams/phylo/index.d.ts +1 -1
  138. package/dist/diagrams/phylo/index.js +2 -2
  139. package/dist/diagrams/sld/index.cjs +6 -6
  140. package/dist/diagrams/sld/index.d.cts +1 -1
  141. package/dist/diagrams/sld/index.d.ts +1 -1
  142. package/dist/diagrams/sld/index.js +2 -2
  143. package/dist/diagrams/sociogram/index.cjs +7 -7
  144. package/dist/diagrams/sociogram/index.d.cts +1 -1
  145. package/dist/diagrams/sociogram/index.d.ts +1 -1
  146. package/dist/diagrams/sociogram/index.js +3 -3
  147. package/dist/diagrams/timing/index.cjs +5 -5
  148. package/dist/diagrams/timing/index.d.cts +1 -1
  149. package/dist/diagrams/timing/index.d.ts +1 -1
  150. package/dist/diagrams/timing/index.js +2 -2
  151. package/dist/diagrams/venn/index.cjs +9 -9
  152. package/dist/diagrams/venn/index.d.cts +1 -1
  153. package/dist/diagrams/venn/index.d.ts +1 -1
  154. package/dist/diagrams/venn/index.js +2 -2
  155. package/dist/{index-dWDwG6BW.d.ts → index-D3u6vcA4.d.ts} +1 -1
  156. package/dist/{index-BrLxEzSQ.d.cts → index-bdfj6FpQ.d.cts} +1 -1
  157. package/dist/index.cjs +41 -41
  158. package/dist/index.d.cts +2 -2
  159. package/dist/index.d.ts +2 -2
  160. package/dist/index.js +19 -19
  161. package/dist/react.cjs +20 -20
  162. package/dist/react.js +19 -19
  163. package/dist/{types-BtiUg7Gx.d.cts → types-DnU2UlWz.d.cts} +2 -0
  164. package/dist/{types-BtiUg7Gx.d.ts → types-DnU2UlWz.d.ts} +2 -0
  165. package/package.json +1 -1
  166. package/dist/chunk-2J2QWNGI.js.map +0 -1
  167. package/dist/chunk-GYTWJ6VB.cjs.map +0 -1
  168. package/dist/chunk-LFZZ4NCP.cjs.map +0 -1
  169. package/dist/chunk-WHJXRLFD.js.map +0 -1
  170. package/dist/chunk-XUEROLSB.cjs.map +0 -1
  171. package/dist/chunk-ZNLEUL7T.js.map +0 -1
@@ -1 +1 @@
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/core/api.ts"],"names":["line","text","title","stub","startX","startY","endX","endY","PADDING","preprocess","nextId","parsed","x","ERA_BAND_HEIGHT","wrapText","unquote","node","path","sign","activityText","STYLE","renderLayout","idCounter","ln","height","renderLine","renderNode","underlineY","readQuoted","parseNumberList","parseProperties","renderLegend"],"mappings":"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","file":"chunk-RNGYXGHS.js","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 { background: ${t.bg}; 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}; background: var(--schematex-bg); }\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 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 (/^cell\\s*\\(/i.test(line)) {\n parseCellLine(line, st);\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 { background: #fff; 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-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 || ast.grid !== \"2x2\") return \"\";\n const { plot } = lay;\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\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 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 render3x3CellLabels(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.grid !== \"3x3\" || ast.cellLabels.length === 0) return \"\";\n const { plot } = lay;\n const cellW = plot.w / ast.cols;\n const cellH = plot.h / ast.rows;\n const nodes = ast.cellLabels.map((cl) => {\n const cx = plot.x0 + cellW * (cl.col + 0.5);\n const cy = plot.y0 + cellH * (ast.rows - 1 - cl.row + 0.5);\n return textEl({ x: cx, y: cy, class: \"sx-matrix-cell-label\" }, cl.label);\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 renderQuadAnnotations(ast, lay),\n render3x3CellLabels(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 { DiagramPlugin, RenderConfig } from \"./types\";\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\";\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 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];\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', or 'orgchart'.\"\n );\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 plugin = detectPlugin(text, config);\n if (plugin.parse) return plugin.parse(text);\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 plugin = detectPlugin(text, 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(text, renderConfig);\n}\n"]}
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/core/api.ts"],"names":["line","text","title","stub","startX","startY","endX","endY","PADDING","preprocess","nextId","parsed","x","ERA_BAND_HEIGHT","wrapText","unquote","node","path","sign","activityText","STYLE","renderLayout","idCounter","ln","height","renderLine","renderNode","underlineY","readQuoted","parseNumberList","parseProperties","renderLegend"],"mappings":"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","file":"chunk-6YUP3QMA.js","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 { background: ${t.bg}; 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}; background: var(--schematex-bg); }\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 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 (/^cell\\s*\\(/i.test(line)) {\n parseCellLine(line, st);\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 { background: #fff; 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-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 || ast.grid !== \"2x2\") return \"\";\n const { plot } = lay;\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\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 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 render3x3CellLabels(ast: MatrixAST, lay: MatrixLayoutResult): string {\n if (ast.grid !== \"3x3\" || ast.cellLabels.length === 0) return \"\";\n const { plot } = lay;\n const cellW = plot.w / ast.cols;\n const cellH = plot.h / ast.rows;\n const nodes = ast.cellLabels.map((cl) => {\n const cx = plot.x0 + cellW * (cl.col + 0.5);\n const cy = plot.y0 + cellH * (ast.rows - 1 - cl.row + 0.5);\n return textEl({ x: cx, y: cy, class: \"sx-matrix-cell-label\" }, cl.label);\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 renderQuadAnnotations(ast, lay),\n render3x3CellLabels(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 { DiagramPlugin, RenderConfig } from \"./types\";\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\";\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 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];\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', or 'orgchart'.\"\n );\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 plugin = detectPlugin(text, config);\n if (plugin.parse) return plugin.parse(text);\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 plugin = detectPlugin(text, 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(text, renderConfig);\n}\n"]}