@tscircuit/schematic-trace-solver 0.0.90 → 0.0.91

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 (22) hide show
  1. package/dist/index.js +12 -0
  2. package/lib/solvers/SchematicTracePipelineSolver/correctPinsInsideChip.ts +19 -0
  3. package/package.json +1 -1
  4. package/site/bug-reports/bug-report-20260707T230831Z.page.tsx +4 -0
  5. package/site/bug-reports/bug-report-20260708T053736Z.page.tsx +4 -0
  6. package/site/bug-reports/bug-report-20260708T055430Z.page.tsx +4 -0
  7. package/site/bug-reports/bug-report-20260708T095725Z.page.tsx +4 -0
  8. package/tests/bug-reports/bug-report-20260707T230831Z/__snapshots__/bug-report-20260707T230831Z.snap.svg +94 -0
  9. package/tests/bug-reports/bug-report-20260707T230831Z/bug-report-20260707T230831Z.json +347 -0
  10. package/tests/bug-reports/bug-report-20260707T230831Z/bug-report-20260707T230831Z.test.ts +12 -0
  11. package/tests/bug-reports/bug-report-20260708T053736Z/__snapshots__/bug-report-20260708T053736Z.snap.svg +52 -0
  12. package/tests/bug-reports/bug-report-20260708T053736Z/bug-report-20260708T053736Z.json +59 -0
  13. package/tests/bug-reports/bug-report-20260708T053736Z/bug-report-20260708T053736Z.test.ts +12 -0
  14. package/tests/bug-reports/bug-report-20260708T055430Z/__snapshots__/bug-report-20260708T055430Z.snap.svg +88 -0
  15. package/tests/bug-reports/bug-report-20260708T055430Z/bug-report-20260708T055430Z.json +263 -0
  16. package/tests/bug-reports/bug-report-20260708T055430Z/bug-report-20260708T055430Z.test.ts +12 -0
  17. package/tests/bug-reports/bug-report-20260708T095725Z/__snapshots__/bug-report-20260708T095725Z.snap.svg +87 -0
  18. package/tests/bug-reports/bug-report-20260708T095725Z/bug-report-20260708T095725Z.json +277 -0
  19. package/tests/bug-reports/bug-report-20260708T095725Z/bug-report-20260708T095725Z.test.ts +12 -0
  20. package/tests/repros/__snapshots__/small-variant-resistor-facing-direction.snap.svg +86 -0
  21. package/tests/repros/assets/small-variant-resistor-facing-direction.input.json +297 -0
  22. package/tests/repros/small-variant-resistor-facing-direction.test.ts +35 -0
package/dist/index.js CHANGED
@@ -3838,6 +3838,18 @@ var correctPinsInsideChips = (problem) => {
3838
3838
  for (const pin of chip.pins) {
3839
3839
  const isInside = pin.x > bounds.minX && pin.x < bounds.maxX && pin.y > bounds.minY && pin.y < bounds.maxY;
3840
3840
  if (!isInside) continue;
3841
+ if (pin._facingDirection) {
3842
+ if (pin._facingDirection === "x-") {
3843
+ pin.x = bounds.minX;
3844
+ } else if (pin._facingDirection === "x+") {
3845
+ pin.x = bounds.maxX;
3846
+ } else if (pin._facingDirection === "y-") {
3847
+ pin.y = bounds.minY;
3848
+ } else {
3849
+ pin.y = bounds.maxY;
3850
+ }
3851
+ continue;
3852
+ }
3841
3853
  const distLeft = pin.x - bounds.minX;
3842
3854
  const distRight = bounds.maxX - pin.x;
3843
3855
  const distBottom = pin.y - bounds.minY;
@@ -13,6 +13,25 @@ export const correctPinsInsideChips = (problem: InputProblem) => {
13
13
 
14
14
  if (!isInside) continue
15
15
 
16
+ // When the pin already knows which way it faces (e.g. the consumer set it
17
+ // from the schematic symbol), snap it to the edge along that direction and
18
+ // keep the facing. A pin can end up inside the box when the box was
19
+ // expanded to include the component's reference-designator text; snapping
20
+ // to the nearest edge would move it to the wrong side (e.g. a horizontal
21
+ // resistor whose wide ref text makes the bottom edge the closest one).
22
+ if (pin._facingDirection) {
23
+ if (pin._facingDirection === "x-") {
24
+ pin.x = bounds.minX
25
+ } else if (pin._facingDirection === "x+") {
26
+ pin.x = bounds.maxX
27
+ } else if (pin._facingDirection === "y-") {
28
+ pin.y = bounds.minY
29
+ } else {
30
+ pin.y = bounds.maxY
31
+ }
32
+ continue
33
+ }
34
+
16
35
  const distLeft = pin.x - bounds.minX
17
36
  const distRight = bounds.maxX - pin.x
18
37
  const distBottom = pin.y - bounds.minY
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/schematic-trace-solver",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.90",
4
+ "version": "0.0.91",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/bug-reports/bug-report-20260707T230831Z/bug-report-20260707T230831Z.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/bug-reports/bug-report-20260708T053736Z/bug-report-20260708T053736Z.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/bug-reports/bug-report-20260708T055430Z/bug-report-20260708T055430Z.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/bug-reports/bug-report-20260708T095725Z/bug-report-20260708T095725Z.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,94 @@
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="-0.6,3.1 -0.5279125,3.10262455" data-type="line" data-label="" points="312.3309111235327,146.27166014533262 316.84393515930685,146.1073506987144" fill="none" stroke="hsl(232, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="0.6,3.1 0.5279125,3.0973754500000004" data-type="line" data-label="" points="387.4566797093348,146.27166014533262 382.94365567356067,146.43596959195082" fill="none" stroke="hsl(0, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.975 -4.5,0.030000000000000027" data-type="line" data-label="" points="237.20514253773058,279.3068753493572 68.17216321967584,338.4684181106764" fill="none" stroke="hsl(296, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.975 -1.7999999999999998,0.32499999999999996" data-type="line" data-label="" points="237.20514253773058,279.3068753493572 237.20514253773058,320" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.975 1.55,1.1" data-type="line" data-label="" points="237.20514253773058,279.3068753493572 446.9312465064282,271.4812744550028" fill="none" stroke="hsl(240, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.7999999999999998,0.975 3.4,0.030000000000000027" data-type="line" data-label="" points="462.58244829513694,279.3068753493572 562.7501397428731,338.4684181106764" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.7999999999999998,0.975 2.25,-0.04999999999999999" data-type="line" data-label="" points="462.58244829513694,279.3068753493572 490.7546115148127,343.47680268306317" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.7999999999999998,0.32500000000000007 1.55,0.5" data-type="line" data-label="" points="462.58244829513694,320 446.9312465064282,309.0441587479039" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.7999999999999998,-0.32499999999999996 2.25,-0.6499999999999999" data-type="line" data-label="" points="462.58244829513694,360.69312465064286 490.7546115148127,381.03968697596423" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.7999999999999998,-0.32499999999999996 2.25,-1.7999999999999998" data-type="line" data-label="" points="462.58244829513694,360.69312465064286 490.7546115148127,453.0352152040246" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.32499999999999996 -1.7999999999999998,0.975" data-type="line" data-label="" points="237.20514253773058,320 237.20514253773058,279.3068753493572" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,0.32499999999999996 -4.5,0.030000000000000027" data-type="line" data-label="" points="237.20514253773058,320 68.17216321967584,338.4684181106764" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,0.32499999999999996 1.55,1.1" data-type="line" data-label="" points="237.20514253773058,320 446.9312465064282,271.4812744550028" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,0.975 -4.5,0.030000000000000027" data-type="line" data-label="" points="237.20514253773058,279.3068753493572 68.17216321967584,338.4684181106764" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,0.975 1.55,1.1" data-type="line" data-label="" points="237.20514253773058,279.3068753493572 446.9312465064282,271.4812744550028" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.5,0.030000000000000027 1.55,1.1" data-type="line" data-label="" points="68.17216321967584,338.4684181106764 446.9312465064282,271.4812744550028" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.32500000000000007 1.7999999999999998,-0.975" data-type="line" data-label="" points="237.20514253773058,360.69312465064286 462.58244829513694,401.38624930128566" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.32500000000000007 -1.7999999999999998,-0.975" data-type="line" data-label="" points="237.20514253773058,360.69312465064286 237.20514253773058,401.38624930128566" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.32500000000000007 -4.5,-0.73" data-type="line" data-label="" points="237.20514253773058,360.69312465064286 68.17216321967584,386.04807154835106" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.32500000000000007 3.4,-0.73" data-type="line" data-label="" points="237.20514253773058,360.69312465064286 562.7501397428731,386.04807154835106" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.32500000000000007 2.25,-2.4000000000000004" data-type="line" data-label="" points="237.20514253773058,360.69312465064286 490.7546115148127,490.59809949692567" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.7999999999999998,-0.975 -1.7999999999999998,-0.975" data-type="line" data-label="" points="462.58244829513694,401.38624930128566 237.20514253773058,401.38624930128566" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.7999999999999998,-0.975 -4.5,-0.73" data-type="line" data-label="" points="462.58244829513694,401.38624930128566 68.17216321967584,386.04807154835106" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.7999999999999998,-0.975 3.4,-0.73" data-type="line" data-label="" points="462.58244829513694,401.38624930128566 562.7501397428731,386.04807154835106" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.7999999999999998,-0.975 2.25,-2.4000000000000004" data-type="line" data-label="" points="462.58244829513694,401.38624930128566 490.7546115148127,490.59809949692567" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.975 -4.5,-0.73" data-type="line" data-label="" points="237.20514253773058,401.38624930128566 68.17216321967584,386.04807154835106" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.975 3.4,-0.73" data-type="line" data-label="" points="237.20514253773058,401.38624930128566 562.7501397428731,386.04807154835106" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.7999999999999998,-0.975 2.25,-2.4000000000000004" data-type="line" data-label="" points="237.20514253773058,401.38624930128566 490.7546115148127,490.59809949692567" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.5,-0.73 3.4,-0.73" data-type="line" data-label="" points="68.17216321967584,386.04807154835106 562.7501397428731,386.04807154835106" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.5,-0.73 2.25,-2.4000000000000004" data-type="line" data-label="" points="68.17216321967584,386.04807154835106 490.7546115148127,490.59809949692567" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3.4,-0.73 2.25,-2.4000000000000004" data-type="line" data-label="" points="562.7501397428731,386.04807154835106 490.7546115148127,490.59809949692567" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.7999999999999998,0.32500000000000007 1.55,0.5" data-type="line" data-label="" points="462.58244829513694,320 446.9312465064282,309.0441587479039" fill="none" stroke="hsl(31, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.7999999999999998,0.975 3.4,0.030000000000000027" data-type="line" data-label="" points="462.58244829513694,279.3068753493572 562.7501397428731,338.4684181106764" fill="none" stroke="hsl(64, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.7999999999999998,0.975 2.25,-0.04999999999999999" data-type="line" data-label="" points="462.58244829513694,279.3068753493572 490.7546115148127,343.47680268306317" fill="none" stroke="hsl(64, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3.4,0.030000000000000027 2.25,-0.04999999999999999" data-type="line" data-label="" points="562.7501397428731,338.4684181106764 490.7546115148127,343.47680268306317" fill="none" stroke="hsl(64, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.6,3.1 -0.6,3.3000000000000003 -0.7279125000000003,3.3000000000000003 -0.7279125000000003,3.10262455 -0.5279125000000001,3.10262455" data-type="line" data-label="" points="312.3309111235327,146.27166014533262 312.3309111235327,133.75069871436557 304.32297372833983,133.75069871436557 304.32297372833983,146.1073506987144 316.84393515930685,146.1073506987144" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,0.975 -1.9999999999999998,0.975 -1.9999999999999998,0.32499999999999996 -1.7999999999999998,0.32499999999999996" data-type="line" data-label="" points="237.20514253773058,279.3068753493572 224.68418110676356,279.3068753493572 224.68418110676356,320 237.20514253773058,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.25,-0.04999999999999999 2.25,0.23000000000000026 3.4,0.23000000000000026 3.4,0.030000000000000082" data-type="line" data-label="" points="490.7546115148127,343.47680268306317 490.7546115148127,325.9474566797093 562.7501397428731,325.9474566797093 562.7501397428731,338.4684181106764" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.25,-1.7999999999999998 2.25,-0.6499999999999999" data-type="line" data-label="" points="490.7546115148127,453.0352152040246 490.7546115148127,381.03968697596423" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.7999999999999998,-0.975 3.4,-0.975 3.4,-0.73" data-type="line" data-label="" points="462.58244829513694,401.38624930128566 562.7501397428731,401.38624930128566 562.7501397428731,386.04807154835106" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.25,-2.4000000000000004 2.25,-2.6000000000000005 3.0900000000000003,-2.6000000000000005 3.0900000000000003,-0.975 1.7999999999999998,-0.975" data-type="line" data-label="" points="490.7546115148127,490.59809949692567 490.7546115148127,503.11906092789275 543.3426495248742,503.11906092789275 543.3426495248742,401.38624930128566 462.58244829513694,401.38624930128566" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.7999999999999998,-0.975 -1.9999999999999998,-0.975 -1.9999999999999998,-0.32500000000000007 -1.7999999999999998,-0.32500000000000007" data-type="line" data-label="" points="237.20514253773058,401.38624930128566 224.68418110676356,401.38624930128566 224.68418110676356,360.69312465064286 237.20514253773058,360.69312465064286" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-4.5,-0.73 -4.5,-0.9750000000000001 -1.7999999999999998,-0.9750000000000001" data-type="line" data-label="" points="68.17216321967584,386.04807154835106 68.17216321967584,401.38624930128566 237.20514253773058,401.38624930128566" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9999999999999998,0.975 -2.2899999999999996,0.975 -2.2899999999999996,0.976" data-type="line" data-label="" points="224.68418110676356,279.3068753493572 206.5287870318614,279.3068753493572 206.5287870318614,279.24427054220234" 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="237.20514253773058" y="146.2716601453326" width="225.37730575740636" height="388.1498043599777" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="0" data-y="3.1" x="316.84393515930685" y="119.10929055338178" width="66.09972051425382" height="54.32473918390167" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-4.4275" data-y="-0.35" x="40" y="338.4684181106764" width="65.42202347680268" height="47.579653437674665" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="3.4725" data-y="-0.35" x="534.5779765231973" y="338.4684181106764" width="65.42202347680268" height="47.579653437674665" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="2.4050000000000002" data-y="-0.35" x="462.58244829513694" y="343.47680268306317" width="75.75181665735045" height="37.56288429290106" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="schematic_component_5" data-x="2.345" data-y="-2.1" x="462.582448295137" y="453.03521520402455" width="68.2392397987702" height="37.56288429290106" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="schematic_component_6" data-x="1.705" data-y="0.8" x="418.75908328675234" y="271.4812744550028" width="75.7518166573505" height="37.56288429290112" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="TPS63802DLAR" data-x="2.2199999999999998" data-y="3.0500000000000003" x="443.8010061486864" y="143.7674678591392" width="90.1509223029625" height="11.268865287870312" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="U1" data-x="1.62" data-y="2.8150000000000004" x="440.0447177193963" y="156.28842929010622" width="22.537730575740625" height="15.65120178870876" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: VIN
2
+ globalConnNetId: connectivity_net2" data-x="-2.2899999999999996" data-y="1.186" x="191.503633314701" y="252.95025153717165" width="30.050307434320814" height="26.29401900503069" fill="#ef444466" stroke="#ef4444" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: VIN
3
+ globalConnNetId: connectivity_net2" data-x="-4.5" data-y="0.24100000000000002" x="53.147009502515374" y="312.11179429849085" width="30.050307434320928" height="26.294019005030748" fill="#ef444466" stroke="#ef4444" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: VIN
4
+ globalConnNetId: connectivity_net2" data-x="1.55" data-y="1.311" x="440.67076579094464" y="245.12465064281722" width="12.520961430967077" height="26.294019005030748" fill="#ef444466" stroke="#ef4444" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: GND
5
+ globalConnNetId: connectivity_net6" data-x="-4.5" data-y="-1.185" x="53.147009502515374" y="401.3862493012856" width="30.050307434320928" height="26.294019005030748" fill="#00000066" stroke="#000000" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: GND
6
+ globalConnNetId: connectivity_net6" data-x="2.25" data-y="-2.8100000000000005" x="475.72945779765223" y="503.1190609278927" width="30.050307434320928" height="26.29401900503069" fill="#00000066" stroke="#000000" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: U1.FB to R2.pin1
7
+ globalConnNetId: connectivity_net5" data-x="2.026" data-y="-0.32499999999999996" x="462.64505310229174" y="354.4326439351594" width="28.172163219675838" height="12.52096143096702" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: U1.FB to R2.pin1
8
+ globalConnNetId: connectivity_net5" data-x="2.475" data-y="-1.2249999999999999" x="490.7546115148128" y="410.77697037451094" width="28.17216321967578" height="12.520961430966963" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: PG
9
+ globalConnNetId: connectivity_net4" data-x="1.9809999999999997" data-y="0.32500000000000007" x="462.64505310229174" y="313.7395192845165" width="22.537730575740625" height="12.52096143096702" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: PG
10
+ globalConnNetId: connectivity_net4" data-x="1.55" data-y="0.319" x="440.67076579094464" y="309.1067635550587" width="12.520961430967077" height="22.537730575740625" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: VOUT
11
+ globalConnNetId: connectivity_net3" data-x="2.0109999999999997" data-y="0.975" x="462.64505310229174" y="273.04639463387366" width="26.294019005030748" height="12.52096143096702" fill="#ef444466" stroke="#ef4444" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: VOUT
12
+ globalConnNetId: connectivity_net3" data-x="2.825" data-y="0.4400000000000003" x="507.97093348239247" y="299.65343767467857" width="37.562884292901" height="26.294019005030748" fill="#ef444466" stroke="#ef4444" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: U1.L2 to L1.pin2
13
+ globalConnNetId: connectivity_net1" data-x="0.6" data-y="3.326" x="381.19619899385134" y="118.03689211850197" width="12.520961430966963" height="28.17216321967581" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: U1.L2 to L1.pin2
14
+ globalConnNetId: connectivity_net1" data-x="0.7539125" data-y="3.0973754500000004" x="383.00626048071547" y="140.1754888764673" width="28.17216321967578" height="12.52096143096702" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015973214285714285"/></g><g><rect data-type="rect" data-label="netId: U1.L1 to L1.pin1
15
+ globalConnNetId: connectivity_net0" data-x="-0.6639562500000001" data-y="3.5250000000000004" x="302.0664617104528" y="105.57853549468979" width="12.52096143096702" height="28.17216321967578" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015973214285714285"/></g><g><circle data-type="point" data-label="U1.1
16
+ x-" data-x="-1.7999999999999998" data-y="0.32499999999999996" cx="237.20514253773058" cy="320" r="3" fill="hsl(319, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.2
17
+ x-" data-x="-1.7999999999999998" data-y="-0.32500000000000007" cx="237.20514253773058" cy="360.69312465064286" r="3" fill="hsl(320, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.3
18
+ x+" data-x="1.7999999999999998" data-y="-0.975" cx="462.58244829513694" cy="401.38624930128566" r="3" fill="hsl(321, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.4
19
+ x+" data-x="1.7999999999999998" data-y="-0.32499999999999996" cx="462.58244829513694" cy="360.69312465064286" r="3" fill="hsl(322, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.5
20
+ x+" data-x="1.7999999999999998" data-y="0.32500000000000007" cx="462.58244829513694" cy="320" r="3" fill="hsl(323, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.6
21
+ x+" data-x="1.7999999999999998" data-y="0.975" cx="462.58244829513694" cy="279.3068753493572" r="3" fill="hsl(324, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.7
22
+ y+" data-x="0.6" data-y="3.1" cx="387.4566797093348" cy="146.27166014533262" r="3" fill="hsl(325, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.8
23
+ x-" data-x="-1.7999999999999998" data-y="-0.975" cx="237.20514253773058" cy="401.38624930128566" r="3" fill="hsl(326, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.9
24
+ y+" data-x="-0.6" data-y="3.1" cx="312.3309111235327" cy="146.27166014533262" r="3" fill="hsl(327, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.10
25
+ x-" data-x="-1.7999999999999998" data-y="0.975" cx="237.20514253773058" cy="279.3068753493572" r="3" fill="hsl(217, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="L1.1
26
+ x-" data-x="-0.5279125" data-y="3.10262455" cx="316.84393515930685" cy="146.1073506987144" r="3" fill="hsl(40, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="L1.2
27
+ x+" data-x="0.5279125" data-y="3.0973754500000004" cx="382.94365567356067" cy="146.43596959195082" r="3" fill="hsl(41, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.1
28
+ y+" data-x="-4.5" data-y="0.030000000000000027" cx="68.17216321967584" cy="338.4684181106764" r="3" fill="hsl(121, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.2
29
+ y-" data-x="-4.5" data-y="-0.73" cx="68.17216321967584" cy="386.04807154835106" r="3" fill="hsl(122, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.1
30
+ y+" data-x="3.4" data-y="0.030000000000000027" cx="562.7501397428731" cy="338.4684181106764" r="3" fill="hsl(2, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.2
31
+ y-" data-x="3.4" data-y="-0.73" cx="562.7501397428731" cy="386.04807154835106" r="3" fill="hsl(3, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.1
32
+ y+" data-x="2.25" data-y="-0.04999999999999999" cx="490.7546115148127" cy="343.47680268306317" r="3" fill="hsl(226, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.2
33
+ y-" data-x="2.25" data-y="-0.6499999999999999" cx="490.7546115148127" cy="381.03968697596423" r="3" fill="hsl(227, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R2.1
34
+ y+" data-x="2.25" data-y="-1.7999999999999998" cx="490.7546115148127" cy="453.0352152040246" r="3" fill="hsl(107, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R2.2
35
+ y-" data-x="2.25" data-y="-2.4000000000000004" cx="490.7546115148127" cy="490.59809949692567" r="3" fill="hsl(108, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R3.1
36
+ y+" data-x="1.55" data-y="1.1" cx="446.9312465064282" cy="271.4812744550028" r="3" fill="hsl(348, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R3.2
37
+ y-" data-x="1.55" data-y="0.5" cx="446.9312465064282" cy="309.0441587479039" r="3" fill="hsl(349, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
38
+ orientation: y+" data-x="-2.2899999999999996" data-y="0.976" cx="206.5287870318614" cy="279.24427054220234" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
39
+ orientation: y+" data-x="-4.5" data-y="0.030000000000000027" cx="68.17216321967584" cy="338.4684181106764" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
40
+ orientation: y+" data-x="1.55" data-y="1.1" cx="446.9312465064282" cy="271.4812744550028" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
41
+ orientation: y-" data-x="-4.5" data-y="-0.9750000000000001" cx="68.17216321967584" cy="401.38624930128566" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
42
+ orientation: y-" data-x="2.25" data-y="-2.6000000000000005" cx="490.7546115148127" cy="503.11906092789275" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
43
+ orientation: x+" data-x="1.7999999999999998" data-y="-0.32499999999999996" cx="462.58244829513694" cy="360.69312465064286" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
44
+ orientation: x+" data-x="2.25" data-y="-1.2249999999999999" cx="490.7546115148127" cy="417.0374510899944" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
45
+ orientation: x+" data-x="1.7999999999999998" data-y="0.32500000000000007" cx="462.58244829513694" cy="320" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
46
+ orientation: y-" data-x="1.55" data-y="0.5" cx="446.9312465064282" cy="309.0441587479039" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
47
+ orientation: x+" data-x="1.7999999999999998" data-y="0.975" cx="462.58244829513694" cy="279.3068753493572" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
48
+ orientation: y+" data-x="2.825" data-y="0.23000000000000026" cx="526.752375628843" cy="325.9474566797093" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
49
+ orientation: y+" data-x="0.6" data-y="3.1" cx="387.4566797093348" cy="146.27166014533262" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
50
+ orientation: x+" data-x="0.5279125" data-y="3.0973754500000004" cx="382.94365567356067" cy="146.43596959195082" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
51
+ orientation: y+" data-x="-0.6639562500000001" data-y="3.3000000000000003" cx="308.3269424259363" cy="133.75069871436557" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
52
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
53
+ const svg = e.currentTarget;
54
+ const rect = svg.getBoundingClientRect();
55
+ const x = e.clientX - rect.left;
56
+ const y = e.clientY - rect.top;
57
+ const crosshair = svg.getElementById('crosshair');
58
+ const h = svg.getElementById('crosshair-h');
59
+ const v = svg.getElementById('crosshair-v');
60
+ const coords = svg.getElementById('coordinates');
61
+
62
+ crosshair.style.display = 'block';
63
+ h.setAttribute('x1', '0');
64
+ h.setAttribute('x2', '640');
65
+ h.setAttribute('y1', y);
66
+ h.setAttribute('y2', y);
67
+ v.setAttribute('x1', x);
68
+ v.setAttribute('x2', x);
69
+ v.setAttribute('y1', '0');
70
+ v.setAttribute('y2', '640');
71
+
72
+ // Calculate real coordinates using inverse transformation
73
+ const matrix = {"a":62.6048071548351,"c":0,"e":349.89379541643376,"b":0,"d":-62.6048071548351,"f":340.34656232532143};
74
+ // Manually invert and apply the affine transform
75
+ // Since we only use translate and scale, we can directly compute:
76
+ // x' = (x - tx) / sx
77
+ // y' = (y - ty) / sy
78
+ const sx = matrix.a;
79
+ const sy = matrix.d;
80
+ const tx = matrix.e;
81
+ const ty = matrix.f;
82
+ const realPoint = {
83
+ x: (x - tx) / sx,
84
+ y: (y - ty) / sy // Flip y back since we used negative scale
85
+ }
86
+
87
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
88
+ coords.setAttribute('x', (x + 5).toString());
89
+ coords.setAttribute('y', (y - 5).toString());
90
+ });
91
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
92
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
93
+ });
94
+ ]]></script></svg>
@@ -0,0 +1,347 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": 0,
7
+ "y": 0
8
+ },
9
+ "width": 3.5999999999999996,
10
+ "height": 6.2,
11
+ "pins": [
12
+ {
13
+ "pinId": "U1.1",
14
+ "x": -1.7999999999999998,
15
+ "y": 0.32499999999999996
16
+ },
17
+ {
18
+ "pinId": "U1.2",
19
+ "x": -1.7999999999999998,
20
+ "y": -0.32500000000000007
21
+ },
22
+ {
23
+ "pinId": "U1.3",
24
+ "x": 1.7999999999999998,
25
+ "y": -0.975
26
+ },
27
+ {
28
+ "pinId": "U1.4",
29
+ "x": 1.7999999999999998,
30
+ "y": -0.32499999999999996
31
+ },
32
+ {
33
+ "pinId": "U1.5",
34
+ "x": 1.7999999999999998,
35
+ "y": 0.32500000000000007
36
+ },
37
+ {
38
+ "pinId": "U1.6",
39
+ "x": 1.7999999999999998,
40
+ "y": 0.975
41
+ },
42
+ {
43
+ "pinId": "U1.7",
44
+ "x": 0.6,
45
+ "y": 3.1
46
+ },
47
+ {
48
+ "pinId": "U1.8",
49
+ "x": -1.7999999999999998,
50
+ "y": -0.975
51
+ },
52
+ {
53
+ "pinId": "U1.9",
54
+ "x": -0.6,
55
+ "y": 3.1
56
+ },
57
+ {
58
+ "pinId": "U1.10",
59
+ "x": -1.7999999999999998,
60
+ "y": 0.975
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ "chipId": "schematic_component_1",
66
+ "center": {
67
+ "x": 0,
68
+ "y": 3.1
69
+ },
70
+ "width": 1.055825,
71
+ "height": 0.8677407000000006,
72
+ "pins": [
73
+ {
74
+ "pinId": "L1.1",
75
+ "x": -0.5279125,
76
+ "y": 3.10262455
77
+ },
78
+ {
79
+ "pinId": "L1.2",
80
+ "x": 0.5279125,
81
+ "y": 3.0973754500000004
82
+ }
83
+ ]
84
+ },
85
+ {
86
+ "chipId": "schematic_component_2",
87
+ "center": {
88
+ "x": -4.4275,
89
+ "y": -0.35
90
+ },
91
+ "width": 1.0450000000000004,
92
+ "height": 0.76,
93
+ "pins": [
94
+ {
95
+ "pinId": "C1.1",
96
+ "x": -4.5,
97
+ "y": 0.030000000000000027
98
+ },
99
+ {
100
+ "pinId": "C1.2",
101
+ "x": -4.5,
102
+ "y": -0.73
103
+ }
104
+ ]
105
+ },
106
+ {
107
+ "chipId": "schematic_component_3",
108
+ "center": {
109
+ "x": 3.4725,
110
+ "y": -0.35
111
+ },
112
+ "width": 1.0450000000000004,
113
+ "height": 0.76,
114
+ "pins": [
115
+ {
116
+ "pinId": "C2.1",
117
+ "x": 3.4,
118
+ "y": 0.030000000000000027
119
+ },
120
+ {
121
+ "pinId": "C2.2",
122
+ "x": 3.4,
123
+ "y": -0.73
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "chipId": "schematic_component_4",
129
+ "center": {
130
+ "x": 2.4050000000000002,
131
+ "y": -0.35
132
+ },
133
+ "width": 1.2100000000000002,
134
+ "height": 0.6,
135
+ "pins": [
136
+ {
137
+ "pinId": "R1.1",
138
+ "x": 2.25,
139
+ "y": -0.04999999999999999
140
+ },
141
+ {
142
+ "pinId": "R1.2",
143
+ "x": 2.25,
144
+ "y": -0.6499999999999999
145
+ }
146
+ ]
147
+ },
148
+ {
149
+ "chipId": "schematic_component_5",
150
+ "center": {
151
+ "x": 2.345,
152
+ "y": -2.1
153
+ },
154
+ "width": 1.09,
155
+ "height": 0.6000000000000001,
156
+ "pins": [
157
+ {
158
+ "pinId": "R2.1",
159
+ "x": 2.25,
160
+ "y": -1.8
161
+ },
162
+ {
163
+ "pinId": "R2.2",
164
+ "x": 2.25,
165
+ "y": -2.4000000000000004
166
+ }
167
+ ]
168
+ },
169
+ {
170
+ "chipId": "schematic_component_6",
171
+ "center": {
172
+ "x": 1.705,
173
+ "y": 0.8
174
+ },
175
+ "width": 1.21,
176
+ "height": 0.6000000000000001,
177
+ "pins": [
178
+ {
179
+ "pinId": "R3.1",
180
+ "x": 1.55,
181
+ "y": 1.1
182
+ },
183
+ {
184
+ "pinId": "R3.2",
185
+ "x": 1.55,
186
+ "y": 0.5
187
+ }
188
+ ]
189
+ }
190
+ ],
191
+ "directConnections": [
192
+ {
193
+ "pinIds": [
194
+ "U1.9",
195
+ "L1.1"
196
+ ],
197
+ "netId": "U1.L1 to L1.pin1"
198
+ },
199
+ {
200
+ "pinIds": [
201
+ "U1.7",
202
+ "L1.2"
203
+ ],
204
+ "netId": "U1.L2 to L1.pin2"
205
+ },
206
+ {
207
+ "pinIds": [
208
+ "U1.10",
209
+ "C1.1"
210
+ ],
211
+ "netId": "U1.VIN to C1.pin1",
212
+ "netLabelWidth": 1.68
213
+ },
214
+ {
215
+ "pinIds": [
216
+ "U1.10",
217
+ "U1.1"
218
+ ],
219
+ "netId": "U1.VIN to U1.EN"
220
+ },
221
+ {
222
+ "pinIds": [
223
+ "U1.10",
224
+ "R3.1"
225
+ ],
226
+ "netId": "U1.VIN to R3.pin1",
227
+ "netLabelWidth": 1.68
228
+ },
229
+ {
230
+ "pinIds": [
231
+ "U1.6",
232
+ "C2.1"
233
+ ],
234
+ "netId": "U1.VOUT to C2.pin1"
235
+ },
236
+ {
237
+ "pinIds": [
238
+ "U1.6",
239
+ "R1.1"
240
+ ],
241
+ "netId": "U1.VOUT to R1.pin1"
242
+ },
243
+ {
244
+ "pinIds": [
245
+ "U1.5",
246
+ "R3.2"
247
+ ],
248
+ "netId": "U1.PG to R3.pin2"
249
+ },
250
+ {
251
+ "pinIds": [
252
+ "U1.4",
253
+ "R1.2"
254
+ ],
255
+ "netId": "U1.FB to R1.pin2"
256
+ },
257
+ {
258
+ "pinIds": [
259
+ "U1.4",
260
+ "R2.1"
261
+ ],
262
+ "netId": "U1.FB to R2.pin1"
263
+ }
264
+ ],
265
+ "netConnections": [
266
+ {
267
+ "netId": "VIN",
268
+ "pinIds": [
269
+ "U1.1",
270
+ "U1.10",
271
+ "C1.1",
272
+ "R3.1"
273
+ ],
274
+ "netLabelWidth": 0.42,
275
+ "netLabelHeight": 0.48
276
+ },
277
+ {
278
+ "netId": "GND",
279
+ "pinIds": [
280
+ "U1.2",
281
+ "U1.3",
282
+ "U1.8",
283
+ "C1.2",
284
+ "C2.2",
285
+ "R2.2"
286
+ ],
287
+ "netLabelWidth": 0.42,
288
+ "netLabelHeight": 0.48
289
+ },
290
+ {
291
+ "netId": "PG",
292
+ "pinIds": [
293
+ "U1.5",
294
+ "R3.2"
295
+ ],
296
+ "netLabelWidth": 0.36
297
+ },
298
+ {
299
+ "netId": "VOUT",
300
+ "pinIds": [
301
+ "U1.6",
302
+ "C2.1",
303
+ "R1.1"
304
+ ],
305
+ "netLabelWidth": 0.42,
306
+ "netLabelHeight": 0.6
307
+ }
308
+ ],
309
+ "textBoxes": [
310
+ {
311
+ "chipId": "schematic_component_0",
312
+ "center": {
313
+ "x": 2.2199999999999998,
314
+ "y": 3.0500000000000003
315
+ },
316
+ "width": 1.44,
317
+ "height": 0.17999999999999972,
318
+ "text": "TPS63802DLAR"
319
+ },
320
+ {
321
+ "chipId": "schematic_component_0",
322
+ "center": {
323
+ "x": 1.62,
324
+ "y": 2.8150000000000004
325
+ },
326
+ "width": 0.3600000000000001,
327
+ "height": 0.24999999999999956,
328
+ "text": "U1"
329
+ }
330
+ ],
331
+ "availableNetLabelOrientations": {
332
+ "VIN": [
333
+ "y+"
334
+ ],
335
+ "VOUT": [
336
+ "y+"
337
+ ],
338
+ "GND": [
339
+ "y-"
340
+ ],
341
+ "PG": [
342
+ "x-",
343
+ "x+"
344
+ ]
345
+ },
346
+ "maxMspPairDistance": 2.4
347
+ }
@@ -0,0 +1,12 @@
1
+ import { expect, test } from "bun:test"
2
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "./bug-report-20260707T230831Z.json"
4
+ import "tests/fixtures/matcher"
5
+
6
+ test("bug-report-20260707T230831Z", () => {
7
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
8
+
9
+ solver.solve()
10
+
11
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
12
+ })
@@ -0,0 +1,52 @@
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="0.5279125,3.0973754500000004 0.7,3" data-type="line" data-label="" points="363.46296663543797,319.86511717601365 416.18376153125485,349.6970987396827" fill="none" stroke="hsl(72, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="1" data-y="3" x="416.18376153125485" y="245.5345636073937" width="183.81623846874515" height="208.32507026457802" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.0032641294642857146"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="0" data-y="3.1" x="40" y="186.14036612802857" width="323.46296663543797" height="265.8413857337265" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.0032641294642857146"/></g><g><rect data-type="rect" data-label="netId: .L1 &gt; .pin2 to .R1 &gt; .pin1
2
+ globalConnNetId: connectivity_net0" data-x="0.7539125" data-y="3.0973754500000004" x="363.7693270328858" y="289.2290774312228" width="137.86217885155884" height="61.272079489581756" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0032641294642857146"/></g><g><rect data-type="rect" data-label="netId: .L1 &gt; .pin2 to .R1 &gt; .pin1
3
+ globalConnNetId: connectivity_net0" data-x="0.474" data-y="3" x="278.01522228224815" y="319.0610589948918" width="137.86217885155884" height="61.272079489581756" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0032641294642857146"/></g><g><circle data-type="point" data-label="R1.1
4
+ x-" data-x="0.7" data-y="3" cx="416.18376153125485" cy="349.6970987396827" r="3" fill="hsl(226, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.2
5
+ x+" data-x="1.3" data-y="3" cx="600" cy="349.6970987396827" r="3" fill="hsl(227, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="L1.1
6
+ x-" data-x="-0.5279125" data-y="3.10262455" cx="40.00000000000003" cy="318.25700081377" r="3" fill="hsl(40, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="L1.2
7
+ x+" data-x="0.5279125" data-y="3.0973754500000004" cx="363.46296663543797" cy="319.86511717601365" r="3" fill="hsl(41, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
8
+ orientation: x+" data-x="0.5279125" data-y="3.0973754500000004" cx="363.46296663543797" cy="319.86511717601365" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
9
+ orientation: x-" data-x="0.7" data-y="3" cx="416.18376153125485" cy="349.6970987396827" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
10
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
11
+ const svg = e.currentTarget;
12
+ const rect = svg.getBoundingClientRect();
13
+ const x = e.clientX - rect.left;
14
+ const y = e.clientY - rect.top;
15
+ const crosshair = svg.getElementById('crosshair');
16
+ const h = svg.getElementById('crosshair-h');
17
+ const v = svg.getElementById('crosshair-v');
18
+ const coords = svg.getElementById('coordinates');
19
+
20
+ crosshair.style.display = 'block';
21
+ h.setAttribute('x1', '0');
22
+ h.setAttribute('x2', '640');
23
+ h.setAttribute('y1', y);
24
+ h.setAttribute('y2', y);
25
+ v.setAttribute('x1', x);
26
+ v.setAttribute('x2', x);
27
+ v.setAttribute('y1', '0');
28
+ v.setAttribute('y2', '640');
29
+
30
+ // Calculate real coordinates using inverse transformation
31
+ const matrix = {"a":306.36039744790844,"c":0,"e":201.73148331771898,"b":0,"d":-306.36039744790844,"f":1268.778291083408};
32
+ // Manually invert and apply the affine transform
33
+ // Since we only use translate and scale, we can directly compute:
34
+ // x' = (x - tx) / sx
35
+ // y' = (y - ty) / sy
36
+ const sx = matrix.a;
37
+ const sy = matrix.d;
38
+ const tx = matrix.e;
39
+ const ty = matrix.f;
40
+ const realPoint = {
41
+ x: (x - tx) / sx,
42
+ y: (y - ty) / sy // Flip y back since we used negative scale
43
+ }
44
+
45
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
46
+ coords.setAttribute('x', (x + 5).toString());
47
+ coords.setAttribute('y', (y - 5).toString());
48
+ });
49
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
50
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
51
+ });
52
+ ]]></script></svg>