schematex 0.3.0 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/ai-sdk.cjs +25 -25
- package/dist/ai/ai-sdk.d.cts +1 -1
- package/dist/ai/ai-sdk.d.ts +1 -1
- package/dist/ai/ai-sdk.js +20 -20
- package/dist/ai/index.cjs +28 -28
- package/dist/ai/index.d.cts +1 -1
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.js +20 -20
- package/dist/browser.cjs +22 -22
- package/dist/browser.js +20 -20
- package/dist/{chunk-HDKDQAEQ.cjs → chunk-3WNW5Y7P.cjs} +54 -2
- package/dist/chunk-3WNW5Y7P.cjs.map +1 -0
- package/dist/{chunk-B6INLQBU.cjs → chunk-55UEHL57.cjs} +46 -46
- package/dist/{chunk-B6INLQBU.cjs.map → chunk-55UEHL57.cjs.map} +1 -1
- package/dist/{chunk-JDTB7IKL.js → chunk-5U2W3HQA.js} +3 -3
- package/dist/{chunk-JDTB7IKL.js.map → chunk-5U2W3HQA.js.map} +1 -1
- package/dist/{chunk-ULYRO2KY.cjs → chunk-5UCXMYE7.cjs} +44 -44
- package/dist/{chunk-ULYRO2KY.cjs.map → chunk-5UCXMYE7.cjs.map} +1 -1
- package/dist/{chunk-UGCUNADI.js → chunk-66XQBGX7.js} +35 -16
- package/dist/chunk-66XQBGX7.js.map +1 -0
- package/dist/{chunk-45KP67RR.js → chunk-6TIN33CA.js} +5 -5
- package/dist/chunk-6TIN33CA.js.map +1 -0
- package/dist/{chunk-NNU4RGT3.js → chunk-6YUP3QMA.js} +39 -27
- package/dist/chunk-6YUP3QMA.js.map +1 -0
- package/dist/{chunk-COLTVQWR.cjs → chunk-7EWFVNYD.cjs} +25 -25
- package/dist/{chunk-COLTVQWR.cjs.map → chunk-7EWFVNYD.cjs.map} +1 -1
- package/dist/{chunk-RP5UATRA.js → chunk-AC3XH3LB.js} +4 -4
- package/dist/{chunk-RP5UATRA.js.map → chunk-AC3XH3LB.js.map} +1 -1
- package/dist/{chunk-XTATRNUN.cjs → chunk-APV4AWQ5.cjs} +442 -430
- package/dist/chunk-APV4AWQ5.cjs.map +1 -0
- package/dist/{chunk-NZH4GWE6.cjs → chunk-AVIKQZSX.cjs} +37 -37
- package/dist/{chunk-NZH4GWE6.cjs.map → chunk-AVIKQZSX.cjs.map} +1 -1
- package/dist/{chunk-X7RPFTTR.cjs → chunk-CWZKP3CJ.cjs} +26 -26
- package/dist/{chunk-X7RPFTTR.cjs.map → chunk-CWZKP3CJ.cjs.map} +1 -1
- package/dist/{chunk-TYCHEOQX.js → chunk-FIVUMDLF.js} +49 -24
- package/dist/chunk-FIVUMDLF.js.map +1 -0
- package/dist/{chunk-DNZFOCV7.js → chunk-FO7BLCEW.js} +3 -3
- package/dist/{chunk-DNZFOCV7.js.map → chunk-FO7BLCEW.js.map} +1 -1
- package/dist/{chunk-OC22GGQN.js → chunk-GLFBHQSQ.js} +54 -4
- package/dist/chunk-GLFBHQSQ.js.map +1 -0
- package/dist/{chunk-XZNPAD6E.js → chunk-GVCPFBAV.js} +59 -8
- package/dist/chunk-GVCPFBAV.js.map +1 -0
- package/dist/{chunk-B37IKTI7.cjs → chunk-HOI6QKC6.cjs} +97 -47
- package/dist/chunk-HOI6QKC6.cjs.map +1 -0
- package/dist/{chunk-A5D2IMOX.cjs → chunk-IAEABLIV.cjs} +47 -47
- package/dist/{chunk-A5D2IMOX.cjs.map → chunk-IAEABLIV.cjs.map} +1 -1
- package/dist/{chunk-5YYAYW67.js → chunk-IQRRZPVZ.js} +3 -3
- package/dist/{chunk-5YYAYW67.js.map → chunk-IQRRZPVZ.js.map} +1 -1
- package/dist/{chunk-VLMK7MQK.js → chunk-MNOO7STY.js} +25 -6
- package/dist/chunk-MNOO7STY.js.map +1 -0
- package/dist/{chunk-ZNOD4VZT.cjs → chunk-N56YC75X.cjs} +46 -46
- package/dist/{chunk-ZNOD4VZT.cjs.map → chunk-N56YC75X.cjs.map} +1 -1
- package/dist/{chunk-YQANC7HQ.js → chunk-PAG3BNIV.js} +3 -3
- package/dist/{chunk-YQANC7HQ.js.map → chunk-PAG3BNIV.js.map} +1 -1
- package/dist/{chunk-QSQX77S2.cjs → chunk-PG6TDGKI.cjs} +21 -21
- package/dist/{chunk-QSQX77S2.cjs.map → chunk-PG6TDGKI.cjs.map} +1 -1
- package/dist/{chunk-WYFXOXVK.cjs → chunk-Q5OFA4I2.cjs} +35 -35
- package/dist/{chunk-WYFXOXVK.cjs.map → chunk-Q5OFA4I2.cjs.map} +1 -1
- package/dist/{chunk-MJGDP3CS.cjs → chunk-QOLBWCF5.cjs} +488 -109
- package/dist/chunk-QOLBWCF5.cjs.map +1 -0
- package/dist/{chunk-MCFQAUQV.cjs → chunk-QXL7AY2H.cjs} +58 -39
- package/dist/chunk-QXL7AY2H.cjs.map +1 -0
- package/dist/chunk-SYYBKDL7.js +122 -0
- package/dist/chunk-SYYBKDL7.js.map +1 -0
- package/dist/{chunk-H2OEUBPO.js → chunk-TQU44E46.js} +441 -62
- package/dist/chunk-TQU44E46.js.map +1 -0
- package/dist/{chunk-FCGHV6ZK.js → chunk-U3KRKXF7.js} +4 -4
- package/dist/{chunk-FCGHV6ZK.js.map → chunk-U3KRKXF7.js.map} +1 -1
- package/dist/{chunk-3YZ6FPQW.cjs → chunk-UDGU73RL.cjs} +131 -131
- package/dist/{chunk-3YZ6FPQW.cjs.map → chunk-UDGU73RL.cjs.map} +1 -1
- package/dist/{chunk-U6L3FAML.js → chunk-UDJ2KN2A.js} +3 -3
- package/dist/{chunk-U6L3FAML.js.map → chunk-UDJ2KN2A.js.map} +1 -1
- package/dist/{chunk-FE6GAUNW.js → chunk-UT4TIDAA.js} +5 -5
- package/dist/{chunk-FE6GAUNW.js.map → chunk-UT4TIDAA.js.map} +1 -1
- package/dist/{chunk-SQKLKBBK.cjs → chunk-UWRTV6IV.cjs} +27 -8
- package/dist/chunk-UWRTV6IV.cjs.map +1 -0
- package/dist/{chunk-NB56L5QK.js → chunk-WTF6JXHN.js} +4 -4
- package/dist/{chunk-NB56L5QK.js.map → chunk-WTF6JXHN.js.map} +1 -1
- package/dist/{chunk-ZNDIGQJD.js → chunk-X5QJO4ZD.js} +3 -3
- package/dist/{chunk-ZNDIGQJD.js.map → chunk-X5QJO4ZD.js.map} +1 -1
- package/dist/{chunk-M5B2UUNW.js → chunk-XV2DTN6G.js} +4 -4
- package/dist/{chunk-M5B2UUNW.js.map → chunk-XV2DTN6G.js.map} +1 -1
- package/dist/{chunk-K2SOC3XF.cjs → chunk-YUPG2M3I.cjs} +71 -20
- package/dist/chunk-YUPG2M3I.cjs.map +1 -0
- package/dist/{chunk-2JDVJRR3.cjs → chunk-ZCW7YH3C.cjs} +28 -28
- package/dist/chunk-ZCW7YH3C.cjs.map +1 -0
- package/dist/{chunk-3FKS4KQK.cjs → chunk-ZFNZ2FYI.cjs} +88 -63
- package/dist/chunk-ZFNZ2FYI.cjs.map +1 -0
- package/dist/{chunk-5AEN2PLB.cjs → chunk-ZZJDGGC3.cjs} +33 -33
- package/dist/{chunk-5AEN2PLB.cjs.map → chunk-ZZJDGGC3.cjs.map} +1 -1
- package/dist/diagrams/blockdiagram/index.cjs +6 -6
- package/dist/diagrams/blockdiagram/index.d.cts +1 -1
- package/dist/diagrams/blockdiagram/index.d.ts +1 -1
- package/dist/diagrams/blockdiagram/index.js +2 -2
- 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 +8 -8
- package/dist/diagrams/ecomap/index.d.cts +1 -1
- package/dist/diagrams/ecomap/index.d.ts +1 -1
- package/dist/diagrams/ecomap/index.js +3 -3
- 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 +10 -10
- package/dist/diagrams/genogram/index.d.cts +1 -1
- package/dist/diagrams/genogram/index.d.ts +1 -1
- package/dist/diagrams/genogram/index.js +3 -3
- 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 +8 -8
- package/dist/diagrams/pedigree/index.d.cts +1 -1
- package/dist/diagrams/pedigree/index.d.ts +1 -1
- package/dist/diagrams/pedigree/index.js +3 -3
- 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 +6 -6
- package/dist/diagrams/sld/index.d.cts +1 -1
- package/dist/diagrams/sld/index.d.ts +1 -1
- package/dist/diagrams/sld/index.js +2 -2
- package/dist/diagrams/sociogram/index.cjs +7 -7
- package/dist/diagrams/sociogram/index.d.cts +1 -1
- package/dist/diagrams/sociogram/index.d.ts +1 -1
- package/dist/diagrams/sociogram/index.js +3 -3
- package/dist/diagrams/timing/index.cjs +5 -5
- package/dist/diagrams/timing/index.d.cts +1 -1
- package/dist/diagrams/timing/index.d.ts +1 -1
- package/dist/diagrams/timing/index.js +2 -2
- 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-CUwp4GXI.d.ts → index-D3u6vcA4.d.ts} +1 -1
- package/dist/{index-ivhNGsyU.d.cts → index-bdfj6FpQ.d.cts} +1 -1
- package/dist/index.cjs +41 -41
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +19 -19
- package/dist/react.cjs +20 -20
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +19 -19
- package/dist/react.js.map +1 -1
- package/dist/{types-Bl-Pn7Wj.d.cts → types-DnU2UlWz.d.cts} +26 -3
- package/dist/{types-Bl-Pn7Wj.d.ts → types-DnU2UlWz.d.ts} +26 -3
- package/package.json +1 -1
- package/dist/chunk-2JDVJRR3.cjs.map +0 -1
- package/dist/chunk-3FKS4KQK.cjs.map +0 -1
- package/dist/chunk-45KP67RR.js.map +0 -1
- package/dist/chunk-B37IKTI7.cjs.map +0 -1
- package/dist/chunk-H2OEUBPO.js.map +0 -1
- package/dist/chunk-HDKDQAEQ.cjs.map +0 -1
- package/dist/chunk-K2SOC3XF.cjs.map +0 -1
- package/dist/chunk-KLJEK547.js +0 -71
- package/dist/chunk-KLJEK547.js.map +0 -1
- package/dist/chunk-MCFQAUQV.cjs.map +0 -1
- package/dist/chunk-MJGDP3CS.cjs.map +0 -1
- package/dist/chunk-NNU4RGT3.js.map +0 -1
- package/dist/chunk-OC22GGQN.js.map +0 -1
- package/dist/chunk-SQKLKBBK.cjs.map +0 -1
- package/dist/chunk-TYCHEOQX.js.map +0 -1
- package/dist/chunk-UGCUNADI.js.map +0 -1
- package/dist/chunk-VLMK7MQK.js.map +0 -1
- package/dist/chunk-XTATRNUN.cjs.map +0 -1
- package/dist/chunk-XZNPAD6E.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/diagrams/circuit/netlist.ts","../src/diagrams/circuit/parser.ts","../src/diagrams/circuit/symbols.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-GVCPFBAV.js","sourcesContent":["/**\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\";\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 = defaults?.pins ?? [\"p1\", \"p2\"];\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 } 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 // Rebuild pinOrder for transistor flips (pnp mirrors npn pin names)\n if (first === \"pnp\") pinOrder = [\"c\", \"b\", \"e\"];\n if (first === \"pmos\" || first === \"jfet_p\") pinOrder = [\"d\", \"g\", \"s\"];\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\";\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 \"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};\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 titleMatch = firstMeaningful.match(/\"([^\"]*)\"/);\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, titleMatch?.[1]);\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 = stripped.match(/\"([^\"]*)\"/);\n if (t) title = t[1];\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","/**\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 /** 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 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 // 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 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 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 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 // 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 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 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 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 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 },\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 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 },\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 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 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 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 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 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 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 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// ─── 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 // 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","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 { background: ${t.bg}; 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"]}
|