schematex 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/ai-sdk.cjs +24 -24
- package/dist/ai/ai-sdk.js +19 -19
- package/dist/ai/index.cjs +33 -33
- package/dist/ai/index.js +20 -20
- package/dist/browser.cjs +25 -25
- package/dist/browser.js +19 -19
- package/dist/{chunk-YMFYPB5Y.cjs → chunk-2A5HJFOX.cjs} +4 -4
- package/dist/{chunk-YMFYPB5Y.cjs.map → chunk-2A5HJFOX.cjs.map} +1 -1
- package/dist/{chunk-6L46VIXI.cjs → chunk-2ASZMLC3.cjs} +20 -28
- package/dist/chunk-2ASZMLC3.cjs.map +1 -0
- package/dist/{chunk-6NUAGU6O.js → chunk-2RFFCZ3I.js} +3 -3
- package/dist/{chunk-6NUAGU6O.js.map → chunk-2RFFCZ3I.js.map} +1 -1
- package/dist/{chunk-2R4UXKCT.cjs → chunk-3DSNGR26.cjs} +5 -5
- package/dist/{chunk-2R4UXKCT.cjs.map → chunk-3DSNGR26.cjs.map} +1 -1
- package/dist/{chunk-D34VGLSE.cjs → chunk-4MGALM2C.cjs} +5 -5
- package/dist/{chunk-D34VGLSE.cjs.map → chunk-4MGALM2C.cjs.map} +1 -1
- package/dist/{chunk-ABCMTAOZ.js → chunk-56DSMSXK.js} +7 -4
- package/dist/chunk-56DSMSXK.js.map +1 -0
- package/dist/{chunk-Q2YRJHFB.cjs → chunk-6BJKQULN.cjs} +7 -7
- package/dist/chunk-6BJKQULN.cjs.map +1 -0
- package/dist/{chunk-NFZMNKOR.cjs → chunk-7JJQEECD.cjs} +15 -15
- package/dist/{chunk-NFZMNKOR.cjs.map → chunk-7JJQEECD.cjs.map} +1 -1
- package/dist/{chunk-JN6FHUC6.js → chunk-7SVB3XA7.js} +3 -3
- package/dist/{chunk-JN6FHUC6.js.map → chunk-7SVB3XA7.js.map} +1 -1
- package/dist/{chunk-J34HDRFY.js → chunk-7Z2GDS4G.js} +4 -4
- package/dist/{chunk-J34HDRFY.js.map → chunk-7Z2GDS4G.js.map} +1 -1
- package/dist/{chunk-Z5ML4QYG.js → chunk-CURAZVOH.js} +3 -3
- package/dist/{chunk-Z5ML4QYG.js.map → chunk-CURAZVOH.js.map} +1 -1
- package/dist/{chunk-KGOZBABH.cjs → chunk-GYTU7L4L.cjs} +12 -12
- package/dist/{chunk-KGOZBABH.cjs.map → chunk-GYTU7L4L.cjs.map} +1 -1
- package/dist/{chunk-B5AQ3CG3.cjs → chunk-HILYXWGJ.cjs} +16 -13
- package/dist/chunk-HILYXWGJ.cjs.map +1 -0
- package/dist/{chunk-E3CAJGJM.js → chunk-HJA7MIMV.js} +6 -6
- package/dist/chunk-HJA7MIMV.js.map +1 -0
- package/dist/{chunk-DX44TBFZ.js → chunk-IQLZUCWI.js} +20 -28
- package/dist/chunk-IQLZUCWI.js.map +1 -0
- package/dist/{chunk-NXU4XKLY.cjs → chunk-JHJJT5H5.cjs} +9 -7
- package/dist/chunk-JHJJT5H5.cjs.map +1 -0
- package/dist/{chunk-CDK7KDIW.js → chunk-JR6JNQEZ.js} +4 -4
- package/dist/{chunk-CDK7KDIW.js.map → chunk-JR6JNQEZ.js.map} +1 -1
- package/dist/{chunk-YTGOLTLJ.js → chunk-KR7PPCC4.js} +4 -4
- package/dist/{chunk-YTGOLTLJ.js.map → chunk-KR7PPCC4.js.map} +1 -1
- package/dist/{chunk-AJJYWXZB.cjs → chunk-L2NY4XEY.cjs} +4 -4
- package/dist/{chunk-AJJYWXZB.cjs.map → chunk-L2NY4XEY.cjs.map} +1 -1
- package/dist/{chunk-EBX4KCYW.js → chunk-MERU76LW.js} +4 -4
- package/dist/{chunk-EBX4KCYW.js.map → chunk-MERU76LW.js.map} +1 -1
- package/dist/{chunk-IXRPRMHI.js → chunk-MTIZIHWE.js} +9 -7
- package/dist/chunk-MTIZIHWE.js.map +1 -0
- package/dist/{chunk-47SGK5R6.cjs → chunk-MUE45N2A.cjs} +5 -5
- package/dist/{chunk-47SGK5R6.cjs.map → chunk-MUE45N2A.cjs.map} +1 -1
- package/dist/{chunk-DHI7YAQJ.cjs → chunk-MYVY55DO.cjs} +15 -15
- package/dist/{chunk-DHI7YAQJ.cjs.map → chunk-MYVY55DO.cjs.map} +1 -1
- package/dist/{chunk-NZT5P2XZ.cjs → chunk-NT6VVMLW.cjs} +291 -2
- package/dist/chunk-NT6VVMLW.cjs.map +1 -0
- package/dist/{chunk-QYC6WZEM.cjs → chunk-NTQBNBBP.cjs} +486 -437
- package/dist/chunk-NTQBNBBP.cjs.map +1 -0
- package/dist/{chunk-T5KHNJ67.cjs → chunk-PSQGLE6U.cjs} +6 -6
- package/dist/{chunk-T5KHNJ67.cjs.map → chunk-PSQGLE6U.cjs.map} +1 -1
- package/dist/{chunk-GDZNTILD.js → chunk-TMAOPJCT.js} +4 -4
- package/dist/chunk-TMAOPJCT.js.map +1 -0
- package/dist/{chunk-VOJGLBE5.js → chunk-TP7LQ5PF.js} +312 -263
- package/dist/chunk-TP7LQ5PF.js.map +1 -0
- package/dist/{chunk-UOM3EDE6.js → chunk-TWTUIUNK.js} +3 -3
- package/dist/{chunk-UOM3EDE6.js.map → chunk-TWTUIUNK.js.map} +1 -1
- package/dist/{chunk-UK6HF6PE.js → chunk-TYEQC7PV.js} +288 -3
- package/dist/chunk-TYEQC7PV.js.map +1 -0
- package/dist/{chunk-2SZJQVPN.cjs → chunk-V3JTVTPY.cjs} +87 -30
- package/dist/chunk-V3JTVTPY.cjs.map +1 -0
- package/dist/{chunk-KF3DFASA.js → chunk-VMUNKEB2.js} +3 -3
- package/dist/{chunk-KF3DFASA.js.map → chunk-VMUNKEB2.js.map} +1 -1
- package/dist/{chunk-K2D6VFLP.js → chunk-VWIKDJNV.js} +78 -22
- package/dist/chunk-VWIKDJNV.js.map +1 -0
- package/dist/{chunk-JGCKW5RS.js → chunk-VY4JOTM2.js} +5 -5
- package/dist/chunk-VY4JOTM2.js.map +1 -0
- package/dist/{chunk-LENRV7ZJ.cjs → chunk-VYAUTNHC.cjs} +5 -5
- package/dist/chunk-VYAUTNHC.cjs.map +1 -0
- package/dist/{chunk-E7LXMEKX.js → chunk-VZVREOTM.js} +3 -3
- package/dist/{chunk-E7LXMEKX.js.map → chunk-VZVREOTM.js.map} +1 -1
- package/dist/{chunk-JIUC4DRS.cjs → chunk-WFVRUUJW.cjs} +6 -6
- package/dist/chunk-WFVRUUJW.cjs.map +1 -0
- package/dist/{chunk-FJVQGBPU.cjs → chunk-XA6XIAMN.cjs} +5 -5
- package/dist/{chunk-FJVQGBPU.cjs.map → chunk-XA6XIAMN.cjs.map} +1 -1
- package/dist/diagrams/blockdiagram/index.cjs +6 -5
- package/dist/diagrams/blockdiagram/index.d.cts +2 -2
- package/dist/diagrams/blockdiagram/index.d.ts +2 -2
- package/dist/diagrams/blockdiagram/index.js +2 -1
- package/dist/diagrams/circuit/index.cjs +9 -9
- package/dist/diagrams/circuit/index.js +2 -2
- package/dist/diagrams/ecomap/index.cjs +7 -7
- package/dist/diagrams/ecomap/index.js +2 -2
- package/dist/diagrams/entity/index.cjs +6 -6
- package/dist/diagrams/entity/index.js +2 -2
- package/dist/diagrams/fishbone/index.cjs +8 -8
- package/dist/diagrams/fishbone/index.js +2 -2
- package/dist/diagrams/flowchart/index.cjs +8 -8
- package/dist/diagrams/flowchart/index.js +2 -2
- package/dist/diagrams/genogram/index.cjs +9 -9
- package/dist/diagrams/genogram/index.js +2 -2
- package/dist/diagrams/ladder/index.cjs +6 -6
- package/dist/diagrams/ladder/index.js +2 -2
- package/dist/diagrams/logic/index.cjs +8 -8
- package/dist/diagrams/logic/index.js +2 -2
- package/dist/diagrams/orgchart/index.cjs +8 -8
- package/dist/diagrams/orgchart/index.js +2 -2
- package/dist/diagrams/pedigree/index.cjs +7 -7
- package/dist/diagrams/pedigree/index.js +2 -2
- package/dist/diagrams/phylo/index.cjs +7 -7
- package/dist/diagrams/phylo/index.js +2 -2
- package/dist/diagrams/sld/index.cjs +8 -8
- package/dist/diagrams/sld/index.js +2 -2
- package/dist/diagrams/sociogram/index.cjs +6 -6
- package/dist/diagrams/sociogram/index.js +2 -2
- package/dist/diagrams/timing/index.cjs +4 -4
- package/dist/diagrams/timing/index.js +1 -1
- package/dist/diagrams/venn/index.cjs +9 -9
- package/dist/diagrams/venn/index.js +2 -2
- package/dist/index.cjs +87 -87
- package/dist/index.js +23 -23
- package/dist/react.cjs +19 -19
- package/dist/react.js +18 -18
- package/package.json +1 -1
- package/dist/chunk-2SZJQVPN.cjs.map +0 -1
- package/dist/chunk-6L46VIXI.cjs.map +0 -1
- package/dist/chunk-ABCMTAOZ.js.map +0 -1
- package/dist/chunk-B5AQ3CG3.cjs.map +0 -1
- package/dist/chunk-DX44TBFZ.js.map +0 -1
- package/dist/chunk-E3CAJGJM.js.map +0 -1
- package/dist/chunk-GDZNTILD.js.map +0 -1
- package/dist/chunk-IXRPRMHI.js.map +0 -1
- package/dist/chunk-JGCKW5RS.js.map +0 -1
- package/dist/chunk-JIUC4DRS.cjs.map +0 -1
- package/dist/chunk-K2D6VFLP.js.map +0 -1
- package/dist/chunk-LENRV7ZJ.cjs.map +0 -1
- package/dist/chunk-NXU4XKLY.cjs.map +0 -1
- package/dist/chunk-NZT5P2XZ.cjs.map +0 -1
- package/dist/chunk-Q2YRJHFB.cjs.map +0 -1
- package/dist/chunk-QYC6WZEM.cjs.map +0 -1
- package/dist/chunk-UK6HF6PE.js.map +0 -1
- package/dist/chunk-VOJGLBE5.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/diagrams/orgchart/parser.ts","../src/diagrams/orgchart/lint.ts","../src/diagrams/orgchart/layout.ts","../src/diagrams/orgchart/renderer.ts","../src/diagrams/orgchart/index.ts"],"names":["text","title","sx","sy","ex","ey","path"],"mappings":"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","file":"chunk-E3CAJGJM.js","sourcesContent":["import type {\n OrgchartAST,\n OrgchartDirection,\n OrgchartEdge,\n OrgchartLayoutMode,\n OrgchartNode,\n OrgchartNodeKind,\n OrgchartRoleIcon,\n} from \"./types\";\nimport { matchQuotedTitle } from \"../../core/quotes\";\n\nexport class OrgchartParseError 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 = \"OrgchartParseError\";\n }\n}\n\nconst ROLE_ICONS: Record<string, OrgchartRoleIcon> = {\n ceo: \"CEO\",\n cto: \"CTO\",\n cfo: \"CFO\",\n coo: \"COO\",\n cmo: \"CMO\",\n cpo: \"CPO\",\n vp: \"VP\",\n engineer: \"Engineer\",\n engineering: \"Engineer\",\n designer: \"Designer\",\n design: \"Designer\",\n sales: \"Sales\",\n hr: \"HR\",\n legal: \"Legal\",\n ops: \"Ops\",\n operations: \"Ops\",\n marketing: \"Marketing\",\n product: \"Product\",\n data: \"Data\",\n advisor: \"Advisor\",\n intern: \"Intern\",\n vacant: \"Vacant\",\n};\n\nconst NODE_KIND_KEYWORDS = new Set([\n \"person\",\n \"role\",\n \"open\",\n \"draft\",\n \"tbh\",\n \"advisor\",\n \"external\",\n]);\n\nfunction stripComment(line: string): string {\n let out = \"\";\n let inQuote = false;\n for (const ch of line) {\n if (ch === '\"') inQuote = !inQuote;\n if ((ch === \"#\" || (ch === \"/\" && out.endsWith(\"/\"))) && !inQuote) {\n if (ch === \"/\") return out.slice(0, -1);\n return out;\n }\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\nfunction splitTopLevelCommas(inside: string): string[] {\n const parts: string[] = [];\n let cur = \"\";\n let inQuote = false;\n for (const ch of inside) {\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 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) {\n // bare flag like [open]\n out[s.toLowerCase()] = \"true\";\n continue;\n }\n const k = s.slice(0, colon).trim().toLowerCase();\n const v = s.slice(colon + 1).trim();\n out[k] = stripQuotes(v);\n }\n return out;\n}\n\ninterface RawLine {\n indent: number;\n text: string;\n line: number;\n}\n\nfunction tokenizeLines(text: string): RawLine[] {\n const result: RawLine[] = [];\n const split = text.split(\"\\n\");\n for (let i = 0; i < split.length; i++) {\n const raw = split[i] ?? \"\";\n const stripped = stripComment(raw.replace(/\\r$/, \"\"));\n if (!stripped.trim()) continue;\n const match = stripped.match(/^(\\s*)(.*)$/);\n if (!match) continue;\n const indent = match[1].replace(/\\t/g, \" \").length;\n result.push({ indent, text: match[2].trim(), line: i + 1 });\n }\n return result;\n}\n\nfunction parseNodeLine(line: string): {\n kind: OrgchartNodeKind;\n id: string;\n fields: string[];\n props: Record<string, string>;\n} | null {\n // Optional leading kind keyword\n let kind: OrgchartNodeKind = \"person\";\n let rest = line;\n const firstSp = line.indexOf(\" \");\n if (firstSp > 0) {\n const first = line.slice(0, firstSp).toLowerCase();\n if (NODE_KIND_KEYWORDS.has(first)) {\n if (first === \"role\" || first === \"open\") kind = \"role\";\n else if (first === \"draft\" || first === \"tbh\") kind = \"draft\";\n else if (first === \"advisor\" || first === \"external\") kind = \"advisor\";\n else kind = \"person\";\n rest = line.slice(firstSp + 1).trim();\n }\n }\n\n // <id> : \"<name>\" | <title> | <department> [props]\n const colonIdx = rest.indexOf(\":\");\n if (colonIdx < 0) return null;\n const id = rest.slice(0, colonIdx).trim();\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(id)) return null;\n\n let tail = rest.slice(colonIdx + 1).trim();\n // Extract [props]\n let props: Record<string, string> = {};\n const propsMatch = tail.match(/\\[([^\\]]*)\\]\\s*$/);\n if (propsMatch) {\n props = parseProps(propsMatch[1]);\n tail = tail.slice(0, tail.length - propsMatch[0].length).trim();\n }\n\n // Split by pipe at top level (respecting quotes)\n const fields: string[] = [];\n let cur = \"\";\n let inQuote = false;\n for (const ch of tail) {\n if (ch === '\"') inQuote = !inQuote;\n if (ch === \"|\" && !inQuote) {\n fields.push(cur.trim());\n cur = \"\";\n } else {\n cur += ch;\n }\n }\n if (cur.trim()) fields.push(cur.trim());\n // name field may be quoted\n if (fields.length > 0) fields[0] = stripQuotes(fields[0]);\n return { kind, id, fields, props };\n}\n\nfunction resolveRole(raw: string | undefined): OrgchartRoleIcon | undefined {\n if (!raw) return undefined;\n const key = raw.trim().toLowerCase();\n return ROLE_ICONS[key];\n}\n\nconst EDGE_OPS: Array<{ token: string; kind: \"report\" | \"matrix\" }> = [\n { token: \"-.->\", kind: \"matrix\" },\n { token: \"->\", kind: \"report\" },\n];\n\nfunction findEdgeToken(line: string, token: string): number {\n let inQuote = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"') inQuote = !inQuote;\n if (!inQuote && line.startsWith(token, i)) return i;\n }\n return -1;\n}\n\nexport function parseOrgchart(text: string): OrgchartAST {\n const rawLines = tokenizeLines(text);\n\n let title: string | undefined;\n let direction: OrgchartDirection = \"TD\";\n let layout: OrgchartLayoutMode = \"tree\";\n const nodes: OrgchartNode[] = [];\n const nodeMap = new Map<string, OrgchartNode>();\n const edges: OrgchartEdge[] = [];\n\n // Indent stack for hierarchical parent resolution\n const indentStack: Array<{ indent: number; id: string }> = [];\n\n // Recoverable-input notes — the parser degrades rather than throwing.\n const unparseableLines: { line?: number; text: string }[] = [];\n const duplicateIds: string[] = [];\n const impliedNodes: string[] = [];\n\n for (const rl of rawLines) {\n const line = rl.text;\n\n // Header\n if (/^orgchart\\b/i.test(line)) {\n const t = matchQuotedTitle(line);\n if (t !== undefined) title = t;\n continue;\n }\n\n // Config\n if (/^config\\b/i.test(line)) {\n const m = line.match(/^config\\s*:\\s*(\\w+)\\s*=\\s*\"?([^\"\\n]+?)\"?\\s*$/i);\n if (m) {\n const key = m[1].toLowerCase();\n const val = m[2].trim();\n if (key === \"direction\") {\n direction = val.toUpperCase() === \"LR\" ? \"LR\" : \"TD\";\n } else if (key === \"layout\") {\n const v = val.toLowerCase();\n if (v === \"list\" || v === \"directory\" || v === \"compact\") layout = \"list\";\n else layout = \"tree\";\n }\n }\n continue;\n }\n\n // Edge detection (explicit)\n let edgeHandled = false;\n for (const { token, kind } of EDGE_OPS) {\n const idx = findEdgeToken(line, token);\n if (idx < 0) continue;\n const left = line.slice(0, idx).trim();\n let rest = line.slice(idx + token.length).trim();\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(left)) break;\n let props: Record<string, string> = {};\n const propsMatch = rest.match(/\\[([^\\]]*)\\]\\s*$/);\n if (propsMatch) {\n props = parseProps(propsMatch[1]);\n rest = rest.slice(0, rest.length - propsMatch[0].length).trim();\n }\n const to = rest.split(/\\s+/)[0];\n if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(to)) break;\n const edge: OrgchartEdge = { from: left, to, kind };\n if (props.label) edge.label = props.label;\n edges.push(edge);\n edgeHandled = true;\n break;\n }\n if (edgeHandled) continue;\n\n // Node line\n const parsed = parseNodeLine(line);\n if (!parsed) {\n // Skip-and-warn rather than blanking the whole chart on one bad line.\n unparseableLines.push({ line: rl.line, text: line });\n continue;\n }\n if (nodeMap.has(parsed.id)) {\n // Keep the first declaration; drop the redeclaration with a warning.\n duplicateIds.push(parsed.id);\n continue;\n }\n\n const node: OrgchartNode = {\n id: parsed.id,\n name: parsed.fields[0] ?? parsed.id,\n title: parsed.fields[1] || undefined,\n department: parsed.fields[2] || undefined,\n info: parsed.fields[3] || undefined,\n kind: parsed.kind,\n matrix: [],\n };\n\n const p = parsed.props;\n if (p.role) node.role = resolveRole(p.role);\n if (p.icon) node.role = resolveRole(p.icon) ?? node.role;\n if (p.open === \"true\") {\n node.open = true;\n node.kind = \"role\";\n }\n if (p.draft === \"true\" || p.tbh === \"true\") {\n node.draft = true;\n node.kind = \"draft\";\n }\n if (p.external === \"true\") {\n node.external = true;\n if (node.kind === \"person\") node.kind = \"advisor\";\n }\n if (p[\"assistant-of\"]) node.assistantOf = p[\"assistant-of\"];\n if (p.reports) node.parent = p.reports;\n if (p.matrix) {\n node.matrix = p.matrix.split(/[\\s,]+/).filter(Boolean);\n }\n if (p.department) node.department = p.department;\n if (p[\"avatar-color\"] || p.avatarcolor) {\n node.avatarColor = p[\"avatar-color\"] ?? p.avatarcolor;\n }\n if (p.gender) {\n const g = p.gender.toLowerCase();\n if (g === \"male\" || g === \"m\") node.gender = \"male\";\n else if (g === \"female\" || g === \"f\") node.gender = \"female\";\n }\n // info line: note / email / phone / location (first one wins if multiple)\n if (!node.info) {\n node.info = p.note ?? p.email ?? p.phone ?? p.location ?? undefined;\n }\n if (p.status) {\n const s = p.status.toLowerCase();\n if (s === \"new\" || s === \"leaving\" || s === \"on-leave\") node.status = s;\n }\n if (node.kind === \"role\" && node.open === undefined && !p.draft) node.open = true;\n if (node.kind === \"role\" && !node.role) node.role = \"Vacant\";\n\n // Resolve parent via indent stack (only if not explicitly set)\n while (indentStack.length > 0 && indentStack[indentStack.length - 1].indent >= rl.indent) {\n indentStack.pop();\n }\n if (!node.parent && indentStack.length > 0) {\n node.parent = indentStack[indentStack.length - 1].id;\n }\n indentStack.push({ indent: rl.indent, id: node.id });\n\n // Attach matrix edges\n for (const m of node.matrix) {\n edges.push({ from: m, to: node.id, kind: \"matrix\" });\n }\n\n nodes.push(node);\n nodeMap.set(node.id, node);\n }\n\n // Add implicit report edges from parent relationships (hierarchical)\n for (const n of nodes) {\n if (n.parent && !n.assistantOf) {\n // Skip if an explicit report edge already exists\n const exists = edges.some(\n (e) => e.kind === \"report\" && e.from === n.parent && e.to === n.id\n );\n if (!exists) edges.push({ from: n.parent, to: n.id, kind: \"report\" });\n }\n }\n\n // Synthesize nodes for ids referenced only by edges. This lets an edge-only\n // chart (`CEO -> CTO`, Mermaid-style shorthand) render instead of throwing —\n // the layout builds the hierarchy from report edges, so the implied nodes\n // slot straight in. Recorded as a warning so the author can declare them.\n const ensureNode = (id: string): void => {\n if (nodeMap.has(id)) return;\n const node: OrgchartNode = { id, name: id, kind: \"person\", matrix: [] };\n nodes.push(node);\n nodeMap.set(id, node);\n impliedNodes.push(id);\n };\n for (const e of edges) {\n ensureNode(e.from);\n ensureNode(e.to);\n }\n\n if (nodes.length === 0) {\n // Nothing renderable at all (empty / header-only / all-unparseable).\n throw new OrgchartParseError(\n unparseableLines.length > 0\n ? `Orgchart has no parseable nodes (${unparseableLines.length} line(s) could not be read)`\n : \"Orgchart has no nodes\"\n );\n }\n\n const ast: OrgchartAST = {\n type: \"orgchart\",\n title,\n direction,\n layout,\n nodes,\n edges,\n };\n if (unparseableLines.length || duplicateIds.length || impliedNodes.length) {\n ast.recovered = {\n ...(unparseableLines.length ? { unparseableLines } : {}),\n ...(duplicateIds.length ? { duplicateIds } : {}),\n ...(impliedNodes.length ? { impliedNodes } : {}),\n };\n }\n return ast;\n}\n","import type { SchematexDiagnostic } from \"../../core/diagnostics\";\nimport type { OrgchartAST } from \"./types\";\nimport { parseOrgchart } from \"./parser\";\n\n/**\n * Orgchart recoverable-input lint.\n *\n * The parser degrades instead of throwing: unparseable lines are skipped,\n * duplicate ids dropped, and ids referenced only by edges are synthesized into\n * nodes. Each recovery is surfaced here as a warning so the render reports\n * `partial` and the author learns what was repaired — without ever blanking a\n * chart that has at least one node.\n */\nexport function lintOrgchart(text: string): SchematexDiagnostic[] {\n let ast: OrgchartAST;\n try {\n ast = parseOrgchart(text);\n } catch {\n return [];\n }\n const out: SchematexDiagnostic[] = [];\n const rec = ast.recovered;\n if (!rec) return out;\n\n for (const { line, text: src } of rec.unparseableLines ?? []) {\n out.push({\n severity: \"warning\",\n code: \"ORGCHART_UNPARSEABLE_LINE\",\n message: `skipped a line that is neither a node nor an edge: \"${src}\"`,\n line,\n source: src,\n hint: 'A node is `id : \"Name\" | Title | Dept`; an edge is `parent -> child`. Check for a missing colon or a stray line.',\n fatal: false,\n });\n }\n\n if (rec.duplicateIds?.length) {\n out.push({\n severity: \"warning\",\n code: \"ORGCHART_DUPLICATE_ID\",\n message: `kept the first declaration of duplicate node id(s): ${rec.duplicateIds\n .map((id) => `\"${id}\"`)\n .join(\", \")}`,\n hint: \"Give each person/role a unique id; later redeclarations are dropped.\",\n fatal: false,\n });\n }\n\n if (rec.impliedNodes?.length) {\n out.push({\n severity: \"warning\",\n code: \"ORGCHART_IMPLIED_NODE\",\n message: `created node(s) from edges that were never declared: ${rec.impliedNodes\n .map((id) => `\"${id}\"`)\n .join(\", \")}`,\n hint: 'Declare each person/role explicitly (`id : \"Name\"`) so labels and roles render; bare ids fall back to the id as the name.',\n fatal: false,\n });\n }\n\n return out;\n}\n","import type {\n OrgchartAST,\n OrgchartLayoutEdge,\n OrgchartLayoutNode,\n OrgchartLayoutResult,\n OrgchartNode,\n} from \"./types\";\n\nconst CARD_W = 240;\nconst CARD_H = 76;\nconst TIER_GAP = 44;\nconst SIB_GAP = 20;\nconst PADDING = 30;\nconst ASSISTANT_GAP = 32;\n\n\ninterface TreeNode {\n id: string;\n children: TreeNode[];\n assistants: TreeNode[];\n node: OrgchartNode;\n subtreeWidth: number;\n x: number;\n y: number;\n}\n\nfunction hashString(s: string): number {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return Math.abs(h);\n}\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } {\n const h = hex.replace(\"#\", \"\").padEnd(6, \"0\");\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n };\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const c = (v: number) =>\n Math.max(0, Math.min(255, Math.round(v)))\n .toString(16)\n .padStart(2, \"0\");\n return `#${c(r)}${c(g)}${c(b)}`;\n}\n\n/** Light tint: mix base color with white at given weight (0 = white, 1 = base). */\nfunction tint(hex: string, weight: number): string {\n const { r, g, b } = hexToRgb(hex);\n return rgbToHex(255 + (r - 255) * weight, 255 + (g - 255) * weight, 255 + (b - 255) * weight);\n}\n\n/** Darker shade: mix base with black at given weight (0 = base, 1 = black). */\nfunction shade(hex: string, weight: number): string {\n const { r, g, b } = hexToRgb(hex);\n return rgbToHex(r * (1 - weight), g * (1 - weight), b * (1 - weight));\n}\n\nfunction computeInitials(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) return \"?\";\n // eslint-disable-next-line no-control-regex\n if (/[^\\x00-\\x7F]/.test(trimmed[0])) {\n return Array.from(trimmed)[0];\n }\n const parts = trimmed.split(/\\s+/);\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nexport function layoutOrgchart(\n ast: OrgchartAST,\n palette: readonly string[]\n): OrgchartLayoutResult {\n // If any node has info, expand card height to fit 3 text lines\n const hasInfo = ast.nodes.some((n) => !!n.info);\n const cW = CARD_W;\n const cH = hasInfo ? 92 : CARD_H;\n const tierGap = TIER_GAP;\n const sibGap = SIB_GAP;\n\n const nodeById = new Map<string, OrgchartNode>();\n for (const n of ast.nodes) nodeById.set(n.id, n);\n\n const childrenMap = new Map<string, string[]>();\n const parentMap = new Map<string, string>();\n for (const n of ast.nodes) childrenMap.set(n.id, []);\n for (const e of ast.edges) {\n if (e.kind !== \"report\") continue;\n childrenMap.get(e.from)?.push(e.to);\n parentMap.set(e.to, e.from);\n }\n\n const roots: OrgchartNode[] = [];\n for (const n of ast.nodes) {\n if (!parentMap.has(n.id) && !n.assistantOf) roots.push(n);\n }\n\n const treeById = new Map<string, TreeNode>();\n for (const n of ast.nodes) {\n treeById.set(n.id, {\n id: n.id,\n node: n,\n children: [],\n assistants: [],\n subtreeWidth: 0,\n x: 0,\n y: 0,\n });\n }\n\n for (const n of ast.nodes) {\n const t = treeById.get(n.id)!;\n for (const cid of childrenMap.get(n.id) ?? []) {\n const c = nodeById.get(cid)!;\n if (c.assistantOf === n.id) continue;\n t.children.push(treeById.get(cid)!);\n }\n }\n for (const n of ast.nodes) {\n if (n.assistantOf) {\n const parent = treeById.get(n.assistantOf);\n if (parent) parent.assistants.push(treeById.get(n.id)!);\n }\n }\n\n function computeWidth(t: TreeNode): number {\n if (t.children.length === 0) {\n t.subtreeWidth = cW;\n return t.subtreeWidth;\n }\n let sum = 0;\n for (let i = 0; i < t.children.length; i++) {\n sum += computeWidth(t.children[i]);\n if (i < t.children.length - 1) sum += sibGap;\n }\n t.subtreeWidth = Math.max(cW, sum);\n return t.subtreeWidth;\n }\n\n function assign(t: TreeNode, leftX: number, depth: number): void {\n const cx = leftX + t.subtreeWidth / 2;\n t.x = cx;\n t.y = PADDING + depth * (cH + tierGap);\n if (t.children.length > 0) {\n const childBlock = t.children.reduce(\n (s, c, i) => s + c.subtreeWidth + (i > 0 ? sibGap : 0),\n 0\n );\n let childLeft = cx - childBlock / 2;\n for (const c of t.children) {\n assign(c, childLeft, depth + 1);\n childLeft += c.subtreeWidth + sibGap;\n }\n }\n }\n\n let curLeft = PADDING;\n for (const r of roots) {\n const rt = treeById.get(r.id)!;\n computeWidth(rt);\n assign(rt, curLeft, 0);\n curLeft += rt.subtreeWidth + sibGap * 2;\n }\n\n for (const [, t] of treeById) {\n for (let i = 0; i < t.assistants.length; i++) {\n const a = t.assistants[i];\n a.x = t.x + cW + ASSISTANT_GAP + i * (cW + sibGap);\n a.y = t.y + cH * 0.3;\n }\n }\n\n // Department color index\n const deptIndex = new Map<string, number>();\n for (const n of ast.nodes) {\n if (n.department && !deptIndex.has(n.department)) {\n deptIndex.set(n.department, deptIndex.size);\n }\n }\n\n const nodes: OrgchartLayoutNode[] = [];\n for (const n of ast.nodes) {\n const t = treeById.get(n.id)!;\n const deptColor = n.department\n ? palette[(deptIndex.get(n.department) ?? 0) % palette.length]\n : undefined;\n const base =\n n.avatarColor ??\n deptColor ??\n palette[hashString(n.name) % palette.length];\n const avatarBg = tint(base, 0.14);\n const avatarFg = shade(base, 0.4);\n nodes.push({\n node: n,\n x: t.x,\n y: t.y,\n width: cW,\n height: cH,\n deptColor,\n avatarBg,\n avatarFg,\n initials: computeInitials(n.name),\n });\n }\n\n // Shift all nodes so the leftmost sits at PADDING\n let minX = Infinity;\n for (const n of nodes) minX = Math.min(minX, n.x - n.width / 2);\n const shift = PADDING - minX;\n if (Math.abs(shift) > 0.5) {\n for (const n of nodes) n.x += shift;\n }\n\n const nodeLayoutById = new Map<string, OrgchartLayoutNode>();\n for (const n of nodes) nodeLayoutById.set(n.node.id, n);\n\n const layoutEdges: OrgchartLayoutEdge[] = [];\n for (const e of ast.edges) {\n const from = nodeLayoutById.get(e.from);\n const to = nodeLayoutById.get(e.to);\n if (!from || !to) continue;\n if (e.kind === \"report\") {\n if (to.node.assistantOf === from.node.id) {\n const sx = from.x + from.width / 2;\n const sy = from.y + from.height / 2;\n const ex = to.x - to.width / 2;\n const ey = to.y + to.height / 2;\n layoutEdges.push({ edge: e, path: `M ${sx} ${sy} L ${ex} ${ey}` });\n continue;\n }\n const sx = from.x;\n const sy = from.y + from.height;\n const ex = to.x;\n const ey = to.y;\n const midY = (sy + ey) / 2;\n const path =\n Math.abs(sx - ex) < 0.5\n ? `M ${sx} ${sy} L ${ex} ${ey}`\n : `M ${sx} ${sy} L ${sx} ${midY} L ${ex} ${midY} L ${ex} ${ey}`;\n layoutEdges.push({ edge: e, path });\n } else {\n const sx = from.x;\n const sy = from.y + from.height / 2;\n const ex = to.x;\n const ey = to.y + to.height / 2;\n const midY = (sy + ey) / 2;\n const path = `M ${sx} ${sy} C ${sx} ${midY}, ${ex} ${midY}, ${ex} ${ey}`;\n const entry: OrgchartLayoutEdge = { edge: e, path };\n if (e.label) {\n entry.labelX = (sx + ex) / 2;\n entry.labelY = midY;\n }\n layoutEdges.push(entry);\n }\n }\n\n let maxX = 0;\n let maxY = 0;\n for (const n of nodes) {\n maxX = Math.max(maxX, n.x + n.width / 2);\n maxY = Math.max(maxY, n.y + n.height);\n }\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,\n edges: layoutEdges,\n title: ast.title,\n mode: \"tree\",\n };\n}\n\n// ──────────────────────────────────────────────────────────────────────────────\n// List / directory layout\n// ──────────────────────────────────────────────────────────────────────────────\n\nconst LIST_ROW_H = 32;\nconst LIST_INDENT = 22;\nconst LIST_PAD = 20;\nconst LIST_PANEL_W = 820;\nconst LIST_GUIDE_X0 = 32; // x of root caret\n\nexport function layoutOrgchartList(\n ast: OrgchartAST,\n palette: readonly string[]\n): OrgchartLayoutResult {\n const nodeById = new Map<string, OrgchartNode>();\n for (const n of ast.nodes) nodeById.set(n.id, n);\n\n const childrenMap = new Map<string, string[]>();\n const parentMap = new Map<string, string>();\n for (const n of ast.nodes) childrenMap.set(n.id, []);\n for (const e of ast.edges) {\n if (e.kind !== \"report\") continue;\n childrenMap.get(e.from)?.push(e.to);\n parentMap.set(e.to, e.from);\n }\n\n const roots: OrgchartNode[] = [];\n for (const n of ast.nodes) {\n if (!parentMap.has(n.id) && !n.assistantOf) roots.push(n);\n }\n\n // Subtree size (descendants count, excluding self)\n const subtreeSize = new Map<string, number>();\n function computeSize(id: string): number {\n const cached = subtreeSize.get(id);\n if (cached !== undefined) return cached;\n const kids = childrenMap.get(id) ?? [];\n let s = kids.length;\n for (const k of kids) s += computeSize(k);\n subtreeSize.set(id, s);\n return s;\n }\n for (const n of ast.nodes) computeSize(n.id);\n\n // Department color index\n const deptIndex = new Map<string, number>();\n for (const n of ast.nodes) {\n if (n.department && !deptIndex.has(n.department)) {\n deptIndex.set(n.department, deptIndex.size);\n }\n }\n\n const nodes: OrgchartLayoutNode[] = [];\n const guides: string[] = [];\n let rowIdx = 0;\n\n function visit(id: string, depth: number): void {\n const n = nodeById.get(id);\n if (!n) return;\n const y = LIST_PAD + rowIdx * LIST_ROW_H;\n const x = LIST_GUIDE_X0 + depth * LIST_INDENT;\n const deptColor = n.department\n ? palette[(deptIndex.get(n.department) ?? 0) % palette.length]\n : undefined;\n const base =\n n.avatarColor ??\n deptColor ??\n palette[hashString(n.name) % palette.length];\n const kids = childrenMap.get(id) ?? [];\n const hasKids = kids.length > 0;\n nodes.push({\n node: n,\n x,\n y,\n width: LIST_PANEL_W - x - LIST_PAD,\n height: LIST_ROW_H,\n deptColor,\n avatarBg: tint(base, 0.14),\n avatarFg: shade(base, 0.4),\n initials: computeInitials(n.name),\n depth,\n subtreeSize: subtreeSize.get(id) ?? 0,\n hasChildren: hasKids,\n });\n rowIdx++;\n for (const c of kids) visit(c, depth + 1);\n }\n\n for (const r of roots) visit(r.id, 0);\n\n // Guide lines: for each parent with children, draw a vertical trunk from its row\n // center down to the last child's row center, plus a short horizontal tick into each child.\n for (let i = 0; i < nodes.length; i++) {\n const p = nodes[i];\n if (!p.hasChildren) continue;\n const pxLine = p.x + 10; // beneath the caret\n const pyStart = p.y + LIST_ROW_H / 2 + 6;\n // Find last descendant child (direct) row y\n const directChildren: OrgchartLayoutNode[] = [];\n for (let j = i + 1; j < nodes.length; j++) {\n const q = nodes[j];\n if ((q.depth ?? 0) <= (p.depth ?? 0)) break;\n if ((q.depth ?? 0) === (p.depth ?? 0) + 1) directChildren.push(q);\n }\n if (directChildren.length === 0) continue;\n const lastChild = directChildren[directChildren.length - 1];\n const pyEnd = lastChild.y + LIST_ROW_H / 2;\n guides.push(`M ${pxLine} ${pyStart} L ${pxLine} ${pyEnd}`);\n for (const c of directChildren) {\n const tickY = c.y + LIST_ROW_H / 2;\n guides.push(`M ${pxLine} ${tickY} L ${c.x - 2} ${tickY}`);\n }\n }\n\n const height = LIST_PAD * 2 + rowIdx * LIST_ROW_H;\n return {\n width: LIST_PANEL_W,\n height,\n nodes,\n edges: [],\n title: ast.title,\n mode: \"list\",\n guides,\n };\n}\n","import 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 rect,\n circle,\n escapeXml,\n} from \"../../core/svg\";\nimport { resolveBaseTheme, type BaseTheme } from \"../../core/theme\";\nimport { layoutOrgchart, layoutOrgchartList } from \"./layout\";\nimport type { OrgchartAST, OrgchartLayoutNode, OrgchartRoleIcon } from \"./types\";\n\nfunction buildCss(t: BaseTheme): string {\n return `\n.lt-org { font-family: system-ui, -apple-system, sans-serif; }\n.lt-org-title { font: 500 16px sans-serif; fill: ${t.text}; }\n.lt-org-card { fill: ${t.bg}; stroke: ${t.neutral}; stroke-width: 1; }\n.lt-org-card-vacant { fill: ${t.bg}; stroke: ${t.warn}; stroke-width: 1; stroke-dasharray: 4,3; }\n.lt-org-card-draft { fill: ${t.bg}; stroke: ${t.neutral}; stroke-width: 1; stroke-dasharray: 4,3; opacity: 0.7; }\n.lt-org-card-external { fill: ${t.bg}; stroke: ${t.neutral}; stroke-width: 1; stroke-dasharray: 4,3; }\n.lt-org-name { font: 500 14px sans-serif; fill: ${t.text}; }\n.lt-org-title-text { font: 400 12px sans-serif; fill: ${t.textMuted}; }\n.lt-org-info { font: 400 11px sans-serif; fill: ${t.textMuted}; }\n.lt-org-dept { font: 500 10px sans-serif; }\n.lt-org-avatar-text { font: 600 13px sans-serif; text-anchor: middle; }\n.lt-org-edge { stroke: ${t.stroke}; stroke-width: 1.4; fill: none; }\n.lt-org-edge-matrix { stroke: ${t.neutral}; stroke-width: 1.2; stroke-dasharray: 4,3; fill: none; }\n.lt-org-edge-label-bg { fill: ${t.bg}; stroke: ${t.neutral}; stroke-width: 1; }\n.lt-org-edge-label { font: 500 10px sans-serif; fill: ${t.textMuted}; text-anchor: middle; }\n.lt-org-pill-bg { fill: ${t.bg}; stroke-width: 1; }\n.lt-org-pill { font: 600 9px sans-serif; text-anchor: middle; letter-spacing: 0.4px; }\n.lt-org-panel { fill: ${t.bg}; stroke: ${t.neutral}; stroke-width: 1; }\n.lt-org-guide { stroke: ${t.neutral}; stroke-width: 1; fill: none; }\n.lt-org-caret { font: 400 9px sans-serif; fill: ${t.textMuted}; }\n.lt-org-row-name { font: 500 13px sans-serif; fill: ${t.text}; }\n.lt-org-row-title { font: 400 12px sans-serif; fill: ${t.textMuted}; }\n.lt-org-row-avatar-text { font: 600 10px sans-serif; text-anchor: middle; }\n.lt-org-row-count { font: 400 11px sans-serif; fill: ${t.textMuted}; text-anchor: end; }\n.lt-org-row-dept { font: 500 10px sans-serif; text-anchor: middle; }\n`.trim();\n}\n\n/** Gender silhouette (head + body) centered at (0,0), ~18px tall. */\nfunction renderGenderGlyph(gender: \"male\" | \"female\", fg: string): string {\n const f = `fill=\"${fg}\"`;\n if (gender === \"male\") {\n // head + broad rectangular shoulders\n return `<circle cx=\"0\" cy=\"-7\" r=\"5.5\" ${f}/><path d=\"M -9 11 C -9 2 -5 0 0 0 C 5 0 9 2 9 11 Z\" ${f}/>`;\n }\n // female: head + tapered dress silhouette\n return `<circle cx=\"0\" cy=\"-7\" r=\"5.5\" ${f}/><path d=\"M -5 0 C -10 5 -11 10 -10 11 L 10 11 C 11 10 10 5 5 0 Z\" ${f}/>`;\n}\n\n/** Simple SVG role-icon glyph in `fg` foreground color on a tinted circle. */\nfunction renderRoleGlyph(role: OrgchartRoleIcon, fg: string): string {\n // Approx 20x20 icon centered at (0,0)\n const stroke = `stroke=\"${fg}\" stroke-width=\"1.6\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"`;\n const fillWhite = `fill=\"${fg}\"`;\n switch (role) {\n case \"CEO\":\n case \"VP\":\n // Crown\n return `<path d=\"M -10 4 L -10 -6 L -4 0 L 0 -8 L 4 0 L 10 -6 L 10 4 Z\" ${fillWhite} stroke=\"none\"/>`;\n case \"CTO\":\n case \"Engineer\":\n // Gear (simplified 8-tooth)\n return `<circle r=\"6\" ${stroke}/><circle r=\"2\" ${fillWhite} stroke=\"none\"/><g ${stroke}><line x1=\"0\" y1=\"-9\" x2=\"0\" y2=\"-7\"/><line x1=\"0\" y1=\"9\" x2=\"0\" y2=\"7\"/><line x1=\"-9\" y1=\"0\" x2=\"-7\" y2=\"0\"/><line x1=\"9\" y1=\"0\" x2=\"7\" y2=\"0\"/><line x1=\"-6.4\" y1=\"-6.4\" x2=\"-5\" y2=\"-5\"/><line x1=\"6.4\" y1=\"-6.4\" x2=\"5\" y2=\"-5\"/><line x1=\"-6.4\" y1=\"6.4\" x2=\"-5\" y2=\"5\"/><line x1=\"6.4\" y1=\"6.4\" x2=\"5\" y2=\"5\"/></g>`;\n case \"CFO\":\n // Dollar\n return `<text x=\"0\" y=\"6\" text-anchor=\"middle\" font-size=\"18\" font-weight=\"700\" fill=\"${fg}\">$</text>`;\n case \"COO\":\n case \"Ops\":\n // Triple gear dots\n return `<g ${fillWhite}><circle cx=\"-6\" cy=\"0\" r=\"3\" stroke=\"none\"/><circle cx=\"6\" cy=\"0\" r=\"3\" stroke=\"none\"/><circle cx=\"0\" cy=\"-5\" r=\"3\" stroke=\"none\"/></g>`;\n case \"CMO\":\n case \"Marketing\":\n // Megaphone (simplified)\n return `<path d=\"M -8 -4 L 2 -7 L 2 7 L -8 4 Z\" ${fillWhite} stroke=\"none\"/><path d=\"M 2 -4 L 8 -6 L 8 6 L 2 4 Z\" ${fillWhite} stroke=\"none\"/>`;\n case \"CPO\":\n case \"Product\":\n // Lightbulb\n return `<path d=\"M 0 -8 C 5 -8 7 -4 7 0 C 7 3 4 4 4 6 L -4 6 C -4 4 -7 3 -7 0 C -7 -4 -5 -8 0 -8 Z\" ${fillWhite} stroke=\"none\"/><line x1=\"-3\" y1=\"9\" x2=\"3\" y2=\"9\" stroke=\"${fg}\" stroke-width=\"1.5\"/>`;\n case \"Designer\":\n // Paint brush\n return `<path d=\"M -7 7 L 7 -7 L 9 -5 L -5 9 Z\" ${fillWhite} stroke=\"none\"/>`;\n case \"Sales\":\n // Briefcase\n return `<rect x=\"-8\" y=\"-4\" width=\"16\" height=\"10\" rx=\"1\" ${fillWhite} stroke=\"none\"/><rect x=\"-4\" y=\"-7\" width=\"8\" height=\"4\" ${stroke}/>`;\n case \"HR\":\n // Person group\n return `<circle cx=\"-3\" cy=\"-4\" r=\"3\" ${fillWhite} stroke=\"none\"/><circle cx=\"4\" cy=\"-3\" r=\"2.5\" ${fillWhite} stroke=\"none\"/><path d=\"M -8 7 C -8 2 -2 2 -2 2 C -2 2 2 2 2 7 Z\" ${fillWhite} stroke=\"none\"/><path d=\"M 0 7 C 0 4 4 4 4 4 C 4 4 9 4 9 7 Z\" ${fillWhite} stroke=\"none\"/>`;\n case \"Legal\":\n // Balance / scale\n return `<line x1=\"0\" y1=\"-8\" x2=\"0\" y2=\"8\" stroke=\"${fg}\" stroke-width=\"1.6\"/><line x1=\"-7\" y1=\"-6\" x2=\"7\" y2=\"-6\" stroke=\"${fg}\" stroke-width=\"1.6\"/><path d=\"M -9 0 L -5 -6 L -1 0 Z\" ${fillWhite} stroke=\"none\"/><path d=\"M 1 0 L 5 -6 L 9 0 Z\" ${fillWhite} stroke=\"none\"/>`;\n case \"Data\":\n // Bar chart\n return `<g ${fillWhite}><rect x=\"-8\" y=\"0\" width=\"4\" height=\"7\" stroke=\"none\"/><rect x=\"-2\" y=\"-4\" width=\"4\" height=\"11\" stroke=\"none\"/><rect x=\"4\" y=\"-7\" width=\"4\" height=\"14\" stroke=\"none\"/></g>`;\n case \"Advisor\":\n // Star\n return `<path d=\"M 0 -9 L 2.6 -2.7 L 9 -2 L 4 2.3 L 5.3 8.5 L 0 5 L -5.3 8.5 L -4 2.3 L -9 -2 L -2.6 -2.7 Z\" ${fillWhite} stroke=\"none\"/>`;\n case \"Intern\":\n // Graduation cap\n return `<path d=\"M -10 -2 L 0 -7 L 10 -2 L 0 3 Z\" ${fillWhite} stroke=\"none\"/><path d=\"M -5 0 L -5 5 C -5 7 5 7 5 5 L 5 0\" ${stroke}/>`;\n case \"Vacant\":\n return `<circle r=\"7\" stroke=\"${fg}\" stroke-width=\"1.4\" fill=\"none\" stroke-dasharray=\"3,2\"/><text x=\"0\" y=\"4\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"700\" fill=\"${fg}\">?</text>`;\n default:\n return \"\";\n }\n}\n\nfunction renderAvatar(ln: OrgchartLayoutNode): string {\n const role = ln.node.role;\n const cx = -ln.width / 2 + 14 + 18;\n const cy = 0;\n const r = 18;\n const parts: string[] = [\n circle({ cx, cy, r, fill: ln.avatarBg, stroke: \"none\" }),\n ];\n if (role && role !== \"Vacant\") {\n parts.push(\n group({ transform: `translate(${cx}, ${cy})` }, [\n renderRoleGlyph(role, ln.avatarFg),\n ])\n );\n } else if (ln.node.open) {\n parts.push(\n group({ transform: `translate(${cx}, ${cy})` }, [\n renderRoleGlyph(\"Vacant\", ln.avatarFg),\n ])\n );\n } else if (ln.node.gender) {\n parts.push(\n group({ transform: `translate(${cx}, ${cy})` }, [\n renderGenderGlyph(ln.node.gender, ln.avatarFg),\n ])\n );\n } else {\n parts.push(\n textEl(\n { x: cx, y: cy + 5, class: \"lt-org-avatar-text\", fill: ln.avatarFg },\n ln.initials\n )\n );\n }\n return group({}, parts);\n}\n\nfunction renderCardBody(ln: OrgchartLayoutNode, t: BaseTheme): string {\n const n = ln.node;\n const x = -ln.width / 2;\n const y = -ln.height / 2;\n\n let cardClass = \"lt-org-card\";\n if (n.open) cardClass = \"lt-org-card-vacant\";\n else if (n.draft) cardClass = \"lt-org-card-draft\";\n else if (n.external) cardClass = \"lt-org-card-external\";\n\n const parts: string[] = [];\n parts.push(\n rect({\n x,\n y,\n width: ln.width,\n height: ln.height,\n rx: 10,\n ry: 10,\n class: cardClass,\n })\n );\n\n parts.push(renderAvatar(ln));\n\n // Text block to the right of avatar. Name + title only; department is conveyed by avatar color.\n const textX = x + 14 + 36 + 12;\n const hasTitle = !!n.title;\n\n const hasInfo = !!n.info;\n const displayName = n.open && !n.name ? \"Open Role\" : n.name;\n\n // Vertical layout: name → title → info, centered in card\n // Anchor row count determines nameY offset\n const lineCount = 1 + (hasTitle ? 1 : 0) + (hasInfo ? 1 : 0);\n const lineH = 16;\n const nameY = -(lineCount - 1) * lineH / 2;\n\n parts.push(textEl({ x: textX, y: nameY, class: \"lt-org-name\" }, displayName));\n if (hasTitle) {\n parts.push(textEl({ x: textX, y: nameY + lineH, class: \"lt-org-title-text\" }, n.title!));\n }\n if (hasInfo) {\n parts.push(\n textEl(\n { x: textX, y: nameY + lineH * (hasTitle ? 2 : 1), class: \"lt-org-info\" },\n n.info!\n )\n );\n }\n\n // Status / hiring pill (top-right corner)\n const pillLabel =\n n.open\n ? \"HIRING\"\n : n.status === \"new\"\n ? \"NEW\"\n : n.status === \"leaving\"\n ? \"LEAVING\"\n : n.status === \"on-leave\"\n ? \"ON LEAVE\"\n : undefined;\n if (pillLabel) {\n const pw = pillLabel.length * 5.8 + 10;\n const ph = 14;\n const px = ln.width / 2 - pw - 8;\n const py = y + 8;\n const pillFg =\n pillLabel === \"HIRING\"\n ? \"#8a6d00\"\n : pillLabel === \"NEW\"\n ? \"#2b6a3a\"\n : pillLabel === \"LEAVING\"\n ? \"#8a3b1a\"\n : t.textMuted;\n const pillBg =\n pillLabel === \"HIRING\"\n ? \"#fef3c7\"\n : pillLabel === \"NEW\"\n ? \"#dcfce7\"\n : pillLabel === \"LEAVING\"\n ? \"#fee4d8\"\n : \"#eeeeea\";\n parts.push(\n rect({ x: px, y: py, width: pw, height: ph, rx: 3, fill: pillBg, stroke: \"none\" })\n );\n parts.push(\n textEl(\n { x: px + pw / 2, y: py + ph - 4, class: \"lt-org-pill\", fill: pillFg },\n pillLabel\n )\n );\n }\n\n return group(\n {\n transform: `translate(${ln.x}, ${ln.y + ln.height / 2})`,\n \"data-person-id\": n.id,\n \"data-department\": n.department ?? \"\",\n \"data-role\": n.role ?? \"\",\n },\n parts\n );\n}\n\nfunction renderListRow(ln: OrgchartLayoutNode): string {\n const n = ln.node;\n const rowCenterY = ln.y + ln.height / 2;\n const caretX = ln.x;\n const avatarCx = ln.x + 20;\n const avatarR = 11;\n const parts: string[] = [];\n\n // Caret\n const caret = ln.hasChildren ? \"▼\" : \"·\";\n parts.push(\n textEl(\n { x: caretX, y: rowCenterY + 3, class: \"lt-org-caret\" },\n caret\n )\n );\n\n // Avatar\n parts.push(circle({ cx: avatarCx, cy: rowCenterY, r: avatarR, fill: ln.avatarBg, stroke: \"none\" }));\n if (n.role && n.role !== \"Vacant\") {\n parts.push(\n group({ transform: `translate(${avatarCx}, ${rowCenterY}) scale(0.58)` }, [\n renderRoleGlyph(n.role, ln.avatarFg),\n ])\n );\n } else if (n.open) {\n parts.push(\n group({ transform: `translate(${avatarCx}, ${rowCenterY}) scale(0.58)` }, [\n renderRoleGlyph(\"Vacant\", ln.avatarFg),\n ])\n );\n } else if (n.gender) {\n parts.push(\n group({ transform: `translate(${avatarCx}, ${rowCenterY}) scale(0.56)` }, [\n renderGenderGlyph(n.gender, ln.avatarFg),\n ])\n );\n } else {\n parts.push(\n textEl(\n {\n x: avatarCx,\n y: rowCenterY + 3,\n class: \"lt-org-row-avatar-text\",\n fill: ln.avatarFg,\n },\n ln.initials\n )\n );\n }\n\n // Name + title\n const textY = rowCenterY + 4;\n const nameX = avatarCx + avatarR + 10;\n const displayName = n.open && !n.name ? \"Open Role\" : n.name;\n parts.push(textEl({ x: nameX, y: textY, class: \"lt-org-row-name\" }, displayName));\n if (n.title) {\n const titleX = nameX + Math.max(80, displayName.length * 8 + 10);\n parts.push(textEl({ x: titleX, y: textY, class: \"lt-org-row-title\" }, n.title));\n }\n\n // Right side: dept pill + report count (only if root has many)\n const rightEdge = ln.x + ln.width;\n let cursor = rightEdge;\n if (ln.subtreeSize && ln.subtreeSize > 0) {\n const countLabel = ln.depth === 0 ? `${ln.subtreeSize} reports` : `${ln.subtreeSize}`;\n parts.push(\n textEl(\n { x: cursor, y: textY, class: \"lt-org-row-count\" },\n countLabel\n )\n );\n cursor -= Math.max(30, countLabel.length * 6.5) + 12;\n }\n if (n.department) {\n const pw = n.department.length * 5.6 + 14;\n const ph = 16;\n const px = cursor - pw;\n const py = rowCenterY - ph / 2;\n parts.push(\n rect({ x: px, y: py, width: pw, height: ph, rx: 3, fill: ln.avatarBg, stroke: \"none\" })\n );\n parts.push(\n textEl(\n {\n x: px + pw / 2,\n y: textY,\n class: \"lt-org-row-dept\",\n fill: ln.avatarFg,\n },\n n.department\n )\n );\n }\n\n return group({ \"data-person-id\": n.id }, parts);\n}\n\nfunction renderOrgchartList(\n ast: OrgchartAST,\n layout: ReturnType<typeof layoutOrgchartList>,\n t: BaseTheme\n): string {\n const titleOffset = ast.title ? 42 : 16;\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 ?? \"Organizational Directory\"));\n children.push(\n desc(\n `Organizational directory with ${ast.nodes.length} people and ${ast.edges.length} reporting relationships`\n )\n );\n children.push(el(\"style\", {}, buildCss(t)));\n\n if (ast.title) {\n children.push(textEl({ x: 20, y: 24, class: \"lt-org-title\" }, ast.title));\n }\n\n const inner: string[] = [];\n\n // Guide lines\n for (const g of layout.guides ?? []) {\n inner.push(pathEl({ d: g, class: \"lt-org-guide\" }));\n }\n\n // Rows\n for (const ln of layout.nodes) {\n inner.push(renderListRow(ln));\n }\n\n children.push(group({ transform: `translate(0, ${titleOffset})` }, inner));\n\n return svgRoot(\n {\n class: \"lt-org\",\n role: \"img\",\n \"aria-label\": escapeXml(ast.title ?? \"Organizational directory\"),\n width,\n height,\n viewBox: `0 0 ${width} ${height}`,\n },\n children\n );\n}\n\nexport function renderOrgchart(ast: OrgchartAST, config?: RenderConfig): string {\n const t = resolveBaseTheme(config?.theme ?? \"default\");\n if (ast.layout === \"list\") {\n return renderOrgchartList(ast, layoutOrgchartList(ast, t.palette), t);\n }\n const layout = layoutOrgchart(ast, t.palette);\n const titleOffset = ast.title ? 36 : 10;\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 ?? \"Organizational Chart\"));\n children.push(\n desc(\n `Organizational chart with ${ast.nodes.length} people and ${ast.edges.length} relationships`\n )\n );\n children.push(el(\"style\", {}, buildCss(t)));\n\n if (ast.title) {\n children.push(textEl({ x: 20, y: 24, class: \"lt-org-title\" }, ast.title));\n }\n\n const inner: string[] = [];\n\n // Edges first\n for (const le of layout.edges) {\n const cls = le.edge.kind === \"matrix\" ? \"lt-org-edge-matrix\" : \"lt-org-edge\";\n inner.push(pathEl({ d: le.path, class: cls }));\n }\n // Matrix edge labels\n for (const le of layout.edges) {\n if (le.edge.kind !== \"matrix\" || !le.edge.label || le.labelX === undefined) continue;\n const w = le.edge.label.length * 6 + 12;\n const h = 16;\n const x = (le.labelX ?? 0) - w / 2;\n const y = (le.labelY ?? 0) - h / 2;\n inner.push(\n rect({ x, y, width: w, height: h, rx: 3, class: \"lt-org-edge-label-bg\" })\n );\n inner.push(\n textEl(\n { x: le.labelX, y: (le.labelY ?? 0) + 4, class: \"lt-org-edge-label\" },\n le.edge.label\n )\n );\n }\n\n // Cards on top\n for (const ln of layout.nodes) {\n inner.push(renderCardBody(ln, t));\n }\n\n children.push(group({ transform: `translate(0, ${titleOffset})` }, inner));\n\n return svgRoot(\n {\n class: \"lt-org\",\n role: \"img\",\n \"aria-label\": escapeXml(ast.title ?? \"Organizational chart\"),\n width,\n height,\n viewBox: `0 0 ${width} ${height}`,\n },\n children\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseOrgchart } from \"./parser\";\nimport { lintOrgchart } from \"./lint\";\nimport { renderOrgchart } from \"./renderer\";\n\nexport const orgchart: DiagramPlugin = {\n type: \"orgchart\",\n detect(text) {\n return /^\\s*orgchart\\b/i.test(text);\n },\n parse: parseOrgchart,\n lint: lintOrgchart,\n\n render(text, config) {\n const ast = parseOrgchart(text);\n return renderOrgchart(ast, config);\n },\n};\n\nexport { parseOrgchart, OrgchartParseError } from \"./parser\";\nexport { lintOrgchart } from \"./lint\";\nexport { renderOrgchart } from \"./renderer\";\nexport { layoutOrgchart } from \"./layout\";\nexport type * from \"./types\";\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"],"mappings":"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","file":"chunk-GDZNTILD.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 // The attribute block is allowed to contain ONE level of nested [...] so the\n // `members: [a, b]` array does not prematurely terminate the outer bracket.\n const clusterMatch = line.match(\n /^cluster\\s+\"([^\"]*)\"(?:\\s*\\[((?:[^\\][]|\\[[^\\]]*\\])*)\\])?\\s*$/i\n );\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/diagrams/timing/parser.ts","../src/diagrams/timing/renderer.ts","../src/diagrams/timing/index.ts"],"names":["text","title"],"mappings":";;;;AAGO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,WAAA,CACE,OAAA,EACO,IAAA,EACA,MAAA,EACA,MAAA,EACP;AACA,IAAA,KAAA,CAAM,SAAS,MAAA,GAAY,CAAA,KAAA,EAAQ,IAAI,CAAA,EAAA,EAAK,OAAO,KAAK,OAAO,CAAA;AAJxD,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AAAA,EANS,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAKX,CAAA;AAEA,IAAM,YAAA,GAAe,gCAAA;AAErB,SAAS,cAAc,IAAA,EAAgD;AAErE,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AACxC,EAAA,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,OAAA,EAAS,IAAA,EAAM,EAAC,EAAE;AACzC,EAAA,MAAM,IAAA,GAAO,EAAE,CAAC,CAAA;AAChB,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,EAAC,EAAE;AAExC,EAAA,MAAM,OAAiB,EAAC;AAExB,EAAA,IAAI,IAAI,SAAA,CAAU,OAAA,CAAQ,cAAA,EAAgB,EAAE,EAAE,IAAA,EAAK;AACnD,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC3D,EAAA,MAAM,EAAA,GAAK,YAAA;AACX,EAAA,IAAI,KAAA;AACJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,EAAA,CAAG,IAAA,CAAK,CAAC,CAAA,MAAO,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACxD,EAAA,OAAO,EAAE,MAAM,IAAA,EAAK;AACtB;AAEO,SAAS,YAAYA,KAAAA,EAAyB;AACnD,EAAA,MAAM,KAAA,GAAQA,KAAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAC9D,EAAA,MAAM,UAA6C,EAAC;AACpD,EAAA,IAAIC,MAAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,YAAA,GAAmC,IAAA;AAEvC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACxB,IAAA,MAAM,SAAS,CAAA,GAAI,CAAA;AACnB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK;AACtB,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAGnC,IAAA,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,CAAA,GAAI,iBAAiB,IAAI,CAAA;AAC/B,MAAA,IAAI,CAAA,KAAM,MAAA,EAAWA,MAAAA,GAAQ,CAAA;AAC7B,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,8BAA8B,CAAA;AACpD,MAAA,IAAI,EAAA,EAAI,MAAA,GAAS,UAAA,CAAW,EAAA,CAAG,CAAC,CAAC,CAAA;AACjC,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA,IAAK,IAAA,CAAK,MAAM,2BAA2B,CAAA;AACxF,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,GAAe,EAAE,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE;AAClD,MAAA,OAAA,CAAQ,KAAK,YAAY,CAAA;AACzB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,mBAAmB,CAAA;AAC/C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAC,CAAA,CAAE,IAAA,EAAK;AAC9B,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,CAAC,CAAA,CAAE,IAAA,EAAK;AAC7B,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC3B,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,OAAiB,EAAC;AAEtB,MAAA,IAAI,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG;AAE3B,QAAA,MAAM,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AACvB,QAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,IAAI,CAAA,EAAG;AACjC,UAAA,MAAM,IAAI,gBAAA;AAAA,YACR,6CAA6C,IAAI,CAAA,UAAA,CAAA;AAAA,YACjD,MAAA;AAAA,YAAQ,MAAA;AAAA,YAAW;AAAA,WACrB;AAAA,QACF;AACA,QAAA,IAAA,GAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,IAAK,EAAE,CAAA,GAAI,GAAA,GAAM,GAAA,EAAK,MAAA,CAAO,CAAC,CAAA;AAAA,MAC1D,WAAW,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG;AAEhC,QAAA,IAAA,GAAO,EAAA;AACP,QAAA,KAAA,MAAW,GAAA,IAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AAC9B,UAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,cAAc,CAAA;AACnC,UAAA,IAAI,CAAC,MAAM,CAAC,YAAA,CAAa,KAAK,EAAA,CAAG,CAAC,CAAC,CAAA,EAAG;AACpC,YAAA,MAAM,IAAI,gBAAA;AAAA,cACR,6DAA6D,GAAG,CAAA,CAAA,CAAA;AAAA,cAChE,MAAA;AAAA,cAAQ,MAAA;AAAA,cAAW;AAAA,aACrB;AAAA,UACF;AACA,UAAA,IAAA,IAAQ,EAAA,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,EAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAAA,QACpC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,MAAA,GAAS,cAAc,GAAG,CAAA;AAChC,QAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,QAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,QAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAG;AAC5B,UAAA,MAAM,GAAA,GAAM,CAAC,GAAG,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,YAAA,CAAa,IAAA,CAAK,CAAC,CAAC,CAAA;AACvD,UAAA,MAAM,IAAI,gBAAA;AAAA,YACR,CAAA,qBAAA,EAAwB,IAAI,CAAA,aAAA,EAAgB,IAAI,MAC7C,GAAA,GAAM,CAAA,SAAA,EAAO,GAAG,CAAA,sBAAA,CAAA,GAA2B,EAAA,CAAA,GAC5C,CAAA,oHAAA,CAAA;AAAA,YAEF,MAAA;AAAA,YAAQ,MAAA;AAAA,YAAW;AAAA,WACrB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAuB,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,CAAK,MAAA,GAAS,OAAO,MAAA,EAAU;AAChF,MAAA,IAAI,YAAA,EAAc,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,WAC7C,OAAA,CAAQ,KAAK,MAAM,CAAA;AACxB,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAAA,MAAAA,EAAO,QAAQ,OAAA,EAAQ;AAClD;;;AChIA,IAAM,MAAA,GAAS,GAAA;AACf,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,OAAA,GAAU,EAAA;AAChB,IAAM,OAAA,GAAU,EAAA;AAChB,IAAM,KAAA,GAAQ,CAAA;AACd,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,aAAA,GAAgB,EAAA;AAMtB,SAAS,OAAA,CAAQ,KAAA,EAA0C,MAAA,GAAS,CAAA,EAAc;AAChF,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,UAAU,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,IACnD,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AACrD,MAAA,GAAA,CAAI,KAAK,GAAG,OAAA,CAAQ,KAAK,OAAA,EAAS,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAYA,SAAS,UAAA,CAAW,QAAsB,GAAA,EAA+C;AACvF,EAAA,MAAM,EAAE,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,MAAK,GAAI,GAAA;AAC/B,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,cAAwB,EAAC;AAC/B,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,IAAA,GAAkB,MAAA;AACtB,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,QAAA,GAAW,EAAA;AAEf,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,EAAW,CAAA,KAAc;AAC1C,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,QAAA,GAAW,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,EACxB,CAAA;AACA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,EAAW,CAAA,KAAc;AAC7C,IAAA,QAAA,IAAY,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,EAC1B,CAAA;AACA,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,MAAA,QAAA,GAAW,EAAA;AAAA,IACb;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAc;AAC9B,IAAA,MAAM,KAAA,GAAQ,SAAA;AACd,IAAA,MAAM,GAAA,GAAM,CAAA;AACZ,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,GAAA,GAAM,SAAS,CAAC,CAAA;AAE3C,IAAA,MAAM,CAAA,GAAI,CAAA,EAAA,EAAK,KAAA,GAAQ,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,EAAM,GAAA,GAAM,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,EAAM,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,GAAA,EAAM,GAAA,GAAM,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,EAAM,KAAA,GAAQ,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,CAAA;AACjJ,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,EAAA,CAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,sBAAA,EAAwB,GAAG,gBAAA,EAAkB,MAAA,CAAO,QAAQ,CAAA,EAAG;AAAA,KACrF;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,GAAO,OAAO,CAAA,IAAK,EAAA;AACxC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,IAAA;AAAA,UACE;AAAA,YACE,CAAA,EAAA,CAAI,QAAQ,GAAA,IAAO,CAAA;AAAA,YACnB,GAAG,IAAA,GAAO,CAAA;AAAA,YACV,KAAA,EAAO,4BAAA;AAAA,YACP,aAAA,EAAe;AAAA,WACjB;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF;AACA,IAAA,OAAA,EAAA;AACA,IAAA,QAAA,EAAA;AAAA,EACF,CAAA;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,MAAM,IAAI,CAAA,GAAI,EAAA;AACd,IAAA,MAAM,QAAQ,CAAA,GAAI,EAAA;AAGlB,IAAA,MAAM,SAAA,GAAY,EAAA,KAAO,GAAA,GAAM,QAAA,GAAW,EAAA;AAE1C,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,IAAI,SAAS,GAAA,IAAO,IAAA,KAAS,OAAO,IAAA,KAAS,MAAA,IAAU,SAAS,KAAA,EAAO;AACrE,UAAA,SAAA,EAAU;AACV,UAAA,SAAA,CAAU,GAAG,GAAG,CAAA;AAAA,QAClB,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACxB,UAAA,YAAA,CAAa,GAAG,GAAG,CAAA;AAAA,QACrB;AACA,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,IAAA,GAAO,IAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,IAAI,SAAS,GAAA,IAAO,IAAA,KAAS,OAAO,IAAA,KAAS,MAAA,IAAU,SAAS,KAAA,EAAO;AACrE,UAAA,SAAA,EAAU;AACV,UAAA,SAAA,CAAU,GAAG,GAAG,CAAA;AAAA,QAClB,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACxB,UAAA,YAAA,CAAa,GAAG,GAAG,CAAA;AAAA,QACrB;AACA,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,IAAA,GAAO,IAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA;AAAA,MACL,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,SAAA,EAAU;AAEV,QAAA,SAAA,CAAU,GAAG,GAAG,CAAA;AAChB,QAAA,YAAA,CAAa,GAAG,GAAG,CAAA;AACnB,QAAA,YAAA,CAAa,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA;AAC5B,QAAA,YAAA,CAAa,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA;AAC5B,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,SAAA,EAAU;AACV,QAAA,IAAA,GAAO,IAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA;AAAA,MACL,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,SAAA,EAAU;AACV,QAAA,SAAA,CAAU,GAAG,GAAG,CAAA;AAChB,QAAA,YAAA,CAAa,GAAG,GAAG,CAAA;AACnB,QAAA,YAAA,CAAa,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA;AAC5B,QAAA,YAAA,CAAa,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA;AAC5B,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,SAAA,EAAU;AACV,QAAA,IAAA,GAAO,IAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,SAAA,EAAU;AACV,QAAA,SAAA,CAAU,GAAG,GAAG,CAAA;AAChB,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,IAAA,GAAO,IAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,SAAA,EAAU;AACV,QAAA,SAAA,CAAU,GAAG,GAAG,CAAA;AAChB,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,IAAA,GAAO,IAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,SAAA,EAAU;AACV,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,GAAG,MAAA,EAAQ;AAAA,YACT,EAAA,EAAI,CAAA;AAAA,YACJ,EAAA,EAAI,IAAA;AAAA,YACJ,EAAA,EAAI,KAAA;AAAA,YACJ,EAAA,EAAI,IAAA;AAAA,YACJ,KAAA,EAAO;AAAA,WACR;AAAA,SACH;AACA,QAAA,IAAA,GAAO,GAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA,EAAK;AACR,QAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,SAAA,EAAU;AACV,QAAA,WAAA,CAAY,IAAA;AAAA,UACV,GAAG,MAAA,EAAQ;AAAA,YACT,CAAA;AAAA,YACA,CAAA,EAAG,GAAA;AAAA,YACH,KAAA,EAAO,EAAA;AAAA,YACP,QAAQ,GAAA,GAAM,GAAA;AAAA,YACd,KAAA,EAAO,0BAAA;AAAA,YACP,IAAA,EAAM;AAAA,WACP;AAAA,SACH;AACA,QAAA,IAAA,GAAO,GAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA;AAAA,MACL,KAAK,GAAA,EAAK;AAER,QAAA,MAAM,iBAAiB,EAAA,KAAO,GAAA;AAC9B,QAAA,IAAI,CAAC,cAAA,IAAkB,IAAA,KAAS,KAAA,WAAgB,CAAC,CAAA;AACjD,QAAA,IAAI,IAAA,KAAS,KAAA,IAAS,CAAC,cAAA,EAAgB;AACrC,UAAA,SAAA,EAAU;AACV,UAAA,SAAA,GAAY,CAAA;AAAA,QACd;AACA,QAAA,IAAA,GAAO,KAAA;AACP,QAAA;AAAA,MACF;AAAA,MACA,SAAS;AAEP,QAAA,SAAA,EAAU;AACV,QAAA,WAAA,CAAY,IAAA;AAAA,UACV,GAAG,MAAA,EAAQ;AAAA,YACT,CAAA;AAAA,YACA,CAAA,EAAG,GAAA;AAAA,YACH,KAAA,EAAO,EAAA;AAAA,YACP,QAAQ,GAAA,GAAM,GAAA;AAAA,YACd,KAAA,EAAO,0BAAA;AAAA,YACP,IAAA,EAAM;AAAA,WACP;AAAA,SACH;AACA,QAAA,IAAA,GAAO,GAAA;AAAA,MACT;AAAA;AAGF,IAAA,QAAA,GAAW,SAAA;AAAA,EACb;AAGA,EAAA,IAAI,IAAA,KAAS,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,SAAS,EAAE,CAAA;AAC7C,EAAA,SAAA,EAAU;AAEV,EAAA,MAAM,OAAA,GAAU,MACb,GAAA,CAAI,CAAC,MAAM,EAAA,CAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,uBAAA,EAAyB,GAAG,CAAC,EAC5D,MAAA,CAAO,WAAA,EAAa,QAAQ,QAAQ,CAAA,CACpC,KAAK,EAAE,CAAA;AAEV,EAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,QAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA,EAAE;AACnD;AAEO,SAAS,aAAa,GAAA,EAAwB;AACnD,EAAA,MAAM,EAAA,GAAK,UAAA,IAAc,GAAA,CAAI,MAAA,IAAU,CAAA,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAChC,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA;AAAA,IACtB,CAAA;AAAA,IACA,GAAG,IAAA,CAAK,OAAA,CAAQ,CAAC,MAAO,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,CAAC,EAAE,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,GAAI,EAAG;AAAA,GAC5E;AACA,EAAA,MAAM,YAAY,UAAA,GAAa,EAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,SAAS,SAAA,GAAY,EAAA;AAEnC,EAAA,IAAI,CAAA,GAAI,OAAA;AACR,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AACZ,IAAA,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,OAAA,GAAU,aAAA,GAAgB,KAAA;AAAA,EAC5C;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,OAAA,GAAU,EAAA;AAG7B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,YAAsB,EAAC;AAC7B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,YAAsB,EAAC;AAG7B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,UAAA,EAAY,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,SAAS,CAAA,GAAI,EAAA;AACxB,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,GAAG,MAAA,EAAQ;AAAA,QACT,EAAA,EAAI,EAAA;AAAA,QACJ,EAAA,EAAI,OAAA;AAAA,QACJ,EAAA,EAAI,EAAA;AAAA,QACJ,IAAI,MAAA,GAAS,OAAA;AAAA,QACb,KAAA,EAAO;AAAA,OACR;AAAA,KACH;AAAA,EACF;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAElB,IAAA,IAAI,GAAA,CAAI,SAAS,OAAA,EAAS;AACxB,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,IAAA;AAAA,UACE;AAAA,YACE,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,GAAS,EAAA;AAAA,YACpB,CAAA,EAAG,KAAK,aAAA,GAAgB,CAAA;AAAA,YACxB,KAAA,EAAO;AAAA,WACT;AAAA,UACA,GAAA,CAAI;AAAA;AACN,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,MAAM,MAAM,EAAA,GAAK,KAAA;AACjB,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,GAAQ,KAAA;AACzB,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,GAAQ,CAAA;AAG1B,IAAA,MAAM,SAAA,GAAY,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAC3E,IAAA,MAAM,cAAc,SAAA,GAAY,MAAA,CAAO,KAAK,KAAA,CAAM,CAAC,IAAI,MAAA,CAAO,IAAA;AAC9D,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,IAAA;AAAA,QACE;AAAA,UACE,GAAG,MAAA,GAAS,CAAA;AAAA,UACZ,GAAG,IAAA,GAAO,CAAA;AAAA,UACV,KAAA,EAAO,YACH,uDAAA,GACA,uBAAA;AAAA,UACJ,aAAA,EAAe;AAAA,SACjB;AAAA,QACA;AAAA;AACF,KACF;AAEA,IAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAO,GAAI,WAAW,MAAA,EAAQ;AAAA,MACzC,EAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,IAEF,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,KAAA;AAAA,QACE;AAAA,UACE,SAAA,EAAW,aAAa,MAAM,CAAA,IAAA,CAAA;AAAA,UAC9B,eAAe,MAAA,CAAO;AAAA,SACxB;AAAA,QACA,CAAC,GAAG;AAAA;AACN,KACF;AACA,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,KAAA,CAAM,EAAE,SAAA,EAAW,CAAA,UAAA,EAAa,MAAM,CAAA,IAAA,CAAA,EAAO,EAAG,CAAC,MAAM,CAAC;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,EAAA;AAAA,IACb,SAAA;AAAA,IACA;AAAA,MACE,EAAA,EAAI,yBAAA;AAAA,MACJ,YAAA,EAAc,gBAAA;AAAA,MACd,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,CAAG,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,WAAW,CAAA;AAAA,MAC/D,GAAG,MAAA,EAAQ;AAAA,QACT,CAAA,EAAG,uCAAA;AAAA,QACH,MAAA,EAAQ,MAAA;AAAA,QACR,cAAA,EAAgB;AAAA,OACjB;AAAA;AACH,GACF;AAEA,EAAA,MAAM,GAAA,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAWZ,IAAA,EAAK;AAEL,EAAA,OAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,kBAAA;AAAA,MACP,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,KAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA,EAAM,KAAA;AAAA,MACN,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA;AAAA,MACE,KAAA,CAAQ,GAAA,CAAI,KAAA,IAAS,gBAAgB,CAAA;AAAA,MACrC,IAAA,CAAK,CAAA,4BAAA,EAA+B,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA,CAAE,MAAM,CAAA,QAAA,CAAU,CAAA;AAAA,MAC5F,IAAA,CAAK,CAAC,MAAA,EAAQ,EAAA,CAAG,SAAS,EAAC,EAAG,GAAG,CAAC,CAAC,CAAA;AAAA,MACnC,KAAA,CAAM,EAAE,KAAA,EAAO,yBAAA,IAA6B,SAAS,CAAA;AAAA,MACrD,KAAA,CAAM,EAAE,KAAA,EAAO,wBAAA,IAA4B,QAAQ,CAAA;AAAA,MACnD,KAAA,CAAM,EAAE,KAAA,EAAO,yBAAA,IAA6B,SAAS,CAAA;AAAA,MACrD,KAAA,CAAM,EAAE,KAAA,EAAO,wBAAA,IAA4B,QAAQ,CAAA;AAAA,MACnD,IAAI,KAAA,GACA,IAAA;AAAA,QACE;AAAA,UACE,GAAG,KAAA,GAAQ,CAAA;AAAA,UACX,CAAA,EAAG,EAAA;AAAA,UACH,aAAA,EAAe,QAAA;AAAA,UACf,KAAA,EAAO,wBAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA,GAAA,CAAI;AAAA,OACN,GACA;AAAA;AACN,GACF;AACF;;;AChaO,IAAM,MAAA,GAAwB;AAAA,EACnC,IAAA,EAAM,QAAA;AAAA,EACN,OAAOD,KAAAA,EAAuB;AAC5B,IAAA,MAAM,KAAA,GAAQA,KAAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK,CAAE,WAAA,EAAY,IAAK,EAAA;AAClE,IAAA,OAAO,KAAA,CAAM,WAAW,QAAQ,CAAA;AAAA,EAClC,CAAA;AAAA,EACA,KAAA,EAAO,WAAA;AAAA,EAEP,OAAOA,KAAAA,EAAsB;AAC3B,IAAA,MAAM,GAAA,GAAM,YAAYA,KAAI,CAAA;AAC5B,IAAA,OAAO,aAAa,GAAG,CAAA;AAAA,EACzB;AACF","file":"chunk-IXRPRMHI.js","sourcesContent":["import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\nimport { matchQuotedTitle } from \"../../core/quotes\";\n\nexport class TimingParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"TimingParseError\";\n }\n}\n\nconst VALID_STATES = /^[01xzpPnNhHlLudD=.23456789]+$/;\n\nfunction splitDataList(rest: string): { wave: string; data: string[] } {\n // Wave string is first token; remaining tokens are quoted strings or a `data: [...]` form\n const trimmed = rest.trim();\n // Accept: `wave data: [\"a\",\"b\"]` or `wave \"a\" \"b\" \"c\"`\n const m = trimmed.match(/^(\\S+)\\s*(.*)$/);\n if (!m) return { wave: trimmed, data: [] };\n const wave = m[1];\n const remainder = m[2].trim();\n if (!remainder) return { wave, data: [] };\n\n const data: string[] = [];\n // Strip `data:` prefix + optional brackets\n let r = remainder.replace(/^data\\s*:\\s*/, \"\").trim();\n if (r.startsWith(\"[\") && r.endsWith(\"]\")) r = r.slice(1, -1);\n const re = /\"([^\"]*)\"/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(r)) !== null) data.push(match[1]);\n return { wave, data };\n}\n\nexport function parseTiming(text: string): TimingAST {\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n const signals: Array<TimingSignal | TimingGroup> = [];\n let title: string | undefined;\n let hscale: number | undefined;\n let currentGroup: TimingGroup | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i] ?? \"\";\n const lineNo = i + 1;\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n // Header: `timing \"title\" [hscale: 2]`\n if (/^timing\\b/i.test(line)) {\n const t = matchQuotedTitle(line);\n if (t !== undefined) title = t;\n const hs = line.match(/hscale\\s*:\\s*(\\d+(?:\\.\\d+)?)/);\n if (hs) hscale = parseFloat(hs[1]);\n continue;\n }\n\n // Group start: `[GroupName]` or `group \"name\" {`\n const groupOpen = line.match(/^\\[([^\\]]+)\\]$/) || line.match(/^group\\s+\"([^\"]+)\"\\s*\\{?$/);\n if (groupOpen) {\n currentGroup = { label: groupOpen[1], signals: [] };\n signals.push(currentGroup);\n continue;\n }\n if (line === \"}\") {\n currentGroup = null;\n continue;\n }\n if (line === \"---\") {\n currentGroup = null;\n continue;\n }\n\n // Signal: `NAME: wave ...`\n const sigMatch = line.match(/^([^:]+):\\s*(.+)$/);\n if (sigMatch) {\n const name = sigMatch[1].trim();\n const rhs = sigMatch[2].trim();\n const tok = rhs.split(/\\s+/);\n let wave: string;\n let data: string[] = [];\n\n if (/^clock$/i.test(tok[0])) {\n // `NAME: clock 8 [neg]` — N clock periods (no char-counting).\n const n = Number(tok[1]);\n if (!Number.isInteger(n) || n < 1) {\n throw new TimingParseError(\n `clock needs a positive cycle count, e.g. \"${name}: clock 8\"`,\n lineNo, undefined, line\n );\n }\n wave = (/^neg/i.test(tok[2] ?? \"\") ? \"n\" : \"p\").repeat(n);\n } else if (/^rle$/i.test(tok[0])) {\n // `NAME: rle 1*2 0*6 x*1` — run-length, each seg is <state>*<count>.\n wave = \"\";\n for (const seg of tok.slice(1)) {\n const sm = seg.match(/^(.)\\*(\\d+)$/);\n if (!sm || !VALID_STATES.test(sm[1])) {\n throw new TimingParseError(\n `rle segment must be <state>*<count>, e.g. \"1*2 0*6\"; got \"${seg}\"`,\n lineNo, undefined, line\n );\n }\n wave += sm[1].repeat(Number(sm[2]));\n }\n } else {\n const parsed = splitDataList(rhs);\n wave = parsed.wave;\n data = parsed.data;\n if (!VALID_STATES.test(wave)) {\n const bad = [...wave].find((c) => !VALID_STATES.test(c));\n throw new TimingParseError(\n `Invalid wave string \"${wave}\" for signal ${name}` +\n (bad ? ` — \"${bad}\" is not a valid state` : \"\") +\n `. Valid states: 0 1 x z = . p P n N h H l L u d 2-9` +\n `. Tip: use \"clock N\" for a clock or \"rle 1*2 0*6\" for run-length.`,\n lineNo, undefined, line\n );\n }\n }\n\n const signal: TimingSignal = { name, wave, data: data.length ? data : undefined };\n if (currentGroup) currentGroup.signals.push(signal);\n else signals.push(signal);\n continue;\n }\n }\n\n return { type: \"timing\", title, hscale, signals };\n}\n","import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\nimport { svgRoot, defs, group, el, text, title as titleEl, desc } from \"../../core/svg\";\n\nconst NAME_W = 120;\nconst SIG_H = 36;\nconst PAD_TOP = 12;\nconst PAD_BOT = 12;\nconst PAD_V = 6; // vertical padding inside band for rail spacing\nconst DEFAULT_PW = 40;\nconst GROUP_LABEL_H = 22;\n\ntype FlatRow =\n | { kind: \"signal\"; signal: TimingSignal; indent: number }\n | { kind: \"group\"; label: string; indent: number };\n\nfunction flatten(items: Array<TimingSignal | TimingGroup>, indent = 0): FlatRow[] {\n const out: FlatRow[] = [];\n for (const item of items) {\n if (\"wave\" in item) {\n out.push({ kind: \"signal\", signal: item, indent });\n } else {\n out.push({ kind: \"group\", label: item.label, indent });\n out.push(...flatten(item.signals, indent + 1));\n }\n }\n return out;\n}\n\ninterface WaveCtx {\n pw: number;\n yHi: number;\n yLo: number;\n yMid: number;\n h: number;\n}\n\ntype PrevState = \"hi\" | \"lo\" | \"bus\" | \"z\" | \"x\" | \"none\";\n\nfunction renderWave(signal: TimingSignal, ctx: WaveCtx): { svg: string; labels: string } {\n const { pw, yHi, yLo, yMid } = ctx;\n const wave = signal.wave;\n const paths: string[] = [];\n const busRects: string[] = [];\n const busTexts: string[] = [];\n const xPatchRects: string[] = [];\n const zLines: string[] = [];\n\n let prev: PrevState = \"none\";\n let prevChar = \"\";\n let busStartX = 0;\n let busIndex = 0;\n let dataIdx = 0;\n let linePath = \"\";\n\n const startLine = (x: number, y: number) => {\n if (linePath) paths.push(linePath);\n linePath = `M ${x},${y}`;\n };\n const extendLineTo = (x: number, y: number) => {\n linePath += ` L ${x},${y}`;\n };\n const flushLine = () => {\n if (linePath) {\n paths.push(linePath);\n linePath = \"\";\n }\n };\n\n const closeBus = (x: number) => {\n const start = busStartX;\n const end = x;\n const inset = Math.min(5, (end - start) / 2);\n // Trapezoid outline\n const d = `M ${start + inset},${yHi} L ${end - inset},${yHi} L ${end},${yMid} L ${end - inset},${yLo} L ${start + inset},${yLo} L ${start},${yMid} Z`;\n busRects.push(\n el(\"path\", { class: \"schematex-timing-bus\", d, \"data-bus-index\": String(busIndex) })\n );\n // Data label\n const label = signal.data?.[dataIdx] ?? \"\";\n if (label) {\n busTexts.push(\n text(\n {\n x: (start + end) / 2,\n y: yMid + 4,\n class: \"schematex-timing-bus-label\",\n \"text-anchor\": \"middle\",\n },\n label\n )\n );\n }\n dataIdx++;\n busIndex++;\n };\n\n for (let i = 0; i < wave.length; i++) {\n const ch = wave[i];\n const x = i * pw;\n const xNext = x + pw;\n\n // Handle continuation '.'\n const effective = ch === \".\" ? prevChar : ch;\n\n switch (effective) {\n case \"0\":\n case \"l\":\n case \"L\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yLo);\n } else if (prev === \"hi\") {\n extendLineTo(x, yLo);\n }\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"1\":\n case \"h\":\n case \"H\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yHi);\n } else if (prev === \"lo\") {\n extendLineTo(x, yHi);\n }\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"p\":\n case \"P\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n // One-period positive clock: lo→hi at x, hi until midpoint, lo at mid, lo until xNext\n startLine(x, yLo);\n extendLineTo(x, yHi);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(xNext, yLo);\n flushLine();\n prev = \"lo\";\n break;\n }\n case \"n\":\n case \"N\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(x, yLo);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(xNext, yHi);\n flushLine();\n prev = \"hi\";\n break;\n }\n case \"u\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yLo);\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"d\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"z\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n zLines.push(\n el(\"line\", {\n x1: x,\n y1: yMid,\n x2: xNext,\n y2: yMid,\n class: \"schematex-timing-hiz\",\n })\n );\n prev = \"z\";\n break;\n }\n case \"x\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n break;\n }\n case \"=\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n // Each fresh bus char (not '.') begins a new segment.\n const isContinuation = ch === \".\";\n if (!isContinuation && prev === \"bus\") closeBus(x);\n if (prev !== \"bus\" || !isContinuation) {\n flushLine();\n busStartX = x;\n }\n prev = \"bus\";\n break;\n }\n default: {\n // unknown char -> treat as x\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n }\n }\n\n prevChar = effective;\n }\n\n // Close trailing bus\n if (prev === \"bus\") closeBus(wave.length * pw);\n flushLine();\n\n const waveSvg = paths\n .map((d) => el(\"path\", { class: \"schematex-timing-wave\", d }))\n .concat(xPatchRects, zLines, busRects)\n .join(\"\");\n\n return { svg: waveSvg, labels: busTexts.join(\"\") };\n}\n\nexport function renderTiming(ast: TimingAST): string {\n const pw = DEFAULT_PW * (ast.hscale ?? 1);\n const rows = flatten(ast.signals);\n const maxWaveLen = Math.max(\n 1,\n ...rows.flatMap((r) => (r.kind === \"signal\" ? [r.signal.wave.length] : []))\n );\n const waveAreaW = maxWaveLen * pw;\n const width = NAME_W + waveAreaW + 20;\n\n let y = PAD_TOP;\n const rowYs: number[] = [];\n for (const r of rows) {\n rowYs.push(y);\n y += r.kind === \"group\" ? GROUP_LABEL_H : SIG_H;\n }\n const height = y + PAD_BOT + 10;\n\n // Render rows\n const waveSvgs: string[] = [];\n const labelSvgs: string[] = [];\n const nameSvgs: string[] = [];\n const gridLines: string[] = [];\n\n // Grid: vertical period ticks across signal area\n for (let i = 0; i <= maxWaveLen; i++) {\n const xg = NAME_W + i * pw;\n gridLines.push(\n el(\"line\", {\n x1: xg,\n y1: PAD_TOP,\n x2: xg,\n y2: height - PAD_BOT,\n class: \"schematex-timing-grid\",\n })\n );\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const ry = rowYs[i];\n\n if (row.kind === \"group\") {\n nameSvgs.push(\n text(\n {\n x: 6 + row.indent * 10,\n y: ry + GROUP_LABEL_H - 6,\n class: \"schematex-timing-group-label\",\n },\n row.label\n )\n );\n continue;\n }\n\n const signal = row.signal;\n const yHi = ry + PAD_V;\n const yLo = ry + SIG_H - PAD_V;\n const yMid = ry + SIG_H / 2;\n\n // Signal name (right-aligned in name column). `~NAME` or `/NAME` → overlined active-low.\n const activeLow = signal.name.startsWith(\"~\") || signal.name.startsWith(\"/\");\n const displayName = activeLow ? signal.name.slice(1) : signal.name;\n nameSvgs.push(\n text(\n {\n x: NAME_W - 8,\n y: yMid + 4,\n class: activeLow\n ? \"schematex-timing-name schematex-timing-name-activelow\"\n : \"schematex-timing-name\",\n \"text-anchor\": \"end\",\n },\n displayName\n )\n );\n\n const { svg, labels } = renderWave(signal, {\n pw,\n yHi,\n yLo,\n yMid,\n h: SIG_H - 2 * PAD_V,\n });\n\n waveSvgs.push(\n group(\n {\n transform: `translate(${NAME_W}, 0)`,\n \"data-signal\": signal.name,\n },\n [svg]\n )\n );\n labelSvgs.push(\n group({ transform: `translate(${NAME_W}, 0)` }, [labels])\n );\n }\n\n const xhatch = el(\n \"pattern\",\n {\n id: \"schematex-timing-xhatch\",\n patternUnits: \"userSpaceOnUse\",\n width: 6,\n height: 6,\n },\n [\n el(\"rect\", { x: 0, y: 0, width: 6, height: 6, fill: \"#f5f5f5\" }),\n el(\"path\", {\n d: \"M 0,6 L 6,0 M -1,1 L 1,-1 M 5,7 L 7,5\",\n stroke: \"#999\",\n \"stroke-width\": 0.8,\n }),\n ]\n );\n\n const css = `\n.schematex-timing { font-family: system-ui, -apple-system, sans-serif; }\n.schematex-timing-name { font: 12px monospace; fill: #111; }\n.schematex-timing-name-activelow { text-decoration: overline; }\n.schematex-timing-group-label { font: bold 12px sans-serif; fill: #111; }\n.schematex-timing-wave { stroke: #111; stroke-width: 1.75; fill: none; stroke-linejoin: miter; stroke-linecap: square; }\n.schematex-timing-bus { fill: none; stroke: #111; stroke-width: 1.5; }\n.schematex-timing-bus-label { font: 11px monospace; fill: #111; }\n.schematex-timing-unknown { stroke: #555; stroke-width: 0.5; }\n.schematex-timing-hiz { stroke: #555; stroke-width: 1.5; stroke-dasharray: 4 3; }\n.schematex-timing-grid { stroke: #eee; stroke-width: 0.5; }\n`.trim();\n\n return svgRoot(\n {\n class: \"schematex-timing\",\n viewBox: `0 0 ${width} ${height}`,\n width,\n height,\n role: \"img\",\n \"data-diagram-type\": \"timing\",\n },\n [\n titleEl(ast.title ?? \"Timing Diagram\"),\n desc(`Digital timing diagram with ${rows.filter((r) => r.kind === \"signal\").length} signals`),\n defs([xhatch, el(\"style\", {}, css)]),\n group({ class: \"schematex-timing-grid-g\" }, gridLines),\n group({ class: \"schematex-timing-waves\" }, waveSvgs),\n group({ class: \"schematex-timing-labels\" }, labelSvgs),\n group({ class: \"schematex-timing-names\" }, nameSvgs),\n ast.title\n ? text(\n {\n x: width / 2,\n y: 14,\n \"text-anchor\": \"middle\",\n class: \"schematex-timing-title\",\n style: \"font: bold 13px sans-serif; fill: #333;\",\n },\n ast.title\n )\n : \"\",\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseTiming } from \"./parser\";\nimport { renderTiming } from \"./renderer\";\n\nexport const timing: DiagramPlugin = {\n type: \"timing\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"timing\");\n },\n parse: parseTiming,\n\n render(text: string): string {\n const ast = parseTiming(text);\n return renderTiming(ast);\n },\n};\n\nexport { parseTiming } from \"./parser\";\nexport { renderTiming } from \"./renderer\";\n"]}
|