schematex 0.5.2 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -1
- package/dist/ai/ai-sdk.cjs +23 -23
- package/dist/ai/ai-sdk.d.cts +4 -4
- package/dist/ai/ai-sdk.d.ts +4 -4
- package/dist/ai/ai-sdk.js +18 -18
- package/dist/ai/index.cjs +35 -27
- package/dist/ai/index.d.cts +4 -4
- package/dist/ai/index.d.ts +4 -4
- package/dist/ai/index.js +18 -18
- package/dist/{api-Cr_MxttI.d.ts → api-BEJTXyBA.d.cts} +3 -40
- package/dist/{api-C5SECOxZ.d.cts → api-DFrSR3lw.d.ts} +3 -40
- package/dist/browser.cjs +24 -24
- package/dist/browser.d.cts +3 -3
- package/dist/browser.d.ts +3 -3
- package/dist/browser.js +18 -18
- package/dist/{chunk-N7W5KZK7.cjs → chunk-2L4YXZAZ.cjs} +4 -4
- package/dist/{chunk-N7W5KZK7.cjs.map → chunk-2L4YXZAZ.cjs.map} +1 -1
- package/dist/{chunk-ZYRCPSBU.js → chunk-3IE7KZY4.js} +4 -4
- package/dist/{chunk-ZYRCPSBU.js.map → chunk-3IE7KZY4.js.map} +1 -1
- package/dist/{chunk-ZX74KJPM.js → chunk-3VB5AT4R.js} +3 -3
- package/dist/{chunk-ZX74KJPM.js.map → chunk-3VB5AT4R.js.map} +1 -1
- package/dist/{chunk-S2KJRHDZ.cjs → chunk-4UFR2LB6.cjs} +13 -13
- package/dist/{chunk-S2KJRHDZ.cjs.map → chunk-4UFR2LB6.cjs.map} +1 -1
- package/dist/{chunk-4QPDZJAL.cjs → chunk-4XR7X7XW.cjs} +11569 -9045
- package/dist/chunk-4XR7X7XW.cjs.map +1 -0
- package/dist/{chunk-6OSUNBZY.js → chunk-522WB2EH.js} +135 -7
- package/dist/chunk-522WB2EH.js.map +1 -0
- package/dist/{chunk-QTNPMIO2.cjs → chunk-6JI6FWLZ.cjs} +341 -35
- package/dist/chunk-6JI6FWLZ.cjs.map +1 -0
- package/dist/{chunk-UFTYX73U.js → chunk-7F76AWOI.js} +339 -35
- package/dist/chunk-7F76AWOI.js.map +1 -0
- package/dist/{chunk-BW4KGTV7.cjs → chunk-C5C5EF3W.cjs} +4 -4
- package/dist/{chunk-BW4KGTV7.cjs.map → chunk-C5C5EF3W.cjs.map} +1 -1
- package/dist/{chunk-VJGMEGMR.js → chunk-DOK7LKLO.js} +125 -13
- package/dist/chunk-DOK7LKLO.js.map +1 -0
- package/dist/{chunk-L3CTXXVZ.js → chunk-FBS3PACU.js} +3 -3
- package/dist/{chunk-L3CTXXVZ.js.map → chunk-FBS3PACU.js.map} +1 -1
- package/dist/{chunk-QUKVGHN4.cjs → chunk-FKJBXGWP.cjs} +4 -4
- package/dist/{chunk-QUKVGHN4.cjs.map → chunk-FKJBXGWP.cjs.map} +1 -1
- package/dist/{chunk-SZK376QB.js → chunk-H4MT5TJP.js} +3 -3
- package/dist/{chunk-SZK376QB.js.map → chunk-H4MT5TJP.js.map} +1 -1
- package/dist/{chunk-3M6T7KB4.js → chunk-HAZALB7U.js} +3 -3
- package/dist/{chunk-3M6T7KB4.js.map → chunk-HAZALB7U.js.map} +1 -1
- package/dist/{chunk-VFZOPRQP.cjs → chunk-HWVBHU3O.cjs} +5 -5
- package/dist/{chunk-VFZOPRQP.cjs.map → chunk-HWVBHU3O.cjs.map} +1 -1
- package/dist/{chunk-OK5ZS3LU.js → chunk-I2GQYOZ5.js} +11586 -9069
- package/dist/chunk-I2GQYOZ5.js.map +1 -0
- package/dist/{chunk-D7EHZFK4.cjs → chunk-L7POWM5B.cjs} +138 -2
- package/dist/chunk-L7POWM5B.cjs.map +1 -0
- package/dist/{chunk-2VNMKOUO.js → chunk-LRI4RH2N.js} +135 -3
- package/dist/chunk-LRI4RH2N.js.map +1 -0
- package/dist/{chunk-EPKIJEH7.js → chunk-MFAMNFPA.js} +63 -6
- package/dist/chunk-MFAMNFPA.js.map +1 -0
- package/dist/{chunk-VDSYMSUY.js → chunk-MVIEIKOI.js} +3 -3
- package/dist/{chunk-VDSYMSUY.js.map → chunk-MVIEIKOI.js.map} +1 -1
- package/dist/{chunk-ZL5RB4UV.js → chunk-N5B242WY.js} +3 -3
- package/dist/{chunk-ZL5RB4UV.js.map → chunk-N5B242WY.js.map} +1 -1
- package/dist/{chunk-VKPCR7BG.js → chunk-OTSVMKII.js} +883 -12
- package/dist/chunk-OTSVMKII.js.map +1 -0
- package/dist/{chunk-YLEVMOK2.cjs → chunk-R66QG3XT.cjs} +5 -4
- package/dist/{chunk-YLEVMOK2.cjs.map → chunk-R66QG3XT.cjs.map} +1 -1
- package/dist/{chunk-3M6WB62Y.cjs → chunk-R6VX5YTJ.cjs} +139 -7
- package/dist/chunk-R6VX5YTJ.cjs.map +1 -0
- package/dist/{chunk-I55HO32M.js → chunk-RJMCWT7Z.js} +3 -3
- package/dist/{chunk-I55HO32M.js.map → chunk-RJMCWT7Z.js.map} +1 -1
- package/dist/{chunk-TZTCIAYW.cjs → chunk-S3RMAXH5.cjs} +137 -25
- package/dist/chunk-S3RMAXH5.cjs.map +1 -0
- package/dist/{chunk-HK56GQQP.cjs → chunk-SSLNPHCL.cjs} +886 -13
- package/dist/chunk-SSLNPHCL.cjs.map +1 -0
- package/dist/{chunk-IBRW3UOA.js → chunk-TWLKXV2O.js} +3 -3
- package/dist/{chunk-IBRW3UOA.js.map → chunk-TWLKXV2O.js.map} +1 -1
- package/dist/{chunk-VCH7RI5H.js → chunk-UWA5MWCI.js} +4 -4
- package/dist/chunk-UWA5MWCI.js.map +1 -0
- package/dist/{chunk-RYVV5UVI.cjs → chunk-V4GILQR6.cjs} +4 -4
- package/dist/{chunk-RYVV5UVI.cjs.map → chunk-V4GILQR6.cjs.map} +1 -1
- package/dist/{chunk-QMTWG6JL.cjs → chunk-V4RO5KYY.cjs} +6 -4
- package/dist/chunk-V4RO5KYY.cjs.map +1 -0
- package/dist/{chunk-VZ5LDNHK.cjs → chunk-VTSH4YPT.cjs} +12 -12
- package/dist/{chunk-VZ5LDNHK.cjs.map → chunk-VTSH4YPT.cjs.map} +1 -1
- package/dist/{chunk-UUBNQV2T.cjs → chunk-WQDIZH2Z.cjs} +12 -12
- package/dist/{chunk-UUBNQV2T.cjs.map → chunk-WQDIZH2Z.cjs.map} +1 -1
- package/dist/{chunk-SUIDD2C5.cjs → chunk-XNCOSVNG.cjs} +63 -6
- package/dist/chunk-XNCOSVNG.cjs.map +1 -0
- package/dist/{chunk-EGSUMHCS.cjs → chunk-YB4XJY5L.cjs} +12 -12
- package/dist/{chunk-EGSUMHCS.cjs.map → chunk-YB4XJY5L.cjs.map} +1 -1
- package/dist/{chunk-JHDR56XO.js → chunk-YS6CGUNH.js} +3 -3
- package/dist/{chunk-JHDR56XO.js.map → chunk-YS6CGUNH.js.map} +1 -1
- package/dist/{types-WTr9W5Ud.d.ts → diagnostics-B-ffSEhl.d.cts} +82 -2
- package/dist/{types-WTr9W5Ud.d.cts → diagnostics-B-ffSEhl.d.ts} +82 -2
- package/dist/diagrams/blockdiagram/index.cjs +5 -5
- package/dist/diagrams/blockdiagram/index.d.cts +1 -1
- package/dist/diagrams/blockdiagram/index.d.ts +1 -1
- package/dist/diagrams/blockdiagram/index.js +1 -1
- package/dist/diagrams/circuit/index.cjs +8 -8
- package/dist/diagrams/circuit/index.d.cts +1 -1
- package/dist/diagrams/circuit/index.d.ts +1 -1
- package/dist/diagrams/circuit/index.js +2 -2
- package/dist/diagrams/ecomap/index.cjs +7 -7
- package/dist/diagrams/ecomap/index.d.cts +1 -1
- package/dist/diagrams/ecomap/index.d.ts +1 -1
- package/dist/diagrams/ecomap/index.js +2 -2
- package/dist/diagrams/entity/index.cjs +6 -6
- package/dist/diagrams/entity/index.d.cts +1 -1
- package/dist/diagrams/entity/index.d.ts +1 -1
- package/dist/diagrams/entity/index.js +2 -2
- package/dist/diagrams/fishbone/index.cjs +8 -8
- package/dist/diagrams/fishbone/index.d.cts +1 -1
- package/dist/diagrams/fishbone/index.d.ts +1 -1
- package/dist/diagrams/fishbone/index.js +2 -2
- package/dist/diagrams/flowchart/index.cjs +8 -8
- package/dist/diagrams/flowchart/index.d.cts +2 -2
- package/dist/diagrams/flowchart/index.d.ts +2 -2
- package/dist/diagrams/flowchart/index.js +2 -2
- package/dist/diagrams/genogram/index.cjs +9 -9
- package/dist/diagrams/genogram/index.d.cts +1 -1
- package/dist/diagrams/genogram/index.d.ts +1 -1
- package/dist/diagrams/genogram/index.js +2 -2
- package/dist/diagrams/ladder/index.cjs +6 -6
- package/dist/diagrams/ladder/index.d.cts +1 -1
- package/dist/diagrams/ladder/index.d.ts +1 -1
- package/dist/diagrams/ladder/index.js +2 -2
- package/dist/diagrams/logic/index.cjs +6 -6
- package/dist/diagrams/logic/index.d.cts +1 -1
- package/dist/diagrams/logic/index.d.ts +1 -1
- package/dist/diagrams/logic/index.js +2 -2
- package/dist/diagrams/orgchart/index.cjs +7 -7
- package/dist/diagrams/orgchart/index.d.cts +1 -1
- package/dist/diagrams/orgchart/index.d.ts +1 -1
- package/dist/diagrams/orgchart/index.js +2 -2
- package/dist/diagrams/pedigree/index.cjs +7 -7
- package/dist/diagrams/pedigree/index.d.cts +1 -1
- package/dist/diagrams/pedigree/index.d.ts +1 -1
- package/dist/diagrams/pedigree/index.js +2 -2
- package/dist/diagrams/phylo/index.cjs +7 -7
- package/dist/diagrams/phylo/index.d.cts +1 -1
- package/dist/diagrams/phylo/index.d.ts +1 -1
- package/dist/diagrams/phylo/index.js +2 -2
- package/dist/diagrams/sld/index.cjs +14 -6
- package/dist/diagrams/sld/index.d.cts +14 -2
- package/dist/diagrams/sld/index.d.ts +14 -2
- package/dist/diagrams/sld/index.js +2 -2
- package/dist/diagrams/sociogram/index.cjs +6 -6
- package/dist/diagrams/sociogram/index.d.cts +1 -1
- package/dist/diagrams/sociogram/index.d.ts +1 -1
- package/dist/diagrams/sociogram/index.js +2 -2
- package/dist/diagrams/timing/index.d.cts +1 -1
- package/dist/diagrams/timing/index.d.ts +1 -1
- package/dist/diagrams/venn/index.cjs +9 -9
- package/dist/diagrams/venn/index.d.cts +1 -1
- package/dist/diagrams/venn/index.d.ts +1 -1
- package/dist/diagrams/venn/index.js +2 -2
- package/dist/{index-BD2yDfQM.d.cts → index-DPWdYfNx.d.ts} +60 -2
- package/dist/{index-C30zQWZI.d.ts → index-S0njakQ2.d.cts} +60 -2
- package/dist/index.cjs +344 -56
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +38 -4
- package/dist/index.d.ts +38 -4
- package/dist/index.js +284 -17
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +18 -18
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +17 -17
- package/dist/{tools-DlpuE76u.d.cts → tools-CeGGMCs7.d.cts} +12 -4
- package/dist/{tools-BHWaJPOl.d.ts → tools-kK_enDwb.d.ts} +12 -4
- package/package.json +1 -1
- package/dist/chunk-2VNMKOUO.js.map +0 -1
- package/dist/chunk-3M6WB62Y.cjs.map +0 -1
- package/dist/chunk-4QPDZJAL.cjs.map +0 -1
- package/dist/chunk-6OSUNBZY.js.map +0 -1
- package/dist/chunk-D7EHZFK4.cjs.map +0 -1
- package/dist/chunk-EPKIJEH7.js.map +0 -1
- package/dist/chunk-HK56GQQP.cjs.map +0 -1
- package/dist/chunk-OK5ZS3LU.js.map +0 -1
- package/dist/chunk-QMTWG6JL.cjs.map +0 -1
- package/dist/chunk-QTNPMIO2.cjs.map +0 -1
- package/dist/chunk-SUIDD2C5.cjs.map +0 -1
- package/dist/chunk-TZTCIAYW.cjs.map +0 -1
- package/dist/chunk-UFTYX73U.js.map +0 -1
- package/dist/chunk-VCH7RI5H.js.map +0 -1
- package/dist/chunk-VJGMEGMR.js.map +0 -1
- package/dist/chunk-VKPCR7BG.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/diagrams/circuit/symbols.ts","../src/diagrams/circuit/netlist.ts","../src/diagrams/circuit/parser.ts","../src/diagrams/circuit/layout.ts","../src/diagrams/circuit/autolayout.ts","../src/diagrams/circuit/renderer.ts","../src/diagrams/circuit/index.ts"],"names":["title","text","c","laid","minX","maxX"],"mappings":"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","file":"chunk-UWA5MWCI.js","sourcesContent":["/**\n * Circuit schematic symbol library.\n *\n * Each symbol is defined in RIGHTWARD orientation (direction=\"right\"):\n * - `start` anchor at (0, 0) — where the previous component's end connects in\n * - `end` anchor at (length, 0) — where the next component's start attaches\n * - Other named anchors (plus/minus/out/base/collector/emitter/wiper/gate/…)\n *\n * When the component is placed with a different direction, the renderer applies\n * an SVG rotation transform around (0,0) and the layout rotates the anchor\n * coordinates accordingly.\n */\nimport type { CircuitComponentType } from \"../../core/types\";\n\nexport interface PinAnchor {\n x: number;\n y: number;\n}\n\nexport interface SymbolDef {\n /** Length along the direction axis, used to compute next cursor position. */\n length: number;\n /** Anchor map in rightward orientation. MUST include start + end. */\n anchors: Record<string, PinAnchor>;\n /** Canonical netlist pin order; falls back to start/end for two-terminal symbols. */\n netlistPins?: string[];\n /** SVG fragment drawn from (0,0); caller wraps in <g transform=\"translate()+rotate()\">. */\n svg: (label?: string, value?: string, attrs?: Record<string, string>) => string;\n}\n\n// ─── Drawing helpers ────────────────────────────────────────────\n\nconst BODY = 'class=\"schematex-circuit-body\"';\nconst FILL = 'class=\"schematex-circuit-fill\"';\nconst WIRE = 'class=\"schematex-circuit-wire\"';\n\nfunction lineWire(x1: number, y1: number, x2: number, y2: number): string {\n return `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" ${WIRE}/>`;\n}\n\n// ─── Passive ──────────────────────────────────────────────────\n\nconst resistor: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n `<path d=\"M 0,0 L 5,0 L 8,-8 L 12,8 L 16,-8 L 20,8 L 24,-8 L 28,8 L 32,-8 L 35,0 L 40,0\" ${BODY}/>`,\n};\n\nconst capacitor: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<line x1=\"8\" y1=\"-10\" x2=\"8\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"-10\" x2=\"12\" y2=\"10\" ${BODY}/>`,\n lineWire(12, 0, 20, 0),\n ].join(\"\"),\n};\n\nconst electrolytic_cap: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<line x1=\"8\" y1=\"-10\" x2=\"8\" y2=\"10\" ${BODY}/>`,\n `<path d=\"M 12,-10 Q 16,0 12,10\" fill=\"none\" class=\"schematex-circuit-body\"/>`,\n lineWire(12, 0, 20, 0),\n `<text x=\"5\" y=\"-12\" class=\"schematex-circuit-pol\">−</text>`,\n `<text x=\"15\" y=\"-12\" class=\"schematex-circuit-pol\">+</text>`,\n ].join(\"\"),\n};\n\nconst inductor: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n `<path d=\"M 0,0 L 5,0 A 5,5 0 0 1 15,0 A 5,5 0 0 1 25,0 A 5,5 0 0 1 35,0 L 40,0\" fill=\"none\" ${BODY}/>`,\n};\n\nconst fuse: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 5, 0),\n `<rect x=\"5\" y=\"-5\" width=\"20\" height=\"10\" rx=\"5\" fill=\"none\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"0\" x2=\"25\" y2=\"0\" ${BODY}/>`,\n lineWire(25, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst crystal: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-9\" x2=\"10\" y2=\"9\" ${BODY}/>`,\n `<rect x=\"14\" y=\"-7\" width=\"12\" height=\"14\" fill=\"none\" ${BODY}/>`,\n `<line x1=\"30\" y1=\"-9\" x2=\"30\" y2=\"9\" ${BODY}/>`,\n lineWire(30, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst transformer: SymbolDef = {\n length: 60,\n netlistPins: [\"p1\", \"p2\", \"s1\", \"s2\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 60, y: 0 },\n p1: { x: 0, y: 0 },\n p2: { x: 0, y: 0 },\n s1: { x: 60, y: 0 },\n s2: { x: 60, y: 0 },\n },\n svg: () =>\n [\n // Primary coils (left)\n `<path d=\"M 5,-18 A 5,5 0 0 1 5,-8 A 5,5 0 0 1 5,2 A 5,5 0 0 1 5,12 A 5,5 0 0 1 5,22\" fill=\"none\" ${BODY}/>`,\n lineWire(0, 0, 5, 0),\n // Core lines\n `<line x1=\"28\" y1=\"-20\" x2=\"28\" y2=\"22\" ${BODY}/>`,\n `<line x1=\"32\" y1=\"-20\" x2=\"32\" y2=\"22\" ${BODY}/>`,\n // Secondary coils (right)\n `<path d=\"M 55,-18 A 5,5 0 0 0 55,-8 A 5,5 0 0 0 55,2 A 5,5 0 0 0 55,12 A 5,5 0 0 0 55,22\" fill=\"none\" ${BODY}/>`,\n lineWire(55, 0, 60, 0),\n ].join(\"\"),\n};\n\n// ─── Sources ──────────────────────────────────────────────────\n\nconst voltage_source: SymbolDef = {\n length: 40,\n netlistPins: [\"plus\", \"minus\"],\n // plus/minus aliases: end = +, start = − (matches on-symbol label)\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 40, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<text x=\"16\" y=\"-2\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"23\" y=\"8\" class=\"schematex-circuit-pol\">−</text>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst current_source: SymbolDef = {\n length: 40,\n netlistPins: [\"plus\", \"minus\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 40, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"0\" x2=\"24\" y2=\"0\" ${BODY}/>`,\n `<polygon points=\"26,0 20,-4 20,4\" ${FILL}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst ac_source: SymbolDef = {\n length: 40,\n netlistPins: [\"plus\", \"minus\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 40, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<path d=\"M 14,0 Q 17,-6 20,0 Q 23,6 26,0\" fill=\"none\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst battery: SymbolDef = {\n length: 24,\n netlistPins: [\"plus\", \"minus\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 24, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 24, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<line x1=\"8\" y1=\"-8\" x2=\"8\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"-4\" x2=\"12\" y2=\"4\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-8\" x2=\"14\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-4\" x2=\"18\" y2=\"4\" ${BODY}/>`,\n lineWire(18, 0, 24, 0),\n ].join(\"\"),\n};\n\nconst ground: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n // Drawn as a \"terminal\" — vertical connection at start, earth lines below\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<line x1=\"10\" y1=\"-8\" x2=\"10\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"6\" y1=\"4\" x2=\"14\" y2=\"4\" ${BODY}/>`,\n `<line x1=\"8\" y1=\"8\" x2=\"12\" y2=\"8\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst gnd_signal: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"8\" y2=\"0\" ${WIRE}/>`,\n `<polygon points=\"8,-6 8,6 16,0\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst vcc: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<line x1=\"4\" y1=\"-6\" x2=\"16\" y2=\"-6\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Diodes ───────────────────────────────────────────────────\n\nconst diode: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<line x1=\"22\" y1=\"-8\" x2=\"22\" y2=\"8\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst zener: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<path d=\"M 18,-10 L 22,-8 L 22,8 L 26,10\" fill=\"none\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst schottky: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<path d=\"M 18,-4 L 18,-8 L 22,-8 L 22,8 L 26,8 L 26,4\" fill=\"none\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst led: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<line x1=\"22\" y1=\"-8\" x2=\"22\" y2=\"8\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n // outward light arrows\n `<path d=\"M 12,-10 L 20,-18 M 18,-18 L 20,-18 L 20,-16\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 16,-10 L 24,-18 M 22,-18 L 24,-18 L 24,-16\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst photodiode: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<line x1=\"22\" y1=\"-8\" x2=\"22\" y2=\"8\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n // inward light arrows\n `<path d=\"M 20,-18 L 12,-10 M 12,-12 L 12,-10 L 14,-10\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 24,-18 L 16,-10 M 16,-12 L 16,-10 L 18,-10\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── BJT ──────────────────────────────────────────────────────\n\nconst npn: SymbolDef = {\n length: 40,\n netlistPins: [\"c\", \"b\", \"e\"],\n // base at left, collector up-right, emitter down-right\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n base: { x: 0, y: 0 },\n collector: { x: 40, y: -16 },\n emitter: { x: 40, y: 16 },\n b: { x: 0, y: 0 },\n c: { x: 40, y: -16 },\n e: { x: 40, y: 16 },\n },\n svg: () =>\n [\n `<circle cx=\"20\" cy=\"0\" r=\"16\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-6\" x2=\"30\" y2=\"-12\" ${BODY}/>`,\n lineWire(30, -12, 40, -16),\n `<line x1=\"14\" y1=\"6\" x2=\"30\" y2=\"12\" ${BODY}/>`,\n lineWire(30, 12, 40, 16),\n // NPN arrow (outward on emitter)\n `<polygon points=\"30,12 24,10 26,16\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst pnp: SymbolDef = {\n length: 40,\n netlistPins: [\"c\", \"b\", \"e\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n base: { x: 0, y: 0 },\n collector: { x: 40, y: 16 },\n emitter: { x: 40, y: -16 },\n b: { x: 0, y: 0 },\n c: { x: 40, y: 16 },\n e: { x: 40, y: -16 },\n },\n svg: () =>\n [\n `<circle cx=\"20\" cy=\"0\" r=\"16\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-6\" x2=\"30\" y2=\"-12\" ${BODY}/>`,\n lineWire(30, -12, 40, -16),\n `<line x1=\"14\" y1=\"6\" x2=\"30\" y2=\"12\" ${BODY}/>`,\n lineWire(30, 12, 40, 16),\n // PNP arrow (inward on emitter → toward base line)\n `<polygon points=\"14,-6 20,-4 18,-10\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// ─── MOSFET ───────────────────────────────────────────────────\n\nconst nmos: SymbolDef = {\n length: 40,\n netlistPins: [\"d\", \"g\", \"s\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n drain: { x: 40, y: -16 },\n source: { x: 40, y: 16 },\n g: { x: 0, y: 0 },\n d: { x: 40, y: -16 },\n s: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-10\" x2=\"18\" y2=\"-4\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-2\" x2=\"18\" y2=\"2\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"4\" x2=\"18\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"18\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"22,0 18,-4 18,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst pmos: SymbolDef = {\n length: 40,\n netlistPins: [\"d\", \"g\", \"s\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n source: { x: 40, y: -16 },\n drain: { x: 40, y: 16 },\n g: { x: 0, y: 0 },\n s: { x: 40, y: -16 },\n d: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-10\" x2=\"18\" y2=\"-4\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-2\" x2=\"18\" y2=\"2\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"4\" x2=\"18\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"18\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"14,0 18,-4 18,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst jfet_n: SymbolDef = {\n length: 40,\n netlistPins: [\"d\", \"g\", \"s\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n drain: { x: 40, y: -16 },\n source: { x: 40, y: 16 },\n g: { x: 0, y: 0 },\n d: { x: 40, y: -16 },\n s: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"14\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"14,0 10,-4 10,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst jfet_p: SymbolDef = {\n length: 40,\n netlistPins: [\"d\", \"g\", \"s\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n drain: { x: 40, y: -16 },\n source: { x: 40, y: 16 },\n g: { x: 0, y: 0 },\n d: { x: 40, y: -16 },\n s: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"14\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"10,0 14,-4 14,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// ─── Opamp / Comparator ───────────────────────────────────────\n\nconst opamp: SymbolDef = {\n length: 50,\n netlistPins: [\"plus\", \"minus\", \"out\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n plus: { x: 0, y: -10 },\n minus: { x: 0, y: 10 },\n out: { x: 50, y: 0 },\n \"supply+\": { x: 25, y: -20 },\n \"supply-\": { x: 25, y: 20 },\n },\n svg: () =>\n [\n `<polygon points=\"0,-20 0,20 50,0\" fill=\"white\" ${BODY}/>`,\n `<text x=\"5\" y=\"-6\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"5\" y=\"14\" class=\"schematex-circuit-pol\">−</text>`,\n ].join(\"\"),\n};\n\nconst comparator: SymbolDef = {\n length: 50,\n netlistPins: [\"plus\", \"minus\", \"out\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n plus: { x: 0, y: -10 },\n minus: { x: 0, y: 10 },\n out: { x: 50, y: 0 },\n },\n svg: () =>\n [\n `<polygon points=\"0,-20 0,20 50,0\" fill=\"white\" ${BODY}/>`,\n `<text x=\"5\" y=\"-6\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"5\" y=\"14\" class=\"schematex-circuit-pol\">−</text>`,\n `<circle cx=\"48\" cy=\"0\" r=\"3\" fill=\"white\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Switches ─────────────────────────────────────────────────\n\nconst switch_spst: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"0\" x2=\"30\" y2=\"-10\" ${BODY}/>`,\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"30\" cy=\"0\" r=\"2\" ${FILL}/>`,\n lineWire(30, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst push_no: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 12, 0),\n lineWire(28, 0, 40, 0),\n `<circle cx=\"12\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"28\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<line x1=\"12\" y1=\"-4\" x2=\"28\" y2=\"-4\" ${BODY}/>`,\n `<line x1=\"20\" y1=\"-4\" x2=\"20\" y2=\"-12\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-12\" x2=\"26\" y2=\"-12\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Measurement ──────────────────────────────────────────────\n\nconst meterSvg = (letter: string): SymbolDef[\"svg\"] => () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<text x=\"20\" y=\"4\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${letter}</text>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\");\n\nconst ammeter: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"A\") };\nconst voltmeter: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"V\") };\nconst wattmeter: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"W\") };\nconst motor: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"M\") };\n\n// ─── Electromechanical / Output devices ───────────────────────\n\n// Lamp / bulb — circle with X through it\nconst lamp: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"-8\" x2=\"28\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"8\" x2=\"28\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Buzzer — semicircle (dome)\nconst buzzer: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<path d=\"M 8,0 A 12,12 0 0 1 32,0 L 8,0 Z\" fill=\"white\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Speaker — trapezoid/box with cone flare\nconst speaker: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n `<rect x=\"6\" y=\"-8\" width=\"10\" height=\"16\" fill=\"white\" ${BODY}/>`,\n `<path d=\"M 16,-8 L 28,-16 L 28,16 L 16,8 Z\" fill=\"white\" ${BODY}/>`,\n lineWire(0, 8, 6, 8),\n ].join(\"\"),\n};\n\n// Microphone — circle + vertical bar\nconst microphone: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"20\" y1=\"-10\" x2=\"20\" y2=\"10\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// ─── Variable passives ────────────────────────────────────────\n\n// Rheostat — resistor with a diagonal arrow across it\nconst rheostat: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"12\" x2=\"45\" y2=\"-12\" ${BODY}/>`,\n `<polygon points=\"45,-12 40,-9 44,-5\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// Thermistor — resistor with diagonal line (no arrow) + t° label\nconst thermistor_ntc: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"10\" x2=\"45\" y2=\"-10\" ${BODY}/>`,\n `<text x=\"40\" y=\"-14\" class=\"schematex-circuit-pol\">-t°</text>`,\n ].join(\"\"),\n};\n\nconst thermistor_ptc: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"10\" x2=\"45\" y2=\"-10\" ${BODY}/>`,\n `<text x=\"40\" y=\"-14\" class=\"schematex-circuit-pol\">+t°</text>`,\n ].join(\"\"),\n};\n\n// LDR — resistor + two inward light arrows\nconst ldr: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<circle cx=\"25\" cy=\"-2\" r=\"14\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 10,-24 L 18,-16 M 14,-16 L 18,-16 L 18,-20\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 20,-24 L 28,-16 M 24,-16 L 28,-16 L 28,-20\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// Variable capacitor\nconst variable_cap: SymbolDef = {\n length: 24,\n anchors: { start: { x: 0, y: 0 }, end: { x: 24, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-10\" x2=\"10\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n lineWire(14, 0, 24, 0),\n `<line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"-12\" ${BODY}/>`,\n `<polygon points=\"21,-12 15,-10 19,-6\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// Variable inductor\nconst variable_inductor: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 5,0 A 5,5 0 0 1 15,0 A 5,5 0 0 1 25,0 A 5,5 0 0 1 35,0 L 40,0\" fill=\"none\" ${BODY}/>`,\n `<line x1=\"0\" y1=\"10\" x2=\"38\" y2=\"-14\" ${BODY}/>`,\n `<polygon points=\"38,-14 32,-12 36,-8\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// ─── Switches (extra) ────────────────────────────────────────\n\nconst switch_spdt: SymbolDef = {\n length: 50,\n netlistPins: [\"common\", \"nc\", \"no\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n common: { x: 0, y: 0 },\n nc: { x: 50, y: -12 },\n no: { x: 50, y: 12 },\n },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<line x1=\"10\" y1=\"0\" x2=\"40\" y2=\"-12\" ${BODY}/>`,\n `<circle cx=\"42\" cy=\"-12\" r=\"2\" ${FILL}/>`,\n lineWire(42, -12, 50, -12),\n `<circle cx=\"42\" cy=\"12\" r=\"2\" ${FILL}/>`,\n lineWire(42, 12, 50, 12),\n ].join(\"\"),\n};\n\nconst push_nc: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 12, 0),\n lineWire(28, 0, 40, 0),\n `<circle cx=\"12\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"28\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<line x1=\"10\" y1=\"0\" x2=\"30\" y2=\"0\" ${BODY}/>`,\n `<line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"-10\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"26\" y2=\"-10\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Ground variants ────────────────────────────────────────\n\nconst gnd_chassis: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<line x1=\"10\" y1=\"-6\" x2=\"10\" y2=\"6\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"6\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"2\" x2=\"14\" y2=\"6\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"-2\" x2=\"14\" y2=\"2\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst gnd_digital: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<polygon points=\"8,-6 8,6 16,0\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Annotations ─────────────────────────────────────────────\n\nconst test_point: SymbolDef = {\n length: 16,\n anchors: { start: { x: 0, y: 0 }, end: { x: 16, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n `<circle cx=\"10\" cy=\"0\" r=\"4\" fill=\"white\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst no_connect: SymbolDef = {\n length: 0,\n anchors: { start: { x: 0, y: 0 }, end: { x: 0, y: 0 } },\n svg: () =>\n [\n `<line x1=\"-5\" y1=\"-5\" x2=\"5\" y2=\"5\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"-5\" x2=\"-5\" y2=\"5\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst antenna: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 0, -10),\n `<line x1=\"0\" y1=\"-10\" x2=\"-10\" y2=\"-24\" ${BODY}/>`,\n `<line x1=\"0\" y1=\"-10\" x2=\"10\" y2=\"-24\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── ICs / Generic blocks ────────────────────────────────────\n\n/**\n * Generic IC — 8-pin dual-inline rectangular block.\n * `attrs.pins_left` / `attrs.pins_right`: comma-separated pin labels.\n * Total pins determine body height. Left pins are input side (start anchor\n * attaches to pin 1 = top-left).\n */\nfunction icSymbol(\n defaultLeft: string[],\n defaultRight: string[],\n bodyLabel?: string\n): SymbolDef {\n const BODY_W = 80;\n return {\n length: BODY_W,\n netlistPins: [],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: BODY_W, y: 0 },\n },\n svg: (_label?: string, _value?: string, attrs?: Record<string, string>) => {\n const left = (attrs?.pins_left ? attrs.pins_left.split(\",\").map((s) => s.trim()) : defaultLeft);\n const right = (attrs?.pins_right ? attrs.pins_right.split(\",\").map((s) => s.trim()) : defaultRight);\n const n = Math.max(left.length, right.length, 2);\n const pitch = 16;\n const bodyH = pitch * (n + 1);\n const topY = -bodyH / 2;\n const parts: string[] = [];\n parts.push(`<rect x=\"0\" y=\"${topY}\" width=\"${BODY_W}\" height=\"${bodyH}\" fill=\"white\" ${BODY}/>`);\n const labelText = attrs?.ic_label ?? bodyLabel ?? \"\";\n if (labelText) {\n parts.push(`<text x=\"${BODY_W / 2}\" y=\"3\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${labelText}</text>`);\n }\n for (let i = 0; i < left.length; i++) {\n const y = topY + pitch * (i + 1);\n parts.push(`<line x1=\"-8\" y1=\"${y}\" x2=\"0\" y2=\"${y}\" ${WIRE}/>`);\n parts.push(`<text x=\"4\" y=\"${y + 3}\" class=\"schematex-circuit-pol\">${left[i]}</text>`);\n }\n for (let i = 0; i < right.length; i++) {\n const y = topY + pitch * (i + 1);\n parts.push(`<line x1=\"${BODY_W}\" y1=\"${y}\" x2=\"${BODY_W + 8}\" y2=\"${y}\" ${WIRE}/>`);\n parts.push(`<text x=\"${BODY_W - 4}\" y=\"${y + 3}\" text-anchor=\"end\" class=\"schematex-circuit-pol\">${right[i]}</text>`);\n }\n return parts.join(\"\");\n },\n };\n}\n\nconst generic_ic: SymbolDef = icSymbol(\n [\"1\", \"2\", \"3\", \"4\"],\n [\"8\", \"7\", \"6\", \"5\"],\n \"IC\"\n);\n\n/** 555 timer — 8-pin standard pinout */\nconst timer_555: SymbolDef = (() => {\n const left = [\"GND\", \"TRG\", \"OUT\", \"RST\"];\n const right = [\"VCC\", \"DIS\", \"THR\", \"CTL\"];\n const sym = icSymbol(left, right, \"555\");\n // Add custom pin anchors so DSL can reference U1.trg, U1.out, etc.\n const BODY_W = 80;\n const pitch = 16;\n const n = 4;\n const bodyH = pitch * (n + 1);\n const topY = -bodyH / 2;\n const anchors: Record<string, PinAnchor> = {\n start: { x: 0, y: 0 },\n end: { x: BODY_W, y: 0 },\n };\n const leftNames = [\"gnd\", \"trg\", \"out\", \"rst\"];\n const rightNames = [\"vcc\", \"dis\", \"thr\", \"ctl\"];\n for (let i = 0; i < n; i++) {\n const y = topY + pitch * (i + 1);\n anchors[leftNames[i]] = { x: -8, y };\n anchors[rightNames[i]] = { x: BODY_W + 8, y };\n }\n return { ...sym, anchors };\n})();\n\nconst voltage_regulator: SymbolDef = {\n length: 60,\n netlistPins: [\"in\", \"gnd\", \"out\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 60, y: 0 },\n in: { x: 0, y: 0 },\n out: { x: 60, y: 0 },\n gnd: { x: 30, y: 20 },\n },\n svg: (_l?: string, _v?: string, attrs?: Record<string, string>) =>\n [\n lineWire(0, 0, 10, 0),\n `<rect x=\"10\" y=\"-15\" width=\"40\" height=\"30\" fill=\"white\" ${BODY}/>`,\n `<text x=\"30\" y=\"4\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${attrs?.model ?? \"REG\"}</text>`,\n lineWire(50, 0, 60, 0),\n lineWire(30, 15, 30, 20),\n ].join(\"\"),\n};\n\n// ─── Potentiometer ────────────────────────────────────────────\n\nconst potentiometer: SymbolDef = {\n length: 50,\n netlistPins: [\"start\", \"wiper\", \"end\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n wiper: { x: 25, y: -22 },\n },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"25\" y1=\"-22\" x2=\"25\" y2=\"-10\" ${BODY}/>`,\n `<polygon points=\"25,-10 21,-16 29,-16\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// Terminal block / junction box. Pin anchors are dynamic per-instance from\n// `pins=\"...\"`; the static `start`/`end` anchors here are placeholders.\nconst terminal_block: SymbolDef = {\n length: 80,\n netlistPins: [],\n anchors: { start: { x: 0, y: 0 }, end: { x: 80, y: 0 } },\n svg: (label?: string, _value?: string, attrs?: Record<string, string>) => {\n const pinsAttr = attrs?.pins ?? attrs?.terminals ?? \"1,2,3,4\";\n const pins = pinsAttr.split(\",\").map((s) => s.trim()).filter(Boolean);\n const n = Math.max(pins.length, 1);\n const BODY_W = 80;\n const pitch = 18;\n const bodyH = pitch * (n + 1);\n const topY = -bodyH / 2;\n const parts: string[] = [];\n parts.push(\n `<rect x=\"0\" y=\"${topY}\" width=\"${BODY_W}\" height=\"${bodyH}\" rx=\"3\" fill=\"white\" stroke-width=\"2\" ${BODY}/>`\n );\n if (label) {\n parts.push(\n `<text x=\"${BODY_W / 2}\" y=\"${topY + 14}\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${label}</text>`\n );\n }\n for (let i = 0; i < n; i++) {\n const y = topY + pitch * (i + 1) + (label ? 8 : 0);\n parts.push(`<line x1=\"-8\" y1=\"${y}\" x2=\"0\" y2=\"${y}\" ${WIRE}/>`);\n parts.push(`<circle cx=\"6\" cy=\"${y}\" r=\"2\" ${FILL}/>`);\n parts.push(\n `<text x=\"12\" y=\"${y + 3}\" class=\"schematex-circuit-pol\">${pins[i] ?? `T${i + 1}`}</text>`\n );\n }\n return parts.join(\"\");\n },\n};\n\n// ─── Industrial control / Power electrical (IEC 60617) ───────\n\n// Relay coil — rectangle with diagonal line indicating coil winding.\n// Mechanical-link convention: contacts elsewhere sharing the same label\n// (e.g. K1) are conceptually driven by this coil; rendering of the link\n// itself is deferred to a future enhancement.\nconst relay_coil: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<rect x=\"8\" y=\"-10\" width=\"24\" height=\"20\" fill=\"white\" ${BODY}/>`,\n // Diagonal slash inside the box = coil winding indicator\n `<line x1=\"8\" y1=\"-10\" x2=\"32\" y2=\"10\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Relay contact normally-open — same as a switch contact but visually\n// paired (small rect indicator above) to mark \"controlled by a coil\".\nconst relay_no: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"0\" x2=\"30\" y2=\"-10\" ${BODY}/>`,\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"30\" cy=\"0\" r=\"2\" ${FILL}/>`,\n // Small dashed bar above to denote actuator-driven (vs hand switch)\n `<line x1=\"14\" y1=\"-14\" x2=\"26\" y2=\"-14\" stroke-dasharray=\"2,2\" ${BODY}/>`,\n lineWire(30, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Relay contact normally-closed — bar drawn across the contact gap.\nconst relay_nc: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-10\" x2=\"30\" y2=\"-10\" ${BODY}/>`,\n // NC slash: line crosses both contact endpoints (closed by default)\n `<line x1=\"8\" y1=\"2\" x2=\"32\" y2=\"-12\" ${BODY}/>`,\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"30\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<line x1=\"14\" y1=\"-14\" x2=\"26\" y2=\"-14\" stroke-dasharray=\"2,2\" ${BODY}/>`,\n lineWire(30, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Contactor (KM*) — heavy-load switching, drawn with a bolder contact +\n// horizontal dash row indicating the mechanical bridge.\nconst contactor: SymbolDef = {\n length: 44,\n anchors: { start: { x: 0, y: 0 }, end: { x: 44, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n // Two parallel diagonal contacts = double-break (typical of contactors)\n `<line x1=\"10\" y1=\"0\" x2=\"30\" y2=\"-10\" stroke-width=\"2.5\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"2\" x2=\"34\" y2=\"-8\" stroke-width=\"2.5\" ${BODY}/>`,\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"34\" cy=\"0\" r=\"2\" ${FILL}/>`,\n // Solid bar above = electromagnetic-driven actuator\n `<line x1=\"14\" y1=\"-14\" x2=\"30\" y2=\"-14\" stroke-width=\"2\" ${BODY}/>`,\n lineWire(34, 0, 44, 0),\n ].join(\"\"),\n};\n\n// Solenoid valve (EV*) — rectangle with coil winding indicator and a\n// valve-body arrow pointing along the flow path. Simplified IEC 60617-14.\nconst solenoid_valve: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n // Solenoid box on top\n `<rect x=\"8\" y=\"-22\" width=\"14\" height=\"12\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"8\" y1=\"-22\" x2=\"22\" y2=\"-10\" ${BODY}/>`,\n // Valve body (triangle pair = IEC valve symbol)\n `<polygon points=\"22,0 38,-8 38,8\" fill=\"white\" ${BODY}/>`,\n `<polygon points=\"22,0 8,-8 8,8\" fill=\"white\" ${BODY}/>`,\n // Connect solenoid to valve body (actuator line)\n `<line x1=\"15\" y1=\"-10\" x2=\"22\" y2=\"0\" ${BODY}/>`,\n lineWire(38, 0, 50, 0),\n ].join(\"\"),\n};\n\n// Thermal overload relay (F2*) — hashed rectangle with heat-element\n// indicators; the small bent line denotes the bimetal element.\nconst thermal_overload: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<rect x=\"8\" y=\"-12\" width=\"24\" height=\"24\" fill=\"white\" ${BODY}/>`,\n // Bimetal element: bent line inside box\n `<path d=\"M 12,-6 L 16,4 L 20,-6 L 24,4 L 28,-6\" fill=\"none\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Disconnect switch / isolator (Q1*) — switch with a hollow square at\n// the moving contact end to indicate visible-break disconnect device.\nconst disconnect_switch: SymbolDef = {\n length: 48,\n anchors: { start: { x: 0, y: 0 }, end: { x: 48, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"0\" x2=\"34\" y2=\"-12\" ${BODY}/>`,\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n // Hollow square at top of arm = visible-isolation indicator\n `<rect x=\"30\" y=\"-16\" width=\"8\" height=\"8\" fill=\"white\" ${BODY}/>`,\n `<circle cx=\"38\" cy=\"0\" r=\"2\" ${FILL}/>`,\n lineWire(38, 0, 48, 0),\n ].join(\"\"),\n};\n\n// ─── Registry ─────────────────────────────────────────────────\n\nexport const SYMBOLS: Partial<Record<CircuitComponentType, SymbolDef>> = {\n resistor,\n capacitor,\n electrolytic_cap,\n inductor,\n fuse,\n crystal,\n transformer,\n voltage_source,\n current_source,\n ac_source,\n battery,\n ground,\n gnd_signal,\n vcc,\n diode,\n zener,\n schottky,\n led,\n photodiode,\n npn,\n pnp,\n nmos,\n pmos,\n jfet_n,\n jfet_p,\n opamp,\n comparator,\n switch_spst,\n push_no,\n ammeter,\n voltmeter,\n wattmeter,\n motor,\n speaker,\n microphone,\n buzzer,\n potentiometer,\n rheostat,\n thermistor_ntc,\n thermistor_ptc,\n ldr,\n variable_cap,\n variable_inductor,\n switch_spdt,\n push_nc,\n gnd_chassis,\n gnd_digital,\n test_point,\n no_connect,\n antenna,\n generic_ic,\n terminal_block,\n \"555_timer\": timer_555,\n voltage_regulator,\n // Industrial control / power electrical (IEC 60617)\n relay_coil,\n relay_no,\n relay_nc,\n contactor,\n solenoid_valve,\n thermal_overload,\n disconnect_switch,\n // Lamp reuses buzzer slot? No, needs its own entry but our CircuitComponentType\n // doesn't have \"lamp\". We map it via parser alias to \"buzzer\" or add specifically.\n};\n\n// Lamp is not in CircuitComponentType; expose via a side channel so parser can find it.\nexport const EXTRA_SYMBOLS: Record<string, SymbolDef> = {\n lamp,\n};\n\nexport function getSymbol(t: string): SymbolDef | undefined {\n return SYMBOLS[t as CircuitComponentType] ?? EXTRA_SYMBOLS[t];\n}\n\nexport function getNetlistPinOrder(t: string): string[] | undefined {\n const sym = getSymbol(t);\n if (!sym) return undefined;\n if (sym.netlistPins) return [...sym.netlistPins];\n if (sym.anchors.start && sym.anchors.end) return [\"start\", \"end\"];\n return Object.keys(sym.anchors);\n}\n","/**\n * Netlist DSL parser — SPICE-subset text → CircuitAST.\n *\n * Grammar (line-oriented, after stripping `circuit \"name\" netlist` header):\n *\n * R1 vin vout 10k ← 2-terminal passive\n * C1 out 0 100n ← `0` / `gnd` / `GND` → ground net\n * V1 vin 0 5V ← voltage source\n * D1 vout 0 value=\"1N4007\" ← diode\n * Q1 c b e npn ← 3-terminal, explicit model\n * M1 d g s nmos\n * # comment\n *\n * Pin ordering by prefix (SPICE conventions):\n * R/C/L/F(fuse) → [p1, p2]\n * D → [anode, cathode]\n * V/I → [plus, minus]\n * Q → [c, b, e]\n * M/J → [d, g, s]\n * S (switch) → [p1, p2]\n * U (IC) → custom via pins=\"vcc,gnd,out,...\" attr\n *\n * After the pin list, trailing tokens can be:\n * - a bare value (e.g. \"10k\") → value\n * - a bare model name (e.g. \"npn\", \"1N4007\") → componentType override or value\n * - key=value pairs (value=, label=, type=, ...)\n */\nimport type {\n CircuitAST,\n CircuitComponent,\n CircuitComponentType,\n CircuitNet,\n} from \"../../core/types\";\nimport { getNetlistPinOrder } from \"./symbols\";\n\nexport class NetlistParseError extends Error {\n constructor(message: string, public readonly line?: number) {\n super(message);\n this.name = \"NetlistParseError\";\n }\n}\n\n/**\n * Map from SPICE prefix → default type + pin order.\n * Pin names MUST match the anchor names in the corresponding symbol definition\n * (symbols.ts). Passive 2-terminals use `start` / `end`; sources use\n * `plus` / `minus`; BJTs use `c/b/e`; FETs use `d/g/s`.\n */\nconst PREFIX_MAP: Record<string, { type: CircuitComponentType; pins: string[] }> = {\n R: { type: \"resistor\", pins: [\"start\", \"end\"] },\n C: { type: \"capacitor\", pins: [\"start\", \"end\"] },\n L: { type: \"inductor\", pins: [\"start\", \"end\"] },\n D: { type: \"diode\", pins: [\"start\", \"end\"] }, // anode → start, cathode → end\n V: { type: \"voltage_source\", pins: [\"plus\", \"minus\"] },\n I: { type: \"current_source\", pins: [\"plus\", \"minus\"] },\n Q: { type: \"npn\", pins: [\"c\", \"b\", \"e\"] },\n M: { type: \"nmos\", pins: [\"d\", \"g\", \"s\"] },\n J: { type: \"jfet_n\", pins: [\"d\", \"g\", \"s\"] },\n S: { type: \"switch_spst\", pins: [\"start\", \"end\"] },\n F: { type: \"fuse\", pins: [\"start\", \"end\"] },\n B: { type: \"battery\", pins: [\"plus\", \"minus\"] },\n K: { type: \"relay_coil\", pins: [\"start\", \"end\"] },\n U: { type: \"generic_ic\", pins: [] }, // pins declared via pins=\"...\" attr\n X: { type: \"generic_ic\", pins: [] },\n W: { type: \"wire\", pins: [\"start\", \"end\"] }, // explicit wire (non-SPICE convention, common in EE textbooks)\n T: { type: \"terminal_block\", pins: [] }, // pins via pins=\"...\"\n};\n\n/** Aliases for type=xxx — mirror parser.ts aliases. */\nconst TYPE_ALIASES: Record<string, CircuitComponentType> = {\n vsource: \"voltage_source\",\n isource: \"current_source\",\n acsource: \"ac_source\",\n ecap: \"electrolytic_cap\",\n pot: \"potentiometer\",\n gnd: \"ground\",\n ic: \"generic_ic\",\n reg: \"voltage_regulator\",\n timer555: \"555_timer\",\n transistor: \"npn\",\n tb: \"terminal_block\",\n junction_box: \"terminal_block\",\n jbox: \"terminal_block\",\n enclosure: \"terminal_block\",\n};\n\n/** Ground refs: SPICE \"0\", canonical aliases (GND/AGND/DGND/EARTH/PE/VSS/COM), and suffixed variants (GND_REF, AGND_DIG, EARTH1). */\nconst GROUND_REF = /^(0|gnd|ground|earth|pe|agnd|dgnd|gnda|gndd|vss|com)(_\\w+|\\d+)?$/i;\n\nfunction isGroundRef(s: string): boolean {\n return GROUND_REF.test(s);\n}\n\nfunction tokenize(line: string): string[] {\n // Split on whitespace, respecting key=\"quoted values with spaces\"\n const tokens: string[] = [];\n let i = 0;\n while (i < line.length) {\n const ch = line[i];\n if (ch === \" \" || ch === \"\\t\") {\n i++;\n continue;\n }\n if (ch === '\"') {\n const end = line.indexOf('\"', i + 1);\n tokens.push(line.slice(i, end < 0 ? line.length : end + 1));\n i = end < 0 ? line.length : end + 1;\n continue;\n }\n let j = i;\n while (j < line.length && line[j] !== \" \" && line[j] !== \"\\t\") {\n if (line[j] === \"=\" && line[j + 1] === '\"') {\n const end = line.indexOf('\"', j + 2);\n j = end < 0 ? line.length : end + 1;\n break;\n }\n j++;\n }\n tokens.push(line.slice(i, j));\n i = j;\n }\n return tokens;\n}\n\nfunction isKeyEqVal(tok: string): boolean {\n const eq = tok.indexOf(\"=\");\n return eq > 0 && /^[a-zA-Z_][\\w]*$/.test(tok.slice(0, eq));\n}\n\nfunction parseKV(tok: string): [string, string] {\n const eq = tok.indexOf(\"=\");\n const key = tok.slice(0, eq).trim();\n let val = tok.slice(eq + 1).trim();\n if (val.startsWith('\"') && val.endsWith('\"')) val = val.slice(1, -1);\n return [key, val];\n}\n\n/**\n * Parse a netlist body (lines after `circuit \"name\" netlist` header).\n * Returns components + nets + pinMap.\n */\nexport function parseNetlist(\n body: string,\n title?: string\n): CircuitAST {\n const components: CircuitComponent[] = [];\n const netByName = new Map<string, CircuitNet>();\n const pinMap: Record<string, Record<string, string>> = {};\n let autoGnd = 0;\n\n const ensureNet = (name: string): CircuitNet => {\n let n = netByName.get(name);\n if (!n) {\n n = { id: name, anchors: [] };\n netByName.set(name, n);\n }\n return n;\n };\n\n const lines = body.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const raw = lines[lineIdx];\n const stripped = raw.replace(/#.*$/, \"\").trim();\n if (!stripped) continue;\n\n const tokens = tokenize(stripped);\n if (tokens.length < 2) {\n throw new NetlistParseError(\n `Netlist line must have at least ID + one net: \"${stripped}\"`,\n lineIdx + 1\n );\n }\n\n const id = tokens[0];\n if (!/^[a-zA-Z_][\\w]*$/.test(id)) {\n throw new NetlistParseError(`Invalid component id: \"${id}\"`, lineIdx + 1);\n }\n\n // Separate net refs from trailing attrs. Net refs are the positional\n // (non key=value) tokens immediately after the id.\n let cursor = 1;\n const netRefs: string[] = [];\n while (cursor < tokens.length && !isKeyEqVal(tokens[cursor])) {\n netRefs.push(tokens[cursor]);\n cursor++;\n }\n\n // Collect key=value pairs\n const kv: Record<string, string> = {};\n for (; cursor < tokens.length; cursor++) {\n if (!isKeyEqVal(tokens[cursor])) {\n throw new NetlistParseError(\n `Expected key=value after nets, got \"${tokens[cursor]}\"`,\n lineIdx + 1\n );\n }\n const [k, v] = parseKV(tokens[cursor]);\n kv[k] = v;\n }\n\n // Determine component type + pin order\n const prefix = id[0].toUpperCase();\n const defaults = PREFIX_MAP[prefix];\n let cType: CircuitComponentType;\n let pinOrder: string[];\n\n if (kv.type) {\n const t = kv.type.toLowerCase();\n cType = (TYPE_ALIASES[t] ?? t) as CircuitComponentType;\n pinOrder = getNetlistPinOrder(cType) ?? defaults?.pins ?? [\"start\", \"end\"];\n } else if (defaults) {\n cType = defaults.type;\n pinOrder = defaults.pins;\n } else if (isGroundRef(id)) {\n cType = \"ground\";\n pinOrder = [\"start\"];\n } else {\n throw new NetlistParseError(\n `Cannot infer type from id \"${id}\". ` +\n `Either rename to a SPICE-prefix id (R*, C*, L*, D*, V*, I*, Q*, M*, J*, S*, F*, B*, K*, U*, X*, W*, T*) ` +\n `or pass an explicit \\`type=<name>\\` attribute (e.g. \\`${id} ... type=resistor\\`). ` +\n `Schematex circuit covers electrical schematics only — hydraulic/pneumatic prefixes (EV*, BOMBA*, TANK*, etc.) are not supported.`,\n lineIdx + 1\n );\n }\n\n // Net refs consumption depends on type: last net ref may actually be the\n // \"value\" / \"model\" if it doesn't look like a net name.\n // Heuristic: if we have more refs than expected pins+0, last one is value.\n // Model override: Q/D/M can have a model name at the end (e.g. \"Q1 c b e npn\")\n const expectedPins = pinOrder.length;\n let valueFromTail: string | undefined;\n\n if (netRefs.length > expectedPins && expectedPins > 0) {\n // tail contains model/value\n const tail = netRefs.slice(expectedPins);\n netRefs.length = expectedPins;\n // Try to interpret first tail token as type override (model name)\n const first = tail[0].toLowerCase();\n if (TYPE_ALIASES[first]) {\n cType = TYPE_ALIASES[first];\n pinOrder = getNetlistPinOrder(cType) ?? pinOrder;\n } else if (\n first === \"npn\" || first === \"pnp\" ||\n first === \"nmos\" || first === \"pmos\" ||\n first === \"jfet_n\" || first === \"jfet_p\" ||\n first === \"zener\" || first === \"schottky\" || first === \"led\" ||\n first === \"photodiode\"\n ) {\n cType = first as CircuitComponentType;\n pinOrder = getNetlistPinOrder(cType) ?? pinOrder;\n } else {\n // Treat as value\n valueFromTail = tail.join(\" \");\n }\n // If there are more trailing tokens after the model, those are value\n if (tail.length > 1 && !valueFromTail) {\n valueFromTail = tail.slice(1).join(\" \");\n }\n }\n\n // Ground auto-connection: if this is a ground symbol, one net slot is\n // implicit. The parser supports `GND1 gnd_net` as a 1-pin component.\n if (cType === \"ground\" || cType === \"gnd_signal\" || cType === \"gnd_chassis\" || cType === \"gnd_digital\") {\n pinOrder = [\"start\"];\n }\n\n // Terminal block / junction box: pins from pins=\"...\" attr (or t1/t2/…).\n // Always reset pinOrder — prefix-derived defaults (e.g. J→jfet_n) are wrong here.\n if (cType === \"terminal_block\") {\n const pinsAttr = kv.pins ?? kv.terminals;\n const labels = pinsAttr\n ? pinsAttr.split(\",\").map((s) => s.trim()).filter(Boolean)\n : Array.from({ length: Math.max(netRefs.length, 1) }, (_, i) => `t${i + 1}`);\n pinOrder = labels.map((label, idx) =>\n label.toLowerCase().replace(/[^a-z0-9]+/g, \"_\") || `t${idx + 1}`\n );\n }\n\n if (netRefs.length < pinOrder.length) {\n throw new NetlistParseError(\n `Component ${id} (${cType}) expects ${pinOrder.length} nets, got ${netRefs.length}`,\n lineIdx + 1\n );\n }\n\n // Build pinMap entry, binding each pin to a net. Ground net aliases are\n // normalized to a shared canonical name.\n const pins: Record<string, string> = {};\n for (let p = 0; p < pinOrder.length; p++) {\n let net = netRefs[p];\n if (isGroundRef(net)) net = \"GND\";\n pins[pinOrder[p]] = net;\n ensureNet(net).anchors.push(`${id}.${pinOrder[p]}`);\n }\n\n // Auto-synthesize a ground component whenever GND net is referenced so the\n // symbol shows up. We emit one per GND reference pin later, or a single\n // floor — keep it simple: one ground symbol attached to the GND net.\n // (Done below, after the main component scan.)\n\n pinMap[id] = pins;\n\n const comp: CircuitComponent = {\n id,\n componentType: cType,\n direction: \"right\",\n label: kv.label ?? id,\n value: kv.value ?? valueFromTail,\n attrs: {},\n };\n // Propagate extra key=value attrs (skip well-known keys)\n for (const [k, v] of Object.entries(kv)) {\n if (k === \"label\" || k === \"value\" || k === \"type\") continue;\n comp.attrs![k] = v;\n }\n components.push(comp);\n }\n\n // Auto-emit ground symbols for the GND net if any component pin references it\n // but no explicit ground component exists.\n if (netByName.has(\"GND\")) {\n const hasGroundSym = components.some((c) =>\n c.componentType === \"ground\" ||\n c.componentType === \"gnd_signal\" ||\n c.componentType === \"gnd_chassis\" ||\n c.componentType === \"gnd_digital\"\n );\n if (!hasGroundSym) {\n const gId = `_GND${autoGnd++}`;\n components.push({\n id: gId,\n componentType: \"ground\",\n direction: \"down\",\n label: undefined,\n value: undefined,\n attrs: { auto: \"true\" },\n });\n pinMap[gId] = { start: \"GND\" };\n ensureNet(\"GND\").anchors.push(`${gId}.start`);\n }\n }\n\n const nets: CircuitNet[] = Array.from(netByName.values());\n\n return {\n type: \"circuit\",\n title,\n components,\n nets,\n pinMap,\n mode: \"netlist\",\n };\n}\n","import type {\n CircuitAST,\n CircuitComponent,\n CircuitComponentType,\n CircuitDirection,\n CircuitNet,\n} from \"../../core/types\";\nimport { parseNetlist } from \"./netlist\";\nimport { matchQuotedTitle } from \"../../core/quotes\";\n\nexport class CircuitParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CircuitParseError\";\n }\n}\n\nconst COMPONENT_TYPES = new Set<CircuitComponentType>([\n \"resistor\", \"potentiometer\", \"rheostat\", \"thermistor_ntc\", \"thermistor_ptc\",\n \"ldr\", \"varistor\", \"fuse\", \"fuse_slow\",\n \"capacitor\", \"electrolytic_cap\", \"variable_cap\",\n \"inductor\", \"inductor_iron\", \"inductor_ferrite\", \"variable_inductor\",\n \"ferrite_bead\", \"crystal\", \"transformer\",\n \"diode\", \"zener\", \"schottky\", \"led\", \"photodiode\", \"varactor\", \"tvs_diode\", \"bridge_rectifier\",\n \"npn\", \"pnp\", \"darlington_npn\", \"darlington_pnp\",\n \"nmos\", \"pmos\", \"nmos_depletion\", \"jfet_n\", \"jfet_p\",\n \"igbt\", \"scr\", \"triac\", \"diac\",\n \"phototransistor\", \"optocoupler\",\n \"opamp\", \"comparator\", \"schmitt_buffer\", \"tri_state_buffer\", \"instrumentation_amp\",\n \"generic_ic\", \"voltage_regulator\", \"dc_dc_converter\", \"555_timer\",\n \"voltage_source\", \"current_source\", \"ac_source\", \"battery\", \"vcc\",\n \"ground\", \"gnd_signal\", \"gnd_chassis\", \"gnd_digital\",\n \"switch_spst\", \"switch_spdt\", \"switch_dpdt\", \"push_no\", \"push_nc\",\n \"relay_coil\", \"relay_no\", \"relay_nc\",\n \"contactor\", \"solenoid_valve\", \"thermal_overload\", \"disconnect_switch\",\n \"motor\", \"speaker\", \"microphone\", \"buzzer\",\n \"ammeter\", \"voltmeter\", \"wattmeter\", \"oscilloscope\",\n \"wire\", \"dot\", \"label\", \"port\", \"test_point\", \"no_connect\", \"antenna\",\n]);\n\n// Aliases for convenience — DSL uses short names\nconst ALIASES: Record<string, CircuitComponentType> = {\n vsource: \"voltage_source\",\n isource: \"current_source\",\n acsource: \"ac_source\",\n ecap: \"electrolytic_cap\",\n pot: \"potentiometer\",\n xtal: \"crystal\",\n xfmr: \"transformer\",\n transistor: \"npn\",\n bjt_npn: \"npn\",\n bjt_pnp: \"pnp\",\n mosfet_n: \"nmos\",\n mosfet_p: \"pmos\",\n gnd: \"ground\",\n ic: \"generic_ic\",\n reg: \"voltage_regulator\",\n timer555: \"555_timer\",\n therm: \"thermistor_ntc\",\n ntc: \"thermistor_ntc\",\n ptc: \"thermistor_ptc\",\n ths: \"thermistor_ntc\",\n // Industrial control aliases (IEC letter codes)\n coil: \"relay_coil\",\n relay: \"relay_coil\",\n km: \"contactor\",\n solenoid: \"solenoid_valve\",\n ev: \"solenoid_valve\",\n overload: \"thermal_overload\",\n thermal: \"thermal_overload\",\n disconnect: \"disconnect_switch\",\n isolator: \"disconnect_switch\",\n};\n\n/** Component types that exist as symbols but aren't listed in CircuitComponentType. */\nconst EXTRA_TYPES = new Set<string>([\"lamp\"]);\n\nfunction normalizeType(raw: string): CircuitComponentType | null {\n const lower = raw.toLowerCase();\n if (ALIASES[lower]) return ALIASES[lower];\n if (COMPONENT_TYPES.has(lower as CircuitComponentType)) {\n return lower as CircuitComponentType;\n }\n if (EXTRA_TYPES.has(lower)) {\n // Cast through unknown — symbol lookup handles string; type system happy.\n return lower as unknown as CircuitComponentType;\n }\n return null;\n}\n\nconst DIRECTIONS = new Set([\"right\", \"left\", \"up\", \"down\"]);\n\nfunction parseAttrs(rest: string): { direction?: CircuitDirection; attrs: Record<string, string>; label?: string; value?: string; at?: string; length?: string } {\n const out: {\n direction?: CircuitDirection;\n attrs: Record<string, string>;\n label?: string;\n value?: string;\n at?: string;\n length?: string;\n } = { attrs: {} };\n\n // Tokenize respecting quoted strings and key=value pairs\n const tokens: string[] = [];\n let i = 0;\n while (i < rest.length) {\n const ch = rest[i];\n if (ch === \" \" || ch === \"\\t\") {\n i++;\n continue;\n }\n // quoted\n if (ch === '\"') {\n const end = rest.indexOf('\"', i + 1);\n const tok = rest.slice(i, end < 0 ? rest.length : end + 1);\n tokens.push(tok);\n i = end < 0 ? rest.length : end + 1;\n continue;\n }\n // key=value possibly with quoted value\n let j = i;\n while (j < rest.length && rest[j] !== \" \" && rest[j] !== \"\\t\") {\n if (rest[j] === \"=\" && rest[j + 1] === '\"') {\n const end = rest.indexOf('\"', j + 2);\n j = end < 0 ? rest.length : end + 1;\n break;\n }\n j++;\n }\n tokens.push(rest.slice(i, j));\n i = j;\n }\n\n for (const tok of tokens) {\n if (!tok) continue;\n if (DIRECTIONS.has(tok.toLowerCase())) {\n out.direction = tok.toLowerCase() as CircuitDirection;\n continue;\n }\n const eq = tok.indexOf(\"=\");\n if (eq > 0) {\n const key = tok.slice(0, eq).trim();\n let val = tok.slice(eq + 1).trim();\n if (val.startsWith('\"') && val.endsWith('\"')) {\n val = val.slice(1, -1);\n }\n if (key === \"label\") out.label = val;\n else if (key === \"value\") out.value = val;\n else if (key === \"at\") out.at = val;\n else if (key === \"length\") out.length = val;\n else out.attrs[key] = val;\n continue;\n }\n // bare attribute flags\n out.attrs[tok] = \"true\";\n }\n return out;\n}\n\n/**\n * Top-level circuit parser. Detects two DSL modes:\n *\n * 1. Positional (Schemdraw-style): header `circuit \"name\"`, body uses\n * direction chains, `wire`, `at:`, bare component types with direction.\n *\n * 2. Netlist (SPICE-style): header `circuit \"name\" netlist`, body\n * uses `<ID> <net1> <net2> [value]` lines. Auto-layout engine computes\n * positions.\n */\nexport function parseCircuit(text: string): CircuitAST {\n const rawLines = text.split(\"\\n\");\n const firstMeaningful = rawLines\n .map((l) => l.replace(/#.*$/, \"\").trim())\n .find((l) => l.length > 0) ?? \"\";\n\n if (/^circuit\\b.*\\bnetlist\\s*$/i.test(firstMeaningful)) {\n const netlistTitle = matchQuotedTitle(firstMeaningful);\n let headerIdx = -1;\n for (let i = 0; i < rawLines.length; i++) {\n const s = rawLines[i].replace(/#.*$/, \"\").trim();\n if (s.length > 0) {\n headerIdx = i;\n break;\n }\n }\n const body = rawLines.slice(headerIdx + 1).join(\"\\n\");\n return parseNetlist(body, netlistTitle);\n }\n\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n let title: string | undefined;\n const components: CircuitComponent[] = [];\n const nets: CircuitNet[] = [];\n const netByName = new Map<string, CircuitNet>();\n let autoId = 0;\n let pendingAt: string | undefined;\n\n const mkId = (prefix: string) => `${prefix}_${autoId++}`;\n\n for (const rawLine of lines) {\n const stripped = rawLine.replace(/#.*$/, \"\").trim();\n if (!stripped) continue;\n\n // header\n if (/^circuit\\b/i.test(stripped)) {\n const t = matchQuotedTitle(stripped);\n if (t !== undefined) title = t;\n continue;\n }\n\n // at: <anchor>\n const atMatch = stripped.match(/^at:\\s*(.+)$/i);\n if (atMatch) {\n pendingAt = atMatch[1].trim();\n continue;\n }\n\n // net NAME\n const netDecl = stripped.match(/^net\\s+([a-zA-Z_][\\w]*)\\s*$/i);\n if (netDecl) {\n const name = netDecl[1];\n if (!netByName.has(name)) {\n const n: CircuitNet = { id: name, anchors: [] };\n netByName.set(name, n);\n nets.push(n);\n }\n continue;\n }\n\n // net NAME: dot (declare net AND place a dot+remember anchor)\n const netDotMatch = stripped.match(/^net\\s+([a-zA-Z_][\\w]*)\\s*:\\s*dot\\s*$/i);\n if (netDotMatch) {\n const name = netDotMatch[1];\n let n = netByName.get(name);\n if (!n) {\n n = { id: name, anchors: [] };\n netByName.set(name, n);\n nets.push(n);\n }\n const id = mkId(\"dot\");\n components.push({\n id,\n componentType: \"dot\",\n direction: \"right\",\n at: pendingAt,\n attrs: { net: name },\n });\n n.anchors.push(`${id}.end`);\n pendingAt = `${id}.end`;\n continue;\n }\n\n // label \"text\" direction?\n const labelMatch = stripped.match(/^label\\s+\"([^\"]*)\"(?:\\s+(right|left|up|down))?\\s*$/i);\n if (labelMatch) {\n const id = mkId(\"lbl\");\n components.push({\n id,\n componentType: \"label\",\n direction: (labelMatch[2]?.toLowerCase() as CircuitDirection) ?? \"right\",\n at: pendingAt,\n label: labelMatch[1],\n });\n // labels don't advance cursor\n continue;\n }\n\n // wire <direction> [N px]\n const wireMatch = stripped.match(/^wire(?:\\s+(right|left|up|down))?(?:\\s+(\\d+)(?:px)?)?\\s*$/i);\n if (wireMatch) {\n const id = mkId(\"w\");\n components.push({\n id,\n componentType: \"wire\",\n direction: (wireMatch[1]?.toLowerCase() as CircuitDirection) ?? \"right\",\n at: pendingAt,\n attrs: wireMatch[2] ? { length: wireMatch[2] } : {},\n });\n pendingAt = `${id}.end`;\n continue;\n }\n\n // bare type (dot, ground, etc.) with optional direction + attrs\n const bareMatch = stripped.match(/^([a-zA-Z_][\\w]*)(\\s+.*)?$/);\n const colonMatch = stripped.match(/^([a-zA-Z_][\\w]*)\\s*:\\s*([a-zA-Z_][\\w]*)(\\s+.*)?$/);\n\n if (colonMatch) {\n const id = colonMatch[1];\n const typeStr = colonMatch[2];\n const norm = normalizeType(typeStr);\n if (!norm) {\n throw new CircuitParseError(`Unknown component type: ${typeStr}`);\n }\n const rest = colonMatch[3] ?? \"\";\n const parsed = parseAttrs(rest);\n const comp: CircuitComponent = {\n id,\n componentType: norm,\n direction: parsed.direction ?? \"right\",\n at: parsed.at ?? pendingAt,\n label: parsed.label,\n value: parsed.value,\n attrs: parsed.attrs,\n };\n if (parsed.length) {\n comp.attrs = { ...comp.attrs, length: parsed.length };\n }\n components.push(comp);\n pendingAt = `${id}.end`;\n continue;\n }\n\n if (bareMatch) {\n const typeStr = bareMatch[1];\n const norm = normalizeType(typeStr);\n if (!norm) {\n // ignore unknown bare tokens rather than throwing — keeps DSL forgiving\n continue;\n }\n const rest = bareMatch[2] ?? \"\";\n const parsed = parseAttrs(rest);\n const id = mkId(norm);\n const comp: CircuitComponent = {\n id,\n componentType: norm,\n direction: parsed.direction ?? \"right\",\n at: parsed.at ?? pendingAt,\n label: parsed.label,\n value: parsed.value,\n attrs: parsed.attrs,\n };\n components.push(comp);\n pendingAt = `${id}.end`;\n continue;\n }\n }\n\n return {\n type: \"circuit\",\n title,\n components,\n nets,\n mode: \"positional\",\n };\n}\n","import type {\n CircuitAST,\n CircuitComponent,\n CircuitDirection,\n} from \"../../core/types\";\nimport { getSymbol, type PinAnchor } from \"./symbols\";\n\nexport interface LaidOutComponent {\n component: CircuitComponent;\n /** World (SVG) coordinates of the component's origin (before rotation). */\n x: number;\n y: number;\n /** Rotation applied to the symbol, in degrees. */\n rotation: number;\n /** Length along direction — 0 for zero-length items (dots, labels). */\n length: number;\n /** Resolved anchors in world coordinates. */\n anchors: Record<string, PinAnchor>;\n}\n\nexport interface CircuitLayoutResult {\n width: number;\n height: number;\n offsetX: number;\n offsetY: number;\n items: LaidOutComponent[];\n}\n\nfunction rotationDeg(d: CircuitDirection): number {\n return d === \"right\" ? 0 : d === \"down\" ? 90 : d === \"left\" ? 180 : 270;\n}\n\nfunction rotatePoint(p: PinAnchor, angleDeg: number): PinAnchor {\n const r = (angleDeg * Math.PI) / 180;\n const c = Math.cos(r);\n const s = Math.sin(r);\n return { x: p.x * c - p.y * s, y: p.x * s + p.y * c };\n}\n\nfunction resolveAnchorRef(\n ref: string,\n byId: Map<string, LaidOutComponent>,\n nets: Map<string, PinAnchor>\n): PinAnchor | undefined {\n if (ref === \"origin\") return { x: 0, y: 0 };\n if (nets.has(ref)) return nets.get(ref);\n const dot = ref.indexOf(\".\");\n if (dot < 0) {\n // bare id — treat as .end\n const c = byId.get(ref);\n if (c) return c.anchors.end ?? c.anchors.center ?? { x: c.x, y: c.y };\n return undefined;\n }\n const id = ref.slice(0, dot);\n const pin = ref.slice(dot + 1);\n const c = byId.get(id);\n if (!c) return undefined;\n return c.anchors[pin];\n}\n\nexport function layoutCircuit(ast: CircuitAST): CircuitLayoutResult {\n const items: LaidOutComponent[] = [];\n const byId = new Map<string, LaidOutComponent>();\n const nets = new Map<string, PinAnchor>();\n let cursor: PinAnchor = { x: 0, y: 0 };\n\n for (const comp of ast.components) {\n // Determine starting point\n let startPt: PinAnchor = cursor;\n if (comp.at) {\n const resolved = resolveAnchorRef(comp.at, byId, nets);\n if (resolved) startPt = resolved;\n }\n\n const sym = getSymbol(comp.componentType);\n const rot = rotationDeg(comp.direction);\n\n if (comp.componentType === \"wire\") {\n const len = parseInt(comp.attrs?.length ?? \"20\", 10);\n const endOffset = rotatePoint({ x: len, y: 0 }, rot);\n const end = { x: startPt.x + endOffset.x, y: startPt.y + endOffset.y };\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: len,\n anchors: { start: startPt, end },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n cursor = end;\n continue;\n }\n\n if (comp.componentType === \"dot\") {\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: 0,\n length: 0,\n anchors: { start: startPt, end: startPt, center: startPt },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n if (comp.attrs?.net) nets.set(comp.attrs.net, startPt);\n cursor = startPt;\n continue;\n }\n\n if (comp.componentType === \"label\") {\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: 0,\n anchors: { start: startPt, end: startPt },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n // don't advance cursor\n continue;\n }\n\n if (!sym) {\n // Unknown symbol — render as placeholder square, advance 30\n const endOffset = rotatePoint({ x: 30, y: 0 }, rot);\n const end = { x: startPt.x + endOffset.x, y: startPt.y + endOffset.y };\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: 30,\n anchors: { start: startPt, end },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n cursor = end;\n continue;\n }\n\n // Resolve all anchors to world coords by rotating + translating\n const worldAnchors: Record<string, PinAnchor> = {};\n for (const [name, pt] of Object.entries(sym.anchors)) {\n const rp = rotatePoint(pt, rot);\n worldAnchors[name] = { x: startPt.x + rp.x, y: startPt.y + rp.y };\n }\n\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: sym.length,\n anchors: worldAnchors,\n };\n items.push(laid);\n byId.set(comp.id, laid);\n cursor = worldAnchors.end ?? startPt;\n }\n\n // Compute bounding box with margin for labels/text\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (const it of items) {\n for (const a of Object.values(it.anchors)) {\n if (a.x < minX) minX = a.x;\n if (a.y < minY) minY = a.y;\n if (a.x > maxX) maxX = a.x;\n if (a.y > maxY) maxY = a.y;\n }\n }\n if (!isFinite(minX)) {\n minX = 0;\n minY = 0;\n maxX = 100;\n maxY = 100;\n }\n // Pad for symbol radii + text overflow\n const pad = 40;\n minX -= pad;\n minY -= pad;\n maxX += pad;\n maxY += pad;\n const width = maxX - minX;\n const height = maxY - minY;\n\n return {\n width,\n height,\n offsetX: -minX,\n offsetY: -minY,\n items,\n };\n}\n","/**\n * Auto-layout engine for netlist-mode circuits.\n *\n * Strategy (lightweight Sugiyama-ish, no external deps):\n *\n * 1. Classify components by role:\n * - POWER_TOP: voltage/current sources, battery (supply rails → top)\n * - GROUND: ground symbols (→ bottom)\n * - MIDDLE: everything else\n *\n * 2. Build adjacency between non-rail components via shared nets (power/\n * ground nets ignored for this purpose — they'd make everything adjacent).\n *\n * 3. Rank (vertical Y layer) via BFS from power sources:\n * rank 0 = power, rank K = ground, middle at 1..K-1 by topo distance.\n *\n * 4. Within each rank, order components by declaration order (stable).\n * Orientation per component is chosen based on which pins connect up vs\n * down vs sideways — defaults to horizontal.\n *\n * 5. Orthogonal routing: each net is drawn as a polyline via HVH (horizontal\n * → vertical → horizontal) from each member pin to a common spine.\n * - 2-pin nets: direct HVH between the two pin coords.\n * - 3+ pin nets: find median Y, draw horizontal spine, each pin drops\n * V to spine, then H to spine center. Junctions get dots.\n *\n * 6. Power rail and ground rail: drawn as full-width horizontal lines at the\n * top/bottom edges of the component region.\n *\n * This is deliberately simple. Output is readable but not publication-grade.\n * Quality can improve by adding rank constraints, barycenter ordering, and a\n * proper grid A* router — but that's future work.\n */\nimport type {\n CircuitAST,\n CircuitComponent,\n} from \"../../core/types\";\nimport { getSymbol, type PinAnchor } from \"./symbols\";\nimport type {\n LaidOutComponent,\n CircuitLayoutResult,\n} from \"./layout\";\n\nconst COL_W = 120; // horizontal spacing per component\nconst ROW_H = 100; // vertical spacing per rank\nconst RAIL_PAD = 60; // distance from top/bottom rail to component row\nconst LEFT_MARGIN = 80;\nconst TOP_MARGIN = 60;\n\nexport interface RoutedWire {\n netId: string;\n /** Polyline points in world coords. */\n points: PinAnchor[];\n /** Junction dot positions (3+ pin nets have these). */\n junctions?: PinAnchor[];\n}\n\nexport interface AutoLayoutResult extends CircuitLayoutResult {\n routes: RoutedWire[];\n}\n\nfunction isPowerSource(c: CircuitComponent): boolean {\n return (\n c.componentType === \"voltage_source\" ||\n c.componentType === \"current_source\" ||\n c.componentType === \"ac_source\" ||\n c.componentType === \"battery\" ||\n c.componentType === \"vcc\"\n );\n}\n\nfunction isGround(c: CircuitComponent): boolean {\n return (\n c.componentType === \"ground\" ||\n c.componentType === \"gnd_signal\" ||\n c.componentType === \"gnd_chassis\" ||\n c.componentType === \"gnd_digital\"\n );\n}\n\nfunction rotatePt(p: PinAnchor, angleDeg: number): PinAnchor {\n const r = (angleDeg * Math.PI) / 180;\n const c = Math.cos(r);\n const s = Math.sin(r);\n return { x: p.x * c - p.y * s, y: p.x * s + p.y * c };\n}\n\nfunction rotationOf(dir: \"right\" | \"left\" | \"up\" | \"down\"): number {\n return dir === \"right\" ? 0 : dir === \"down\" ? 90 : dir === \"left\" ? 180 : 270;\n}\n\n/**\n * Choose default direction per role so pin anchors aim the right way.\n *\n * Convention:\n * - Power source gets direction \"up\" so its `end` (= plus) rotates to land\n * ABOVE origin — naturally connects to a supply rail at the top.\n * Its `start` (= minus) stays at origin, close to the GND rail.\n * i.e. rotation 270° takes (40,0)→(0,−40) — plus sits 40px above origin.\n * - Ground keeps direction \"up\" (the stem points down from the origin which\n * sits on the rail).\n * - Middle components stay horizontal.\n */\nfunction defaultDirection(c: CircuitComponent): \"right\" | \"left\" | \"up\" | \"down\" {\n if (isPowerSource(c)) return \"up\";\n // Ground symbol is drawn with stem pointing rightward in its native\n // orientation; rotating by \"down\" (90°) makes the stem point down and rake\n // lines appear below — the conventional ground-hanging-below layout.\n if (isGround(c)) return \"down\";\n return \"right\";\n}\n\n/**\n * Compute bounding box for a laid-out component including its rotated anchors\n * and a margin for the symbol body.\n */\nfunction extendBBox(\n bbox: { minX: number; minY: number; maxX: number; maxY: number },\n pt: PinAnchor\n): void {\n if (pt.x < bbox.minX) bbox.minX = pt.x;\n if (pt.y < bbox.minY) bbox.minY = pt.y;\n if (pt.x > bbox.maxX) bbox.maxX = pt.x;\n if (pt.y > bbox.maxY) bbox.maxY = pt.y;\n}\n\nexport function layoutCircuitNetlist(ast: CircuitAST): AutoLayoutResult {\n const pinMap = ast.pinMap ?? {};\n\n // ── Step 1: classify ───────────────────────────────────────\n // MVP ranking: power sources + regular components share the MIDDLE rank\n // (sources on the left, others to their right). Grounds live on a dedicated\n // bottom rank so a full-width GND rail can be drawn underneath. This mimics\n // the standard textbook convention where a vertical source on the left\n // feeds a horizontal chain of components into a ground at the bottom.\n const powerComps: CircuitComponent[] = [];\n const groundComps: CircuitComponent[] = [];\n const middleComps: CircuitComponent[] = [];\n\n for (const c of ast.components) {\n if (isPowerSource(c)) powerComps.push(c);\n else if (isGround(c)) groundComps.push(c);\n else middleComps.push(c);\n }\n\n const ranks: CircuitComponent[][] = [];\n const mainRank = [...powerComps, ...middleComps];\n if (mainRank.length) ranks.push(mainRank);\n if (groundComps.length) ranks.push(groundComps);\n\n // If classification produced nothing, fall through with one row\n if (ranks.length === 0) ranks.push(ast.components);\n\n // ── Step 4: place components on grid ───────────────────────\n const placed = new Map<string, LaidOutComponent>();\n const items: LaidOutComponent[] = [];\n\n let maxCols = 0;\n for (const rank of ranks) maxCols = Math.max(maxCols, rank.length);\n\n for (let r = 0; r < ranks.length; r++) {\n const rank = ranks[r];\n const rowY = TOP_MARGIN + r * (ROW_H + RAIL_PAD);\n // Center this rank under the widest rank\n const startX = LEFT_MARGIN + ((maxCols - rank.length) * COL_W) / 2;\n\n for (let i = 0; i < rank.length; i++) {\n const comp = rank[i];\n // For netlist mode, override direction based on role: power sources\n // face down (plus at bottom, connecting to the middle rank), ground\n // symbols face up (stem pointing down).\n const direction = defaultDirection(comp);\n comp.direction = direction;\n const rot = rotationOf(direction);\n\n const sym = getSymbol(comp.componentType);\n const x = startX + i * COL_W;\n const y = rowY;\n\n const worldAnchors: Record<string, PinAnchor> = {};\n if (sym) {\n for (const [name, pt] of Object.entries(sym.anchors)) {\n const rp = rotatePt(pt, rot);\n worldAnchors[name] = { x: x + rp.x, y: y + rp.y };\n }\n } else {\n worldAnchors.start = { x, y };\n worldAnchors.end = { x: x + 30, y };\n }\n\n const laid: LaidOutComponent = {\n component: comp,\n x,\n y,\n rotation: rot,\n length: sym?.length ?? 30,\n anchors: worldAnchors,\n };\n items.push(laid);\n placed.set(comp.id, laid);\n }\n }\n\n // ── Step 5: build net → world pin coords ───────────────────\n type NetPin = { compId: string; pinName: string; pt: PinAnchor };\n const netPins = new Map<string, NetPin[]>();\n\n for (const comp of ast.components) {\n const pins = pinMap[comp.id];\n if (!pins) continue;\n const laid = placed.get(comp.id);\n if (!laid) continue;\n for (const [pinName, netId] of Object.entries(pins)) {\n const pt = laid.anchors[pinName];\n if (!pt) continue;\n if (!netPins.has(netId)) netPins.set(netId, []);\n netPins.get(netId)!.push({ compId: comp.id, pinName, pt });\n }\n }\n\n // ── Step 6: route each net orthogonally ───────────────────\n const routes: RoutedWire[] = [];\n const bbox = {\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity,\n };\n for (const it of items) {\n for (const a of Object.values(it.anchors)) extendBBox(bbox, a);\n }\n // default if no components\n if (!isFinite(bbox.minX)) {\n bbox.minX = 0;\n bbox.minY = 0;\n bbox.maxX = 200;\n bbox.maxY = 200;\n }\n\n for (const [netId, pins] of netPins) {\n if (pins.length < 2) continue; // dangling pin, nothing to route\n\n if (netId === \"GND\") {\n // Ground rail: horizontal line near bottom. All pins connect via V-line.\n const railY = bbox.maxY + 30;\n const minX = Math.min(...pins.map((p) => p.pt.x));\n const maxX = Math.max(...pins.map((p) => p.pt.x));\n // the rail itself\n if (pins.length > 1) {\n routes.push({\n netId,\n points: [\n { x: minX, y: railY },\n { x: maxX, y: railY },\n ],\n });\n }\n // each pin drops to rail\n for (const p of pins) {\n routes.push({\n netId: `${netId}.${p.compId}`,\n points: [\n p.pt,\n { x: p.pt.x, y: railY },\n ],\n });\n }\n bbox.maxY = Math.max(bbox.maxY, railY);\n continue;\n }\n\n // Power-like nets: only route as a top rail when at least one pin belongs\n // to a power source (V/I/B/AC). Otherwise the net is a regular signal net\n // between middle-rank components and should use HVH routing below.\n const touchesPowerSource = pins.some((p) => {\n const comp = ast.components.find((c) => c.id === p.compId);\n return !!comp && isPowerSource(comp);\n });\n if (touchesPowerSource && pins.length > 1) {\n const railY = bbox.minY - 30;\n const minX = Math.min(...pins.map((p) => p.pt.x));\n const maxX = Math.max(...pins.map((p) => p.pt.x));\n routes.push({\n netId,\n points: [\n { x: minX, y: railY },\n { x: maxX, y: railY },\n ],\n });\n for (const p of pins) {\n routes.push({\n netId: `${netId}.${p.compId}`,\n points: [p.pt, { x: p.pt.x, y: railY }],\n });\n }\n bbox.minY = Math.min(bbox.minY, railY);\n continue;\n }\n\n if (pins.length === 2) {\n // Single-L route: exit source vertically, then horizontally to target.\n // This avoids the midpoint of HVH landing on an intermediate component's\n // pin x-coordinate (visible as a false T-junction).\n const [a, b] = pins;\n const points: PinAnchor[] =\n Math.abs(a.pt.y - b.pt.y) < 0.5\n ? [a.pt, b.pt] // already horizontal\n : Math.abs(a.pt.x - b.pt.x) < 0.5\n ? [a.pt, b.pt] // already vertical\n : [a.pt, { x: a.pt.x, y: b.pt.y }, b.pt];\n routes.push({ netId, points });\n } else {\n // 3+ pin net — spine at median Y\n const ys = pins.map((p) => p.pt.y).sort((x, y) => x - y);\n const spineY = ys[Math.floor(ys.length / 2)];\n const xs = pins.map((p) => p.pt.x).sort((x, y) => x - y);\n const spineLeft = xs[0];\n const spineRight = xs[xs.length - 1];\n // spine\n routes.push({\n netId,\n points: [\n { x: spineLeft, y: spineY },\n { x: spineRight, y: spineY },\n ],\n });\n const junctions: PinAnchor[] = [];\n for (const p of pins) {\n if (Math.abs(p.pt.y - spineY) < 0.5) {\n // already on spine\n if (p.pt.x > spineLeft && p.pt.x < spineRight) {\n junctions.push(p.pt);\n }\n continue;\n }\n routes.push({\n netId: `${netId}.${p.compId}`,\n points: [p.pt, { x: p.pt.x, y: spineY }],\n });\n if (p.pt.x > spineLeft && p.pt.x < spineRight) {\n junctions.push({ x: p.pt.x, y: spineY });\n }\n }\n if (junctions.length > 0) {\n // Attach junctions to the last spine route (share same netId entry).\n routes[routes.length - 1 - pins.filter((p) =>\n Math.abs(p.pt.y - spineY) >= 0.5\n ).length].junctions = junctions;\n }\n }\n }\n\n // ── Compute final bbox including routes ───────────────────\n for (const r of routes) {\n for (const p of r.points) extendBBox(bbox, p);\n }\n const pad = 40;\n const minX = bbox.minX - pad;\n const minY = bbox.minY - pad;\n const maxX = bbox.maxX + pad;\n const maxY = bbox.maxY + pad;\n\n return {\n width: maxX - minX,\n height: maxY - minY,\n offsetX: -minX,\n offsetY: -minY,\n items,\n routes,\n };\n}\n","import type { CircuitAST, RenderConfig } from \"../../core/types\";\nimport { layoutCircuit, type LaidOutComponent, type CircuitLayoutResult } from \"./layout\";\nimport { layoutCircuitNetlist, type RoutedWire } from \"./autolayout\";\nimport { getSymbol } from \"./symbols\";\nimport {\n svgRoot,\n defs,\n group,\n el,\n circle,\n text,\n title as titleEl,\n desc,\n escapeXml,\n} from \"../../core/svg\";\nimport { resolveIndustrialTheme } from \"../../core/theme\";\n\nfunction renderItem(it: LaidOutComponent, offX: number, offY: number): string {\n const comp = it.component;\n const tx = it.x + offX;\n const ty = it.y + offY;\n\n if (comp.componentType === \"wire\") {\n const x2 = (it.anchors.end.x) + offX;\n const y2 = (it.anchors.end.y) + offY;\n return `<line x1=\"${tx}\" y1=\"${ty}\" x2=\"${x2}\" y2=\"${y2}\" class=\"schematex-circuit-wire\"/>`;\n }\n\n if (comp.componentType === \"dot\") {\n return circle({\n cx: tx,\n cy: ty,\n r: 3.5,\n class: \"schematex-circuit-dot\",\n \"data-id\": comp.id,\n });\n }\n\n if (comp.componentType === \"label\") {\n const dir = comp.direction;\n const anchor =\n dir === \"left\" ? \"end\" : dir === \"right\" ? \"start\" : \"middle\";\n const dx = dir === \"right\" ? 6 : dir === \"left\" ? -6 : 0;\n const dy = dir === \"down\" ? 14 : dir === \"up\" ? -6 : 4;\n return text(\n {\n x: tx + dx,\n y: ty + dy,\n class: \"schematex-circuit-net-label\",\n \"text-anchor\": anchor,\n },\n comp.label ?? \"\"\n );\n }\n\n const sym = getSymbol(comp.componentType);\n if (!sym) {\n return `<rect x=\"${tx - 10}\" y=\"${ty - 10}\" width=\"20\" height=\"20\" fill=\"none\" class=\"schematex-circuit-err\" stroke-dasharray=\"3,2\"/><text x=\"${tx}\" y=\"${ty + 3}\" text-anchor=\"middle\" font-size=\"9\" class=\"schematex-circuit-err\">?${escapeXml(comp.componentType)}</text>`;\n }\n\n const body = sym.svg(comp.label, comp.value, comp.attrs);\n const transform = `translate(${tx}, ${ty}) rotate(${it.rotation})`;\n\n // Label + value text: placed in non-rotated space using unrotated anchor endpoints.\n const labels: string[] = [];\n if (comp.label || comp.value) {\n // Compute a perpendicular offset in world coords (perpendicular to the\n // component direction). For rightward: \"above\" (y negative). For\n // down/up we put label to the right.\n const labelX = it.x + offX + it.length * Math.cos((it.rotation * Math.PI) / 180) / 2;\n const labelY = it.y + offY + it.length * Math.sin((it.rotation * Math.PI) / 180) / 2;\n const perpDX = Math.sin((it.rotation * Math.PI) / 180);\n const perpDY = -Math.cos((it.rotation * Math.PI) / 180);\n const off = 16;\n if (comp.label) {\n labels.push(\n text(\n {\n x: labelX + perpDX * off,\n y: labelY + perpDY * off - 2,\n class: \"schematex-circuit-label\",\n \"text-anchor\": \"middle\",\n },\n comp.label\n )\n );\n }\n if (comp.value) {\n labels.push(\n text(\n {\n x: labelX + perpDX * off,\n y: labelY + perpDY * off + 10,\n class: \"schematex-circuit-value\",\n \"text-anchor\": \"middle\",\n },\n comp.value\n )\n );\n }\n }\n\n return (\n `<g transform=\"${transform}\" data-id=\"${escapeXml(comp.id)}\" data-type=\"${escapeXml(comp.componentType)}\">${body}</g>` +\n labels.join(\"\")\n );\n}\n\nfunction renderRoute(r: RoutedWire, offX: number, offY: number): string {\n if (r.points.length < 2) return \"\";\n const pts = r.points.map((p) => `${p.x + offX},${p.y + offY}`).join(\" \");\n const line = `<polyline points=\"${pts}\" class=\"schematex-circuit-wire\" fill=\"none\"/>`;\n const dots = (r.junctions ?? [])\n .map(\n (j) =>\n `<circle cx=\"${j.x + offX}\" cy=\"${j.y + offY}\" r=\"3.5\" class=\"schematex-circuit-dot\"/>`\n )\n .join(\"\");\n return line + dots;\n}\n\nexport function renderCircuit(ast: CircuitAST, config?: RenderConfig): string {\n const isNetlist = ast.mode === \"netlist\";\n const layout: CircuitLayoutResult & { routes?: RoutedWire[] } = isNetlist\n ? layoutCircuitNetlist(ast)\n : layoutCircuit(ast);\n const { width, height, offsetX, offsetY } = layout;\n\n const t = resolveIndustrialTheme(config?.theme ?? \"default\");\n\n // In netlist mode, routes are rendered BEFORE items so components sit on top\n // of wires (visually cleaner — symbol fills cover the wire endpoints).\n const routeSvg = (layout.routes ?? [])\n .map((r) => renderRoute(r, offsetX, offsetY))\n .join(\"\");\n const items = layout.items.map((it) => renderItem(it, offsetX, offsetY)).join(\"\");\n\n const css = `\n.schematex-circuit { font-family: system-ui, -apple-system, sans-serif; }\n.schematex-circuit-body { stroke: ${t.stroke}; stroke-width: 1.75; fill: none; stroke-linejoin: round; stroke-linecap: round; }\n.schematex-circuit-fill { stroke: ${t.stroke}; stroke-width: 1.5; fill: ${t.stroke}; }\n.schematex-circuit-wire { stroke: ${t.stroke}; stroke-width: 1.75; fill: none; stroke-linecap: square; }\n.schematex-circuit-dot { fill: ${t.stroke}; stroke: none; }\n.schematex-circuit-label { font: 600 11px system-ui, sans-serif; fill: ${t.text}; }\n.schematex-circuit-value { font: italic 10px system-ui, sans-serif; fill: ${t.textMuted}; }\n.schematex-circuit-net-label { font: 600 11px system-ui, sans-serif; fill: ${t.accent}; }\n.schematex-circuit-pol { font: 9px sans-serif; fill: ${t.stroke}; }\n.schematex-circuit-meter { font: bold 12px sans-serif; fill: ${t.stroke}; }\n.schematex-circuit-title { font: bold 14px sans-serif; fill: ${t.text}; }\n.schematex-circuit-err { stroke: ${t.error}; fill: ${t.error}; }\n`.trim();\n\n const titleBar = ast.title\n ? text(\n {\n x: width / 2,\n y: 18,\n \"text-anchor\": \"middle\",\n class: \"schematex-circuit-title\",\n },\n ast.title\n )\n : \"\";\n\n const topOff = ast.title ? 24 : 0;\n\n return svgRoot(\n {\n class: \"schematex-circuit\",\n viewBox: `0 0 ${Math.round(width)} ${Math.round(height + topOff)}`,\n width: Math.round(width),\n height: Math.round(height + topOff),\n role: \"img\",\n \"data-diagram-type\": \"circuit\",\n },\n [\n titleEl(ast.title ?? \"Circuit Schematic\"),\n desc(\n `Circuit schematic with ${ast.components.length} components`\n ),\n defs([el(\"style\", {}, css)]),\n titleBar,\n group({ transform: `translate(0, ${topOff})` }, [routeSvg + items]),\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseCircuit } from \"./parser\";\nimport { renderCircuit } from \"./renderer\";\n\nexport const circuit: DiagramPlugin = {\n type: \"circuit\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"circuit\");\n },\n parse: parseCircuit,\n\n render(text: string, config): string {\n const ast = parseCircuit(text);\n return renderCircuit(ast, config);\n },\n};\n\nexport { parseCircuit } from \"./parser\";\nexport { parseNetlist } from \"./netlist\";\nexport { renderCircuit } from \"./renderer\";\nexport { layoutCircuit } from \"./layout\";\nexport { layoutCircuitNetlist } from \"./autolayout\";\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkL7POWM5B_cjs = require('./chunk-L7POWM5B.cjs');
|
|
4
4
|
var chunkNAGUZFXX_cjs = require('./chunk-NAGUZFXX.cjs');
|
|
5
5
|
var chunk3WNW5Y7P_cjs = require('./chunk-3WNW5Y7P.cjs');
|
|
6
6
|
|
|
@@ -919,7 +919,7 @@ function renderEdgeLabel(le) {
|
|
|
919
919
|
}
|
|
920
920
|
function renderEntity(ast, config) {
|
|
921
921
|
const layout = layoutEntity(ast);
|
|
922
|
-
const t =
|
|
922
|
+
const t = chunkL7POWM5B_cjs.resolveBaseTheme(config?.theme ?? "default");
|
|
923
923
|
const titleOffset = ast.title ? 34 : 12;
|
|
924
924
|
const width = Math.ceil(layout.width);
|
|
925
925
|
const height = Math.ceil(layout.height + titleOffset);
|
|
@@ -1054,5 +1054,5 @@ exports.entity = entity;
|
|
|
1054
1054
|
exports.layoutEntity = layoutEntity;
|
|
1055
1055
|
exports.parseEntityDSL = parseEntityDSL;
|
|
1056
1056
|
exports.renderEntity = renderEntity;
|
|
1057
|
-
//# sourceMappingURL=chunk-
|
|
1058
|
-
//# sourceMappingURL=chunk-
|
|
1057
|
+
//# sourceMappingURL=chunk-V4GILQR6.cjs.map
|
|
1058
|
+
//# sourceMappingURL=chunk-V4GILQR6.cjs.map
|