schematex 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +130 -15
  2. package/dist/api-bQZ98gkJ.d.cts +22 -0
  3. package/dist/api-bQZ98gkJ.d.ts +22 -0
  4. package/dist/browser.cjs +46 -0
  5. package/dist/browser.cjs.map +1 -0
  6. package/dist/browser.d.cts +27 -0
  7. package/dist/browser.d.ts +27 -0
  8. package/dist/browser.js +40 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/{chunk-XXU36667.js → chunk-2OIW3MAE.js} +4 -3
  11. package/dist/chunk-2OIW3MAE.js.map +1 -0
  12. package/dist/{chunk-3FTUWAXK.cjs → chunk-3M7QWADF.cjs} +5 -4
  13. package/dist/chunk-3M7QWADF.cjs.map +1 -0
  14. package/dist/{chunk-BE5HNDA5.cjs → chunk-4HPT4BOI.cjs} +5 -4
  15. package/dist/{chunk-BE5HNDA5.cjs.map → chunk-4HPT4BOI.cjs.map} +1 -1
  16. package/dist/{chunk-CZRM7LT7.js → chunk-4TS5NB7L.js} +4 -3
  17. package/dist/chunk-4TS5NB7L.js.map +1 -0
  18. package/dist/{chunk-4G7ZIBHN.js → chunk-5SH5NUDW.js} +3 -2
  19. package/dist/{chunk-4G7ZIBHN.js.map → chunk-5SH5NUDW.js.map} +1 -1
  20. package/dist/{chunk-47ZC6EMJ.js → chunk-7WXAAVR3.js} +4 -3
  21. package/dist/{chunk-47ZC6EMJ.js.map → chunk-7WXAAVR3.js.map} +1 -1
  22. package/dist/{chunk-5C7DPDHQ.js → chunk-A74ZCP5I.js} +4 -3
  23. package/dist/{chunk-5C7DPDHQ.js.map → chunk-A74ZCP5I.js.map} +1 -1
  24. package/dist/{chunk-DS47NTWZ.cjs → chunk-AMP2FFES.cjs} +11 -10
  25. package/dist/chunk-AMP2FFES.cjs.map +1 -0
  26. package/dist/{chunk-2UKC6ZCY.cjs → chunk-CEV3GZA3.cjs} +12 -11
  27. package/dist/chunk-CEV3GZA3.cjs.map +1 -0
  28. package/dist/{chunk-NYCIK4SU.cjs → chunk-DTMCQXXC.cjs} +13 -12
  29. package/dist/chunk-DTMCQXXC.cjs.map +1 -0
  30. package/dist/{chunk-FDLZEKEB.js → chunk-GEPBET4L.js} +3 -2
  31. package/dist/chunk-GEPBET4L.js.map +1 -0
  32. package/dist/chunk-HAIBAF6J.cjs +1880 -0
  33. package/dist/chunk-HAIBAF6J.cjs.map +1 -0
  34. package/dist/{chunk-FGPTCDUT.cjs → chunk-HKRYKEOV.cjs} +5 -4
  35. package/dist/chunk-HKRYKEOV.cjs.map +1 -0
  36. package/dist/{chunk-D4JTSPOL.js → chunk-HLYA4QBB.js} +4 -3
  37. package/dist/chunk-HLYA4QBB.js.map +1 -0
  38. package/dist/{chunk-7FZSPKX3.cjs → chunk-IMHR3S5H.cjs} +6 -5
  39. package/dist/chunk-IMHR3S5H.cjs.map +1 -0
  40. package/dist/{chunk-HGHWCB6K.js → chunk-IQIJ6WW6.js} +4 -3
  41. package/dist/chunk-IQIJ6WW6.js.map +1 -0
  42. package/dist/{chunk-UHLYS3W5.cjs → chunk-IY52OWPG.cjs} +5 -4
  43. package/dist/{chunk-UHLYS3W5.cjs.map → chunk-IY52OWPG.cjs.map} +1 -1
  44. package/dist/chunk-JZGFSRVT.js +1873 -0
  45. package/dist/chunk-JZGFSRVT.js.map +1 -0
  46. package/dist/{chunk-3J7TFUOC.js → chunk-L6IHSTPP.js} +4 -3
  47. package/dist/{chunk-3J7TFUOC.js.map → chunk-L6IHSTPP.js.map} +1 -1
  48. package/dist/{chunk-4DBRNOPA.cjs → chunk-LKHWBDWZ.cjs} +5 -4
  49. package/dist/{chunk-4DBRNOPA.cjs.map → chunk-LKHWBDWZ.cjs.map} +1 -1
  50. package/dist/{chunk-34X3ZJ6E.cjs → chunk-LXNFVHDT.cjs} +3 -2
  51. package/dist/{chunk-34X3ZJ6E.cjs.map → chunk-LXNFVHDT.cjs.map} +1 -1
  52. package/dist/chunk-M6AMNXQ7.js +4539 -0
  53. package/dist/chunk-M6AMNXQ7.js.map +1 -0
  54. package/dist/{chunk-XX4BKS7Y.js → chunk-MRGS54WN.js} +4 -3
  55. package/dist/chunk-MRGS54WN.js.map +1 -0
  56. package/dist/{chunk-ROFLJ74T.js → chunk-MXJ6FHSY.js} +4 -3
  57. package/dist/chunk-MXJ6FHSY.js.map +1 -0
  58. package/dist/{chunk-V6WO7RK7.cjs → chunk-PIQG2Z5N.cjs} +5 -4
  59. package/dist/chunk-PIQG2Z5N.cjs.map +1 -0
  60. package/dist/{chunk-U5GGE6PJ.js → chunk-RQX53J6M.js} +4 -3
  61. package/dist/chunk-RQX53J6M.js.map +1 -0
  62. package/dist/{chunk-N7KOXOMX.cjs → chunk-S6VPECM3.cjs} +72 -2
  63. package/dist/chunk-S6VPECM3.cjs.map +1 -0
  64. package/dist/{chunk-VFQCTXOX.js → chunk-SPIW4VWP.js} +4 -3
  65. package/dist/chunk-SPIW4VWP.js.map +1 -0
  66. package/dist/{chunk-IX554O5K.js → chunk-TIGP2OEJ.js} +72 -3
  67. package/dist/chunk-TIGP2OEJ.js.map +1 -0
  68. package/dist/{chunk-LMFSHK45.js → chunk-TPA36ULU.js} +4 -3
  69. package/dist/{chunk-LMFSHK45.js.map → chunk-TPA36ULU.js.map} +1 -1
  70. package/dist/{chunk-ZX7QKZK2.cjs → chunk-ULERCTGS.cjs} +5 -4
  71. package/dist/{chunk-ZX7QKZK2.cjs.map → chunk-ULERCTGS.cjs.map} +1 -1
  72. package/dist/chunk-VP54YPOX.cjs +4544 -0
  73. package/dist/chunk-VP54YPOX.cjs.map +1 -0
  74. package/dist/{chunk-XQ52ICHU.cjs → chunk-YKO7DY2F.cjs} +14 -13
  75. package/dist/chunk-YKO7DY2F.cjs.map +1 -0
  76. package/dist/{chunk-PDPHRZZT.js → chunk-YO4GU6JX.js} +4 -3
  77. package/dist/chunk-YO4GU6JX.js.map +1 -0
  78. package/dist/{chunk-S6BK5DB6.cjs → chunk-ZGKEFVJQ.cjs} +13 -12
  79. package/dist/chunk-ZGKEFVJQ.cjs.map +1 -0
  80. package/dist/{chunk-2MQWZ2XY.cjs → chunk-ZO77FHBF.cjs} +3 -2
  81. package/dist/chunk-ZO77FHBF.cjs.map +1 -0
  82. package/dist/diagrams/blockdiagram/index.cjs +5 -5
  83. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  84. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  85. package/dist/diagrams/blockdiagram/index.js +1 -1
  86. package/dist/diagrams/circuit/index.cjs +8 -8
  87. package/dist/diagrams/circuit/index.d.cts +1 -1
  88. package/dist/diagrams/circuit/index.d.ts +1 -1
  89. package/dist/diagrams/circuit/index.js +2 -2
  90. package/dist/diagrams/ecomap/index.cjs +7 -7
  91. package/dist/diagrams/ecomap/index.d.cts +1 -1
  92. package/dist/diagrams/ecomap/index.d.ts +1 -1
  93. package/dist/diagrams/ecomap/index.js +2 -2
  94. package/dist/diagrams/entity/index.cjs +6 -6
  95. package/dist/diagrams/entity/index.d.cts +1 -1
  96. package/dist/diagrams/entity/index.d.ts +1 -1
  97. package/dist/diagrams/entity/index.js +2 -2
  98. package/dist/diagrams/fishbone/index.cjs +8 -8
  99. package/dist/diagrams/fishbone/index.d.cts +1 -1
  100. package/dist/diagrams/fishbone/index.d.ts +1 -1
  101. package/dist/diagrams/fishbone/index.js +2 -2
  102. package/dist/diagrams/flowchart/index.cjs +8 -8
  103. package/dist/diagrams/flowchart/index.d.cts +2 -2
  104. package/dist/diagrams/flowchart/index.d.ts +2 -2
  105. package/dist/diagrams/flowchart/index.js +2 -2
  106. package/dist/diagrams/genogram/index.cjs +9 -9
  107. package/dist/diagrams/genogram/index.d.cts +1 -1
  108. package/dist/diagrams/genogram/index.d.ts +1 -1
  109. package/dist/diagrams/genogram/index.js +2 -2
  110. package/dist/diagrams/ladder/index.cjs +6 -6
  111. package/dist/diagrams/ladder/index.d.cts +1 -1
  112. package/dist/diagrams/ladder/index.d.ts +1 -1
  113. package/dist/diagrams/ladder/index.js +2 -2
  114. package/dist/diagrams/logic/index.cjs +6 -6
  115. package/dist/diagrams/logic/index.d.cts +1 -1
  116. package/dist/diagrams/logic/index.d.ts +1 -1
  117. package/dist/diagrams/logic/index.js +2 -2
  118. package/dist/diagrams/orgchart/index.cjs +7 -7
  119. package/dist/diagrams/orgchart/index.d.cts +1 -1
  120. package/dist/diagrams/orgchart/index.d.ts +1 -1
  121. package/dist/diagrams/orgchart/index.js +2 -2
  122. package/dist/diagrams/pedigree/index.cjs +7 -7
  123. package/dist/diagrams/pedigree/index.d.cts +1 -1
  124. package/dist/diagrams/pedigree/index.d.ts +1 -1
  125. package/dist/diagrams/pedigree/index.js +2 -2
  126. package/dist/diagrams/phylo/index.cjs +7 -7
  127. package/dist/diagrams/phylo/index.d.cts +1 -1
  128. package/dist/diagrams/phylo/index.d.ts +1 -1
  129. package/dist/diagrams/phylo/index.js +2 -2
  130. package/dist/diagrams/sld/index.cjs +6 -6
  131. package/dist/diagrams/sld/index.d.cts +1 -1
  132. package/dist/diagrams/sld/index.d.ts +1 -1
  133. package/dist/diagrams/sld/index.js +2 -2
  134. package/dist/diagrams/sociogram/index.cjs +6 -6
  135. package/dist/diagrams/sociogram/index.d.cts +1 -1
  136. package/dist/diagrams/sociogram/index.d.ts +1 -1
  137. package/dist/diagrams/sociogram/index.js +2 -2
  138. package/dist/diagrams/timing/index.cjs +4 -4
  139. package/dist/diagrams/timing/index.d.cts +1 -1
  140. package/dist/diagrams/timing/index.d.ts +1 -1
  141. package/dist/diagrams/timing/index.js +1 -1
  142. package/dist/diagrams/venn/index.cjs +9 -9
  143. package/dist/diagrams/venn/index.d.cts +1 -1
  144. package/dist/diagrams/venn/index.d.ts +1 -1
  145. package/dist/diagrams/venn/index.js +2 -2
  146. package/dist/export.cjs +87 -0
  147. package/dist/export.cjs.map +1 -0
  148. package/dist/export.d.cts +38 -0
  149. package/dist/export.d.ts +38 -0
  150. package/dist/export.js +83 -0
  151. package/dist/export.js.map +1 -0
  152. package/dist/{index-BXefHVce.d.cts → index-SSGpCggE.d.cts} +52 -3
  153. package/dist/{index-BSlza1YY.d.ts → index-ga04CTBI.d.ts} +52 -3
  154. package/dist/index.cjs +65 -1948
  155. package/dist/index.cjs.map +1 -1
  156. package/dist/index.d.cts +7 -12
  157. package/dist/index.d.ts +7 -12
  158. package/dist/index.js +19 -1942
  159. package/dist/index.js.map +1 -1
  160. package/dist/react.cjs +56 -0
  161. package/dist/react.cjs.map +1 -0
  162. package/dist/react.d.cts +24 -0
  163. package/dist/react.d.ts +24 -0
  164. package/dist/react.js +54 -0
  165. package/dist/react.js.map +1 -0
  166. package/dist/{types-DqfcYkcY.d.ts → types-BcPhMdHd.d.cts} +6 -2
  167. package/dist/{types-DqfcYkcY.d.cts → types-BcPhMdHd.d.ts} +6 -2
  168. package/package.json +31 -2
  169. package/dist/chunk-2MQWZ2XY.cjs.map +0 -1
  170. package/dist/chunk-2UKC6ZCY.cjs.map +0 -1
  171. package/dist/chunk-3FTUWAXK.cjs.map +0 -1
  172. package/dist/chunk-7FZSPKX3.cjs.map +0 -1
  173. package/dist/chunk-ADOXGKAK.js +0 -1251
  174. package/dist/chunk-ADOXGKAK.js.map +0 -1
  175. package/dist/chunk-CZRM7LT7.js.map +0 -1
  176. package/dist/chunk-D4JTSPOL.js.map +0 -1
  177. package/dist/chunk-DS47NTWZ.cjs.map +0 -1
  178. package/dist/chunk-FDLZEKEB.js.map +0 -1
  179. package/dist/chunk-FGPTCDUT.cjs.map +0 -1
  180. package/dist/chunk-HGHWCB6K.js.map +0 -1
  181. package/dist/chunk-IX554O5K.js.map +0 -1
  182. package/dist/chunk-MDICUK6F.cjs +0 -1258
  183. package/dist/chunk-MDICUK6F.cjs.map +0 -1
  184. package/dist/chunk-N7KOXOMX.cjs.map +0 -1
  185. package/dist/chunk-NYCIK4SU.cjs.map +0 -1
  186. package/dist/chunk-PDPHRZZT.js.map +0 -1
  187. package/dist/chunk-ROFLJ74T.js.map +0 -1
  188. package/dist/chunk-S6BK5DB6.cjs.map +0 -1
  189. package/dist/chunk-U5GGE6PJ.js.map +0 -1
  190. package/dist/chunk-V6WO7RK7.cjs.map +0 -1
  191. package/dist/chunk-VFQCTXOX.js.map +0 -1
  192. package/dist/chunk-XQ52ICHU.cjs.map +0 -1
  193. package/dist/chunk-XX4BKS7Y.js.map +0 -1
  194. package/dist/chunk-XXU36667.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/ecomap/parser.ts","../src/diagrams/ecomap/layout.ts","../src/diagrams/ecomap/renderer.ts","../src/diagrams/ecomap/index.ts"],"names":["text"],"mappings":"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","file":"chunk-U5GGE6PJ.js","sourcesContent":["import type {\n DiagramAST,\n Individual,\n Relationship,\n RelationshipType,\n Sex,\n} from \"../../core/types\";\n\n// ─── Error ─────────────────────────────────────────────────\n\nexport class EcomapParseError extends Error {\n constructor(message: string, public line: number) {\n super(`Line ${line}: ${message}`);\n this.name = \"EcomapParseError\";\n }\n}\n\n// ─── Connection operator table ─────────────────────────────\n\ninterface ConnectionOpInfo {\n relType: RelationshipType;\n energyFlow?: \"from\" | \"to\" | \"mutual\";\n}\n\nconst CONNECTION_OPS: Record<string, ConnectionOpInfo> = {\n \"===\": { relType: \"strong\" },\n \"==\": { relType: \"moderate\" },\n \"---\": { relType: \"normal\" },\n \"- -\": { relType: \"weak\" },\n \"~~~\": { relType: \"stressful\" },\n \"~=~\": { relType: \"stressful-strong\" },\n \"~x~\": { relType: \"conflictual\" },\n \"-/-\": { relType: \"broken\" },\n \"===>\": { relType: \"strong\", energyFlow: \"from\" },\n \"<===\": { relType: \"strong\", energyFlow: \"to\" },\n \"<=>\": { relType: \"moderate\", energyFlow: \"mutual\" },\n \"==>\": { relType: \"moderate\", energyFlow: \"from\" },\n \"<==\": { relType: \"moderate\", energyFlow: \"to\" },\n \"-->\": { relType: \"normal\", energyFlow: \"from\" },\n \"<--\": { relType: \"normal\", energyFlow: \"to\" },\n \"<->\": { relType: \"normal\", energyFlow: \"mutual\" },\n};\n\nconst OP_PATTERN =\n \"===>|<===|===|<=>|==>|<==|<->|-->|<--|~=~|~x~|~~~|-\\\\/-|---|==|- -\";\nconst CONNECTION_RE = new RegExp(\n `^([a-zA-Z][a-zA-Z0-9_-]*)\\\\s+(${OP_PATTERN})\\\\s+([a-zA-Z][a-zA-Z0-9_-]*)(.*)$`\n);\n\n// ─── Public API ────────────────────────────────────────────\n\nexport function parseEcomap(text: string): DiagramAST {\n const lines = text.split(\"\\n\");\n const individuals: Individual[] = [];\n const knownIds = new Set<string>();\n const relationships: Relationship[] = [];\n const metadata: Record<string, string> = {};\n let centerId: string | null = null;\n\n let i = 0;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n if (i >= lines.length) throw new EcomapParseError(\"Empty input\", 1);\n\n const header = lines[i].trim();\n const headerMatch = header.match(/^ecomap\\s*(?:\"([^\"]*)\")?$/i);\n if (!headerMatch)\n throw new EcomapParseError(\"Expected 'ecomap' header\", i + 1);\n if (headerMatch[1]) metadata.title = headerMatch[1];\n i++;\n\n while (i < lines.length) {\n const raw = lines[i];\n const trimmed = raw.trim();\n if (\n trimmed === \"\" ||\n trimmed.startsWith(\"#\") ||\n trimmed.startsWith(\"//\")\n ) {\n i++;\n continue;\n }\n\n // Center definition\n const centerMatch = trimmed.match(\n /^center:\\s*([a-zA-Z][a-zA-Z0-9_-]*)\\s*(\\[.*\\])?\\s*$/\n );\n if (centerMatch) {\n const id = centerMatch[1].toLowerCase();\n centerId = id;\n const props = centerMatch[2] ? parseProps(centerMatch[2]) : {};\n individuals.push(buildIndividual(id, props, true));\n knownIds.add(id);\n i++;\n // Skip indented family content under center\n const baseIndent = leadingSpaces(raw);\n while (i < lines.length) {\n if (lines[i].trim() === \"\") {\n i++;\n continue;\n }\n if (leadingSpaces(lines[i]) > baseIndent + 2) {\n i++;\n } else {\n break;\n }\n }\n continue;\n }\n\n // Connection\n const connMatch = trimmed.match(CONNECTION_RE);\n if (connMatch) {\n const fromRaw = connMatch[1].toLowerCase();\n const op = connMatch[2];\n const toRaw = connMatch[3].toLowerCase();\n const rest = connMatch[4]?.trim() ?? \"\";\n\n const opInfo = CONNECTION_OPS[op];\n if (!opInfo)\n throw new EcomapParseError(`Unknown operator '${op}'`, i + 1);\n\n let label: string | undefined;\n const lblMatch = rest.match(/\\[\\s*label:\\s*\"([^\"]*)\"\\s*\\]/);\n if (lblMatch) label = lblMatch[1];\n\n let from = fromRaw;\n let to = toRaw;\n let flow = opInfo.energyFlow;\n\n if (to === centerId && from !== centerId) {\n [from, to] = [to, from];\n if (flow === \"from\") flow = \"to\";\n else if (flow === \"to\") flow = \"from\";\n }\n\n relationships.push({\n type: opInfo.relType,\n from,\n to,\n label,\n energyFlow: flow,\n });\n i++;\n continue;\n }\n\n // System definition\n const sysMatch = trimmed.match(\n /^([a-zA-Z][a-zA-Z0-9_-]*)\\s*(\\[.*\\])?\\s*$/\n );\n if (sysMatch) {\n const id = sysMatch[1].toLowerCase();\n if (!knownIds.has(id)) {\n const props = sysMatch[2] ? parseProps(sysMatch[2]) : {};\n individuals.push(buildIndividual(id, props, false));\n knownIds.add(id);\n }\n i++;\n continue;\n }\n\n throw new EcomapParseError(`Unexpected: ${trimmed}`, i + 1);\n }\n\n return { type: \"ecomap\", individuals, relationships, metadata };\n}\n\n// ─── Helpers ───────────────────────────────────────────────\n\nfunction leadingSpaces(line: string): number {\n const m = line.match(/^(\\s*)/);\n return m ? m[1].length : 0;\n}\n\nfunction parseProps(bracketStr: string): Record<string, string> {\n const inner = bracketStr.slice(1, -1).trim();\n if (!inner) return {};\n const props: Record<string, string> = {};\n\n for (const part of splitCommas(inner)) {\n const t = part.trim();\n if (!t) continue;\n\n const kv = t.match(/^([\\w][\\w-]*)\\s*:\\s*(?:\"([^\"]*)\"|(\\S+))$/);\n if (kv) {\n props[kv[1]] = kv[2] ?? kv[3];\n continue;\n }\n\n if (t === \"male\" || t === \"female\" || t === \"unknown\") {\n props.sex = t;\n continue;\n }\n\n props[t] = \"true\";\n }\n return props;\n}\n\nfunction splitCommas(s: string): string[] {\n const parts: string[] = [];\n let cur = \"\";\n let inQ = false;\n for (const ch of s) {\n if (ch === '\"') {\n inQ = !inQ;\n cur += ch;\n } else if (ch === \",\" && !inQ) {\n parts.push(cur);\n cur = \"\";\n } else {\n cur += ch;\n }\n }\n if (cur) parts.push(cur);\n return parts;\n}\n\nfunction parseSex(s?: string): Sex {\n switch (s) {\n case \"male\":\n case \"female\":\n case \"unknown\":\n case \"other\":\n case \"nonbinary\":\n case \"intersex\":\n return s;\n default:\n return \"unknown\";\n }\n}\n\nfunction buildIndividual(\n id: string,\n props: Record<string, string>,\n isCenter: boolean\n): Individual {\n const properties: Record<string, string> = {};\n if (isCenter) properties.center = \"true\";\n if (props.category) properties.category = props.category;\n if (props.size) properties.size = props.size;\n if (props.importance) properties.importance = props.importance;\n if (props.sector) properties.sector = props.sector;\n\n return {\n id,\n label: props.label ?? id,\n sex: parseSex(props.sex),\n status: \"alive\",\n age: props.age ? parseInt(props.age, 10) : undefined,\n properties,\n };\n}\n","import type {\n DiagramAST,\n Individual,\n Relationship,\n LayoutConfig,\n LayoutResult,\n LayoutNode,\n LayoutEdge,\n} from \"../../core/types\";\n\n// ─── Constants ─────────────────────────────────────────────\n\nconst CENTER_R = 50;\nconst SYS_R = 30;\nconst SYS_R_LARGE = 40;\nconst SYS_R_SMALL = 20;\nconst PADDING = 40;\nconst LABEL_CLEARANCE = 60;\n\n// ─── Public API ────────────────────────────────────────────\n\nexport function layoutEcomap(\n ast: DiagramAST,\n _config: LayoutConfig\n): LayoutResult {\n const center = ast.individuals.find(\n (ind) => ind.properties?.center === \"true\"\n );\n if (!center) throw new Error(\"Ecomap requires a center element\");\n\n const systems = ast.individuals.filter(\n (ind) => ind.properties?.center !== \"true\"\n );\n const n = systems.length;\n\n if (n === 0) {\n const size = (CENTER_R + PADDING + LABEL_CLEARANCE) * 2;\n return {\n width: size,\n height: size,\n nodes: [\n {\n id: center.id,\n x: size / 2 - CENTER_R,\n y: size / 2 - CENTER_R,\n width: CENTER_R * 2,\n height: CENTER_R * 2,\n generation: 0,\n individual: center,\n },\n ],\n edges: [],\n };\n }\n\n const ringRadii = getRingRadii(n);\n const ringAssignment = assignToRings(\n center.id,\n systems,\n ast.relationships,\n ringRadii.length\n );\n const systemPositions = placeOnRings(systems, ringAssignment, ringRadii);\n\n const maxRing = ringRadii[ringRadii.length - 1] ?? 180;\n const canvasSize = (maxRing + SYS_R_LARGE + LABEL_CLEARANCE + PADDING) * 2;\n const cx = canvasSize / 2;\n const cy = canvasSize / 2;\n\n const nodes: LayoutNode[] = [];\n\n nodes.push({\n id: center.id,\n x: cx - CENTER_R,\n y: cy - CENTER_R,\n width: CENTER_R * 2,\n height: CENTER_R * 2,\n generation: 0,\n individual: center,\n });\n\n for (const sys of systems) {\n const pos = systemPositions.get(sys.id);\n if (!pos) continue;\n const r = getSystemRadius(sys);\n nodes.push({\n id: sys.id,\n x: cx + pos.x - r,\n y: cy + pos.y - r,\n width: r * 2,\n height: r * 2,\n generation: pos.ring + 1,\n individual: sys,\n });\n }\n\n const edges = computeEdges(nodes, ast.relationships);\n\n return { width: canvasSize, height: canvasSize, nodes, edges };\n}\n\n// ─── Ring configuration ────────────────────────────────────\n\nfunction getRingRadii(n: number): number[] {\n if (n === 0) return [];\n if (n <= 6) return [180];\n if (n <= 12) return [150, 270];\n return [140, 230, 320];\n}\n\nfunction assignToRings(\n _centerId: string,\n systems: Individual[],\n rels: Relationship[],\n ringCount: number\n): Map<string, number> {\n const relBySys = new Map<string, Relationship>();\n for (const r of rels) {\n const sysId =\n r.from === _centerId ? r.to : r.from === _centerId ? r.to : r.to;\n if (!relBySys.has(sysId)) relBySys.set(sysId, r);\n const otherId = r.from === _centerId ? r.to : r.from;\n if (!relBySys.has(otherId)) relBySys.set(otherId, r);\n }\n\n const result = new Map<string, number>();\n\n if (ringCount <= 1) {\n for (const s of systems) result.set(s.id, 0);\n return result;\n }\n\n for (const s of systems) {\n const rel = relBySys.get(s.id);\n if (!rel) {\n result.set(s.id, ringCount - 1);\n continue;\n }\n\n if (rel.type === \"strong\" || rel.type === \"stressful-strong\") {\n result.set(s.id, 0);\n } else if (rel.type === \"weak\" || rel.type === \"broken\") {\n result.set(s.id, ringCount - 1);\n } else {\n result.set(s.id, Math.min(1, ringCount - 1));\n }\n }\n\n return result;\n}\n\n// ─── Placement ─────────────────────────────────────────────\n\ninterface SysPos {\n x: number;\n y: number;\n ring: number;\n}\n\nfunction placeOnRings(\n systems: Individual[],\n ringAssignment: Map<string, number>,\n ringRadii: number[]\n): Map<string, SysPos> {\n const ringGroups = new Map<number, Individual[]>();\n for (const s of systems) {\n const ring = ringAssignment.get(s.id) ?? 0;\n const grp = ringGroups.get(ring) ?? [];\n grp.push(s);\n ringGroups.set(ring, grp);\n }\n\n const positions = new Map<string, SysPos>();\n\n for (const [ring, grp] of ringGroups) {\n const radius = ringRadii[ring] ?? ringRadii[ringRadii.length - 1] ?? 180;\n const n = grp.length;\n const startAngle = -Math.PI / 2;\n\n for (let idx = 0; idx < n; idx++) {\n const angle = startAngle + (2 * Math.PI * idx) / n;\n positions.set(grp[idx].id, {\n x: radius * Math.cos(angle),\n y: radius * Math.sin(angle),\n ring,\n });\n }\n }\n\n return positions;\n}\n\n// ─── Edges ─────────────────────────────────────────────────\n\nfunction computeEdges(\n nodes: LayoutNode[],\n rels: Relationship[]\n): LayoutEdge[] {\n const nodeMap = new Map<string, LayoutNode>();\n for (const n of nodes) nodeMap.set(n.id, n);\n\n const edges: LayoutEdge[] = [];\n\n for (const rel of rels) {\n const fromNode = nodeMap.get(rel.from);\n const toNode = nodeMap.get(rel.to);\n if (!fromNode || !toNode) continue;\n\n const fcx = fromNode.x + fromNode.width / 2;\n const fcy = fromNode.y + fromNode.height / 2;\n const tcx = toNode.x + toNode.width / 2;\n const tcy = toNode.y + toNode.height / 2;\n\n const dx = tcx - fcx;\n const dy = tcy - fcy;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < 1) continue;\n\n const ux = dx / dist;\n const uy = dy / dist;\n const fromR = fromNode.width / 2;\n const toR = toNode.width / 2;\n\n const x1 = fcx + ux * fromR;\n const y1 = fcy + uy * fromR;\n const x2 = tcx - ux * toR;\n const y2 = tcy - uy * toR;\n\n edges.push({\n from: rel.from,\n to: rel.to,\n relationship: rel,\n path: `M ${x1} ${y1} L ${x2} ${y2}`,\n });\n }\n\n return edges;\n}\n\n// ─── Helpers ───────────────────────────────────────────────\n\nfunction getSystemRadius(ind: Individual): number {\n const imp = ind.properties?.importance ?? ind.properties?.size;\n switch (imp) {\n case \"major\":\n case \"large\":\n return SYS_R_LARGE;\n case \"minor\":\n case \"small\":\n return SYS_R_SMALL;\n default:\n return SYS_R;\n }\n}\n","import type {\n LayoutResult,\n LayoutNode,\n LayoutEdge,\n RenderConfig,\n} from \"../../core/types\";\nimport { svgRoot, el, group, text, title, desc } from \"../../core/svg\";\nimport { cssCustomProperties, resolveBaseTheme, STROKE_WIDTH, type BaseTheme } from \"../../core/theme\";\n\n// ─── Category colors (Hartman standard) ────────────────────\n\nconst CATEGORY_COLORS: Record<string, string> = {\n family: \"#8D6E63\",\n friends: \"#42A5F5\",\n work: \"#66BB6A\",\n education: \"#FFA726\",\n health: \"#EF5350\",\n \"mental-health\": \"#AB47BC\",\n religion: \"#CCBB33\",\n recreation: \"#26C6DA\",\n legal: \"#78909C\",\n government: \"#8D6E63\",\n financial: \"#66BB6A\",\n community: \"#29B6F6\",\n cultural: \"#FFA726\",\n substance: \"#EF5350\",\n technology: \"#42A5F5\",\n pet: \"#8D6E63\",\n};\n\n// ─── Public API ────────────────────────────────────────────\n\nexport function renderEcomap(\n layout: LayoutResult,\n config: RenderConfig\n): string {\n const centerNode = layout.nodes.find(\n (n) => n.individual.properties?.center === \"true\"\n );\n const systemNodes = layout.nodes.filter(\n (n) => n.individual.properties?.center !== \"true\"\n );\n\n const t = resolveBaseTheme(config.theme);\n const defsStr = buildDefs(t);\n const styleStr = buildStyles(config, t);\n const connectionsStr = renderConnections(layout.edges);\n const centerStr = centerNode ? renderCenter(centerNode, config) : \"\";\n const systemsStr = renderSystems(systemNodes, config);\n const labelsStr = renderConnectionLabels(layout.edges, t);\n\n return svgRoot(\n {\n viewBox: `0 0 ${layout.width} ${layout.height}`,\n class: \"schematex-diagram schematex-ecomap\",\n width: layout.width,\n height: layout.height,\n },\n [\n title(\"Ecomap\"),\n desc(\n `Ecomap diagram with ${systemNodes.length} external systems`\n ),\n defsStr,\n styleStr,\n connectionsStr,\n centerStr,\n systemsStr,\n labelsStr,\n ]\n );\n}\n\n// ─── Defs ──────────────────────────────────────────────────\n\nfunction buildDefs(t: BaseTheme): string {\n const arrowMarker = el(\n \"marker\",\n {\n id: \"schematex-ecomap-eco-arrow\",\n viewBox: \"0 0 10 10\",\n refX: \"10\",\n refY: \"5\",\n markerWidth: \"8\",\n markerHeight: \"8\",\n orient: \"auto-start-reverse\",\n },\n [el(\"path\", { d: \"M 0 0 L 10 5 L 0 10 z\", fill: t.neutral })]\n );\n\n return el(\"defs\", {}, [arrowMarker]);\n}\n\n// ─── Styles ────────────────────────────────────────────────\n\nfunction buildStyles(config: RenderConfig, t: BaseTheme): string {\n let css = `\n.schematex-ecomap {${cssCustomProperties(t)}\n background: ${t.bg};\n}\n.schematex-ecomap-center-shape { fill: ${t.fill}; stroke: ${t.stroke}; stroke-width: ${STROKE_WIDTH.thick}; }\n.schematex-ecomap-center-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize + 2}px; text-anchor: middle; dominant-baseline: central; fill: ${t.text}; font-weight: 600; }\n.schematex-ecomap-system-shape { fill: ${t.fillMuted}; stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; }\n.schematex-ecomap-system-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize - 1}px; text-anchor: middle; fill: ${t.text}; }\n.schematex-ecomap-eco-line { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-parallel { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-weak { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 6,4; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-broken { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 3,8; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-line-stressful { stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; fill: none; stroke-linecap: round; }\n.schematex-ecomap-eco-conn-label { font-family: ${config.fontFamily}; font-size: ${config.fontSize - 2}px; text-anchor: middle; fill: ${t.textMuted}; }\n.schematex-ecomap-eco-arrow { fill: ${t.neutral}; }\n`;\n\n for (const [cat, color] of Object.entries(CATEGORY_COLORS)) {\n css += `.schematex-ecomap-system-${cat} .schematex-ecomap-system-shape { fill: ${color}18; stroke: ${color}; }\\n`;\n }\n\n return el(\"style\", {}, css);\n}\n\n// ─── Center ────────────────────────────────────────────────\n\nfunction renderCenter(node: LayoutNode, config: RenderConfig): string {\n const cx = node.x + node.width / 2;\n const cy = node.y + node.height / 2;\n const r = node.width / 2;\n const ind = node.individual;\n\n const label = ind.label !== ind.id ? ind.label : capitalize(ind.id);\n const elements: string[] = [\n el(\"circle\", {\n cx,\n cy,\n r,\n class: \"schematex-ecomap-center-shape\",\n }),\n text(\n {\n x: cx,\n y: cy,\n class: \"schematex-ecomap-center-label\",\n },\n label\n ),\n ];\n\n if (ind.age) {\n elements.push(\n text(\n {\n x: cx,\n y: cy + config.fontSize + 4,\n class: \"schematex-ecomap-center-label\",\n \"font-size\": `${config.fontSize}px`,\n \"font-weight\": \"normal\",\n },\n `Age ${ind.age}`\n )\n );\n }\n\n return group(\n { class: \"schematex-ecomap-center\", \"data-id\": ind.id },\n elements\n );\n}\n\n// ─── Systems ───────────────────────────────────────────────\n\nfunction renderSystems(\n nodes: LayoutNode[],\n config: RenderConfig\n): string {\n const elements: string[] = [];\n\n for (const node of nodes) {\n const cx = node.x + node.width / 2;\n const cy = node.y + node.height / 2;\n const r = node.width / 2;\n const ind = node.individual;\n const cat = ind.properties?.category ?? \"other\";\n const label = ind.label !== ind.id ? ind.label : capitalize(ind.id);\n\n const labelLines = wrapLabel(label, 12);\n const labelElements: string[] = [];\n const labelStartY = cy + r + config.fontSize + 2;\n\n for (let li = 0; li < labelLines.length; li++) {\n labelElements.push(\n text(\n {\n x: cx,\n y: labelStartY + li * (config.fontSize + 1),\n class: \"schematex-ecomap-system-label\",\n },\n labelLines[li]\n )\n );\n }\n\n elements.push(\n group(\n {\n class: `schematex-ecomap-system schematex-ecomap-system-${cat}`,\n \"data-system-id\": ind.id,\n },\n [\n el(\"circle\", {\n cx,\n cy,\n r,\n class: \"schematex-ecomap-system-shape\",\n }),\n ...labelElements,\n ]\n )\n );\n }\n\n return group({ class: \"schematex-ecomap-systems\" }, elements);\n}\n\n// ─── Connections ───────────────────────────────────────────\n\nfunction renderConnections(edges: LayoutEdge[]): string {\n const elements: string[] = [];\n\n for (const edge of edges) {\n const coords = extractLineCoords(edge.path);\n if (!coords) continue;\n\n const relType = edge.relationship.type;\n const flow = edge.relationship.energyFlow;\n const lineElements: string[] = [];\n\n const arrowAttrs = getArrowAttrs(flow);\n\n switch (relType) {\n case \"strong\":\n lineElements.push(\n ...parallelLines(coords, 3, 4, {\n class: \"schematex-ecomap-eco-line-parallel\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"moderate\":\n lineElements.push(\n ...parallelLines(coords, 2, 4, {\n class: \"schematex-ecomap-eco-line-parallel\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"weak\":\n lineElements.push(\n el(\"line\", {\n x1: coords.x1,\n y1: coords.y1,\n x2: coords.x2,\n y2: coords.y2,\n class: \"schematex-ecomap-eco-line-weak\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"stressful\":\n case \"stressful-strong\":\n lineElements.push(\n el(\"path\", {\n d: wavyPath(\n coords.x1,\n coords.y1,\n coords.x2,\n coords.y2,\n 8,\n 20\n ),\n class: \"schematex-ecomap-eco-line-stressful\",\n \"stroke-width\": relType === \"stressful-strong\" ? \"3\" : \"2\",\n ...arrowAttrs,\n })\n );\n break;\n\n case \"conflictual\":\n lineElements.push(\n el(\"path\", {\n d: wavyPath(\n coords.x1,\n coords.y1,\n coords.x2,\n coords.y2,\n 8,\n 20\n ),\n class: \"schematex-ecomap-eco-line-stressful\",\n ...arrowAttrs,\n })\n );\n lineElements.push(\n ...conflictMarks(coords)\n );\n break;\n\n case \"broken\":\n lineElements.push(\n el(\"line\", {\n x1: coords.x1,\n y1: coords.y1,\n x2: coords.x2,\n y2: coords.y2,\n class: \"schematex-ecomap-eco-line-broken\",\n ...arrowAttrs,\n })\n );\n break;\n\n default:\n lineElements.push(\n el(\"line\", {\n x1: coords.x1,\n y1: coords.y1,\n x2: coords.x2,\n y2: coords.y2,\n class: \"schematex-ecomap-eco-line\",\n ...arrowAttrs,\n })\n );\n break;\n }\n\n elements.push(\n group(\n {\n class: `schematex-ecomap-connection schematex-ecomap-connection-${relType}`,\n \"data-from\": edge.from,\n \"data-to\": edge.to,\n },\n lineElements\n )\n );\n }\n\n return group({ class: \"schematex-ecomap-connections\" }, elements);\n}\n\n// ─── Connection labels ─────────────────────────────────────\n\nfunction renderConnectionLabels(edges: LayoutEdge[], t: BaseTheme): string {\n const elements: string[] = [];\n\n for (const edge of edges) {\n if (!edge.relationship.label) continue;\n const coords = extractLineCoords(edge.path);\n if (!coords) continue;\n\n const mx = (coords.x1 + coords.x2) / 2;\n const my = (coords.y1 + coords.y2) / 2;\n\n elements.push(\n group({ class: \"schematex-ecomap-conn-label-group\" }, [\n el(\"rect\", {\n x: mx - 40,\n y: my - 8,\n width: 80,\n height: 16,\n rx: 3,\n fill: t.bg,\n \"fill-opacity\": \"0.85\",\n }),\n text(\n { x: mx, y: my + 4, class: \"schematex-ecomap-eco-conn-label\" },\n edge.relationship.label\n ),\n ])\n );\n }\n\n return group({ class: \"schematex-ecomap-connection-labels\" }, elements);\n}\n\n// ─── Line type helpers ─────────────────────────────────────\n\ninterface LineCoords {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nfunction extractLineCoords(pathData: string): LineCoords | null {\n const m = pathData.match(\n /M\\s*([\\d.-]+)\\s+([\\d.-]+)\\s*L\\s*([\\d.-]+)\\s+([\\d.-]+)/\n );\n if (!m) return null;\n return { x1: +m[1], y1: +m[2], x2: +m[3], y2: +m[4] };\n}\n\nfunction parallelLines(\n coords: LineCoords,\n count: number,\n gap: number,\n attrs: Record<string, string | number | undefined>\n): string[] {\n const { x1, y1, x2, y2 } = coords;\n const dx = x2 - x1;\n const dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n if (len < 1) return [];\n\n const nx = -dy / len;\n const ny = dx / len;\n\n const lines: string[] = [];\n const offsets =\n count === 2\n ? [-gap / 2, gap / 2]\n : count === 3\n ? [-gap, 0, gap]\n : [0];\n\n for (const off of offsets) {\n lines.push(\n el(\"line\", {\n x1: x1 + nx * off,\n y1: y1 + ny * off,\n x2: x2 + nx * off,\n y2: y2 + ny * off,\n ...attrs,\n })\n );\n }\n\n return lines;\n}\n\nfunction wavyPath(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n amplitude: number,\n wavelength: number\n): string {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n const segments = Math.max(4, Math.round(len / wavelength));\n\n const ux = dx / len;\n const uy = dy / len;\n const nx = -uy;\n const ny = ux;\n\n let d = `M ${x1} ${y1}`;\n for (let i = 0; i < segments; i++) {\n const t1 = (i + 0.5) / segments;\n const t2 = (i + 1) / segments;\n const sign = i % 2 === 0 ? 1 : -1;\n const cpx = x1 + dx * t1 + nx * amplitude * sign;\n const cpy = y1 + dy * t1 + ny * amplitude * sign;\n const ex = x1 + dx * t2;\n const ey = y1 + dy * t2;\n d += ` Q ${cpx} ${cpy} ${ex} ${ey}`;\n }\n\n return d;\n}\n\nfunction conflictMarks(coords: LineCoords): string[] {\n const mx = (coords.x1 + coords.x2) / 2;\n const my = (coords.y1 + coords.y2) / 2;\n const dx = coords.x2 - coords.x1;\n const dy = coords.y2 - coords.y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n if (len < 1) return [];\n\n const nx = -dy / len;\n const ny = dx / len;\n const markLen = 6;\n\n return [\n el(\"line\", {\n x1: mx - 3 + nx * markLen,\n y1: my - 3 + ny * markLen,\n x2: mx - 3 - nx * markLen,\n y2: my - 3 - ny * markLen,\n class: \"schematex-ecomap-eco-line\",\n \"stroke-width\": \"2\",\n }),\n el(\"line\", {\n x1: mx + 3 + nx * markLen,\n y1: my + 3 + ny * markLen,\n x2: mx + 3 - nx * markLen,\n y2: my + 3 - ny * markLen,\n class: \"schematex-ecomap-eco-line\",\n \"stroke-width\": \"2\",\n }),\n ];\n}\n\nfunction getArrowAttrs(\n flow?: \"from\" | \"to\" | \"mutual\" | \"none\"\n): Record<string, string> {\n if (!flow || flow === \"none\") return {};\n switch (flow) {\n case \"from\":\n return { \"marker-end\": \"url(#schematex-ecomap-eco-arrow)\" };\n case \"to\":\n return { \"marker-start\": \"url(#schematex-ecomap-eco-arrow)\" };\n case \"mutual\":\n return {\n \"marker-start\": \"url(#schematex-ecomap-eco-arrow)\",\n \"marker-end\": \"url(#schematex-ecomap-eco-arrow)\",\n };\n default:\n return {};\n }\n}\n\n// ─── Text helpers ──────────────────────────────────────────\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction wrapLabel(label: string, maxChars: number): string[] {\n if (label.length <= maxChars) return [label];\n const words = label.split(/\\s+/);\n const lines: string[] = [];\n let current = \"\";\n\n for (const word of words) {\n if (current && current.length + word.length + 1 > maxChars) {\n lines.push(current);\n current = word;\n } else {\n current = current ? current + \" \" + word : word;\n }\n }\n if (current) lines.push(current);\n return lines;\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport { parseEcomap } from \"./parser\";\nimport { layoutEcomap } from \"./layout\";\nimport { renderEcomap } from \"./renderer\";\n\nexport { parseEcomap, EcomapParseError } from \"./parser\";\nexport { layoutEcomap } from \"./layout\";\nexport { renderEcomap } from \"./renderer\";\n\nexport const ecomap: DiagramPlugin = {\n type: \"ecomap\",\n\n detect(text: string): boolean {\n const firstLine = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return firstLine === \"ecomap\" || firstLine.startsWith(\"ecomap \");\n },\n\n render(text: string, config?: RenderConfig): string {\n const ast = parseEcomap(text);\n const layoutConfig = {\n nodeSpacingX: 80,\n nodeSpacingY: 100,\n nodeWidth: 40,\n nodeHeight: 40,\n };\n const layout = layoutEcomap(ast, layoutConfig);\n const renderConfig: RenderConfig = {\n fontFamily: config?.fontFamily ?? \"system-ui, -apple-system, sans-serif\",\n fontSize: config?.fontSize ?? 12,\n theme: config?.theme ?? \"default\",\n padding: config?.padding ?? 20,\n };\n return renderEcomap(layout, renderConfig);\n },\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/entity/parser.ts","../src/diagrams/entity/layout.ts","../src/diagrams/entity/renderer.ts","../src/diagrams/entity/index.ts"],"names":["text","title","path","textHalf","rect","polygon","el","circle","group","resolveBaseTheme","desc","defs","svgRoot","escapeXml"],"mappings":"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","file":"chunk-V6WO7RK7.cjs","sourcesContent":["import type {\n EntityAST,\n EntityNode,\n EntityType,\n EntityEdge,\n EntityEdgeOp,\n JurisdictionDef,\n ClusterDef,\n} from \"../../core/types\";\n\nexport class EntityParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"EntityParseError\";\n }\n}\n\nconst ENTITY_TYPE_ALIAS: Record<string, EntityType> = {\n corp: \"corp\",\n corporation: \"corp\",\n inc: \"corp\",\n llc: \"llc\",\n llp: \"llc\",\n gmbh: \"llc\",\n bv: \"llc\",\n lp: \"lp\",\n lllp: \"lp\",\n fund: \"lp\",\n trust: \"trust\",\n individual: \"individual\",\n person: \"individual\",\n foundation: \"foundation\",\n npo: \"foundation\",\n disregarded: \"disregarded\",\n branch: \"disregarded\",\n pool: \"pool\",\n placeholder: \"placeholder\",\n tbf: \"placeholder\",\n};\n\nfunction stripComment(s: string): string {\n let out = \"\";\n let inQuote = false;\n for (const ch of s) {\n if (ch === '\"') inQuote = !inQuote;\n if (ch === \"#\" && !inQuote) break;\n out += ch;\n }\n return out;\n}\n\nfunction stripQuotes(v: string): string {\n const t = v.trim();\n if (t.length >= 2 && t.startsWith('\"') && t.endsWith('\"')) return t.slice(1, -1);\n return t;\n}\n\n/** Split by top-level commas (respecting quotes and bracket nesting) */\nfunction splitTopLevelCommas(inside: string): string[] {\n const parts: string[] = [];\n let cur = \"\";\n let inQuote = false;\n let depth = 0;\n for (const ch of inside) {\n if (ch === '\"') inQuote = !inQuote;\n if (!inQuote) {\n if (ch === \"[\") depth++;\n else if (ch === \"]\") depth--;\n }\n if (ch === \",\" && !inQuote && depth === 0) {\n parts.push(cur);\n cur = \"\";\n } else {\n cur += ch;\n }\n }\n if (cur.trim()) parts.push(cur);\n return parts;\n}\n\nfunction parseProps(inside: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const p of splitTopLevelCommas(inside)) {\n const s = p.trim();\n if (!s) continue;\n const colon = s.indexOf(\":\");\n if (colon < 0) throw new EntityParseError(`Invalid property \"${s}\" (missing \":\")`);\n const k = s.slice(0, colon).trim().toLowerCase();\n const v = s.slice(colon + 1).trim();\n out[k] = v;\n }\n return out;\n}\n\nfunction parseIdList(v: string): string[] {\n const t = v.trim();\n const inner = t.startsWith(\"[\") && t.endsWith(\"]\") ? t.slice(1, -1) : t;\n return inner\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/** Join lines so that a bracketed attribute block spans a single logical line. */\nfunction joinBrackets(lines: string[]): string[] {\n const out: string[] = [];\n let buf = \"\";\n let depth = 0;\n for (const raw of lines) {\n const line = stripComment(raw);\n if (!line.trim() && depth === 0) {\n if (buf) {\n out.push(buf);\n buf = \"\";\n }\n out.push(\"\");\n continue;\n }\n for (const ch of line) {\n if (ch === \"[\") depth++;\n else if (ch === \"]\") depth = Math.max(0, depth - 1);\n }\n buf = buf ? buf + \" \" + line.trim() : line;\n if (depth === 0) {\n out.push(buf);\n buf = \"\";\n }\n }\n if (buf) out.push(buf);\n return out;\n}\n\nconst EDGE_OPS: Array<{ token: string; op: EntityEdgeOp }> = [\n // Order matters: longer tokens first\n { token: \"==>\", op: \"voting\" },\n { token: \"-.->\", op: \"pool\" },\n { token: \"-~->\", op: \"license\" },\n { token: \"-->\", op: \"distribution\" },\n { token: \"->\", op: \"ownership\" },\n];\n\nfunction matchEdgeOp(line: string): { op: EntityEdgeOp; idx: number; len: number } | null {\n for (const { token, op } of EDGE_OPS) {\n // Find an instance flanked by non-alphanum (so \"->\" inside quoted label is skipped later)\n const idx = findEdgeToken(line, token);\n if (idx >= 0) return { op, idx, len: token.length };\n }\n return null;\n}\n\nfunction findEdgeToken(line: string, token: string): number {\n let inQuote = false;\n let depth = 0;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"') inQuote = !inQuote;\n if (!inQuote) {\n if (ch === \"[\") depth++;\n else if (ch === \"]\") depth = Math.max(0, depth - 1);\n }\n if (!inQuote && depth === 0 && line.startsWith(token, i)) {\n return i;\n }\n }\n return -1;\n}\n\nexport function parseEntityDSL(text: string): EntityAST {\n const rawLines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n const lines = joinBrackets(rawLines);\n\n let title: string | undefined;\n const entities: EntityNode[] = [];\n const entityMap = new Map<string, EntityNode>();\n const edges: EntityEdge[] = [];\n const jurisdictions: JurisdictionDef[] = [];\n const jurisdictionMap = new Map<string, JurisdictionDef>();\n const clusters: ClusterDef[] = [];\n\n let clusterCounter = 0;\n\n for (const raw of lines) {\n const line = raw.trim();\n if (!line) continue;\n\n // Header: entity-structure \"title\" or entity-structure: \"title\"\n if (/^entity-structure\\b/i.test(line)) {\n const m = line.match(/\"([^\"]*)\"/);\n if (m) title = m[1];\n continue;\n }\n\n // jurisdiction CODE \"name\" [color: \"...\"]\n const jurMatch = line.match(\n /^jurisdiction\\s+([A-Za-z]{2,3})\\s+\"([^\"]*)\"(?:\\s*\\[([^\\]]*)\\])?\\s*$/i\n );\n if (jurMatch) {\n const code = jurMatch[1].toUpperCase();\n const name = jurMatch[2];\n const props = jurMatch[3] ? parseProps(jurMatch[3]) : {};\n const def: JurisdictionDef = { code, name };\n if (props.color) def.color = stripQuotes(props.color);\n jurisdictions.push(def);\n jurisdictionMap.set(code, def);\n continue;\n }\n\n // cluster \"name\" [members: [ids], color: \"...\"]\n const clusterMatch = line.match(/^cluster\\s+\"([^\"]*)\"(?:\\s*\\[([^\\]]*)\\])?\\s*$/i);\n if (clusterMatch) {\n const label = clusterMatch[1];\n const props = clusterMatch[2] ? parseProps(clusterMatch[2]) : {};\n const def: ClusterDef = {\n id: `cluster-${++clusterCounter}`,\n label,\n members: props.members ? parseIdList(props.members) : [],\n };\n if (props.color) def.color = stripQuotes(props.color);\n clusters.push(def);\n continue;\n }\n\n // entity id \"Name\" type[@jurisdiction] [props]\n const entityMatch = line.match(\n /^entity\\s+([A-Za-z][A-Za-z0-9_-]*)\\s+\"([^\"]*)\"\\s+([a-zA-Z]+)(?:@([A-Za-z]{2,3}))?(?:\\s*\\[([^\\]]*)\\])?\\s*$/\n );\n if (entityMatch) {\n const id = entityMatch[1];\n const name = entityMatch[2];\n const typeStr = entityMatch[3].toLowerCase();\n const jurisdictionCode = entityMatch[4]?.toUpperCase();\n const propsStr = entityMatch[5];\n const entityType = ENTITY_TYPE_ALIAS[typeStr];\n if (!entityType) {\n throw new EntityParseError(`Unknown entity type \"${typeStr}\" for \"${id}\"`);\n }\n if (entityMap.has(id)) {\n throw new EntityParseError(`Duplicate entity id \"${id}\"`);\n }\n const node: EntityNode = { id, name, entityType };\n if (jurisdictionCode) node.jurisdiction = jurisdictionCode;\n if (propsStr) {\n const props = parseProps(propsStr);\n if (props.status) node.status = stripQuotes(props.status) as EntityNode[\"status\"];\n if (props.tax) node.taxClass = stripQuotes(props.tax);\n if (props.role) node.role = stripQuotes(props.role);\n if (props.note) node.note = stripQuotes(props.note);\n if (props.est) node.formationDate = stripQuotes(props.est);\n // Any other keys → properties\n const reserved = new Set([\"status\", \"tax\", \"role\", \"note\", \"est\"]);\n const extras: Record<string, string> = {};\n for (const k of Object.keys(props)) {\n if (!reserved.has(k)) extras[k] = stripQuotes(props[k]);\n }\n if (Object.keys(extras).length) node.properties = extras;\n }\n entities.push(node);\n entityMap.set(id, node);\n continue;\n }\n\n // edge: from <op> to [ : percentage ] [props]\n const edgeInfo = matchEdgeOp(line);\n if (edgeInfo) {\n const left = line.slice(0, edgeInfo.idx).trim();\n const rest = line.slice(edgeInfo.idx + edgeInfo.len).trim();\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(left)) {\n throw new EntityParseError(`Invalid edge source on line: ${line}`);\n }\n // rest: \"target [: pct] [props]\" OR \"target [props]\"\n const restMatch = rest.match(\n /^([A-Za-z][A-Za-z0-9_-]*)(?:\\s*:\\s*([^\\[]+?))?(?:\\s*\\[([^\\]]*)\\])?\\s*$/\n );\n if (!restMatch) {\n throw new EntityParseError(`Cannot parse edge: ${line}`);\n }\n const to = restMatch[1];\n const pct = restMatch[2]?.trim();\n const propsStr = restMatch[3];\n const edge: EntityEdge = { from: left, to, op: edgeInfo.op };\n if (pct) edge.percentage = pct;\n if (propsStr) {\n const props = parseProps(propsStr);\n if (props.class) edge.shareClass = stripQuotes(props.class);\n if (props.label) edge.label = stripQuotes(props.label);\n }\n edges.push(edge);\n continue;\n }\n\n throw new EntityParseError(`Cannot parse line: ${line}`);\n }\n\n // Validate edges reference known entities\n for (const e of edges) {\n if (!entityMap.has(e.from)) {\n throw new EntityParseError(`Edge references unknown entity \"${e.from}\"`);\n }\n if (!entityMap.has(e.to)) {\n throw new EntityParseError(`Edge references unknown entity \"${e.to}\"`);\n }\n }\n\n if (entities.length === 0) {\n throw new EntityParseError(\"Entity structure diagram has no entities\");\n }\n\n return {\n type: \"entity\",\n title,\n entities,\n edges,\n jurisdictions,\n clusters,\n };\n}\n","import type { EntityAST, EntityNode, EntityEdge, EntityType } from \"../../core/types\";\n\n/**\n * Tier-based top-down layout for entity structure diagrams.\n *\n * - Tier assigned via longest-path from sources (relaxation)\n * - Within-tier x placed by DFS declaration order\n * - Non-bus parents re-centered over children bottom-up\n * - Edges routed orthogonally (down → across → down)\n */\n\nexport interface EntityLayoutNode {\n node: EntityNode;\n x: number; // center x\n y: number; // center y\n tier: number;\n width: number;\n height: number;\n /** Top-center anchor for edge end */\n topY: number;\n bottomY: number;\n}\n\nexport interface EntityLayoutEdge {\n edge: EntityEdge;\n path: string;\n /** Label anchor (horizontal mid of the branch segment) */\n labelX: number;\n labelY: number;\n}\n\nexport interface EntityLayoutCluster {\n id: string;\n label: string;\n color?: string;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface EntityLayoutResult {\n width: number;\n height: number;\n nodes: EntityLayoutNode[];\n nodeById: Map<string, EntityLayoutNode>;\n edges: EntityLayoutEdge[];\n clusters: EntityLayoutCluster[];\n}\n\nconst TIER_GAP = 170;\nconst H_GAP = 70;\nconst PADDING = 40;\nconst CLUSTER_PADDING = 26;\nconst CLUSTER_V_GAP = 16;\n\nexport function geometryFor(type: EntityType): { width: number; height: number } {\n switch (type) {\n case \"trust\":\n return { width: 200, height: 80 }; // ellipse bbox\n case \"individual\":\n return { width: 80, height: 80 }; // circle bbox; label rendered below\n case \"foundation\":\n return { width: 150, height: 80 };\n case \"pool\":\n case \"disregarded\":\n case \"placeholder\":\n case \"corp\":\n case \"llc\":\n case \"lp\":\n default:\n return { width: 170, height: 62 };\n }\n}\n\nfunction computeTiers(ast: EntityAST): Map<string, number> {\n const inEdges = new Map<string, EntityEdge[]>();\n const outEdges = new Map<string, EntityEdge[]>();\n for (const n of ast.entities) {\n inEdges.set(n.id, []);\n outEdges.set(n.id, []);\n }\n for (const e of ast.edges) {\n inEdges.get(e.to)?.push(e);\n outEdges.get(e.from)?.push(e);\n }\n\n // Only ownership-style edges define hierarchy. Lateral relationships\n // (license, distribution, management) should NOT force descendants.\n const isHierarchy = (e: EntityEdge): boolean =>\n e.op === \"ownership\" || e.op === \"voting\" || e.op === \"pool\";\n\n const tiers = new Map<string, number>();\n // Seed: entities with no hierarchical in-edges → tier 0\n for (const n of ast.entities) {\n const hierIn = (inEdges.get(n.id) ?? []).filter(isHierarchy);\n if (hierIn.length === 0) tiers.set(n.id, 0);\n }\n\n const maxIter = ast.entities.length + 4;\n for (let iter = 0; iter < maxIter; iter++) {\n let changed = false;\n for (const e of ast.edges) {\n if (!isHierarchy(e)) continue;\n const fromT = tiers.get(e.from);\n if (fromT === undefined) continue;\n const want = fromT + 1;\n const cur = tiers.get(e.to);\n if (cur === undefined || want > cur) {\n tiers.set(e.to, want);\n changed = true;\n }\n }\n if (!changed) break;\n }\n\n // Non-hierarchical targets: place at same tier as source if not already set\n for (const e of ast.edges) {\n if (isHierarchy(e)) continue;\n if (!tiers.has(e.to)) {\n const src = tiers.get(e.from);\n if (src !== undefined) tiers.set(e.to, src);\n }\n if (!tiers.has(e.from)) {\n const dst = tiers.get(e.to);\n if (dst !== undefined) tiers.set(e.from, dst);\n }\n }\n // Any orphans → tier 0\n for (const n of ast.entities) {\n if (!tiers.has(n.id)) tiers.set(n.id, 0);\n }\n return tiers;\n}\n\nexport function layoutEntity(ast: EntityAST): EntityLayoutResult {\n const tiers = computeTiers(ast);\n const maxTier = Math.max(0, ...Array.from(tiers.values()));\n\n // Group by tier, order by declaration\n const byTier = new Map<number, EntityNode[]>();\n for (const n of ast.entities) {\n const t = tiers.get(n.id) ?? 0;\n if (!byTier.has(t)) byTier.set(t, []);\n byTier.get(t)!.push(n);\n }\n\n // Build layout nodes\n const layoutNodes: EntityLayoutNode[] = [];\n const byId = new Map<string, EntityLayoutNode>();\n for (const n of ast.entities) {\n const g = geometryFor(n.entityType);\n const t = tiers.get(n.id) ?? 0;\n const ln: EntityLayoutNode = {\n node: n,\n x: 0,\n y: PADDING + t * TIER_GAP + g.height / 2,\n tier: t,\n width: g.width,\n height: g.height,\n topY: 0,\n bottomY: 0,\n };\n ln.topY = ln.y - g.height / 2;\n ln.bottomY = ln.y + g.height / 2;\n layoutNodes.push(ln);\n byId.set(n.id, ln);\n }\n\n // Assign sequential X per tier (declaration order)\n for (let t = 0; t <= maxTier; t++) {\n const nodes = byTier.get(t) ?? [];\n let cx = PADDING;\n for (const n of nodes) {\n const ln = byId.get(n.id)!;\n cx += ln.width / 2;\n ln.x = cx;\n cx += ln.width / 2 + H_GAP;\n }\n }\n\n // Parent/child maps for hierarchy only\n const children = new Map<string, string[]>();\n const parents = new Map<string, string[]>();\n for (const n of ast.entities) {\n children.set(n.id, []);\n parents.set(n.id, []);\n }\n for (const e of ast.edges) {\n if (e.op === \"ownership\" || e.op === \"voting\" || e.op === \"pool\") {\n children.get(e.from)?.push(e.to);\n parents.get(e.to)?.push(e.from);\n }\n }\n\n // Center parents over their children bottom-up\n for (let iter = 0; iter < 4; iter++) {\n for (let t = maxTier - 1; t >= 0; t--) {\n const tierNodes = byTier.get(t) ?? [];\n for (const n of tierNodes) {\n const ln = byId.get(n.id)!;\n const childIds = children.get(n.id) ?? [];\n if (childIds.length === 0) continue;\n if (childIds.length === 1) {\n // Cap-table convergence: if the only child has multiple same-tier parents,\n // spread parents around the child's x rather than collapsing them.\n const child = byId.get(childIds[0]);\n if (!child) continue;\n const siblingParents = (parents.get(child.node.id) ?? [])\n .map((pid) => byId.get(pid))\n .filter((p): p is EntityLayoutNode => !!p && p.tier === t);\n if (siblingParents.length > 1) {\n siblingParents.sort(\n (a, b) =>\n (byTier.get(t) ?? []).indexOf(a.node) -\n (byTier.get(t) ?? []).indexOf(b.node)\n );\n const totalWidth = siblingParents.reduce(\n (sum, p) => sum + effectiveHalfWidth(p) * 2,\n 0\n );\n const spread = Math.max(\n H_GAP + (effectiveHalfWidth(ln) + effectiveHalfWidth(siblingParents[0])) / 1,\n totalWidth / Math.max(1, siblingParents.length - 1)\n );\n const idx = siblingParents.indexOf(ln);\n const n2 = siblingParents.length;\n ln.x = child.x + (idx - (n2 - 1) / 2) * spread;\n } else {\n ln.x = child.x;\n }\n continue;\n }\n const xs = childIds\n .map((c) => byId.get(c)?.x)\n .filter((v): v is number => v !== undefined);\n if (xs.length > 0) {\n ln.x = (Math.min(...xs) + Math.max(...xs)) / 2;\n }\n }\n }\n\n // Center child over multiple parents (cap table convergence)\n for (let t = 1; t <= maxTier; t++) {\n const tierNodes = byTier.get(t) ?? [];\n for (const n of tierNodes) {\n const ln = byId.get(n.id)!;\n const parentIds = parents.get(n.id) ?? [];\n if (parentIds.length < 2) continue;\n const xs = parentIds\n .map((p) => byId.get(p)?.x)\n .filter((v): v is number => v !== undefined);\n if (xs.length > 0) {\n ln.x = (Math.min(...xs) + Math.max(...xs)) / 2;\n }\n }\n }\n\n // Resolve within-tier overlaps (preserve declaration order, label-aware)\n for (let t = 0; t <= maxTier; t++) {\n const tierNodes = (byTier.get(t) ?? [])\n .map((n) => byId.get(n.id)!)\n .sort((a, b) => a.x - b.x);\n for (let i = 1; i < tierNodes.length; i++) {\n const prev = tierNodes[i - 1];\n const cur = tierNodes[i];\n const gap = effectiveHalfWidth(prev) + effectiveHalfWidth(cur) + H_GAP;\n if (cur.x - prev.x < gap) cur.x = prev.x + gap;\n }\n }\n }\n\n // Shift so leftmost content sits at PADDING\n let minLeft = Infinity;\n for (const ln of layoutNodes) {\n const left = ln.x - ln.width / 2;\n if (left < minLeft) minLeft = left;\n }\n const shift = PADDING - minLeft;\n if (Math.abs(shift) > 0.5) {\n for (const ln of layoutNodes) ln.x += shift;\n }\n\n // Build edges with orthogonal routing.\n //\n // Label placement strategy for hierarchical (down) edges:\n // - fan-in (child has >1 parents, e.g. cap-table): label on child-side\n // vertical stub, just above child.topY. Owner-share reads naturally\n // as \"X% of [child]\".\n // - fan-out (parent has >1 children, e.g. holdco → subs): label on\n // parent-side vertical stub, just below parent.bottomY.\n // - 1:1 straight drop: label offset to the side of the vertical line.\n // - otherwise (branching both sides): label at midpoint of parent stub.\n // This avoids stacking multiple labels on the shared horizontal bar.\n const edges: EntityLayoutEdge[] = [];\n for (const e of ast.edges) {\n const from = byId.get(e.from);\n const to = byId.get(e.to);\n if (!from || !to) continue;\n\n const sameTier = from.tier === to.tier;\n let path: string;\n let labelX: number;\n let labelY: number;\n\n if (sameTier) {\n const leftFirst = from.x < to.x;\n const sx = leftFirst ? from.x + from.width / 2 : from.x - from.width / 2;\n const ex = leftFirst ? to.x - to.width / 2 : to.x + to.width / 2;\n path = `M ${sx} ${from.y} L ${ex} ${to.y}`;\n labelX = (sx + ex) / 2;\n labelY = from.y - 6;\n } else {\n const sx = from.x;\n const sy = from.bottomY;\n const ex = to.x;\n const ey = to.topY;\n const straight = Math.abs(sx - ex) < 0.5;\n\n if (straight) {\n // No corners → midpoint of the vertical line.\n path = `M ${sx} ${sy} L ${ex} ${ey}`;\n labelX = sx;\n labelY = (sy + ey) / 2;\n } else {\n // L-path has two corners: (sx, midY) top and (ex, midY) bottom.\n // Each edge owns its corners uniquely, so placing the label at a\n // corner avoids stacking on the shared horizontal branch.\n const midY = (sy + ey) / 2;\n path = `M ${sx} ${sy} L ${sx} ${midY} L ${ex} ${midY} L ${ex} ${ey}`;\n\n const isHier =\n e.op === \"ownership\" || e.op === \"voting\" || e.op === \"pool\";\n const parentCount = isHier ? (parents.get(e.to) ?? []).length : 0;\n const fanIn = parentCount > 1;\n\n // fan-in (many parents → one child): top corner (parent side) is\n // unique per parent.\n // fan-out (one parent → many children): bottom corner (child side)\n // is unique per child.\n // 1:1 offset: bottom corner — reads naturally as \"X% of [child]\".\n if (fanIn) {\n labelX = sx;\n labelY = midY;\n } else {\n labelX = ex;\n labelY = midY;\n }\n }\n }\n\n edges.push({ edge: e, path, labelX, labelY });\n }\n\n // Build cluster rectangles (explicit members only, or auto by jurisdiction)\n const layoutClusters: EntityLayoutCluster[] = [];\n const usedIds = new Set<string>();\n\n const LABEL_ROW = 22;\n\n for (const c of ast.clusters) {\n const members = c.members\n .map((id) => byId.get(id))\n .filter((n): n is EntityLayoutNode => !!n);\n if (members.length === 0) continue;\n const bounds = boundingBox(members);\n layoutClusters.push({\n id: c.id,\n label: c.label,\n color: c.color,\n x: bounds.minX - CLUSTER_PADDING,\n y: bounds.minY - CLUSTER_PADDING - LABEL_ROW,\n width: bounds.maxX - bounds.minX + CLUSTER_PADDING * 2,\n height: bounds.maxY - bounds.minY + CLUSTER_PADDING * 2 + LABEL_ROW,\n });\n for (const m of members) usedIds.add(m.node.id);\n }\n\n // Auto-cluster by declared jurisdiction (only those not already in explicit cluster)\n for (const j of ast.jurisdictions) {\n const members = layoutNodes.filter(\n (n) => n.node.jurisdiction === j.code && !usedIds.has(n.node.id)\n );\n if (members.length === 0) continue;\n const bounds = boundingBox(members);\n layoutClusters.push({\n id: `jur-${j.code}`,\n label: j.name,\n color: j.color,\n x: bounds.minX - CLUSTER_PADDING,\n y: bounds.minY - CLUSTER_PADDING - LABEL_ROW,\n width: bounds.maxX - bounds.minX + CLUSTER_PADDING * 2,\n height: bounds.maxY - bounds.minY + CLUSTER_PADDING * 2 + LABEL_ROW,\n });\n for (const m of members) usedIds.add(m.node.id);\n }\n\n // Resolve cluster vertical overlaps on the same band — if two clusters at\n // different tiers overlap vertically, shrink the top one's bottom and push\n // the bottom one's top so their borders don't cross.\n for (let i = 0; i < layoutClusters.length; i++) {\n for (let k = i + 1; k < layoutClusters.length; k++) {\n const a = layoutClusters[i];\n const b = layoutClusters[k];\n const hOverlap = !(a.x + a.width < b.x || b.x + b.width < a.x);\n const vOverlap = !(a.y + a.height < b.y || b.y + b.height < a.y);\n if (!hOverlap || !vOverlap) continue;\n // Determine which is above\n const [top, bot] = a.y < b.y ? [a, b] : [b, a];\n const want = bot.y - CLUSTER_V_GAP;\n if (top.y + top.height > want) top.height = Math.max(20, want - top.y);\n }\n }\n\n // Compute canvas\n let maxX = 0;\n let maxY = 0;\n for (const ln of layoutNodes) {\n const right = ln.x + ln.width / 2;\n const bottom = ln.bottomY + 40; // space for role/note label\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n }\n for (const c of layoutClusters) {\n if (c.x + c.width > maxX) maxX = c.x + c.width;\n if (c.y + c.height > maxY) maxY = c.y + c.height;\n }\n const width = Math.max(400, maxX + PADDING);\n const height = Math.max(200, maxY + PADDING);\n\n return {\n width,\n height,\n nodes: layoutNodes,\n nodeById: byId,\n edges,\n clusters: layoutClusters,\n };\n}\n\n/**\n * Effective half-width for collision resolution — includes the label text that\n * extends beyond the shape (especially individuals where name/role are rendered\n * BELOW the circle, wider than the circle itself).\n */\nfunction effectiveHalfWidth(ln: EntityLayoutNode): number {\n const n = ln.node;\n const shapeHalf = ln.width / 2;\n const textLen = (s?: string): number => (s ? s.length : 0);\n if (n.entityType === \"individual\") {\n const longest = Math.max(\n textLen(n.name),\n textLen(n.role),\n textLen(n.note)\n );\n const textHalf = (longest * 6.2) / 2 + 4;\n return Math.max(shapeHalf, textHalf);\n }\n // For non-individual, below-node note can also overflow the shape\n const longestBelow = Math.max(textLen(n.note), textLen(n.role));\n const textHalf = (longestBelow * 6) / 2 + 4;\n return Math.max(shapeHalf, textHalf);\n}\n\nfunction boundingBox(nodes: EntityLayoutNode[]): {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n} {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const n of nodes) {\n minX = Math.min(minX, n.x - n.width / 2);\n maxX = Math.max(maxX, n.x + n.width / 2);\n minY = Math.min(minY, n.topY);\n maxY = Math.max(maxY, n.bottomY + 26); // include space for below-node labels\n }\n return { minX, maxX, minY, maxY };\n}\n","import type { EntityAST, EntityNode, EntityEdge } from \"../../core/types\";\nimport type { RenderConfig } from \"../../core/types\";\nimport {\n svgRoot,\n group,\n el,\n path as pathEl,\n text as textEl,\n title as titleEl,\n desc,\n defs,\n rect,\n circle,\n polygon,\n escapeXml,\n} from \"../../core/svg\";\nimport { resolveBaseTheme, type BaseTheme } from \"../../core/theme\";\nimport {\n layoutEntity,\n type EntityLayoutNode,\n type EntityLayoutEdge,\n} from \"./layout\";\n\nfunction buildCss(t: BaseTheme): string {\n return `\n.lt-entity { background: ${t.bg}; font-family: system-ui, -apple-system, sans-serif; }\n.lt-entity-title { font: bold 16px sans-serif; fill: ${t.text}; }\n.lt-entity-name { font: 600 12px sans-serif; fill: ${t.text}; text-anchor: middle; }\n.lt-entity-type { font: 500 10px sans-serif; fill: ${t.textMuted}; text-anchor: middle; }\n.lt-entity-role { font: italic 10px sans-serif; fill: ${t.textMuted}; text-anchor: middle; }\n.lt-entity-note { font: 10px sans-serif; fill: ${t.textMuted}; text-anchor: middle; }\n.lt-entity-badge-bg { fill: ${t.bg}; stroke: ${t.neutral}; stroke-width: 1; }\n.lt-entity-badge-text { font: 600 9px sans-serif; fill: ${t.text}; text-anchor: middle; letter-spacing: 0.5px; }\n.lt-entity-edge { stroke: ${t.stroke}; stroke-width: 1.5; fill: none; }\n.lt-entity-edge-voting { stroke: ${t.stroke}; stroke-width: 1.2; fill: none; }\n.lt-entity-edge-pool { stroke: ${t.neutral}; stroke-width: 1.5; fill: none; stroke-dasharray: 5,4; }\n.lt-entity-edge-license { stroke: ${t.palette[3]}; stroke-width: 1.5; fill: none; stroke-dasharray: 5,4; }\n.lt-entity-edge-distribution { stroke: ${t.positive}; stroke-width: 1.5; fill: none; stroke-dasharray: 5,4; }\n.lt-entity-edge-voting-pref { stroke: ${t.accent}; stroke-width: 1.8; fill: none; }\n.lt-entity-label-bg { fill: ${t.bg}; stroke: ${t.neutral}; stroke-width: 1; }\n.lt-entity-label { font: 600 10px sans-serif; fill: ${t.text}; text-anchor: middle; }\n.lt-entity-label-sub { font: 500 9px sans-serif; fill: ${t.textMuted}; text-anchor: middle; }\n.lt-entity-cluster { fill: none; stroke-dasharray: 6,4; stroke-width: 1.2; }\n.lt-entity-cluster-label-bg { fill: ${t.bg}; }\n.lt-entity-cluster-label { font: 600 11px sans-serif; letter-spacing: 0.5px; }\n.lt-entity-status-new { stroke: ${t.positive}; stroke-width: 2.2; }\n.lt-entity-status-eliminated { stroke: ${t.negative}; stroke-width: 2.2; }\n.lt-entity-status-modified { stroke: ${t.warn}; stroke-width: 2.2; }\n.lt-entity-status-tag { font: 700 8px sans-serif; text-anchor: middle; letter-spacing: 0.5px; }\n`.trim();\n}\n\nconst FILL: Record<string, string> = {\n corp: \"#dbeafe\",\n llc: \"#dcfce7\",\n lp: \"#fef9c3\",\n trust: \"#ede9fe\",\n individual: \"#fed7aa\",\n foundation: \"#fef9c3\",\n disregarded: \"#f5f5f5\",\n pool: \"#f1f5f9\",\n placeholder: \"#f9fafb\",\n};\n\nconst TYPE_LABEL: Record<string, string> = {\n corp: \"Corporation\",\n llc: \"LLC\",\n lp: \"LP / Fund\",\n trust: \"Trust\",\n individual: \"Individual\",\n foundation: \"Foundation\",\n disregarded: \"Disregarded Entity\",\n pool: \"Reserved Pool\",\n placeholder: \"To Be Formed\",\n};\n\nfunction statusClass(node: EntityNode): string | undefined {\n switch (node.status) {\n case \"new\":\n return \"lt-entity-status-new\";\n case \"eliminated\":\n return \"lt-entity-status-eliminated\";\n case \"modified\":\n return \"lt-entity-status-modified\";\n default:\n return undefined;\n }\n}\n\nfunction renderShape(ln: EntityLayoutNode, t: BaseTheme): string {\n const n = ln.node;\n const fill = FILL[n.entityType] ?? t.bg;\n const sc = statusClass(n);\n const commonAttrs: Record<string, string | number> = {\n fill,\n stroke: t.stroke,\n \"stroke-width\": 1.4,\n };\n if (sc) {\n commonAttrs.class = sc;\n }\n // Dashed stroke for disregarded / placeholder / pool\n const dashed =\n n.entityType === \"disregarded\" ||\n n.entityType === \"placeholder\" ||\n n.entityType === \"pool\";\n\n const dashAttr = dashed ? { \"stroke-dasharray\": \"5,3\" } : {};\n const opacity = n.entityType === \"placeholder\" ? { opacity: 0.75 } : {};\n\n const x = -ln.width / 2;\n const y = -ln.height / 2;\n\n switch (n.entityType) {\n case \"corp\":\n return rect({\n x,\n y,\n width: ln.width,\n height: ln.height,\n rx: 0,\n ...commonAttrs,\n ...dashAttr,\n });\n case \"llc\":\n return rect({\n x,\n y,\n width: ln.width,\n height: ln.height,\n rx: 10,\n ry: 10,\n ...commonAttrs,\n });\n case \"lp\": {\n // Notched top corners polygon\n const w = ln.width;\n const h = ln.height;\n const notch = 12;\n const pts = [\n [x + notch, y],\n [x + w - notch, y],\n [x + w, y + notch],\n [x + w, y + h],\n [x, y + h],\n [x, y + notch],\n ]\n .map((p) => p.join(\",\"))\n .join(\" \");\n return polygon({ points: pts, ...commonAttrs });\n }\n case \"trust\":\n return el(\"ellipse\", {\n cx: 0,\n cy: 0,\n rx: ln.width / 2,\n ry: ln.height / 2,\n ...commonAttrs,\n });\n case \"individual\":\n return circle({\n cx: 0,\n cy: 0,\n r: Math.min(ln.width, ln.height) / 2 - 4,\n ...commonAttrs,\n });\n case \"foundation\": {\n const w = ln.width;\n const h = ln.height;\n const tip = 14;\n const pts = [\n [x + w / 2, y - tip],\n [x + w, y],\n [x + w, y + h],\n [x, y + h],\n [x, y],\n ]\n .map((p) => p.join(\",\"))\n .join(\" \");\n return polygon({ points: pts, ...commonAttrs });\n }\n case \"disregarded\":\n return rect({\n x,\n y,\n width: ln.width,\n height: ln.height,\n ...commonAttrs,\n ...dashAttr,\n });\n case \"pool\":\n return rect({\n x,\n y,\n width: ln.width,\n height: ln.height,\n rx: 8,\n ry: 8,\n ...commonAttrs,\n ...dashAttr,\n });\n case \"placeholder\":\n return rect({\n x,\n y,\n width: ln.width,\n height: ln.height,\n rx: 4,\n ry: 4,\n ...commonAttrs,\n ...dashAttr,\n ...opacity,\n });\n }\n}\n\nfunction renderBadge(ln: EntityLayoutNode): string | undefined {\n const j = ln.node.jurisdiction;\n if (!j) return undefined;\n const bw = j.length >= 3 ? 26 : 20;\n const bh = 13;\n // Top-right corner\n const bx = ln.width / 2 - bw - 4;\n const by = -ln.height / 2 + 4;\n return group({}, [\n rect({ x: bx, y: by, width: bw, height: bh, rx: 2, class: \"lt-entity-badge-bg\" }),\n textEl(\n { x: bx + bw / 2, y: by + bh - 3, class: \"lt-entity-badge-text\" },\n j\n ),\n ]);\n}\n\nfunction renderStatusTag(ln: EntityLayoutNode, t: BaseTheme): string | undefined {\n const n = ln.node;\n if (!n.status || n.status === \"normal\") return undefined;\n const map: Record<string, { label: string; color: string }> = {\n new: { label: \"NEW\", color: t.positive },\n eliminated: { label: \"ELIMINATED\", color: t.negative },\n modified: { label: \"MODIFIED\", color: t.warn },\n };\n const info = map[n.status];\n if (!info) return undefined;\n const w = info.label.length * 6 + 8;\n const h = 12;\n const x = -ln.width / 2 - 2;\n const y = -ln.height / 2 - h - 2;\n return group({}, [\n rect({ x, y, width: w, height: h, rx: 2, fill: info.color, stroke: \"none\" }),\n textEl(\n { x: x + w / 2, y: y + h - 3, class: \"lt-entity-status-tag\", fill: t.bg },\n info.label\n ),\n ]);\n}\n\nfunction renderNodeLabels(ln: EntityLayoutNode): string[] {\n const n = ln.node;\n const pieces: string[] = [];\n const isCircle = n.entityType === \"individual\";\n\n if (isCircle) {\n // Name and role rendered BELOW the circle\n let y = ln.height / 2 + 14;\n pieces.push(textEl({ x: 0, y, class: \"lt-entity-name\" }, n.name));\n y += 13;\n if (n.role) {\n pieces.push(textEl({ x: 0, y, class: \"lt-entity-role\" }, n.role));\n y += 12;\n }\n if (n.note) {\n pieces.push(textEl({ x: 0, y, class: \"lt-entity-note\" }, n.note));\n }\n return pieces;\n }\n\n // Inside-shape rendering\n // Name centered, type underneath\n const topY = -6;\n pieces.push(textEl({ x: 0, y: topY, class: \"lt-entity-name\" }, n.name));\n pieces.push(textEl({ x: 0, y: topY + 14, class: \"lt-entity-type\" }, TYPE_LABEL[n.entityType] ?? n.entityType));\n\n // Below-node: role, note, formation date\n let belowY = ln.height / 2 + 14;\n if (n.role) {\n pieces.push(textEl({ x: 0, y: belowY, class: \"lt-entity-role\" }, n.role));\n belowY += 12;\n }\n if (n.note) {\n pieces.push(textEl({ x: 0, y: belowY, class: \"lt-entity-note\" }, n.note));\n belowY += 12;\n }\n if (n.formationDate) {\n pieces.push(\n textEl({ x: 0, y: belowY, class: \"lt-entity-note\" }, `est. ${n.formationDate}`)\n );\n }\n return pieces;\n}\n\nfunction edgeClass(edge: EntityEdge): string {\n switch (edge.op) {\n case \"pool\":\n return \"lt-entity-edge-pool\";\n case \"license\":\n return \"lt-entity-edge-license\";\n case \"distribution\":\n return \"lt-entity-edge-distribution\";\n case \"voting\":\n return \"lt-entity-edge-voting-pref\";\n case \"ownership\":\n default:\n // Highlight preferred / Series share class\n if (edge.shareClass && /pref|series/i.test(edge.shareClass)) {\n return \"lt-entity-edge-voting-pref\";\n }\n return \"lt-entity-edge\";\n }\n}\n\nfunction renderEdgeLabel(le: EntityLayoutEdge): string | undefined {\n const e = le.edge;\n const lines: string[] = [];\n if (e.percentage) lines.push(e.percentage);\n if (e.label) lines.push(e.label);\n const hasClass = !!e.shareClass;\n if (!lines.length && !hasClass) return undefined;\n\n const main = lines[0];\n const sub = lines[1];\n const classLabel = hasClass ? e.shareClass : undefined;\n\n // Approximate width\n const maxText = Math.max(\n main ? main.length : 0,\n sub ? sub.length : 0,\n classLabel ? classLabel.length : 0\n );\n const w = Math.max(30, maxText * 6 + 10);\n const rows = (main ? 1 : 0) + (sub ? 1 : 0) + (classLabel ? 1 : 0);\n const h = 4 + rows * 12;\n const x = le.labelX - w / 2;\n const y = le.labelY - h / 2;\n const pieces: string[] = [];\n pieces.push(rect({ x, y, width: w, height: h, rx: 3, class: \"lt-entity-label-bg\" }));\n let ty = y + 12;\n if (main) {\n pieces.push(textEl({ x: le.labelX, y: ty, class: \"lt-entity-label\" }, main));\n ty += 12;\n }\n if (sub) {\n pieces.push(textEl({ x: le.labelX, y: ty, class: \"lt-entity-label-sub\" }, sub));\n ty += 12;\n }\n if (classLabel) {\n pieces.push(textEl({ x: le.labelX, y: ty, class: \"lt-entity-label-sub\" }, classLabel));\n }\n return group({}, pieces);\n}\n\nexport function renderEntity(ast: EntityAST, config?: RenderConfig): string {\n const layout = layoutEntity(ast);\n const t = resolveBaseTheme(config?.theme ?? \"default\");\n const titleOffset = ast.title ? 34 : 12;\n const width = Math.ceil(layout.width);\n const height = Math.ceil(layout.height + titleOffset);\n\n const children: string[] = [];\n children.push(titleEl(ast.title ?? \"Entity Structure Diagram\"));\n children.push(\n desc(\n `Entity structure diagram with ${ast.entities.length} entities and ${ast.edges.length} relationships`\n )\n );\n children.push(el(\"style\", {}, buildCss(t)));\n\n // Arrow markers (per semantic role)\n children.push(\n defs([\n arrowMarker(\"lt-entity-arrow\", t.stroke),\n arrowMarker(\"lt-entity-arrow-purple\", t.palette[3] ?? t.stroke),\n arrowMarker(\"lt-entity-arrow-green\", t.positive),\n arrowMarker(\"lt-entity-arrow-grey\", t.neutral),\n arrowMarker(\"lt-entity-arrow-blue\", t.accent),\n ])\n );\n\n if (ast.title) {\n children.push(textEl({ x: 20, y: 22, class: \"lt-entity-title\" }, ast.title));\n }\n\n const inner: string[] = [];\n\n // Clusters (behind nodes) — label sits INSIDE the cluster top row\n for (const c of layout.clusters) {\n const color = c.color ?? t.neutral;\n inner.push(\n rect({\n x: c.x,\n y: c.y,\n width: c.width,\n height: c.height,\n rx: 8,\n stroke: color,\n class: \"lt-entity-cluster\",\n })\n );\n inner.push(\n textEl(\n { x: c.x + 12, y: c.y + 16, class: \"lt-entity-cluster-label\", fill: color },\n c.label\n )\n );\n }\n\n // Edges (before nodes so nodes sit on top)\n for (const le of layout.edges) {\n const cls = edgeClass(le.edge);\n const markerId = pickMarker(le.edge, cls);\n inner.push(\n pathEl({\n d: le.path,\n class: cls,\n \"marker-end\": `url(#${markerId})`,\n })\n );\n }\n // Edge labels AFTER paths so they cover lines\n for (const le of layout.edges) {\n const piece = renderEdgeLabel(le);\n if (piece) inner.push(piece);\n }\n\n // Nodes\n for (const ln of layout.nodes) {\n const parts: string[] = [];\n parts.push(renderShape(ln, t));\n const badge = renderBadge(ln);\n if (badge) parts.push(badge);\n const status = renderStatusTag(ln, t);\n if (status) parts.push(status);\n for (const p of renderNodeLabels(ln)) parts.push(p);\n inner.push(\n group(\n {\n transform: `translate(${ln.x}, ${ln.y})`,\n \"data-entity-id\": ln.node.id,\n \"data-entity-type\": ln.node.entityType,\n \"data-jurisdiction\": ln.node.jurisdiction ?? \"\",\n },\n parts\n )\n );\n }\n\n const wrap = group({ transform: `translate(0, ${titleOffset})` }, inner);\n children.push(wrap);\n\n return svgRoot(\n {\n class: \"lt-entity\",\n role: \"img\",\n \"aria-label\": escapeXml(ast.title ?? \"Entity structure diagram\"),\n width,\n height,\n viewBox: `0 0 ${width} ${height}`,\n },\n children\n );\n}\n\nfunction arrowMarker(id: string, color: string): string {\n return el(\n \"marker\",\n {\n id,\n markerWidth: 9,\n markerHeight: 9,\n refX: 7,\n refY: 3,\n orient: \"auto\",\n markerUnits: \"strokeWidth\",\n },\n [el(\"path\", { d: \"M 0 0 L 7 3 L 0 6 z\", fill: color })]\n );\n}\n\nfunction pickMarker(_edge: EntityEdge, cls: string): string {\n if (cls === \"lt-entity-edge-license\") return \"lt-entity-arrow-purple\";\n if (cls === \"lt-entity-edge-distribution\") return \"lt-entity-arrow-green\";\n if (cls === \"lt-entity-edge-pool\") return \"lt-entity-arrow-grey\";\n if (cls === \"lt-entity-edge-voting-pref\") return \"lt-entity-arrow-blue\";\n return \"lt-entity-arrow\";\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseEntityDSL } from \"./parser\";\nimport { renderEntity } from \"./renderer\";\n\nexport const entity: DiagramPlugin = {\n type: \"entity\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"entity-structure\");\n },\n render(text: string, config): string {\n const ast = parseEntityDSL(text);\n return renderEntity(ast, config);\n },\n};\n\nexport { parseEntityDSL } from \"./parser\";\nexport { renderEntity } from \"./renderer\";\nexport { layoutEntity } from \"./layout\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/logic/parser.ts","../src/diagrams/logic/symbols.ts","../src/diagrams/logic/layout.ts","../src/diagrams/logic/renderer.ts","../src/diagrams/logic/index.ts"],"names":["text","title","path","PORT_SIZE","PORT_H"],"mappings":"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","file":"chunk-VFQCTXOX.js","sourcesContent":["import type {\n LogicGateAST,\n LogicGateInput,\n LogicGateOutput,\n LogicGateNode,\n LogicGateType,\n LogicGateStyle,\n LogicGateModule,\n} from \"../../core/types\";\n\nexport class LogicParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"LogicParseError\";\n }\n}\n\nconst GATE_TYPES = new Set<string>([\n \"AND\", \"OR\", \"NOT\", \"NAND\", \"NOR\", \"XOR\", \"XNOR\", \"BUF\",\n \"TRISTATE_BUF\", \"TRISTATE_INV\", \"OPEN_DRAIN\", \"SCHMITT\",\n \"DFF\", \"JKFF\", \"SRFF\", \"TFF\", \"LATCH_SR\", \"LATCH_D\",\n \"MUX\", \"DEMUX\", \"DECODER\", \"ENCODER\", \"COUNTER\", \"SHIFT_REG\",\n]);\n\nfunction splitIds(s: string): string[] {\n return s\n .split(\",\")\n .map((x) => x.trim())\n .filter(Boolean);\n}\n\nfunction parseInputList(s: string): string[] {\n // Supports named (D=A) or positional. Returns raw tokens (keep ~ prefix for active-low).\n return s\n .split(\",\")\n .map((x) => x.trim())\n .filter(Boolean)\n .map((tok) => {\n const eq = tok.indexOf(\"=\");\n return eq >= 0 ? tok.slice(eq + 1).trim() : tok;\n });\n}\n\nexport function parseLogic(text: string): LogicGateAST {\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\").trim());\n let title: string | undefined;\n let style: LogicGateStyle | undefined;\n const inputs: LogicGateInput[] = [];\n const outputs: LogicGateOutput[] = [];\n const gates: LogicGateNode[] = [];\n const modules: LogicGateModule[] = [];\n const moduleStack: string[] = [];\n let moduleCounter = 0;\n const explicitOutputFrom = new Map<string, string>();\n\n for (const rawLine of lines) {\n // Strip line comments\n const line = rawLine.replace(/#.*$/, \"\").replace(/--.*$/, \"\").trim();\n if (!line) continue;\n\n // module \"Label\" { or module Label {\n const modOpen = line.match(/^module\\s+(?:\"([^\"]+)\"|([a-zA-Z_][\\w]*))\\s*\\{$/);\n if (modOpen) {\n const label = modOpen[1] ?? modOpen[2];\n const id = `mod_${moduleCounter++}`;\n modules.push({ id, label });\n moduleStack.push(id);\n continue;\n }\n\n // close module\n if (line === \"}\") {\n if (moduleStack.length === 0) {\n throw new LogicParseError(\"Unmatched `}` — no open module\");\n }\n moduleStack.pop();\n continue;\n }\n\n // Header\n if (/^logic\\b/i.test(line)) {\n const t = line.match(/\"([^\"]*)\"/);\n if (t) title = t[1];\n const s = line.match(/style\\s*:\\s*(ansi|iec)/i);\n if (s) style = s[1].toLowerCase() as LogicGateStyle;\n continue;\n }\n\n // input A, B, C\n const inputMatch = line.match(/^input\\s+(.+)$/i);\n if (inputMatch) {\n for (const id of splitIds(inputMatch[1])) {\n const isLow = id.startsWith(\"~\");\n const clean = isLow ? id.slice(1) : id;\n inputs.push({ id: clean, label: clean, isActiveLow: isLow || undefined });\n }\n continue;\n }\n\n // output X, Y\n const outputMatch = line.match(/^output\\s+(.+)$/i);\n if (outputMatch) {\n for (const id of splitIds(outputMatch[1])) {\n outputs.push({ id, label: id, from: id });\n }\n continue;\n }\n\n // OUTPUT <- GATE (map output to gate)\n const assignMatch = line.match(/^([a-zA-Z_][\\w]*)\\s*<-\\s*([a-zA-Z_][\\w]*)$/);\n if (assignMatch) {\n explicitOutputFrom.set(assignMatch[1], assignMatch[2]);\n continue;\n }\n\n // Gate: ID = GATE(a, b, ...)\n const gateMatch = line.match(/^([a-zA-Z_][\\w]*)\\s*=\\s*([A-Za-z_][\\w]*)\\s*\\(([^)]*)\\)$/);\n if (gateMatch) {\n const id = gateMatch[1];\n const rawType = gateMatch[2].toUpperCase();\n if (!GATE_TYPES.has(rawType)) {\n throw new LogicParseError(`Unknown gate type: ${rawType}`);\n }\n const gInputs = parseInputList(gateMatch[3]);\n const moduleId = moduleStack[moduleStack.length - 1];\n gates.push({ id, gateType: rawType as LogicGateType, inputs: gInputs, moduleId });\n continue;\n }\n }\n\n if (moduleStack.length > 0) {\n throw new LogicParseError(`Unclosed module (${moduleStack.length} open)`);\n }\n\n // Wire outputs: if output not explicitly mapped, look for gate with same id\n for (const out of outputs) {\n const mapped = explicitOutputFrom.get(out.id);\n if (mapped) out.from = mapped;\n else if (gates.some((g) => g.id === out.id)) out.from = out.id;\n }\n\n // Validate: undefined input references\n const known = new Set<string>([\n ...inputs.map((i) => i.id),\n ...gates.map((g) => g.id),\n ]);\n for (const g of gates) {\n for (const inp of g.inputs) {\n const clean = inp.startsWith(\"~\") ? inp.slice(1) : inp;\n if (!known.has(clean)) {\n throw new LogicParseError(`Unknown signal \"${clean}\" in gate ${g.id}`);\n }\n }\n }\n\n return {\n type: \"logic\",\n title,\n style: style ?? \"ansi\",\n inputs,\n outputs,\n gates,\n modules: modules.length > 0 ? modules : undefined,\n };\n}\n","import type { LogicGateType } from \"../../core/types\";\n\n// Normalized gate geometry: combinational gates fit in 100×60; sequential in 60×80.\nexport interface GateGeometry {\n width: number;\n height: number;\n inputPins: Array<{ id: string; x: number; y: number; label?: string }>;\n outputPins: Array<{ id: string; x: number; y: number; label?: string; bubble?: boolean }>;\n /** Body SVG path (ANSI) */\n ansiPath: string;\n /** Output bubble? */\n outputBubble?: boolean;\n /** Clock triangle pin id (sequential) */\n clockPin?: string;\n /** IEC label inside rectangle */\n iecLabel?: string;\n}\n\nfunction combPins(nInputs: number, _width: number, leftX: number): Array<{ id: string; x: number; y: number }> {\n const pins: Array<{ id: string; x: number; y: number }> = [];\n if (nInputs === 1) {\n pins.push({ id: \"in1\", x: leftX, y: 30 });\n } else if (nInputs === 2) {\n pins.push({ id: \"in1\", x: leftX, y: 15 });\n pins.push({ id: \"in2\", x: leftX, y: 45 });\n } else {\n const step = 50 / (nInputs - 1);\n for (let i = 0; i < nInputs; i++) {\n pins.push({ id: `in${i + 1}`, x: leftX, y: 5 + step * i });\n }\n }\n return pins;\n}\n\nexport function getGateGeometry(\n gateType: LogicGateType,\n inputCount: number\n): GateGeometry {\n switch (gateType) {\n case \"AND\":\n case \"NAND\": {\n const bubble = gateType === \"NAND\";\n return {\n width: bubble ? 90 : 80,\n height: 60,\n inputPins: combPins(inputCount, 80, 20).map((p) => ({ ...p, x: 20 })),\n outputPins: [{ id: \"out\", x: bubble ? 90 : 80, y: 30, bubble }],\n ansiPath: \"M 20,60 L 20,0 Q 80,0 80,30 Q 80,60 20,60 Z\",\n outputBubble: bubble,\n iecLabel: \"&\",\n };\n }\n case \"OR\":\n case \"NOR\": {\n const bubble = gateType === \"NOR\";\n return {\n width: bubble ? 80 : 70,\n height: 60,\n inputPins: combPins(inputCount, 80, 18).map((p) => ({ ...p, x: 18 })),\n outputPins: [{ id: \"out\", x: bubble ? 80 : 70, y: 30, bubble }],\n ansiPath: \"M 15,60 Q 10,30 15,0 Q 30,15 70,30 Q 30,45 15,60 Z\",\n outputBubble: bubble,\n iecLabel: \"≥1\",\n };\n }\n case \"XOR\":\n case \"XNOR\": {\n const bubble = gateType === \"XNOR\";\n return {\n width: bubble ? 80 : 70,\n height: 60,\n inputPins: combPins(inputCount, 80, 12).map((p) => ({ ...p, x: 12 })),\n outputPins: [{ id: \"out\", x: bubble ? 80 : 70, y: 30, bubble }],\n ansiPath:\n \"M 15,60 Q 10,30 15,0 Q 30,15 70,30 Q 30,45 15,60 Z M 8,60 Q 3,30 8,0\",\n outputBubble: bubble,\n iecLabel: \"=1\",\n };\n }\n case \"NOT\": {\n return {\n width: 70,\n height: 60,\n inputPins: [{ id: \"in1\", x: 10, y: 30 }],\n outputPins: [{ id: \"out\", x: 70, y: 30, bubble: true }],\n ansiPath: \"M 10,55 L 60,30 L 10,5 Z\",\n outputBubble: true,\n iecLabel: \"1\",\n };\n }\n case \"BUF\":\n case \"SCHMITT\": {\n return {\n width: 60,\n height: 60,\n inputPins: [{ id: \"in1\", x: 10, y: 30 }],\n outputPins: [{ id: \"out\", x: 60, y: 30 }],\n ansiPath: \"M 10,55 L 60,30 L 10,5 Z\",\n iecLabel: \"1\",\n };\n }\n case \"TRISTATE_BUF\":\n case \"TRISTATE_INV\":\n case \"OPEN_DRAIN\": {\n const bubble = gateType === \"TRISTATE_INV\";\n return {\n width: bubble ? 70 : 60,\n height: 70,\n inputPins: [\n { id: \"in1\", x: 10, y: 30 },\n { id: \"en\", x: 35, y: 65, label: \"EN\" },\n ],\n outputPins: [{ id: \"out\", x: bubble ? 70 : 60, y: 30, bubble }],\n ansiPath: \"M 10,55 L 60,30 L 10,5 Z\",\n outputBubble: bubble,\n iecLabel: \"1\",\n };\n }\n case \"DFF\": {\n return {\n width: 60,\n height: 80,\n inputPins: [\n { id: \"D\", x: 0, y: 20, label: \"D\" },\n { id: \"CLK\", x: 0, y: 50, label: \"\" },\n ],\n outputPins: [\n { id: \"Q\", x: 60, y: 20, label: \"Q\" },\n { id: \"Qn\", x: 60, y: 60, label: \"Q̄\", bubble: true },\n ],\n ansiPath: \"M 0,0 H 60 V 80 H 0 Z\",\n clockPin: \"CLK\",\n iecLabel: \"DFF\",\n };\n }\n case \"JKFF\": {\n return {\n width: 60,\n height: 80,\n inputPins: [\n { id: \"J\", x: 0, y: 15, label: \"J\" },\n { id: \"CLK\", x: 0, y: 40 },\n { id: \"K\", x: 0, y: 65, label: \"K\" },\n ],\n outputPins: [\n { id: \"Q\", x: 60, y: 20, label: \"Q\" },\n { id: \"Qn\", x: 60, y: 60, label: \"Q̄\", bubble: true },\n ],\n ansiPath: \"M 0,0 H 60 V 80 H 0 Z\",\n clockPin: \"CLK\",\n iecLabel: \"JK\",\n };\n }\n case \"SRFF\":\n case \"LATCH_SR\": {\n return {\n width: 60,\n height: 80,\n inputPins: [\n { id: \"S\", x: 0, y: 20, label: \"S\" },\n { id: \"R\", x: 0, y: 60, label: \"R\" },\n ],\n outputPins: [\n { id: \"Q\", x: 60, y: 20, label: \"Q\" },\n { id: \"Qn\", x: 60, y: 60, label: \"Q̄\", bubble: true },\n ],\n ansiPath: \"M 0,0 H 60 V 80 H 0 Z\",\n iecLabel: \"SR\",\n };\n }\n case \"TFF\": {\n return {\n width: 60,\n height: 80,\n inputPins: [\n { id: \"T\", x: 0, y: 20, label: \"T\" },\n { id: \"CLK\", x: 0, y: 50 },\n ],\n outputPins: [\n { id: \"Q\", x: 60, y: 20, label: \"Q\" },\n { id: \"Qn\", x: 60, y: 60, label: \"Q̄\", bubble: true },\n ],\n ansiPath: \"M 0,0 H 60 V 80 H 0 Z\",\n clockPin: \"CLK\",\n iecLabel: \"T\",\n };\n }\n case \"LATCH_D\": {\n return {\n width: 60,\n height: 80,\n inputPins: [\n { id: \"D\", x: 0, y: 20, label: \"D\" },\n { id: \"E\", x: 0, y: 60, label: \"E\" },\n ],\n outputPins: [\n { id: \"Q\", x: 60, y: 20, label: \"Q\" },\n { id: \"Qn\", x: 60, y: 60, label: \"Q̄\", bubble: true },\n ],\n ansiPath: \"M 0,0 H 60 V 80 H 0 Z\",\n iecLabel: \"D\",\n };\n }\n default: {\n // Generic box for MUX/DEMUX/DECODER/ENCODER/COUNTER/SHIFT_REG\n const ins = Math.max(inputCount, 2);\n const inputPins = combPins(ins, 100, 0).map((p, i) => ({\n ...p,\n x: 0,\n label: `I${i}`,\n }));\n return {\n width: 100,\n height: 80,\n inputPins,\n outputPins: [{ id: \"out\", x: 100, y: 40 }],\n ansiPath: \"M 0,0 H 100 V 80 H 0 Z\",\n iecLabel: gateType,\n };\n }\n }\n}\n","import type { LogicGateAST } from \"../../core/types\";\nimport { getGateGeometry, type GateGeometry } from \"./symbols\";\n\nexport interface LogicLayoutNode {\n id: string;\n kind: \"input\" | \"gate\" | \"output\";\n x: number;\n y: number;\n layer: number;\n geometry?: GateGeometry;\n gateType?: string;\n label: string;\n isActiveLow?: boolean;\n}\n\nexport interface LogicLayoutWire {\n fromNode: string;\n fromX: number;\n fromY: number;\n toNode: string;\n toX: number;\n toY: number;\n isActiveLow?: boolean;\n path: string;\n}\n\nexport interface LogicLayoutModule {\n id: string;\n label: string;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface LogicLayoutResult {\n width: number;\n height: number;\n nodes: LogicLayoutNode[];\n wires: LogicLayoutWire[];\n modules: LogicLayoutModule[];\n}\n\nconst LAYER_GAP = 80; // extra horizontal gap between layers\nconst ROW_GAP = 40; // vertical gap between rows in same layer\nconst PORT_SIZE = 40; // input/output port pseudo-box width\nconst PORT_H = 30;\n\nexport function layoutLogic(ast: LogicGateAST): LogicLayoutResult {\n // Determine layer per signal id using longest-path layering\n const layerOf = new Map<string, number>();\n for (const inp of ast.inputs) layerOf.set(inp.id, 0);\n\n // Build dependency map for gates\n const pending = new Set(ast.gates.map((g) => g.id));\n let safety = 0;\n while (pending.size > 0 && safety++ < 1000) {\n for (const g of ast.gates) {\n if (!pending.has(g.id)) continue;\n let maxDep = -1;\n let ready = true;\n for (const inp of g.inputs) {\n const clean = inp.startsWith(\"~\") ? inp.slice(1) : inp;\n const l = layerOf.get(clean);\n if (l === undefined) {\n ready = false;\n break;\n }\n if (l > maxDep) maxDep = l;\n }\n if (ready) {\n layerOf.set(g.id, maxDep + 1);\n pending.delete(g.id);\n }\n }\n }\n if (pending.size > 0) {\n // cycle or unresolved: force layer 1\n for (const id of pending) layerOf.set(id, 1);\n }\n\n const outputLayer =\n Math.max(0, ...Array.from(layerOf.values())) + 1;\n // All outputs get a terminal label node. Use synthetic id to avoid colliding\n // with a gate that shares the output's name (e.g. `output Y; Y = AND(A,B)`).\n const outTermId = (o: { id: string }) => `$out$${o.id}`;\n const portOutputs = ast.outputs.map((o) => ({\n ...o,\n termId: outTermId(o),\n source: o.from,\n }));\n for (const o of portOutputs) layerOf.set(o.termId, outputLayer);\n\n // Group ids by layer\n const layers = new Map<number, string[]>();\n const addToLayer = (id: string, layer: number) => {\n if (!layers.has(layer)) layers.set(layer, []);\n layers.get(layer)!.push(id);\n };\n for (const i of ast.inputs) addToLayer(i.id, 0);\n for (const g of ast.gates) addToLayer(g.id, layerOf.get(g.id)!);\n for (const o of portOutputs) addToLayer(o.termId, outputLayer);\n\n // Compute sizes per node (precompute geometries for gates)\n const gateGeoms = new Map<string, GateGeometry>();\n for (const g of ast.gates) {\n gateGeoms.set(g.id, getGateGeometry(g.gateType, g.inputs.length));\n }\n\n // Assign coordinates\n const nodes: LogicLayoutNode[] = [];\n const sortedLayers = Array.from(layers.keys()).sort((a, b) => a - b);\n\n // compute each layer's widest node\n const layerWidth = new Map<number, number>();\n for (const [layerIdx, ids] of layers) {\n let maxW = 60;\n for (const id of ids) {\n const g = gateGeoms.get(id);\n if (g && g.width > maxW) maxW = g.width;\n if (!g && layerIdx === 0) maxW = Math.max(maxW, PORT_SIZE);\n if (!g && layerIdx === outputLayer) maxW = Math.max(maxW, PORT_SIZE);\n }\n layerWidth.set(layerIdx, maxW);\n }\n\n let cursorX = 20;\n const layerStartMap = new Map<number, number>();\n for (const layerIdx of sortedLayers) {\n layerStartMap.set(layerIdx, cursorX);\n cursorX += (layerWidth.get(layerIdx) ?? 60) + LAYER_GAP;\n }\n const totalW = cursorX;\n\n // Compute vertical placement per layer\n const heightOf = (id: string): number => {\n const g = gateGeoms.get(id);\n if (g) return g.height;\n return PORT_H;\n };\n\n // find max column height\n let maxColH = 0;\n for (const ids of layers.values()) {\n const total = ids.reduce((s, id) => s + heightOf(id), 0) + (ids.length - 1) * ROW_GAP;\n if (total > maxColH) maxColH = total;\n }\n const totalH = maxColH + 80;\n\n const nodeInfo = new Map<string, LogicLayoutNode>();\n for (const [layerIdx, ids] of layers) {\n const xStart = layerStartMap.get(layerIdx)!;\n const total = ids.reduce((s, id) => s + heightOf(id), 0) + (ids.length - 1) * ROW_GAP;\n let y = 40 + (maxColH - total) / 2;\n for (const id of ids) {\n const h = heightOf(id);\n const g = gateGeoms.get(id);\n let node: LogicLayoutNode;\n if (layerIdx === 0) {\n const inp = ast.inputs.find((i) => i.id === id)!;\n node = {\n id,\n kind: \"input\",\n x: xStart,\n y,\n layer: 0,\n label: inp.label,\n isActiveLow: inp.isActiveLow,\n };\n } else if (layerIdx === outputLayer && !g && id.startsWith(\"$out$\")) {\n const out = portOutputs.find((o) => o.termId === id)!;\n node = {\n id,\n kind: \"output\",\n x: xStart,\n y,\n layer: outputLayer,\n label: out.label,\n isActiveLow: out.isActiveLow,\n };\n } else {\n node = {\n id,\n kind: \"gate\",\n x: xStart,\n y,\n layer: layerIdx,\n geometry: g,\n gateType: ast.gates.find((gg) => gg.id === id)!.gateType,\n label: id,\n };\n }\n nodes.push(node);\n nodeInfo.set(id, node);\n y += h + ROW_GAP;\n }\n }\n\n // Wires\n const wires: LogicLayoutWire[] = [];\n const getSourcePoint = (id: string) => {\n const n = nodeInfo.get(id);\n if (!n) return null;\n if (n.kind === \"input\") return { x: n.x + PORT_SIZE, y: n.y + PORT_H / 2 };\n if (n.kind === \"gate\" && n.geometry) {\n const out = n.geometry.outputPins[0];\n return { x: n.x + out.x, y: n.y + out.y };\n }\n return null;\n };\n\n for (const g of ast.gates) {\n const target = nodeInfo.get(g.id);\n if (!target || !target.geometry) continue;\n g.inputs.forEach((rawInp, idx) => {\n const isLow = rawInp.startsWith(\"~\");\n const srcId = isLow ? rawInp.slice(1) : rawInp;\n const src = getSourcePoint(srcId);\n if (!src) return;\n const pin = target.geometry!.inputPins[idx];\n if (!pin) return;\n const toX = target.x + pin.x;\n const toY = target.y + pin.y;\n const midX = (src.x + toX) / 2;\n const path = `M ${src.x},${src.y} L ${midX},${src.y} L ${midX},${toY} L ${toX},${toY}`;\n wires.push({\n fromNode: srcId,\n fromX: src.x,\n fromY: src.y,\n toNode: g.id,\n toX,\n toY,\n isActiveLow: isLow,\n path,\n });\n });\n }\n\n // Output port wires\n for (const o of portOutputs) {\n const src = getSourcePoint(o.source);\n const target = nodeInfo.get(o.termId);\n if (!src || !target || target.kind !== \"output\") continue;\n const toX = target.x;\n const toY = target.y + PORT_H / 2;\n let path: string;\n if (Math.abs(src.y - toY) < 0.5) {\n path = `M ${src.x},${src.y} L ${toX},${toY}`;\n } else {\n const midX = (src.x + toX) / 2;\n path = `M ${src.x},${src.y} L ${midX},${src.y} L ${midX},${toY} L ${toX},${toY}`;\n }\n wires.push({\n fromNode: o.source,\n fromX: src.x,\n fromY: src.y,\n toNode: o.termId,\n toX,\n toY,\n path,\n });\n }\n\n // Module bounding boxes (dashed enclosure for sub-circuits)\n const modules: LogicLayoutModule[] = [];\n if (ast.modules && ast.modules.length > 0) {\n const PAD = 14;\n for (const mod of ast.modules) {\n const memberIds = new Set(\n ast.gates.filter((g) => g.moduleId === mod.id).map((g) => g.id)\n );\n if (memberIds.size === 0) continue;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of nodes) {\n if (!memberIds.has(n.id)) continue;\n const w = n.geometry?.width ?? 60;\n const h = n.geometry?.height ?? 60;\n if (n.x < minX) minX = n.x;\n if (n.y < minY) minY = n.y;\n if (n.x + w > maxX) maxX = n.x + w;\n if (n.y + h > maxY) maxY = n.y + h;\n }\n if (!isFinite(minX)) continue;\n modules.push({\n id: mod.id,\n label: mod.label,\n x: minX - PAD,\n y: minY - PAD - 4,\n width: maxX - minX + PAD * 2,\n height: maxY - minY + PAD * 2 + 4,\n });\n }\n }\n\n return { width: totalW, height: totalH, nodes, wires, modules };\n}\n","import type { LogicGateAST, LogicGateStyle, RenderConfig } from \"../../core/types\";\nimport { layoutLogic } from \"./layout\";\nimport {\n svgRoot,\n defs,\n group,\n el,\n circle,\n path as pathEl,\n text,\n title as titleEl,\n desc,\n polygon,\n} from \"../../core/svg\";\nimport { resolveIndustrialTheme } from \"../../core/theme\";\n\nconst PORT_SIZE = 40;\nconst PORT_H = 30;\n\nfunction renderGateBody(\n n: ReturnType<typeof layoutLogic>[\"nodes\"][number],\n style: LogicGateStyle\n): string[] {\n const out: string[] = [];\n if (!n.geometry) return out;\n const g = n.geometry;\n\n if (style === \"iec\") {\n // Rectangle\n out.push(\n el(\"rect\", {\n x: 0,\n y: 0,\n width: g.width,\n height: g.height,\n class: \"schematex-logic-gate-body\",\n })\n );\n if (g.iecLabel) {\n out.push(\n text(\n {\n x: g.width / 2,\n y: g.height / 2 + 4,\n class: \"schematex-logic-gate-iec-label\",\n \"text-anchor\": \"middle\",\n },\n g.iecLabel\n )\n );\n }\n } else {\n out.push(\n el(\"path\", { d: g.ansiPath, class: \"schematex-logic-gate-body\" })\n );\n }\n\n // Output bubble\n if (g.outputBubble) {\n const op = g.outputPins[0];\n out.push(\n circle({\n cx: op.x - 4,\n cy: op.y,\n r: 4,\n class: \"schematex-logic-bubble\",\n })\n );\n }\n\n // Clock triangle\n if (g.clockPin) {\n const cp = g.inputPins.find((p) => p.id === g.clockPin);\n if (cp) {\n out.push(\n polygon({\n points: `${cp.x},${cp.y - 5} ${cp.x + 8},${cp.y} ${cp.x},${cp.y + 5}`,\n class: \"schematex-logic-clock-tri\",\n })\n );\n }\n }\n\n // Qn bubble (sequential)\n for (const op of g.outputPins) {\n if (op.bubble && op.id !== \"out\") {\n out.push(\n circle({\n cx: op.x + 4,\n cy: op.y,\n r: 4,\n class: \"schematex-logic-bubble\",\n })\n );\n }\n }\n\n // Pin labels\n for (const pin of g.inputPins) {\n if (pin.label && pin.id !== g.clockPin) {\n out.push(\n text(\n {\n x: pin.x + 5,\n y: pin.y + 3,\n class: \"schematex-logic-pin-label\",\n },\n pin.label\n )\n );\n }\n }\n for (const pin of g.outputPins) {\n if (pin.label) {\n out.push(\n text(\n {\n x: pin.x - 6,\n y: pin.y + 3,\n class: \"schematex-logic-pin-label\",\n \"text-anchor\": \"end\",\n },\n pin.label\n )\n );\n }\n }\n\n // Gate type label (center top, small)\n if (style === \"ansi\" && g.iecLabel && g.height >= 60) {\n const labelX = g.width / 2;\n const labelY = g.height + 14;\n out.push(\n text(\n {\n x: labelX,\n y: labelY,\n class: \"schematex-logic-gate-type\",\n \"text-anchor\": \"middle\",\n },\n n.gateType ?? \"\"\n )\n );\n }\n\n return out;\n}\n\nexport function renderLogic(ast: LogicGateAST, config?: RenderConfig): string {\n const style: LogicGateStyle = ast.style ?? \"ansi\";\n const layout = layoutLogic(ast);\n const { width, height } = layout;\n const t = resolveIndustrialTheme(config?.theme ?? \"default\");\n\n const gateSvgs: string[] = [];\n const portSvgs: string[] = [];\n const moduleSvgs: string[] = [];\n\n for (const m of layout.modules) {\n moduleSvgs.push(\n group({ \"data-module-id\": m.id }, [\n el(\"rect\", {\n x: m.x,\n y: m.y,\n width: m.width,\n height: m.height,\n rx: 6,\n class: \"schematex-logic-module\",\n }),\n text(\n {\n x: m.x + 10,\n y: m.y + 14,\n class: \"schematex-logic-module-label\",\n },\n m.label\n ),\n ])\n );\n }\n\n for (const n of layout.nodes) {\n if (n.kind === \"gate\") {\n gateSvgs.push(\n group(\n {\n transform: `translate(${n.x}, ${n.y})`,\n \"data-gate-id\": n.id,\n \"data-gate-type\": n.gateType ?? \"\",\n },\n renderGateBody(n, style)\n )\n );\n } else if (n.kind === \"input\") {\n // Label + short stub line; no rectangle.\n const cy = PORT_H / 2;\n portSvgs.push(\n group({ transform: `translate(${n.x}, ${n.y})`, \"data-port\": \"input\" }, [\n text(\n {\n x: 0,\n y: cy + 4,\n \"text-anchor\": \"start\",\n class: \"schematex-logic-port-label\",\n },\n n.label\n ),\n el(\"line\", {\n x1: PORT_SIZE - 12,\n y1: cy,\n x2: n.isActiveLow ? PORT_SIZE - 8 : PORT_SIZE,\n y2: cy,\n class: \"schematex-logic-wire\",\n }),\n n.isActiveLow\n ? circle({\n cx: PORT_SIZE - 4,\n cy,\n r: 4,\n class: \"schematex-logic-bubble\",\n })\n : \"\",\n ])\n );\n } else if (n.kind === \"output\") {\n const cy = PORT_H / 2;\n portSvgs.push(\n group({ transform: `translate(${n.x}, ${n.y})`, \"data-port\": \"output\" }, [\n el(\"line\", {\n x1: 0,\n y1: cy,\n x2: 12,\n y2: cy,\n class: \"schematex-logic-wire\",\n }),\n text(\n {\n x: 16,\n y: cy + 4,\n \"text-anchor\": \"start\",\n class: \"schematex-logic-port-label\",\n },\n n.label\n ),\n ])\n );\n }\n }\n\n const wireSvgs = layout.wires.map((w) => {\n const extras: string[] = [];\n if (w.isActiveLow) {\n extras.push(\n circle({\n cx: w.toX - 4,\n cy: w.toY,\n r: 4,\n class: \"schematex-logic-bubble\",\n })\n );\n }\n return [\n pathEl({\n d: w.path,\n class: \"schematex-logic-wire\",\n \"data-from\": w.fromNode,\n \"data-to\": w.toNode,\n }),\n ...extras,\n ].join(\"\");\n });\n\n const css = `\n.schematex-logic { background: ${t.bg}; font-family: system-ui, -apple-system, sans-serif; }\n.schematex-logic-gate-body { fill: none; stroke: ${t.strokeHeavy}; stroke-width: 1.75; stroke-linejoin: round; }\n.schematex-logic-bubble { fill: ${t.bg}; stroke: ${t.strokeHeavy}; stroke-width: 1.5; }\n.schematex-logic-clock-tri { fill: none; stroke: ${t.strokeHeavy}; stroke-width: 1.5; stroke-linejoin: round; }\n.schematex-logic-wire { stroke: ${t.strokeHeavy}; stroke-width: 1.5; fill: none; stroke-linecap: square; }\n.schematex-logic-port-label { font: 13px system-ui, sans-serif; fill: ${t.text}; }\n.schematex-logic-pin-label { font: 9px sans-serif; fill: ${t.stroke}; }\n.schematex-logic-gate-type { font: 10px sans-serif; fill: ${t.textMuted}; }\n.schematex-logic-gate-iec-label { font: bold 13px sans-serif; fill: ${t.text}; }\n.schematex-logic-title { font: bold 14px sans-serif; fill: ${t.text}; }\n.schematex-logic-module { fill: none; stroke: ${t.textMuted}; stroke-width: 1.25; stroke-dasharray: 6 4; }\n.schematex-logic-module-label { font: 11px sans-serif; fill: ${t.textMuted}; font-style: italic; }\n`.trim();\n\n const titleSvg = ast.title\n ? text(\n {\n x: width / 2,\n y: 18,\n \"text-anchor\": \"middle\",\n class: \"schematex-logic-title\",\n },\n ast.title\n )\n : \"\";\n\n return svgRoot(\n {\n class: \"schematex-logic\",\n viewBox: `0 0 ${width} ${height + (ast.title ? 20 : 0)}`,\n width,\n height: height + (ast.title ? 20 : 0),\n role: \"img\",\n \"data-diagram-type\": \"logic\",\n },\n [\n titleEl(ast.title ?? \"Logic Gate Diagram\"),\n desc(\n `Logic gate diagram with ${ast.gates.length} gates, ${ast.inputs.length} inputs, ${ast.outputs.length} outputs`\n ),\n defs([el(\"style\", {}, css)]),\n group(\n { transform: `translate(0, ${ast.title ? 20 : 0})` },\n [\n group({ class: \"schematex-logic-modules\" }, moduleSvgs),\n group({ class: \"schematex-logic-wires\" }, wireSvgs),\n group({ class: \"schematex-logic-gates\" }, gateSvgs),\n group({ class: \"schematex-logic-ports\" }, portSvgs),\n ]\n ),\n titleSvg,\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseLogic } from \"./parser\";\nimport { renderLogic } from \"./renderer\";\n\nexport const logic: DiagramPlugin = {\n type: \"logic\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"logic\");\n },\n render(text: string, config): string {\n const ast = parseLogic(text);\n return renderLogic(ast, config);\n },\n};\n\nexport { parseLogic } from \"./parser\";\nexport { renderLogic } from \"./renderer\";\nexport { layoutLogic } from \"./layout\";\n"]}