schematex 0.3.4 → 0.4.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.
Files changed (178) hide show
  1. package/README.md +5 -4
  2. package/dist/ai/ai-sdk.cjs +20 -19
  3. package/dist/ai/ai-sdk.cjs.map +1 -1
  4. package/dist/ai/ai-sdk.d.cts +2 -2
  5. package/dist/ai/ai-sdk.d.ts +2 -2
  6. package/dist/ai/ai-sdk.js +15 -14
  7. package/dist/ai/ai-sdk.js.map +1 -1
  8. package/dist/ai/index.cjs +23 -22
  9. package/dist/ai/index.d.cts +2 -2
  10. package/dist/ai/index.d.ts +2 -2
  11. package/dist/ai/index.js +15 -14
  12. package/dist/{api-BuFilDQB.d.cts → api-BIj9t4Oc.d.cts} +1 -1
  13. package/dist/{api-BuFilDQB.d.ts → api-BIj9t4Oc.d.ts} +1 -1
  14. package/dist/browser.cjs +17 -16
  15. package/dist/browser.cjs.map +1 -1
  16. package/dist/browser.d.cts +2 -2
  17. package/dist/browser.d.ts +2 -2
  18. package/dist/browser.js +15 -14
  19. package/dist/browser.js.map +1 -1
  20. package/dist/{chunk-4THC4VUA.cjs → chunk-2Z543TC3.cjs} +7 -6
  21. package/dist/chunk-2Z543TC3.cjs.map +1 -0
  22. package/dist/{chunk-DNZV4V4R.js → chunk-3ADSXODY.js} +428 -10
  23. package/dist/chunk-3ADSXODY.js.map +1 -0
  24. package/dist/{chunk-ZKDL6Y3O.js → chunk-5FF2IT3C.js} +5 -4
  25. package/dist/chunk-5FF2IT3C.js.map +1 -0
  26. package/dist/chunk-5IKOLUWK.js +89 -0
  27. package/dist/chunk-5IKOLUWK.js.map +1 -0
  28. package/dist/{chunk-3RAVPXLN.js → chunk-6URNSB6G.js} +5 -4
  29. package/dist/chunk-6URNSB6G.js.map +1 -0
  30. package/dist/{chunk-J3Y2QDJR.cjs → chunk-7LNIBHO6.cjs} +430 -12
  31. package/dist/chunk-7LNIBHO6.cjs.map +1 -0
  32. package/dist/{chunk-MIKCKV27.cjs → chunk-BW4KGTV7.cjs} +65 -31
  33. package/dist/chunk-BW4KGTV7.cjs.map +1 -0
  34. package/dist/{chunk-6ULC3UHJ.cjs → chunk-E2EJRVWS.cjs} +43 -12
  35. package/dist/chunk-E2EJRVWS.cjs.map +1 -0
  36. package/dist/{chunk-5CTERELC.js → chunk-EPKIJEH7.js} +5 -4
  37. package/dist/chunk-EPKIJEH7.js.map +1 -0
  38. package/dist/{chunk-IFR34VTL.cjs → chunk-GZY4CJ23.cjs} +5 -4
  39. package/dist/chunk-GZY4CJ23.cjs.map +1 -0
  40. package/dist/{chunk-TWAC2IIS.js → chunk-I55HO32M.js} +5 -4
  41. package/dist/chunk-I55HO32M.js.map +1 -0
  42. package/dist/{chunk-5SKT7RYR.js → chunk-J7JWMQD5.js} +7 -6
  43. package/dist/chunk-J7JWMQD5.js.map +1 -0
  44. package/dist/{chunk-PWI4NFYR.js → chunk-JDBG5DU2.js} +5 -4
  45. package/dist/chunk-JDBG5DU2.js.map +1 -0
  46. package/dist/{chunk-VRE5VWDQ.js → chunk-KVP7AORH.js} +43 -12
  47. package/dist/chunk-KVP7AORH.js.map +1 -0
  48. package/dist/{chunk-IURM4ZWE.js → chunk-L3CTXXVZ.js} +65 -31
  49. package/dist/chunk-L3CTXXVZ.js.map +1 -0
  50. package/dist/chunk-NAGUZFXX.cjs +94 -0
  51. package/dist/chunk-NAGUZFXX.cjs.map +1 -0
  52. package/dist/{chunk-DBMZEZLF.cjs → chunk-O2HN4WRG.cjs} +6229 -51
  53. package/dist/chunk-O2HN4WRG.cjs.map +1 -0
  54. package/dist/{chunk-HKJRHXGZ.js → chunk-O4RHSAHR.js} +6217 -39
  55. package/dist/chunk-O4RHSAHR.js.map +1 -0
  56. package/dist/{chunk-H5JYZ5YS.cjs → chunk-OIZ4MYSF.cjs} +5 -4
  57. package/dist/chunk-OIZ4MYSF.cjs.map +1 -0
  58. package/dist/{chunk-T47A6XUK.cjs → chunk-QUKVGHN4.cjs} +5 -4
  59. package/dist/chunk-QUKVGHN4.cjs.map +1 -0
  60. package/dist/{chunk-V4OVUBLA.cjs → chunk-RYVV5UVI.cjs} +5 -4
  61. package/dist/chunk-RYVV5UVI.cjs.map +1 -0
  62. package/dist/{chunk-CQP5YHVK.cjs → chunk-S2KJRHDZ.cjs} +4 -5
  63. package/dist/chunk-S2KJRHDZ.cjs.map +1 -0
  64. package/dist/{chunk-5COUZTVA.cjs → chunk-ST5YRTTV.cjs} +5 -4
  65. package/dist/chunk-ST5YRTTV.cjs.map +1 -0
  66. package/dist/{chunk-CS67UBP3.cjs → chunk-SUIDD2C5.cjs} +5 -4
  67. package/dist/chunk-SUIDD2C5.cjs.map +1 -0
  68. package/dist/{chunk-DHKKDIVT.js → chunk-SZK376QB.js} +5 -4
  69. package/dist/chunk-SZK376QB.js.map +1 -0
  70. package/dist/{chunk-WIFGBWET.cjs → chunk-UUBNQV2T.cjs} +4 -5
  71. package/dist/chunk-UUBNQV2T.cjs.map +1 -0
  72. package/dist/{chunk-I6VEXSUK.js → chunk-VDSYMSUY.js} +4 -5
  73. package/dist/chunk-VDSYMSUY.js.map +1 -0
  74. package/dist/{chunk-XSNNGYXZ.cjs → chunk-YLEVMOK2.cjs} +22 -8
  75. package/dist/chunk-YLEVMOK2.cjs.map +1 -0
  76. package/dist/{chunk-ZQZNWAHH.js → chunk-ZX74KJPM.js} +4 -5
  77. package/dist/chunk-ZX74KJPM.js.map +1 -0
  78. package/dist/{chunk-IZMAZOQI.js → chunk-ZYRCPSBU.js} +22 -8
  79. package/dist/chunk-ZYRCPSBU.js.map +1 -0
  80. package/dist/diagrams/blockdiagram/index.cjs +6 -5
  81. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  82. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  83. package/dist/diagrams/blockdiagram/index.js +2 -1
  84. package/dist/diagrams/circuit/index.cjs +8 -7
  85. package/dist/diagrams/circuit/index.d.cts +1 -1
  86. package/dist/diagrams/circuit/index.d.ts +1 -1
  87. package/dist/diagrams/circuit/index.js +2 -1
  88. package/dist/diagrams/ecomap/index.d.cts +1 -1
  89. package/dist/diagrams/ecomap/index.d.ts +1 -1
  90. package/dist/diagrams/entity/index.cjs +6 -5
  91. package/dist/diagrams/entity/index.d.cts +1 -1
  92. package/dist/diagrams/entity/index.d.ts +1 -1
  93. package/dist/diagrams/entity/index.js +2 -1
  94. package/dist/diagrams/fishbone/index.d.cts +1 -1
  95. package/dist/diagrams/fishbone/index.d.ts +1 -1
  96. package/dist/diagrams/flowchart/index.cjs +7 -7
  97. package/dist/diagrams/flowchart/index.d.cts +2 -2
  98. package/dist/diagrams/flowchart/index.d.ts +2 -2
  99. package/dist/diagrams/flowchart/index.js +1 -1
  100. package/dist/diagrams/genogram/index.d.cts +1 -1
  101. package/dist/diagrams/genogram/index.d.ts +1 -1
  102. package/dist/diagrams/ladder/index.cjs +6 -5
  103. package/dist/diagrams/ladder/index.d.cts +1 -1
  104. package/dist/diagrams/ladder/index.d.ts +1 -1
  105. package/dist/diagrams/ladder/index.js +2 -1
  106. package/dist/diagrams/logic/index.cjs +6 -5
  107. package/dist/diagrams/logic/index.d.cts +1 -1
  108. package/dist/diagrams/logic/index.d.ts +1 -1
  109. package/dist/diagrams/logic/index.js +2 -1
  110. package/dist/diagrams/orgchart/index.cjs +7 -6
  111. package/dist/diagrams/orgchart/index.d.cts +1 -1
  112. package/dist/diagrams/orgchart/index.d.ts +1 -1
  113. package/dist/diagrams/orgchart/index.js +2 -1
  114. package/dist/diagrams/pedigree/index.d.cts +1 -1
  115. package/dist/diagrams/pedigree/index.d.ts +1 -1
  116. package/dist/diagrams/phylo/index.cjs +7 -6
  117. package/dist/diagrams/phylo/index.d.cts +1 -1
  118. package/dist/diagrams/phylo/index.d.ts +1 -1
  119. package/dist/diagrams/phylo/index.js +2 -1
  120. package/dist/diagrams/sld/index.cjs +6 -5
  121. package/dist/diagrams/sld/index.d.cts +1 -1
  122. package/dist/diagrams/sld/index.d.ts +1 -1
  123. package/dist/diagrams/sld/index.js +2 -1
  124. package/dist/diagrams/sociogram/index.cjs +6 -5
  125. package/dist/diagrams/sociogram/index.d.cts +1 -1
  126. package/dist/diagrams/sociogram/index.d.ts +1 -1
  127. package/dist/diagrams/sociogram/index.js +2 -1
  128. package/dist/diagrams/timing/index.cjs +5 -4
  129. package/dist/diagrams/timing/index.d.cts +1 -1
  130. package/dist/diagrams/timing/index.d.ts +1 -1
  131. package/dist/diagrams/timing/index.js +2 -1
  132. package/dist/diagrams/venn/index.cjs +9 -8
  133. package/dist/diagrams/venn/index.d.cts +1 -1
  134. package/dist/diagrams/venn/index.d.ts +1 -1
  135. package/dist/diagrams/venn/index.js +2 -1
  136. package/dist/{index-D3u6vcA4.d.ts → index-CGK0xVls.d.ts} +3 -3
  137. package/dist/{index-bdfj6FpQ.d.cts → index-OW8eDrKj.d.cts} +3 -3
  138. package/dist/index.cjs +32 -31
  139. package/dist/index.d.cts +3 -3
  140. package/dist/index.d.ts +3 -3
  141. package/dist/index.js +14 -13
  142. package/dist/react.cjs +15 -14
  143. package/dist/react.cjs.map +1 -1
  144. package/dist/react.d.cts +1 -1
  145. package/dist/react.d.ts +1 -1
  146. package/dist/react.js +14 -13
  147. package/dist/react.js.map +1 -1
  148. package/dist/{types-DnU2UlWz.d.ts → types-Gkyab1sL.d.cts} +5 -1
  149. package/dist/{types-DnU2UlWz.d.cts → types-Gkyab1sL.d.ts} +5 -1
  150. package/package.json +2 -2
  151. package/dist/chunk-3RAVPXLN.js.map +0 -1
  152. package/dist/chunk-4THC4VUA.cjs.map +0 -1
  153. package/dist/chunk-5COUZTVA.cjs.map +0 -1
  154. package/dist/chunk-5CTERELC.js.map +0 -1
  155. package/dist/chunk-5SKT7RYR.js.map +0 -1
  156. package/dist/chunk-6ULC3UHJ.cjs.map +0 -1
  157. package/dist/chunk-CQP5YHVK.cjs.map +0 -1
  158. package/dist/chunk-CS67UBP3.cjs.map +0 -1
  159. package/dist/chunk-DBMZEZLF.cjs.map +0 -1
  160. package/dist/chunk-DHKKDIVT.js.map +0 -1
  161. package/dist/chunk-DNZV4V4R.js.map +0 -1
  162. package/dist/chunk-H5JYZ5YS.cjs.map +0 -1
  163. package/dist/chunk-HKJRHXGZ.js.map +0 -1
  164. package/dist/chunk-I6VEXSUK.js.map +0 -1
  165. package/dist/chunk-IFR34VTL.cjs.map +0 -1
  166. package/dist/chunk-IURM4ZWE.js.map +0 -1
  167. package/dist/chunk-IZMAZOQI.js.map +0 -1
  168. package/dist/chunk-J3Y2QDJR.cjs.map +0 -1
  169. package/dist/chunk-MIKCKV27.cjs.map +0 -1
  170. package/dist/chunk-PWI4NFYR.js.map +0 -1
  171. package/dist/chunk-T47A6XUK.cjs.map +0 -1
  172. package/dist/chunk-TWAC2IIS.js.map +0 -1
  173. package/dist/chunk-V4OVUBLA.cjs.map +0 -1
  174. package/dist/chunk-VRE5VWDQ.js.map +0 -1
  175. package/dist/chunk-WIFGBWET.cjs.map +0 -1
  176. package/dist/chunk-XSNNGYXZ.cjs.map +0 -1
  177. package/dist/chunk-ZKDL6Y3O.js.map +0 -1
  178. package/dist/chunk-ZQZNWAHH.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/venn/parser.ts","../src/diagrams/venn/geometry.ts","../src/diagrams/venn/labels.ts","../src/diagrams/venn/layout.ts","../src/diagrams/venn/renderer.ts","../src/diagrams/venn/index.ts"],"names":["text","title","el","circle","resolveVennTheme","group","path","desc","svgRoot"],"mappings":"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","file":"chunk-MIKCKV27.cjs","sourcesContent":["/**\n * Venn / Euler DSL parser (hand-written recursive descent).\n *\n * Accepts four DSL modes (see 15-VENN-STANDARD §5):\n * 1. Declarative set + intersection: `A & B : 42`\n * 2. Enumeration shorthand: `A = { 1, 2, 3 }`\n * 3. Region-labeled: `region A & B : \"...\"`\n * 4. Euler-explicit: `dogs subset mammals`\n *\n * All four can be mixed within one document (except enumeration sets imply\n * automatic intersections and shouldn't be combined with explicit `A & B :`).\n */\n\nimport type {\n VennAST,\n VennConfig,\n VennEulerRelation,\n VennEulerRelationType,\n VennRegion,\n VennRegionValue,\n VennSet,\n} from \"../../core/types\";\n\nexport class VennParseError extends Error {\n constructor(message: string, public readonly line?: number) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"VennParseError\";\n }\n}\n\nconst DEFAULT_CONFIG: VennConfig = {\n mode: \"auto\",\n proportional: false,\n palette: \"default\",\n blendMode: \"multiply\",\n showCounts: \"auto\",\n showPercent: false,\n};\n\nfunction stripComment(line: string): string {\n // Comments start at first unquoted '#'.\n let inQuote = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"') inQuote = !inQuote;\n else if (ch === \"#\" && !inQuote) return line.slice(0, i);\n }\n return line;\n}\n\nfunction stripQuotes(s: string): string {\n const t = s.trim();\n if (t.length >= 2 && t.startsWith('\"') && t.endsWith('\"')) return t.slice(1, -1);\n return t;\n}\n\nfunction parseConfigProps(text: string): Record<string, string> {\n // Split on commas that are not inside quotes or brackets.\n const out: Record<string, string> = {};\n let depth = 0;\n let inQuote = false;\n let buf = \"\";\n const parts: string[] = [];\n for (const ch of text) {\n if (ch === '\"') inQuote = !inQuote;\n else if (!inQuote && (ch === \"[\" || ch === \"(\" || ch === \"{\")) depth++;\n else if (!inQuote && (ch === \"]\" || ch === \")\" || ch === \"}\")) depth--;\n if (ch === \",\" && depth === 0 && !inQuote) {\n parts.push(buf);\n buf = \"\";\n } else {\n buf += ch;\n }\n }\n if (buf.trim()) parts.push(buf);\n for (const p of parts) {\n const idx = p.indexOf(\":\");\n if (idx < 0) continue;\n const k = p.slice(0, idx).trim();\n const v = p.slice(idx + 1).trim();\n out[k] = stripQuotes(v);\n }\n return out;\n}\n\nfunction parseTitleAndProps(rest: string): { title?: string; props: Record<string, string> } {\n // Matches: \"title\" [k: v, k2: v2] or \"title\" or [k: v]\n const trimmed = rest.trim();\n let i = 0;\n let title: string | undefined;\n if (trimmed.startsWith('\"')) {\n const end = trimmed.indexOf('\"', 1);\n if (end < 0) throw new VennParseError(\"unterminated quoted title\");\n title = trimmed.slice(1, end);\n i = end + 1;\n }\n const tail = trimmed.slice(i).trim();\n let props: Record<string, string> = {};\n if (tail.startsWith(\"[\") && tail.endsWith(\"]\")) {\n props = parseConfigProps(tail.slice(1, -1));\n }\n return { title, props };\n}\n\nfunction parseValue(raw: string): VennRegionValue {\n const t = raw.trim();\n if (!t) return { kind: \"none\" };\n // List: [ ... ]\n if (t.startsWith(\"[\") && t.endsWith(\"]\")) {\n const inner = t.slice(1, -1).trim();\n if (!inner) return { kind: \"list\", value: [] };\n const items = splitTopLevelCommas(inner).map((x) => stripQuotes(x.trim()));\n return { kind: \"list\", value: items };\n }\n // Percentage\n if (/^-?\\d+(\\.\\d+)?%$/.test(t)) {\n return { kind: \"percent\", value: parseFloat(t.slice(0, -1)) };\n }\n // Integer\n if (/^-?\\d+$/.test(t)) {\n return { kind: \"integer\", value: parseInt(t, 10) };\n }\n // Quoted string\n if (t.startsWith('\"') && t.endsWith('\"')) {\n return { kind: \"text\", value: t.slice(1, -1) };\n }\n // Bare word / text\n return { kind: \"text\", value: t };\n}\n\nfunction splitTopLevelCommas(s: string): string[] {\n const out: string[] = [];\n let buf = \"\";\n let depth = 0;\n let inQuote = false;\n for (const ch of s) {\n if (ch === '\"') inQuote = !inQuote;\n else if (!inQuote && (ch === \"{\" || ch === \"[\" || ch === \"(\")) depth++;\n else if (!inQuote && (ch === \"}\" || ch === \"]\" || ch === \")\")) depth--;\n if (ch === \",\" && depth === 0 && !inQuote) {\n out.push(buf);\n buf = \"\";\n } else {\n buf += ch;\n }\n }\n if (buf.length > 0) out.push(buf);\n return out;\n}\n\nconst EULER_KEYWORDS: Record<string, VennEulerRelationType> = {\n subset: \"subset\",\n disjoint: \"disjoint\",\n overlap: \"overlap\",\n};\n\nfunction parseRegionKey(\n text: string,\n knownSets: Set<string>\n): { sets: string[]; only: boolean } {\n const trimmed = text.trim();\n // \"A only\"\n const onlyMatch = /^([A-Za-z][\\w-]*)\\s+only$/i.exec(trimmed);\n if (onlyMatch && onlyMatch[1]) {\n const id = onlyMatch[1];\n if (!knownSets.has(id)) {\n throw new VennParseError(`unknown set id \"${id}\" in region key`);\n }\n return { sets: [id], only: true };\n }\n // \"A & B & C\"\n const parts = trimmed.split(\"&\").map((p) => p.trim()).filter(Boolean);\n if (parts.length === 0) {\n throw new VennParseError(`empty region key: \"${text}\"`);\n }\n for (const p of parts) {\n if (!/^[A-Za-z][\\w-]*$/.test(p)) {\n throw new VennParseError(`invalid set ref \"${p}\" in region key`);\n }\n if (!knownSets.has(p)) {\n throw new VennParseError(`unknown set id \"${p}\" in region key`);\n }\n }\n // Canonicalise by keeping declaration order (caller normalises later).\n return { sets: [...parts], only: false };\n}\n\nexport function parseVennDSL(input: string): VennAST {\n const lines = input.split(/\\r?\\n/);\n let title: string | undefined;\n let headerSeen = false;\n const config: VennConfig = { ...DEFAULT_CONFIG };\n const sets: VennSet[] = [];\n const setsById = new Map<string, VennSet>();\n const regions: VennRegion[] = [];\n const relations: VennEulerRelation[] = [];\n const metadata: Record<string, string> = {};\n\n const knownSetIds = new Set<string>();\n\n const applyConfigProps = (props: Record<string, string>): void => {\n for (const [k, v] of Object.entries(props)) {\n applyConfig(k, v, config, metadata);\n }\n };\n\n for (let i = 0; i < lines.length; i++) {\n const raw = stripComment(lines[i] ?? \"\").trim();\n if (!raw) continue;\n const lineNo = i + 1;\n\n // Header: `venn \"Title\"` or `venn: \"Title\"` (optionally with [props])\n if (!headerSeen && /^venn\\b/i.test(raw)) {\n const rest = raw.replace(/^venn\\s*:?\\s*/i, \"\");\n const { title: t, props } = parseTitleAndProps(rest);\n if (t !== undefined) title = t;\n applyConfigProps(props);\n headerSeen = true;\n continue;\n }\n\n // config: key = value\n const configMatch = /^config\\s*:\\s*([a-zA-Z_]+)\\s*=\\s*(.+)$/.exec(raw);\n if (configMatch && configMatch[1] && configMatch[2]) {\n applyConfig(configMatch[1], configMatch[2].trim(), config, metadata);\n continue;\n }\n\n // layout <venn|euler|auto>\n const layoutMatch = /^layout\\s+(venn|euler|auto)\\s*$/i.exec(raw);\n if (layoutMatch && layoutMatch[1]) {\n config.mode = layoutMatch[1].toLowerCase() as VennConfig[\"mode\"];\n continue;\n }\n\n // set <id> \"label\" [props?]\n const setMatch = /^set\\s+([A-Za-z][\\w-]*)\\s+(.+)$/i.exec(raw);\n if (setMatch && setMatch[1] && setMatch[2]) {\n const id = setMatch[1];\n const rest = setMatch[2];\n const { title: label, props } = parseTitleAndProps(rest);\n if (setsById.has(id)) {\n throw new VennParseError(`duplicate set id \"${id}\"`, lineNo);\n }\n const color = props[\"color\"] ?? props[\"fill\"];\n const setObj: VennSet = { id, label: label ?? id, color };\n sets.push(setObj);\n setsById.set(id, setObj);\n knownSetIds.add(id);\n continue;\n }\n\n // Enumeration: ID = { ... }\n const enumMatch = /^([A-Za-z][\\w-]*)\\s*=\\s*\\{([^}]*)\\}\\s*$/.exec(raw);\n if (enumMatch && enumMatch[1] !== undefined && enumMatch[2] !== undefined) {\n const id = enumMatch[1];\n const items = splitTopLevelCommas(enumMatch[2])\n .map((x) => stripQuotes(x.trim()))\n .filter((x) => x.length > 0);\n let setObj = setsById.get(id);\n if (!setObj) {\n setObj = { id, label: id, elements: items };\n sets.push(setObj);\n setsById.set(id, setObj);\n knownSetIds.add(id);\n } else {\n setObj.elements = items;\n }\n continue;\n }\n\n // Euler relation: ID subset ID | ID in ID | ID disjoint ID | ID overlap ID\n const eulerMatch = /^([A-Za-z][\\w-]*)\\s+(subset|in|disjoint|overlap)\\s+([A-Za-z][\\w-]*)\\s*$/i.exec(\n raw\n );\n if (eulerMatch && eulerMatch[1] && eulerMatch[2] && eulerMatch[3]) {\n const from = eulerMatch[1];\n const relRaw = eulerMatch[2].toLowerCase();\n const rel = relRaw === \"in\" ? \"subset\" : relRaw;\n const to = eulerMatch[3];\n if (!knownSetIds.has(from)) {\n throw new VennParseError(`unknown set \"${from}\" in relation`, lineNo);\n }\n if (!knownSetIds.has(to)) {\n throw new VennParseError(`unknown set \"${to}\" in relation`, lineNo);\n }\n const relType = EULER_KEYWORDS[rel];\n if (!relType) {\n throw new VennParseError(`unknown relation \"${rel}\"`, lineNo);\n }\n relations.push({ from, to, type: relType });\n continue;\n }\n\n // Region syntax: [region ]<key> : <value> [props?]\n let regionBody = raw;\n if (/^region\\s+/i.test(regionBody)) {\n regionBody = regionBody.replace(/^region\\s+/i, \"\");\n }\n const colonIdx = regionBody.indexOf(\":\");\n if (colonIdx > 0) {\n const keyPart = regionBody.slice(0, colonIdx);\n const valuePart = regionBody.slice(colonIdx + 1).trim();\n try {\n const { sets: regionSets, only } = parseRegionKey(keyPart, knownSetIds);\n const value = parseValue(valuePart);\n regions.push({ sets: regionSets, only, value });\n continue;\n } catch (e) {\n if (e instanceof VennParseError) {\n throw new VennParseError(e.message, lineNo);\n }\n throw e;\n }\n }\n\n throw new VennParseError(`could not parse line: \"${raw}\"`, lineNo);\n }\n\n if (!headerSeen && sets.length === 0) {\n throw new VennParseError(\"empty or missing 'venn' header\");\n }\n\n // Auto-derive regions for enumeration sets when no explicit regions were given.\n const hasEnumeration = sets.some((s) => s.elements !== undefined);\n if (hasEnumeration && regions.length === 0) {\n regions.push(...deriveRegionsFromEnumeration(sets));\n }\n\n const ast: VennAST = {\n type: \"venn\",\n ...(title !== undefined ? { title } : {}),\n sets,\n regions,\n relations,\n config,\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n return ast;\n}\n\nfunction applyConfig(\n key: string,\n rawValue: string,\n config: VennConfig,\n metadata: Record<string, string>\n): void {\n const value = rawValue.trim().toLowerCase();\n switch (key) {\n case \"diagram\":\n if (value === \"venn\" || value === \"euler\" || value === \"auto\") {\n config.mode = value;\n }\n return;\n case \"proportional\":\n config.proportional = value === \"true\" || value === \"yes\" || value === \"1\";\n return;\n case \"palette\":\n if (value === \"default\" || value === \"brand\" || value === \"monochrome\") {\n config.palette = value;\n }\n return;\n case \"blendMode\":\n case \"blendmode\":\n if (value === \"multiply\" || value === \"screen\" || value === \"none\") {\n config.blendMode = value;\n }\n return;\n case \"showCounts\":\n case \"showcounts\":\n config.showCounts =\n value === \"true\" ? true : value === \"false\" ? false : \"auto\";\n return;\n case \"showPercent\":\n case \"showpercent\":\n config.showPercent = value === \"true\" || value === \"yes\";\n return;\n default:\n metadata[key] = rawValue.trim();\n }\n}\n\n/**\n * Build the full set of non-empty regions from enumeration-style sets by\n * computing every possible intersection of actual elements.\n */\nfunction deriveRegionsFromEnumeration(sets: VennSet[]): VennRegion[] {\n const n = sets.length;\n if (n === 0) return [];\n const regions: VennRegion[] = [];\n const total = 1 << n;\n for (let mask = 1; mask < total; mask++) {\n const included: number[] = [];\n const excluded: number[] = [];\n for (let i = 0; i < n; i++) {\n if ((mask >> i) & 1) included.push(i);\n else excluded.push(i);\n }\n const firstIdx = included[0];\n if (firstIdx === undefined) continue;\n const firstSetObj = sets[firstIdx];\n if (!firstSetObj) continue;\n const firstSet = firstSetObj.elements ?? [];\n const members = firstSet.filter((el) => {\n for (const idx of included) {\n const s = sets[idx];\n const list = s?.elements ?? [];\n if (!list.includes(el)) return false;\n }\n for (const idx of excluded) {\n const s = sets[idx];\n const list = s?.elements ?? [];\n if (list.includes(el)) return false;\n }\n return true;\n });\n if (members.length === 0) continue;\n const setIds: string[] = [];\n for (const idx of included) {\n const s = sets[idx];\n if (s) setIds.push(s.id);\n }\n regions.push({\n sets: setIds,\n only: excluded.length > 0 && included.length < n,\n value: { kind: \"list\", value: members },\n });\n }\n return regions;\n}\n","/**\n * Pure geometry helpers for Venn / Euler diagrams.\n *\n * Zero dependencies; analytic formulas where possible plus Monte Carlo\n * integration used as a fallback for 3-circle region areas.\n *\n * All functions here are side-effect-free and tested in geometry.test.ts.\n */\n\nimport type { VennCircle, VennEllipse } from \"../../core/types\";\n\n// ─── Two-circle helpers ──────────────────────────────────────\n\n/**\n * Lens area (intersection) of two circles separated by distance d.\n * Returns:\n * - 0 if circles are disjoint (d >= rA + rB)\n * - π·min(rA,rB)² if one circle contains the other (d <= |rA-rB|)\n * - otherwise the analytic two-circle lens area.\n */\nexport function twoCircleIntersectionArea(rA: number, rB: number, d: number): number {\n if (rA <= 0 || rB <= 0) return 0;\n if (d >= rA + rB) return 0;\n const rMin = Math.min(rA, rB);\n if (d <= Math.abs(rA - rB)) return Math.PI * rMin * rMin;\n\n const aTerm = (d * d + rA * rA - rB * rB) / (2 * d * rA);\n const bTerm = (d * d + rB * rB - rA * rA) / (2 * d * rB);\n // Clamp to avoid NaN from float slop.\n const a = Math.max(-1, Math.min(1, aTerm));\n const b = Math.max(-1, Math.min(1, bTerm));\n\n const kSq =\n (-d + rA + rB) * (d + rA - rB) * (d - rA + rB) * (d + rA + rB);\n const k = kSq > 0 ? Math.sqrt(kSq) : 0;\n\n return rA * rA * Math.acos(a) + rB * rB * Math.acos(b) - 0.5 * k;\n}\n\n/**\n * Newton-Raphson invert: find the distance d such that\n * `twoCircleIntersectionArea(rA, rB, d) == target`.\n * Returns a d in [|rA-rB|, rA+rB]. If target >= min-disc area, returns |rA-rB|.\n * If target <= 0, returns rA+rB.\n */\nexport function solveTwoCircleDistance(\n rA: number,\n rB: number,\n target: number\n): number {\n const rMin = Math.min(rA, rB);\n const maxArea = Math.PI * rMin * rMin;\n if (target >= maxArea) return Math.abs(rA - rB);\n if (target <= 0) return rA + rB;\n\n let lo = Math.abs(rA - rB);\n let hi = rA + rB;\n // Bisection — robust, ~40 iterations gets 1e-12 precision.\n for (let i = 0; i < 60; i++) {\n const mid = 0.5 * (lo + hi);\n const a = twoCircleIntersectionArea(rA, rB, mid);\n // area is monotone decreasing in d\n if (a > target) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return 0.5 * (lo + hi);\n}\n\n// ─── Three-circle classic coordinates ───────────────────────\n\n/**\n * Three circle canonical layout — circles of radius r, centers on an equilateral\n * triangle whose edge length equals the center offset `o`. With o = r·0.6 the\n * central triple region is ~r·0.15 wide (VennDiagram R convention).\n */\nexport function threeCircleClassic(\n cx: number,\n cy: number,\n r: number,\n offsetScale: number = 0.6\n): [VennCircle, VennCircle, VennCircle] {\n const o = r * offsetScale;\n const cos30 = Math.cos(Math.PI / 6);\n const sin30 = Math.sin(Math.PI / 6);\n return [\n { id: \"0\", cx: cx - o * cos30, cy: cy + o * sin30, r },\n { id: \"1\", cx: cx + o * cos30, cy: cy + o * sin30, r },\n { id: \"2\", cx, cy: cy - o, r },\n ];\n}\n\n// ─── Four-ellipse standard arrangement ──────────────────────\n\n/**\n * Classic Venn 4-ellipse arrangement following Ruskey & Weston 2005.\n * Returns 4 congruent ellipses arranged symmetrically so all 15 non-empty\n * intersection regions exist.\n *\n * Layout uses rotation angles at -65°, -35°, 35°, 65° from the horizontal,\n * with a modest vertical bias to spread overlaps readably.\n */\nexport function fourEllipseStandard(\n cx: number,\n cy: number,\n a: number,\n b: number\n): [VennEllipse, VennEllipse, VennEllipse, VennEllipse] {\n // Based on Venn's original 1881 construction; coords ported from venn.js Venn4.\n // Offsets are a fraction of the semi-major axis. These constants produce all\n // 15 regions for the standard a:b ≈ 2:1 aspect.\n const dx = 0.18 * a;\n const dy = 0.1 * b;\n\n return [\n { id: \"0\", cx: cx - dx, cy: cy - dy, rx: a, ry: b, rotation: -65 },\n { id: \"1\", cx: cx - 0.6 * dx, cy: cy - dy, rx: a, ry: b, rotation: -35 },\n { id: \"2\", cx: cx + 0.6 * dx, cy: cy - dy, rx: a, ry: b, rotation: 35 },\n { id: \"3\", cx: cx + dx, cy: cy - dy, rx: a, ry: b, rotation: 65 },\n ];\n}\n\n// ─── Point-in-shape tests ────────────────────────────────────\n\nexport function pointInCircle(c: VennCircle, x: number, y: number): boolean {\n const dx = x - c.cx;\n const dy = y - c.cy;\n return dx * dx + dy * dy <= c.r * c.r;\n}\n\nexport function pointInEllipse(e: VennEllipse, x: number, y: number): boolean {\n const dx = x - e.cx;\n const dy = y - e.cy;\n const rad = (e.rotation * Math.PI) / 180;\n const cos = Math.cos(-rad);\n const sin = Math.sin(-rad);\n // Rotate (dx, dy) back into the unrotated frame.\n const rx = dx * cos - dy * sin;\n const ry = dx * sin + dy * cos;\n return (rx * rx) / (e.rx * e.rx) + (ry * ry) / (e.ry * e.ry) <= 1;\n}\n\nexport interface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n/** Axis-aligned bounding box of a circle. */\nexport function circleBBox(c: VennCircle): Box {\n return { x: c.cx - c.r, y: c.cy - c.r, w: 2 * c.r, h: 2 * c.r };\n}\n\n/** Axis-aligned bounding box of an (optionally rotated) ellipse. */\nexport function ellipseBBox(e: VennEllipse): Box {\n const rad = (e.rotation * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const ux = e.rx * cos;\n const uy = e.rx * sin;\n const vx = e.ry * -sin;\n const vy = e.ry * cos;\n const hx = Math.sqrt(ux * ux + vx * vx);\n const hy = Math.sqrt(uy * uy + vy * vy);\n return { x: e.cx - hx, y: e.cy - hy, w: 2 * hx, h: 2 * hy };\n}\n\nexport function unionBBox(boxes: Box[]): Box {\n if (boxes.length === 0) return { x: 0, y: 0, w: 0, h: 0 };\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const b of boxes) {\n if (b.x < minX) minX = b.x;\n if (b.y < minY) minY = b.y;\n if (b.x + b.w > maxX) maxX = b.x + b.w;\n if (b.y + b.h > maxY) maxY = b.y + b.h;\n }\n return { x: minX, y: minY, w: maxX - minX, h: maxY - minY };\n}\n\n// ─── Deterministic sampling-based region centroid / area ─────\n\n/**\n * Rough pseudorandom generator seeded for deterministic tests. Mulberry32.\n */\nexport function mulberry32(seed: number): () => number {\n let a = seed >>> 0;\n return function (): number {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport interface CentroidResult {\n /** Centroid x. NaN when area = 0. */\n cx: number;\n /** Centroid y. NaN when area = 0. */\n cy: number;\n /** Approximate area (square pixels). */\n area: number;\n /** Samples that landed inside the region (for leader fallback). */\n interior: Array<{ x: number; y: number }>;\n}\n\n/**\n * Monte Carlo centroid + area over a region defined by \"must be inside these\n * shapes AND not inside those shapes\". Uniform sampling inside `bounds`.\n *\n * @param bounds Axis-aligned sampling rectangle (must cover the region).\n * @param include Shapes the sample must be inside.\n * @param exclude Shapes the sample must be outside.\n * @param nSamples Sample count (default 2000 is plenty for label placement).\n */\nexport function regionCentroid(\n bounds: Box,\n include: Array<{ inside: (x: number, y: number) => boolean }>,\n exclude: Array<{ inside: (x: number, y: number) => boolean }>,\n nSamples: number = 2000,\n seed: number = 0xc0ffee\n): CentroidResult {\n const rand = mulberry32(seed);\n let hits = 0;\n let sumX = 0;\n let sumY = 0;\n const interior: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < nSamples; i++) {\n const x = bounds.x + rand() * bounds.w;\n const y = bounds.y + rand() * bounds.h;\n let ok = true;\n for (const s of include) {\n if (!s.inside(x, y)) {\n ok = false;\n break;\n }\n }\n if (!ok) continue;\n for (const s of exclude) {\n if (s.inside(x, y)) {\n ok = false;\n break;\n }\n }\n if (!ok) continue;\n hits++;\n sumX += x;\n sumY += y;\n if (interior.length < 256) interior.push({ x, y });\n }\n const area = (hits / nSamples) * bounds.w * bounds.h;\n if (hits === 0) return { cx: NaN, cy: NaN, area: 0, interior };\n return { cx: sumX / hits, cy: sumY / hits, area, interior };\n}\n","/**\n * Label placement for Venn / Euler diagrams.\n *\n * Pipeline per region:\n * 1. Compute axis-aligned union bbox of included shapes.\n * 2. Monte-Carlo sample to estimate centroid + area of the region\n * (region = (∀ inShape in included) AND (∀ notIn in excluded)).\n * 3. If area < MIN_AREA → externalise the label with a leader line\n * that starts at the centroid and ends just outside the union bbox.\n */\n\nimport type {\n VennAST,\n VennCircle,\n VennEllipse,\n VennLabelPosition,\n VennRegion,\n VennShape,\n} from \"../../core/types\";\nimport {\n circleBBox,\n ellipseBBox,\n pointInCircle,\n pointInEllipse,\n regionCentroid,\n unionBBox,\n type Box,\n} from \"./geometry\";\nimport { formatRegionValue } from \"./layout\";\n\n/** Minimum interior area (sq px) for an inside label. */\nconst MIN_AREA = 400;\n/** For n ≥ 4 we require a more generous interior area to suppress mid-canvas stacking. */\nconst MIN_AREA_DENSE = 900;\n/** Approximate label bbox padding for collision tests. */\nconst LABEL_H = 14;\nconst CHAR_W = 6.2;\n/** Minimum gap (px) between any two interior label bboxes. */\nconst LABEL_GAP = 4;\n\nfunction labelWidth(text: string): number {\n return text.length * CHAR_W + 8;\n}\n\nfunction bboxesOverlap(\n ax: number,\n ay: number,\n aw: number,\n ah: number,\n bx: number,\n by: number,\n bw: number,\n bh: number\n): boolean {\n return (\n ax < bx + bw + LABEL_GAP &&\n ax + aw + LABEL_GAP > bx &&\n ay < by + bh + LABEL_GAP &&\n ay + ah + LABEL_GAP > by\n );\n}\n\ninterface ShapeEntry {\n id: string;\n shape: VennShape;\n bbox: Box;\n inside: (x: number, y: number) => boolean;\n}\n\nfunction makeShapeEntry(shape: VennShape): ShapeEntry {\n if (shape.kind === \"circle\") {\n const c: VennCircle = shape;\n return {\n id: shape.id,\n shape,\n bbox: circleBBox(c),\n inside: (x, y) => pointInCircle(c, x, y),\n };\n }\n const e: VennEllipse = shape;\n return {\n id: shape.id,\n shape,\n bbox: ellipseBBox(e),\n inside: (x, y) => pointInEllipse(e, x, y),\n };\n}\n\ninterface Candidate {\n region: VennRegion;\n text: string;\n cx: number;\n cy: number;\n area: number;\n interior: readonly { x: number; y: number }[];\n width: number;\n}\n\nexport function placeLabels(ast: VennAST, shapes: VennShape[]): VennLabelPosition[] {\n const entries = shapes.map(makeShapeEntry);\n const byId = new Map<string, ShapeEntry>();\n for (const e of entries) byId.set(e.id, e);\n\n const canvasBounds = unionBBox(entries.map((e) => e.bbox));\n const canvasCx = canvasBounds.x + canvasBounds.w / 2;\n const canvasCy = canvasBounds.y + canvasBounds.h / 2;\n // Dense: n ≥ 4 sets → central regions get too crowded; raise internal gate.\n const dense = shapes.length >= 4;\n const minArea = dense ? MIN_AREA_DENSE : MIN_AREA;\n\n // ── Pass 1: compute centroid + area for every region ──────────\n const candidates: Candidate[] = [];\n ast.regions.forEach((region, regionIdx) => {\n const included = region.sets.map((id) => byId.get(id)).filter(isDefined);\n if (included.length === 0) return;\n const excluded = region.only\n ? entries.filter((e) => !region.sets.includes(e.id))\n : [];\n const bounds = unionBBox(included.map((e) => e.bbox));\n const seed = 0x1337 + regionIdx * 0x9e3779b9;\n const { cx, cy, area, interior } = regionCentroid(\n bounds,\n included,\n excluded,\n 1500,\n seed\n );\n const text = regionLabelText(region);\n if (!text) return;\n if (!Number.isFinite(cx) || !Number.isFinite(cy) || area === 0) return;\n candidates.push({\n region,\n text,\n cx,\n cy,\n area,\n interior,\n width: labelWidth(text),\n });\n });\n\n // ── Pass 2: decide internal vs external (area + collision) ────\n // Sort by area desc so bigger regions claim interior slots first.\n const byAreaDesc = [...candidates].sort((a, b) => b.area - a.area);\n const placedInternal: { c: Candidate; x: number; y: number }[] = [];\n const externalQueue: Candidate[] = [];\n\n for (const c of byAreaDesc) {\n if (c.area < minArea) {\n externalQueue.push(c);\n continue;\n }\n // Check collision against already-placed internal labels.\n const x = c.cx - c.width / 2;\n const y = c.cy - LABEL_H / 2;\n const collides = placedInternal.some(({ c: p, x: px, y: py }) =>\n bboxesOverlap(x, y, c.width, LABEL_H, px, py, p.width, LABEL_H)\n );\n if (collides) {\n externalQueue.push(c);\n } else {\n placedInternal.push({ c, x, y });\n }\n }\n\n // ── Pass 3: distribute external labels around canvas by angle ─\n // Each external keeps leader line from its interior sample point.\n const externalPlacements = layoutExternal(\n externalQueue,\n canvasCx,\n canvasCy,\n canvasBounds\n );\n\n // ── Assemble final list, preserving original region order ─────\n const placedMap = new Map<VennRegion, VennLabelPosition>();\n for (const { c } of placedInternal) {\n placedMap.set(c.region, {\n sets: c.region.sets,\n label: c.text,\n x: c.cx,\n y: c.cy,\n external: false,\n });\n }\n for (const p of externalPlacements) {\n placedMap.set(p.region, p.label);\n }\n\n const out: VennLabelPosition[] = [];\n for (const region of ast.regions) {\n const p = placedMap.get(region);\n if (p) out.push(p);\n }\n return out;\n}\n\ninterface ExternalPlacement {\n region: VennRegion;\n label: VennLabelPosition;\n}\n\n/**\n * Distribute external labels evenly around the canvas by centroid angle,\n * preventing the \"all leaders point to the same cluster\" problem on n=4.\n */\nfunction layoutExternal(\n queue: Candidate[],\n cx: number,\n cy: number,\n canvas: Box\n): ExternalPlacement[] {\n if (queue.length === 0) return [];\n\n // Sort by angle around canvas center.\n const withAngle = queue.map((c) => {\n const dx = c.cx - cx;\n const dy = c.cy - cy;\n let theta = Math.atan2(dy, dx);\n if (!Number.isFinite(theta)) theta = 0;\n return { c, theta };\n });\n withAngle.sort((a, b) => a.theta - b.theta);\n\n // Target radius: distance from center to a point just outside canvas bbox.\n const radiusX = canvas.w / 2 + 40;\n const radiusY = canvas.h / 2 + 28;\n\n // Enforce a minimum angular spacing so adjacent externals don't overlap.\n const minGap = Math.min((2 * Math.PI) / Math.max(6, withAngle.length), 0.45);\n const adjusted = redistributeAngles(\n withAngle.map((w) => w.theta),\n minGap\n );\n\n const out: ExternalPlacement[] = [];\n for (let i = 0; i < withAngle.length; i++) {\n const { c } = withAngle[i]!;\n const theta = adjusted[i]!;\n const ux = Math.cos(theta);\n const uy = Math.sin(theta);\n const ex = cx + ux * radiusX;\n const ey = cy + uy * radiusY;\n const anchor: \"start\" | \"end\" | \"middle\" =\n ux > 0.25 ? \"start\" : ux < -0.25 ? \"end\" : \"middle\";\n const picked = c.interior[Math.floor(c.interior.length / 2)];\n const start = picked ?? { x: c.cx, y: c.cy };\n out.push({\n region: c.region,\n label: {\n sets: c.region.sets,\n label: c.text,\n x: ex,\n y: ey,\n external: true,\n leader: { x1: start.x, y1: start.y, x2: ex, y2: ey },\n anchor,\n },\n });\n }\n return out;\n}\n\n/**\n * Adjust angle sequence (already sorted) so adjacent values differ by at least\n * `minGap`. Uses a simple forward-sweep then backward clamp — good enough for\n * Venn label fan-out.\n */\nfunction redistributeAngles(thetas: number[], minGap: number): number[] {\n const out = thetas.slice();\n for (let i = 1; i < out.length; i++) {\n const need = out[i - 1]! + minGap;\n if (out[i]! < need) out[i] = need;\n }\n // Wrap-around: if last exceeds first + 2π − minGap, push everything back.\n const wrapLimit = out[0]! + Math.PI * 2 - minGap;\n if (out.length > 1 && out[out.length - 1]! > wrapLimit) {\n const shift = out[out.length - 1]! - wrapLimit;\n for (let i = 0; i < out.length; i++) out[i] = out[i]! - shift;\n }\n return out;\n}\n\nfunction regionLabelText(region: VennRegion): string {\n return formatRegionValue(region);\n}\n\nfunction isDefined<T>(x: T | undefined): x is T {\n return x !== undefined;\n}\n","/**\n * Venn / Euler layout dispatcher.\n *\n * Picks a layout based on `ast.sets.length`, `config.mode` and\n * `config.proportional`:\n *\n * - n=2 fixed or analytic proportional\n * - n=3 fixed or gradient-descent proportional\n * - n=4 fixed (4 ellipses); proportional deferred\n * - Euler (subset / disjoint / partial overlap) — derived from relations or\n * inferred by auto-detecting which regions actually have values.\n */\n\nimport type {\n VennAST,\n VennCircle,\n VennEllipse,\n VennLayoutResult,\n VennLabelPosition,\n VennRegion,\n VennShape,\n VennEulerRelation,\n} from \"../../core/types\";\nimport {\n circleBBox,\n ellipseBBox,\n fourEllipseStandard,\n pointInCircle,\n pointInEllipse,\n regionCentroid,\n solveTwoCircleDistance,\n threeCircleClassic,\n twoCircleIntersectionArea,\n unionBBox,\n} from \"./geometry\";\nimport { placeLabels } from \"./labels\";\n\nexport interface LayoutOptions {\n /** Canvas width override. */\n width?: number;\n /** Canvas height override. */\n height?: number;\n /** Padding around the diagram (px). */\n padding?: number;\n}\n\nconst DEFAULTS = {\n padding: 24,\n canvasN2: { w: 480, h: 320, r: 110, d: 120 },\n canvasN3: { w: 520, h: 480, r: 130, offset: 0.6 },\n canvasN4: { w: 640, h: 480, a: 216, b: 120 },\n canvasEuler: { w: 520, h: 420 },\n};\n\nexport function layoutVenn(ast: VennAST, opts: LayoutOptions = {}): VennLayoutResult {\n const mode = decideMode(ast);\n if (mode === \"euler\") {\n return layoutEuler(ast, opts);\n }\n const n = ast.sets.length;\n if (n === 1) return layoutSingle(ast, opts);\n if (n === 2) return layoutTwo(ast, opts);\n if (n === 3) return layoutThree(ast, opts);\n if (n === 4) return layoutFour(ast, opts);\n // Fallback for 5+ — collapse to Euler disjoint row (UpSet deferred).\n return layoutEuler(ast, opts);\n}\n\nfunction decideMode(ast: VennAST): \"venn\" | \"euler\" {\n if (ast.config.mode === \"venn\") return \"venn\";\n if (ast.config.mode === \"euler\") return \"euler\";\n // Auto: Euler if any explicit relations were declared.\n return ast.relations.length > 0 ? \"euler\" : \"venn\";\n}\n\n// ─── n = 1 (degenerate) ──────────────────────────────────────\n\nfunction layoutSingle(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? 320;\n const h = opts.height ?? 260;\n const set = ast.sets[0];\n if (!set) {\n return { width: w, height: h, mode: \"venn\", shapes: [], labels: [], setLabels: [] };\n }\n const circle: VennCircle = { id: set.id, cx: w / 2, cy: h / 2, r: Math.min(w, h) / 3 };\n const shapes: VennShape[] = [{ kind: \"circle\", ...circle }];\n const region = ast.regions.find((r) => r.sets.length === 1 && r.sets[0] === set.id);\n const labels: VennLabelPosition[] = region\n ? [\n {\n sets: [set.id],\n label: formatRegionValue(region),\n x: circle.cx,\n y: circle.cy,\n external: false,\n },\n ]\n : [];\n const setLabels = [\n {\n id: set.id,\n label: set.label,\n x: circle.cx,\n y: circle.cy - circle.r - 12,\n anchor: \"middle\" as const,\n },\n ];\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── n = 2 ───────────────────────────────────────────────────\n\nfunction layoutTwo(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const padding = opts.padding ?? DEFAULTS.padding;\n const setA = ast.sets[0];\n const setB = ast.sets[1];\n if (!setA || !setB) {\n throw new Error(\"layoutTwo requires two sets\");\n }\n let rA = DEFAULTS.canvasN2.r;\n let rB = DEFAULTS.canvasN2.r;\n let d = DEFAULTS.canvasN2.d;\n\n if (ast.config.proportional) {\n const sizes = computeAbsoluteSetSizes(ast);\n const sizeA = sizes.get(setA.id) ?? 1;\n const sizeB = sizes.get(setB.id) ?? 1;\n const inter = regionValue(ast, [setA.id, setB.id]) ?? 0;\n const scale = 1 / Math.sqrt(Math.max(sizeA, sizeB));\n rA = 110 * Math.sqrt(sizeA) * scale;\n rB = 110 * Math.sqrt(sizeB) * scale;\n const areaPerElem = (Math.PI * rA * rA) / Math.max(sizeA, 1e-6);\n d = solveTwoCircleDistance(rA, rB, inter * areaPerElem);\n }\n\n const totalW = rA + rB + d + 2 * padding;\n const w = Math.max(opts.width ?? DEFAULTS.canvasN2.w, totalW);\n const h = opts.height ?? DEFAULTS.canvasN2.h;\n\n const cxA = (w - d) / 2;\n const cxB = cxA + d;\n const cy = h / 2;\n\n const circles: [VennCircle, VennCircle] = [\n { id: setA.id, cx: cxA, cy, r: rA },\n { id: setB.id, cx: cxB, cy, r: rB },\n ];\n\n const shapes: VennShape[] = circles.map((c) => ({ kind: \"circle\" as const, ...c }));\n const labels = placeLabels(ast, shapes);\n const setLabels = [\n { id: setA.id, label: setA.label, x: cxA, y: cy - rA - 10, anchor: \"middle\" as const },\n { id: setB.id, label: setB.label, x: cxB, y: cy - rB - 10, anchor: \"middle\" as const },\n ];\n\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── n = 3 ───────────────────────────────────────────────────\n\nfunction layoutThree(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? DEFAULTS.canvasN3.w;\n const h = opts.height ?? DEFAULTS.canvasN3.h;\n const r = DEFAULTS.canvasN3.r;\n const offsetScale = DEFAULTS.canvasN3.offset;\n\n // Leave room for set title + diagram title.\n const cx = w / 2;\n const cy = h / 2 + 12;\n\n let circles = threeCircleClassic(cx, cy, r, offsetScale);\n\n if (ast.config.proportional) {\n const adjusted = solveProportionalThree(ast, cx, cy);\n if (adjusted) circles = adjusted;\n }\n\n const shapes: VennShape[] = circles.map((c, i) => {\n const setId = ast.sets[i]?.id ?? c.id;\n return { kind: \"circle\" as const, ...c, id: setId };\n });\n\n const labels = placeLabels(ast, shapes);\n const setLabels = ast.sets.map((s, i) => {\n const c = circles[i] ?? circles[0];\n if (!c) {\n return { id: s.id, label: s.label, x: cx, y: cy, anchor: \"middle\" as const };\n }\n // Title for top circle goes above; others below-outer.\n const isTop = i === 2;\n return {\n id: s.id,\n label: s.label,\n x: isTop ? c.cx : c.cx + (i === 0 ? -c.r : c.r) * 0.7,\n y: isTop ? c.cy - c.r - 10 : c.cy + c.r + 16,\n anchor: (isTop ? \"middle\" : i === 0 ? \"end\" : \"start\") as \"middle\" | \"start\" | \"end\",\n };\n });\n\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── n = 4 ───────────────────────────────────────────────────\n\nfunction layoutFour(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? DEFAULTS.canvasN4.w;\n const h = opts.height ?? DEFAULTS.canvasN4.h;\n const cx = w / 2;\n const cy = h / 2 + 8;\n\n const ellipses = fourEllipseStandard(cx, cy, DEFAULTS.canvasN4.a, DEFAULTS.canvasN4.b);\n const shapes: VennShape[] = ellipses.map((e, i) => ({\n kind: \"ellipse\" as const,\n ...e,\n id: ast.sets[i]?.id ?? e.id,\n }));\n\n const labels = placeLabels(ast, shapes);\n const setLabels = ast.sets.map((s, i) => {\n const e = ellipses[i];\n if (!e) {\n return { id: s.id, label: s.label, x: cx, y: cy, anchor: \"middle\" as const };\n }\n const bb = ellipseBBox(e);\n // Place set titles at the outermost end of each ellipse.\n const sign = i < 2 ? -1 : 1;\n return {\n id: s.id,\n label: s.label,\n x: bb.x + (sign < 0 ? 0 : bb.w),\n y: bb.y + (i % 2 === 0 ? 14 : bb.h - 4),\n anchor: (sign < 0 ? \"start\" : \"end\") as \"start\" | \"middle\" | \"end\",\n };\n });\n\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── Euler layout ────────────────────────────────────────────\n\nfunction layoutEuler(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? DEFAULTS.canvasEuler.w;\n const h = opts.height ?? DEFAULTS.canvasEuler.h;\n const n = ast.sets.length;\n if (n === 0) {\n return {\n width: w,\n height: h,\n mode: \"euler\",\n shapes: [],\n labels: [],\n setLabels: [],\n };\n }\n\n // Build containment tree from relations.\n const parents = new Map<string, string>(); // child -> parent (subset)\n const disjointPairs = new Set<string>();\n for (const rel of ast.relations) {\n if (rel.type === \"subset\") parents.set(rel.from, rel.to);\n if (rel.type === \"disjoint\") disjointPairs.add(edgeKey(rel.from, rel.to));\n }\n\n // Roots: sets with no parent.\n const roots = ast.sets.filter((s) => !parents.has(s.id)).map((s) => s.id);\n\n const circles = new Map<string, VennCircle>();\n const rootRadius = Math.min(w, h) * 0.32;\n // Horizontal layout of roots.\n const rootSpacing = Math.min(w / Math.max(roots.length, 1), 2 * rootRadius + 40);\n const startX = w / 2 - ((roots.length - 1) * rootSpacing) / 2;\n roots.forEach((rootId, i) => {\n circles.set(rootId, { id: rootId, cx: startX + i * rootSpacing, cy: h / 2, r: rootRadius });\n });\n\n // Recursively place children inside parents.\n const childrenOf = new Map<string, string[]>();\n for (const [child, par] of parents.entries()) {\n const arr = childrenOf.get(par) ?? [];\n arr.push(child);\n childrenOf.set(par, arr);\n }\n\n const placeChildren = (parentId: string, depth: number): void => {\n const kids = childrenOf.get(parentId) ?? [];\n if (kids.length === 0) return;\n const parent = circles.get(parentId);\n if (!parent) return;\n const childR = parent.r * (kids.length === 1 ? 0.55 : 0.4);\n kids.forEach((kid, i) => {\n // Distribute children horizontally within parent.\n const offset = (kids.length === 1 ? 0 : (i - (kids.length - 1) / 2) * childR * 1.4);\n circles.set(kid, {\n id: kid,\n cx: parent.cx + offset,\n cy: parent.cy + (depth % 2 === 0 ? 0 : -childR * 0.2),\n r: childR,\n });\n placeChildren(kid, depth + 1);\n });\n };\n for (const r of roots) placeChildren(r, 0);\n\n // Handle sets with no relation at all — append at the side.\n let sideX = 30;\n for (const s of ast.sets) {\n if (!circles.has(s.id)) {\n circles.set(s.id, { id: s.id, cx: sideX + 60, cy: h / 2, r: 50 });\n sideX += 130;\n }\n }\n\n const shapes: VennShape[] = ast.sets.map((s) => ({\n kind: \"circle\" as const,\n ...(circles.get(s.id) ?? { id: s.id, cx: w / 2, cy: h / 2, r: 40 }),\n }));\n\n const labels = placeLabels(ast, shapes);\n const setLabels = ast.sets.map((s) => {\n const c = circles.get(s.id) ?? { cx: w / 2, cy: h / 2, r: 40 };\n return {\n id: s.id,\n label: s.label,\n x: c.cx,\n y: c.cy - c.r - 6,\n anchor: \"middle\" as const,\n };\n });\n\n // Avoid unused var warning (disjointPairs informs future placement).\n void disjointPairs;\n\n return {\n width: w,\n height: h,\n mode: \"euler\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\nfunction edgeKey(a: string, b: string): string {\n return a < b ? `${a}|${b}` : `${b}|${a}`;\n}\n\n// ─── Proportional helpers ───────────────────────────────────\n\nfunction computeAbsoluteSetSizes(ast: VennAST): Map<string, number> {\n // |A| = Σ value over all regions containing A.\n const out = new Map<string, number>();\n for (const s of ast.sets) out.set(s.id, 0);\n for (const r of ast.regions) {\n const num = numericValue(r);\n if (num === null) continue;\n for (const sid of r.sets) {\n out.set(sid, (out.get(sid) ?? 0) + num);\n }\n }\n return out;\n}\n\nfunction numericValue(r: VennRegion): number | null {\n if (r.value.kind === \"integer\" || r.value.kind === \"percent\") return r.value.value;\n if (r.value.kind === \"list\") return r.value.value.length;\n return null;\n}\n\nfunction regionValue(ast: VennAST, sets: string[]): number | null {\n // Exact match on \"only\" regions or on intersection regions.\n const needle = [...sets].sort().join(\"|\");\n for (const r of ast.regions) {\n const key = [...r.sets].sort().join(\"|\");\n if (key === needle) {\n return numericValue(r);\n }\n }\n return null;\n}\n\n/**\n * Very small finite-difference gradient descent for n=3 proportional.\n * Returns an adjusted circle triple or null if the solver didn't converge.\n */\nfunction solveProportionalThree(\n ast: VennAST,\n cx: number,\n cy: number\n): [VennCircle, VennCircle, VennCircle] | null {\n const setA = ast.sets[0];\n const setB = ast.sets[1];\n const setC = ast.sets[2];\n if (!setA || !setB || !setC) return null;\n const sizes = computeAbsoluteSetSizes(ast);\n const s0 = sizes.get(setA.id) ?? 0;\n const s1 = sizes.get(setB.id) ?? 0;\n const s2 = sizes.get(setC.id) ?? 0;\n if (s0 <= 0 || s1 <= 0 || s2 <= 0) return null;\n\n // Target absolute areas (px²), normalised so the biggest set becomes ~π·r²\n // with r = 130.\n const maxSize = Math.max(s0, s1, s2);\n const baseR = 130;\n const baseArea = Math.PI * baseR * baseR;\n const perElem = baseArea / maxSize;\n const r0 = Math.sqrt((s0 * perElem) / Math.PI);\n const r1 = Math.sqrt((s1 * perElem) / Math.PI);\n const r2 = Math.sqrt((s2 * perElem) / Math.PI);\n\n // Initial distances from pairwise analytic intersections.\n const p01 = regionValue(ast, [setA.id, setB.id]) ?? 0;\n const p02 = regionValue(ast, [setA.id, setC.id]) ?? 0;\n const p12 = regionValue(ast, [setB.id, setC.id]) ?? 0;\n // Pairwise target area includes triple-overlap contribution; approximate only.\n const d01 = solveTwoCircleDistance(r0, r1, p01 * perElem);\n const d02 = solveTwoCircleDistance(r0, r2, p02 * perElem);\n const d12 = solveTwoCircleDistance(r1, r2, p12 * perElem);\n\n // Place centers using pairwise distances (triangulation).\n const x0 = cx - d01 / 2;\n const y0 = cy + d01 * 0.1; // slight drop\n const x1 = x0 + d01;\n const y1 = y0;\n // Circle 2 at intersection of two circles of radius d02 & d12 around (x0,y0) & (x1,y1).\n const ex = x1 - x0;\n const ey = y1 - y0;\n const dxy = Math.sqrt(ex * ex + ey * ey);\n if (dxy < 1e-6) return null;\n const a = (d02 * d02 - d12 * d12 + dxy * dxy) / (2 * dxy);\n const hSq = d02 * d02 - a * a;\n const h = hSq > 0 ? Math.sqrt(hSq) : 0;\n const px = x0 + (a * ex) / dxy;\n const py = y0 + (a * ey) / dxy;\n const x2 = px - (h * ey) / dxy;\n const y2 = py - (h * ex) / dxy;\n\n // Re-center around (cx, cy).\n const avgX = (x0 + x1 + x2) / 3;\n const avgY = (y0 + y1 + y2) / 3;\n const offX = cx - avgX;\n const offY = cy - avgY;\n return [\n { id: setA.id, cx: x0 + offX, cy: y0 + offY, r: r0 },\n { id: setB.id, cx: x1 + offX, cy: y1 + offY, r: r1 },\n { id: setC.id, cx: x2 + offX, cy: y2 + offY, r: r2 },\n ];\n}\n\n// ─── Shared helpers exposed for renderer/label module ───────\n\nexport function formatRegionValue(r: VennRegion): string {\n switch (r.value.kind) {\n case \"integer\":\n return String(r.value.value);\n case \"percent\":\n return `${r.value.value}%`;\n case \"text\":\n return r.value.value;\n case \"list\":\n return r.value.value.join(\", \");\n case \"none\":\n return \"\";\n }\n}\n\n/** Utility: ensure a VennCircle is a \"raw\" circle (strip `id`). */\nexport function pickCircle(s: VennShape): VennCircle | null {\n return s.kind === \"circle\" ? s : null;\n}\n\n/** Utility: ensure a VennEllipse (strip `id`). */\nexport function pickEllipse(s: VennShape): VennEllipse | null {\n return s.kind === \"ellipse\" ? s : null;\n}\n\n/** Re-export for tests (tests sometimes check bbox math end-to-end). */\nexport { circleBBox, ellipseBBox, pointInCircle, pointInEllipse, unionBBox, regionCentroid, twoCircleIntersectionArea };\n\n/** Export dispatcher helpers kept internal. */\nexport type { VennEulerRelation };\n","/**\n * Venn / Euler SVG renderer.\n *\n * Produces a semantic SVG:\n * - `<title>` + `<desc>` for accessibility\n * - CSS class hierarchy `.schematex-venn-*`\n * - One `<circle>` or `<ellipse>` per set, grouped under a layer that\n * can apply `mix-blend-mode: multiply` for natural overlap blending.\n * - `<text>` per region label, optional `<path>` leader for externalised\n * labels.\n */\n\nimport type { VennAST, VennLayoutResult, VennShape } from \"../../core/types\";\nimport {\n svgRoot,\n group,\n el,\n circle as circleEl,\n text as textEl,\n title as titleEl,\n desc as descEl,\n path as pathEl,\n} from \"../../core/svg\";\nimport { resolveVennTheme } from \"../../core/theme\";\nimport { parseVennDSL } from \"./parser\";\nimport { layoutVenn } from \"./layout\";\n\nfunction ellipseEl(attrs: Record<string, string | number | undefined>): string {\n return el(\"ellipse\", attrs);\n}\n\nfunction idSlug(id: string): string {\n return id.replace(/[^A-Za-z0-9_-]/g, \"_\");\n}\n\nfunction buildCss(tokens: ReturnType<typeof resolveVennTheme>): string {\n return `\n.schematex-venn { font-family: system-ui, -apple-system, \"Segoe UI\", sans-serif; }\n.schematex-venn-title { font: 600 16px sans-serif; fill: ${tokens.text}; }\n.schematex-venn-set { stroke: ${tokens.vennSetStroke}; stroke-width: 1.25; }\n.schematex-venn-blend-multiply { mix-blend-mode: multiply; }\n.schematex-venn-blend-screen { mix-blend-mode: screen; }\n.schematex-venn-setlabel { font: 600 13px sans-serif; fill: ${tokens.text}; }\n.schematex-venn-label { font: 500 12px sans-serif; fill: ${tokens.vennLabelColor}; dominant-baseline: central; text-anchor: middle; }\n.schematex-venn-label-external { font: 500 11px sans-serif; fill: ${tokens.vennLabelColor}; dominant-baseline: central; }\n.schematex-venn-leader { stroke: ${tokens.vennLeaderColor}; stroke-width: 0.7; fill: none; opacity: 0.8; }\n.schematex-venn-leader-dot { fill: ${tokens.vennLeaderColor}; }\n`.trim();\n}\n\nfunction renderShape(\n shape: VennShape,\n index: number,\n color: string,\n opacity: number,\n setLabel: string\n): string {\n const classes = `schematex-venn-set schematex-venn-set-${index}`;\n const hoverTitle = titleEl(`Set ${setLabel}`);\n if (shape.kind === \"circle\") {\n return el(\n \"g\",\n { class: `schematex-venn-set-group schematex-venn-set-group-${index}` },\n [\n circleEl({\n cx: shape.cx,\n cy: shape.cy,\n r: shape.r,\n class: classes,\n fill: color,\n \"fill-opacity\": opacity,\n \"data-set-id\": idSlug(shape.id),\n }),\n hoverTitle,\n ]\n );\n }\n return el(\n \"g\",\n { class: `schematex-venn-set-group schematex-venn-set-group-${index}` },\n [\n ellipseEl({\n cx: shape.cx,\n cy: shape.cy,\n rx: shape.rx,\n ry: shape.ry,\n transform: `rotate(${shape.rotation} ${shape.cx} ${shape.cy})`,\n class: classes,\n fill: color,\n \"fill-opacity\": opacity,\n \"data-set-id\": idSlug(shape.id),\n }),\n hoverTitle,\n ]\n );\n}\n\nexport function renderVennAST(\n ast: VennAST,\n options: { theme?: string } = {}\n): string {\n const layout = layoutVenn(ast);\n return renderVennLayout(ast, layout, options);\n}\n\nexport function renderVennLayout(\n ast: VennAST,\n layout: VennLayoutResult,\n options: { theme?: string } = {}\n): string {\n const tokens = resolveVennTheme(options.theme ?? \"default\");\n const effectiveBlend =\n ast.config.blendMode === \"none\" ? \"none\" : ast.config.blendMode || tokens.vennBlendMode;\n const css = buildCss(tokens);\n\n // Shape rendering.\n const colors = tokens.vennSetColors;\n const shapeEls = layout.shapes.map((shape, i) => {\n const color = ast.sets[i]?.color ?? colors[i % colors.length] ?? \"#4E79A7\";\n return renderShape(shape, i, color, tokens.vennSetOpacity, ast.sets[i]?.label ?? shape.id);\n });\n\n const shapesGroup = group(\n {\n class: `schematex-venn-shapes ${effectiveBlend !== \"none\" ? `schematex-venn-blend-${effectiveBlend}` : \"\"}`.trim(),\n ...(effectiveBlend !== \"none\" ? { style: `mix-blend-mode: ${effectiveBlend}` } : {}),\n },\n shapeEls\n );\n\n // Set titles.\n const setLabelEls = layout.setLabels.map((s) =>\n textEl(\n {\n x: s.x,\n y: s.y,\n class: \"schematex-venn-setlabel\",\n \"text-anchor\": s.anchor,\n },\n s.label\n )\n );\n\n // Region labels and optional leader lines.\n const labelEls: string[] = [];\n const leaderEls: string[] = [];\n for (const label of layout.labels) {\n const cls = label.external\n ? \"schematex-venn-label schematex-venn-label-external\"\n : \"schematex-venn-label\";\n labelEls.push(\n textEl(\n {\n x: label.x,\n y: label.y,\n class: cls,\n \"text-anchor\": label.anchor ?? \"middle\",\n \"data-region\": label.sets.join(\"-\"),\n },\n label.label\n )\n );\n if (label.external && label.leader) {\n leaderEls.push(\n pathEl({\n d: `M ${label.leader.x1} ${label.leader.y1} L ${label.leader.x2} ${label.leader.y2}`,\n class: \"schematex-venn-leader\",\n \"aria-hidden\": \"true\",\n })\n );\n leaderEls.push(\n circleEl({\n cx: label.leader.x1,\n cy: label.leader.y1,\n r: 1.5,\n class: \"schematex-venn-leader-dot\",\n \"aria-hidden\": \"true\",\n })\n );\n }\n }\n\n // Title block.\n const titleBlock = layout.title\n ? textEl(\n {\n x: layout.title.x,\n y: layout.title.y,\n class: \"schematex-venn-title\",\n \"text-anchor\": \"middle\",\n },\n layout.title.text\n )\n : \"\";\n\n const nonEmptyRegions = ast.regions.length;\n const description =\n `Venn/Euler diagram${ast.title ? ` \"${ast.title}\"` : \"\"}: ${ast.sets.length} sets, ${nonEmptyRegions} regions.`;\n\n const body = [\n titleEl(ast.title ?? \"Venn diagram\"),\n descEl(description),\n el(\"style\", {}, css),\n titleBlock,\n shapesGroup,\n group({ class: \"schematex-venn-leaders\" }, leaderEls),\n group({ class: \"schematex-venn-setlabels\" }, setLabelEls),\n group({ class: \"schematex-venn-labels\" }, labelEls),\n ];\n\n return svgRoot(\n {\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n width: layout.width,\n height: layout.height,\n class: \"schematex-venn\",\n role: \"img\",\n },\n body\n );\n}\n\nexport function renderVenn(text: string, options: { theme?: string } = {}): string {\n const ast = parseVennDSL(text);\n return renderVennAST(ast, options);\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseVennDSL } from \"./parser\";\nimport { renderVenn } from \"./renderer\";\n\nexport const venn: DiagramPlugin = {\n type: \"venn\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"venn\");\n },\n parse: parseVennDSL,\n render(text: string, config?: RenderConfig): string {\n return renderVenn(text, { theme: config?.theme });\n },\n};\n\nexport { parseVennDSL, VennParseError } from \"./parser\";\nexport { renderVenn, renderVennAST, renderVennLayout } from \"./renderer\";\nexport { layoutVenn } from \"./layout\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/sld/parser.ts","../src/diagrams/sld/symbols.ts","../src/diagrams/sld/layout.ts","../src/diagrams/sld/renderer.ts","../src/diagrams/sld/index.ts"],"names":["line","text","title","maxX","lines"],"mappings":"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","file":"chunk-PWI4NFYR.js","sourcesContent":["import type {\n SLDAST,\n SLDNode,\n SLDNodeType,\n SLDConnection,\n} from \"../../core/types\";\n\nexport class SLDParseError extends Error {\n public line?: number;\n public source?: string;\n constructor(message: string, line?: number, source?: string) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"SLDParseError\";\n this.line = line;\n this.source = source;\n }\n}\n\nconst NODE_TYPES = new Set<SLDNodeType>([\n \"utility\", \"generator\", \"solar\", \"wind\", \"ups\",\n \"transformer\", \"transformer_dy\", \"transformer_yd\", \"transformer_yy\",\n \"transformer_dd\", \"autotransformer\", \"transformer_3winding\",\n \"bus\", \"bus_tie\", \"hub\",\n \"breaker\", \"breaker_vacuum\", \"switch\", \"switch_load\", \"ground_switch\",\n \"ats\", \"recloser\", \"sectionalizer\", \"fuse\", \"fuse_cl\",\n \"ct\", \"pt\", \"relay\", \"surge_arrester\", \"ground_fault\",\n \"motor\", \"load\", \"capacitor_bank\", \"harmonic_filter\", \"vfd\",\n \"watthour_meter\", \"demand_meter\",\n]);\n\nfunction stripComment(s: string): string {\n // remove # comments (outside quotes)\n let out = \"\";\n let inQuote = false;\n for (const ch of s) {\n if (ch === '\"') inQuote = !inQuote;\n if (ch === \"#\" && !inQuote) break;\n out += ch;\n }\n return out;\n}\n\nfunction stripQuotes(v: string): string {\n const t = v.trim();\n if (t.length >= 2 && t.startsWith('\"') && t.endsWith('\"')) {\n return t.slice(1, -1);\n }\n return t;\n}\n\nfunction splitAttrs(inside: string): Array<[string, string]> {\n // split by commas (respecting quotes) → \"key: value\" pairs\n const parts: string[] = [];\n let cur = \"\";\n let inQuote = false;\n for (const ch of inside) {\n if (ch === '\"') inQuote = !inQuote;\n if (ch === \",\" && !inQuote) {\n parts.push(cur);\n cur = \"\";\n } else {\n cur += ch;\n }\n }\n if (cur.trim()) parts.push(cur);\n\n const out: Array<[string, string]> = [];\n for (const p of parts) {\n const s = p.trim();\n if (!s) continue;\n const colon = s.indexOf(\":\");\n if (colon < 0) {\n throw new SLDParseError(`Invalid attribute \"${s}\" (missing \":\")`);\n }\n const k = s.slice(0, colon).trim();\n const v = stripQuotes(s.slice(colon + 1));\n out.push([k, v]);\n }\n return out;\n}\n\nfunction applyAttrs(node: SLDNode, attrs: Array<[string, string]>): void {\n for (const [k, v] of attrs) {\n const key = k.toLowerCase();\n if (key === \"label\") node.label = v;\n else if (key === \"voltage\") node.voltage = v;\n else if (key === \"rating\") node.rating = v;\n else if (key === \"device\") node.deviceNumber = v;\n else {\n // stash everything else as nameplate\n if (!node.nameplate) node.nameplate = {};\n node.nameplate[k] = v;\n }\n }\n}\n\n/** Join lines so that a bracketed attribute block spans a single logical line. */\nfunction joinBrackets(lines: string[]): string[] {\n const out: string[] = [];\n let buf = \"\";\n let depth = 0;\n for (const raw of lines) {\n const line = stripComment(raw);\n if (!line.trim() && depth === 0) {\n if (buf) {\n out.push(buf);\n buf = \"\";\n }\n out.push(\"\");\n continue;\n }\n for (const ch of line) {\n if (ch === \"[\") depth++;\n else if (ch === \"]\") depth = Math.max(0, depth - 1);\n }\n buf = buf ? buf + \" \" + line.trim() : line;\n if (depth === 0) {\n out.push(buf);\n buf = \"\";\n }\n }\n if (buf) out.push(buf);\n return out;\n}\n\nexport function parseSLDDSL(text: string): SLDAST {\n const rawLines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n const lines = joinBrackets(rawLines);\n\n let title: string | undefined;\n const nodes: SLDNode[] = [];\n const nodeMap = new Map<string, SLDNode>();\n const connections: SLDConnection[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i];\n const line = raw.trim();\n if (!line) continue;\n\n // Header: sld \"title\"\n if (/^sld\\b/i.test(line)) {\n const m = line.match(/\"([^\"]*)\"/);\n if (m) title = m[1];\n continue;\n }\n\n // Connection: A -> B [cable: \"...\", label: \"...\"]\n const connMatch = line.match(\n /^([A-Za-z][A-Za-z0-9_-]*)\\s*->\\s*([A-Za-z][A-Za-z0-9_-]*)(?:\\s*\\[([^\\]]*)\\])?\\s*$/\n );\n if (connMatch) {\n const from = connMatch[1];\n const to = connMatch[2];\n const c: SLDConnection = { from, to };\n if (connMatch[3]) {\n for (const [k, v] of splitAttrs(connMatch[3])) {\n const key = k.toLowerCase();\n if (key === \"cable\") c.cable = v;\n else if (key === \"label\") c.label = v;\n }\n }\n connections.push(c);\n continue;\n }\n\n // Node definition: ID = type [attrs]\n const nodeMatch = line.match(\n /^([A-Za-z][A-Za-z0-9_-]*)\\s*=\\s*([a-zA-Z_][a-zA-Z0-9_]*)(?:\\s*\\[([^\\]]*)\\])?\\s*$/\n );\n if (nodeMatch) {\n const id = nodeMatch[1];\n const nodeType = nodeMatch[2] as SLDNodeType;\n if (!NODE_TYPES.has(nodeType)) {\n throw new SLDParseError(\n `Unknown node type \"${nodeType}\" for \"${id}\"`,\n i + 1,\n line\n );\n }\n if (nodeMap.has(id)) {\n throw new SLDParseError(`Duplicate node id \"${id}\"`, i + 1, line);\n }\n const node: SLDNode = { id, nodeType };\n if (nodeMatch[3]) {\n applyAttrs(node, splitAttrs(nodeMatch[3]));\n }\n nodes.push(node);\n nodeMap.set(id, node);\n continue;\n }\n\n throw new SLDParseError(`Cannot parse line`, i + 1, line);\n }\n\n // Validate connections\n for (const c of connections) {\n if (!nodeMap.has(c.from)) {\n throw new SLDParseError(`Connection references unknown node \"${c.from}\"`);\n }\n if (!nodeMap.has(c.to)) {\n throw new SLDParseError(`Connection references unknown node \"${c.to}\"`);\n }\n }\n\n if (nodes.length === 0) {\n throw new SLDParseError(\"SLD diagram has no nodes\");\n }\n\n return { type: \"sld\", title, nodes, connections };\n}\n","import type { SLDNodeType } from \"../../core/types\";\nimport { el, group, line, path as pathEl, text as textEl } from \"../../core/svg\";\n\n/**\n * Symbol renderers — each returns SVG markup centered at (0,0)\n * Used by the renderer after applying transform=\"translate(cx,cy)\".\n *\n * Every symbol exposes a conceptual top/bottom terminal on the vertical axis,\n * so the layout only needs to draw vertical wires between them.\n */\n\nexport interface SymbolGeometry {\n /** Bounding half-width for layout */\n halfWidth: number;\n /** Y-offset of the top terminal (negative = above center) */\n topY: number;\n /** Y-offset of the bottom terminal (positive = below center) */\n bottomY: number;\n}\n\nexport const DEFAULT_GEOMETRY: SymbolGeometry = {\n halfWidth: 20,\n topY: -20,\n bottomY: 20,\n};\n\nexport function geometryFor(type: SLDNodeType): SymbolGeometry {\n switch (type) {\n case \"utility\":\n case \"generator\":\n case \"solar\":\n case \"wind\":\n return { halfWidth: 18, topY: -24, bottomY: 18 };\n case \"transformer\":\n case \"transformer_dy\":\n case \"transformer_yd\":\n case \"transformer_yy\":\n case \"transformer_dd\":\n case \"autotransformer\":\n case \"transformer_3winding\":\n return { halfWidth: 22, topY: -24, bottomY: 24 };\n case \"breaker\":\n case \"breaker_vacuum\":\n case \"recloser\":\n case \"switch\":\n case \"switch_load\":\n case \"ground_switch\":\n case \"sectionalizer\":\n return { halfWidth: 18, topY: -18, bottomY: 18 };\n case \"fuse\":\n case \"fuse_cl\":\n return { halfWidth: 14, topY: -18, bottomY: 18 };\n case \"motor\":\n return { halfWidth: 16, topY: -16, bottomY: 22 };\n case \"load\":\n case \"capacitor_bank\":\n case \"harmonic_filter\":\n return { halfWidth: 20, topY: -14, bottomY: 14 };\n case \"vfd\":\n case \"ups\":\n return { halfWidth: 24, topY: -18, bottomY: 18 };\n case \"ats\":\n return { halfWidth: 22, topY: -18, bottomY: 18 };\n case \"ct\":\n case \"pt\":\n return { halfWidth: 10, topY: -16, bottomY: 16 };\n case \"relay\":\n return { halfWidth: 12, topY: -12, bottomY: 12 };\n case \"surge_arrester\":\n return { halfWidth: 12, topY: -16, bottomY: 26 };\n case \"watthour_meter\":\n case \"demand_meter\":\n case \"ground_fault\":\n return { halfWidth: 14, topY: -14, bottomY: 14 };\n case \"bus\":\n return DEFAULT_GEOMETRY;\n case \"hub\":\n return { halfWidth: 52, topY: -20, bottomY: 20 };\n case \"bus_tie\":\n return { halfWidth: 16, topY: -10, bottomY: 10 };\n default:\n return DEFAULT_GEOMETRY;\n }\n}\n\nfunction lineEl(x1: number, y1: number, x2: number, y2: number, cls = \"lt-sld-stroke\"): string {\n return line({ x1, y1, x2, y2, class: cls });\n}\n\nfunction utilitySymbol(): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 16, class: \"lt-sld-fill\" }),\n pathEl({ d: \"M -8 0 Q -4 -8 0 0 Q 4 8 8 0\", class: \"lt-sld-stroke\", fill: \"none\" }),\n // lead wires in/out\n lineEl(0, -24, 0, -16),\n lineEl(0, 16, 0, 18),\n ]);\n}\n\nfunction generatorSymbol(): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 16, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: -2, class: \"lt-sld-symbol-text\", \"text-anchor\": \"middle\", \"font-weight\": \"bold\", \"font-size\": \"14\" }, \"G\"),\n pathEl({ d: \"M -6 6 Q -3 1 0 6 Q 3 11 6 6\", class: \"lt-sld-stroke\", fill: \"none\" }),\n lineEl(0, -24, 0, -16),\n lineEl(0, 16, 0, 18),\n ]);\n}\n\nfunction solarSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -18, y: -12, width: 36, height: 24, class: \"lt-sld-fill\" }),\n lineEl(-18, -4, 18, -4),\n lineEl(-18, 4, 18, 4),\n lineEl(-6, -12, -6, 12),\n lineEl(6, -12, 6, 12),\n lineEl(0, 12, 0, 18),\n ]);\n}\n\nfunction windSymbol(): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 6, class: \"lt-sld-fill\" }),\n lineEl(0, -6, 0, -22),\n pathEl({ d: \"M 0 -6 L 14 -2 L 0 0 Z\", class: \"lt-sld-fill-dark\" }),\n pathEl({ d: \"M 0 -6 L -10 8 L 0 2 Z\", class: \"lt-sld-fill-dark\" }),\n pathEl({ d: \"M 0 -6 L -6 -18 L 2 -6 Z\", class: \"lt-sld-fill-dark\" }),\n lineEl(0, 6, 0, 18),\n ]);\n}\n\nfunction upsSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -22, y: -16, width: 44, height: 32, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: 4, class: \"lt-sld-symbol-text\", \"text-anchor\": \"middle\", \"font-weight\": \"bold\", \"font-size\": \"11\" }, \"UPS\"),\n ]);\n}\n\n/**\n * Transformer: two coil groups (three humps each) + polarity dots.\n * Optional winding labels (Δ or Y) are overlaid as compact glyphs.\n */\nfunction transformerSymbol(type: SLDNodeType): string {\n const pieces: string[] = [];\n // primary coil (top)\n pieces.push(\n pathEl({\n d: \"M -12 -18 A 4 4 0 0 1 -4 -18 A 4 4 0 0 1 4 -18 A 4 4 0 0 1 12 -18\",\n class: \"lt-sld-stroke\",\n fill: \"none\",\n })\n );\n // core lines\n pieces.push(lineEl(-14, -8, 14, -8));\n pieces.push(lineEl(-14, -4, 14, -4));\n // secondary coil (bottom, mirrored)\n pieces.push(\n pathEl({\n d: \"M -12 18 A 4 4 0 0 0 -4 18 A 4 4 0 0 0 4 18 A 4 4 0 0 0 12 18\",\n class: \"lt-sld-stroke\",\n fill: \"none\",\n })\n );\n // polarity dots\n pieces.push(el(\"circle\", { cx: -10, cy: -14, r: 2, class: \"lt-sld-dot\" }));\n pieces.push(el(\"circle\", { cx: 10, cy: 14, r: 2, class: \"lt-sld-dot\" }));\n // leads\n pieces.push(lineEl(0, -24, 0, -22));\n pieces.push(lineEl(0, 22, 0, 24));\n\n // Winding designators (Δ / Y / Yg)\n const { primary, secondary } = windingGlyphs(type);\n if (primary) pieces.push(textEl({ x: 20, y: -14, class: \"lt-sld-wdg\", \"text-anchor\": \"start\" }, primary));\n if (secondary) pieces.push(textEl({ x: 20, y: 18, class: \"lt-sld-wdg\", \"text-anchor\": \"start\" }, secondary));\n return group({}, pieces);\n}\n\nfunction windingGlyphs(type: SLDNodeType): { primary?: string; secondary?: string } {\n switch (type) {\n case \"transformer_dy\": return { primary: \"Δ\", secondary: \"Y\" };\n case \"transformer_yd\": return { primary: \"Y\", secondary: \"Δ\" };\n case \"transformer_yy\": return { primary: \"Y\", secondary: \"Y\" };\n case \"transformer_dd\": return { primary: \"Δ\", secondary: \"Δ\" };\n default: return {};\n }\n}\n\nfunction autotransformerSymbol(): string {\n return group({}, [\n pathEl({\n d: \"M 0 -20 A 6 6 0 0 1 0 -10 A 6 6 0 0 1 0 0 A 6 6 0 0 1 0 10 A 6 6 0 0 1 0 20\",\n class: \"lt-sld-stroke\",\n fill: \"none\",\n }),\n lineEl(6, 0, 14, 0),\n lineEl(0, -24, 0, -20),\n lineEl(0, 20, 0, 24),\n ]);\n}\n\nfunction threeWindingSymbol(): string {\n return group({}, [\n // top coil\n pathEl({ d: \"M -10 -18 A 3 3 0 0 1 -4 -18 A 3 3 0 0 1 2 -18 A 3 3 0 0 1 8 -18\", class: \"lt-sld-stroke\", fill: \"none\" }),\n // left-bottom coil\n pathEl({ d: \"M -18 6 A 3 3 0 0 1 -12 6 A 3 3 0 0 1 -6 6 A 3 3 0 0 1 0 6\", class: \"lt-sld-stroke\", fill: \"none\" }),\n // right-bottom coil\n pathEl({ d: \"M 0 6 A 3 3 0 0 1 6 6 A 3 3 0 0 1 12 6 A 3 3 0 0 1 18 6\", class: \"lt-sld-stroke\", fill: \"none\" }),\n lineEl(-14, -8, 14, -8),\n lineEl(0, -24, 0, -18),\n lineEl(-9, 10, -9, 24),\n lineEl(9, 10, 9, 24),\n ]);\n}\n\n/** Circuit breaker: diagonal line + top arc. */\nfunction breakerSymbol(): string {\n return group({}, [\n lineEl(0, -14, 0, -10, \"lt-sld-stroke\"),\n lineEl(0, 10, 0, 14, \"lt-sld-stroke\"),\n line({ x1: -6, y1: 10, x2: 8, y2: -10, class: \"lt-sld-stroke-thick\" }),\n pathEl({ d: \"M 8 -10 Q 14 -12 12 -18\", class: \"lt-sld-stroke\", fill: \"none\" }),\n lineEl(0, -18, 0, -14),\n lineEl(0, 14, 0, 18),\n ]);\n}\n\nfunction vacuumBreakerSymbol(): string {\n return group({}, [\n el(\"ellipse\", { cx: 0, cy: 0, rx: 10, ry: 14, class: \"lt-sld-fill\" }),\n line({ x1: -6, y1: 10, x2: 8, y2: -10, class: \"lt-sld-stroke-thick\" }),\n textEl({ x: -2, y: -4, class: \"lt-sld-symbol-text\", \"text-anchor\": \"middle\", \"font-size\": \"8\" }, \"V\"),\n lineEl(0, -18, 0, -14),\n lineEl(0, 14, 0, 18),\n ]);\n}\n\nfunction recloserSymbol(): string {\n return group({}, [\n line({ x1: -6, y1: 10, x2: 8, y2: -10, class: \"lt-sld-stroke-thick\" }),\n pathEl({ d: \"M 8 -10 Q 14 -12 12 -18\", class: \"lt-sld-stroke\", fill: \"none\" }),\n pathEl({ d: \"M 14 -6 A 5 5 0 1 1 18 -4\", class: \"lt-sld-stroke\", fill: \"none\" }),\n el(\"polygon\", { points: \"18,-4 20,-8 15,-7\", class: \"lt-sld-dot\" }),\n lineEl(0, -18, 0, -14),\n lineEl(0, 14, 0, 18),\n ]);\n}\n\nfunction switchSymbol(open = false): string {\n const pieces: string[] = [];\n if (open) {\n pieces.push(line({ x1: -6, y1: 10, x2: 10, y2: -8, class: \"lt-sld-stroke-thick\" }));\n pieces.push(el(\"circle\", { cx: 10, cy: -8, r: 2, class: \"lt-sld-fill\" }));\n } else {\n pieces.push(line({ x1: -6, y1: 10, x2: 8, y2: -10, class: \"lt-sld-stroke-thick\" }));\n }\n pieces.push(lineEl(0, -18, 0, -10));\n pieces.push(lineEl(0, 10, 0, 18));\n return group({}, pieces);\n}\n\nfunction loadSwitchSymbol(): string {\n return group({}, [\n line({ x1: -6, y1: 10, x2: 8, y2: -10, class: \"lt-sld-stroke-thick\" }),\n el(\"rect\", { x: 6, y: -14, width: 6, height: 6, class: \"lt-sld-fill\" }),\n lineEl(0, -18, 0, -10),\n lineEl(0, 10, 0, 18),\n ]);\n}\n\nfunction groundSwitchSymbol(): string {\n return group({}, [\n line({ x1: -6, y1: 0, x2: 8, y2: -14, class: \"lt-sld-stroke-thick\" }),\n lineEl(0, -18, 0, -4),\n // ground symbol\n lineEl(-8, 6, 8, 6),\n lineEl(-5, 10, 5, 10),\n lineEl(-2, 14, 2, 14),\n lineEl(0, 0, 0, 6),\n ]);\n}\n\nfunction sectionalizerSymbol(): string {\n return group({}, [\n line({ x1: -6, y1: 10, x2: 10, y2: -8, class: \"lt-sld-stroke-thick\" }),\n el(\"circle\", { cx: 10, cy: -8, r: 2, class: \"lt-sld-fill\" }),\n textEl({ x: 14, y: -4, class: \"lt-sld-wdg\", \"text-anchor\": \"start\" }, \"S\"),\n lineEl(0, -18, 0, -10),\n lineEl(0, 10, 0, 18),\n ]);\n}\n\nfunction fuseSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -5, y: -10, width: 10, height: 20, class: \"lt-sld-fill\" }),\n lineEl(0, -18, 0, -10),\n lineEl(0, 10, 0, 18),\n ]);\n}\n\nfunction fuseCLSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -6, y: -12, width: 12, height: 24, class: \"lt-sld-fill\" }),\n lineEl(-6, 0, 6, 0),\n lineEl(0, -18, 0, -12),\n lineEl(0, 12, 0, 18),\n ]);\n}\n\nfunction motorSymbol(): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 14, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: 5, class: \"lt-sld-symbol-text\", \"text-anchor\": \"middle\", \"font-weight\": \"bold\", \"font-size\": \"13\" }, \"M\"),\n lineEl(0, -16, 0, -14),\n // 3-phase dots at bottom\n el(\"circle\", { cx: -6, cy: 12, r: 1.5, class: \"lt-sld-dot\" }),\n el(\"circle\", { cx: 0, cy: 14, r: 1.5, class: \"lt-sld-dot\" }),\n el(\"circle\", { cx: 6, cy: 12, r: 1.5, class: \"lt-sld-dot\" }),\n ]);\n}\n\nfunction loadSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -16, y: -12, width: 32, height: 24, class: \"lt-sld-fill\" }),\n ]);\n}\n\nfunction capacitorBankSymbol(): string {\n return group({}, [\n lineEl(-10, -6, 10, -6, \"lt-sld-stroke-thick\"),\n lineEl(-10, -2, 10, -2, \"lt-sld-stroke-thick\"),\n lineEl(-10, 4, 10, 4, \"lt-sld-stroke-thick\"),\n lineEl(-10, 8, 10, 8, \"lt-sld-stroke-thick\"),\n lineEl(0, -14, 0, -6),\n lineEl(0, 8, 0, 14),\n ]);\n}\n\nfunction harmonicFilterSymbol(): string {\n return group({}, [\n // L + C chained\n pathEl({ d: \"M -14 -4 A 3 3 0 0 1 -8 -4 A 3 3 0 0 1 -2 -4 A 3 3 0 0 1 4 -4\", class: \"lt-sld-stroke\", fill: \"none\" }),\n lineEl(4, -8, 14, -8),\n lineEl(4, 0, 14, 0),\n lineEl(0, -14, 0, -4),\n lineEl(0, 4, 0, 14),\n ]);\n}\n\nfunction vfdSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -22, y: -16, width: 44, height: 32, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: -2, class: \"lt-sld-symbol-text\", \"text-anchor\": \"middle\", \"font-weight\": \"bold\", \"font-size\": \"11\" }, \"VFD\"),\n pathEl({ d: \"M -10 8 Q -5 2 0 8 Q 5 14 10 8\", class: \"lt-sld-stroke\", fill: \"none\" }),\n lineEl(0, -18, 0, -16),\n lineEl(0, 16, 0, 18),\n ]);\n}\n\nfunction atsSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -22, y: -16, width: 44, height: 32, class: \"lt-sld-fill\" }),\n line({ x1: -14, y1: -8, x2: -2, y2: 6, class: \"lt-sld-stroke-thick\" }),\n line({ x1: 14, y1: -8, x2: 2, y2: 6, class: \"lt-sld-stroke-thick\" }),\n textEl({ x: 0, y: 14, class: \"lt-sld-symbol-text\", \"text-anchor\": \"middle\", \"font-weight\": \"bold\", \"font-size\": \"9\" }, \"ATS\"),\n lineEl(-12, -18, -12, -16),\n lineEl(12, -18, 12, -16),\n lineEl(0, 16, 0, 18),\n ]);\n}\n\nfunction ctSymbol(): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 7, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: 3, class: \"lt-sld-wdg\", \"text-anchor\": \"middle\", \"font-size\": \"7\" }, \"CT\"),\n lineEl(0, -16, 0, -7),\n lineEl(0, 7, 0, 16),\n ]);\n}\n\nfunction ptSymbol(): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 7, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: 3, class: \"lt-sld-wdg\", \"text-anchor\": \"middle\", \"font-size\": \"7\" }, \"PT\"),\n lineEl(0, -16, 0, -7),\n lineEl(0, 7, 0, 16),\n ]);\n}\n\nfunction relaySymbol(deviceNumber?: string): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 11, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: 4, class: \"lt-sld-wdg\", \"text-anchor\": \"middle\", \"font-size\": \"10\" }, deviceNumber ?? \"R\"),\n ]);\n}\n\nfunction surgeArresterSymbol(): string {\n return group({}, [\n el(\"rect\", { x: -7, y: -6, width: 14, height: 14, class: \"lt-sld-fill\" }),\n pathEl({ d: \"M -4 2 Q 0 -4 4 2\", class: \"lt-sld-stroke\", fill: \"none\" }),\n lineEl(0, -16, 0, -6),\n lineEl(0, 8, 0, 14),\n lineEl(-8, 14, 8, 14),\n lineEl(-5, 18, 5, 18),\n lineEl(-2, 22, 2, 22),\n ]);\n}\n\nfunction groundFaultSymbol(): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 12, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: 4, class: \"lt-sld-wdg\", \"text-anchor\": \"middle\", \"font-size\": \"9\" }, \"GFI\"),\n lineEl(0, -14, 0, -12),\n lineEl(0, 12, 0, 14),\n ]);\n}\n\nfunction hubSymbol(label?: string): string {\n return group({}, [\n el(\"rect\", {\n x: -50, y: -18, width: 100, height: 36,\n rx: 4, ry: 4,\n class: \"lt-sld-fill\",\n \"stroke-width\": 2,\n }),\n textEl(\n { x: 0, y: 4, class: \"lt-sld-wdg\", \"text-anchor\": \"middle\", \"font-size\": \"11\" },\n label ?? \"HUB\"\n ),\n lineEl(0, -20, 0, -18),\n lineEl(0, 18, 0, 20),\n // left/right lead stubs for lateral ports\n lineEl(-50, 0, -54, 0),\n lineEl(50, 0, 54, 0),\n ]);\n}\n\nfunction busTieSymbol(): string {\n // Horizontal breaker: two stubs + diagonal switch bar + arc above\n return group({}, [\n lineEl(-16, 0, -4, 0),\n lineEl(4, 0, 16, 0),\n pathEl({ d: \"M -4 0 L 4 -6\", class: \"lt-sld-stroke-thick\" }),\n pathEl({ d: \"M -4 -6 Q 0 -10 4 -6\", class: \"lt-sld-stroke\", fill: \"none\" }),\n ]);\n}\n\nfunction meterSymbol(label: string): string {\n return group({}, [\n el(\"circle\", { cx: 0, cy: 0, r: 12, class: \"lt-sld-fill\" }),\n textEl({ x: 0, y: 4, class: \"lt-sld-wdg\", \"text-anchor\": \"middle\", \"font-size\": \"9\" }, label),\n lineEl(0, -14, 0, -12),\n lineEl(0, 12, 0, 14),\n ]);\n}\n\n/** Main entry — render a node symbol at origin. */\nexport function renderSymbol(type: SLDNodeType, detail?: string): string {\n switch (type) {\n case \"utility\": return utilitySymbol();\n case \"generator\": return generatorSymbol();\n case \"solar\": return solarSymbol();\n case \"wind\": return windSymbol();\n case \"ups\": return upsSymbol();\n case \"transformer\":\n case \"transformer_dy\":\n case \"transformer_yd\":\n case \"transformer_yy\":\n case \"transformer_dd\":\n return transformerSymbol(type);\n case \"autotransformer\": return autotransformerSymbol();\n case \"transformer_3winding\": return threeWindingSymbol();\n case \"breaker\": return breakerSymbol();\n case \"breaker_vacuum\": return vacuumBreakerSymbol();\n case \"recloser\": return recloserSymbol();\n case \"switch\": return switchSymbol(true);\n case \"switch_load\": return loadSwitchSymbol();\n case \"ground_switch\": return groundSwitchSymbol();\n case \"sectionalizer\": return sectionalizerSymbol();\n case \"fuse\": return fuseSymbol();\n case \"fuse_cl\": return fuseCLSymbol();\n case \"motor\": return motorSymbol();\n case \"load\": return loadSymbol();\n case \"capacitor_bank\": return capacitorBankSymbol();\n case \"harmonic_filter\": return harmonicFilterSymbol();\n case \"vfd\": return vfdSymbol();\n case \"ats\": return atsSymbol();\n case \"ct\": return ctSymbol();\n case \"pt\": return ptSymbol();\n case \"relay\": return relaySymbol(detail);\n case \"surge_arrester\": return surgeArresterSymbol();\n case \"ground_fault\": return groundFaultSymbol();\n case \"watthour_meter\": return meterSymbol(\"Wh\");\n case \"demand_meter\": return meterSymbol(\"D\");\n case \"bus\": return \"\";\n case \"hub\": return hubSymbol(detail);\n case \"bus_tie\": return busTieSymbol();\n default: return loadSymbol();\n }\n}\n","import type { SLDAST, SLDConnection, SLDNode, SLDNodeType } from \"../../core/types\";\nimport { geometryFor } from \"./symbols\";\n\n/**\n * Top-down hierarchical layout:\n * level 0 = sources (top)\n * each edge forces child.level >= parent.level + 1\n * Bus nodes expand horizontally to span their children.\n * Other nodes are positioned in a tidy tree-like layout.\n */\n\nexport interface SLDLayoutNode {\n node: SLDNode;\n nodeType: SLDNodeType;\n /** center x */\n x: number;\n /** center y */\n y: number;\n /** Terminal y (top and bottom) after symbol geometry */\n topY: number;\n bottomY: number;\n level: number;\n /** Half width for spacing */\n halfWidth: number;\n /** For bus nodes: left and right extent (x min/max) */\n busLeft?: number;\n busRight?: number;\n}\n\nexport interface SLDLayoutEdge {\n from: string;\n to: string;\n path: string;\n cable?: string;\n label?: string;\n midX: number;\n midY: number;\n}\n\nexport interface SLDLayoutBand {\n level: number;\n voltage?: string;\n y: number;\n height: number;\n}\n\nexport interface SLDLayoutResult {\n width: number;\n height: number;\n nodes: SLDLayoutNode[];\n edges: SLDLayoutEdge[];\n bands: SLDLayoutBand[];\n nodeById: Map<string, SLDLayoutNode>;\n}\n\nconst LEVEL_SPACING = 100;\nconst H_SPACING = 90;\nconst LEFT_PADDING = 80;\nconst TOP_PADDING = 40;\nconst BUS_OVERHANG = 20;\n\nfunction computeLevels(ast: SLDAST): Map<string, number> {\n const levels = new Map<string, number>();\n const inEdges = new Map<string, SLDConnection[]>();\n const outEdges = new Map<string, SLDConnection[]>();\n for (const n of ast.nodes) {\n inEdges.set(n.id, []);\n outEdges.set(n.id, []);\n }\n for (const c of ast.connections) {\n inEdges.get(c.to)?.push(c);\n outEdges.get(c.from)?.push(c);\n }\n\n // Sources: no incoming edges\n const roots = ast.nodes.filter((n) => (inEdges.get(n.id) ?? []).length === 0);\n for (const r of roots) levels.set(r.id, 0);\n\n // Identify bus_tie nodes — they are lateral at the same level as their source.\n const typeById = new Map<string, SLDNodeType>();\n for (const n of ast.nodes) typeById.set(n.id, n.nodeType);\n const isTieEdge = (c: SLDConnection): boolean =>\n typeById.get(c.from) === \"bus_tie\" || typeById.get(c.to) === \"bus_tie\";\n\n // Relaxation: level(to) = max(level(from)+1); iterate until stable.\n // Skip edges touching bus_tie (those are lateral).\n const maxIter = ast.nodes.length + 2;\n for (let iter = 0; iter < maxIter; iter++) {\n let changed = false;\n for (const c of ast.connections) {\n if (isTieEdge(c)) continue;\n const fromLvl = levels.get(c.from);\n if (fromLvl === undefined) continue;\n const want = fromLvl + 1;\n const curr = levels.get(c.to);\n if (curr === undefined || want > curr) {\n levels.set(c.to, want);\n changed = true;\n }\n }\n if (!changed) break;\n }\n\n // Tie edges: force both endpoints and the tie node itself to share level\n // with any already-leveled participant.\n for (let iter = 0; iter < maxIter; iter++) {\n let changed = false;\n for (const c of ast.connections) {\n if (!isTieEdge(c)) continue;\n const fromLvl = levels.get(c.from);\n const toLvl = levels.get(c.to);\n const shared = fromLvl ?? toLvl;\n if (shared === undefined) continue;\n if (fromLvl === undefined || fromLvl !== shared) {\n levels.set(c.from, shared);\n changed = true;\n }\n if (toLvl === undefined || toLvl !== shared) {\n levels.set(c.to, shared);\n changed = true;\n }\n }\n if (!changed) break;\n }\n\n // Any orphaned nodes: put at level 0\n for (const n of ast.nodes) {\n if (!levels.has(n.id)) levels.set(n.id, 0);\n }\n return levels;\n}\n\nfunction orderWithinLevel(\n ast: SLDAST,\n levels: Map<string, number>\n): Map<number, string[]> {\n const byLevel = new Map<number, string[]>();\n for (const n of ast.nodes) {\n const lvl = levels.get(n.id) ?? 0;\n if (!byLevel.has(lvl)) byLevel.set(lvl, []);\n byLevel.get(lvl)!.push(n.id);\n }\n\n // Order: DFS from sources preserving declaration order.\n const visited = new Set<string>();\n const order = new Map<string, number>();\n let idx = 0;\n\n const adj = new Map<string, string[]>();\n for (const n of ast.nodes) adj.set(n.id, []);\n for (const c of ast.connections) adj.get(c.from)?.push(c.to);\n\n function dfs(id: string): void {\n if (visited.has(id)) return;\n visited.add(id);\n order.set(id, idx++);\n for (const child of adj.get(id) ?? []) dfs(child);\n }\n\n // Start from sources in declaration order\n const inEdgeCount = new Map<string, number>();\n for (const n of ast.nodes) inEdgeCount.set(n.id, 0);\n for (const c of ast.connections) {\n inEdgeCount.set(c.to, (inEdgeCount.get(c.to) ?? 0) + 1);\n }\n for (const n of ast.nodes) {\n if ((inEdgeCount.get(n.id) ?? 0) === 0) dfs(n.id);\n }\n // Fallback for any remaining nodes\n for (const n of ast.nodes) dfs(n.id);\n\n // Sort each level by the DFS order\n for (const [lvl, ids] of byLevel.entries()) {\n ids.sort((a, b) => (order.get(a) ?? 0) - (order.get(b) ?? 0));\n byLevel.set(lvl, ids);\n }\n return byLevel;\n}\n\nexport function layoutSLD(ast: SLDAST): SLDLayoutResult {\n const levels = computeLevels(ast);\n const byLevel = orderWithinLevel(ast, levels);\n const nodeMap = new Map<string, SLDNode>();\n for (const n of ast.nodes) nodeMap.set(n.id, n);\n\n // First pass: x position for all non-bus nodes.\n // Buses get x later after their children are placed.\n const layoutNodes: SLDLayoutNode[] = [];\n const byIdLayout = new Map<string, SLDLayoutNode>();\n\n const parents = new Map<string, string[]>();\n const children = new Map<string, string[]>();\n for (const n of ast.nodes) {\n parents.set(n.id, []);\n children.set(n.id, []);\n }\n for (const c of ast.connections) {\n parents.get(c.to)?.push(c.from);\n children.get(c.from)?.push(c.to);\n }\n\n const sortedLevels = Array.from(byLevel.keys()).sort((a, b) => a - b);\n const maxLevel = sortedLevels.length ? sortedLevels[sortedLevels.length - 1] : 0;\n\n // Assign sequential X for non-bus leaf-like nodes within each level.\n // Then propagate bus positions by averaging their children.\n let nextX = LEFT_PADDING;\n // x assignment helper: if children already placed, center above them; else nextX\n function placeNode(id: string): SLDLayoutNode {\n const existing = byIdLayout.get(id);\n if (existing) return existing;\n const node = nodeMap.get(id)!;\n const lvl = levels.get(id) ?? 0;\n const geom = geometryFor(node.nodeType);\n const y = TOP_PADDING + lvl * LEVEL_SPACING;\n const ln: SLDLayoutNode = {\n node,\n nodeType: node.nodeType,\n x: 0,\n y,\n topY: y + geom.topY,\n bottomY: y + geom.bottomY,\n level: lvl,\n halfWidth: geom.halfWidth,\n };\n byIdLayout.set(id, ln);\n layoutNodes.push(ln);\n return ln;\n }\n\n // Walk levels top-to-bottom placing non-bus nodes sequentially; buses get centered on children\n // We do this in two passes: first place everything sequentially, then re-center buses.\n for (const lvl of sortedLevels) {\n for (const id of byLevel.get(lvl)!) {\n const ln = placeNode(id);\n if (ln.nodeType === \"bus\") {\n // defer\n ln.x = nextX; // placeholder\n } else {\n ln.x = nextX;\n nextX += H_SPACING;\n }\n }\n }\n\n // Center buses over their children (or parents if no children)\n // Iterate multiple times to stabilize.\n for (let iter = 0; iter < 4; iter++) {\n for (const lvl of sortedLevels) {\n for (const id of byLevel.get(lvl)!) {\n const ln = byIdLayout.get(id)!;\n if (ln.nodeType !== \"bus\") continue;\n const childrenIds = children.get(id) ?? [];\n const parentIds = parents.get(id) ?? [];\n const relatedXs: number[] = [];\n for (const cid of childrenIds) {\n const c = byIdLayout.get(cid);\n if (c && c.nodeType !== \"bus_tie\") relatedXs.push(c.x);\n }\n if (relatedXs.length === 0) {\n for (const pid of parentIds) {\n const p = byIdLayout.get(pid);\n if (p && p.nodeType !== \"bus_tie\") relatedXs.push(p.x);\n }\n }\n if (relatedXs.length > 0) {\n const minX = Math.min(...relatedXs);\n const maxX = Math.max(...relatedXs);\n ln.x = (minX + maxX) / 2;\n ln.busLeft = minX - BUS_OVERHANG;\n ln.busRight = maxX + BUS_OVERHANG;\n } else {\n ln.busLeft = ln.x - 40;\n ln.busRight = ln.x + 40;\n }\n }\n }\n }\n\n // Center non-bus nodes over their child(ren), bottom-up.\n // For convergence (child has multiple parents at same level), spread\n // parents horizontally around the child instead of collapsing them to one x.\n const CONVERGENCE_SPREAD = Math.max(H_SPACING, 110);\n for (let iter = 0; iter < 4; iter++) {\n for (const lvl of [...sortedLevels].reverse()) {\n for (const id of byLevel.get(lvl)!) {\n const ln = byIdLayout.get(id)!;\n if (ln.nodeType === \"bus\" || ln.nodeType === \"bus_tie\") continue;\n const childIds = children.get(id) ?? [];\n if (childIds.length === 1) {\n const child = byIdLayout.get(childIds[0]);\n if (!child) continue;\n // Only the convergence child's parents are spread\n const siblingParents = (parents.get(child.node.id) ?? [])\n .map((pid) => byIdLayout.get(pid))\n .filter((p): p is SLDLayoutNode => !!p && p.level === lvl && p.nodeType !== \"bus\");\n if (siblingParents.length > 1) {\n // Sort by original sequential x to preserve declared order\n siblingParents.sort((a, b) => a.x - b.x);\n const n = siblingParents.length;\n const spread = Math.max(\n CONVERGENCE_SPREAD,\n (child.halfWidth * 2 + 40) / Math.max(1, n - 1)\n );\n const idx = siblingParents.indexOf(ln);\n ln.x = child.x + (idx - (n - 1) / 2) * spread;\n } else {\n ln.x = child.x;\n }\n } else if (childIds.length > 1) {\n const xs = childIds\n .map((c) => byIdLayout.get(c)?.x)\n .filter((v): v is number => v !== undefined);\n if (xs.length > 0) {\n ln.x = (Math.min(...xs) + Math.max(...xs)) / 2;\n }\n }\n }\n }\n }\n\n // Bus-tie lateral placement: place tie and its \"second bus\" to the right\n // of the \"first bus\" at the same level. Shift the entire busB cluster\n // (all nodes reachable from busB excluding busA/tie) so the whole\n // right-side subtree moves together.\n for (const ln of layoutNodes) {\n if (ln.nodeType !== \"bus_tie\") continue;\n const inIds = parents.get(ln.node.id) ?? [];\n const outIds = children.get(ln.node.id) ?? [];\n const busA = inIds.map((id) => byIdLayout.get(id)).find((n) => n?.nodeType === \"bus\");\n const busB = outIds.map((id) => byIdLayout.get(id)).find((n) => n?.nodeType === \"bus\");\n if (!busA || !busB) continue;\n\n const busAChildren = (children.get(busA.node.id) ?? [])\n .map((id) => byIdLayout.get(id))\n .filter((c): c is SLDLayoutNode => !!c && c.nodeType !== \"bus_tie\");\n const busAMaxX = busAChildren.length\n ? Math.max(...busAChildren.map((c) => c.x))\n : busA.x;\n ln.y = busA.y;\n ln.x = busAMaxX + 60;\n\n // Cluster of busB: BFS in both directions excluding busA and tie itself\n const cluster = new Set<string>([busB.node.id]);\n const queue = [busB.node.id];\n const excluded = new Set<string>([busA.node.id, ln.node.id]);\n while (queue.length) {\n const cur = queue.shift()!;\n const neighbors = [...(children.get(cur) ?? []), ...(parents.get(cur) ?? [])];\n for (const nb of neighbors) {\n if (cluster.has(nb) || excluded.has(nb)) continue;\n cluster.add(nb);\n queue.push(nb);\n }\n }\n\n // Shift whole cluster so its leftmost member sits just right of the tie\n let minClusterX = Infinity;\n for (const id of cluster) {\n const n = byIdLayout.get(id);\n if (!n) continue;\n const left = n.nodeType === \"bus\" ? (n.busLeft ?? n.x) : n.x - n.halfWidth;\n if (left < minClusterX) minClusterX = left;\n }\n const desiredLeft = ln.x + 30;\n const shift = desiredLeft - minClusterX;\n if (shift > 0) {\n for (const id of cluster) {\n const n = byIdLayout.get(id);\n if (!n) continue;\n n.x += shift;\n if (n.busLeft !== undefined) n.busLeft += shift;\n if (n.busRight !== undefined) n.busRight += shift;\n }\n }\n }\n\n // Label-aware collision resolution within each level.\n // For each non-bus node, estimate displayed label width so sibling\n // placement respects text, not just symbol geometry.\n const labelHalfWidth = (ln: SLDLayoutNode): number => {\n if (ln.nodeType === \"bus\" || ln.nodeType === \"bus_tie\") return 0;\n const node = ln.node;\n const txtParts: string[] = [node.label ?? node.id];\n if (node.rating) txtParts.push(node.rating);\n const longest = txtParts.reduce((m, s) => Math.max(m, s.length), 0);\n // Bold 11px sans-serif id is ~6.2px per char at widest; pad a bit.\n return (longest * 6.2) / 2 + 4;\n };\n\n for (const lvl of sortedLevels) {\n const ids = byLevel.get(lvl)!;\n const sorted = ids.map((id) => byIdLayout.get(id)!).sort((a, b) => a.x - b.x);\n for (let i = 1; i < sorted.length; i++) {\n const prev = sorted[i - 1];\n const cur = sorted[i];\n if (prev.nodeType === \"bus\" && cur.nodeType !== \"bus\") continue;\n if (cur.nodeType === \"bus\" && prev.nodeType !== \"bus\") continue;\n const symGap =\n (prev.nodeType === \"bus\" ? 0 : prev.halfWidth) +\n (cur.nodeType === \"bus\" ? 0 : cur.halfWidth) +\n 16;\n const labelGap = labelHalfWidth(prev) + labelHalfWidth(cur) + 8;\n const minGap = Math.max(symGap, labelGap);\n if (cur.x - prev.x < minGap) {\n cur.x = prev.x + minGap;\n }\n }\n }\n\n // Bus nodes: re-update extent after collision resolution\n for (const ln of layoutNodes) {\n if (ln.nodeType !== \"bus\") continue;\n const childrenIds = children.get(ln.node.id) ?? [];\n const parentIds = parents.get(ln.node.id) ?? [];\n const xs: number[] = [];\n for (const cid of [...childrenIds, ...parentIds]) {\n const rel = byIdLayout.get(cid);\n if (rel && rel.nodeType !== \"bus_tie\") xs.push(rel.x);\n }\n // Include tie x so bus stretches up to the tie (but doesn't center on it)\n const tieXs: number[] = [];\n for (const cid of [...childrenIds, ...parentIds]) {\n const rel = byIdLayout.get(cid);\n if (rel && rel.nodeType === \"bus_tie\") tieXs.push(rel.x);\n }\n if (xs.length > 0) {\n let left = Math.min(...xs) - BUS_OVERHANG;\n let right = Math.max(...xs) + BUS_OVERHANG;\n for (const tx of tieXs) {\n if (tx < left) left = tx;\n if (tx > right) right = tx;\n }\n ln.busLeft = left;\n ln.busRight = right;\n ln.x = (Math.min(...xs) + Math.max(...xs)) / 2;\n }\n }\n\n // Update terminal Ys\n for (const ln of layoutNodes) {\n const geom = geometryFor(ln.nodeType);\n ln.topY = ln.y + geom.topY;\n ln.bottomY = ln.y + geom.bottomY;\n }\n\n // Build edges\n const edges: SLDLayoutEdge[] = [];\n for (const c of ast.connections) {\n const from = byIdLayout.get(c.from);\n const to = byIdLayout.get(c.to);\n if (!from || !to) continue;\n\n const fx = from.x;\n const tx = to.x;\n const lateralTie =\n from.nodeType === \"bus_tie\" ||\n to.nodeType === \"bus_tie\" ||\n (from.level === to.level && (from.nodeType === \"bus\" || to.nodeType === \"bus\"));\n\n let startY: number;\n let endY: number;\n if (lateralTie) {\n startY = from.y;\n endY = to.y;\n } else {\n startY = from.nodeType === \"bus\" ? from.y : from.bottomY;\n endY = to.nodeType === \"bus\" ? to.y : to.topY;\n }\n\n let pathD: string;\n if (lateralTie) {\n // Horizontal segment at common y; small stubs if tie sits on bus y\n pathD = `M ${fx} ${startY} L ${tx} ${endY}`;\n } else if (Math.abs(fx - tx) < 0.5) {\n pathD = `M ${fx} ${startY} L ${tx} ${endY}`;\n } else {\n // L-path: go down halfway, then horizontal, then vertical\n const midY = (startY + endY) / 2;\n pathD = `M ${fx} ${startY} L ${fx} ${midY} L ${tx} ${midY} L ${tx} ${endY}`;\n }\n\n edges.push({\n from: c.from,\n to: c.to,\n path: pathD,\n cable: c.cable,\n label: c.label,\n midX: (fx + tx) / 2,\n midY: (startY + endY) / 2,\n });\n }\n\n // Compute bands (voltage regions)\n const bands: SLDLayoutBand[] = [];\n for (const lvl of sortedLevels) {\n // Find a representative voltage label for this band\n let voltage: string | undefined;\n for (const id of byLevel.get(lvl)!) {\n const n = nodeMap.get(id)!;\n if (n.voltage) {\n voltage = n.voltage;\n break;\n }\n }\n bands.push({\n level: lvl,\n voltage,\n y: TOP_PADDING + lvl * LEVEL_SPACING - LEVEL_SPACING / 2 + 10,\n height: LEVEL_SPACING,\n });\n }\n\n // Normalize X so the leftmost content sits at LEFT_PADDING (no empty left gutter).\n let contentMinX = Infinity;\n for (const ln of layoutNodes) {\n const left = ln.nodeType === \"bus\"\n ? (ln.busLeft ?? ln.x)\n : ln.x - ln.halfWidth;\n if (left < contentMinX) contentMinX = left;\n }\n if (!Number.isFinite(contentMinX)) contentMinX = 0;\n const xShift = LEFT_PADDING - contentMinX;\n if (Math.abs(xShift) > 0.5) {\n for (const ln of layoutNodes) {\n ln.x += xShift;\n if (ln.busLeft !== undefined) ln.busLeft += xShift;\n if (ln.busRight !== undefined) ln.busRight += xShift;\n }\n for (const e of edges) {\n e.midX += xShift;\n // Shift every \"x\" coord in the path string (M / L tokens are \"x y\" pairs).\n e.path = e.path.replace(\n /([ML])\\s+(-?[\\d.]+)\\s+(-?[\\d.]+)/g,\n (_m, cmd, x, y) => `${cmd} ${Number(x) + xShift} ${y}`\n );\n }\n }\n\n // Compute canvas size\n let maxX = 0;\n for (const ln of layoutNodes) {\n const right = (ln.busRight ?? (ln.x + ln.halfWidth)) + 60;\n if (right > maxX) maxX = right;\n }\n const width = Math.max(400, maxX + 40);\n const height = TOP_PADDING + maxLevel * LEVEL_SPACING + 120;\n\n return {\n width,\n height,\n nodes: layoutNodes,\n edges,\n bands,\n nodeById: byIdLayout,\n };\n}\n","import type { SLDAST, SLDNode, RenderConfig } from \"../../core/types\";\nimport {\n svgRoot,\n group,\n el,\n path as pathEl,\n text as textEl,\n title as titleEl,\n desc,\n defs,\n} from \"../../core/svg\";\nimport { resolveIndustrialTheme, type IndustrialTokens, type ResolvedTheme } from \"../../core/theme\";\nimport { layoutSLD, type SLDLayoutNode } from \"./layout\";\nimport { renderSymbol } from \"./symbols\";\n\ntype IT = ResolvedTheme<IndustrialTokens>;\n\n// Zebra-band fills for grouped rows. Local to SLD — no other diagram uses\n// alternating row backgrounds, so they don't need to live in IndustrialTokens.\nconst BAND_ODD_LIGHT = \"#f7f7f7\";\nconst BAND_EVEN_LIGHT = \"#fbfbfb\";\nconst BAND_ODD_DARK = \"#2a2b3c\";\nconst BAND_EVEN_DARK = \"#313244\";\n\nfunction buildCss(t: IT): string {\n const isDark = t.bg !== \"#ffffff\";\n const bandOdd = isDark ? BAND_ODD_DARK : BAND_ODD_LIGHT;\n const bandEven = isDark ? BAND_EVEN_DARK : BAND_EVEN_LIGHT;\n return `\n.lt-sld { font-family: system-ui, -apple-system, sans-serif; }\n.lt-sld-stroke { stroke: ${t.stroke}; stroke-width: 1.8; fill: none; }\n.lt-sld-stroke-thick { stroke: ${t.stroke}; stroke-width: 2.4; fill: none; stroke-linecap: round; }\n.lt-sld-fill { fill: ${t.bg}; stroke: ${t.stroke}; stroke-width: 2; }\n.lt-sld-fill-dark { fill: ${t.stroke}; stroke: ${t.stroke}; stroke-width: 1; }\n.lt-sld-dot { fill: ${t.stroke}; stroke: none; }\n.lt-sld-wire { stroke: ${t.stroke}; stroke-width: 2; fill: none; }\n.lt-sld-bus { stroke: ${t.strokeHeavy}; stroke-width: 6; stroke-linecap: square; }\n.lt-sld-band-odd { fill: ${bandOdd}; stroke: none; }\n.lt-sld-band-even { fill: ${bandEven}; stroke: none; }\n.lt-sld-band-label { font: bold 11px sans-serif; fill: ${t.textMuted}; }\n.lt-sld-title { font: bold 16px sans-serif; fill: ${t.text}; }\n.lt-sld-id { font: bold 11px sans-serif; fill: ${t.text}; text-anchor: middle; }\n.lt-sld-rating { font: 9px sans-serif; fill: ${t.textMuted}; text-anchor: middle; }\n.lt-sld-voltage { font: bold 10px sans-serif; fill: ${t.textMuted}; }\n.lt-sld-nameplate { font: 9px sans-serif; fill: ${t.textMuted}; }\n.lt-sld-cable { font: 9px ui-monospace, SFMono-Regular, Menlo, monospace; fill: ${t.textMuted}; }\n.lt-sld-symbol-text { font: 11px sans-serif; fill: ${t.text}; dominant-baseline: middle; }\n.lt-sld-wdg { font: bold 10px sans-serif; fill: ${t.stroke}; dominant-baseline: middle; }\n.lt-sld-bus-label { font: bold 11px sans-serif; fill: ${t.accent}; }\n`.trim();\n}\n\nfunction renderLabels(ln: SLDLayoutNode): string[] {\n const pieces: string[] = [];\n const { node } = ln;\n if (ln.nodeType === \"bus\") {\n // Bus label + voltage sits above the bus bar\n const label = node.label ?? node.id;\n pieces.push(\n textEl(\n { x: (ln.busLeft ?? ln.x - 40) + 4, y: ln.y - 8, class: \"lt-sld-bus-label\" },\n node.voltage ? `${node.voltage} · ${label}` : label\n )\n );\n return pieces;\n }\n\n if (ln.nodeType === \"hub\") {\n // Label rendered inside the hub rect; skip external ID.\n if (node.rating || node.voltage) {\n const lines: string[] = [];\n if (node.rating) lines.push(node.rating);\n if (node.voltage) lines.push(node.voltage);\n lines.forEach((l, i) => {\n pieces.push(\n textEl(\n { x: ln.x, y: ln.bottomY + 14 + i * 11, class: \"lt-sld-rating\" },\n l\n )\n );\n });\n }\n return pieces;\n }\n\n if (ln.nodeType === \"bus_tie\") {\n // Tie breaker label to the side\n pieces.push(\n textEl(\n { x: ln.x, y: ln.topY - 6, class: \"lt-sld-rating\" },\n node.label ?? node.id\n )\n );\n return pieces;\n }\n\n // ID above\n const idY = ln.topY - 22;\n pieces.push(\n textEl({ x: ln.x, y: idY, class: \"lt-sld-id\" }, node.label ?? node.id)\n );\n\n // Rating below\n const lines: string[] = [];\n if (node.rating) lines.push(node.rating);\n if (node.voltage) lines.push(node.voltage);\n if (node.deviceNumber && ln.nodeType === \"relay\") {\n // deviceNumber is shown inside the relay glyph; skip here\n }\n lines.forEach((l, i) => {\n pieces.push(\n textEl(\n { x: ln.x, y: ln.bottomY + 14 + i * 11, class: \"lt-sld-rating\" },\n l\n )\n );\n });\n\n // Transformer nameplate\n if (\n (ln.nodeType === \"transformer\" ||\n ln.nodeType === \"transformer_dy\" ||\n ln.nodeType === \"transformer_yd\" ||\n ln.nodeType === \"transformer_yy\" ||\n ln.nodeType === \"transformer_dd\" ||\n ln.nodeType === \"autotransformer\" ||\n ln.nodeType === \"transformer_3winding\") &&\n node.nameplate\n ) {\n const np = node.nameplate;\n const keys = Object.keys(np);\n let offset = -12;\n const x = ln.x + ln.halfWidth + 28;\n for (const k of keys) {\n pieces.push(\n textEl(\n { x, y: ln.y + offset, class: \"lt-sld-nameplate\" },\n `${k}: ${np[k]}`\n )\n );\n offset += 11;\n }\n }\n\n return pieces;\n}\n\nexport function renderSLD(ast: SLDAST, config?: RenderConfig): string {\n const layout = layoutSLD(ast);\n const t = resolveIndustrialTheme(config?.theme ?? \"default\");\n const titleOffset = ast.title ? 34 : 12;\n const width = Math.ceil(layout.width);\n const height = Math.ceil(layout.height + titleOffset);\n\n const children: string[] = [];\n children.push(titleEl(ast.title ?? \"Single-Line Diagram\"));\n children.push(\n desc(\n `Single-line diagram with ${ast.nodes.length} nodes and ${ast.connections.length} connections`\n )\n );\n children.push(el(\"style\", {}, buildCss(t)));\n\n // Arrow marker\n children.push(\n defs([\n el(\n \"marker\",\n {\n id: \"lt-sld-arrow\",\n markerWidth: 8,\n markerHeight: 8,\n refX: 6,\n refY: 3,\n orient: \"auto\",\n markerUnits: \"strokeWidth\",\n },\n [el(\"path\", { d: \"M 0 0 L 6 3 L 0 6 z\", fill: t.textMuted })]\n ),\n ])\n );\n\n if (ast.title) {\n children.push(\n textEl({ x: 20, y: 22, class: \"lt-sld-title\" }, ast.title)\n );\n }\n\n const inner: string[] = [];\n\n // Voltage bands (alternating background)\n layout.bands.forEach((b, i) => {\n inner.push(\n el(\"rect\", {\n x: 0,\n y: b.y,\n width: layout.width,\n height: b.height,\n class: i % 2 === 0 ? \"lt-sld-band-odd\" : \"lt-sld-band-even\",\n })\n );\n if (b.voltage) {\n inner.push(\n textEl(\n { x: 14, y: b.y + 18, class: \"lt-sld-band-label\" },\n b.voltage\n )\n );\n }\n });\n\n // Connection wires (draw before symbols so symbols sit on top)\n for (const e of layout.edges) {\n inner.push(pathEl({ d: e.path, class: \"lt-sld-wire\" }));\n if (e.cable) {\n // Position cable label near midpoint, slightly offset\n inner.push(\n textEl(\n { x: e.midX + 6, y: e.midY - 2, class: \"lt-sld-cable\" },\n e.cable\n )\n );\n }\n if (e.label) {\n inner.push(\n textEl(\n { x: e.midX + 6, y: e.midY + 10, class: \"lt-sld-cable\" },\n e.label\n )\n );\n }\n }\n\n // Nodes\n for (const ln of layout.nodes) {\n if (ln.nodeType === \"bus\") {\n const left = ln.busLeft ?? ln.x - 40;\n const right = ln.busRight ?? ln.x + 40;\n inner.push(\n el(\"line\", {\n x1: left,\n y1: ln.y,\n x2: right,\n y2: ln.y,\n class: \"lt-sld-bus\",\n \"data-id\": ln.node.id,\n })\n );\n for (const piece of renderLabels(ln)) inner.push(piece);\n continue;\n }\n const attrs = {\n transform: `translate(${ln.x}, ${ln.y})`,\n \"data-type\": ln.nodeType,\n \"data-id\": ln.node.id,\n };\n inner.push(\n group(attrs, [\n renderSymbol(\n ln.nodeType,\n ln.nodeType === \"hub\"\n ? ln.node.label ?? ln.node.id\n : (ln.node as SLDNode).deviceNumber\n ),\n ])\n );\n for (const piece of renderLabels(ln)) inner.push(piece);\n }\n\n const wrap = group({ transform: `translate(0, ${titleOffset})` }, inner);\n children.push(wrap);\n\n return svgRoot(\n {\n class: \"lt-sld\",\n role: \"img\",\n \"aria-labelledby\": \"lt-sld-title lt-sld-desc\",\n width,\n height,\n viewBox: `0 0 ${width} ${height}`,\n },\n children\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseSLDDSL } from \"./parser\";\nimport { renderSLD } from \"./renderer\";\n\nexport const sld: DiagramPlugin = {\n type: \"sld\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"sld\");\n },\n parse: parseSLDDSL,\n\n render(text: string, config): string {\n const ast = parseSLDDSL(text);\n return renderSLD(ast, config);\n },\n};\n\nexport { parseSLDDSL } from \"./parser\";\nexport { renderSLD } from \"./renderer\";\nexport { layoutSLD } from \"./layout\";\n"]}