schematex 0.6.5 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/dist/ai/ai-sdk.cjs +23 -23
  2. package/dist/ai/ai-sdk.d.cts +3 -3
  3. package/dist/ai/ai-sdk.d.ts +3 -3
  4. package/dist/ai/ai-sdk.js +18 -18
  5. package/dist/ai/index.cjs +29 -29
  6. package/dist/ai/index.d.cts +3 -3
  7. package/dist/ai/index.d.ts +3 -3
  8. package/dist/ai/index.js +18 -18
  9. package/dist/{api-BIqZjEDf.d.ts → api-DIJM_mqp.d.ts} +2 -2
  10. package/dist/{api-BXkOT7GL.d.cts → api-JaBtsUT8.d.cts} +2 -2
  11. package/dist/browser.cjs +24 -24
  12. package/dist/browser.d.cts +3 -3
  13. package/dist/browser.d.ts +3 -3
  14. package/dist/browser.js +18 -18
  15. package/dist/{chunk-3C5DKCBJ.cjs → chunk-2SZJQVPN.cjs} +12 -12
  16. package/dist/{chunk-3C5DKCBJ.cjs.map → chunk-2SZJQVPN.cjs.map} +1 -1
  17. package/dist/{chunk-W3IXH6BN.cjs → chunk-34O3C6OC.cjs} +4 -4
  18. package/dist/chunk-34O3C6OC.cjs.map +1 -0
  19. package/dist/{chunk-RVHOCGHT.js → chunk-3GAPHXCE.js} +3 -3
  20. package/dist/{chunk-RVHOCGHT.js.map → chunk-3GAPHXCE.js.map} +1 -1
  21. package/dist/{chunk-HCBXTBFA.cjs → chunk-5FYPSIGD.cjs} +12 -12
  22. package/dist/{chunk-HCBXTBFA.cjs.map → chunk-5FYPSIGD.cjs.map} +1 -1
  23. package/dist/{chunk-B7ATOBL7.js → chunk-6NUAGU6O.js} +3 -3
  24. package/dist/{chunk-B7ATOBL7.js.map → chunk-6NUAGU6O.js.map} +1 -1
  25. package/dist/{chunk-WZ5QBGPZ.cjs → chunk-77GPD4YQ.cjs} +4 -4
  26. package/dist/{chunk-WZ5QBGPZ.cjs.map → chunk-77GPD4YQ.cjs.map} +1 -1
  27. package/dist/{chunk-S2CHBZ4A.cjs → chunk-BL57NQKN.cjs} +13 -13
  28. package/dist/{chunk-S2CHBZ4A.cjs.map → chunk-BL57NQKN.cjs.map} +1 -1
  29. package/dist/{chunk-EPKIJEH7.js → chunk-C7V57V6O.js} +54 -8
  30. package/dist/chunk-C7V57V6O.js.map +1 -0
  31. package/dist/{chunk-I6UJR4SG.cjs → chunk-DR3DDDQY.cjs} +4 -4
  32. package/dist/{chunk-I6UJR4SG.cjs.map → chunk-DR3DDDQY.cjs.map} +1 -1
  33. package/dist/{chunk-ZZHQBAC3.js → chunk-EVEPI423.js} +139 -5
  34. package/dist/chunk-EVEPI423.js.map +1 -0
  35. package/dist/{chunk-GV5QLYTW.js → chunk-HL5PS6MG.js} +3 -3
  36. package/dist/{chunk-GV5QLYTW.js.map → chunk-HL5PS6MG.js.map} +1 -1
  37. package/dist/{chunk-MKECYIWN.js → chunk-HPEAE3JM.js} +3 -3
  38. package/dist/{chunk-MKECYIWN.js.map → chunk-HPEAE3JM.js.map} +1 -1
  39. package/dist/{chunk-KPKGMOTS.js → chunk-JN6FHUC6.js} +3 -3
  40. package/dist/{chunk-KPKGMOTS.js.map → chunk-JN6FHUC6.js.map} +1 -1
  41. package/dist/{chunk-OANWVUBA.js → chunk-JTGTWBAD.js} +3 -3
  42. package/dist/chunk-JTGTWBAD.js.map +1 -0
  43. package/dist/{chunk-OHLNH7IO.js → chunk-K2D6VFLP.js} +3 -3
  44. package/dist/{chunk-OHLNH7IO.js.map → chunk-K2D6VFLP.js.map} +1 -1
  45. package/dist/{chunk-ZZFPXCAK.cjs → chunk-KGOZBABH.cjs} +12 -12
  46. package/dist/{chunk-ZZFPXCAK.cjs.map → chunk-KGOZBABH.cjs.map} +1 -1
  47. package/dist/{chunk-624UQ5R6.cjs → chunk-LDONE225.cjs} +1104 -442
  48. package/dist/chunk-LDONE225.cjs.map +1 -0
  49. package/dist/{chunk-XO7WW3I6.cjs → chunk-LPAWZYDU.cjs} +4 -4
  50. package/dist/{chunk-XO7WW3I6.cjs.map → chunk-LPAWZYDU.cjs.map} +1 -1
  51. package/dist/{chunk-IPEHLRTI.js → chunk-MPCSWRZC.js} +76 -14
  52. package/dist/chunk-MPCSWRZC.js.map +1 -0
  53. package/dist/{chunk-ROX5KEZM.cjs → chunk-NFZMNKOR.cjs} +15 -15
  54. package/dist/{chunk-ROX5KEZM.cjs.map → chunk-NFZMNKOR.cjs.map} +1 -1
  55. package/dist/{chunk-R5E2LSN2.cjs → chunk-NZT5P2XZ.cjs} +73 -2
  56. package/dist/chunk-NZT5P2XZ.cjs.map +1 -0
  57. package/dist/{chunk-GPC5BWLI.js → chunk-OFKRELZK.js} +3 -3
  58. package/dist/{chunk-GPC5BWLI.js.map → chunk-OFKRELZK.js.map} +1 -1
  59. package/dist/{chunk-XJJUJ2EF.cjs → chunk-QBS4F44Q.cjs} +517 -10
  60. package/dist/chunk-QBS4F44Q.cjs.map +1 -0
  61. package/dist/{chunk-SUIDD2C5.cjs → chunk-SHMG7BVF.cjs} +54 -8
  62. package/dist/chunk-SHMG7BVF.cjs.map +1 -0
  63. package/dist/{chunk-XEIVA2CT.js → chunk-T3FV73LM.js} +3 -3
  64. package/dist/{chunk-XEIVA2CT.js.map → chunk-T3FV73LM.js.map} +1 -1
  65. package/dist/{chunk-4THUHX2D.cjs → chunk-T5KHNJ67.cjs} +5 -5
  66. package/dist/{chunk-4THUHX2D.cjs.map → chunk-T5KHNJ67.cjs.map} +1 -1
  67. package/dist/{chunk-FXPOHPBE.cjs → chunk-TACTEF2N.cjs} +4 -4
  68. package/dist/{chunk-FXPOHPBE.cjs.map → chunk-TACTEF2N.cjs.map} +1 -1
  69. package/dist/{chunk-MI77LY6A.js → chunk-TRUJ4Q6V.js} +1044 -383
  70. package/dist/chunk-TRUJ4Q6V.js.map +1 -0
  71. package/dist/{chunk-BXNOXOE4.cjs → chunk-UHPGWO77.cjs} +77 -14
  72. package/dist/chunk-UHPGWO77.cjs.map +1 -0
  73. package/dist/{chunk-AORGFBEH.js → chunk-UK6HF6PE.js} +73 -3
  74. package/dist/chunk-UK6HF6PE.js.map +1 -0
  75. package/dist/{chunk-35XCP2E4.js → chunk-WAKRRGAV.js} +516 -10
  76. package/dist/chunk-WAKRRGAV.js.map +1 -0
  77. package/dist/{chunk-T3ZN5P32.cjs → chunk-WK36Z63Y.cjs} +141 -7
  78. package/dist/chunk-WK36Z63Y.cjs.map +1 -0
  79. package/dist/{chunk-LGFB4H5B.js → chunk-WU2N6ZVM.js} +3 -3
  80. package/dist/{chunk-LGFB4H5B.js.map → chunk-WU2N6ZVM.js.map} +1 -1
  81. package/dist/{chunk-FHZTWWI6.js → chunk-YMZTXOUG.js} +3 -3
  82. package/dist/{chunk-FHZTWWI6.js.map → chunk-YMZTXOUG.js.map} +1 -1
  83. package/dist/{chunk-XSPENTEG.js → chunk-YTGOLTLJ.js} +3 -3
  84. package/dist/{chunk-XSPENTEG.js.map → chunk-YTGOLTLJ.js.map} +1 -1
  85. package/dist/{chunk-VZO2SX6Q.cjs → chunk-Z3A2UNK2.cjs} +4 -4
  86. package/dist/{chunk-VZO2SX6Q.cjs.map → chunk-Z3A2UNK2.cjs.map} +1 -1
  87. package/dist/{diagnostics-CzHW0RCo.d.cts → diagnostics-BKRow1ur.d.cts} +15 -1
  88. package/dist/{diagnostics-CzHW0RCo.d.ts → diagnostics-BKRow1ur.d.ts} +15 -1
  89. package/dist/diagrams/blockdiagram/index.cjs +5 -5
  90. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  91. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  92. package/dist/diagrams/blockdiagram/index.js +1 -1
  93. package/dist/diagrams/circuit/index.cjs +12 -8
  94. package/dist/diagrams/circuit/index.d.cts +13 -2
  95. package/dist/diagrams/circuit/index.d.ts +13 -2
  96. package/dist/diagrams/circuit/index.js +2 -2
  97. package/dist/diagrams/ecomap/index.cjs +7 -7
  98. package/dist/diagrams/ecomap/index.d.cts +1 -1
  99. package/dist/diagrams/ecomap/index.d.ts +1 -1
  100. package/dist/diagrams/ecomap/index.js +2 -2
  101. package/dist/diagrams/entity/index.cjs +6 -6
  102. package/dist/diagrams/entity/index.d.cts +1 -1
  103. package/dist/diagrams/entity/index.d.ts +1 -1
  104. package/dist/diagrams/entity/index.js +2 -2
  105. package/dist/diagrams/fishbone/index.cjs +8 -8
  106. package/dist/diagrams/fishbone/index.d.cts +1 -1
  107. package/dist/diagrams/fishbone/index.d.ts +1 -1
  108. package/dist/diagrams/fishbone/index.js +2 -2
  109. package/dist/diagrams/flowchart/index.cjs +8 -8
  110. package/dist/diagrams/flowchart/index.d.cts +2 -2
  111. package/dist/diagrams/flowchart/index.d.ts +2 -2
  112. package/dist/diagrams/flowchart/index.js +2 -2
  113. package/dist/diagrams/genogram/index.cjs +9 -9
  114. package/dist/diagrams/genogram/index.d.cts +1 -1
  115. package/dist/diagrams/genogram/index.d.ts +1 -1
  116. package/dist/diagrams/genogram/index.js +2 -2
  117. package/dist/diagrams/ladder/index.cjs +6 -6
  118. package/dist/diagrams/ladder/index.d.cts +1 -1
  119. package/dist/diagrams/ladder/index.d.ts +1 -1
  120. package/dist/diagrams/ladder/index.js +2 -2
  121. package/dist/diagrams/logic/index.cjs +8 -8
  122. package/dist/diagrams/logic/index.d.cts +1 -1
  123. package/dist/diagrams/logic/index.d.ts +1 -1
  124. package/dist/diagrams/logic/index.js +2 -2
  125. package/dist/diagrams/orgchart/index.cjs +11 -7
  126. package/dist/diagrams/orgchart/index.d.cts +27 -2
  127. package/dist/diagrams/orgchart/index.d.ts +27 -2
  128. package/dist/diagrams/orgchart/index.js +2 -2
  129. package/dist/diagrams/pedigree/index.cjs +7 -7
  130. package/dist/diagrams/pedigree/index.d.cts +1 -1
  131. package/dist/diagrams/pedigree/index.d.ts +1 -1
  132. package/dist/diagrams/pedigree/index.js +2 -2
  133. package/dist/diagrams/phylo/index.cjs +7 -7
  134. package/dist/diagrams/phylo/index.d.cts +1 -1
  135. package/dist/diagrams/phylo/index.d.ts +1 -1
  136. package/dist/diagrams/phylo/index.js +2 -2
  137. package/dist/diagrams/sld/index.cjs +8 -8
  138. package/dist/diagrams/sld/index.d.cts +1 -1
  139. package/dist/diagrams/sld/index.d.ts +1 -1
  140. package/dist/diagrams/sld/index.js +2 -2
  141. package/dist/diagrams/sociogram/index.cjs +6 -6
  142. package/dist/diagrams/sociogram/index.d.cts +1 -1
  143. package/dist/diagrams/sociogram/index.d.ts +1 -1
  144. package/dist/diagrams/sociogram/index.js +2 -2
  145. package/dist/diagrams/timing/index.d.cts +1 -1
  146. package/dist/diagrams/timing/index.d.ts +1 -1
  147. package/dist/diagrams/venn/index.cjs +9 -9
  148. package/dist/diagrams/venn/index.d.cts +1 -1
  149. package/dist/diagrams/venn/index.d.ts +1 -1
  150. package/dist/diagrams/venn/index.js +2 -2
  151. package/dist/{index-R0IwpG20.d.cts → index-DU2h1Y-a.d.cts} +1 -1
  152. package/dist/{index-DdR1Auby.d.ts → index-Dq3Mfxay.d.ts} +1 -1
  153. package/dist/index.cjs +79 -75
  154. package/dist/index.d.cts +7 -5
  155. package/dist/index.d.ts +7 -5
  156. package/dist/index.js +22 -22
  157. package/dist/react.cjs +18 -18
  158. package/dist/react.d.cts +2 -2
  159. package/dist/react.d.ts +2 -2
  160. package/dist/react.js +17 -17
  161. package/dist/{tools-B7EqXLgD.d.ts → tools-A0HRZ8jj.d.ts} +11 -2
  162. package/dist/{tools-DHSVXHM9.d.cts → tools-OzOQnlnV.d.cts} +11 -2
  163. package/package.json +1 -1
  164. package/dist/chunk-35XCP2E4.js.map +0 -1
  165. package/dist/chunk-624UQ5R6.cjs.map +0 -1
  166. package/dist/chunk-AORGFBEH.js.map +0 -1
  167. package/dist/chunk-BXNOXOE4.cjs.map +0 -1
  168. package/dist/chunk-EPKIJEH7.js.map +0 -1
  169. package/dist/chunk-IPEHLRTI.js.map +0 -1
  170. package/dist/chunk-MI77LY6A.js.map +0 -1
  171. package/dist/chunk-OANWVUBA.js.map +0 -1
  172. package/dist/chunk-R5E2LSN2.cjs.map +0 -1
  173. package/dist/chunk-SUIDD2C5.cjs.map +0 -1
  174. package/dist/chunk-T3ZN5P32.cjs.map +0 -1
  175. package/dist/chunk-W3IXH6BN.cjs.map +0 -1
  176. package/dist/chunk-XJJUJ2EF.cjs.map +0 -1
  177. package/dist/chunk-ZZHQBAC3.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/lint.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-WAKRRGAV.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// ─── Previously-missing glyphs (v0.6.7) ──────────────────────\n// These types were declared in CircuitComponentType and accepted by the parser\n// but had no SymbolDef, so they rendered as a dashed `?type` placeholder. Each\n// follows the rightward-orientation contract (start at origin, end at length).\n\nconst varistor: 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=\"28\" height=\"16\" fill=\"white\" ${BODY}/>`,\n // voltage-dependence diagonal through the body\n `<line x1=\"9\" y1=\"9\" x2=\"31\" y2=\"-9\" ${BODY}/>`,\n `<text x=\"12\" y=\"-1\" class=\"schematex-circuit-pol\">U</text>`,\n lineWire(34, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst fuse_slow: 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 `<text x=\"11\" y=\"-8\" class=\"schematex-circuit-pol\">T</text>`,\n lineWire(25, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst inductor_iron: 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 // iron core: two parallel lines above the humps\n `<line x1=\"6\" y1=\"-8\" x2=\"34\" y2=\"-8\" ${BODY}/>`,\n `<line x1=\"6\" y1=\"-11\" x2=\"34\" y2=\"-11\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst inductor_ferrite: 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 // ferrite core: one heavy line above the humps\n `<line x1=\"6\" y1=\"-9\" x2=\"34\" y2=\"-9\" stroke-width=\"2.5\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst ferrite_bead: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 7, 0),\n `<rect x=\"7\" y=\"-6\" width=\"16\" height=\"12\" rx=\"2\" ${FILL}/>`,\n lineWire(23, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst varactor: SymbolDef = {\n length: 32,\n anchors: { start: { x: 0, y: 0 }, end: { x: 32, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 20,0\" ${FILL}/>`,\n // cathode bar + parallel capacitor plate (voltage-variable capacitance)\n `<line x1=\"20\" y1=\"-8\" x2=\"20\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"24\" y1=\"-8\" x2=\"24\" y2=\"8\" ${BODY}/>`,\n lineWire(24, 0, 32, 0),\n ].join(\"\"),\n};\n\nconst tvs_diode: SymbolDef = {\n length: 36,\n anchors: { start: { x: 0, y: 0 }, end: { x: 36, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n // two triangles back-to-back onto a shared bar (bidirectional clamp)\n `<polygon points=\"6,-8 6,8 16,0\" ${FILL}/>`,\n `<polygon points=\"30,-8 30,8 20,0\" ${FILL}/>`,\n `<line x1=\"18\" y1=\"-9\" x2=\"18\" y2=\"9\" ${BODY}/>`,\n lineWire(30, 0, 36, 0),\n ].join(\"\"),\n};\n\nconst bridge_rectifier: SymbolDef = {\n length: 48,\n netlistPins: [\"ac1\", \"ac2\", \"dcp\", \"dcn\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 48, y: 0 },\n ac1: { x: 0, y: 0 }, // left corner\n ac2: { x: 48, y: 0 }, // right corner\n dcp: { x: 24, y: -24 }, // top corner (+)\n dcn: { x: 24, y: 24 }, // bottom corner (−)\n },\n svg: () =>\n [\n `<polygon points=\"0,0 24,-24 48,0 24,24\" fill=\"white\" ${BODY}/>`,\n // four diode triangles, all conducting toward DC+ (top)\n `<polygon points=\"8,-10 15,-10 11,-3\" ${FILL}/>`,\n `<polygon points=\"33,-10 40,-10 36,-3\" ${FILL}/>`,\n `<polygon points=\"8,10 15,10 11,3\" ${FILL}/>`,\n `<polygon points=\"33,10 40,10 36,3\" ${FILL}/>`,\n `<text x=\"24\" y=\"-10\" text-anchor=\"middle\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"24\" y=\"20\" text-anchor=\"middle\" class=\"schematex-circuit-pol\">−</text>`,\n ].join(\"\"),\n};\n\nconst darlington_npn: 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 lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-9\" x2=\"10\" y2=\"9\" ${BODY}/>`, // shared base plate\n // Q1: base → collector, base → Q2 base node\n `<line x1=\"10\" y1=\"-5\" x2=\"26\" y2=\"-11\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"4\" x2=\"19\" y2=\"7\" ${BODY}/>`,\n // Q2: emitter out (NPN arrow outward)\n `<line x1=\"19\" y1=\"7\" x2=\"28\" y2=\"11\" ${BODY}/>`,\n `<polygon points=\"28,11 21,9 23,15\" ${FILL}/>`,\n lineWire(26, -11, 40, -16),\n lineWire(28, 11, 40, 16),\n ].join(\"\"),\n};\n\nconst darlington_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 lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-9\" x2=\"10\" y2=\"9\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"-5\" x2=\"26\" y2=\"-11\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"4\" x2=\"19\" y2=\"7\" ${BODY}/>`,\n `<line x1=\"19\" y1=\"7\" x2=\"28\" y2=\"11\" ${BODY}/>`,\n // PNP arrow pointing inward (toward base node)\n `<polygon points=\"12,5 19,7 14,11\" ${FILL}/>`,\n lineWire(26, -11, 40, -16),\n lineWire(28, 11, 40, 16),\n ].join(\"\"),\n};\n\nconst nmos_depletion: 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}/>`, // gate plate\n // solid channel bar (depletion mode) vs the segmented enhancement bar\n `<line x1=\"18\" y1=\"-10\" 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 igbt: SymbolDef = {\n length: 40,\n netlistPins: [\"c\", \"g\", \"e\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n collector: { x: 40, y: -16 },\n emitter: { x: 40, y: 16 },\n g: { x: 0, y: 0 },\n c: { x: 40, y: -16 },\n e: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-12\" x2=\"10\" y2=\"12\" ${BODY}/>`, // insulated gate plate\n `<line x1=\"14\" y1=\"-10\" x2=\"14\" y2=\"10\" ${BODY}/>`, // channel\n `<line x1=\"14\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"14\" y1=\"8\" x2=\"28\" y2=\"8\" ${BODY}/>`,\n // IGBT emitter arrow (BJT-like, pointing out)\n `<polygon points=\"28,8 22,5 23,11\" ${FILL}/>`,\n lineWire(28, 8, 40, 16),\n ].join(\"\"),\n};\n\nconst scr: SymbolDef = {\n length: 36,\n netlistPins: [\"a\", \"k\", \"g\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 36, y: 0 },\n a: { x: 0, y: 0 },\n k: { x: 36, y: 0 },\n g: { x: 30, y: 16 },\n gate: { x: 30, y: 16 },\n },\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, 36, 0),\n // gate lead off the cathode side\n `<line x1=\"22\" y1=\"4\" x2=\"30\" y2=\"12\" ${BODY}/>`,\n lineWire(30, 12, 30, 16),\n ].join(\"\"),\n};\n\nconst triac: SymbolDef = {\n length: 40,\n netlistPins: [\"mt1\", \"mt2\", \"g\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: 0 },\n mt1: { x: 0, y: 0 },\n mt2: { x: 40, y: 0 },\n g: { x: 6, y: 16 },\n gate: { x: 6, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n // two triangles back-to-back, offset vertically (bidirectional)\n `<polygon points=\"8,-9 8,3 22,-3\" ${FILL}/>`,\n `<polygon points=\"32,-3 32,9 18,3\" ${FILL}/>`,\n `<line x1=\"8\" y1=\"-9\" x2=\"8\" y2=\"3\" ${BODY}/>`,\n `<line x1=\"32\" y1=\"-3\" x2=\"32\" y2=\"9\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n // gate lead\n `<line x1=\"10\" y1=\"6\" x2=\"6\" y2=\"12\" ${BODY}/>`,\n lineWire(6, 12, 6, 16),\n ].join(\"\"),\n};\n\nconst diac: SymbolDef = {\n length: 36,\n anchors: { start: { x: 0, y: 0 }, end: { x: 36, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n // two triangles back-to-back, no gate (bidirectional trigger)\n `<polygon points=\"6,-9 6,3 20,-3\" ${FILL}/>`,\n `<polygon points=\"30,-3 30,9 16,3\" ${FILL}/>`,\n `<line x1=\"6\" y1=\"-9\" x2=\"6\" y2=\"3\" ${BODY}/>`,\n `<line x1=\"30\" y1=\"-3\" x2=\"30\" y2=\"9\" ${BODY}/>`,\n lineWire(30, 0, 36, 0),\n ].join(\"\"),\n};\n\nconst phototransistor: 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 `<polygon points=\"30,12 24,10 26,16\" ${FILL}/>`,\n // inward light arrows striking the base\n `<path d=\"M 2,-20 L 9,-13 M 9,-15 L 9,-13 L 7,-13\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 7,-22 L 14,-15 M 14,-17 L 14,-15 L 12,-15\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst optocoupler: SymbolDef = {\n length: 56,\n netlistPins: [\"a\", \"k\", \"c\", \"e\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 56, y: 0 },\n a: { x: 0, y: -12 },\n k: { x: 0, y: 12 },\n c: { x: 56, y: -12 },\n e: { x: 56, y: 12 },\n },\n svg: () =>\n [\n `<rect x=\"10\" y=\"-22\" width=\"36\" height=\"44\" fill=\"none\" class=\"schematex-circuit-body\" stroke-dasharray=\"4,3\"/>`,\n // LED (left): anode top, cathode bottom — drawn pointing down\n lineWire(0, -12, 16, -12),\n lineWire(0, 12, 16, 12),\n `<polygon points=\"16,-6 24,-6 20,2\" ${FILL}/>`,\n `<line x1=\"16\" y1=\"2\" x2=\"24\" y2=\"2\" ${BODY}/>`,\n // isolation light arrows\n `<path d=\"M 26,-4 L 32,-4 M 30,-6 L 32,-4 L 30,-2\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 26,2 L 32,2 M 30,0 L 32,2 L 30,4\" fill=\"none\" ${BODY}/>`,\n // phototransistor (right)\n `<line x1=\"36\" y1=\"-8\" x2=\"36\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"36\" y1=\"-4\" x2=\"46\" y2=\"-12\" ${BODY}/>`,\n lineWire(46, -12, 56, -12),\n `<line x1=\"36\" y1=\"4\" x2=\"46\" y2=\"12\" ${BODY}/>`,\n lineWire(46, 12, 56, 12),\n `<polygon points=\"46,12 40,10 42,16\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst schmitt_buffer: SymbolDef = {\n length: 44,\n netlistPins: [\"in\", \"out\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 44, y: 0 },\n in: { x: 0, y: 0 },\n out: { x: 44, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n `<polygon points=\"6,-14 6,14 38,0\" fill=\"white\" ${BODY}/>`,\n // hysteresis glyph inside\n `<path d=\"M 12,4 L 18,4 L 18,-4 L 24,-4 M 14,-2 L 20,-2 L 20,6 L 26,6\" fill=\"none\" ${BODY}/>`,\n lineWire(38, 0, 44, 0),\n ].join(\"\"),\n};\n\nconst tri_state_buffer: SymbolDef = {\n length: 44,\n netlistPins: [\"in\", \"out\", \"en\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 44, y: 0 },\n in: { x: 0, y: 0 },\n out: { x: 44, y: 0 },\n en: { x: 19, y: -14 },\n enable: { x: 19, y: -14 },\n },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n `<polygon points=\"6,-14 6,14 38,0\" fill=\"white\" ${BODY}/>`,\n // enable pin on top\n `<line x1=\"19\" y1=\"-7\" x2=\"19\" y2=\"-14\" ${BODY}/>`,\n lineWire(38, 0, 44, 0),\n ].join(\"\"),\n};\n\nconst instrumentation_amp: SymbolDef = {\n length: 50,\n netlistPins: [\"inp\", \"inn\", \"out\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n inp: { x: 0, y: -12 },\n inn: { x: 0, y: 12 },\n out: { x: 50, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, -12, 4, -12),\n lineWire(0, 12, 4, 12),\n `<polygon points=\"4,-22 4,22 50,0\" fill=\"white\" ${BODY}/>`,\n // double left edge marks the instrumentation (3-opamp) block\n `<line x1=\"8\" y1=\"-20\" x2=\"8\" y2=\"20\" ${BODY}/>`,\n `<text x=\"6\" y=\"-7\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"6\" y=\"15\" class=\"schematex-circuit-pol\">−</text>`,\n `<text x=\"18\" y=\"4\" class=\"schematex-circuit-pol\">INA</text>`,\n ].join(\"\"),\n};\n\nconst dc_dc_converter: SymbolDef = {\n length: 50,\n netlistPins: [\"vin\", \"gin\", \"vout\", \"gout\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n vin: { x: 0, y: -12 },\n gin: { x: 0, y: 12 },\n vout: { x: 50, y: -12 },\n gout: { x: 50, y: 12 },\n },\n svg: () =>\n [\n lineWire(0, -12, 8, -12),\n lineWire(0, 12, 8, 12),\n `<rect x=\"8\" y=\"-20\" width=\"34\" height=\"40\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"14\" x2=\"36\" y2=\"-14\" ${BODY}/>`,\n `<text x=\"12\" y=\"-8\" class=\"schematex-circuit-pol\">DC</text>`,\n `<text x=\"24\" y=\"17\" class=\"schematex-circuit-pol\">DC</text>`,\n lineWire(42, -12, 50, -12),\n lineWire(42, 12, 50, 12),\n ].join(\"\"),\n};\n\nconst switch_dpdt: SymbolDef = {\n length: 52,\n netlistPins: [\"p1\", \"nc1\", \"no1\", \"p2\", \"nc2\", \"no2\"],\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 52, y: 0 },\n p1: { x: 0, y: -16 },\n nc1: { x: 52, y: -28 },\n no1: { x: 52, y: -8 },\n p2: { x: 0, y: 16 },\n nc2: { x: 52, y: 4 },\n no2: { x: 52, y: 24 },\n },\n svg: () =>\n [\n // pole 1 (upper)\n lineWire(0, -16, 10, -16),\n `<circle cx=\"10\" cy=\"-16\" r=\"2\" ${FILL}/>`,\n `<line x1=\"10\" y1=\"-16\" x2=\"40\" y2=\"-26\" ${BODY}/>`,\n `<circle cx=\"42\" cy=\"-28\" r=\"2\" ${FILL}/>`,\n lineWire(42, -28, 52, -28),\n `<circle cx=\"42\" cy=\"-8\" r=\"2\" ${FILL}/>`,\n lineWire(42, -8, 52, -8),\n // pole 2 (lower)\n lineWire(0, 16, 10, 16),\n `<circle cx=\"10\" cy=\"16\" r=\"2\" ${FILL}/>`,\n `<line x1=\"10\" y1=\"16\" x2=\"40\" y2=\"6\" ${BODY}/>`,\n `<circle cx=\"42\" cy=\"4\" r=\"2\" ${FILL}/>`,\n lineWire(42, 4, 52, 4),\n `<circle cx=\"42\" cy=\"24\" r=\"2\" ${FILL}/>`,\n lineWire(42, 24, 52, 24),\n // ganged actuator (dashed link between the two arms)\n `<line x1=\"25\" y1=\"-21\" x2=\"25\" y2=\"11\" class=\"schematex-circuit-body\" stroke-dasharray=\"3,3\"/>`,\n ].join(\"\"),\n};\n\nconst oscilloscope: 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 // sine trace\n `<path d=\"M 12,2 Q 16,-9 20,0 Q 24,9 28,-2\" fill=\"none\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst port: 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=\"11\" cy=\"0\" r=\"5\" fill=\"white\" ${BODY}/>`,\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 // Previously-missing glyphs (v0.6.7) — passives / diodes / power semis / ICs\n varistor,\n fuse_slow,\n inductor_iron,\n inductor_ferrite,\n ferrite_bead,\n varactor,\n tvs_diode,\n bridge_rectifier,\n darlington_npn,\n darlington_pnp,\n nmos_depletion,\n igbt,\n scr,\n triac,\n diac,\n phototransistor,\n optocoupler,\n schmitt_buffer,\n tri_state_buffer,\n instrumentation_amp,\n dc_dc_converter,\n switch_dpdt,\n oscilloscope,\n port,\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 const underspecified: { id: string; type: string; expected: number; got: number }[] = [];\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 // Degrade rather than blanking the whole schematic: bind the missing pins\n // to per-component floating \"no-connect\" nets so the symbol still renders\n // with its declared connections, and flag it for the lint pass. A common\n // LLM mistake is to under-specify a multi-terminal part (e.g. a 4-pin\n // transformer given only 2 nets).\n const got = netRefs.length;\n for (let k = got; k < pinOrder.length; k++) {\n netRefs.push(`${id}_nc${k + 1}`);\n }\n underspecified.push({ id, type: cType, expected: pinOrder.length, got });\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 // Optional L2 orientation hint: `dir=`/`orient=` (right|left|up|down).\n // Absent → auto-layout chooses by role; present → respected verbatim.\n const dirHint = (kv.dir ?? kv.orient ?? kv.direction)?.toLowerCase();\n const explicitDir =\n dirHint === \"right\" || dirHint === \"left\" || dirHint === \"up\" || dirHint === \"down\"\n ? dirHint\n : undefined;\n\n const comp: CircuitComponent = {\n id,\n componentType: cType,\n direction: explicitDir ?? \"right\",\n label: kv.label ?? id,\n value: kv.value ?? valueFromTail,\n attrs: explicitDir ? { dirExplicit: \"true\" } : {},\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 if (k === \"dir\" || k === \"orient\" || k === \"direction\") 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 const ast: CircuitAST = {\n type: \"circuit\",\n title,\n components,\n nets,\n pinMap,\n mode: \"netlist\",\n };\n if (underspecified.length) ast.recovered = { underspecified };\n return ast;\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 { SchematexDiagnostic } from \"../../core/diagnostics\";\nimport type { CircuitAST } from \"../../core/types\";\nimport { parseCircuit } from \"./parser\";\n\n/**\n * Circuit recoverable-input lint.\n *\n * The netlist parser no longer throws when a multi-terminal component is given\n * fewer nets than it has pins — it binds the missing pins to floating\n * no-connect nets and draws the part anyway. This surfaces that recovery as a\n * warning so the render reports `partial` and the author can wire the open\n * terminals, without ever blanking a schematic that is otherwise complete.\n */\nexport function lintCircuit(text: string): SchematexDiagnostic[] {\n let ast: CircuitAST;\n try {\n ast = parseCircuit(text);\n } catch {\n return [];\n }\n const out: SchematexDiagnostic[] = [];\n for (const u of ast.recovered?.underspecified ?? []) {\n out.push({\n severity: \"warning\",\n code: \"CIRCUIT_PIN_UNDERSPECIFIED\",\n message: `component ${u.id} (${u.type}) needs ${u.expected} nets but got ${u.got}; the missing terminal(s) were left floating`,\n hint: `Give ${u.id} all ${u.expected} net connections (e.g. a transformer is \\`${u.id} p1 p2 s1 s2 type=transformer\\`). Unconnected pins are drawn but not wired.`,\n fatal: false,\n });\n }\n return out;\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 = 96; // horizontal spacing per component\nconst ROW_H = 80; // vertical spacing per band (spine / shunt / ground)\nconst LEFT_MARGIN = 70;\nconst TOP_MARGIN = 56;\nconst SHUNT_OFFSET = 28; // x nudge when two shunts share a node\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 // Three bands, top→bottom: the SPINE row (sources on the left feeding a\n // horizontal chain of series/multi-pin components), a SHUNT band (two-pin\n // components with exactly one pin on ground drop vertically under the node\n // they tap, the textbook \"shunt leg\"), and the GROUND symbols underneath.\n // This reconstructs the conventional schematic idiom from the netlist instead\n // of dumping everything into one wide row.\n const isShunt = (c: CircuitComponent): boolean => {\n if (isPowerSource(c) || isGround(c)) return false;\n const pins = pinMap[c.id];\n if (!pins) return false;\n const nets = Object.values(pins);\n return nets.length === 2 && nets.filter((n) => n === \"GND\").length === 1;\n };\n\n const powerComps: CircuitComponent[] = [];\n const groundComps: CircuitComponent[] = [];\n const shuntComps: CircuitComponent[] = [];\n const middleComps: CircuitComponent[] = [];\n for (const c of ast.components) {\n if (isPowerSource(c)) powerComps.push(c);\n else if (isGround(c)) groundComps.push(c);\n else if (isShunt(c)) shuntComps.push(c);\n else middleComps.push(c);\n }\n const spine = [...powerComps, ...middleComps];\n\n // ── Step 4: place components ───────────────────────────────\n const placed = new Map<string, LaidOutComponent>();\n const items: LaidOutComponent[] = [];\n\n const place = (\n comp: CircuitComponent,\n x: number,\n y: number,\n fallbackDir?: \"right\" | \"left\" | \"up\" | \"down\"\n ): LaidOutComponent => {\n // Honor an explicit L2 hint (`dir=`); else the caller's band default; else role.\n const direction =\n comp.attrs?.dirExplicit === \"true\"\n ? comp.direction\n : fallbackDir ?? defaultDirection(comp);\n comp.direction = direction;\n const rot = rotationOf(direction);\n const sym = getSymbol(comp.componentType);\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 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 return laid;\n };\n\n if (spine.length === 0 && shuntComps.length === 0) {\n // Degenerate (e.g. only grounds): keep a single row.\n ast.components.forEach((comp, i) =>\n place(comp, LEFT_MARGIN + i * COL_W, TOP_MARGIN)\n );\n } else {\n // Spine row.\n const spineY = TOP_MARGIN;\n spine.forEach((comp, i) => place(comp, LEFT_MARGIN + i * COL_W, spineY));\n\n // Map each signal net to the x of a spine pin on it, so shunts can drop\n // directly beneath the node they tap.\n const spinePinX = new Map<string, number>();\n for (const comp of spine) {\n const pins = pinMap[comp.id];\n const laid = placed.get(comp.id);\n if (!pins || !laid) continue;\n for (const [pinName, net] of Object.entries(pins)) {\n if (net === \"GND\") continue;\n const a = laid.anchors[pinName];\n if (a && !spinePinX.has(net)) spinePinX.set(net, a.x);\n }\n }\n\n // Shunt band: each shunt vertical, beneath its tapped node.\n const shuntY = spineY + ROW_H;\n const sharedNode = new Map<number, number>();\n shuntComps.forEach((comp, idx) => {\n const pins = pinMap[comp.id]!;\n const sigNet = Object.values(pins).find((n) => n !== \"GND\");\n let x =\n (sigNet !== undefined ? spinePinX.get(sigNet) : undefined) ??\n LEFT_MARGIN + (spine.length + idx) * COL_W;\n const used = sharedNode.get(x) ?? 0;\n sharedNode.set(x, used + 1);\n x += used * SHUNT_OFFSET;\n place(comp, x, shuntY, \"down\");\n });\n\n // Ground symbols centered beneath everything.\n const baseY = shuntComps.length ? shuntY : spineY;\n const groundY = baseY + ROW_H;\n const xs = items.map((it) => it.x);\n const gx = xs.length ? (Math.min(...xs) + Math.max(...xs)) / 2 : LEFT_MARGIN;\n groundComps.forEach((comp, i) => place(comp, gx + i * COL_W, groundY, \"down\"));\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 { lintCircuit } from \"./lint\";\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 lint: lintCircuit,\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 { lintCircuit } from \"./lint\";\nexport { parseNetlist } from \"./netlist\";\nexport { renderCircuit } from \"./renderer\";\nexport { layoutCircuit } from \"./layout\";\nexport { layoutCircuitNetlist } from \"./autolayout\";\n"]}