schematex 0.3.0 → 0.3.2

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 (185) hide show
  1. package/dist/ai/ai-sdk.cjs +25 -25
  2. package/dist/ai/ai-sdk.d.cts +1 -1
  3. package/dist/ai/ai-sdk.d.ts +1 -1
  4. package/dist/ai/ai-sdk.js +20 -20
  5. package/dist/ai/index.cjs +28 -28
  6. package/dist/ai/index.d.cts +1 -1
  7. package/dist/ai/index.d.ts +1 -1
  8. package/dist/ai/index.js +20 -20
  9. package/dist/browser.cjs +22 -22
  10. package/dist/browser.js +20 -20
  11. package/dist/{chunk-TYCHEOQX.js → chunk-2J2QWNGI.js} +26 -20
  12. package/dist/chunk-2J2QWNGI.js.map +1 -0
  13. package/dist/{chunk-MCFQAUQV.cjs → chunk-2UJAVPA4.cjs} +58 -39
  14. package/dist/chunk-2UJAVPA4.cjs.map +1 -0
  15. package/dist/{chunk-5AEN2PLB.cjs → chunk-3YXXZ4LT.cjs} +33 -33
  16. package/dist/{chunk-5AEN2PLB.cjs.map → chunk-3YXXZ4LT.cjs.map} +1 -1
  17. package/dist/{chunk-RP5UATRA.js → chunk-56LXBM45.js} +4 -4
  18. package/dist/{chunk-RP5UATRA.js.map → chunk-56LXBM45.js.map} +1 -1
  19. package/dist/{chunk-OC22GGQN.js → chunk-6BKUD5EJ.js} +54 -4
  20. package/dist/chunk-6BKUD5EJ.js.map +1 -0
  21. package/dist/{chunk-ULYRO2KY.cjs → chunk-75BMFCP5.cjs} +44 -44
  22. package/dist/{chunk-ULYRO2KY.cjs.map → chunk-75BMFCP5.cjs.map} +1 -1
  23. package/dist/{chunk-ZNDIGQJD.js → chunk-7BEJHG43.js} +3 -3
  24. package/dist/{chunk-ZNDIGQJD.js.map → chunk-7BEJHG43.js.map} +1 -1
  25. package/dist/{chunk-WYFXOXVK.cjs → chunk-7MVDN5UC.cjs} +35 -35
  26. package/dist/{chunk-WYFXOXVK.cjs.map → chunk-7MVDN5UC.cjs.map} +1 -1
  27. package/dist/{chunk-JDTB7IKL.js → chunk-BJ65PKDU.js} +3 -3
  28. package/dist/{chunk-JDTB7IKL.js.map → chunk-BJ65PKDU.js.map} +1 -1
  29. package/dist/{chunk-FE6GAUNW.js → chunk-BJWMPPEA.js} +5 -5
  30. package/dist/{chunk-FE6GAUNW.js.map → chunk-BJWMPPEA.js.map} +1 -1
  31. package/dist/{chunk-MJGDP3CS.cjs → chunk-BUN3CRMP.cjs} +488 -109
  32. package/dist/chunk-BUN3CRMP.cjs.map +1 -0
  33. package/dist/{chunk-COLTVQWR.cjs → chunk-C3IVD7DI.cjs} +25 -25
  34. package/dist/{chunk-COLTVQWR.cjs.map → chunk-C3IVD7DI.cjs.map} +1 -1
  35. package/dist/{chunk-3YZ6FPQW.cjs → chunk-EYHD7LV3.cjs} +131 -131
  36. package/dist/{chunk-3YZ6FPQW.cjs.map → chunk-EYHD7LV3.cjs.map} +1 -1
  37. package/dist/{chunk-UGCUNADI.js → chunk-F6OROIHS.js} +35 -16
  38. package/dist/chunk-F6OROIHS.js.map +1 -0
  39. package/dist/{chunk-3FKS4KQK.cjs → chunk-GYTWJ6VB.cjs} +65 -59
  40. package/dist/chunk-GYTWJ6VB.cjs.map +1 -0
  41. package/dist/{chunk-VLMK7MQK.js → chunk-H4CJTKEH.js} +23 -4
  42. package/dist/chunk-H4CJTKEH.js.map +1 -0
  43. package/dist/{chunk-45KP67RR.js → chunk-HIQPEAL7.js} +5 -5
  44. package/dist/chunk-HIQPEAL7.js.map +1 -0
  45. package/dist/{chunk-NB56L5QK.js → chunk-IT2TVXC7.js} +4 -4
  46. package/dist/{chunk-NB56L5QK.js.map → chunk-IT2TVXC7.js.map} +1 -1
  47. package/dist/{chunk-2JDVJRR3.cjs → chunk-K5QG53GT.cjs} +28 -28
  48. package/dist/chunk-K5QG53GT.cjs.map +1 -0
  49. package/dist/{chunk-B37IKTI7.cjs → chunk-KUXOHLGC.cjs} +97 -47
  50. package/dist/chunk-KUXOHLGC.cjs.map +1 -0
  51. package/dist/{chunk-A5D2IMOX.cjs → chunk-L2KUGWFR.cjs} +47 -47
  52. package/dist/{chunk-A5D2IMOX.cjs.map → chunk-L2KUGWFR.cjs.map} +1 -1
  53. package/dist/{chunk-HDKDQAEQ.cjs → chunk-LFZZ4NCP.cjs} +14 -2
  54. package/dist/chunk-LFZZ4NCP.cjs.map +1 -0
  55. package/dist/{chunk-U6L3FAML.js → chunk-M3R6RCXY.js} +3 -3
  56. package/dist/{chunk-U6L3FAML.js.map → chunk-M3R6RCXY.js.map} +1 -1
  57. package/dist/{chunk-5YYAYW67.js → chunk-M5ZC3LFJ.js} +3 -3
  58. package/dist/{chunk-5YYAYW67.js.map → chunk-M5ZC3LFJ.js.map} +1 -1
  59. package/dist/{chunk-B6INLQBU.cjs → chunk-MKKFIPKU.cjs} +46 -46
  60. package/dist/{chunk-B6INLQBU.cjs.map → chunk-MKKFIPKU.cjs.map} +1 -1
  61. package/dist/{chunk-M5B2UUNW.js → chunk-NFT6VW73.js} +4 -4
  62. package/dist/{chunk-M5B2UUNW.js.map → chunk-NFT6VW73.js.map} +1 -1
  63. package/dist/{chunk-X7RPFTTR.cjs → chunk-OK5RYX55.cjs} +26 -26
  64. package/dist/{chunk-X7RPFTTR.cjs.map → chunk-OK5RYX55.cjs.map} +1 -1
  65. package/dist/{chunk-NNU4RGT3.js → chunk-RNGYXGHS.js} +39 -27
  66. package/dist/chunk-RNGYXGHS.js.map +1 -0
  67. package/dist/{chunk-SQKLKBBK.cjs → chunk-RODV6PC4.cjs} +25 -6
  68. package/dist/chunk-RODV6PC4.cjs.map +1 -0
  69. package/dist/{chunk-H2OEUBPO.js → chunk-SE23X5OE.js} +441 -62
  70. package/dist/chunk-SE23X5OE.js.map +1 -0
  71. package/dist/{chunk-FCGHV6ZK.js → chunk-SFSZUOFT.js} +4 -4
  72. package/dist/{chunk-FCGHV6ZK.js.map → chunk-SFSZUOFT.js.map} +1 -1
  73. package/dist/{chunk-NZH4GWE6.cjs → chunk-UK7JF5QB.cjs} +37 -37
  74. package/dist/{chunk-NZH4GWE6.cjs.map → chunk-UK7JF5QB.cjs.map} +1 -1
  75. package/dist/{chunk-QSQX77S2.cjs → chunk-W7GIQTJV.cjs} +21 -21
  76. package/dist/{chunk-QSQX77S2.cjs.map → chunk-W7GIQTJV.cjs.map} +1 -1
  77. package/dist/{chunk-KLJEK547.js → chunk-WHJXRLFD.js} +14 -3
  78. package/dist/chunk-WHJXRLFD.js.map +1 -0
  79. package/dist/{chunk-YQANC7HQ.js → chunk-X4F6VVEJ.js} +3 -3
  80. package/dist/{chunk-YQANC7HQ.js.map → chunk-X4F6VVEJ.js.map} +1 -1
  81. package/dist/{chunk-ZNOD4VZT.cjs → chunk-XI6JOG76.cjs} +46 -46
  82. package/dist/{chunk-ZNOD4VZT.cjs.map → chunk-XI6JOG76.cjs.map} +1 -1
  83. package/dist/{chunk-K2SOC3XF.cjs → chunk-XUEROLSB.cjs} +70 -19
  84. package/dist/chunk-XUEROLSB.cjs.map +1 -0
  85. package/dist/{chunk-XTATRNUN.cjs → chunk-YTEEZV6J.cjs} +442 -430
  86. package/dist/chunk-YTEEZV6J.cjs.map +1 -0
  87. package/dist/{chunk-XZNPAD6E.js → chunk-ZNLEUL7T.js} +58 -7
  88. package/dist/chunk-ZNLEUL7T.js.map +1 -0
  89. package/dist/{chunk-DNZFOCV7.js → chunk-ZTSO3S4P.js} +3 -3
  90. package/dist/{chunk-DNZFOCV7.js.map → chunk-ZTSO3S4P.js.map} +1 -1
  91. package/dist/diagrams/blockdiagram/index.cjs +6 -6
  92. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  93. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  94. package/dist/diagrams/blockdiagram/index.js +2 -2
  95. package/dist/diagrams/circuit/index.cjs +8 -8
  96. package/dist/diagrams/circuit/index.d.cts +1 -1
  97. package/dist/diagrams/circuit/index.d.ts +1 -1
  98. package/dist/diagrams/circuit/index.js +2 -2
  99. package/dist/diagrams/ecomap/index.cjs +8 -8
  100. package/dist/diagrams/ecomap/index.d.cts +1 -1
  101. package/dist/diagrams/ecomap/index.d.ts +1 -1
  102. package/dist/diagrams/ecomap/index.js +3 -3
  103. package/dist/diagrams/entity/index.cjs +6 -6
  104. package/dist/diagrams/entity/index.d.cts +1 -1
  105. package/dist/diagrams/entity/index.d.ts +1 -1
  106. package/dist/diagrams/entity/index.js +2 -2
  107. package/dist/diagrams/fishbone/index.cjs +8 -8
  108. package/dist/diagrams/fishbone/index.d.cts +1 -1
  109. package/dist/diagrams/fishbone/index.d.ts +1 -1
  110. package/dist/diagrams/fishbone/index.js +2 -2
  111. package/dist/diagrams/flowchart/index.cjs +8 -8
  112. package/dist/diagrams/flowchart/index.d.cts +2 -2
  113. package/dist/diagrams/flowchart/index.d.ts +2 -2
  114. package/dist/diagrams/flowchart/index.js +2 -2
  115. package/dist/diagrams/genogram/index.cjs +10 -10
  116. package/dist/diagrams/genogram/index.d.cts +1 -1
  117. package/dist/diagrams/genogram/index.d.ts +1 -1
  118. package/dist/diagrams/genogram/index.js +3 -3
  119. package/dist/diagrams/ladder/index.cjs +6 -6
  120. package/dist/diagrams/ladder/index.d.cts +1 -1
  121. package/dist/diagrams/ladder/index.d.ts +1 -1
  122. package/dist/diagrams/ladder/index.js +2 -2
  123. package/dist/diagrams/logic/index.cjs +6 -6
  124. package/dist/diagrams/logic/index.d.cts +1 -1
  125. package/dist/diagrams/logic/index.d.ts +1 -1
  126. package/dist/diagrams/logic/index.js +2 -2
  127. package/dist/diagrams/orgchart/index.cjs +7 -7
  128. package/dist/diagrams/orgchart/index.d.cts +1 -1
  129. package/dist/diagrams/orgchart/index.d.ts +1 -1
  130. package/dist/diagrams/orgchart/index.js +2 -2
  131. package/dist/diagrams/pedigree/index.cjs +8 -8
  132. package/dist/diagrams/pedigree/index.d.cts +1 -1
  133. package/dist/diagrams/pedigree/index.d.ts +1 -1
  134. package/dist/diagrams/pedigree/index.js +3 -3
  135. package/dist/diagrams/phylo/index.cjs +7 -7
  136. package/dist/diagrams/phylo/index.d.cts +1 -1
  137. package/dist/diagrams/phylo/index.d.ts +1 -1
  138. package/dist/diagrams/phylo/index.js +2 -2
  139. package/dist/diagrams/sld/index.cjs +6 -6
  140. package/dist/diagrams/sld/index.d.cts +1 -1
  141. package/dist/diagrams/sld/index.d.ts +1 -1
  142. package/dist/diagrams/sld/index.js +2 -2
  143. package/dist/diagrams/sociogram/index.cjs +7 -7
  144. package/dist/diagrams/sociogram/index.d.cts +1 -1
  145. package/dist/diagrams/sociogram/index.d.ts +1 -1
  146. package/dist/diagrams/sociogram/index.js +3 -3
  147. package/dist/diagrams/timing/index.cjs +5 -5
  148. package/dist/diagrams/timing/index.d.cts +1 -1
  149. package/dist/diagrams/timing/index.d.ts +1 -1
  150. package/dist/diagrams/timing/index.js +2 -2
  151. package/dist/diagrams/venn/index.cjs +9 -9
  152. package/dist/diagrams/venn/index.d.cts +1 -1
  153. package/dist/diagrams/venn/index.d.ts +1 -1
  154. package/dist/diagrams/venn/index.js +2 -2
  155. package/dist/{index-ivhNGsyU.d.cts → index-BrLxEzSQ.d.cts} +1 -1
  156. package/dist/{index-CUwp4GXI.d.ts → index-dWDwG6BW.d.ts} +1 -1
  157. package/dist/index.cjs +41 -41
  158. package/dist/index.d.cts +2 -2
  159. package/dist/index.d.ts +2 -2
  160. package/dist/index.js +19 -19
  161. package/dist/react.cjs +20 -20
  162. package/dist/react.cjs.map +1 -1
  163. package/dist/react.js +19 -19
  164. package/dist/react.js.map +1 -1
  165. package/dist/{types-Bl-Pn7Wj.d.cts → types-BtiUg7Gx.d.cts} +24 -3
  166. package/dist/{types-Bl-Pn7Wj.d.ts → types-BtiUg7Gx.d.ts} +24 -3
  167. package/package.json +1 -1
  168. package/dist/chunk-2JDVJRR3.cjs.map +0 -1
  169. package/dist/chunk-3FKS4KQK.cjs.map +0 -1
  170. package/dist/chunk-45KP67RR.js.map +0 -1
  171. package/dist/chunk-B37IKTI7.cjs.map +0 -1
  172. package/dist/chunk-H2OEUBPO.js.map +0 -1
  173. package/dist/chunk-HDKDQAEQ.cjs.map +0 -1
  174. package/dist/chunk-K2SOC3XF.cjs.map +0 -1
  175. package/dist/chunk-KLJEK547.js.map +0 -1
  176. package/dist/chunk-MCFQAUQV.cjs.map +0 -1
  177. package/dist/chunk-MJGDP3CS.cjs.map +0 -1
  178. package/dist/chunk-NNU4RGT3.js.map +0 -1
  179. package/dist/chunk-OC22GGQN.js.map +0 -1
  180. package/dist/chunk-SQKLKBBK.cjs.map +0 -1
  181. package/dist/chunk-TYCHEOQX.js.map +0 -1
  182. package/dist/chunk-UGCUNADI.js.map +0 -1
  183. package/dist/chunk-VLMK7MQK.js.map +0 -1
  184. package/dist/chunk-XTATRNUN.cjs.map +0 -1
  185. package/dist/chunk-XZNPAD6E.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/timing/parser.ts","../src/diagrams/timing/renderer.ts","../src/diagrams/timing/index.ts"],"names":["text","title"],"mappings":"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","file":"chunk-45KP67RR.js","sourcesContent":["import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\n\nexport class TimingParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"TimingParseError\";\n }\n}\n\nconst VALID_STATES = /^[01xzpPnNhHlLudD=\\.23456789]+$/;\n\nfunction splitDataList(rest: string): { wave: string; data: string[] } {\n // Wave string is first token; remaining tokens are quoted strings or a `data: [...]` form\n const trimmed = rest.trim();\n // Accept: `wave data: [\"a\",\"b\"]` or `wave \"a\" \"b\" \"c\"`\n const m = trimmed.match(/^(\\S+)\\s*(.*)$/);\n if (!m) return { wave: trimmed, data: [] };\n const wave = m[1];\n const remainder = m[2].trim();\n if (!remainder) return { wave, data: [] };\n\n const data: string[] = [];\n // Strip `data:` prefix + optional brackets\n let r = remainder.replace(/^data\\s*:\\s*/, \"\").trim();\n if (r.startsWith(\"[\") && r.endsWith(\"]\")) r = r.slice(1, -1);\n const re = /\"([^\"]*)\"/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(r)) !== null) data.push(match[1]);\n return { wave, data };\n}\n\nexport function parseTiming(text: string): TimingAST {\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n const signals: Array<TimingSignal | TimingGroup> = [];\n let title: string | undefined;\n let hscale: number | undefined;\n let currentGroup: TimingGroup | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i] ?? \"\";\n const lineNo = i + 1;\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n // Header: `timing \"title\" [hscale: 2]`\n if (/^timing\\b/i.test(line)) {\n const titleMatch = line.match(/\"([^\"]*)\"/);\n if (titleMatch) title = titleMatch[1];\n const hs = line.match(/hscale\\s*:\\s*(\\d+(?:\\.\\d+)?)/);\n if (hs) hscale = parseFloat(hs[1]);\n continue;\n }\n\n // Group start: `[GroupName]` or `group \"name\" {`\n const groupOpen = line.match(/^\\[([^\\]]+)\\]$/) || line.match(/^group\\s+\"([^\"]+)\"\\s*\\{?$/);\n if (groupOpen) {\n currentGroup = { label: groupOpen[1], signals: [] };\n signals.push(currentGroup);\n continue;\n }\n if (line === \"}\") {\n currentGroup = null;\n continue;\n }\n if (line === \"---\") {\n currentGroup = null;\n continue;\n }\n\n // Signal: `NAME: wave ...`\n const sigMatch = line.match(/^([^:]+):\\s*(.+)$/);\n if (sigMatch) {\n const name = sigMatch[1].trim();\n const { wave, data } = splitDataList(sigMatch[2]);\n if (!VALID_STATES.test(wave)) {\n throw new TimingParseError(`Invalid wave string \"${wave}\" for signal ${name}`, lineNo, undefined, line);\n }\n const signal: TimingSignal = { name, wave, data: data.length ? data : undefined };\n if (currentGroup) currentGroup.signals.push(signal);\n else signals.push(signal);\n continue;\n }\n }\n\n return { type: \"timing\", title, hscale, signals };\n}\n","import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\nimport { svgRoot, defs, group, el, text, title as titleEl, desc } from \"../../core/svg\";\n\nconst NAME_W = 120;\nconst SIG_H = 36;\nconst PAD_TOP = 12;\nconst PAD_BOT = 12;\nconst PAD_V = 6; // vertical padding inside band for rail spacing\nconst DEFAULT_PW = 40;\nconst GROUP_LABEL_H = 22;\n\ntype FlatRow =\n | { kind: \"signal\"; signal: TimingSignal; indent: number }\n | { kind: \"group\"; label: string; indent: number };\n\nfunction flatten(items: Array<TimingSignal | TimingGroup>, indent = 0): FlatRow[] {\n const out: FlatRow[] = [];\n for (const item of items) {\n if (\"wave\" in item) {\n out.push({ kind: \"signal\", signal: item, indent });\n } else {\n out.push({ kind: \"group\", label: item.label, indent });\n out.push(...flatten(item.signals, indent + 1));\n }\n }\n return out;\n}\n\ninterface WaveCtx {\n pw: number;\n yHi: number;\n yLo: number;\n yMid: number;\n h: number;\n}\n\ntype PrevState = \"hi\" | \"lo\" | \"bus\" | \"z\" | \"x\" | \"none\";\n\nfunction renderWave(signal: TimingSignal, ctx: WaveCtx): { svg: string; labels: string } {\n const { pw, yHi, yLo, yMid } = ctx;\n const wave = signal.wave;\n const paths: string[] = [];\n const busRects: string[] = [];\n const busTexts: string[] = [];\n const xPatchRects: string[] = [];\n const zLines: string[] = [];\n\n let prev: PrevState = \"none\";\n let prevChar = \"\";\n let busStartX = 0;\n let busIndex = 0;\n let dataIdx = 0;\n let linePath = \"\";\n\n const startLine = (x: number, y: number) => {\n if (linePath) paths.push(linePath);\n linePath = `M ${x},${y}`;\n };\n const extendLineTo = (x: number, y: number) => {\n linePath += ` L ${x},${y}`;\n };\n const flushLine = () => {\n if (linePath) {\n paths.push(linePath);\n linePath = \"\";\n }\n };\n\n const closeBus = (x: number) => {\n const start = busStartX;\n const end = x;\n const inset = Math.min(5, (end - start) / 2);\n // Trapezoid outline\n const d = `M ${start + inset},${yHi} L ${end - inset},${yHi} L ${end},${yMid} L ${end - inset},${yLo} L ${start + inset},${yLo} L ${start},${yMid} Z`;\n busRects.push(\n el(\"path\", { class: \"schematex-timing-bus\", d, \"data-bus-index\": String(busIndex) })\n );\n // Data label\n const label = signal.data?.[dataIdx] ?? \"\";\n if (label) {\n busTexts.push(\n text(\n {\n x: (start + end) / 2,\n y: yMid + 4,\n class: \"schematex-timing-bus-label\",\n \"text-anchor\": \"middle\",\n },\n label\n )\n );\n }\n dataIdx++;\n busIndex++;\n };\n\n for (let i = 0; i < wave.length; i++) {\n const ch = wave[i];\n const x = i * pw;\n const xNext = x + pw;\n\n // Handle continuation '.'\n const effective = ch === \".\" ? prevChar : ch;\n\n switch (effective) {\n case \"0\":\n case \"l\":\n case \"L\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yLo);\n } else if (prev === \"hi\") {\n extendLineTo(x, yLo);\n }\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"1\":\n case \"h\":\n case \"H\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yHi);\n } else if (prev === \"lo\") {\n extendLineTo(x, yHi);\n }\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"p\":\n case \"P\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n // One-period positive clock: lo→hi at x, hi until midpoint, lo at mid, lo until xNext\n startLine(x, yLo);\n extendLineTo(x, yHi);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(xNext, yLo);\n flushLine();\n prev = \"lo\";\n break;\n }\n case \"n\":\n case \"N\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(x, yLo);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(xNext, yHi);\n flushLine();\n prev = \"hi\";\n break;\n }\n case \"u\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yLo);\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"d\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"z\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n zLines.push(\n el(\"line\", {\n x1: x,\n y1: yMid,\n x2: xNext,\n y2: yMid,\n class: \"schematex-timing-hiz\",\n })\n );\n prev = \"z\";\n break;\n }\n case \"x\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n break;\n }\n case \"=\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n // Each fresh bus char (not '.') begins a new segment.\n const isContinuation = ch === \".\";\n if (!isContinuation && prev === \"bus\") closeBus(x);\n if (prev !== \"bus\" || !isContinuation) {\n flushLine();\n busStartX = x;\n }\n prev = \"bus\";\n break;\n }\n default: {\n // unknown char -> treat as x\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n }\n }\n\n prevChar = effective;\n }\n\n // Close trailing bus\n if (prev === \"bus\") closeBus(wave.length * pw);\n flushLine();\n\n const waveSvg = paths\n .map((d) => el(\"path\", { class: \"schematex-timing-wave\", d }))\n .concat(xPatchRects, zLines, busRects)\n .join(\"\");\n\n return { svg: waveSvg, labels: busTexts.join(\"\") };\n}\n\nexport function renderTiming(ast: TimingAST): string {\n const pw = DEFAULT_PW * (ast.hscale ?? 1);\n const rows = flatten(ast.signals);\n const maxWaveLen = Math.max(\n 1,\n ...rows.filter((r) => r.kind === \"signal\").map((r) => (r as any).signal.wave.length)\n );\n const waveAreaW = maxWaveLen * pw;\n const width = NAME_W + waveAreaW + 20;\n\n let y = PAD_TOP;\n const rowYs: number[] = [];\n for (const r of rows) {\n rowYs.push(y);\n y += r.kind === \"group\" ? GROUP_LABEL_H : SIG_H;\n }\n const height = y + PAD_BOT + 10;\n\n // Render rows\n const waveSvgs: string[] = [];\n const labelSvgs: string[] = [];\n const nameSvgs: string[] = [];\n const gridLines: string[] = [];\n\n // Grid: vertical period ticks across signal area\n for (let i = 0; i <= maxWaveLen; i++) {\n const xg = NAME_W + i * pw;\n gridLines.push(\n el(\"line\", {\n x1: xg,\n y1: PAD_TOP,\n x2: xg,\n y2: height - PAD_BOT,\n class: \"schematex-timing-grid\",\n })\n );\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const ry = rowYs[i];\n\n if (row.kind === \"group\") {\n nameSvgs.push(\n text(\n {\n x: 6 + row.indent * 10,\n y: ry + GROUP_LABEL_H - 6,\n class: \"schematex-timing-group-label\",\n },\n row.label\n )\n );\n continue;\n }\n\n const signal = row.signal;\n const yHi = ry + PAD_V;\n const yLo = ry + SIG_H - PAD_V;\n const yMid = ry + SIG_H / 2;\n\n // Signal name (right-aligned in name column). `~NAME` or `/NAME` → overlined active-low.\n const activeLow = signal.name.startsWith(\"~\") || signal.name.startsWith(\"/\");\n const displayName = activeLow ? signal.name.slice(1) : signal.name;\n nameSvgs.push(\n text(\n {\n x: NAME_W - 8,\n y: yMid + 4,\n class: activeLow\n ? \"schematex-timing-name schematex-timing-name-activelow\"\n : \"schematex-timing-name\",\n \"text-anchor\": \"end\",\n },\n displayName\n )\n );\n\n const { svg, labels } = renderWave(signal, {\n pw,\n yHi,\n yLo,\n yMid,\n h: SIG_H - 2 * PAD_V,\n });\n\n waveSvgs.push(\n group(\n {\n transform: `translate(${NAME_W}, 0)`,\n \"data-signal\": signal.name,\n },\n [svg]\n )\n );\n labelSvgs.push(\n group({ transform: `translate(${NAME_W}, 0)` }, [labels])\n );\n }\n\n const xhatch = el(\n \"pattern\",\n {\n id: \"schematex-timing-xhatch\",\n patternUnits: \"userSpaceOnUse\",\n width: 6,\n height: 6,\n },\n [\n el(\"rect\", { x: 0, y: 0, width: 6, height: 6, fill: \"#f5f5f5\" }),\n el(\"path\", {\n d: \"M 0,6 L 6,0 M -1,1 L 1,-1 M 5,7 L 7,5\",\n stroke: \"#999\",\n \"stroke-width\": 0.8,\n }),\n ]\n );\n\n const css = `\n.schematex-timing { background: #fff; font-family: system-ui, -apple-system, sans-serif; }\n.schematex-timing-name { font: 12px monospace; fill: #111; }\n.schematex-timing-name-activelow { text-decoration: overline; }\n.schematex-timing-group-label { font: bold 12px sans-serif; fill: #111; }\n.schematex-timing-wave { stroke: #111; stroke-width: 1.75; fill: none; stroke-linejoin: miter; stroke-linecap: square; }\n.schematex-timing-bus { fill: none; stroke: #111; stroke-width: 1.5; }\n.schematex-timing-bus-label { font: 11px monospace; fill: #111; }\n.schematex-timing-unknown { stroke: #555; stroke-width: 0.5; }\n.schematex-timing-hiz { stroke: #555; stroke-width: 1.5; stroke-dasharray: 4 3; }\n.schematex-timing-grid { stroke: #eee; stroke-width: 0.5; }\n`.trim();\n\n return svgRoot(\n {\n class: \"schematex-timing\",\n viewBox: `0 0 ${width} ${height}`,\n width,\n height,\n role: \"img\",\n \"data-diagram-type\": \"timing\",\n },\n [\n titleEl(ast.title ?? \"Timing Diagram\"),\n desc(`Digital timing diagram with ${rows.filter((r) => r.kind === \"signal\").length} signals`),\n defs([xhatch, el(\"style\", {}, css)]),\n group({ class: \"schematex-timing-grid-g\" }, gridLines),\n group({ class: \"schematex-timing-waves\" }, waveSvgs),\n group({ class: \"schematex-timing-labels\" }, labelSvgs),\n group({ class: \"schematex-timing-names\" }, nameSvgs),\n ast.title\n ? text(\n {\n x: width / 2,\n y: 14,\n \"text-anchor\": \"middle\",\n class: \"schematex-timing-title\",\n style: \"font: bold 13px sans-serif; fill: #333;\",\n },\n ast.title\n )\n : \"\",\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseTiming } from \"./parser\";\nimport { renderTiming } from \"./renderer\";\n\nexport const timing: DiagramPlugin = {\n type: \"timing\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"timing\");\n },\n parse: parseTiming,\n\n render(text: string): string {\n const ast = parseTiming(text);\n return renderTiming(ast);\n },\n};\n\nexport { parseTiming } from \"./parser\";\nexport { renderTiming } from \"./renderer\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/pedigree/parser.ts","../src/diagrams/pedigree/layout.ts","../src/diagrams/pedigree/legend.ts","../src/diagrams/pedigree/renderer.ts","../src/diagrams/pedigree/index.ts"],"names":["line","text","parseLegendDirective","propsStr","resolvePersonTheme","title","desc","applyLegendOverrides","renderLegend","group","svgRoot","el","rect","path","defs","cssCustomProperties","STROKE_WIDTH","circle","polygon"],"mappings":"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","file":"chunk-B37IKTI7.cjs","sourcesContent":["import type {\n DiagramAST,\n Individual,\n LegendOverrides,\n Relationship,\n RelationshipType,\n GeneticStatus,\n IndividualMarker,\n LegendEntry,\n ConditionFill,\n} from \"../../core/types\";\nimport { parseLegendDirective } from \"../../core/legend-parser\";\n\n// ─── ParseError ─────────────────────────────────────────────\n\nexport class PedigreeParseError extends Error {\n constructor(message: string, public line: number) {\n super(`Line ${line}: ${message}`);\n this.name = \"PedigreeParseError\";\n }\n}\n\n// ─── Couple operators ───────────────────────────────────────\n\nconst COUPLE_OPS: Array<{ token: string; type: RelationshipType }> = [\n { token: \"-/-\", type: \"separated\" },\n { token: \"==\", type: \"consanguineous\" },\n { token: \"--\", type: \"married\" },\n { token: \"~\", type: \"cohabiting\" },\n];\n\nconst VALID_SEX = new Set([\"male\", \"female\", \"unknown\", \"amab\", \"afab\", \"uaab\"]);\nconst GENETIC_STATUSES = new Set([\n \"affected\",\n \"carrier\",\n \"carrier-x\",\n \"obligate-carrier\",\n \"presymptomatic\",\n \"unaffected\",\n]);\nconst MARKERS = new Set([\"proband\", \"consultand\", \"evaluated\"]);\nconst VALID_STATUS = new Set([\"deceased\", \"stillborn\", \"pregnancy\", \"sab\", \"tab\", \"ectopic\"]);\n\n// ─── Public API ────────────────────────────────────────────\n\nexport function parsePedigree(text: string): DiagramAST {\n const rawLines = text.split(\"\\n\");\n let i = 0;\n\n while (i < rawLines.length && rawLines[i].trim() === \"\") i++;\n if (i >= rawLines.length) throw new PedigreeParseError(\"Empty input\", 1);\n\n const headerLine = rawLines[i].trim();\n const headerMatch = headerLine.match(/^pedigree\\s*(?:\"([^\"]*)\")?$/i);\n if (!headerMatch) throw new PedigreeParseError(\"Expected 'pedigree' header\", i + 1);\n\n const metadata: Record<string, string> = {};\n if (headerMatch[1]) metadata.title = headerMatch[1];\n i++;\n\n const legend: LegendEntry[] = [];\n const legendOverrides: LegendOverrides = {};\n let hasLegendOverrides = false;\n const individualsMap = new Map<string, Individual>();\n const relationships: Relationship[] = [];\n\n while (i < rawLines.length) {\n const raw = rawLines[i];\n const trimmed = raw.trim();\n\n if (trimmed === \"\" || trimmed.startsWith(\"#\") || trimmed.startsWith(\"//\")) {\n i++;\n continue;\n }\n\n // Unified legend directives (legend.title / .position / .label / .hide /\n // .section / .item / `legend: on|off|<position>`). Legacy `legend: id =\n // \"...\"` falls through to the regex below — applyMaster() returns false\n // for the trait-id form, so parseLegendDirective hands it back to us.\n if (parseLegendDirective(trimmed, legendOverrides)) {\n hasLegendOverrides = true;\n i++;\n continue;\n }\n\n // Legend definition (legacy trait-fill DSL).\n const legendMatch = trimmed.match(\n /^legend:\\s*([a-zA-Z][a-zA-Z0-9_-]*)\\s*=\\s*\"([^\"]*)\"\\s*(?:\\(\\s*fill:\\s*([a-zA-Z-]+)\\s*\\))?$/\n );\n if (legendMatch) {\n legend.push({\n id: legendMatch[1],\n label: legendMatch[2],\n fill: (legendMatch[3] as ConditionFill) ?? \"full\",\n });\n i++;\n continue;\n }\n\n // Couple line\n const coupleMatch = detectCoupleOp(trimmed);\n if (coupleMatch) {\n const { leftId, op, rightRaw } = coupleMatch;\n const lineNum = i + 1;\n\n const { id: rightId, propsStr: rightProps } = parseIdWithProps(rightRaw);\n const leftKey = leftId.toLowerCase();\n const rightKey = rightId.toLowerCase();\n\n if (!individualsMap.has(leftKey)) {\n throw new PedigreeParseError(`Unknown individual '${leftId}'`, lineNum);\n }\n\n if (rightProps) {\n individualsMap.set(rightKey, buildIndividual(rightId, rightProps, lineNum));\n } else if (!individualsMap.has(rightKey)) {\n throw new PedigreeParseError(`Unknown individual '${rightId}'`, lineNum);\n }\n\n relationships.push({ type: op.type, from: leftKey, to: rightKey });\n\n const coupleIndent = leadingSpaces(raw);\n i++;\n\n // Children (indented under couple)\n while (i < rawLines.length) {\n const childLine = rawLines[i];\n const childTrimmed = childLine.trim();\n\n if (childTrimmed === \"\" || childTrimmed.startsWith(\"#\")) {\n i++;\n continue;\n }\n\n if (leadingSpaces(childLine) <= coupleIndent) break;\n\n const childLineNum = i + 1;\n const { id: childId, propsStr } = parseIdWithProps(childTrimmed);\n const childKey = childId.toLowerCase();\n\n individualsMap.set(childKey, buildIndividual(childId, propsStr, childLineNum));\n\n const coupleKey = `${leftKey}+${rightKey}`;\n relationships.push({ type: \"parent-child\", from: coupleKey, to: childKey });\n\n i++;\n }\n continue;\n }\n\n // Individual definition\n const { id, propsStr } = parseIdWithProps(trimmed);\n const key = id.toLowerCase();\n const ind = buildIndividual(id, propsStr, i + 1);\n const existing = individualsMap.get(key);\n if (existing) {\n individualsMap.set(key, mergeIndividual(existing, ind));\n } else {\n individualsMap.set(key, ind);\n }\n i++;\n }\n\n return {\n type: \"pedigree\",\n individuals: Array.from(individualsMap.values()),\n relationships,\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n legend: legend.length > 0 ? legend : undefined,\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 detectCoupleOp(trimmed: string): { leftId: string; op: typeof COUPLE_OPS[0]; rightRaw: string } | null {\n for (const op of COUPLE_OPS) {\n let bracketDepth = 0;\n for (let j = 0; j < trimmed.length; j++) {\n if (trimmed[j] === \"[\") bracketDepth++;\n if (trimmed[j] === \"]\") bracketDepth--;\n if (bracketDepth > 0) continue;\n\n if (trimmed.substring(j, j + op.token.length) === op.token) {\n const left = trimmed.substring(0, j).trim();\n const right = trimmed.substring(j + op.token.length).trim();\n if (left && right && /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(left)) {\n return { leftId: left, op, rightRaw: right };\n }\n }\n }\n }\n return null;\n}\n\nfunction parseIdWithProps(raw: string): { id: string; propsStr: string | null } {\n const bracketIdx = raw.indexOf(\"[\");\n if (bracketIdx === -1) return { id: raw.trim(), propsStr: null };\n const id = raw.substring(0, bracketIdx).trim();\n const endBracket = raw.lastIndexOf(\"]\");\n const propsStr = raw.substring(bracketIdx + 1, endBracket === -1 ? raw.length : endBracket);\n return { id, propsStr };\n}\n\nfunction splitProps(propsStr: string): string[] {\n const result: string[] = [];\n let current = \"\";\n let parenDepth = 0;\n for (const ch of propsStr) {\n if (ch === \"(\") parenDepth++;\n if (ch === \")\") parenDepth--;\n if (ch === \",\" && parenDepth === 0) {\n result.push(current);\n current = \"\";\n } else {\n current += ch;\n }\n }\n if (current.trim()) result.push(current);\n return result;\n}\n\nfunction buildIndividual(id: string, propsStr: string | null, _lineNum: number): Individual {\n const ind: Individual = {\n id: id.toLowerCase(),\n label: id,\n sex: \"unknown\",\n status: \"alive\",\n };\n\n if (!propsStr) return ind;\n\n const tokens = splitProps(propsStr);\n for (const rawToken of tokens) {\n const token = rawToken.trim();\n const lower = token.toLowerCase();\n\n if (VALID_SEX.has(lower)) {\n ind.sex = lower === \"amab\" ? \"male\" : lower === \"afab\" ? \"female\" : lower === \"uaab\" ? \"unknown\" : lower as Individual[\"sex\"];\n } else if (VALID_STATUS.has(lower)) {\n ind.status = lower as Individual[\"status\"];\n } else if (GENETIC_STATUSES.has(lower)) {\n ind.geneticStatus = lower as GeneticStatus;\n } else if (MARKERS.has(lower)) {\n if (!ind.markers) ind.markers = [];\n ind.markers.push(lower as IndividualMarker);\n } else if (/^\\d{4}$/.test(lower)) {\n ind.birthYear = parseInt(token, 10);\n } else if (lower.startsWith(\"affected:\")) {\n ind.geneticStatus = \"affected\";\n const traits = token.substring(\"affected:\".length).trim().split(\"+\").map(t => t.trim());\n ind.conditions = traits.map(t => ({ label: t, fill: \"full\" as ConditionFill }));\n } else if (token.includes(\":\")) {\n const colonIdx = token.indexOf(\":\");\n const key = token.substring(0, colonIdx).trim().toLowerCase();\n const value = token.substring(colonIdx + 1).trim().replace(/^\"|\"$/g, \"\");\n if (key === \"label\") {\n ind.label = value;\n } else {\n if (!ind.properties) ind.properties = {};\n ind.properties[key] = value;\n }\n }\n }\n\n return ind;\n}\n\nfunction mergeIndividual(existing: Individual, incoming: Individual): Individual {\n return {\n ...existing,\n sex: incoming.sex !== \"unknown\" ? incoming.sex : existing.sex,\n status: incoming.status !== \"alive\" ? incoming.status : existing.status,\n birthYear: incoming.birthYear ?? existing.birthYear,\n geneticStatus: incoming.geneticStatus ?? existing.geneticStatus,\n markers: incoming.markers ?? existing.markers,\n conditions: incoming.conditions ?? existing.conditions,\n properties: { ...existing.properties, ...incoming.properties },\n };\n}\n","import type {\n DiagramAST,\n Individual,\n Relationship,\n RelationshipType,\n LayoutConfig,\n LayoutResult,\n LayoutNode,\n LayoutEdge,\n} from \"../../core/types\";\n\n// ─── Internal types ─────────────────────────────────────────\n\ninterface FamilyUnit {\n id: string;\n partners: [string, string];\n relationship: RelationshipType;\n children: string[];\n}\n\ninterface LayoutGraph {\n individuals: Map<string, Individual>;\n familyUnits: FamilyUnit[];\n generations: Map<string, number>;\n childOf: Map<string, string>;\n}\n\n// ─── Constants ─────────────────────────────────────────────\n\nconst LABEL_HEIGHT = 20;\nconst LABEL_GAP = 6;\nconst GEN_LABEL_MARGIN = 50;\n\n// ─── Public API ─────────────────────────────────────────────\n\nexport function layoutPedigree(\n ast: DiagramAST,\n config: LayoutConfig\n): LayoutResult {\n const graph = buildGraph(ast);\n assignGenerations(graph);\n const ordered = orderNodesInGenerations(graph);\n const positions = assignPositions(ordered, graph, config);\n const edges = computeEdges(graph, positions, config);\n return packageResult(positions, edges, graph, config);\n}\n\n// ─── Step 1: Build graph ────────────────────────────────────\n\nfunction buildGraph(ast: DiagramAST): LayoutGraph {\n const individuals = new Map<string, Individual>();\n for (const ind of ast.individuals) individuals.set(ind.id, ind);\n\n const familyUnits: FamilyUnit[] = [];\n const childOf = new Map<string, string>();\n\n const coupleRels = ast.relationships.filter(\n (r) => r.type === \"married\" || r.type === \"separated\" ||\n r.type === \"consanguineous\" || r.type === \"cohabiting\"\n );\n\n for (const rel of coupleRels) {\n const fuId = `${rel.from}+${rel.to}`;\n const indA = individuals.get(rel.from);\n const indB = individuals.get(rel.to);\n\n let partners: [string, string];\n if (indA && indB) {\n if (indA.sex === \"male\" && indB.sex === \"female\") {\n partners = [rel.from, rel.to];\n } else if (indA.sex === \"female\" && indB.sex === \"male\") {\n partners = [rel.to, rel.from];\n } else {\n partners = [rel.from, rel.to];\n }\n } else {\n partners = [rel.from, rel.to];\n }\n\n const children: string[] = [];\n for (const r of ast.relationships) {\n if (r.type === \"parent-child\" && r.from === fuId) {\n children.push(r.to);\n childOf.set(r.to, fuId);\n }\n }\n\n children.sort((a, b) => {\n const ia = individuals.get(a);\n const ib = individuals.get(b);\n return (ia?.birthYear ?? 9999) - (ib?.birthYear ?? 9999);\n });\n\n familyUnits.push({ id: fuId, partners, relationship: rel.type, children });\n }\n\n return { individuals, familyUnits, generations: new Map(), childOf };\n}\n\n// ─── Step 2: Assign generations ─────────────────────────────\n\nfunction assignGenerations(graph: LayoutGraph): void {\n const { individuals, familyUnits, childOf, generations } = graph;\n const allIds = Array.from(individuals.keys());\n const roots = allIds.filter((id) => !childOf.has(id));\n\n if (roots.length === 0 && allIds.length > 0) {\n for (const id of allIds) generations.set(id, 0);\n return;\n }\n\n for (const root of roots) {\n if (!generations.has(root)) generations.set(root, 0);\n }\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const fu of familyUnits) {\n const gen0 = generations.get(fu.partners[0]);\n const gen1 = generations.get(fu.partners[1]);\n\n let partnerGen: number;\n if (gen0 !== undefined && gen1 !== undefined) {\n partnerGen = Math.max(gen0, gen1);\n if (gen0 !== partnerGen) { generations.set(fu.partners[0], partnerGen); changed = true; }\n if (gen1 !== partnerGen) { generations.set(fu.partners[1], partnerGen); changed = true; }\n } else if (gen0 !== undefined) {\n partnerGen = gen0;\n generations.set(fu.partners[1], partnerGen); changed = true;\n } else if (gen1 !== undefined) {\n partnerGen = gen1;\n generations.set(fu.partners[0], partnerGen); changed = true;\n } else {\n continue;\n }\n\n for (const childId of fu.children) {\n const childGen = partnerGen + 1;\n const existing = generations.get(childId);\n if (existing === undefined || existing < childGen) {\n generations.set(childId, childGen);\n changed = true;\n }\n }\n }\n }\n\n for (const id of allIds) {\n if (!generations.has(id)) generations.set(id, 0);\n }\n}\n\n// ─── Step 3: Order nodes ───────────────────────────────────\n\ninterface OrderedGeneration {\n index: number;\n nodeIds: string[];\n}\n\nfunction orderNodesInGenerations(graph: LayoutGraph): OrderedGeneration[] {\n const genGroups = new Map<number, string[]>();\n for (const [id, gen] of graph.generations) {\n const grp = genGroups.get(gen) ?? [];\n grp.push(id);\n genGroups.set(gen, grp);\n }\n\n const genIndices = Array.from(genGroups.keys()).sort((a, b) => a - b);\n const result: OrderedGeneration[] = [];\n\n for (const genIdx of genIndices) {\n const nodeIds = genGroups.get(genIdx) ?? [];\n result.push({ index: genIdx, nodeIds: orderGeneration(nodeIds, graph) });\n }\n\n return result;\n}\n\nfunction orderGeneration(nodeIds: string[], graph: LayoutGraph): string[] {\n if (nodeIds.length <= 1) return [...nodeIds];\n\n const nodeSet = new Set(nodeIds);\n const placed = new Set<string>();\n const ordered: string[] = [];\n\n const fuInGen = graph.familyUnits.filter(\n (fu) => nodeSet.has(fu.partners[0]) || nodeSet.has(fu.partners[1])\n );\n\n for (const fu of fuInGen) {\n for (const p of fu.partners) {\n if (nodeSet.has(p) && !placed.has(p)) {\n ordered.push(p);\n placed.add(p);\n }\n }\n }\n\n for (const id of nodeIds) {\n if (!placed.has(id)) {\n ordered.push(id);\n placed.add(id);\n }\n }\n\n return ordered;\n}\n\n// ─── Step 4: Assign positions ──────────────────────────────\n\ninterface NodePosition {\n id: string;\n x: number;\n y: number;\n generation: number;\n}\n\nfunction assignPositions(\n orderedGens: OrderedGeneration[],\n graph: LayoutGraph,\n config: LayoutConfig\n): Map<string, NodePosition> {\n const positions = new Map<string, NodePosition>();\n const { nodeWidth, nodeSpacingX } = config;\n const half = nodeWidth / 2;\n const coupleGap = nodeWidth + nodeSpacingX * 0.6;\n const familyGap = nodeWidth + nodeSpacingX * 1.5;\n const genStepY = config.nodeHeight + LABEL_HEIGHT + LABEL_GAP + config.nodeSpacingY;\n\n for (const gen of orderedGens) {\n const y = gen.index * genStepY + half;\n const segments = buildSegments(gen.nodeIds, graph);\n\n let xCursor = GEN_LABEL_MARGIN + half;\n for (let s = 0; s < segments.length; s++) {\n const seg = segments[s];\n if (s > 0) xCursor += familyGap;\n\n if (seg.type === \"couple\") {\n positions.set(seg.ids[0], { id: seg.ids[0], x: xCursor, y, generation: gen.index });\n xCursor += coupleGap;\n positions.set(seg.ids[1], { id: seg.ids[1], x: xCursor, y, generation: gen.index });\n } else {\n positions.set(seg.ids[0], { id: seg.ids[0], x: xCursor, y, generation: gen.index });\n }\n }\n }\n\n resolveOverlaps(positions, orderedGens, config);\n centerChildrenUnderParents(positions, graph, config);\n resolveOverlaps(positions, orderedGens, config);\n\n return positions;\n}\n\ninterface Segment {\n type: \"couple\" | \"single\";\n ids: string[];\n}\n\nfunction buildSegments(nodeIds: string[], graph: LayoutGraph): Segment[] {\n const nodeSet = new Set(nodeIds);\n const segments: Segment[] = [];\n const placed = new Set<string>();\n\n for (const id of nodeIds) {\n if (placed.has(id)) continue;\n\n const fu = graph.familyUnits.find(\n (f) =>\n (f.partners[0] === id || f.partners[1] === id) &&\n !placed.has(f.partners[0]) &&\n !placed.has(f.partners[1]) &&\n nodeSet.has(f.partners[0]) &&\n nodeSet.has(f.partners[1])\n );\n\n if (fu) {\n segments.push({ type: \"couple\", ids: [fu.partners[0], fu.partners[1]] });\n placed.add(fu.partners[0]);\n placed.add(fu.partners[1]);\n } else {\n segments.push({ type: \"single\", ids: [id] });\n placed.add(id);\n }\n }\n\n return segments;\n}\n\nfunction centerChildrenUnderParents(\n positions: Map<string, NodePosition>,\n graph: LayoutGraph,\n config: LayoutConfig\n): void {\n const coupleGap = config.nodeSpacingX + config.nodeWidth;\n\n const personToFUs = new Map<string, FamilyUnit[]>();\n for (const fu of graph.familyUnits) {\n for (const p of fu.partners) {\n const arr = personToFUs.get(p) ?? [];\n arr.push(fu);\n personToFUs.set(p, arr);\n }\n }\n\n for (let pass = 0; pass < 3; pass++) {\n for (const fu of graph.familyUnits) {\n if (fu.children.length === 0) continue;\n\n const posA = positions.get(fu.partners[0]);\n const posB = positions.get(fu.partners[1]);\n if (!posA || !posB) continue;\n\n const parentMidX = (posA.x + posB.x) / 2;\n const childSpacing = config.nodeSpacingX + config.nodeWidth;\n\n const sortedChildren = [...fu.children].sort((a, b) => {\n const ia = graph.individuals.get(a);\n const ib = graph.individuals.get(b);\n return (ia?.birthYear ?? 9999) - (ib?.birthYear ?? 9999);\n });\n\n if (sortedChildren.length > 1) {\n // Calculate per-gap spacing: add room for married-in spouses\n const gaps: number[] = [];\n for (let j = 0; j < sortedChildren.length - 1; j++) {\n let gap = childSpacing;\n\n // If the RIGHT child has a spouse placed to their LEFT\n const nextChild = sortedChildren[j + 1];\n const nextFUs = personToFUs.get(nextChild) ?? [];\n for (const cfu of nextFUs) {\n const pid = cfu.partners[0] === nextChild ? cfu.partners[1] : cfu.partners[0];\n const cInd = graph.individuals.get(nextChild);\n const pInd = graph.individuals.get(pid);\n if (!(cInd?.sex === \"male\" || (cInd?.sex !== \"female\" && pInd?.sex === \"female\"))) {\n gap += coupleGap;\n }\n }\n\n // If the LEFT child has a spouse placed to their RIGHT\n const currChild = sortedChildren[j];\n const currFUs = personToFUs.get(currChild) ?? [];\n for (const cfu of currFUs) {\n const pid = cfu.partners[0] === currChild ? cfu.partners[1] : cfu.partners[0];\n const cInd = graph.individuals.get(currChild);\n const pInd = graph.individuals.get(pid);\n if (cInd?.sex === \"male\" || (cInd?.sex !== \"female\" && pInd?.sex === \"female\")) {\n gap += coupleGap;\n }\n }\n\n gaps.push(gap);\n }\n\n const totalWidth = gaps.reduce((s, g) => s + g, 0);\n const startX = parentMidX - totalWidth / 2;\n let cx = startX;\n for (let j = 0; j < sortedChildren.length; j++) {\n const pos = positions.get(sortedChildren[j]);\n if (pos) pos.x = cx;\n if (j < gaps.length) cx += gaps[j];\n }\n } else {\n const pos = positions.get(sortedChildren[0]);\n if (pos) pos.x = parentMidX;\n }\n\n for (const childId of fu.children) {\n const childPos = positions.get(childId);\n if (!childPos) continue;\n const childFUs = personToFUs.get(childId) ?? [];\n for (const childFU of childFUs) {\n const partnerId = childFU.partners[0] === childId ? childFU.partners[1] : childFU.partners[0];\n const partnerPos = positions.get(partnerId);\n if (!partnerPos) continue;\n const childInd = graph.individuals.get(childId);\n const partnerInd = graph.individuals.get(partnerId);\n if (childInd?.sex === \"male\" || (childInd?.sex !== \"female\" && partnerInd?.sex === \"female\")) {\n partnerPos.x = childPos.x + coupleGap;\n } else {\n partnerPos.x = childPos.x - coupleGap;\n }\n }\n }\n }\n }\n}\n\nfunction resolveOverlaps(\n positions: Map<string, NodePosition>,\n orderedGens: OrderedGeneration[],\n config: LayoutConfig\n): void {\n const minGap = config.nodeWidth + config.nodeSpacingX;\n\n for (const gen of orderedGens) {\n const genNodes = gen.nodeIds\n .map((id) => positions.get(id))\n .filter((p): p is NodePosition => p !== undefined);\n genNodes.sort((a, b) => a.x - b.x);\n\n for (let j = 1; j < genNodes.length; j++) {\n const gap = genNodes[j].x - genNodes[j - 1].x;\n if (gap < minGap) {\n const shift = minGap - gap;\n for (let k = j; k < genNodes.length; k++) genNodes[k].x += shift;\n }\n }\n }\n\n let minX = Infinity;\n for (const pos of positions.values()) {\n if (pos.x < minX) minX = pos.x;\n }\n const minAllowed = GEN_LABEL_MARGIN + config.nodeWidth / 2;\n if (minX < minAllowed) {\n const shift = minAllowed - minX;\n for (const pos of positions.values()) pos.x += shift;\n }\n}\n\n// ─── Step 5: Compute edges ─────────────────────────────────\n\nfunction computeEdges(\n graph: LayoutGraph,\n positions: Map<string, NodePosition>,\n config: LayoutConfig\n): LayoutEdge[] {\n const edges: LayoutEdge[] = [];\n const half = config.nodeWidth / 2;\n const dropY_offset = config.nodeHeight / 2 + LABEL_HEIGHT + LABEL_GAP + config.nodeSpacingY * 0.35;\n\n for (const fu of graph.familyUnits) {\n const posA = positions.get(fu.partners[0]);\n const posB = positions.get(fu.partners[1]);\n if (!posA || !posB) continue;\n\n const leftPos = posA.x < posB.x ? posA : posB;\n const rightPos = posA.x < posB.x ? posB : posA;\n const leftId = posA.x < posB.x ? fu.partners[0] : fu.partners[1];\n const rightId = posA.x < posB.x ? fu.partners[1] : fu.partners[0];\n\n const coupleRel: Relationship = { type: fu.relationship, from: leftId, to: rightId };\n const couplePath = `M ${leftPos.x + half} ${leftPos.y} L ${rightPos.x - half} ${rightPos.y}`;\n edges.push({ from: leftId, to: rightId, relationship: coupleRel, path: couplePath });\n\n // Consanguinity: add second parallel line\n if (fu.relationship === \"consanguineous\") {\n const offset = 3;\n const consPath = `M ${leftPos.x + half} ${leftPos.y + offset} L ${rightPos.x - half} ${rightPos.y + offset}`;\n edges.push({\n from: leftId, to: rightId,\n relationship: { type: \"consanguineous\", from: leftId, to: rightId, label: \"_double\" },\n path: consPath,\n });\n }\n\n if (fu.children.length > 0) {\n const midX = (posA.x + posB.x) / 2;\n const coupleY = posA.y;\n const dropY = coupleY + dropY_offset;\n\n const childPositions = fu.children\n .map((cid) => ({ id: cid, pos: positions.get(cid) }))\n .filter((c): c is { id: string; pos: NodePosition } => c.pos !== undefined);\n\n if (childPositions.length === 0) continue;\n childPositions.sort((a, b) => a.pos.x - b.pos.x);\n\n const leftX = childPositions[0].pos.x;\n const rightX = childPositions[childPositions.length - 1].pos.x;\n\n edges.push({\n from: fu.partners[0], to: fu.partners[1],\n relationship: { type: \"parent-child\", from: fu.id, to: \"_drop\" },\n path: `M ${midX} ${coupleY} L ${midX} ${dropY}`,\n });\n\n if (childPositions.length > 1) {\n edges.push({\n from: fu.partners[0], to: fu.partners[1],\n relationship: { type: \"parent-child\", from: fu.id, to: \"_sibship\" },\n path: `M ${leftX} ${dropY} L ${rightX} ${dropY}`,\n });\n }\n\n for (const child of childPositions) {\n const childTop = child.pos.y - config.nodeHeight / 2;\n const childPath = childPositions.length === 1\n ? `M ${midX} ${coupleY} L ${midX} ${childTop}`\n : `M ${child.pos.x} ${dropY} L ${child.pos.x} ${childTop}`;\n\n edges.push({\n from: fu.id, to: child.id,\n relationship: { type: \"parent-child\", from: fu.id, to: child.id },\n path: childPath,\n });\n }\n }\n }\n\n return edges;\n}\n\n// ─── Step 6: Package result ─────────────────────────────────\n\nfunction packageResult(\n positions: Map<string, NodePosition>,\n edges: LayoutEdge[],\n graph: LayoutGraph,\n config: LayoutConfig\n): LayoutResult {\n const padding = 40;\n const nodes: LayoutNode[] = [];\n\n for (const [id, pos] of positions) {\n const ind = graph.individuals.get(id);\n if (!ind) continue;\n nodes.push({\n id,\n x: pos.x - config.nodeWidth / 2 + padding,\n y: pos.y - config.nodeHeight / 2 + padding,\n width: config.nodeWidth,\n height: config.nodeHeight,\n generation: pos.generation,\n individual: ind,\n });\n }\n\n const shiftedEdges = edges.map((e) => ({\n ...e,\n path: shiftPath(e.path, padding, padding),\n }));\n\n let maxX = 0;\n let maxY = 0;\n let minX = Infinity;\n for (const node of nodes) {\n const cx = node.x + node.width / 2;\n const labelText = node.individual.label || node.individual.id;\n const labelHalfWidth = labelText.length * 3.8;\n const right = Math.max(node.x + node.width, cx + labelHalfWidth);\n const left = Math.min(node.x, cx - labelHalfWidth);\n const bottom = node.y + node.height;\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n if (left < minX) minX = left;\n }\n\n if (minX < 0) {\n const shift = -minX;\n for (const node of nodes) {\n node.x += shift;\n }\n for (const edge of shiftedEdges) {\n edge.path = shiftPath(edge.path, shift, 0);\n }\n maxX += shift;\n }\n\n return {\n width: maxX + padding,\n height: maxY + padding + LABEL_GAP + LABEL_HEIGHT + 10,\n nodes,\n edges: shiftedEdges,\n };\n}\n\nfunction shiftPath(pathData: string, dx: number, dy: number): string {\n return pathData.replace(\n /([ML])\\s*([\\d.-]+)\\s+([\\d.-]+)/g,\n (_match, cmd: string, xStr: string, yStr: string) => {\n const x = parseFloat(xStr) + dx;\n const y = parseFloat(yStr) + dy;\n return `${cmd} ${x} ${y}`;\n }\n );\n}\n","/**\n * Auto-derive a LegendSpec from a pedigree AST.\n *\n * Pedigree-specific encodings:\n * 1. Trait fills (the legacy `legend: trait_id = \"Label\" (fill: ...)`\n * directive) — merged into the unified system as a TRAITS section.\n * 2. Symbols (carriers, deceased, proband, etc.) — only when used.\n *\n * The standard square=Male / circle=Female convention is universal McGoldrick\n * and is excluded by default (matches genogram behavior).\n */\n\nimport type {\n DiagramAST,\n GeneticStatus,\n LegendItem,\n LegendSection,\n LegendSpec,\n Sex,\n} from \"../../core/types\";\nimport type { ResolvedTheme, PersonTokens } from \"../../core/theme\";\n\nconst SECTIONS: LegendSection[] = [\n { id: \"status\", title: \"Genetic status\" },\n { id: \"traits\", title: \"Traits\" },\n { id: \"symbols\", title: \"Symbols\" },\n];\n\nconst OBVIOUS_SEX: ReadonlySet<Sex> = new Set<Sex>([\"male\", \"female\"]);\n\nexport function buildPedigreeLegend(\n ast: DiagramAST,\n theme: ResolvedTheme<PersonTokens>\n): LegendSpec {\n const items: LegendItem[] = [];\n\n // Genetic status: standard pedigree-chart encoding (unaffected omitted —\n // it's the universal default).\n const statusUsed = new Set<GeneticStatus>();\n for (const ind of ast.individuals) {\n if (ind.geneticStatus && ind.geneticStatus !== \"unaffected\") {\n statusUsed.add(ind.geneticStatus);\n }\n }\n const statusOrder: GeneticStatus[] = [\n \"affected\",\n \"carrier\",\n \"carrier-x\",\n \"obligate-carrier\",\n \"presymptomatic\",\n ];\n for (const s of statusOrder) {\n if (!statusUsed.has(s)) continue;\n items.push(geneticStatusItem(s, theme));\n }\n\n // Legacy trait legend entries (when DSL uses `legend: cf = \"Cystic Fibrosis\"`).\n if (ast.legend && ast.legend.length > 0) {\n for (const entry of ast.legend) {\n const isFull = !entry.fill || entry.fill === \"full\";\n items.push({\n key: entry.id,\n label: entry.label,\n kind: isFull ? \"fill\" : \"fill-pattern\",\n color: entry.color ?? theme.conditionFill,\n shape: isFull ? undefined : entry.fill,\n section: \"traits\",\n });\n }\n }\n\n // Non-obvious sex shapes (unknown / nonbinary / intersex).\n const sexUsed = new Set<Sex>();\n for (const ind of ast.individuals) sexUsed.add(ind.sex);\n const sexOrder: Sex[] = [\"unknown\", \"other\", \"nonbinary\", \"intersex\"];\n for (const s of sexOrder) {\n if (!sexUsed.has(s) || OBVIOUS_SEX.has(s)) continue;\n items.push({\n key: `sex.${s}`,\n label: sexLabel(s),\n kind: \"shape\",\n shape: \"diamond\",\n fill: theme.unknownFill,\n color: theme.stroke,\n section: \"symbols\",\n });\n }\n\n // Deceased\n const hasDeceased = ast.individuals.some((i) => i.status === \"deceased\");\n if (hasDeceased) {\n items.push({\n key: \"status.deceased\",\n label: \"Deceased\",\n kind: \"marker\",\n marker: \"slash\",\n color: theme.deceasedMark,\n section: \"symbols\",\n });\n }\n\n // Proband / consultand markers\n const hasProband = ast.individuals.some((i) => i.markers?.includes(\"proband\"));\n if (hasProband) {\n items.push({\n key: \"marker.proband\",\n label: \"Proband (P) — first affected case identified\",\n kind: \"marker\",\n marker: \"P\",\n section: \"symbols\",\n });\n }\n const hasConsultand = ast.individuals.some((i) => i.markers?.includes(\"consultand\"));\n if (hasConsultand) {\n items.push({\n key: \"marker.consultand\",\n label: \"Consultand (C)\",\n kind: \"marker\",\n marker: \"C\",\n section: \"symbols\",\n });\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 geneticStatusItem(\n s: GeneticStatus,\n theme: ResolvedTheme<PersonTokens>\n): LegendItem {\n switch (s) {\n case \"affected\":\n return {\n key: `status.${s}`,\n label: \"Affected\",\n kind: \"fill\",\n color: theme.conditionFill,\n section: \"status\",\n };\n case \"carrier\":\n return {\n key: `status.${s}`,\n label: \"Carrier\",\n kind: \"fill-pattern\",\n color: theme.conditionFill,\n shape: \"half-left\",\n section: \"status\",\n };\n case \"carrier-x\":\n return {\n key: `status.${s}`,\n label: \"X-linked carrier\",\n kind: \"marker\",\n marker: \"dot\",\n color: theme.conditionFill,\n section: \"status\",\n };\n case \"obligate-carrier\":\n return {\n key: `status.${s}`,\n label: \"Obligate carrier\",\n kind: \"marker\",\n marker: \"dot\",\n color: theme.conditionFill,\n section: \"status\",\n };\n case \"presymptomatic\":\n return {\n key: `status.${s}`,\n label: \"Presymptomatic\",\n kind: \"line\",\n color: theme.conditionFill,\n pattern: \"solid\",\n strokeWidth: 2,\n section: \"status\",\n };\n default:\n return {\n key: `status.${s}`,\n label: humanize(s),\n kind: \"fill\",\n color: theme.conditionFill,\n section: \"status\",\n };\n }\n}\n\nfunction sexLabel(s: Sex): string {\n switch (s) {\n case \"unknown\": return \"Unknown sex\";\n case \"other\": return \"Other\";\n case \"nonbinary\": return \"Non-binary\";\n case \"intersex\": return \"Intersex\";\n default: return s;\n }\n}\n\nfunction humanize(s: string): string {\n return s.replace(/[-_]+/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n","import type {\n LayoutResult,\n LayoutNode,\n LayoutEdge,\n RenderConfig,\n Individual,\n DiagramAST,\n} from \"../../core/types\";\nimport {\n svgRoot,\n el,\n group,\n rect,\n circle,\n polygon,\n line,\n text,\n title,\n desc,\n defs,\n path,\n} from \"../../core/svg\";\nimport { cssCustomProperties, resolvePersonTheme, STROKE_WIDTH, type ResolvedTheme, type PersonTokens } from \"../../core/theme\";\nimport { applyLegendOverrides, renderLegend as renderLegendCore } from \"../../core/legend\";\nimport { buildPedigreeLegend } from \"./legend\";\n\n// ─── Public API ─────────────────────────────────────────────\n\nexport function renderPedigree(\n layout: LayoutResult,\n config: RenderConfig,\n ast?: DiagramAST\n): string {\n const t = resolvePersonTheme(config.theme);\n const defsStr = buildDefs(layout.nodes, t);\n const styleStr = buildStyles(config, t);\n\n const genGroups = groupByGeneration(layout.nodes);\n const edgeLayers = renderEdges(layout.edges);\n const nodeLayers = renderNodes(genGroups);\n const labelLayer = renderLabels(layout.nodes, genGroups, config);\n const genLabels = renderGenerationLabels(genGroups, config);\n\n const nodeCount = layout.nodes.length;\n const genCount = genGroups.size;\n\n const diagramTitle = ast?.metadata?.title ?? \"Pedigree\";\n\n const layers: string[] = [\n title(diagramTitle),\n desc(`Pedigree chart with ${nodeCount} individuals across ${genCount} generations`),\n defsStr,\n styleStr,\n ];\n\n // Defer chart-content push until legend bbox is known so we can center.\n const chartContent = [genLabels, edgeLayers, ...nodeLayers, labelLayer];\n\n let finalWidth = layout.width;\n let finalHeight = layout.height;\n let legendSvg = \"\";\n\n if (ast) {\n const autoSpec = buildPedigreeLegend(ast, t);\n const finalSpec = applyLegendOverrides(autoSpec, ast.legendOverrides);\n if (finalSpec.mode === \"on\" && finalSpec.items.length > 0) {\n const { svg, bbox: lb } = renderLegendCore(\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-pedigree\",\n width: finalWidth,\n height: finalHeight,\n },\n layers\n );\n}\n\n// ─── Defs ──────────────────────────────────────────────────\n\nfunction buildDefs(nodes: LayoutNode[], t: ResolvedTheme<PersonTokens>): string {\n const children: string[] = [];\n const needs = new Set<string>();\n\n for (const n of nodes) {\n const gs = n.individual.geneticStatus;\n if (gs) needs.add(gs);\n }\n\n if (needs.has(\"carrier\")) {\n children.push(\n el(\"clipPath\", { id: \"schematex-pedigree-clip-carrier-rect\" }, [\n rect({ x: \"0\", y: \"0\", width: \"50%\", height: \"100%\" }),\n ]),\n el(\"clipPath\", { id: \"schematex-pedigree-clip-carrier-circle\" }, [\n rect({ x: \"-50\", y: \"-50\", width: \"50\", height: \"100\" }),\n ])\n );\n }\n\n // Proband arrow marker\n children.push(\n el(\"marker\", {\n id: \"schematex-pedigree-proband-arrow\",\n viewBox: \"0 0 10 10\",\n refX: \"0\",\n refY: \"5\",\n markerWidth: \"8\",\n markerHeight: \"8\",\n orient: \"auto-start-reverse\",\n }, [\n path({ d: \"M 0 0 L 10 5 L 0 10 z\", fill: t.stroke }),\n ])\n );\n\n return defs(children);\n}\n\n// ─── Styles ────────────────────────────────────────────────\n\nfunction buildStyles(config: RenderConfig, t: ResolvedTheme<PersonTokens>): string {\n const css = `\n.schematex-pedigree {${cssCustomProperties(t)}\n background: ${t.bg};\n}\n.schematex-pedigree-shape { fill: ${t.fill}; stroke: ${t.stroke}; stroke-width: ${STROKE_WIDTH.normal}; stroke-linejoin: round; }\n.schematex-pedigree-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize}px; text-anchor: middle; fill: ${t.text}; }\n.schematex-pedigree-gen-label { font-family: ${config.fontFamily}; font-size: 14px; font-weight: bold; fill: ${t.text}; text-anchor: middle; }\n.schematex-pedigree-edge { stroke: ${t.stroke}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; stroke-linecap: round; stroke-linejoin: round; }\n.schematex-pedigree-deceased-mark { stroke: ${t.deceasedMark}; stroke-width: ${STROKE_WIDTH.normal}; stroke-linecap: round; }\n.schematex-pedigree-affected-fill { fill: ${t.conditionFill}; }\n.schematex-pedigree-carrier-fill { fill: ${t.conditionFill}; }\n.schematex-pedigree-carrier-x-dot { fill: ${t.conditionFill}; }\n.schematex-pedigree-presymptomatic-mark { stroke: ${t.conditionFill}; stroke-width: ${STROKE_WIDTH.normal}; }\n.schematex-pedigree-proband-arrow-line { stroke: ${t.stroke}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; marker-end: url(#schematex-pedigree-proband-arrow); }\n.schematex-pedigree-proband-label { font-family: ${config.fontFamily}; font-size: 10px; font-weight: bold; fill: ${t.stroke}; }\n.schematex-pedigree-legend { font-family: ${config.fontFamily}; font-size: 11px; fill: ${t.text}; }\n.schematex-pedigree-legend-box { fill: ${t.fill}; stroke: ${t.neutral}; stroke-width: 1; }\n`;\n return el(\"style\", {}, css);\n}\n\n// ─── Edges ─────────────────────────────────────────────────\n\nfunction renderEdges(edges: LayoutEdge[]): string {\n const children: string[] = [];\n\n for (const edge of edges) {\n const relType = edge.relationship.type;\n const cssClass = `schematex-pedigree-edge schematex-pedigree-edge-${relType}`;\n\n const elements: string[] = [\n el(\"path\", { d: edge.path, class: \"schematex-pedigree-edge-path\" }),\n ];\n\n if (relType === \"separated\") {\n const mid = pathMidpoint(edge.path);\n if (mid) {\n elements.push(\n line({\n x1: mid.x - 4, y1: mid.y - 6,\n x2: mid.x + 4, y2: mid.y + 6,\n class: \"schematex-pedigree-edge\",\n })\n );\n }\n }\n\n children.push(\n group({ class: cssClass, \"data-from\": edge.from, \"data-to\": edge.to }, elements)\n );\n }\n\n return group({ class: \"schematex-pedigree-edges\" }, children);\n}\n\nfunction pathMidpoint(pathData: string): { x: number; y: number } | null {\n const coords = pathData.match(/[\\d.-]+/g);\n if (!coords || coords.length < 4) return null;\n return {\n x: (parseFloat(coords[0]) + parseFloat(coords[2])) / 2,\n y: (parseFloat(coords[1]) + parseFloat(coords[3])) / 2,\n };\n}\n\n// ─── Nodes ─────────────────────────────────────────────────\n\nfunction groupByGeneration(nodes: LayoutNode[]): Map<number, LayoutNode[]> {\n const groups = new Map<number, LayoutNode[]>();\n for (const node of nodes) {\n const grp = groups.get(node.generation) ?? [];\n grp.push(node);\n groups.set(node.generation, grp);\n }\n return groups;\n}\n\nfunction renderNodes(genGroups: Map<number, LayoutNode[]>): string[] {\n const layers: string[] = [];\n const sortedGens = Array.from(genGroups.keys()).sort((a, b) => a - b);\n\n for (const genIdx of sortedGens) {\n const nodes = genGroups.get(genIdx) ?? [];\n const nodeElements: 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 nodeElements.push(renderPedigreeSymbol(node.individual, cx, cy, node.width));\n }\n\n layers.push(\n group(\n { class: `schematex-pedigree-generation schematex-pedigree-generation-${genIdx}`, \"data-generation\": genIdx },\n nodeElements\n )\n );\n }\n\n return layers;\n}\n\nfunction renderPedigreeSymbol(\n ind: Individual,\n x: number,\n y: number,\n size: number\n): string {\n const half = size / 2;\n const classes = [\"schematex-pedigree-node\", `schematex-pedigree-${ind.sex === \"other\" ? \"unknown\" : ind.sex}`];\n if (ind.status === \"deceased\") classes.push(\"schematex-pedigree-deceased\");\n if (ind.geneticStatus) classes.push(`schematex-pedigree-${ind.geneticStatus}`);\n\n const titleText = formatTitle(ind);\n const children: string[] = [title(titleText)];\n\n // Base shape\n children.push(baseShape(ind.sex, half));\n\n // Genetic status fills\n const gs = ind.geneticStatus;\n if (gs === \"affected\") {\n children.push(affectedFill(ind.sex, half));\n } else if (gs === \"carrier\") {\n children.push(carrierFill(ind.sex, half));\n } else if (gs === \"carrier-x\" || gs === \"obligate-carrier\") {\n children.push(carrierDot(half));\n }\n\n // Presymptomatic vertical line\n if (gs === \"presymptomatic\") {\n children.push(\n line({ x1: 0, y1: -half, x2: 0, y2: half, class: \"schematex-pedigree-presymptomatic-mark\" })\n );\n }\n\n // Deceased: diagonal slash (pedigree uses / not X)\n if (ind.status === \"deceased\") {\n const ext = ind.sex === \"female\" ? half * 0.707 : half;\n children.push(\n line({ x1: ext, y1: -ext, x2: -ext, y2: ext, class: \"schematex-pedigree-deceased-mark\" })\n );\n }\n\n // Proband arrow\n if (ind.markers?.includes(\"proband\")) {\n const arrowLen = 20;\n children.push(\n line({\n x1: -half - arrowLen, y1: half + arrowLen,\n x2: -half - 2, y2: half + 2,\n class: \"schematex-pedigree-proband-arrow-line\",\n }),\n text(\n { x: -half - arrowLen - 4, y: half + arrowLen + 4, class: \"schematex-pedigree-proband-label\", \"text-anchor\": \"end\" },\n \"P\"\n )\n );\n }\n\n // Consultand arrow\n if (ind.markers?.includes(\"consultand\")) {\n const arrowLen = 20;\n children.push(\n line({\n x1: -half - arrowLen, y1: half + arrowLen,\n x2: -half - 2, y2: half + 2,\n class: \"schematex-pedigree-proband-arrow-line\",\n }),\n text(\n { x: -half - arrowLen - 4, y: half + arrowLen + 4, class: \"schematex-pedigree-proband-label\", \"text-anchor\": \"end\" },\n \"C\"\n )\n );\n }\n\n // Evaluated marker\n if (ind.markers?.includes(\"evaluated\")) {\n children.push(\n text(\n { x: 0, y: -half - 4, class: \"schematex-pedigree-proband-label\", \"text-anchor\": \"middle\" },\n \"E\"\n )\n );\n }\n\n return group(\n {\n class: classes.join(\" \"),\n \"data-individual-id\": ind.id,\n transform: `translate(${x}, ${y})`,\n },\n children\n );\n}\n\nfunction baseShape(sex: Individual[\"sex\"], half: number): string {\n switch (sex) {\n case \"male\":\n return rect({ x: -half, y: -half, width: half * 2, height: half * 2, class: \"schematex-pedigree-shape\" });\n case \"female\":\n return circle({ cx: 0, cy: 0, r: half, class: \"schematex-pedigree-shape\" });\n default:\n return polygon({ points: `0,${-half} ${half},0 0,${half} ${-half},0`, class: \"schematex-pedigree-shape\" });\n }\n}\n\nfunction affectedFill(sex: Individual[\"sex\"], half: number): string {\n const attrs = { class: \"schematex-pedigree-affected-fill\" };\n switch (sex) {\n case \"male\":\n return rect({ x: -half, y: -half, width: half * 2, height: half * 2, ...attrs });\n case \"female\":\n return circle({ cx: 0, cy: 0, r: half, ...attrs });\n default:\n return polygon({ points: `0,${-half} ${half},0 0,${half} ${-half},0`, ...attrs });\n }\n}\n\nfunction carrierFill(sex: Individual[\"sex\"], half: number): string {\n const clipSuffix = sex === \"female\" ? \"circle\" : \"rect\";\n const attrs = {\n class: \"schematex-pedigree-carrier-fill\",\n \"clip-path\": `url(#schematex-pedigree-clip-carrier-${clipSuffix})`,\n };\n switch (sex) {\n case \"male\":\n return rect({ x: -half, y: -half, width: half * 2, height: half * 2, ...attrs });\n case \"female\":\n return circle({ cx: 0, cy: 0, r: half, ...attrs });\n default:\n return polygon({ points: `0,${-half} ${half},0 0,${half} ${-half},0`, ...attrs });\n }\n}\n\nfunction carrierDot(half: number): string {\n return circle({ cx: 0, cy: 0, r: half * 0.15, class: \"schematex-pedigree-carrier-x-dot\" });\n}\n\nfunction formatTitle(ind: Individual): string {\n const name = ind.label.charAt(0).toUpperCase() + ind.label.slice(1);\n if (ind.geneticStatus && ind.geneticStatus !== \"unaffected\") {\n return `${name} (${ind.geneticStatus})`;\n }\n return name;\n}\n\n// ─── Labels ────────────────────────────────────────────────\n\nfunction renderLabels(\n nodes: LayoutNode[],\n genGroups: Map<number, LayoutNode[]>,\n config: RenderConfig\n): string {\n const labels: string[] = [];\n\n // Build per-generation numbering\n const genNumbering = new Map<string, string>();\n const sortedGens = Array.from(genGroups.keys()).sort((a, b) => a - b);\n for (const genIdx of sortedGens) {\n const genNodes = genGroups.get(genIdx) ?? [];\n const sorted = [...genNodes].sort((a, b) => a.x - b.x);\n const romanNum = toRoman(genIdx + 1);\n for (let i = 0; i < sorted.length; i++) {\n genNumbering.set(sorted[i].id, `${romanNum}-${i + 1}`);\n }\n }\n\n for (const node of nodes) {\n const ind = node.individual;\n const cx = node.x + node.width / 2;\n const labelY = node.y + node.height + 6 + config.fontSize;\n\n const pedigreeId = genNumbering.get(ind.id) ?? ind.id;\n const displayLabel = ind.label !== ind.id ? ind.label : pedigreeId;\n\n labels.push(\n text(\n { x: cx, y: labelY, class: \"schematex-pedigree-label\", \"data-individual-id\": ind.id },\n displayLabel\n )\n );\n }\n\n return group({ class: \"schematex-pedigree-labels\" }, labels);\n}\n\n// ─── Generation Labels ─────────────────────────────────────\n\nfunction renderGenerationLabels(\n genGroups: Map<number, LayoutNode[]>,\n _config: RenderConfig\n): string {\n const labels: string[] = [];\n const sortedGens = Array.from(genGroups.keys()).sort((a, b) => a - b);\n\n for (const genIdx of sortedGens) {\n const nodes = genGroups.get(genIdx) ?? [];\n if (nodes.length === 0) continue;\n\n const midY = nodes[0].y + nodes[0].height / 2;\n const roman = toRoman(genIdx + 1);\n\n labels.push(\n text(\n { x: 25, y: midY + 5, class: \"schematex-pedigree-gen-label\" },\n roman\n )\n );\n }\n\n return group({ class: \"schematex-pedigree-generation-labels\" }, labels);\n}\n\n// ─── Legend ────────────────────────────────────────────────\n// (moved to ./legend.ts; rendered via core/legend)\n\n// ─── Helpers ───────────────────────────────────────────────\n\nfunction toRoman(n: number): string {\n const vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];\n const syms = [\"M\", \"CM\", \"D\", \"CD\", \"C\", \"XC\", \"L\", \"XL\", \"X\", \"IX\", \"V\", \"IV\", \"I\"];\n let result = \"\";\n for (let i = 0; i < vals.length; i++) {\n while (n >= vals[i]) {\n result += syms[i];\n n -= vals[i];\n }\n }\n return result;\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parsePedigree, PedigreeParseError } from \"./parser\";\nimport { layoutPedigree } from \"./layout\";\nimport { renderPedigree } from \"./renderer\";\n\nexport const pedigree: DiagramPlugin = {\n type: \"pedigree\",\n\n detect(text: string): boolean {\n const firstLine = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return firstLine === \"pedigree\" || firstLine.startsWith(\"pedigree \");\n },\n\n parse: parsePedigree,\n\n render(text: string, config?: RenderConfig): string {\n const ast = parsePedigree(text);\n const layoutConfig = {\n nodeSpacingX: 80,\n nodeSpacingY: 100,\n nodeWidth: 40,\n nodeHeight: 40,\n };\n const layout = layoutPedigree(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 renderPedigree(layout, renderConfig, ast);\n },\n};\n\nexport { parsePedigree, PedigreeParseError, layoutPedigree, renderPedigree };\n"]}