schematex 0.1.1 → 0.2.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 (194) hide show
  1. package/README.md +130 -15
  2. package/dist/api-bQZ98gkJ.d.cts +22 -0
  3. package/dist/api-bQZ98gkJ.d.ts +22 -0
  4. package/dist/browser.cjs +46 -0
  5. package/dist/browser.cjs.map +1 -0
  6. package/dist/browser.d.cts +27 -0
  7. package/dist/browser.d.ts +27 -0
  8. package/dist/browser.js +40 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/{chunk-XXU36667.js → chunk-2OIW3MAE.js} +4 -3
  11. package/dist/chunk-2OIW3MAE.js.map +1 -0
  12. package/dist/{chunk-3FTUWAXK.cjs → chunk-3M7QWADF.cjs} +5 -4
  13. package/dist/chunk-3M7QWADF.cjs.map +1 -0
  14. package/dist/{chunk-BE5HNDA5.cjs → chunk-4HPT4BOI.cjs} +5 -4
  15. package/dist/{chunk-BE5HNDA5.cjs.map → chunk-4HPT4BOI.cjs.map} +1 -1
  16. package/dist/{chunk-CZRM7LT7.js → chunk-4TS5NB7L.js} +4 -3
  17. package/dist/chunk-4TS5NB7L.js.map +1 -0
  18. package/dist/{chunk-4G7ZIBHN.js → chunk-5SH5NUDW.js} +3 -2
  19. package/dist/{chunk-4G7ZIBHN.js.map → chunk-5SH5NUDW.js.map} +1 -1
  20. package/dist/{chunk-47ZC6EMJ.js → chunk-7WXAAVR3.js} +4 -3
  21. package/dist/{chunk-47ZC6EMJ.js.map → chunk-7WXAAVR3.js.map} +1 -1
  22. package/dist/{chunk-5C7DPDHQ.js → chunk-A74ZCP5I.js} +4 -3
  23. package/dist/{chunk-5C7DPDHQ.js.map → chunk-A74ZCP5I.js.map} +1 -1
  24. package/dist/{chunk-DS47NTWZ.cjs → chunk-AMP2FFES.cjs} +11 -10
  25. package/dist/chunk-AMP2FFES.cjs.map +1 -0
  26. package/dist/{chunk-2UKC6ZCY.cjs → chunk-CEV3GZA3.cjs} +12 -11
  27. package/dist/chunk-CEV3GZA3.cjs.map +1 -0
  28. package/dist/{chunk-NYCIK4SU.cjs → chunk-DTMCQXXC.cjs} +13 -12
  29. package/dist/chunk-DTMCQXXC.cjs.map +1 -0
  30. package/dist/{chunk-FDLZEKEB.js → chunk-GEPBET4L.js} +3 -2
  31. package/dist/chunk-GEPBET4L.js.map +1 -0
  32. package/dist/chunk-HAIBAF6J.cjs +1880 -0
  33. package/dist/chunk-HAIBAF6J.cjs.map +1 -0
  34. package/dist/{chunk-FGPTCDUT.cjs → chunk-HKRYKEOV.cjs} +5 -4
  35. package/dist/chunk-HKRYKEOV.cjs.map +1 -0
  36. package/dist/{chunk-D4JTSPOL.js → chunk-HLYA4QBB.js} +4 -3
  37. package/dist/chunk-HLYA4QBB.js.map +1 -0
  38. package/dist/{chunk-7FZSPKX3.cjs → chunk-IMHR3S5H.cjs} +6 -5
  39. package/dist/chunk-IMHR3S5H.cjs.map +1 -0
  40. package/dist/{chunk-HGHWCB6K.js → chunk-IQIJ6WW6.js} +4 -3
  41. package/dist/chunk-IQIJ6WW6.js.map +1 -0
  42. package/dist/{chunk-UHLYS3W5.cjs → chunk-IY52OWPG.cjs} +5 -4
  43. package/dist/{chunk-UHLYS3W5.cjs.map → chunk-IY52OWPG.cjs.map} +1 -1
  44. package/dist/chunk-JZGFSRVT.js +1873 -0
  45. package/dist/chunk-JZGFSRVT.js.map +1 -0
  46. package/dist/{chunk-3J7TFUOC.js → chunk-L6IHSTPP.js} +4 -3
  47. package/dist/{chunk-3J7TFUOC.js.map → chunk-L6IHSTPP.js.map} +1 -1
  48. package/dist/{chunk-4DBRNOPA.cjs → chunk-LKHWBDWZ.cjs} +5 -4
  49. package/dist/{chunk-4DBRNOPA.cjs.map → chunk-LKHWBDWZ.cjs.map} +1 -1
  50. package/dist/{chunk-34X3ZJ6E.cjs → chunk-LXNFVHDT.cjs} +3 -2
  51. package/dist/{chunk-34X3ZJ6E.cjs.map → chunk-LXNFVHDT.cjs.map} +1 -1
  52. package/dist/chunk-M6AMNXQ7.js +4539 -0
  53. package/dist/chunk-M6AMNXQ7.js.map +1 -0
  54. package/dist/{chunk-XX4BKS7Y.js → chunk-MRGS54WN.js} +4 -3
  55. package/dist/chunk-MRGS54WN.js.map +1 -0
  56. package/dist/{chunk-ROFLJ74T.js → chunk-MXJ6FHSY.js} +4 -3
  57. package/dist/chunk-MXJ6FHSY.js.map +1 -0
  58. package/dist/{chunk-V6WO7RK7.cjs → chunk-PIQG2Z5N.cjs} +5 -4
  59. package/dist/chunk-PIQG2Z5N.cjs.map +1 -0
  60. package/dist/{chunk-U5GGE6PJ.js → chunk-RQX53J6M.js} +4 -3
  61. package/dist/chunk-RQX53J6M.js.map +1 -0
  62. package/dist/{chunk-N7KOXOMX.cjs → chunk-S6VPECM3.cjs} +72 -2
  63. package/dist/chunk-S6VPECM3.cjs.map +1 -0
  64. package/dist/{chunk-VFQCTXOX.js → chunk-SPIW4VWP.js} +4 -3
  65. package/dist/chunk-SPIW4VWP.js.map +1 -0
  66. package/dist/{chunk-IX554O5K.js → chunk-TIGP2OEJ.js} +72 -3
  67. package/dist/chunk-TIGP2OEJ.js.map +1 -0
  68. package/dist/{chunk-LMFSHK45.js → chunk-TPA36ULU.js} +4 -3
  69. package/dist/{chunk-LMFSHK45.js.map → chunk-TPA36ULU.js.map} +1 -1
  70. package/dist/{chunk-ZX7QKZK2.cjs → chunk-ULERCTGS.cjs} +5 -4
  71. package/dist/{chunk-ZX7QKZK2.cjs.map → chunk-ULERCTGS.cjs.map} +1 -1
  72. package/dist/chunk-VP54YPOX.cjs +4544 -0
  73. package/dist/chunk-VP54YPOX.cjs.map +1 -0
  74. package/dist/{chunk-XQ52ICHU.cjs → chunk-YKO7DY2F.cjs} +14 -13
  75. package/dist/chunk-YKO7DY2F.cjs.map +1 -0
  76. package/dist/{chunk-PDPHRZZT.js → chunk-YO4GU6JX.js} +4 -3
  77. package/dist/chunk-YO4GU6JX.js.map +1 -0
  78. package/dist/{chunk-S6BK5DB6.cjs → chunk-ZGKEFVJQ.cjs} +13 -12
  79. package/dist/chunk-ZGKEFVJQ.cjs.map +1 -0
  80. package/dist/{chunk-2MQWZ2XY.cjs → chunk-ZO77FHBF.cjs} +3 -2
  81. package/dist/chunk-ZO77FHBF.cjs.map +1 -0
  82. package/dist/diagrams/blockdiagram/index.cjs +5 -5
  83. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  84. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  85. package/dist/diagrams/blockdiagram/index.js +1 -1
  86. package/dist/diagrams/circuit/index.cjs +8 -8
  87. package/dist/diagrams/circuit/index.d.cts +1 -1
  88. package/dist/diagrams/circuit/index.d.ts +1 -1
  89. package/dist/diagrams/circuit/index.js +2 -2
  90. package/dist/diagrams/ecomap/index.cjs +7 -7
  91. package/dist/diagrams/ecomap/index.d.cts +1 -1
  92. package/dist/diagrams/ecomap/index.d.ts +1 -1
  93. package/dist/diagrams/ecomap/index.js +2 -2
  94. package/dist/diagrams/entity/index.cjs +6 -6
  95. package/dist/diagrams/entity/index.d.cts +1 -1
  96. package/dist/diagrams/entity/index.d.ts +1 -1
  97. package/dist/diagrams/entity/index.js +2 -2
  98. package/dist/diagrams/fishbone/index.cjs +8 -8
  99. package/dist/diagrams/fishbone/index.d.cts +1 -1
  100. package/dist/diagrams/fishbone/index.d.ts +1 -1
  101. package/dist/diagrams/fishbone/index.js +2 -2
  102. package/dist/diagrams/flowchart/index.cjs +8 -8
  103. package/dist/diagrams/flowchart/index.d.cts +2 -2
  104. package/dist/diagrams/flowchart/index.d.ts +2 -2
  105. package/dist/diagrams/flowchart/index.js +2 -2
  106. package/dist/diagrams/genogram/index.cjs +9 -9
  107. package/dist/diagrams/genogram/index.d.cts +1 -1
  108. package/dist/diagrams/genogram/index.d.ts +1 -1
  109. package/dist/diagrams/genogram/index.js +2 -2
  110. package/dist/diagrams/ladder/index.cjs +6 -6
  111. package/dist/diagrams/ladder/index.d.cts +1 -1
  112. package/dist/diagrams/ladder/index.d.ts +1 -1
  113. package/dist/diagrams/ladder/index.js +2 -2
  114. package/dist/diagrams/logic/index.cjs +6 -6
  115. package/dist/diagrams/logic/index.d.cts +1 -1
  116. package/dist/diagrams/logic/index.d.ts +1 -1
  117. package/dist/diagrams/logic/index.js +2 -2
  118. package/dist/diagrams/orgchart/index.cjs +7 -7
  119. package/dist/diagrams/orgchart/index.d.cts +1 -1
  120. package/dist/diagrams/orgchart/index.d.ts +1 -1
  121. package/dist/diagrams/orgchart/index.js +2 -2
  122. package/dist/diagrams/pedigree/index.cjs +7 -7
  123. package/dist/diagrams/pedigree/index.d.cts +1 -1
  124. package/dist/diagrams/pedigree/index.d.ts +1 -1
  125. package/dist/diagrams/pedigree/index.js +2 -2
  126. package/dist/diagrams/phylo/index.cjs +7 -7
  127. package/dist/diagrams/phylo/index.d.cts +1 -1
  128. package/dist/diagrams/phylo/index.d.ts +1 -1
  129. package/dist/diagrams/phylo/index.js +2 -2
  130. package/dist/diagrams/sld/index.cjs +6 -6
  131. package/dist/diagrams/sld/index.d.cts +1 -1
  132. package/dist/diagrams/sld/index.d.ts +1 -1
  133. package/dist/diagrams/sld/index.js +2 -2
  134. package/dist/diagrams/sociogram/index.cjs +6 -6
  135. package/dist/diagrams/sociogram/index.d.cts +1 -1
  136. package/dist/diagrams/sociogram/index.d.ts +1 -1
  137. package/dist/diagrams/sociogram/index.js +2 -2
  138. package/dist/diagrams/timing/index.cjs +4 -4
  139. package/dist/diagrams/timing/index.d.cts +1 -1
  140. package/dist/diagrams/timing/index.d.ts +1 -1
  141. package/dist/diagrams/timing/index.js +1 -1
  142. package/dist/diagrams/venn/index.cjs +9 -9
  143. package/dist/diagrams/venn/index.d.cts +1 -1
  144. package/dist/diagrams/venn/index.d.ts +1 -1
  145. package/dist/diagrams/venn/index.js +2 -2
  146. package/dist/export.cjs +87 -0
  147. package/dist/export.cjs.map +1 -0
  148. package/dist/export.d.cts +38 -0
  149. package/dist/export.d.ts +38 -0
  150. package/dist/export.js +83 -0
  151. package/dist/export.js.map +1 -0
  152. package/dist/{index-BXefHVce.d.cts → index-SSGpCggE.d.cts} +52 -3
  153. package/dist/{index-BSlza1YY.d.ts → index-ga04CTBI.d.ts} +52 -3
  154. package/dist/index.cjs +65 -1948
  155. package/dist/index.cjs.map +1 -1
  156. package/dist/index.d.cts +7 -12
  157. package/dist/index.d.ts +7 -12
  158. package/dist/index.js +19 -1942
  159. package/dist/index.js.map +1 -1
  160. package/dist/react.cjs +56 -0
  161. package/dist/react.cjs.map +1 -0
  162. package/dist/react.d.cts +24 -0
  163. package/dist/react.d.ts +24 -0
  164. package/dist/react.js +54 -0
  165. package/dist/react.js.map +1 -0
  166. package/dist/{types-DqfcYkcY.d.ts → types-BcPhMdHd.d.cts} +6 -2
  167. package/dist/{types-DqfcYkcY.d.cts → types-BcPhMdHd.d.ts} +6 -2
  168. package/package.json +31 -2
  169. package/dist/chunk-2MQWZ2XY.cjs.map +0 -1
  170. package/dist/chunk-2UKC6ZCY.cjs.map +0 -1
  171. package/dist/chunk-3FTUWAXK.cjs.map +0 -1
  172. package/dist/chunk-7FZSPKX3.cjs.map +0 -1
  173. package/dist/chunk-ADOXGKAK.js +0 -1251
  174. package/dist/chunk-ADOXGKAK.js.map +0 -1
  175. package/dist/chunk-CZRM7LT7.js.map +0 -1
  176. package/dist/chunk-D4JTSPOL.js.map +0 -1
  177. package/dist/chunk-DS47NTWZ.cjs.map +0 -1
  178. package/dist/chunk-FDLZEKEB.js.map +0 -1
  179. package/dist/chunk-FGPTCDUT.cjs.map +0 -1
  180. package/dist/chunk-HGHWCB6K.js.map +0 -1
  181. package/dist/chunk-IX554O5K.js.map +0 -1
  182. package/dist/chunk-MDICUK6F.cjs +0 -1258
  183. package/dist/chunk-MDICUK6F.cjs.map +0 -1
  184. package/dist/chunk-N7KOXOMX.cjs.map +0 -1
  185. package/dist/chunk-NYCIK4SU.cjs.map +0 -1
  186. package/dist/chunk-PDPHRZZT.js.map +0 -1
  187. package/dist/chunk-ROFLJ74T.js.map +0 -1
  188. package/dist/chunk-S6BK5DB6.cjs.map +0 -1
  189. package/dist/chunk-U5GGE6PJ.js.map +0 -1
  190. package/dist/chunk-V6WO7RK7.cjs.map +0 -1
  191. package/dist/chunk-VFQCTXOX.js.map +0 -1
  192. package/dist/chunk-XQ52ICHU.cjs.map +0 -1
  193. package/dist/chunk-XX4BKS7Y.js.map +0 -1
  194. package/dist/chunk-XXU36667.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/sociogram/parser.ts","../src/diagrams/sociogram/layout.ts","../src/diagrams/sociogram/renderer.ts","../src/diagrams/sociogram/index.ts"],"names":["line","text","clean","props"],"mappings":"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","file":"chunk-PDPHRZZT.js","sourcesContent":["export class SociogramParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SociogramParseError\";\n }\n}\n\n// ─── AST Types ──────────────────────────────────────────────\n\nexport type SociogramLayout = \"circular\" | \"force-directed\" | \"concentric\";\nexport type EdgeValence = \"positive\" | \"negative\" | \"neutral\";\nexport type EdgeDirection = \"one-way\" | \"mutual\" | \"undirected\";\nexport type NodeRole = \"star\" | \"isolate\" | \"bridge\" | \"neglectee\" | \"rejected\";\nexport type SizingMode = \"uniform\" | \"in-degree\" | \"betweenness\";\nexport type ColoringMode = \"default\" | \"group\" | \"role\";\n\nexport interface SociogramNode {\n id: string;\n label?: string;\n group?: string;\n role?: NodeRole;\n size?: \"small\" | \"medium\" | \"large\";\n properties?: Record<string, string>;\n}\n\nexport interface SociogramEdge {\n from: string;\n to: string;\n direction: EdgeDirection;\n valence: EdgeValence;\n weight: number;\n label?: string;\n}\n\nexport interface SociogramGroup {\n id: string;\n label?: string;\n color?: string;\n members: string[];\n}\n\nexport interface SociogramConfig {\n layout: SociogramLayout;\n sizing: SizingMode;\n coloring: ColoringMode;\n highlight: string[];\n}\n\nexport interface SociogramAST {\n type: \"sociogram\";\n title?: string;\n config: SociogramConfig;\n nodes: SociogramNode[];\n edges: SociogramEdge[];\n groups: SociogramGroup[];\n}\n\n// ─── Edge Operator Parsing ──────────────────────────────────\n\ninterface EdgeOp {\n direction: EdgeDirection;\n valence: EdgeValence;\n weight: number;\n}\n\nconst EDGE_OPS: [string, EdgeOp][] = [\n [\"<===>\", { direction: \"mutual\", valence: \"positive\", weight: 4 }],\n [\"===>\" , { direction: \"one-way\", valence: \"positive\", weight: 4 }],\n [\"<===\", { direction: \"one-way\", valence: \"positive\", weight: 4 }],\n [\"<==>\", { direction: \"mutual\", valence: \"positive\", weight: 3 }],\n [\"==>\" , { direction: \"one-way\", valence: \"positive\", weight: 3 }],\n [\"<==\", { direction: \"one-way\", valence: \"positive\", weight: 3 }],\n [\"===\", { direction: \"undirected\", valence: \"positive\", weight: 3 }],\n [\"<x->\", { direction: \"mutual\", valence: \"negative\", weight: 2 }],\n [\"-x>\", { direction: \"one-way\", valence: \"negative\", weight: 2 }],\n [\"<x-\", { direction: \"one-way\", valence: \"negative\", weight: 2 }],\n [\"-x-\", { direction: \"undirected\", valence: \"negative\", weight: 2 }],\n [\"<.->\", { direction: \"mutual\", valence: \"neutral\", weight: 2 }],\n [\".->\", { direction: \"one-way\", valence: \"neutral\", weight: 2 }], // part of -.>\n [\"-.-\", { direction: \"undirected\", valence: \"neutral\", weight: 2 }],\n [\"<->\", { direction: \"mutual\", valence: \"positive\", weight: 2 }],\n [\"->\", { direction: \"one-way\", valence: \"positive\", weight: 2 }],\n [\"<-\", { direction: \"one-way\", valence: \"positive\", weight: 2 }],\n [\"--\", { direction: \"undirected\", valence: \"positive\", weight: 2 }],\n];\n\nfunction findEdgeOp(line: string): { leftId: string; rightId: string; op: EdgeOp; rest: string } | null {\n for (const [opStr, op] of EDGE_OPS) {\n const idx = line.indexOf(` ${opStr} `);\n if (idx === -1) continue;\n\n const leftId = line.slice(0, idx).trim();\n const afterOp = line.slice(idx + opStr.length + 2).trim();\n\n if (!leftId || !/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(leftId)) continue;\n\n // Right side: ID [props]\n const rightMatch = afterOp.match(/^([a-zA-Z][a-zA-Z0-9_-]*)(.*)/);\n if (!rightMatch) continue;\n\n const rightId = rightMatch[1];\n const rest = rightMatch[2].trim();\n\n // Handle reverse direction\n if (opStr === \"<-\" || opStr === \"<==\" || opStr === \"<===\" || opStr === \"<x-\") {\n return { leftId: rightId, rightId: leftId, op: { ...op, direction: \"one-way\" }, rest };\n }\n\n return { leftId, rightId, op, rest };\n }\n\n // Try -.> which has the dot embedded\n const dashDotMatch = line.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\\s+-\\.>\\s+([a-zA-Z][a-zA-Z0-9_-]*)(.*)/);\n if (dashDotMatch) {\n return {\n leftId: dashDotMatch[1],\n rightId: dashDotMatch[2],\n op: { direction: \"one-way\", valence: \"neutral\", weight: 2 },\n rest: dashDotMatch[3].trim(),\n };\n }\n\n return null;\n}\n\n// ─── Property Parsing ───────────────────────────────────────\n\nfunction parseProperties(propsStr: string): Record<string, string> {\n const result: Record<string, string> = {};\n // Match key: \"value\" or key: value pairs\n const regex = /(\\w[\\w-]*):\\s*(?:\"([^\"]*)\"|([^\\s,\\]]+))/g;\n let match;\n while ((match = regex.exec(propsStr)) !== null) {\n result[match[1]] = match[2] ?? match[3];\n }\n return result;\n}\n\nfunction extractProps(line: string): { clean: string; props: Record<string, string> } {\n const bracketMatch = line.match(/\\[([^\\]]*)\\]/);\n if (!bracketMatch) return { clean: line, props: {} };\n const clean = line.slice(0, bracketMatch.index).trim();\n const props = parseProperties(bracketMatch[1]);\n return { clean, props };\n}\n\n// ─── Main Parser ────────────────────────────────────────────\n\nexport function parseSociogram(text: string): SociogramAST {\n const lines = text.split(\"\\n\");\n let lineIdx = 0;\n\n // Skip empty lines\n while (lineIdx < lines.length && !lines[lineIdx].trim()) lineIdx++;\n\n // Parse header\n const headerLine = lines[lineIdx]?.trim() ?? \"\";\n if (!headerLine.toLowerCase().startsWith(\"sociogram\")) {\n throw new SociogramParseError(\"Sociogram must start with 'sociogram'\");\n }\n lineIdx++;\n\n let titleStr: string | undefined;\n const titleMatch = headerLine.match(/\"([^\"]+)\"/);\n if (titleMatch) titleStr = titleMatch[1];\n\n const config: SociogramConfig = {\n layout: \"circular\",\n sizing: \"uniform\",\n coloring: \"default\",\n highlight: [\"stars\", \"isolates\"],\n };\n\n const nodes: SociogramNode[] = [];\n const edges: SociogramEdge[] = [];\n const groups: SociogramGroup[] = [];\n const nodeIds = new Set<string>();\n\n let currentGroup: SociogramGroup | null = null;\n\n while (lineIdx < lines.length) {\n const raw = lines[lineIdx];\n const trimmed = raw.trim();\n lineIdx++;\n\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n // Config line\n if (trimmed.startsWith(\"config:\")) {\n const configBody = trimmed.slice(7).trim();\n const eqIdx = configBody.indexOf(\"=\");\n if (eqIdx !== -1) {\n const key = configBody.slice(0, eqIdx).trim();\n const val = configBody.slice(eqIdx + 1).trim();\n switch (key) {\n case \"layout\":\n if ([\"circular\", \"force-directed\", \"concentric\"].includes(val)) {\n config.layout = val as SociogramLayout;\n }\n break;\n case \"sizing\":\n if ([\"uniform\", \"in-degree\", \"betweenness\"].includes(val)) {\n config.sizing = val as SizingMode;\n }\n break;\n case \"coloring\":\n if ([\"default\", \"group\", \"role\"].includes(val)) {\n config.coloring = val as ColoringMode;\n }\n break;\n case \"highlight\":\n config.highlight = val.split(\",\").map((s) => s.trim());\n break;\n }\n }\n continue;\n }\n\n // Group definition\n if (trimmed.startsWith(\"group \")) {\n const { clean, props } = extractProps(trimmed.slice(6).trim());\n const groupId = clean.split(/\\s/)[0];\n currentGroup = {\n id: groupId,\n label: props.label ?? groupId,\n color: props.color,\n members: [],\n };\n groups.push(currentGroup);\n continue;\n }\n\n // Check indentation for group members\n const indent = raw.search(/\\S/);\n if (currentGroup && indent >= 4) {\n const { clean, props } = extractProps(trimmed);\n const memberId = clean.split(/\\s/)[0];\n if (memberId && /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(memberId)) {\n currentGroup.members.push(memberId);\n if (!nodeIds.has(memberId)) {\n nodeIds.add(memberId);\n nodes.push({\n id: memberId,\n label: props.label,\n group: currentGroup.id,\n role: props.role as NodeRole | undefined,\n size: props.size as \"small\" | \"medium\" | \"large\" | undefined,\n });\n }\n continue;\n }\n }\n\n if (indent < 4) {\n currentGroup = null;\n }\n\n // Try edge parsing\n const edgeResult = findEdgeOp(trimmed);\n if (edgeResult) {\n const { leftId, rightId, op, rest } = edgeResult;\n const edgeProps = extractProps(rest).props;\n\n // Auto-register nodes\n for (const id of [leftId, rightId]) {\n if (!nodeIds.has(id)) {\n nodeIds.add(id);\n nodes.push({ id });\n }\n }\n\n const weight = edgeProps.weight ? Number(edgeProps.weight) : op.weight;\n\n edges.push({\n from: leftId,\n to: rightId,\n direction: op.direction,\n valence: op.valence,\n weight,\n label: edgeProps.label,\n });\n continue;\n }\n\n // Node definition: ID [props]\n const { clean, props } = extractProps(trimmed);\n const nodeId = clean.split(/\\s/)[0];\n if (nodeId && /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(nodeId) && !nodeIds.has(nodeId)) {\n nodeIds.add(nodeId);\n const node: SociogramNode = {\n id: nodeId,\n label: props.label,\n group: props.group,\n role: props.role as NodeRole | undefined,\n size: props.size as \"small\" | \"medium\" | \"large\" | undefined,\n };\n nodes.push(node);\n\n // Auto-add to group by group property\n if (props.group) {\n let grp = groups.find((g) => g.id === props.group);\n if (!grp) {\n grp = { id: props.group, members: [] };\n groups.push(grp);\n }\n grp.members.push(nodeId);\n }\n }\n }\n\n return {\n type: \"sociogram\",\n title: titleStr,\n config,\n nodes,\n edges,\n groups,\n };\n}\n","import type {\n SociogramAST,\n SociogramNode,\n SociogramEdge,\n NodeRole,\n} from \"./parser\";\n\nexport interface SociogramLayoutNode {\n node: SociogramNode;\n x: number;\n y: number;\n radius: number;\n computedRole?: NodeRole;\n}\n\nexport interface SociogramLayoutEdge {\n edge: SociogramEdge;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface SociogramLayoutResult {\n width: number;\n height: number;\n nodes: SociogramLayoutNode[];\n edges: SociogramLayoutEdge[];\n ast: SociogramAST;\n}\n\n// ─── Metrics ────────────────────────────────────────────────\n\nfunction computeInDegree(nodeId: string, edges: SociogramEdge[]): number {\n let count = 0;\n for (const e of edges) {\n if (e.to === nodeId) count++;\n if (e.direction === \"mutual\" && e.from === nodeId) count++;\n if (e.direction === \"undirected\" && e.from === nodeId) count++;\n }\n return count;\n}\n\nfunction computeOutDegree(nodeId: string, edges: SociogramEdge[]): number {\n let count = 0;\n for (const e of edges) {\n if (e.from === nodeId) count++;\n if (e.direction === \"mutual\" && e.to === nodeId) count++;\n if (e.direction === \"undirected\" && e.to === nodeId) count++;\n }\n return count;\n}\n\nfunction autoDetectRole(\n node: SociogramNode,\n inDeg: number,\n outDeg: number,\n meanIn: number,\n sdIn: number,\n rejectionCount: number\n): NodeRole | undefined {\n if (node.role) return node.role;\n if (inDeg === 0 && outDeg === 0) return \"isolate\";\n if (inDeg === 0 && outDeg > 0) return \"neglectee\";\n if (rejectionCount >= 2) return \"rejected\";\n if (sdIn > 0 && inDeg >= meanIn + 1.5 * sdIn) return \"star\";\n return undefined;\n}\n\n// ─── Node Radius ────────────────────────────────────────────\n\nconst BASE_RADIUS = 20;\n\nfunction computeNodeRadius(\n node: SociogramNode,\n inDeg: number,\n sizing: string\n): number {\n if (node.size === \"small\") return 14;\n if (node.size === \"large\") return 30;\n if (sizing === \"in-degree\") {\n return Math.min(40, Math.max(14, 14 + inDeg * 4));\n }\n return BASE_RADIUS;\n}\n\n// ─── Circular Layout ────────────────────────────────────────\n\nfunction layoutCircular(ast: SociogramAST): SociogramLayoutResult {\n const n = ast.nodes.length;\n const radius = Math.max(120, n * 22);\n const canvasSize = radius * 2 + 160;\n const cx = canvasSize / 2;\n const cy = canvasSize / 2;\n\n // Compute metrics\n const inDegrees = new Map<string, number>();\n const outDegrees = new Map<string, number>();\n const rejections = new Map<string, number>();\n\n for (const node of ast.nodes) {\n inDegrees.set(node.id, computeInDegree(node.id, ast.edges));\n outDegrees.set(node.id, computeOutDegree(node.id, ast.edges));\n rejections.set(node.id, 0);\n }\n\n for (const e of ast.edges) {\n if (e.valence === \"negative\") {\n rejections.set(e.to, (rejections.get(e.to) ?? 0) + 1);\n }\n }\n\n const inVals = Array.from(inDegrees.values());\n const meanIn = inVals.reduce((a, b) => a + b, 0) / (inVals.length || 1);\n const sdIn = Math.sqrt(\n inVals.reduce((sum, v) => sum + (v - meanIn) ** 2, 0) / (inVals.length || 1)\n );\n\n // Sort nodes: group members adjacent, then by id\n const sortedNodes = [...ast.nodes];\n if (ast.groups.length > 0) {\n const groupOrder = new Map<string, number>();\n ast.groups.forEach((g, i) => {\n for (const m of g.members) groupOrder.set(m, i);\n });\n sortedNodes.sort((a, b) => {\n const ga = groupOrder.get(a.id) ?? 999;\n const gb = groupOrder.get(b.id) ?? 999;\n if (ga !== gb) return ga - gb;\n return a.id.localeCompare(b.id);\n });\n }\n\n const angleStep = (2 * Math.PI) / n;\n const startAngle = -Math.PI / 2;\n\n const layoutNodes: SociogramLayoutNode[] = sortedNodes.map((node, i) => {\n const angle = startAngle + i * angleStep;\n const inDeg = inDegrees.get(node.id) ?? 0;\n const outDeg = outDegrees.get(node.id) ?? 0;\n const rej = rejections.get(node.id) ?? 0;\n const nodeRadius = computeNodeRadius(node, inDeg, ast.config.sizing);\n const computedRole = autoDetectRole(node, inDeg, outDeg, meanIn, sdIn, rej);\n\n return {\n node,\n x: cx + radius * Math.cos(angle),\n y: cy + radius * Math.sin(angle),\n radius: nodeRadius,\n computedRole,\n };\n });\n\n const layoutEdges = computeEdgePositions(layoutNodes, ast.edges);\n\n return {\n width: canvasSize,\n height: canvasSize,\n nodes: layoutNodes,\n edges: layoutEdges,\n ast,\n };\n}\n\n// ─── Force-Directed Layout ─────────────────────────────────\n\nfunction layoutForceDirected(ast: SociogramAST): SociogramLayoutResult {\n const n = ast.nodes.length;\n const canvasSize = n <= 8 ? 400 : n <= 20 ? 600 : n <= 40 ? 800 : 1000;\n const padding = 60;\n\n // Compute metrics\n const inDegrees = new Map<string, number>();\n const outDegrees = new Map<string, number>();\n const rejections = new Map<string, number>();\n\n for (const node of ast.nodes) {\n inDegrees.set(node.id, computeInDegree(node.id, ast.edges));\n outDegrees.set(node.id, computeOutDegree(node.id, ast.edges));\n rejections.set(node.id, 0);\n }\n\n for (const e of ast.edges) {\n if (e.valence === \"negative\") {\n rejections.set(e.to, (rejections.get(e.to) ?? 0) + 1);\n }\n }\n\n const inVals = Array.from(inDegrees.values());\n const meanIn = inVals.reduce((a, b) => a + b, 0) / (inVals.length || 1);\n const sdIn = Math.sqrt(\n inVals.reduce((sum, v) => sum + (v - meanIn) ** 2, 0) / (inVals.length || 1)\n );\n\n // Initialize positions in a circle\n const initRadius = canvasSize * 0.3;\n const cx = canvasSize / 2;\n const cy = canvasSize / 2;\n\n const positions: { x: number; y: number }[] = ast.nodes.map((_, i) => {\n const angle = (2 * Math.PI * i) / n - Math.PI / 2;\n return {\n x: cx + initRadius * Math.cos(angle),\n y: cy + initRadius * Math.sin(angle),\n };\n });\n\n // Build adjacency for edges\n const nodeIdx = new Map<string, number>();\n ast.nodes.forEach((node, i) => nodeIdx.set(node.id, i));\n\n // Fruchterman-Reingold\n const area = (canvasSize - 2 * padding) ** 2;\n const k = Math.sqrt(area / Math.max(n, 1));\n const maxIterations = 200;\n let temperature = canvasSize / 8;\n const coolingRate = 0.95;\n const minDist = 60;\n\n for (let iter = 0; iter < maxIterations; iter++) {\n const disp: { dx: number; dy: number }[] = positions.map(() => ({ dx: 0, dy: 0 }));\n\n // Repulsive forces between all pairs\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const dx = positions[i].x - positions[j].x;\n const dy = positions[i].y - positions[j].y;\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1);\n const force = (k * k) / dist;\n const fx = (dx / dist) * force;\n const fy = (dy / dist) * force;\n disp[i].dx += fx;\n disp[i].dy += fy;\n disp[j].dx -= fx;\n disp[j].dy -= fy;\n }\n }\n\n // Attractive forces along edges\n for (const edge of ast.edges) {\n const i = nodeIdx.get(edge.from);\n const j = nodeIdx.get(edge.to);\n if (i === undefined || j === undefined) continue;\n const dx = positions[i].x - positions[j].x;\n const dy = positions[i].y - positions[j].y;\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1);\n const force = (dist * dist) / k;\n const fx = (dx / dist) * force;\n const fy = (dy / dist) * force;\n disp[i].dx -= fx;\n disp[i].dy -= fy;\n disp[j].dx += fx;\n disp[j].dy += fy;\n }\n\n // Apply displacements, clamp to temperature\n for (let i = 0; i < n; i++) {\n const mag = Math.sqrt(disp[i].dx ** 2 + disp[i].dy ** 2);\n if (mag > 0) {\n const scale = Math.min(mag, temperature) / mag;\n positions[i].x += disp[i].dx * scale;\n positions[i].y += disp[i].dy * scale;\n }\n // Keep within bounds\n positions[i].x = Math.max(padding, Math.min(canvasSize - padding, positions[i].x));\n positions[i].y = Math.max(padding, Math.min(canvasSize - padding, positions[i].y));\n }\n\n // Enforce minimum distance\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const dx = positions[i].x - positions[j].x;\n const dy = positions[i].y - positions[j].y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < minDist && dist > 0) {\n const push = (minDist - dist) / 2;\n const nx = dx / dist;\n const ny = dy / dist;\n positions[i].x += nx * push;\n positions[i].y += ny * push;\n positions[j].x -= nx * push;\n positions[j].y -= ny * push;\n }\n }\n }\n\n temperature *= coolingRate;\n }\n\n const layoutNodes: SociogramLayoutNode[] = ast.nodes.map((node, i) => {\n const inDeg = inDegrees.get(node.id) ?? 0;\n const outDeg = outDegrees.get(node.id) ?? 0;\n const rej = rejections.get(node.id) ?? 0;\n const nodeRadius = computeNodeRadius(node, inDeg, ast.config.sizing);\n const computedRole = autoDetectRole(node, inDeg, outDeg, meanIn, sdIn, rej);\n return {\n node,\n x: positions[i].x,\n y: positions[i].y,\n radius: nodeRadius,\n computedRole,\n };\n });\n\n const layoutEdges = computeEdgePositions(layoutNodes, ast.edges);\n\n return {\n width: canvasSize,\n height: canvasSize,\n nodes: layoutNodes,\n edges: layoutEdges,\n ast,\n };\n}\n\n// ─── Edge Position Calculation ──────────────────────────────\n\nfunction computeEdgePositions(\n nodes: SociogramLayoutNode[],\n edges: SociogramEdge[]\n): SociogramLayoutEdge[] {\n const nodeMap = new Map<string, SociogramLayoutNode>();\n for (const n of nodes) nodeMap.set(n.node.id, n);\n\n return edges.map((edge) => {\n const fromNode = nodeMap.get(edge.from);\n const toNode = nodeMap.get(edge.to);\n if (!fromNode || !toNode) {\n return { edge, x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n\n // Compute edge-to-edge (subtract radius from endpoints)\n const dx = toNode.x - fromNode.x;\n const dy = toNode.y - fromNode.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist === 0) return { edge, x1: fromNode.x, y1: fromNode.y, x2: toNode.x, y2: toNode.y };\n\n const nx = dx / dist;\n const ny = dy / dist;\n const markerGap = 10;\n\n return {\n edge,\n x1: fromNode.x + nx * (fromNode.radius + 2),\n y1: fromNode.y + ny * (fromNode.radius + 2),\n x2: toNode.x - nx * (toNode.radius + markerGap),\n y2: toNode.y - ny * (toNode.radius + markerGap),\n };\n });\n}\n\n// ─── Main Layout ────────────────────────────────────────────\n\nexport function layoutSociogram(ast: SociogramAST): SociogramLayoutResult {\n switch (ast.config.layout) {\n case \"force-directed\":\n return layoutForceDirected(ast);\n case \"circular\":\n default:\n return layoutCircular(ast);\n }\n}\n","import type { SociogramAST, NodeRole } from \"./parser\";\nimport type { SociogramLayoutResult, SociogramLayoutNode } from \"./layout\";\nimport {\n svgRoot,\n el,\n group,\n circle,\n line,\n text,\n title,\n desc,\n polygon,\n} from \"../../core/svg\";\nimport { cssCustomProperties, resolveBaseTheme, FONT_SIZE, STROKE_WIDTH, type BaseTheme } from \"../../core/theme\";\n\n// ─── Constants ──────────────────────────────────────────────\n\nconst LABEL_GAP = 4;\nconst LABEL_FONT_SIZE = 11;\n\nfunction valenceColors(t: BaseTheme) {\n return { positive: t.positive, negative: t.negative, neutral: t.neutral };\n}\n\nfunction roleFills(t: BaseTheme) {\n return { star: t.warn, isolate: t.fillMuted, rejected: t.negative };\n}\n\n// ─── CSS ────────────────────────────────────────────────────\n\nfunction buildCSS(ast: SociogramAST, t: BaseTheme): string {\n const vc = valenceColors(t);\n const rf = roleFills(t);\n const groupColors = ast.groups.map((g, i) => {\n const color = g.color ?? t.palette[i % t.palette.length];\n return `.schematex-sociogram-group-${g.id} { fill: ${color}; stroke: ${color}; }`;\n });\n\n return `\n.schematex-sociogram {${cssCustomProperties(t)}\n font-family: system-ui, -apple-system, sans-serif;\n background: ${t.bg};\n}\n.schematex-sociogram-node { fill: ${t.accent}; stroke: ${t.accent}; stroke-width: ${STROKE_WIDTH.normal}; }\n.schematex-sociogram-node-star { fill: ${rf.star}; stroke: ${t.warn}; stroke-width: ${STROKE_WIDTH.thick}; }\n.schematex-sociogram-node-isolate { fill: ${rf.isolate}; stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 4 3; }\n.schematex-sociogram-node-neglectee { fill: ${t.fillMuted}; stroke: ${t.accent}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 4 3; }\n.schematex-sociogram-node-rejected { fill: ${rf.rejected}; stroke: ${t.negative}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 4 3; }\n.schematex-sociogram-edge { stroke-linecap: round; }\n.schematex-sociogram-edge-positive { stroke: ${vc.positive}; }\n.schematex-sociogram-edge-negative { stroke: ${vc.negative}; stroke-dasharray: 6 3; }\n.schematex-sociogram-edge-neutral { stroke: ${vc.neutral}; stroke-dasharray: 2 3; }\n.schematex-sociogram-label { font-size: ${LABEL_FONT_SIZE}px; fill: ${t.text}; text-anchor: middle; }\n.schematex-sociogram-edge-label { font-size: ${FONT_SIZE.small}px; fill: ${t.textMuted}; text-anchor: middle; }\n.schematex-sociogram-title { font-size: ${FONT_SIZE.title}px; font-weight: bold; fill: ${t.text}; text-anchor: middle; }\n.schematex-sociogram-star-badge { font-size: 10px; fill: ${t.warn}; }\n.schematex-sociogram-group-label { font-size: 13px; font-weight: bold; fill-opacity: 0.7; text-anchor: middle; }\n${groupColors.join(\"\\n\")}\n`.trim();\n}\n\n// ─── Defs (Arrow Markers) ───────────────────────────────────\n\nfunction buildDefs(t: BaseTheme): string {\n const vc = valenceColors(t);\n const markers = [\n { id: \"sociogram-arrow\", fill: vc.positive },\n { id: \"sociogram-arrow-negative\", fill: vc.negative },\n { id: \"sociogram-arrow-neutral\", fill: vc.neutral },\n ];\n\n const markerEls = markers.map((m) =>\n el(\n \"marker\",\n {\n id: m.id,\n viewBox: \"0 0 10 10\",\n refX: \"9\",\n refY: \"5\",\n markerWidth: \"8\",\n markerHeight: \"8\",\n orient: \"auto\",\n },\n el(\"path\", { d: \"M 0 0 L 10 5 L 0 10 z\", fill: m.fill })\n )\n );\n\n return el(\"defs\", {}, markerEls);\n}\n\n// ─── Edge Weight → Stroke Width ─────────────────────────────\n\nfunction edgeStrokeWidth(weight: number): number {\n if (weight <= 1) return 1;\n if (weight === 2) return 2;\n if (weight === 3) return 3.5;\n return 5;\n}\n\n// ─── Node Rendering ─────────────────────────────────────────\n\nfunction getNodeClass(role?: NodeRole): string {\n if (!role) return \"schematex-sociogram-node\";\n switch (role) {\n case \"star\": return \"schematex-sociogram-node schematex-sociogram-node-star\";\n case \"isolate\": return \"schematex-sociogram-node schematex-sociogram-node-isolate\";\n case \"neglectee\": return \"schematex-sociogram-node schematex-sociogram-node-neglectee\";\n case \"rejected\": return \"schematex-sociogram-node schematex-sociogram-node-rejected\";\n case \"bridge\": return \"schematex-sociogram-node\";\n default: return \"schematex-sociogram-node\";\n }\n}\n\nfunction getNodeFill(\n node: SociogramLayoutNode,\n ast: SociogramAST,\n t: BaseTheme\n): string | undefined {\n const role = node.computedRole ?? node.node.role;\n const rf = roleFills(t);\n\n if (ast.config.coloring === \"role\" && role) {\n return rf[role as keyof typeof rf];\n }\n\n if (ast.config.coloring === \"group\" && node.node.group) {\n const gIdx = ast.groups.findIndex((g) => g.id === node.node.group);\n if (gIdx >= 0) {\n return ast.groups[gIdx].color ?? t.palette[gIdx % t.palette.length];\n }\n }\n\n return undefined;\n}\n\nfunction renderNodes(\n layout: SociogramLayoutResult,\n t: BaseTheme\n): { nodeEls: string[]; labelEls: string[] } {\n const nodeEls: string[] = [];\n const labelEls: string[] = [];\n const { ast } = layout;\n\n for (const layoutNode of layout.nodes) {\n const { node, x, y, radius, computedRole } = layoutNode;\n const role = computedRole ?? node.role;\n const cls = getNodeClass(role);\n const fill = getNodeFill(layoutNode, ast, t);\n\n const attrs: Record<string, string | number | undefined> = {\n cx: x,\n cy: y,\n r: radius,\n class: cls,\n \"data-node-id\": node.id,\n };\n if (fill) attrs.fill = fill;\n\n nodeEls.push(circle(attrs));\n\n // Star badge\n if (role === \"star\") {\n const badgeX = x + radius * 0.6;\n const badgeY = y - radius * 0.6;\n const s = 6;\n const points = starPoints(badgeX, badgeY, s, s * 0.4, 5);\n nodeEls.push(\n polygon({\n points,\n fill: t.warn,\n class: \"schematex-sociogram-star-badge\",\n })\n );\n }\n\n // Label\n const label = node.label ?? node.id;\n labelEls.push(\n text(\n {\n x,\n y: y + radius + LABEL_GAP + LABEL_FONT_SIZE,\n class: \"schematex-sociogram-label\",\n \"data-node-id\": node.id,\n },\n label\n )\n );\n }\n\n return { nodeEls, labelEls };\n}\n\nfunction starPoints(\n cx: number,\n cy: number,\n outerR: number,\n innerR: number,\n points: number\n): string {\n const coords: string[] = [];\n for (let i = 0; i < points * 2; i++) {\n const angle = (Math.PI * i) / points - Math.PI / 2;\n const r = i % 2 === 0 ? outerR : innerR;\n coords.push(`${cx + r * Math.cos(angle)},${cy + r * Math.sin(angle)}`);\n }\n return coords.join(\" \");\n}\n\n// ─── Edge Rendering ─────────────────────────────────────────\n\nfunction getMarkerUrl(valence: string, direction: string): {\n start?: string;\n end?: string;\n} {\n if (direction === \"undirected\") return {};\n\n const markerId =\n valence === \"negative\"\n ? \"sociogram-arrow-negative\"\n : valence === \"neutral\"\n ? \"sociogram-arrow-neutral\"\n : \"sociogram-arrow\";\n\n if (direction === \"mutual\") {\n return {\n start: `url(#${markerId})`,\n end: `url(#${markerId})`,\n };\n }\n\n return { end: `url(#${markerId})` };\n}\n\nfunction renderEdges(layout: SociogramLayoutResult): {\n edgeEls: string[];\n edgeLabelEls: string[];\n} {\n const edgeEls: string[] = [];\n const edgeLabelEls: string[] = [];\n\n for (const layoutEdge of layout.edges) {\n const { edge, x1, y1, x2, y2 } = layoutEdge;\n const valenceClass = `schematex-sociogram-edge-${edge.valence}`;\n const markers = getMarkerUrl(edge.valence, edge.direction);\n const sw = edgeStrokeWidth(edge.weight);\n\n const attrs: Record<string, string | number | undefined> = {\n x1,\n y1,\n x2,\n y2,\n class: `schematex-sociogram-edge ${valenceClass}`,\n \"stroke-width\": sw,\n \"data-from\": edge.from,\n \"data-to\": edge.to,\n };\n\n if (markers.end) attrs[\"marker-end\"] = markers.end;\n if (markers.start) attrs[\"marker-start\"] = markers.start;\n\n edgeEls.push(line(attrs));\n\n // Edge label\n if (edge.label) {\n const mx = (x1 + x2) / 2;\n const my = (y1 + y2) / 2;\n edgeLabelEls.push(\n text(\n { x: mx, y: my - 6, class: \"schematex-sociogram-edge-label\" },\n edge.label\n )\n );\n }\n }\n\n return { edgeEls, edgeLabelEls };\n}\n\n// ─── Group Background Labels ────────────────────────────────\n\nfunction renderGroupLabels(layout: SociogramLayoutResult, t: BaseTheme): string[] {\n const elements: string[] = [];\n const { ast } = layout;\n\n for (let gi = 0; gi < ast.groups.length; gi++) {\n const grp = ast.groups[gi];\n const memberNodes = layout.nodes.filter(\n (n) => n.node.group === grp.id\n );\n if (memberNodes.length === 0) continue;\n\n const color = grp.color ?? t.palette[gi % t.palette.length];\n const cx = memberNodes.reduce((s, n) => s + n.x, 0) / memberNodes.length;\n const minY = Math.min(...memberNodes.map((n) => n.y - n.radius));\n\n elements.push(\n text(\n {\n x: cx,\n y: minY - 14,\n class: \"schematex-sociogram-group-label\",\n fill: color,\n },\n grp.label ?? grp.id\n )\n );\n }\n\n return elements;\n}\n\n// ─── Main Renderer ──────────────────────────────────────────\n\nexport function renderSociogram(\n layout: SociogramLayoutResult,\n options: { theme?: string } = {}\n): string {\n const { ast } = layout;\n const t = resolveBaseTheme(options.theme ?? \"default\");\n\n const css = buildCSS(ast, t);\n const defsStr = buildDefs(t);\n\n const titleOffset = ast.title ? 30 : 0;\n const totalWidth = layout.width;\n const totalHeight = layout.height + titleOffset;\n\n const { edgeEls, edgeLabelEls } = renderEdges(layout);\n const { nodeEls, labelEls } = renderNodes(layout, t);\n const groupLabelEls = renderGroupLabels(layout, t);\n\n const titleEl = ast.title\n ? text(\n { x: totalWidth / 2, y: 20, class: \"schematex-sociogram-title\" },\n ast.title\n )\n : \"\";\n\n const transformY = titleOffset;\n const transform = transformY ? `translate(0,${transformY})` : undefined;\n\n const svgContent: string[] = [\n title(`Sociogram${ast.title ? `: ${ast.title}` : \"\"}`),\n desc(\n `Sociogram with ${ast.nodes.length} members and ${ast.edges.length} connections`\n ),\n el(\"style\", {}, css),\n defsStr,\n ];\n\n if (titleEl) svgContent.push(titleEl);\n\n if (groupLabelEls.length > 0) {\n svgContent.push(\n group({ class: \"schematex-sociogram-groups\", transform }, groupLabelEls)\n );\n }\n\n svgContent.push(\n group({ class: \"schematex-sociogram-edges\", transform }, [\n ...edgeEls,\n ...edgeLabelEls,\n ])\n );\n\n svgContent.push(\n group({ class: \"schematex-sociogram-nodes\", transform }, nodeEls)\n );\n\n svgContent.push(\n group({ class: \"schematex-sociogram-labels\", transform }, labelEls)\n );\n\n return svgRoot(\n {\n class: \"schematex-diagram schematex-sociogram\",\n viewBox: `0 0 ${totalWidth} ${totalHeight}`,\n width: totalWidth,\n height: totalHeight,\n },\n svgContent\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseSociogram } from \"./parser\";\nimport { layoutSociogram } from \"./layout\";\nimport { renderSociogram } from \"./renderer\";\n\nexport const sociogram: DiagramPlugin = {\n type: \"sociogram\",\n\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"sociogram\");\n },\n\n render(text: string, config): string {\n const ast = parseSociogram(text);\n const layout = layoutSociogram(ast);\n return renderSociogram(layout, { theme: config?.theme });\n },\n};\n\nexport { parseSociogram } from \"./parser\";\nexport { layoutSociogram } from \"./layout\";\nexport { renderSociogram } from \"./renderer\";\n"]}
@@ -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"],"mappings":"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","file":"chunk-ROFLJ74T.js","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 { background: ${tokens.bg}; 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 { 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 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/ecomap/parser.ts","../src/diagrams/ecomap/layout.ts","../src/diagrams/ecomap/renderer.ts","../src/diagrams/ecomap/index.ts"],"names":["text","resolveBaseTheme","svgRoot","title","desc","el","cssCustomProperties","STROKE_WIDTH","group"],"mappings":"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","file":"chunk-S6BK5DB6.cjs","sourcesContent":["import type {\n DiagramAST,\n Individual,\n Relationship,\n RelationshipType,\n Sex,\n} from \"../../core/types\";\n\n// ─── Error ─────────────────────────────────────────────────\n\nexport class EcomapParseError extends Error {\n constructor(message: string, public line: number) {\n super(`Line ${line}: ${message}`);\n this.name = \"EcomapParseError\";\n }\n}\n\n// ─── Connection operator table ─────────────────────────────\n\ninterface ConnectionOpInfo {\n relType: RelationshipType;\n energyFlow?: \"from\" | \"to\" | \"mutual\";\n}\n\nconst CONNECTION_OPS: Record<string, ConnectionOpInfo> = {\n \"===\": { relType: \"strong\" },\n \"==\": { relType: \"moderate\" },\n \"---\": { relType: \"normal\" },\n \"- -\": { relType: \"weak\" },\n \"~~~\": { relType: \"stressful\" },\n \"~=~\": { relType: \"stressful-strong\" },\n \"~x~\": { relType: \"conflictual\" },\n \"-/-\": { relType: \"broken\" },\n \"===>\": { relType: \"strong\", energyFlow: \"from\" },\n \"<===\": { relType: \"strong\", energyFlow: \"to\" },\n \"<=>\": { relType: \"moderate\", energyFlow: \"mutual\" },\n \"==>\": { relType: \"moderate\", energyFlow: \"from\" },\n \"<==\": { relType: \"moderate\", energyFlow: \"to\" },\n \"-->\": { relType: \"normal\", energyFlow: \"from\" },\n \"<--\": { relType: \"normal\", energyFlow: \"to\" },\n \"<->\": { relType: \"normal\", energyFlow: \"mutual\" },\n};\n\nconst OP_PATTERN =\n \"===>|<===|===|<=>|==>|<==|<->|-->|<--|~=~|~x~|~~~|-\\\\/-|---|==|- -\";\nconst CONNECTION_RE = new RegExp(\n `^([a-zA-Z][a-zA-Z0-9_-]*)\\\\s+(${OP_PATTERN})\\\\s+([a-zA-Z][a-zA-Z0-9_-]*)(.*)$`\n);\n\n// ─── Public API ────────────────────────────────────────────\n\nexport function parseEcomap(text: string): DiagramAST {\n const lines = text.split(\"\\n\");\n const individuals: Individual[] = [];\n const knownIds = new Set<string>();\n const relationships: Relationship[] = [];\n const metadata: Record<string, string> = {};\n let centerId: string | null = null;\n\n let i = 0;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n if (i >= lines.length) throw new EcomapParseError(\"Empty input\", 1);\n\n const header = lines[i].trim();\n const headerMatch = header.match(/^ecomap\\s*(?:\"([^\"]*)\")?$/i);\n if (!headerMatch)\n throw new EcomapParseError(\"Expected 'ecomap' header\", i + 1);\n if (headerMatch[1]) metadata.title = headerMatch[1];\n i++;\n\n while (i < lines.length) {\n const raw = lines[i];\n const trimmed = raw.trim();\n if (\n trimmed === \"\" ||\n trimmed.startsWith(\"#\") ||\n trimmed.startsWith(\"//\")\n ) {\n i++;\n continue;\n }\n\n // Center definition\n const centerMatch = trimmed.match(\n /^center:\\s*([a-zA-Z][a-zA-Z0-9_-]*)\\s*(\\[.*\\])?\\s*$/\n );\n if (centerMatch) {\n const id = centerMatch[1].toLowerCase();\n centerId = id;\n const props = centerMatch[2] ? parseProps(centerMatch[2]) : {};\n individuals.push(buildIndividual(id, props, true));\n knownIds.add(id);\n i++;\n // Skip indented family content under center\n const baseIndent = leadingSpaces(raw);\n while (i < lines.length) {\n if (lines[i].trim() === \"\") {\n i++;\n continue;\n }\n if (leadingSpaces(lines[i]) > baseIndent + 2) {\n i++;\n } else {\n break;\n }\n }\n continue;\n }\n\n // Connection\n const connMatch = trimmed.match(CONNECTION_RE);\n if (connMatch) {\n const fromRaw = connMatch[1].toLowerCase();\n const op = connMatch[2];\n const toRaw = connMatch[3].toLowerCase();\n const rest = connMatch[4]?.trim() ?? \"\";\n\n const opInfo = CONNECTION_OPS[op];\n if (!opInfo)\n throw new EcomapParseError(`Unknown operator '${op}'`, i + 1);\n\n let label: string | undefined;\n const lblMatch = rest.match(/\\[\\s*label:\\s*\"([^\"]*)\"\\s*\\]/);\n if (lblMatch) label = lblMatch[1];\n\n let from = fromRaw;\n let to = toRaw;\n let flow = opInfo.energyFlow;\n\n if (to === centerId && from !== centerId) {\n [from, to] = [to, from];\n if (flow === \"from\") flow = \"to\";\n else if (flow === \"to\") flow = \"from\";\n }\n\n relationships.push({\n type: opInfo.relType,\n from,\n to,\n label,\n energyFlow: flow,\n });\n i++;\n continue;\n }\n\n // System definition\n const sysMatch = trimmed.match(\n /^([a-zA-Z][a-zA-Z0-9_-]*)\\s*(\\[.*\\])?\\s*$/\n );\n if (sysMatch) {\n const id = sysMatch[1].toLowerCase();\n if (!knownIds.has(id)) {\n const props = sysMatch[2] ? parseProps(sysMatch[2]) : {};\n individuals.push(buildIndividual(id, props, false));\n knownIds.add(id);\n }\n i++;\n continue;\n }\n\n throw new EcomapParseError(`Unexpected: ${trimmed}`, i + 1);\n }\n\n return { type: \"ecomap\", individuals, relationships, metadata };\n}\n\n// ─── Helpers ───────────────────────────────────────────────\n\nfunction leadingSpaces(line: string): number {\n const m = line.match(/^(\\s*)/);\n return m ? m[1].length : 0;\n}\n\nfunction parseProps(bracketStr: string): Record<string, string> {\n const inner = bracketStr.slice(1, -1).trim();\n if (!inner) return {};\n const props: Record<string, string> = {};\n\n for (const part of splitCommas(inner)) {\n const t = part.trim();\n if (!t) continue;\n\n const kv = t.match(/^([\\w][\\w-]*)\\s*:\\s*(?:\"([^\"]*)\"|(\\S+))$/);\n if (kv) {\n props[kv[1]] = kv[2] ?? kv[3];\n continue;\n }\n\n if (t === \"male\" || t === \"female\" || t === \"unknown\") {\n props.sex = t;\n continue;\n }\n\n props[t] = \"true\";\n }\n return props;\n}\n\nfunction splitCommas(s: string): string[] {\n const parts: string[] = [];\n let cur = \"\";\n let inQ = false;\n for (const ch of s) {\n if (ch === '\"') {\n inQ = !inQ;\n cur += ch;\n } else if (ch === \",\" && !inQ) {\n parts.push(cur);\n cur = \"\";\n } else {\n cur += ch;\n }\n }\n if (cur) parts.push(cur);\n return parts;\n}\n\nfunction parseSex(s?: string): Sex {\n switch (s) {\n case \"male\":\n case \"female\":\n case \"unknown\":\n case \"other\":\n case \"nonbinary\":\n case \"intersex\":\n return s;\n default:\n return \"unknown\";\n }\n}\n\nfunction buildIndividual(\n id: string,\n props: Record<string, string>,\n isCenter: boolean\n): Individual {\n const properties: Record<string, string> = {};\n if (isCenter) properties.center = \"true\";\n if (props.category) properties.category = props.category;\n if (props.size) properties.size = props.size;\n if (props.importance) properties.importance = props.importance;\n if (props.sector) properties.sector = props.sector;\n\n return {\n id,\n label: props.label ?? id,\n sex: parseSex(props.sex),\n status: \"alive\",\n age: props.age ? parseInt(props.age, 10) : undefined,\n properties,\n };\n}\n","import type {\n DiagramAST,\n Individual,\n Relationship,\n LayoutConfig,\n LayoutResult,\n LayoutNode,\n LayoutEdge,\n} from \"../../core/types\";\n\n// ─── Constants ─────────────────────────────────────────────\n\nconst CENTER_R = 50;\nconst SYS_R = 30;\nconst SYS_R_LARGE = 40;\nconst SYS_R_SMALL = 20;\nconst PADDING = 40;\nconst LABEL_CLEARANCE = 60;\n\n// ─── Public API ────────────────────────────────────────────\n\nexport function layoutEcomap(\n ast: DiagramAST,\n _config: LayoutConfig\n): LayoutResult {\n const center = ast.individuals.find(\n (ind) => ind.properties?.center === \"true\"\n );\n if (!center) throw new Error(\"Ecomap requires a center element\");\n\n const systems = ast.individuals.filter(\n (ind) => ind.properties?.center !== \"true\"\n );\n const n = systems.length;\n\n if (n === 0) {\n const size = (CENTER_R + PADDING + LABEL_CLEARANCE) * 2;\n return {\n width: size,\n height: size,\n nodes: [\n {\n id: center.id,\n x: size / 2 - CENTER_R,\n y: size / 2 - CENTER_R,\n width: CENTER_R * 2,\n height: CENTER_R * 2,\n generation: 0,\n individual: center,\n },\n ],\n edges: [],\n };\n }\n\n const ringRadii = getRingRadii(n);\n const ringAssignment = assignToRings(\n center.id,\n systems,\n ast.relationships,\n ringRadii.length\n );\n const systemPositions = placeOnRings(systems, ringAssignment, ringRadii);\n\n const maxRing = ringRadii[ringRadii.length - 1] ?? 180;\n const canvasSize = (maxRing + SYS_R_LARGE + LABEL_CLEARANCE + PADDING) * 2;\n const cx = canvasSize / 2;\n const cy = canvasSize / 2;\n\n const nodes: LayoutNode[] = [];\n\n nodes.push({\n id: center.id,\n x: cx - CENTER_R,\n y: cy - CENTER_R,\n width: CENTER_R * 2,\n height: CENTER_R * 2,\n generation: 0,\n individual: center,\n });\n\n for (const sys of systems) {\n const pos = systemPositions.get(sys.id);\n if (!pos) continue;\n const r = getSystemRadius(sys);\n nodes.push({\n id: sys.id,\n x: cx + pos.x - r,\n y: cy + pos.y - r,\n width: r * 2,\n height: r * 2,\n generation: pos.ring + 1,\n individual: sys,\n });\n }\n\n const edges = computeEdges(nodes, ast.relationships);\n\n return { width: canvasSize, height: canvasSize, nodes, edges };\n}\n\n// ─── Ring configuration ────────────────────────────────────\n\nfunction getRingRadii(n: number): number[] {\n if (n === 0) return [];\n if (n <= 6) return [180];\n if (n <= 12) return [150, 270];\n return [140, 230, 320];\n}\n\nfunction assignToRings(\n _centerId: string,\n systems: Individual[],\n rels: Relationship[],\n ringCount: number\n): Map<string, number> {\n const relBySys = new Map<string, Relationship>();\n for (const r of rels) {\n const sysId =\n r.from === _centerId ? r.to : r.from === _centerId ? r.to : r.to;\n if (!relBySys.has(sysId)) relBySys.set(sysId, r);\n const otherId = r.from === _centerId ? r.to : r.from;\n if (!relBySys.has(otherId)) relBySys.set(otherId, r);\n }\n\n const result = new Map<string, number>();\n\n if (ringCount <= 1) {\n for (const s of systems) result.set(s.id, 0);\n return result;\n }\n\n for (const s of systems) {\n const rel = relBySys.get(s.id);\n if (!rel) {\n result.set(s.id, ringCount - 1);\n continue;\n }\n\n if (rel.type === \"strong\" || rel.type === \"stressful-strong\") {\n result.set(s.id, 0);\n } else if (rel.type === \"weak\" || rel.type === \"broken\") {\n result.set(s.id, ringCount - 1);\n } else {\n result.set(s.id, Math.min(1, ringCount - 1));\n }\n }\n\n return result;\n}\n\n// ─── Placement ─────────────────────────────────────────────\n\ninterface SysPos {\n x: number;\n y: number;\n ring: number;\n}\n\nfunction placeOnRings(\n systems: Individual[],\n ringAssignment: Map<string, number>,\n ringRadii: number[]\n): Map<string, SysPos> {\n const ringGroups = new Map<number, Individual[]>();\n for (const s of systems) {\n const ring = ringAssignment.get(s.id) ?? 0;\n const grp = ringGroups.get(ring) ?? [];\n grp.push(s);\n ringGroups.set(ring, grp);\n }\n\n const positions = new Map<string, SysPos>();\n\n for (const [ring, grp] of ringGroups) {\n const radius = ringRadii[ring] ?? ringRadii[ringRadii.length - 1] ?? 180;\n const n = grp.length;\n const startAngle = -Math.PI / 2;\n\n for (let idx = 0; idx < n; idx++) {\n const angle = startAngle + (2 * Math.PI * idx) / n;\n positions.set(grp[idx].id, {\n x: radius * Math.cos(angle),\n y: radius * Math.sin(angle),\n ring,\n });\n }\n }\n\n return positions;\n}\n\n// ─── Edges ─────────────────────────────────────────────────\n\nfunction computeEdges(\n nodes: LayoutNode[],\n rels: Relationship[]\n): LayoutEdge[] {\n const nodeMap = new Map<string, LayoutNode>();\n for (const n of nodes) nodeMap.set(n.id, n);\n\n const edges: LayoutEdge[] = [];\n\n for (const rel of rels) {\n const fromNode = nodeMap.get(rel.from);\n const toNode = nodeMap.get(rel.to);\n if (!fromNode || !toNode) continue;\n\n const fcx = fromNode.x + fromNode.width / 2;\n const fcy = fromNode.y + fromNode.height / 2;\n const tcx = toNode.x + toNode.width / 2;\n const tcy = toNode.y + toNode.height / 2;\n\n const dx = tcx - fcx;\n const dy = tcy - fcy;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < 1) continue;\n\n const ux = dx / dist;\n const uy = dy / dist;\n const fromR = fromNode.width / 2;\n const toR = toNode.width / 2;\n\n const x1 = fcx + ux * fromR;\n const y1 = fcy + uy * fromR;\n const x2 = tcx - ux * toR;\n const y2 = tcy - uy * toR;\n\n edges.push({\n from: rel.from,\n to: rel.to,\n relationship: rel,\n path: `M ${x1} ${y1} L ${x2} ${y2}`,\n });\n }\n\n return edges;\n}\n\n// ─── Helpers ───────────────────────────────────────────────\n\nfunction getSystemRadius(ind: Individual): number {\n const imp = ind.properties?.importance ?? ind.properties?.size;\n switch (imp) {\n case \"major\":\n case \"large\":\n return SYS_R_LARGE;\n case \"minor\":\n case \"small\":\n return SYS_R_SMALL;\n default:\n return SYS_R;\n }\n}\n","import type {\n LayoutResult,\n LayoutNode,\n LayoutEdge,\n RenderConfig,\n} from \"../../core/types\";\nimport { svgRoot, el, group, text, title, desc } from \"../../core/svg\";\nimport { cssCustomProperties, resolveBaseTheme, STROKE_WIDTH, type BaseTheme } from \"../../core/theme\";\n\n// ─── Category colors (Hartman standard) ────────────────────\n\nconst CATEGORY_COLORS: Record<string, string> = {\n family: \"#8D6E63\",\n friends: \"#42A5F5\",\n work: \"#66BB6A\",\n education: \"#FFA726\",\n health: \"#EF5350\",\n \"mental-health\": \"#AB47BC\",\n religion: \"#CCBB33\",\n recreation: \"#26C6DA\",\n legal: \"#78909C\",\n government: \"#8D6E63\",\n financial: \"#66BB6A\",\n community: \"#29B6F6\",\n cultural: \"#FFA726\",\n substance: \"#EF5350\",\n technology: \"#42A5F5\",\n pet: \"#8D6E63\",\n};\n\n// ─── Public API ────────────────────────────────────────────\n\nexport function renderEcomap(\n layout: LayoutResult,\n config: RenderConfig\n): string {\n const centerNode = layout.nodes.find(\n (n) => n.individual.properties?.center === \"true\"\n );\n const systemNodes = layout.nodes.filter(\n (n) => n.individual.properties?.center !== \"true\"\n );\n\n const t = resolveBaseTheme(config.theme);\n const defsStr = buildDefs(t);\n const styleStr = buildStyles(config, t);\n const connectionsStr = renderConnections(layout.edges);\n const centerStr = centerNode ? renderCenter(centerNode, config) : \"\";\n const systemsStr = renderSystems(systemNodes, config);\n const labelsStr = renderConnectionLabels(layout.edges, t);\n\n return svgRoot(\n {\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n class: \"schematex-diagram schematex-ecomap\",\n width: layout.width,\n height: layout.height,\n },\n [\n title(\"Ecomap\"),\n desc(\n `Ecomap diagram with ${systemNodes.length} external systems`\n ),\n defsStr,\n styleStr,\n connectionsStr,\n centerStr,\n systemsStr,\n labelsStr,\n ]\n );\n}\n\n// ─── Defs ──────────────────────────────────────────────────\n\nfunction buildDefs(t: BaseTheme): string {\n const arrowMarker = el(\n \"marker\",\n {\n id: \"schematex-ecomap-eco-arrow\",\n viewBox: \"0 0 10 10\",\n refX: \"10\",\n refY: \"5\",\n markerWidth: \"8\",\n markerHeight: \"8\",\n orient: \"auto-start-reverse\",\n },\n [el(\"path\", { d: \"M 0 0 L 10 5 L 0 10 z\", fill: t.neutral })]\n );\n\n return el(\"defs\", {}, [arrowMarker]);\n}\n\n// ─── Styles ────────────────────────────────────────────────\n\nfunction buildStyles(config: RenderConfig, t: BaseTheme): string {\n let css = `\n.schematex-ecomap {${cssCustomProperties(t)}\n background: ${t.bg};\n}\n.schematex-ecomap-center-shape { fill: ${t.fill}; stroke: ${t.stroke}; stroke-width: ${STROKE_WIDTH.thick}; }\n.schematex-ecomap-center-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize + 2}px; text-anchor: middle; dominant-baseline: central; fill: ${t.text}; font-weight: 600; }\n.schematex-ecomap-system-shape { fill: ${t.fillMuted}; stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; }\n.schematex-ecomap-system-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize - 1}px; text-anchor: middle; fill: ${t.text}; }\n.schematex-ecomap-eco-line { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-parallel { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-weak { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 6,4; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-broken { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 3,8; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-stressful { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-conn-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize - 2}px; text-anchor: middle; fill: ${t.textMuted}; }\n.schematex-ecomap-eco-arrow { fill: ${t.neutral}; }\n`;\n\n for (const [cat, color] of Object.entries(CATEGORY_COLORS)) {\n css += `.schematex-ecomap-system-${cat} .schematex-ecomap-system-shape { fill: ${color}18; stroke: ${color}; }\\n`;\n }\n\n return el(\"style\", {}, css);\n}\n\n// ─── Center ────────────────────────────────────────────────\n\nfunction renderCenter(node: LayoutNode, config: RenderConfig): string {\n const cx = node.x + node.width / 2;\n const cy = node.y + node.height / 2;\n const r = node.width / 2;\n const ind = node.individual;\n\n const label = ind.label !== ind.id ? ind.label : capitalize(ind.id);\n const elements: string[] = [\n el(\"circle\", {\n cx,\n cy,\n r,\n class: \"schematex-ecomap-center-shape\",\n }),\n text(\n {\n x: cx,\n y: cy,\n class: \"schematex-ecomap-center-label\",\n },\n label\n ),\n ];\n\n if (ind.age) {\n elements.push(\n text(\n {\n x: cx,\n y: cy + config.fontSize + 4,\n class: \"schematex-ecomap-center-label\",\n \"font-size\": `${config.fontSize}px`,\n \"font-weight\": \"normal\",\n },\n `Age ${ind.age}`\n )\n );\n }\n\n return group(\n { class: \"schematex-ecomap-center\", \"data-id\": ind.id },\n elements\n );\n}\n\n// ─── Systems ───────────────────────────────────────────────\n\nfunction renderSystems(\n nodes: LayoutNode[],\n config: RenderConfig\n): string {\n const elements: string[] = [];\n\n for (const node of nodes) {\n const cx = node.x + node.width / 2;\n const cy = node.y + node.height / 2;\n const r = node.width / 2;\n const ind = node.individual;\n const cat = ind.properties?.category ?? \"other\";\n const label = ind.label !== ind.id ? ind.label : capitalize(ind.id);\n\n const labelLines = wrapLabel(label, 12);\n const labelElements: string[] = [];\n const labelStartY = cy + r + config.fontSize + 2;\n\n for (let li = 0; li < labelLines.length; li++) {\n labelElements.push(\n text(\n {\n x: cx,\n y: labelStartY + li * (config.fontSize + 1),\n class: \"schematex-ecomap-system-label\",\n },\n labelLines[li]\n )\n );\n }\n\n elements.push(\n group(\n {\n class: `schematex-ecomap-system schematex-ecomap-system-${cat}`,\n \"data-system-id\": ind.id,\n },\n [\n el(\"circle\", {\n cx,\n cy,\n r,\n class: \"schematex-ecomap-system-shape\",\n }),\n ...labelElements,\n ]\n )\n );\n }\n\n return group({ class: \"schematex-ecomap-systems\" }, elements);\n}\n\n// ─── Connections ───────────────────────────────────────────\n\nfunction renderConnections(edges: LayoutEdge[]): string {\n const elements: string[] = [];\n\n for (const edge of edges) {\n const coords = extractLineCoords(edge.path);\n if (!coords) continue;\n\n const relType = edge.relationship.type;\n const flow = edge.relationship.energyFlow;\n const lineElements: string[] = [];\n\n const arrowAttrs = getArrowAttrs(flow);\n\n switch (relType) {\n case \"strong\":\n lineElements.push(\n ...parallelLines(coords, 3, 4, {\n class: \"schematex-ecomap-eco-line-parallel\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"moderate\":\n lineElements.push(\n ...parallelLines(coords, 2, 4, {\n class: \"schematex-ecomap-eco-line-parallel\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"weak\":\n lineElements.push(\n el(\"line\", {\n x1: coords.x1,\n y1: coords.y1,\n x2: coords.x2,\n y2: coords.y2,\n class: \"schematex-ecomap-eco-line-weak\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"stressful\":\n case \"stressful-strong\":\n lineElements.push(\n el(\"path\", {\n d: wavyPath(\n coords.x1,\n coords.y1,\n coords.x2,\n coords.y2,\n 8,\n 20\n ),\n class: \"schematex-ecomap-eco-line-stressful\",\n \"stroke-width\": relType === \"stressful-strong\" ? \"3\" : \"2\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"conflictual\":\n lineElements.push(\n el(\"path\", {\n d: wavyPath(\n coords.x1,\n coords.y1,\n coords.x2,\n coords.y2,\n 8,\n 20\n ),\n class: \"schematex-ecomap-eco-line-stressful\",\n ...arrowAttrs,\n })\n );\n lineElements.push(\n ...conflictMarks(coords)\n );\n break;\n\n case \"broken\":\n lineElements.push(\n el(\"line\", {\n x1: coords.x1,\n y1: coords.y1,\n x2: coords.x2,\n y2: coords.y2,\n class: \"schematex-ecomap-eco-line-broken\",\n ...arrowAttrs,\n })\n );\n break;\n\n default:\n lineElements.push(\n el(\"line\", {\n x1: coords.x1,\n y1: coords.y1,\n x2: coords.x2,\n y2: coords.y2,\n class: \"schematex-ecomap-eco-line\",\n ...arrowAttrs,\n })\n );\n break;\n }\n\n elements.push(\n group(\n {\n class: `schematex-ecomap-connection schematex-ecomap-connection-${relType}`,\n \"data-from\": edge.from,\n \"data-to\": edge.to,\n },\n lineElements\n )\n );\n }\n\n return group({ class: \"schematex-ecomap-connections\" }, elements);\n}\n\n// ─── Connection labels ─────────────────────────────────────\n\nfunction renderConnectionLabels(edges: LayoutEdge[], t: BaseTheme): string {\n const elements: string[] = [];\n\n for (const edge of edges) {\n if (!edge.relationship.label) continue;\n const coords = extractLineCoords(edge.path);\n if (!coords) continue;\n\n const mx = (coords.x1 + coords.x2) / 2;\n const my = (coords.y1 + coords.y2) / 2;\n\n elements.push(\n group({ class: \"schematex-ecomap-conn-label-group\" }, [\n el(\"rect\", {\n x: mx - 40,\n y: my - 8,\n width: 80,\n height: 16,\n rx: 3,\n fill: t.bg,\n \"fill-opacity\": \"0.85\",\n }),\n text(\n { x: mx, y: my + 4, class: \"schematex-ecomap-eco-conn-label\" },\n edge.relationship.label\n ),\n ])\n );\n }\n\n return group({ class: \"schematex-ecomap-connection-labels\" }, elements);\n}\n\n// ─── Line type helpers ─────────────────────────────────────\n\ninterface LineCoords {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nfunction extractLineCoords(pathData: string): LineCoords | null {\n const m = pathData.match(\n /M\\s*([\\d.-]+)\\s+([\\d.-]+)\\s*L\\s*([\\d.-]+)\\s+([\\d.-]+)/\n );\n if (!m) return null;\n return { x1: +m[1], y1: +m[2], x2: +m[3], y2: +m[4] };\n}\n\nfunction parallelLines(\n coords: LineCoords,\n count: number,\n gap: number,\n attrs: Record<string, string | number | undefined>\n): string[] {\n const { x1, y1, x2, y2 } = coords;\n const dx = x2 - x1;\n const dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n if (len < 1) return [];\n\n const nx = -dy / len;\n const ny = dx / len;\n\n const lines: string[] = [];\n const offsets =\n count === 2\n ? [-gap / 2, gap / 2]\n : count === 3\n ? [-gap, 0, gap]\n : [0];\n\n for (const off of offsets) {\n lines.push(\n el(\"line\", {\n x1: x1 + nx * off,\n y1: y1 + ny * off,\n x2: x2 + nx * off,\n y2: y2 + ny * off,\n ...attrs,\n })\n );\n }\n\n return lines;\n}\n\nfunction wavyPath(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n amplitude: number,\n wavelength: number\n): string {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n const segments = Math.max(4, Math.round(len / wavelength));\n\n const ux = dx / len;\n const uy = dy / len;\n const nx = -uy;\n const ny = ux;\n\n let d = `M ${x1} ${y1}`;\n for (let i = 0; i < segments; i++) {\n const t1 = (i + 0.5) / segments;\n const t2 = (i + 1) / segments;\n const sign = i % 2 === 0 ? 1 : -1;\n const cpx = x1 + dx * t1 + nx * amplitude * sign;\n const cpy = y1 + dy * t1 + ny * amplitude * sign;\n const ex = x1 + dx * t2;\n const ey = y1 + dy * t2;\n d += ` Q ${cpx} ${cpy} ${ex} ${ey}`;\n }\n\n return d;\n}\n\nfunction conflictMarks(coords: LineCoords): string[] {\n const mx = (coords.x1 + coords.x2) / 2;\n const my = (coords.y1 + coords.y2) / 2;\n const dx = coords.x2 - coords.x1;\n const dy = coords.y2 - coords.y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n if (len < 1) return [];\n\n const nx = -dy / len;\n const ny = dx / len;\n const markLen = 6;\n\n return [\n el(\"line\", {\n x1: mx - 3 + nx * markLen,\n y1: my - 3 + ny * markLen,\n x2: mx - 3 - nx * markLen,\n y2: my - 3 - ny * markLen,\n class: \"schematex-ecomap-eco-line\",\n \"stroke-width\": \"2\",\n }),\n el(\"line\", {\n x1: mx + 3 + nx * markLen,\n y1: my + 3 + ny * markLen,\n x2: mx + 3 - nx * markLen,\n y2: my + 3 - ny * markLen,\n class: \"schematex-ecomap-eco-line\",\n \"stroke-width\": \"2\",\n }),\n ];\n}\n\nfunction getArrowAttrs(\n flow?: \"from\" | \"to\" | \"mutual\" | \"none\"\n): Record<string, string> {\n if (!flow || flow === \"none\") return {};\n switch (flow) {\n case \"from\":\n return { \"marker-end\": \"url(#schematex-ecomap-eco-arrow)\" };\n case \"to\":\n return { \"marker-start\": \"url(#schematex-ecomap-eco-arrow)\" };\n case \"mutual\":\n return {\n \"marker-start\": \"url(#schematex-ecomap-eco-arrow)\",\n \"marker-end\": \"url(#schematex-ecomap-eco-arrow)\",\n };\n default:\n return {};\n }\n}\n\n// ─── Text helpers ──────────────────────────────────────────\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction wrapLabel(label: string, maxChars: number): string[] {\n if (label.length <= maxChars) return [label];\n const words = label.split(/\\s+/);\n const lines: string[] = [];\n let current = \"\";\n\n for (const word of words) {\n if (current && current.length + word.length + 1 > maxChars) {\n lines.push(current);\n current = word;\n } else {\n current = current ? current + \" \" + word : word;\n }\n }\n if (current) lines.push(current);\n return lines;\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseEcomap } from \"./parser\";\nimport { layoutEcomap } from \"./layout\";\nimport { renderEcomap } from \"./renderer\";\n\nexport { parseEcomap, EcomapParseError } from \"./parser\";\nexport { layoutEcomap } from \"./layout\";\nexport { renderEcomap } from \"./renderer\";\n\nexport const ecomap: DiagramPlugin = {\n type: \"ecomap\",\n\n detect(text: string): boolean {\n const firstLine = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return firstLine === \"ecomap\" || firstLine.startsWith(\"ecomap \");\n },\n\n render(text: string, config?: RenderConfig): string {\n const ast = parseEcomap(text);\n const layoutConfig = {\n nodeSpacingX: 80,\n nodeSpacingY: 100,\n nodeWidth: 40,\n nodeHeight: 40,\n };\n const layout = layoutEcomap(ast, layoutConfig);\n const renderConfig: RenderConfig = {\n fontFamily: config?.fontFamily ?? \"system-ui, -apple-system, sans-serif\",\n fontSize: config?.fontSize ?? 12,\n theme: config?.theme ?? \"default\",\n padding: config?.padding ?? 20,\n };\n return renderEcomap(layout, renderConfig);\n },\n};\n"]}