jscad-electronics 0.0.123 → 0.0.125

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/A01005.tsx","../lib/A0201.tsx","../lib/A0402.tsx","../lib/A0603.tsx","../lib/A0805.tsx","../lib/A1206.tsx","../lib/A1210.tsx","../lib/A2010.tsx","../lib/A2512.tsx","../lib/BGA.tsx","../lib/ChipBody.tsx","../lib/ExtrudedPads.tsx","../lib/FootprintPad.tsx","../lib/FootprintPlatedHole.tsx","../lib/Footprinter3d.tsx","../lib/DualInlinePackage.tsx","../lib/utils/range.ts","../lib/utils/getExpandedStroke.ts","../lib/SmdChipLead.tsx","../lib/Tssop.tsx","../lib/MSOP.tsx","../lib/qfp.tsx","../lib/PinHeader.tsx","../lib/PinRow.tsx","../lib/qfn.tsx","../lib/utils/getQuadCoords.ts","../lib/utils/getQuadPinMap.ts","../lib/SOT-235.tsx","../lib/SOT-23W.tsx","../lib/FemaleHeader.tsx","../lib/FemaleHeaderRow.tsx","../lib/PushButton.tsx","../lib/SOIC.tsx","../lib/VSSOP.tsx","../lib/SOD523.tsx","../lib/SOD882.tsx","../lib/SMA.tsx","../lib/SMB.tsx","../lib/SMC.tsx","../lib/SMF.tsx","../lib/sod-123F.tsx","../lib/sod-123FL.tsx","../lib/sod-123W.tsx","../lib/sod-128.tsx","../lib/SOD-923.tsx","../lib/SOT-223.tsx","../lib/tqfp.tsx","../lib/SOT-323.tsx","../lib/lqfp.tsx","../lib/SOT-723.tsx","../lib/dfn.tsx","../lib/hc49.tsx","../lib/MicroMELF.tsx","../lib/MINIMELF.tsx","../lib/MELF.tsx","../lib/ms012.tsx","../lib/ms013.tsx","../lib/TO220.tsx","../lib/SOT-457.tsx","../lib/SOT-963.tsx","../lib/TO92.tsx","../lib/SOT-363.tsx","../lib/SOT-886.tsx","../lib/sod-323.tsx","../lib/sod-323F.tsx","../lib/sod-323FL.tsx","../lib/AxialCapacitor.tsx","../lib/stampboard.tsx","../lib/MountedPcbModule.tsx","../lib/Screen.tsx","../lib/SOT-23-3P.tsx","../lib/SOT-563.tsx","../lib/sod-123.tsx"],"sourcesContent":["import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 0.4 // 0.4mm length\nconst width = 0.2 // 0.2mm width\nconst height = 0.13 // 0.13mm height\nconst terminatorWidth = 0.07\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A01005 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 0.6\nconst width = 0.3\nconst height = 0.33\nconst terminatorWidth = 0.1\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A0201 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 1.0\nconst width = 0.5\nconst height = 0.5\nconst terminatorWidth = 0.2\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A0402 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, height, width]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, height, width]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cube, Cuboid, Translate, Union } from \"jscad-fiber\"\n\n// TERMINATORS are the two gray metal boxes on the ends of the resistor\n// BODY is the black box middle part\n\nconst fullLength = 1.6\nconst bodyLength = fullLength - 0.3 * 2\nconst terminatorLength = 0.3\nconst width = 0.85\nconst height = 0.6\n\nexport const A0603 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorLength, width, height]}\n offset={[fullLength / 2 - terminatorLength / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorLength, width, height]}\n offset={[-fullLength / 2 + terminatorLength / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 2.0\nconst width = 1.25\nconst height = 0.55\nconst terminatorWidth = 0.5\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A0805 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 3.2\nconst width = 1.6\nconst height = 0.9\nconst terminatorWidth = 0.5\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A1206 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 3.2\nconst width = 2.5\nconst height = 1\nconst terminatorWidth = 0.6\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A1210 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 5.0\nconst width = 2.5\nconst height = 1.4\nconst terminatorWidth = 0.6\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A2010 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 6.3\nconst width = 3.2\nconst height = 1.8\nconst terminatorWidth = 0.8\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A2512 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid, Sphere, Translate, Colorize, Rotate } from \"jscad-fiber\"\nimport { fp } from \"@tscircuit/footprinter\"\n\ninterface BGAProps {\n packageWidth?: number\n packageLength?: number\n packageHeight?: number\n standoffHeight?: number\n ballPitch?: number\n ballDiameter?: number\n ballRows?: number\n ballColumns?: number\n missingBalls?: number[]\n footprintString?: string\n}\n\nexport const BGA = ({\n packageWidth = 10,\n packageLength = 10,\n packageHeight = 1.2,\n standoffHeight = 0.2,\n ballPitch = 0.8,\n ballDiameter = 0.5,\n ballRows = 8,\n ballColumns = 8,\n missingBalls = [],\n footprintString,\n}: BGAProps) => {\n const bodyHeight = packageHeight - standoffHeight\n const bodyOffset = standoffHeight + bodyHeight / 2\n const ballOffset = -standoffHeight / 2\n\n const ballsSoup = footprintString\n ? fp.string(footprintString).circuitJson()\n : null\n\n return (\n <>\n {/* Package body */}\n <Translate z={bodyOffset}>\n <Colorize color=\"#555\">\n <Cuboid size={[packageWidth, packageLength, bodyHeight]} />\n </Colorize>\n </Translate>\n\n {/* Balls via ball parameters */}\n {!footprintString &&\n Array.from({ length: ballRows * ballColumns }).map((_, index) => {\n if (missingBalls.includes(index + 1)) return null\n const row = Math.floor(index / ballColumns)\n const col = index % ballColumns\n const x = (col - (ballColumns - 1) / 2) * ballPitch\n const y = (row - (ballRows - 1) / 2) * ballPitch\n return (\n <Translate key={index} x={x} y={y} z={ballOffset}>\n <Sphere radius={ballDiameter / 2} />\n </Translate>\n )\n })}\n\n {/* Balls via footprint string */}\n {ballsSoup &&\n ballsSoup.map((elm, index) => {\n if (elm.type === \"pcb_smtpad\") {\n return (\n <Translate\n key={index}\n x={(elm as any).x}\n y={(elm as any).y}\n z={ballOffset}\n >\n <Sphere radius={ballDiameter / 2} />\n </Translate>\n )\n }\n return null\n })}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n Hull,\n Rotate,\n Subtract,\n Translate,\n Union,\n} from \"jscad-fiber\"\nexport interface ChipBodyProps {\n width: number\n length: number\n height: number\n heightAboveSurface?: number\n center: { x: number; y: number; z: number }\n color?: string\n taperRatio?: number\n faceRatio?: number\n straightHeightRatio?: number\n includeNotch?: boolean\n notchRadius?: number\n notchPosition?: { x: number; y: number; z: number }\n notchRotation?: [number, number, number]\n notchLength?: number\n notchWidth?: number\n chamferSize?: number\n}\n\nexport const ChipBody = ({\n center,\n width,\n length,\n height,\n heightAboveSurface = 0.15,\n color = \"#555\",\n taperRatio = 0.12,\n faceRatio = 0.75,\n straightHeightRatio = 0.5,\n includeNotch = true,\n notchRadius,\n notchPosition,\n notchRotation = [0, 0, 0],\n notchLength = 0.5,\n notchWidth = 0.25,\n chamferSize = 0,\n}: ChipBodyProps) => {\n const straightHeight = height * straightHeightRatio\n const taperHeight = height - straightHeight\n const taperInset = Math.min(width, length) * taperRatio\n const faceWidth = Math.max(width - taperInset, width * faceRatio)\n const faceLength = Math.max(length - taperInset, length * faceRatio)\n const defaultNotchRadius = Math.min(width, length) * 0.12\n const actualNotchRadius = notchRadius ?? defaultNotchRadius\n const defaultNotchPosition = {\n x: 0,\n y: length / 2 - actualNotchRadius * 0.25,\n z: height,\n }\n const actualNotchPosition = notchPosition ?? defaultNotchPosition\n const body = (\n <Union>\n <Hull>\n <Translate z={0.005}>\n <Cuboid size={[faceWidth, faceLength, 0.01]} />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[width, length, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[width, length, 0.01]} />\n </Translate>\n <Translate z={straightHeight + taperHeight}>\n <Cuboid size={[faceWidth, faceLength, 0.01]} />\n </Translate>\n </Hull>\n </Union>\n )\n\n // TODO the bodies flex a bit outward IRL\n\n const chamferCutout = (xPos: number, yPos: number) => (\n <Translate offset={{ x: xPos, y: yPos, z: 0 }}>\n <Rotate rotation={[0, 0, Math.PI / 4]}>\n <Cuboid\n size={[\n chamferSize * Math.SQRT2,\n chamferSize * Math.SQRT2,\n height * 3,\n ]}\n />\n </Rotate>\n </Translate>\n )\n\n let finalBody = body\n\n if (chamferSize > 0) {\n const xOffset = width / 2\n const yOffset = length / 2\n finalBody = (\n <Subtract>\n {body}\n {chamferCutout(xOffset, yOffset)}\n {chamferCutout(-xOffset, yOffset)}\n {chamferCutout(xOffset, -yOffset)}\n {chamferCutout(-xOffset, -yOffset)}\n </Subtract>\n )\n }\n\n return (\n <Colorize color={color}>\n <Translate offset={center}>\n <Translate offset={{ x: 0, y: 0, z: heightAboveSurface }}>\n {includeNotch ? (\n <Subtract>\n {finalBody}\n <Translate offset={actualNotchPosition}>\n <Rotate rotation={notchRotation}>\n <Cylinder radius={actualNotchRadius} height={notchWidth} />\n </Rotate>\n </Translate>\n </Subtract>\n ) : (\n finalBody\n )}\n </Translate>\n </Translate>\n </Colorize>\n )\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { fp } from \"@tscircuit/footprinter\"\nimport { FootprintPad } from \"./FootprintPad\"\nimport { FootprintPlatedHole } from \"./FootprintPlatedHole\"\n\nexport const ExtrudedPads = ({\n circuitJson,\n footprint,\n}: { circuitJson?: AnyCircuitElement[]; footprint?: string }) => {\n if (!circuitJson && footprint) {\n circuitJson = fp.string(footprint).circuitJson() as AnyCircuitElement[]\n }\n\n if (!circuitJson)\n throw new Error(\"No circuit json or footprint provided to ExtrudedPads\")\n\n return (\n <>\n {circuitJson\n .filter((s) => s.type === \"pcb_smtpad\")\n .map((pad, i) => {\n const isPin1 = pad.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPad key={i} pad={pad} isPin1={isPin1} />\n )\n })}\n {circuitJson\n .filter((s) => s.type === \"pcb_plated_hole\")\n .map((hole, i) => {\n const isPin1 = hole.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPlatedHole key={i} hole={hole} isPin1={isPin1} />\n )\n })}\n </>\n )\n}\n","import type { PcbSmtPad } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate } from \"jscad-fiber\"\n\nexport const FootprintPad = ({\n pad,\n isPin1,\n}: { pad: PcbSmtPad; isPin1?: boolean }) => {\n if (pad.shape === \"rect\") {\n const color: [number, number, number] = isPin1 ? [0, 255, 0] : [255, 0, 0]\n return (\n <Colorize color={color}>\n <Translate offset={[pad.x, pad.y, -0.005]}>\n <Cuboid size={[pad.width, pad.height, 0.01]} />\n </Translate>\n </Colorize>\n )\n } else {\n throw new Error(\"Shape not supported: \" + pad.shape)\n }\n}\n","import type { PcbPlatedHole } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate, Cylinder, Subtract } from \"jscad-fiber\"\n\nexport const FootprintPlatedHole = ({\n hole,\n isPin1,\n}: { hole: PcbPlatedHole; isPin1?: boolean }) => {\n const color = isPin1 ? \"#00ff00\" : \"#b87333\"\n\n if (hole.shape === \"circle\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, -0.005]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cylinder radius={hole.outer_diameter / 2} height={0.01} />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n if (hole.shape === \"circular_hole_with_rect_pad\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, 0]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cuboid\n size={[hole.rect_pad_width, hole.rect_pad_width, 0.01]}\n center={[0, 0, 0]}\n />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n throw new Error(\"Shape not supported: \" + hole.shape)\n}\n","import { fp } from \"@tscircuit/footprinter\"\nimport { Dip } from \"./DualInlinePackage\"\nimport { Tssop } from \"./Tssop\"\nimport { MSOP } from \"./MSOP\"\nimport { A0402 } from \"./A0402\"\nimport { A0603 } from \"./A0603\"\nimport { A0805 } from \"./A0805\"\nimport { QFP } from \"./qfp\"\nimport { PinRow } from \"./PinRow\"\nimport QFN from \"./qfn\"\nimport SOT235 from \"./SOT-235\"\nimport { SOT23W } from \"./SOT-23W\"\nimport { A0201 } from \"./A0201\"\nimport { A01005 } from \"./A01005\"\nimport { A1206 } from \"./A1206\"\nimport { A1210 } from \"./A1210\"\nimport { A2010 } from \"./A2010\"\nimport { A2512 } from \"./A2512\"\nimport { FemaleHeaderRow } from \"./FemaleHeaderRow\"\nimport { PushButton } from \"./PushButton\"\nimport { SOIC } from \"./SOIC\"\nimport { VSSOP } from \"./VSSOP\"\nimport { SOD523 } from \"./SOD523\"\nimport { SOD882 } from \"./SOD882\"\nimport { SMA } from \"./SMA\"\nimport { SMB } from \"./SMB\"\nimport { SMC } from \"./SMC\"\nimport { SMF } from \"./SMF\"\nimport { SOD123F } from \"./sod-123F\"\nimport { SOD123FL } from \"./sod-123FL\"\nimport { SOD123W } from \"./sod-123W\"\nimport { SOD128 } from \"./sod-128\"\nimport { SOD923 } from \"./SOD-923\"\nimport { SOT223 } from \"./SOT-223\"\nimport TQFP from \"./tqfp\"\nimport { SOT323 } from \"./SOT-323\"\nimport { LQFP } from \"./lqfp\"\nimport { SOT723 } from \"./SOT-723\"\nimport { DFN } from \"./dfn\"\nimport { HC49 } from \"./hc49\"\nimport { MicroMELF } from \"./MicroMELF\"\nimport { MINIMELF } from \"./MINIMELF\"\nimport { MELF } from \"./MELF\"\nimport { MS012 } from \"./ms012\"\nimport { MS013 } from \"./ms013\"\nimport { TO220 } from \"./TO220\"\nimport { SOT457 } from \"./SOT-457\"\nimport { SOT963 } from \"./SOT-963\"\nimport { TO92 } from \"./TO92\"\nimport SOT363 from \"./SOT-363\"\nimport { SOT886 } from \"./SOT-886\"\nimport { SOD323 } from \"./sod-323\"\nimport { SOD323F } from \"./sod-323F\"\nimport { SOD323FL } from \"./sod-323FL\"\nimport { AxialCapacitor } from \"./AxialCapacitor\"\nimport { StampBoard } from \"./stampboard\"\nimport { MountedPcbModule } from \"./MountedPcbModule\"\n\n/**\n * Outputs a 3d model for any [footprinter string](https://github.com/tscircuit/footprinter)\n */\n\nexport const Footprinter3d = ({ footprint }: { footprint: string }) => {\n const fpJson = fp.string(footprint).json() as unknown as {\n w: number\n p: number\n h: number\n pl: number\n pw: number\n num_pins: number\n fn: string\n thermalpad?: { x: number; y: number }\n imperial: String\n male: boolean\n female: boolean\n id: number //innerDiameter\n od: number //outerDiameter\n invert?: boolean\n faceup?: boolean\n smd?: boolean\n surface_mount?: boolean\n rightangle?: boolean\n left?: number\n right?: number\n top?: number\n bottom?: number\n innerhole?: boolean\n innerholeedgedistance?: number\n nopin?: boolean\n screen?: boolean\n screenwidth?: number\n screenheight?: number\n screencenteroffsetx?: number\n screencenteroffsety?: number\n }\n\n switch (fpJson.fn) {\n case \"dip\":\n return (\n <Dip numPins={fpJson.num_pins} pitch={fpJson.p} bodyWidth={fpJson.w} />\n )\n case \"axial\":\n return <AxialCapacitor pitch={fpJson.p} />\n case \"tssop\":\n return (\n <Tssop\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"msop\":\n return (\n <MSOP\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"vssop\":\n return (\n <VSSOP\n pinCount={fpJson.num_pins as 8 | 10}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n />\n )\n case \"qfp\":\n return (\n <QFP\n pinCount={fpJson.num_pins}\n pitch={fpJson.p}\n leadWidth={fpJson.pw}\n padContactLength={fpJson.pl}\n bodyWidth={fpJson.w}\n />\n )\n case \"tqfp\":\n return <TQFP />\n case \"lqfp\":\n return <LQFP pinCount={fpJson.num_pins} />\n case \"qfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <QFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"dfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <DFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"pinrow\": {\n // Parse rows parameter from footprint string (e.g., \"pinrow4_rows2\")\n const rowsMatch = footprint.match(/_rows(\\d+)/)\n const rows = rowsMatch && rowsMatch[1] ? parseInt(rowsMatch[1], 10) : 1\n\n if (fpJson.male)\n return (\n <PinRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n invert={fpJson.invert}\n faceup={fpJson.faceup}\n rows={rows}\n smd={fpJson.smd || fpJson.surface_mount}\n rightangle={fpJson.rightangle}\n />\n )\n if (fpJson.female)\n return (\n <FemaleHeaderRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n rows={rows}\n />\n )\n }\n\n case \"cap\": {\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color=\"#856c4d\" />\n case \"0603\":\n return <A0603 color=\"#856c4d\" />\n case \"0805\":\n return <A0805 color=\"#856c4d\" />\n case \"0201\":\n return <A0201 color=\"#856c4d\" />\n case \"01005\":\n return <A01005 color=\"#856c4d\" />\n case \"1206\":\n return <A1206 color=\"#856c4d\" />\n case \"1210\":\n return <A1210 color=\"#856c4d\" />\n case \"2010\":\n return <A2010 color=\"#856c4d\" />\n case \"2512\":\n return <A2512 color=\"#856c4d\" />\n }\n }\n case \"sot235\":\n return <SOT235 />\n case \"sot457\":\n return <SOT457 />\n case \"sot223\":\n return <SOT223 />\n case \"sot23w\":\n return <SOT23W />\n case \"sot323\":\n return <SOT323 />\n case \"sod323f\":\n return <SOD323F />\n case \"sod323fl\":\n return <SOD323FL />\n case \"sot363\":\n return <SOT363 />\n case \"sot886\":\n return <SOT886 />\n case \"sot963\":\n return <SOT963 />\n case \"pushbutton\":\n return (\n <PushButton\n width={fpJson.w}\n length={fpJson.h}\n innerDiameter={fpJson.id}\n />\n )\n case \"soic\":\n return (\n <SOIC\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"sod523\":\n return <SOD523 />\n case \"sod882\":\n return <SOD882 />\n case \"sma\":\n return <SMA />\n case \"smb\":\n return <SMB />\n case \"smc\":\n return <SMC />\n case \"smf\":\n return <SMF />\n case \"sod123f\":\n return <SOD123F />\n case \"sod123fl\":\n return <SOD123FL />\n case \"sod123w\":\n return <SOD123W />\n case \"sod128\":\n return <SOD128 />\n case \"sod323\":\n return <SOD323 />\n case \"sod923\":\n return <SOD923 />\n case \"hc49\":\n return <HC49 />\n case \"micromelf\":\n return <MicroMELF />\n case \"minimelf\":\n return <MINIMELF />\n case \"melf\":\n return <MELF />\n case \"ms012\":\n return (\n <MS012\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"ms013\":\n return (\n <MS013\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"sot723\":\n return <SOT723 />\n case \"to220\":\n return <TO220 />\n case \"to92\":\n return <TO92 />\n case \"stampboard\":\n case \"stampreceiver\":\n return (\n <StampBoard\n bodyWidth={fpJson.w}\n leadsLeft={fpJson.left}\n leadsRight={fpJson.right}\n leadsTop={fpJson.top}\n leadsBottom={fpJson.bottom}\n leadsPitch={fpJson.p}\n leadWidth={fpJson.pw}\n leadLength={fpJson.pl}\n innerHoles={fpJson.innerhole}\n innerHoleEdgeDistance={fpJson.innerholeedgedistance}\n />\n )\n case \"mountedpcbmodule\": {\n const rows = (fpJson as any).rows ?? 1\n const pinRowSide = (fpJson as any).pinRowSide ?? \"left\"\n const holeInset = (fpJson as any).holeInset\n const width = (fpJson as any).width\n const height = (fpJson as any).height\n const pinRow = (fpJson as any).pinrow\n const pinRowHoleEdgeToEdgeDist = (fpJson as any).pinRowHoleEdgeToEdgeDist\n const holes = Array.isArray((fpJson as any).holes)\n ? (fpJson as any).holes\n : []\n\n return (\n <MountedPcbModule\n numPins={pinRow}\n rows={rows}\n p={fpJson.p}\n id={fpJson.id}\n od={fpJson.od}\n width={width}\n height={height}\n pinRowSide={pinRowSide}\n holes={holes}\n holeInset={holeInset}\n pinRowHoleEdgeToEdgeDist={pinRowHoleEdgeToEdgeDist}\n nopin={fpJson.nopin}\n female={fpJson.female}\n screen={fpJson.screen}\n screenWidth={fpJson.screenwidth}\n screenHeight={fpJson.screenheight}\n screenCenterOffsetX={fpJson.screencenteroffsetx}\n screenCenterOffsetY={fpJson.screencenteroffsety}\n />\n )\n }\n }\n\n const colorMatch = footprint.match(/_color\\(([^)]+)\\)/)\n const color = colorMatch ? colorMatch[1] : undefined\n\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color={color} />\n case \"0603\":\n return <A0603 color={color} />\n case \"0805\":\n return <A0805 color={color} />\n case \"0201\":\n return <A0201 color={color} />\n case \"01005\":\n return <A01005 color={color} />\n case \"1206\":\n return <A1206 color={color} />\n case \"1210\":\n return <A1210 color={color} />\n case \"2010\":\n return <A2010 color={color} />\n case \"2512\":\n return <A2512 color={color} />\n }\n return null\n}\n","import { Polygon, ExtrudeLinear, Rotate, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nimport { range } from \"./utils/range\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\n// DIP components look like this:\n// https://github.com/nophead/NopSCADlib/raw/master/tests/png/dip.png\n\n// M 20 105 L 20 109 L 20 102 L 26 102 L 26 109 L 24 111 L 24 118 L 22 118 L 22 111 L 20 109\n\nconst normalizeOnY = (points: { x: number; y: number }[]) => {\n const minX = Math.min(...points.map((p) => p.x))\n const maxX = Math.max(...points.map((p) => p.x))\n const minY = Math.min(...points.map((p) => p.y))\n const maxY = Math.max(...points.map((p) => p.y))\n const height = maxY - minY\n const factor = 5.47 / height\n return points.map((p) => ({\n x: (p.x - minX - (maxX - minX) / 2) * factor,\n y: (p.y - minY) * factor,\n }))\n}\n\nconst svgPathPoints = normalizeOnY([\n { x: 20, y: 105 },\n { x: 20, y: 109 },\n { x: 20, y: 102 },\n { x: 26, y: 102 },\n { x: 26, y: 109 },\n { x: 24, y: 111 },\n { x: 24, y: 118 },\n { x: 22, y: 118 },\n { x: 22, y: 111 },\n { x: 20, y: 109 },\n])\n\nconst DIP_PIN_HEIGHT = 5.47\nconst heightAboveSurface = 0.5\n\nexport const DipPinLeg = ({ x, y, z }: { x: number; y: number; z: number }) => {\n const isRotated = x > 0\n return (\n <>\n <Translate offset={{ x: x + 0.25 / 2, y, z: z }}>\n <Rotate rotation={[\"-90deg\", 0, \"90deg\"]}>\n <ExtrudeLinear height={0.25}>\n <Polygon\n points={svgPathPoints\n .slice()\n .reverse()\n .map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n <Translate\n offset={{\n x: x,\n y: y + (isRotated ? 1 : -1),\n z: z,\n }}\n >\n <Rotate rotation={[\"-90deg\", \"90deg\", isRotated ? \"180deg\" : \"0deg\"]}>\n <ExtrudeLinear height={2}>\n <Polygon\n points={getExpandedStroke(\n [\n [0, 0],\n [-1, 0],\n [-1, -1],\n ],\n 0.25,\n ).map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </>\n )\n}\n\nexport const Dip = ({\n numPins = 8,\n pitch = 2.54,\n bodyWidth = 6.4,\n rowSpacing,\n}: {\n numPins?: number\n pitch?: number\n bodyWidth?: number\n rowSpacing?: number\n}) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n\n const pinRowSpacing =\n rowSpacing ?? (bodyWidth >= 7 ? bodyWidth : bodyWidth + 1.22)\n\n const chipBodyWidth = bodyWidth >= 7 ? pinRowSpacing - 1.22 : bodyWidth\n\n return (\n <>\n {range(numPins).map((i) => {\n const yRow = i % numPinsOnEachSide\n const xRow = (Math.floor(i / numPinsOnEachSide) - 0.5) * 2\n\n return (\n <DipPinLeg\n key={i}\n x={(xRow * pinRowSpacing) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={chipBodyWidth}\n length={numPinsOnEachSide * pitch + 0.5}\n height={DIP_PIN_HEIGHT - heightAboveSurface}\n heightAboveSurface={heightAboveSurface}\n center={{ x: 0, y: 0, z: heightAboveSurface }}\n />\n </>\n )\n}\n\nexport const DualInlinePackage = Dip\n","export const range = (end: number) => Array.from({ length: end }, (_, i) => i)\n","interface Point {\n x: number\n y: number\n}\n\n/**\n * Expands a stroke (line) into a polygon of a given width.\n *\n * @param {Point[]} stroke - An array of points representing the stroke to be expanded.\n * Each point is an object with 'x' and 'y' properties.\n * @param {number} width - The width of the expanded stroke.\n * @returns {Point[]} An array of points representing the polygon that surrounds the expanded stroke.\n * The points alternate between the \"left\" and \"right\" sides of the stroke.\n * @throws {Error} Throws an error if the stroke has fewer than two points.\n *\n * @example\n * const stroke = [{ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 0 }];\n * const width = 0.5;\n * const expandedStroke = getExpandedStroke(stroke, width);\n */\nexport function getExpandedStroke(\n strokeInput: (Point | [number, number] | number[])[],\n width: number,\n): Point[] {\n if (strokeInput.length < 2) {\n throw new Error(\"Stroke must have at least two points\")\n }\n const stroke: Point[] = Array.isArray(strokeInput[0])\n ? (strokeInput as any).map(([x, y]: [number, number]) => ({ x, y }))\n : strokeInput\n\n const halfWidth = width / 2\n const leftSide: Point[] = []\n const rightSide: Point[] = []\n\n function getNormal(p1: Point, p2: Point): Point {\n const dx = p2.x - p1.x\n const dy = p2.y - p1.y\n const length = Math.sqrt(dx * dx + dy * dy)\n return { x: -dy / length, y: dx / length }\n }\n\n function addPoint(point: Point, normal: Point, factor: number) {\n const newPoint = {\n x: point.x + normal.x * halfWidth * factor,\n y: point.y + normal.y * halfWidth * factor,\n }\n if (factor > 0) {\n leftSide.push(newPoint)\n } else {\n rightSide.unshift(newPoint)\n }\n }\n\n // Handle the first point\n const firstNormal = getNormal(stroke[0]!, stroke[1]!)\n addPoint(stroke[0]!, firstNormal, 1)\n addPoint(stroke[0]!, firstNormal, -1)\n\n // Handle middle points\n for (let i = 1; i < stroke.length - 1; i++) {\n const prev = stroke[i - 1]!\n const current = stroke[i]!\n const next = stroke[i + 1]!\n\n const normalPrev = getNormal(prev, current)\n const normalNext = getNormal(current, next)\n\n // Calculate miter line\n const miterX = normalPrev.x + normalNext.x\n const miterY = normalPrev.y + normalNext.y\n const miterLength = Math.sqrt(miterX * miterX + miterY * miterY)\n\n // Check if miter is too long (sharp corner)\n const miterLimit = 2 // Adjust this value to control when to bevel\n if (miterLength / 2 > miterLimit * halfWidth) {\n // Use bevel join\n addPoint(current, normalPrev, 1)\n addPoint(current, normalNext, 1)\n addPoint(current, normalPrev, -1)\n addPoint(current, normalNext, -1)\n } else {\n // Use miter join\n const scale = 1 / miterLength\n addPoint(current, { x: miterX * scale, y: miterY * scale }, 1)\n addPoint(current, { x: miterX * scale, y: miterY * scale }, -1)\n }\n }\n\n // Handle the last point\n const lastNormal = getNormal(\n stroke[stroke.length - 2]!,\n stroke[stroke.length - 1]!,\n )\n addPoint(stroke[stroke.length - 1]!, lastNormal, 1)\n addPoint(stroke[stroke.length - 1]!, lastNormal, -1)\n\n // Combine left and right sides to form a closed polygon\n return [...leftSide, ...rightSide]\n}\n","import {\n Polygon,\n ExtrudeLinear,\n Translate,\n Rotate,\n Colorize,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport interface SmdChipLeadProps {\n thickness: number\n width: number\n height: number\n padContactLength: number\n bodyDistance: number\n curveLength?: number\n rotation?: number\n positionAnchor?: \"outer-edge\"\n position?: { x: number; y: number; z?: number }\n}\n\nfunction calculateSCurve(\n x: number,\n {\n height,\n padContactLength,\n curveLength,\n bodyDistance,\n steepness = 10,\n }: SmdChipLeadProps & { steepness?: number },\n) {\n if (!curveLength) curveLength = bodyDistance * 0.3\n let flatFromBodySectionLength = bodyDistance - padContactLength - curveLength\n if (flatFromBodySectionLength < 0) {\n curveLength += flatFromBodySectionLength\n flatFromBodySectionLength = 0\n }\n const curveStart = padContactLength * 0.75\n const curveEnd =\n padContactLength +\n curveLength +\n (bodyDistance - padContactLength - curveLength) * 0.25\n\n if (x <= curveStart) return 0\n if (x >= curveEnd) return height\n\n const t = (x - curveStart) / (curveEnd - curveStart)\n\n // Generalized logistic function (Richards curve)\n return height / (1 + Math.exp(-steepness * (t - 0.5)))\n}\n\n/**\n * Curved lead for an SMD chip\n */\nexport const SmdChipLead = (props: SmdChipLeadProps) => {\n const { thickness, width, padContactLength, bodyDistance, height, rotation } =\n props\n\n const N = 15\n\n const points = Array.from({ length: N })\n .map((_, i) => (i / (N - 1)) * bodyDistance)\n .map((x) => [x, calculateSCurve(x, props)] as [number, number])\n // const points = [\n // [0, 0],\n // [padContactLength / 2, 0],\n // ...Array.from({ length: N })\n // .map((_, i) => padContactLength + ((i + 1) / (N + 1)) * curveLength)\n // .map((x) => [x, calculateSCurve(x, props)] as [number, number]),\n // [\n // bodyDistance - (bodyDistance - (padContactLength + curveLength)) / 2,\n // height,\n // ],\n // [bodyDistance, height],\n // ]\n\n const polygon = getExpandedStroke(points, thickness)\n return (\n <Colorize color=\"#fff\">\n <Translate offset={{ z: 0, y: 0, x: 0, ...props.position }}>\n <Rotate rotation={[\"90deg\", 0, rotation ?? 0]}>\n <Translate offset={{ x: 0, y: 0, z: -width / 2 }}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.x, p.y])} />\n </ExtrudeLinear>\n </Translate>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// TODO use mm to convert width to mm (and accept strings)\nexport const Tssop = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const fullLength = (pitch * pinCount) / 2 + leadWidth / 2\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadLength,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength}\n bodyDistance={leadLength + 1}\n height={0.8}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + leadLength,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength}\n bodyDistance={leadLength + 1}\n height={0.8}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth - leadWidth - 1}\n length={fullLength}\n height={1.5}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// MSOP (mini small outline package) — modeled after Tssop implementation\nexport const MSOP = ({\n pinCount,\n padContactLength = 0.4,\n leadWidth = 0.2,\n pitch = 0.65,\n bodyWidth = 3.0,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.6}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.6}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyWidth}\n height={1.1}\n notchRadius={0.35}\n heightAboveSurface={0.1}\n taperRatio={0.09}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const QFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n\n // get default values if not specified\n if (!pitch) pitch = getPitch(pinCount, bodyWidth)\n if (!padContactLength) padContactLength = getPadContactLength(pinCount)\n if (!leadWidth) leadWidth = getLeadWidth(pinCount, bodyWidth)\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.15\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.5\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n taperRatio={0.03}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyWidth / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n// Helper functions to determine default values based on pinCount and width of QFP as footprinter repo\nconst getPitch = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.8\n case 52:\n return width === 14 ? 1 : 0.65\n case 208:\n return 0.5\n default:\n return 0.5\n }\n}\n\nconst getPadContactLength = (pinCount: number): number => {\n switch (pinCount) {\n case 32:\n return 0.6\n case 40:\n return 0.6\n case 52:\n case 64:\n return 0.65\n case 208:\n return 1.65\n default:\n return 0.6\n }\n}\n\nconst getLeadWidth = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.5\n case 52:\n return width === 14 ? 0.45 : 0.55\n case 208:\n return 0.3\n default:\n return 0.25\n }\n}\nexport default QFP\n","import { Colorize, Cuboid, Hull, Rotate, Translate } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const PinHeader = ({\n x,\n y,\n pinThickness,\n shortSidePinLength,\n longSidePinLength,\n bodyHeight,\n bodyLength = 2.54,\n bodyWidth = 2.54,\n flipZ,\n faceup,\n smd,\n rightangle,\n}: {\n x: number\n y: number\n pinThickness: number\n shortSidePinLength: number\n longSidePinLength: number\n bodyHeight: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n faceup?: boolean\n smd?: boolean\n rightangle?: boolean\n}) => {\n return (\n <>\n <Translate y={rightangle ? -3 : 0}>\n <Cuboid\n color=\"#222\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(bodyHeight / 2)]}\n />\n </Translate>\n {!faceup && (\n <Colorize color=\"gold\">\n {smd ? (\n <SmdChipLead\n rotation={-Math.PI / 2}\n position={{\n x: x,\n y: y + 1,\n z: pinThickness / 2,\n }}\n thickness={pinThickness}\n width={pinThickness}\n height={pinThickness}\n padContactLength={2}\n bodyDistance={3}\n />\n ) : (\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[x, y, flipZ(bodyHeight * 0.9 + bodyHeight / 2)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[x, y, flipZ(bodyHeight + bodyHeight / 2)]}\n />\n </Hull>\n )}\n </Colorize>\n )}\n\n <Colorize color=\"gold\">\n <Translate y={rightangle ? -3.9 : 0} z={rightangle ? 1 : 0}>\n <Rotate rotation={rightangle ? [-Math.PI / 2, 0, 0] : [0, 0, 0]}>\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[x, y, flipZ((-longSidePinLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n longSidePinLength,\n ]}\n center={[x, y, flipZ(-longSidePinLength / 2)]}\n />\n </Hull>\n </Rotate>\n </Translate>\n </Colorize>\n </>\n )\n}\n","import { PinHeader } from \"./PinHeader\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n invert,\n faceup,\n rows = 1,\n smd,\n rightangle,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n invert?: boolean\n faceup?: boolean\n rows?: number\n smd?: boolean\n rightangle?: boolean\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const shortSidePinLength = 3\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n const zOffset = !smd && !rightangle ? -bodyHeight - 1.6 : 0\n // Flip Z coordinates if invert is true\n const flipZ = (z: number) =>\n (invert || faceup ? -z + bodyHeight : z) + zOffset\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <PinHeader\n key={i}\n x={x}\n y={y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={bodyHeight}\n flipZ={flipZ}\n faceup={faceup}\n smd={smd}\n rightangle={rightangle}\n />\n )\n })}\n </>\n )\n}\n","import { Cuboid, Colorize } from \"jscad-fiber\"\nimport { getQuadCoords } from \"./utils/getQuadCoords\"\nimport { getQuadPinMap } from \"./utils/getQuadPinMap\"\nexport const QFN = ({\n num_pins = 16,\n bodyWidth = 9,\n bodyLength = 9,\n bodyThickness = 0.8,\n thermalPadSize,\n padWidth = 0.25,\n padLength = 0.25,\n pitch = 0.5,\n thermalPadThickness = 0.05,\n}: {\n num_pins: number\n bodyWidth?: number\n bodyLength?: number\n bodyThickness?: number\n thermalPadSize?: {\n width: number\n length: number\n }\n padWidth?: number\n padLength?: number\n pitch?: number\n thermalPadThickness?: number\n}) => {\n const pin_map = getQuadPinMap({\n num_pins,\n cw: true,\n ccw: true,\n })\n const pinPositions = []\n const spc = num_pins / 4\n for (let i = 0; i < num_pins; i++) {\n const {\n x,\n y,\n o: orientation,\n } = getQuadCoords({\n pin_count: num_pins,\n pn: i + 1,\n w: bodyWidth,\n h: bodyLength,\n p: pitch,\n pl: padLength,\n legsoutside: false,\n })\n\n let pw = padWidth\n let pl = padLength\n if (orientation === \"vert\") {\n ;[pw, pl] = [pl, pw]\n }\n\n const pn = pin_map[i + 1]!\n pinPositions.push({ pn, x, y, pw, pl })\n }\n\n return (\n <>\n <Colorize color=\"grey\">\n <Cuboid\n center={{ x: 0, y: 0, z: bodyThickness / 2 }}\n size={[bodyWidth, bodyLength, bodyThickness]}\n />\n </Colorize>\n {pinPositions.map((p, i) => (\n <Cuboid\n key={i}\n center={{ x: p.x, y: p.y, z: thermalPadThickness / 2 }}\n size={[p.pw, p.pl, thermalPadThickness]}\n />\n ))}\n {thermalPadSize?.length !== undefined &&\n thermalPadSize?.width !== undefined && (\n <Cuboid\n center={{ x: 0, y: 0, z: thermalPadThickness / 2 }}\n size={[\n thermalPadSize.width,\n thermalPadSize.length,\n thermalPadThickness,\n ]}\n />\n )}\n </>\n )\n}\n\nexport default QFN\n","export const getQuadCoords = (params: {\n pin_count: number\n pn: number // pin number\n w: number // width of the package\n h: number // height (length) of the package\n p: number // pitch between pins\n pl: number // length of the pin\n legsoutside?: boolean\n}) => {\n const SIDES_CCW = [\"left\", \"bottom\", \"right\", \"top\"] as const\n const { pin_count, pn, w, h, p, pl, legsoutside } = params\n const sidePinCount = pin_count / 4\n const side = SIDES_CCW[Math.floor((pn - 1) / sidePinCount)]\n const pos = (pn - 1) % sidePinCount\n /** inner box width */\n const ibw = p * (sidePinCount - 1)\n /** inner box height */\n const ibh = p * (sidePinCount - 1)\n\n /** pad center distance from edge (negative is inside, positive is outside) */\n const pcdfe = legsoutside ? pl / 2 : -pl / 2\n\n switch (side) {\n case \"left\":\n return { x: -w / 2 - pcdfe, y: ibh / 2 - pos * p, o: \"vert\" }\n case \"bottom\":\n return { x: -ibw / 2 + pos * p, y: -h / 2 - pcdfe, o: \"horz\" }\n case \"right\":\n return { x: w / 2 + pcdfe, y: -ibh / 2 + pos * p, o: \"vert\" }\n case \"top\":\n return { x: ibw / 2 - pos * p, y: h / 2 + pcdfe, o: \"horz\" }\n default:\n throw new Error(\"Invalid pin number\")\n }\n}\n","export type PinOrderSpecifier =\n | \"leftside\"\n | \"topside\"\n | \"rightside\"\n | \"bottomside\"\n | \"toppin\"\n | \"bottompin\"\n | \"leftpin\"\n | \"rightpin\"\nexport const getQuadPinMap = ({\n num_pins,\n cw,\n ccw,\n startingpin,\n}: {\n num_pins: number\n cw?: boolean\n ccw?: boolean\n startingpin?: PinOrderSpecifier[]\n}): number[] => {\n const pin_map: number[] = []\n const pins_per_side = num_pins / 4\n let current_position_ccw_normal = 1\n\n /** Starting Flag Pins */\n const sfp: Record<PinOrderSpecifier, boolean> = {} as any\n for (const specifier of startingpin ?? []) {\n sfp[specifier] = true\n }\n if (!sfp.leftside && !sfp.topside && !sfp.rightside && !sfp.bottomside) {\n sfp.leftside = true\n }\n if (!sfp.bottompin && !sfp.leftpin && !sfp.rightpin && !sfp.toppin) {\n if (sfp.leftside) {\n sfp.toppin = true\n } else if (sfp.topside) {\n sfp.rightpin = true\n } else if (sfp.rightside) {\n sfp.bottompin = true\n } else if (sfp.bottomside) {\n sfp.leftpin = true\n }\n }\n\n if (sfp.leftside && sfp.toppin) {\n current_position_ccw_normal = 1\n } else if (sfp.leftside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side\n } else if (sfp.bottomside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side + 1\n } else if (sfp.bottomside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 2\n } else if (sfp.rightside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side * 2 + 1\n } else if (sfp.rightside && sfp.toppin) {\n current_position_ccw_normal = pins_per_side * 3\n } else if (sfp.topside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 3 + 1\n } else if (sfp.topside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side * 4\n }\n\n pin_map.push(-1) // the first index is meaningless\n\n // Each iteration we move the current position to the next pin, if we're\n // going CCW this means incrementing, if we're going CW this means\n // decrementing\n for (let i = 0; i < num_pins; i++) {\n pin_map[current_position_ccw_normal] = i + 1\n if (ccw || !cw) {\n current_position_ccw_normal++\n if (current_position_ccw_normal > num_pins) {\n current_position_ccw_normal = 1\n }\n } else {\n current_position_ccw_normal--\n if (current_position_ccw_normal < 1) {\n current_position_ccw_normal = num_pins\n }\n }\n }\n\n return pin_map\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT235 = () => {\n const fullWidth = 2.8\n const bodyWidth = 1.6\n const bodyLength = 2.9\n const bodyHeight = 1.2\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.5\n const padPitch = 0.95\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n />\n </>\n )\n}\n\nexport default SOT235\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT23W = ({ fullWidth = 2.9, fullLength = 2.8 }) => {\n const bodyWidth = 1.92\n const bodyLength = 2.9\n const bodyHeight = 1.1\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.45\n const padContactLength = 0.25\n const padThickness = leadThickness / 2\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2,\n y: -0.95,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2,\n y: 0.95,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.45}\n heightAboveSurface={0.05}\n />\n </>\n )\n}\n\nexport default SOT23W\n","import { Colorize, Cuboid, Cylinder, Hull, Subtract } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n x,\n y,\n z = 0,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n bodyHeight = 5,\n bodyLength = pitch,\n bodyWidth = pitch,\n flipZ,\n}: {\n x: number\n y: number\n z?: number\n pitch?: number\n legsLength?: number\n innerDiameter?: number\n bodyHeight?: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const gapWidth = pinThickness * 1.6\n\n return (\n <>\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n {innerDiameter ? (\n <Cylinder\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n )}\n </Subtract>\n </Colorize>\n <Colorize color=\"silver\">\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[x, y, flipZ(z + (-legsLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[x, y, flipZ(z + -legsLength / 2)]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[x, y, flipZ(z + (gapWidth / 2) * 0.5)]}\n />\n </Colorize>\n </>\n )\n}\n","import { FemaleHeader } from \"./FemaleHeader\"\n\nexport const FemaleHeaderRow = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n rows = 1,\n invert,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n rows?: number\n invert?: boolean\n}) => {\n const bodyHeight = 5\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n // Flip Z for inversion\n const flipZ = (z: number) => (invert ? -z + bodyHeight : z)\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <FemaleHeader\n key={i}\n x={x}\n y={y}\n pitch={pitch}\n legsLength={legsLength}\n innerDiameter={innerDiameter}\n flipZ={flipZ}\n />\n )\n })}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n ExtrudeLinear,\n Polygon,\n Rotate,\n RoundedCuboid,\n Translate,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport const PushButton = ({\n width,\n length,\n innerDiameter = 1,\n}: { width: number; length: number; innerDiameter?: number }) => {\n const bodyWidth = width\n const bodyLength = length\n const bodyHeight = width * 0.7\n const legWidth = innerDiameter / 2.5\n return (\n <>\n <RoundedCuboid\n color=\"#1a1a1f\"\n center={[0, 0, bodyHeight / 2]}\n size={[bodyLength, bodyLength, bodyHeight]}\n roundRadius={0.3}\n />\n <RoundedCuboid\n color=\"#f2f2f2\"\n center={[0, 0, bodyHeight + (bodyHeight * 0.1) / 2.5]}\n size={[bodyLength, bodyLength, bodyHeight * 0.1]}\n roundRadius={0.14}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.8}\n radius={bodyWidth / 3}\n center={[0, 0, bodyHeight + (bodyHeight * 0.8) / 2]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{ x: bodyWidth / 2, y: bodyLength / 2, z: -bodyHeight * 1.2 }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: bodyWidth / 2 + innerDiameter / 3.6,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n </>\n )\n}\nexport interface PushButtonLegProps {\n thickness: number\n width: number\n horizontalLength: number\n verticalLength: number\n rotation?: number\n position?: { x: number; y: number; z?: number }\n}\n\nexport const PushButtonLeg = (props: PushButtonLegProps) => {\n const {\n thickness,\n width,\n horizontalLength,\n verticalLength,\n rotation = 0,\n position,\n } = props\n const points: [number, number][] = [\n [0, horizontalLength],\n [-verticalLength / 3, horizontalLength / 3],\n [-verticalLength / 5, horizontalLength / 4],\n [0, 0],\n ]\n const polygon = getExpandedStroke(points, thickness)\n\n return (\n <Colorize color=\"#f2f2f2\">\n <Translate\n offset={{\n x: position?.x || 0,\n y: position?.y || 0,\n z: position?.z || 0,\n }}\n >\n <Rotate rotation={[0, 55, rotation]}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.y, p.x])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// SOIC typical body and lead dimensions\nexport const SOIC = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n const bodyHeight = 1.0\n const leadHeight = 0.8\n const leadBodyOffset = leadLength * 0\n const fullLength = pitch * (sidePinCount - 1) + leadWidth + 0.2\n const bodyWidthAdjusted = bodyWidth * 0.55\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidthAdjusted}\n length={fullLength}\n height={bodyHeight}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const VSSOP = ({\n pinCount,\n pitch,\n leadWidth,\n leadLength,\n bodyWidth,\n bodyLength,\n}: {\n pinCount: 8 | 10\n pitch?: number\n leadWidth?: number\n leadLength?: number\n bodyWidth?: number\n bodyLength?: number\n}) => {\n const defaults =\n pinCount === 8\n ? {\n pitch: 0.65,\n leadWidth: 0.3,\n leadLength: 1.6,\n }\n : {\n pitch: 0.5,\n leadWidth: 0.225,\n leadLength: 1.45,\n }\n\n const _pitch = !isNaN(parseFloat(pitch as any))\n ? parseFloat(pitch as any)\n : defaults.pitch\n const _leadWidth = !isNaN(parseFloat(leadWidth as any))\n ? parseFloat(leadWidth as any) * 0.8\n : defaults.leadWidth\n const _leadLength = !isNaN(parseFloat(leadLength as any))\n ? parseFloat(leadLength as any)\n : defaults.leadLength\n const _bodyWidth = !isNaN(parseFloat(bodyWidth as any))\n ? parseFloat(bodyWidth as any) * 0.8\n : 2.6\n const _bodyLength = !isNaN(parseFloat(bodyLength as any))\n ? parseFloat(bodyLength as any)\n : 2.0 + Number(_pitch) * 1.4\n\n const sidePinCount = pinCount / 2\n const pinOffsetToCenter = ((sidePinCount - 1) * _pitch) / 2\n const leadThickness = 0.15\n const leadHeight = 0.8\n\n const componentFullWidth = 4.5\n const leadBodyDistance = (componentFullWidth - _bodyWidth) / 2\n\n const padContactLength = leadBodyDistance * 0.5\n\n return (\n <>\n {/* Left leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n {/* Right leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={_bodyWidth}\n length={_bodyLength}\n height={1.0}\n />\n </>\n )\n}\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD523 = () => {\n const fullWidth = 2.15\n const bodyLength = 0.8\n const bodyHeight = 0.6\n\n const padWidth = 0.6\n const padLength = 0.5\n const padThickness = 0.12\n\n const bodyWidth = fullWidth - padLength\n const leftPadCenterX = -bodyWidth / 2 + padLength / 2 - 0.15 // 0.15 is the distance between the pad and the body as datasheet\n const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15 // 0.15 is the distance between the pad and the body as datasheet\n\n // top taper happens only in last quarter\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n // Body geometry\n // - straightHeight: the lower (straight) portion of the body\n // - taperOffset: how much smaller the top of the body becomes\n\n return (\n <>\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <Union>\n {/* Straight bottom section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Tapered top quarter */}\n <Hull>\n {/* bottom of taper (same size as straight section top) */}\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n {/* top of taper (smaller) */}\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD523\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD882 = () => {\n const bodyLength = 0.98\n const bodyHeight = 0.47\n const pitch = 0.65\n\n const padWidth = 0.51\n const padLength = 0.26\n const padThickness = 0.12\n\n const bodyWidth = 0.58\n const leftPadCenterX = -pitch / 2\n const rightPadCenterX = pitch / 2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Translate z={bodyHeight / 2 + 0.02}>\n <Cuboid size={[bodyLength, bodyWidth, bodyHeight]} />\n </Translate>\n </Colorize>\n\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, padLength / 2, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, -padLength / 2, bodyHeight / 4]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[pitch / 2, 0, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[-pitch / 2, 0, bodyHeight / 4]}\n />\n </>\n )\n}\n\nexport default SOD882\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMA = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMA\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMB = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMB\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMC = () => {\n const bodyWidth = 6.8\n const bodyLength = 6\n const bodyHeight = 2.3\n const padWidth = 2.95\n const padThickness = 0.2 // the cad model above of bottom\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMC\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SMF = () => {\n const fullWidth = 2.9\n const bodyLength = 1.9\n const bodyHeight = 1.08\n\n const padWidth = 1.2\n const padLength = 1\n const padThickness = 0.25\n\n const bodyWidth = fullWidth\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#222\">\n <Union>\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n return (\n <>\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {Body}\n </>\n )\n}\n\nexport default SMF\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123F = () => {\n const fullWidth = 2.7\n const bodyLength = 1.6\n const bodyHeight = 1.1\n\n const padWidth = 0.6\n const padLength = 1\n const padThickness = 0.12\n\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD123F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123FL = () => {\n const fullWidth = 2.75\n const bodyLength = 1.8\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 1\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness, bodyLength - taperOffset, 0.01]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123FL\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123W = () => {\n const fullWidth = 2.6\n const bodyLength = 1.7\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.1\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123W\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD128 = () => {\n const fullWidth = 3.8\n const bodyLength = 2.5\n\n const bodyHeight = 1\n\n const padWidth = 1.75\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.05\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD128\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD923 = () => {\n const fullWidth = 0.8\n const bodyLength = 0.6\n\n const bodyHeight = 0.37\n\n const padWidth = 0.25\n const padLength = 0.4\n const padThickness = 0.14\n\n const leftPadCenterX = -(fullWidth / 2)\n const rightPadCenterX = fullWidth / 2\n\n const taperOffset = 0.1\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD923\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT223 = () => {\n const fullWidth = 6.6\n const bodyWidth = 3.5\n const bodyLength = 6.5\n const bodyHeight = 1.7\n const leadWidth = 0.7\n const leftLeadWidth = 3\n const leadThickness = 0.25\n const leadHeight = 0.75\n const padContactLength = 0.5\n const padPitch = 2.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leftLeadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.45}\n />\n </>\n )\n}\n\nexport default SOT223\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const TQFP = () => {\n const pinCount = 64\n const pitch = 0.5\n const leadWidth = 0.2\n const padContactLength = 0.45\n const bodyWidth = 9\n const sidePinCount = pinCount / 4\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength + 0.6\n const fullWidth = fullLength\n const leadHeight = 0.65\n const leadThickness = 0.25\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.2\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.2}\n chamferSize={0.7}\n taperRatio={0.05}\n notchPosition={{ x: -3.5, y: 3.5, z: 1.2 }}\n notchRadius={1.2 / 2}\n />\n </>\n )\n}\n\nexport default TQFP\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT323 = () => {\n const fullWidth = 2.05\n const bodyWidth = 1.25\n const bodyLength = 2.0\n const bodyHeight = 0.9\n const leadWidth = 0.3\n const leadThickness = 0.18\n const leadHeight = 0.65\n const padContactLength = 0.2\n const padPitch = 0.65\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Lead on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </>\n )\n}\n\nexport default SOT323\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const LQFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n if (sidePinCount !== Math.floor(sidePinCount)) {\n throw new Error(`LQFP pinCount must be divisible by 4, got ${pinCount}`)\n }\n\n // get default values if not specified\n if (!pitch) pitch = 0.5\n if (!padContactLength) padContactLength = 0.6\n if (!leadWidth) leadWidth = 0.22\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 3.3 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.2\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.4\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n heightAboveSurface={0.1}\n taperRatio={0.04}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n\nexport default LQFP\n","import { Cuboid, Translate, Colorize, Hull, Union } from \"jscad-fiber\"\n\nexport const SOT723 = () => {\n // Body dimensions (mm)\n const bodyWidth = 0.85\n const bodyLength = 1.2\n const bodyHeight = 0.38\n\n const straightHeight = bodyHeight * 0.55\n const taperOffset = 0.1\n\n const padLength = 0.3\n const padThickness = 0.1\n const leftPadWidth = 0.2\n const rightPadWidth = 0.25\n\n const rightPadCenterX = 0.55\n const rightPadCenterY = 0\n\n const leftTopPadCenterX = -0.55\n const leftTopPadCenterY = 0.4\n\n const leftBottomPadCenterX = -0.55\n const leftBottomPadCenterY = -0.4\n\n return (\n <>\n {/* Body with straight lower section + hulled tapered top */}\n <Colorize color=\"#222\">\n <Union>\n {/* straight lower section */}\n <Cuboid\n size={[bodyWidth, bodyLength, straightHeight]}\n center={[0, 0, straightHeight / 2]}\n />\n\n {/* tapered top via Hull between two thin slices */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, rightPadWidth, padThickness]}\n center={[rightPadCenterX, rightPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftTopPadCenterX, leftTopPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftBottomPadCenterX, leftBottomPadCenterY, padThickness / 2]}\n />\n </>\n )\n}\n\nexport default SOT723\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nexport const DFN = ({\n num_pins,\n bodyWidth = 5.3,\n bodyLength = 5.3,\n bodyThickness = 1,\n thermalPadSize,\n // For a body length of 5 the typical pad width/length are 0.6 and 1.\n // Scale those values proportionally when `bodyLength` changes.\n padWidth = (bodyLength / 5.3) * 0.6,\n padLength = (bodyLength / 5.3) * 1,\n pitch = 0.5,\n thermalPadThickness = 0.2,\n}: {\n num_pins: number\n bodyWidth?: number\n bodyLength?: number\n bodyThickness?: number\n thermalPadSize?: {\n width: number\n length: number\n }\n padWidth?: number\n padLength?: number\n pitch?: number\n thermalPadThickness?: number\n}) => {\n // DFN packages have pads on two opposite sides (left & right).\n // Distribute pins evenly between the two sides.\n const pinPositions: Array<{\n pinNumber: number\n x: number\n y: number\n padSizeX: number // size across the package X axis (pad width)\n padSizeY: number // size along the package Y axis (pad length)\n }> = []\n\n const pinsPerSide = Math.floor(num_pins / 2)\n // pinSpan = distance between first and last pin on a side (along Y)\n const pinSpan = pitch * (pinsPerSide - 1)\n\n for (let i = 0; i < num_pins; i++) {\n const side = i < pinsPerSide ? \"left\" : \"right\"\n const indexOnSide = i % pinsPerSide\n const y = pinSpan / 2 - indexOnSide * pitch\n\n // Pads on DFN are typically oriented vertically (long edge along Y)\n const padSizeX = padLength // X dimension of pad (short side)\n const padSizeY = padWidth // Y dimension of pad (long side)\n\n // x position: place pad inside the body so its outer edge touches the\n // package edge. Pad center should be half the pad X size away from edge.\n const x =\n side === \"left\"\n ? -bodyWidth / 2 + padSizeX / 2\n : bodyWidth / 2 - padSizeX / 2\n\n const pinNumber = i + 1\n pinPositions.push({ pinNumber, x, y, padSizeX, padSizeY })\n }\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyThickness}\n heightAboveSurface={0}\n color=\"grey\"\n chamferSize={0.2}\n taperRatio={0}\n notchPosition={{\n x: -(bodyWidth / 2 - padLength),\n y: bodyLength / 2 - padLength,\n z: bodyThickness,\n }}\n />\n {pinPositions.map((p, i) => (\n <Cuboid\n key={i}\n center={[p.x, p.y, thermalPadThickness / 2]}\n size={[p.padSizeX, p.padSizeY, thermalPadThickness]}\n />\n ))}\n {thermalPadSize?.length !== undefined &&\n thermalPadSize?.width !== undefined && (\n <Cuboid\n center={[0, 0, thermalPadThickness / 2]}\n size={[\n thermalPadSize.width,\n thermalPadSize.length,\n thermalPadThickness,\n ]}\n />\n )}\n </>\n )\n}\n\nexport default DFN\n","import { Colorize, Cylinder, Hull, RoundedCylinder } from \"jscad-fiber\"\n\nexport interface HC49Props {\n /** overall body length (mm) */\n bodyLength?: number\n /** body width (mm) */\n bodyWidth?: number\n /** body height (mm) */\n bodyHeight?: number\n /** distance between lead centers (mm) */\n leadSpacing?: number\n /** lead diameter (mm) */\n leadDiameter?: number\n /** length of the lead below the body (mm) */\n leadLength?: number\n color?: string\n leadColor?: string\n}\n\n/**\n * HC-49 (through-hole crystal) simplified 3D model.\n * Defaults chosen to match the HC-49/U-S recommended land pattern and dimensions.\n */\nexport const HC49 = ({\n bodyLength = 10.2,\n bodyWidth = 4.65,\n bodyHeight = 13.46,\n leadSpacing = 5,\n leadDiameter = 0.8,\n leadLength = 12.7,\n color = \"#ddd\",\n leadColor = \"#b87333\",\n}: HC49Props) => {\n // positions and sizes\n const halfLength = bodyLength / 2\n\n // build a capsule-like body by hullling two cylinders (circular ends) across the X axis\n const endRadius = bodyWidth / 2\n const endCenterX = halfLength - endRadius\n // center X for the through-hole leads (distance between centers = leadSpacing)\n const leadCenterX = leadSpacing / 2\n const baseHeight = 0.85\n\n return (\n <>\n <Colorize color={color}>\n <Hull>\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[-endCenterX, 0, bodyHeight]}\n />\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[endCenterX, 0, bodyHeight]}\n />\n </Hull>\n <Hull>\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[-endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n </Hull>\n </Colorize>\n\n {/* leads (through-hole) - cylinders oriented along Z, extending below the body */}\n <Colorize color={leadColor}>\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[-leadCenterX + 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[leadCenterX - 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n </Colorize>\n </>\n )\n}\n\nexport default HC49\n","import {\n Colorize,\n Cylinder,\n RoundedCylinder,\n Rotate,\n RoundedCuboid,\n} from \"jscad-fiber\"\n\nexport interface MicroMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n cathodeIdentification?: string\n}\n\nexport const MicroMELF = ({\n bodyLength = 1.4,\n bodyDiameter = 1.1,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n cathodeIdentification = \"#111\",\n}: MicroMELFProps) => {\n const padLength = 0.2\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter, bodyDiameter, bodyLength - padLength]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, 0.05]}\n />\n <Cylinder\n height={padLength / 2}\n radius={bodyDiameter / 2 - padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2 + padLength / 2]}\n />\n </Rotate>\n </Colorize>\n {/* Cathode identification: a dark stripe near the left end of the body */}\n\n <Colorize color={cathodeIdentification}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter * 1.01, bodyDiameter * 1.01, bodyLength / 3]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 4 + 0.1]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MicroMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MINIMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MINIMELF = ({\n bodyLength = 3.5,\n bodyDiameter = 1.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MINIMELFProps) => {\n const padLength = 0.5\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MINIMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MELF = ({\n bodyLength = 3.9,\n bodyDiameter = 2.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MELFProps) => {\n const padLength = 0.55\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MELF\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS012 = ({\n pinCount,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount % 2 !== 0) {\n throw new Error(\"MS012 pinCount must be even\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 4.9\n const bodyLength = 3.9\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyLength / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyLength / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyLength}\n length={bodyWidth}\n height={1.55}\n notchPosition={{\n x: -(bodyLength / 2 - 1),\n y: bodyWidth / 2 - 1,\n z: 1.55,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.09}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS013 = ({\n pinCount = 16,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount?: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount !== 16) {\n throw new Error(\"MS013 only supports 16 pins\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 7.5\n const bodyLength = 10.3\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.1}\n notchPosition={{\n x: -(bodyWidth / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.1,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.05}\n />\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Hull,\n Rotate,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const TO220 = () => {\n const fullLength = 20\n const bodyLength = 9.9\n const bodyHeight = 4.5\n const zOffset = 1\n\n const padWidth = 9.9\n const padLength = 6.5\n const padThickness = 1.3\n const padHoleDiameter = 3.0\n\n const prongWidth = 0.81\n const prongLength = 16\n const prongHeight = 0.5\n const prongPitch = 2.7\n\n const bodyWidth = padWidth\n\n const bodyFrontX = fullLength - bodyLength / 2 // left face of body\n const bodyBackX = fullLength + bodyLength / 2 // right face of body\n const prongCenterX = bodyFrontX - prongLength / 2 // prong centered so its inner face touches bodyFront\n const padCenterX = bodyBackX + padLength / 2 // pad centered so its inner face touches bodyBack\n\n return (\n <Translate center={[0, 0, zOffset]}>\n <>\n <Rotate rotation={[0, 55, -55]}>\n {/* Pads (with centered hole for pin alignment) */}\n <Subtract>\n <Cuboid\n color=\"#ccc\"\n size={[padLength + 0.1, padWidth, padThickness]}\n center={[padCenterX, 0, padThickness - 2]}\n />\n {/* hole centered through pad */}\n <Cylinder\n color=\"black\"\n center={[padCenterX, 0, padThickness - 2]}\n radius={padHoleDiameter / 2}\n height={padThickness * 1.2}\n />\n </Subtract>\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <ChipBody\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: fullLength, y: 0, z: -2.4 }}\n includeNotch={false}\n straightHeightRatio={0.3}\n taperRatio={0.04}\n heightAboveSurface={1}\n />\n </Colorize>\n </Rotate>\n <Rotate rotation={[0, 55, 55]}>\n {Array.from({ length: 3 }).map((_, i) => {\n const x = prongCenterX\n const y = (i - 1) * prongPitch\n // prongs sit on top of pads (pad top z = padThickness)\n const z = -prongHeight - 0.6\n return (\n <Colorize key={`prong-${i}`} color=\"gold\">\n <Hull>\n {/* inner fillet pieces anchored to the body front so they stay correct when prongLength changes */}\n <Translate center={[bodyFrontX - bodyHeight / 2 + 0.1, y, z]}>\n <Cuboid size={[bodyHeight, prongWidth + 1, prongHeight]} />\n </Translate>\n <Translate\n center={[bodyFrontX - bodyHeight / 2 - 1 + 0.1, y, z]}\n >\n <Cuboid size={[bodyHeight, prongWidth, prongHeight]} />\n </Translate>\n </Hull>\n <Translate center={[x, y, z]}>\n <Cuboid size={[prongLength + 0.1, prongWidth, prongHeight]} />\n </Translate>\n </Colorize>\n )\n })}\n </Rotate>\n </>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT457 = () => {\n const fullWidth = 2.8\n const bodyWidth = 1.6\n const bodyLength = 2.9\n const bodyHeight = 1.2\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.5\n const padPitch = 0.95\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.4),\n y: bodyHeight / 2 + 0.4,\n z: bodyHeight + 0.05,\n }}\n notchRadius={0.1}\n />\n </>\n )\n}\n\nexport default SOT457\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT963 = () => {\n const bodyWidth = 0.8\n const bodyLength = 1.0\n const bodyHeight = 0.37\n const terminalWidth = 0.15\n const terminalLength = 0.19\n const terminalThickness = 0.12\n const pitch = 0.35\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0.15}\n straightHeightRatio={0}\n notchPosition={{\n x: -bodyWidth / 4,\n y: pinSpan / 2.2,\n z: bodyHeight + 0.1,\n }}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2 - 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2 + 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT963\n","import {\n Colorize,\n Cuboid,\n Hull,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\n\nexport const TO92 = () => {\n // === Dimensions (mm) ===\n const bodyRadius = 2.4\n const bodyHeight = 4.5\n const flatCut = 1.1\n\n const legWidth = 0.4\n const legThickness = 0.25\n\n const bodyZ = bodyHeight / 2\n\n const bodyColor = \"#222\"\n const leadLength = 0.43\n const leadTipSize: [number, number, number] = [leadLength, legWidth, 1.32]\n const leadSmallSize: [number, number, number] = [\n leadLength,\n legWidth,\n legThickness,\n ]\n\n const leadTipPos1: [number, number, number] = [0, 0, -0.66]\n const leadMidPosA: [number, number, number] = [0, 0, -1.32]\n const leadMidPosB: [number, number, number] = [0, 1.28, -2.72]\n const leadTipPos2: [number, number, number] = [0, 1.28, -8.9]\n\n const sideLeadZ = -7.5\n\n return (\n <Translate center={[0, 1, 10.5]}>\n <Colorize color={bodyColor}>\n <Subtract>\n <Translate center={[0, 0, bodyZ]}>\n <Cylinder radius={bodyRadius} height={bodyHeight} />\n </Translate>\n <Translate center={[0, -(bodyRadius - flatCut / 2), bodyZ]}>\n <Cuboid size={[bodyRadius * 2, flatCut, bodyHeight + 0.2]} />\n </Translate>\n </Subtract>\n </Colorize>\n\n <Translate center={leadTipPos1}>\n <Cuboid size={leadTipSize} />\n </Translate>\n <Hull>\n <Translate center={leadMidPosA}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n <Translate center={leadMidPosB}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n </Hull>\n <Translate center={leadTipPos2}>\n <Cuboid size={[leadLength, legWidth, 12.2]} />\n </Translate>\n\n <Translate center={[1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n <Translate center={[-1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT363 = () => {\n const fullWidth = 2\n const bodyWidth = 1.25\n const bodyLength = 2\n const bodyHeight = 1.1\n const leadWidth = 0.25\n const leadThickness = 0.15\n const leadHeight = 0.85\n const padContactLength = 0.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.25),\n y: bodyHeight / 2 + 0.2,\n z: bodyHeight,\n }}\n heightAboveSurface={0.1}\n />\n </>\n )\n}\n\nexport default SOT363\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT886 = () => {\n const bodyWidth = 1.0\n const bodyLength = 1.45\n const bodyHeight = 0.5\n const terminalWidth = 0.2\n const terminalLength = 0.3\n const terminalThickness = 0.05\n const pitch = 0.5\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: terminalThickness }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0}\n includeNotch={false}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT886\n","import { ChipBody } from \"./ChipBody\"\nimport { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOD323 = () => {\n const fullWidth = 2.5\n const bodyLength = 1.25\n\n const bodyWidth = 1.7\n const bodyHeight = 0.95\n\n const leadWidth = 0.3\n const leadThickness = 0.175\n\n const padContactLength = 0.3\n\n const padCenterX = bodyWidth / 2\n\n const bodyDistance = 0.45\n const leadHeight = 0.7\n return (\n <>\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[bodyWidth / 3, bodyLength - 0.075, 0.02]}\n center={[(-padCenterX * 2) / 3 + 0.035, 0, bodyHeight + 0.05]}\n />\n </>\n )\n}\n\nexport default SOD323\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323F = () => {\n const fullWidth = 1.7\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.175\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2\n const rightPadCenterX = fullWidth / 2 + padLength / 2\n\n const taperOffset = 0.2\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323FL = () => {\n const fullWidth = 1.775\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.13\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2 + 0.04\n const rightPadCenterX = fullWidth / 2 + padLength / 2 - 0.04\n\n const taperOffset = 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n width={fullWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: 0, y: 0, z: 0 }}\n heightAboveSurface={0}\n straightHeightRatio={0.7}\n taperRatio={0.06}\n includeNotch={false}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - 0.05, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323FL\n","import { Colorize, Cylinder, Rotate, Sphere, Translate } from \"jscad-fiber\"\n\ninterface AxialCapacitorProps {\n pitch: number\n}\n\nexport const AxialCapacitor = ({ pitch = 10 }: AxialCapacitorProps) => {\n const heightToCenterOfCapacitor = 0.5 + 4 / 2\n\n return (\n <>\n <Cylinder height={4} radius={0.5} center={[-pitch / 2, 0, 0.5]} />\n <Sphere\n radius={0.5}\n center={[-pitch / 2, 0, heightToCenterOfCapacitor]}\n />\n <Translate x={-2.5} y={0} z={heightToCenterOfCapacitor}>\n <Rotate rotation={[0, Math.PI / 2, 0]}>\n <Cylinder\n height={pitch}\n radius={0.5}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n <Colorize color=\"#d2b48c\">\n <Cylinder\n height={5}\n radius={1.3}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n </Colorize>\n </Rotate>\n </Translate>\n <Cylinder height={4} radius={0.5} center={[pitch / 2, 0, 0.5]} />\n <Sphere radius={0.5} center={[pitch / 2, 0, heightToCenterOfCapacitor]} />\n </>\n )\n}\n","import { Colorize, Cuboid, Cylinder, Subtract, Union } from \"jscad-fiber\"\n\nexport const StampBoard = ({\n bodyWidth = 21,\n boardThickness = 0.5,\n leadWidth = 1.6,\n leadLength = 2.4,\n leadsPitch = 2.54,\n leadsLeft,\n leadsRight,\n leadsTop,\n leadsBottom,\n innerHoles = true,\n innerHoleEdgeDistance = 1.61,\n innerHoleDiameter = 1,\n}: {\n bodyWidth?: number\n boardThickness?: number\n leadWidth?: number\n leadLength?: number\n leadsPitch?: number\n leadsLeft?: number\n leadsRight?: number\n leadsTop?: number\n leadsBottom?: number\n innerHoles?: boolean\n innerHoleEdgeDistance?: number\n innerHoleDiameter?: number\n}) => {\n const halfBoardWidth = bodyWidth / 2\n const boardCenterZ = boardThickness / 2\n const boardHeight = boardThickness * 1.05\n const holeRadius = innerHoleDiameter / 2\n const bodyLength =\n Math.max(leadsLeft || 0, leadsRight || 0, leadsTop || 0, leadsBottom || 0) *\n leadsPitch || 51\n\n const pads: { x: number; y: number; pl: number; pw: number }[] = []\n const holes: { x: number; y: number }[] = []\n\n if (leadsRight) {\n const yOffset = -((leadsRight - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsRight; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: halfBoardWidth - leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: halfBoardWidth, y: -y },\n { x: halfBoardWidth - innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsLeft) {\n const yOffset = -((leadsLeft - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsLeft; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: -halfBoardWidth + leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: -halfBoardWidth, y: -y },\n { x: -halfBoardWidth + innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsTop) {\n const xOffset = -((leadsTop - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsTop; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: bodyLength / 2 - leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: bodyLength / 2 },\n { x: -x, y: bodyLength / 2 - innerHoleEdgeDistance },\n )\n }\n }\n }\n\n if (leadsBottom) {\n const xOffset = -((leadsBottom - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsBottom; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: -bodyLength / 2 + leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: -bodyLength / 2 },\n { x: -x, y: -bodyLength / 2 + innerHoleEdgeDistance },\n )\n }\n }\n }\n\n const boardBody = (\n <Colorize color=\"#008080\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ]}\n size={[bodyWidth, bodyLength, boardThickness]}\n />\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n const holePads =\n innerHoles &&\n holes.map((hole, index) => (\n <Cylinder\n key={index}\n color=\"black\"\n center={[hole.x, hole.y, boardCenterZ]}\n radius={holeRadius}\n height={boardThickness * 1.07}\n />\n ))\n\n const rectPads = pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))\n return (\n <>\n {boardBody}\n <Colorize color=\"#FFD700\">\n {innerHoles ? (\n <Subtract>\n <Union>\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Union>\n {holePads}\n </Subtract>\n ) : (\n rectPads\n )}\n </Colorize>\n </>\n )\n}\n\nexport default StampBoard\n","import { Colorize, Cuboid, Cylinder, Subtract } from \"jscad-fiber\"\nimport { PinHeader } from \"./PinHeader\"\nimport { FemaleHeader } from \"./FemaleHeader\"\nimport { Screen } from \"./Screen\"\n\nexport const MountedPcbModule = ({\n numPins = 5,\n rows = 1,\n p = 2.54,\n id = 1.0,\n od = 1.5,\n boardThickness = 1.6,\n width,\n height,\n pinRowSide = \"left\",\n holes = [],\n holeInset = 1.0,\n pinRowHoleEdgeToEdgeDist = 2.0,\n female,\n nopin,\n screen,\n screenWidth,\n screenHeight,\n screenCenterOffsetX,\n screenCenterOffsetY,\n}: {\n numPins?: number\n rows?: number\n p?: number\n id?: number\n od?: number\n boardThickness?: number\n width?: number | string\n height?: number | string\n pinRowSide?: \"left\" | \"right\" | \"top\" | \"bottom\"\n holes?: string[]\n holeInset?: number\n pinRowHoleEdgeToEdgeDist?: number\n female?: boolean\n nopin?: boolean\n screen?: boolean\n screenWidth?: number\n screenHeight?: number\n screenCenterOffsetX?: number\n screenCenterOffsetY?: number\n}) => {\n const showScreen = screen ?? false\n const boardCenterZ = boardThickness / 2\n const numPinsPerRow = Math.ceil(numPins / rows)\n\n // Calculate width and height if not provided\n let calculatedWidth: number\n let calculatedHeight: number\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n calculatedWidth = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedHeight = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n } else {\n calculatedHeight = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedWidth = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n }\n if (numPins === 0) {\n calculatedWidth = 10\n calculatedHeight = 10\n }\n const finalWidth = Number(width ?? calculatedWidth)\n const finalHeight = Number(height ?? calculatedHeight)\n\n // Calculate pin positions\n const pins: { x: number; y: number }[] = []\n let pinStartX = 0\n let pinStartY = 0\n let pinDirectionX = 0\n let pinDirectionY = 0\n let rowDirectionX = 0\n let rowDirectionY = 0\n\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n pinStartX =\n pinRowSide === \"left\"\n ? -finalWidth / 2 + pinRowHoleEdgeToEdgeDist\n : finalWidth / 2 - pinRowHoleEdgeToEdgeDist\n pinStartY = -((numPinsPerRow - 1) / 2) * p\n pinDirectionX = 0\n pinDirectionY = p\n rowDirectionX = pinRowSide === \"left\" ? p : -p\n rowDirectionY = 0\n } else {\n pinStartX = -((numPinsPerRow - 1) / 2) * p\n pinStartY =\n pinRowSide === \"top\"\n ? finalHeight / 2 - pinRowHoleEdgeToEdgeDist\n : -finalHeight / 2 + pinRowHoleEdgeToEdgeDist\n pinDirectionX = p\n pinDirectionY = 0\n rowDirectionX = 0\n rowDirectionY = pinRowSide === \"top\" ? -p : p\n }\n\n let pinNumber = 0\n for (let row = 0; row < rows && pinNumber < numPins; row++) {\n for (let col = 0; col < numPinsPerRow && pinNumber < numPins; col++) {\n const x = pinStartX + col * pinDirectionX + row * rowDirectionX\n const y = pinStartY + col * pinDirectionY + row * rowDirectionY\n pins.push({ x, y })\n pinNumber++\n }\n }\n\n // Calculate hole positions\n const holePositions: { x: number; y: number }[] = []\n if (holes) {\n for (const pos of holes) {\n let hx = 0\n let hy = 0\n if (pos === \"topleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"topright\") {\n hx = finalWidth / 2 - holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"bottomleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"bottomright\") {\n hx = finalWidth / 2 - holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"center\") {\n hx = 0\n hy = 0\n }\n holePositions.push({ x: hx, y: hy })\n }\n }\n // Recreated pin row geometry (local copy to avoid PinRow dependency)\n const pinThickness = 0.63\n const pinBodyHeight = 2\n const longSidePinLength = 6\n const shortSidePinLength = 3\n const boardOffsetZ = nopin || female ? 0 : pinBodyHeight\n const boardTopZ = boardOffsetZ + boardThickness\n // Board body with holes subtracted\n const boardBody = (\n <Colorize color=\"#008080\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ + boardOffsetZ]}\n size={[finalWidth, finalHeight, boardThickness]}\n />\n {holePositions.map((hole, index) => (\n <Cylinder\n key={`hole-${index}`}\n center={[hole.x, hole.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n {pins.map((pin, index) => (\n <Cylinder\n key={`pin-hole-${index}`}\n center={[pin.x, pin.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n // Plated through-holes\n const platedHoles = pins.map((pin, index) => (\n <Colorize key={`pin-${index}`} color=\"#FFD700\">\n <Subtract>\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={id / 2}\n height={boardThickness}\n />\n </Subtract>\n </Colorize>\n ))\n\n const headerPins = pins.map((pin, index) => (\n <PinHeader\n key={`pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={pinBodyHeight}\n flipZ={(z: number) => z}\n />\n ))\n\n const femaleHeaderRow = pins.map((pin, index) => (\n <FemaleHeader\n key={`female-pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n flipZ={(z: number) => -z}\n />\n ))\n\n return (\n <>\n {boardBody}\n {platedHoles}\n {!female && !nopin && headerPins}\n {female && femaleHeaderRow}\n {showScreen && (\n <Screen\n width={screenWidth ?? finalWidth * 0.8}\n height={screenHeight ?? finalHeight * 0.6}\n offset={{\n x: screenCenterOffsetX ?? 0,\n y: screenCenterOffsetY ?? 0,\n z: boardTopZ,\n }}\n />\n )}\n </>\n )\n}\n\nexport default MountedPcbModule\n","import { Colorize, Cuboid, Subtract, Translate } from \"jscad-fiber\"\n\nexport interface ScreenProps {\n width?: number\n height?: number\n thickness?: number\n bezelInset?: number\n bezelDepth?: number\n screenColor?: string\n bezelColor?: string\n screenWidth?: number\n screenHeight?: number\n offset?: { x?: number; y?: number; z?: number }\n}\n\nexport const Screen = ({\n width = 30,\n height = 22,\n thickness = 1,\n bezelInset = 2,\n bezelDepth = 1,\n screenColor = \"#001414\",\n bezelColor = \"#0f1116\",\n screenWidth,\n screenHeight,\n offset,\n}: ScreenProps) => {\n const w = width\n const h = height\n const stackHeight = Math.max(thickness, 0.4)\n const clampedBezelDepth = Math.max(Math.min(bezelDepth, stackHeight), 0.2)\n const backBlockHeight = Math.max(stackHeight - clampedBezelDepth, 0)\n const inset = Math.max(bezelInset, 0)\n const innerWidth = Math.max(screenWidth ?? w - inset * 2, 2)\n const innerHeight = Math.max(screenHeight ?? h - inset * 2, 2)\n const screenThickness = Math.min(\n Math.max(clampedBezelDepth * 0.6, 0.2),\n clampedBezelDepth,\n )\n const offsetX = offset?.x ?? 0\n const offsetY = offset?.y ?? 0\n const offsetZ = offset?.z ?? 0\n\n return (\n <Translate offset={{ x: offsetX, y: offsetY, z: offsetZ }}>\n {backBlockHeight > 0 && (\n <Colorize color={bezelColor}>\n <Cuboid\n size={[w, h, backBlockHeight]}\n offset={[0, 0, backBlockHeight / 2]}\n />\n </Colorize>\n )}\n\n <Colorize color={bezelColor}>\n <Subtract>\n <Cuboid\n size={[w, h, clampedBezelDepth]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n <Cuboid\n size={[innerWidth, innerHeight, clampedBezelDepth + 0.02]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n </Subtract>\n </Colorize>\n\n <Colorize color={screenColor}>\n <Cuboid\n size={[innerWidth, innerHeight, screenThickness]}\n offset={[0, 0, backBlockHeight + screenThickness / 2]}\n />\n </Colorize>\n </Translate>\n )\n}\n\n// TODO: remove Display alias after downstreams migrate\nexport const Display = Screen\n\nexport default Screen\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT233P = ({ fullWidth = 2.9, fullLength = 2.8 }) => {\n const bodyWidth = 1.3\n const bodyLength = 2.9\n const bodyHeight = 1.1\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.4\n const padThickness = leadThickness / 2\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: -1,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 1,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n />\n </>\n )\n}\n\nexport default SOT233P\n","import { Cuboid, Translate, Rotate, Colorize } from \"jscad-fiber\"\n\nexport const SOT563 = ({ fullWidth = 1.94, fullLength = 1.6 }) => {\n const bodyWidth = 1.2\n const bodyLength = 1.6\n const bodyHeight = 0.55\n const leadWidth = 0.3\n const leadLength = 0.67\n const leadHeight = 0.13\n const leadSpacing = 0.5\n const bodyZOffset = -0.4\n\n return (\n <>\n {/* Main body - rotated 90 degrees around X-axis */}\n <Rotate rotation={[45 * Math.PI, 0, 0]}>\n <Translate center={[0, 0, bodyZOffset]}>\n <Colorize color=\"grey\">\n <Cuboid size={[bodyWidth, bodyLength, bodyHeight]} />\n </Colorize>\n </Translate>\n </Rotate>\n\n {/* Leads */}\n {[-1, 0, 1].flatMap((yOffset, index) => [\n // Left lead\n\n <Translate\n key={`left-${index}`}\n center={[\n -bodyWidth / 2 - 0.03,\n yOffset * leadSpacing,\n leadHeight / 2,\n ]}\n >\n <Cuboid size={[leadLength, leadWidth, leadHeight]} />\n </Translate>,\n // Right lead\n <Translate\n key={`right-${index}`}\n center={[bodyWidth / 2 + 0.03, yOffset * leadSpacing, leadHeight / 2]}\n >\n <Cuboid size={[leadLength, leadWidth, leadHeight]} />\n </Translate>,\n ])}\n </>\n )\n}\n\nexport default SOT563\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOD123 = ({ fullWidth = 3.8, fullLength = 1.6 }) => {\n const bodyWidth = 2.9\n const bodyLength = 1.3\n const bodyHeight = 1.1\n const leadWidth = 0.8\n const leadThickness = 0.15\n const leadHeight = 0.5\n const padContactLength = 0.4\n const padThickness = leadThickness / 2\n\n const bodyDistance = (fullWidth - bodyWidth) / 2\n\n return (\n <>\n {/* Lead on the left side */}\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 + leadWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the right side */}\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 - leadWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n />\n </>\n )\n}\n\nexport default SOD123\n"],"mappings":"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","names":["Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","bodyLength","width","height","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Translate","Fragment","jsx","jsxs","Colorize","Cuboid","Rotate","Translate","Union","jsx","jsxs","width","height","heightAboveSurface","fp","Colorize","Cuboid","Translate","jsx","Colorize","Cuboid","Translate","Cylinder","Subtract","jsx","jsxs","Fragment","jsx","jsxs","fp","fp","Rotate","Translate","width","Fragment","jsx","jsxs","height","Translate","Rotate","Polygon","ExtrudeLinear","Translate","Rotate","Colorize","jsx","height","width","Colorize","Translate","Rotate","ExtrudeLinear","Polygon","Fragment","jsx","jsxs","fullLength","Fragment","jsx","jsxs","Fragment","jsx","jsxs","bodyLength","fullLength","width","Colorize","Cuboid","Hull","Rotate","Translate","Fragment","jsx","jsxs","bodyLength","Translate","Cuboid","Colorize","Hull","Rotate","Fragment","jsx","Cuboid","Colorize","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","fullLength","bodyLength","Colorize","Cuboid","Cylinder","Hull","Subtract","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","Colorize","Cylinder","ExtrudeLinear","Polygon","Rotate","Translate","Fragment","jsx","jsxs","width","bodyLength","Cylinder","Colorize","Translate","Rotate","ExtrudeLinear","Polygon","Fragment","jsx","jsxs","fullLength","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Translate","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Hull","Translate","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Hull","Translate","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Hull","Translate","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","fullLength","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","fullLength","Cuboid","Translate","Colorize","Hull","Union","Fragment","jsx","jsxs","bodyLength","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Cylinder","Hull","Fragment","jsx","jsxs","bodyLength","Colorize","Cylinder","RoundedCylinder","Rotate","RoundedCuboid","Fragment","jsx","jsxs","bodyLength","Colorize","RoundedCylinder","Rotate","Fragment","jsx","jsxs","bodyLength","Colorize","RoundedCylinder","Rotate","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Rotate","Translate","Cylinder","Subtract","Fragment","jsx","jsxs","fullLength","bodyLength","Translate","Rotate","Subtract","Cuboid","Cylinder","Colorize","Hull","Fragment","jsx","jsxs","bodyLength","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Cuboid","Hull","Translate","Cylinder","Subtract","jsx","jsxs","Fragment","jsx","jsxs","bodyLength","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Translate","Hull","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Colorize","Cylinder","Rotate","Sphere","Translate","Fragment","jsx","jsxs","Colorize","Cuboid","Cylinder","Subtract","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Cylinder","Subtract","Colorize","Cuboid","Subtract","Translate","jsx","jsxs","width","height","Fragment","jsx","jsxs","width","height","Colorize","Subtract","Cuboid","Cylinder","jsx","fp","width","height","Fragment","jsx","jsxs","fullLength","bodyLength","Cuboid","Translate","Rotate","Colorize","Fragment","jsx","jsxs","fullLength","bodyLength","Fragment","jsx","jsxs","fullLength","bodyLength"]}
1
+ {"version":3,"sources":["../lib/A01005.tsx","../lib/A0201.tsx","../lib/A0402.tsx","../lib/A0603.tsx","../lib/A0805.tsx","../lib/A1206.tsx","../lib/A1210.tsx","../lib/A2010.tsx","../lib/A2512.tsx","../lib/BGA.tsx","../lib/ChipBody.tsx","../lib/ExtrudedPads.tsx","../lib/FootprintPad.tsx","../lib/FootprintPlatedHole.tsx","../lib/Footprinter3d.tsx","../lib/DualInlinePackage.tsx","../lib/utils/range.ts","../lib/utils/getExpandedStroke.ts","../lib/SmdChipLead.tsx","../lib/Tssop.tsx","../lib/MSOP.tsx","../lib/qfp.tsx","../lib/PinHeader.tsx","../lib/PinRow.tsx","../lib/qfn.tsx","../lib/utils/getQuadCoords.ts","../lib/utils/getQuadPinMap.ts","../lib/SOT-235.tsx","../lib/SOT-23W.tsx","../lib/FemaleHeader.tsx","../lib/FemaleHeaderRow.tsx","../lib/PushButton.tsx","../lib/SOIC.tsx","../lib/VSSOP.tsx","../lib/SOD523.tsx","../lib/SOD882.tsx","../lib/SMA.tsx","../lib/SMB.tsx","../lib/SMC.tsx","../lib/SMF.tsx","../lib/sod-123F.tsx","../lib/sod-123FL.tsx","../lib/sod-123W.tsx","../lib/sod-128.tsx","../lib/SOD-923.tsx","../lib/SOT-223.tsx","../lib/tqfp.tsx","../lib/SOT-323.tsx","../lib/lqfp.tsx","../lib/SOT-723.tsx","../lib/dfn.tsx","../lib/hc49.tsx","../lib/MicroMELF.tsx","../lib/MINIMELF.tsx","../lib/MELF.tsx","../lib/ms012.tsx","../lib/ms013.tsx","../lib/TO220.tsx","../lib/SOT-457.tsx","../lib/SOT-963.tsx","../lib/TO92.tsx","../lib/SOT-363.tsx","../lib/SOT-886.tsx","../lib/sod-323.tsx","../lib/sod-323F.tsx","../lib/sod-323FL.tsx","../lib/AxialCapacitor.tsx","../lib/stampboard.tsx","../lib/MountedPcbModule.tsx","../lib/Screen.tsx","../lib/SOD723.tsx","../lib/SOT-23-3P.tsx","../lib/SOT-563.tsx","../lib/sod-123.tsx"],"sourcesContent":["import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 0.4 // 0.4mm length\nconst width = 0.2 // 0.2mm width\nconst height = 0.13 // 0.13mm height\nconst terminatorWidth = 0.07\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A01005 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 0.6\nconst width = 0.3\nconst height = 0.33\nconst terminatorWidth = 0.1\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A0201 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 1.0\nconst width = 0.5\nconst height = 0.5\nconst terminatorWidth = 0.2\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A0402 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, height, width]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, height, width]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cube, Cuboid, Translate, Union } from \"jscad-fiber\"\n\n// TERMINATORS are the two gray metal boxes on the ends of the resistor\n// BODY is the black box middle part\n\nconst fullLength = 1.6\nconst bodyLength = fullLength - 0.3 * 2\nconst terminatorLength = 0.3\nconst width = 0.85\nconst height = 0.6\n\nexport const A0603 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorLength, width, height]}\n offset={[fullLength / 2 - terminatorLength / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorLength, width, height]}\n offset={[-fullLength / 2 + terminatorLength / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 2.0\nconst width = 1.25\nconst height = 0.55\nconst terminatorWidth = 0.5\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A0805 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 3.2\nconst width = 1.6\nconst height = 0.9\nconst terminatorWidth = 0.5\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A1206 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 3.2\nconst width = 2.5\nconst height = 1\nconst terminatorWidth = 0.6\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A1210 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 5.0\nconst width = 2.5\nconst height = 1.4\nconst terminatorWidth = 0.6\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A2010 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid } from \"jscad-fiber\"\n\nconst fullLength = 6.3\nconst width = 3.2\nconst height = 1.8\nconst terminatorWidth = 0.8\n\nconst bodyLength = fullLength - terminatorWidth * 2\n\nexport const A2512 = ({ color = \"#333\" }) => {\n return (\n <>\n <Cuboid\n size={[bodyLength, width, height]}\n offset={[0, 0, height / 2]}\n color={color}\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[fullLength / 2 - terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n <Cuboid\n size={[terminatorWidth, width, height]}\n offset={[-fullLength / 2 + terminatorWidth / 2, 0, height / 2]}\n color=\"#ccc\"\n />\n </>\n )\n}\n","import { Cuboid, Sphere, Translate, Colorize, Rotate } from \"jscad-fiber\"\nimport { fp } from \"@tscircuit/footprinter\"\n\ninterface BGAProps {\n packageWidth?: number\n packageLength?: number\n packageHeight?: number\n standoffHeight?: number\n ballPitch?: number\n ballDiameter?: number\n ballRows?: number\n ballColumns?: number\n missingBalls?: number[]\n footprintString?: string\n}\n\nexport const BGA = ({\n packageWidth = 10,\n packageLength = 10,\n packageHeight = 1.2,\n standoffHeight = 0.2,\n ballPitch = 0.8,\n ballDiameter = 0.5,\n ballRows = 8,\n ballColumns = 8,\n missingBalls = [],\n footprintString,\n}: BGAProps) => {\n const bodyHeight = packageHeight - standoffHeight\n const bodyOffset = standoffHeight + bodyHeight / 2\n const ballOffset = -standoffHeight / 2\n\n const ballsSoup = footprintString\n ? fp.string(footprintString).circuitJson()\n : null\n\n return (\n <>\n {/* Package body */}\n <Translate z={bodyOffset}>\n <Colorize color=\"#555\">\n <Cuboid size={[packageWidth, packageLength, bodyHeight]} />\n </Colorize>\n </Translate>\n\n {/* Balls via ball parameters */}\n {!footprintString &&\n Array.from({ length: ballRows * ballColumns }).map((_, index) => {\n if (missingBalls.includes(index + 1)) return null\n const row = Math.floor(index / ballColumns)\n const col = index % ballColumns\n const x = (col - (ballColumns - 1) / 2) * ballPitch\n const y = (row - (ballRows - 1) / 2) * ballPitch\n return (\n <Translate key={index} x={x} y={y} z={ballOffset}>\n <Sphere radius={ballDiameter / 2} />\n </Translate>\n )\n })}\n\n {/* Balls via footprint string */}\n {ballsSoup &&\n ballsSoup.map((elm, index) => {\n if (elm.type === \"pcb_smtpad\") {\n return (\n <Translate\n key={index}\n x={(elm as any).x}\n y={(elm as any).y}\n z={ballOffset}\n >\n <Sphere radius={ballDiameter / 2} />\n </Translate>\n )\n }\n return null\n })}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n Hull,\n Rotate,\n Subtract,\n Translate,\n Union,\n} from \"jscad-fiber\"\nexport interface ChipBodyProps {\n width: number\n length: number\n height: number\n heightAboveSurface?: number\n center: { x: number; y: number; z: number }\n color?: string\n taperRatio?: number\n faceRatio?: number\n straightHeightRatio?: number\n includeNotch?: boolean\n notchRadius?: number\n notchPosition?: { x: number; y: number; z: number }\n notchRotation?: [number, number, number]\n notchLength?: number\n notchWidth?: number\n chamferSize?: number\n}\n\nexport const ChipBody = ({\n center,\n width,\n length,\n height,\n heightAboveSurface = 0.15,\n color = \"#555\",\n taperRatio = 0.12,\n faceRatio = 0.75,\n straightHeightRatio = 0.5,\n includeNotch = true,\n notchRadius,\n notchPosition,\n notchRotation = [0, 0, 0],\n notchLength = 0.5,\n notchWidth = 0.25,\n chamferSize = 0,\n}: ChipBodyProps) => {\n const straightHeight = height * straightHeightRatio\n const taperHeight = height - straightHeight\n const taperInset = Math.min(width, length) * taperRatio\n const faceWidth = Math.max(width - taperInset, width * faceRatio)\n const faceLength = Math.max(length - taperInset, length * faceRatio)\n const defaultNotchRadius = Math.min(width, length) * 0.12\n const actualNotchRadius = notchRadius ?? defaultNotchRadius\n const defaultNotchPosition = {\n x: 0,\n y: length / 2 - actualNotchRadius * 0.25,\n z: height,\n }\n const actualNotchPosition = notchPosition ?? defaultNotchPosition\n const body = (\n <Union>\n <Hull>\n <Translate z={0.005}>\n <Cuboid size={[faceWidth, faceLength, 0.01]} />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[width, length, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[width, length, 0.01]} />\n </Translate>\n <Translate z={straightHeight + taperHeight}>\n <Cuboid size={[faceWidth, faceLength, 0.01]} />\n </Translate>\n </Hull>\n </Union>\n )\n\n // TODO the bodies flex a bit outward IRL\n\n const chamferCutout = (xPos: number, yPos: number) => (\n <Translate offset={{ x: xPos, y: yPos, z: 0 }}>\n <Rotate rotation={[0, 0, Math.PI / 4]}>\n <Cuboid\n size={[\n chamferSize * Math.SQRT2,\n chamferSize * Math.SQRT2,\n height * 3,\n ]}\n />\n </Rotate>\n </Translate>\n )\n\n let finalBody = body\n\n if (chamferSize > 0) {\n const xOffset = width / 2\n const yOffset = length / 2\n finalBody = (\n <Subtract>\n {body}\n {chamferCutout(xOffset, yOffset)}\n {chamferCutout(-xOffset, yOffset)}\n {chamferCutout(xOffset, -yOffset)}\n {chamferCutout(-xOffset, -yOffset)}\n </Subtract>\n )\n }\n\n return (\n <Colorize color={color}>\n <Translate offset={center}>\n <Translate offset={{ x: 0, y: 0, z: heightAboveSurface }}>\n {includeNotch ? (\n <Subtract>\n {finalBody}\n <Translate offset={actualNotchPosition}>\n <Rotate rotation={notchRotation}>\n <Cylinder radius={actualNotchRadius} height={notchWidth} />\n </Rotate>\n </Translate>\n </Subtract>\n ) : (\n finalBody\n )}\n </Translate>\n </Translate>\n </Colorize>\n )\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { fp } from \"@tscircuit/footprinter\"\nimport { FootprintPad } from \"./FootprintPad\"\nimport { FootprintPlatedHole } from \"./FootprintPlatedHole\"\n\nexport const ExtrudedPads = ({\n circuitJson,\n footprint,\n}: { circuitJson?: AnyCircuitElement[]; footprint?: string }) => {\n if (!circuitJson && footprint) {\n circuitJson = fp.string(footprint).circuitJson() as AnyCircuitElement[]\n }\n\n if (!circuitJson)\n throw new Error(\"No circuit json or footprint provided to ExtrudedPads\")\n\n return (\n <>\n {circuitJson\n .filter((s) => s.type === \"pcb_smtpad\")\n .map((pad, i) => {\n const isPin1 = pad.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPad key={i} pad={pad} isPin1={isPin1} />\n )\n })}\n {circuitJson\n .filter((s) => s.type === \"pcb_plated_hole\")\n .map((hole, i) => {\n const isPin1 = hole.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPlatedHole key={i} hole={hole} isPin1={isPin1} />\n )\n })}\n </>\n )\n}\n","import type { PcbSmtPad } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate } from \"jscad-fiber\"\n\nexport const FootprintPad = ({\n pad,\n isPin1,\n}: { pad: PcbSmtPad; isPin1?: boolean }) => {\n if (pad.shape === \"rect\") {\n const color: [number, number, number] = isPin1 ? [0, 255, 0] : [255, 0, 0]\n return (\n <Colorize color={color}>\n <Translate offset={[pad.x, pad.y, -0.005]}>\n <Cuboid size={[pad.width, pad.height, 0.01]} />\n </Translate>\n </Colorize>\n )\n } else {\n throw new Error(\"Shape not supported: \" + pad.shape)\n }\n}\n","import type { PcbPlatedHole } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate, Cylinder, Subtract } from \"jscad-fiber\"\n\nexport const FootprintPlatedHole = ({\n hole,\n isPin1,\n}: { hole: PcbPlatedHole; isPin1?: boolean }) => {\n const color = isPin1 ? \"#00ff00\" : \"#b87333\"\n\n if (hole.shape === \"circle\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, -0.005]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cylinder radius={hole.outer_diameter / 2} height={0.01} />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n if (hole.shape === \"circular_hole_with_rect_pad\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, 0]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cuboid\n size={[hole.rect_pad_width, hole.rect_pad_width, 0.01]}\n center={[0, 0, 0]}\n />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n throw new Error(\"Shape not supported: \" + hole.shape)\n}\n","import { fp } from \"@tscircuit/footprinter\"\nimport { Dip } from \"./DualInlinePackage\"\nimport { Tssop } from \"./Tssop\"\nimport { MSOP } from \"./MSOP\"\nimport { A0402 } from \"./A0402\"\nimport { A0603 } from \"./A0603\"\nimport { A0805 } from \"./A0805\"\nimport { QFP } from \"./qfp\"\nimport { PinRow } from \"./PinRow\"\nimport QFN from \"./qfn\"\nimport SOT235 from \"./SOT-235\"\nimport { SOT23W } from \"./SOT-23W\"\nimport { A0201 } from \"./A0201\"\nimport { A01005 } from \"./A01005\"\nimport { A1206 } from \"./A1206\"\nimport { A1210 } from \"./A1210\"\nimport { A2010 } from \"./A2010\"\nimport { A2512 } from \"./A2512\"\nimport { FemaleHeaderRow } from \"./FemaleHeaderRow\"\nimport { PushButton } from \"./PushButton\"\nimport { SOIC } from \"./SOIC\"\nimport { VSSOP } from \"./VSSOP\"\nimport { SOD523 } from \"./SOD523\"\nimport { SOD882 } from \"./SOD882\"\nimport { SMA } from \"./SMA\"\nimport { SMB } from \"./SMB\"\nimport { SMC } from \"./SMC\"\nimport { SMF } from \"./SMF\"\nimport { SOD123F } from \"./sod-123F\"\nimport { SOD123FL } from \"./sod-123FL\"\nimport { SOD123W } from \"./sod-123W\"\nimport { SOD128 } from \"./sod-128\"\nimport { SOD923 } from \"./SOD-923\"\nimport { SOT223 } from \"./SOT-223\"\nimport TQFP from \"./tqfp\"\nimport { SOT323 } from \"./SOT-323\"\nimport { LQFP } from \"./lqfp\"\nimport { SOT723 } from \"./SOT-723\"\nimport { DFN } from \"./dfn\"\nimport { HC49 } from \"./hc49\"\nimport { MicroMELF } from \"./MicroMELF\"\nimport { MINIMELF } from \"./MINIMELF\"\nimport { MELF } from \"./MELF\"\nimport { MS012 } from \"./ms012\"\nimport { MS013 } from \"./ms013\"\nimport { TO220 } from \"./TO220\"\nimport { SOT457 } from \"./SOT-457\"\nimport { SOT963 } from \"./SOT-963\"\nimport { TO92 } from \"./TO92\"\nimport SOT363 from \"./SOT-363\"\nimport { SOT886 } from \"./SOT-886\"\nimport { SOD323 } from \"./sod-323\"\nimport { SOD323F } from \"./sod-323F\"\nimport { SOD323FL } from \"./sod-323FL\"\nimport { AxialCapacitor } from \"./AxialCapacitor\"\nimport { StampBoard } from \"./stampboard\"\nimport { MountedPcbModule } from \"./MountedPcbModule\"\nimport SOD723 from \"./SOD723\"\n\n/**\n * Outputs a 3d model for any [footprinter string](https://github.com/tscircuit/footprinter)\n */\n\nexport const Footprinter3d = ({ footprint }: { footprint: string }) => {\n const fpJson = fp.string(footprint).json() as unknown as {\n w: number\n p: number\n h: number\n pl: number\n pw: number\n num_pins: number\n fn: string\n thermalpad?: { x: number; y: number }\n imperial: String\n male: boolean\n female: boolean\n id: number //innerDiameter\n od: number //outerDiameter\n invert?: boolean\n faceup?: boolean\n smd?: boolean\n surface_mount?: boolean\n rightangle?: boolean\n left?: number\n right?: number\n top?: number\n bottom?: number\n innerhole?: boolean\n innerholeedgedistance?: number\n nopin?: boolean\n screen?: boolean\n screenwidth?: number\n screenheight?: number\n screencenteroffsetx?: number\n screencenteroffsety?: number\n }\n\n switch (fpJson.fn) {\n case \"dip\":\n return (\n <Dip numPins={fpJson.num_pins} pitch={fpJson.p} bodyWidth={fpJson.w} />\n )\n case \"axial\":\n return <AxialCapacitor pitch={fpJson.p} />\n case \"tssop\":\n return (\n <Tssop\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"msop\":\n return (\n <MSOP\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"vssop\":\n return (\n <VSSOP\n pinCount={fpJson.num_pins as 8 | 10}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n />\n )\n case \"qfp\":\n return (\n <QFP\n pinCount={fpJson.num_pins}\n pitch={fpJson.p}\n leadWidth={fpJson.pw}\n padContactLength={fpJson.pl}\n bodyWidth={fpJson.w}\n />\n )\n case \"tqfp\":\n return <TQFP />\n case \"lqfp\":\n return <LQFP pinCount={fpJson.num_pins} />\n case \"qfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <QFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"dfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <DFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"pinrow\": {\n // Parse rows parameter from footprint string (e.g., \"pinrow4_rows2\")\n const rowsMatch = footprint.match(/_rows(\\d+)/)\n const rows = rowsMatch && rowsMatch[1] ? parseInt(rowsMatch[1], 10) : 1\n\n if (fpJson.male)\n return (\n <PinRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n invert={fpJson.invert}\n faceup={fpJson.faceup}\n rows={rows}\n smd={fpJson.smd || fpJson.surface_mount}\n rightangle={fpJson.rightangle}\n />\n )\n if (fpJson.female)\n return (\n <FemaleHeaderRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n rows={rows}\n />\n )\n }\n\n case \"cap\": {\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color=\"#856c4d\" />\n case \"0603\":\n return <A0603 color=\"#856c4d\" />\n case \"0805\":\n return <A0805 color=\"#856c4d\" />\n case \"0201\":\n return <A0201 color=\"#856c4d\" />\n case \"01005\":\n return <A01005 color=\"#856c4d\" />\n case \"1206\":\n return <A1206 color=\"#856c4d\" />\n case \"1210\":\n return <A1210 color=\"#856c4d\" />\n case \"2010\":\n return <A2010 color=\"#856c4d\" />\n case \"2512\":\n return <A2512 color=\"#856c4d\" />\n }\n }\n case \"sot235\":\n return <SOT235 />\n case \"sot457\":\n return <SOT457 />\n case \"sot223\":\n return <SOT223 />\n case \"sot23w\":\n return <SOT23W />\n case \"sot323\":\n return <SOT323 />\n case \"sod323f\":\n return <SOD323F />\n case \"sod323fl\":\n return <SOD323FL />\n case \"sot363\":\n return <SOT363 />\n case \"sot886\":\n return <SOT886 />\n case \"sot963\":\n return <SOT963 />\n case \"pushbutton\":\n return (\n <PushButton\n width={fpJson.w}\n length={fpJson.h}\n innerDiameter={fpJson.id}\n />\n )\n case \"soic\":\n return (\n <SOIC\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"sod523\":\n return <SOD523 />\n case \"sod723\":\n return <SOD723 />\n case \"sod882\":\n return <SOD882 />\n case \"sma\":\n return <SMA />\n case \"smb\":\n return <SMB />\n case \"smc\":\n return <SMC />\n case \"smf\":\n return <SMF />\n case \"sod123f\":\n return <SOD123F />\n case \"sod123fl\":\n return <SOD123FL />\n case \"sod123w\":\n return <SOD123W />\n case \"sod128\":\n return <SOD128 />\n case \"sod323\":\n return <SOD323 />\n case \"sod923\":\n return <SOD923 />\n case \"hc49\":\n return <HC49 />\n case \"micromelf\":\n return <MicroMELF />\n case \"minimelf\":\n return <MINIMELF />\n case \"melf\":\n return <MELF />\n case \"ms012\":\n return (\n <MS012\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"ms013\":\n return (\n <MS013\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"sot723\":\n return <SOT723 />\n case \"to220\":\n return <TO220 />\n case \"to92\":\n return <TO92 />\n case \"stampboard\":\n case \"stampreceiver\":\n return (\n <StampBoard\n bodyWidth={fpJson.w}\n leadsLeft={fpJson.left}\n leadsRight={fpJson.right}\n leadsTop={fpJson.top}\n leadsBottom={fpJson.bottom}\n leadsPitch={fpJson.p}\n leadWidth={fpJson.pw}\n leadLength={fpJson.pl}\n innerHoles={fpJson.innerhole}\n innerHoleEdgeDistance={fpJson.innerholeedgedistance}\n />\n )\n case \"mountedpcbmodule\": {\n const rows = (fpJson as any).rows ?? 1\n const pinRowSide = (fpJson as any).pinRowSide ?? \"left\"\n const holeInset = (fpJson as any).holeInset\n const width = (fpJson as any).width\n const height = (fpJson as any).height\n const pinRow = (fpJson as any).pinrow\n const pinRowHoleEdgeToEdgeDist = (fpJson as any).pinRowHoleEdgeToEdgeDist\n const holes = Array.isArray((fpJson as any).holes)\n ? (fpJson as any).holes\n : []\n\n return (\n <MountedPcbModule\n numPins={pinRow}\n rows={rows}\n p={fpJson.p}\n id={fpJson.id}\n od={fpJson.od}\n width={width}\n height={height}\n pinRowSide={pinRowSide}\n holes={holes}\n holeInset={holeInset}\n pinRowHoleEdgeToEdgeDist={pinRowHoleEdgeToEdgeDist}\n nopin={fpJson.nopin}\n female={fpJson.female}\n screen={fpJson.screen}\n screenWidth={fpJson.screenwidth}\n screenHeight={fpJson.screenheight}\n screenCenterOffsetX={fpJson.screencenteroffsetx}\n screenCenterOffsetY={fpJson.screencenteroffsety}\n />\n )\n }\n }\n\n const colorMatch = footprint.match(/_color\\(([^)]+)\\)/)\n const color = colorMatch ? colorMatch[1] : undefined\n\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color={color} />\n case \"0603\":\n return <A0603 color={color} />\n case \"0805\":\n return <A0805 color={color} />\n case \"0201\":\n return <A0201 color={color} />\n case \"01005\":\n return <A01005 color={color} />\n case \"1206\":\n return <A1206 color={color} />\n case \"1210\":\n return <A1210 color={color} />\n case \"2010\":\n return <A2010 color={color} />\n case \"2512\":\n return <A2512 color={color} />\n }\n return null\n}\n","import { Polygon, ExtrudeLinear, Rotate, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nimport { range } from \"./utils/range\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\n// DIP components look like this:\n// https://github.com/nophead/NopSCADlib/raw/master/tests/png/dip.png\n\n// M 20 105 L 20 109 L 20 102 L 26 102 L 26 109 L 24 111 L 24 118 L 22 118 L 22 111 L 20 109\n\nconst normalizeOnY = (points: { x: number; y: number }[]) => {\n const minX = Math.min(...points.map((p) => p.x))\n const maxX = Math.max(...points.map((p) => p.x))\n const minY = Math.min(...points.map((p) => p.y))\n const maxY = Math.max(...points.map((p) => p.y))\n const height = maxY - minY\n const factor = 5.47 / height\n return points.map((p) => ({\n x: (p.x - minX - (maxX - minX) / 2) * factor,\n y: (p.y - minY) * factor,\n }))\n}\n\nconst svgPathPoints = normalizeOnY([\n { x: 20, y: 105 },\n { x: 20, y: 109 },\n { x: 20, y: 102 },\n { x: 26, y: 102 },\n { x: 26, y: 109 },\n { x: 24, y: 111 },\n { x: 24, y: 118 },\n { x: 22, y: 118 },\n { x: 22, y: 111 },\n { x: 20, y: 109 },\n])\n\nconst DIP_PIN_HEIGHT = 5.47\nconst heightAboveSurface = 0.5\n\nexport const DipPinLeg = ({ x, y, z }: { x: number; y: number; z: number }) => {\n const isRotated = x > 0\n return (\n <>\n <Translate offset={{ x: x + 0.25 / 2, y, z: z }}>\n <Rotate rotation={[\"-90deg\", 0, \"90deg\"]}>\n <ExtrudeLinear height={0.25}>\n <Polygon\n points={svgPathPoints\n .slice()\n .reverse()\n .map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n <Translate\n offset={{\n x: x,\n y: y + (isRotated ? 1 : -1),\n z: z,\n }}\n >\n <Rotate rotation={[\"-90deg\", \"90deg\", isRotated ? \"180deg\" : \"0deg\"]}>\n <ExtrudeLinear height={2}>\n <Polygon\n points={getExpandedStroke(\n [\n [0, 0],\n [-1, 0],\n [-1, -1],\n ],\n 0.25,\n ).map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </>\n )\n}\n\nexport const Dip = ({\n numPins = 8,\n pitch = 2.54,\n bodyWidth = 6.4,\n rowSpacing,\n}: {\n numPins?: number\n pitch?: number\n bodyWidth?: number\n rowSpacing?: number\n}) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n\n const pinRowSpacing =\n rowSpacing ?? (bodyWidth >= 7 ? bodyWidth : bodyWidth + 1.22)\n\n const chipBodyWidth = bodyWidth >= 7 ? pinRowSpacing - 1.22 : bodyWidth\n\n return (\n <>\n {range(numPins).map((i) => {\n const yRow = i % numPinsOnEachSide\n const xRow = (Math.floor(i / numPinsOnEachSide) - 0.5) * 2\n\n return (\n <DipPinLeg\n key={i}\n x={(xRow * pinRowSpacing) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={chipBodyWidth}\n length={numPinsOnEachSide * pitch + 0.5}\n height={DIP_PIN_HEIGHT - heightAboveSurface}\n heightAboveSurface={heightAboveSurface}\n center={{ x: 0, y: 0, z: heightAboveSurface }}\n />\n </>\n )\n}\n\nexport const DualInlinePackage = Dip\n","export const range = (end: number) => Array.from({ length: end }, (_, i) => i)\n","interface Point {\n x: number\n y: number\n}\n\n/**\n * Expands a stroke (line) into a polygon of a given width.\n *\n * @param {Point[]} stroke - An array of points representing the stroke to be expanded.\n * Each point is an object with 'x' and 'y' properties.\n * @param {number} width - The width of the expanded stroke.\n * @returns {Point[]} An array of points representing the polygon that surrounds the expanded stroke.\n * The points alternate between the \"left\" and \"right\" sides of the stroke.\n * @throws {Error} Throws an error if the stroke has fewer than two points.\n *\n * @example\n * const stroke = [{ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 0 }];\n * const width = 0.5;\n * const expandedStroke = getExpandedStroke(stroke, width);\n */\nexport function getExpandedStroke(\n strokeInput: (Point | [number, number] | number[])[],\n width: number,\n): Point[] {\n if (strokeInput.length < 2) {\n throw new Error(\"Stroke must have at least two points\")\n }\n const stroke: Point[] = Array.isArray(strokeInput[0])\n ? (strokeInput as any).map(([x, y]: [number, number]) => ({ x, y }))\n : strokeInput\n\n const halfWidth = width / 2\n const leftSide: Point[] = []\n const rightSide: Point[] = []\n\n function getNormal(p1: Point, p2: Point): Point {\n const dx = p2.x - p1.x\n const dy = p2.y - p1.y\n const length = Math.sqrt(dx * dx + dy * dy)\n return { x: -dy / length, y: dx / length }\n }\n\n function addPoint(point: Point, normal: Point, factor: number) {\n const newPoint = {\n x: point.x + normal.x * halfWidth * factor,\n y: point.y + normal.y * halfWidth * factor,\n }\n if (factor > 0) {\n leftSide.push(newPoint)\n } else {\n rightSide.unshift(newPoint)\n }\n }\n\n // Handle the first point\n const firstNormal = getNormal(stroke[0]!, stroke[1]!)\n addPoint(stroke[0]!, firstNormal, 1)\n addPoint(stroke[0]!, firstNormal, -1)\n\n // Handle middle points\n for (let i = 1; i < stroke.length - 1; i++) {\n const prev = stroke[i - 1]!\n const current = stroke[i]!\n const next = stroke[i + 1]!\n\n const normalPrev = getNormal(prev, current)\n const normalNext = getNormal(current, next)\n\n // Calculate miter line\n const miterX = normalPrev.x + normalNext.x\n const miterY = normalPrev.y + normalNext.y\n const miterLength = Math.sqrt(miterX * miterX + miterY * miterY)\n\n // Check if miter is too long (sharp corner)\n const miterLimit = 2 // Adjust this value to control when to bevel\n if (miterLength / 2 > miterLimit * halfWidth) {\n // Use bevel join\n addPoint(current, normalPrev, 1)\n addPoint(current, normalNext, 1)\n addPoint(current, normalPrev, -1)\n addPoint(current, normalNext, -1)\n } else {\n // Use miter join\n const scale = 1 / miterLength\n addPoint(current, { x: miterX * scale, y: miterY * scale }, 1)\n addPoint(current, { x: miterX * scale, y: miterY * scale }, -1)\n }\n }\n\n // Handle the last point\n const lastNormal = getNormal(\n stroke[stroke.length - 2]!,\n stroke[stroke.length - 1]!,\n )\n addPoint(stroke[stroke.length - 1]!, lastNormal, 1)\n addPoint(stroke[stroke.length - 1]!, lastNormal, -1)\n\n // Combine left and right sides to form a closed polygon\n return [...leftSide, ...rightSide]\n}\n","import {\n Polygon,\n ExtrudeLinear,\n Translate,\n Rotate,\n Colorize,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport interface SmdChipLeadProps {\n thickness: number\n width: number\n height: number\n padContactLength: number\n bodyDistance: number\n curveLength?: number\n rotation?: number\n positionAnchor?: \"outer-edge\"\n position?: { x: number; y: number; z?: number }\n}\n\nfunction calculateSCurve(\n x: number,\n {\n height,\n padContactLength,\n curveLength,\n bodyDistance,\n steepness = 10,\n }: SmdChipLeadProps & { steepness?: number },\n) {\n if (!curveLength) curveLength = bodyDistance * 0.3\n let flatFromBodySectionLength = bodyDistance - padContactLength - curveLength\n if (flatFromBodySectionLength < 0) {\n curveLength += flatFromBodySectionLength\n flatFromBodySectionLength = 0\n }\n const curveStart = padContactLength * 0.75\n const curveEnd =\n padContactLength +\n curveLength +\n (bodyDistance - padContactLength - curveLength) * 0.25\n\n if (x <= curveStart) return 0\n if (x >= curveEnd) return height\n\n const t = (x - curveStart) / (curveEnd - curveStart)\n\n // Generalized logistic function (Richards curve)\n return height / (1 + Math.exp(-steepness * (t - 0.5)))\n}\n\n/**\n * Curved lead for an SMD chip\n */\nexport const SmdChipLead = (props: SmdChipLeadProps) => {\n const { thickness, width, padContactLength, bodyDistance, height, rotation } =\n props\n\n const N = 15\n\n const points = Array.from({ length: N })\n .map((_, i) => (i / (N - 1)) * bodyDistance)\n .map((x) => [x, calculateSCurve(x, props)] as [number, number])\n // const points = [\n // [0, 0],\n // [padContactLength / 2, 0],\n // ...Array.from({ length: N })\n // .map((_, i) => padContactLength + ((i + 1) / (N + 1)) * curveLength)\n // .map((x) => [x, calculateSCurve(x, props)] as [number, number]),\n // [\n // bodyDistance - (bodyDistance - (padContactLength + curveLength)) / 2,\n // height,\n // ],\n // [bodyDistance, height],\n // ]\n\n const polygon = getExpandedStroke(points, thickness)\n return (\n <Colorize color=\"#fff\">\n <Translate offset={{ z: 0, y: 0, x: 0, ...props.position }}>\n <Rotate rotation={[\"90deg\", 0, rotation ?? 0]}>\n <Translate offset={{ x: 0, y: 0, z: -width / 2 }}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.x, p.y])} />\n </ExtrudeLinear>\n </Translate>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// TODO use mm to convert width to mm (and accept strings)\nexport const Tssop = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const fullLength = (pitch * pinCount) / 2 + leadWidth / 2\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadLength,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength}\n bodyDistance={leadLength + 1}\n height={0.8}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + leadLength,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength}\n bodyDistance={leadLength + 1}\n height={0.8}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth - leadWidth - 1}\n length={fullLength}\n height={1.5}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// MSOP (mini small outline package) — modeled after Tssop implementation\nexport const MSOP = ({\n pinCount,\n padContactLength = 0.4,\n leadWidth = 0.2,\n pitch = 0.65,\n bodyWidth = 3.0,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.6}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.6}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyWidth}\n height={1.1}\n notchRadius={0.35}\n heightAboveSurface={0.1}\n taperRatio={0.09}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const QFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n\n // get default values if not specified\n if (!pitch) pitch = getPitch(pinCount, bodyWidth)\n if (!padContactLength) padContactLength = getPadContactLength(pinCount)\n if (!leadWidth) leadWidth = getLeadWidth(pinCount, bodyWidth)\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.15\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.5\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n taperRatio={0.03}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyWidth / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n// Helper functions to determine default values based on pinCount and width of QFP as footprinter repo\nconst getPitch = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.8\n case 52:\n return width === 14 ? 1 : 0.65\n case 208:\n return 0.5\n default:\n return 0.5\n }\n}\n\nconst getPadContactLength = (pinCount: number): number => {\n switch (pinCount) {\n case 32:\n return 0.6\n case 40:\n return 0.6\n case 52:\n case 64:\n return 0.65\n case 208:\n return 1.65\n default:\n return 0.6\n }\n}\n\nconst getLeadWidth = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.5\n case 52:\n return width === 14 ? 0.45 : 0.55\n case 208:\n return 0.3\n default:\n return 0.25\n }\n}\nexport default QFP\n","import { Colorize, Cuboid, Hull, Rotate, Translate } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const PinHeader = ({\n x,\n y,\n pinThickness,\n shortSidePinLength,\n longSidePinLength,\n bodyHeight,\n bodyLength = 2.54,\n bodyWidth = 2.54,\n flipZ,\n faceup,\n smd,\n rightangle,\n}: {\n x: number\n y: number\n pinThickness: number\n shortSidePinLength: number\n longSidePinLength: number\n bodyHeight: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n faceup?: boolean\n smd?: boolean\n rightangle?: boolean\n}) => {\n return (\n <>\n <Translate y={rightangle ? -3 : 0}>\n <Cuboid\n color=\"#222\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(bodyHeight / 2)]}\n />\n </Translate>\n {!faceup && (\n <Colorize color=\"gold\">\n {smd ? (\n <SmdChipLead\n rotation={-Math.PI / 2}\n position={{\n x: x,\n y: y + 1,\n z: pinThickness / 2,\n }}\n thickness={pinThickness}\n width={pinThickness}\n height={pinThickness}\n padContactLength={2}\n bodyDistance={3}\n />\n ) : (\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[x, y, flipZ(bodyHeight * 0.9 + bodyHeight / 2)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[x, y, flipZ(bodyHeight + bodyHeight / 2)]}\n />\n </Hull>\n )}\n </Colorize>\n )}\n\n <Colorize color=\"gold\">\n <Translate y={rightangle ? -3.9 : 0} z={rightangle ? 1 : 0}>\n <Rotate rotation={rightangle ? [-Math.PI / 2, 0, 0] : [0, 0, 0]}>\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[x, y, flipZ((-longSidePinLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n longSidePinLength,\n ]}\n center={[x, y, flipZ(-longSidePinLength / 2)]}\n />\n </Hull>\n </Rotate>\n </Translate>\n </Colorize>\n </>\n )\n}\n","import { PinHeader } from \"./PinHeader\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n invert,\n faceup,\n rows = 1,\n smd,\n rightangle,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n invert?: boolean\n faceup?: boolean\n rows?: number\n smd?: boolean\n rightangle?: boolean\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const shortSidePinLength = 3\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n const zOffset = !smd && !rightangle ? -bodyHeight - 1.6 : 0\n // Flip Z coordinates if invert is true\n const flipZ = (z: number) =>\n (invert || faceup ? -z + bodyHeight : z) + zOffset\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <PinHeader\n key={i}\n x={x}\n y={y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={bodyHeight}\n flipZ={flipZ}\n faceup={faceup}\n smd={smd}\n rightangle={rightangle}\n />\n )\n })}\n </>\n )\n}\n","import { Cuboid, Colorize } from \"jscad-fiber\"\nimport { getQuadCoords } from \"./utils/getQuadCoords\"\nimport { getQuadPinMap } from \"./utils/getQuadPinMap\"\nexport const QFN = ({\n num_pins = 16,\n bodyWidth = 9,\n bodyLength = 9,\n bodyThickness = 0.8,\n thermalPadSize,\n padWidth = 0.25,\n padLength = 0.25,\n pitch = 0.5,\n thermalPadThickness = 0.05,\n}: {\n num_pins: number\n bodyWidth?: number\n bodyLength?: number\n bodyThickness?: number\n thermalPadSize?: {\n width: number\n length: number\n }\n padWidth?: number\n padLength?: number\n pitch?: number\n thermalPadThickness?: number\n}) => {\n const pin_map = getQuadPinMap({\n num_pins,\n cw: true,\n ccw: true,\n })\n const pinPositions = []\n const spc = num_pins / 4\n for (let i = 0; i < num_pins; i++) {\n const {\n x,\n y,\n o: orientation,\n } = getQuadCoords({\n pin_count: num_pins,\n pn: i + 1,\n w: bodyWidth,\n h: bodyLength,\n p: pitch,\n pl: padLength,\n legsoutside: false,\n })\n\n let pw = padWidth\n let pl = padLength\n if (orientation === \"vert\") {\n ;[pw, pl] = [pl, pw]\n }\n\n const pn = pin_map[i + 1]!\n pinPositions.push({ pn, x, y, pw, pl })\n }\n\n return (\n <>\n <Colorize color=\"grey\">\n <Cuboid\n center={{ x: 0, y: 0, z: bodyThickness / 2 }}\n size={[bodyWidth, bodyLength, bodyThickness]}\n />\n </Colorize>\n {pinPositions.map((p, i) => (\n <Cuboid\n key={i}\n center={{ x: p.x, y: p.y, z: thermalPadThickness / 2 }}\n size={[p.pw, p.pl, thermalPadThickness]}\n />\n ))}\n {thermalPadSize?.length !== undefined &&\n thermalPadSize?.width !== undefined && (\n <Cuboid\n center={{ x: 0, y: 0, z: thermalPadThickness / 2 }}\n size={[\n thermalPadSize.width,\n thermalPadSize.length,\n thermalPadThickness,\n ]}\n />\n )}\n </>\n )\n}\n\nexport default QFN\n","export const getQuadCoords = (params: {\n pin_count: number\n pn: number // pin number\n w: number // width of the package\n h: number // height (length) of the package\n p: number // pitch between pins\n pl: number // length of the pin\n legsoutside?: boolean\n}) => {\n const SIDES_CCW = [\"left\", \"bottom\", \"right\", \"top\"] as const\n const { pin_count, pn, w, h, p, pl, legsoutside } = params\n const sidePinCount = pin_count / 4\n const side = SIDES_CCW[Math.floor((pn - 1) / sidePinCount)]\n const pos = (pn - 1) % sidePinCount\n /** inner box width */\n const ibw = p * (sidePinCount - 1)\n /** inner box height */\n const ibh = p * (sidePinCount - 1)\n\n /** pad center distance from edge (negative is inside, positive is outside) */\n const pcdfe = legsoutside ? pl / 2 : -pl / 2\n\n switch (side) {\n case \"left\":\n return { x: -w / 2 - pcdfe, y: ibh / 2 - pos * p, o: \"vert\" }\n case \"bottom\":\n return { x: -ibw / 2 + pos * p, y: -h / 2 - pcdfe, o: \"horz\" }\n case \"right\":\n return { x: w / 2 + pcdfe, y: -ibh / 2 + pos * p, o: \"vert\" }\n case \"top\":\n return { x: ibw / 2 - pos * p, y: h / 2 + pcdfe, o: \"horz\" }\n default:\n throw new Error(\"Invalid pin number\")\n }\n}\n","export type PinOrderSpecifier =\n | \"leftside\"\n | \"topside\"\n | \"rightside\"\n | \"bottomside\"\n | \"toppin\"\n | \"bottompin\"\n | \"leftpin\"\n | \"rightpin\"\nexport const getQuadPinMap = ({\n num_pins,\n cw,\n ccw,\n startingpin,\n}: {\n num_pins: number\n cw?: boolean\n ccw?: boolean\n startingpin?: PinOrderSpecifier[]\n}): number[] => {\n const pin_map: number[] = []\n const pins_per_side = num_pins / 4\n let current_position_ccw_normal = 1\n\n /** Starting Flag Pins */\n const sfp: Record<PinOrderSpecifier, boolean> = {} as any\n for (const specifier of startingpin ?? []) {\n sfp[specifier] = true\n }\n if (!sfp.leftside && !sfp.topside && !sfp.rightside && !sfp.bottomside) {\n sfp.leftside = true\n }\n if (!sfp.bottompin && !sfp.leftpin && !sfp.rightpin && !sfp.toppin) {\n if (sfp.leftside) {\n sfp.toppin = true\n } else if (sfp.topside) {\n sfp.rightpin = true\n } else if (sfp.rightside) {\n sfp.bottompin = true\n } else if (sfp.bottomside) {\n sfp.leftpin = true\n }\n }\n\n if (sfp.leftside && sfp.toppin) {\n current_position_ccw_normal = 1\n } else if (sfp.leftside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side\n } else if (sfp.bottomside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side + 1\n } else if (sfp.bottomside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 2\n } else if (sfp.rightside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side * 2 + 1\n } else if (sfp.rightside && sfp.toppin) {\n current_position_ccw_normal = pins_per_side * 3\n } else if (sfp.topside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 3 + 1\n } else if (sfp.topside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side * 4\n }\n\n pin_map.push(-1) // the first index is meaningless\n\n // Each iteration we move the current position to the next pin, if we're\n // going CCW this means incrementing, if we're going CW this means\n // decrementing\n for (let i = 0; i < num_pins; i++) {\n pin_map[current_position_ccw_normal] = i + 1\n if (ccw || !cw) {\n current_position_ccw_normal++\n if (current_position_ccw_normal > num_pins) {\n current_position_ccw_normal = 1\n }\n } else {\n current_position_ccw_normal--\n if (current_position_ccw_normal < 1) {\n current_position_ccw_normal = num_pins\n }\n }\n }\n\n return pin_map\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT235 = () => {\n const fullWidth = 2.8\n const bodyWidth = 1.6\n const bodyLength = 2.9\n const bodyHeight = 1.2\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.5\n const padPitch = 0.95\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 1,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n />\n </>\n )\n}\n\nexport default SOT235\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT23W = ({ fullWidth = 2.9, fullLength = 2.8 }) => {\n const bodyWidth = 1.92\n const bodyLength = 2.9\n const bodyHeight = 1.1\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.45\n const padContactLength = 0.25\n const padThickness = leadThickness / 2\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2,\n y: -0.95,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2,\n y: 0.95,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.45}\n heightAboveSurface={0.05}\n />\n </>\n )\n}\n\nexport default SOT23W\n","import { Colorize, Cuboid, Cylinder, Hull, Subtract } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n x,\n y,\n z = 0,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n bodyHeight = 5,\n bodyLength = pitch,\n bodyWidth = pitch,\n flipZ,\n}: {\n x: number\n y: number\n z?: number\n pitch?: number\n legsLength?: number\n innerDiameter?: number\n bodyHeight?: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const gapWidth = pinThickness * 1.6\n\n return (\n <>\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n {innerDiameter ? (\n <Cylinder\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n )}\n </Subtract>\n </Colorize>\n <Colorize color=\"silver\">\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[x, y, flipZ(z + (-legsLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[x, y, flipZ(z + -legsLength / 2)]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[x, y, flipZ(z + (gapWidth / 2) * 0.5)]}\n />\n </Colorize>\n </>\n )\n}\n","import { FemaleHeader } from \"./FemaleHeader\"\n\nexport const FemaleHeaderRow = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n rows = 1,\n invert,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n rows?: number\n invert?: boolean\n}) => {\n const bodyHeight = 5\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n // Flip Z for inversion\n const flipZ = (z: number) => (invert ? -z + bodyHeight : z)\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <FemaleHeader\n key={i}\n x={x}\n y={y}\n pitch={pitch}\n legsLength={legsLength}\n innerDiameter={innerDiameter}\n flipZ={flipZ}\n />\n )\n })}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n ExtrudeLinear,\n Polygon,\n Rotate,\n RoundedCuboid,\n Translate,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport const PushButton = ({\n width,\n length,\n innerDiameter = 1,\n}: { width: number; length: number; innerDiameter?: number }) => {\n const bodyWidth = width\n const bodyLength = length\n const bodyHeight = width * 0.7\n const legWidth = innerDiameter / 2.5\n return (\n <>\n <RoundedCuboid\n color=\"#1a1a1f\"\n center={[0, 0, bodyHeight / 2]}\n size={[bodyLength, bodyLength, bodyHeight]}\n roundRadius={0.3}\n />\n <RoundedCuboid\n color=\"#f2f2f2\"\n center={[0, 0, bodyHeight + (bodyHeight * 0.1) / 2.5]}\n size={[bodyLength, bodyLength, bodyHeight * 0.1]}\n roundRadius={0.14}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.8}\n radius={bodyWidth / 3}\n center={[0, 0, bodyHeight + (bodyHeight * 0.8) / 2]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{ x: bodyWidth / 2, y: bodyLength / 2, z: -bodyHeight * 1.2 }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: bodyWidth / 2 + innerDiameter / 3.6,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n </>\n )\n}\nexport interface PushButtonLegProps {\n thickness: number\n width: number\n horizontalLength: number\n verticalLength: number\n rotation?: number\n position?: { x: number; y: number; z?: number }\n}\n\nexport const PushButtonLeg = (props: PushButtonLegProps) => {\n const {\n thickness,\n width,\n horizontalLength,\n verticalLength,\n rotation = 0,\n position,\n } = props\n const points: [number, number][] = [\n [0, horizontalLength],\n [-verticalLength / 3, horizontalLength / 3],\n [-verticalLength / 5, horizontalLength / 4],\n [0, 0],\n ]\n const polygon = getExpandedStroke(points, thickness)\n\n return (\n <Colorize color=\"#f2f2f2\">\n <Translate\n offset={{\n x: position?.x || 0,\n y: position?.y || 0,\n z: position?.z || 0,\n }}\n >\n <Rotate rotation={[0, 55, rotation]}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.y, p.x])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// SOIC typical body and lead dimensions\nexport const SOIC = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n const bodyHeight = 1.0\n const leadHeight = 0.8\n const leadBodyOffset = leadLength * 0\n const fullLength = pitch * (sidePinCount - 1) + leadWidth + 0.2\n const bodyWidthAdjusted = bodyWidth * 0.55\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidthAdjusted}\n length={fullLength}\n height={bodyHeight}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const VSSOP = ({\n pinCount,\n pitch,\n leadWidth,\n leadLength,\n bodyWidth,\n bodyLength,\n}: {\n pinCount: 8 | 10\n pitch?: number\n leadWidth?: number\n leadLength?: number\n bodyWidth?: number\n bodyLength?: number\n}) => {\n const defaults =\n pinCount === 8\n ? {\n pitch: 0.65,\n leadWidth: 0.3,\n leadLength: 1.6,\n }\n : {\n pitch: 0.5,\n leadWidth: 0.225,\n leadLength: 1.45,\n }\n\n const _pitch = !isNaN(parseFloat(pitch as any))\n ? parseFloat(pitch as any)\n : defaults.pitch\n const _leadWidth = !isNaN(parseFloat(leadWidth as any))\n ? parseFloat(leadWidth as any) * 0.8\n : defaults.leadWidth\n const _leadLength = !isNaN(parseFloat(leadLength as any))\n ? parseFloat(leadLength as any)\n : defaults.leadLength\n const _bodyWidth = !isNaN(parseFloat(bodyWidth as any))\n ? parseFloat(bodyWidth as any) * 0.8\n : 2.6\n const _bodyLength = !isNaN(parseFloat(bodyLength as any))\n ? parseFloat(bodyLength as any)\n : 2.0 + Number(_pitch) * 1.4\n\n const sidePinCount = pinCount / 2\n const pinOffsetToCenter = ((sidePinCount - 1) * _pitch) / 2\n const leadThickness = 0.15\n const leadHeight = 0.8\n\n const componentFullWidth = 4.5\n const leadBodyDistance = (componentFullWidth - _bodyWidth) / 2\n\n const padContactLength = leadBodyDistance * 0.5\n\n return (\n <>\n {/* Left leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n {/* Right leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={_bodyWidth}\n length={_bodyLength}\n height={1.0}\n />\n </>\n )\n}\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD523 = () => {\n const fullWidth = 2.15\n const bodyLength = 0.8\n const bodyHeight = 0.6\n\n const padWidth = 0.6\n const padLength = 0.5\n const padThickness = 0.12\n\n const bodyWidth = fullWidth - padLength\n const leftPadCenterX = -bodyWidth / 2 + padLength / 2 - 0.15 // 0.15 is the distance between the pad and the body as datasheet\n const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15 // 0.15 is the distance between the pad and the body as datasheet\n\n // top taper happens only in last quarter\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n // Body geometry\n // - straightHeight: the lower (straight) portion of the body\n // - taperOffset: how much smaller the top of the body becomes\n\n return (\n <>\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <Union>\n {/* Straight bottom section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Tapered top quarter */}\n <Hull>\n {/* bottom of taper (same size as straight section top) */}\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n {/* top of taper (smaller) */}\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD523\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD882 = () => {\n const bodyLength = 0.98\n const bodyHeight = 0.47\n const pitch = 0.65\n\n const padWidth = 0.51\n const padLength = 0.26\n const padThickness = 0.12\n\n const bodyWidth = 0.58\n const leftPadCenterX = -pitch / 2\n const rightPadCenterX = pitch / 2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Translate z={bodyHeight / 2 + 0.02}>\n <Cuboid size={[bodyLength, bodyWidth, bodyHeight]} />\n </Translate>\n </Colorize>\n\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, padLength / 2, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, -padLength / 2, bodyHeight / 4]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[pitch / 2, 0, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[-pitch / 2, 0, bodyHeight / 4]}\n />\n </>\n )\n}\n\nexport default SOD882\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMA = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMA\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMB = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMB\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMC = () => {\n const bodyWidth = 6.8\n const bodyLength = 6\n const bodyHeight = 2.3\n const padWidth = 2.95\n const padThickness = 0.2 // the cad model above of bottom\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMC\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SMF = () => {\n const fullWidth = 2.9\n const bodyLength = 1.9\n const bodyHeight = 1.08\n\n const padWidth = 1.2\n const padLength = 1\n const padThickness = 0.25\n\n const bodyWidth = fullWidth\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#222\">\n <Union>\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n return (\n <>\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {Body}\n </>\n )\n}\n\nexport default SMF\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123F = () => {\n const fullWidth = 2.7\n const bodyLength = 1.6\n const bodyHeight = 1.1\n\n const padWidth = 0.6\n const padLength = 1\n const padThickness = 0.12\n\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD123F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123FL = () => {\n const fullWidth = 2.75\n const bodyLength = 1.8\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 1\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness, bodyLength - taperOffset, 0.01]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123FL\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123W = () => {\n const fullWidth = 2.6\n const bodyLength = 1.7\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.1\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123W\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD128 = () => {\n const fullWidth = 3.8\n const bodyLength = 2.5\n\n const bodyHeight = 1\n\n const padWidth = 1.75\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.05\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD128\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD923 = () => {\n const fullWidth = 0.8\n const bodyLength = 0.6\n\n const bodyHeight = 0.37\n\n const padWidth = 0.25\n const padLength = 0.4\n const padThickness = 0.14\n\n const leftPadCenterX = -(fullWidth / 2)\n const rightPadCenterX = fullWidth / 2\n\n const taperOffset = 0.1\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD923\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT223 = () => {\n const fullWidth = 6.6\n const bodyWidth = 3.5\n const bodyLength = 6.5\n const bodyHeight = 1.7\n const leadWidth = 0.7\n const leftLeadWidth = 3\n const leadThickness = 0.25\n const leadHeight = 0.75\n const padContactLength = 0.5\n const padPitch = 2.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leftLeadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.45}\n />\n </>\n )\n}\n\nexport default SOT223\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const TQFP = () => {\n const pinCount = 64\n const pitch = 0.5\n const leadWidth = 0.2\n const padContactLength = 0.45\n const bodyWidth = 9\n const sidePinCount = pinCount / 4\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength + 0.6\n const fullWidth = fullLength\n const leadHeight = 0.65\n const leadThickness = 0.25\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.2\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.2}\n chamferSize={0.7}\n taperRatio={0.05}\n notchPosition={{ x: -3.5, y: 3.5, z: 1.2 }}\n notchRadius={1.2 / 2}\n />\n </>\n )\n}\n\nexport default TQFP\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT323 = () => {\n const fullWidth = 2.05\n const bodyWidth = 1.25\n const bodyLength = 2.0\n const bodyHeight = 0.9\n const leadWidth = 0.3\n const leadThickness = 0.18\n const leadHeight = 0.65\n const padContactLength = 0.2\n const padPitch = 0.65\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Lead on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </>\n )\n}\n\nexport default SOT323\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const LQFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n if (sidePinCount !== Math.floor(sidePinCount)) {\n throw new Error(`LQFP pinCount must be divisible by 4, got ${pinCount}`)\n }\n\n // get default values if not specified\n if (!pitch) pitch = 0.5\n if (!padContactLength) padContactLength = 0.6\n if (!leadWidth) leadWidth = 0.22\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 3.3 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.2\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.4\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n heightAboveSurface={0.1}\n taperRatio={0.04}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n\nexport default LQFP\n","import { Cuboid, Translate, Colorize, Hull, Union } from \"jscad-fiber\"\n\nexport const SOT723 = () => {\n // Body dimensions (mm)\n const bodyWidth = 0.85\n const bodyLength = 1.2\n const bodyHeight = 0.38\n\n const straightHeight = bodyHeight * 0.55\n const taperOffset = 0.1\n\n const padLength = 0.3\n const padThickness = 0.1\n const leftPadWidth = 0.2\n const rightPadWidth = 0.25\n\n const rightPadCenterX = 0.55\n const rightPadCenterY = 0\n\n const leftTopPadCenterX = -0.55\n const leftTopPadCenterY = 0.4\n\n const leftBottomPadCenterX = -0.55\n const leftBottomPadCenterY = -0.4\n\n return (\n <>\n {/* Body with straight lower section + hulled tapered top */}\n <Colorize color=\"#222\">\n <Union>\n {/* straight lower section */}\n <Cuboid\n size={[bodyWidth, bodyLength, straightHeight]}\n center={[0, 0, straightHeight / 2]}\n />\n\n {/* tapered top via Hull between two thin slices */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, rightPadWidth, padThickness]}\n center={[rightPadCenterX, rightPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftTopPadCenterX, leftTopPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftBottomPadCenterX, leftBottomPadCenterY, padThickness / 2]}\n />\n </>\n )\n}\n\nexport default SOT723\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nexport const DFN = ({\n num_pins,\n bodyWidth = 5.3,\n bodyLength = 5.3,\n bodyThickness = 1,\n thermalPadSize,\n // For a body length of 5 the typical pad width/length are 0.6 and 1.\n // Scale those values proportionally when `bodyLength` changes.\n padWidth = (bodyLength / 5.3) * 0.6,\n padLength = (bodyLength / 5.3) * 1,\n pitch = 0.5,\n thermalPadThickness = 0.2,\n}: {\n num_pins: number\n bodyWidth?: number\n bodyLength?: number\n bodyThickness?: number\n thermalPadSize?: {\n width: number\n length: number\n }\n padWidth?: number\n padLength?: number\n pitch?: number\n thermalPadThickness?: number\n}) => {\n // DFN packages have pads on two opposite sides (left & right).\n // Distribute pins evenly between the two sides.\n const pinPositions: Array<{\n pinNumber: number\n x: number\n y: number\n padSizeX: number // size across the package X axis (pad width)\n padSizeY: number // size along the package Y axis (pad length)\n }> = []\n\n const pinsPerSide = Math.floor(num_pins / 2)\n // pinSpan = distance between first and last pin on a side (along Y)\n const pinSpan = pitch * (pinsPerSide - 1)\n\n for (let i = 0; i < num_pins; i++) {\n const side = i < pinsPerSide ? \"left\" : \"right\"\n const indexOnSide = i % pinsPerSide\n const y = pinSpan / 2 - indexOnSide * pitch\n\n // Pads on DFN are typically oriented vertically (long edge along Y)\n const padSizeX = padLength // X dimension of pad (short side)\n const padSizeY = padWidth // Y dimension of pad (long side)\n\n // x position: place pad inside the body so its outer edge touches the\n // package edge. Pad center should be half the pad X size away from edge.\n const x =\n side === \"left\"\n ? -bodyWidth / 2 + padSizeX / 2\n : bodyWidth / 2 - padSizeX / 2\n\n const pinNumber = i + 1\n pinPositions.push({ pinNumber, x, y, padSizeX, padSizeY })\n }\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyThickness}\n heightAboveSurface={0}\n color=\"grey\"\n chamferSize={0.2}\n taperRatio={0}\n notchPosition={{\n x: -(bodyWidth / 2 - padLength),\n y: bodyLength / 2 - padLength,\n z: bodyThickness,\n }}\n />\n {pinPositions.map((p, i) => (\n <Cuboid\n key={i}\n center={[p.x, p.y, thermalPadThickness / 2]}\n size={[p.padSizeX, p.padSizeY, thermalPadThickness]}\n />\n ))}\n {thermalPadSize?.length !== undefined &&\n thermalPadSize?.width !== undefined && (\n <Cuboid\n center={[0, 0, thermalPadThickness / 2]}\n size={[\n thermalPadSize.width,\n thermalPadSize.length,\n thermalPadThickness,\n ]}\n />\n )}\n </>\n )\n}\n\nexport default DFN\n","import { Colorize, Cylinder, Hull, RoundedCylinder } from \"jscad-fiber\"\n\nexport interface HC49Props {\n /** overall body length (mm) */\n bodyLength?: number\n /** body width (mm) */\n bodyWidth?: number\n /** body height (mm) */\n bodyHeight?: number\n /** distance between lead centers (mm) */\n leadSpacing?: number\n /** lead diameter (mm) */\n leadDiameter?: number\n /** length of the lead below the body (mm) */\n leadLength?: number\n color?: string\n leadColor?: string\n}\n\n/**\n * HC-49 (through-hole crystal) simplified 3D model.\n * Defaults chosen to match the HC-49/U-S recommended land pattern and dimensions.\n */\nexport const HC49 = ({\n bodyLength = 10.2,\n bodyWidth = 4.65,\n bodyHeight = 13.46,\n leadSpacing = 5,\n leadDiameter = 0.8,\n leadLength = 12.7,\n color = \"#ddd\",\n leadColor = \"#b87333\",\n}: HC49Props) => {\n // positions and sizes\n const halfLength = bodyLength / 2\n\n // build a capsule-like body by hullling two cylinders (circular ends) across the X axis\n const endRadius = bodyWidth / 2\n const endCenterX = halfLength - endRadius\n // center X for the through-hole leads (distance between centers = leadSpacing)\n const leadCenterX = leadSpacing / 2\n const baseHeight = 0.85\n\n return (\n <>\n <Colorize color={color}>\n <Hull>\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[-endCenterX, 0, bodyHeight]}\n />\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[endCenterX, 0, bodyHeight]}\n />\n </Hull>\n <Hull>\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[-endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n </Hull>\n </Colorize>\n\n {/* leads (through-hole) - cylinders oriented along Z, extending below the body */}\n <Colorize color={leadColor}>\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[-leadCenterX + 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[leadCenterX - 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n </Colorize>\n </>\n )\n}\n\nexport default HC49\n","import {\n Colorize,\n Cylinder,\n RoundedCylinder,\n Rotate,\n RoundedCuboid,\n} from \"jscad-fiber\"\n\nexport interface MicroMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n cathodeIdentification?: string\n}\n\nexport const MicroMELF = ({\n bodyLength = 1.4,\n bodyDiameter = 1.1,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n cathodeIdentification = \"#111\",\n}: MicroMELFProps) => {\n const padLength = 0.2\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter, bodyDiameter, bodyLength - padLength]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, 0.05]}\n />\n <Cylinder\n height={padLength / 2}\n radius={bodyDiameter / 2 - padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2 + padLength / 2]}\n />\n </Rotate>\n </Colorize>\n {/* Cathode identification: a dark stripe near the left end of the body */}\n\n <Colorize color={cathodeIdentification}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter * 1.01, bodyDiameter * 1.01, bodyLength / 3]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 4 + 0.1]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MicroMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MINIMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MINIMELF = ({\n bodyLength = 3.5,\n bodyDiameter = 1.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MINIMELFProps) => {\n const padLength = 0.5\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MINIMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MELF = ({\n bodyLength = 3.9,\n bodyDiameter = 2.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MELFProps) => {\n const padLength = 0.55\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MELF\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS012 = ({\n pinCount,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount % 2 !== 0) {\n throw new Error(\"MS012 pinCount must be even\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 4.9\n const bodyLength = 3.9\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyLength / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyLength / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyLength}\n length={bodyWidth}\n height={1.55}\n notchPosition={{\n x: -(bodyLength / 2 - 1),\n y: bodyWidth / 2 - 1,\n z: 1.55,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.09}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS013 = ({\n pinCount = 16,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount?: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount !== 16) {\n throw new Error(\"MS013 only supports 16 pins\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 7.5\n const bodyLength = 10.3\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.1}\n notchPosition={{\n x: -(bodyWidth / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.1,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.05}\n />\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Hull,\n Rotate,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const TO220 = () => {\n const fullLength = 20\n const bodyLength = 9.9\n const bodyHeight = 4.5\n const zOffset = 1\n\n const padWidth = 9.9\n const padLength = 6.5\n const padThickness = 1.3\n const padHoleDiameter = 3.0\n\n const prongWidth = 0.81\n const prongLength = 16\n const prongHeight = 0.5\n const prongPitch = 2.7\n\n const bodyWidth = padWidth\n\n const bodyFrontX = fullLength - bodyLength / 2 // left face of body\n const bodyBackX = fullLength + bodyLength / 2 // right face of body\n const prongCenterX = bodyFrontX - prongLength / 2 // prong centered so its inner face touches bodyFront\n const padCenterX = bodyBackX + padLength / 2 // pad centered so its inner face touches bodyBack\n\n return (\n <Translate center={[0, 0, zOffset]}>\n <>\n <Rotate rotation={[0, 55, -55]}>\n {/* Pads (with centered hole for pin alignment) */}\n <Subtract>\n <Cuboid\n color=\"#ccc\"\n size={[padLength + 0.1, padWidth, padThickness]}\n center={[padCenterX, 0, padThickness - 2]}\n />\n {/* hole centered through pad */}\n <Cylinder\n color=\"black\"\n center={[padCenterX, 0, padThickness - 2]}\n radius={padHoleDiameter / 2}\n height={padThickness * 1.2}\n />\n </Subtract>\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <ChipBody\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: fullLength, y: 0, z: -2.4 }}\n includeNotch={false}\n straightHeightRatio={0.3}\n taperRatio={0.04}\n heightAboveSurface={1}\n />\n </Colorize>\n </Rotate>\n <Rotate rotation={[0, 55, 55]}>\n {Array.from({ length: 3 }).map((_, i) => {\n const x = prongCenterX\n const y = (i - 1) * prongPitch\n // prongs sit on top of pads (pad top z = padThickness)\n const z = -prongHeight - 0.6\n return (\n <Colorize key={`prong-${i}`} color=\"gold\">\n <Hull>\n {/* inner fillet pieces anchored to the body front so they stay correct when prongLength changes */}\n <Translate center={[bodyFrontX - bodyHeight / 2 + 0.1, y, z]}>\n <Cuboid size={[bodyHeight, prongWidth + 1, prongHeight]} />\n </Translate>\n <Translate\n center={[bodyFrontX - bodyHeight / 2 - 1 + 0.1, y, z]}\n >\n <Cuboid size={[bodyHeight, prongWidth, prongHeight]} />\n </Translate>\n </Hull>\n <Translate center={[x, y, z]}>\n <Cuboid size={[prongLength + 0.1, prongWidth, prongHeight]} />\n </Translate>\n </Colorize>\n )\n })}\n </Rotate>\n </>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT457 = () => {\n const fullWidth = 2.8\n const bodyWidth = 1.6\n const bodyLength = 2.9\n const bodyHeight = 1.2\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.5\n const padPitch = 0.95\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.4),\n y: bodyHeight / 2 + 0.4,\n z: bodyHeight + 0.05,\n }}\n notchRadius={0.1}\n />\n </>\n )\n}\n\nexport default SOT457\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT963 = () => {\n const bodyWidth = 0.8\n const bodyLength = 1.0\n const bodyHeight = 0.37\n const terminalWidth = 0.15\n const terminalLength = 0.19\n const terminalThickness = 0.12\n const pitch = 0.35\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0.15}\n straightHeightRatio={0}\n notchPosition={{\n x: -bodyWidth / 4,\n y: pinSpan / 2.2,\n z: bodyHeight + 0.1,\n }}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2 - 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2 + 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT963\n","import {\n Colorize,\n Cuboid,\n Hull,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\n\nexport const TO92 = () => {\n // === Dimensions (mm) ===\n const bodyRadius = 2.4\n const bodyHeight = 4.5\n const flatCut = 1.1\n\n const legWidth = 0.4\n const legThickness = 0.25\n\n const bodyZ = bodyHeight / 2\n\n const bodyColor = \"#222\"\n const leadLength = 0.43\n const leadTipSize: [number, number, number] = [leadLength, legWidth, 1.32]\n const leadSmallSize: [number, number, number] = [\n leadLength,\n legWidth,\n legThickness,\n ]\n\n const leadTipPos1: [number, number, number] = [0, 0, -0.66]\n const leadMidPosA: [number, number, number] = [0, 0, -1.32]\n const leadMidPosB: [number, number, number] = [0, 1.28, -2.72]\n const leadTipPos2: [number, number, number] = [0, 1.28, -8.9]\n\n const sideLeadZ = -7.5\n\n return (\n <Translate center={[0, 1, 10.5]}>\n <Colorize color={bodyColor}>\n <Subtract>\n <Translate center={[0, 0, bodyZ]}>\n <Cylinder radius={bodyRadius} height={bodyHeight} />\n </Translate>\n <Translate center={[0, -(bodyRadius - flatCut / 2), bodyZ]}>\n <Cuboid size={[bodyRadius * 2, flatCut, bodyHeight + 0.2]} />\n </Translate>\n </Subtract>\n </Colorize>\n\n <Translate center={leadTipPos1}>\n <Cuboid size={leadTipSize} />\n </Translate>\n <Hull>\n <Translate center={leadMidPosA}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n <Translate center={leadMidPosB}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n </Hull>\n <Translate center={leadTipPos2}>\n <Cuboid size={[leadLength, legWidth, 12.2]} />\n </Translate>\n\n <Translate center={[1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n <Translate center={[-1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT363 = () => {\n const fullWidth = 2\n const bodyWidth = 1.25\n const bodyLength = 2\n const bodyHeight = 1.1\n const leadWidth = 0.25\n const leadThickness = 0.15\n const leadHeight = 0.85\n const padContactLength = 0.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.25),\n y: bodyHeight / 2 + 0.2,\n z: bodyHeight,\n }}\n heightAboveSurface={0.1}\n />\n </>\n )\n}\n\nexport default SOT363\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT886 = () => {\n const bodyWidth = 1.0\n const bodyLength = 1.45\n const bodyHeight = 0.5\n const terminalWidth = 0.2\n const terminalLength = 0.3\n const terminalThickness = 0.05\n const pitch = 0.5\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: terminalThickness }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0}\n includeNotch={false}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT886\n","import { ChipBody } from \"./ChipBody\"\nimport { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOD323 = () => {\n const fullWidth = 2.5\n const bodyLength = 1.25\n\n const bodyWidth = 1.7\n const bodyHeight = 0.95\n\n const leadWidth = 0.3\n const leadThickness = 0.175\n\n const padContactLength = 0.3\n\n const padCenterX = bodyWidth / 2\n\n const bodyDistance = 0.45\n const leadHeight = 0.7\n return (\n <>\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[bodyWidth / 3, bodyLength - 0.075, 0.02]}\n center={[(-padCenterX * 2) / 3 + 0.035, 0, bodyHeight + 0.05]}\n />\n </>\n )\n}\n\nexport default SOD323\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323F = () => {\n const fullWidth = 1.7\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.175\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2\n const rightPadCenterX = fullWidth / 2 + padLength / 2\n\n const taperOffset = 0.2\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323FL = () => {\n const fullWidth = 1.775\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.13\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2 + 0.04\n const rightPadCenterX = fullWidth / 2 + padLength / 2 - 0.04\n\n const taperOffset = 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n width={fullWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: 0, y: 0, z: 0 }}\n heightAboveSurface={0}\n straightHeightRatio={0.7}\n taperRatio={0.06}\n includeNotch={false}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - 0.05, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323FL\n","import { Colorize, Cylinder, Rotate, Sphere, Translate } from \"jscad-fiber\"\n\ninterface AxialCapacitorProps {\n pitch: number\n}\n\nexport const AxialCapacitor = ({ pitch = 10 }: AxialCapacitorProps) => {\n const heightToCenterOfCapacitor = 0.5 + 4 / 2\n\n return (\n <>\n <Cylinder height={4} radius={0.5} center={[-pitch / 2, 0, 0.5]} />\n <Sphere\n radius={0.5}\n center={[-pitch / 2, 0, heightToCenterOfCapacitor]}\n />\n <Translate x={-2.5} y={0} z={heightToCenterOfCapacitor}>\n <Rotate rotation={[0, Math.PI / 2, 0]}>\n <Cylinder\n height={pitch}\n radius={0.5}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n <Colorize color=\"#d2b48c\">\n <Cylinder\n height={5}\n radius={1.3}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n </Colorize>\n </Rotate>\n </Translate>\n <Cylinder height={4} radius={0.5} center={[pitch / 2, 0, 0.5]} />\n <Sphere radius={0.5} center={[pitch / 2, 0, heightToCenterOfCapacitor]} />\n </>\n )\n}\n","import { Colorize, Cuboid, Cylinder, Subtract, Union } from \"jscad-fiber\"\n\nexport const StampBoard = ({\n bodyWidth = 21,\n boardThickness = 0.5,\n leadWidth = 1.6,\n leadLength = 2.4,\n leadsPitch = 2.54,\n leadsLeft,\n leadsRight,\n leadsTop,\n leadsBottom,\n innerHoles = true,\n innerHoleEdgeDistance = 1.61,\n innerHoleDiameter = 1,\n}: {\n bodyWidth?: number\n boardThickness?: number\n leadWidth?: number\n leadLength?: number\n leadsPitch?: number\n leadsLeft?: number\n leadsRight?: number\n leadsTop?: number\n leadsBottom?: number\n innerHoles?: boolean\n innerHoleEdgeDistance?: number\n innerHoleDiameter?: number\n}) => {\n const halfBoardWidth = bodyWidth / 2\n const boardCenterZ = boardThickness / 2\n const boardHeight = boardThickness * 1.05\n const holeRadius = innerHoleDiameter / 2\n const bodyLength =\n Math.max(leadsLeft || 0, leadsRight || 0, leadsTop || 0, leadsBottom || 0) *\n leadsPitch || 51\n\n const pads: { x: number; y: number; pl: number; pw: number }[] = []\n const holes: { x: number; y: number }[] = []\n\n if (leadsRight) {\n const yOffset = -((leadsRight - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsRight; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: halfBoardWidth - leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: halfBoardWidth, y: -y },\n { x: halfBoardWidth - innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsLeft) {\n const yOffset = -((leadsLeft - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsLeft; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: -halfBoardWidth + leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: -halfBoardWidth, y: -y },\n { x: -halfBoardWidth + innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsTop) {\n const xOffset = -((leadsTop - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsTop; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: bodyLength / 2 - leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: bodyLength / 2 },\n { x: -x, y: bodyLength / 2 - innerHoleEdgeDistance },\n )\n }\n }\n }\n\n if (leadsBottom) {\n const xOffset = -((leadsBottom - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsBottom; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: -bodyLength / 2 + leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: -bodyLength / 2 },\n { x: -x, y: -bodyLength / 2 + innerHoleEdgeDistance },\n )\n }\n }\n }\n\n const boardBody = (\n <Colorize color=\"#051a0a\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ]}\n size={[bodyWidth, bodyLength, boardThickness]}\n />\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n const holePads =\n innerHoles &&\n holes.map((hole, index) => (\n <Cylinder\n key={index}\n color=\"black\"\n center={[hole.x, hole.y, boardCenterZ]}\n radius={holeRadius}\n height={boardThickness * 1.07}\n />\n ))\n\n const rectPads = pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))\n return (\n <>\n {boardBody}\n <Colorize color=\"#FFD700\">\n {innerHoles ? (\n <Subtract>\n <Union>\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Union>\n {holePads}\n </Subtract>\n ) : (\n rectPads\n )}\n </Colorize>\n </>\n )\n}\n\nexport default StampBoard\n","import { Colorize, Cuboid, Cylinder, Subtract } from \"jscad-fiber\"\nimport { PinHeader } from \"./PinHeader\"\nimport { FemaleHeader } from \"./FemaleHeader\"\nimport { Screen } from \"./Screen\"\n\nexport const MountedPcbModule = ({\n numPins = 5,\n rows = 1,\n p = 2.54,\n id = 1.0,\n od = 1.5,\n boardThickness = 1.6,\n width,\n height,\n pinRowSide = \"left\",\n holes = [],\n holeInset = 1.0,\n pinRowHoleEdgeToEdgeDist = 2.0,\n female,\n nopin,\n screen,\n screenWidth,\n screenHeight,\n screenCenterOffsetX,\n screenCenterOffsetY,\n}: {\n numPins?: number\n rows?: number\n p?: number\n id?: number\n od?: number\n boardThickness?: number\n width?: number | string\n height?: number | string\n pinRowSide?: \"left\" | \"right\" | \"top\" | \"bottom\"\n holes?: string[]\n holeInset?: number\n pinRowHoleEdgeToEdgeDist?: number\n female?: boolean\n nopin?: boolean\n screen?: boolean\n screenWidth?: number\n screenHeight?: number\n screenCenterOffsetX?: number\n screenCenterOffsetY?: number\n}) => {\n const showScreen = screen ?? false\n const boardCenterZ = boardThickness / 2\n const numPinsPerRow = Math.ceil(numPins / rows)\n\n // Calculate width and height if not provided\n let calculatedWidth: number\n let calculatedHeight: number\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n calculatedWidth = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedHeight = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n } else {\n calculatedHeight = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedWidth = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n }\n if (numPins === 0) {\n calculatedWidth = 10\n calculatedHeight = 10\n }\n const finalWidth = Number(width ?? calculatedWidth)\n const finalHeight = Number(height ?? calculatedHeight)\n\n // Calculate pin positions\n const pins: { x: number; y: number }[] = []\n let pinStartX = 0\n let pinStartY = 0\n let pinDirectionX = 0\n let pinDirectionY = 0\n let rowDirectionX = 0\n let rowDirectionY = 0\n\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n pinStartX =\n pinRowSide === \"left\"\n ? -finalWidth / 2 + pinRowHoleEdgeToEdgeDist\n : finalWidth / 2 - pinRowHoleEdgeToEdgeDist\n pinStartY = -((numPinsPerRow - 1) / 2) * p\n pinDirectionX = 0\n pinDirectionY = p\n rowDirectionX = pinRowSide === \"left\" ? p : -p\n rowDirectionY = 0\n } else {\n pinStartX = -((numPinsPerRow - 1) / 2) * p\n pinStartY =\n pinRowSide === \"top\"\n ? finalHeight / 2 - pinRowHoleEdgeToEdgeDist\n : -finalHeight / 2 + pinRowHoleEdgeToEdgeDist\n pinDirectionX = p\n pinDirectionY = 0\n rowDirectionX = 0\n rowDirectionY = pinRowSide === \"top\" ? -p : p\n }\n\n let pinNumber = 0\n for (let row = 0; row < rows && pinNumber < numPins; row++) {\n for (let col = 0; col < numPinsPerRow && pinNumber < numPins; col++) {\n const x = pinStartX + col * pinDirectionX + row * rowDirectionX\n const y = pinStartY + col * pinDirectionY + row * rowDirectionY\n pins.push({ x, y })\n pinNumber++\n }\n }\n\n // Calculate hole positions\n const holePositions: { x: number; y: number }[] = []\n if (holes) {\n for (const pos of holes) {\n let hx = 0\n let hy = 0\n if (pos === \"topleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"topright\") {\n hx = finalWidth / 2 - holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"bottomleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"bottomright\") {\n hx = finalWidth / 2 - holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"center\") {\n hx = 0\n hy = 0\n }\n holePositions.push({ x: hx, y: hy })\n }\n }\n // Recreated pin row geometry (local copy to avoid PinRow dependency)\n const pinThickness = 0.63\n const pinBodyHeight = 2\n const longSidePinLength = 6\n const shortSidePinLength = 3\n const boardOffsetZ = nopin || female ? 0 : pinBodyHeight\n const boardTopZ = boardOffsetZ + boardThickness\n // Board body with holes subtracted\n const boardBody = (\n <Colorize color=\"#008080\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ + boardOffsetZ]}\n size={[finalWidth, finalHeight, boardThickness]}\n />\n {holePositions.map((hole, index) => (\n <Cylinder\n key={`hole-${index}`}\n center={[hole.x, hole.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n {pins.map((pin, index) => (\n <Cylinder\n key={`pin-hole-${index}`}\n center={[pin.x, pin.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n // Plated through-holes\n const platedHoles = pins.map((pin, index) => (\n <Colorize key={`pin-${index}`} color=\"#FFD700\">\n <Subtract>\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={id / 2}\n height={boardThickness}\n />\n </Subtract>\n </Colorize>\n ))\n\n const headerPins = pins.map((pin, index) => (\n <PinHeader\n key={`pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={pinBodyHeight}\n flipZ={(z: number) => z}\n />\n ))\n\n const femaleHeaderRow = pins.map((pin, index) => (\n <FemaleHeader\n key={`female-pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n flipZ={(z: number) => -z}\n />\n ))\n\n return (\n <>\n {boardBody}\n {platedHoles}\n {!female && !nopin && headerPins}\n {female && femaleHeaderRow}\n {showScreen && (\n <Screen\n width={screenWidth ?? finalWidth * 0.8}\n height={screenHeight ?? finalHeight * 0.6}\n offset={{\n x: screenCenterOffsetX ?? 0,\n y: screenCenterOffsetY ?? 0,\n z: boardTopZ,\n }}\n />\n )}\n </>\n )\n}\n\nexport default MountedPcbModule\n","import { Colorize, Cuboid, Subtract, Translate } from \"jscad-fiber\"\n\nexport interface ScreenProps {\n width?: number\n height?: number\n thickness?: number\n bezelInset?: number\n bezelDepth?: number\n screenColor?: string\n bezelColor?: string\n screenWidth?: number\n screenHeight?: number\n offset?: { x?: number; y?: number; z?: number }\n}\n\nexport const Screen = ({\n width = 30,\n height = 22,\n thickness = 1,\n bezelInset = 2,\n bezelDepth = 1,\n screenColor = \"#001414\",\n bezelColor = \"#0f1116\",\n screenWidth,\n screenHeight,\n offset,\n}: ScreenProps) => {\n const w = width\n const h = height\n const stackHeight = Math.max(thickness, 0.4)\n const clampedBezelDepth = Math.max(Math.min(bezelDepth, stackHeight), 0.2)\n const backBlockHeight = Math.max(stackHeight - clampedBezelDepth, 0)\n const inset = Math.max(bezelInset, 0)\n const innerWidth = Math.max(screenWidth ?? w - inset * 2, 2)\n const innerHeight = Math.max(screenHeight ?? h - inset * 2, 2)\n const screenThickness = Math.min(\n Math.max(clampedBezelDepth * 0.6, 0.2),\n clampedBezelDepth,\n )\n const offsetX = offset?.x ?? 0\n const offsetY = offset?.y ?? 0\n const offsetZ = offset?.z ?? 0\n\n return (\n <Translate offset={{ x: offsetX, y: offsetY, z: offsetZ }}>\n {backBlockHeight > 0 && (\n <Colorize color={bezelColor}>\n <Cuboid\n size={[w, h, backBlockHeight]}\n offset={[0, 0, backBlockHeight / 2]}\n />\n </Colorize>\n )}\n\n <Colorize color={bezelColor}>\n <Subtract>\n <Cuboid\n size={[w, h, clampedBezelDepth]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n <Cuboid\n size={[innerWidth, innerHeight, clampedBezelDepth + 0.02]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n </Subtract>\n </Colorize>\n\n <Colorize color={screenColor}>\n <Cuboid\n size={[innerWidth, innerHeight, screenThickness]}\n offset={[0, 0, backBlockHeight + screenThickness / 2]}\n />\n </Colorize>\n </Translate>\n )\n}\n\n// TODO: remove Display alias after downstreams migrate\nexport const Display = Screen\n\nexport default Screen\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD723 = () => {\n const fullWidth = 1.4\n const bodyLength = 0.6\n const bodyHeight = 0.5\n\n const padWidth = 0.28\n const padLength = 0.5\n const padThickness = 0.12\n\n const bodyWidth = fullWidth - padLength\n const leftPadCenterX = -bodyWidth / 2 + padLength / 2 - 0.15 // 0.15 is the distance between the pad and the body as datasheet\n const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15 // 0.15 is the distance between the pad and the body as datasheet\n\n // top taper happens only in last quarter\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.24\n\n // Body geometry\n // - straightHeight: the lower (straight) portion of the body\n // - taperOffset: how much smaller the top of the body becomes\n\n return (\n <>\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <Union>\n {/* Straight bottom section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Tapered top quarter */}\n <Hull>\n {/* bottom of taper (same size as straight section top) */}\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n {/* top of taper (smaller) */}\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 6, bodyLength - taperOffset, 0.02]}\n center={[-bodyWidth / 4, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD723\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT233P = ({ fullWidth = 2.9, fullLength = 2.8 }) => {\n const bodyWidth = 1.3\n const bodyLength = 2.9\n const bodyHeight = 1.1\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.4\n const padThickness = leadThickness / 2\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: -1,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 1,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n />\n </>\n )\n}\n\nexport default SOT233P\n","import { Cuboid, Translate, Rotate, Colorize } from \"jscad-fiber\"\n\nexport const SOT563 = ({ fullWidth = 1.94, fullLength = 1.6 }) => {\n const bodyWidth = 1.2\n const bodyLength = 1.6\n const bodyHeight = 0.55\n const leadWidth = 0.3\n const leadLength = 0.67\n const leadHeight = 0.13\n const leadSpacing = 0.5\n const bodyZOffset = -0.4\n\n return (\n <>\n {/* Main body - rotated 90 degrees around X-axis */}\n <Rotate rotation={[45 * Math.PI, 0, 0]}>\n <Translate center={[0, 0, bodyZOffset]}>\n <Colorize color=\"grey\">\n <Cuboid size={[bodyWidth, bodyLength, bodyHeight]} />\n </Colorize>\n </Translate>\n </Rotate>\n\n {/* Leads */}\n {[-1, 0, 1].flatMap((yOffset, index) => [\n // Left lead\n\n <Translate\n key={`left-${index}`}\n center={[\n -bodyWidth / 2 - 0.03,\n yOffset * leadSpacing,\n leadHeight / 2,\n ]}\n >\n <Cuboid size={[leadLength, leadWidth, leadHeight]} />\n </Translate>,\n // Right lead\n <Translate\n key={`right-${index}`}\n center={[bodyWidth / 2 + 0.03, yOffset * leadSpacing, leadHeight / 2]}\n >\n <Cuboid size={[leadLength, leadWidth, leadHeight]} />\n </Translate>,\n ])}\n </>\n )\n}\n\nexport default SOT563\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOD123 = ({ fullWidth = 3.8, fullLength = 1.6 }) => {\n const bodyWidth = 2.9\n const bodyLength = 1.3\n const bodyHeight = 1.1\n const leadWidth = 0.8\n const leadThickness = 0.15\n const leadHeight = 0.5\n const padContactLength = 0.4\n const padThickness = leadThickness / 2\n\n const bodyDistance = (fullWidth - bodyWidth) / 2\n\n return (\n <>\n {/* Lead on the left side */}\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 + leadWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the right side */}\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 - leadWidth / 2,\n y: 0,\n z: padThickness,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n />\n </>\n )\n}\n\nexport default SOD123\n"],"mappings":"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","names":["Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","bodyLength","width","height","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Fragment","jsx","jsxs","fullLength","width","height","terminatorWidth","bodyLength","Cuboid","Translate","Fragment","jsx","jsxs","Colorize","Cuboid","Rotate","Translate","Union","jsx","jsxs","width","height","heightAboveSurface","fp","Colorize","Cuboid","Translate","jsx","Colorize","Cuboid","Translate","Cylinder","Subtract","jsx","jsxs","Fragment","jsx","jsxs","fp","fp","Rotate","Translate","width","Fragment","jsx","jsxs","height","Translate","Rotate","Polygon","ExtrudeLinear","Translate","Rotate","Colorize","jsx","height","width","Colorize","Translate","Rotate","ExtrudeLinear","Polygon","Fragment","jsx","jsxs","fullLength","Fragment","jsx","jsxs","Fragment","jsx","jsxs","bodyLength","fullLength","width","Colorize","Cuboid","Hull","Rotate","Translate","Fragment","jsx","jsxs","bodyLength","Translate","Cuboid","Colorize","Hull","Rotate","Fragment","jsx","Cuboid","Colorize","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","fullLength","bodyLength","Colorize","Cuboid","Cylinder","Hull","Subtract","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","Colorize","Cylinder","ExtrudeLinear","Polygon","Rotate","Translate","Fragment","jsx","jsxs","width","bodyLength","Cylinder","Colorize","Translate","Rotate","ExtrudeLinear","Polygon","Fragment","jsx","jsxs","fullLength","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Translate","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Hull","Translate","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Hull","Translate","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Hull","Translate","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","fullLength","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","fullLength","Cuboid","Translate","Colorize","Hull","Union","Fragment","jsx","jsxs","bodyLength","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Cylinder","Hull","Fragment","jsx","jsxs","bodyLength","Colorize","Cylinder","RoundedCylinder","Rotate","RoundedCuboid","Fragment","jsx","jsxs","bodyLength","Colorize","RoundedCylinder","Rotate","Fragment","jsx","jsxs","bodyLength","Colorize","RoundedCylinder","Rotate","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Rotate","Translate","Cylinder","Subtract","Fragment","jsx","jsxs","fullLength","bodyLength","Translate","Rotate","Subtract","Cuboid","Cylinder","Colorize","Hull","Fragment","jsx","jsxs","bodyLength","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Cuboid","Hull","Translate","Cylinder","Subtract","jsx","jsxs","Fragment","jsx","jsxs","bodyLength","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Union","Translate","Hull","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Cuboid","Colorize","Colorize","Cylinder","Rotate","Sphere","Translate","Fragment","jsx","jsxs","Colorize","Cuboid","Cylinder","Subtract","Union","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Cylinder","Subtract","Colorize","Cuboid","Subtract","Translate","jsx","jsxs","width","height","Fragment","jsx","jsxs","width","height","Colorize","Subtract","Cuboid","Cylinder","Colorize","Cuboid","Hull","Translate","Union","Fragment","jsx","jsxs","bodyLength","jsx","fp","width","height","Fragment","jsx","jsxs","fullLength","bodyLength","Cuboid","Translate","Rotate","Colorize","Fragment","jsx","jsxs","fullLength","bodyLength","Fragment","jsx","jsxs","fullLength","bodyLength"]}