@tscircuit/schematic-trace-solver 0.0.148 → 0.0.150

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 (164) hide show
  1. package/.agents/skills/schematic-trace-visualization/SKILL.md +7 -2
  2. package/dist/index.d.ts +31 -2
  3. package/dist/index.js +127 -46
  4. package/lib/solvers/InlineNetLabelSolver/InlineNetLabelSolver.ts +115 -6
  5. package/lib/solvers/NetLabelPlacementSolver/NetLabelPlacementSolver.ts +17 -1
  6. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/SingleNetLabelPlacementSolver.ts +2 -0
  7. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/solvePortOnlyPin.ts +2 -0
  8. package/lib/types/InputProblem.ts +27 -1
  9. package/package.json +8 -1
  10. package/site/examples/example51.page.tsx +4 -0
  11. package/tests/assets/example51.json +5102 -0
  12. package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +751 -5
  13. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +660 -5
  14. package/tests/bug-reports/bug-report-20260707T020342Z/__snapshots__/bug-report-20260707T020342Z.snap.svg +44 -5
  15. package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +394 -5
  16. package/tests/bug-reports/bug-report-20260707T134549Z/__snapshots__/bug-report-20260707T134549Z.snap.svg +170 -5
  17. package/tests/bug-reports/bug-report-20260707T134722Z/__snapshots__/bug-report-20260707T134722Z.snap.svg +79 -5
  18. package/tests/bug-reports/bug-report-20260707T140410Z/__snapshots__/bug-report-20260707T140410Z.snap.svg +219 -5
  19. package/tests/bug-reports/bug-report-20260707T141025Z/__snapshots__/bug-report-20260707T141025Z.snap.svg +65 -5
  20. package/tests/bug-reports/bug-report-20260707T141421Z/__snapshots__/bug-report-20260707T141421Z.snap.svg +142 -5
  21. package/tests/bug-reports/bug-report-20260707T230831Z/__snapshots__/bug-report-20260707T230831Z.snap.svg +100 -5
  22. package/tests/bug-reports/bug-report-20260708T053736Z/__snapshots__/bug-report-20260708T053736Z.snap.svg +23 -5
  23. package/tests/bug-reports/bug-report-20260708T055430Z/__snapshots__/bug-report-20260708T055430Z.snap.svg +58 -5
  24. package/tests/bug-reports/bug-report-20260708T095725Z/__snapshots__/bug-report-20260708T095725Z.snap.svg +86 -5
  25. package/tests/bug-reports/bug-report-20260716T144856Z/__snapshots__/bug-report-20260716T144856Z.snap.svg +226 -5
  26. package/tests/bug-reports/bug-report-20260717T022934Z/__snapshots__/bug-report-20260717T022934Z.snap.svg +191 -5
  27. package/tests/bug-reports/bug-report-20260717T031704Z/__snapshots__/bug-report-20260717T031704Z.snap.svg +30 -5
  28. package/tests/bug-reports/bug-report-20260717T042845Z/__snapshots__/bug-report-20260717T042845Z.snap.svg +37 -5
  29. package/tests/bug-reports/bug-report-20260721T221026Z/__snapshots__/bug-report-20260721T221026Z.snap.svg +580 -2
  30. package/tests/bug-reports/bug-report-20260724T175257Z/__snapshots__/bug-report-20260724T175257Z.snap.svg +44 -5
  31. package/tests/bug-reports/bug-report-20260728T144234Z/__snapshots__/bug-report-20260728T144234Z.snap.svg +107 -5
  32. package/tests/bug-reports/bug-report-20260728T225606Z/__snapshots__/bug-report-20260728T225606Z.snap.svg +114 -5
  33. package/tests/bug-reports/bug-report-20260730T061837Z/__snapshots__/bug-report-20260730T061837Z.snap.svg +121 -5
  34. package/tests/bug-reports/bug-report-20260731T052229Z/__snapshots__/bug-report-20260731T052229Z.snap.svg +51 -5
  35. package/tests/bug-reports/bug-report-20260804T095800Z/__snapshots__/bug-report-20260804T095800Z.snap.svg +212 -5
  36. package/tests/bug-reports/bug-report-20260804T171919Z/__snapshots__/bug-report-20260804T171919Z.snap.svg +569 -5
  37. package/tests/bug-reports/bug-report-20260804T225912Z/__snapshots__/bug-report-20260804T225912Z.snap.svg +37 -5
  38. package/tests/bug-reports/bug-report-20260805T061316Z/__snapshots__/bug-report-20260805T061316Z.snap.svg +289 -5
  39. package/tests/bug-reports/bug-report-20260806T061548Z/__snapshots__/bug-report-20260806T061548Z.snap.svg +289 -5
  40. package/tests/bug-reports/bug-report-20260806T093501Z/__snapshots__/bug-report-20260806T093501Z.snap.svg +149 -5
  41. package/tests/bug-reports/bug-report-20260811T075142Z/__snapshots__/bug-report-20260811T075142Z.snap.svg +93 -5
  42. package/tests/bug-reports/bug-report-20260815T073240Z/__snapshots__/bug-report-20260815T073240Z.snap.svg +79 -5
  43. package/tests/bug-reports/bug-report-20260819T091818Z/__snapshots__/bug-report-20260819T091818Z.snap.svg +244 -2
  44. package/tests/examples/__snapshots__/example01.snap.svg +44 -5
  45. package/tests/examples/__snapshots__/example02.snap.svg +51 -5
  46. package/tests/examples/__snapshots__/example03.snap.svg +86 -5
  47. package/tests/examples/__snapshots__/example04.snap.svg +30 -5
  48. package/tests/examples/__snapshots__/example05.snap.svg +30 -5
  49. package/tests/examples/__snapshots__/example06.snap.svg +30 -5
  50. package/tests/examples/__snapshots__/example07.snap.svg +58 -5
  51. package/tests/examples/__snapshots__/example08.snap.svg +37 -5
  52. package/tests/examples/__snapshots__/example09.snap.svg +149 -5
  53. package/tests/examples/__snapshots__/example10.snap.svg +65 -5
  54. package/tests/examples/__snapshots__/example11.snap.svg +51 -5
  55. package/tests/examples/__snapshots__/example12.snap.svg +51 -5
  56. package/tests/examples/__snapshots__/example13.snap.svg +72 -5
  57. package/tests/examples/__snapshots__/example14.snap.svg +79 -5
  58. package/tests/examples/__snapshots__/example15.snap.svg +86 -5
  59. package/tests/examples/__snapshots__/example16.snap.svg +51 -5
  60. package/tests/examples/__snapshots__/example17.snap.svg +51 -5
  61. package/tests/examples/__snapshots__/example18.snap.svg +58 -5
  62. package/tests/examples/__snapshots__/example19.snap.svg +44 -5
  63. package/tests/examples/__snapshots__/example20.snap.svg +44 -5
  64. package/tests/examples/__snapshots__/example21.snap.svg +72 -5
  65. package/tests/examples/__snapshots__/example22.snap.svg +51 -5
  66. package/tests/examples/__snapshots__/example23.snap.svg +51 -5
  67. package/tests/examples/__snapshots__/example24.snap.svg +51 -5
  68. package/tests/examples/__snapshots__/example25.snap.svg +86 -5
  69. package/tests/examples/__snapshots__/example26.snap.svg +51 -5
  70. package/tests/examples/__snapshots__/example27.snap.svg +72 -5
  71. package/tests/examples/__snapshots__/example28.snap.svg +44 -5
  72. package/tests/examples/__snapshots__/example29.snap.svg +324 -5
  73. package/tests/examples/__snapshots__/example30.snap.svg +107 -5
  74. package/tests/examples/__snapshots__/example31.snap.svg +37 -5
  75. package/tests/examples/__snapshots__/example32.snap.svg +149 -5
  76. package/tests/examples/__snapshots__/example33.snap.svg +93 -5
  77. package/tests/examples/__snapshots__/example34.snap.svg +51 -5
  78. package/tests/examples/__snapshots__/example35.snap.svg +58 -5
  79. package/tests/examples/__snapshots__/example36.snap.svg +44 -5
  80. package/tests/examples/__snapshots__/example37.snap.svg +72 -5
  81. package/tests/examples/__snapshots__/example38.snap.svg +30 -5
  82. package/tests/examples/__snapshots__/example39.snap.svg +37 -5
  83. package/tests/examples/__snapshots__/example40.snap.svg +100 -5
  84. package/tests/examples/__snapshots__/example41.snap.svg +44 -5
  85. package/tests/examples/__snapshots__/example42.snap.svg +65 -5
  86. package/tests/examples/__snapshots__/example43.snap.svg +58 -5
  87. package/tests/examples/__snapshots__/example44.snap.svg +107 -5
  88. package/tests/examples/__snapshots__/example45.snap.svg +51 -5
  89. package/tests/examples/__snapshots__/example46.snap.svg +93 -5
  90. package/tests/examples/__snapshots__/example47.snap.svg +93 -5
  91. package/tests/examples/__snapshots__/example48.snap.svg +65 -5
  92. package/tests/examples/__snapshots__/example49.snap.svg +177 -5
  93. package/tests/examples/__snapshots__/example50.snap.svg +93 -5
  94. package/tests/examples/__snapshots__/example51.snap.svg +952 -0
  95. package/tests/examples/example51.test.ts +12 -0
  96. package/tests/fixtures/convertSolverOutputToCircuitJson.test.ts +219 -0
  97. package/tests/fixtures/convertSolverOutputToCircuitJson.ts +1058 -0
  98. package/tests/fixtures/matcher.ts +45 -8
  99. package/tests/repros/__snapshots__/board-1273-trace-overlap-cycle.snap.svg +762 -2
  100. package/tests/repros/__snapshots__/board-15984-same-net-junction.snap.svg +111 -2
  101. package/tests/repros/__snapshots__/board1096-usb-label-overlap-iteration.snap.svg +167 -2
  102. package/tests/repros/__snapshots__/bugreport-001-gnd-overlap.snap.svg +65 -5
  103. package/tests/repros/__snapshots__/manufacturePartNumber-text-box.snap.svg +30 -5
  104. package/tests/repros/__snapshots__/netlabel-connector-through-rail-label.snap.svg +79 -5
  105. package/tests/repros/__snapshots__/repro-atmega328p-fault-pullup.snap.svg +65 -5
  106. package/tests/repros/__snapshots__/repro-atmega328p-missing-gnd-netlabel.snap.svg +149 -5
  107. package/tests/repros/__snapshots__/repro-board-589-regulator-section.snap.svg +55 -2
  108. package/tests/repros/__snapshots__/repro-board-648-esp12f-section.snap.svg +160 -2
  109. package/tests/repros/__snapshots__/repro-bq24074-battery-charger.snap.svg +135 -5
  110. package/tests/repros/__snapshots__/repro-bq25895-cross-net-trace-overlap.snap.svg +69 -2
  111. package/tests/repros/__snapshots__/repro-cc2340r5.snap.svg +86 -5
  112. package/tests/repros/__snapshots__/repro-core-555-power-cross-net-overlap.snap.svg +44 -5
  113. package/tests/repros/__snapshots__/repro-core-subcircuit-missing-ground.snap.svg +44 -5
  114. package/tests/repros/__snapshots__/repro-core-tb67s579ftg-inline-label-routing.snap.svg +260 -0
  115. package/tests/repros/__snapshots__/repro-example35-minimize-trace-crossing.snap.svg +335 -2
  116. package/tests/repros/__snapshots__/repro-ground-label-on-lower-rail-end.snap.svg +48 -2
  117. package/tests/repros/__snapshots__/repro-ina237-current-monitor.snap.svg +149 -5
  118. package/tests/repros/__snapshots__/repro-missing-trace-netlabel.snap.svg +72 -5
  119. package/tests/repros/__snapshots__/repro-netlabel-collision-687.snap.svg +100 -5
  120. package/tests/repros/__snapshots__/repro-netlabel-overlap-trace.snap.svg +51 -5
  121. package/tests/repros/__snapshots__/repro-nrf52810-clock-routing.snap.svg +90 -2
  122. package/tests/repros/__snapshots__/repro-power-group-rail-labels.snap.svg +37 -5
  123. package/tests/repros/__snapshots__/repro-rectifier-trace-overlap.snap.svg +44 -5
  124. package/tests/repros/__snapshots__/repro-rp2040-gamepad-trace-alignment.snap.svg +237 -2
  125. package/tests/repros/__snapshots__/repro-rp2040-usb-cc2-ground-overlap.snap.svg +72 -5
  126. package/tests/repros/__snapshots__/repro-rp2040-v3v3-label-placement.snap.svg +51 -5
  127. package/tests/repros/__snapshots__/repro-rp2040-zero-crystal-fallback-netlabels.snap.svg +30 -5
  128. package/tests/repros/__snapshots__/repro-ti-power-output-section.snap.svg +79 -5
  129. package/tests/repros/__snapshots__/repro-tida010076-j4-ground-bus.snap.svg +27 -2
  130. package/tests/repros/__snapshots__/repro-tida010076-page02.snap.svg +1150 -5
  131. package/tests/repros/__snapshots__/repro-tps61222-trace-intersection.snap.svg +51 -5
  132. package/tests/repros/__snapshots__/repro-type-c-16pin-self-connection.snap.svg +30 -5
  133. package/tests/repros/__snapshots__/repro-type-c-16pin-to-resistor.snap.svg +30 -5
  134. package/tests/repros/__snapshots__/repro-type-c-vbus-led-ground-label.snap.svg +44 -5
  135. package/tests/repros/__snapshots__/repro-usb-power-vbus-label-detour.snap.svg +685 -2
  136. package/tests/repros/__snapshots__/repro-vcc-pin1-detour.snap.svg +27 -2
  137. package/tests/repros/__snapshots__/repro129-host-custom-symbol-passives.snap.svg +51 -5
  138. package/tests/repros/__snapshots__/repro130-bq27441-fuel-gauge-trace-through-c1.snap.svg +100 -5
  139. package/tests/repros/__snapshots__/repro161-power-section-autolayout.snap.svg +107 -5
  140. package/tests/repros/__snapshots__/repro47-endpoint-obstacle-detour.snap.svg +51 -5
  141. package/tests/repros/__snapshots__/repro48-555-timer-vcc-rail-label.snap.svg +104 -2
  142. package/tests/repros/__snapshots__/repro5-escape-padded-text-obstacles.snap.svg +30 -5
  143. package/tests/repros/__snapshots__/repro51-overlap-junction-crossing.snap.svg +65 -5
  144. package/tests/repros/__snapshots__/repro84-stacked-gnd-label-orientation.snap.svg +27 -2
  145. package/tests/repros/__snapshots__/small-variant-resistor-facing-direction.snap.svg +58 -5
  146. package/tests/repros/__snapshots__/trace-overlap-box-resistor.snap.svg +37 -5
  147. package/tests/repros/assets/repro-core-tb67s579ftg-inline-label-routing.input.json +900 -0
  148. package/tests/repros/repro-core-tb67s579ftg-inline-label-routing.test.ts +40 -0
  149. package/tests/solvers/InlineNetLabelSolver/__snapshots__/fallback-net-label-width.snap.svg +25 -7
  150. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-anchored-label-clearance.snap.svg +34 -2
  151. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-port-stub.snap.svg +23 -5
  152. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-two-pin-net.snap.svg +23 -5
  153. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label01.snap.svg +23 -5
  154. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label02.snap.svg +23 -5
  155. package/tests/solvers/InlineNetLabelSolver/__snapshots__/terminal-stub-trace-clearance.snap.svg +71 -0
  156. package/tests/solvers/InlineNetLabelSolver/fallback-net-label-width.test.ts +10 -1
  157. package/tests/solvers/InlineNetLabelSolver/terminal-stub-trace-clearance.test.ts +102 -0
  158. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_01-example17-d1_1-u1_1.snap.svg +23 -5
  159. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_repro47-short-opposing-pins.snap.svg +20 -2
  160. package/tests/solvers/TraceCleanupSolver/__snapshots__/TraceCleanupSolver.snap.svg +44 -5
  161. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +79 -5
  162. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +44 -5
  163. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +23 -5
  164. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/SingleOverlapSolver.snap.svg +30 -5
@@ -1,4 +1,6 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-1.2000000000000002,0.10000000000000003 -1.9000000000000004,0.10000000000000002" data-type="line" data-label="" points="215,302.5 153.74999999999997,302.5" fill="none" stroke="hsl(296, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.09999999999999998 -1.2000000000000002,-0.30000000000000004" data-type="line" data-label="" points="215,320 215,337.5" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.9000000000000004,-0.10000000000000002 1.2000000000000002,-0.10000000000000003" data-type="line" data-label="" points="486.25,320 425,320" fill="none" stroke="hsl(248, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-0.10000000000000003 1.2000000000000002,-1.2944553500000002" data-type="line" data-label="" points="425,320 425,424.514843125" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="0.10000000000000009,-1.2944553500000002 -1.2000000000000002,-0.09999999999999998" data-type="line" data-label="" points="328.75,424.514843125 215,320" fill="none" stroke="hsl(104, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.09999999999999998 -1.2000000000000002,-1.1500000000000001" data-type="line" data-label="" points="215,320 215,411.875" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.09999999999999998 1.2000000000000002,1.1500000000000001" data-type="line" data-label="" points="425,302.5 425,210.625" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 -1.2000000000000002,-2.25" data-type="line" data-label="" points="425,337.5 215,508.125" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 -3,0.10000000000000016" data-type="line" data-label="" points="425,337.5 57.5,302.5" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,-2.25 -3,0.10000000000000016" data-type="line" data-label="" points="215,508.125 57.5,302.5" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,0.30000000000000004 1.2000000000000002,0.30000000000000004" data-type="line" data-label="" points="215,285 425,285" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,0.30000000000000004 3,-0.10000000000000016" data-type="line" data-label="" points="215,285 582.5,320" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 3,-0.10000000000000016" data-type="line" data-label="" points="425,285 582.5,320" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,0.10000000000000003 -1.9000000000000004,0.10000000000000002" data-type="line" data-label="" points="215,302.5 153.74999999999997,302.5" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.30000000000000004 -1.4000000000000001,-0.30000000000000004 -1.4000000000000001,-0.7250000000000001 -1.2000000000000002,-0.7250000000000001 -1.2000000000000002,-1.1500000000000001" data-type="line" data-label="" points="215,337.5 197.5,337.5 197.5,374.6875 215,374.6875 215,411.875" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.09999999999999998 -1.4000000000000001,-0.09999999999999998 -1.4000000000000001,-0.30000000000000004 -1.2000000000000002,-0.30000000000000004" data-type="line" data-label="" points="215,320 197.5,320 197.5,337.5 215,337.5" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.09999999999999987,-1.2944553500000002 -0.55,-1.2944553500000002 -0.55,-0.9500000000000002 -1.2000000000000002,-0.9500000000000002 -1.2000000000000002,-1.1500000000000001" data-type="line" data-label="" points="328.75,424.514843125 271.875,424.514843125 271.875,394.375 215,394.375 215,411.875" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-0.10000000000000003 1.9000000000000004,-0.10000000000000002" data-type="line" data-label="" points="425,320 486.25,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-1.2944553500000002 1.4000000000000001,-1.2944553500000002 1.4000000000000001,-0.10000000000000003 1.2000000000000002,-0.10000000000000003" data-type="line" data-label="" points="425,424.514843125 442.5,424.514843125 442.5,320 425,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.09999999999999998 1.4000000000000001,0.09999999999999998 1.4000000000000001,0.625 1.2000000000000002,0.625 1.2000000000000002,1.1500000000000001" data-type="line" data-label="" points="425,302.5 442.5,302.5 442.5,256.5625 425,256.5625 425,210.625" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 3.2,0.30000000000000004 3.2,-0.10000000000000016 3,-0.10000000000000016" data-type="line" data-label="" points="425,285 600,285 600,320 582.5,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-2.25 -1.2000000000000002,-2.45 -3.2,-2.45 -3.2,0.10000000000000016 -3,0.10000000000000016" data-type="line" data-label="" points="215,508.125 215,525.625 40,525.625 40,302.5 57.5,302.5" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="215" y="267.5" width="210" height="87.5" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="2.45" data-y="-0.10000000000000009" x="486.25" y="302.98515687500003" width="96.25" height="34.02968624999994" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="0.6500000000000001" data-y="-1.2944553500000002" x="328.75" y="407.5000000000001" width="96.25" height="34.029686249999884" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="-1.2000000000000002" data-y="-1.7000000000000002" x="168.625" y="411.875" width="92.75000000000003" height="96.25" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="-2.45" data-y="0.10000000000000009" x="57.499999999999986" y="265.75" width="96.24999999999997" height="73.5" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_5" data-x="1.2000000000000002" data-y="1.7000000000000002" x="378.625" y="114.37499999999997" width="92.75" height="96.25" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><circle data-type="point" data-label="U1.1
1
+ <svg width="2416" height="1200" viewBox="0 0 2416 1200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solver debug visualization on the left and Circuit JSON schematic on the right">
2
+ <g transform="translate(0, 0) scale(1.875, 1.875) translate(0, 0)">
3
+ <rect width="100%" height="100%" fill="white"/><g><polyline data-points="-1.2000000000000002,0.10000000000000003 -1.9000000000000004,0.10000000000000002" data-type="line" data-label="" points="215,302.5 153.74999999999997,302.5" fill="none" stroke="hsl(296, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.09999999999999998 -1.2000000000000002,-0.30000000000000004" data-type="line" data-label="" points="215,320 215,337.5" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.9000000000000004,-0.10000000000000002 1.2000000000000002,-0.10000000000000003" data-type="line" data-label="" points="486.25,320 425,320" fill="none" stroke="hsl(248, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-0.10000000000000003 1.2000000000000002,-1.2944553500000002" data-type="line" data-label="" points="425,320 425,424.514843125" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="0.10000000000000009,-1.2944553500000002 -1.2000000000000002,-0.09999999999999998" data-type="line" data-label="" points="328.75,424.514843125 215,320" fill="none" stroke="hsl(104, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.09999999999999998 -1.2000000000000002,-1.1500000000000001" data-type="line" data-label="" points="215,320 215,411.875" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.09999999999999998 1.2000000000000002,1.1500000000000001" data-type="line" data-label="" points="425,302.5 425,210.625" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 -1.2000000000000002,-2.25" data-type="line" data-label="" points="425,337.5 215,508.125" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 -3,0.10000000000000016" data-type="line" data-label="" points="425,337.5 57.5,302.5" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,-2.25 -3,0.10000000000000016" data-type="line" data-label="" points="215,508.125 57.5,302.5" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,0.30000000000000004 1.2000000000000002,0.30000000000000004" data-type="line" data-label="" points="215,285 425,285" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,0.30000000000000004 3,-0.10000000000000016" data-type="line" data-label="" points="215,285 582.5,320" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 3,-0.10000000000000016" data-type="line" data-label="" points="425,285 582.5,320" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2000000000000002,0.10000000000000003 -1.9000000000000004,0.10000000000000002" data-type="line" data-label="" points="215,302.5 153.74999999999997,302.5" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.30000000000000004 -1.4000000000000001,-0.30000000000000004 -1.4000000000000001,-0.7250000000000001 -1.2000000000000002,-0.7250000000000001 -1.2000000000000002,-1.1500000000000001" data-type="line" data-label="" points="215,337.5 197.5,337.5 197.5,374.6875 215,374.6875 215,411.875" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-0.09999999999999998 -1.4000000000000001,-0.09999999999999998 -1.4000000000000001,-0.30000000000000004 -1.2000000000000002,-0.30000000000000004" data-type="line" data-label="" points="215,320 197.5,320 197.5,337.5 215,337.5" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.09999999999999987,-1.2944553500000002 -0.55,-1.2944553500000002 -0.55,-0.9500000000000002 -1.2000000000000002,-0.9500000000000002 -1.2000000000000002,-1.1500000000000001" data-type="line" data-label="" points="328.75,424.514843125 271.875,424.514843125 271.875,394.375 215,394.375 215,411.875" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-0.10000000000000003 1.9000000000000004,-0.10000000000000002" data-type="line" data-label="" points="425,320 486.25,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,-1.2944553500000002 1.4000000000000001,-1.2944553500000002 1.4000000000000001,-0.10000000000000003 1.2000000000000002,-0.10000000000000003" data-type="line" data-label="" points="425,424.514843125 442.5,424.514843125 442.5,320 425,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.09999999999999998 1.4000000000000001,0.09999999999999998 1.4000000000000001,0.625 1.2000000000000002,0.625 1.2000000000000002,1.1500000000000001" data-type="line" data-label="" points="425,302.5 442.5,302.5 442.5,256.5625 425,256.5625 425,210.625" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 3.2,0.30000000000000004 3.2,-0.10000000000000016 3,-0.10000000000000016" data-type="line" data-label="" points="425,285 600,285 600,320 582.5,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2000000000000002,-2.25 -1.2000000000000002,-2.45 -3.2,-2.45 -3.2,0.10000000000000016 -3,0.10000000000000016" data-type="line" data-label="" points="215,508.125 215,525.625 40,525.625 40,302.5 57.5,302.5" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="215" y="267.5" width="210" height="87.5" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="2.45" data-y="-0.10000000000000009" x="486.25" y="302.98515687500003" width="96.25" height="34.02968624999994" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="0.6500000000000001" data-y="-1.2944553500000002" x="328.75" y="407.5000000000001" width="96.25" height="34.029686249999884" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="-1.2000000000000002" data-y="-1.7000000000000002" x="168.625" y="411.875" width="92.75000000000003" height="96.25" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="-2.45" data-y="0.10000000000000009" x="57.499999999999986" y="265.75" width="96.24999999999997" height="73.5" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><rect data-type="rect" data-label="schematic_component_5" data-x="1.2000000000000002" data-y="1.7000000000000002" x="378.625" y="114.37499999999997" width="92.75" height="96.25" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011428571428571429"/></g><g><circle data-type="point" data-label="U1.1
2
4
  x+" data-x="1.2000000000000002" data-y="-0.30000000000000004" cx="425" cy="337.5" r="3" fill="hsl(319, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.2
3
5
  x-" data-x="-1.2000000000000002" data-y="-0.30000000000000004" cx="215" cy="337.5" r="3" fill="hsl(320, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.3
4
6
  x+" data-x="1.2000000000000002" data-y="0.09999999999999998" cx="425" cy="302.5" r="3" fill="hsl(321, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.4
@@ -26,7 +28,7 @@ y+" data-x="1.2000000000000002" data-y="2.25" cx="425" cy="114.375" r="3" fill="
26
28
  const h = svg.getElementById('crosshair-h');
27
29
  const v = svg.getElementById('crosshair-v');
28
30
  const coords = svg.getElementById('coordinates');
29
-
31
+
30
32
  crosshair.style.display = 'block';
31
33
  h.setAttribute('x1', '0');
32
34
  h.setAttribute('x2', '640');
@@ -45,13 +47,13 @@ y+" data-x="1.2000000000000002" data-y="2.25" cx="425" cy="114.375" r="3" fill="
45
47
  // y' = (y - ty) / sy
46
48
  const sx = matrix.a;
47
49
  const sy = matrix.d;
48
- const tx = matrix.e;
50
+ const tx = matrix.e;
49
51
  const ty = matrix.f;
50
52
  const realPoint = {
51
53
  x: (x - tx) / sx,
52
54
  y: (y - ty) / sy // Flip y back since we used negative scale
53
55
  }
54
-
56
+
55
57
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
56
58
  coords.setAttribute('x', (x + 5).toString());
57
59
  coords.setAttribute('y', (y - 5).toString());
@@ -59,4 +61,20 @@ y+" data-x="1.2000000000000002" data-y="2.25" cx="425" cy="114.375" r="3" fill="
59
61
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
60
62
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
61
63
  });
62
- ]]></script></svg>
64
+ ]]></script>
65
+ </g>
66
+ <g transform="translate(1216, 200)">
67
+ <style>
68
+ .boundary { fill: rgb(245, 241, 237); }
69
+ .schematic-boundary { fill: none; stroke: #fff; }
70
+ .component { fill: none; stroke: rgb(132, 0, 0); }
71
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
72
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
73
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
74
+ .pin-number { fill: rgb(169, 0, 0); }
75
+ .port-label { fill: rgb(0, 100, 100); }
76
+ .component-name { fill: rgb(0, 100, 100); }
77
+
78
+ </style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 424.5614035088 350.8771929825 L 326.31578947369997 350.8771929825" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 424.5614035088 350.8771929825 L 326.31578947369997 350.8771929825" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><path d="M 424.5614035088 407.0175438597 L 396.4912280702 407.0175438597 L 396.4912280702 466.666666666725 L 424.5614035088 466.666666666725 L 424.5614035088 526.31578947375" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 424.5614035088 407.0175438597 L 396.4912280702 407.0175438597 L 396.4912280702 466.666666666725 L 424.5614035088 466.666666666725 L 424.5614035088 526.31578947375" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"><path d="M 424.5614035088 378.9473684211 L 396.4912280702 378.9473684211 L 396.4912280702 407.0175438597 L 424.5614035088 407.0175438597" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 424.5614035088 378.9473684211 L 396.4912280702 378.9473684211 L 396.4912280702 407.0175438597 L 424.5614035088 407.0175438597" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"><path d="M 607.0175438597 546.5902245614718 L 515.78947368425 546.5902245614718 L 515.78947368425 498.24561403515 L 424.5614035088 498.24561403515 L 424.5614035088 526.31578947375" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 607.0175438597 546.5902245614718 L 515.78947368425 546.5902245614718 L 515.78947368425 498.24561403515 L 424.5614035088 498.24561403515 L 424.5614035088 526.31578947375" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"><path d="M 761.403508772 378.9473684211 L 859.6491228071001 378.9473684211" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 761.403508772 378.9473684211 L 859.6491228071001 378.9473684211" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_5__stack1"><path d="M 761.403508772 546.5902245614718 L 789.4736842106 546.5902245614718 L 789.4736842106 378.9473684211 L 761.403508772 378.9473684211" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 761.403508772 546.5902245614718 L 789.4736842106 546.5902245614718 L 789.4736842106 378.9473684211 L 761.403508772 378.9473684211" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_6__stack1"><path d="M 761.403508772 350.8771929825 L 789.4736842106 350.8771929825 L 789.4736842106 277.192982456175 L 761.403508772 277.192982456175 L 761.403508772 203.50877192984998" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 761.403508772 350.8771929825 L 789.4736842106 350.8771929825 L 789.4736842106 277.192982456175 L 761.403508772 277.192982456175 L 761.403508772 203.50877192984998" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_7__stack1"><path d="M 761.403508772 322.8070175439 L 1042.105263158 322.8070175439 L 1042.105263158 378.9473684211 L 1014.0350877194 378.9473684211" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 761.403508772 322.8070175439 L 1042.105263158 322.8070175439 L 1042.105263158 378.9473684211 L 1014.0350877194 378.9473684211" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_8__stack1"><path d="M 424.5614035088 680.70175438605 L 424.5614035088 708.77192982465 L 143.85964912279996 708.77192982465 L 143.85964912279996 350.8771929825 L 171.92982456139998 350.8771929825" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="22.456140350880002px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 424.5614035088 680.70175438605 L 424.5614035088 708.77192982465 L 143.85964912279996 708.77192982465 L 143.85964912279996 350.8771929825 L 171.92982456139998 350.8771929825" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><circle cx="424.5614035088" cy="407.0175438597" r="4.21052631579" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/><circle cx="396.4912280702" cy="407.0175438597" r="4.21052631579" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/><circle cx="424.5614035088" cy="526.31578947375" r="4.21052631579" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"><circle cx="761.403508772" cy="378.9473684211" r="4.21052631579" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_5__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_6__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_7__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_8__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component chip sch-component-body" x="480.701754386" y="294.7368421053" width="224.56140350880008" height="140.35087719299997" stroke-width="2.8070175438600002px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="480.701754386" y="294.7368421053" width="224.56140350880008" height="140.35087719299997" fill="transparent"/><text class="sch-text" x="592.9824561404" y="364.9122807018" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="25.26315789474px" transform="rotate(0, 592.9824561404, 364.9122807018)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="705.2631578948001" y1="407.0175438597" x2="758.59649122814" y2="407.0175438597" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="761.403508772" cy="407.0175438597" r="2.8070175438600002" stroke-width="2.8070175438600002px"/><rect x="758.59649122814" y="404.21052631584" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="733.3333333334001" y="404.21052631584" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="480.701754386" y1="407.0175438597" x2="424.5614035088" y2="407.0175438597" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><rect x="421.75438596494" y="404.21052631584" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="452.6315789474" y="404.21052631584" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="705.2631578948001" y1="350.8771929825" x2="761.403508772" y2="350.8771929825" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><rect x="758.59649122814" y="348.07017543864" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="733.3333333334001" y="348.07017543864" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="480.701754386" y1="322.8070175439" x2="427.36842105266" y2="322.8070175439" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="424.5614035088" cy="322.8070175439" r="2.8070175438600002" stroke-width="2.8070175438600002px"/><rect x="421.75438596494" y="320.00000000003996" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="452.6315789474" y="320.00000000004" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="480.701754386" y1="350.8771929825" x2="424.5614035088" y2="350.8771929825" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><rect x="421.75438596494" y="348.07017543864" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="452.6315789474" y="348.07017543864" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="480.701754386" y1="378.9473684211" x2="424.5614035088" y2="378.9473684211" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><rect x="421.75438596494" y="376.14035087724" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="452.6315789474" y="376.14035087724" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="705.2631578948001" y1="378.9473684211" x2="761.403508772" y2="378.9473684211" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><rect x="758.59649122814" y="376.14035087724" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="733.3333333334001" y="376.14035087724" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">7</text><line class="component-pin sch-component-pin sch-port-line" x1="705.2631578948001" y1="322.8070175439" x2="761.403508772" y2="322.8070175439" stroke-width="2.8070175438600002px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><rect x="758.59649122814" y="320.00000000003996" width="5.6140350877200005" height="5.6140350877200005" opacity="0"/></g><text class="pin-number sch-pin-number" x="733.3333333334001" y="320.00000000004" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="21.05263157895px" transform="">8</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component-overlay sch-component-overlay" x="859.6491228071001" y="358.3677192982904" width="154.38596491229987" height="41.1592982456192" fill="transparent"/><path class="sch-component-symbol-path" d="M 1014.0350877193999 378.9473684211 L 988.2989473685195 378.9473684211" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 885.3852631579805 378.9473684211 L 859.6491228071001 378.9473684211" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 988.2989473685195 399.5270175439096 L 885.3852631579805 399.5270175439096 L 885.3852631579805 358.3677192982904 L 988.2989473685195 358.3677192982904 L 988.2989473685195 399.5270175439096" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="936.84210526325" y="337.77777777782" stroke="rgb(245, 241, 237)" stroke-width="2.8070175438600002px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="25.26315789474px">R1</text><text class="sch-component-text" x="936.84210526325" y="420.11695906438" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="25.26315789474px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component-overlay sch-component-overlay" x="607.0175438597" y="526.0105754386623" width="154.3859649123001" height="41.159298245619084" fill="transparent"/><path class="sch-component-symbol-path" d="M 761.4035087720001 546.5902245614718 L 735.6673684211197 546.5902245614718" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 632.7536842105804 546.5902245614718 L 607.0175438597 546.5902245614718" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 735.6673684211197 567.1698736842814 L 632.7536842105804 567.1698736842814 L 632.7536842105804 526.0105754386623 L 735.6673684211197 526.0105754386623 L 735.6673684211197 567.1698736842814" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="684.2105263158501" y="505.4206339181918" stroke="rgb(245, 241, 237)" stroke-width="2.8070175438600002px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="25.26315789474px">R2</text><text class="sch-component-text" x="684.2105263158501" y="587.7598152047518" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="25.26315789474px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_3__stack1"><rect class="component-overlay sch-component-overlay" x="383.3866666666896" y="526.3157894737501" width="82.34947368422081" height="154.38596491229987" fill="transparent"/><path class="sch-component-symbol-path" d="M 424.5614035088 680.70175438605 L 424.5614035088 618.94736842113" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 424.5614035088 588.07017543867 L 424.5614035088 526.3157894737501" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 465.73614035091043 618.94736842113 L 383.3866666666896 618.94736842113" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 465.73614035091043 588.07017543867 L 383.3866666666896 588.07017543867" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="454.1520467836575" y="552.0467836258" stroke="rgb(245, 241, 237)" stroke-width="2.8070175438600002px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="25.26315789474px">C1</text><text class="sch-component-text" x="454.1520467836575" y="654.9707602340001" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="25.26315789474px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_4__stack1"><rect class="component-overlay sch-component-overlay" x="171.9298245614" y="309.7024561403896" width="154.38596491229995" height="82.34947368422081" fill="transparent"/><path class="sch-component-symbol-path" d="M 326.31578947369997 350.8771929825 L 264.56140350877996 350.8771929825" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 233.68421052632 350.8771929825 L 171.9298245614 350.8771929825" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 264.56140350877996 309.7024561403896 L 264.56140350877996 392.0519298246104" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 233.68421052632 309.7024561403896 L 233.68421052632 392.0519298246104" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="249.12280701754997" y="289.12280701758004" stroke="rgb(245, 241, 237)" stroke-width="2.8070175438600002px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="25.26315789474px">C2</text><text class="sch-component-text" x="249.12280701754997" y="412.63157894741994" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="25.26315789474px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_5__stack1"><rect class="component-overlay sch-component-overlay" x="740.8238596491905" y="49.12280701755" width="41.159298245619084" height="154.38596491229998" fill="transparent"/><path class="sch-component-symbol-path" d="M 761.403508772 203.50877192984998 L 761.403508772 177.7726315789696" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 761.403508772 74.8589473684304 L 761.403508772 49.12280701755" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 740.8238596491905 177.7726315789696 L 740.8238596491905 74.8589473684304 L 781.9831578948096 74.8589473684304 L 781.9831578948096 177.7726315789696 L 740.8238596491905 177.7726315789696" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.8070175438600002px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="802.57309941528" y="85.14619883041999" stroke="rgb(245, 241, 237)" stroke-width="2.8070175438600002px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="middle" font-size="25.26315789474px">R3</text><text class="sch-component-text" x="802.57309941528" y="167.48538011698" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="middle" font-size="25.26315789474px"></text><circle class="component-pin sch-component-pin" cx="761.403508772" cy="49.12280701755" r="2.8070175438600002px" stroke-width="2.8070175438600002px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="761.403508772" cy="407.0175438597" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="424.5614035088" cy="407.0175438597" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="761.403508772" cy="350.8771929825" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="424.5614035088" cy="322.8070175439" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="424.5614035088" cy="350.8771929825" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="424.5614035088" cy="378.9473684211" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="761.403508772" cy="378.9473684211" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="761.403508772" cy="322.8070175439" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="1049.12280701765" cy="378.9473684211" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="894.7368421053501" cy="378.9473684211" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="796.49122807025" cy="546.5902245614718" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="642.10526315795" cy="546.5902245614718" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_0__stack1"><circle cx="424.5614035088" cy="561.403508772" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_1__stack1"><circle cx="424.5614035088" cy="715.7894736843" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_4_0__stack1"><circle cx="361.40350877194993" cy="350.8771929825" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_4_1__stack1"><circle cx="207.01754385965" cy="350.8771929825" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_5_0__stack1"><circle cx="761.403508772" cy="238.59649122809998" r="5.6140350877200005" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_5_1__stack1"><circle cx="761.403508772" cy="84.2105263158" r="5.6140350877200005" fill="red" opacity="0"/></g>
79
+ </g>
80
+ </svg>
@@ -1,4 +1,6 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="1.2000000000000002,-0.30000000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 353.6,465.31999999999994" fill="none" stroke="hsl(157, 100%, 50%, 0.1)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 1.6,-1.895" data-type="line" data-label="" points="308.80000000000007,174.68 353.6,420.52" fill="none" stroke="hsl(190, 100%, 50%, 0.1)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 1.4000000000000001,-0.30000000000000004 1.4000000000000001,-1.2974999999999999 1.4000000000000001,-2.295 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 331.20000000000005,241.88 331.20000000000005,353.6 331.20000000000005,465.31999999999994 353.6,465.31999999999994" fill="none" stroke="red" stroke-width="1px" stroke-dasharray="4 4"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 1.4000000000000001,-0.30000000000000004 1.4000000000000001,-1.6949999999999998 1.049,-1.6949999999999998 1.049,-2.2950000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 331.20000000000005,241.88 331.20000000000005,398.12 291.88800000000003,398.12 291.88800000000003,465.32000000000005 353.6,465.31999999999994" fill="none" stroke="green" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="40" y="152.28000000000003" width="268.80000000000007" height="111.99999999999997" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="2.7" data-y="-2.095" x="353.6000000000001" y="398.12" width="246.39999999999998" height="89.60000000000002" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="" data-x="1.374" data-y="-1.995" x="303.08799999999997" y="409.32000000000005" width="50.400000000000034" height="44.80000000000001" fill="rgba(255, 0, 0, 0.2)" stroke="black" stroke-width="0.008928571428571428"/></g><g><circle data-type="point" data-label="U1.1
1
+ <svg width="2416" height="1200" viewBox="0 0 2416 1200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solver debug visualization on the left and Circuit JSON schematic on the right">
2
+ <g transform="translate(0, 0) scale(1.875, 1.875) translate(0, 0)">
3
+ <rect width="100%" height="100%" fill="white"/><g><polyline data-points="1.2000000000000002,-0.30000000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 353.6,465.31999999999994" fill="none" stroke="hsl(157, 100%, 50%, 0.1)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 1.6,-1.895" data-type="line" data-label="" points="308.80000000000007,174.68 353.6,420.52" fill="none" stroke="hsl(190, 100%, 50%, 0.1)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 1.4000000000000001,-0.30000000000000004 1.4000000000000001,-1.2974999999999999 1.4000000000000001,-2.295 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 331.20000000000005,241.88 331.20000000000005,353.6 331.20000000000005,465.31999999999994 353.6,465.31999999999994" fill="none" stroke="red" stroke-width="1px" stroke-dasharray="4 4"/></g><g><polyline data-points="1.2000000000000002,-0.30000000000000004 1.4000000000000001,-0.30000000000000004 1.4000000000000001,-1.6949999999999998 1.049,-1.6949999999999998 1.049,-2.2950000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 331.20000000000005,241.88 331.20000000000005,398.12 291.88800000000003,398.12 291.88800000000003,465.32000000000005 353.6,465.31999999999994" fill="none" stroke="green" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="40" y="152.28000000000003" width="268.80000000000007" height="111.99999999999997" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="2.7" data-y="-2.095" x="353.6000000000001" y="398.12" width="246.39999999999998" height="89.60000000000002" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="" data-x="1.374" data-y="-1.995" x="303.08799999999997" y="409.32000000000005" width="50.400000000000034" height="44.80000000000001" fill="rgba(255, 0, 0, 0.2)" stroke="black" stroke-width="0.008928571428571428"/></g><g><circle data-type="point" data-label="U1.1
2
4
  x+" data-x="1.2000000000000002" data-y="-0.30000000000000004" cx="308.80000000000007" cy="241.88" r="3" fill="hsl(319, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.2
3
5
  x-" data-x="-1.2000000000000002" data-y="-0.30000000000000004" cx="40" cy="241.88" r="3" fill="hsl(320, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.3
4
6
  x+" data-x="1.2000000000000002" data-y="0.09999999999999998" cx="308.80000000000007" cy="197.08" r="3" fill="hsl(321, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.4
@@ -19,7 +21,7 @@ x-" data-x="1.6" data-y="-2.295" cx="353.6" cy="465.31999999999994" r="3" fill="
19
21
  const h = svg.getElementById('crosshair-h');
20
22
  const v = svg.getElementById('crosshair-v');
21
23
  const coords = svg.getElementById('coordinates');
22
-
24
+
23
25
  crosshair.style.display = 'block';
24
26
  h.setAttribute('x1', '0');
25
27
  h.setAttribute('x2', '640');
@@ -38,13 +40,13 @@ x-" data-x="1.6" data-y="-2.295" cx="353.6" cy="465.31999999999994" r="3" fill="
38
40
  // y' = (y - ty) / sy
39
41
  const sx = matrix.a;
40
42
  const sy = matrix.d;
41
- const tx = matrix.e;
43
+ const tx = matrix.e;
42
44
  const ty = matrix.f;
43
45
  const realPoint = {
44
46
  x: (x - tx) / sx,
45
47
  y: (y - ty) / sy // Flip y back since we used negative scale
46
48
  }
47
-
49
+
48
50
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
49
51
  coords.setAttribute('x', (x + 5).toString());
50
52
  coords.setAttribute('y', (y - 5).toString());
@@ -52,4 +54,27 @@ x-" data-x="1.6" data-y="-2.295" cx="353.6" cy="465.31999999999994" r="3" fill="
52
54
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
53
55
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
54
56
  });
55
- ]]></script></svg>
57
+ ]]></script>
58
+ </g>
59
+ <g transform="translate(1216, 200)">
60
+ <style>
61
+ .boundary { fill: rgb(245, 241, 237); }
62
+ .schematic-boundary { fill: none; stroke: #fff; }
63
+ .component { fill: none; stroke: rgb(132, 0, 0); }
64
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
65
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
66
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
67
+ .pin-number { fill: rgb(169, 0, 0); }
68
+ .port-label { fill: rgb(0, 100, 100); }
69
+ .component-name { fill: rgb(0, 100, 100); }
70
+
71
+ </style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 630.03754693362 260.32540675843 L 670.08760951184 260.32540675843 L 670.08760951184 539.6745932415145 L 599.7997496870639 539.6745932415145 L 599.7997496870639 659.8247809761747 L 710.13767209006 659.8247809761745" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="32.040050062576px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 630.03754693362 260.32540675843 L 670.08760951184 260.32540675843 L 670.08760951184 539.6745932415145 L 599.7997496870639 539.6745932415145 L 599.7997496870639 659.8247809761747 L 710.13767209006 659.8247809761745" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.005006257822px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component chip sch-component-body" x="229.53692115141996" y="100.12515644555" width="320.40050062576006" height="200.25031289109998" stroke-width="4.005006257822px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="229.53692115141996" y="100.12515644555" width="320.40050062576006" height="200.25031289109998" fill="transparent"/><text class="sch-text" x="389.7371714643" y="200.2503128911" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="36.045056320398px" transform="rotate(0, 389.7371714643, 200.2503128911)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="549.93742177718" y1="260.32540675843" x2="630.03754693362" y2="260.32540675843" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="626.032540675798" y="256.320400500608" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="589.9874843554" y="256.320400500608" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="229.53692115141996" y1="260.32540675843" x2="153.44180225280195" y2="260.32540675843" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="149.43679599497995" cy="260.32540675843" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="145.43178973715794" y="256.320400500608" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="189.48685857319992" y="256.320400500608" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="549.93742177718" y1="180.22528160199002" x2="626.032540675798" y2="180.22528160199002" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="630.03754693362" cy="180.22528160199002" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="626.032540675798" y="176.22027534416802" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="589.9874843554" y="176.22027534416802" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="229.53692115141996" y1="140.17521902377" x2="153.44180225280195" y2="140.17521902377" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="149.43679599497995" cy="140.17521902377" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="145.43178973715794" y="136.170212765948" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="189.48685857319992" y="136.170212765948" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="229.53692115141996" y1="180.22528160199" x2="153.44180225280195" y2="180.22528160199" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="149.43679599497995" cy="180.22528160199" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="145.43178973715794" y="176.220275344168" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="189.48685857319992" y="176.220275344168" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="229.53692115141996" y1="220.27534418021" x2="153.44180225280195" y2="220.27534418021" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="149.43679599497995" cy="220.27534418021" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="145.43178973715794" y="216.270337922388" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="189.48685857319992" y="216.270337922388" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="549.93742177718" y1="220.27534418021003" x2="626.032540675798" y2="220.27534418021003" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="630.03754693362" cy="220.27534418021003" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="626.032540675798" y="216.27033792238802" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="589.9874843554" y="216.27033792238802" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">7</text><line class="component-pin sch-component-pin sch-port-line" x1="549.93742177718" y1="140.17521902377" x2="626.032540675798" y2="140.17521902377" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="630.03754693362" cy="140.17521902377" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="626.032540675798" y="136.170212765948" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="589.9874843554" y="136.170212765948" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">8</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component chip sch-component-body" x="790.2377972465" y="539.6745932415146" width="280.35043804754025" height="160.20025031288003" stroke-width="4.005006257822px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="790.2377972465" y="539.6745932415146" width="280.35043804754025" height="160.20025031288003" fill="transparent"/><text class="sch-text" x="930.4130162702701" y="619.7747183979545" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="36.045056320398px" transform="rotate(0, 930.4130162702701, 619.7747183979545)">J1</text><line class="component-pin sch-component-pin sch-port-line" x1="790.2377972465" y1="579.7246558197346" x2="714.1426783478821" y2="579.7246558197346" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="710.13767209006" cy="579.7246558197346" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="706.1326658322381" y="575.7196495619127" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="750.18773466828" y="575.7196495619125" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="790.2377972465" y1="619.7747183979545" x2="714.1426783478821" y2="619.7747183979545" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="710.13767209006" cy="619.7747183979545" r="4.005006257822" stroke-width="4.005006257822px"/><rect x="706.1326658322381" y="615.7697121401326" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="750.18773466828" y="615.7697121401326" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="790.2377972465" y1="659.8247809761745" x2="710.13767209006" y2="659.8247809761745" stroke-width="4.005006257822px"/><g class="sch-port" data-schematic-port-id="source_port_1_2__stack1"><rect x="706.1326658322381" y="655.8197747183525" width="8.010012515644" height="8.010012515644" opacity="0"/></g><text class="pin-number sch-pin-number" x="750.18773466828" y="655.8197747183525" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="30.037546933665px" transform="">3</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="630.03754693362" cy="260.32540675843" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="149.43679599497995" cy="260.32540675843" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="630.03754693362" cy="180.22528160199002" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="149.43679599497995" cy="140.17521902377" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="149.43679599497995" cy="180.22528160199" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="149.43679599497995" cy="220.27534418021" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="630.03754693362" cy="220.27534418021003" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="630.03754693362" cy="140.17521902377" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="710.13767209006" cy="579.7246558197346" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="710.13767209006" cy="619.7747183979545" r="8.010012515644" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_2__stack1"><circle cx="710.13767209006" cy="659.8247809761745" r="8.010012515644" fill="red" opacity="0"/></g><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" d="
72
+ M 710.13767209006,579.7246558197346
73
+ L 699.3241551939407,599.7496871088446
74
+ L 630.6516478931528,599.7496871088446
75
+ L 630.6516478931528,559.6996245306246
76
+ L 699.3241551939407,559.6996245306246
77
+ Z
78
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="4.005006257822px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" x="692.115143929861" y="579.7246558197346" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="36.045056320398px" transform="">XX</text>
79
+ </g>
80
+ </svg>