@tscircuit/schematic-trace-solver 0.0.149 → 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 (158) hide show
  1. package/.agents/skills/schematic-trace-visualization/SKILL.md +7 -2
  2. package/dist/index.d.ts +28 -1
  3. package/dist/index.js +26 -4
  4. package/lib/solvers/InlineNetLabelSolver/InlineNetLabelSolver.ts +14 -4
  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/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +751 -5
  11. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +660 -5
  12. package/tests/bug-reports/bug-report-20260707T020342Z/__snapshots__/bug-report-20260707T020342Z.snap.svg +44 -5
  13. package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +394 -5
  14. package/tests/bug-reports/bug-report-20260707T134549Z/__snapshots__/bug-report-20260707T134549Z.snap.svg +170 -5
  15. package/tests/bug-reports/bug-report-20260707T134722Z/__snapshots__/bug-report-20260707T134722Z.snap.svg +79 -5
  16. package/tests/bug-reports/bug-report-20260707T140410Z/__snapshots__/bug-report-20260707T140410Z.snap.svg +219 -5
  17. package/tests/bug-reports/bug-report-20260707T141025Z/__snapshots__/bug-report-20260707T141025Z.snap.svg +65 -5
  18. package/tests/bug-reports/bug-report-20260707T141421Z/__snapshots__/bug-report-20260707T141421Z.snap.svg +142 -5
  19. package/tests/bug-reports/bug-report-20260707T230831Z/__snapshots__/bug-report-20260707T230831Z.snap.svg +100 -5
  20. package/tests/bug-reports/bug-report-20260708T053736Z/__snapshots__/bug-report-20260708T053736Z.snap.svg +23 -5
  21. package/tests/bug-reports/bug-report-20260708T055430Z/__snapshots__/bug-report-20260708T055430Z.snap.svg +58 -5
  22. package/tests/bug-reports/bug-report-20260708T095725Z/__snapshots__/bug-report-20260708T095725Z.snap.svg +86 -5
  23. package/tests/bug-reports/bug-report-20260716T144856Z/__snapshots__/bug-report-20260716T144856Z.snap.svg +226 -5
  24. package/tests/bug-reports/bug-report-20260717T022934Z/__snapshots__/bug-report-20260717T022934Z.snap.svg +191 -5
  25. package/tests/bug-reports/bug-report-20260717T031704Z/__snapshots__/bug-report-20260717T031704Z.snap.svg +30 -5
  26. package/tests/bug-reports/bug-report-20260717T042845Z/__snapshots__/bug-report-20260717T042845Z.snap.svg +37 -5
  27. package/tests/bug-reports/bug-report-20260721T221026Z/__snapshots__/bug-report-20260721T221026Z.snap.svg +580 -2
  28. package/tests/bug-reports/bug-report-20260724T175257Z/__snapshots__/bug-report-20260724T175257Z.snap.svg +44 -5
  29. package/tests/bug-reports/bug-report-20260728T144234Z/__snapshots__/bug-report-20260728T144234Z.snap.svg +107 -5
  30. package/tests/bug-reports/bug-report-20260728T225606Z/__snapshots__/bug-report-20260728T225606Z.snap.svg +114 -5
  31. package/tests/bug-reports/bug-report-20260730T061837Z/__snapshots__/bug-report-20260730T061837Z.snap.svg +121 -5
  32. package/tests/bug-reports/bug-report-20260731T052229Z/__snapshots__/bug-report-20260731T052229Z.snap.svg +51 -5
  33. package/tests/bug-reports/bug-report-20260804T095800Z/__snapshots__/bug-report-20260804T095800Z.snap.svg +212 -5
  34. package/tests/bug-reports/bug-report-20260804T171919Z/__snapshots__/bug-report-20260804T171919Z.snap.svg +569 -5
  35. package/tests/bug-reports/bug-report-20260804T225912Z/__snapshots__/bug-report-20260804T225912Z.snap.svg +37 -5
  36. package/tests/bug-reports/bug-report-20260805T061316Z/__snapshots__/bug-report-20260805T061316Z.snap.svg +289 -5
  37. package/tests/bug-reports/bug-report-20260806T061548Z/__snapshots__/bug-report-20260806T061548Z.snap.svg +289 -5
  38. package/tests/bug-reports/bug-report-20260806T093501Z/__snapshots__/bug-report-20260806T093501Z.snap.svg +149 -5
  39. package/tests/bug-reports/bug-report-20260811T075142Z/__snapshots__/bug-report-20260811T075142Z.snap.svg +93 -5
  40. package/tests/bug-reports/bug-report-20260815T073240Z/__snapshots__/bug-report-20260815T073240Z.snap.svg +79 -5
  41. package/tests/bug-reports/bug-report-20260819T091818Z/__snapshots__/bug-report-20260819T091818Z.snap.svg +244 -2
  42. package/tests/examples/__snapshots__/example01.snap.svg +44 -5
  43. package/tests/examples/__snapshots__/example02.snap.svg +51 -5
  44. package/tests/examples/__snapshots__/example03.snap.svg +86 -5
  45. package/tests/examples/__snapshots__/example04.snap.svg +30 -5
  46. package/tests/examples/__snapshots__/example05.snap.svg +30 -5
  47. package/tests/examples/__snapshots__/example06.snap.svg +30 -5
  48. package/tests/examples/__snapshots__/example07.snap.svg +58 -5
  49. package/tests/examples/__snapshots__/example08.snap.svg +37 -5
  50. package/tests/examples/__snapshots__/example09.snap.svg +149 -5
  51. package/tests/examples/__snapshots__/example10.snap.svg +65 -5
  52. package/tests/examples/__snapshots__/example11.snap.svg +51 -5
  53. package/tests/examples/__snapshots__/example12.snap.svg +51 -5
  54. package/tests/examples/__snapshots__/example13.snap.svg +72 -5
  55. package/tests/examples/__snapshots__/example14.snap.svg +79 -5
  56. package/tests/examples/__snapshots__/example15.snap.svg +86 -5
  57. package/tests/examples/__snapshots__/example16.snap.svg +51 -5
  58. package/tests/examples/__snapshots__/example17.snap.svg +51 -5
  59. package/tests/examples/__snapshots__/example18.snap.svg +58 -5
  60. package/tests/examples/__snapshots__/example19.snap.svg +44 -5
  61. package/tests/examples/__snapshots__/example20.snap.svg +44 -5
  62. package/tests/examples/__snapshots__/example21.snap.svg +72 -5
  63. package/tests/examples/__snapshots__/example22.snap.svg +51 -5
  64. package/tests/examples/__snapshots__/example23.snap.svg +51 -5
  65. package/tests/examples/__snapshots__/example24.snap.svg +51 -5
  66. package/tests/examples/__snapshots__/example25.snap.svg +86 -5
  67. package/tests/examples/__snapshots__/example26.snap.svg +51 -5
  68. package/tests/examples/__snapshots__/example27.snap.svg +72 -5
  69. package/tests/examples/__snapshots__/example28.snap.svg +44 -5
  70. package/tests/examples/__snapshots__/example29.snap.svg +324 -5
  71. package/tests/examples/__snapshots__/example30.snap.svg +107 -5
  72. package/tests/examples/__snapshots__/example31.snap.svg +37 -5
  73. package/tests/examples/__snapshots__/example32.snap.svg +149 -5
  74. package/tests/examples/__snapshots__/example33.snap.svg +93 -5
  75. package/tests/examples/__snapshots__/example34.snap.svg +51 -5
  76. package/tests/examples/__snapshots__/example35.snap.svg +58 -5
  77. package/tests/examples/__snapshots__/example36.snap.svg +44 -5
  78. package/tests/examples/__snapshots__/example37.snap.svg +72 -5
  79. package/tests/examples/__snapshots__/example38.snap.svg +30 -5
  80. package/tests/examples/__snapshots__/example39.snap.svg +37 -5
  81. package/tests/examples/__snapshots__/example40.snap.svg +100 -5
  82. package/tests/examples/__snapshots__/example41.snap.svg +44 -5
  83. package/tests/examples/__snapshots__/example42.snap.svg +65 -5
  84. package/tests/examples/__snapshots__/example43.snap.svg +58 -5
  85. package/tests/examples/__snapshots__/example44.snap.svg +107 -5
  86. package/tests/examples/__snapshots__/example45.snap.svg +51 -5
  87. package/tests/examples/__snapshots__/example46.snap.svg +93 -5
  88. package/tests/examples/__snapshots__/example47.snap.svg +93 -5
  89. package/tests/examples/__snapshots__/example48.snap.svg +65 -5
  90. package/tests/examples/__snapshots__/example49.snap.svg +177 -5
  91. package/tests/examples/__snapshots__/example50.snap.svg +93 -5
  92. package/tests/examples/__snapshots__/example51.snap.svg +590 -5
  93. package/tests/fixtures/convertSolverOutputToCircuitJson.test.ts +219 -0
  94. package/tests/fixtures/convertSolverOutputToCircuitJson.ts +1058 -0
  95. package/tests/fixtures/matcher.ts +45 -8
  96. package/tests/repros/__snapshots__/board-1273-trace-overlap-cycle.snap.svg +762 -2
  97. package/tests/repros/__snapshots__/board-15984-same-net-junction.snap.svg +111 -2
  98. package/tests/repros/__snapshots__/board1096-usb-label-overlap-iteration.snap.svg +167 -2
  99. package/tests/repros/__snapshots__/bugreport-001-gnd-overlap.snap.svg +65 -5
  100. package/tests/repros/__snapshots__/manufacturePartNumber-text-box.snap.svg +30 -5
  101. package/tests/repros/__snapshots__/netlabel-connector-through-rail-label.snap.svg +79 -5
  102. package/tests/repros/__snapshots__/repro-atmega328p-fault-pullup.snap.svg +65 -5
  103. package/tests/repros/__snapshots__/repro-atmega328p-missing-gnd-netlabel.snap.svg +149 -5
  104. package/tests/repros/__snapshots__/repro-board-589-regulator-section.snap.svg +55 -2
  105. package/tests/repros/__snapshots__/repro-board-648-esp12f-section.snap.svg +160 -2
  106. package/tests/repros/__snapshots__/repro-bq24074-battery-charger.snap.svg +135 -5
  107. package/tests/repros/__snapshots__/repro-bq25895-cross-net-trace-overlap.snap.svg +69 -2
  108. package/tests/repros/__snapshots__/repro-cc2340r5.snap.svg +86 -5
  109. package/tests/repros/__snapshots__/repro-core-555-power-cross-net-overlap.snap.svg +44 -5
  110. package/tests/repros/__snapshots__/repro-core-subcircuit-missing-ground.snap.svg +44 -5
  111. package/tests/repros/__snapshots__/repro-core-tb67s579ftg-inline-label-routing.snap.svg +30 -5
  112. package/tests/repros/__snapshots__/repro-example35-minimize-trace-crossing.snap.svg +335 -2
  113. package/tests/repros/__snapshots__/repro-ground-label-on-lower-rail-end.snap.svg +48 -2
  114. package/tests/repros/__snapshots__/repro-ina237-current-monitor.snap.svg +149 -5
  115. package/tests/repros/__snapshots__/repro-missing-trace-netlabel.snap.svg +72 -5
  116. package/tests/repros/__snapshots__/repro-netlabel-collision-687.snap.svg +100 -5
  117. package/tests/repros/__snapshots__/repro-netlabel-overlap-trace.snap.svg +51 -5
  118. package/tests/repros/__snapshots__/repro-nrf52810-clock-routing.snap.svg +90 -2
  119. package/tests/repros/__snapshots__/repro-power-group-rail-labels.snap.svg +37 -5
  120. package/tests/repros/__snapshots__/repro-rectifier-trace-overlap.snap.svg +44 -5
  121. package/tests/repros/__snapshots__/repro-rp2040-gamepad-trace-alignment.snap.svg +237 -2
  122. package/tests/repros/__snapshots__/repro-rp2040-usb-cc2-ground-overlap.snap.svg +72 -5
  123. package/tests/repros/__snapshots__/repro-rp2040-v3v3-label-placement.snap.svg +51 -5
  124. package/tests/repros/__snapshots__/repro-rp2040-zero-crystal-fallback-netlabels.snap.svg +30 -5
  125. package/tests/repros/__snapshots__/repro-ti-power-output-section.snap.svg +79 -5
  126. package/tests/repros/__snapshots__/repro-tida010076-j4-ground-bus.snap.svg +27 -2
  127. package/tests/repros/__snapshots__/repro-tida010076-page02.snap.svg +1150 -5
  128. package/tests/repros/__snapshots__/repro-tps61222-trace-intersection.snap.svg +51 -5
  129. package/tests/repros/__snapshots__/repro-type-c-16pin-self-connection.snap.svg +30 -5
  130. package/tests/repros/__snapshots__/repro-type-c-16pin-to-resistor.snap.svg +30 -5
  131. package/tests/repros/__snapshots__/repro-type-c-vbus-led-ground-label.snap.svg +44 -5
  132. package/tests/repros/__snapshots__/repro-usb-power-vbus-label-detour.snap.svg +685 -2
  133. package/tests/repros/__snapshots__/repro-vcc-pin1-detour.snap.svg +27 -2
  134. package/tests/repros/__snapshots__/repro129-host-custom-symbol-passives.snap.svg +51 -5
  135. package/tests/repros/__snapshots__/repro130-bq27441-fuel-gauge-trace-through-c1.snap.svg +100 -5
  136. package/tests/repros/__snapshots__/repro161-power-section-autolayout.snap.svg +107 -5
  137. package/tests/repros/__snapshots__/repro47-endpoint-obstacle-detour.snap.svg +51 -5
  138. package/tests/repros/__snapshots__/repro48-555-timer-vcc-rail-label.snap.svg +104 -2
  139. package/tests/repros/__snapshots__/repro5-escape-padded-text-obstacles.snap.svg +30 -5
  140. package/tests/repros/__snapshots__/repro51-overlap-junction-crossing.snap.svg +65 -5
  141. package/tests/repros/__snapshots__/repro84-stacked-gnd-label-orientation.snap.svg +27 -2
  142. package/tests/repros/__snapshots__/small-variant-resistor-facing-direction.snap.svg +58 -5
  143. package/tests/repros/__snapshots__/trace-overlap-box-resistor.snap.svg +37 -5
  144. package/tests/solvers/InlineNetLabelSolver/__snapshots__/fallback-net-label-width.snap.svg +25 -7
  145. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-anchored-label-clearance.snap.svg +34 -2
  146. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-port-stub.snap.svg +23 -5
  147. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-two-pin-net.snap.svg +23 -5
  148. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label01.snap.svg +23 -5
  149. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label02.snap.svg +23 -5
  150. package/tests/solvers/InlineNetLabelSolver/__snapshots__/terminal-stub-trace-clearance.snap.svg +23 -5
  151. package/tests/solvers/InlineNetLabelSolver/fallback-net-label-width.test.ts +10 -1
  152. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_01-example17-d1_1-u1_1.snap.svg +23 -5
  153. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_repro47-short-opposing-pins.snap.svg +20 -2
  154. package/tests/solvers/TraceCleanupSolver/__snapshots__/TraceCleanupSolver.snap.svg +44 -5
  155. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +79 -5
  156. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +44 -5
  157. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +23 -5
  158. 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.15,-0.30000000000000004 1.8499999999999996,-0.3000000000000007" data-type="line" data-label="" points="336.1256544502618,395.86387434554973 387.43455497382195,395.8638743455498" fill="none" stroke="hsl(160, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="2.95,-0.3000000000000007 3.6500000000000004,-0.3000000000000007" data-type="line" data-label="" points="468.0628272251309,395.8638743455498 519.3717277486911,395.8638743455498" fill="none" stroke="hsl(48, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 167.5392670157068,289.58115183246076" fill="none" stroke="hsl(280, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="-1.15,0.10000000000000003 -1.85,0.10000000000000002" data-type="line" data-label="" points="167.5392670157068,366.5445026178011 116.2303664921466,366.5445026178011" fill="none" stroke="hsl(48, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.3499999999999999,0.30000000000000004 -1.3499999999999999,0.7250000000000001 -1.1500000000000004,0.7250000000000001 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 152.87958115183247,351.8848167539267 152.87958115183247,320.73298429319374 167.5392670157068,320.73298429319374 167.5392670157068,289.58115183246076" fill="none" stroke="red" stroke-width="1px" stroke-dasharray="4 4"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 167.5392670157068,289.58115183246076" fill="none" stroke="blue" stroke-width="1px" stroke-dasharray="5 5"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.3499999999999999,0.30000000000000004 -1.3499999999999999,0.7250000000000001 -1.1500000000000004,0.7250000000000001 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 152.87958115183247,351.8848167539267 152.87958115183247,320.73298429319374 167.5392670157068,320.73298429319374 167.5392670157068,289.58115183246076" 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="167.5392670157068" y="337.22513089005236" width="168.58638743455498" height="73.29842931937173" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-1.1500000000000004" data-y="1.6700000000000002" x="129.4240837696335" y="213.3507853403141" width="76.2303664921466" height="76.23036649214663" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-2.37" data-y="0.10000000000000009" x="40.000000000000014" y="346.75392670157066" width="76.2303664921466" height="39.58115183246076" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="2.4" data-y="-0.3000000000000007" x="387.43455497382195" y="365.07853403141365" width="80.62827225130894" height="61.57068062827227" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="4.2" data-y="-0.3000000000000007" x="519.371727748691" y="365.07853403141365" width="80.62827225130889" height="61.57068062827227" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></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.15,-0.30000000000000004 1.8499999999999996,-0.3000000000000007" data-type="line" data-label="" points="336.1256544502618,395.86387434554973 387.43455497382195,395.8638743455498" fill="none" stroke="hsl(160, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="2.95,-0.3000000000000007 3.6500000000000004,-0.3000000000000007" data-type="line" data-label="" points="468.0628272251309,395.8638743455498 519.3717277486911,395.8638743455498" fill="none" stroke="hsl(48, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 167.5392670157068,289.58115183246076" fill="none" stroke="hsl(280, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="-1.15,0.10000000000000003 -1.85,0.10000000000000002" data-type="line" data-label="" points="167.5392670157068,366.5445026178011 116.2303664921466,366.5445026178011" fill="none" stroke="hsl(48, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.3499999999999999,0.30000000000000004 -1.3499999999999999,0.7250000000000001 -1.1500000000000004,0.7250000000000001 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 152.87958115183247,351.8848167539267 152.87958115183247,320.73298429319374 167.5392670157068,320.73298429319374 167.5392670157068,289.58115183246076" fill="none" stroke="red" stroke-width="1px" stroke-dasharray="4 4"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 167.5392670157068,289.58115183246076" fill="none" stroke="blue" stroke-width="1px" stroke-dasharray="5 5"/></g><g><polyline data-points="-1.15,0.30000000000000004 -1.3499999999999999,0.30000000000000004 -1.3499999999999999,0.7250000000000001 -1.1500000000000004,0.7250000000000001 -1.1500000000000004,1.15" data-type="line" data-label="" points="167.5392670157068,351.8848167539267 152.87958115183247,351.8848167539267 152.87958115183247,320.73298429319374 167.5392670157068,320.73298429319374 167.5392670157068,289.58115183246076" 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="167.5392670157068" y="337.22513089005236" width="168.58638743455498" height="73.29842931937173" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-1.1500000000000004" data-y="1.6700000000000002" x="129.4240837696335" y="213.3507853403141" width="76.2303664921466" height="76.23036649214663" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-2.37" data-y="0.10000000000000009" x="40.000000000000014" y="346.75392670157066" width="76.2303664921466" height="39.58115183246076" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="2.4" data-y="-0.3000000000000007" x="387.43455497382195" y="365.07853403141365" width="80.62827225130894" height="61.57068062827227" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="4.2" data-y="-0.3000000000000007" x="519.371727748691" y="365.07853403141365" width="80.62827225130889" height="61.57068062827227" fill="hsl(24, 100%, 50%, 0.1)" stroke="black" stroke-width="0.013642857142857144"/></g><g><circle data-type="point" data-label="U1.1
2
4
  x-" data-x="-1.15" data-y="0.30000000000000004" cx="167.5392670157068" cy="351.8848167539267" 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.15" data-y="0.10000000000000003" cx="167.5392670157068" cy="366.5445026178011" 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.15" data-y="-0.09999999999999998" cx="167.5392670157068" cy="381.2041884816754" r="3" fill="hsl(321, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.4
@@ -24,7 +26,7 @@ x+" data-x="4.75" data-y="-0.3000000000000007" cx="600" cy="395.8638743455498" r
24
26
  const h = svg.getElementById('crosshair-h');
25
27
  const v = svg.getElementById('crosshair-v');
26
28
  const coords = svg.getElementById('coordinates');
27
-
29
+
28
30
  crosshair.style.display = 'block';
29
31
  h.setAttribute('x1', '0');
30
32
  h.setAttribute('x2', '640');
@@ -43,13 +45,13 @@ x+" data-x="4.75" data-y="-0.3000000000000007" cx="600" cy="395.8638743455498" r
43
45
  // y' = (y - ty) / sy
44
46
  const sx = matrix.a;
45
47
  const sy = matrix.d;
46
- const tx = matrix.e;
48
+ const tx = matrix.e;
47
49
  const ty = matrix.f;
48
50
  const realPoint = {
49
51
  x: (x - tx) / sx,
50
52
  y: (y - ty) / sy // Flip y back since we used negative scale
51
53
  }
52
-
54
+
53
55
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
54
56
  coords.setAttribute('x', (x + 5).toString());
55
57
  coords.setAttribute('y', (y - 5).toString());
@@ -57,4 +59,20 @@ x+" data-x="4.75" data-y="-0.3000000000000007" cx="600" cy="395.8638743455498" r
57
59
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
58
60
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
59
61
  });
60
- ]]></script></svg>
62
+ ]]></script>
63
+ </g>
64
+ <g transform="translate(1216, 200)">
65
+ <style>
66
+ .boundary { fill: rgb(245, 241, 237); }
67
+ .schematic-boundary { fill: none; stroke: #fff; }
68
+ .component { fill: none; stroke: rgb(132, 0, 0); }
69
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
70
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
71
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
72
+ .pin-number { fill: rgb(169, 0, 0); }
73
+ .port-label { fill: rgb(0, 100, 100); }
74
+ .component-name { fill: rgb(0, 100, 100); }
75
+
76
+ </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 308.91089108918504 452.42024202417 L 282.5082508251651 452.42024202417 L 282.5082508251651 396.3146314631275 L 308.91089108918493 396.3146314631275 L 308.91089108918493 340.20902090208506" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.122112211216px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 308.91089108918504 452.42024202417 L 282.5082508251651 452.42024202417 L 282.5082508251651 396.3146314631275 L 308.91089108918493 396.3146314631275 L 308.91089108918493 340.20902090208506" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.640264026402px" 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="361.71617161722503" y="426.01760176015" width="198.01980198015002" height="132.01320132010005" stroke-width="2.640264026402px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="361.71617161722503" y="426.01760176015" width="198.01980198015002" height="132.01320132010005" fill="transparent"/><text class="sch-text" x="460.7260726073" y="492.0242024202" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="23.762376237618px" transform="rotate(0, 460.7260726073, 492.0242024202)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="361.71617161722503" y1="452.42024202417" x2="308.91089108918504" y2="452.42024202417" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="306.27062706278303" y="449.779977997768" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="335.313531353205" y="449.779977997768" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="361.71617161722503" y1="478.82288228819004" x2="311.551155115587" y2="478.82288228819004" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="308.91089108918504" cy="478.82288228819004" r="2.640264026402" stroke-width="2.640264026402px"/><rect x="306.27062706278303" y="476.18261826178804" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="335.313531353205" y="476.18261826178804" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="361.71617161722503" y1="505.22552255221" x2="311.551155115587" y2="505.22552255221" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="308.91089108918504" cy="505.22552255221" r="2.640264026402" stroke-width="2.640264026402px"/><rect x="306.27062706278303" y="502.585258525808" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="335.313531353205" y="502.585258525808" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="361.71617161722503" y1="531.6281628162301" x2="311.551155115587" y2="531.6281628162301" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="308.91089108918504" cy="531.6281628162301" r="2.640264026402" stroke-width="2.640264026402px"/><rect x="306.27062706278303" y="528.9878987898281" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="335.313531353205" y="528.987898789828" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="559.735973597375" y1="531.6281628162301" x2="609.900990099013" y2="531.6281628162301" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="612.541254125415" cy="531.6281628162301" r="2.640264026402" stroke-width="2.640264026402px"/><rect x="609.900990099013" y="528.9878987898281" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="586.138613861395" y="528.987898789828" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="559.735973597375" y1="505.22552255221" x2="609.900990099013" y2="505.22552255221" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="612.541254125415" cy="505.22552255221" r="2.640264026402" stroke-width="2.640264026402px"/><rect x="609.900990099013" y="502.585258525808" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="586.138613861395" y="502.58525852580806" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="559.735973597375" y1="478.82288228819004" x2="609.900990099013" y2="478.82288228819004" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="612.541254125415" cy="478.82288228819004" r="2.640264026402" stroke-width="2.640264026402px"/><rect x="609.900990099013" y="476.18261826178804" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="586.138613861395" y="476.18261826178804" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" transform="">7</text><line class="component-pin sch-component-pin sch-port-line" x1="559.735973597375" y1="452.42024202417" x2="609.900990099013" y2="452.42024202417" stroke-width="2.640264026402px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="612.541254125415" cy="452.42024202417" r="2.640264026402" stroke-width="2.640264026402px"/><rect x="609.900990099013" y="449.779977997768" width="5.280528052804" height="5.280528052804" opacity="0"/></g><text class="pin-number sch-pin-number" x="586.138613861395" y="449.779977997768" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.801980198015px" 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="290.42904290437093" y="202.91529152918102" width="35.64356435642702" height="137.29372937290404" fill="transparent"/><path class="sch-component-symbol-path" d="M 308.91089108918493 253.08030803081903 L 326.07260726079795 287.403740374045" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 290.42904290437093 287.403740374045 L 308.91089108918493 253.08030803081903" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 326.07260726079795 287.403740374045 L 290.42904290437093 287.403740374045" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 290.42904290437093 253.08030803081903 L 326.07260726079795 253.08030803081903" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 308.91089108918493 287.403740374045 L 308.91089108918493 340.20902090208506" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 308.91089108918493 202.91529152918102 L 308.91089108918493 251.76017601761805" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="278.5478547855619" y="272.88228822883406" stroke="rgb(245, 241, 237)" stroke-width="2.640264026402px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="end" dominant-baseline="middle" font-size="23.762376237618px">D1</text><text class="sch-component-text" x="349.8349834984159" y="271.562156215633" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="middle" font-size="23.762376237618px"></text><circle class="component-pin sch-component-pin" cx="308.91089108918493" cy="202.91529152918102" r="2.640264026402px" stroke-width="2.640264026402px" fill="none" stroke="rgb(132, 0, 0)"/></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="79.20792079221101" y="461.661166116577" width="137.293729372904" height="35.643564356426964" fill="transparent"/><path class="sch-component-symbol-path" d="M 129.37293729384902 478.82288228819 L 163.696369637075 461.661166116577" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 163.696369637075 497.304730473004 L 129.37293729384902 478.82288228819" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 163.696369637075 461.661166116577 L 163.696369637075 497.304730473004" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 129.37293729384902 497.304730473004 L 129.37293729384902 461.661166116577" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 163.696369637075 478.82288228819 L 216.50165016511502 478.82288228819" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 79.20792079221101 478.82288228819 L 128.05280528064802 478.82288228819" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="149.17491749186402" y="509.185918591813" stroke="rgb(245, 241, 237)" stroke-width="2.640264026402px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="23.762376237618px">D2</text><text class="sch-component-text" x="147.85478547866302" y="437.898789878959" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="23.762376237618px"></text><circle class="component-pin sch-component-pin" cx="216.50165016511502" cy="478.82288228819" r="2.640264026402px" stroke-width="2.640264026402px" fill="none" stroke="rgb(132, 0, 0)"/><circle class="component-pin sch-component-pin" cx="79.20792079221101" cy="478.82288228819" r="2.640264026402px" stroke-width="2.640264026402px" fill="none" stroke="rgb(132, 0, 0)"/></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="704.950495049485" y="492.8994499449523" width="145.21452145211015" height="77.45742574255547" fill="transparent"/><path class="sch-component-symbol-path" d="M 850.1650165015951 531.6281628162301 L 792.0792079207511 531.6281628162301" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 763.036303630329 531.6281628162301 L 704.950495049485 531.6281628162301" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 792.0792079207511 492.8994499449523 L 792.0792079207511 570.3568756875078" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 763.036303630329 492.8994499449523 L 763.036303630329 570.3568756875078" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="777.55775577554" y="473.54235423538603" stroke="rgb(245, 241, 237)" stroke-width="2.640264026402px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="23.762376237618px">C1</text><text class="sch-component-text" x="777.55775577554" y="589.7139713970741" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="23.762376237618px"></text><circle class="component-pin sch-component-pin" cx="704.950495049485" cy="531.6281628162301" r="2.640264026402px" stroke-width="2.640264026402px" fill="none" stroke="rgb(132, 0, 0)"/><circle class="component-pin sch-component-pin" cx="850.1650165015951" cy="531.6281628162301" r="2.640264026402px" stroke-width="2.640264026402px" fill="none" stroke="rgb(132, 0, 0)"/></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="942.5742574256651" y="492.8994499449524" width="145.21452145210992" height="77.45742574255542" fill="transparent"/><path class="sch-component-symbol-path" d="M 1087.788778877775 531.6281628162301 L 1029.702970296931 531.6281628162301" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1000.660066006509 531.6281628162301 L 942.5742574256651 531.6281628162301" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1029.702970296931 492.8994499449524 L 1029.702970296931 570.3568756875078" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1000.660066006509 492.8994499449524 L 1000.660066006509 570.3568756875078" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.640264026402px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="1015.1815181517201" y="473.5423542353861" stroke="rgb(245, 241, 237)" stroke-width="2.640264026402px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="23.762376237618px">C2</text><text class="sch-component-text" x="1015.1815181517201" y="589.713971397074" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="23.762376237618px"></text><circle class="component-pin sch-component-pin" cx="942.5742574256651" cy="531.6281628162301" r="2.640264026402px" stroke-width="2.640264026402px" fill="none" stroke="rgb(132, 0, 0)"/><circle class="component-pin sch-component-pin" cx="1087.788778877775" cy="531.6281628162301" r="2.640264026402px" stroke-width="2.640264026402px" 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="308.91089108918504" cy="452.42024202417" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="308.91089108918504" cy="478.82288228819004" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="308.91089108918504" cy="505.22552255221" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="308.91089108918504" cy="531.6281628162301" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="612.541254125415" cy="531.6281628162301" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="612.541254125415" cy="505.22552255221" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="612.541254125415" cy="478.82288228819004" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="612.541254125415" cy="452.42024202417" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="308.91089108918493" cy="340.20902090208506" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="308.91089108918493" cy="202.91529152918105" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="216.501650165115" cy="478.82288228819004" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="79.20792079221098" cy="478.82288228819" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_0__stack1"><circle cx="737.95379537951" cy="531.6281628162301" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_1__stack1"><circle cx="883.1683168316201" cy="531.6281628162301" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_4_0__stack1"><circle cx="975.57755775569" cy="531.6281628162301" r="5.280528052804" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_4_1__stack1"><circle cx="1120.7920792078" cy="531.6281628162301" r="5.280528052804" fill="red" opacity="0"/></g>
77
+ </g>
78
+ </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="3.4,0.095 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 378.21782178217813,333.86138613861385" fill="none" stroke="hsl(112, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="3.4,0.095 3.465,0.095 3.505,0.095 3.505,0.045 3.545,0.045 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 297.82178217821775,306.13861386138615 320,306.13861386138615 320,333.86138613861385 342.17821782178225,333.86138613861385 378.21782178217813,333.86138613861385" fill="none" stroke="red" stroke-width="1px" stroke-dasharray="4 4"/></g><g><polyline data-points="3.4,0.095 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 378.21782178217813,333.86138613861385" fill="none" stroke="blue" stroke-width="1px" stroke-dasharray="5 5"/></g><g><polyline data-points="3.4,0.095 3.465,0.095 3.505,0.095 3.505,0.045 3.545,0.045 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 297.82178217821775,306.13861386138615 320,306.13861386138615 320,333.86138613861385 342.17821782178225,333.86138613861385 378.21782178217813,333.86138613861385" fill="none" stroke="green" stroke-width="1px"/></g><g><rect data-type="rect" data-label="D2" data-x="3.2" data-y="0.095" x="40" y="250.69306930693068" width="221.7821782178221" height="110.89108910891093" fill="hsl(358, 100%, 50%, 0.1)" stroke="black" stroke-width="0.0018035714285714283"/></g><g><rect data-type="rect" data-label="SW2" data-x="3.81" data-y="0.045" x="378.21782178217825" y="278.41584158415844" width="221.78217821782187" height="110.89108910891088" fill="hsl(70, 100%, 50%, 0.1)" stroke="black" stroke-width="0.0018035714285714283"/></g><g><circle data-type="point" data-label="D2.cathode
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="3.4,0.095 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 378.21782178217813,333.86138613861385" fill="none" stroke="hsl(112, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="3.4,0.095 3.465,0.095 3.505,0.095 3.505,0.045 3.545,0.045 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 297.82178217821775,306.13861386138615 320,306.13861386138615 320,333.86138613861385 342.17821782178225,333.86138613861385 378.21782178217813,333.86138613861385" fill="none" stroke="red" stroke-width="1px" stroke-dasharray="4 4"/></g><g><polyline data-points="3.4,0.095 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 378.21782178217813,333.86138613861385" fill="none" stroke="blue" stroke-width="1px" stroke-dasharray="5 5"/></g><g><polyline data-points="3.4,0.095 3.465,0.095 3.505,0.095 3.505,0.045 3.545,0.045 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 297.82178217821775,306.13861386138615 320,306.13861386138615 320,333.86138613861385 342.17821782178225,333.86138613861385 378.21782178217813,333.86138613861385" fill="none" stroke="green" stroke-width="1px"/></g><g><rect data-type="rect" data-label="D2" data-x="3.2" data-y="0.095" x="40" y="250.69306930693068" width="221.7821782178221" height="110.89108910891093" fill="hsl(358, 100%, 50%, 0.1)" stroke="black" stroke-width="0.0018035714285714283"/></g><g><rect data-type="rect" data-label="SW2" data-x="3.81" data-y="0.045" x="378.21782178217825" y="278.41584158415844" width="221.78217821782187" height="110.89108910891088" fill="hsl(70, 100%, 50%, 0.1)" stroke="black" stroke-width="0.0018035714285714283"/></g><g><circle data-type="point" data-label="D2.cathode
2
4
  x+" data-x="3.4" data-y="0.095" cx="261.78217821782187" cy="306.13861386138615" r="3" fill="hsl(22, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="SW2.pin1
3
5
  x-" data-x="3.61" data-y="0.045" cx="378.21782178217813" cy="333.86138613861385" r="3" fill="hsl(12, 100%, 50%, 0.8)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
4
6
  document.currentScript.parentElement.addEventListener('mousemove', (e) => {
@@ -43,4 +45,20 @@ x-" data-x="3.61" data-y="0.045" cx="378.21782178217813" cy="333.86138613861385"
43
45
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
44
46
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
45
47
  });
46
- ]]></script></svg>
48
+ ]]></script>
49
+ </g>
50
+ <g transform="translate(1216, 200)">
51
+ <style>
52
+ .boundary { fill: rgb(245, 241, 237); }
53
+ .schematic-boundary { fill: none; stroke: #fff; }
54
+ .component { fill: none; stroke: rgb(132, 0, 0); }
55
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
56
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
57
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
58
+ .pin-number { fill: rgb(169, 0, 0); }
59
+ .port-label { fill: rgb(0, 100, 100); }
60
+ .component-name { fill: rgb(0, 100, 100); }
61
+
62
+ </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 516.8 384 L 558.3999999999999 384 L 583.9999999999998 384 L 583.9999999999998 416 L 609.6000000000001 416 L 651.2 416" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="102.4px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 516.8 384 L 558.3999999999999 384 L 583.9999999999998 384 L 583.9999999999998 416 L 609.6000000000001 416 L 651.2 416" stroke="rgb(0, 150, 0)" fill="none" stroke-width="12.8px" 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="356.8000000000002" y="320" width="63.99999999999977" height="128" stroke-width="12.8px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="356.8000000000002" y="320" width="63.99999999999977" height="128" fill="transparent"/><text class="sch-text" x="388.79999999999995" y="384" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="64px" transform="rotate(0, 388.79999999999995, 384)">D2</text><line class="component-pin sch-component-pin sch-port-line" x1="420.79999999999995" y1="384" x2="516.8" y2="384" stroke-width="12.8px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="503.99999999999994" y="371.2" width="25.6" height="25.6" opacity="0"/></g><text class="pin-number sch-pin-number" x="468.79999999999995" y="371.2" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="96px" transform=""></text><text class="pin-number sch-pin-label" x="356.8000000000002" y="384" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="96px" transform="">cathode</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="747.2" y="352" width="64" height="128" stroke-width="12.8px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="747.2" y="352" width="64" height="128" fill="transparent"/><text class="sch-text" x="779.2" y="416" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="64px" transform="rotate(0, 779.2, 416)">SW2</text><line class="component-pin sch-component-pin sch-port-line" x1="747.2" y1="416" x2="651.2" y2="416" stroke-width="12.8px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><rect x="638.4000000000001" y="403.2" width="25.6" height="25.6" opacity="0"/></g><text class="pin-number sch-pin-number" x="699.2" y="403.2" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="96px" transform=""></text><text class="pin-number sch-pin-label" x="811.2" y="416" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="start" dominant-baseline="middle" font-size="96px" transform="">pin1</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="516.8" cy="384" r="25.6" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="651.2" cy="416" r="25.6" fill="red" opacity="0"/></g>
63
+ </g>
64
+ </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.2975000000000003 1.049,-1.2975000000000003 1.049,-2.2950000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 331.20000000000005,241.88 331.20000000000005,353.6 291.88800000000003,353.6 291.88800000000003,465.32000000000005 353.6,465.31999999999994" fill="none" stroke="red" 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><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.2975000000000003 1.049,-1.2975000000000003 1.049,-2.2950000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,241.88 331.20000000000005,241.88 331.20000000000005,353.6 291.88800000000003,353.6 291.88800000000003,465.32000000000005 353.6,465.31999999999994" fill="none" stroke="red" 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><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,41 @@ 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 628.62640945314 248.09554859336 L 666.7949553905801 248.09554859336 L 666.7949553905801 438.4611714563421 L 599.8091572703728 438.4611714563421 L 599.8091572703728 628.8267943193241 L 704.96350132802 628.826794319324" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="30.534836749952003px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 628.62640945314 248.09554859336 L 666.7949553905801 248.09554859336 L 666.7949553905801 438.4611714563421 L 599.8091572703728 438.4611714563421 L 599.8091572703728 628.8267943193241 L 704.96350132802 628.826794319324" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.8168545937440004px" 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="246.94095007873997" y="95.4213648436" width="305.34836749952" height="190.84272968719998" stroke-width="3.8168545937440004px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="246.94095007873997" y="95.4213648436" width="305.34836749952" height="190.84272968719998" fill="transparent"/><text class="sch-text" x="399.6151338285" y="190.8427296872" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="34.351691343696px" transform="rotate(0, 399.6151338285, 190.8427296872)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="552.28931757826" y1="248.09554859336" x2="628.62640945314" y2="248.09554859336" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="624.809554859396" y="244.278693999616" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="590.4578635157001" y="244.278693999616" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="246.94095007873997" y1="248.09554859336" x2="174.42071279760398" y2="248.09554859336" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="170.60385820385997" cy="248.09554859336" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="166.78700361011596" y="244.278693999616" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="208.77240414129997" y="244.278693999616" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="552.28931757826" y1="171.75845671848" x2="624.809554859396" y2="171.75845671848" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="628.62640945314" cy="171.75845671848" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="624.809554859396" y="167.941602124736" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="590.4578635157001" y="167.941602124736" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="246.94095007873997" y1="133.58991078104" x2="174.42071279760398" y2="133.58991078104" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="170.60385820385997" cy="133.58991078104" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="166.78700361011596" y="129.773056187296" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="208.77240414129997" y="129.773056187296" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="246.94095007873997" y1="171.75845671848" x2="174.42071279760398" y2="171.75845671848" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="170.60385820385997" cy="171.75845671848" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="166.78700361011596" y="167.941602124736" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="208.77240414129997" y="167.941602124736" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="246.94095007873997" y1="209.92700265592" x2="174.42071279760398" y2="209.92700265592" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="170.60385820385997" cy="209.92700265592" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="166.78700361011596" y="206.110148062176" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="208.77240414129997" y="206.110148062176" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="552.28931757826" y1="209.92700265592" x2="624.809554859396" y2="209.92700265592" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="628.62640945314" cy="209.92700265592" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="624.809554859396" y="206.110148062176" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="590.4578635157001" y="206.11014806217602" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">7</text><line class="component-pin sch-component-pin sch-port-line" x1="552.28931757826" y1="133.58991078104" x2="624.809554859396" y2="133.58991078104" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="628.62640945314" cy="133.58991078104" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="624.809554859396" y="129.773056187296" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="590.4578635157001" y="129.773056187296" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" 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="781.3005932029" y="514.321156507004" width="267.1798215620802" height="152.67418374976" stroke-width="3.8168545937440004px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="781.3005932029" y="514.321156507004" width="267.1798215620802" height="152.67418374976" fill="transparent"/><text class="sch-text" x="914.8905039839401" y="590.658248381884" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="34.351691343696px" transform="rotate(0, 914.8905039839401, 590.658248381884)">J1</text><line class="component-pin sch-component-pin sch-port-line" x1="781.3005932029" y1="552.489702444444" x2="708.7803559217641" y2="552.489702444444" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="704.96350132802" cy="552.489702444444" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="701.146646734276" y="548.6728478507" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="743.13204726546" y="548.6728478507" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="781.3005932029" y1="590.658248381884" x2="708.7803559217641" y2="590.658248381884" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="704.96350132802" cy="590.658248381884" r="3.8168545937440004" stroke-width="3.8168545937440004px"/><rect x="701.146646734276" y="586.8413937881401" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="743.13204726546" y="586.8413937881401" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="781.3005932029" y1="628.826794319324" x2="704.96350132802" y2="628.826794319324" stroke-width="3.8168545937440004px"/><g class="sch-port" data-schematic-port-id="source_port_1_2__stack1"><rect x="701.146646734276" y="625.00993972558" width="7.633709187488001" height="7.633709187488001" opacity="0"/></g><text class="pin-number sch-pin-number" x="743.13204726546" y="625.00993972558" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="28.62640945308px" transform="">3</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="628.62640945314" cy="248.09554859336" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="170.60385820385997" cy="248.09554859336" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="628.62640945314" cy="171.75845671848" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="170.60385820385997" cy="133.58991078104" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="170.60385820385997" cy="171.75845671848" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="170.60385820385997" cy="209.92700265592" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="628.62640945314" cy="209.92700265592" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="628.62640945314" cy="133.58991078104" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="704.96350132802" cy="552.489702444444" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="704.96350132802" cy="590.658248381884" r="7.633709187488001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_2__stack1"><circle cx="704.96350132802" cy="628.826794319324" r="7.633709187488001" 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 666.7949553905801,628.826794319324
73
+ L 685.8792283593001,639.1323017224328
74
+ L 685.8792283593001,704.5786351564966
75
+ L 647.71068242186,704.5786351564966
76
+ L 647.71068242186,639.1323017224328
77
+ Z
78
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.8168545937440004px"/><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="666.7949553905801" y="646.002639991172" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="34.351691343696px" transform="rotate(90 666.7949553905801 646.002639991172)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="
79
+ M 628.62640945314,133.58991078104
80
+ L 638.9319168562488,114.50563781232
81
+ L 704.3782502903126,114.50563781232
82
+ L 704.3782502903126,152.67418374976
83
+ L 638.9319168562488,152.67418374976
84
+ Z
85
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.8168545937440004px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" x="645.802255124988" y="133.58991078104" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="34.351691343696px" transform="">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" d="
86
+ M 704.96350132802,552.489702444444
87
+ L 694.6579939249112,571.573975413164
88
+ L 629.2116604908474,571.573975413164
89
+ L 629.2116604908474,533.405429475724
90
+ L 694.6579939249112,533.405429475724
91
+ Z
92
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.8168545937440004px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" x="687.787655656172" y="552.489702444444" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="34.351691343696px" transform="">XX</text>
93
+ </g>
94
+ </svg>