schematex 0.3.4 → 0.4.1
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.
- package/README.md +5 -4
- package/dist/ai/ai-sdk.cjs +20 -19
- package/dist/ai/ai-sdk.cjs.map +1 -1
- package/dist/ai/ai-sdk.d.cts +2 -2
- package/dist/ai/ai-sdk.d.ts +2 -2
- package/dist/ai/ai-sdk.js +15 -14
- package/dist/ai/ai-sdk.js.map +1 -1
- package/dist/ai/index.cjs +23 -22
- package/dist/ai/index.d.cts +2 -2
- package/dist/ai/index.d.ts +2 -2
- package/dist/ai/index.js +15 -14
- package/dist/{api-BuFilDQB.d.cts → api-BIj9t4Oc.d.cts} +1 -1
- package/dist/{api-BuFilDQB.d.ts → api-BIj9t4Oc.d.ts} +1 -1
- package/dist/browser.cjs +17 -16
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +2 -2
- package/dist/browser.d.ts +2 -2
- package/dist/browser.js +15 -14
- package/dist/browser.js.map +1 -1
- package/dist/{chunk-4THC4VUA.cjs → chunk-2Z543TC3.cjs} +7 -6
- package/dist/chunk-2Z543TC3.cjs.map +1 -0
- package/dist/{chunk-DNZV4V4R.js → chunk-4SJSIJK2.js} +831 -10
- package/dist/chunk-4SJSIJK2.js.map +1 -0
- package/dist/{chunk-ZKDL6Y3O.js → chunk-5FF2IT3C.js} +5 -4
- package/dist/chunk-5FF2IT3C.js.map +1 -0
- package/dist/chunk-5IKOLUWK.js +89 -0
- package/dist/chunk-5IKOLUWK.js.map +1 -0
- package/dist/{chunk-3RAVPXLN.js → chunk-6URNSB6G.js} +5 -4
- package/dist/chunk-6URNSB6G.js.map +1 -0
- package/dist/{chunk-MIKCKV27.cjs → chunk-BW4KGTV7.cjs} +65 -31
- package/dist/chunk-BW4KGTV7.cjs.map +1 -0
- package/dist/{chunk-DBMZEZLF.cjs → chunk-DHHVYSQX.cjs} +6229 -51
- package/dist/chunk-DHHVYSQX.cjs.map +1 -0
- package/dist/{chunk-6ULC3UHJ.cjs → chunk-E2EJRVWS.cjs} +43 -12
- package/dist/chunk-E2EJRVWS.cjs.map +1 -0
- package/dist/{chunk-5CTERELC.js → chunk-EPKIJEH7.js} +5 -4
- package/dist/chunk-EPKIJEH7.js.map +1 -0
- package/dist/{chunk-IFR34VTL.cjs → chunk-GZY4CJ23.cjs} +5 -4
- package/dist/chunk-GZY4CJ23.cjs.map +1 -0
- package/dist/{chunk-TWAC2IIS.js → chunk-I55HO32M.js} +5 -4
- package/dist/chunk-I55HO32M.js.map +1 -0
- package/dist/{chunk-5SKT7RYR.js → chunk-J7JWMQD5.js} +7 -6
- package/dist/chunk-J7JWMQD5.js.map +1 -0
- package/dist/{chunk-PWI4NFYR.js → chunk-JDBG5DU2.js} +5 -4
- package/dist/chunk-JDBG5DU2.js.map +1 -0
- package/dist/{chunk-VRE5VWDQ.js → chunk-KVP7AORH.js} +43 -12
- package/dist/chunk-KVP7AORH.js.map +1 -0
- package/dist/{chunk-IURM4ZWE.js → chunk-L3CTXXVZ.js} +65 -31
- package/dist/chunk-L3CTXXVZ.js.map +1 -0
- package/dist/chunk-NAGUZFXX.cjs +94 -0
- package/dist/chunk-NAGUZFXX.cjs.map +1 -0
- package/dist/{chunk-H5JYZ5YS.cjs → chunk-OIZ4MYSF.cjs} +5 -4
- package/dist/chunk-OIZ4MYSF.cjs.map +1 -0
- package/dist/{chunk-T47A6XUK.cjs → chunk-QUKVGHN4.cjs} +5 -4
- package/dist/chunk-QUKVGHN4.cjs.map +1 -0
- package/dist/{chunk-V4OVUBLA.cjs → chunk-RYVV5UVI.cjs} +5 -4
- package/dist/chunk-RYVV5UVI.cjs.map +1 -0
- package/dist/{chunk-CQP5YHVK.cjs → chunk-S2KJRHDZ.cjs} +4 -5
- package/dist/chunk-S2KJRHDZ.cjs.map +1 -0
- package/dist/{chunk-5COUZTVA.cjs → chunk-ST5YRTTV.cjs} +5 -4
- package/dist/chunk-ST5YRTTV.cjs.map +1 -0
- package/dist/{chunk-CS67UBP3.cjs → chunk-SUIDD2C5.cjs} +5 -4
- package/dist/chunk-SUIDD2C5.cjs.map +1 -0
- package/dist/{chunk-DHKKDIVT.js → chunk-SZK376QB.js} +5 -4
- package/dist/chunk-SZK376QB.js.map +1 -0
- package/dist/{chunk-WIFGBWET.cjs → chunk-UUBNQV2T.cjs} +4 -5
- package/dist/chunk-UUBNQV2T.cjs.map +1 -0
- package/dist/{chunk-I6VEXSUK.js → chunk-VDSYMSUY.js} +4 -5
- package/dist/chunk-VDSYMSUY.js.map +1 -0
- package/dist/{chunk-J3Y2QDJR.cjs → chunk-WCAADEXJ.cjs} +833 -12
- package/dist/chunk-WCAADEXJ.cjs.map +1 -0
- package/dist/{chunk-XSNNGYXZ.cjs → chunk-YLEVMOK2.cjs} +22 -8
- package/dist/chunk-YLEVMOK2.cjs.map +1 -0
- package/dist/{chunk-HKJRHXGZ.js → chunk-Z5NGIM4Z.js} +6217 -39
- package/dist/chunk-Z5NGIM4Z.js.map +1 -0
- package/dist/{chunk-ZQZNWAHH.js → chunk-ZX74KJPM.js} +4 -5
- package/dist/chunk-ZX74KJPM.js.map +1 -0
- package/dist/{chunk-IZMAZOQI.js → chunk-ZYRCPSBU.js} +22 -8
- package/dist/chunk-ZYRCPSBU.js.map +1 -0
- package/dist/diagrams/blockdiagram/index.cjs +6 -5
- package/dist/diagrams/blockdiagram/index.d.cts +1 -1
- package/dist/diagrams/blockdiagram/index.d.ts +1 -1
- package/dist/diagrams/blockdiagram/index.js +2 -1
- package/dist/diagrams/circuit/index.cjs +8 -7
- package/dist/diagrams/circuit/index.d.cts +1 -1
- package/dist/diagrams/circuit/index.d.ts +1 -1
- package/dist/diagrams/circuit/index.js +2 -1
- package/dist/diagrams/ecomap/index.d.cts +1 -1
- package/dist/diagrams/ecomap/index.d.ts +1 -1
- package/dist/diagrams/entity/index.cjs +6 -5
- package/dist/diagrams/entity/index.d.cts +1 -1
- package/dist/diagrams/entity/index.d.ts +1 -1
- package/dist/diagrams/entity/index.js +2 -1
- package/dist/diagrams/fishbone/index.d.cts +1 -1
- package/dist/diagrams/fishbone/index.d.ts +1 -1
- package/dist/diagrams/flowchart/index.cjs +7 -7
- package/dist/diagrams/flowchart/index.d.cts +2 -2
- package/dist/diagrams/flowchart/index.d.ts +2 -2
- package/dist/diagrams/flowchart/index.js +1 -1
- package/dist/diagrams/genogram/index.d.cts +1 -1
- package/dist/diagrams/genogram/index.d.ts +1 -1
- package/dist/diagrams/ladder/index.cjs +6 -5
- package/dist/diagrams/ladder/index.d.cts +1 -1
- package/dist/diagrams/ladder/index.d.ts +1 -1
- package/dist/diagrams/ladder/index.js +2 -1
- package/dist/diagrams/logic/index.cjs +6 -5
- package/dist/diagrams/logic/index.d.cts +1 -1
- package/dist/diagrams/logic/index.d.ts +1 -1
- package/dist/diagrams/logic/index.js +2 -1
- package/dist/diagrams/orgchart/index.cjs +7 -6
- package/dist/diagrams/orgchart/index.d.cts +1 -1
- package/dist/diagrams/orgchart/index.d.ts +1 -1
- package/dist/diagrams/orgchart/index.js +2 -1
- package/dist/diagrams/pedigree/index.d.cts +1 -1
- package/dist/diagrams/pedigree/index.d.ts +1 -1
- package/dist/diagrams/phylo/index.cjs +7 -6
- package/dist/diagrams/phylo/index.d.cts +1 -1
- package/dist/diagrams/phylo/index.d.ts +1 -1
- package/dist/diagrams/phylo/index.js +2 -1
- package/dist/diagrams/sld/index.cjs +6 -5
- package/dist/diagrams/sld/index.d.cts +1 -1
- package/dist/diagrams/sld/index.d.ts +1 -1
- package/dist/diagrams/sld/index.js +2 -1
- package/dist/diagrams/sociogram/index.cjs +6 -5
- package/dist/diagrams/sociogram/index.d.cts +1 -1
- package/dist/diagrams/sociogram/index.d.ts +1 -1
- package/dist/diagrams/sociogram/index.js +2 -1
- package/dist/diagrams/timing/index.cjs +5 -4
- package/dist/diagrams/timing/index.d.cts +1 -1
- package/dist/diagrams/timing/index.d.ts +1 -1
- package/dist/diagrams/timing/index.js +2 -1
- package/dist/diagrams/venn/index.cjs +9 -8
- package/dist/diagrams/venn/index.d.cts +1 -1
- package/dist/diagrams/venn/index.d.ts +1 -1
- package/dist/diagrams/venn/index.js +2 -1
- package/dist/{index-D3u6vcA4.d.ts → index-CGK0xVls.d.ts} +3 -3
- package/dist/{index-bdfj6FpQ.d.cts → index-OW8eDrKj.d.cts} +3 -3
- package/dist/index.cjs +32 -31
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +14 -13
- package/dist/react.cjs +15 -14
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +14 -13
- package/dist/react.js.map +1 -1
- package/dist/{types-DnU2UlWz.d.ts → types-Gkyab1sL.d.cts} +5 -1
- package/dist/{types-DnU2UlWz.d.cts → types-Gkyab1sL.d.ts} +5 -1
- package/package.json +2 -2
- package/dist/chunk-3RAVPXLN.js.map +0 -1
- package/dist/chunk-4THC4VUA.cjs.map +0 -1
- package/dist/chunk-5COUZTVA.cjs.map +0 -1
- package/dist/chunk-5CTERELC.js.map +0 -1
- package/dist/chunk-5SKT7RYR.js.map +0 -1
- package/dist/chunk-6ULC3UHJ.cjs.map +0 -1
- package/dist/chunk-CQP5YHVK.cjs.map +0 -1
- package/dist/chunk-CS67UBP3.cjs.map +0 -1
- package/dist/chunk-DBMZEZLF.cjs.map +0 -1
- package/dist/chunk-DHKKDIVT.js.map +0 -1
- package/dist/chunk-DNZV4V4R.js.map +0 -1
- package/dist/chunk-H5JYZ5YS.cjs.map +0 -1
- package/dist/chunk-HKJRHXGZ.js.map +0 -1
- package/dist/chunk-I6VEXSUK.js.map +0 -1
- package/dist/chunk-IFR34VTL.cjs.map +0 -1
- package/dist/chunk-IURM4ZWE.js.map +0 -1
- package/dist/chunk-IZMAZOQI.js.map +0 -1
- package/dist/chunk-J3Y2QDJR.cjs.map +0 -1
- package/dist/chunk-MIKCKV27.cjs.map +0 -1
- package/dist/chunk-PWI4NFYR.js.map +0 -1
- package/dist/chunk-T47A6XUK.cjs.map +0 -1
- package/dist/chunk-TWAC2IIS.js.map +0 -1
- package/dist/chunk-V4OVUBLA.cjs.map +0 -1
- package/dist/chunk-VRE5VWDQ.js.map +0 -1
- package/dist/chunk-WIFGBWET.cjs.map +0 -1
- package/dist/chunk-XSNNGYXZ.cjs.map +0 -1
- package/dist/chunk-ZKDL6Y3O.js.map +0 -1
- package/dist/chunk-ZQZNWAHH.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/diagrams/blockdiagram/parser.ts","../src/diagrams/blockdiagram/layout.ts","../src/diagrams/blockdiagram/renderer.ts","../src/diagrams/blockdiagram/index.ts"],"names":["text","title","matchQuotedTitle","i","path","el","group","circle","svgRoot","desc","defs"],"mappings":"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","file":"chunk-SUIDD2C5.cjs","sourcesContent":["import type {\n BlockAST,\n BlockNode,\n BlockEdge,\n SummingJunction,\n BlockRole,\n} from \"../../core/types\";\nimport { matchQuotedTitle } from \"../../core/quotes\";\n\nexport class BlockDiagramParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"BlockDiagramParseError\";\n }\n}\n\nconst ROLE_VALUES = new Set<BlockRole>([\n \"plant\",\n \"controller\",\n \"sensor\",\n \"actuator\",\n \"reference\",\n \"disturbance\",\n \"generic\",\n]);\n\ninterface SignalDecl {\n id: string;\n label: string;\n discrete: boolean;\n}\n\ninterface ParsedAttrs {\n name?: string;\n role?: BlockRole;\n discrete?: boolean;\n label?: string;\n route?: \"above\" | \"below\";\n}\n\nfunction parseAttrs(s: string): ParsedAttrs {\n // Inside [ ... ] — comma-separated key:value or bare flags like \"discrete\"\n const result: ParsedAttrs = {};\n // Split at commas not inside quotes\n const parts: string[] = [];\n let cur = \"\";\n let inQuote = false;\n for (const ch of s) {\n if (ch === '\"') inQuote = !inQuote;\n if (ch === \",\" && !inQuote) {\n parts.push(cur);\n cur = \"\";\n } else {\n cur += ch;\n }\n }\n if (cur.trim()) parts.push(cur);\n\n for (const raw of parts) {\n const p = raw.trim();\n if (!p) continue;\n if (p === \"discrete\") {\n result.discrete = true;\n continue;\n }\n if (p.startsWith('\"') && p.endsWith('\"')) {\n result.label = p.slice(1, -1);\n continue;\n }\n const m = p.match(/^(\\w+)\\s*:\\s*(.+)$/);\n if (!m) continue;\n const key = m[1].toLowerCase();\n let val = m[2].trim();\n if (val.startsWith('\"') && val.endsWith('\"')) val = val.slice(1, -1);\n if (key === \"name\") result.name = val;\n else if (key === \"role\") {\n if (ROLE_VALUES.has(val as BlockRole)) result.role = val as BlockRole;\n } else if (key === \"label\") result.label = val;\n else if (key === \"route\") {\n if (val === \"above\" || val === \"below\") result.route = val;\n }\n }\n return result;\n}\n\nexport function parseBlockDiagram(text: string): BlockAST {\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n let title: string | undefined;\n const blocks: BlockNode[] = [];\n const sums: SummingJunction[] = [];\n const connections: BlockEdge[] = [];\n const signals = new Map<string, SignalDecl>();\n\n for (let i = 0; i < lines.length; i++) {\n const rawLine = lines[i] ?? \"\";\n const lineNo = i + 1;\n const line = rawLine.replace(/#.*$/, \"\").trim();\n if (!line) continue;\n\n // Header: blockdiagram \"Title\"\n if (/^blockdiagram\\b/i.test(line)) {\n const t = matchQuotedTitle(line);\n if (t !== undefined) title = t;\n continue;\n }\n\n // block: ID = block(\"label\") [role: X, name: \"Y\"]\n const blockMatch = line.match(\n /^([A-Za-z_]\\w*)\\s*=\\s*block\\s*\\(\\s*\"([^\"]*)\"\\s*\\)\\s*(?:\\[([^\\]]*)\\])?\\s*$/\n );\n if (blockMatch) {\n const id = blockMatch[1];\n const label = blockMatch[2];\n const attrs = blockMatch[3] ? parseAttrs(blockMatch[3]) : {};\n const node: BlockNode = { id, label, role: attrs.role ?? \"generic\" };\n if (attrs.route) node.route = attrs.route;\n blocks.push(node);\n continue;\n }\n\n // sum: ID = sum(+a, -b, ...)\n const sumMatch = line.match(\n /^([A-Za-z_]\\w*)\\s*=\\s*sum\\s*\\(([^)]*)\\)\\s*$/\n );\n if (sumMatch) {\n const id = sumMatch[1];\n const rawInputs = sumMatch[2]\n .split(\",\")\n .map((x) => x.trim())\n .filter(Boolean);\n const inputs: string[] = [];\n for (const tok of rawInputs) {\n if (tok.startsWith(\"+\") || tok.startsWith(\"-\")) inputs.push(tok);\n else inputs.push(\"+\" + tok);\n }\n sums.push({ id, inputs });\n continue;\n }\n\n // signal: ID = signal(\"label\") [discrete]\n const sigMatch = line.match(\n /^([A-Za-z_]\\w*)\\s*=\\s*signal\\s*\\(\\s*\"([^\"]*)\"\\s*\\)\\s*(?:\\[([^\\]]*)\\])?\\s*$/\n );\n if (sigMatch) {\n const id = sigMatch[1];\n const label = sigMatch[2];\n const attrs = sigMatch[3] ? parseAttrs(sigMatch[3]) : {};\n signals.set(id, { id, label, discrete: !!attrs.discrete });\n continue;\n }\n\n // Connection chain: `A -> B -> C [label_or_attrs]`. Inline `[id] -> [id]` (D2/Mermaid) auto-declares.\n const arrowIdx = line.indexOf(\"->\");\n if (arrowIdx >= 0) {\n let body = line;\n let tailAttrs: ParsedAttrs = {};\n // Trailing `[...]` must be preceded by whitespace, else it's an inline endpoint.\n if (body.endsWith(\"]\")) {\n let bracketStart = -1;\n let depth = 0;\n let inQuote = false;\n for (let i = body.length - 1; i >= 1; i--) {\n const ch = body[i];\n if (ch === '\"') inQuote = !inQuote;\n else if (!inQuote && ch === \"]\") depth++;\n else if (!inQuote && ch === \"[\") {\n depth--;\n if (depth === 0) {\n if (/\\s/.test(body[i - 1] ?? \"\")) bracketStart = i;\n break;\n }\n }\n }\n if (bracketStart >= 0) {\n const inner = body.slice(bracketStart + 1, -1).trim();\n const isBareId = /^[A-Za-z_]\\w*$/.test(inner);\n if (!isBareId) {\n body = body.slice(0, bracketStart).trim();\n if (inner.startsWith('\"') && inner.endsWith('\"') && !inner.slice(1, -1).includes(',')) {\n tailAttrs.label = inner.slice(1, -1);\n } else {\n tailAttrs = parseAttrs(inner);\n }\n }\n }\n }\n const parts = body.split(\"->\").map((x) => x.trim()).filter(Boolean);\n if (parts.length < 2) {\n throw new BlockDiagramParseError(`Invalid connection: ${line}`, lineNo, undefined, line);\n }\n const endpoints = parts.map((p) => {\n const m = /^\\[([A-Za-z_]\\w*)\\]$/.exec(p);\n return m ? m[1] : p;\n });\n for (const ep of endpoints) {\n if (!/^[A-Za-z_]\\w*$/.test(ep)) continue;\n const exists =\n blocks.some((b) => b.id === ep) ||\n sums.some((s) => s.id === ep) ||\n signals.has(ep);\n if (!exists) {\n blocks.push({ id: ep, label: ep, role: \"generic\" });\n }\n }\n for (let i = 0; i < endpoints.length - 1; i++) {\n const from = endpoints[i];\n const to = endpoints[i + 1];\n const isLast = i === endpoints.length - 2;\n const edge: BlockEdge = { from, to };\n if (isLast && tailAttrs.label) edge.label = tailAttrs.label;\n if (isLast && tailAttrs.discrete) edge.discrete = true;\n connections.push(edge);\n }\n continue;\n }\n }\n\n // Post-process: if edge endpoints reference a signal id, inline the signal.\n // A signal is a pass-through label. Merge edges X->sig and sig->Y into X->Y,\n // using signal's label (unless edge already has one) and discrete flag.\n if (signals.size > 0) {\n const merged: BlockEdge[] = [];\n const bySource = new Map<string, BlockEdge[]>();\n const byTarget = new Map<string, BlockEdge[]>();\n for (const e of connections) {\n if (!bySource.has(e.from)) bySource.set(e.from, []);\n bySource.get(e.from)!.push(e);\n if (!byTarget.has(e.to)) byTarget.set(e.to, []);\n byTarget.get(e.to)!.push(e);\n }\n\n const consumed = new Set<BlockEdge>();\n for (const sigId of signals.keys()) {\n const sig = signals.get(sigId)!;\n const incoming = byTarget.get(sigId) ?? [];\n const outgoing = bySource.get(sigId) ?? [];\n // For each incoming/outgoing pair, make a merged edge\n for (const ine of incoming) {\n for (const oute of outgoing) {\n consumed.add(ine);\n consumed.add(oute);\n merged.push({\n from: ine.from,\n to: oute.to,\n label: ine.label ?? oute.label ?? sig.label,\n discrete: sig.discrete || ine.discrete || oute.discrete,\n });\n }\n }\n }\n // Keep edges not consumed\n for (const e of connections) {\n if (!consumed.has(e)) merged.push(e);\n }\n connections.length = 0;\n connections.push(...merged);\n }\n\n return {\n type: \"blockdiagram\",\n title,\n blocks,\n sums,\n connections,\n };\n}\n","import type { BlockAST, BlockEdge, BlockNode, SummingJunction } from \"../../core/types\";\n\nexport interface LaidBlock {\n kind: \"block\";\n id: string;\n label: string;\n role: string;\n x: number;\n y: number;\n width: number;\n height: number;\n hasBranch?: boolean;\n}\n\nexport interface LaidSum {\n kind: \"sum\";\n id: string;\n cx: number;\n cy: number;\n r: number;\n hasBranch?: boolean;\n}\n\nexport interface LaidPort {\n kind: \"port\";\n id: string;\n label: string;\n x: number;\n y: number;\n isInput: boolean;\n hasBranch?: boolean;\n}\n\nexport type LaidNode = LaidBlock | LaidSum | LaidPort;\n\nexport interface LaidEdgePolarity {\n sign: \"+\" | \"-\";\n pin: \"left\" | \"top\" | \"right\" | \"bottom\";\n x: number;\n y: number;\n}\n\nexport interface LaidEdge {\n from: string;\n to: string;\n label?: string;\n discrete: boolean;\n path: string;\n midX: number;\n midY: number;\n isFeedback: boolean;\n /** Polarity sign to draw near the target if target is a sum */\n polarity?: LaidEdgePolarity;\n}\n\nexport interface BlockDiagramLayout {\n width: number;\n height: number;\n nodes: LaidNode[];\n edges: LaidEdge[];\n title?: string;\n /** Offset applied to all y coords (>0 when feedforward rows exist above FWD_Y) */\n topOffset: number;\n}\n\nconst BLOCK_W = 100;\nconst BLOCK_H = 54;\nconst SUM_R = 12;\nconst FWD_Y = 110;\nconst ROW_GAP = 80;\nconst FIRST_ROW_OFFSET = 110;\nconst COL_GAP = 60;\nconst LEFT_PAD = 30;\nconst RIGHT_PAD = 30;\n\ninterface Track {\n /** row index (1, 2, ...); 0 means forward path */\n row: number;\n /** above = y < FWD_Y; below = y > FWD_Y */\n side: \"above\" | \"below\";\n /** Occupied col ranges [minCol, maxCol] for collision detection */\n ranges: Array<[number, number]>;\n}\n\nexport function layoutBlockDiagram(ast: BlockAST): BlockDiagramLayout {\n const nodeIds = new Set<string>();\n for (const b of ast.blocks) nodeIds.add(b.id);\n for (const s of ast.sums) nodeIds.add(s.id);\n for (const e of ast.connections) {\n nodeIds.add(e.from);\n nodeIds.add(e.to);\n }\n\n const outgoing = new Map<string, BlockEdge[]>();\n const incoming = new Map<string, BlockEdge[]>();\n for (const id of nodeIds) {\n outgoing.set(id, []);\n incoming.set(id, []);\n }\n for (const e of ast.connections) {\n outgoing.get(e.from)!.push(e);\n incoming.get(e.to)!.push(e);\n }\n\n // Entry points\n const hasIn = nodeIds.has(\"in\");\n const entries: string[] = [];\n if (hasIn) entries.push(\"in\");\n for (const id of nodeIds) {\n if (id === \"in\" || id === \"out\") continue;\n if ((incoming.get(id) ?? []).length === 0 && !entries.includes(id)) {\n entries.push(id);\n }\n }\n\n // BFS forward (first-visit col assignment — back-edges become feedback)\n const col = new Map<string, number>();\n const queue: string[] = [];\n for (const e of entries) {\n col.set(e, 0);\n queue.push(e);\n }\n while (queue.length > 0) {\n const cur = queue.shift()!;\n const c = col.get(cur)!;\n for (const edge of outgoing.get(cur) ?? []) {\n if (!col.has(edge.to)) {\n col.set(edge.to, c + 1);\n queue.push(edge.to);\n }\n }\n }\n // Any unreached node\n for (const id of nodeIds) {\n if (!col.has(id)) col.set(id, 1);\n }\n\n // Feedback detection: outgoing edges are ALL going backward\n const isFeedback = new Set<string>();\n for (const id of nodeIds) {\n if (id === \"in\" || id === \"out\") continue;\n const myCol = col.get(id)!;\n const outs = outgoing.get(id) ?? [];\n if (outs.length === 0) continue;\n const allBack = outs.every((e) => (col.get(e.to) ?? myCol) < myCol);\n if (allBack) isFeedback.add(id);\n }\n\n // For each feedback node, compute loop range [minCol, maxCol]\n const blockById = new Map<string, BlockNode>();\n for (const b of ast.blocks) blockById.set(b.id, b);\n\n interface FbInfo {\n id: string;\n range: [number, number];\n side: \"above\" | \"below\";\n row: number; // depth\n }\n const fbInfos: FbInfo[] = [];\n for (const id of isFeedback) {\n const outs = outgoing.get(id) ?? [];\n const ins = incoming.get(id) ?? [];\n // targets (forward nodes it feeds back into)\n const targetCols = outs.map((e) => col.get(e.to) ?? 0);\n const sourceCols = ins.map((e) => col.get(e.from) ?? 0);\n const minC = Math.min(...targetCols, ...sourceCols);\n const maxC = Math.max(...targetCols, ...sourceCols);\n const bn = blockById.get(id);\n const side: \"above\" | \"below\" = bn?.route === \"above\" ? \"above\" : \"below\";\n fbInfos.push({ id, range: [minC, maxC], side, row: 0 });\n }\n\n // Sort by range width desc (outermost first), break ties by min col\n fbInfos.sort((a, b) => {\n const wa = a.range[1] - a.range[0];\n const wb = b.range[1] - b.range[0];\n if (wa !== wb) return wb - wa;\n return a.range[0] - b.range[0];\n });\n\n // Assign tracks per side, greedy interval-overlap depth\n const tracks: Record<\"above\" | \"below\", Track[]> = { above: [], below: [] };\n for (const fb of fbInfos) {\n let row = 1;\n while (true) {\n // check if any existing block on this (side, row) has overlapping range\n const occupied = tracks[fb.side].find((t) => t.row === row);\n const conflict =\n occupied?.ranges.some(\n ([a, b]) => !(fb.range[1] < a || fb.range[0] > b)\n ) ?? false;\n if (!conflict) {\n if (occupied) occupied.ranges.push(fb.range);\n else\n tracks[fb.side].push({ row, side: fb.side, ranges: [fb.range] });\n fb.row = row;\n break;\n }\n row++;\n }\n }\n\n const maxBelowRow = tracks.below.reduce((m, t) => Math.max(m, t.row), 0);\n const maxAboveRow = tracks.above.reduce((m, t) => Math.max(m, t.row), 0);\n\n // Compute y per (side, row)\n const yFor = (side: \"above\" | \"below\", row: number): number => {\n const step = FIRST_ROW_OFFSET + (row - 1) * ROW_GAP;\n return side === \"above\" ? FWD_Y - step : FWD_Y + step;\n };\n\n // For the feedforward row(s) to have room, shift all y by topOffset\n const topOffset = maxAboveRow > 0 ? (FIRST_ROW_OFFSET + (maxAboveRow - 1) * ROW_GAP) + 30 : 30;\n const forwardY = FWD_Y + (topOffset - 30);\n\n // Remap y helper\n const rowY = (side: \"above\" | \"below\", row: number): number =>\n yFor(side, row) + (topOffset - 30);\n\n // Normalize columns\n let maxFwdCol = 0;\n for (const id of nodeIds) {\n if (!isFeedback.has(id)) maxFwdCol = Math.max(maxFwdCol, col.get(id) ?? 0);\n }\n const colCount = maxFwdCol + 1;\n const colContent = new Array(colCount).fill(BLOCK_W);\n\n const colX: number[] = [];\n {\n let x = LEFT_PAD;\n for (let i = 0; i < colCount; i++) {\n const w = i === 0 && hasIn ? 30 : colContent[i];\n colX.push(x + w / 2);\n x += w + COL_GAP;\n }\n }\n const totalWidth = colX.length\n ? colX[colX.length - 1] + BLOCK_W / 2 + RIGHT_PAD\n : 400;\n\n // Lookup for feedback row info\n const fbById = new Map<string, FbInfo>();\n for (const f of fbInfos) fbById.set(f.id, f);\n\n const nodes: LaidNode[] = [];\n const branchCount = new Map<string, number>();\n for (const e of ast.connections) {\n branchCount.set(e.from, (branchCount.get(e.from) ?? 0) + 1);\n }\n const hasBranchOf = (id: string) => (branchCount.get(id) ?? 0) > 1;\n\n for (const b of ast.blocks) {\n const c = col.get(b.id) ?? 0;\n const cx = colX[Math.min(c, colX.length - 1)];\n let cy = forwardY;\n const fb = fbById.get(b.id);\n if (fb) cy = rowY(fb.side, fb.row);\n nodes.push({\n kind: \"block\",\n id: b.id,\n label: b.label,\n role: b.role ?? \"generic\",\n x: cx - BLOCK_W / 2,\n y: cy - BLOCK_H / 2,\n width: BLOCK_W,\n height: BLOCK_H,\n hasBranch: hasBranchOf(b.id),\n });\n }\n\n for (const s of ast.sums) {\n const c = col.get(s.id) ?? 0;\n const cx = colX[Math.min(c, colX.length - 1)];\n let cy = forwardY;\n const fb = fbById.get(s.id);\n if (fb) cy = rowY(fb.side, fb.row);\n nodes.push({\n kind: \"sum\",\n id: s.id,\n cx,\n cy,\n r: SUM_R,\n hasBranch: hasBranchOf(s.id),\n });\n }\n\n if (hasIn) {\n nodes.push({\n kind: \"port\",\n id: \"in\",\n label: \"in\",\n x: LEFT_PAD,\n y: forwardY,\n isInput: true,\n hasBranch: hasBranchOf(\"in\"),\n });\n }\n if (nodeIds.has(\"out\")) {\n const outCol = col.get(\"out\") ?? maxFwdCol;\n const cx = colX[Math.min(outCol, colX.length - 1)];\n nodes.push({\n kind: \"port\",\n id: \"out\",\n label: \"out\",\n x: cx,\n y: forwardY,\n isInput: false,\n });\n }\n\n // Anchor lookup\n interface Anchor {\n left: { x: number; y: number };\n right: { x: number; y: number };\n top: { x: number; y: number };\n bottom: { x: number; y: number };\n cx: number;\n cy: number;\n }\n const anchors = new Map<string, Anchor>();\n for (const n of nodes) {\n if (n.kind === \"block\") {\n anchors.set(n.id, {\n left: { x: n.x, y: n.y + n.height / 2 },\n right: { x: n.x + n.width, y: n.y + n.height / 2 },\n top: { x: n.x + n.width / 2, y: n.y },\n bottom: { x: n.x + n.width / 2, y: n.y + n.height },\n cx: n.x + n.width / 2,\n cy: n.y + n.height / 2,\n });\n } else if (n.kind === \"sum\") {\n anchors.set(n.id, {\n left: { x: n.cx - n.r, y: n.cy },\n right: { x: n.cx + n.r, y: n.cy },\n top: { x: n.cx, y: n.cy - n.r },\n bottom: { x: n.cx, y: n.cy + n.r },\n cx: n.cx,\n cy: n.cy,\n });\n } else {\n anchors.set(n.id, {\n left: { x: n.x - 10, y: n.y },\n right: { x: n.x + (n.isInput ? 20 : 0), y: n.y },\n top: { x: n.x, y: n.y - 10 },\n bottom: { x: n.x, y: n.y + 10 },\n cx: n.x,\n cy: n.y,\n });\n }\n }\n\n // Build sum-input-polarity lookup\n const sumPolarity = new Map<string, Map<string, \"+\" | \"-\">>();\n for (const s of ast.sums) {\n const m = new Map<string, \"+\" | \"-\">();\n for (const tok of s.inputs) {\n const sign = tok.startsWith(\"-\") ? \"-\" : \"+\";\n const srcId = tok.replace(/^[+-]/, \"\");\n m.set(srcId, sign);\n }\n sumPolarity.set(s.id, m);\n }\n\n // Build edges\n const edges: LaidEdge[] = [];\n // Track horizontal-track offsets for feedback paths to avoid overlap\n const sumById = new Map<string, SummingJunction>();\n for (const s of ast.sums) sumById.set(s.id, s);\n\n for (const e of ast.connections) {\n const fromA = anchors.get(e.from);\n const toA = anchors.get(e.to);\n if (!fromA || !toA) continue;\n\n const fromFb = fbById.get(e.from);\n const toFb = fbById.get(e.to);\n const fromCol = col.get(e.from) ?? 0;\n const toCol = col.get(e.to) ?? 0;\n\n // Determine pin on target when target is a sum: left (from forward earlier),\n // bottom (from below feedback), top (from above feedforward), or right (rare, output)\n let polarity: LaidEdgePolarity | undefined;\n if (sumById.has(e.to)) {\n const pm = sumPolarity.get(e.to);\n const sign = pm?.get(e.from) ?? \"+\";\n let pin: \"left\" | \"top\" | \"bottom\" | \"right\" = \"left\";\n if (fromFb?.side === \"below\") pin = \"bottom\";\n else if (fromFb?.side === \"above\") pin = \"top\";\n else if (fromCol < toCol) pin = \"left\";\n else pin = \"bottom\";\n const sumNode = nodes.find(\n (n) => n.kind === \"sum\" && n.id === e.to\n ) as LaidSum | undefined;\n if (sumNode) {\n let px = sumNode.cx, py = sumNode.cy;\n if (pin === \"left\") {\n px = sumNode.cx - sumNode.r - 8;\n py = sumNode.cy + 6;\n } else if (pin === \"bottom\") {\n px = sumNode.cx - sumNode.r - 2;\n py = sumNode.cy + sumNode.r + 10;\n } else if (pin === \"top\") {\n px = sumNode.cx - sumNode.r - 2;\n py = sumNode.cy - sumNode.r - 2;\n }\n polarity = { sign, pin, x: px, y: py };\n }\n }\n\n // Route\n let path: string;\n let midX: number, midY: number;\n let isFb = false;\n\n const fromIsFbSide = fromFb?.side;\n const toIsFbSide = toFb?.side;\n\n if (fromIsFbSide && toIsFbSide === fromIsFbSide) {\n // within same feedback row\n const sx = fromA.left.x;\n const sy = fromA.left.y;\n const tx = toA.right.x;\n const ty = toA.right.y;\n path = `M ${sx} ${sy} L ${tx} ${ty}`;\n midX = (sx + tx) / 2;\n midY = sy - 6;\n isFb = true;\n } else if (!fromIsFbSide && toIsFbSide === \"below\") {\n // forward → below feedback: branch down from source.bottom\n const sx = fromA.bottom.x;\n const sy = fromA.bottom.y;\n const tx = toA.right.x;\n const ty = toA.right.y;\n path = `M ${sx} ${sy} L ${sx} ${ty} L ${tx} ${ty}`;\n midX = sx;\n midY = (sy + ty) / 2;\n isFb = true;\n } else if (!fromIsFbSide && toIsFbSide === \"above\") {\n // forward → above feedforward: branch up from source.top\n const sx = fromA.top.x;\n const sy = fromA.top.y;\n const tx = toA.right.x;\n const ty = toA.right.y;\n path = `M ${sx} ${sy} L ${sx} ${ty} L ${tx} ${ty}`;\n midX = sx;\n midY = (sy + ty) / 2;\n isFb = true;\n } else if (fromIsFbSide === \"below\" && !toIsFbSide) {\n // below feedback → forward target (bottom pin if sum)\n const sx = fromA.left.x;\n const sy = fromA.left.y;\n const tx = toA.bottom.x;\n const ty = toA.bottom.y;\n path = `M ${sx} ${sy} L ${tx} ${sy} L ${tx} ${ty}`;\n midX = (sx + tx) / 2;\n midY = sy - 6;\n isFb = true;\n } else if (fromIsFbSide === \"above\" && !toIsFbSide) {\n // above feedforward → forward target (top pin if sum)\n const sx = fromA.left.x;\n const sy = fromA.left.y;\n const tx = toA.top.x;\n const ty = toA.top.y;\n path = `M ${sx} ${sy} L ${tx} ${sy} L ${tx} ${ty}`;\n midX = (sx + tx) / 2;\n midY = sy - 6;\n isFb = true;\n } else if (toCol < fromCol) {\n // generic back-edge fallback (below)\n const sx = fromA.right.x;\n const sy = fromA.right.y;\n const tx = toA.bottom.x;\n const ty = toA.bottom.y;\n const dipY = Math.max(sy, ty) + 60;\n path = `M ${sx} ${sy} L ${sx} ${dipY} L ${tx} ${dipY} L ${tx} ${ty}`;\n midX = (sx + tx) / 2;\n midY = dipY + 10;\n isFb = true;\n } else {\n // forward edge\n const sx = fromA.right.x;\n const sy = fromA.right.y;\n const tx = toA.left.x;\n const ty = toA.left.y;\n if (Math.abs(sy - ty) < 0.5) {\n path = `M ${sx} ${sy} L ${tx} ${ty}`;\n } else {\n const midXH = (sx + tx) / 2;\n path = `M ${sx} ${sy} L ${midXH} ${sy} L ${midXH} ${ty} L ${tx} ${ty}`;\n }\n midX = (sx + tx) / 2;\n midY = sy - 8;\n }\n\n edges.push({\n from: e.from,\n to: e.to,\n label: e.label,\n discrete: !!e.discrete,\n path,\n midX,\n midY,\n isFeedback: isFb,\n polarity,\n });\n }\n\n // Total canvas height: enough for top rows + forward + bottom rows\n const totalTopSpace =\n maxAboveRow > 0\n ? FIRST_ROW_OFFSET + (maxAboveRow - 1) * ROW_GAP + 60\n : 30;\n const totalBottomSpace =\n maxBelowRow > 0\n ? FIRST_ROW_OFFSET + (maxBelowRow - 1) * ROW_GAP + 60\n : 100;\n const height = Math.max(\n forwardY + totalBottomSpace,\n FWD_Y + 170,\n totalTopSpace + totalBottomSpace\n );\n\n return {\n width: totalWidth,\n height,\n nodes,\n edges,\n title: ast.title,\n topOffset,\n };\n}\n","import type { BlockAST } from \"../../core/types\";\nimport { layoutBlockDiagram } 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} from \"../../core/svg\";\n\nconst ROLE_FILL: Record<string, string> = {\n plant: \"#ffffff\",\n controller: \"#E3F2FD\",\n sensor: \"#F3E5F5\",\n actuator: \"#E8F5E9\",\n filter: \"#FFF8E1\",\n reference: \"#ffffff\",\n disturbance: \"#FFF3E0\",\n generic: \"#ffffff\",\n};\n\nexport function renderBlockDiagram(ast: BlockAST): string {\n const layout = layoutBlockDiagram(ast);\n const titleOffset = ast.title ? 26 : 0;\n const { width } = layout;\n const height = layout.height + titleOffset;\n\n const css = `\n.schematex-bd { font-family: system-ui, -apple-system, sans-serif; }\n.schematex-bd-block { stroke: #333; stroke-width: 2; }\n.schematex-bd-tf { font: italic 14px serif; fill: #111; }\n.schematex-bd-block-name { font: 10px sans-serif; fill: #666; }\n.schematex-bd-sum { fill: #fff; stroke: #333; stroke-width: 2; }\n.schematex-bd-sum-sign { font: bold 11px sans-serif; fill: #333; }\n.schematex-bd-signal { stroke: #333; stroke-width: 2; fill: none; }\n.schematex-bd-signal-discrete { stroke: #333; stroke-width: 2; fill: none; stroke-dasharray: 6 4; }\n.schematex-bd-signal-label { font: italic 12px serif; fill: #333; }\n.schematex-bd-port-label { font: italic 13px serif; fill: #111; }\n.schematex-bd-title { font: bold 15px sans-serif; fill: #111; }\n.schematex-bd-branch { fill: #333; stroke: none; }\n`.trim();\n\n const arrowDef = el(\n \"marker\",\n {\n id: \"lt-bd-arrow\",\n markerWidth: 10,\n markerHeight: 8,\n refX: 9,\n refY: 4,\n orient: \"auto\",\n },\n [el(\"polygon\", { points: \"0 0, 10 4, 0 8\", fill: \"#333\" })]\n );\n\n const nodeSvgs: string[] = [];\n const edgeSvgs: string[] = [];\n const branchSvgs: string[] = [];\n\n for (const n of layout.nodes) {\n if (n.kind === \"block\") {\n const fill = ROLE_FILL[n.role] ?? \"#fff\";\n nodeSvgs.push(\n group(\n {\n transform: `translate(${n.x}, ${n.y})`,\n \"data-block-id\": n.id,\n \"data-block-role\": n.role,\n },\n [\n el(\"rect\", {\n width: n.width,\n height: n.height,\n fill,\n class: \"schematex-bd-block\",\n rx: 2,\n }),\n text(\n {\n x: n.width / 2,\n y: n.height / 2 + 5,\n \"text-anchor\": \"middle\",\n class: \"schematex-bd-tf\",\n },\n n.label\n ),\n ]\n )\n );\n if (n.hasBranch) {\n branchSvgs.push(\n circle({\n cx: n.x + n.width,\n cy: n.y + n.height / 2,\n r: 3.5,\n class: \"schematex-bd-branch\",\n })\n );\n }\n } else if (n.kind === \"sum\") {\n nodeSvgs.push(\n group({ \"data-sum-id\": n.id }, [\n circle({\n cx: n.cx,\n cy: n.cy,\n r: n.r,\n class: \"schematex-bd-sum\",\n }),\n ])\n );\n if (n.hasBranch) {\n branchSvgs.push(\n circle({\n cx: n.cx + n.r,\n cy: n.cy,\n r: 3.5,\n class: \"schematex-bd-branch\",\n })\n );\n }\n } else if (n.kind === \"port\") {\n nodeSvgs.push(\n group({ \"data-port-id\": n.id }, [\n text(\n {\n x: n.isInput ? n.x - 4 : n.x + 4,\n y: n.y + 4,\n \"text-anchor\": n.isInput ? \"end\" : \"start\",\n class: \"schematex-bd-port-label\",\n },\n n.label\n ),\n ])\n );\n }\n }\n\n for (const e of layout.edges) {\n const cls = e.discrete\n ? \"schematex-bd-signal-discrete\"\n : \"schematex-bd-signal\";\n edgeSvgs.push(\n pathEl({\n d: e.path,\n class: cls,\n \"marker-end\": \"url(#lt-bd-arrow)\",\n \"data-from\": e.from,\n \"data-to\": e.to,\n })\n );\n if (e.label) {\n edgeSvgs.push(\n text(\n {\n x: e.midX,\n y: e.midY,\n \"text-anchor\": \"middle\",\n class: \"schematex-bd-signal-label\",\n },\n e.label\n )\n );\n }\n if (e.polarity) {\n edgeSvgs.push(\n text(\n {\n x: e.polarity.x,\n y: e.polarity.y,\n \"text-anchor\": \"middle\",\n class: \"schematex-bd-sum-sign\",\n },\n e.polarity.sign === \"-\" ? \"−\" : \"+\"\n )\n );\n }\n }\n\n const titleSvg = ast.title\n ? text(\n {\n x: width / 2,\n y: 18,\n \"text-anchor\": \"middle\",\n class: \"schematex-bd-title\",\n },\n ast.title\n )\n : \"\";\n\n return svgRoot(\n {\n class: \"schematex-bd\",\n viewBox: `0 0 ${width} ${height}`,\n width,\n height,\n role: \"img\",\n \"data-diagram-type\": \"blockdiagram\",\n },\n [\n titleEl(ast.title ?? \"Block Diagram\"),\n desc(\n `Block diagram with ${ast.blocks.length} blocks, ${ast.sums.length} summing junctions, ${ast.connections.length} signals`\n ),\n defs([el(\"style\", {}, css), arrowDef]),\n titleSvg,\n group({ transform: `translate(0, ${titleOffset})` }, [\n group({ class: \"schematex-bd-signals\" }, edgeSvgs),\n group({ class: \"schematex-bd-nodes\" }, nodeSvgs),\n group({ class: \"schematex-bd-branches\" }, branchSvgs),\n ]),\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseBlockDiagram } from \"./parser\";\nimport { renderBlockDiagram } from \"./renderer\";\n\nexport const blockdiagram: DiagramPlugin = {\n type: \"blockdiagram\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"blockdiagram\");\n },\n parse: parseBlockDiagram,\n\n render(text: string): string {\n const ast = parseBlockDiagram(text);\n return renderBlockDiagram(ast);\n },\n};\n\nexport { parseBlockDiagram } from \"./parser\";\nexport { renderBlockDiagram } from \"./renderer\";\nexport { layoutBlockDiagram } from \"./layout\";\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolveBaseTheme } from './chunk-2VNMKOUO.js';
|
|
2
|
+
import { matchQuotedTitle } from './chunk-5IKOLUWK.js';
|
|
2
3
|
import { title, desc, el, defs, text, rect, path, group, svgRoot, escapeXml, polygon, circle } from './chunk-SYYBKDL7.js';
|
|
3
4
|
|
|
4
5
|
// src/diagrams/entity/parser.ts
|
|
@@ -157,8 +158,8 @@ function parseEntityDSL(text2) {
|
|
|
157
158
|
const line = raw.trim();
|
|
158
159
|
if (!line) continue;
|
|
159
160
|
if (/^entity-structure\b/i.test(line)) {
|
|
160
|
-
const
|
|
161
|
-
if (
|
|
161
|
+
const t = matchQuotedTitle(line);
|
|
162
|
+
if (t !== void 0) title2 = t;
|
|
162
163
|
continue;
|
|
163
164
|
}
|
|
164
165
|
const jurMatch = line.match(
|
|
@@ -1048,5 +1049,5 @@ var entity = {
|
|
|
1048
1049
|
};
|
|
1049
1050
|
|
|
1050
1051
|
export { entity, layoutEntity, parseEntityDSL, renderEntity };
|
|
1051
|
-
//# sourceMappingURL=chunk-
|
|
1052
|
-
//# sourceMappingURL=chunk-
|
|
1052
|
+
//# sourceMappingURL=chunk-SZK376QB.js.map
|
|
1053
|
+
//# sourceMappingURL=chunk-SZK376QB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"],"mappings":"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","file":"chunk-SZK376QB.js","sourcesContent":["import type {\n EntityAST,\n EntityNode,\n EntityType,\n EntityEdge,\n EntityEdgeOp,\n JurisdictionDef,\n ClusterDef,\n} from \"../../core/types\";\nimport { matchQuotedTitle } from \"../../core/quotes\";\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 t = matchQuotedTitle(line);\n if (t !== undefined) title = t;\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 { 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 parse: parseEntityDSL,\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"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var chunk5UCXMYE7_cjs = require('./chunk-5UCXMYE7.cjs');
|
|
4
4
|
var chunkD7EHZFK4_cjs = require('./chunk-D7EHZFK4.cjs');
|
|
5
|
+
var chunkNAGUZFXX_cjs = require('./chunk-NAGUZFXX.cjs');
|
|
5
6
|
var chunk3WNW5Y7P_cjs = require('./chunk-3WNW5Y7P.cjs');
|
|
6
7
|
|
|
7
8
|
// src/diagrams/sociogram/parser.ts
|
|
@@ -84,9 +85,7 @@ function parseSociogram(text2) {
|
|
|
84
85
|
throw new SociogramParseError("Sociogram must start with 'sociogram'");
|
|
85
86
|
}
|
|
86
87
|
lineIdx++;
|
|
87
|
-
|
|
88
|
-
const titleMatch = headerLine.match(/"([^"]+)"/);
|
|
89
|
-
if (titleMatch) titleStr = titleMatch[1];
|
|
88
|
+
const titleStr = chunkNAGUZFXX_cjs.matchQuotedTitle(headerLine);
|
|
90
89
|
const config = {
|
|
91
90
|
layout: "circular",
|
|
92
91
|
sizing: "uniform",
|
|
@@ -939,5 +938,5 @@ exports.layoutSociogram = layoutSociogram;
|
|
|
939
938
|
exports.parseSociogram = parseSociogram;
|
|
940
939
|
exports.renderSociogram = renderSociogram;
|
|
941
940
|
exports.sociogram = sociogram;
|
|
942
|
-
//# sourceMappingURL=chunk-
|
|
943
|
-
//# sourceMappingURL=chunk-
|
|
941
|
+
//# sourceMappingURL=chunk-UUBNQV2T.cjs.map
|
|
942
|
+
//# sourceMappingURL=chunk-UUBNQV2T.cjs.map
|