schematex 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +379 -0
- package/dist/chunk-2MQWZ2XY.cjs +453 -0
- package/dist/chunk-2MQWZ2XY.cjs.map +1 -0
- package/dist/chunk-2UKC6ZCY.cjs +1803 -0
- package/dist/chunk-2UKC6ZCY.cjs.map +1 -0
- package/dist/chunk-34X3ZJ6E.cjs +783 -0
- package/dist/chunk-34X3ZJ6E.cjs.map +1 -0
- package/dist/chunk-3FTUWAXK.cjs +1220 -0
- package/dist/chunk-3FTUWAXK.cjs.map +1 -0
- package/dist/chunk-3J7TFUOC.js +745 -0
- package/dist/chunk-3J7TFUOC.js.map +1 -0
- package/dist/chunk-47ZC6EMJ.js +1009 -0
- package/dist/chunk-47ZC6EMJ.js.map +1 -0
- package/dist/chunk-4DBRNOPA.cjs +750 -0
- package/dist/chunk-4DBRNOPA.cjs.map +1 -0
- package/dist/chunk-4G7ZIBHN.js +778 -0
- package/dist/chunk-4G7ZIBHN.js.map +1 -0
- package/dist/chunk-5C7DPDHQ.js +1321 -0
- package/dist/chunk-5C7DPDHQ.js.map +1 -0
- package/dist/chunk-ADOXGKAK.js +1251 -0
- package/dist/chunk-ADOXGKAK.js.map +1 -0
- package/dist/chunk-BE5HNDA5.cjs +874 -0
- package/dist/chunk-BE5HNDA5.cjs.map +1 -0
- package/dist/chunk-CZRM7LT7.js +889 -0
- package/dist/chunk-CZRM7LT7.js.map +1 -0
- package/dist/chunk-D4JTSPOL.js +1795 -0
- package/dist/chunk-D4JTSPOL.js.map +1 -0
- package/dist/chunk-DS47NTWZ.cjs +1034 -0
- package/dist/chunk-DS47NTWZ.cjs.map +1 -0
- package/dist/chunk-FDLZEKEB.js +449 -0
- package/dist/chunk-FDLZEKEB.js.map +1 -0
- package/dist/chunk-FGPTCDUT.cjs +1851 -0
- package/dist/chunk-FGPTCDUT.cjs.map +1 -0
- package/dist/chunk-HDKDQAEQ.cjs +86 -0
- package/dist/chunk-HDKDQAEQ.cjs.map +1 -0
- package/dist/chunk-IX554O5K.js +346 -0
- package/dist/chunk-IX554O5K.js.map +1 -0
- package/dist/chunk-KLJEK547.js +71 -0
- package/dist/chunk-KLJEK547.js.map +1 -0
- package/dist/chunk-LMFSHK45.js +1028 -0
- package/dist/chunk-LMFSHK45.js.map +1 -0
- package/dist/chunk-MDICUK6F.cjs +1258 -0
- package/dist/chunk-MDICUK6F.cjs.map +1 -0
- package/dist/chunk-N7KOXOMX.cjs +363 -0
- package/dist/chunk-N7KOXOMX.cjs.map +1 -0
- package/dist/chunk-NYCIK4SU.cjs +775 -0
- package/dist/chunk-NYCIK4SU.cjs.map +1 -0
- package/dist/chunk-PDPHRZZT.js +770 -0
- package/dist/chunk-PDPHRZZT.js.map +1 -0
- package/dist/chunk-ROFLJ74T.js +1212 -0
- package/dist/chunk-ROFLJ74T.js.map +1 -0
- package/dist/chunk-S6BK5DB6.cjs +845 -0
- package/dist/chunk-S6BK5DB6.cjs.map +1 -0
- package/dist/chunk-U4I37IBN.js +874 -0
- package/dist/chunk-U4I37IBN.js.map +1 -0
- package/dist/chunk-U5GGE6PJ.js +839 -0
- package/dist/chunk-U5GGE6PJ.js.map +1 -0
- package/dist/chunk-UHLYS3W5.cjs +1015 -0
- package/dist/chunk-UHLYS3W5.cjs.map +1 -0
- package/dist/chunk-URSKIHSY.cjs +881 -0
- package/dist/chunk-URSKIHSY.cjs.map +1 -0
- package/dist/chunk-V6WO7RK7.cjs +1056 -0
- package/dist/chunk-V6WO7RK7.cjs.map +1 -0
- package/dist/chunk-VFQCTXOX.js +869 -0
- package/dist/chunk-VFQCTXOX.js.map +1 -0
- package/dist/chunk-XQ52ICHU.cjs +895 -0
- package/dist/chunk-XQ52ICHU.cjs.map +1 -0
- package/dist/chunk-XX4BKS7Y.js +1051 -0
- package/dist/chunk-XX4BKS7Y.js.map +1 -0
- package/dist/chunk-XXU36667.js +1844 -0
- package/dist/chunk-XXU36667.js.map +1 -0
- package/dist/chunk-ZX7QKZK2.cjs +1326 -0
- package/dist/chunk-ZX7QKZK2.cjs.map +1 -0
- package/dist/diagrams/blockdiagram/index.cjs +25 -0
- package/dist/diagrams/blockdiagram/index.cjs.map +1 -0
- package/dist/diagrams/blockdiagram/index.d.cts +67 -0
- package/dist/diagrams/blockdiagram/index.d.ts +67 -0
- package/dist/diagrams/blockdiagram/index.js +4 -0
- package/dist/diagrams/blockdiagram/index.js.map +1 -0
- package/dist/diagrams/circuit/index.cjs +34 -0
- package/dist/diagrams/circuit/index.cjs.map +1 -0
- package/dist/diagrams/circuit/index.d.cts +138 -0
- package/dist/diagrams/circuit/index.d.ts +138 -0
- package/dist/diagrams/circuit/index.js +5 -0
- package/dist/diagrams/circuit/index.js.map +1 -0
- package/dist/diagrams/ecomap/index.cjs +30 -0
- package/dist/diagrams/ecomap/index.cjs.map +1 -0
- package/dist/diagrams/ecomap/index.d.cts +15 -0
- package/dist/diagrams/ecomap/index.d.ts +15 -0
- package/dist/diagrams/ecomap/index.js +5 -0
- package/dist/diagrams/ecomap/index.js.map +1 -0
- package/dist/diagrams/entity/index.cjs +26 -0
- package/dist/diagrams/entity/index.cjs.map +1 -0
- package/dist/diagrams/entity/index.d.cts +54 -0
- package/dist/diagrams/entity/index.d.ts +54 -0
- package/dist/diagrams/entity/index.js +5 -0
- package/dist/diagrams/entity/index.js.map +1 -0
- package/dist/diagrams/fishbone/index.cjs +34 -0
- package/dist/diagrams/fishbone/index.cjs.map +1 -0
- package/dist/diagrams/fishbone/index.d.cts +185 -0
- package/dist/diagrams/fishbone/index.d.ts +185 -0
- package/dist/diagrams/fishbone/index.js +5 -0
- package/dist/diagrams/fishbone/index.js.map +1 -0
- package/dist/diagrams/flowchart/index.cjs +34 -0
- package/dist/diagrams/flowchart/index.cjs.map +1 -0
- package/dist/diagrams/flowchart/index.d.cts +2 -0
- package/dist/diagrams/flowchart/index.d.ts +2 -0
- package/dist/diagrams/flowchart/index.js +5 -0
- package/dist/diagrams/flowchart/index.js.map +1 -0
- package/dist/diagrams/genogram/index.cjs +38 -0
- package/dist/diagrams/genogram/index.cjs.map +1 -0
- package/dist/diagrams/genogram/index.d.cts +20 -0
- package/dist/diagrams/genogram/index.d.ts +20 -0
- package/dist/diagrams/genogram/index.js +5 -0
- package/dist/diagrams/genogram/index.js.map +1 -0
- package/dist/diagrams/ladder/index.cjs +26 -0
- package/dist/diagrams/ladder/index.cjs.map +1 -0
- package/dist/diagrams/ladder/index.d.cts +49 -0
- package/dist/diagrams/ladder/index.d.ts +49 -0
- package/dist/diagrams/ladder/index.js +5 -0
- package/dist/diagrams/ladder/index.js.map +1 -0
- package/dist/diagrams/logic/index.cjs +26 -0
- package/dist/diagrams/logic/index.cjs.map +1 -0
- package/dist/diagrams/logic/index.d.cts +73 -0
- package/dist/diagrams/logic/index.d.ts +73 -0
- package/dist/diagrams/logic/index.js +5 -0
- package/dist/diagrams/logic/index.js.map +1 -0
- package/dist/diagrams/orgchart/index.cjs +30 -0
- package/dist/diagrams/orgchart/index.cjs.map +1 -0
- package/dist/diagrams/orgchart/index.d.cts +100 -0
- package/dist/diagrams/orgchart/index.d.ts +100 -0
- package/dist/diagrams/orgchart/index.js +5 -0
- package/dist/diagrams/orgchart/index.js.map +1 -0
- package/dist/diagrams/pedigree/index.cjs +30 -0
- package/dist/diagrams/pedigree/index.cjs.map +1 -0
- package/dist/diagrams/pedigree/index.d.cts +15 -0
- package/dist/diagrams/pedigree/index.d.ts +15 -0
- package/dist/diagrams/pedigree/index.js +5 -0
- package/dist/diagrams/pedigree/index.js.map +1 -0
- package/dist/diagrams/phylo/index.cjs +30 -0
- package/dist/diagrams/phylo/index.cjs.map +1 -0
- package/dist/diagrams/phylo/index.d.cts +32 -0
- package/dist/diagrams/phylo/index.d.ts +32 -0
- package/dist/diagrams/phylo/index.js +5 -0
- package/dist/diagrams/phylo/index.js.map +1 -0
- package/dist/diagrams/sld/index.cjs +26 -0
- package/dist/diagrams/sld/index.cjs.map +1 -0
- package/dist/diagrams/sld/index.d.cts +58 -0
- package/dist/diagrams/sld/index.d.ts +58 -0
- package/dist/diagrams/sld/index.js +5 -0
- package/dist/diagrams/sld/index.js.map +1 -0
- package/dist/diagrams/sociogram/index.cjs +26 -0
- package/dist/diagrams/sociogram/index.cjs.map +1 -0
- package/dist/diagrams/sociogram/index.d.cts +76 -0
- package/dist/diagrams/sociogram/index.d.ts +76 -0
- package/dist/diagrams/sociogram/index.js +5 -0
- package/dist/diagrams/sociogram/index.js.map +1 -0
- package/dist/diagrams/timing/index.cjs +21 -0
- package/dist/diagrams/timing/index.cjs.map +1 -0
- package/dist/diagrams/timing/index.d.cts +9 -0
- package/dist/diagrams/timing/index.d.ts +9 -0
- package/dist/diagrams/timing/index.js +4 -0
- package/dist/diagrams/timing/index.js.map +1 -0
- package/dist/diagrams/venn/index.cjs +38 -0
- package/dist/diagrams/venn/index.cjs.map +1 -0
- package/dist/diagrams/venn/index.d.cts +69 -0
- package/dist/diagrams/venn/index.d.ts +69 -0
- package/dist/diagrams/venn/index.js +5 -0
- package/dist/diagrams/venn/index.js.map +1 -0
- package/dist/index-BSlza1YY.d.ts +150 -0
- package/dist/index-BXefHVce.d.cts +150 -0
- package/dist/index.cjs +2033 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +29 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +1944 -0
- package/dist/index.js.map +1 -0
- package/dist/types-DqfcYkcY.d.cts +741 -0
- package/dist/types-DqfcYkcY.d.ts +741 -0
- package/package.json +163 -0
|
@@ -0,0 +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","group","rect","el","resolveMindmapTheme","path","title","svgRoot","escapeXml","desc","circle","polygon","defs","genogram","ecomap","pedigree","phylo","sociogram","timing","logic","circuit","blockdiagram","ladder","sld","entity","fishbone","venn","flowchart","orgchart"],"mappings":"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","file":"index.cjs","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"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export { genogram } from './diagrams/genogram/index.cjs';
|
|
2
|
+
export { ecomap } from './diagrams/ecomap/index.cjs';
|
|
3
|
+
export { pedigree } from './diagrams/pedigree/index.cjs';
|
|
4
|
+
export { phylo } from './diagrams/phylo/index.cjs';
|
|
5
|
+
export { sociogram } from './diagrams/sociogram/index.cjs';
|
|
6
|
+
export { timing } from './diagrams/timing/index.cjs';
|
|
7
|
+
export { logic } from './diagrams/logic/index.cjs';
|
|
8
|
+
export { circuit } from './diagrams/circuit/index.cjs';
|
|
9
|
+
export { blockdiagram } from './diagrams/blockdiagram/index.cjs';
|
|
10
|
+
export { ladder } from './diagrams/ladder/index.cjs';
|
|
11
|
+
export { sld } from './diagrams/sld/index.cjs';
|
|
12
|
+
export { entity } from './diagrams/entity/index.cjs';
|
|
13
|
+
export { fishbone } from './diagrams/fishbone/index.cjs';
|
|
14
|
+
export { venn } from './diagrams/venn/index.cjs';
|
|
15
|
+
export { B as BASE_THEMES, a as BIOLOGY_TOKENS, b as BaseTheme, c as BiologyTokens, P as PERSON_TOKENS, d as PersonTokens, R as ResolvedTheme, T as ThemeName, V as VENN_TOKENS, e as VennTokens, f as flowchart, r as resolveBaseTheme, g as resolveBiologyTheme, h as resolveFishboneTheme, i as resolveGenogramTheme, j as resolvePersonTheme, k as resolveVennTheme } from './index-BXefHVce.cjs';
|
|
16
|
+
export { orgchart } from './diagrams/orgchart/index.cjs';
|
|
17
|
+
import './types-DqfcYkcY.cjs';
|
|
18
|
+
|
|
19
|
+
interface SchematexConfig {
|
|
20
|
+
type?: "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart";
|
|
21
|
+
width?: number;
|
|
22
|
+
height?: number;
|
|
23
|
+
padding?: number;
|
|
24
|
+
theme?: string;
|
|
25
|
+
fontFamily?: string;
|
|
26
|
+
}
|
|
27
|
+
declare function render(text: string, config?: SchematexConfig): string;
|
|
28
|
+
|
|
29
|
+
export { type SchematexConfig, render };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export { genogram } from './diagrams/genogram/index.js';
|
|
2
|
+
export { ecomap } from './diagrams/ecomap/index.js';
|
|
3
|
+
export { pedigree } from './diagrams/pedigree/index.js';
|
|
4
|
+
export { phylo } from './diagrams/phylo/index.js';
|
|
5
|
+
export { sociogram } from './diagrams/sociogram/index.js';
|
|
6
|
+
export { timing } from './diagrams/timing/index.js';
|
|
7
|
+
export { logic } from './diagrams/logic/index.js';
|
|
8
|
+
export { circuit } from './diagrams/circuit/index.js';
|
|
9
|
+
export { blockdiagram } from './diagrams/blockdiagram/index.js';
|
|
10
|
+
export { ladder } from './diagrams/ladder/index.js';
|
|
11
|
+
export { sld } from './diagrams/sld/index.js';
|
|
12
|
+
export { entity } from './diagrams/entity/index.js';
|
|
13
|
+
export { fishbone } from './diagrams/fishbone/index.js';
|
|
14
|
+
export { venn } from './diagrams/venn/index.js';
|
|
15
|
+
export { B as BASE_THEMES, a as BIOLOGY_TOKENS, b as BaseTheme, c as BiologyTokens, P as PERSON_TOKENS, d as PersonTokens, R as ResolvedTheme, T as ThemeName, V as VENN_TOKENS, e as VennTokens, f as flowchart, r as resolveBaseTheme, g as resolveBiologyTheme, h as resolveFishboneTheme, i as resolveGenogramTheme, j as resolvePersonTheme, k as resolveVennTheme } from './index-BSlza1YY.js';
|
|
16
|
+
export { orgchart } from './diagrams/orgchart/index.js';
|
|
17
|
+
import './types-DqfcYkcY.js';
|
|
18
|
+
|
|
19
|
+
interface SchematexConfig {
|
|
20
|
+
type?: "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart";
|
|
21
|
+
width?: number;
|
|
22
|
+
height?: number;
|
|
23
|
+
padding?: number;
|
|
24
|
+
theme?: string;
|
|
25
|
+
fontFamily?: string;
|
|
26
|
+
}
|
|
27
|
+
declare function render(text: string, config?: SchematexConfig): string;
|
|
28
|
+
|
|
29
|
+
export { type SchematexConfig, render };
|