From 9e96ab972b487d5b0e882086db6fb1dea9179a24 Mon Sep 17 00:00:00 2001 From: seveibar Date: Sat, 25 Jul 2026 14:21:31 -0700 Subject: [PATCH 1/2] Bump footprinter for new model types --- bun.lock | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index 50bf881..6f72f97 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,7 @@ "name": "jscad-electronics", "devDependencies": { "@biomejs/biome": "^1.9.3", - "@tscircuit/footprinter": "^0.0.374", + "@tscircuit/footprinter": "^0.0.391", "@types/react": "19", "@types/react-dom": "19", "@types/three": "^0.179.0", @@ -179,7 +179,7 @@ "@tscircuit/alphabet": ["@tscircuit/alphabet@0.0.24", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-vYYLwDwpTULFDwuqB5+U4RlTiHJ3Ez4Sf5OEv7rB1oVbhmh8p3Xl7h3vsi5eD4SE+x+0e8eSXKSlwSLCN94vZA=="], - "@tscircuit/footprinter": ["@tscircuit/footprinter@0.0.374", "", { "dependencies": { "@tscircuit/mm": "^0.0.8", "zod": "^3.23.8" }, "peerDependencies": { "circuit-json": "*" } }, "sha512-TqcB8fBoquEWCOIttNSvq3OD+g3j9INFn0Zn//Jmje8U42TW7SpxW5vF+N04zoCmIQ3WkMpeC2032zD4uYbg5Q=="], + "@tscircuit/footprinter": ["@tscircuit/footprinter@0.0.391", "", { "dependencies": { "@tscircuit/mm": "^0.0.8", "zod": "^3.23.8" }, "peerDependencies": { "circuit-json": "*" } }, "sha512-6sUm5uyUJjk0U19Fy1J6w5lfxdB1kQe8lMTtWjjnSTP2dCKmcoBS1Hy5bWhvRuWllYwZkAwztsHYI9DnYDoj6w=="], "@tscircuit/mm": ["@tscircuit/mm@0.0.8", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-nl7nxE7AhARbKuobflI0LUzoir7+wJyvwfPw6bzA/O0Q3YTcH3vBkU/Of+V/fp6ht+AofiCXj7YAH9E446138Q=="], diff --git a/package.json b/package.json index 6b6f4d0..767d7c0 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "devDependencies": { "@biomejs/biome": "^1.9.3", - "@tscircuit/footprinter": "^0.0.374", + "@tscircuit/footprinter": "^0.0.391", "@types/react": "19", "@types/react-dom": "19", "@types/three": "^0.179.0", From 8226acef01a769d243c2e77877d89f61421c4e38 Mon Sep 17 00:00:00 2001 From: seveibar Date: Sat, 25 Jul 2026 14:25:46 -0700 Subject: [PATCH 2/2] Add WSON 3D model --- examples/footprinter3d/fp-wson8.example.tsx | 12 ++++ lib/Footprinter3d.tsx | 20 ++++++ lib/WSON.tsx | 70 ++++++++++++++++++++ lib/index.ts | 1 + tests/snapshots/__snapshots__/wson.snap.png | Bin 0 -> 43727 bytes tests/snapshots/wson.test.ts | 8 +++ 6 files changed, 111 insertions(+) create mode 100644 examples/footprinter3d/fp-wson8.example.tsx create mode 100644 lib/WSON.tsx create mode 100644 tests/snapshots/__snapshots__/wson.snap.png create mode 100644 tests/snapshots/wson.test.ts diff --git a/examples/footprinter3d/fp-wson8.example.tsx b/examples/footprinter3d/fp-wson8.example.tsx new file mode 100644 index 0000000..67f3869 --- /dev/null +++ b/examples/footprinter3d/fp-wson8.example.tsx @@ -0,0 +1,12 @@ +import { JsCadView } from "jscad-fiber" +import { ExtrudedPads } from "lib/ExtrudedPads" +import { Footprinter3d } from "lib/Footprinter3d" + +const footprint = "wson8_ep" + +export default () => ( + + + + +) diff --git a/lib/Footprinter3d.tsx b/lib/Footprinter3d.tsx index a32c152..00fba39 100644 --- a/lib/Footprinter3d.tsx +++ b/lib/Footprinter3d.tsx @@ -57,6 +57,7 @@ import { StampBoard } from "./stampboard" import { MountedPcbModule } from "./MountedPcbModule" import SOD723 from "./SOD723" import { JSTZH1_5mm } from "./JSTZH1_5mm" +import { WSON } from "./WSON" /** * Outputs a 3d model for any [footprinter string](https://github.com/tscircuit/footprinter) @@ -103,6 +104,10 @@ export const Footprinter3d = ({ footprint }: { footprint: string }) => { screenheight?: number screencenteroffsetx?: number screencenteroffsety?: number + rowspan?: number + ep?: boolean + epw?: number + eph?: number } switch (fpJson.fn) { @@ -205,6 +210,21 @@ export const Footprinter3d = ({ footprint }: { footprint: string }) => { ) } + case "wson": + return ( + + ) + case "pinrow": { // Parse rows parameter from footprint string (e.g., "pinrow4_rows2") const rowsMatch = footprint.match(/_rows(\d+)/) diff --git a/lib/WSON.tsx b/lib/WSON.tsx new file mode 100644 index 0000000..71f4a2d --- /dev/null +++ b/lib/WSON.tsx @@ -0,0 +1,70 @@ +import { Cuboid, Cylinder, RoundedCuboid } from "jscad-fiber" + +export interface WSONProps { + pitch?: number + rowSpan?: number + padLength?: number + padWidth?: number + exposedPad?: boolean + exposedPadWidth?: number + exposedPadHeight?: number + bodyWidth?: number + bodyLength?: number + bodyHeight?: number +} + +export const WSON = ({ + pitch = 0.5, + rowSpan = 3.015, + padLength = 0.6, + padWidth = 0.28, + exposedPad = true, + exposedPadWidth = 1.7, + exposedPadHeight = 0.3, + bodyWidth = 2, + bodyLength = 3, + bodyHeight = 0.75, +}: WSONProps) => { + const contactHeight = 0.05 + const startX = (-3 * pitch) / 2 + const cornerRadius = Math.min(0.1, bodyWidth / 8, bodyLength / 8) + + return ( + <> + {Array.from({ length: 4 }, (_, index) => { + const x = startX + index * pitch + return [-1, 1].map((direction) => ( + + )) + })} + {exposedPad && ( + + )} + + + + ) +} diff --git a/lib/index.ts b/lib/index.ts index c3ad613..7e1a18e 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -70,3 +70,4 @@ export * from "./TO92" export * from "./MountedPcbModule" export * from "./Screen" export * from "./JSTZH1_5mm" +export * from "./WSON" diff --git a/tests/snapshots/__snapshots__/wson.snap.png b/tests/snapshots/__snapshots__/wson.snap.png new file mode 100644 index 0000000000000000000000000000000000000000..8ece5d485cef6cfc48d4cdff6d00afe996e163b4 GIT binary patch literal 43727 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 z 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/wson.test.ts b/tests/snapshots/wson.test.ts new file mode 100644 index 0000000..9a61e38 --- /dev/null +++ b/tests/snapshots/wson.test.ts @@ -0,0 +1,8 @@ +import { expect, test } from "bun:test" +import "../fixtures/png-matcher" +import { renderFootprint } from "../helpers/render-footprint" + +test("WSON-8 package", async () => { + const pngBuffer = await renderFootprint("wson8_ep") + await expect(pngBuffer).toMatchPngSnapshot(import.meta.path) +})