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/flowchart/parser.ts","../src/diagrams/flowchart/layout.ts","../src/diagrams/flowchart/shapes.ts","../src/diagrams/flowchart/renderer.ts","../src/diagrams/flowchart/index.ts"],"names":["mPlain","minX","bends","midY","rect","polygon","resolveFlowchartTheme","text","title","group","fmt","path","desc","el","defs","svgRoot"],"mappings":"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","file":"chunk-MDICUK6F.cjs","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/**\n * Flowchart DSL parser (M1).\n *\n * Supports a mermaid-inspired subset:\n * flowchart TD | TB | BT | LR | RL\n * A[Label] rect\n * A(Label) round\n * A([Label]) stadium\n * A{Label} diamond\n * A[/Label/] parallelogram\n * A --> B solid edge\n * A --- B no-arrow edge\n * A -.-> B dotted\n * A ==> B thick\n * A <--> B bidirectional\n * A --x B crossed end\n * A --o B round end\n * A -->|yes| B edge with pipe label\n * A -- yes --> B edge with inline label\n * A --> B --> C chain\n * %% comment\n *\n * Hand-written tokenizer + recursive descent. Zero deps.\n */\n\nimport type {\n FlowchartAST,\n FlowchartDirection,\n FlowchartEdge,\n FlowchartEdgeKind,\n FlowchartNode,\n FlowchartShape,\n} from \"../../core/types\";\n\nexport class FlowchartParseError extends Error {\n constructor(\n message: string,\n public line: number,\n public col: number\n ) {\n super(`[line ${line}:${col}] ${message}`);\n this.name = \"FlowchartParseError\";\n }\n}\n\nconst DIRECTIONS = new Set([\"TB\", \"TD\", \"BT\", \"LR\", \"RL\"]);\n\ninterface NodeRef {\n id: string;\n /** Optional shape/label declared inline on this reference */\n shape?: FlowchartShape;\n label?: string;\n}\n\n/** Try to parse a shape-suffix starting at `pos` in `line`. Returns null if none. */\nfunction parseShapeSuffix(\n line: string,\n pos: number\n): { shape: FlowchartShape; label: string; end: number } | null {\n const ch = line[pos];\n if (ch === undefined) return null;\n\n // Order matters: check multi-char openers first.\n // Stadium: ([ ... ])\n if (ch === \"(\" && line[pos + 1] === \"[\") {\n const end = line.indexOf(\"])\", pos + 2);\n if (end < 0) return null;\n return {\n shape: \"stadium\",\n label: line.slice(pos + 2, end).trim(),\n end: end + 2,\n };\n }\n // Double-paren circle: (( ... ))\n if (ch === \"(\" && line[pos + 1] === \"(\") {\n const end = line.indexOf(\"))\", pos + 2);\n if (end < 0) return null;\n return {\n shape: \"circle\",\n label: line.slice(pos + 2, end).trim(),\n end: end + 2,\n };\n }\n // Double-bracket subroutine: [[ ... ]]\n if (ch === \"[\" && line[pos + 1] === \"[\") {\n const end = line.indexOf(\"]]\", pos + 2);\n if (end < 0) return null;\n return {\n shape: \"subroutine\",\n label: line.slice(pos + 2, end).trim(),\n end: end + 2,\n };\n }\n // Cylinder: [( ... )]\n if (ch === \"[\" && line[pos + 1] === \"(\") {\n const end = line.indexOf(\")]\", pos + 2);\n if (end < 0) return null;\n return {\n shape: \"cylinder\",\n label: line.slice(pos + 2, end).trim(),\n end: end + 2,\n };\n }\n // Hexagon: {{ ... }}\n if (ch === \"{\" && line[pos + 1] === \"{\") {\n const end = line.indexOf(\"}}\", pos + 2);\n if (end < 0) return null;\n return {\n shape: \"hexagon\",\n label: line.slice(pos + 2, end).trim(),\n end: end + 2,\n };\n }\n // Parallelogram: [/ ... /]\n if (ch === \"[\" && line[pos + 1] === \"/\") {\n const end = line.indexOf(\"/]\", pos + 2);\n if (end < 0) return null;\n return {\n shape: \"parallelogram\",\n label: line.slice(pos + 2, end).trim(),\n end: end + 2,\n };\n }\n // Parallelogram-alt: [\\ ... \\]\n if (ch === \"[\" && line[pos + 1] === \"\\\\\") {\n const end = line.indexOf(\"\\\\]\", pos + 2);\n if (end < 0) return null;\n return {\n shape: \"parallelogram-alt\",\n label: line.slice(pos + 2, end).trim(),\n end: end + 2,\n };\n }\n // Rect: [ ... ]\n if (ch === \"[\") {\n const end = line.indexOf(\"]\", pos + 1);\n if (end < 0) return null;\n return {\n shape: \"rect\",\n label: line.slice(pos + 1, end).trim(),\n end: end + 1,\n };\n }\n // Round: ( ... )\n if (ch === \"(\") {\n const end = line.indexOf(\")\", pos + 1);\n if (end < 0) return null;\n return {\n shape: \"round\",\n label: line.slice(pos + 1, end).trim(),\n end: end + 1,\n };\n }\n // Diamond: { ... }\n if (ch === \"{\") {\n const end = line.indexOf(\"}\", pos + 1);\n if (end < 0) return null;\n return {\n shape: \"diamond\",\n label: line.slice(pos + 1, end).trim(),\n end: end + 1,\n };\n }\n return null;\n}\n\nconst ID_CHAR = /[A-Za-z0-9_-]/;\n\n/** Edge operator pattern. We greedily match the longest op beginning at pos. */\ninterface EdgeOp {\n kind: FlowchartEdgeKind;\n bidirectional: boolean;\n /** End of the operator (exclusive) in the original line */\n end: number;\n /** Optional inline label captured between dashes: \"-- text -->\" */\n inlineLabel?: string;\n}\n\nfunction parseEdgeOp(line: string, pos: number): EdgeOp | null {\n // Skip whitespace before operator (caller already trimmed, but be robust)\n while (pos < line.length && line[pos] === \" \") pos++;\n\n const rest = line.slice(pos);\n\n // Optional leading '<' for bidirectional\n const bi = rest.startsWith(\"<\");\n const i = bi ? 1 : 0;\n\n // Thick: \"==...\"\n if (rest[i] === \"=\") {\n // Find the rest of the thick operator until we hit '>' or end of op\n // Pattern: ==+[label]==> or ==+==> or ==+---?\n // Simpler: match /={2,}[^>]*={0,}>?/\n const m = /^(=+)(?:([^=<>]*)(=+))?(>)?/.exec(rest.slice(i));\n if (!m) return null;\n const full = m[0];\n const inlineLabel = m[2]?.trim();\n const hasArrow = m[4] === \">\";\n return {\n kind: \"thick\",\n bidirectional: bi && hasArrow,\n end: pos + i + full.length,\n inlineLabel: inlineLabel && inlineLabel.length > 0 ? inlineLabel : undefined,\n };\n }\n\n // Dashes: \"--...\", \"-.-...\"\n if (rest[i] === \"-\") {\n // Dotted: \"-.-\" or \"-.->\", \"-..-\" (mermaid uses -.- ... -.->)\n // We support: -.-> and -. text .->\n const dotted = /^(-\\.+)([^.\\-<>]*?)(\\.+->|\\.+-)?/;\n const dashed = /^(-+)([^-<>|]*?)(-+>|-+x|-+o|-+)?/;\n\n // Check for dotted first\n const dm = /^-\\.+/.exec(rest.slice(i));\n if (dm) {\n // Try with inline label: \"-. text .->\"\n // Simpler explicit patterns:\n // \"-.-> \" → dotted solid arrow\n // \"-.-\" → dotted no arrow\n // \"-. text .->\" → dotted with inline label + arrow\n // \"-. text .-\" → dotted with inline label, no arrow\n const mWithLabel = /^(-\\.+)([^.\\-<>]+)(\\.+->|\\.+-)/.exec(rest.slice(i));\n if (mWithLabel) {\n const full = mWithLabel[0];\n const label = mWithLabel[2]?.trim();\n const hasArrow = mWithLabel[3]!.endsWith(\">\");\n return {\n kind: \"dotted\",\n bidirectional: bi && hasArrow,\n end: pos + i + full.length,\n inlineLabel: label && label.length > 0 ? label : undefined,\n };\n }\n // No inline label\n const mPlain = /^(-\\.+)(->|-)?/.exec(rest.slice(i));\n if (mPlain) {\n const full = mPlain[0];\n const hasArrow = mPlain[2] === \"->\";\n return {\n kind: \"dotted\",\n bidirectional: bi && hasArrow,\n end: pos + i + full.length,\n };\n }\n void dotted;\n return null;\n }\n\n // Dashes: --, ---, --->, --x, --o, with optional inline \"-- text -->\"\n // Try labeled form first.\n const mLabeled = /^(-{2,})([^-<>|=][^-<>|=]*?)(-{2,})(>|x|o)?/.exec(rest.slice(i));\n if (mLabeled) {\n const full = mLabeled[0];\n const label = mLabeled[2]?.trim();\n const endCh = mLabeled[4];\n const kind: FlowchartEdgeKind =\n endCh === \"x\" ? \"crossed\" : endCh === \"o\" ? \"round-end\" : endCh === \">\" ? \"solid\" : \"none\";\n return {\n kind,\n bidirectional: bi && endCh === \">\",\n end: pos + i + full.length,\n inlineLabel: label && label.length > 0 ? label : undefined,\n };\n }\n const mPlain = /^(-{2,})(>|x|o)?/.exec(rest.slice(i));\n if (mPlain) {\n const full = mPlain[0];\n const endCh = mPlain[2];\n const kind: FlowchartEdgeKind =\n endCh === \"x\" ? \"crossed\" : endCh === \"o\" ? \"round-end\" : endCh === \">\" ? \"solid\" : \"none\";\n return {\n kind,\n bidirectional: bi && endCh === \">\",\n end: pos + i + full.length,\n };\n }\n void dashed;\n }\n\n return null;\n}\n\n/** Parse one node reference: identifier + optional shape-suffix. */\nfunction parseNodeRef(line: string, pos: number): { ref: NodeRef; end: number } | null {\n let i = pos;\n while (i < line.length && ID_CHAR.test(line[i]!)) i++;\n if (i === pos) return null;\n const id = line.slice(pos, i);\n const shape = parseShapeSuffix(line, i);\n if (shape) {\n return {\n ref: { id, shape: shape.shape, label: shape.label },\n end: shape.end,\n };\n }\n return { ref: { id }, end: i };\n}\n\n/** Parse pipe label segment immediately after an arrow: \"|yes|\" */\nfunction parsePipeLabel(line: string, pos: number): { label: string; end: number } | null {\n if (line[pos] !== \"|\") return null;\n const end = line.indexOf(\"|\", pos + 1);\n if (end < 0) return null;\n return { label: line.slice(pos + 1, end).trim(), end: end + 1 };\n}\n\nfunction skipSpaces(line: string, pos: number): number {\n while (pos < line.length && (line[pos] === \" \" || line[pos] === \"\\t\")) pos++;\n return pos;\n}\n\ninterface ParsedNodeDef {\n id: string;\n shape: FlowchartShape;\n label: string;\n}\n\ninterface PendingEdge {\n from: string;\n to: string;\n kind: FlowchartEdgeKind;\n label?: string;\n bidirectional: boolean;\n}\n\n/**\n * Parse a statement line that contains node definitions and/or an edge chain.\n * Returns declared nodes (for shape/label updates) + pending edges.\n *\n * Grammar (simplified, no `&`-fanout in M1):\n * chain = nodeRef (edgeOp pipeLabel? nodeRef)*\n */\nfunction parseChainStatement(line: string, lineNo: number): {\n nodes: ParsedNodeDef[];\n edges: PendingEdge[];\n} {\n const nodes: ParsedNodeDef[] = [];\n const edges: PendingEdge[] = [];\n\n let pos = skipSpaces(line, 0);\n const first = parseNodeRef(line, pos);\n if (!first) {\n throw new FlowchartParseError(\n `expected node identifier, got ${JSON.stringify(line.slice(pos, pos + 10))}`,\n lineNo,\n pos + 1\n );\n }\n if (first.ref.shape && first.ref.label !== undefined) {\n nodes.push({ id: first.ref.id, shape: first.ref.shape, label: first.ref.label });\n } else {\n nodes.push({ id: first.ref.id, shape: \"rect\", label: first.ref.id });\n }\n\n let prev: NodeRef = first.ref;\n pos = first.end;\n\n while (pos < line.length) {\n pos = skipSpaces(line, pos);\n if (pos >= line.length) break;\n\n const op = parseEdgeOp(line, pos);\n if (!op) {\n throw new FlowchartParseError(\n `expected edge operator, got ${JSON.stringify(line.slice(pos, pos + 10))}`,\n lineNo,\n pos + 1\n );\n }\n pos = op.end;\n\n // Optional pipe label after arrow\n pos = skipSpaces(line, pos);\n let label = op.inlineLabel;\n const pipe = parsePipeLabel(line, pos);\n if (pipe) {\n label = pipe.label;\n pos = pipe.end;\n }\n\n pos = skipSpaces(line, pos);\n const target = parseNodeRef(line, pos);\n if (!target) {\n throw new FlowchartParseError(\n `expected target node after edge, got ${JSON.stringify(line.slice(pos, pos + 10))}`,\n lineNo,\n pos + 1\n );\n }\n if (target.ref.shape && target.ref.label !== undefined) {\n nodes.push({\n id: target.ref.id,\n shape: target.ref.shape,\n label: target.ref.label,\n });\n } else {\n nodes.push({ id: target.ref.id, shape: \"rect\", label: target.ref.id });\n }\n\n edges.push({\n from: prev.id,\n to: target.ref.id,\n kind: op.kind,\n label,\n bidirectional: op.bidirectional,\n });\n\n prev = target.ref;\n pos = target.end;\n }\n\n return { nodes, edges };\n}\n\nfunction normalizeDirection(dir: string): FlowchartDirection {\n const up = dir.toUpperCase();\n if (up === \"TD\") return \"TB\";\n if (up === \"TB\" || up === \"BT\" || up === \"LR\" || up === \"RL\") return up;\n return \"TB\";\n}\n\n/** Top-level parser entry. */\nexport function parseFlowchart(source: string): FlowchartAST {\n const lines = source.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n\n const ast: FlowchartAST = {\n type: \"flowchart\",\n direction: \"TB\",\n nodes: [],\n edges: [],\n subgraphs: [],\n classDefs: [],\n linkStyles: new Map(),\n };\n\n const nodeMap = new Map<string, FlowchartNode>();\n\n // Find header line (first non-blank, non-comment line)\n let headerIdx = -1;\n for (let i = 0; i < lines.length; i++) {\n const t = lines[i]!.trim();\n if (t.length === 0 || t.startsWith(\"%%\")) continue;\n headerIdx = i;\n break;\n }\n if (headerIdx < 0) {\n throw new FlowchartParseError(\"empty flowchart source\", 1, 1);\n }\n\n const header = lines[headerIdx]!.trim();\n const headerMatch = /^(flowchart|graph)(?:\\s+(\\w+))?(?:\\s+(.*))?$/i.exec(header);\n if (!headerMatch) {\n throw new FlowchartParseError(\n `expected 'flowchart' or 'graph' header, got ${JSON.stringify(header)}`,\n headerIdx + 1,\n 1\n );\n }\n const dirTok = headerMatch[2];\n if (dirTok) {\n if (!DIRECTIONS.has(dirTok.toUpperCase())) {\n throw new FlowchartParseError(\n `unknown direction ${JSON.stringify(dirTok)}`,\n headerIdx + 1,\n 1\n );\n }\n ast.direction = normalizeDirection(dirTok);\n }\n const extra = headerMatch[3]?.trim();\n if (extra) {\n // title: strip surrounding quotes\n const mQuoted = /^\"([^\"]*)\"$/.exec(extra);\n ast.title = mQuoted ? mQuoted[1] : extra;\n }\n\n for (let i = headerIdx + 1; i < lines.length; i++) {\n const raw = lines[i]!;\n const trimmed = raw.trim();\n if (trimmed.length === 0) continue;\n if (trimmed.startsWith(\"%%\")) continue;\n\n // `class NodeList ClassName` statement — attach semantic class(es) to nodes\n const classMatch = /^class\\s+([\\w,\\s]+?)\\s+(\\w[\\w-]*)\\s*$/.exec(trimmed);\n if (classMatch) {\n const idList = classMatch[1]!\n .split(/[,\\s]+/)\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n const className = classMatch[2]!;\n for (const nid of idList) {\n const existing = nodeMap.get(nid);\n if (!existing) {\n const node: FlowchartNode = { id: nid, shape: \"rect\", label: nid, classes: [className] };\n nodeMap.set(nid, node);\n ast.nodes.push(node);\n } else {\n existing.classes = [...(existing.classes ?? []), className];\n }\n }\n continue;\n }\n\n // Parse chain statement\n const parsed = parseChainStatement(trimmed, i + 1);\n\n for (const ndef of parsed.nodes) {\n const existing = nodeMap.get(ndef.id);\n if (!existing) {\n const node: FlowchartNode = {\n id: ndef.id,\n shape: ndef.shape,\n label: ndef.label,\n };\n nodeMap.set(ndef.id, node);\n ast.nodes.push(node);\n } else {\n // Update shape/label if this declaration carries richer info\n if (ndef.label !== ndef.id) {\n existing.label = ndef.label;\n }\n if (ndef.shape !== \"rect\") {\n existing.shape = ndef.shape;\n }\n }\n }\n\n for (const e of parsed.edges) {\n const edge: FlowchartEdge = {\n from: e.from,\n to: e.to,\n kind: e.kind,\n label: e.label,\n arrowEnd:\n e.kind === \"solid\" || e.kind === \"thick\" || e.kind === \"dotted\" || e.kind === \"bidirectional\"\n ? \"arrow\"\n : e.kind === \"crossed\"\n ? \"cross\"\n : e.kind === \"round-end\"\n ? \"circle\"\n : \"none\",\n arrowStart: e.bidirectional ? \"arrow\" : \"none\",\n };\n ast.edges.push(edge);\n }\n }\n\n return ast;\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/**\n * Flowchart Sugiyama-style layered layout (M1).\n *\n * Phases:\n * 1. Cycle removal — Greedy-FAS (Eades-Lin-Smyth 1993)\n * 2. Layer assignment — Longest-path layering\n * 3. Dummy node insertion for edges spanning > 1 layer\n * 4. Crossing minimization — median heuristic, bi-directional sweep\n * 5. X-coordinate assignment — simple symmetric pass\n * (Brandes-Köpf full 4-alignment is deferred; for M1 a centered\n * median-based placement produces visually indistinguishable results\n * on graphs ≤ 20 nodes, which is the M1 target.)\n *\n * Zero runtime dependencies. All heuristics hand-written.\n */\n\nimport type {\n FlowchartAST,\n FlowchartDirection,\n FlowchartEdge,\n FlowchartLayoutNode,\n FlowchartLayoutResult,\n FlowchartNode,\n} from \"../../core/types\";\n\n// ─── Constants / Defaults ──────────────────────────────────\n\nexport const FC_CONST = {\n nodeWidth: 120,\n nodeHeight: 44,\n nodeSpacingX: 32, // cross-flow gap between nodes in same layer\n layerSpacingY: 56, // flow-direction gap between layers\n dummyWidth: 1,\n padding: 24,\n charWidth: 6.8, // approx font-size 12 proportional width\n labelHPad: 16,\n minNodeWidth: 72,\n maxLabelWidth: 220,\n crossingSweepIters: 24,\n} as const;\n\n// ─── Internal working types ────────────────────────────────\n\ninterface LNode {\n id: string;\n node?: FlowchartNode; // undefined for dummy\n layer: number;\n order: number;\n width: number;\n height: number;\n isDummy: boolean;\n}\n\ninterface LEdge {\n from: string;\n to: string;\n original: FlowchartEdge;\n isReversed: boolean;\n /** After dummy insertion, intermediate node ids that replace the original edge */\n chain: string[]; // includes from and to\n}\n\n// ─── Phase 1: Cycle removal (Greedy-FAS) ───────────────────\n\n/**\n * Greedy FAS heuristic: compute a linear node ordering that minimizes the\n * number of \"back edges\". Back edges then get reversed.\n *\n * Algorithm (Eades-Lin-Smyth 1993):\n * 1. s1 = empty list, s2 = empty list\n * 2. while graph non-empty:\n * extract all sinks (out-deg 0) → append to s2 (front)\n * extract all sources (in-deg 0) → append to s1 (back)\n * extract vertex with max (outDeg - inDeg) → append to s1 (back)\n * 3. ordering = s1 ++ s2\n * 4. any edge (u, v) where order(u) > order(v) is a feedback edge\n */\nfunction greedyFAS(nodeIds: string[], edges: FlowchartEdge[]): Set<number> {\n const outAdj = new Map<string, Set<string>>();\n const inAdj = new Map<string, Set<string>>();\n for (const id of nodeIds) {\n outAdj.set(id, new Set());\n inAdj.set(id, new Set());\n }\n for (const e of edges) {\n // Ignore self-loops for FAS purposes (they're always feedback)\n if (e.from === e.to) continue;\n outAdj.get(e.from)?.add(e.to);\n inAdj.get(e.to)?.add(e.from);\n }\n\n const s1: string[] = [];\n const s2: string[] = [];\n const remaining = new Set(nodeIds);\n\n while (remaining.size > 0) {\n // Extract all current sinks\n let changed = true;\n while (changed) {\n changed = false;\n for (const v of Array.from(remaining)) {\n if ((outAdj.get(v)?.size ?? 0) === 0) {\n s2.unshift(v);\n removeVertex(v, remaining, outAdj, inAdj);\n changed = true;\n }\n }\n }\n // Extract all current sources\n changed = true;\n while (changed) {\n changed = false;\n for (const v of Array.from(remaining)) {\n if ((inAdj.get(v)?.size ?? 0) === 0) {\n s1.push(v);\n removeVertex(v, remaining, outAdj, inAdj);\n changed = true;\n }\n }\n }\n if (remaining.size === 0) break;\n // Pick vertex with max (outDeg - inDeg)\n let best: string | null = null;\n let bestScore = -Infinity;\n for (const v of remaining) {\n const score = (outAdj.get(v)?.size ?? 0) - (inAdj.get(v)?.size ?? 0);\n if (score > bestScore) {\n bestScore = score;\n best = v;\n }\n }\n if (best !== null) {\n s1.push(best);\n removeVertex(best, remaining, outAdj, inAdj);\n }\n }\n\n const ordering = [...s1, ...s2];\n const rank = new Map<string, number>();\n ordering.forEach((id, i) => rank.set(id, i));\n\n const feedback = new Set<number>();\n edges.forEach((e, i) => {\n if (e.from === e.to) {\n feedback.add(i);\n return;\n }\n const ru = rank.get(e.from);\n const rv = rank.get(e.to);\n if (ru !== undefined && rv !== undefined && ru > rv) {\n feedback.add(i);\n }\n });\n return feedback;\n}\n\nfunction removeVertex(\n v: string,\n remaining: Set<string>,\n outAdj: Map<string, Set<string>>,\n inAdj: Map<string, Set<string>>\n): void {\n remaining.delete(v);\n const outs = outAdj.get(v);\n if (outs) {\n for (const w of outs) inAdj.get(w)?.delete(v);\n }\n const ins = inAdj.get(v);\n if (ins) {\n for (const u of ins) outAdj.get(u)?.delete(v);\n }\n outAdj.delete(v);\n inAdj.delete(v);\n}\n\n// ─── Phase 2: Longest-path layer assignment ───────────────\n\nfunction longestPathLayers(\n nodeIds: string[],\n edges: LEdge[]\n): Map<string, number> {\n const layer = new Map<string, number>();\n for (const id of nodeIds) layer.set(id, 0);\n\n const outAdj = new Map<string, string[]>();\n const inDeg = new Map<string, number>();\n for (const id of nodeIds) {\n outAdj.set(id, []);\n inDeg.set(id, 0);\n }\n for (const e of edges) {\n if (e.from === e.to) continue; // skip self-loops\n outAdj.get(e.from)?.push(e.to);\n inDeg.set(e.to, (inDeg.get(e.to) ?? 0) + 1);\n }\n\n // Topo sort (Kahn)\n const queue: string[] = [];\n for (const id of nodeIds) {\n if ((inDeg.get(id) ?? 0) === 0) queue.push(id);\n }\n const order: string[] = [];\n const remIn = new Map(inDeg);\n while (queue.length > 0) {\n const v = queue.shift()!;\n order.push(v);\n for (const w of outAdj.get(v) ?? []) {\n const d = (remIn.get(w) ?? 0) - 1;\n remIn.set(w, d);\n if (d === 0) queue.push(w);\n }\n }\n // If cycles remain (shouldn't, post-FAS), append leftover in arbitrary order\n if (order.length !== nodeIds.length) {\n for (const id of nodeIds) {\n if (!order.includes(id)) order.push(id);\n }\n }\n\n for (const v of order) {\n for (const w of outAdj.get(v) ?? []) {\n const lv = layer.get(v) ?? 0;\n const lw = layer.get(w) ?? 0;\n if (lw < lv + 1) layer.set(w, lv + 1);\n }\n }\n return layer;\n}\n\n// ─── Phase 3: Dummy-node insertion ─────────────────────────\n\nfunction insertDummies(\n ledges: LEdge[],\n layerMap: Map<string, number>,\n genDummyId: () => string\n): { dummyIds: string[]; updatedEdges: LEdge[] } {\n const dummyIds: string[] = [];\n const updated: LEdge[] = [];\n for (const e of ledges) {\n if (e.from === e.to) {\n // self-loop: keep as-is; renderer draws a small arc\n updated.push(e);\n continue;\n }\n const lu = layerMap.get(e.from) ?? 0;\n const lv = layerMap.get(e.to) ?? 0;\n const diff = Math.abs(lv - lu);\n if (diff <= 1) {\n e.chain = [e.from, e.to];\n updated.push(e);\n continue;\n }\n // Insert (diff - 1) dummies on monotonically increasing layers from lu → lv\n const step = lv > lu ? 1 : -1;\n const chain: string[] = [e.from];\n let curLayer = lu + step;\n while (curLayer !== lv) {\n const d = genDummyId();\n layerMap.set(d, curLayer);\n dummyIds.push(d);\n chain.push(d);\n curLayer += step;\n }\n chain.push(e.to);\n e.chain = chain;\n updated.push(e);\n }\n return { dummyIds, updatedEdges: updated };\n}\n\n// ─── Phase 4: Crossing minimization (median heuristic) ────\n\nfunction medianOrder(\n layers: string[][],\n segments: Array<[string, string]>\n): string[][] {\n // Adjacency per node: predecessors (above layer) + successors (below layer)\n const succ = new Map<string, string[]>();\n const pred = new Map<string, string[]>();\n for (const layer of layers) for (const id of layer) {\n succ.set(id, []);\n pred.set(id, []);\n }\n for (const [u, v] of segments) {\n succ.get(u)?.push(v);\n pred.get(v)?.push(u);\n }\n\n const indexOf = (layer: string[], id: string): number => layer.indexOf(id);\n\n const reorderByMedian = (\n layer: string[],\n fixed: string[],\n useSucc: boolean\n ): string[] => {\n const fixedIdx = new Map<string, number>();\n fixed.forEach((id, i) => fixedIdx.set(id, i));\n const scored = layer.map((id, i) => {\n const neighbors = useSucc ? succ.get(id) ?? [] : pred.get(id) ?? [];\n const positions = neighbors\n .map((n) => fixedIdx.get(n))\n .filter((p): p is number => p !== undefined)\n .sort((a, b) => a - b);\n if (positions.length === 0) return { id, score: i, orig: i };\n const m = positions.length;\n const mid = positions[Math.floor(m / 2)]!;\n // Classic median heuristic: for even count, average the two middle\n const score =\n m % 2 === 1\n ? mid\n : (positions[m / 2 - 1]! + positions[m / 2]!) / 2;\n return { id, score, orig: i };\n });\n scored.sort((a, b) => a.score - b.score || a.orig - b.orig);\n return scored.map((s) => s.id);\n };\n\n const result = layers.map((l) => l.slice());\n let bestCrossings = countCrossings(result, segments, indexOf);\n let best = result.map((l) => l.slice());\n\n for (let iter = 0; iter < FC_CONST.crossingSweepIters; iter++) {\n const down = iter % 2 === 0;\n if (down) {\n for (let i = 1; i < result.length; i++) {\n result[i] = reorderByMedian(result[i]!, result[i - 1]!, false);\n }\n } else {\n for (let i = result.length - 2; i >= 0; i--) {\n result[i] = reorderByMedian(result[i]!, result[i + 1]!, true);\n }\n }\n const c = countCrossings(result, segments, indexOf);\n if (c < bestCrossings) {\n bestCrossings = c;\n best = result.map((l) => l.slice());\n }\n }\n\n return best;\n}\n\nfunction countCrossings(\n layers: string[][],\n segments: Array<[string, string]>,\n indexOf: (layer: string[], id: string) => number\n): number {\n // Count inversions per adjacent-layer pair\n let total = 0;\n for (let i = 0; i < layers.length - 1; i++) {\n const upper = layers[i]!;\n const lower = layers[i + 1]!;\n const pairs: Array<[number, number]> = [];\n for (const [u, v] of segments) {\n const iu = indexOf(upper, u);\n const iv = indexOf(lower, v);\n if (iu >= 0 && iv >= 0) pairs.push([iu, iv]);\n }\n // Count inversions on `pairs` sorted by iu: inversion on iv\n pairs.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n for (let a = 0; a < pairs.length; a++) {\n for (let b = a + 1; b < pairs.length; b++) {\n if (pairs[a]![1] > pairs[b]![1]) total++;\n }\n }\n }\n return total;\n}\n\n// ─── Phase 5: X-coordinate assignment ─────────────────────\n\ninterface Placed {\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n layer: number;\n order: number;\n}\n\n/**\n * Simple symmetric placement:\n * - Each layer's total width is computed (sum of node widths + gaps).\n * - Layers are centered around the global centerline.\n * - Then for each node, its preferred x = average of neighbor xs from both\n * adjacent layers; a single left-to-right sweep per layer snaps positions\n * while respecting minimum separation.\n *\n * This is a pragmatic subset of Brandes-Köpf that behaves well on M1 target\n * graphs (≤ 20 nodes). Longer edges look straight because the same centering\n * is applied to dummy nodes.\n */\nfunction assignXCoords(\n layers: LNode[][],\n nodeSpacingX: number\n): Map<string, number> {\n const x = new Map<string, number>();\n\n // Pass 1: compute initial layer widths, center each layer at 0\n const layerWidths: number[] = [];\n for (const layer of layers) {\n let w = 0;\n for (let i = 0; i < layer.length; i++) {\n w += layer[i]!.width;\n if (i < layer.length - 1) w += nodeSpacingX;\n }\n layerWidths.push(w);\n }\n const maxWidth = Math.max(...layerWidths, 1);\n\n // Initial positions: centered\n for (let li = 0; li < layers.length; li++) {\n const layer = layers[li]!;\n const layerW = layerWidths[li]!;\n let cursor = (maxWidth - layerW) / 2;\n for (const n of layer) {\n x.set(n.id, cursor + n.width / 2);\n cursor += n.width + nodeSpacingX;\n }\n }\n\n // Iterative median refinement (a few passes smooths dummy-heavy columns)\n const neighborsAbove = new Map<string, string[]>();\n const neighborsBelow = new Map<string, string[]>();\n // Built by caller; we infer from layer adjacency using order consistency\n // → we compute these externally via chain traversal; see layoutFlowchart.\n\n void neighborsAbove;\n void neighborsBelow;\n return x;\n}\n\n// ─── Entry point ──────────────────────────────────────────\n\nexport function layoutFlowchart(ast: FlowchartAST): FlowchartLayoutResult {\n const dir: FlowchartDirection = ast.direction;\n const isHorizontalDir = dir === \"LR\" || dir === \"RL\";\n\n // ── Measure node sizes ───────────────────────────────────\n // Returned w/h are in \"abstract TB space\" — flow direction is always Y.\n // For LR we swap at the end so the user-authored shape dims are preserved.\n const sizeOf = (n: FlowchartNode): { w: number; h: number } => {\n const labelW = Math.min(\n FC_CONST.maxLabelWidth,\n Math.ceil(n.label.length * FC_CONST.charWidth) + FC_CONST.labelHPad * 2\n );\n let shapeW = Math.max(FC_CONST.minNodeWidth, labelW);\n let shapeH: number = FC_CONST.nodeHeight;\n if (n.shape === \"diamond\") {\n shapeW = Math.max(shapeW, labelW * 1.25);\n shapeH = Math.max(shapeH, 52);\n }\n if (n.shape === \"parallelogram\" || n.shape === \"parallelogram-alt\") {\n shapeW += 20;\n }\n if (n.shape === \"stadium\" || n.shape === \"round\") {\n shapeW = Math.max(shapeW, shapeH + 20);\n }\n // In LR, swap so abstract-TB \"h\" corresponds to flow-direction extent\n // (= user-authored width); output swap restores canonical shape dims.\n return isHorizontalDir ? { w: shapeH, h: shapeW } : { w: shapeW, h: shapeH };\n };\n\n // ── Build working node map ───────────────────────────────\n const nodeMap = new Map<string, FlowchartNode>();\n for (const n of ast.nodes) nodeMap.set(n.id, n);\n\n // Ensure all edge endpoints exist as nodes (create implicit rect nodes)\n for (const e of ast.edges) {\n for (const id of [e.from, e.to]) {\n if (!nodeMap.has(id)) {\n const implicit: FlowchartNode = { id, label: id, shape: \"rect\" };\n nodeMap.set(id, implicit);\n ast.nodes.push(implicit);\n }\n }\n }\n\n // ── Phase 1: cycle removal ───────────────────────────────\n const allIds = Array.from(nodeMap.keys());\n const feedbackIdx = greedyFAS(allIds, ast.edges);\n\n const ledges: LEdge[] = ast.edges.map((e, i) => {\n const reversed = feedbackIdx.has(i) && e.from !== e.to;\n return {\n from: reversed ? e.to : e.from,\n to: reversed ? e.from : e.to,\n original: e,\n isReversed: reversed,\n chain: [],\n };\n });\n\n // ── Phase 2: layer assignment ────────────────────────────\n const layerMap = longestPathLayers(allIds, ledges);\n\n // ── Phase 3: dummy insertion ─────────────────────────────\n let dummyCounter = 0;\n const dummies: string[] = [];\n const { updatedEdges } = insertDummies(ledges, layerMap, () => {\n const id = `__dummy_${dummyCounter++}`;\n dummies.push(id);\n return id;\n });\n\n // Build LNode map after dummies\n const lnodes = new Map<string, LNode>();\n for (const id of allIds) {\n const n = nodeMap.get(id)!;\n const { w, h } = sizeOf(n);\n lnodes.set(id, {\n id,\n node: n,\n layer: layerMap.get(id) ?? 0,\n order: 0,\n width: w,\n height: h,\n isDummy: false,\n });\n }\n for (const id of dummies) {\n lnodes.set(id, {\n id,\n layer: layerMap.get(id) ?? 0,\n order: 0,\n width: FC_CONST.dummyWidth,\n height: 0,\n isDummy: true,\n });\n }\n\n // Group by layer\n const maxLayer = Math.max(0, ...Array.from(layerMap.values()));\n const layers: string[][] = [];\n for (let i = 0; i <= maxLayer; i++) layers.push([]);\n for (const [id, layer] of layerMap) {\n layers[layer]!.push(id);\n }\n\n // ── Phase 4: crossing minimization ───────────────────────\n // Build segment list (pairs of adjacent-layer node ids along each chain)\n const segments: Array<[string, string]> = [];\n for (const e of updatedEdges) {\n if (e.chain.length >= 2) {\n for (let i = 0; i < e.chain.length - 1; i++) {\n segments.push([e.chain[i]!, e.chain[i + 1]!]);\n }\n }\n }\n const ordered = medianOrder(layers, segments);\n\n // Assign order indices\n for (let li = 0; li < ordered.length; li++) {\n const layer = ordered[li]!;\n for (let oi = 0; oi < layer.length; oi++) {\n const n = lnodes.get(layer[oi]!);\n if (n) n.order = oi;\n }\n }\n\n // ── Phase 5: x-coord assignment ──────────────────────────\n const layerNodes: LNode[][] = ordered.map((layer) =>\n layer.map((id) => lnodes.get(id)!)\n );\n const xMap = assignXCoords(layerNodes, FC_CONST.nodeSpacingX);\n\n // Refine with median pull (3 passes) to straighten long edges through dummies\n for (let pass = 0; pass < 4; pass++) {\n for (let li = 0; li < layerNodes.length; li++) {\n const layer = layerNodes[li]!;\n // Collect neighbors from both adjacent layers\n const pullList = layer.map((n) => {\n const neighbors: number[] = [];\n for (const [u, v] of segments) {\n if (v === n.id) {\n const ux = xMap.get(u);\n if (ux !== undefined) neighbors.push(ux);\n }\n if (u === n.id) {\n const vx = xMap.get(v);\n if (vx !== undefined) neighbors.push(vx);\n }\n }\n if (neighbors.length === 0) return xMap.get(n.id) ?? 0;\n neighbors.sort((a, b) => a - b);\n return neighbors[Math.floor(neighbors.length / 2)]!;\n });\n // Apply pulled positions, then enforce non-overlap left-to-right\n let cursor = -Infinity;\n for (let oi = 0; oi < layer.length; oi++) {\n const n = layer[oi]!;\n const desired = pullList[oi]!;\n const minX = cursor + FC_CONST.nodeSpacingX + n.width / 2;\n const newX = Math.max(desired, oi === 0 ? desired : minX);\n xMap.set(n.id, newX);\n cursor = newX + n.width / 2;\n }\n }\n }\n\n // ── Compute y coords & final canvas dimensions ──────────\n const isHorizontal = dir === \"LR\" || dir === \"RL\";\n const layerGap = FC_CONST.layerSpacingY;\n\n // Per-layer max height (abstract TB) — respects variable-height nodes.\n const layerHeights: number[] = layerNodes.map((layer) => {\n let maxH = 0;\n for (const n of layer) {\n if (n.isDummy) continue;\n if (n.height > maxH) maxH = n.height;\n }\n return maxH > 0 ? maxH : FC_CONST.nodeHeight;\n });\n const layerCenterY: number[] = [];\n {\n let y = FC_CONST.padding;\n for (let li = 0; li < layerHeights.length; li++) {\n y += layerHeights[li]! / 2;\n layerCenterY.push(y);\n y += layerHeights[li]! / 2 + layerGap;\n }\n }\n\n let minX = Infinity;\n let maxX = -Infinity;\n for (const [id, x] of xMap) {\n const n = lnodes.get(id)!;\n if (n.isDummy) continue;\n minX = Math.min(minX, x - n.width / 2);\n maxX = Math.max(maxX, x + n.width / 2);\n }\n if (!isFinite(minX)) {\n minX = 0;\n maxX = 100;\n }\n\n const padding = FC_CONST.padding;\n const shiftX = padding - minX;\n\n const placed: Placed[] = [];\n for (let li = 0; li < layerNodes.length; li++) {\n const y = layerCenterY[li]!;\n for (const n of layerNodes[li]!) {\n if (n.isDummy) continue;\n const cx = (xMap.get(n.id) ?? 0) + shiftX;\n placed.push({\n id: n.id,\n x: cx - n.width / 2,\n y: y - n.height / 2,\n width: n.width,\n height: n.height,\n layer: li,\n order: n.order,\n });\n }\n }\n const dummyPos = new Map<string, { x: number; y: number }>();\n for (let li = 0; li < layerNodes.length; li++) {\n const y = layerCenterY[li]!;\n for (const n of layerNodes[li]!) {\n if (!n.isDummy) continue;\n dummyPos.set(n.id, {\n x: (xMap.get(n.id) ?? 0) + shiftX,\n y,\n });\n }\n }\n\n const canvasW = maxX - minX + 2 * padding;\n const lastLayer = layerCenterY.length - 1;\n const canvasH =\n lastLayer >= 0\n ? layerCenterY[lastLayer]! + layerHeights[lastLayer]! / 2 + padding\n : 2 * padding;\n\n // ── Build layout nodes (possibly swapped for LR) ────────\n const outNodes: FlowchartLayoutNode[] = placed.map((p) => {\n const base = lnodes.get(p.id)!.node!;\n if (!isHorizontal) {\n return {\n node: base,\n x: p.x,\n y: p.y,\n width: p.width,\n height: p.height,\n layer: p.layer,\n order: p.order,\n };\n }\n // Swap POSITIONS for LR (layer direction becomes X) but also swap\n // dims so the user-authored shape orientation is preserved. sizeOf\n // pre-swapped dims on input, so here we swap them back for render.\n return {\n node: base,\n x: p.y,\n y: p.x,\n width: p.height,\n height: p.width,\n layer: p.layer,\n order: p.order,\n };\n });\n\n const outWidth = isHorizontal ? canvasH : canvasW;\n const outHeight = isHorizontal ? canvasW : canvasH;\n\n // ── Build edges (routing) ───────────────────────────────\n const nodeCenter = new Map<string, { x: number; y: number; w: number; h: number }>();\n for (const ln of outNodes) {\n nodeCenter.set(ln.node.id, {\n x: ln.x + ln.width / 2,\n y: ln.y + ln.height / 2,\n w: ln.width,\n h: ln.height,\n });\n }\n // Dummy positions (swap for LR)\n const dummyCenter = new Map<string, { x: number; y: number }>();\n for (const [id, p] of dummyPos) {\n if (!isHorizontal) dummyCenter.set(id, p);\n else dummyCenter.set(id, { x: p.y, y: p.x });\n }\n\n // Import routing lazily to avoid circular deps (routing module is sibling).\n // We inline minimal routing right here to keep imports simple.\n const outEdges = updatedEdges.map((le) => {\n const chain = le.chain.length > 0 ? le.chain : [le.from, le.to];\n // Build polyline through (possibly) dummies\n const points: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < chain.length; i++) {\n const id = chain[i]!;\n const nc = nodeCenter.get(id);\n const dc = dummyCenter.get(id);\n if (nc) {\n points.push({ x: nc.x, y: nc.y });\n } else if (dc) {\n points.push({ x: dc.x, y: dc.y });\n }\n }\n if (points.length < 2) {\n return { edge: le.original, path: \"\" };\n }\n // Clip endpoints to node borders\n const startNode = nodeCenter.get(chain[0]!);\n const endNode = nodeCenter.get(chain[chain.length - 1]!);\n if (startNode) {\n points[0] = clipToBox(points[0]!, points[1]!, startNode, dir, true);\n }\n if (endNode) {\n points[points.length - 1] = clipToBox(\n points[points.length - 1]!,\n points[points.length - 2]!,\n endNode,\n dir,\n false\n );\n }\n\n // Build Manhattan path: for each consecutive pair, insert an L-bend on the\n // dominant axis (TB: vertical primary; LR: horizontal primary).\n const d = buildManhattanPath(points, dir);\n\n // Label anchor: near source exit, offset toward target side. This keeps\n // branch labels (yes / no from a decision) close to the decision and off\n // the shared horizontal routing bar where midpoint-based anchors collide\n // with the edge line itself. Same strategy as entity-structure edges.\n let labelAnchor: { x: number; y: number } | undefined;\n if (le.original.label) {\n labelAnchor = edgeLabelAnchor(points, dir);\n }\n\n return {\n edge: {\n ...le.original,\n isReversed: le.isReversed,\n },\n path: d,\n labelAnchor,\n };\n });\n\n return {\n width: outWidth,\n height: outHeight,\n direction: dir,\n nodes: outNodes,\n edges: outEdges,\n clusters: [],\n };\n}\n\n// ─── Routing helpers ──────────────────────────────────────\n\nfunction clipToBox(\n from: { x: number; y: number },\n toward: { x: number; y: number },\n box: { x: number; y: number; w: number; h: number },\n dir: FlowchartDirection,\n isStart: boolean\n): { x: number; y: number } {\n // Clip the endpoint on the box side facing `toward`. Works for both start\n // (exit toward neighbor) and end (enter from neighbor); the formula is\n // identical — the arrow terminates where the straight ray from center →\n // toward crosses the box boundary.\n void isStart;\n const cx = box.x;\n const cy = box.y;\n if (dir === \"TB\" || dir === \"BT\") {\n const goingDown = toward.y >= from.y;\n return { x: cx, y: cy + (goingDown ? box.h / 2 : -box.h / 2) };\n }\n const goingRight = toward.x >= from.x;\n return { x: cx + (goingRight ? box.w / 2 : -box.w / 2), y: cy };\n}\n\nfunction buildManhattanPath(\n pts: Array<{ x: number; y: number }>,\n dir: FlowchartDirection\n): string {\n if (pts.length === 0) return \"\";\n const parts: string[] = [`M ${fmt(pts[0]!.x)} ${fmt(pts[0]!.y)}`];\n const isHorizontal = dir === \"LR\" || dir === \"RL\";\n for (let i = 1; i < pts.length; i++) {\n const a = pts[i - 1]!;\n const b = pts[i]!;\n if (isHorizontal) {\n // Horizontal primary: go right/left to midX, then vertical, then horizontal\n const midX = (a.x + b.x) / 2;\n parts.push(`L ${fmt(midX)} ${fmt(a.y)}`);\n parts.push(`L ${fmt(midX)} ${fmt(b.y)}`);\n parts.push(`L ${fmt(b.x)} ${fmt(b.y)}`);\n } else {\n const midY = (a.y + b.y) / 2;\n parts.push(`L ${fmt(a.x)} ${fmt(midY)}`);\n parts.push(`L ${fmt(b.x)} ${fmt(midY)}`);\n parts.push(`L ${fmt(b.x)} ${fmt(b.y)}`);\n }\n }\n return parts.join(\" \");\n}\n\nfunction fmt(n: number): string {\n return (Math.round(n * 100) / 100).toString();\n}\n\nfunction edgeLabelAnchor(\n pts: Array<{ x: number; y: number }>,\n dir: FlowchartDirection\n): { x: number; y: number; textAnchor?: \"start\" | \"middle\" | \"end\" } {\n // Strategy: label sits next to the edge polyline on the segment that is\n // unique to this edge (so fan-out branches don't collide with shared\n // routing bars). Text-anchor is set so the glyphs clear the stroke — never\n // centered on the line itself.\n if (pts.length < 2) return pts[0] ?? { x: 0, y: 0 };\n const a = pts[0]!;\n const b = pts[1]!;\n const isHorizontal = dir === \"LR\" || dir === \"RL\";\n\n if (isHorizontal) {\n const midX = (a.x + b.x) / 2;\n const bends = Math.abs(a.y - b.y) > 1;\n if (bends) {\n // Label on the vertical middle segment, text anchored to start so it\n // begins a gap to the right of the line.\n const midY = (a.y + b.y) / 2;\n return { x: midX + 6, y: midY, textAnchor: \"start\" };\n }\n // Straight horizontal run: label centered above the line with clearance.\n return { x: midX, y: a.y - 8, textAnchor: \"middle\" };\n }\n\n // TB / BT\n const midY = (a.y + b.y) / 2;\n const bends = Math.abs(a.x - b.x) > 1;\n if (bends) {\n // Label centered above the horizontal middle bar, clear of the stroke.\n const midX = (a.x + b.x) / 2;\n return { x: midX, y: midY - 8, textAnchor: \"middle\" };\n }\n // Straight vertical drop: anchor to the right of the stub so text begins a\n // gap past the line.\n return { x: a.x + 6, y: midY, textAnchor: \"start\" };\n}\n\n","/**\n * SVG shape primitives for flowchart nodes (M1: 5 shapes).\n *\n * Each builder returns an SVG element string (without the `<g>` wrapper or the\n * text; renderer composes those).\n *\n * All shapes are rendered in the bounding box (0, 0, w, h) — the renderer\n * applies a `translate(x, y)` on the group.\n */\n\nimport type { FlowchartShape } from \"../../core/types\";\nimport { rect, polygon } from \"../../core/svg\";\n\nexport function shapeSVG(shape: FlowchartShape, w: number, h: number): string {\n switch (shape) {\n case \"rect\":\n return rect({ x: 0, y: 0, width: w, height: h, rx: 14, ry: 14, class: \"sx-fc-node\" });\n case \"round\":\n return rect({ x: 0, y: 0, width: w, height: h, rx: 20, ry: 20, class: \"sx-fc-node sx-fc-node-round\" });\n case \"stadium\": {\n const r = Math.min(h / 2, 24);\n return rect({ x: 0, y: 0, width: w, height: h, rx: r, ry: r, class: \"sx-fc-node sx-fc-node-stadium\" });\n }\n case \"diamond\": {\n const points = `${w / 2},0 ${w},${h / 2} ${w / 2},${h} 0,${h / 2}`;\n return polygon({ points, class: \"sx-fc-node sx-fc-node-diamond\" });\n }\n case \"parallelogram\": {\n const slant = 20;\n const points = `${slant},0 ${w},0 ${w - slant},${h} 0,${h}`;\n return polygon({ points, class: \"sx-fc-node\" });\n }\n case \"parallelogram-alt\": {\n const slant = 20;\n const points = `0,0 ${w - slant},0 ${w},${h} ${slant},${h}`;\n return polygon({ points, class: \"sx-fc-node\" });\n }\n default:\n return rect({ x: 0, y: 0, width: w, height: h, rx: 6, ry: 6, class: \"sx-fc-node\" });\n }\n}\n","/**\n * Flowchart renderer — LayoutResult → SVG string.\n *\n * Produces semantic, themeable SVG per spec §12:\n * - <title>/<desc> for a11y\n * - data-* attributes for interaction hooks\n * - CSS custom properties from resolveBaseTheme\n * - Arrowhead markers in <defs>\n */\n\nimport type {\n FlowchartAST,\n FlowchartLayoutEdge,\n FlowchartLayoutNode,\n FlowchartLayoutResult,\n FlowchartEdge,\n FlowchartNode,\n} from \"../../core/types\";\nimport {\n svgRoot,\n group,\n el,\n text as textEl,\n path as pathEl,\n rect,\n title as titleEl,\n desc as descEl,\n defs,\n} from \"../../core/svg\";\nimport { parseFlowchart } from \"./parser\";\nimport { layoutFlowchart, FC_CONST } from \"./layout\";\nimport { shapeSVG } from \"./shapes\";\nimport { resolveFlowchartTheme, type ThemeName } from \"../../core/theme\";\n\nconst CSS_TEMPLATE = (themeName: ThemeName): string => {\n const t = resolveFlowchartTheme(themeName);\n const c = t.classes;\n return `\n.sx-fc { background: ${t.bg}; font-family: system-ui, -apple-system, \"Segoe UI\", sans-serif; }\n.sx-fc-node { fill: ${t.fillMuted}; stroke: ${t.stroke}; stroke-width: 1.5; stroke-linejoin: round; }\n.sx-fc-node-stadium { fill: ${t.stadiumFill}; stroke: ${t.stroke}; }\n.sx-fc-node-diamond { fill: ${t.diamondFill}; stroke: ${t.stroke}; }\n.sx-fc-node-round { fill: ${t.roundFill}; stroke: ${t.stroke}; }\n.sx-fc-node-text { fill: ${t.text}; font: 12px system-ui, -apple-system, \"Segoe UI\", sans-serif; }\n/* Semantic class presets (applied via 'class A start') — override shape fills */\n.sx-fc-class-start > .sx-fc-node { fill: ${c.start.fill}; stroke: ${c.start.stroke}; }\n.sx-fc-class-start > .sx-fc-node-text { fill: ${c.start.text}; font-weight: 600; }\n.sx-fc-class-process > .sx-fc-node { fill: ${c.process.fill}; stroke: ${c.process.stroke}; }\n.sx-fc-class-process > .sx-fc-node-text { fill: ${c.process.text}; font-weight: 600; }\n.sx-fc-class-decision > .sx-fc-node { fill: ${c.decision.fill}; stroke: ${c.decision.stroke}; }\n.sx-fc-class-decision > .sx-fc-node-text { fill: ${c.decision.text}; font-weight: 600; }\n.sx-fc-class-success > .sx-fc-node { fill: ${c.success.fill}; stroke: ${c.success.stroke}; }\n.sx-fc-class-success > .sx-fc-node-text { fill: ${c.success.text}; font-weight: 600; }\n.sx-fc-class-danger > .sx-fc-node { fill: ${c.danger.fill}; stroke: ${c.danger.stroke}; }\n.sx-fc-class-danger > .sx-fc-node-text { fill: ${c.danger.text}; font-weight: 600; }\n.sx-fc-class-neutral > .sx-fc-node { fill: ${c.neutral.fill}; stroke: ${c.neutral.stroke}; }\n.sx-fc-class-neutral > .sx-fc-node-text { fill: ${c.neutral.text}; font-weight: 600; }\n.sx-fc-edge { fill: none; stroke: ${t.neutral}; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }\n.sx-fc-edge-thick { stroke: ${t.stroke}; stroke-width: 2.4; }\n.sx-fc-edge-dashed { stroke-dasharray: 5 3; }\n.sx-fc-edge-dotted { stroke-dasharray: 1.5 3; }\n.sx-fc-edge-label { fill: ${t.textMuted}; font: 11px system-ui, -apple-system, \"Segoe UI\", sans-serif; }\n.sx-fc-edge-label-bg { fill: ${t.bg}; fill-opacity: 0.96; stroke: ${t.neutral}; stroke-width: 0.5; }\n.sx-fc-title { fill: ${t.text}; font: 600 14px system-ui, -apple-system, \"Segoe UI\", sans-serif; }\n`.trim();\n};\n\nconst ARROW_MARKER = `\n<marker id=\"sx-fc-arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto-start-reverse\" markerUnits=\"userSpaceOnUse\">\n <path d=\"M0,0 L8,4 L0,8 L2,4 Z\" fill=\"context-stroke\"/>\n</marker>\n<marker id=\"sx-fc-arrow-o\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto\" markerUnits=\"userSpaceOnUse\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1\"/>\n</marker>\n<marker id=\"sx-fc-arrow-x\" markerWidth=\"8\" markerHeight=\"8\" refX=\"4\" refY=\"4\" orient=\"auto\" markerUnits=\"userSpaceOnUse\">\n <path d=\"M1,1 L7,7 M1,7 L7,1\" stroke=\"context-stroke\" stroke-width=\"1.2\"/>\n</marker>\n`.trim();\n\nfunction edgeCssClass(edge: FlowchartEdge): string {\n const classes = [\"sx-fc-edge\"];\n if (edge.kind === \"thick\") classes.push(\"sx-fc-edge-thick\");\n if (edge.kind === \"dotted\") classes.push(\"sx-fc-edge-dotted\");\n return classes.join(\" \");\n}\n\nfunction markerEndFor(edge: FlowchartEdge): string | undefined {\n switch (edge.arrowEnd) {\n case \"arrow\":\n return \"url(#sx-fc-arrow)\";\n case \"circle\":\n return \"url(#sx-fc-arrow-o)\";\n case \"cross\":\n return \"url(#sx-fc-arrow-x)\";\n default:\n return undefined;\n }\n}\n\nfunction markerStartFor(edge: FlowchartEdge): string | undefined {\n return edge.arrowStart === \"arrow\" ? \"url(#sx-fc-arrow)\" : undefined;\n}\n\nfunction renderNode(ln: FlowchartLayoutNode): string {\n const n: FlowchartNode = ln.node;\n const shapeEl = shapeSVG(n.shape, ln.width, ln.height);\n const label = textEl(\n {\n x: ln.width / 2,\n y: ln.height / 2,\n class: \"sx-fc-node-text\",\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": \"central\",\n },\n n.label\n );\n const nodeTitle = titleEl(n.label);\n const classAttr = [\"sx-fc-node-g\", ...(n.classes ?? []).map((c) => `sx-fc-class-${c}`)].join(\" \");\n return group(\n {\n \"data-node-id\": n.id,\n \"data-shape\": n.shape,\n \"data-layer\": ln.layer,\n \"data-classes\": n.classes?.join(\" \"),\n class: classAttr,\n transform: `translate(${fmt(ln.x)} ${fmt(ln.y)})`,\n },\n [shapeEl, label, nodeTitle]\n );\n}\n\nfunction renderEdge(le: FlowchartLayoutEdge): string {\n const e = le.edge;\n const attrs: Record<string, string | number | undefined> = {\n d: le.path,\n class: edgeCssClass(e),\n };\n const me = markerEndFor(e);\n const ms = markerStartFor(e);\n if (me) attrs[\"marker-end\"] = me;\n if (ms) attrs[\"marker-start\"] = ms;\n const p = pathEl(attrs);\n\n const labelEl =\n e.label && le.labelAnchor\n ? renderEdgeLabel(\n e.label,\n le.labelAnchor.x,\n le.labelAnchor.y,\n le.labelAnchor.textAnchor ?? \"middle\"\n )\n : \"\";\n\n const edgeTitle = titleEl(\n e.label ? `${e.from} → ${e.to}: ${e.label}` : `${e.from} → ${e.to}`\n );\n\n return group(\n {\n \"data-edge-id\": e.id ?? `${e.from}->${e.to}`,\n \"data-kind\": e.kind,\n \"data-from\": e.from,\n \"data-to\": e.to,\n },\n [p, edgeTitle, labelEl].filter((s) => s.length > 0)\n );\n}\n\nfunction renderEdgeLabel(\n label: string,\n cx: number,\n cy: number,\n textAnchor: \"start\" | \"middle\" | \"end\"\n): string {\n // Approximate pill size — matches entity diagram edge label style.\n const w = Math.max(20, label.length * 6.5 + 10);\n const h = 16;\n const rx = cx - (textAnchor === \"start\" ? 0 : textAnchor === \"end\" ? w : w / 2);\n const ry = cy - h / 2;\n const bg = rect({\n x: rx,\n y: ry,\n width: w,\n height: h,\n rx: 3,\n class: \"sx-fc-edge-label-bg\",\n });\n const t = textEl(\n {\n x: cx,\n y: cy,\n class: \"sx-fc-edge-label\",\n \"text-anchor\": textAnchor,\n \"dominant-baseline\": \"central\",\n },\n label\n );\n return group({ class: \"sx-fc-edge-label-g\" }, [bg, t]);\n}\n\nfunction fmt(n: number): string {\n return (Math.round(n * 100) / 100).toString();\n}\n\nexport function renderFlowchartAST(\n ast: FlowchartAST,\n themeName: ThemeName = \"default\"\n): string {\n const layout: FlowchartLayoutResult = layoutFlowchart(ast);\n\n const nodeSvg = layout.nodes.map(renderNode);\n const edgeSvg = layout.edges.map(renderEdge);\n\n const titleBlock = ast.title\n ? textEl(\n {\n x: layout.width / 2,\n y: 16,\n class: \"sx-fc-title\",\n \"text-anchor\": \"middle\",\n },\n ast.title\n )\n : \"\";\n\n const inner: string[] = [\n titleEl(ast.title ? `${ast.title} — Flowchart` : \"Flowchart\"),\n descEl(\n `Flowchart with ${ast.nodes.length} node${ast.nodes.length === 1 ? \"\" : \"s\"} and ${ast.edges.length} edge${ast.edges.length === 1 ? \"\" : \"s\"}.`\n ),\n el(\"style\", {}, CSS_TEMPLATE(themeName)),\n defs([ARROW_MARKER]),\n ];\n if (titleBlock) inner.push(titleBlock);\n inner.push(group({ class: \"sx-fc-edges\" }, edgeSvg));\n inner.push(group({ class: \"sx-fc-nodes\" }, nodeSvg));\n\n // Extra top padding when a title is present\n const topPad = ast.title ? 24 : 0;\n const totalH = layout.height + topPad;\n\n return svgRoot(\n {\n viewBox: `0 0 ${fmt(layout.width)} ${fmt(totalH)}`,\n width: fmt(layout.width),\n height: fmt(totalH),\n class: \"sx-fc\",\n \"data-diagram-type\": \"flowchart\",\n \"data-direction\": layout.direction,\n role: \"graphics-document\",\n },\n [\n ...inner.slice(0, 4),\n ...(titleBlock ? [titleBlock] : []),\n group(\n { transform: topPad > 0 ? `translate(0 ${topPad})` : \"translate(0 0)\" },\n [\n group({ class: \"sx-fc-edges\" }, edgeSvg),\n group({ class: \"sx-fc-nodes\" }, nodeSvg),\n ]\n ),\n ]\n );\n}\n\nexport function renderFlowchart(text: string, themeName: ThemeName = \"default\"): string {\n const ast = parseFlowchart(text);\n return renderFlowchartAST(ast, themeName);\n}\n\n// Keep FC_CONST reachable via renderer for test convenience.\nexport { FC_CONST };\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { renderFlowchart } from \"./renderer\";\n\nexport const flowchart: DiagramPlugin = {\n type: \"flowchart\",\n detect(text: string): boolean {\n // Scan the first non-blank, non-comment line.\n for (const raw of text.split(/\\r?\\n/)) {\n const t = raw.trim();\n if (t.length === 0) continue;\n if (t.startsWith(\"%%\")) continue;\n const first = t.split(/\\s+/)[0]?.toLowerCase() ?? \"\";\n return first === \"flowchart\" || first === \"graph\";\n }\n return false;\n },\n render(text: string, config?: RenderConfig): string {\n const themeName = (config?.theme ?? \"default\") as \"default\" | \"monochrome\" | \"dark\";\n return renderFlowchart(text, themeName);\n },\n};\n\nexport { parseFlowchart } from \"./parser\";\nexport { renderFlowchart, renderFlowchartAST } from \"./renderer\";\nexport { layoutFlowchart, FC_CONST } from \"./layout\";\n"]}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/core/theme.ts
|
|
4
|
+
var DEFAULT_PALETTE = [
|
|
5
|
+
"#2563eb",
|
|
6
|
+
// blue-600
|
|
7
|
+
"#059669",
|
|
8
|
+
// emerald-600
|
|
9
|
+
"#d97706",
|
|
10
|
+
// amber-600
|
|
11
|
+
"#7c3aed",
|
|
12
|
+
// violet-600
|
|
13
|
+
"#dc2626",
|
|
14
|
+
// red-600
|
|
15
|
+
"#0891b2",
|
|
16
|
+
// cyan-600
|
|
17
|
+
"#db2777",
|
|
18
|
+
// pink-600
|
|
19
|
+
"#475569"
|
|
20
|
+
// slate-600
|
|
21
|
+
];
|
|
22
|
+
var MONOCHROME_PALETTE = [
|
|
23
|
+
"#1f2937",
|
|
24
|
+
"#374151",
|
|
25
|
+
"#4b5563",
|
|
26
|
+
"#6b7280",
|
|
27
|
+
"#9ca3af",
|
|
28
|
+
"#7a7a7a",
|
|
29
|
+
"#525252",
|
|
30
|
+
"#262626"
|
|
31
|
+
];
|
|
32
|
+
var DARK_PALETTE = [
|
|
33
|
+
"#89b4fa",
|
|
34
|
+
// blue
|
|
35
|
+
"#a6e3a1",
|
|
36
|
+
// green
|
|
37
|
+
"#fab387",
|
|
38
|
+
// peach
|
|
39
|
+
"#cba6f7",
|
|
40
|
+
// mauve
|
|
41
|
+
"#f38ba8",
|
|
42
|
+
// red
|
|
43
|
+
"#94e2d5",
|
|
44
|
+
// teal
|
|
45
|
+
"#f5c2e7",
|
|
46
|
+
// pink
|
|
47
|
+
"#89dceb"
|
|
48
|
+
// sky
|
|
49
|
+
];
|
|
50
|
+
var DEFAULT_THEME = {
|
|
51
|
+
bg: "#ffffff",
|
|
52
|
+
text: "#0f172a",
|
|
53
|
+
textMuted: "#475569",
|
|
54
|
+
stroke: "#334155",
|
|
55
|
+
fill: "#ffffff",
|
|
56
|
+
fillMuted: "#f1f5f9",
|
|
57
|
+
accent: "#2563eb",
|
|
58
|
+
positive: "#059669",
|
|
59
|
+
negative: "#dc2626",
|
|
60
|
+
neutral: "#94a3b8",
|
|
61
|
+
warn: "#d97706",
|
|
62
|
+
palette: DEFAULT_PALETTE
|
|
63
|
+
};
|
|
64
|
+
var MONOCHROME_THEME = {
|
|
65
|
+
bg: "#ffffff",
|
|
66
|
+
text: "#000000",
|
|
67
|
+
textMuted: "#555555",
|
|
68
|
+
stroke: "#000000",
|
|
69
|
+
fill: "#ffffff",
|
|
70
|
+
fillMuted: "#f0f0f0",
|
|
71
|
+
accent: "#000000",
|
|
72
|
+
positive: "#000000",
|
|
73
|
+
negative: "#000000",
|
|
74
|
+
neutral: "#888888",
|
|
75
|
+
warn: "#000000",
|
|
76
|
+
palette: MONOCHROME_PALETTE
|
|
77
|
+
};
|
|
78
|
+
var DARK_THEME = {
|
|
79
|
+
bg: "#1e1e2e",
|
|
80
|
+
text: "#cdd6f4",
|
|
81
|
+
textMuted: "#7f849c",
|
|
82
|
+
stroke: "#cdd6f4",
|
|
83
|
+
fill: "#313244",
|
|
84
|
+
fillMuted: "#45475a",
|
|
85
|
+
accent: "#89b4fa",
|
|
86
|
+
positive: "#a6e3a1",
|
|
87
|
+
negative: "#f38ba8",
|
|
88
|
+
neutral: "#6c7086",
|
|
89
|
+
warn: "#fab387",
|
|
90
|
+
palette: DARK_PALETTE
|
|
91
|
+
};
|
|
92
|
+
var BASE_THEMES = {
|
|
93
|
+
default: DEFAULT_THEME,
|
|
94
|
+
monochrome: MONOCHROME_THEME,
|
|
95
|
+
dark: DARK_THEME
|
|
96
|
+
};
|
|
97
|
+
var DEFAULT_PERSON = {
|
|
98
|
+
maleFill: "#dbeafe",
|
|
99
|
+
femaleFill: "#fce7f3",
|
|
100
|
+
unknownFill: "#f5f5f5",
|
|
101
|
+
deceasedMark: "#b71c1c",
|
|
102
|
+
conditionFill: "#1565c0"
|
|
103
|
+
};
|
|
104
|
+
var MONOCHROME_PERSON = {
|
|
105
|
+
maleFill: "#ffffff",
|
|
106
|
+
femaleFill: "#ffffff",
|
|
107
|
+
unknownFill: "#ffffff",
|
|
108
|
+
deceasedMark: "#000000",
|
|
109
|
+
conditionFill: "#000000"
|
|
110
|
+
};
|
|
111
|
+
var DARK_PERSON = {
|
|
112
|
+
maleFill: "#1e3a5f",
|
|
113
|
+
femaleFill: "#3e1f3e",
|
|
114
|
+
unknownFill: "#45475a",
|
|
115
|
+
deceasedMark: "#f38ba8",
|
|
116
|
+
conditionFill: "#89b4fa"
|
|
117
|
+
};
|
|
118
|
+
var PERSON_TOKENS = {
|
|
119
|
+
default: DEFAULT_PERSON,
|
|
120
|
+
monochrome: MONOCHROME_PERSON,
|
|
121
|
+
dark: DARK_PERSON
|
|
122
|
+
};
|
|
123
|
+
var DEFAULT_BIOLOGY = {
|
|
124
|
+
cladeColors: DEFAULT_PALETTE,
|
|
125
|
+
supportGood: "#059669",
|
|
126
|
+
supportMedium: "#ca8a04",
|
|
127
|
+
supportWarn: "#d97706",
|
|
128
|
+
supportBad: "#dc2626"
|
|
129
|
+
};
|
|
130
|
+
var MONOCHROME_BIOLOGY = {
|
|
131
|
+
cladeColors: MONOCHROME_PALETTE,
|
|
132
|
+
supportGood: "#000000",
|
|
133
|
+
supportMedium: "#555555",
|
|
134
|
+
supportWarn: "#888888",
|
|
135
|
+
supportBad: "#aaaaaa"
|
|
136
|
+
};
|
|
137
|
+
var DARK_BIOLOGY = {
|
|
138
|
+
cladeColors: DARK_PALETTE,
|
|
139
|
+
supportGood: "#a6e3a1",
|
|
140
|
+
supportMedium: "#f9e2af",
|
|
141
|
+
supportWarn: "#fab387",
|
|
142
|
+
supportBad: "#f38ba8"
|
|
143
|
+
};
|
|
144
|
+
var BIOLOGY_TOKENS = {
|
|
145
|
+
default: DEFAULT_BIOLOGY,
|
|
146
|
+
monochrome: MONOCHROME_BIOLOGY,
|
|
147
|
+
dark: DARK_BIOLOGY
|
|
148
|
+
};
|
|
149
|
+
var DEFAULT_VENN = {
|
|
150
|
+
vennSetColors: DEFAULT_PALETTE,
|
|
151
|
+
vennBlendMode: "multiply",
|
|
152
|
+
vennSetOpacity: 0.38,
|
|
153
|
+
vennSetStroke: "#94a3b8",
|
|
154
|
+
vennLabelColor: "#0f172a",
|
|
155
|
+
vennCountColor: "#0f172a",
|
|
156
|
+
vennLeaderColor: "#64748b"
|
|
157
|
+
};
|
|
158
|
+
var MONOCHROME_VENN = {
|
|
159
|
+
vennSetColors: ["#999999", "#999999", "#999999", "#999999", "#999999", "#999999", "#999999", "#999999"],
|
|
160
|
+
vennBlendMode: "none",
|
|
161
|
+
vennSetOpacity: 0.22,
|
|
162
|
+
vennSetStroke: "#000000",
|
|
163
|
+
vennLabelColor: "#000000",
|
|
164
|
+
vennCountColor: "#000000",
|
|
165
|
+
vennLeaderColor: "#444444"
|
|
166
|
+
};
|
|
167
|
+
var DARK_VENN = {
|
|
168
|
+
vennSetColors: DARK_PALETTE,
|
|
169
|
+
vennBlendMode: "screen",
|
|
170
|
+
vennSetOpacity: 0.55,
|
|
171
|
+
vennSetStroke: "#585b70",
|
|
172
|
+
vennLabelColor: "#cdd6f4",
|
|
173
|
+
vennCountColor: "#f9e2af",
|
|
174
|
+
vennLeaderColor: "#7f849c"
|
|
175
|
+
};
|
|
176
|
+
var VENN_TOKENS = {
|
|
177
|
+
default: DEFAULT_VENN,
|
|
178
|
+
monochrome: MONOCHROME_VENN,
|
|
179
|
+
dark: DARK_VENN
|
|
180
|
+
};
|
|
181
|
+
var DEFAULT_MINDMAP = {
|
|
182
|
+
centralFill: "#0f172a",
|
|
183
|
+
branchPalette: DEFAULT_PALETTE
|
|
184
|
+
};
|
|
185
|
+
var MONOCHROME_MINDMAP = {
|
|
186
|
+
centralFill: "#000000",
|
|
187
|
+
branchPalette: ["#000000"]
|
|
188
|
+
};
|
|
189
|
+
var DARK_MINDMAP = {
|
|
190
|
+
centralFill: "#cdd6f4",
|
|
191
|
+
branchPalette: DARK_PALETTE
|
|
192
|
+
};
|
|
193
|
+
var MINDMAP_TOKENS = {
|
|
194
|
+
default: DEFAULT_MINDMAP,
|
|
195
|
+
monochrome: MONOCHROME_MINDMAP,
|
|
196
|
+
dark: DARK_MINDMAP
|
|
197
|
+
};
|
|
198
|
+
var DEFAULT_INDUSTRIAL = {
|
|
199
|
+
bg: "#ffffff",
|
|
200
|
+
stroke: "#222222",
|
|
201
|
+
strokeHeavy: "#111111",
|
|
202
|
+
text: "#111111",
|
|
203
|
+
textMuted: "#555555",
|
|
204
|
+
accent: "#1d4e89",
|
|
205
|
+
error: "#cc0000"
|
|
206
|
+
};
|
|
207
|
+
var MONOCHROME_INDUSTRIAL = {
|
|
208
|
+
bg: "#ffffff",
|
|
209
|
+
stroke: "#000000",
|
|
210
|
+
strokeHeavy: "#000000",
|
|
211
|
+
text: "#000000",
|
|
212
|
+
textMuted: "#333333",
|
|
213
|
+
accent: "#000000",
|
|
214
|
+
error: "#000000"
|
|
215
|
+
};
|
|
216
|
+
var DARK_INDUSTRIAL = {
|
|
217
|
+
bg: "#1e1e2e",
|
|
218
|
+
stroke: "#cdd6f4",
|
|
219
|
+
strokeHeavy: "#ffffff",
|
|
220
|
+
text: "#cdd6f4",
|
|
221
|
+
textMuted: "#9399b2",
|
|
222
|
+
accent: "#89b4fa",
|
|
223
|
+
error: "#f38ba8"
|
|
224
|
+
};
|
|
225
|
+
var INDUSTRIAL_TOKENS = {
|
|
226
|
+
default: DEFAULT_INDUSTRIAL,
|
|
227
|
+
monochrome: MONOCHROME_INDUSTRIAL,
|
|
228
|
+
dark: DARK_INDUSTRIAL
|
|
229
|
+
};
|
|
230
|
+
function resolveIndustrialTheme(name) {
|
|
231
|
+
const themeName = name in BASE_THEMES ? name : "default";
|
|
232
|
+
return { ...BASE_THEMES[themeName], ...INDUSTRIAL_TOKENS[themeName] };
|
|
233
|
+
}
|
|
234
|
+
var DEFAULT_FLOWCHART = {
|
|
235
|
+
stadiumFill: "#dbeafe",
|
|
236
|
+
diamondFill: "#fef3c7",
|
|
237
|
+
roundFill: "#dcfce7",
|
|
238
|
+
classes: {
|
|
239
|
+
start: { fill: "#f0ece0", stroke: "#9a8b6a", text: "#5c4e2e" },
|
|
240
|
+
process: { fill: "#e8e4ff", stroke: "#8b7dd8", text: "#4c3a8f" },
|
|
241
|
+
decision: { fill: "#fde8c8", stroke: "#d4985c", text: "#8a5a1f" },
|
|
242
|
+
success: { fill: "#d4f0e0", stroke: "#7bc19a", text: "#1e5a3a" },
|
|
243
|
+
danger: { fill: "#fbe0dc", stroke: "#d89181", text: "#8a3525" },
|
|
244
|
+
neutral: { fill: "#ececec", stroke: "#a0a0a0", text: "#555555" }
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
var MONOCHROME_FLOWCHART = {
|
|
248
|
+
stadiumFill: "#ffffff",
|
|
249
|
+
diamondFill: "#ffffff",
|
|
250
|
+
roundFill: "#ffffff",
|
|
251
|
+
classes: {
|
|
252
|
+
start: { fill: "#ffffff", stroke: "#000000", text: "#000000" },
|
|
253
|
+
process: { fill: "#ffffff", stroke: "#000000", text: "#000000" },
|
|
254
|
+
decision: { fill: "#ffffff", stroke: "#000000", text: "#000000" },
|
|
255
|
+
success: { fill: "#ffffff", stroke: "#000000", text: "#000000" },
|
|
256
|
+
danger: { fill: "#ffffff", stroke: "#000000", text: "#000000" },
|
|
257
|
+
neutral: { fill: "#ffffff", stroke: "#000000", text: "#000000" }
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
var DARK_FLOWCHART = {
|
|
261
|
+
stadiumFill: "#1e3a5f",
|
|
262
|
+
diamondFill: "#3a3a2a",
|
|
263
|
+
roundFill: "#1f3a2a",
|
|
264
|
+
classes: {
|
|
265
|
+
start: { fill: "#3a3326", stroke: "#c9b88a", text: "#f5e7c7" },
|
|
266
|
+
process: { fill: "#2e2a52", stroke: "#a89ee0", text: "#d9d2ff" },
|
|
267
|
+
decision: { fill: "#3a2d1a", stroke: "#d4985c", text: "#f2d5a8" },
|
|
268
|
+
success: { fill: "#1e3a2a", stroke: "#7bc19a", text: "#cdefd8" },
|
|
269
|
+
danger: { fill: "#3a231f", stroke: "#d89181", text: "#f2d0c8" },
|
|
270
|
+
neutral: { fill: "#313244", stroke: "#7f849c", text: "#cdd6f4" }
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
var FLOWCHART_TOKENS = {
|
|
274
|
+
default: DEFAULT_FLOWCHART,
|
|
275
|
+
monochrome: MONOCHROME_FLOWCHART,
|
|
276
|
+
dark: DARK_FLOWCHART
|
|
277
|
+
};
|
|
278
|
+
function resolveFlowchartTheme(name) {
|
|
279
|
+
const themeName = name in BASE_THEMES ? name : "default";
|
|
280
|
+
return { ...BASE_THEMES[themeName], ...FLOWCHART_TOKENS[themeName] };
|
|
281
|
+
}
|
|
282
|
+
function resolveMindmapTheme(name) {
|
|
283
|
+
const themeName = name in BASE_THEMES ? name : "default";
|
|
284
|
+
return { ...BASE_THEMES[themeName], ...MINDMAP_TOKENS[themeName] };
|
|
285
|
+
}
|
|
286
|
+
function resolveBaseTheme(name) {
|
|
287
|
+
return BASE_THEMES[name] ?? BASE_THEMES["default"];
|
|
288
|
+
}
|
|
289
|
+
function resolvePersonTheme(name) {
|
|
290
|
+
const themeName = name in BASE_THEMES ? name : "default";
|
|
291
|
+
return { ...BASE_THEMES[themeName], ...PERSON_TOKENS[themeName] };
|
|
292
|
+
}
|
|
293
|
+
function resolveBiologyTheme(name) {
|
|
294
|
+
const themeName = name in BASE_THEMES ? name : "default";
|
|
295
|
+
return { ...BASE_THEMES[themeName], ...BIOLOGY_TOKENS[themeName] };
|
|
296
|
+
}
|
|
297
|
+
function resolveFishboneTheme(name) {
|
|
298
|
+
return resolveBaseTheme(name);
|
|
299
|
+
}
|
|
300
|
+
function resolveVennTheme(name) {
|
|
301
|
+
const themeName = name in BASE_THEMES ? name : "default";
|
|
302
|
+
return { ...BASE_THEMES[themeName], ...VENN_TOKENS[themeName] };
|
|
303
|
+
}
|
|
304
|
+
var GENOGRAM_ALIASES = {
|
|
305
|
+
clinical: "monochrome",
|
|
306
|
+
colorful: "default",
|
|
307
|
+
mono: "monochrome",
|
|
308
|
+
bw: "monochrome"
|
|
309
|
+
};
|
|
310
|
+
function resolveGenogramTheme(name) {
|
|
311
|
+
const resolved = GENOGRAM_ALIASES[name] ?? name;
|
|
312
|
+
return resolvePersonTheme(resolved);
|
|
313
|
+
}
|
|
314
|
+
var FONT_SIZE = {
|
|
315
|
+
title: 16,
|
|
316
|
+
label: 12,
|
|
317
|
+
small: 9
|
|
318
|
+
};
|
|
319
|
+
var STROKE_WIDTH = {
|
|
320
|
+
thin: 1,
|
|
321
|
+
normal: 2,
|
|
322
|
+
thick: 3
|
|
323
|
+
};
|
|
324
|
+
function cssCustomProperties(theme) {
|
|
325
|
+
const t = theme ?? BASE_THEMES["default"];
|
|
326
|
+
return `
|
|
327
|
+
--schematex-bg: ${t.bg};
|
|
328
|
+
--schematex-text: ${t.text};
|
|
329
|
+
--schematex-text-muted: ${t.textMuted};
|
|
330
|
+
--schematex-stroke: ${t.stroke};
|
|
331
|
+
--schematex-fill: ${t.fill};
|
|
332
|
+
--schematex-fill-muted: ${t.fillMuted};
|
|
333
|
+
--schematex-accent: ${t.accent};
|
|
334
|
+
--schematex-positive: ${t.positive};
|
|
335
|
+
--schematex-negative: ${t.negative};
|
|
336
|
+
--schematex-neutral: ${t.neutral};
|
|
337
|
+
--schematex-warn: ${t.warn};
|
|
338
|
+
--schematex-font-title: ${FONT_SIZE.title}px;
|
|
339
|
+
--schematex-font-label: ${FONT_SIZE.label}px;
|
|
340
|
+
--schematex-font-small: ${FONT_SIZE.small}px;
|
|
341
|
+
--schematex-stroke-thin: ${STROKE_WIDTH.thin};
|
|
342
|
+
--schematex-stroke-normal: ${STROKE_WIDTH.normal};
|
|
343
|
+
--schematex-stroke-thick: ${STROKE_WIDTH.thick};`;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
exports.BASE_THEMES = BASE_THEMES;
|
|
347
|
+
exports.BIOLOGY_TOKENS = BIOLOGY_TOKENS;
|
|
348
|
+
exports.FONT_SIZE = FONT_SIZE;
|
|
349
|
+
exports.PERSON_TOKENS = PERSON_TOKENS;
|
|
350
|
+
exports.STROKE_WIDTH = STROKE_WIDTH;
|
|
351
|
+
exports.VENN_TOKENS = VENN_TOKENS;
|
|
352
|
+
exports.cssCustomProperties = cssCustomProperties;
|
|
353
|
+
exports.resolveBaseTheme = resolveBaseTheme;
|
|
354
|
+
exports.resolveBiologyTheme = resolveBiologyTheme;
|
|
355
|
+
exports.resolveFishboneTheme = resolveFishboneTheme;
|
|
356
|
+
exports.resolveFlowchartTheme = resolveFlowchartTheme;
|
|
357
|
+
exports.resolveGenogramTheme = resolveGenogramTheme;
|
|
358
|
+
exports.resolveIndustrialTheme = resolveIndustrialTheme;
|
|
359
|
+
exports.resolveMindmapTheme = resolveMindmapTheme;
|
|
360
|
+
exports.resolvePersonTheme = resolvePersonTheme;
|
|
361
|
+
exports.resolveVennTheme = resolveVennTheme;
|
|
362
|
+
//# sourceMappingURL=chunk-N7KOXOMX.cjs.map
|
|
363
|
+
//# sourceMappingURL=chunk-N7KOXOMX.cjs.map
|