schematex 0.1.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/README.md +130 -15
  2. package/dist/api-bQZ98gkJ.d.cts +22 -0
  3. package/dist/api-bQZ98gkJ.d.ts +22 -0
  4. package/dist/browser.cjs +46 -0
  5. package/dist/browser.cjs.map +1 -0
  6. package/dist/browser.d.cts +27 -0
  7. package/dist/browser.d.ts +27 -0
  8. package/dist/browser.js +40 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/{chunk-IX554O5K.js → chunk-2VNMKOUO.js} +90 -6
  11. package/dist/chunk-2VNMKOUO.js.map +1 -0
  12. package/dist/{chunk-LMFSHK45.js → chunk-4KYW63IK.js} +4 -3
  13. package/dist/{chunk-LMFSHK45.js.map → chunk-4KYW63IK.js.map} +1 -1
  14. package/dist/{chunk-FGPTCDUT.cjs → chunk-4S2WILLW.cjs} +5 -4
  15. package/dist/chunk-4S2WILLW.cjs.map +1 -0
  16. package/dist/{chunk-4G7ZIBHN.js → chunk-5SH5NUDW.js} +3 -2
  17. package/dist/{chunk-4G7ZIBHN.js.map → chunk-5SH5NUDW.js.map} +1 -1
  18. package/dist/{chunk-PDPHRZZT.js → chunk-5UV5VQ7J.js} +4 -3
  19. package/dist/chunk-5UV5VQ7J.js.map +1 -0
  20. package/dist/{chunk-VFQCTXOX.js → chunk-5YYAYW67.js} +4 -3
  21. package/dist/chunk-5YYAYW67.js.map +1 -0
  22. package/dist/{chunk-HGHWCB6K.js → chunk-6YMQSTFF.js} +4 -3
  23. package/dist/chunk-6YMQSTFF.js.map +1 -0
  24. package/dist/chunk-7HKXU7J2.cjs +4838 -0
  25. package/dist/chunk-7HKXU7J2.cjs.map +1 -0
  26. package/dist/{chunk-UHLYS3W5.cjs → chunk-7IRT3LOY.cjs} +5 -4
  27. package/dist/{chunk-UHLYS3W5.cjs.map → chunk-7IRT3LOY.cjs.map} +1 -1
  28. package/dist/{chunk-U5GGE6PJ.js → chunk-CJ2A3UEQ.js} +4 -3
  29. package/dist/chunk-CJ2A3UEQ.js.map +1 -0
  30. package/dist/chunk-CXHPP5BL.cjs +1880 -0
  31. package/dist/chunk-CXHPP5BL.cjs.map +1 -0
  32. package/dist/{chunk-N7KOXOMX.cjs → chunk-D7EHZFK4.cjs} +90 -5
  33. package/dist/chunk-D7EHZFK4.cjs.map +1 -0
  34. package/dist/{chunk-FDLZEKEB.js → chunk-GEPBET4L.js} +3 -2
  35. package/dist/chunk-GEPBET4L.js.map +1 -0
  36. package/dist/{chunk-4DBRNOPA.cjs → chunk-ISACNVFE.cjs} +5 -4
  37. package/dist/{chunk-4DBRNOPA.cjs.map → chunk-ISACNVFE.cjs.map} +1 -1
  38. package/dist/{chunk-ROFLJ74T.js → chunk-JDTB7IKL.js} +4 -3
  39. package/dist/chunk-JDTB7IKL.js.map +1 -0
  40. package/dist/{chunk-47ZC6EMJ.js → chunk-LCR3KOJV.js} +4 -3
  41. package/dist/{chunk-47ZC6EMJ.js.map → chunk-LCR3KOJV.js.map} +1 -1
  42. package/dist/{chunk-7FZSPKX3.cjs → chunk-LKOBOVNL.cjs} +6 -5
  43. package/dist/chunk-LKOBOVNL.cjs.map +1 -0
  44. package/dist/{chunk-34X3ZJ6E.cjs → chunk-LXNFVHDT.cjs} +3 -2
  45. package/dist/{chunk-34X3ZJ6E.cjs.map → chunk-LXNFVHDT.cjs.map} +1 -1
  46. package/dist/{chunk-XX4BKS7Y.js → chunk-M5B2UUNW.js} +4 -3
  47. package/dist/chunk-M5B2UUNW.js.map +1 -0
  48. package/dist/{chunk-XXU36667.js → chunk-PGALHQFF.js} +4 -3
  49. package/dist/chunk-PGALHQFF.js.map +1 -0
  50. package/dist/{chunk-ZX7QKZK2.cjs → chunk-QR7VTCI4.cjs} +28 -27
  51. package/dist/chunk-QR7VTCI4.cjs.map +1 -0
  52. package/dist/{chunk-3FTUWAXK.cjs → chunk-QSQX77S2.cjs} +5 -4
  53. package/dist/chunk-QSQX77S2.cjs.map +1 -0
  54. package/dist/chunk-UUPYTUGR.js +4833 -0
  55. package/dist/chunk-UUPYTUGR.js.map +1 -0
  56. package/dist/{chunk-BE5HNDA5.cjs → chunk-WYFXOXVK.cjs} +5 -4
  57. package/dist/{chunk-BE5HNDA5.cjs.map → chunk-WYFXOXVK.cjs.map} +1 -1
  58. package/dist/{chunk-5C7DPDHQ.js → chunk-X2BQKXMA.js} +28 -27
  59. package/dist/chunk-X2BQKXMA.js.map +1 -0
  60. package/dist/{chunk-XQ52ICHU.cjs → chunk-X7RPFTTR.cjs} +14 -13
  61. package/dist/chunk-X7RPFTTR.cjs.map +1 -0
  62. package/dist/{chunk-S6BK5DB6.cjs → chunk-XHZ7GXP2.cjs} +13 -12
  63. package/dist/chunk-XHZ7GXP2.cjs.map +1 -0
  64. package/dist/{chunk-DS47NTWZ.cjs → chunk-XVCAOGFL.cjs} +11 -10
  65. package/dist/chunk-XVCAOGFL.cjs.map +1 -0
  66. package/dist/{chunk-D4JTSPOL.js → chunk-YN467EEQ.js} +4 -3
  67. package/dist/chunk-YN467EEQ.js.map +1 -0
  68. package/dist/{chunk-CZRM7LT7.js → chunk-YQANC7HQ.js} +4 -3
  69. package/dist/chunk-YQANC7HQ.js.map +1 -0
  70. package/dist/{chunk-NYCIK4SU.cjs → chunk-YXIIWLLB.cjs} +13 -12
  71. package/dist/chunk-YXIIWLLB.cjs.map +1 -0
  72. package/dist/chunk-Z3WOHHG3.js +1873 -0
  73. package/dist/chunk-Z3WOHHG3.js.map +1 -0
  74. package/dist/{chunk-2UKC6ZCY.cjs → chunk-Z63XPA2V.cjs} +12 -11
  75. package/dist/chunk-Z63XPA2V.cjs.map +1 -0
  76. package/dist/{chunk-V6WO7RK7.cjs → chunk-ZNOD4VZT.cjs} +5 -4
  77. package/dist/chunk-ZNOD4VZT.cjs.map +1 -0
  78. package/dist/{chunk-3J7TFUOC.js → chunk-ZNZIL244.js} +4 -3
  79. package/dist/{chunk-3J7TFUOC.js.map → chunk-ZNZIL244.js.map} +1 -1
  80. package/dist/{chunk-2MQWZ2XY.cjs → chunk-ZO77FHBF.cjs} +3 -2
  81. package/dist/chunk-ZO77FHBF.cjs.map +1 -0
  82. package/dist/diagrams/blockdiagram/index.cjs +5 -5
  83. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  84. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  85. package/dist/diagrams/blockdiagram/index.js +1 -1
  86. package/dist/diagrams/circuit/index.cjs +8 -8
  87. package/dist/diagrams/circuit/index.d.cts +1 -1
  88. package/dist/diagrams/circuit/index.d.ts +1 -1
  89. package/dist/diagrams/circuit/index.js +2 -2
  90. package/dist/diagrams/ecomap/index.cjs +7 -7
  91. package/dist/diagrams/ecomap/index.d.cts +1 -1
  92. package/dist/diagrams/ecomap/index.d.ts +1 -1
  93. package/dist/diagrams/ecomap/index.js +2 -2
  94. package/dist/diagrams/entity/index.cjs +6 -6
  95. package/dist/diagrams/entity/index.d.cts +1 -1
  96. package/dist/diagrams/entity/index.d.ts +1 -1
  97. package/dist/diagrams/entity/index.js +2 -2
  98. package/dist/diagrams/fishbone/index.cjs +8 -8
  99. package/dist/diagrams/fishbone/index.d.cts +1 -1
  100. package/dist/diagrams/fishbone/index.d.ts +1 -1
  101. package/dist/diagrams/fishbone/index.js +2 -2
  102. package/dist/diagrams/flowchart/index.cjs +8 -8
  103. package/dist/diagrams/flowchart/index.d.cts +2 -2
  104. package/dist/diagrams/flowchart/index.d.ts +2 -2
  105. package/dist/diagrams/flowchart/index.js +2 -2
  106. package/dist/diagrams/genogram/index.cjs +9 -9
  107. package/dist/diagrams/genogram/index.d.cts +1 -1
  108. package/dist/diagrams/genogram/index.d.ts +1 -1
  109. package/dist/diagrams/genogram/index.js +2 -2
  110. package/dist/diagrams/ladder/index.cjs +6 -6
  111. package/dist/diagrams/ladder/index.d.cts +1 -1
  112. package/dist/diagrams/ladder/index.d.ts +1 -1
  113. package/dist/diagrams/ladder/index.js +2 -2
  114. package/dist/diagrams/logic/index.cjs +6 -6
  115. package/dist/diagrams/logic/index.d.cts +1 -1
  116. package/dist/diagrams/logic/index.d.ts +1 -1
  117. package/dist/diagrams/logic/index.js +2 -2
  118. package/dist/diagrams/orgchart/index.cjs +7 -7
  119. package/dist/diagrams/orgchart/index.d.cts +1 -1
  120. package/dist/diagrams/orgchart/index.d.ts +1 -1
  121. package/dist/diagrams/orgchart/index.js +2 -2
  122. package/dist/diagrams/pedigree/index.cjs +7 -7
  123. package/dist/diagrams/pedigree/index.d.cts +1 -1
  124. package/dist/diagrams/pedigree/index.d.ts +1 -1
  125. package/dist/diagrams/pedigree/index.js +2 -2
  126. package/dist/diagrams/phylo/index.cjs +7 -7
  127. package/dist/diagrams/phylo/index.d.cts +1 -1
  128. package/dist/diagrams/phylo/index.d.ts +1 -1
  129. package/dist/diagrams/phylo/index.js +2 -2
  130. package/dist/diagrams/sld/index.cjs +6 -6
  131. package/dist/diagrams/sld/index.d.cts +1 -1
  132. package/dist/diagrams/sld/index.d.ts +1 -1
  133. package/dist/diagrams/sld/index.js +2 -2
  134. package/dist/diagrams/sociogram/index.cjs +6 -6
  135. package/dist/diagrams/sociogram/index.d.cts +1 -1
  136. package/dist/diagrams/sociogram/index.d.ts +1 -1
  137. package/dist/diagrams/sociogram/index.js +2 -2
  138. package/dist/diagrams/timing/index.cjs +4 -4
  139. package/dist/diagrams/timing/index.d.cts +1 -1
  140. package/dist/diagrams/timing/index.d.ts +1 -1
  141. package/dist/diagrams/timing/index.js +1 -1
  142. package/dist/diagrams/venn/index.cjs +9 -9
  143. package/dist/diagrams/venn/index.d.cts +1 -1
  144. package/dist/diagrams/venn/index.d.ts +1 -1
  145. package/dist/diagrams/venn/index.js +2 -2
  146. package/dist/export.cjs +87 -0
  147. package/dist/export.cjs.map +1 -0
  148. package/dist/export.d.cts +38 -0
  149. package/dist/export.d.ts +38 -0
  150. package/dist/export.js +83 -0
  151. package/dist/export.js.map +1 -0
  152. package/dist/{index-BXefHVce.d.cts → index-SSGpCggE.d.cts} +52 -3
  153. package/dist/{index-BSlza1YY.d.ts → index-ga04CTBI.d.ts} +52 -3
  154. package/dist/index.cjs +65 -1948
  155. package/dist/index.cjs.map +1 -1
  156. package/dist/index.d.cts +7 -12
  157. package/dist/index.d.ts +7 -12
  158. package/dist/index.js +19 -1942
  159. package/dist/index.js.map +1 -1
  160. package/dist/react.cjs +56 -0
  161. package/dist/react.cjs.map +1 -0
  162. package/dist/react.d.cts +24 -0
  163. package/dist/react.d.ts +24 -0
  164. package/dist/react.js +54 -0
  165. package/dist/react.js.map +1 -0
  166. package/dist/{types-DqfcYkcY.d.ts → types-BcPhMdHd.d.cts} +6 -2
  167. package/dist/{types-DqfcYkcY.d.cts → types-BcPhMdHd.d.ts} +6 -2
  168. package/package.json +34 -4
  169. package/dist/chunk-2MQWZ2XY.cjs.map +0 -1
  170. package/dist/chunk-2UKC6ZCY.cjs.map +0 -1
  171. package/dist/chunk-3FTUWAXK.cjs.map +0 -1
  172. package/dist/chunk-5C7DPDHQ.js.map +0 -1
  173. package/dist/chunk-7FZSPKX3.cjs.map +0 -1
  174. package/dist/chunk-ADOXGKAK.js +0 -1251
  175. package/dist/chunk-ADOXGKAK.js.map +0 -1
  176. package/dist/chunk-CZRM7LT7.js.map +0 -1
  177. package/dist/chunk-D4JTSPOL.js.map +0 -1
  178. package/dist/chunk-DS47NTWZ.cjs.map +0 -1
  179. package/dist/chunk-FDLZEKEB.js.map +0 -1
  180. package/dist/chunk-FGPTCDUT.cjs.map +0 -1
  181. package/dist/chunk-HGHWCB6K.js.map +0 -1
  182. package/dist/chunk-IX554O5K.js.map +0 -1
  183. package/dist/chunk-MDICUK6F.cjs +0 -1258
  184. package/dist/chunk-MDICUK6F.cjs.map +0 -1
  185. package/dist/chunk-N7KOXOMX.cjs.map +0 -1
  186. package/dist/chunk-NYCIK4SU.cjs.map +0 -1
  187. package/dist/chunk-PDPHRZZT.js.map +0 -1
  188. package/dist/chunk-ROFLJ74T.js.map +0 -1
  189. package/dist/chunk-S6BK5DB6.cjs.map +0 -1
  190. package/dist/chunk-U5GGE6PJ.js.map +0 -1
  191. package/dist/chunk-V6WO7RK7.cjs.map +0 -1
  192. package/dist/chunk-VFQCTXOX.js.map +0 -1
  193. package/dist/chunk-XQ52ICHU.cjs.map +0 -1
  194. package/dist/chunk-XX4BKS7Y.js.map +0 -1
  195. package/dist/chunk-XXU36667.js.map +0 -1
  196. package/dist/chunk-ZX7QKZK2.cjs.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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","ln","height","title"],"mappings":"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","file":"index.js","sourcesContent":["import type { MindmapAST, MindmapNode, MindmapStyle } from \"../../core/types\";\n\n/**\n * Mindmap DSL parser — markdown-heading + bullet list.\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 * Directives: `style` (map | logic-right), `theme`.\n */\n\nconst VALID_STYLES: readonly MindmapStyle[] = [\"map\", \"logic-right\"];\n\ninterface Directives {\n style: MindmapStyle;\n themeOverride?: string;\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 }\n}\n\nexport function parseMindmap(text: string): MindmapAST {\n const lines = text.split(/\\r?\\n/);\n\n // Skip optional leading \"mindmap\" marker.\n if (lines[0]?.trim().toLowerCase() === \"mindmap\") lines.shift();\n\n const directives: Directives = { style: \"map\" };\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) => {\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 Error(\"Mindmap: orphan node — expected root # heading first\");\n node.depth = parent.depth + 1;\n parent.children.push(node);\n stack.push({ node, depth });\n };\n\n for (const raw of lines) {\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: MindmapNode = { id: nextId(), label, depth, children: [] };\n if (depth === 0) {\n if (root) throw new Error(\"Mindmap: multiple `#` center nodes not allowed\");\n root = node;\n stack.length = 0;\n stack.push({ node, depth: 0 });\n } else {\n attach(node, depth);\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: MindmapNode = { id: nextId(), label, depth, children: [] };\n attach(node, depth);\n continue;\n }\n }\n\n if (!root) throw new Error(\"Mindmap: missing central topic — start with `# Title`\");\n\n const ast: MindmapAST = {\n type: \"mindmap\",\n style: directives.style,\n root,\n };\n if (directives.themeOverride) ast.themeOverride = directives.themeOverride;\n return ast;\n}\n","import type {\n MindmapAST,\n MindmapLayoutEdge,\n MindmapLayoutNode,\n MindmapLayoutResult,\n MindmapNode,\n MindmapStyle,\n} from \"../../core/types\";\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, so labels are centered in their depth's column.\n * • Per-depth columns are globally aligned: before laying out, we scan\n * the tree for the max label width at each depth, then every depth-d\n * node shares the same slot-center x. Prevents ragged columns where a\n * long-label parent pushes its child further out than a sibling's.\n * • Bezier edges travel from the parent label's OUTER edge (right edge\n * for right-side, left edge for left-side) to the child label's\n * INNER edge. For main branches, the colored underline sits beneath\n * the label and visually merges with the incoming bezier — reading\n * as one continuous colored stroke.\n */\n\nconst PADDING = 40;\nconst SIBLING_GAP = 20; // vertical gap between sibling subtree rects\nconst MAIN_GAP = 44; // vertical gap between main branches on same side\nconst ROOT_CAPSULE_PAD_X = 10;\nconst ROOT_CAPSULE_PAD_Y = 10;\n\n// Horizontal span of the Bezier curve between consecutive slot columns.\n// Deeper levels use a tighter gap — at depth ≥2 there's usually only one\n// child, and a wide constant span reads as awkward empty space.\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 estimateLabelWidth(label: string, depth: number): number {\n return Math.max(32, label.length * fontSizeOf(depth) * 0.58);\n}\n\nfunction rowHeightOf(depth: number): number {\n return fontSizeOf(depth) + 14;\n}\n\n// ─── Column bookkeeping ──────────────────────────────────────────────────\n\ninterface Columns {\n /** Center x of the slot at depth d. All depth-d nodes share this x. */\n center: number[];\n}\n\nfunction computeColumns(subtreeRoots: MindmapNode[], firstColStartX: number): Columns {\n const maxLW: number[] = [];\n const walk = (n: MindmapNode) => {\n const lw = estimateLabelWidth(n.label, n.depth);\n if (maxLW[n.depth] === undefined || lw > maxLW[n.depth]) maxLW[n.depth] = lw;\n for (const c of n.children) walk(c);\n };\n for (const r of subtreeRoots) walk(r);\n\n const center: number[] = [];\n if (subtreeRoots.length === 0) return { center };\n const rootDepth = subtreeRoots[0].depth;\n // Slot-left of first column is firstColStartX; center = left + lw/2.\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] / 2;\n }\n return { center };\n}\n\n// ─── Core primitive: tidy tree extending rightward ───────────────────────\n\nfunction tidyRight(\n node: MindmapNode,\n yTop: number,\n branchIdx: number,\n columns: Columns,\n out: MindmapLayoutNode[]\n): { layoutNode: MindmapLayoutNode; height: number } {\n const rowH = rowHeightOf(node.depth);\n const lw = estimateLabelWidth(node.label, node.depth);\n const x = columns.center[node.depth];\n\n if (node.children.length === 0) {\n const ln: MindmapLayoutNode = {\n node,\n x,\n y: yTop + rowH / 2,\n side: \"right\",\n branchIndex: branchIdx,\n labelWidth: lw,\n labelHeight: rowH,\n };\n out.push(ln);\n return { layoutNode: ln, height: rowH };\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 out\n );\n childLayouts.push(cln);\n cursor += height;\n }\n const totalH = Math.max(rowH, 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: lw,\n labelHeight: rowH,\n };\n out.push(ln);\n return { layoutNode: ln, height: totalH };\n}\n\n// ─── Edge geometry helpers ───────────────────────────────────────────────\n\n/** Horizontal edge of a node's label on the side the edge travels toward. */\nfunction labelEdgeX(n: MindmapLayoutNode, outward: boolean): number {\n // outward = from this node moving away from the root.\n // center: outward direction depends on child side — caller handles.\n if (n.side === \"center\") return n.x; // caller offsets by capsuleW/2\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 return depth <= 1 ? 2.2 : 1.4;\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 // All labels are now center-anchored on n.x.\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);\n maxY = Math.max(maxY, n.y + lh);\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// ─── Shared edge construction ────────────────────────────────────────────\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 for (const c of parent.children) {\n const cln = byId.get(c.id)!;\n let fromX: number;\n if (pln.side === \"center\") {\n // Root capsule — emit from left or right capsule edge based on child side.\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, pln.y, toX, cln.y),\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\n const rootLabelW = estimateLabelWidth(root.label, 0);\n const rootCapsuleW = rootLabelW + ROOT_CAPSULE_PAD_X * 2;\n const rootCapsuleH = rowHeightOf(0) + ROOT_CAPSULE_PAD_Y;\n const firstColLeft = rootCapsuleW / 2 + bezierGapFor(1);\n\n // Right side — stack mains vertically; all depth-d nodes share one column.\n const rightCols = computeColumns(rightMains, firstColLeft);\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, rightCols, nodes);\n rightCursor += height;\n }\n const rightHeight = rightCursor;\n\n // Left side — lay out as \"right\" then mirror x and re-tag side.\n const leftCols = computeColumns(leftMains, firstColLeft);\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, leftCols, 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: rootCapsuleW,\n labelHeight: rootCapsuleH,\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\n const rootLabelW = estimateLabelWidth(root.label, 0);\n const rootCapsuleW = rootLabelW + ROOT_CAPSULE_PAD_X * 2;\n const rootCapsuleH = rowHeightOf(0) + ROOT_CAPSULE_PAD_Y;\n const firstColLeft = rootCapsuleW / 2 + bezierGapFor(1);\n\n const cols = computeColumns(root.children, firstColLeft);\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, 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: rootCapsuleW,\n labelHeight: rootCapsuleH,\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 { estimateLabelWidth, rowHeightOf, fontSizeOf };\n","import type { MindmapAST, MindmapLayoutNode } from \"../../core/types\";\nimport { resolveMindmapTheme, type MindmapTokens } from \"../../core/theme\";\nimport type { ResolvedTheme } from \"../../core/theme\";\nimport {\n svgRoot,\n group,\n rect,\n text as svgText,\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, fontSizeOf } from \"./layout\";\n\ntype Theme = ResolvedTheme<MindmapTokens>;\n\n// Main-branch underline weight. Thinner in monochrome so pure-black lines\n// don't overpower the text.\nconst UNDERLINE_MAIN = 2.2;\nconst UNDERLINE_MAIN_MONO = 1.5;\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\nfunction underlineMain(theme: Theme): number {\n return theme.branchPalette.length <= 1 ? UNDERLINE_MAIN_MONO : UNDERLINE_MAIN;\n}\n\n// ─── Central topic (rounded capsule) ─────────────────────────────────────\n\nfunction renderCentral(n: MindmapLayoutNode, theme: Theme, fontFamily: string): string {\n const fs = fontSizeOf(0);\n const pillW = n.labelWidth;\n const pillH = n.labelHeight;\n return group(\n { class: \"schematex-mindmap-central\", \"data-node-id\": n.node.id },\n [\n rect({\n x: n.x - pillW / 2,\n y: n.y - pillH / 2,\n width: pillW,\n height: pillH,\n rx: pillH / 2,\n ry: pillH / 2,\n fill: \"none\",\n stroke: theme.textMuted,\n \"stroke-width\": underlineMain(theme),\n }),\n svgText(\n {\n x: n.x,\n y: n.y + fs * 0.35,\n \"text-anchor\": \"middle\",\n \"font-family\": fontFamily,\n \"font-size\": fs,\n \"font-weight\": 700,\n fill: theme.text,\n },\n n.node.label\n ),\n ]\n );\n}\n\n// ─── Branch / leaf node ──────────────────────────────────────────────────\n//\n// Visual convention (matches layout.ts):\n// • n.x is the label's horizontal CENTER; text renders anchor-middle.\n// • For main branches (depth=1), a colored underline sits at y = n.y\n// beneath the label, spanning ±labelWidth/2. Incoming bezier terminates\n// at the underline's inner edge, reading as one continuous colored stroke.\n// • Sub-level labels (depth ≥ 2) have no underline — the curve anchors\n// directly into the label-edge.\n\nfunction renderBranchNode(\n n: MindmapLayoutNode,\n color: string,\n theme: Theme,\n fontFamily: string\n): string {\n const isMain = n.node.depth === 1;\n const fs = fontSizeOf(n.node.depth);\n\n const tx = n.x;\n const ty = isMain ? n.y - 3 : n.y + fs * 0.35;\n const ux1 = n.x - n.labelWidth / 2;\n const ux2 = n.x + n.labelWidth / 2;\n const uy = n.y;\n\n const children: string[] = [\n svgText(\n {\n x: tx,\n y: ty,\n \"text-anchor\": \"middle\",\n \"font-family\": fontFamily,\n \"font-size\": fs,\n \"font-weight\": isMain ? 600 : 400,\n fill: theme.text,\n },\n n.node.label\n ),\n ];\n // Only MAIN branches (depth=1) get a colored underline — reduces visual\n // noise at deeper levels where the incoming curve already anchors the text.\n if (isMain) {\n children.push(\n el(\"line\", {\n x1: ux1,\n y1: uy,\n x2: ux2,\n y2: uy,\n stroke: color,\n \"stroke-width\": underlineMain(theme),\n \"stroke-linecap\": \"round\",\n })\n );\n }\n return group(\n {\n class: isMain ? \"schematex-mindmap-main\" : \"schematex-mindmap-leaf\",\n \"data-node-id\": n.node.id,\n \"data-depth\": n.node.depth,\n \"data-branch-idx\": n.branchIndex,\n },\n 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 if (n.node.depth === 0) {\n nodeSvgs.push(renderCentral(n, theme, fontFamily));\n } else {\n nodeSvgs.push(\n renderBranchNode(n, paletteColor(theme, n.branchIndex), theme, fontFamily)\n );\n }\n }\n\n const title = ast.title ?? ast.root.label;\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 { 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 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 (let 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 { 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 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\";\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 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];\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\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":[],"names":[],"mappings":"","file":"index.js"}
package/dist/react.cjs ADDED
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ var chunk7HKXU7J2_cjs = require('./chunk-7HKXU7J2.cjs');
4
+ require('./chunk-7IRT3LOY.cjs');
5
+ require('./chunk-4S2WILLW.cjs');
6
+ require('./chunk-LXNFVHDT.cjs');
7
+ require('./chunk-ISACNVFE.cjs');
8
+ require('./chunk-QR7VTCI4.cjs');
9
+ require('./chunk-ZNOD4VZT.cjs');
10
+ require('./chunk-LKOBOVNL.cjs');
11
+ require('./chunk-QSQX77S2.cjs');
12
+ require('./chunk-CXHPP5BL.cjs');
13
+ require('./chunk-Z63XPA2V.cjs');
14
+ require('./chunk-XHZ7GXP2.cjs');
15
+ require('./chunk-XVCAOGFL.cjs');
16
+ require('./chunk-X7RPFTTR.cjs');
17
+ require('./chunk-YXIIWLLB.cjs');
18
+ require('./chunk-ZO77FHBF.cjs');
19
+ require('./chunk-WYFXOXVK.cjs');
20
+ require('./chunk-D7EHZFK4.cjs');
21
+ require('./chunk-HDKDQAEQ.cjs');
22
+ var react = require('react');
23
+ var jsxRuntime = require('react/jsx-runtime');
24
+
25
+ function SchematexDiagram({
26
+ dsl,
27
+ type,
28
+ theme,
29
+ fontFamily,
30
+ padding,
31
+ className,
32
+ style,
33
+ onError
34
+ }) {
35
+ const svg = react.useMemo(() => {
36
+ try {
37
+ return chunk7HKXU7J2_cjs.render(dsl, { type, theme, fontFamily, padding });
38
+ } catch (err) {
39
+ const e = err instanceof Error ? err : new Error(String(err));
40
+ onError?.(e);
41
+ return null;
42
+ }
43
+ }, [dsl, type, theme, fontFamily, padding]);
44
+ return /* @__PURE__ */ jsxRuntime.jsx(
45
+ "div",
46
+ {
47
+ className,
48
+ style,
49
+ dangerouslySetInnerHTML: { __html: svg ?? "" }
50
+ }
51
+ );
52
+ }
53
+
54
+ exports.SchematexDiagram = SchematexDiagram;
55
+ //# sourceMappingURL=react.cjs.map
56
+ //# sourceMappingURL=react.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react.tsx"],"names":["useMemo","render","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAMA,cAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAOC,yBAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.cjs","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { S as SchematexConfig } from './api-bQZ98gkJ.cjs';
3
+
4
+ interface SchematexDiagramProps {
5
+ /** DSL text to render */
6
+ dsl: string;
7
+ /** Diagram type override (auto-detected from DSL if omitted) */
8
+ type?: SchematexConfig["type"];
9
+ /** Theme name: 'default' | 'monochrome' | 'dark' */
10
+ theme?: string;
11
+ /** Font family override */
12
+ fontFamily?: string;
13
+ /** Canvas padding in px */
14
+ padding?: number;
15
+ /** className for the wrapper div */
16
+ className?: string;
17
+ /** Inline style for the wrapper div */
18
+ style?: React.CSSProperties;
19
+ /** Called when render throws a parse/layout error */
20
+ onError?: (error: Error) => void;
21
+ }
22
+ declare function SchematexDiagram({ dsl, type, theme, fontFamily, padding, className, style, onError, }: SchematexDiagramProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { SchematexDiagram, type SchematexDiagramProps };
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { S as SchematexConfig } from './api-bQZ98gkJ.js';
3
+
4
+ interface SchematexDiagramProps {
5
+ /** DSL text to render */
6
+ dsl: string;
7
+ /** Diagram type override (auto-detected from DSL if omitted) */
8
+ type?: SchematexConfig["type"];
9
+ /** Theme name: 'default' | 'monochrome' | 'dark' */
10
+ theme?: string;
11
+ /** Font family override */
12
+ fontFamily?: string;
13
+ /** Canvas padding in px */
14
+ padding?: number;
15
+ /** className for the wrapper div */
16
+ className?: string;
17
+ /** Inline style for the wrapper div */
18
+ style?: React.CSSProperties;
19
+ /** Called when render throws a parse/layout error */
20
+ onError?: (error: Error) => void;
21
+ }
22
+ declare function SchematexDiagram({ dsl, type, theme, fontFamily, padding, className, style, onError, }: SchematexDiagramProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { SchematexDiagram, type SchematexDiagramProps };
package/dist/react.js ADDED
@@ -0,0 +1,54 @@
1
+ import { render } from './chunk-UUPYTUGR.js';
2
+ import './chunk-LCR3KOJV.js';
3
+ import './chunk-PGALHQFF.js';
4
+ import './chunk-5SH5NUDW.js';
5
+ import './chunk-ZNZIL244.js';
6
+ import './chunk-X2BQKXMA.js';
7
+ import './chunk-M5B2UUNW.js';
8
+ import './chunk-6YMQSTFF.js';
9
+ import './chunk-JDTB7IKL.js';
10
+ import './chunk-Z3WOHHG3.js';
11
+ import './chunk-YN467EEQ.js';
12
+ import './chunk-CJ2A3UEQ.js';
13
+ import './chunk-4KYW63IK.js';
14
+ import './chunk-YQANC7HQ.js';
15
+ import './chunk-5UV5VQ7J.js';
16
+ import './chunk-GEPBET4L.js';
17
+ import './chunk-5YYAYW67.js';
18
+ import './chunk-2VNMKOUO.js';
19
+ import './chunk-KLJEK547.js';
20
+ import { useMemo } from 'react';
21
+ import { jsx } from 'react/jsx-runtime';
22
+
23
+ function SchematexDiagram({
24
+ dsl,
25
+ type,
26
+ theme,
27
+ fontFamily,
28
+ padding,
29
+ className,
30
+ style,
31
+ onError
32
+ }) {
33
+ const svg = useMemo(() => {
34
+ try {
35
+ return render(dsl, { type, theme, fontFamily, padding });
36
+ } catch (err) {
37
+ const e = err instanceof Error ? err : new Error(String(err));
38
+ onError?.(e);
39
+ return null;
40
+ }
41
+ }, [dsl, type, theme, fontFamily, padding]);
42
+ return /* @__PURE__ */ jsx(
43
+ "div",
44
+ {
45
+ className,
46
+ style,
47
+ dangerouslySetInnerHTML: { __html: svg ?? "" }
48
+ }
49
+ );
50
+ }
51
+
52
+ export { SchematexDiagram };
53
+ //# sourceMappingURL=react.js.map
54
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.js","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
@@ -8,7 +8,7 @@
8
8
  * - Layout: DiagramAST → LayoutResult
9
9
  * - Renderer: LayoutResult → SVG string
10
10
  */
11
- type DiagramType = "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart";
11
+ type DiagramType = "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline";
12
12
  type GenogramMode = "medical" | "heritage";
13
13
  type LegendPosition = "bottom-right" | "right" | "bottom-center" | "none";
14
14
  interface DiagramAST {
@@ -232,6 +232,8 @@ interface DiagramPlugin {
232
232
  type: DiagramType;
233
233
  detect: (text: string) => boolean;
234
234
  render: (text: string, config?: RenderConfig) => string;
235
+ /** Parse DSL text to the diagram's AST (for JSON export / programmatic access). */
236
+ parse?: (text: string) => unknown;
235
237
  }
236
238
  interface LayoutConfig {
237
239
  /** Horizontal spacing between nodes */
@@ -658,6 +660,8 @@ interface FlowchartNode {
658
660
  shape: FlowchartShape;
659
661
  icon?: string;
660
662
  classes?: string[];
663
+ /** Inline CSS overrides from `style nodeId fill:#f9f,...` */
664
+ style?: Record<string, string>;
661
665
  /** Containing subgraph id (undefined = root) */
662
666
  parent?: string;
663
667
  }
@@ -738,4 +742,4 @@ interface FlowchartLayoutResult {
738
742
  clusters: FlowchartLayoutCluster[];
739
743
  }
740
744
 
741
- export type { BlockAST as B, CircuitAST as C, DiagramAST as D, EntityAST as E, FishboneAST as F, Individual as I, LayoutConfig as L, PhyloTreeAST as P, RenderConfig as R, SLDAST as S, TimingAST as T, VennAST as V, LayoutResult as a, DiagramPlugin as b, PhyloLayoutNode as c, LogicGateAST as d, CircuitComponent as e, LadderAST as f, LadderRung as g, LadderElement as h, SLDNode as i, SLDNodeType as j, EntityNode as k, EntityEdge as l, VennLayoutResult as m, FlowchartAST as n, FlowchartLayoutResult as o };
745
+ export type { BlockAST as B, CircuitAST as C, DiagramPlugin as D, EntityAST as E, FishboneAST as F, Individual as I, LayoutConfig as L, PhyloTreeAST as P, RenderConfig as R, SLDAST as S, TimingAST as T, VennAST as V, DiagramAST as a, LayoutResult as b, PhyloLayoutNode as c, LogicGateAST as d, CircuitComponent as e, LadderAST as f, LadderRung as g, LadderElement as h, SLDNode as i, SLDNodeType as j, EntityNode as k, EntityEdge as l, VennLayoutResult as m, FlowchartAST as n, FlowchartLayoutResult as o };