@tscircuit/schematic-trace-solver 0.0.137 → 0.0.140

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.
@@ -0,0 +1,33 @@
1
+ import { expect, test } from "bun:test"
2
+ import { tracePathContainsPoint } from "lib/solvers/RailNetLabelCornerPlacementSolver/geometry"
3
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
4
+ import type { InputProblem } from "lib/types/InputProblem"
5
+ import inputProblem from "./bug-report-20260819T091818Z.json"
6
+ import "tests/fixtures/matcher"
7
+
8
+ test("disconnected netlabel", () => {
9
+ const expectedAlignedRailX = 3.18
10
+ const expectedCloserLabelAnchorX = 3.71
11
+ const solver = new SchematicTracePipelineSolver(inputProblem as InputProblem)
12
+
13
+ solver.solve()
14
+
15
+ const output = solver.inlineNetLabelSolver!.getOutput()
16
+ const targetLabel = output.netLabelPlacements.find((label) =>
17
+ label.pinIds.includes("schematic_port_204"),
18
+ )!
19
+ const hostTrace = output.traces.find((trace) =>
20
+ targetLabel.mspConnectionPairIds.includes(trace.mspPairId),
21
+ )!
22
+ const labelConnectorTrace = output.traces.find(
23
+ (trace) =>
24
+ trace.mspPairId !== hostTrace.mspPairId &&
25
+ trace.globalConnNetId === targetLabel.globalConnNetId &&
26
+ tracePathContainsPoint(trace.tracePath, targetLabel.anchorPoint),
27
+ )!
28
+
29
+ expect(hostTrace.tracePath[1]!.x).toBeCloseTo(expectedAlignedRailX)
30
+ expect(targetLabel.anchorPoint.x).toBeCloseTo(expectedCloserLabelAnchorX)
31
+ expect(labelConnectorTrace.tracePath[0]).toEqual(hostTrace.tracePath[1])
32
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
33
+ })
@@ -0,0 +1,124 @@
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="9.935000000000002,-5.618910699999997 7.475000000000001,-6.298910699999998" data-type="line" data-label="" points="300.49794061597106,368.67769103092144 131.12436220569248,415.496403762218" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.618910699999997 8.715000000000002,-6.298910699999998" data-type="line" data-label="" points="300.49794061597106,368.67769103092144 216.49966189217434,415.496403762218" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.618910699999997 11.462500000000002,-8.423910699999997" data-type="line" data-label="" points="300.49794061597106,368.67769103092144 405.66791664105256,561.8048810475194" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-6.298910699999998 8.715000000000002,-6.298910699999998" data-type="line" data-label="" points="131.12436220569248,415.496403762218 216.49966189217434,415.496403762218" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-6.298910699999998 11.462500000000002,-8.423910699999997" data-type="line" data-label="" points="131.12436220569248,415.496403762218 405.66791664105256,561.8048810475194" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.715000000000002,-6.298910699999998 11.462500000000002,-8.423910699999997" data-type="line" data-label="" points="216.49966189217434,415.496403762218 405.66791664105256,561.8048810475194" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.418910699999998 7.475000000000001,-5.538910699999998" data-type="line" data-label="" points="300.49794061597106,354.9074814040696 131.12436220569248,363.1696071801807" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.418910699999998 8.715000000000002,-5.538910699999998" data-type="line" data-label="" points="300.49794061597106,354.9074814040696 216.49966189217434,363.1696071801807" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.418910699999998 8.390000000000002,-3.408910699999998" data-type="line" data-label="" points="300.49794061597106,354.9074814040696 194.1230712485401,216.51687465420792" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.418910699999998 9.142500000000002,-1.5989106999999985" data-type="line" data-label="" points="300.49794061597106,354.9074814040696 245.93348496957037,91.89647753119817" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.418910699999998 9.582500000000001,-7.823910699999995" data-type="line" data-label="" points="300.49794061597106,354.9074814040696 276.2279461486445,520.4942521669636" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.418910699999998 7.7025000000000015,-7.028910699999997" data-type="line" data-label="" points="300.49794061597106,354.9074814040696 146.78797565623654,465.75766890022743" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-5.538910699999998 8.715000000000002,-5.538910699999998" data-type="line" data-label="" points="131.12436220569248,363.1696071801807 216.49966189217434,363.1696071801807" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-5.538910699999998 8.390000000000002,-3.408910699999998" data-type="line" data-label="" points="131.12436220569248,363.1696071801807 194.1230712485401,216.51687465420792" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-5.538910699999998 9.142500000000002,-1.5989106999999985" data-type="line" data-label="" points="131.12436220569248,363.1696071801807 245.93348496957037,91.89647753119817" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-5.538910699999998 9.582500000000001,-7.823910699999995" data-type="line" data-label="" points="131.12436220569248,363.1696071801807 276.2279461486445,520.4942521669636" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-5.538910699999998 7.7025000000000015,-7.028910699999997" data-type="line" data-label="" points="131.12436220569248,363.1696071801807 146.78797565623654,465.75766890022743" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.715000000000002,-5.538910699999998 8.390000000000002,-3.408910699999998" data-type="line" data-label="" points="216.49966189217434,363.1696071801807 194.1230712485401,216.51687465420792" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.715000000000002,-5.538910699999998 9.142500000000002,-1.5989106999999985" data-type="line" data-label="" points="216.49966189217434,363.1696071801807 245.93348496957037,91.89647753119817" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.715000000000002,-5.538910699999998 9.582500000000001,-7.823910699999995" data-type="line" data-label="" points="216.49966189217434,363.1696071801807 276.2279461486445,520.4942521669636" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.715000000000002,-5.538910699999998 7.7025000000000015,-7.028910699999997" data-type="line" data-label="" points="216.49966189217434,363.1696071801807 146.78797565623654,465.75766890022743" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.390000000000002,-3.408910699999998 9.142500000000002,-1.5989106999999985" data-type="line" data-label="" points="194.1230712485401,216.51687465420792 245.93348496957037,91.89647753119817" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.390000000000002,-3.408910699999998 9.582500000000001,-7.823910699999995" data-type="line" data-label="" points="194.1230712485401,216.51687465420792 276.2279461486445,520.4942521669636" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.390000000000002,-3.408910699999998 7.7025000000000015,-7.028910699999997" data-type="line" data-label="" points="194.1230712485401,216.51687465420792 146.78797565623654,465.75766890022743" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.142500000000002,-1.5989106999999985 9.582500000000001,-7.823910699999995" data-type="line" data-label="" points="245.93348496957037,91.89647753119817 276.2279461486445,520.4942521669636" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.142500000000002,-1.5989106999999985 7.7025000000000015,-7.028910699999997" data-type="line" data-label="" points="245.93348496957037,91.89647753119817 146.78797565623654,465.75766890022743" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.582500000000001,-7.823910699999995 7.7025000000000015,-7.028910699999997" data-type="line" data-label="" points="276.2279461486445,520.4942521669636 146.78797565623654,465.75766890022743" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-4.0189106999999975 9.142500000000002,-2.198910699999998" data-type="line" data-label="" points="300.49794061597106,258.5160140161062 245.93348496957037,133.20710641175387" fill="none" stroke="hsl(246, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-4.0189106999999975 10.687500000000002,-1.9094553499999982" data-type="line" data-label="" points="300.49794061597106,258.5160140161062 352.30835433700133,113.27780217618493" fill="none" stroke="hsl(246, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.142500000000002,-2.198910699999998 10.687500000000002,-1.9094553499999982" data-type="line" data-label="" points="245.93348496957037,133.20710641175387 352.30835433700133,113.27780217618493" fill="none" stroke="hsl(246, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-4.418910699999998 8.390000000000002,-4.008910699999998" data-type="line" data-label="" points="300.49794061597106,286.05643326981004 194.1230712485401,257.82750353476365" fill="none" stroke="hsl(294, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-5.818910699999997 11.462500000000002,-7.823910699999995" data-type="line" data-label="" points="300.49794061597106,382.44790065777335 405.66791664105256,520.4942521669636" fill="none" stroke="hsl(192, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.935000000000002,-6.0189106999999975 7.7025000000000015,-7.628910699999997" data-type="line" data-label="" points="300.49794061597106,396.2181102846253 146.78797565623654,507.06829778078315" fill="none" stroke="hsl(110, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.135000000000002,-6.0189106999999975 9.582500000000001,-8.423910699999997" data-type="line" data-label="" points="451.970246511342,396.2181102846253 276.2279461486445,561.8048810475194" fill="none" stroke="hsl(108, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.135000000000002,-6.0189106999999975 13.345,-7.221410699999997" data-type="line" data-label="" points="451.970246511342,396.2181102846253 535.280014753796,479.0114956660724" fill="none" stroke="hsl(108, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9.582500000000001,-8.423910699999997 13.345,-7.221410699999997" data-type="line" data-label="" points="276.2279461486445,561.8048810475194 535.280014753796,479.0114956660724" fill="none" stroke="hsl(108, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.475000000000001,-6.298910699999998 7.475000000000001,-6.498910699999998 8.715000000000002,-6.498910699999998 8.715000000000002,-6.298910699999998" data-type="line" data-label="" points="131.12436220569248,415.496403762218 131.12436220569248,429.2666133890699 216.49966189217434,429.2666133890699 216.49966189217434,415.496403762218" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.715000000000002,-5.538910699999998 8.715000000000002,-5.418910699999999 9.935000000000002,-5.418910699999999" data-type="line" data-label="" points="216.49966189217434,363.1696071801807 216.49966189217434,354.90748140406964 300.49794061597106,354.90748140406964" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.475000000000001,-5.538910699999998 7.475000000000001,-5.418910699999999 8.715000000000002,-5.418910699999999 8.715000000000002,-5.538910699999998" data-type="line" data-label="" points="131.12436220569248,363.1696071801807 131.12436220569248,354.90748140406964 216.49966189217434,354.90748140406964 216.49966189217434,363.1696071801807" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="10.687500000000002,-1.9094553499999973 9.915000000000003,-1.9094553499999973 9.915000000000003,-2.3989106999999974 9.142500000000002,-2.3989106999999974 9.142500000000002,-2.198910699999998" data-type="line" data-label="" points="352.30835433700133,113.27780217618488 299.1209196532859,113.27780217618488 299.1209196532859,146.97731603860575 245.93348496957037,146.97731603860575 245.93348496957037,133.20710641175387" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="9.935000000000002,-4.418910699999998 8.390000000000002,-4.418910699999998 8.390000000000002,-4.008910699999998" data-type="line" data-label="" points="300.49794061597106,286.05643326981004 194.1230712485401,286.05643326981004 194.1230712485401,257.82750353476365" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.390000000000002,-3.408910699999998 8.390000000000002,-1.3989106999999983 9.142500000000002,-1.3989106999999983 9.142500000000002,-1.5989106999999976" data-type="line" data-label="" points="194.1230712485401,216.51687465420792 194.1230712485401,78.12626790434626 245.93348496957037,78.12626790434626 245.93348496957037,91.89647753119812" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="9.5825,-7.823910699999995 9.5825,-6.828910699999997 7.7025000000000015,-6.828910699999997 7.7025000000000015,-7.028910699999997" data-type="line" data-label="" points="276.2279461486444,520.4942521669636 276.2279461486444,451.9874592733755 146.78797565623654,451.9874592733755 146.78797565623654,465.75766890022743" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.135000000000002,-6.0189106999999975 12.740000000000002,-6.0189106999999975 12.740000000000002,-7.221410699999997 13.345,-7.221410699999997" data-type="line" data-label="" points="451.970246511342,396.2181102846253 493.62513063256904,396.2181102846253 493.62513063256904,479.0114956660724 535.280014753796,479.0114956660724" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.7025000000000015,-7.028910699999997 7.7025000000000015,-6.828910699999997 6.95,-6.828910699999997 6.95,-5.338910699999998 7.475000000000001,-5.338910699999998 7.475000000000001,-5.538910699999998" data-type="line" data-label="" points="146.78797565623654,465.75766890022743 146.78797565623654,451.9874592733755 94.97756193520615,451.9874592733755 94.97756193520615,349.3993975533288 131.12436220569248,349.3993975533288 131.12436220569248,363.1696071801807" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.715000000000002,-6.298910699999998 8.715000000000002,-6.498910699999997 9.63,-6.498910699999997 9.63,-6.5189106999999975 8.214000000000002,-6.5189106999999975 8.214000000000002,-5.318910699999998 9.63,-5.318910699999998 9.63,-5.618910699999996 9.935000000000002,-5.618910699999996" data-type="line" data-label="" points="216.49966189217434,415.496403762218 216.49966189217434,429.26661338906985 279.49837093502174,429.26661338906985 279.49837093502174,430.64363435175505 182.00528677691034,430.64363435175505 182.00528677691034,348.02237659064366 279.49837093502174,348.02237659064366 279.49837093502174,368.6776910309214 300.49794061597106,368.6776910309214" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="9.63,-6.498910699999997 9.920000000000002,-6.498910699999997 9.920000000000002,-6.499910699999997" data-type="line" data-label="" points="279.49837093502174,429.26661338906985 299.46517489395717,429.26661338906985 299.46517489395717,429.3354644372041" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="11.462500000000002,-7.823910699999995 11.462500000000002,-7.672910699999996 11.411500000000002,-7.672910699999996" data-type="line" data-label="" points="405.66791664105256,520.4942521669636 405.66791664105256,510.0977438986904 402.1565131862053,510.0977438986904" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.7025000000000015,-7.628910699999997 7.7025000000000015,-7.729910699999997 7.3515000000000015,-7.729910699999997" data-type="line" data-label="" points="146.78797565623654,507.06829778078315 146.78797565623654,514.0222536423433 122.62125776111145,514.0222536423433" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="9.582500000000001,-8.423910699999997 9.582500000000001,-8.524910699999996 9.231500000000002,-8.524910699999996" data-type="line" data-label="" points="276.2279461486445,561.8048810475194 276.2279461486445,568.7588369090796 252.06122825351952,568.7588369090796" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_9" data-x="11.035000000000002" data-y="-5.0189106999999975" x="300.49794061597106" y="244.7458043892543" width="151.47230589537094" height="165.24251552222296" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_10" data-x="7.610000000000001" data-y="-5.918910699999998" x="108.74777156205806" y="363.1696071801807" width="63.34296428351888" height="52.326796582037275" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_11" data-x="8.910000000000002" data-y="-5.918910699999998" x="194.12307124854016" y="363.1696071801807" width="71.60509005962979" height="52.326796582037275" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_12" data-x="8.547500000000003" data-y="-3.708910699999998" x="171.74648060490574" y="216.51687465420792" width="66.44126144956044" height="41.310628880555726" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_13" data-x="9.300000000000002" data-y="-1.8989106999999983" x="223.556894325936" y="91.89647753119819" width="66.44126144956044" height="41.3106288805557" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_14" data-x="9.740000000000002" data-y="-8.123910699999996" x="253.85135550501025" y="520.4942521669636" width="66.44126144956044" height="41.31062888055578" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_15" data-x="7.860000000000001" data-y="-7.328910699999997" x="124.41138501260221" y="465.7576689002274" width="66.44126144956039" height="41.310628880555726" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_16" data-x="11.620000000000003" data-y="-8.123910699999996" x="383.2913259974182" y="520.4942521669636" width="66.44126144956044" height="41.31062888055578" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_17" data-x="11.157500000000002" data-y="-1.8594553499999984" x="352.30835433700133" y="85.08637216450491" width="64.71998524620403" height="49.49775520993413" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="schematic_component_18" data-x="13.815000000000001" data-y="-7.171410699999997" x="535.280014753796" y="450.82006565439235" width="64.71998524620403" height="49.4977552099341" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="ESP_12F_ESP8266MOD_" data-x="11.475000000000001" data-y="-6.348910699999998" x="328.0383598696747" y="412.7423618368476" width="156.98038974611188" height="12.3931886641667" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="ESP-12F" data-x="10.755000000000003" data-y="-3.703910699999997" x="323.90729698161937" y="228.22155283703196" width="66.09700620888918" height="17.2127620335649" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_RST
2
+ globalConnNetId: connectivity_net2" data-x="9.454000000000002" data-y="-4.0189106999999975" x="234.3320833589476" y="251.63090920268027" width="66.09700620888918" height="13.770209626851909" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_RST
3
+ globalConnNetId: connectivity_net2" data-x="10.395000000000003" data-y="-2.3989106999999974" x="299.12091965328597" y="140.09221122517977" width="66.09700620888918" height="13.770209626851937" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_EN
4
+ globalConnNetId: connectivity_net3" data-x="7.970000000000002" data-y="-4.418910699999998" x="136.288190815762" y="279.1713284563841" width="57.83488043277805" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: RGB_BLUE_PWM
5
+ globalConnNetId: connectivity_net4" data-x="9.154000000000003" data-y="-4.818910699999997" x="193.02145447839206" y="306.7117477100878" width="107.40763508944485" height="13.770209626851909" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: RGB_RED_PWM
6
+ globalConnNetId: connectivity_net5" data-x="9.214000000000002" data-y="-5.0189106999999975" x="201.28358025450302" y="320.48195733693984" width="99.14550931333383" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: RGB_GREEN_PWM
7
+ globalConnNetId: connectivity_net6" data-x="9.094000000000003" data-y="-5.218910699999998" x="184.7593287022808" y="334.25216696379175" width="115.66976086555599" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: V3_3
8
+ globalConnNetId: connectivity_net1" data-x="7.475000000000001" data-y="-5.208910699999999" x="110.46904776541462" y="325.9900411876807" width="41.310628880555726" height="28.917440216388968" fill="#ef444466" stroke="#ef4444" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: V3_3
9
+ globalConnNetId: connectivity_net1" data-x="8.390000000000002" data-y="-1.1889106999999983" x="173.4677568082622" y="49.208827687957246" width="41.31062888055578" height="28.91744021638901" fill="#ef444466" stroke="#ef4444" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: GND
10
+ globalConnNetId: connectivity_net0" data-x="9.920000000000002" data-y="-6.709910699999997" x="282.94092334173484" y="429.3354644372041" width="33.04850310444465" height="28.917440216389025" fill="#00000066" stroke="#000000" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: GND
11
+ globalConnNetId: connectivity_net0" data-x="11.462500000000002" data-y="-8.634910699999997" x="389.14366508883023" y="561.8737320956536" width="33.04850310444465" height="28.917440216389195" fill="#00000066" stroke="#000000" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_GPIO15
12
+ globalConnNetId: connectivity_net7" data-x="9.274000000000003" data-y="-5.818910699999997" x="209.5457060306142" y="375.5627958443474" width="90.88338353722258" height="13.770209626851909" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_GPIO15
13
+ globalConnNetId: connectivity_net7" data-x="10.751500000000002" data-y="-7.672910699999996" x="311.2731296489826" y="503.21263908526447" width="90.8833835372227" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_GPIO2
14
+ globalConnNetId: connectivity_net8" data-x="9.334000000000003" data-y="-6.0189106999999975" x="217.80783180672546" y="389.3330054711994" width="82.62125776111145" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_GPIO2
15
+ globalConnNetId: connectivity_net8" data-x="6.751500000000002" data-y="-7.729910699999997" x="40.000000000000085" y="507.1371488289174" width="82.6212577611114" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_GPIO0
16
+ globalConnNetId: connectivity_net9" data-x="13.340000000000002" data-y="-6.0189106999999975" x="493.625130632569" y="389.3330054711994" width="82.62125776111145" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_GPIO0
17
+ globalConnNetId: connectivity_net9" data-x="8.631500000000003" data-y="-8.524910699999996" x="169.439970492408" y="561.8737320956536" width="82.62125776111145" height="13.770209626851852" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: I2C_SDA
18
+ globalConnNetId: connectivity_net10" data-x="12.616000000000001" data-y="-5.818910699999997" x="452.0390975594762" y="375.5627958443474" width="66.0970062088893" height="13.770209626851909" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: I2C_SCL
19
+ globalConnNetId: connectivity_net11" data-x="12.616000000000001" data-y="-5.618910699999997" x="452.0390975594762" y="361.7925862174955" width="66.0970062088893" height="13.770209626851852" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_RX
20
+ globalConnNetId: connectivity_net12" data-x="12.556000000000001" data-y="-5.418910699999997" x="452.03909755947615" y="348.0223765906436" width="57.83488043277805" height="13.770209626851852" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><rect data-type="rect" data-label="netId: ESP_TX
21
+ globalConnNetId: connectivity_net13" data-x="12.556000000000001" data-y="-5.218910699999998" x="452.03909755947615" y="334.25216696379175" width="57.83488043277805" height="13.770209626851852" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014524107142857142"/></g><g><circle data-type="point" data-label="schematic_port_35
22
+ x-" data-x="9.935000000000002" data-y="-4.0189106999999975" cx="300.49794061597106" cy="258.5160140161062" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_36
23
+ x-" data-x="9.935000000000002" data-y="-4.218910699999998" cx="300.49794061597106" cy="272.28622364295813" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_37
24
+ x-" data-x="9.935000000000002" data-y="-4.418910699999998" cx="300.49794061597106" cy="286.05643326981004" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_38
25
+ x-" data-x="9.935000000000002" data-y="-4.618910699999998" cx="300.49794061597106" cy="299.82664289666195" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_39
26
+ x-" data-x="9.935000000000002" data-y="-4.818910699999997" cx="300.49794061597106" cy="313.5968525235138" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_40
27
+ x-" data-x="9.935000000000002" data-y="-5.0189106999999975" cx="300.49794061597106" cy="327.36706215036577" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_41
28
+ x-" data-x="9.935000000000002" data-y="-5.218910699999998" cx="300.49794061597106" cy="341.1372717772177" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_42
29
+ x-" data-x="9.935000000000002" data-y="-5.418910699999998" cx="300.49794061597106" cy="354.9074814040696" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_43
30
+ x-" data-x="9.935000000000002" data-y="-5.618910699999997" cx="300.49794061597106" cy="368.67769103092144" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_44
31
+ x-" data-x="9.935000000000002" data-y="-5.818910699999997" cx="300.49794061597106" cy="382.44790065777335" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_45
32
+ x-" data-x="9.935000000000002" data-y="-6.0189106999999975" cx="300.49794061597106" cy="396.2181102846253" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_46
33
+ x+" data-x="12.135000000000002" data-y="-6.0189106999999975" cx="451.970246511342" cy="396.2181102846253" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_47
34
+ x+" data-x="12.135000000000002" data-y="-5.818910699999997" cx="451.970246511342" cy="382.44790065777335" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_48
35
+ x+" data-x="12.135000000000002" data-y="-5.618910699999997" cx="451.970246511342" cy="368.67769103092144" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_49
36
+ x+" data-x="12.135000000000002" data-y="-5.418910699999997" cx="451.970246511342" cy="354.90748140406953" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_50
37
+ x+" data-x="12.135000000000002" data-y="-5.218910699999998" cx="451.970246511342" cy="341.1372717772177" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_51
38
+ x+" data-x="12.135000000000002" data-y="-5.0189106999999975" cx="451.970246511342" cy="327.36706215036577" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_52
39
+ x+" data-x="12.135000000000002" data-y="-4.818910699999997" cx="451.970246511342" cy="313.5968525235138" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_53
40
+ x+" data-x="12.135000000000002" data-y="-4.618910699999997" cx="451.970246511342" cy="299.8266428966619" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_54
41
+ x+" data-x="12.135000000000002" data-y="-4.418910699999998" cx="451.970246511342" cy="286.05643326981004" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_55
42
+ x+" data-x="12.135000000000002" data-y="-4.218910699999998" cx="451.970246511342" cy="272.28622364295813" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_56
43
+ x+" data-x="12.135000000000002" data-y="-4.0189106999999975" cx="451.970246511342" cy="258.5160140161062" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_57
44
+ y+" data-x="7.475000000000001" data-y="-5.538910699999998" cx="131.12436220569248" cy="363.1696071801807" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_58
45
+ y-" data-x="7.475000000000001" data-y="-6.298910699999998" cx="131.12436220569248" cy="415.496403762218" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_59
46
+ y+" data-x="8.715000000000002" data-y="-5.538910699999998" cx="216.49966189217434" cy="363.1696071801807" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_60
47
+ y-" data-x="8.715000000000002" data-y="-6.298910699999998" cx="216.49966189217434" cy="415.496403762218" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_61
48
+ y+" data-x="8.390000000000002" data-y="-3.408910699999998" cx="194.1230712485401" cy="216.51687465420792" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_62
49
+ y-" data-x="8.390000000000002" data-y="-4.008910699999998" cx="194.1230712485401" cy="257.82750353476365" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_63
50
+ y+" data-x="9.142500000000002" data-y="-1.5989106999999985" cx="245.93348496957037" cy="91.89647753119817" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_64
51
+ y-" data-x="9.142500000000002" data-y="-2.198910699999998" cx="245.93348496957037" cy="133.20710641175387" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_65
52
+ y+" data-x="9.582500000000001" data-y="-7.823910699999995" cx="276.2279461486445" cy="520.4942521669636" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_66
53
+ y-" data-x="9.582500000000001" data-y="-8.423910699999997" cx="276.2279461486445" cy="561.8048810475194" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_67
54
+ y+" data-x="7.7025000000000015" data-y="-7.028910699999997" cx="146.78797565623654" cy="465.75766890022743" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_68
55
+ y-" data-x="7.7025000000000015" data-y="-7.628910699999997" cx="146.78797565623654" cy="507.06829778078315" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_69
56
+ y+" data-x="11.462500000000002" data-y="-7.823910699999995" cx="405.66791664105256" cy="520.4942521669636" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_70
57
+ y-" data-x="11.462500000000002" data-y="-8.423910699999997" cx="405.66791664105256" cy="561.8048810475194" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_71
58
+ x-" data-x="10.687500000000002" data-y="-1.9094553499999982" cx="352.30835433700133" cy="113.27780217618493" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_72
59
+ x+" data-x="11.627500000000003" data-y="-1.9094553499999982" cx="417.02833958320537" cy="113.27780217618493" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_73
60
+ x-" data-x="13.345" data-y="-7.221410699999997" cx="535.280014753796" cy="479.0114956660724" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_74
61
+ x+" data-x="14.285000000000002" data-y="-7.221410699999997" cx="600" cy="479.0114956660724" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
62
+ orientation: x-" data-x="9.935000000000002" data-y="-4.0189106999999975" cx="300.49794061597106" cy="258.5160140161062" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
63
+ orientation: x+" data-x="9.915000000000003" data-y="-2.3989106999999974" cx="299.1209196532859" cy="146.97731603860575" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
64
+ orientation: x-" data-x="8.390000000000002" data-y="-4.418910699999998" cx="194.1230712485401" cy="286.05643326981004" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
65
+ orientation: x-" data-x="9.935000000000002" data-y="-4.818910699999997" cx="300.49794061597106" cy="313.5968525235138" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
66
+ orientation: x-" data-x="9.935000000000002" data-y="-5.0189106999999975" cx="300.49794061597106" cy="327.36706215036577" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
67
+ orientation: x-" data-x="9.935000000000002" data-y="-5.218910699999998" cx="300.49794061597106" cy="341.1372717772177" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
68
+ orientation: y+" data-x="7.475000000000001" data-y="-5.418910699999999" cx="131.12436220569248" cy="354.90748140406964" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
69
+ orientation: y+" data-x="8.390000000000002" data-y="-1.3989106999999983" cx="194.1230712485401" cy="78.12626790434626" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
70
+ orientation: y-" data-x="9.920000000000002" data-y="-6.499910699999997" cx="299.46517489395717" cy="429.3354644372041" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
71
+ orientation: y-" data-x="11.462500000000002" data-y="-8.423910699999997" cx="405.66791664105256" cy="561.8048810475194" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
72
+ orientation: x-" data-x="9.935000000000002" data-y="-5.818910699999997" cx="300.49794061597106" cy="382.44790065777335" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
73
+ orientation: x-" data-x="11.411500000000002" data-y="-7.672910699999996" cx="402.1565131862053" cy="510.0977438986904" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
74
+ orientation: x-" data-x="9.935000000000002" data-y="-6.0189106999999975" cx="300.49794061597106" cy="396.2181102846253" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
75
+ orientation: x-" data-x="7.3515000000000015" data-y="-7.729910699999997" cx="122.62125776111145" cy="514.0222536423433" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
76
+ orientation: x+" data-x="12.740000000000002" data-y="-6.0189106999999975" cx="493.62513063256904" cy="396.2181102846253" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
77
+ orientation: x-" data-x="9.231500000000002" data-y="-8.524910699999996" cx="252.06122825351952" cy="568.7588369090796" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
78
+ orientation: x+" data-x="12.135000000000002" data-y="-5.818910699999997" cx="451.970246511342" cy="382.44790065777335" r="3" fill="hsl(80, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
79
+ orientation: x+" data-x="12.135000000000002" data-y="-5.618910699999997" cx="451.970246511342" cy="368.67769103092144" r="3" fill="hsl(80, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
80
+ orientation: x+" data-x="12.135000000000002" data-y="-5.418910699999997" cx="451.970246511342" cy="354.90748140406953" r="3" fill="hsl(80, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
81
+ orientation: x+" data-x="12.135000000000002" data-y="-5.218910699999998" cx="451.970246511342" cy="341.1372717772177" r="3" fill="hsl(80, 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[
82
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
83
+ const svg = e.currentTarget;
84
+ const rect = svg.getBoundingClientRect();
85
+ const x = e.clientX - rect.left;
86
+ const y = e.clientY - rect.top;
87
+ const crosshair = svg.getElementById('crosshair');
88
+ const h = svg.getElementById('crosshair-h');
89
+ const v = svg.getElementById('crosshair-v');
90
+ const coords = svg.getElementById('coordinates');
91
+
92
+ crosshair.style.display = 'block';
93
+ h.setAttribute('x1', '0');
94
+ h.setAttribute('x2', '640');
95
+ h.setAttribute('y1', y);
96
+ h.setAttribute('y2', y);
97
+ v.setAttribute('x1', x);
98
+ v.setAttribute('x2', x);
99
+ v.setAttribute('y1', '0');
100
+ v.setAttribute('y2', '640');
101
+
102
+ // Calculate real coordinates using inverse transformation
103
+ const matrix = {"a":68.85104813425954,"c":0,"e":-383.53722259789765,"b":0,"d":-68.85104813425954,"f":-18.190200036884335};
104
+ // Manually invert and apply the affine transform
105
+ // Since we only use translate and scale, we can directly compute:
106
+ // x' = (x - tx) / sx
107
+ // y' = (y - ty) / sy
108
+ const sx = matrix.a;
109
+ const sy = matrix.d;
110
+ const tx = matrix.e;
111
+ const ty = matrix.f;
112
+ const realPoint = {
113
+ x: (x - tx) / sx,
114
+ y: (y - ty) / sy // Flip y back since we used negative scale
115
+ }
116
+
117
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
118
+ coords.setAttribute('x', (x + 5).toString());
119
+ coords.setAttribute('y', (y - 5).toString());
120
+ });
121
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
122
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
123
+ });
124
+ ]]></script></svg>