diff --git a/README.md b/README.md
index c8942cd..c908dbf 100644
--- a/README.md
+++ b/README.md
@@ -14,3 +14,12 @@ return (
)
```
+
+The RP2040 subcircuit includes the microcontroller, QSPI flash, crystal, USB-C,
+power regulation, decoupling, boot/run controls, and SWD test points:
+
+```tsx
+import { Microcontroller_RP2040 } from "@tscircuit/common"
+
+return
+```
diff --git a/bun.lock b/bun.lock
index 63b5eb5..46b991a 100644
--- a/bun.lock
+++ b/bun.lock
@@ -6,8 +6,9 @@
"name": "@tscircuit/common",
"devDependencies": {
"@biomejs/biome": "^2.2.4",
+ "@tscircuit/footprinter": "^0.0.380",
"@types/react": "^19.1.12",
- "tscircuit": "^0.0.1672",
+ "tscircuit": "^0.0.2067",
"tsup": "^8.5.0",
},
},
@@ -207,31 +208,35 @@
"@tscircuit/alphabet": ["@tscircuit/alphabet@0.0.25", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-PWLjptI6AlLEtF/wjN1N8uC+n3G7vtg0j3xKE1fgWHDhahtnlQRqHDrtPSLlkIR9aJjRfjplzLuaUEaCRvJmZA=="],
- "@tscircuit/capacity-autorouter": ["@tscircuit/capacity-autorouter@0.0.452", "", { "dependencies": { "@tscircuit/high-density-a01": "^0.0.25", "fast-json-stable-stringify": "^2.1.0", "object-hash": "^3.0.0" } }, "sha512-rR1+i+YcTnnQ4Plny1ISHN39QnopL4ch7L0D8hRoUS4CAdQr9vadNUKmB+O0OmUJmclLVn8uNpHOJfyu13kusw=="],
+ "@tscircuit/capacity-autorouter": ["@tscircuit/capacity-autorouter@0.0.665", "", { "dependencies": { "fast-json-stable-stringify": "^2.1.0", "object-hash": "^3.0.0", "stack-svgs": "^0.0.1" } }, "sha512-OjjSFs/K62TfMiWyzP+Y2tp1MjwRKtbzX6P0jzbtRcdMeRq5adITYNPMswoSBQsMk/OXHxl7NnD8ubX8OF3Vcg=="],
- "@tscircuit/checks": ["@tscircuit/checks@0.0.124", "", { "peerDependencies": { "@flatten-js/core": "*", "@tscircuit/math-utils": "*", "circuit-json": "*", "circuit-json-to-connectivity-map": "*", "typescript": "^5.5.3" } }, "sha512-AlO/UqSukc6SO/sVG7JqkDz1u7k1WITqDccsd+IkWRVuNJhxw0T8R1ShP5xepbsS+ZTguJGOuBJ0J7kmnH/9uQ=="],
+ "@tscircuit/checks": ["@tscircuit/checks@0.0.142", "", { "peerDependencies": { "@flatten-js/core": "*", "@tscircuit/math-utils": "*", "circuit-json": "*", "circuit-json-to-connectivity-map": "*", "typescript": "^5.5.3" } }, "sha512-8hPny2FnzB/05sSsqOazjWodpOil1CSrUDzGzIASSz02l4xTrZL+2YlIc6ey5kacgSOBlFYrzDFS74ffE/+Utw=="],
- "@tscircuit/circuit-json-util": ["@tscircuit/circuit-json-util@0.0.94", "", { "dependencies": { "parsel-js": "^1.1.2" }, "peerDependencies": { "circuit-json": "*", "transformation-matrix": "*", "zod": "3" } }, "sha512-kEYV6LzcZbRuw43IxsZ1cZL2pUx4nF07MYAHHhY9s90UzKYaIYfZ1q11s+F2wNwKecCcSyTUoAwWeqazLQEyVQ=="],
+ "@tscircuit/circuit-json-util": ["@tscircuit/circuit-json-util@0.0.97", "", { "dependencies": { "parsel-js": "^1.1.2" }, "peerDependencies": { "circuit-json": "*", "transformation-matrix": "*", "zod": "3" } }, "sha512-qg0R/X4mCwb43f53+W3FkxUNRvgGz1WNjpQfKi+QXnoqISw6EZ1Y7VcSynO8S2d8hPGV9Mk5DUOjTPjlEUrrGA=="],
- "@tscircuit/cli": ["@tscircuit/cli@0.1.1287", "", { "peerDependencies": { "tscircuit": "*" }, "bin": { "tscircuit-cli": "cli/entrypoint.js" } }, "sha512-d7HSCFDUCccSMwqDtWNucJLT1r2Ofj0XB9rAqgxKOzDl/r2SbecciX/2qtMBLvoPS83hYYkQXbVaOYrch8BtqQ=="],
+ "@tscircuit/cli": ["@tscircuit/cli@0.1.1660", "", { "peerDependencies": { "circuit-json": "^0.0.446", "tscircuit": "*" }, "bin": { "tscircuit-cli": "cli/entrypoint.js" } }, "sha512-mMRjOK569uDzYQrEgHW2BVFDwpx3K2H/7yLiQsvatV0kcd67djCeGwzhl+JB0WFDYYdLFH+79684FvbBsFEvfw=="],
- "@tscircuit/copper-pour-solver": ["@tscircuit/copper-pour-solver@0.0.23", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-0AooADDlpSvVQTouy9GhKhKfX5D5LNcnjAhOdFSFOAZTxzQX3eYylUysAlogjFw/nqcZ0OwbAc0QcmNXFWY3Lg=="],
+ "@tscircuit/copper-pour-solver": ["@tscircuit/copper-pour-solver@0.0.39", "", { "dependencies": { "@tscircuit/manifold-2d": "^0.0.6" }, "peerDependencies": { "typescript": "^5" } }, "sha512-Z8+3UrK919QbwJkGyHsb8DGuHqE66iCylpbF/v132PuvrRbHo+phmOfP9nEQjI63ldh976EsT26qw535H15M1g=="],
- "@tscircuit/core": ["@tscircuit/core@0.0.1194", "", { "dependencies": { "@flatten-js/core": "^1.6.2", "@lume/kiwi": "^0.4.3", "calculate-packing": "0.0.71", "css-select": "5.1.0", "format-si-unit": "^0.0.3", "nanoid": "^5.0.7", "performance-now": "^2.1.0", "react-reconciler": "^0.32.0", "svg-path-commander": "^2.1.11", "transformation-matrix": "^2.16.1", "zod": "^3.25.67" }, "peerDependencies": { "@tscircuit/capacity-autorouter": "*", "@tscircuit/checks": "*", "@tscircuit/circuit-json-util": "*", "@tscircuit/footprinter": "*", "@tscircuit/infgrid-ijump-astar": "*", "@tscircuit/matchpack": "*", "@tscircuit/math-utils": "*", "@tscircuit/props": "*", "@tscircuit/schematic-match-adapt": "*", "bpc-graph": "*", "circuit-json": "*", "circuit-json-to-bpc": "*", "circuit-json-to-connectivity-map": "*", "schematic-symbols": "*", "typescript": "^5.0.0" } }, "sha512-7/UI0gI04pwx5amG/k/7TSjpzIzy+NGsmEqIYv6z+MtSVA96PhdW4TYJ6rffpYMG1Q5QXbEV25CQrky7Q9tbWQ=="],
+ "@tscircuit/core": ["@tscircuit/core@0.0.1437", "", { "dependencies": { "@flatten-js/core": "^1.6.2", "@lume/kiwi": "^0.4.3", "calculate-cell-boundaries": "^0.0.13", "calculate-packing": "0.0.75", "css-select": "5.1.0", "format-si-unit": "^0.0.7", "nanoid": "^5.0.7", "performance-now": "^2.1.0", "react-reconciler": "^0.32.0", "svg-path-commander": "^2.1.11", "transformation-matrix": "^2.16.1", "zod": "^3.25.67" }, "peerDependencies": { "@tscircuit/capacity-autorouter": "*", "@tscircuit/checks": "*", "@tscircuit/circuit-json-util": "*", "@tscircuit/footprinter": "*", "@tscircuit/infgrid-ijump-astar": "*", "@tscircuit/matchpack": "*", "@tscircuit/math-utils": "*", "@tscircuit/props": "*", "@tscircuit/schematic-match-adapt": "*", "bpc-graph": "*", "circuit-json": "*", "circuit-json-to-bpc": "*", "circuit-json-to-connectivity-map": "*", "schematic-symbols": "*", "typescript": "^5.0.0" } }, "sha512-J4H1bPOsqRmfeRMMR9WDtsw71N6ZjYKZ37Rq1Yc3VNOgEBdgNRqlMkf/mHCAeojEBw2E4V9D3kDwk9q56/DcKQ=="],
- "@tscircuit/eval": ["@tscircuit/eval@0.0.785", "", { "peerDependencies": { "@tscircuit/core": "*", "circuit-json": "*", "typescript": "^5.0.0", "zod": "3" } }, "sha512-3+AM1QSQReAjIHA2pcYNeIDAvClBss5b2yKYJhA0rLh06TFFy+0lGRoreBvq2nVCyqz9xTcJ1lUwUkmKrw0XYQ=="],
+ "@tscircuit/eval": ["@tscircuit/eval@0.0.1003", "", { "peerDependencies": { "@tscircuit/core": "*", "circuit-json": "*", "typescript": "^5.0.0", "zod": "3" } }, "sha512-WAJjlcSZ8q/eJ61yiwqXp52qBmZsXlHRXQSUnLQbaxVx+6ypZzP3hHpI+GMxtEYDL/m2eFw9sIgn7VbqK9iGwg=="],
- "@tscircuit/footprinter": ["@tscircuit/footprinter@0.0.351", "", { "dependencies": { "@tscircuit/mm": "^0.0.8", "zod": "^3.23.8" }, "peerDependencies": { "circuit-json": "*" } }, "sha512-AdeHTvD12tIEE/jYzsl9srSiMbJm6fGj5NLFTwOvUWCVPxqVACuwzbfLnFYKC2fE+QVdZWI7FhkzzeeqXjyokg=="],
+ "@tscircuit/footprinter": ["@tscircuit/footprinter@0.0.380", "", { "dependencies": { "@tscircuit/mm": "^0.0.8", "zod": "^3.23.8" }, "peerDependencies": { "circuit-json": "*" } }, "sha512-gnb2T2fN4K9aiuuNY2XJBspNgxqTu63u4zj+RTCabY+3TpB7VFAwBuBjW3jKoLNIlHd0KGkNmroEdtxnVZlOCQ=="],
- "@tscircuit/high-density-a01": ["@tscircuit/high-density-a01@0.0.25", "", { "dependencies": { "flatbush": "^4.5.0" }, "peerDependencies": { "typescript": "^5" } }, "sha512-ilmgACnyrcfe6t1jwy4PmWuILz3ZtVxpQKsSJItx9g+dIE+maiT6eeOEvz5OSQ6vTnTpLwEwMHfmiN8XNDi96w=="],
+ "@tscircuit/image-utils": ["@tscircuit/image-utils@0.0.8", "", { "dependencies": { "@flatten-js/core": "^1.6.2", "color-diff": "^1.4.0", "fast-png": "^8.0.0", "svg-path-commander": "^2.1.11", "transformation-matrix": "^2.16.1" } }, "sha512-/a/dyd0Ly+YSk73pNXi0M02nfaiZ1NQ8PVNDBTOHHESyTOrNHiVAT+NWxsWi44gHZ/ivLegAmjxSSbSSGfU+sQ=="],
"@tscircuit/infer-cable-insertion-point": ["@tscircuit/infer-cable-insertion-point@0.0.2", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-k3JwlGtsdHRRZELJzjXBKP+9xdzn+v4dqllhJIFMcrMvlBIaOTt8CbxLO+vcxPvz8Csf+yFChnTos8/vYcSgNg=="],
"@tscircuit/infgrid-ijump-astar": ["@tscircuit/infgrid-ijump-astar@0.0.35", "", {}, "sha512-PZx3GyD7mDNEhLJn8+7n8NjrieOvrX03g7Gx1cvwXv9mmgSC4M+yTA0WC4DgOvcRdTnarf0R8xvwtDeJ4tMK9Q=="],
- "@tscircuit/internal-dynamic-import": ["@tscircuit/internal-dynamic-import@0.0.2", "", {}, "sha512-cflWt1v+3O//e6jAQgHqmzPfgcu1QP0gDefhl1YxeTHWdginlecuvbGdFZ1V9ETxo4+xAwbHDfV+6fyXpvzK8A=="],
+ "@tscircuit/internal-dynamic-import": ["@tscircuit/internal-dynamic-import@0.0.10", "", {}, "sha512-GsnHJ2dySAQz2BjW4kA8BsF/M8wVOItQ0Kvm/6ABe1XfaKL/OzPH4m6SBm07bx+hhhp5qRXPbJWNEP150clmvw=="],
- "@tscircuit/matchpack": ["@tscircuit/matchpack@0.0.16", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-F9QX7uQdml88XGKwe7kDkYnwHfG0kykr2cHD+JsnATKlgi32vYwFGuRaOR4tyRrkDGdmzt5T7YYb4Mhi9uncGA=="],
+ "@tscircuit/krt-wasm": ["@tscircuit/krt-wasm@0.1.6", "", { "peerDependencies": { "tscircuit": "*" } }, "sha512-XRj8SIgWro1t56TieLhkOtRVsptq3cwzBtdbDEkRB2YiyX4V/r0zneii+c5I8F3D8rJUz4+GswGpPeO4eV8x8w=="],
+
+ "@tscircuit/manifold-2d": ["@tscircuit/manifold-2d@0.0.6", "", {}, "sha512-kYny1hDwPHOwRfMQtbfLh0nvCQ7nM91kkHy7pnj1UrqM6rcgDymZVCZB7ib5Cx1aZFIs8xCCF7lA51tq+giDcw=="],
+
+ "@tscircuit/matchpack": ["@tscircuit/matchpack@0.0.34", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-rh33jHP5vK66HFjHyiw5+26NhcceQB9KbrrxSB024vmABU0cA1GXe8EsC2YJLYXm4cYKKV5FM+/C4Z+mw4TO7w=="],
"@tscircuit/math-utils": ["@tscircuit/math-utils@0.0.36", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-HwHS3do6CLQFnLGd0f3+kQzGfENFllpt5ZFWF9gfw2k5Rc5VSxSJi8/MLfHEgaMgrnMCZ5Hqh3DlUD6U3pMXyg=="],
@@ -239,21 +244,21 @@
"@tscircuit/mm": ["@tscircuit/mm@0.0.8", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-nl7nxE7AhARbKuobflI0LUzoir7+wJyvwfPw6bzA/O0Q3YTcH3vBkU/Of+V/fp6ht+AofiCXj7YAH9E446138Q=="],
- "@tscircuit/ngspice-spice-engine": ["@tscircuit/ngspice-spice-engine@0.0.8", "", { "dependencies": { "eecircuit-engine": "^1.5.6" }, "peerDependencies": { "@tscircuit/props": "*", "circuit-json": "*", "typescript": "^5" } }, "sha512-jubJ8Kgpm9FPRdHBiRBYkf5+B37bqkjDRKpCXOMqS08UZnbS+iCv2k4ACMW+s1zbK0Xa5v+9yjuoHlfKFW1v/Q=="],
+ "@tscircuit/ngspice-spice-engine": ["@tscircuit/ngspice-spice-engine@0.0.19", "", { "peerDependencies": { "@tscircuit/props": "*", "circuit-json": "*", "typescript": "^5" } }, "sha512-HV/HrShlvQWSNJtjBJqBmFIvRUHOZYoIGjNdNaNhN7EvHpJ2MdVmqU/c4D+DzOVU/J7vg8R6yLvUHixXvH5LFg=="],
- "@tscircuit/props": ["@tscircuit/props@0.0.513", "", { "peerDependencies": { "circuit-json": "*", "react": "*", "zod": "*" } }, "sha512-IhIW+ulA0dVUFdSihArBD1fyPGsAEhJlQ+ucBOYLpAMVYJyn1KUxs1hdmwSCOU8q4UfK7CompI9GU8viKQVWRA=="],
+ "@tscircuit/props": ["@tscircuit/props@0.0.574", "", { "peerDependencies": { "circuit-json": "*", "react": "*", "zod": "*" } }, "sha512-Vi0cFZQ01jBL6TL3yPurDE9onwmGd4f/q2Vr299+NpWsfX4QtntdHctws3cA3hUgy8i4+KrR2p2N7OlWpo6Uug=="],
- "@tscircuit/runframe": ["@tscircuit/runframe@0.0.1873", "", { "dependencies": { "@tscircuit/eval": "^0.0.785", "@tscircuit/solver-utils": "^0.0.7" } }, "sha512-xiGcLBCEhadA8Ze36vtm9uZpvimbRoB4djpFhGY5XBu3hpTcYsXRPhNKDTVW+4vGREhckEUjifYPUay7hmqX7A=="],
+ "@tscircuit/runframe": ["@tscircuit/runframe@0.0.2201", "", { "dependencies": { "@tscircuit/eval": "^0.0.1003", "@tscircuit/solver-utils": "^0.0.7" } }, "sha512-RCyDyfmPizUowpa1pD8IGJFBgI7s2s/vyiBZ579SI6CqgFVIVtHAC7Llo7cIRViwVFuJHJjId8N9FICcV8XYMA=="],
"@tscircuit/schematic-corpus": ["@tscircuit/schematic-corpus@0.0.114", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-jDQX+XDXP6PklB39X8AwUSuiqGRdn78esy1wD/qG8U3cCXkT5rtE3ousDVaKRxclCeED8FxJlD+ZvRtAe8mw8w=="],
- "@tscircuit/schematic-match-adapt": ["@tscircuit/schematic-match-adapt@0.0.16", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-85e6Pq58zrhZqivyW4bPVZfGfg8xLBCj3yjHl5LZslwfsDRgtWVob4bjJMhCfNL/mLsPUQKnpiDNnFKl9ugUZw=="],
+ "@tscircuit/schematic-match-adapt": ["@tscircuit/schematic-match-adapt@0.0.18", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-LpXF7aSmP4xUZN1gdrU/YdAnotJ+oKW2a4YzGB6wNTXnw5+Yn0w/bPnReT4A+nNUrVJ9kyjgnXQkSlkhiejQGg=="],
- "@tscircuit/schematic-trace-solver": ["@tscircuit/schematic-trace-solver@0.0.45", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-KFZApwtwoPm5J/whvXz7QVTjz92Uq/SHL18XA/fHKwOK9ihRh71Ztb3gSwBS1u6/EYrKGD26H/T+yYUVk8ULsg=="],
+ "@tscircuit/schematic-trace-solver": ["@tscircuit/schematic-trace-solver@0.0.96", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-i5M3wIaQtC81k+e2tyy5c4LgWDDPnIPQWR6yfLDdoaC9wKNAxjjJyGg/yZnQGHk+44/HhnrZRwevBblVyNDjdQ=="],
"@tscircuit/simple-3d-svg": ["@tscircuit/simple-3d-svg@0.0.41", "", { "dependencies": { "fast-xml-parser": "^5.2.5", "fflate": "^0.8.2" } }, "sha512-2iwhHhMLElq5t0fcC0Gr7cCpZhEOAKh+6NN0NIJ9YWUCcsB7UN8uYko7jqNTxDlYOe6E0ZYaDZWsQ3amOZ3dlw=="],
- "@tscircuit/solver-utils": ["@tscircuit/solver-utils@0.0.3", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-NMzqn7NM0SpeHnoWwewcnitxSNczaFsm/WENmBy8dxnFbUkGBdmSY5Gbky8C9e7q8+SzRcwj7GqXE7EWAHTirw=="],
+ "@tscircuit/solver-utils": ["@tscircuit/solver-utils@0.0.16", "", { "peerDependencies": { "graphics-debug": "*", "typescript": "^5" } }, "sha512-paeEsPt+NOrIdeEb1PQpoNGjl9bD5MfcDaBuhFkn7Hdsxez4cXhKUyxWj3WbJsZzq9nUDW3Utr/Dl3GD4UURZQ=="],
"@tscircuit/soup-util": ["@tscircuit/soup-util@0.0.41", "", { "dependencies": { "parsel-js": "^1.1.2" }, "peerDependencies": { "circuit-json": "*", "transformation-matrix": "*", "zod": "*" } }, "sha512-47JKWBUKkRVHhad0HhBbdOJxB6v/eiac46beiKRBMlJqiZ1gPGI276v9iZfpF7c4hXR69cURcgiwuA5vowrFEg=="],
@@ -309,27 +314,29 @@
"cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="],
+ "calculate-cell-boundaries": ["calculate-cell-boundaries@0.0.13", "", { "dependencies": { "@tscircuit/solver-utils": "^0.0.19", "lucide-react": "^1.17.0", "react": "^18.3.1", "react-dom": "^18.3.1" }, "peerDependencies": { "typescript": "^5" } }, "sha512-Pkc3DqRCGPhc5AiZMg07qoJdBvd06XN03KgihMF+dwLnXEDICDdmJMpTnRhAgGwqWo2X08ZAWTk6JDoJODYNTg=="],
+
"calculate-elbow": ["calculate-elbow@0.0.12", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-UkGS4EhabJn1WR6+UyoWpcxhKMx6MxM7+rK+3G0JcaPLMiYlvv5pEuc91unC/nH7kLGHV9xsVavhr5jJ50o+HA=="],
- "calculate-packing": ["calculate-packing@0.0.71", "", { "peerDependencies": { "@tscircuit/circuit-json-util": "*", "typescript": "^5" } }, "sha512-tvtzEAV2CJ4ry8sNdSmGV++i68tTDKekYD7ktuTLvUXUvbm2uDgOIckN4bCmi3o3vbr1Gzs4cyafNIOJ8G3Yrg=="],
+ "calculate-packing": ["calculate-packing@0.0.75", "", { "peerDependencies": { "@tscircuit/circuit-json-util": "*", "typescript": "^5" } }, "sha512-4io94EaD7sE5xAIwUCJo2duA9HFuliFHq18v5tjqRTOvh2OB7WwJHvhWaZ/3k0AfjNfMOFTI+4d0GbUxtbJaqQ=="],
"chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
"chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="],
- "circuit-json": ["circuit-json@0.0.419", "", {}, "sha512-rY99cc6oepIZ3ESSFJw9f88QMWsBfrd5QZMo1QIJQQ58BlaYXfCGEm2kihxjWfBD0egx+LBwis3UUcGFu8PCUA=="],
+ "circuit-json": ["circuit-json@0.0.447", "", {}, "sha512-yxA/vox8fPuZTsbcfmfiyQoVT3o0lBG+TDh0zWe4+hsJBXC8eE50nq9WA6UiFe27Hd4qO7tmedMNmxUK0xsa9w=="],
"circuit-json-to-bpc": ["circuit-json-to-bpc@0.0.13", "", { "peerDependencies": { "bpc-graph": "*", "circuit-json": "*", "typescript": "^5" } }, "sha512-3wSMtPa6tJkiBQN4tsm7f0Mb7Wp90X2c8dNbULoDVE4mGGoFqP1DXqBlyvvZZl+4SjqznzQQ0EioLe2SCQTOcg=="],
"circuit-json-to-connectivity-map": ["circuit-json-to-connectivity-map@0.0.23", "", { "dependencies": { "@tscircuit/math-utils": "^0.0.9" }, "peerDependencies": { "typescript": "^5.9.3" } }, "sha512-DSOiXaXOTvjU+7et8ITXb2LjgKto6cQzLv3hReYdXuUNtLw2GVnpOly1G83VcIBcSQ4hRVHI4VMKRyZB3XVzdg=="],
- "circuit-json-to-gltf": ["circuit-json-to-gltf@0.0.96", "", { "dependencies": { "@jscad/modeling": "^2.12.6", "earcut": "^3.0.2", "jscad-electronics": "^0.0.129", "jscad-to-gltf": "^0.0.5", "occt-import-js": "^0.0.23" }, "peerDependencies": { "@resvg/resvg-js": "2", "@resvg/resvg-wasm": "2", "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "circuit-to-svg": "*", "typescript": "^5" }, "optionalPeers": ["@resvg/resvg-js", "@resvg/resvg-wasm"] }, "sha512-7V1cj+WhyPBRsVbgghSCnbJNyWkx/KAhvnZU1Pdp7lZH+iHFIqRyIL/vNRRo657JDGM4bTlVFMUugo+RrseoKw=="],
+ "circuit-json-to-gltf": ["circuit-json-to-gltf@0.0.105", "", { "dependencies": { "@jscad/modeling": "^2.12.6", "earcut": "^3.0.2", "jscad-electronics": "^0.0.135", "jscad-to-gltf": "^0.0.5", "occt-import-js": "^0.0.23" }, "peerDependencies": { "@resvg/resvg-js": "2", "@resvg/resvg-wasm": "2", "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "circuit-to-svg": "*", "typescript": "^5" }, "optionalPeers": ["@resvg/resvg-js", "@resvg/resvg-wasm"] }, "sha512-0p9o8QQL2PmI7nn9YuBFUJkZgOLXnvUnaslTfS9/YJnkTR2RVI6dnkSyxFS/4Nbu8y2MIVzXID8nWydQluGHqg=="],
"circuit-json-to-simple-3d": ["circuit-json-to-simple-3d@0.0.9", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-thpCtDb9LpAQfGO+Z0hae19sxVAmJAMYM/It9UTMCtyXC3zoUHwRcp/oqtMO/ZIW+JDBhiR8AHmmtKScL2kW7Q=="],
- "circuit-json-to-spice": ["circuit-json-to-spice@0.0.34", "", { "dependencies": { "circuit-json-to-connectivity-map": "^0.0.22" }, "peerDependencies": { "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "typescript": "^5.0.0" } }, "sha512-59XyRHATq455875XlEiAfycIvxkOjaKnX4nzzlvY88UJyFcjkHSQCB9HCnbHJGsRxVBEmrTcELLyVIFmB+c4LA=="],
+ "circuit-json-to-spice": ["circuit-json-to-spice@0.0.43", "", { "dependencies": { "circuit-json-to-connectivity-map": "^0.0.22" }, "peerDependencies": { "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "typescript": "^5.0.0" } }, "sha512-lYXOplosjiYhpWe8IUJ8s9E9G0OH4c+Ygn60lnpco1TEjwD+byUTp3dCk6qDw5VNG5QUdGUD1pe95HoFMzL/TA=="],
- "circuit-to-svg": ["circuit-to-svg@0.0.345", "", { "dependencies": { "@types/node": "^22.5.5", "bun-types": "^1.1.40", "calculate-elbow": "0.0.12", "debug": "^4.4.3", "svg-path-commander": "^2.1.11", "svgson": "^5.3.1", "transformation-matrix": "^2.16.1" }, "peerDependencies": { "@tscircuit/alphabet": "*" } }, "sha512-d+P+AFJhWlt9Bdpk9/0zdBBjPxIRgnJaFsGqW/4CG0vEAY2QNqK/OqSl8i0zpFpM4+tiQdeR0n8h1tsvMMhvkA=="],
+ "circuit-to-svg": ["circuit-to-svg@0.0.384", "", { "dependencies": { "@types/node": "^22.5.5", "bun-types": "^1.1.40", "calculate-elbow": "0.0.12", "debug": "^4.4.3", "svg-path-commander": "^2.1.11", "svgson": "^5.3.1", "transformation-matrix": "^2.16.1" }, "peerDependencies": { "@tscircuit/alphabet": "*" } }, "sha512-N96bzfCSJJ6tR6jrxA3elt4sGV9XLE/vy4NUQ1O9yH+wOiorHdLRi34L0+dkj8lSSupEY4vdQCsYG/6YMJgb7Q=="],
"color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="],
@@ -383,8 +390,6 @@
"earcut": ["earcut@3.0.2", "", {}, "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ=="],
- "eecircuit-engine": ["eecircuit-engine@1.7.0", "", {}, "sha512-ZDpr/w/H81uCH3n2vjf0vohxOQqQ4NCsvaXkoYwcH+LCxIGKpBdvAIvGN5IdozW6AFJ8tojquKvDya3337yjSQ=="],
-
"end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="],
"entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
@@ -409,6 +414,8 @@
"fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="],
+ "fast-png": ["fast-png@8.0.0", "", { "dependencies": { "fflate": "^0.8.2", "iobuffer": "^6.0.1" } }, "sha512-gCysNasJ8KEMgfdYIKd/wTDo6ENK1PWT0RJO7O+0pgmuHPw2O6tA1WvdxFRJoLf9V8yFYpG0FA1YgI8X97OhJA=="],
+
"fast-xml-builder": ["fast-xml-builder@1.1.5", "", { "dependencies": { "path-expression-matcher": "^1.1.3" } }, "sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA=="],
"fast-xml-parser": ["fast-xml-parser@5.7.2", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.1.5", "path-expression-matcher": "^1.5.0", "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w=="],
@@ -423,7 +430,7 @@
"flatqueue": ["flatqueue@3.0.0", "", {}, "sha512-y1deYaVt+lIc/d2uIcWDNd0CrdQTO5xoCjeFdhX0kSXvm2Acm0o+3bAOiYklTEoRyzwio3sv3/IiBZdusbAe2Q=="],
- "format-si-unit": ["format-si-unit@0.0.3", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-rhw1g1mOoLV497FtKNbzBPE4fJXfWRmIEPRO0DKXpEPvS54vRLjG8e1jE4vOcjZg4bsoOPJkM9jB6yGk+0XKmQ=="],
+ "format-si-unit": ["format-si-unit@0.0.7", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-wTi2TqGqPG9LvUwhshiMlaert+1kWtxMEzIpKIkVbmOz4bopcDtqpDKV06JT6xpGIquOSFbkV1fQoMHq6UJZ1g=="],
"fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="],
@@ -439,7 +446,7 @@
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
- "graphics-debug": ["graphics-debug@0.0.89", "", { "dependencies": { "@react-hook/resize-observer": "^2.0.2", "@types/react-router-dom": "^5.3.3", "polished": "^4.3.1", "react-router-dom": "^6.28.0", "react-supergrid": "^1.0.10", "svgson": "^5.3.1", "transformation-matrix": "^3.0.0", "use-mouse-matrix-transform": "^1.3.0" }, "peerDependencies": { "bun-match-svg": "*", "looks-same": "^9.0.1", "typescript": "^5.0.0" }, "bin": { "gd": "dist/cli/cli.js", "graphics-debug": "dist/cli/cli.js" } }, "sha512-fklYB4qChWLkSssabMR1BqjSWWDk21C77IeHBYPREksF34llz/a+gLrW+Oax4eWPT/6TtHZanICMQBhoxGjFYw=="],
+ "graphics-debug": ["graphics-debug@0.0.95", "", { "dependencies": { "@react-hook/resize-observer": "^2.0.2", "@tscircuit/alphabet": "^0.0.25", "@types/react-router-dom": "^5.3.3", "fast-png": "^8.0.0", "polished": "^4.3.1", "react-router-dom": "^6.28.0", "react-supergrid": "^1.0.10", "svgson": "^5.3.1", "transformation-matrix": "^3.0.0", "use-mouse-matrix-transform": "^1.3.0" }, "peerDependencies": { "bun-match-svg": "*", "looks-same": "^9.0.1", "typescript": "^5.0.0" }, "bin": { "gd": "dist/cli/cli.js", "graphics-debug": "dist/cli/cli.js" } }, "sha512-UETFrQErrBzGXaw5D+hq7t6Z91yrDoItOLJbk5hv8PFfcy0jyVDHb941KyTuCzz/h2rIqpyMODij136aKeM1wg=="],
"hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="],
@@ -449,6 +456,8 @@
"ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="],
+ "iobuffer": ["iobuffer@6.0.1", "", {}, "sha512-SZWYkWNfjIXIBYSDpXDYIgshqtbOPsi4lviawAEceR1Kqk+sHDlcQjWrzNQsii80AyBY0q5c8HCTNjqo74ul+Q=="],
+
"is-arrayish": ["is-arrayish@0.3.4", "", {}, "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA=="],
"is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="],
@@ -467,7 +476,7 @@
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
- "jscad-electronics": ["jscad-electronics@0.0.129", "", { "peerDependencies": { "@jscad/modeling": "^2.12.5", "@tscircuit/alphabet": "^0.0.24", "@tscircuit/footprinter": "*", "circuit-json": "^0.0.232", "jscad-fiber": "^0.0.85", "react": "19.1.0", "react-dom": "19.1.0", "three": "^0.179.1" }, "optionalPeers": ["jscad-fiber"] }, "sha512-bYdAxeaqwmzSshJw+BmW8iV/+BXmOXK3fRRmygNkwjMdV/U0YzwaQ4N1qSayt8+QbAJZ9lyrIeK6Q37tQSVvUA=="],
+ "jscad-electronics": ["jscad-electronics@0.0.135", "", { "peerDependencies": { "@jscad/modeling": "^2.12.5", "@tscircuit/alphabet": "^0.0.24", "@tscircuit/footprinter": "*", "circuit-json": "^0.0.426", "jscad-fiber": "^0.0.85", "react": "19.1.0", "react-dom": "19.1.0", "three": "^0.179.1" }, "optionalPeers": ["jscad-fiber"] }, "sha512-JkOf8+nZvxEEqFWtpRqjOwTRM4GpCimvGzLumkkjjA3iUB2/SmKktB4YBxC2bqnreZ5EU1mf1X2HcVGfLk2zfQ=="],
"jscad-planner": ["jscad-planner@0.0.13", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-Lkx7PDT0s90o25dhENrvcYLlgKRvSmhyX7H7LMMq85Hl5ICzirU4MAPxeveKWLlKrdS+4krybVAuKsJ9uvUppg=="],
@@ -477,9 +486,9 @@
"kicad-component-converter": ["kicad-component-converter@0.1.40", "", { "bin": { "kicad-mod-converter": "dist/cli.js", "kicad-component-converter": "dist/cli.js" } }, "sha512-k0eJpjeRF5E55Izphx87NzL9iGd5kABovG+1TRCgWktfYGWk3YuUnEZPsBVB5PH01TKA7OE8Oj7CdJcGSxWISw=="],
- "kicad-to-circuit-json": ["kicad-to-circuit-json@0.0.32", "", { "dependencies": { "schematic-symbols": "^0.0.202" }, "peerDependencies": { "typescript": "^5" } }, "sha512-S7UvRTHq6qbiVbb0yqx/nVMMR6pLE3qBvLz8K10l23BBQOvkU4CGeN4aYlZ35hFrySViXvsZu+5gz8Vq9ncp4g=="],
+ "kicad-to-circuit-json": ["kicad-to-circuit-json@0.0.97", "", { "dependencies": { "schematic-symbols": "^0.0.202" }, "peerDependencies": { "typescript": "^5" } }, "sha512-DPZK6ovD2LaHlJO05X/0KfWRlQuKrDLWlBL32lx6UKMOW6wcHFzVIIregsqTUhwqrNFRmJJffWKYtkNcVpbaNw=="],
- "kicadts": ["kicadts@0.0.23", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-hBXc9ip3tYpCMCNjW4SzUxv+InJe/6ZfK8Z7meb8P1fN0iSr38IkXwqsVKqArDR9v/LPm0H1vRXh+9Aa+Mv+FA=="],
+ "kicadts": ["kicadts@0.0.47", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-gNCmlCCzg84T47Uwe2hR8b2MMxwh+gt2lwJPyEsGGCv4HQmZGUoJGe/O0jXLdq8DnPQ8/EA5AM8hZuX0A+HtSw=="],
"kind-of": ["kind-of@3.2.2", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="],
@@ -493,6 +502,10 @@
"looks-same": ["looks-same@9.0.1", "", { "dependencies": { "color-diff": "^1.1.0", "fs-extra": "^8.1.0", "js-graph-algorithms": "1.0.18", "lodash": "^4.17.3", "nested-error-stacks": "^2.1.0", "parse-color": "^1.0.0", "sharp": "0.32.6" } }, "sha512-V+vsT22nLIUdmvxr6jxsbafpJaZvLFnwZhV7BbmN38+v6gL+/BaHnwK9z5UURhDNSOrj3baOgbwzpjINqoZCpA=="],
+ "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
+
+ "lucide-react": ["lucide-react@1.24.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-YT6mBD8lGKkg4nM39enlm94/sfJIiW0YKUT60fBy4YK8tai31ylg1VhGNWxkpSKHo9UagfnZqwIff3HTDQwXeA=="],
+
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
"mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
@@ -555,7 +568,7 @@
"polished": ["polished@4.3.1", "", { "dependencies": { "@babel/runtime": "^7.17.8" } }, "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA=="],
- "poppygl": ["poppygl@0.0.16", "", { "dependencies": { "gl-matrix": "^3.4.4", "pureimage": "^0.4.18", "readable-stream": "^4.7.0" }, "peerDependencies": { "typescript": "^5" } }, "sha512-A29z8dQRyupmLpBU8AurAeAdIYe0nIVuk+o/7PZlhEd4R+SZjt6eY98nnP7g85zcY8FinXtSPysKnMWoo7cz0g=="],
+ "poppygl": ["poppygl@0.0.25", "", { "dependencies": { "fast-png": "^8.0.0", "gl-matrix": "^3.4.4", "pureimage": "^0.4.18", "readable-stream": "^4.7.0" }, "peerDependencies": { "typescript": "^5" } }, "sha512-QdEseeqb2hp631ZZ5OF5/X1F8hC5VcgWTci2dFDphb8lNO4sNz9WCpROfBBwAuqSWHBaYQweiwqYKitzuF483g=="],
"postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="],
@@ -601,7 +614,7 @@
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
- "schematic-symbols": ["schematic-symbols@0.0.208", "", { "peerDependencies": { "typescript": "^5.5.4" } }, "sha512-2vW3Kmouu1jVtwHuwa9HBgWLl4NKYoXk1T8rtOCa+tlZhCP/qQRX0YWwo4ZljSoY2fWPwZoEy7RX/CuEBuSA+Q=="],
+ "schematic-symbols": ["schematic-symbols@0.0.232", "", { "peerDependencies": { "typescript": "^5.5.4" } }, "sha512-gByjhnJepBvKto5rWqBvg59/mCduiiZ0eS85KpfTAaev8nxh5nEPvNDRbe7m/1npGgqwmKKZPjVQqjA2P3P+JA=="],
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
@@ -615,8 +628,12 @@
"source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="],
+ "spicets": ["spicets@0.0.2", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-Or30bFInG8QFfgQOj+84fsVMyKC6pFa879PnwyLy0EXWUF3KHKQlqMUSfjuD7KS9bTbGQCVe3eEVrfdHqS7TWQ=="],
+
"spicey": ["spicey@0.0.14", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-iktSN1BteKEpou3158v25fxGJsNZ4MFeBVV0bZFZ5UZ5NnqusVxVQ1ZrPnCO+2FCmTIBqTD66n0GKMxF6+N/xg=="],
+ "stack-svgs": ["stack-svgs@0.0.1", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-qcqBlwd5DZdXB+jEc+JUoh3o5zVYfjLrrgtwn7GCvjnoEGaXMPjWQnRotkDNh+uhpXVO7ssNln/JbNnLtIFNQw=="],
+
"streamx": ["streamx@2.25.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg=="],
"string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
@@ -657,7 +674,7 @@
"ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="],
- "tscircuit": ["tscircuit@0.0.1672", "", { "dependencies": { "@flatten-js/core": "^1.6.2", "@lume/kiwi": "^0.4.3", "@resvg/resvg-js": "^2.6.2", "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-typescript": "^12.3.0", "@tscircuit/alphabet": "0.0.25", "@tscircuit/capacity-autorouter": "^0.0.452", "@tscircuit/checks": "0.0.124", "@tscircuit/circuit-json-util": "^0.0.94", "@tscircuit/cli": "^0.1.1287", "@tscircuit/copper-pour-solver": "^0.0.23", "@tscircuit/core": "^0.0.1194", "@tscircuit/eval": "^0.0.785", "@tscircuit/footprinter": "^0.0.351", "@tscircuit/infer-cable-insertion-point": "^0.0.2", "@tscircuit/infgrid-ijump-astar": "^0.0.35", "@tscircuit/internal-dynamic-import": "^0.0.2", "@tscircuit/matchpack": "^0.0.16", "@tscircuit/math-utils": "^0.0.36", "@tscircuit/miniflex": "^0.0.4", "@tscircuit/ngspice-spice-engine": "^0.0.8", "@tscircuit/props": "^0.0.513", "@tscircuit/runframe": "^0.0.1873", "@tscircuit/schematic-match-adapt": "^0.0.16", "@tscircuit/schematic-trace-solver": "^v0.0.45", "@tscircuit/simple-3d-svg": "^0.0.41", "@tscircuit/solver-utils": "^0.0.3", "@tscircuit/soup-util": "^0.0.41", "bpc-graph": "^0.0.57", "calculate-elbow": "^0.0.12", "calculate-packing": "0.0.71", "circuit-json": "^0.0.419", "circuit-json-to-bpc": "^0.0.13", "circuit-json-to-connectivity-map": "^0.0.23", "circuit-json-to-gltf": "^0.0.96", "circuit-json-to-simple-3d": "^0.0.9", "circuit-json-to-spice": "^0.0.34", "circuit-to-svg": "^0.0.345", "comlink": "^4.4.2", "connectivity-map": "^1.0.0", "css-select": "5.1.0", "debug": "^4.3.6", "flatbush": "^4.5.0", "format-si-unit": "^0.0.3", "graphics-debug": "^0.0.89", "jscad-planner": "^0.0.13", "kicad-component-converter": "^0.1.40", "kicad-to-circuit-json": "^0.0.32", "kicadts": "^0.0.23", "minicssgrid": "^0.0.9", "performance-now": "^2.1.0", "poppygl": "^0.0.16", "react": "^19.1.0", "react-dom": "^19.1.0", "rollup": "^4.53.2", "rollup-plugin-dts": "^6.2.3", "s-expression": "^3.1.1", "schematic-symbols": "^0.0.208", "spicey": "^0.0.14", "sucrase": "^3.35.0", "svg-path-commander": "^2.1.11", "transformation-matrix": "^2.16.1", "tslib": "^2.8.1", "zod": "^3.25.67" }, "peerDependencies": { "typescript": "^5.0.0" }, "bin": { "tsci": "cli.mjs", "tscircuit": "cli.mjs" } }, "sha512-vNOJwMPflMbSM7IS0rvXOz7BPfHt/lg7mM8U0w8b61xh4q5XMy60K7JfReF//qpdnhdPQPq+IqUPnMYaXFcltQ=="],
+ "tscircuit": ["tscircuit@0.0.2067", "", { "dependencies": { "@flatten-js/core": "^1.6.2", "@lume/kiwi": "^0.4.3", "@resvg/resvg-js": "^2.6.2", "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-typescript": "^12.3.0", "@tscircuit/alphabet": "0.0.25", "@tscircuit/capacity-autorouter": "^0.0.665", "@tscircuit/checks": "0.0.142", "@tscircuit/circuit-json-util": "^0.0.97", "@tscircuit/cli": "^0.1.1660", "@tscircuit/copper-pour-solver": "0.0.39", "@tscircuit/core": "^0.0.1437", "@tscircuit/eval": "^0.0.1003", "@tscircuit/footprinter": "^0.0.371", "@tscircuit/image-utils": "^0.0.8", "@tscircuit/infer-cable-insertion-point": "^0.0.2", "@tscircuit/infgrid-ijump-astar": "^0.0.35", "@tscircuit/internal-dynamic-import": "^0.0.10", "@tscircuit/krt-wasm": "^0.1.1", "@tscircuit/matchpack": "^0.0.34", "@tscircuit/math-utils": "^0.0.36", "@tscircuit/miniflex": "^0.0.4", "@tscircuit/ngspice-spice-engine": "^0.0.19", "@tscircuit/props": "^0.0.574", "@tscircuit/runframe": "^0.0.2201", "@tscircuit/schematic-match-adapt": "^0.0.18", "@tscircuit/schematic-trace-solver": "^0.0.96", "@tscircuit/simple-3d-svg": "^0.0.41", "@tscircuit/solver-utils": "^0.0.16", "@tscircuit/soup-util": "^0.0.41", "bpc-graph": "^0.0.57", "calculate-cell-boundaries": "^0.0.13", "calculate-elbow": "^0.0.12", "calculate-packing": "0.0.75", "circuit-json": "^0.0.447", "circuit-json-to-bpc": "^0.0.13", "circuit-json-to-connectivity-map": "^0.0.23", "circuit-json-to-gltf": "^0.0.105", "circuit-json-to-simple-3d": "^0.0.9", "circuit-json-to-spice": "^0.0.43", "circuit-to-svg": "^0.0.384", "comlink": "^4.4.2", "connectivity-map": "^1.0.0", "css-select": "5.1.0", "debug": "^4.3.6", "flatbush": "^4.5.0", "format-si-unit": "^0.0.7", "graphics-debug": "^0.0.95", "jscad-planner": "^0.0.13", "kicad-component-converter": "^0.1.40", "kicad-to-circuit-json": "^0.0.97", "kicadts": "^0.0.47", "minicssgrid": "^0.0.9", "performance-now": "^2.1.0", "poppygl": "^0.0.25", "react": "^19.1.0", "react-dom": "^19.1.0", "rollup": "^4.53.2", "rollup-plugin-dts": "^6.2.3", "s-expression": "^3.1.1", "schematic-symbols": "^0.0.232", "spicets": "^0.0.2", "spicey": "^0.0.14", "sucrase": "^3.35.0", "svg-path-commander": "^2.1.11", "transformation-matrix": "^2.16.1", "tslib": "^2.8.1", "zod": "^3.25.67" }, "peerDependencies": { "typescript": "^5.0.0" }, "bin": { "tsci": "cli.mjs", "tscircuit": "cli.mjs" } }, "sha512-7Yu0/oE1VsHyx3/VydfVKEfqY3Mfrls3xvWTQAmOyCtGq+TrYnzQRwx8AI3RIEDstV/oYRT+3UNcnnN5PtFCdA=="],
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
@@ -691,6 +708,12 @@
"bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
+ "calculate-cell-boundaries/@tscircuit/solver-utils": ["@tscircuit/solver-utils@0.0.19", "", { "peerDependencies": { "graphics-debug": "*", "typescript": "^5" } }, "sha512-UPUVgRRIrylSMJfKw7QwhSCvlODD+uAAwXc9jpOG06ipqteeeLRkj/HtHns31KQfLjRCSsGTvxMYBjmhaDDLGg=="],
+
+ "calculate-cell-boundaries/react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="],
+
+ "calculate-cell-boundaries/react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="],
+
"circuit-json-to-connectivity-map/@tscircuit/math-utils": ["@tscircuit/math-utils@0.0.9", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-sPzfXndijet8z29X6f5vnSZddiso2tRg7m6rB+268bVj60mxnxUMD14rKuMlLn6n84fMOpD/X7pRTZUfi6M+Tg=="],
"circuit-json-to-spice/circuit-json-to-connectivity-map": ["circuit-json-to-connectivity-map@0.0.22", "", { "dependencies": { "@tscircuit/math-utils": "^0.0.9" }, "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-HN8DiISjZZLTglGEkYNRpKeQ/DMG4dDo5j4Hck0UGSJbpux9aFwtJOGszMf06Inh/gu5oKBrpZJIeWxaNacKUg=="],
@@ -705,8 +728,12 @@
"react-reconciler/scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="],
+ "tscircuit/@tscircuit/footprinter": ["@tscircuit/footprinter@0.0.379", "", { "dependencies": { "@tscircuit/mm": "^0.0.8", "zod": "^3.23.8" }, "peerDependencies": { "circuit-json": "*" } }, "sha512-PKAlfTmRqLQt8OUrXji//Yola5vRdXr2ttF1b+yDXtBcdihIAhVh7qsNsxfQW9SMAeELlFdctJOET5/+q4cB0Q=="],
+
"use-mouse-matrix-transform/transformation-matrix": ["transformation-matrix@3.1.0", "", {}, "sha512-oYubRWTi2tYFHAL2J8DLvPIqIYcYZ0fSOi2vmSy042Ho4jBW2ce6VP7QfD44t65WQz6bw5w1Pk22J7lcUpaTKA=="],
+ "calculate-cell-boundaries/react-dom/scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="],
+
"circuit-json-to-spice/circuit-json-to-connectivity-map/@tscircuit/math-utils": ["@tscircuit/math-utils@0.0.9", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-sPzfXndijet8z29X6f5vnSZddiso2tRg7m6rB+268bVj60mxnxUMD14rKuMlLn6n84fMOpD/X7pRTZUfi6M+Tg=="],
"prebuild-install/tar-fs/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="],
diff --git a/examples/MicrocontrollerRP2040WithUsbC/MicrocontrollerRP2040WithUsbC.circuit.tsx b/examples/MicrocontrollerRP2040WithUsbC/MicrocontrollerRP2040WithUsbC.circuit.tsx
new file mode 100644
index 0000000..26c6f6a
--- /dev/null
+++ b/examples/MicrocontrollerRP2040WithUsbC/MicrocontrollerRP2040WithUsbC.circuit.tsx
@@ -0,0 +1,14 @@
+import { Microcontroller_RP2040 } from "../../index"
+
+export default function MicrocontrollerRP2040WithUsbC() {
+ return (
+
+
+
+ )
+}
diff --git a/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-3d.snap.png b/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-3d.snap.png
new file mode 100644
index 0000000..63302e9
Binary files /dev/null and b/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-3d.snap.png differ
diff --git a/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-pcb.snap.svg b/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-pcb.snap.svg
new file mode 100644
index 0000000..13c39f4
--- /dev/null
+++ b/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-pcb.snap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-schematic.snap.svg b/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-schematic.snap.svg
new file mode 100644
index 0000000..84c703d
--- /dev/null
+++ b/examples/MicrocontrollerRP2040WithUsbC/__snapshots__/MicrocontrollerRP2040WithUsbC.circuit-schematic.snap.svg
@@ -0,0 +1,334 @@
+
\ No newline at end of file
diff --git a/index.tsx b/index.tsx
index a34bf53..aa69f51 100644
--- a/index.tsx
+++ b/index.tsx
@@ -6,3 +6,4 @@ export * from "./lib/XiaoBoard/XiaoReceiver.circuit"
export * from "./lib/ProMicroBoard/ProMicroBoard.circuit"
// export * from "./Common Boards/RaspberryPiHatBoard/RaspberryPiHatBoard.circuit"
export * from "./lib/ViaGridBoard/ViaGridBoard.circuit"
+export * from "./lib/Microcontroller_RP2040/Microcontroller_RP2040.circuit"
diff --git a/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-3d.snap.png b/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-3d.snap.png
index 8a5d2cd..b13444f 100644
Binary files a/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-3d.snap.png and b/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-3d.snap.png differ
diff --git a/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-pcb.snap.svg b/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-pcb.snap.svg
index 7e86fc4..cc8a45a 100644
--- a/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-pcb.snap.svg
+++ b/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-schematic.snap.svg b/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-schematic.snap.svg
index f1de7f7..acdfac1 100644
--- a/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-schematic.snap.svg
+++ b/lib/ArduinoShield/__snapshots__/ArduinoShield.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ ArduinoShield_chip1A02A13A24A35A46A57VIN9IOREF10RES11V3_312V513GND014GND115RX16TX17D218D319D420D521D622D723D824D925D1026D1127D1228D1329GND230AREF31SDA32SCL
\ No newline at end of file
diff --git a/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-3d.snap.png b/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-3d.snap.png
index 524378d..9113b2e 100644
Binary files a/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-3d.snap.png and b/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-3d.snap.png differ
diff --git a/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-pcb.snap.svg b/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-pcb.snap.svg
index 5f46072..0b4c034 100644
--- a/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-pcb.snap.svg
+++ b/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-schematic.snap.svg b/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-schematic.snap.svg
index 81adffa..4114b35 100644
--- a/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-schematic.snap.svg
+++ b/lib/CM5Receiver/__snapshots__/CM5Receiver.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ A_10164227_1001A1RLFundefined_LEFT1USB_OTG_ID2PCIe_CLK_nREQ3USB_N4PCIE_nWAKE5USB_P6PCIE_PWR_EN7GND_228GND_239PCIe_nRST10PCIe_CLK_P11VBUS_EN12PCIe_CLK_N13GND_2414GND_2515MIPI0_D0_N16PCIe_RX_P17MIPI0_D0_P18PCIe_RX_N19GND_2620GND_2721MIPI0_D1_N22PCIe_TX_P23MIPI0_D1_P24PCIe_TX_N25GND_2826GND_2927MIPI0_C_N28USB3_0_RX_N29MIPI0_C_P30USB3_0_RX_P31GND_3032GND_3133MIPI0_D2_N34USB3_0_DP35MIPI0_D2_P36USB3_0_DM37GND_3238GND_3339MIPI0_D3_N40USB3_0_TX_N41MIPI0_D3_P42USB3_0_TX_P43HDMI1_HOTPLUG44GND_3445HDMI1_SDA46HDMI1_TX2_P47HDMI1_SCL48HDMI1_TX2_N49HDMI1_CEC50GND_3551HDMI0_CEC52HDMI1_TX1_P53HDMI0_HOTPLUG54HDMI1_TX1_N55GND_3656GND_3757USB3_1_RX_N58HDMI1_TX0_P59USB3_1_RX_P60HDMI1_TX0_N61GND_3862GND_3963USB3_1_DP64HDMI1_CLK_P65USB3_1_DM66HDMI1_CLK_N67GND_4068GND_4169USB3_1_TX_N70HDMI0_TX2_P71USB3_1_TX_P72HDMI0_TX2_N73GND_4274GND_4375MIPI1_D0_N76HDMI0_TX1_P77MIPI1_D0_P78HDMI0_TX1_N79GND_4480GND_4581MIPI1_D1_N82HDMI0_TX0_P83MIPI1_D1_P84HDMI0_TX0_N85GND_4686GND_4787MIPI1_C_N88HDMI0_CLK_P89MIPI1_C_P90HDMI0_CLK_N91GND_4892GND_4993MIPI1_D2_N94MIPI1_D3_N95MIPI1_D2_P96MIPI1_D3_P97GND_5098GND_5199HDMI0_SDA100HDMI0_SCLA_10164227_1001A1RLFundefined_RIGHT1GND_12GND_23Ethernet_Pair3_P4Ethernet_Pair1_P5Ethernet_Pair3_N6Ethernet_Pair1_N7GND_38GND_49Ethernet_Pair2_N10Ethernet_Pair0_N11Ethernet_Pair2_P12Ethernet_Pair0_P13GND_514GND_615Ethernet_nLED316Fan_Tacho17Ethernet_nLED218Ethernet_SYNC_OUT19Fan_PWM20EEPROM_nWP21LED_nACT22GND_723GND_824GPIO2625GPIO2126GPIO1927GPIO2028GPIO1329GPIO1630GPIO631GPIO1232GND_933GND_1034GPIO535ID_SC36ID_SD37GPIO738GPIO1139GPIO840GPIO941GPIO2542GND_1143GND_1244GPIO1045GPIO2446GPIO2247GPIO2348GPIO2749GPIO1850GPIO1751GPIO1552GND_1353GND_1454GPIO455GPIO1456GPIO357SD_CLK58GPIO259GND_1560GND_1661SD_DAT362SD_CMD63SD_DAT064SD_DAT565GND_1766GND_1867SD_DAT168SD_DAT469SD_DAT270SD_DAT771GND_1972SD_DAT673SD_VDD_OVERRIDE74GND_2075SD_PWR_ON76VBAT77V5_IN_178GPIO_VREF79V5_IN_280SCL081V5_IN_382SDA083V5_IN_484CM5_V3_3_OUT_185V5_IN_586CM5_V3_3_OUT_287V5_IN_688CM5_V1_8_OUT_189WL_nDisable90CM5_V1_8_OUT_291BT_nDisable92PWR_Button93nRPIBOOT94CC195LED_nPWR96CC297CAM_GPIO098GND_2199PMIC_Enable100CAM_GPIO1
\ No newline at end of file
diff --git a/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-3d.snap.png b/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-3d.snap.png
index 5b2082c..752bb1a 100644
Binary files a/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-3d.snap.png and b/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-3d.snap.png differ
diff --git a/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-pcb.snap.svg b/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-pcb.snap.svg
index 733337a..24e9fa5 100644
--- a/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-pcb.snap.svg
+++ b/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-schematic.snap.svg b/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-schematic.snap.svg
index 471eedc..7721434 100644
--- a/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-schematic.snap.svg
+++ b/lib/MicroModBoard/__snapshots__/MicroModBoardFunction.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ MicroModBoardFunction_chip2V3_3_174V3_3_26RESET11BOOT4V3_3_EN72RTC_V39USB_VIN5USB_D_N3USB_D_P37USBHOST_D_N35USBHOST_D_P43CAN_TX41CAN_RX23SWDIO21SWDCK58AUD_MCLK56AUD_OUT54AUD_IN52AUD_LRCLK50AUD_BCLK14I2C_SCL12I2C_SDA16I2C_N_INT53I2C_SCL151I2C_SDA149BATT_VIN_31GND17GND233GND336GND439GND545GND675GND760SPI_SCK162SPI_SDO164SPI_SDI166SDIO_DATA168SDIO_DATA270SPI_N_CS157SPI_SCK59SPI_SDO61SPI_SDI55SPI_N_CS34A038A132PWM047PWM110D018D117TX119RX113RTS115CTS122TX220RX240G042G144G246G348G473G571G669G767G865G963G108G1176HOLE_PAD_177HOLE_PAD_2
\ No newline at end of file
diff --git a/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-3d.snap.png b/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-3d.snap.png
index 0d0d16d..5ec2aaa 100644
Binary files a/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-3d.snap.png and b/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-3d.snap.png differ
diff --git a/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-pcb.snap.svg b/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-pcb.snap.svg
index 840bcd1..133d065 100644
--- a/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-pcb.snap.svg
+++ b/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-schematic.snap.svg b/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-schematic.snap.svg
index 86062f8..ca84644 100644
--- a/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-schematic.snap.svg
+++ b/lib/MicroModBoard/__snapshots__/MicroModBoardProcessor.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ MicroModBoardProcessor_chip2V3_3_174V3_3_26RESET11BOOT4V3_3_EN72RTC_V39USB_VIN5USB_D_N3USB_D_P37USBHOST_D_N35USBHOST_D_P43CAN_TX41CAN_RX23SWDIO21SWDCK58AUD_MCLK56AUD_OUT54AUD_IN52AUD_LRCLK50AUD_BCLK14I2C_SCL12I2C_SDA16I2C_N_INT53I2C_SCL151I2C_SDA149BATT_VIN_31GND17GND233GND336GND439GND545GND675GND760SPI_SCK162SPI_SDO164SPI_SDI166SDIO_DATA168SDIO_DATA270SPI_N_CS157SPI_SCK59SPI_SDO61SPI_SDI55SPI_N_CS34A038A132PWM047PWM110D018D117TX119RX113RTS115CTS122TX220RX240G042G144G246G348G473G571G669G767G865G963G108G1176HOLE_PAD_1
\ No newline at end of file
diff --git a/lib/Microcontroller_RP2040/Microcontroller_RP2040.circuit.tsx b/lib/Microcontroller_RP2040/Microcontroller_RP2040.circuit.tsx
new file mode 100644
index 0000000..597257d
--- /dev/null
+++ b/lib/Microcontroller_RP2040/Microcontroller_RP2040.circuit.tsx
@@ -0,0 +1,818 @@
+import type { ChipProps, SubcircuitProps } from "@tscircuit/props"
+import { RP2040 } from "./imports/RP2040"
+import { TYPE_C_16PIN_2MD_073_ } from "./imports/TYPE_C_16PIN_2MD_073_"
+import { W25Q16JVUXIQ } from "./imports/W25Q16JVUXIQ"
+import { AP2112K_3_3TRG1 } from "./imports/AP2112K_3_3TRG1"
+import { X322512MSB4SI } from "./imports/X322512MSB4SI"
+import { SKRPACE010 } from "./imports/SKRPACE010"
+import { B5819W_SL } from "./imports/B5819W_SL"
+import { XL_1608SURC_06 } from "./imports/XL_1608SURC_06"
+
+const denseTraceProps = { thickness: "0.1mm" } as const
+const gndLabel = { displayName: "GND", schDisplayLabel: "GND" } as const
+const vbusLabel = { displayName: "VBUS", schDisplayLabel: "VBUS" } as const
+const vsysLabel = { displayName: "VSYS", schDisplayLabel: "VSYS" } as const
+const v3v3Label = { displayName: "V3V3", schDisplayLabel: "V3V3" } as const
+const v1v1Label = { displayName: "V1V1", schDisplayLabel: "V1V1" } as const
+const adcRefLabel = {
+ displayName: "ADC_REF",
+ schDisplayLabel: "ADC_REF",
+} as const
+const schSections = {
+ rp2040: "rp2040",
+ usb: "usb",
+ power: "power",
+ flash: "flash",
+ clock: "clock",
+ controls: "controls",
+ display: "display",
+ status: "status",
+ debug: "debug",
+} as const
+
+export type MicrocontrollerRP2040Props = Omit<
+ SubcircuitProps,
+ "children" | "connections"
+> & {
+ connections?: ChipProps["connections"]
+}
+
+/**
+ * Complete Pico-style RP2040 support circuit adapted from
+ * https://tscircuit.com/abse/gameboy.
+ */
+export const Microcontroller_RP2040 = ({
+ name = "Microcontroller_RP2040",
+ connections,
+ ...props
+}: MicrocontrollerRP2040Props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* RUN pullup */}
+
+
+
+ {/* TESTEN */}
+
+
+ {/* Flash decoupling */}
+
+
+
+ {/* IOVDD decoupling */}
+
+
+
+
+
+
+ {/* USB_VDD decoupling */}
+
+
+
+ {/* ADC decoupling */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+)
diff --git a/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-3d.snap.png b/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-3d.snap.png
new file mode 100644
index 0000000..b05983c
Binary files /dev/null and b/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-3d.snap.png differ
diff --git a/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-pcb.snap.svg b/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-pcb.snap.svg
new file mode 100644
index 0000000..715b7db
--- /dev/null
+++ b/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-pcb.snap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-schematic.snap.svg b/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-schematic.snap.svg
new file mode 100644
index 0000000..e8ea4ad
--- /dev/null
+++ b/lib/Microcontroller_RP2040/__snapshots__/Microcontroller_RP2040.circuit-schematic.snap.svg
@@ -0,0 +1,334 @@
+
\ No newline at end of file
diff --git a/lib/Microcontroller_RP2040/imports/AP2112K_3_3TRG1.tsx b/lib/Microcontroller_RP2040/imports/AP2112K_3_3TRG1.tsx
new file mode 100644
index 0000000..c3afe0f
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/AP2112K_3_3TRG1.tsx
@@ -0,0 +1,31 @@
+import type { ChipProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin1: ["VIN"],
+ pin2: ["GND"],
+ pin3: ["EN"],
+ pin4: ["NC"],
+ pin5: ["VOUT"],
+} as const
+
+export const AP2112K_3_3TRG1 = (props: ChipProps) => {
+ return (
+
+ )
+}
diff --git a/lib/Microcontroller_RP2040/imports/B5819W_SL.tsx b/lib/Microcontroller_RP2040/imports/B5819W_SL.tsx
new file mode 100644
index 0000000..43da51f
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/B5819W_SL.tsx
@@ -0,0 +1,31 @@
+import type { DiodeProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin1: ["cathode", "neg"],
+ pin2: ["anode", "pos"],
+} as const
+
+export const B5819W_SL = (props: DiodeProps) => {
+ const { name = "D1", ...restProps } = props
+
+ return (
+
+ )
+}
diff --git a/lib/Microcontroller_RP2040/imports/RP2040.tsx b/lib/Microcontroller_RP2040/imports/RP2040.tsx
new file mode 100644
index 0000000..163e457
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/RP2040.tsx
@@ -0,0 +1,83 @@
+import type { ChipProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin1: ["IOVDD6"],
+ pin2: ["GPIO0"],
+ pin3: ["GPIO1"],
+ pin4: ["GPIO2"],
+ pin5: ["GPIO3"],
+ pin6: ["GPIO4"],
+ pin7: ["GPIO5"],
+ pin8: ["GPIO6"],
+ pin9: ["GPIO7"],
+ pin10: ["IOVDD5"],
+ pin11: ["GPIO8"],
+ pin12: ["GPIO9"],
+ pin13: ["GPIO10"],
+ pin14: ["GPIO11"],
+ pin15: ["GPIO12"],
+ pin16: ["GPIO13"],
+ pin17: ["GPIO14"],
+ pin18: ["GPIO15"],
+ pin19: ["TESTEN"],
+ pin20: ["XIN"],
+ pin21: ["XOUT"],
+ pin22: ["IOVDD4"],
+ pin23: ["DVDD2"],
+ pin24: ["SWCLK"],
+ pin25: ["SWD"],
+ pin26: ["RUN"],
+ pin27: ["GPIO16"],
+ pin28: ["GPIO17"],
+ pin29: ["GPIO18"],
+ pin30: ["GPIO19"],
+ pin31: ["GPIO20"],
+ pin32: ["GPIO21"],
+ pin33: ["IOVDD3"],
+ pin34: ["GPIO22"],
+ pin35: ["GPIO23"],
+ pin36: ["GPIO24"],
+ pin37: ["GPIO25"],
+ pin38: ["GPIO26_ADC0"],
+ pin39: ["GPIO27_ADC1"],
+ pin40: ["GPIO28_ADC2"],
+ pin41: ["GPIO29_ADC3"],
+ pin42: ["IOVDD2"],
+ pin43: ["ADC_AVDD"],
+ pin44: ["VREG_IN"],
+ pin45: ["VREG_VOUT"],
+ pin46: ["USB_DM"],
+ pin47: ["USB_DP"],
+ pin48: ["USB_VDD"],
+ pin49: ["IOVDD1"],
+ pin50: ["DVDD1"],
+ pin51: ["QSPI_SD3"],
+ pin52: ["QSPI_SCLK"],
+ pin53: ["QSPI_SD0"],
+ pin54: ["QSPI_SD2"],
+ pin55: ["QSPI_SD1"],
+ pin56: ["QSPI_SS"],
+ pin57: ["GND", "thermalpad"],
+} as const
+
+export const RP2040 = (props: ChipProps) => {
+ return (
+
+ )
+}
diff --git a/lib/Microcontroller_RP2040/imports/SKRPACE010.tsx b/lib/Microcontroller_RP2040/imports/SKRPACE010.tsx
new file mode 100644
index 0000000..4c4d104
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/SKRPACE010.tsx
@@ -0,0 +1,30 @@
+import type { ChipProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin1: ["pin1"],
+ pin2: ["pin2"],
+ pin3: ["pin3"],
+ pin4: ["pin4"],
+} as const
+
+export const SKRPACE010 = (props: ChipProps) => {
+ return (
+
+ )
+}
diff --git a/lib/Microcontroller_RP2040/imports/TYPE_C_16PIN_2MD_073_.tsx b/lib/Microcontroller_RP2040/imports/TYPE_C_16PIN_2MD_073_.tsx
new file mode 100644
index 0000000..0e6a58c
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/TYPE_C_16PIN_2MD_073_.tsx
@@ -0,0 +1,42 @@
+import type { ChipProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin13: ["EH1"],
+ pin14: ["EH2"],
+ pin15: ["pin13_alt1"],
+ pin16: ["pin14_alt1"],
+ pin17: ["A1B12"],
+ pin18: ["A4B9"],
+ pin19: ["B8"],
+ pin20: ["A5"],
+ pin21: ["B7"],
+ pin22: ["A6"],
+ pin23: ["A7"],
+ pin24: ["B6"],
+ pin25: ["A8"],
+ pin26: ["B5"],
+ pin27: ["B4A9"],
+ pin28: ["B1A12"],
+} as const
+
+export const TYPE_C_16PIN_2MD_073_ = (props: ChipProps) => {
+ return (
+
+ )
+}
diff --git a/lib/Microcontroller_RP2040/imports/W25Q16JVUXIQ.tsx b/lib/Microcontroller_RP2040/imports/W25Q16JVUXIQ.tsx
new file mode 100644
index 0000000..fc466f2
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/W25Q16JVUXIQ.tsx
@@ -0,0 +1,35 @@
+import type { ChipProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin1: ["CS"],
+ pin2: ["pin2"],
+ pin3: ["pin3"],
+ pin4: ["GND"],
+ pin5: ["pin5"],
+ pin6: ["CLK"],
+ pin7: ["pin7"],
+ pin8: ["VCC"],
+ pin9: ["EP"],
+} as const
+
+export const W25Q16JVUXIQ = (props: ChipProps) => {
+ return (
+
+ )
+}
diff --git a/lib/Microcontroller_RP2040/imports/X322512MSB4SI.tsx b/lib/Microcontroller_RP2040/imports/X322512MSB4SI.tsx
new file mode 100644
index 0000000..b71cbc8
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/X322512MSB4SI.tsx
@@ -0,0 +1,30 @@
+import type { ChipProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin1: ["OSC1"],
+ pin2: ["GND1"],
+ pin3: ["OSC2"],
+ pin4: ["GND2"],
+} as const
+
+export const X322512MSB4SI = (props: ChipProps) => {
+ return (
+
+ )
+}
diff --git a/lib/Microcontroller_RP2040/imports/XL_1608SURC_06.tsx b/lib/Microcontroller_RP2040/imports/XL_1608SURC_06.tsx
new file mode 100644
index 0000000..bc4b9e7
--- /dev/null
+++ b/lib/Microcontroller_RP2040/imports/XL_1608SURC_06.tsx
@@ -0,0 +1,35 @@
+import type { LedProps } from "@tscircuit/props"
+
+const pinLabels = {
+ pin1: ["cathode", "neg"],
+ pin2: ["anode", "pos"],
+} as const
+
+export const XL_1608SURC_06 = (props: LedProps) => {
+ const { name = "LED1", ...restProps } = props
+
+ return (
+
+ )
+}
diff --git a/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-3d.snap.png b/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-3d.snap.png
index dea045a..d3acfa5 100644
Binary files a/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-3d.snap.png and b/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-3d.snap.png differ
diff --git a/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-pcb.snap.svg b/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-pcb.snap.svg
index 99d9e56..836550a 100644
--- a/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-pcb.snap.svg
+++ b/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-schematic.snap.svg b/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-schematic.snap.svg
index e16a3df..a95f563 100644
--- a/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-schematic.snap.svg
+++ b/lib/ProMicroBoard/__snapshots__/ProMicroBoard.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ ProMicroBoard1RAW2GND13RST4VCC5A36A27A18A09SCK10MISO11MOSI12D1013TXO14RX115GND216GND317D218D319D420D521D622D723D824D9
\ No newline at end of file
diff --git a/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-3d.snap.png b/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-3d.snap.png
index dc141eb..e60c89a 100644
Binary files a/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-3d.snap.png and b/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-3d.snap.png differ
diff --git a/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-pcb.snap.svg b/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-pcb.snap.svg
index a6324d0..70e9297 100644
--- a/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-pcb.snap.svg
+++ b/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-schematic.snap.svg b/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-schematic.snap.svg
index d663259..0e0d169 100644
--- a/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-schematic.snap.svg
+++ b/lib/RaspberryPiHatBoard/__snapshots__/RaspberryPiHatBoard.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ RaspberryPiHatBoard_chip1V3_3_12V5_13V5_24GND_15GPIO_14/TX6GPIO_15/RX7GPIO_18/PCM_CLK8GND_210GPIO_2411GND_312GPIO_2513GPIO_8/CE014GPIO_7/CE115GPIO_1/ID_SC16GND_417GPIO_12/PWM018GND_519GPIO_1620GPIO_20/PCM_DIN21GPIO_21/PCM_DOUT22GND_623GPIO_2624GPIO_19/PCM_FS25GPIO_13/PWM126GPIO_627GPIO_528GPIO_0/ID_SD29GND_730GPIO_11/SCLK31GPIO_9/MISO32GPIO_10/MOSI33V3_3_234GPIO_2235GPIO_2736GPIO_1737GND_838GPIO_4/GPCLK039GPIO_3/SCL40GPIO_2/SDA
\ No newline at end of file
diff --git a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-3d.snap.png b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-3d.snap.png
index d272b0a..fb9526e 100644
Binary files a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-3d.snap.png and b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-3d.snap.png differ
diff --git a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-pcb.snap.svg b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-pcb.snap.svg
index 7539896..442074c 100644
--- a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-pcb.snap.svg
+++ b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg
index 2c402ff..42e5ff8 100644
--- a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg
+++ b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
diff --git a/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-3d.snap.png b/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-3d.snap.png
index c0b32b9..82a5ba6 100644
Binary files a/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-3d.snap.png and b/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-3d.snap.png differ
diff --git a/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-pcb.snap.svg b/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-pcb.snap.svg
index be7e970..7832978 100644
--- a/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-pcb.snap.svg
+++ b/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-schematic.snap.svg b/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-schematic.snap.svg
index e1f5072..3ec452e 100644
--- a/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-schematic.snap.svg
+++ b/lib/XiaoBoard/__snapshots__/XiaoBoard.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ XiaoBoard1A02A13A24A35SDA6SCL7TX8VBUS9GND110V3_311MOSI12MISO13SCK14RX
\ No newline at end of file
diff --git a/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-3d.snap.png b/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-3d.snap.png
index 2ccb00a..5912191 100644
Binary files a/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-3d.snap.png and b/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-3d.snap.png differ
diff --git a/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-pcb.snap.svg b/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-pcb.snap.svg
index 1297d8e..269490f 100644
--- a/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-pcb.snap.svg
+++ b/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-schematic.snap.svg b/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-schematic.snap.svg
index 0148dfe..058c951 100644
--- a/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-schematic.snap.svg
+++ b/lib/XiaoBoard/__snapshots__/XiaoBoardRP2040.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ XiaoBoardRP20401SWDIO2SWCLK3RUN4GND15GND26VIN7A08A19A210A311SDA12SCL13TX14VBUS15GND316V3_317MOSI18MISO19SCK20RX
\ No newline at end of file
diff --git a/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-3d.snap.png b/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-3d.snap.png
index 8ff6cf3..32b7e65 100644
Binary files a/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-3d.snap.png and b/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-3d.snap.png differ
diff --git a/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-pcb.snap.svg b/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-pcb.snap.svg
index 0096a15..ae2f61a 100644
--- a/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-pcb.snap.svg
+++ b/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-pcb.snap.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-schematic.snap.svg b/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-schematic.snap.svg
index e1f5072..9471b8b 100644
--- a/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-schematic.snap.svg
+++ b/lib/XiaoBoard/__snapshots__/XiaoReceiver.circuit-schematic.snap.svg
@@ -1,25 +1,12 @@
-
\ No newline at end of file
+
+ 1A02A13A24A35SDA6SCL7TX8VBUS9GND110V3_311MOSI12MISO13SCK14RX
\ No newline at end of file
diff --git a/package.json b/package.json
index 51054ed..7eeab57 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,9 @@
},
"devDependencies": {
"@biomejs/biome": "^2.2.4",
+ "@tscircuit/footprinter": "^0.0.380",
"@types/react": "^19.1.12",
- "tscircuit": "^0.0.1672",
+ "tscircuit": "^0.0.2067",
"tsup": "^8.5.0"
}
}
diff --git a/tests/test.test.tsx b/tests/test.test.tsx
index 2dd3155..e3f9859 100644
--- a/tests/test.test.tsx
+++ b/tests/test.test.tsx
@@ -1,13 +1,88 @@
import { test, expect } from "bun:test"
+import { Circuit } from "tscircuit"
import { ArduinoShield } from "../lib/ArduinoShield/ArduinoShield.circuit"
import { RaspberryPiHatBoard } from "../lib/RaspberryPiHatBoard/RaspberryPiHatBoard.circuit"
import { MicroModBoard } from "../lib/MicroModBoard/MicroModBoard"
import { XiaoBoard } from "../lib/XiaoBoard/XiaoBoard.circuit"
+import { Microcontroller_RP2040 } from "../index"
test("test", () => {
expect(ArduinoShield).toBeDefined()
expect(RaspberryPiHatBoard).toBeDefined()
expect(MicroModBoard).toBeDefined()
expect(XiaoBoard).toBeDefined() // TODO: Add tests
+ expect(Microcontroller_RP2040).toBeDefined()
+})
+
+test("Microcontroller_RP2040 creates a named, positionable subcircuit", () => {
+ const element = Microcontroller_RP2040({
+ name: "MCU",
+ pcbX: 12,
+ pcbY: -4,
+ pcbRotation: 90,
+ }) as any
+
+ expect(element.type).toBe("subcircuit")
+ expect(element.props.name).toBe("MCU")
+ expect(element.props.pcbX).toBe(12)
+ expect(element.props.pcbY).toBe(-4)
+ expect(element.props.pcbRotation).toBe(90)
+})
+
+test("Microcontroller_RP2040 renders its complete support circuit", async () => {
+ const circuit = new Circuit()
+
+ circuit.add(
+
+
+ ,
+ )
+
+ await circuit.renderUntilSettled()
+
+ const circuitJson = circuit.getCircuitJson() as any[]
+ const rp2040 = circuitJson.find(
+ (element) =>
+ element.type === "source_component" &&
+ element.manufacturer_part_number === "RP2040",
+ )
+ const rp2040PcbComponent = circuitJson.find(
+ (element) =>
+ element.type === "pcb_component" &&
+ element.source_component_id === rp2040.source_component_id,
+ )
+ const groundPort = circuitJson.find(
+ (element) =>
+ element.type === "source_port" &&
+ element.source_component_id === rp2040.source_component_id &&
+ element.pin_number === 57,
+ )
+ const thermalPad = circuitJson.find(
+ (element) =>
+ element.type === "pcb_smtpad" &&
+ element.pcb_component_id === rp2040PcbComponent.pcb_component_id &&
+ element.port_hints?.includes("thermalpad"),
+ )
+ const thermalPadPort = circuitJson.find(
+ (element) =>
+ element.type === "pcb_port" &&
+ element.pcb_port_id === thermalPad.pcb_port_id,
+ )
+
+ expect(circuit.db.source_group.getWhere({ name: "MCU" })).toBeDefined()
+ expect(
+ circuit.db.source_component
+ .list()
+ .some((component) => component.manufacturer_part_number === "RP2040"),
+ ).toBe(true)
+ expect(circuit.db.pcb_component.list().length).toBeGreaterThan(0)
+ expect(circuit.db.source_net.getWhere({ name: "USER_IO" })).toBeDefined()
+ expect(thermalPadPort.source_port_id).toBe(groundPort.source_port_id)
+ expect(
+ circuitJson.filter((element) => element.type.endsWith("_error")),
+ ).toEqual([])
})
test("ArduinoShield forwards explicit boardProps and chipProps", () => {