@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.30000000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,253.13599999999997 353.6,476.5759999999999" 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.6,-1.895" data-type="line" data-label="" points="308.80000000000007,185.93599999999998 353.6,431.77599999999995" 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 1.299,-0.30000000000000004 1.299,-1.2975000000000003 1.049,-1.2975000000000003 1.049,-2.2950000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,253.13599999999997 319.88800000000003,253.13599999999997 319.88800000000003,364.856 291.88800000000003,364.856 291.88800000000003,476.576 353.6,476.5759999999999" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 1.3010000000000002,0.30000000000000004 1.3010000000000002,0.5010000000000001" data-type="line" data-label="" points="308.80000000000007,185.93599999999998 320.1120000000001,185.93599999999998 320.1120000000001,163.42399999999998" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.6,-1.895 1.499,-1.895 1.499,-1.6940000000000002" data-type="line" data-label="" points="353.6,431.77599999999995 342.288,431.77599999999995 342.288,409.264" 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="40" y="163.536" width="268.80000000000007" height="111.99999999999997" fill="hsl(24, 100%, 50%, 0.8)" 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="409.376" width="246.39999999999998" height="89.60000000000002" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="netId: GND
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,253.13599999999997 353.6,476.5759999999999" 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.6,-1.895" data-type="line" data-label="" points="308.80000000000007,185.93599999999998 353.6,431.77599999999995" 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 1.299,-0.30000000000000004 1.299,-1.2975000000000003 1.049,-1.2975000000000003 1.049,-2.2950000000000004 1.6,-2.295" data-type="line" data-label="" points="308.80000000000007,253.13599999999997 319.88800000000003,253.13599999999997 319.88800000000003,364.856 291.88800000000003,364.856 291.88800000000003,476.576 353.6,476.5759999999999" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2000000000000002,0.30000000000000004 1.3010000000000002,0.30000000000000004 1.3010000000000002,0.5010000000000001" data-type="line" data-label="" points="308.80000000000007,185.93599999999998 320.1120000000001,185.93599999999998 320.1120000000001,163.42399999999998" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.6,-1.895 1.499,-1.895 1.499,-1.6940000000000002" data-type="line" data-label="" points="353.6,431.77599999999995 342.288,431.77599999999995 342.288,409.264" 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="40" y="163.536" width="268.80000000000007" height="111.99999999999997" fill="hsl(24, 100%, 50%, 0.8)" 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="409.376" width="246.39999999999998" height="89.60000000000002" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="netId: GND
2
4
  globalConnNetId: connectivity_net0" data-x="1.049" data-y="-2.5200000000000005" x="280.68800000000005" y="476.5760000000001" width="22.399999999999977" height="50.39999999999998" fill="#00000066" stroke="#000000" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="netId: VCC
3
5
  globalConnNetId: connectivity_net1" data-x="1.3010000000000002" data-y="0.7260000000000001" x="308.91200000000003" y="113.02399999999996" width="22.400000000000034" height="50.400000000000006" fill="#ef444466" stroke="#ef4444" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="netId: VCC
4
6
  globalConnNetId: connectivity_net1" data-x="1.499" data-y="-1.469" x="331.08799999999997" y="358.8639999999999" width="22.400000000000034" height="50.400000000000034" fill="#ef444466" stroke="#ef4444" stroke-width="0.008928571428571428"/></g><g><rect data-type="rect" data-label="netId: MMM
@@ -27,7 +29,7 @@ orientation: x-" data-x="1.6" data-y="-2.095" cx="353.6" cy="454.176" r="3" fill
27
29
  const h = svg.getElementById('crosshair-h');
28
30
  const v = svg.getElementById('crosshair-v');
29
31
  const coords = svg.getElementById('coordinates');
30
-
32
+
31
33
  crosshair.style.display = 'block';
32
34
  h.setAttribute('x1', '0');
33
35
  h.setAttribute('x2', '640');
@@ -46,13 +48,13 @@ orientation: x-" data-x="1.6" data-y="-2.095" cx="353.6" cy="454.176" r="3" fill
46
48
  // y' = (y - ty) / sy
47
49
  const sx = matrix.a;
48
50
  const sy = matrix.d;
49
- const tx = matrix.e;
51
+ const tx = matrix.e;
50
52
  const ty = matrix.f;
51
53
  const realPoint = {
52
54
  x: (x - tx) / sx,
53
55
  y: (y - ty) / sy // Flip y back since we used negative scale
54
56
  }
55
-
57
+
56
58
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
57
59
  coords.setAttribute('x', (x + 5).toString());
58
60
  coords.setAttribute('y', (y - 5).toString());
@@ -60,4 +62,48 @@ orientation: x-" data-x="1.6" data-y="-2.095" cx="353.6" cy="454.176" r="3" fill
60
62
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
61
63
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
62
64
  });
63
- ]]></script></svg>
65
+ ]]></script>
66
+ </g>
67
+ <g transform="translate(1216, 200)">
68
+ <style>
69
+ .boundary { fill: rgb(245, 241, 237); }
70
+ .schematic-boundary { fill: none; stroke: #fff; }
71
+ .component { fill: none; stroke: rgb(132, 0, 0); }
72
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
73
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
74
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
75
+ .pin-number { fill: rgb(169, 0, 0); }
76
+ .port-label { fill: rgb(0, 100, 100); }
77
+ .component-name { fill: rgb(0, 100, 100); }
78
+
79
+ </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 626.14455031382 295.94468975138 L 643.3999535208884 295.94468975138 L 643.3999535208884 469.80594933775103 L 599.8257029979884 469.80594933775103 L 599.8257029979884 643.6672089241221 L 695.86335115046 643.667208924122" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="27.887520334656003px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 626.14455031382 295.94468975138 L 643.3999535208884 295.94468975138 L 643.3999535208884 469.80594933775103 L 599.8257029979884 469.80594933775103 L 599.8257029979884 643.6672089241221 L 695.86335115046 643.667208924122" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.4859400418320003px" 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 626.14455031382 191.36648849642 L 643.7485475250717 191.36648849642 L 643.7485475250717 156.3327910760084" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="27.887520334656003px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 626.14455031382 191.36648849642 L 643.7485475250717 191.36648849642 L 643.7485475250717 156.3327910760084" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.4859400418320003px" 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 695.86335115046 573.948408087482 L 678.2593539392085 573.948408087482 L 678.2593539392085 538.9147106670705" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="27.887520334656003px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 695.86335115046 573.948408087482 L 678.2593539392085 573.948408087482 L 678.2593539392085 538.9147106670705" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.4859400418320003px" 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"/><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="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component chip sch-component-body" x="277.55054613062" y="156.5070880781" width="278.87520334656006" height="174.29700209159998" stroke-width="3.4859400418320003px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="277.55054613062" y="156.5070880781" width="278.87520334656006" height="174.29700209159998" fill="transparent"/><text class="sch-text" x="416.9881478039" y="243.6555891239" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="31.373460376488px" transform="rotate(0, 416.9881478039, 243.6555891239)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="556.42574947718" y1="295.94468975138" x2="626.14455031382" y2="295.94468975138" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="622.658610271988" y="292.458749709548" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="591.2851498955" y="292.458749709548" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="277.55054613062" y1="295.94468975138" x2="211.31768533581197" y2="295.94468975138" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="207.83174529397996" cy="295.94468975138" r="3.4859400418320003" stroke-width="3.4859400418320003px"/><rect x="204.34580525214795" y="292.458749709548" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="242.69114571229997" y="292.458749709548" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="556.42574947718" y1="226.22588891474" x2="622.658610271988" y2="226.22588891474" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="626.14455031382" cy="226.22588891474" r="3.4859400418320003" stroke-width="3.4859400418320003px"/><rect x="622.658610271988" y="222.739948872908" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="591.2851498955" y="222.739948872908" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="277.55054613062" y1="191.36648849642" x2="211.31768533581197" y2="191.36648849642" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="207.83174529397996" cy="191.36648849642" r="3.4859400418320003" stroke-width="3.4859400418320003px"/><rect x="204.34580525214795" y="187.880548454588" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="242.69114571229997" y="187.880548454588" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="277.55054613062" y1="226.22588891473998" x2="211.31768533581197" y2="226.22588891473998" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="207.83174529397996" cy="226.22588891473998" r="3.4859400418320003" stroke-width="3.4859400418320003px"/><rect x="204.34580525214795" y="222.73994887290797" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="242.69114571229997" y="222.739948872908" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="277.55054613062" y1="261.08528933306" x2="211.31768533581197" y2="261.08528933306" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="207.83174529397996" cy="261.08528933306" r="3.4859400418320003" stroke-width="3.4859400418320003px"/><rect x="204.34580525214795" y="257.599349291228" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="242.69114571229997" y="257.599349291228" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="556.42574947718" y1="261.08528933306" x2="622.658610271988" y2="261.08528933306" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="626.14455031382" cy="261.08528933306" r="3.4859400418320003" stroke-width="3.4859400418320003px"/><rect x="622.658610271988" y="257.599349291228" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="591.2851498955" y="257.599349291228" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">7</text><line class="component-pin sch-component-pin sch-port-line" x1="556.42574947718" y1="191.36648849642" x2="626.14455031382" y2="191.36648849642" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><rect x="622.658610271988" y="187.880548454588" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="591.2851498955" y="187.880548454588" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" 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="765.5821519871" y="539.089007669162" width="244.01580292824008" height="139.43760167328003" stroke-width="3.4859400418320003px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="765.5821519871" y="539.089007669162" width="244.01580292824008" height="139.43760167328003" fill="transparent"/><text class="sch-text" x="887.59005345122" y="608.8078085058021" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="31.373460376488px" transform="rotate(0, 887.59005345122, 608.8078085058021)">J1</text><line class="component-pin sch-component-pin sch-port-line" x1="765.5821519871" y1="573.948408087482" x2="695.86335115046" y2="573.948408087482" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><rect x="692.3774111086279" y="570.46246804565" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="730.72275156878" y="570.46246804565" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="765.5821519871" y1="608.8078085058021" x2="699.349291192292" y2="608.8078085058021" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="695.86335115046" cy="608.8078085058021" r="3.4859400418320003" stroke-width="3.4859400418320003px"/><rect x="692.3774111086279" y="605.3218684639701" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="730.72275156878" y="605.3218684639701" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="765.5821519871" y1="643.667208924122" x2="695.86335115046" y2="643.667208924122" stroke-width="3.4859400418320003px"/><g class="sch-port" data-schematic-port-id="source_port_1_2__stack1"><rect x="692.3774111086279" y="640.1812688822899" width="6.971880083664001" height="6.971880083664001" opacity="0"/></g><text class="pin-number sch-pin-number" x="730.72275156878" y="640.18126888229" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="26.14455031374px" transform="">3</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="626.14455031382" cy="295.94468975138" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="207.83174529397996" cy="295.94468975138" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="626.14455031382" cy="226.22588891474" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="207.83174529397996" cy="191.36648849642" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="207.83174529397996" cy="226.22588891473998" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="207.83174529397996" cy="261.08528933306" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="626.14455031382" cy="261.08528933306" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="626.14455031382" cy="191.36648849642" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="695.86335115046" cy="573.948408087482" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="695.86335115046" cy="608.8078085058021" r="6.971880083664001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_2__stack1"><circle cx="695.86335115046" cy="643.667208924122" r="6.971880083664001" 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="
80
+ M 599.8257029979884,643.6672089241221
81
+ L 617.2554032071484,653.0792470370685
82
+ L 617.2554032071484,712.8514989543478
83
+ L 582.3960027888284,712.8514989543478
84
+ L 582.3960027888284,653.0792470370685
85
+ Z
86
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.4859400418320003px"/><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="599.8257029979884" y="659.3539391123661" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="31.373460376488px" transform="rotate(90 599.8257029979884 659.3539391123661)">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="
87
+ M 643.7485475250717,156.3327910760084
88
+ L 626.3188473159116,146.920752963062
89
+ L 626.3188473159116,87.14850104578262
90
+ L 661.1782477342317,87.14850104578262
91
+ L 661.1782477342317,146.920752963062
92
+ Z
93
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.4859400418320003px"/><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="643.7485475250717" y="140.64606088776438" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="31.373460376488px" transform="rotate(-90 643.7485475250717 140.64606088776438)">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="
94
+ M 678.2593539392085,538.9147106670705
95
+ L 660.8296537300484,529.502672554124
96
+ L 660.8296537300484,469.7304206368447
97
+ L 695.6890541483685,469.7304206368447
98
+ L 695.6890541483685,529.502672554124
99
+ Z
100
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.4859400418320003px"/><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="678.2593539392085" y="523.2279804788265" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="31.373460376488px" transform="rotate(-90 678.2593539392085 523.2279804788265)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" d="
101
+ M 695.86335115046,608.8078085058021
102
+ L 686.4513130375135,626.2375087149621
103
+ L 626.6790611202342,626.2375087149621
104
+ L 626.6790611202342,591.378108296642
105
+ L 686.4513130375135,591.378108296642
106
+ Z
107
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.4859400418320003px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" x="680.1766209622159" y="608.8078085058021" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="31.373460376488px" transform="">XX</text>
108
+ </g>
109
+ </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.7999999999999998,-0.30000000000000004 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,247.46987951807228 451.566265060241,240.72289156626505" fill="none" stroke="hsl(194, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.30000000000000004 1.9,0.2" data-type="line" data-label="" points="201.92771084337352,206.9879518072289 451.566265060241,213.73493975903614" fill="none" stroke="hsl(169, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.30000000000000004 0.050000000000000044,0.30000000000000004 0.050000000000000044,0.2 1.9,0.2" data-type="line" data-label="" points="201.92771084337352,206.9879518072289 326.7469879518072,206.9879518072289 326.7469879518072,213.73493975903614 451.566265060241,213.73493975903614" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,-0.30000000000000004 -0.6,-0.30000000000000004 -0.6,0.05099999999999996 0.6,0.05099999999999996 0.6,-0.2 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,247.46987951807228 282.89156626506025,247.46987951807228 282.89156626506025,223.78795180722892 363.855421686747,223.78795180722892 363.855421686747,240.72289156626505 451.566265060241,240.72289156626505" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="0" x="39.99999999999997" y="193.49397590361446" width="161.92771084337352" height="67.46987951807228" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="3" data-y="0" x="451.566265060241" y="200.24096385542168" width="148.433734939759" height="53.97590361445782" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="0" data-y="-2" x="282.89156626506025" y="260.96385542168673" width="80.96385542168673" height="202.40963855421688" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: undefined
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.7999999999999998,-0.30000000000000004 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,247.46987951807228 451.566265060241,240.72289156626505" fill="none" stroke="hsl(194, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.30000000000000004 1.9,0.2" data-type="line" data-label="" points="201.92771084337352,206.9879518072289 451.566265060241,213.73493975903614" fill="none" stroke="hsl(169, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.30000000000000004 0.050000000000000044,0.30000000000000004 0.050000000000000044,0.2 1.9,0.2" data-type="line" data-label="" points="201.92771084337352,206.9879518072289 326.7469879518072,206.9879518072289 326.7469879518072,213.73493975903614 451.566265060241,213.73493975903614" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,-0.30000000000000004 -0.6,-0.30000000000000004 -0.6,0.05099999999999996 0.6,0.05099999999999996 0.6,-0.2 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,247.46987951807228 282.89156626506025,247.46987951807228 282.89156626506025,223.78795180722892 363.855421686747,223.78795180722892 363.855421686747,240.72289156626505 451.566265060241,240.72289156626505" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="0" x="39.99999999999997" y="193.49397590361446" width="161.92771084337352" height="67.46987951807228" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="3" data-y="0" x="451.566265060241" y="200.24096385542168" width="148.433734939759" height="53.97590361445782" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="0" data-y="-2" x="282.89156626506025" y="260.96385542168673" width="80.96385542168673" height="202.40963855421688" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: undefined
2
4
  globalConnNetId: connectivity_net0" data-x="-1.2" data-y="-0.07500000000000004" x="235.66265060240966" y="217.10843373493975" width="13.493975903614484" height="30.361445783132524" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: undefined
3
5
  globalConnNetId: connectivity_net1" data-x="-0.8749999999999999" data-y="0.525" x="257.5903614457832" y="176.6265060240964" width="13.493975903614398" height="30.361445783132524" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: SIGNAL2
4
6
  globalConnNetId: connectivity_net3" data-x="-0.4" data-y="-0.274" x="289.6385542168675" y="230.53493975903615" width="13.493975903614455" height="30.361445783132524" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: SIGNAL1
@@ -31,7 +33,7 @@ orientation: y+" data-x="0.4" data-y="-0.5" cx="350.3614457831325" cy="260.96385
31
33
  const h = svg.getElementById('crosshair-h');
32
34
  const v = svg.getElementById('crosshair-v');
33
35
  const coords = svg.getElementById('coordinates');
34
-
36
+
35
37
  crosshair.style.display = 'block';
36
38
  h.setAttribute('x1', '0');
37
39
  h.setAttribute('x2', '640');
@@ -50,13 +52,13 @@ orientation: y+" data-x="0.4" data-y="-0.5" cx="350.3614457831325" cy="260.96385
50
52
  // y' = (y - ty) / sy
51
53
  const sx = matrix.a;
52
54
  const sy = matrix.d;
53
- const tx = matrix.e;
55
+ const tx = matrix.e;
54
56
  const ty = matrix.f;
55
57
  const realPoint = {
56
58
  x: (x - tx) / sx,
57
59
  y: (y - ty) / sy // Flip y back since we used negative scale
58
60
  }
59
-
61
+
60
62
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
61
63
  coords.setAttribute('x', (x + 5).toString());
62
64
  coords.setAttribute('y', (y - 5).toString());
@@ -64,4 +66,48 @@ orientation: y+" data-x="0.4" data-y="-0.5" cx="350.3614457831325" cy="260.96385
64
66
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
65
67
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
66
68
  });
67
- ]]></script></svg>
69
+ ]]></script>
70
+ </g>
71
+ <g transform="translate(1216, 200)">
72
+ <style>
73
+ .boundary { fill: rgb(245, 241, 237); }
74
+ .schematic-boundary { fill: none; stroke: #fff; }
75
+ .component { fill: none; stroke: rgb(132, 0, 0); }
76
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
77
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
78
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
79
+ .pin-number { fill: rgb(169, 0, 0); }
80
+ .port-label { fill: rgb(0, 100, 100); }
81
+ .component-name { fill: rgb(0, 100, 100); }
82
+
83
+ </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 400.00000000006 199.79555555561 L 646.666666666665 199.79555555561 L 646.666666666665 213.12888888894 L 893.33333333327 213.12888888894" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.333333333328px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 400.00000000006 199.79555555561 L 646.666666666665 199.79555555561 L 646.666666666665 213.12888888894 L 893.33333333327 213.12888888894" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.666666666666px" 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 400.00000000006 279.79555555559 L 560.00000000002 279.79555555559 L 560.00000000002 232.9955555556017 L 719.99999999998 232.9955555556017 L 719.99999999998 266.46222222226 L 893.33333333327 266.46222222226" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.333333333328px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 400.00000000006 279.79555555559 L 560.00000000002 279.79555555559 L 560.00000000002 232.9955555556017 L 719.99999999998 232.9955555556017 L 719.99999999998 266.46222222226 L 893.33333333327 266.46222222226" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.666666666666px" 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"/><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="133.33333333345996" y="173.12888888895" width="213.33333333328005" height="133.33333333330003" stroke-width="2.666666666666px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="133.33333333345996" y="173.12888888895" width="213.33333333328005" height="133.33333333330003" fill="transparent"/><text class="sch-text" x="240.0000000001" y="239.7955555556" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="23.999999999994px" transform="rotate(0, 240.0000000001, 239.7955555556)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="279.79555555559" x2="400.00000000006" y2="279.79555555559" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="397.333333333394" y="277.128888888924" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="277.128888888924" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="279.79555555559" x2="82.6666666668059" y2="279.79555555559" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="279.79555555559" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="277.128888888924" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="277.128888888924" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="226.46222222227001" x2="397.333333333394" y2="226.46222222227001" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="400.00000000006" cy="226.46222222227001" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="397.333333333394" y="223.795555555604" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="223.795555555604" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="199.79555555561" x2="82.6666666668059" y2="199.79555555561" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="199.79555555561" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="197.128888888944" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="197.128888888944" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="226.46222222227" x2="82.6666666668059" y2="226.46222222227" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="226.46222222227" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="223.79555555560398" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="223.795555555604" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="253.12888888893" x2="82.6666666668059" y2="253.12888888893" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="253.12888888893" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="250.462222222264" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="250.462222222264" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="253.12888888893002" x2="397.333333333394" y2="253.12888888893002" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="400.00000000006" cy="253.12888888893002" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="397.333333333394" y="250.46222222226402" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="250.46222222226402" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">7</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="199.79555555561" x2="400.00000000006" y2="199.79555555561" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><rect x="397.333333333394" y="197.128888888944" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="197.128888888944" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" 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="946.66666666659" y="186.46222222228" width="186.66666666662002" height="106.66666666664003" stroke-width="2.666666666666px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="946.66666666659" y="186.46222222228" width="186.66666666662002" height="106.66666666664003" fill="transparent"/><text class="sch-text" x="1039.9999999999" y="239.7955555556" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="23.999999999994px" transform="rotate(0, 1039.9999999999, 239.7955555556)">J1</text><line class="component-pin sch-component-pin sch-port-line" x1="946.66666666659" y1="213.12888888894" x2="893.33333333327" y2="213.12888888894" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><rect x="890.6666666666041" y="210.462222222274" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="919.99999999993" y="210.462222222274" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="946.66666666659" y1="239.7955555556" x2="895.999999999936" y2="239.7955555556" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="893.33333333327" cy="239.7955555556" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="890.6666666666041" y="237.128888888934" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="919.99999999993" y="237.128888888934" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="946.66666666659" y1="266.46222222226" x2="893.33333333327" y2="266.46222222226" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_1_2__stack1"><rect x="890.6666666666041" y="263.795555555594" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="919.99999999993" y="263.795555555594" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">3</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component chip sch-component-body" x="613.33333333334" y="359.79555555557" width="53.33333333332007" height="293.33333333326004" stroke-width="2.666666666666px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="613.33333333334" y="359.79555555557" width="53.33333333332007" height="293.33333333326004" fill="transparent"/><text class="sch-text" x="640" y="506.4622222222" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="23.999999999994px" transform="rotate(0, 640, 506.4622222222)">U2</text><line class="component-pin sch-component-pin sch-port-line" x1="586.66666666668" y1="359.79555555557" x2="586.66666666668" y2="309.128888888916" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_2_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="586.66666666668" cy="306.46222222225003" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="584.0000000000141" y="303.79555555558403" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="584.000000000014" y="333.12888888891" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="rotate(-90 584.000000000014 333.12888888891)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="693.33333333332" y1="359.79555555557" x2="693.33333333332" y2="309.128888888916" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_2_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="693.33333333332" cy="306.46222222225003" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="690.666666666654" y="303.79555555558403" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="690.666666666654" y="333.12888888891" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="rotate(-90 690.666666666654 333.12888888891)">2</text><line class="component-pin sch-component-pin sch-port-line" x1="613.33333333334" y1="613.12888888884" x2="562.666666666686" y2="613.12888888884" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_2_2__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="560.00000000002" cy="613.12888888884" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="557.3333333333541" y="610.4622222221741" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="586.66666666668" y="610.462222222174" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="666.66666666666" y1="613.12888888884" x2="717.333333333314" y2="613.12888888884" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_2_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="719.99999999998" cy="613.12888888884" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="717.333333333314" y="610.4622222221741" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="693.33333333332" y="610.462222222174" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">4</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="400.00000000006" cy="279.79555555559" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="80.00000000013995" cy="279.79555555559" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="400.00000000006" cy="226.46222222227001" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="80.00000000013995" cy="199.79555555561" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="80.00000000013995" cy="226.46222222227" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="80.00000000013995" cy="253.12888888893" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="400.00000000006" cy="253.12888888893002" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="400.00000000006" cy="199.79555555561" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="893.33333333327" cy="213.12888888894" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="893.33333333327" cy="239.7955555556" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_2__stack1"><circle cx="893.33333333327" cy="266.46222222226" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="586.66666666668" cy="306.46222222225003" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="693.33333333332" cy="306.46222222225003" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_2__stack1"><circle cx="560.00000000002" cy="613.12888888884" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_3__stack1"><circle cx="719.99999999998" cy="613.12888888884" r="5.333333333332" 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="
84
+ M 480.00000000004,279.79555555559
85
+ L 466.66666666671,272.5955555555918
86
+ L 466.66666666671,226.8711111111588
87
+ L 493.33333333337004,226.8711111111588
88
+ L 493.33333333337004,272.5955555555918
89
+ Z
90
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><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="480.00000000004" y="267.795555555593" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(-90 480.00000000004 267.795555555593)">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="
91
+ M 523.3333333333625,199.79555555561
92
+ L 510.00000000003246,192.5955555556118
93
+ L 510.00000000003246,146.8711111111788
94
+ L 536.6666666666924,146.8711111111788
95
+ L 536.6666666666924,192.5955555556118
96
+ Z
97
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><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="523.3333333333625" y="187.79555555561302" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(-90 523.3333333333625 187.79555555561302)">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="
98
+ M 586.66666666668,306.46222222225003
99
+ L 573.3333333333501,299.2622222222518
100
+ L 573.3333333333501,253.53777777781883
101
+ L 600.00000000001,253.53777777781883
102
+ L 600.00000000001,299.2622222222518
103
+ Z
104
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><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="586.66666666668" y="294.46222222225305" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(-90 586.66666666668 294.46222222225305)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" d="
105
+ M 693.33333333332,306.46222222225003
106
+ L 679.99999999999,299.2622222222518
107
+ L 679.99999999999,253.53777777781883
108
+ L 706.6666666666499,253.53777777781883
109
+ L 706.6666666666499,299.2622222222518
110
+ Z
111
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" x="693.33333333332" y="294.46222222225305" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(-90 693.33333333332 294.46222222225305)">XX</text>
112
+ </g>
113
+ </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.7999999999999998,-0.30000000000000004 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,365.5421686746988 451.566265060241,358.7951807228916" fill="none" stroke="hsl(328, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.2 -1.7999999999999998,0.09999999999999998" data-type="line" data-label="" points="451.566265060241,331.8072289156627 201.92771084337352,338.5542168674699" fill="none" stroke="hsl(210, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.30000000000000004 0.050000000000000044,-0.30000000000000004 0.050000000000000044,-0.2 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,365.5421686746988 326.7469879518072,365.5421686746988 326.7469879518072,358.7951807228916 451.566265060241,358.7951807228916" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9,0.2 0.6,0.2 0.6,-0.05099999999999996 -0.6,-0.05099999999999996 -0.6,0.09999999999999998 -1.7999999999999998,0.09999999999999998" data-type="line" data-label="" points="451.566265060241,331.8072289156627 363.855421686747,331.8072289156627 363.855421686747,348.7421686746988 282.89156626506025,348.7421686746988 282.89156626506025,338.5542168674699 201.92771084337352,338.5542168674699" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="0" x="39.99999999999997" y="311.566265060241" width="161.92771084337352" height="67.46987951807228" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="3" data-y="0" x="451.566265060241" y="318.3132530120482" width="148.433734939759" height="53.97590361445782" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="0" data-y="1" x="289.6385542168675" y="244.09638554216872" width="67.46987951807228" height="67.4698795180723" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: SSH
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.7999999999999998,-0.30000000000000004 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,365.5421686746988 451.566265060241,358.7951807228916" fill="none" stroke="hsl(328, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.2 -1.7999999999999998,0.09999999999999998" data-type="line" data-label="" points="451.566265060241,331.8072289156627 201.92771084337352,338.5542168674699" fill="none" stroke="hsl(210, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.30000000000000004 0.050000000000000044,-0.30000000000000004 0.050000000000000044,-0.2 1.9,-0.2" data-type="line" data-label="" points="201.92771084337352,365.5421686746988 326.7469879518072,365.5421686746988 326.7469879518072,358.7951807228916 451.566265060241,358.7951807228916" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9,0.2 0.6,0.2 0.6,-0.05099999999999996 -0.6,-0.05099999999999996 -0.6,0.09999999999999998 -1.7999999999999998,0.09999999999999998" data-type="line" data-label="" points="451.566265060241,331.8072289156627 363.855421686747,331.8072289156627 363.855421686747,348.7421686746988 282.89156626506025,348.7421686746988 282.89156626506025,338.5542168674699 201.92771084337352,338.5542168674699" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="0" x="39.99999999999997" y="311.566265060241" width="161.92771084337352" height="67.46987951807228" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="3" data-y="0" x="451.566265060241" y="318.3132530120482" width="148.433734939759" height="53.97590361445782" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="0" data-y="1" x="289.6385542168675" y="244.09638554216872" width="67.46987951807228" height="67.4698795180723" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: SSH
2
4
  globalConnNetId: connectivity_net2" data-x="-0.8749999999999999" data-y="-0.525" x="257.5903614457832" y="365.5421686746988" width="13.493975903614398" height="30.361445783132524" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: BHH
3
5
  globalConnNetId: connectivity_net3" data-x="1.25" data-y="0.42500000000000004" x="400.96385542168673" y="301.4457831325301" width="13.493975903614455" height="30.361445783132524" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: SIGNAL1
4
6
  globalConnNetId: connectivity_net0" data-x="-0.4" data-y="0.274" x="289.6385542168675" y="311.63373493975905" width="13.493975903614455" height="30.361445783132524" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01482142857142857"/></g><g><rect data-type="rect" data-label="netId: SIGNAL2
@@ -29,7 +31,7 @@ orientation: y-" data-x="0.4" data-y="0.5" cx="350.3614457831325" cy="311.566265
29
31
  const h = svg.getElementById('crosshair-h');
30
32
  const v = svg.getElementById('crosshair-v');
31
33
  const coords = svg.getElementById('coordinates');
32
-
34
+
33
35
  crosshair.style.display = 'block';
34
36
  h.setAttribute('x1', '0');
35
37
  h.setAttribute('x2', '640');
@@ -48,13 +50,13 @@ orientation: y-" data-x="0.4" data-y="0.5" cx="350.3614457831325" cy="311.566265
48
50
  // y' = (y - ty) / sy
49
51
  const sx = matrix.a;
50
52
  const sy = matrix.d;
51
- const tx = matrix.e;
53
+ const tx = matrix.e;
52
54
  const ty = matrix.f;
53
55
  const realPoint = {
54
56
  x: (x - tx) / sx,
55
57
  y: (y - ty) / sy // Flip y back since we used negative scale
56
58
  }
57
-
59
+
58
60
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
59
61
  coords.setAttribute('x', (x + 5).toString());
60
62
  coords.setAttribute('y', (y - 5).toString());
@@ -62,4 +64,48 @@ orientation: y-" data-x="0.4" data-y="0.5" cx="350.3614457831325" cy="311.566265
62
64
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
63
65
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
64
66
  });
65
- ]]></script></svg>
67
+ ]]></script>
68
+ </g>
69
+ <g transform="translate(1216, 200)">
70
+ <style>
71
+ .boundary { fill: rgb(245, 241, 237); }
72
+ .schematic-boundary { fill: none; stroke: #fff; }
73
+ .component { fill: none; stroke: rgb(132, 0, 0); }
74
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
75
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
76
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
77
+ .pin-number { fill: rgb(169, 0, 0); }
78
+ .port-label { fill: rgb(0, 100, 100); }
79
+ .component-name { fill: rgb(0, 100, 100); }
80
+
81
+ </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 400.00000000006 466.87111111109 L 646.666666666665 466.87111111109 L 646.666666666665 453.53777777775997 L 893.33333333327 453.53777777775997" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.333333333328px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 400.00000000006 466.87111111109 L 646.666666666665 466.87111111109 L 646.666666666665 453.53777777775997 L 893.33333333327 453.53777777775997" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.666666666666px" 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 893.33333333327 400.20444444444 L 719.99999999998 400.20444444444 L 719.99999999998 433.6711111110983 L 560.00000000002 433.6711111110983 L 560.00000000002 413.53777777777 L 400.00000000006 413.53777777777" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.333333333328px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 893.33333333327 400.20444444444 L 719.99999999998 400.20444444444 L 719.99999999998 433.6711111110983 L 560.00000000002 433.6711111110983 L 560.00000000002 413.53777777777 L 400.00000000006 413.53777777777" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.666666666666px" 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"/><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="133.33333333345996" y="360.20444444445" width="213.33333333328005" height="133.33333333329995" stroke-width="2.666666666666px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="133.33333333345996" y="360.20444444445" width="213.33333333328005" height="133.33333333329995" fill="transparent"/><text class="sch-text" x="240.0000000001" y="426.8711111111" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="23.999999999994px" transform="rotate(0, 240.0000000001, 426.8711111111)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="466.87111111109" x2="400.00000000006" y2="466.87111111109" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="397.333333333394" y="464.204444444424" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="464.204444444424" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="466.87111111109" x2="82.6666666668059" y2="466.87111111109" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="466.87111111109" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="464.204444444424" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="464.204444444424" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="413.53777777777" x2="400.00000000006" y2="413.53777777777" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><rect x="397.333333333394" y="410.87111111110397" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="410.87111111110397" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="386.87111111111" x2="82.6666666668059" y2="386.87111111111" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="386.87111111111" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="384.204444444444" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="384.204444444444" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="413.53777777777" x2="82.6666666668059" y2="413.53777777777" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="413.53777777777" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="410.87111111110397" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="410.87111111110397" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="133.33333333345996" y1="440.20444444443" x2="82.6666666668059" y2="440.20444444443" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="80.00000000013995" cy="440.20444444443" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="77.33333333347395" y="437.537777777764" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="106.66666666679998" y="437.537777777764" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="440.20444444443" x2="397.333333333394" y2="440.20444444443" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="400.00000000006" cy="440.20444444443" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="397.333333333394" y="437.537777777764" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="437.537777777764" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">7</text><line class="component-pin sch-component-pin sch-port-line" x1="346.66666666674" y1="386.87111111111" x2="397.333333333394" y2="386.87111111111" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="400.00000000006" cy="386.87111111111" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="397.333333333394" y="384.204444444444" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="373.33333333340005" y="384.204444444444" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" 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="946.66666666659" y="373.53777777778" width="186.66666666662002" height="106.66666666664003" stroke-width="2.666666666666px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="946.66666666659" y="373.53777777778" width="186.66666666662002" height="106.66666666664003" fill="transparent"/><text class="sch-text" x="1039.9999999999" y="426.8711111111" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="23.999999999994px" transform="rotate(0, 1039.9999999999, 426.8711111111)">J1</text><line class="component-pin sch-component-pin sch-port-line" x1="946.66666666659" y1="400.20444444444" x2="893.33333333327" y2="400.20444444444" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><rect x="890.6666666666041" y="397.537777777774" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="919.99999999993" y="397.537777777774" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="946.66666666659" y1="426.8711111111" x2="895.999999999936" y2="426.8711111111" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="893.33333333327" cy="426.8711111111" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="890.6666666666041" y="424.204444444434" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="919.99999999993" y="424.204444444434" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="946.66666666659" y1="453.53777777775997" x2="893.33333333327" y2="453.53777777775997" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_1_2__stack1"><rect x="890.6666666666041" y="450.87111111109397" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="919.99999999993" y="450.871111111094" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="">3</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component chip sch-component-body" x="573.33333333335" y="280.20444444446997" width="133.33333333330006" height="26.666666666660035" stroke-width="2.666666666666px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="573.33333333335" y="280.20444444446997" width="133.33333333330006" height="26.666666666660035" fill="transparent"/><text class="sch-text" x="640" y="293.5377777778" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="23.999999999994px" transform="rotate(0, 640, 293.5377777778)">U2</text><line class="component-pin sch-component-pin sch-port-line" x1="586.66666666668" y1="306.87111111113" x2="586.66666666668" y2="357.53777777778396" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_2_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="586.66666666668" cy="360.20444444445" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="584.0000000000141" y="357.537777777784" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="584.000000000014" y="333.53777777779" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="rotate(-90 584.000000000014 333.53777777779)">3</text><line class="component-pin sch-component-pin sch-port-line" x1="693.33333333332" y1="306.87111111113" x2="693.33333333332" y2="357.53777777778396" stroke-width="2.666666666666px"/><g class="sch-port" data-schematic-port-id="source_port_2_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="693.33333333332" cy="360.20444444445" r="2.666666666666" stroke-width="2.666666666666px"/><rect x="690.666666666654" y="357.537777777784" width="5.333333333332" height="5.333333333332" opacity="0"/></g><text class="pin-number sch-pin-number" x="690.666666666654" y="333.53777777779" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="19.999999999995px" transform="rotate(-90 690.666666666654 333.53777777779)">4</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="400.00000000006" cy="466.87111111109" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="80.00000000013995" cy="466.87111111109" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="400.00000000006" cy="413.53777777777" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="80.00000000013995" cy="386.87111111111" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="80.00000000013995" cy="413.53777777777" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="80.00000000013995" cy="440.20444444443" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="400.00000000006" cy="440.20444444443" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="400.00000000006" cy="386.87111111111" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="893.33333333327" cy="400.20444444444" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="893.33333333327" cy="426.8711111111" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_2__stack1"><circle cx="893.33333333327" cy="453.53777777775997" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="586.66666666668" cy="360.20444444445" r="5.333333333332" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="693.33333333332" cy="360.20444444445" r="5.333333333332" 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="
82
+ M 523.3333333333625,466.87111111109
83
+ L 536.6666666666924,474.0711111110882
84
+ L 536.6666666666924,519.7955555555212
85
+ L 510.00000000003246,519.7955555555212
86
+ L 510.00000000003246,474.0711111110882
87
+ Z
88
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><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="523.3333333333625" y="478.871111111087" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(90 523.3333333333625 478.871111111087)">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="
89
+ M 806.666666666625,400.20444444444
90
+ L 793.3333333332951,393.0044444444418
91
+ L 793.3333333332951,347.2800000000088
92
+ L 819.999999999955,347.2800000000088
93
+ L 819.999999999955,393.0044444444418
94
+ Z
95
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><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="806.666666666625" y="388.204444444443" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(-90 806.666666666625 388.204444444443)">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="
96
+ M 586.66666666668,360.20444444445
97
+ L 600.00000000001,367.40444444444825
98
+ L 600.00000000001,413.12888888888125
99
+ L 573.3333333333501,413.12888888888125
100
+ L 573.3333333333501,367.40444444444825
101
+ Z
102
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><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="586.66666666668" y="372.204444444447" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(90 586.66666666668 372.204444444447)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" d="
103
+ M 693.33333333332,360.20444444445
104
+ L 706.6666666666499,367.40444444444825
105
+ L 706.6666666666499,413.12888888888125
106
+ L 679.99999999999,413.12888888888125
107
+ L 679.99999999999,367.40444444444825
108
+ Z
109
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.666666666666px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" x="693.33333333332" y="372.204444444447" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="23.999999999994px" transform="rotate(90 693.33333333332 372.204444444447)">XX</text>
110
+ </g>
111
+ </svg>