jscad-electronics 0.0.95 → 0.0.97

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/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/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-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/TO220.tsx","../lib/SOT-457.tsx","../lib/TO92.tsx","../lib/SOT-363.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 // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPad key={i} pad={pad} />\n ))}\n {circuitJson\n .filter((s) => s.type === \"pcb_plated_hole\")\n .map((hole, i) => {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPlatedHole key={i} hole={hole} />\n )\n })}\n </>\n )\n}\n","import type { PcbSmtPad } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate } from \"jscad-fiber\"\n\nexport const FootprintPad = ({ pad }: { pad: PcbSmtPad }) => {\n if (pad.shape === \"rect\") {\n return (\n <Colorize color={[255, 0, 0]}>\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 = ({ hole }: { hole: PcbPlatedHole }) => {\n if (hole.shape === \"circle\") {\n return (\n <Colorize color=\"#b87333\">\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=\"#b87333\">\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 { FemaleHeader } from \"./FemaleHeader\"\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 { 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 { TO220 } from \"./TO220\"\nimport { SOT457 } from \"./SOT-457\"\nimport { TO92 } from \"./TO92\"\nimport SOT363 from \"./SOT-363\"\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 }\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 \"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 if (fpJson.male)\n return <PinRow numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\n if (fpJson.female)\n return <FemaleHeader numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\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 \"sot363\":\n return <SOT363 />\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 \"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 \"sot723\":\n return <SOT723 />\n case \"to220\":\n return <TO220 />\n case \"to92\":\n return <TO92 />\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}: { numPins?: number; pitch?: number; bodyWidth?: number }) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n const crossBodyPinWidth = bodyWidth + 1\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 * crossBodyPinWidth) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={bodyWidth}\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 { Cuboid, Cylinder, Union, HullChain, Colorize, Hull } from \"jscad-fiber\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const bodyWidth = numberOfPins * pitch\n const shortSidePinLength = 3\n const xoff = -((numberOfPins - 1) / 2) * pitch\n return (\n <>\n <Cuboid\n color=\"#222\"\n size={[bodyWidth, pinThickness * 3, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) => (\n <>\n {/*Short pins (top) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[\n xoff + i * pitch,\n 0,\n bodyHeight * 0.9 + bodyHeight / 2,\n ]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[xoff + i * pitch, 0, bodyHeight + bodyHeight / 2]}\n />\n </Hull>\n </Colorize>\n {/*Long pins (bottom) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[xoff + i * pitch, 0, (-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={[xoff + i * pitch, 0, -longSidePinLength / 2]}\n />\n </Hull>\n </Colorize>\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 { Cuboid, Colorize, Hull, Subtract, Cylinder } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n outerDiameter = 0.945,\n innerDiameter = 0.945,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const bodyDepth = pinThickness * 2 + outerDiameter\n const bodyHeight = 5\n const bodyWidth = (numberOfPins - 1) * pitch + outerDiameter + pitch / 2\n const gapWidth = pinThickness * 1.6\n const xoff = -((numberOfPins - 1) / 2) * pitch\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyWidth, bodyDepth, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) =>\n innerDiameter ? (\n <Cylinder\n key={i}\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n key={i}\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n />\n ),\n )}\n </Subtract>\n </Colorize>\n )\n return (\n <>\n {Body}\n {Array.from({ length: numberOfPins }, (_, i) => (\n <Colorize color=\"silver\" key={i}>\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[xoff + i * pitch, 0, (-legsLength / 2) * 0.9]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[xoff + i * pitch, 0, -legsLength / 2]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[xoff + i * pitch, 0, (gapWidth / 2) * 0.5]}\n />\n </Colorize>\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 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={{ x: bodyLength / 2 - 1, y: bodyWidth / 2 - 1, z: 1.55 }}\n heightAboveSurface={0.17}\n taperRatio={0.09}\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 {\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 { 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","Cuboid","Colorize","Hull","Fragment","jsx","jsxs","Cuboid","Colorize","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","fullLength","bodyLength","Cuboid","Colorize","Hull","Subtract","Cylinder","Fragment","jsx","jsxs","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","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","Colorize","Cuboid","Hull","Rotate","Translate","Cylinder","Subtract","Fragment","jsx","jsxs","fullLength","bodyLength","Translate","Rotate","Subtract","Cuboid","Cylinder","Colorize","Hull","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Cylinder","Subtract","jsx","jsxs","Fragment","jsx","jsxs","bodyLength","jsx","fp","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/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/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/TO220.tsx","../lib/SOT-457.tsx","../lib/TO92.tsx","../lib/SOT-363.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 // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPad key={i} pad={pad} />\n ))}\n {circuitJson\n .filter((s) => s.type === \"pcb_plated_hole\")\n .map((hole, i) => {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPlatedHole key={i} hole={hole} />\n )\n })}\n </>\n )\n}\n","import type { PcbSmtPad } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate } from \"jscad-fiber\"\n\nexport const FootprintPad = ({ pad }: { pad: PcbSmtPad }) => {\n if (pad.shape === \"rect\") {\n return (\n <Colorize color={[255, 0, 0]}>\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 = ({ hole }: { hole: PcbPlatedHole }) => {\n if (hole.shape === \"circle\") {\n return (\n <Colorize color=\"#b87333\">\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=\"#b87333\">\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 { FemaleHeader } from \"./FemaleHeader\"\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 { TO220 } from \"./TO220\"\nimport { SOT457 } from \"./SOT-457\"\nimport { TO92 } from \"./TO92\"\nimport SOT363 from \"./SOT-363\"\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 }\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 \"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 if (fpJson.male)\n return <PinRow numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\n if (fpJson.female)\n return <FemaleHeader numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\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 \"sot363\":\n return <SOT363 />\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 \"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 \"sot723\":\n return <SOT723 />\n case \"to220\":\n return <TO220 />\n case \"to92\":\n return <TO92 />\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}: { numPins?: number; pitch?: number; bodyWidth?: number }) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n const crossBodyPinWidth = bodyWidth + 1\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 * crossBodyPinWidth) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={bodyWidth}\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 { Cuboid, Cylinder, Union, HullChain, Colorize, Hull } from \"jscad-fiber\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const bodyWidth = numberOfPins * pitch\n const shortSidePinLength = 3\n const xoff = -((numberOfPins - 1) / 2) * pitch\n return (\n <>\n <Cuboid\n color=\"#222\"\n size={[bodyWidth, pinThickness * 3, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) => (\n <>\n {/*Short pins (top) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[\n xoff + i * pitch,\n 0,\n bodyHeight * 0.9 + bodyHeight / 2,\n ]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[xoff + i * pitch, 0, bodyHeight + bodyHeight / 2]}\n />\n </Hull>\n </Colorize>\n {/*Long pins (bottom) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[xoff + i * pitch, 0, (-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={[xoff + i * pitch, 0, -longSidePinLength / 2]}\n />\n </Hull>\n </Colorize>\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 { Cuboid, Colorize, Hull, Subtract, Cylinder } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n outerDiameter = 0.945,\n innerDiameter = 0.945,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const bodyDepth = pinThickness * 2 + outerDiameter\n const bodyHeight = 5\n const bodyWidth = (numberOfPins - 1) * pitch + outerDiameter + pitch / 2\n const gapWidth = pinThickness * 1.6\n const xoff = -((numberOfPins - 1) / 2) * pitch\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyWidth, bodyDepth, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) =>\n innerDiameter ? (\n <Cylinder\n key={i}\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n key={i}\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n />\n ),\n )}\n </Subtract>\n </Colorize>\n )\n return (\n <>\n {Body}\n {Array.from({ length: numberOfPins }, (_, i) => (\n <Colorize color=\"silver\" key={i}>\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[xoff + i * pitch, 0, (-legsLength / 2) * 0.9]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[xoff + i * pitch, 0, -legsLength / 2]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[xoff + i * pitch, 0, (gapWidth / 2) * 0.5]}\n />\n </Colorize>\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={{ x: bodyLength / 2 - 1, y: bodyWidth / 2 - 1, z: 1.55 }}\n heightAboveSurface={0.17}\n taperRatio={0.09}\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 {\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 { 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","Cuboid","Colorize","Hull","Fragment","jsx","jsxs","Cuboid","Colorize","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Fragment","jsx","jsxs","bodyLength","Fragment","jsx","jsxs","fullLength","bodyLength","Cuboid","Colorize","Hull","Subtract","Cylinder","Fragment","jsx","jsxs","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","Colorize","Cuboid","Hull","Rotate","Translate","Cylinder","Subtract","Fragment","jsx","jsxs","fullLength","bodyLength","Translate","Rotate","Subtract","Cuboid","Cylinder","Colorize","Hull","Fragment","jsx","jsxs","bodyLength","Colorize","Cuboid","Hull","Translate","Cylinder","Subtract","jsx","jsxs","Fragment","jsx","jsxs","bodyLength","jsx","fp","Fragment","jsx","jsxs","fullLength","bodyLength","Cuboid","Translate","Rotate","Colorize","Fragment","jsx","jsxs","fullLength","bodyLength","Fragment","jsx","jsxs","fullLength","bodyLength"]}