schematex 0.3.3 → 0.3.4

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 (150) hide show
  1. package/README.md +20 -1
  2. package/dist/ai/ai-sdk.cjs +23 -23
  3. package/dist/ai/ai-sdk.js +18 -18
  4. package/dist/ai/index.cjs +26 -26
  5. package/dist/ai/index.js +18 -18
  6. package/dist/browser.cjs +20 -20
  7. package/dist/browser.js +18 -18
  8. package/dist/{chunk-AVIKQZSX.cjs → chunk-3MJKJX27.cjs} +2 -3
  9. package/dist/chunk-3MJKJX27.cjs.map +1 -0
  10. package/dist/{chunk-6TIN33CA.js → chunk-3RAVPXLN.js} +3 -3
  11. package/dist/{chunk-6TIN33CA.js.map → chunk-3RAVPXLN.js.map} +1 -1
  12. package/dist/{chunk-YUPG2M3I.cjs → chunk-4THC4VUA.cjs} +3 -3
  13. package/dist/chunk-4THC4VUA.cjs.map +1 -0
  14. package/dist/{chunk-ZCW7YH3C.cjs → chunk-5COUZTVA.cjs} +3 -3
  15. package/dist/{chunk-ZCW7YH3C.cjs.map → chunk-5COUZTVA.cjs.map} +1 -1
  16. package/dist/{chunk-66XQBGX7.js → chunk-5CTERELC.js} +3 -3
  17. package/dist/{chunk-66XQBGX7.js.map → chunk-5CTERELC.js.map} +1 -1
  18. package/dist/{chunk-GVCPFBAV.js → chunk-5SKT7RYR.js} +3 -3
  19. package/dist/chunk-5SKT7RYR.js.map +1 -0
  20. package/dist/{chunk-ZFNZ2FYI.cjs → chunk-6ULC3UHJ.cjs} +3 -3
  21. package/dist/chunk-6ULC3UHJ.cjs.map +1 -0
  22. package/dist/{chunk-ZZJDGGC3.cjs → chunk-6WORZSL3.cjs} +3 -3
  23. package/dist/{chunk-ZZJDGGC3.cjs.map → chunk-6WORZSL3.cjs.map} +1 -1
  24. package/dist/{chunk-GLFBHQSQ.js → chunk-6XGSEG3K.js} +2 -3
  25. package/dist/chunk-6XGSEG3K.js.map +1 -0
  26. package/dist/{chunk-CWZKP3CJ.cjs → chunk-CQP5YHVK.cjs} +2 -3
  27. package/dist/chunk-CQP5YHVK.cjs.map +1 -0
  28. package/dist/{chunk-QXL7AY2H.cjs → chunk-CS67UBP3.cjs} +3 -3
  29. package/dist/{chunk-QXL7AY2H.cjs.map → chunk-CS67UBP3.cjs.map} +1 -1
  30. package/dist/{chunk-APV4AWQ5.cjs → chunk-DBMZEZLF.cjs} +38 -38
  31. package/dist/chunk-DBMZEZLF.cjs.map +1 -0
  32. package/dist/{chunk-XV2DTN6G.js → chunk-DHKKDIVT.js} +3 -3
  33. package/dist/chunk-DHKKDIVT.js.map +1 -0
  34. package/dist/{chunk-MNOO7STY.js → chunk-DNZV4V4R.js} +3 -3
  35. package/dist/{chunk-MNOO7STY.js.map → chunk-DNZV4V4R.js.map} +1 -1
  36. package/dist/{chunk-UDGU73RL.cjs → chunk-H5JYZ5YS.cjs} +3 -3
  37. package/dist/chunk-H5JYZ5YS.cjs.map +1 -0
  38. package/dist/{chunk-6YUP3QMA.js → chunk-HKJRHXGZ.js} +21 -21
  39. package/dist/chunk-HKJRHXGZ.js.map +1 -0
  40. package/dist/{chunk-PAG3BNIV.js → chunk-I6VEXSUK.js} +2 -3
  41. package/dist/chunk-I6VEXSUK.js.map +1 -0
  42. package/dist/{chunk-55UEHL57.cjs → chunk-IFR34VTL.cjs} +3 -3
  43. package/dist/chunk-IFR34VTL.cjs.map +1 -0
  44. package/dist/{chunk-5U2W3HQA.js → chunk-IURM4ZWE.js} +3 -3
  45. package/dist/chunk-IURM4ZWE.js.map +1 -0
  46. package/dist/{chunk-IQRRZPVZ.js → chunk-IZMAZOQI.js} +3 -3
  47. package/dist/chunk-IZMAZOQI.js.map +1 -0
  48. package/dist/{chunk-UWRTV6IV.cjs → chunk-J3Y2QDJR.cjs} +5 -5
  49. package/dist/{chunk-UWRTV6IV.cjs.map → chunk-J3Y2QDJR.cjs.map} +1 -1
  50. package/dist/{chunk-QOLBWCF5.cjs → chunk-K6RAUXRQ.cjs} +2 -3
  51. package/dist/chunk-K6RAUXRQ.cjs.map +1 -0
  52. package/dist/{chunk-WTF6JXHN.js → chunk-LPKVIRYT.js} +2 -3
  53. package/dist/chunk-LPKVIRYT.js.map +1 -0
  54. package/dist/{chunk-PG6TDGKI.cjs → chunk-MIKCKV27.cjs} +3 -3
  55. package/dist/chunk-MIKCKV27.cjs.map +1 -0
  56. package/dist/{chunk-HOI6QKC6.cjs → chunk-O5POCPXZ.cjs} +2 -3
  57. package/dist/chunk-O5POCPXZ.cjs.map +1 -0
  58. package/dist/{chunk-UT4TIDAA.js → chunk-PWI4NFYR.js} +3 -3
  59. package/dist/chunk-PWI4NFYR.js.map +1 -0
  60. package/dist/{chunk-IAEABLIV.cjs → chunk-T47A6XUK.cjs} +3 -3
  61. package/dist/chunk-T47A6XUK.cjs.map +1 -0
  62. package/dist/{chunk-U3KRKXF7.js → chunk-TWAC2IIS.js} +3 -3
  63. package/dist/chunk-TWAC2IIS.js.map +1 -0
  64. package/dist/{chunk-N56YC75X.cjs → chunk-V4OVUBLA.cjs} +3 -3
  65. package/dist/chunk-V4OVUBLA.cjs.map +1 -0
  66. package/dist/{chunk-FIVUMDLF.js → chunk-VRE5VWDQ.js} +3 -3
  67. package/dist/chunk-VRE5VWDQ.js.map +1 -0
  68. package/dist/{chunk-TQU44E46.js → chunk-WHNIK4LK.js} +2 -3
  69. package/dist/chunk-WHNIK4LK.js.map +1 -0
  70. package/dist/{chunk-7EWFVNYD.cjs → chunk-WIFGBWET.cjs} +2 -3
  71. package/dist/chunk-WIFGBWET.cjs.map +1 -0
  72. package/dist/{chunk-Q5OFA4I2.cjs → chunk-XSNNGYXZ.cjs} +3 -3
  73. package/dist/chunk-XSNNGYXZ.cjs.map +1 -0
  74. package/dist/{chunk-X5QJO4ZD.js → chunk-YWDODCW2.js} +3 -3
  75. package/dist/{chunk-X5QJO4ZD.js.map → chunk-YWDODCW2.js.map} +1 -1
  76. package/dist/{chunk-UDJ2KN2A.js → chunk-ZKDL6Y3O.js} +3 -3
  77. package/dist/chunk-ZKDL6Y3O.js.map +1 -0
  78. package/dist/{chunk-AC3XH3LB.js → chunk-ZQZNWAHH.js} +2 -3
  79. package/dist/chunk-ZQZNWAHH.js.map +1 -0
  80. package/dist/diagrams/blockdiagram/index.cjs +5 -5
  81. package/dist/diagrams/blockdiagram/index.js +1 -1
  82. package/dist/diagrams/circuit/index.cjs +7 -7
  83. package/dist/diagrams/circuit/index.js +1 -1
  84. package/dist/diagrams/ecomap/index.cjs +6 -6
  85. package/dist/diagrams/ecomap/index.js +1 -1
  86. package/dist/diagrams/entity/index.cjs +5 -5
  87. package/dist/diagrams/entity/index.js +1 -1
  88. package/dist/diagrams/fishbone/index.cjs +7 -7
  89. package/dist/diagrams/fishbone/index.js +1 -1
  90. package/dist/diagrams/flowchart/index.cjs +7 -7
  91. package/dist/diagrams/flowchart/index.js +1 -1
  92. package/dist/diagrams/genogram/index.cjs +8 -8
  93. package/dist/diagrams/genogram/index.js +1 -1
  94. package/dist/diagrams/ladder/index.cjs +5 -5
  95. package/dist/diagrams/ladder/index.js +1 -1
  96. package/dist/diagrams/logic/index.cjs +5 -5
  97. package/dist/diagrams/logic/index.js +1 -1
  98. package/dist/diagrams/orgchart/index.cjs +6 -6
  99. package/dist/diagrams/orgchart/index.js +1 -1
  100. package/dist/diagrams/pedigree/index.cjs +6 -6
  101. package/dist/diagrams/pedigree/index.js +1 -1
  102. package/dist/diagrams/phylo/index.cjs +6 -6
  103. package/dist/diagrams/phylo/index.js +1 -1
  104. package/dist/diagrams/sld/index.cjs +5 -5
  105. package/dist/diagrams/sld/index.js +1 -1
  106. package/dist/diagrams/sociogram/index.cjs +5 -5
  107. package/dist/diagrams/sociogram/index.js +1 -1
  108. package/dist/diagrams/timing/index.cjs +4 -4
  109. package/dist/diagrams/timing/index.js +1 -1
  110. package/dist/diagrams/venn/index.cjs +8 -8
  111. package/dist/diagrams/venn/index.js +1 -1
  112. package/dist/export.cjs +1 -1
  113. package/dist/export.cjs.map +1 -1
  114. package/dist/export.d.cts +1 -1
  115. package/dist/export.d.ts +1 -1
  116. package/dist/export.js +1 -1
  117. package/dist/export.js.map +1 -1
  118. package/dist/index.cjs +39 -39
  119. package/dist/index.js +17 -17
  120. package/dist/react.cjs +18 -18
  121. package/dist/react.js +17 -17
  122. package/package.json +1 -1
  123. package/dist/chunk-55UEHL57.cjs.map +0 -1
  124. package/dist/chunk-5U2W3HQA.js.map +0 -1
  125. package/dist/chunk-6YUP3QMA.js.map +0 -1
  126. package/dist/chunk-7EWFVNYD.cjs.map +0 -1
  127. package/dist/chunk-AC3XH3LB.js.map +0 -1
  128. package/dist/chunk-APV4AWQ5.cjs.map +0 -1
  129. package/dist/chunk-AVIKQZSX.cjs.map +0 -1
  130. package/dist/chunk-CWZKP3CJ.cjs.map +0 -1
  131. package/dist/chunk-FIVUMDLF.js.map +0 -1
  132. package/dist/chunk-GLFBHQSQ.js.map +0 -1
  133. package/dist/chunk-GVCPFBAV.js.map +0 -1
  134. package/dist/chunk-HOI6QKC6.cjs.map +0 -1
  135. package/dist/chunk-IAEABLIV.cjs.map +0 -1
  136. package/dist/chunk-IQRRZPVZ.js.map +0 -1
  137. package/dist/chunk-N56YC75X.cjs.map +0 -1
  138. package/dist/chunk-PAG3BNIV.js.map +0 -1
  139. package/dist/chunk-PG6TDGKI.cjs.map +0 -1
  140. package/dist/chunk-Q5OFA4I2.cjs.map +0 -1
  141. package/dist/chunk-QOLBWCF5.cjs.map +0 -1
  142. package/dist/chunk-TQU44E46.js.map +0 -1
  143. package/dist/chunk-U3KRKXF7.js.map +0 -1
  144. package/dist/chunk-UDGU73RL.cjs.map +0 -1
  145. package/dist/chunk-UDJ2KN2A.js.map +0 -1
  146. package/dist/chunk-UT4TIDAA.js.map +0 -1
  147. package/dist/chunk-WTF6JXHN.js.map +0 -1
  148. package/dist/chunk-XV2DTN6G.js.map +0 -1
  149. package/dist/chunk-YUPG2M3I.cjs.map +0 -1
  150. package/dist/chunk-ZFNZ2FYI.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/diagrams/ecomap/parser.ts","../src/diagrams/ecomap/layout.ts","../src/diagrams/ecomap/legend.ts","../src/diagrams/ecomap/renderer.ts","../src/diagrams/ecomap/index.ts"],"names":["text","CATEGORY_COLORS"],"mappings":"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","file":"chunk-LPKVIRYT.js","sourcesContent":["import type {\n DiagramAST,\n Individual,\n LegendOverrides,\n Relationship,\n RelationshipType,\n Sex,\n} from \"../../core/types\";\nimport { parseLegendDirective } from \"../../core/legend-parser\";\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 const legendOverrides: LegendOverrides = {};\n let hasLegendOverrides = false;\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 // Legend directives: legend.title, legend.position, legend.label, etc.\n if (parseLegendDirective(trimmed, legendOverrides)) {\n hasLegendOverrides = true;\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 {\n type: \"ecomap\",\n individuals,\n relationships,\n metadata,\n legendOverrides: hasLegendOverrides ? legendOverrides : undefined,\n };\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","/**\n * Auto-derive a LegendSpec from an ecomap AST.\n *\n * Two sections, each emitted only when the diagram uses something non-trivial:\n * 1. Systems — color swatch per used `category` (Hartman palette)\n * 2. Ties — line style per used relationship type (strong/moderate/\n * weak/stressful/conflictual/broken). The default plain\n * line tie is treated as \"obvious\" and not listed.\n */\n\nimport type {\n DiagramAST,\n LegendItem,\n LegendSection,\n LegendSpec,\n RelationshipType,\n} from \"../../core/types\";\n\n// Mirrors the palette in renderer.ts. Kept colocated so the legend swatch\n// matches whatever the renderer paints.\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\nconst ECOMAP_TIE_TYPES: ReadonlySet<RelationshipType> = new Set<RelationshipType>([\n \"strong\",\n \"moderate\",\n \"weak\",\n \"stressful\",\n \"stressful-strong\",\n \"conflictual\",\n \"broken\",\n]);\n\nconst SECTIONS: LegendSection[] = [\n { id: \"systems\", title: \"Systems\" },\n { id: \"ties\", title: \"Ties\" },\n];\n\nexport function buildEcomapLegend(ast: DiagramAST): LegendSpec {\n const items: LegendItem[] = [];\n\n // Systems — only categories actually present (excluding the center node).\n const usedCats = new Set<string>();\n for (const ind of ast.individuals) {\n if (ind.properties?.center === \"true\") continue;\n const cat = ind.properties?.category;\n if (cat) usedCats.add(cat);\n }\n // Stable ordering: sort alphabetically.\n const orderedCats = Array.from(usedCats).sort();\n for (const cat of orderedCats) {\n items.push({\n key: `cat.${cat}`,\n label: humanize(cat),\n kind: \"fill\",\n color: CATEGORY_COLORS[cat] ?? \"#9ca3af\",\n section: \"systems\",\n });\n }\n\n // Ties — only types used.\n const usedTies = new Set<RelationshipType>();\n for (const r of ast.relationships) {\n if (ECOMAP_TIE_TYPES.has(r.type)) usedTies.add(r.type);\n }\n const tieOrder: RelationshipType[] = [\n \"strong\",\n \"moderate\",\n \"weak\",\n \"stressful\",\n \"stressful-strong\",\n \"conflictual\",\n \"broken\",\n ];\n for (const t of tieOrder) {\n if (!usedTies.has(t)) continue;\n items.push(tieItem(t));\n }\n\n return {\n mode: \"auto\",\n title: \"Legend\",\n position: \"bottom-inline\",\n columns: 1,\n sections: SECTIONS,\n items,\n };\n}\n\nfunction tieItem(t: RelationshipType): LegendItem {\n const base: LegendItem = {\n key: t,\n label: humanize(t),\n kind: \"line\",\n section: \"ties\",\n pattern: \"solid\",\n };\n switch (t) {\n case \"strong\":\n // Three parallel lines visualised — represented in legend as a thicker solid bar.\n return { ...base, strokeWidth: 4 };\n case \"moderate\":\n return { ...base, strokeWidth: 3 };\n case \"weak\":\n return { ...base, pattern: \"dashed\", strokeWidth: 1.5 };\n case \"stressful\":\n return { ...base, pattern: \"wavy\", strokeWidth: 2 };\n case \"stressful-strong\":\n return { ...base, pattern: \"wavy\", strokeWidth: 3 };\n case \"conflictual\":\n return { ...base, kind: \"edge\", pattern: \"wavy\", marker: \"X\", strokeWidth: 2 };\n case \"broken\":\n return { ...base, pattern: \"broken\" };\n default:\n return base;\n }\n}\n\nfunction humanize(s: string): string {\n return s\n .replace(/[-_]+/g, \" \")\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n","import type {\n DiagramAST,\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\";\nimport { applyLegendOverrides, renderLegend } from \"../../core/legend\";\nimport { buildEcomapLegend } from \"./legend\";\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 ast?: DiagramAST\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, centerNode?.individual.id);\n const centerStr = centerNode ? renderCenter(centerNode, config) : \"\";\n const systemsStr = renderSystems(systemNodes, config);\n const labelsStr = renderConnectionLabels(layout.edges, t);\n\n const layers: string[] = [\n title(\"Ecomap\"),\n desc(`Ecomap diagram with ${systemNodes.length} external systems`),\n defsStr,\n styleStr,\n ];\n\n // Defer pushing chart-content until we know whether the legend widens the\n // viewBox so we can horizontally center the chart.\n const chartContent = [\n connectionsStr,\n centerStr,\n systemsStr,\n labelsStr,\n ];\n\n let finalWidth = layout.width;\n let finalHeight = layout.height;\n let legendSvg = \"\";\n\n if (ast) {\n const autoSpec = buildEcomapLegend(ast);\n const finalSpec = applyLegendOverrides(autoSpec, ast.legendOverrides);\n if (finalSpec.mode === \"on\" && finalSpec.items.length > 0) {\n const { svg, bbox: lb } = renderLegend(\n finalSpec,\n {\n canvasWidth: layout.width,\n canvasHeight: layout.height,\n padding: 16,\n },\n t,\n { fontFamily: config.fontFamily, fontSize: config.fontSize }\n );\n if (svg) {\n legendSvg = svg;\n const overflowX = lb.x + lb.w + 8;\n const overflowY = lb.y + lb.h + 8;\n if (overflowX > finalWidth) finalWidth = overflowX;\n if (overflowY > finalHeight) finalHeight = overflowY;\n }\n }\n }\n\n const chartXOffset = Math.max(0, (finalWidth - layout.width) / 2);\n layers.push(\n group(\n { transform: chartXOffset > 0 ? `translate(${chartXOffset}, 0)` : undefined },\n chartContent\n )\n );\n if (legendSvg) layers.push(legendSvg);\n\n return svgRoot(\n {\n viewBox: `0 0 ${finalWidth} ${finalHeight}`,\n class: \"schematex-diagram schematex-ecomap\",\n width: finalWidth,\n height: finalHeight,\n },\n layers\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}\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.schematex-ecomap-connection-mesosystem .schematex-ecomap-eco-line,\n.schematex-ecomap-connection-mesosystem .schematex-ecomap-eco-line-parallel,\n.schematex-ecomap-connection-mesosystem .schematex-ecomap-eco-line-weak,\n.schematex-ecomap-connection-mesosystem .schematex-ecomap-eco-line-broken,\n.schematex-ecomap-connection-mesosystem .schematex-ecomap-eco-line-stressful { stroke-opacity: 0.55; }\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[], centerId?: string): 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 const isMesosystem =\n centerId !== undefined && edge.from !== centerId && edge.to !== centerId;\n const groupClass = isMesosystem\n ? `schematex-ecomap-connection schematex-ecomap-connection-${relType} schematex-ecomap-connection-mesosystem`\n : `schematex-ecomap-connection schematex-ecomap-connection-${relType}`;\n const groupAttrs: Record<string, string> = {\n class: groupClass,\n \"data-from\": edge.from,\n \"data-to\": edge.to,\n };\n if (isMesosystem) groupAttrs[\"data-mesosystem\"] = \"true\";\n\n elements.push(group(groupAttrs, lineElements));\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 parse: parseEcomap,\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, ast);\n },\n};\n"]}
@@ -1042,7 +1042,7 @@ function idSlug(id) {
1042
1042
  }
1043
1043
  function buildCss(tokens) {
1044
1044
  return `
1045
- .schematex-venn { background: ${tokens.bg}; font-family: system-ui, -apple-system, "Segoe UI", sans-serif; }
1045
+ .schematex-venn { font-family: system-ui, -apple-system, "Segoe UI", sans-serif; }
1046
1046
  .schematex-venn-title { font: 600 16px sans-serif; fill: ${tokens.text}; }
1047
1047
  .schematex-venn-set { stroke: ${tokens.vennSetStroke}; stroke-width: 1.25; }
1048
1048
  .schematex-venn-blend-multiply { mix-blend-mode: multiply; }
@@ -1217,5 +1217,5 @@ exports.renderVenn = renderVenn;
1217
1217
  exports.renderVennAST = renderVennAST;
1218
1218
  exports.renderVennLayout = renderVennLayout;
1219
1219
  exports.venn = venn;
1220
- //# sourceMappingURL=chunk-PG6TDGKI.cjs.map
1221
- //# sourceMappingURL=chunk-PG6TDGKI.cjs.map
1220
+ //# sourceMappingURL=chunk-MIKCKV27.cjs.map
1221
+ //# sourceMappingURL=chunk-MIKCKV27.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/diagrams/venn/parser.ts","../src/diagrams/venn/geometry.ts","../src/diagrams/venn/labels.ts","../src/diagrams/venn/layout.ts","../src/diagrams/venn/renderer.ts","../src/diagrams/venn/index.ts"],"names":["text","title","el","circle","resolveVennTheme","group","path","desc","svgRoot"],"mappings":"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","file":"chunk-MIKCKV27.cjs","sourcesContent":["/**\n * Venn / Euler DSL parser (hand-written recursive descent).\n *\n * Accepts four DSL modes (see 15-VENN-STANDARD §5):\n * 1. Declarative set + intersection: `A & B : 42`\n * 2. Enumeration shorthand: `A = { 1, 2, 3 }`\n * 3. Region-labeled: `region A & B : \"...\"`\n * 4. Euler-explicit: `dogs subset mammals`\n *\n * All four can be mixed within one document (except enumeration sets imply\n * automatic intersections and shouldn't be combined with explicit `A & B :`).\n */\n\nimport type {\n VennAST,\n VennConfig,\n VennEulerRelation,\n VennEulerRelationType,\n VennRegion,\n VennRegionValue,\n VennSet,\n} from \"../../core/types\";\n\nexport class VennParseError extends Error {\n constructor(message: string, public readonly line?: number) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"VennParseError\";\n }\n}\n\nconst DEFAULT_CONFIG: VennConfig = {\n mode: \"auto\",\n proportional: false,\n palette: \"default\",\n blendMode: \"multiply\",\n showCounts: \"auto\",\n showPercent: false,\n};\n\nfunction stripComment(line: string): string {\n // Comments start at first unquoted '#'.\n let inQuote = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"') inQuote = !inQuote;\n else if (ch === \"#\" && !inQuote) return line.slice(0, i);\n }\n return line;\n}\n\nfunction stripQuotes(s: string): string {\n const t = s.trim();\n if (t.length >= 2 && t.startsWith('\"') && t.endsWith('\"')) return t.slice(1, -1);\n return t;\n}\n\nfunction parseConfigProps(text: string): Record<string, string> {\n // Split on commas that are not inside quotes or brackets.\n const out: Record<string, string> = {};\n let depth = 0;\n let inQuote = false;\n let buf = \"\";\n const parts: string[] = [];\n for (const ch of text) {\n if (ch === '\"') inQuote = !inQuote;\n else if (!inQuote && (ch === \"[\" || ch === \"(\" || ch === \"{\")) depth++;\n else if (!inQuote && (ch === \"]\" || ch === \")\" || ch === \"}\")) depth--;\n if (ch === \",\" && depth === 0 && !inQuote) {\n parts.push(buf);\n buf = \"\";\n } else {\n buf += ch;\n }\n }\n if (buf.trim()) parts.push(buf);\n for (const p of parts) {\n const idx = p.indexOf(\":\");\n if (idx < 0) continue;\n const k = p.slice(0, idx).trim();\n const v = p.slice(idx + 1).trim();\n out[k] = stripQuotes(v);\n }\n return out;\n}\n\nfunction parseTitleAndProps(rest: string): { title?: string; props: Record<string, string> } {\n // Matches: \"title\" [k: v, k2: v2] or \"title\" or [k: v]\n const trimmed = rest.trim();\n let i = 0;\n let title: string | undefined;\n if (trimmed.startsWith('\"')) {\n const end = trimmed.indexOf('\"', 1);\n if (end < 0) throw new VennParseError(\"unterminated quoted title\");\n title = trimmed.slice(1, end);\n i = end + 1;\n }\n const tail = trimmed.slice(i).trim();\n let props: Record<string, string> = {};\n if (tail.startsWith(\"[\") && tail.endsWith(\"]\")) {\n props = parseConfigProps(tail.slice(1, -1));\n }\n return { title, props };\n}\n\nfunction parseValue(raw: string): VennRegionValue {\n const t = raw.trim();\n if (!t) return { kind: \"none\" };\n // List: [ ... ]\n if (t.startsWith(\"[\") && t.endsWith(\"]\")) {\n const inner = t.slice(1, -1).trim();\n if (!inner) return { kind: \"list\", value: [] };\n const items = splitTopLevelCommas(inner).map((x) => stripQuotes(x.trim()));\n return { kind: \"list\", value: items };\n }\n // Percentage\n if (/^-?\\d+(\\.\\d+)?%$/.test(t)) {\n return { kind: \"percent\", value: parseFloat(t.slice(0, -1)) };\n }\n // Integer\n if (/^-?\\d+$/.test(t)) {\n return { kind: \"integer\", value: parseInt(t, 10) };\n }\n // Quoted string\n if (t.startsWith('\"') && t.endsWith('\"')) {\n return { kind: \"text\", value: t.slice(1, -1) };\n }\n // Bare word / text\n return { kind: \"text\", value: t };\n}\n\nfunction splitTopLevelCommas(s: string): string[] {\n const out: string[] = [];\n let buf = \"\";\n let depth = 0;\n let inQuote = false;\n for (const ch of s) {\n if (ch === '\"') inQuote = !inQuote;\n else if (!inQuote && (ch === \"{\" || ch === \"[\" || ch === \"(\")) depth++;\n else if (!inQuote && (ch === \"}\" || ch === \"]\" || ch === \")\")) depth--;\n if (ch === \",\" && depth === 0 && !inQuote) {\n out.push(buf);\n buf = \"\";\n } else {\n buf += ch;\n }\n }\n if (buf.length > 0) out.push(buf);\n return out;\n}\n\nconst EULER_KEYWORDS: Record<string, VennEulerRelationType> = {\n subset: \"subset\",\n disjoint: \"disjoint\",\n overlap: \"overlap\",\n};\n\nfunction parseRegionKey(\n text: string,\n knownSets: Set<string>\n): { sets: string[]; only: boolean } {\n const trimmed = text.trim();\n // \"A only\"\n const onlyMatch = /^([A-Za-z][\\w-]*)\\s+only$/i.exec(trimmed);\n if (onlyMatch && onlyMatch[1]) {\n const id = onlyMatch[1];\n if (!knownSets.has(id)) {\n throw new VennParseError(`unknown set id \"${id}\" in region key`);\n }\n return { sets: [id], only: true };\n }\n // \"A & B & C\"\n const parts = trimmed.split(\"&\").map((p) => p.trim()).filter(Boolean);\n if (parts.length === 0) {\n throw new VennParseError(`empty region key: \"${text}\"`);\n }\n for (const p of parts) {\n if (!/^[A-Za-z][\\w-]*$/.test(p)) {\n throw new VennParseError(`invalid set ref \"${p}\" in region key`);\n }\n if (!knownSets.has(p)) {\n throw new VennParseError(`unknown set id \"${p}\" in region key`);\n }\n }\n // Canonicalise by keeping declaration order (caller normalises later).\n return { sets: [...parts], only: false };\n}\n\nexport function parseVennDSL(input: string): VennAST {\n const lines = input.split(/\\r?\\n/);\n let title: string | undefined;\n let headerSeen = false;\n const config: VennConfig = { ...DEFAULT_CONFIG };\n const sets: VennSet[] = [];\n const setsById = new Map<string, VennSet>();\n const regions: VennRegion[] = [];\n const relations: VennEulerRelation[] = [];\n const metadata: Record<string, string> = {};\n\n const knownSetIds = new Set<string>();\n\n const applyConfigProps = (props: Record<string, string>): void => {\n for (const [k, v] of Object.entries(props)) {\n applyConfig(k, v, config, metadata);\n }\n };\n\n for (let i = 0; i < lines.length; i++) {\n const raw = stripComment(lines[i] ?? \"\").trim();\n if (!raw) continue;\n const lineNo = i + 1;\n\n // Header: `venn \"Title\"` or `venn: \"Title\"` (optionally with [props])\n if (!headerSeen && /^venn\\b/i.test(raw)) {\n const rest = raw.replace(/^venn\\s*:?\\s*/i, \"\");\n const { title: t, props } = parseTitleAndProps(rest);\n if (t !== undefined) title = t;\n applyConfigProps(props);\n headerSeen = true;\n continue;\n }\n\n // config: key = value\n const configMatch = /^config\\s*:\\s*([a-zA-Z_]+)\\s*=\\s*(.+)$/.exec(raw);\n if (configMatch && configMatch[1] && configMatch[2]) {\n applyConfig(configMatch[1], configMatch[2].trim(), config, metadata);\n continue;\n }\n\n // layout <venn|euler|auto>\n const layoutMatch = /^layout\\s+(venn|euler|auto)\\s*$/i.exec(raw);\n if (layoutMatch && layoutMatch[1]) {\n config.mode = layoutMatch[1].toLowerCase() as VennConfig[\"mode\"];\n continue;\n }\n\n // set <id> \"label\" [props?]\n const setMatch = /^set\\s+([A-Za-z][\\w-]*)\\s+(.+)$/i.exec(raw);\n if (setMatch && setMatch[1] && setMatch[2]) {\n const id = setMatch[1];\n const rest = setMatch[2];\n const { title: label, props } = parseTitleAndProps(rest);\n if (setsById.has(id)) {\n throw new VennParseError(`duplicate set id \"${id}\"`, lineNo);\n }\n const color = props[\"color\"] ?? props[\"fill\"];\n const setObj: VennSet = { id, label: label ?? id, color };\n sets.push(setObj);\n setsById.set(id, setObj);\n knownSetIds.add(id);\n continue;\n }\n\n // Enumeration: ID = { ... }\n const enumMatch = /^([A-Za-z][\\w-]*)\\s*=\\s*\\{([^}]*)\\}\\s*$/.exec(raw);\n if (enumMatch && enumMatch[1] !== undefined && enumMatch[2] !== undefined) {\n const id = enumMatch[1];\n const items = splitTopLevelCommas(enumMatch[2])\n .map((x) => stripQuotes(x.trim()))\n .filter((x) => x.length > 0);\n let setObj = setsById.get(id);\n if (!setObj) {\n setObj = { id, label: id, elements: items };\n sets.push(setObj);\n setsById.set(id, setObj);\n knownSetIds.add(id);\n } else {\n setObj.elements = items;\n }\n continue;\n }\n\n // Euler relation: ID subset ID | ID in ID | ID disjoint ID | ID overlap ID\n const eulerMatch = /^([A-Za-z][\\w-]*)\\s+(subset|in|disjoint|overlap)\\s+([A-Za-z][\\w-]*)\\s*$/i.exec(\n raw\n );\n if (eulerMatch && eulerMatch[1] && eulerMatch[2] && eulerMatch[3]) {\n const from = eulerMatch[1];\n const relRaw = eulerMatch[2].toLowerCase();\n const rel = relRaw === \"in\" ? \"subset\" : relRaw;\n const to = eulerMatch[3];\n if (!knownSetIds.has(from)) {\n throw new VennParseError(`unknown set \"${from}\" in relation`, lineNo);\n }\n if (!knownSetIds.has(to)) {\n throw new VennParseError(`unknown set \"${to}\" in relation`, lineNo);\n }\n const relType = EULER_KEYWORDS[rel];\n if (!relType) {\n throw new VennParseError(`unknown relation \"${rel}\"`, lineNo);\n }\n relations.push({ from, to, type: relType });\n continue;\n }\n\n // Region syntax: [region ]<key> : <value> [props?]\n let regionBody = raw;\n if (/^region\\s+/i.test(regionBody)) {\n regionBody = regionBody.replace(/^region\\s+/i, \"\");\n }\n const colonIdx = regionBody.indexOf(\":\");\n if (colonIdx > 0) {\n const keyPart = regionBody.slice(0, colonIdx);\n const valuePart = regionBody.slice(colonIdx + 1).trim();\n try {\n const { sets: regionSets, only } = parseRegionKey(keyPart, knownSetIds);\n const value = parseValue(valuePart);\n regions.push({ sets: regionSets, only, value });\n continue;\n } catch (e) {\n if (e instanceof VennParseError) {\n throw new VennParseError(e.message, lineNo);\n }\n throw e;\n }\n }\n\n throw new VennParseError(`could not parse line: \"${raw}\"`, lineNo);\n }\n\n if (!headerSeen && sets.length === 0) {\n throw new VennParseError(\"empty or missing 'venn' header\");\n }\n\n // Auto-derive regions for enumeration sets when no explicit regions were given.\n const hasEnumeration = sets.some((s) => s.elements !== undefined);\n if (hasEnumeration && regions.length === 0) {\n regions.push(...deriveRegionsFromEnumeration(sets));\n }\n\n const ast: VennAST = {\n type: \"venn\",\n ...(title !== undefined ? { title } : {}),\n sets,\n regions,\n relations,\n config,\n ...(Object.keys(metadata).length > 0 ? { metadata } : {}),\n };\n return ast;\n}\n\nfunction applyConfig(\n key: string,\n rawValue: string,\n config: VennConfig,\n metadata: Record<string, string>\n): void {\n const value = rawValue.trim().toLowerCase();\n switch (key) {\n case \"diagram\":\n if (value === \"venn\" || value === \"euler\" || value === \"auto\") {\n config.mode = value;\n }\n return;\n case \"proportional\":\n config.proportional = value === \"true\" || value === \"yes\" || value === \"1\";\n return;\n case \"palette\":\n if (value === \"default\" || value === \"brand\" || value === \"monochrome\") {\n config.palette = value;\n }\n return;\n case \"blendMode\":\n case \"blendmode\":\n if (value === \"multiply\" || value === \"screen\" || value === \"none\") {\n config.blendMode = value;\n }\n return;\n case \"showCounts\":\n case \"showcounts\":\n config.showCounts =\n value === \"true\" ? true : value === \"false\" ? false : \"auto\";\n return;\n case \"showPercent\":\n case \"showpercent\":\n config.showPercent = value === \"true\" || value === \"yes\";\n return;\n default:\n metadata[key] = rawValue.trim();\n }\n}\n\n/**\n * Build the full set of non-empty regions from enumeration-style sets by\n * computing every possible intersection of actual elements.\n */\nfunction deriveRegionsFromEnumeration(sets: VennSet[]): VennRegion[] {\n const n = sets.length;\n if (n === 0) return [];\n const regions: VennRegion[] = [];\n const total = 1 << n;\n for (let mask = 1; mask < total; mask++) {\n const included: number[] = [];\n const excluded: number[] = [];\n for (let i = 0; i < n; i++) {\n if ((mask >> i) & 1) included.push(i);\n else excluded.push(i);\n }\n const firstIdx = included[0];\n if (firstIdx === undefined) continue;\n const firstSetObj = sets[firstIdx];\n if (!firstSetObj) continue;\n const firstSet = firstSetObj.elements ?? [];\n const members = firstSet.filter((el) => {\n for (const idx of included) {\n const s = sets[idx];\n const list = s?.elements ?? [];\n if (!list.includes(el)) return false;\n }\n for (const idx of excluded) {\n const s = sets[idx];\n const list = s?.elements ?? [];\n if (list.includes(el)) return false;\n }\n return true;\n });\n if (members.length === 0) continue;\n const setIds: string[] = [];\n for (const idx of included) {\n const s = sets[idx];\n if (s) setIds.push(s.id);\n }\n regions.push({\n sets: setIds,\n only: excluded.length > 0 && included.length < n,\n value: { kind: \"list\", value: members },\n });\n }\n return regions;\n}\n","/**\n * Pure geometry helpers for Venn / Euler diagrams.\n *\n * Zero dependencies; analytic formulas where possible plus Monte Carlo\n * integration used as a fallback for 3-circle region areas.\n *\n * All functions here are side-effect-free and tested in geometry.test.ts.\n */\n\nimport type { VennCircle, VennEllipse } from \"../../core/types\";\n\n// ─── Two-circle helpers ──────────────────────────────────────\n\n/**\n * Lens area (intersection) of two circles separated by distance d.\n * Returns:\n * - 0 if circles are disjoint (d >= rA + rB)\n * - π·min(rA,rB)² if one circle contains the other (d <= |rA-rB|)\n * - otherwise the analytic two-circle lens area.\n */\nexport function twoCircleIntersectionArea(rA: number, rB: number, d: number): number {\n if (rA <= 0 || rB <= 0) return 0;\n if (d >= rA + rB) return 0;\n const rMin = Math.min(rA, rB);\n if (d <= Math.abs(rA - rB)) return Math.PI * rMin * rMin;\n\n const aTerm = (d * d + rA * rA - rB * rB) / (2 * d * rA);\n const bTerm = (d * d + rB * rB - rA * rA) / (2 * d * rB);\n // Clamp to avoid NaN from float slop.\n const a = Math.max(-1, Math.min(1, aTerm));\n const b = Math.max(-1, Math.min(1, bTerm));\n\n const kSq =\n (-d + rA + rB) * (d + rA - rB) * (d - rA + rB) * (d + rA + rB);\n const k = kSq > 0 ? Math.sqrt(kSq) : 0;\n\n return rA * rA * Math.acos(a) + rB * rB * Math.acos(b) - 0.5 * k;\n}\n\n/**\n * Newton-Raphson invert: find the distance d such that\n * `twoCircleIntersectionArea(rA, rB, d) == target`.\n * Returns a d in [|rA-rB|, rA+rB]. If target >= min-disc area, returns |rA-rB|.\n * If target <= 0, returns rA+rB.\n */\nexport function solveTwoCircleDistance(\n rA: number,\n rB: number,\n target: number\n): number {\n const rMin = Math.min(rA, rB);\n const maxArea = Math.PI * rMin * rMin;\n if (target >= maxArea) return Math.abs(rA - rB);\n if (target <= 0) return rA + rB;\n\n let lo = Math.abs(rA - rB);\n let hi = rA + rB;\n // Bisection — robust, ~40 iterations gets 1e-12 precision.\n for (let i = 0; i < 60; i++) {\n const mid = 0.5 * (lo + hi);\n const a = twoCircleIntersectionArea(rA, rB, mid);\n // area is monotone decreasing in d\n if (a > target) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return 0.5 * (lo + hi);\n}\n\n// ─── Three-circle classic coordinates ───────────────────────\n\n/**\n * Three circle canonical layout — circles of radius r, centers on an equilateral\n * triangle whose edge length equals the center offset `o`. With o = r·0.6 the\n * central triple region is ~r·0.15 wide (VennDiagram R convention).\n */\nexport function threeCircleClassic(\n cx: number,\n cy: number,\n r: number,\n offsetScale: number = 0.6\n): [VennCircle, VennCircle, VennCircle] {\n const o = r * offsetScale;\n const cos30 = Math.cos(Math.PI / 6);\n const sin30 = Math.sin(Math.PI / 6);\n return [\n { id: \"0\", cx: cx - o * cos30, cy: cy + o * sin30, r },\n { id: \"1\", cx: cx + o * cos30, cy: cy + o * sin30, r },\n { id: \"2\", cx, cy: cy - o, r },\n ];\n}\n\n// ─── Four-ellipse standard arrangement ──────────────────────\n\n/**\n * Classic Venn 4-ellipse arrangement following Ruskey & Weston 2005.\n * Returns 4 congruent ellipses arranged symmetrically so all 15 non-empty\n * intersection regions exist.\n *\n * Layout uses rotation angles at -65°, -35°, 35°, 65° from the horizontal,\n * with a modest vertical bias to spread overlaps readably.\n */\nexport function fourEllipseStandard(\n cx: number,\n cy: number,\n a: number,\n b: number\n): [VennEllipse, VennEllipse, VennEllipse, VennEllipse] {\n // Based on Venn's original 1881 construction; coords ported from venn.js Venn4.\n // Offsets are a fraction of the semi-major axis. These constants produce all\n // 15 regions for the standard a:b ≈ 2:1 aspect.\n const dx = 0.18 * a;\n const dy = 0.1 * b;\n\n return [\n { id: \"0\", cx: cx - dx, cy: cy - dy, rx: a, ry: b, rotation: -65 },\n { id: \"1\", cx: cx - 0.6 * dx, cy: cy - dy, rx: a, ry: b, rotation: -35 },\n { id: \"2\", cx: cx + 0.6 * dx, cy: cy - dy, rx: a, ry: b, rotation: 35 },\n { id: \"3\", cx: cx + dx, cy: cy - dy, rx: a, ry: b, rotation: 65 },\n ];\n}\n\n// ─── Point-in-shape tests ────────────────────────────────────\n\nexport function pointInCircle(c: VennCircle, x: number, y: number): boolean {\n const dx = x - c.cx;\n const dy = y - c.cy;\n return dx * dx + dy * dy <= c.r * c.r;\n}\n\nexport function pointInEllipse(e: VennEllipse, x: number, y: number): boolean {\n const dx = x - e.cx;\n const dy = y - e.cy;\n const rad = (e.rotation * Math.PI) / 180;\n const cos = Math.cos(-rad);\n const sin = Math.sin(-rad);\n // Rotate (dx, dy) back into the unrotated frame.\n const rx = dx * cos - dy * sin;\n const ry = dx * sin + dy * cos;\n return (rx * rx) / (e.rx * e.rx) + (ry * ry) / (e.ry * e.ry) <= 1;\n}\n\nexport interface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n/** Axis-aligned bounding box of a circle. */\nexport function circleBBox(c: VennCircle): Box {\n return { x: c.cx - c.r, y: c.cy - c.r, w: 2 * c.r, h: 2 * c.r };\n}\n\n/** Axis-aligned bounding box of an (optionally rotated) ellipse. */\nexport function ellipseBBox(e: VennEllipse): Box {\n const rad = (e.rotation * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const ux = e.rx * cos;\n const uy = e.rx * sin;\n const vx = e.ry * -sin;\n const vy = e.ry * cos;\n const hx = Math.sqrt(ux * ux + vx * vx);\n const hy = Math.sqrt(uy * uy + vy * vy);\n return { x: e.cx - hx, y: e.cy - hy, w: 2 * hx, h: 2 * hy };\n}\n\nexport function unionBBox(boxes: Box[]): Box {\n if (boxes.length === 0) return { x: 0, y: 0, w: 0, h: 0 };\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const b of boxes) {\n if (b.x < minX) minX = b.x;\n if (b.y < minY) minY = b.y;\n if (b.x + b.w > maxX) maxX = b.x + b.w;\n if (b.y + b.h > maxY) maxY = b.y + b.h;\n }\n return { x: minX, y: minY, w: maxX - minX, h: maxY - minY };\n}\n\n// ─── Deterministic sampling-based region centroid / area ─────\n\n/**\n * Rough pseudorandom generator seeded for deterministic tests. Mulberry32.\n */\nexport function mulberry32(seed: number): () => number {\n let a = seed >>> 0;\n return function (): number {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport interface CentroidResult {\n /** Centroid x. NaN when area = 0. */\n cx: number;\n /** Centroid y. NaN when area = 0. */\n cy: number;\n /** Approximate area (square pixels). */\n area: number;\n /** Samples that landed inside the region (for leader fallback). */\n interior: Array<{ x: number; y: number }>;\n}\n\n/**\n * Monte Carlo centroid + area over a region defined by \"must be inside these\n * shapes AND not inside those shapes\". Uniform sampling inside `bounds`.\n *\n * @param bounds Axis-aligned sampling rectangle (must cover the region).\n * @param include Shapes the sample must be inside.\n * @param exclude Shapes the sample must be outside.\n * @param nSamples Sample count (default 2000 is plenty for label placement).\n */\nexport function regionCentroid(\n bounds: Box,\n include: Array<{ inside: (x: number, y: number) => boolean }>,\n exclude: Array<{ inside: (x: number, y: number) => boolean }>,\n nSamples: number = 2000,\n seed: number = 0xc0ffee\n): CentroidResult {\n const rand = mulberry32(seed);\n let hits = 0;\n let sumX = 0;\n let sumY = 0;\n const interior: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < nSamples; i++) {\n const x = bounds.x + rand() * bounds.w;\n const y = bounds.y + rand() * bounds.h;\n let ok = true;\n for (const s of include) {\n if (!s.inside(x, y)) {\n ok = false;\n break;\n }\n }\n if (!ok) continue;\n for (const s of exclude) {\n if (s.inside(x, y)) {\n ok = false;\n break;\n }\n }\n if (!ok) continue;\n hits++;\n sumX += x;\n sumY += y;\n if (interior.length < 256) interior.push({ x, y });\n }\n const area = (hits / nSamples) * bounds.w * bounds.h;\n if (hits === 0) return { cx: NaN, cy: NaN, area: 0, interior };\n return { cx: sumX / hits, cy: sumY / hits, area, interior };\n}\n","/**\n * Label placement for Venn / Euler diagrams.\n *\n * Pipeline per region:\n * 1. Compute axis-aligned union bbox of included shapes.\n * 2. Monte-Carlo sample to estimate centroid + area of the region\n * (region = (∀ inShape in included) AND (∀ notIn in excluded)).\n * 3. If area < MIN_AREA → externalise the label with a leader line\n * that starts at the centroid and ends just outside the union bbox.\n */\n\nimport type {\n VennAST,\n VennCircle,\n VennEllipse,\n VennLabelPosition,\n VennRegion,\n VennShape,\n} from \"../../core/types\";\nimport {\n circleBBox,\n ellipseBBox,\n pointInCircle,\n pointInEllipse,\n regionCentroid,\n unionBBox,\n type Box,\n} from \"./geometry\";\nimport { formatRegionValue } from \"./layout\";\n\n/** Minimum interior area (sq px) for an inside label. */\nconst MIN_AREA = 400;\n/** For n ≥ 4 we require a more generous interior area to suppress mid-canvas stacking. */\nconst MIN_AREA_DENSE = 900;\n/** Approximate label bbox padding for collision tests. */\nconst LABEL_H = 14;\nconst CHAR_W = 6.2;\n/** Minimum gap (px) between any two interior label bboxes. */\nconst LABEL_GAP = 4;\n\nfunction labelWidth(text: string): number {\n return text.length * CHAR_W + 8;\n}\n\nfunction bboxesOverlap(\n ax: number,\n ay: number,\n aw: number,\n ah: number,\n bx: number,\n by: number,\n bw: number,\n bh: number\n): boolean {\n return (\n ax < bx + bw + LABEL_GAP &&\n ax + aw + LABEL_GAP > bx &&\n ay < by + bh + LABEL_GAP &&\n ay + ah + LABEL_GAP > by\n );\n}\n\ninterface ShapeEntry {\n id: string;\n shape: VennShape;\n bbox: Box;\n inside: (x: number, y: number) => boolean;\n}\n\nfunction makeShapeEntry(shape: VennShape): ShapeEntry {\n if (shape.kind === \"circle\") {\n const c: VennCircle = shape;\n return {\n id: shape.id,\n shape,\n bbox: circleBBox(c),\n inside: (x, y) => pointInCircle(c, x, y),\n };\n }\n const e: VennEllipse = shape;\n return {\n id: shape.id,\n shape,\n bbox: ellipseBBox(e),\n inside: (x, y) => pointInEllipse(e, x, y),\n };\n}\n\ninterface Candidate {\n region: VennRegion;\n text: string;\n cx: number;\n cy: number;\n area: number;\n interior: readonly { x: number; y: number }[];\n width: number;\n}\n\nexport function placeLabels(ast: VennAST, shapes: VennShape[]): VennLabelPosition[] {\n const entries = shapes.map(makeShapeEntry);\n const byId = new Map<string, ShapeEntry>();\n for (const e of entries) byId.set(e.id, e);\n\n const canvasBounds = unionBBox(entries.map((e) => e.bbox));\n const canvasCx = canvasBounds.x + canvasBounds.w / 2;\n const canvasCy = canvasBounds.y + canvasBounds.h / 2;\n // Dense: n ≥ 4 sets → central regions get too crowded; raise internal gate.\n const dense = shapes.length >= 4;\n const minArea = dense ? MIN_AREA_DENSE : MIN_AREA;\n\n // ── Pass 1: compute centroid + area for every region ──────────\n const candidates: Candidate[] = [];\n ast.regions.forEach((region, regionIdx) => {\n const included = region.sets.map((id) => byId.get(id)).filter(isDefined);\n if (included.length === 0) return;\n const excluded = region.only\n ? entries.filter((e) => !region.sets.includes(e.id))\n : [];\n const bounds = unionBBox(included.map((e) => e.bbox));\n const seed = 0x1337 + regionIdx * 0x9e3779b9;\n const { cx, cy, area, interior } = regionCentroid(\n bounds,\n included,\n excluded,\n 1500,\n seed\n );\n const text = regionLabelText(region);\n if (!text) return;\n if (!Number.isFinite(cx) || !Number.isFinite(cy) || area === 0) return;\n candidates.push({\n region,\n text,\n cx,\n cy,\n area,\n interior,\n width: labelWidth(text),\n });\n });\n\n // ── Pass 2: decide internal vs external (area + collision) ────\n // Sort by area desc so bigger regions claim interior slots first.\n const byAreaDesc = [...candidates].sort((a, b) => b.area - a.area);\n const placedInternal: { c: Candidate; x: number; y: number }[] = [];\n const externalQueue: Candidate[] = [];\n\n for (const c of byAreaDesc) {\n if (c.area < minArea) {\n externalQueue.push(c);\n continue;\n }\n // Check collision against already-placed internal labels.\n const x = c.cx - c.width / 2;\n const y = c.cy - LABEL_H / 2;\n const collides = placedInternal.some(({ c: p, x: px, y: py }) =>\n bboxesOverlap(x, y, c.width, LABEL_H, px, py, p.width, LABEL_H)\n );\n if (collides) {\n externalQueue.push(c);\n } else {\n placedInternal.push({ c, x, y });\n }\n }\n\n // ── Pass 3: distribute external labels around canvas by angle ─\n // Each external keeps leader line from its interior sample point.\n const externalPlacements = layoutExternal(\n externalQueue,\n canvasCx,\n canvasCy,\n canvasBounds\n );\n\n // ── Assemble final list, preserving original region order ─────\n const placedMap = new Map<VennRegion, VennLabelPosition>();\n for (const { c } of placedInternal) {\n placedMap.set(c.region, {\n sets: c.region.sets,\n label: c.text,\n x: c.cx,\n y: c.cy,\n external: false,\n });\n }\n for (const p of externalPlacements) {\n placedMap.set(p.region, p.label);\n }\n\n const out: VennLabelPosition[] = [];\n for (const region of ast.regions) {\n const p = placedMap.get(region);\n if (p) out.push(p);\n }\n return out;\n}\n\ninterface ExternalPlacement {\n region: VennRegion;\n label: VennLabelPosition;\n}\n\n/**\n * Distribute external labels evenly around the canvas by centroid angle,\n * preventing the \"all leaders point to the same cluster\" problem on n=4.\n */\nfunction layoutExternal(\n queue: Candidate[],\n cx: number,\n cy: number,\n canvas: Box\n): ExternalPlacement[] {\n if (queue.length === 0) return [];\n\n // Sort by angle around canvas center.\n const withAngle = queue.map((c) => {\n const dx = c.cx - cx;\n const dy = c.cy - cy;\n let theta = Math.atan2(dy, dx);\n if (!Number.isFinite(theta)) theta = 0;\n return { c, theta };\n });\n withAngle.sort((a, b) => a.theta - b.theta);\n\n // Target radius: distance from center to a point just outside canvas bbox.\n const radiusX = canvas.w / 2 + 40;\n const radiusY = canvas.h / 2 + 28;\n\n // Enforce a minimum angular spacing so adjacent externals don't overlap.\n const minGap = Math.min((2 * Math.PI) / Math.max(6, withAngle.length), 0.45);\n const adjusted = redistributeAngles(\n withAngle.map((w) => w.theta),\n minGap\n );\n\n const out: ExternalPlacement[] = [];\n for (let i = 0; i < withAngle.length; i++) {\n const { c } = withAngle[i]!;\n const theta = adjusted[i]!;\n const ux = Math.cos(theta);\n const uy = Math.sin(theta);\n const ex = cx + ux * radiusX;\n const ey = cy + uy * radiusY;\n const anchor: \"start\" | \"end\" | \"middle\" =\n ux > 0.25 ? \"start\" : ux < -0.25 ? \"end\" : \"middle\";\n const picked = c.interior[Math.floor(c.interior.length / 2)];\n const start = picked ?? { x: c.cx, y: c.cy };\n out.push({\n region: c.region,\n label: {\n sets: c.region.sets,\n label: c.text,\n x: ex,\n y: ey,\n external: true,\n leader: { x1: start.x, y1: start.y, x2: ex, y2: ey },\n anchor,\n },\n });\n }\n return out;\n}\n\n/**\n * Adjust angle sequence (already sorted) so adjacent values differ by at least\n * `minGap`. Uses a simple forward-sweep then backward clamp — good enough for\n * Venn label fan-out.\n */\nfunction redistributeAngles(thetas: number[], minGap: number): number[] {\n const out = thetas.slice();\n for (let i = 1; i < out.length; i++) {\n const need = out[i - 1]! + minGap;\n if (out[i]! < need) out[i] = need;\n }\n // Wrap-around: if last exceeds first + 2π − minGap, push everything back.\n const wrapLimit = out[0]! + Math.PI * 2 - minGap;\n if (out.length > 1 && out[out.length - 1]! > wrapLimit) {\n const shift = out[out.length - 1]! - wrapLimit;\n for (let i = 0; i < out.length; i++) out[i] = out[i]! - shift;\n }\n return out;\n}\n\nfunction regionLabelText(region: VennRegion): string {\n return formatRegionValue(region);\n}\n\nfunction isDefined<T>(x: T | undefined): x is T {\n return x !== undefined;\n}\n","/**\n * Venn / Euler layout dispatcher.\n *\n * Picks a layout based on `ast.sets.length`, `config.mode` and\n * `config.proportional`:\n *\n * - n=2 fixed or analytic proportional\n * - n=3 fixed or gradient-descent proportional\n * - n=4 fixed (4 ellipses); proportional deferred\n * - Euler (subset / disjoint / partial overlap) — derived from relations or\n * inferred by auto-detecting which regions actually have values.\n */\n\nimport type {\n VennAST,\n VennCircle,\n VennEllipse,\n VennLayoutResult,\n VennLabelPosition,\n VennRegion,\n VennShape,\n VennEulerRelation,\n} from \"../../core/types\";\nimport {\n circleBBox,\n ellipseBBox,\n fourEllipseStandard,\n pointInCircle,\n pointInEllipse,\n regionCentroid,\n solveTwoCircleDistance,\n threeCircleClassic,\n twoCircleIntersectionArea,\n unionBBox,\n} from \"./geometry\";\nimport { placeLabels } from \"./labels\";\n\nexport interface LayoutOptions {\n /** Canvas width override. */\n width?: number;\n /** Canvas height override. */\n height?: number;\n /** Padding around the diagram (px). */\n padding?: number;\n}\n\nconst DEFAULTS = {\n padding: 24,\n canvasN2: { w: 480, h: 320, r: 110, d: 120 },\n canvasN3: { w: 520, h: 480, r: 130, offset: 0.6 },\n canvasN4: { w: 640, h: 480, a: 216, b: 120 },\n canvasEuler: { w: 520, h: 420 },\n};\n\nexport function layoutVenn(ast: VennAST, opts: LayoutOptions = {}): VennLayoutResult {\n const mode = decideMode(ast);\n if (mode === \"euler\") {\n return layoutEuler(ast, opts);\n }\n const n = ast.sets.length;\n if (n === 1) return layoutSingle(ast, opts);\n if (n === 2) return layoutTwo(ast, opts);\n if (n === 3) return layoutThree(ast, opts);\n if (n === 4) return layoutFour(ast, opts);\n // Fallback for 5+ — collapse to Euler disjoint row (UpSet deferred).\n return layoutEuler(ast, opts);\n}\n\nfunction decideMode(ast: VennAST): \"venn\" | \"euler\" {\n if (ast.config.mode === \"venn\") return \"venn\";\n if (ast.config.mode === \"euler\") return \"euler\";\n // Auto: Euler if any explicit relations were declared.\n return ast.relations.length > 0 ? \"euler\" : \"venn\";\n}\n\n// ─── n = 1 (degenerate) ──────────────────────────────────────\n\nfunction layoutSingle(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? 320;\n const h = opts.height ?? 260;\n const set = ast.sets[0];\n if (!set) {\n return { width: w, height: h, mode: \"venn\", shapes: [], labels: [], setLabels: [] };\n }\n const circle: VennCircle = { id: set.id, cx: w / 2, cy: h / 2, r: Math.min(w, h) / 3 };\n const shapes: VennShape[] = [{ kind: \"circle\", ...circle }];\n const region = ast.regions.find((r) => r.sets.length === 1 && r.sets[0] === set.id);\n const labels: VennLabelPosition[] = region\n ? [\n {\n sets: [set.id],\n label: formatRegionValue(region),\n x: circle.cx,\n y: circle.cy,\n external: false,\n },\n ]\n : [];\n const setLabels = [\n {\n id: set.id,\n label: set.label,\n x: circle.cx,\n y: circle.cy - circle.r - 12,\n anchor: \"middle\" as const,\n },\n ];\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── n = 2 ───────────────────────────────────────────────────\n\nfunction layoutTwo(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const padding = opts.padding ?? DEFAULTS.padding;\n const setA = ast.sets[0];\n const setB = ast.sets[1];\n if (!setA || !setB) {\n throw new Error(\"layoutTwo requires two sets\");\n }\n let rA = DEFAULTS.canvasN2.r;\n let rB = DEFAULTS.canvasN2.r;\n let d = DEFAULTS.canvasN2.d;\n\n if (ast.config.proportional) {\n const sizes = computeAbsoluteSetSizes(ast);\n const sizeA = sizes.get(setA.id) ?? 1;\n const sizeB = sizes.get(setB.id) ?? 1;\n const inter = regionValue(ast, [setA.id, setB.id]) ?? 0;\n const scale = 1 / Math.sqrt(Math.max(sizeA, sizeB));\n rA = 110 * Math.sqrt(sizeA) * scale;\n rB = 110 * Math.sqrt(sizeB) * scale;\n const areaPerElem = (Math.PI * rA * rA) / Math.max(sizeA, 1e-6);\n d = solveTwoCircleDistance(rA, rB, inter * areaPerElem);\n }\n\n const totalW = rA + rB + d + 2 * padding;\n const w = Math.max(opts.width ?? DEFAULTS.canvasN2.w, totalW);\n const h = opts.height ?? DEFAULTS.canvasN2.h;\n\n const cxA = (w - d) / 2;\n const cxB = cxA + d;\n const cy = h / 2;\n\n const circles: [VennCircle, VennCircle] = [\n { id: setA.id, cx: cxA, cy, r: rA },\n { id: setB.id, cx: cxB, cy, r: rB },\n ];\n\n const shapes: VennShape[] = circles.map((c) => ({ kind: \"circle\" as const, ...c }));\n const labels = placeLabels(ast, shapes);\n const setLabels = [\n { id: setA.id, label: setA.label, x: cxA, y: cy - rA - 10, anchor: \"middle\" as const },\n { id: setB.id, label: setB.label, x: cxB, y: cy - rB - 10, anchor: \"middle\" as const },\n ];\n\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── n = 3 ───────────────────────────────────────────────────\n\nfunction layoutThree(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? DEFAULTS.canvasN3.w;\n const h = opts.height ?? DEFAULTS.canvasN3.h;\n const r = DEFAULTS.canvasN3.r;\n const offsetScale = DEFAULTS.canvasN3.offset;\n\n // Leave room for set title + diagram title.\n const cx = w / 2;\n const cy = h / 2 + 12;\n\n let circles = threeCircleClassic(cx, cy, r, offsetScale);\n\n if (ast.config.proportional) {\n const adjusted = solveProportionalThree(ast, cx, cy);\n if (adjusted) circles = adjusted;\n }\n\n const shapes: VennShape[] = circles.map((c, i) => {\n const setId = ast.sets[i]?.id ?? c.id;\n return { kind: \"circle\" as const, ...c, id: setId };\n });\n\n const labels = placeLabels(ast, shapes);\n const setLabels = ast.sets.map((s, i) => {\n const c = circles[i] ?? circles[0];\n if (!c) {\n return { id: s.id, label: s.label, x: cx, y: cy, anchor: \"middle\" as const };\n }\n // Title for top circle goes above; others below-outer.\n const isTop = i === 2;\n return {\n id: s.id,\n label: s.label,\n x: isTop ? c.cx : c.cx + (i === 0 ? -c.r : c.r) * 0.7,\n y: isTop ? c.cy - c.r - 10 : c.cy + c.r + 16,\n anchor: (isTop ? \"middle\" : i === 0 ? \"end\" : \"start\") as \"middle\" | \"start\" | \"end\",\n };\n });\n\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── n = 4 ───────────────────────────────────────────────────\n\nfunction layoutFour(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? DEFAULTS.canvasN4.w;\n const h = opts.height ?? DEFAULTS.canvasN4.h;\n const cx = w / 2;\n const cy = h / 2 + 8;\n\n const ellipses = fourEllipseStandard(cx, cy, DEFAULTS.canvasN4.a, DEFAULTS.canvasN4.b);\n const shapes: VennShape[] = ellipses.map((e, i) => ({\n kind: \"ellipse\" as const,\n ...e,\n id: ast.sets[i]?.id ?? e.id,\n }));\n\n const labels = placeLabels(ast, shapes);\n const setLabels = ast.sets.map((s, i) => {\n const e = ellipses[i];\n if (!e) {\n return { id: s.id, label: s.label, x: cx, y: cy, anchor: \"middle\" as const };\n }\n const bb = ellipseBBox(e);\n // Place set titles at the outermost end of each ellipse.\n const sign = i < 2 ? -1 : 1;\n return {\n id: s.id,\n label: s.label,\n x: bb.x + (sign < 0 ? 0 : bb.w),\n y: bb.y + (i % 2 === 0 ? 14 : bb.h - 4),\n anchor: (sign < 0 ? \"start\" : \"end\") as \"start\" | \"middle\" | \"end\",\n };\n });\n\n return {\n width: w,\n height: h,\n mode: \"venn\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\n// ─── Euler layout ────────────────────────────────────────────\n\nfunction layoutEuler(ast: VennAST, opts: LayoutOptions): VennLayoutResult {\n const w = opts.width ?? DEFAULTS.canvasEuler.w;\n const h = opts.height ?? DEFAULTS.canvasEuler.h;\n const n = ast.sets.length;\n if (n === 0) {\n return {\n width: w,\n height: h,\n mode: \"euler\",\n shapes: [],\n labels: [],\n setLabels: [],\n };\n }\n\n // Build containment tree from relations.\n const parents = new Map<string, string>(); // child -> parent (subset)\n const disjointPairs = new Set<string>();\n for (const rel of ast.relations) {\n if (rel.type === \"subset\") parents.set(rel.from, rel.to);\n if (rel.type === \"disjoint\") disjointPairs.add(edgeKey(rel.from, rel.to));\n }\n\n // Roots: sets with no parent.\n const roots = ast.sets.filter((s) => !parents.has(s.id)).map((s) => s.id);\n\n const circles = new Map<string, VennCircle>();\n const rootRadius = Math.min(w, h) * 0.32;\n // Horizontal layout of roots.\n const rootSpacing = Math.min(w / Math.max(roots.length, 1), 2 * rootRadius + 40);\n const startX = w / 2 - ((roots.length - 1) * rootSpacing) / 2;\n roots.forEach((rootId, i) => {\n circles.set(rootId, { id: rootId, cx: startX + i * rootSpacing, cy: h / 2, r: rootRadius });\n });\n\n // Recursively place children inside parents.\n const childrenOf = new Map<string, string[]>();\n for (const [child, par] of parents.entries()) {\n const arr = childrenOf.get(par) ?? [];\n arr.push(child);\n childrenOf.set(par, arr);\n }\n\n const placeChildren = (parentId: string, depth: number): void => {\n const kids = childrenOf.get(parentId) ?? [];\n if (kids.length === 0) return;\n const parent = circles.get(parentId);\n if (!parent) return;\n const childR = parent.r * (kids.length === 1 ? 0.55 : 0.4);\n kids.forEach((kid, i) => {\n // Distribute children horizontally within parent.\n const offset = (kids.length === 1 ? 0 : (i - (kids.length - 1) / 2) * childR * 1.4);\n circles.set(kid, {\n id: kid,\n cx: parent.cx + offset,\n cy: parent.cy + (depth % 2 === 0 ? 0 : -childR * 0.2),\n r: childR,\n });\n placeChildren(kid, depth + 1);\n });\n };\n for (const r of roots) placeChildren(r, 0);\n\n // Handle sets with no relation at all — append at the side.\n let sideX = 30;\n for (const s of ast.sets) {\n if (!circles.has(s.id)) {\n circles.set(s.id, { id: s.id, cx: sideX + 60, cy: h / 2, r: 50 });\n sideX += 130;\n }\n }\n\n const shapes: VennShape[] = ast.sets.map((s) => ({\n kind: \"circle\" as const,\n ...(circles.get(s.id) ?? { id: s.id, cx: w / 2, cy: h / 2, r: 40 }),\n }));\n\n const labels = placeLabels(ast, shapes);\n const setLabels = ast.sets.map((s) => {\n const c = circles.get(s.id) ?? { cx: w / 2, cy: h / 2, r: 40 };\n return {\n id: s.id,\n label: s.label,\n x: c.cx,\n y: c.cy - c.r - 6,\n anchor: \"middle\" as const,\n };\n });\n\n // Avoid unused var warning (disjointPairs informs future placement).\n void disjointPairs;\n\n return {\n width: w,\n height: h,\n mode: \"euler\",\n shapes,\n labels,\n setLabels,\n ...(ast.title ? { title: { text: ast.title, x: w / 2, y: 24 } } : {}),\n };\n}\n\nfunction edgeKey(a: string, b: string): string {\n return a < b ? `${a}|${b}` : `${b}|${a}`;\n}\n\n// ─── Proportional helpers ───────────────────────────────────\n\nfunction computeAbsoluteSetSizes(ast: VennAST): Map<string, number> {\n // |A| = Σ value over all regions containing A.\n const out = new Map<string, number>();\n for (const s of ast.sets) out.set(s.id, 0);\n for (const r of ast.regions) {\n const num = numericValue(r);\n if (num === null) continue;\n for (const sid of r.sets) {\n out.set(sid, (out.get(sid) ?? 0) + num);\n }\n }\n return out;\n}\n\nfunction numericValue(r: VennRegion): number | null {\n if (r.value.kind === \"integer\" || r.value.kind === \"percent\") return r.value.value;\n if (r.value.kind === \"list\") return r.value.value.length;\n return null;\n}\n\nfunction regionValue(ast: VennAST, sets: string[]): number | null {\n // Exact match on \"only\" regions or on intersection regions.\n const needle = [...sets].sort().join(\"|\");\n for (const r of ast.regions) {\n const key = [...r.sets].sort().join(\"|\");\n if (key === needle) {\n return numericValue(r);\n }\n }\n return null;\n}\n\n/**\n * Very small finite-difference gradient descent for n=3 proportional.\n * Returns an adjusted circle triple or null if the solver didn't converge.\n */\nfunction solveProportionalThree(\n ast: VennAST,\n cx: number,\n cy: number\n): [VennCircle, VennCircle, VennCircle] | null {\n const setA = ast.sets[0];\n const setB = ast.sets[1];\n const setC = ast.sets[2];\n if (!setA || !setB || !setC) return null;\n const sizes = computeAbsoluteSetSizes(ast);\n const s0 = sizes.get(setA.id) ?? 0;\n const s1 = sizes.get(setB.id) ?? 0;\n const s2 = sizes.get(setC.id) ?? 0;\n if (s0 <= 0 || s1 <= 0 || s2 <= 0) return null;\n\n // Target absolute areas (px²), normalised so the biggest set becomes ~π·r²\n // with r = 130.\n const maxSize = Math.max(s0, s1, s2);\n const baseR = 130;\n const baseArea = Math.PI * baseR * baseR;\n const perElem = baseArea / maxSize;\n const r0 = Math.sqrt((s0 * perElem) / Math.PI);\n const r1 = Math.sqrt((s1 * perElem) / Math.PI);\n const r2 = Math.sqrt((s2 * perElem) / Math.PI);\n\n // Initial distances from pairwise analytic intersections.\n const p01 = regionValue(ast, [setA.id, setB.id]) ?? 0;\n const p02 = regionValue(ast, [setA.id, setC.id]) ?? 0;\n const p12 = regionValue(ast, [setB.id, setC.id]) ?? 0;\n // Pairwise target area includes triple-overlap contribution; approximate only.\n const d01 = solveTwoCircleDistance(r0, r1, p01 * perElem);\n const d02 = solveTwoCircleDistance(r0, r2, p02 * perElem);\n const d12 = solveTwoCircleDistance(r1, r2, p12 * perElem);\n\n // Place centers using pairwise distances (triangulation).\n const x0 = cx - d01 / 2;\n const y0 = cy + d01 * 0.1; // slight drop\n const x1 = x0 + d01;\n const y1 = y0;\n // Circle 2 at intersection of two circles of radius d02 & d12 around (x0,y0) & (x1,y1).\n const ex = x1 - x0;\n const ey = y1 - y0;\n const dxy = Math.sqrt(ex * ex + ey * ey);\n if (dxy < 1e-6) return null;\n const a = (d02 * d02 - d12 * d12 + dxy * dxy) / (2 * dxy);\n const hSq = d02 * d02 - a * a;\n const h = hSq > 0 ? Math.sqrt(hSq) : 0;\n const px = x0 + (a * ex) / dxy;\n const py = y0 + (a * ey) / dxy;\n const x2 = px - (h * ey) / dxy;\n const y2 = py - (h * ex) / dxy;\n\n // Re-center around (cx, cy).\n const avgX = (x0 + x1 + x2) / 3;\n const avgY = (y0 + y1 + y2) / 3;\n const offX = cx - avgX;\n const offY = cy - avgY;\n return [\n { id: setA.id, cx: x0 + offX, cy: y0 + offY, r: r0 },\n { id: setB.id, cx: x1 + offX, cy: y1 + offY, r: r1 },\n { id: setC.id, cx: x2 + offX, cy: y2 + offY, r: r2 },\n ];\n}\n\n// ─── Shared helpers exposed for renderer/label module ───────\n\nexport function formatRegionValue(r: VennRegion): string {\n switch (r.value.kind) {\n case \"integer\":\n return String(r.value.value);\n case \"percent\":\n return `${r.value.value}%`;\n case \"text\":\n return r.value.value;\n case \"list\":\n return r.value.value.join(\", \");\n case \"none\":\n return \"\";\n }\n}\n\n/** Utility: ensure a VennCircle is a \"raw\" circle (strip `id`). */\nexport function pickCircle(s: VennShape): VennCircle | null {\n return s.kind === \"circle\" ? s : null;\n}\n\n/** Utility: ensure a VennEllipse (strip `id`). */\nexport function pickEllipse(s: VennShape): VennEllipse | null {\n return s.kind === \"ellipse\" ? s : null;\n}\n\n/** Re-export for tests (tests sometimes check bbox math end-to-end). */\nexport { circleBBox, ellipseBBox, pointInCircle, pointInEllipse, unionBBox, regionCentroid, twoCircleIntersectionArea };\n\n/** Export dispatcher helpers kept internal. */\nexport type { VennEulerRelation };\n","/**\n * Venn / Euler SVG renderer.\n *\n * Produces a semantic SVG:\n * - `<title>` + `<desc>` for accessibility\n * - CSS class hierarchy `.schematex-venn-*`\n * - One `<circle>` or `<ellipse>` per set, grouped under a layer that\n * can apply `mix-blend-mode: multiply` for natural overlap blending.\n * - `<text>` per region label, optional `<path>` leader for externalised\n * labels.\n */\n\nimport type { VennAST, VennLayoutResult, VennShape } from \"../../core/types\";\nimport {\n svgRoot,\n group,\n el,\n circle as circleEl,\n text as textEl,\n title as titleEl,\n desc as descEl,\n path as pathEl,\n} from \"../../core/svg\";\nimport { resolveVennTheme } from \"../../core/theme\";\nimport { parseVennDSL } from \"./parser\";\nimport { layoutVenn } from \"./layout\";\n\nfunction ellipseEl(attrs: Record<string, string | number | undefined>): string {\n return el(\"ellipse\", attrs);\n}\n\nfunction idSlug(id: string): string {\n return id.replace(/[^A-Za-z0-9_-]/g, \"_\");\n}\n\nfunction buildCss(tokens: ReturnType<typeof resolveVennTheme>): string {\n return `\n.schematex-venn { font-family: system-ui, -apple-system, \"Segoe UI\", sans-serif; }\n.schematex-venn-title { font: 600 16px sans-serif; fill: ${tokens.text}; }\n.schematex-venn-set { stroke: ${tokens.vennSetStroke}; stroke-width: 1.25; }\n.schematex-venn-blend-multiply { mix-blend-mode: multiply; }\n.schematex-venn-blend-screen { mix-blend-mode: screen; }\n.schematex-venn-setlabel { font: 600 13px sans-serif; fill: ${tokens.text}; }\n.schematex-venn-label { font: 500 12px sans-serif; fill: ${tokens.vennLabelColor}; dominant-baseline: central; text-anchor: middle; }\n.schematex-venn-label-external { font: 500 11px sans-serif; fill: ${tokens.vennLabelColor}; dominant-baseline: central; }\n.schematex-venn-leader { stroke: ${tokens.vennLeaderColor}; stroke-width: 0.7; fill: none; opacity: 0.8; }\n.schematex-venn-leader-dot { fill: ${tokens.vennLeaderColor}; }\n`.trim();\n}\n\nfunction renderShape(\n shape: VennShape,\n index: number,\n color: string,\n opacity: number,\n setLabel: string\n): string {\n const classes = `schematex-venn-set schematex-venn-set-${index}`;\n const hoverTitle = titleEl(`Set ${setLabel}`);\n if (shape.kind === \"circle\") {\n return el(\n \"g\",\n { class: `schematex-venn-set-group schematex-venn-set-group-${index}` },\n [\n circleEl({\n cx: shape.cx,\n cy: shape.cy,\n r: shape.r,\n class: classes,\n fill: color,\n \"fill-opacity\": opacity,\n \"data-set-id\": idSlug(shape.id),\n }),\n hoverTitle,\n ]\n );\n }\n return el(\n \"g\",\n { class: `schematex-venn-set-group schematex-venn-set-group-${index}` },\n [\n ellipseEl({\n cx: shape.cx,\n cy: shape.cy,\n rx: shape.rx,\n ry: shape.ry,\n transform: `rotate(${shape.rotation} ${shape.cx} ${shape.cy})`,\n class: classes,\n fill: color,\n \"fill-opacity\": opacity,\n \"data-set-id\": idSlug(shape.id),\n }),\n hoverTitle,\n ]\n );\n}\n\nexport function renderVennAST(\n ast: VennAST,\n options: { theme?: string } = {}\n): string {\n const layout = layoutVenn(ast);\n return renderVennLayout(ast, layout, options);\n}\n\nexport function renderVennLayout(\n ast: VennAST,\n layout: VennLayoutResult,\n options: { theme?: string } = {}\n): string {\n const tokens = resolveVennTheme(options.theme ?? \"default\");\n const effectiveBlend =\n ast.config.blendMode === \"none\" ? \"none\" : ast.config.blendMode || tokens.vennBlendMode;\n const css = buildCss(tokens);\n\n // Shape rendering.\n const colors = tokens.vennSetColors;\n const shapeEls = layout.shapes.map((shape, i) => {\n const color = ast.sets[i]?.color ?? colors[i % colors.length] ?? \"#4E79A7\";\n return renderShape(shape, i, color, tokens.vennSetOpacity, ast.sets[i]?.label ?? shape.id);\n });\n\n const shapesGroup = group(\n {\n class: `schematex-venn-shapes ${effectiveBlend !== \"none\" ? `schematex-venn-blend-${effectiveBlend}` : \"\"}`.trim(),\n ...(effectiveBlend !== \"none\" ? { style: `mix-blend-mode: ${effectiveBlend}` } : {}),\n },\n shapeEls\n );\n\n // Set titles.\n const setLabelEls = layout.setLabels.map((s) =>\n textEl(\n {\n x: s.x,\n y: s.y,\n class: \"schematex-venn-setlabel\",\n \"text-anchor\": s.anchor,\n },\n s.label\n )\n );\n\n // Region labels and optional leader lines.\n const labelEls: string[] = [];\n const leaderEls: string[] = [];\n for (const label of layout.labels) {\n const cls = label.external\n ? \"schematex-venn-label schematex-venn-label-external\"\n : \"schematex-venn-label\";\n labelEls.push(\n textEl(\n {\n x: label.x,\n y: label.y,\n class: cls,\n \"text-anchor\": label.anchor ?? \"middle\",\n \"data-region\": label.sets.join(\"-\"),\n },\n label.label\n )\n );\n if (label.external && label.leader) {\n leaderEls.push(\n pathEl({\n d: `M ${label.leader.x1} ${label.leader.y1} L ${label.leader.x2} ${label.leader.y2}`,\n class: \"schematex-venn-leader\",\n \"aria-hidden\": \"true\",\n })\n );\n leaderEls.push(\n circleEl({\n cx: label.leader.x1,\n cy: label.leader.y1,\n r: 1.5,\n class: \"schematex-venn-leader-dot\",\n \"aria-hidden\": \"true\",\n })\n );\n }\n }\n\n // Title block.\n const titleBlock = layout.title\n ? textEl(\n {\n x: layout.title.x,\n y: layout.title.y,\n class: \"schematex-venn-title\",\n \"text-anchor\": \"middle\",\n },\n layout.title.text\n )\n : \"\";\n\n const nonEmptyRegions = ast.regions.length;\n const description =\n `Venn/Euler diagram${ast.title ? ` \"${ast.title}\"` : \"\"}: ${ast.sets.length} sets, ${nonEmptyRegions} regions.`;\n\n const body = [\n titleEl(ast.title ?? \"Venn diagram\"),\n descEl(description),\n el(\"style\", {}, css),\n titleBlock,\n shapesGroup,\n group({ class: \"schematex-venn-leaders\" }, leaderEls),\n group({ class: \"schematex-venn-setlabels\" }, setLabelEls),\n group({ class: \"schematex-venn-labels\" }, labelEls),\n ];\n\n return svgRoot(\n {\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n width: layout.width,\n height: layout.height,\n class: \"schematex-venn\",\n role: \"img\",\n },\n body\n );\n}\n\nexport function renderVenn(text: string, options: { theme?: string } = {}): string {\n const ast = parseVennDSL(text);\n return renderVennAST(ast, options);\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseVennDSL } from \"./parser\";\nimport { renderVenn } from \"./renderer\";\n\nexport const venn: DiagramPlugin = {\n type: \"venn\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"venn\");\n },\n parse: parseVennDSL,\n render(text: string, config?: RenderConfig): string {\n return renderVenn(text, { theme: config?.theme });\n },\n};\n\nexport { parseVennDSL, VennParseError } from \"./parser\";\nexport { renderVenn, renderVennAST, renderVennLayout } from \"./renderer\";\nexport { layoutVenn } from \"./layout\";\n"]}
@@ -914,7 +914,6 @@ function buildDefs(nodes, t) {
914
914
  function buildStyles(config, t) {
915
915
  const css = `
916
916
  .schematex-pedigree {${chunkD7EHZFK4_cjs.cssCustomProperties(t)}
917
- background: ${t.bg};
918
917
  }
919
918
  .schematex-pedigree-shape { fill: ${t.fill}; stroke: ${t.stroke}; stroke-width: ${chunkD7EHZFK4_cjs.STROKE_WIDTH.normal}; stroke-linejoin: round; }
920
919
  .schematex-pedigree-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize}px; text-anchor: middle; fill: ${t.text}; }
@@ -1258,5 +1257,5 @@ exports.layoutPedigree = layoutPedigree;
1258
1257
  exports.parsePedigree = parsePedigree;
1259
1258
  exports.pedigree = pedigree;
1260
1259
  exports.renderPedigree = renderPedigree;
1261
- //# sourceMappingURL=chunk-HOI6QKC6.cjs.map
1262
- //# sourceMappingURL=chunk-HOI6QKC6.cjs.map
1260
+ //# sourceMappingURL=chunk-O5POCPXZ.cjs.map
1261
+ //# sourceMappingURL=chunk-O5POCPXZ.cjs.map