jscad-electronics 0.0.124 → 0.0.125

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/vanilla/h.ts","../lib/ExtrudedPads.tsx","../lib/vanilla/primitives.ts","../lib/vanilla/react-shim.ts","../lib/FootprintPad.tsx","../lib/FootprintPlatedHole.tsx","../lib/Footprinter3d.tsx","../lib/ChipBody.tsx","../lib/utils/range.ts","../lib/utils/getExpandedStroke.ts","../lib/DualInlinePackage.tsx","../lib/SmdChipLead.tsx","../lib/Tssop.tsx","../lib/MSOP.tsx","../lib/A0402.tsx","../lib/A0603.tsx","../lib/A0805.tsx","../lib/qfp.tsx","../lib/PinHeader.tsx","../lib/PinRow.tsx","../lib/utils/getQuadCoords.ts","../lib/utils/getQuadPinMap.ts","../lib/qfn.tsx","../lib/SOT-235.tsx","../lib/SOT-23W.tsx","../lib/A0201.tsx","../lib/A01005.tsx","../lib/A1206.tsx","../lib/A1210.tsx","../lib/A2010.tsx","../lib/A2512.tsx","../lib/FemaleHeader.tsx","../lib/FemaleHeaderRow.tsx","../lib/PushButton.tsx","../lib/SOIC.tsx","../lib/VSSOP.tsx","../lib/SOD523.tsx","../lib/SOD882.tsx","../lib/SMA.tsx","../lib/SMB.tsx","../lib/SMC.tsx","../lib/SMF.tsx","../lib/sod-123F.tsx","../lib/sod-123FL.tsx","../lib/sod-123W.tsx","../lib/sod-128.tsx","../lib/SOD-923.tsx","../lib/SOT-223.tsx","../lib/tqfp.tsx","../lib/SOT-323.tsx","../lib/lqfp.tsx","../lib/SOT-723.tsx","../lib/dfn.tsx","../lib/hc49.tsx","../lib/MicroMELF.tsx","../lib/MINIMELF.tsx","../lib/MELF.tsx","../lib/ms012.tsx","../lib/ms013.tsx","../lib/TO220.tsx","../lib/SOT-457.tsx","../lib/SOT-963.tsx","../lib/TO92.tsx","../lib/SOT-363.tsx","../lib/SOT-886.tsx","../lib/sod-323.tsx","../lib/sod-323F.tsx","../lib/sod-323FL.tsx","../lib/AxialCapacitor.tsx","../lib/stampboard.tsx","../lib/Screen.tsx","../lib/MountedPcbModule.tsx","../lib/SOD723.tsx","../lib/vanilla/render.ts","../lib/vanilla/convertCSGToThreeGeom.ts","../lib/vanilla/index.ts"],"sourcesContent":["export type VNode = {\n type: any\n props: Record<string, any>\n children?: any[]\n}\n\nexport const Fragment = Symbol(\"Fragment\")\n\nexport function h(type: any, props: any, ...restChildren: any[]): VNode {\n const provided = restChildren.length\n ? restChildren\n : props?.children !== undefined\n ? [props.children]\n : []\n const flatChildren: any[] = []\n const stack = (Array.isArray(provided) ? provided : [provided]).flat(\n Infinity,\n ) as any[]\n for (const ch of stack) {\n if (ch == null || ch === false) continue\n if (Array.isArray(ch)) flatChildren.push(...ch)\n else flatChildren.push(ch)\n }\n return {\n type,\n props:\n (props && props.children !== undefined\n ? { ...props, children: undefined }\n : props) || {},\n children: flatChildren,\n }\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { fp } from \"@tscircuit/footprinter\"\nimport { FootprintPad } from \"./FootprintPad\"\nimport { FootprintPlatedHole } from \"./FootprintPlatedHole\"\n\nexport const ExtrudedPads = ({\n circuitJson,\n footprint,\n}: { circuitJson?: AnyCircuitElement[]; footprint?: string }) => {\n if (!circuitJson && footprint) {\n circuitJson = fp.string(footprint).circuitJson() as AnyCircuitElement[]\n }\n\n if (!circuitJson)\n throw new Error(\"No circuit json or footprint provided to ExtrudedPads\")\n\n return (\n <>\n {circuitJson\n .filter((s) => s.type === \"pcb_smtpad\")\n .map((pad, i) => {\n const isPin1 = pad.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPad key={i} pad={pad} isPin1={isPin1} />\n )\n })}\n {circuitJson\n .filter((s) => s.type === \"pcb_plated_hole\")\n .map((hole, i) => {\n const isPin1 = hole.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPlatedHole key={i} hole={hole} isPin1={isPin1} />\n )\n })}\n </>\n )\n}\n","export const Cuboid = Symbol(\"Cuboid\")\nexport const Cube = Symbol(\"Cube\")\nexport const Cylinder = Symbol(\"Cylinder\")\nexport const Sphere = Symbol(\"Sphere\")\nexport const RoundedCuboid = Symbol(\"RoundedCuboid\")\n\nexport const Translate = Symbol(\"Translate\")\nexport const Rotate = Symbol(\"Rotate\")\n\nexport const Union = Symbol(\"Union\")\nexport const Subtract = Symbol(\"Subtract\")\nexport const Hull = Symbol(\"Hull\")\n\nexport const Colorize = Symbol(\"Colorize\")\n\nexport const Polygon = Symbol(\"Polygon\")\nexport const ExtrudeLinear = Symbol(\"ExtrudeLinear\")\n\nexport const RoundedCylinder = Symbol(\"RoundedCylinder\")\n\nexport type Color =\n | string\n | [number, number, number]\n | [number, number, number, number]\n","import { h, Fragment as HFragment } from \"./h\"\n\nexport const Fragment = HFragment\nexport const jsx = (type: any, props: any, _key?: any) => h(type, props)\nexport const jsxs = (type: any, props: any, _key?: any) => h(type, props)\n\nexport default { Fragment, jsx, jsxs }\n","import type { PcbSmtPad } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate } from \"jscad-fiber\"\n\nexport const FootprintPad = ({\n pad,\n isPin1,\n}: { pad: PcbSmtPad; isPin1?: boolean }) => {\n if (pad.shape === \"rect\") {\n const color: [number, number, number] = isPin1 ? [0, 255, 0] : [255, 0, 0]\n return (\n <Colorize color={color}>\n <Translate offset={[pad.x, pad.y, -0.005]}>\n <Cuboid size={[pad.width, pad.height, 0.01]} />\n </Translate>\n </Colorize>\n )\n } else {\n throw new Error(\"Shape not supported: \" + pad.shape)\n }\n}\n","import type { PcbPlatedHole } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate, Cylinder, Subtract } from \"jscad-fiber\"\n\nexport const FootprintPlatedHole = ({\n hole,\n isPin1,\n}: { hole: PcbPlatedHole; isPin1?: boolean }) => {\n const color = isPin1 ? \"#00ff00\" : \"#b87333\"\n\n if (hole.shape === \"circle\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, -0.005]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cylinder radius={hole.outer_diameter / 2} height={0.01} />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n if (hole.shape === \"circular_hole_with_rect_pad\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, 0]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cuboid\n size={[hole.rect_pad_width, hole.rect_pad_width, 0.01]}\n center={[0, 0, 0]}\n />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n throw new Error(\"Shape not supported: \" + hole.shape)\n}\n","import { fp } from \"@tscircuit/footprinter\"\nimport { Dip } from \"./DualInlinePackage\"\nimport { Tssop } from \"./Tssop\"\nimport { MSOP } from \"./MSOP\"\nimport { A0402 } from \"./A0402\"\nimport { A0603 } from \"./A0603\"\nimport { A0805 } from \"./A0805\"\nimport { QFP } from \"./qfp\"\nimport { PinRow } from \"./PinRow\"\nimport QFN from \"./qfn\"\nimport SOT235 from \"./SOT-235\"\nimport { SOT23W } from \"./SOT-23W\"\nimport { A0201 } from \"./A0201\"\nimport { A01005 } from \"./A01005\"\nimport { A1206 } from \"./A1206\"\nimport { A1210 } from \"./A1210\"\nimport { A2010 } from \"./A2010\"\nimport { A2512 } from \"./A2512\"\nimport { FemaleHeaderRow } from \"./FemaleHeaderRow\"\nimport { PushButton } from \"./PushButton\"\nimport { SOIC } from \"./SOIC\"\nimport { VSSOP } from \"./VSSOP\"\nimport { SOD523 } from \"./SOD523\"\nimport { SOD882 } from \"./SOD882\"\nimport { SMA } from \"./SMA\"\nimport { SMB } from \"./SMB\"\nimport { SMC } from \"./SMC\"\nimport { SMF } from \"./SMF\"\nimport { SOD123F } from \"./sod-123F\"\nimport { SOD123FL } from \"./sod-123FL\"\nimport { SOD123W } from \"./sod-123W\"\nimport { SOD128 } from \"./sod-128\"\nimport { SOD923 } from \"./SOD-923\"\nimport { SOT223 } from \"./SOT-223\"\nimport TQFP from \"./tqfp\"\nimport { SOT323 } from \"./SOT-323\"\nimport { LQFP } from \"./lqfp\"\nimport { SOT723 } from \"./SOT-723\"\nimport { DFN } from \"./dfn\"\nimport { HC49 } from \"./hc49\"\nimport { MicroMELF } from \"./MicroMELF\"\nimport { MINIMELF } from \"./MINIMELF\"\nimport { MELF } from \"./MELF\"\nimport { MS012 } from \"./ms012\"\nimport { MS013 } from \"./ms013\"\nimport { TO220 } from \"./TO220\"\nimport { SOT457 } from \"./SOT-457\"\nimport { SOT963 } from \"./SOT-963\"\nimport { TO92 } from \"./TO92\"\nimport SOT363 from \"./SOT-363\"\nimport { SOT886 } from \"./SOT-886\"\nimport { SOD323 } from \"./sod-323\"\nimport { SOD323F } from \"./sod-323F\"\nimport { SOD323FL } from \"./sod-323FL\"\nimport { AxialCapacitor } from \"./AxialCapacitor\"\nimport { StampBoard } from \"./stampboard\"\nimport { MountedPcbModule } from \"./MountedPcbModule\"\nimport SOD723 from \"./SOD723\"\n\n/**\n * Outputs a 3d model for any [footprinter string](https://github.com/tscircuit/footprinter)\n */\n\nexport const Footprinter3d = ({ footprint }: { footprint: string }) => {\n const fpJson = fp.string(footprint).json() as unknown as {\n w: number\n p: number\n h: number\n pl: number\n pw: number\n num_pins: number\n fn: string\n thermalpad?: { x: number; y: number }\n imperial: String\n male: boolean\n female: boolean\n id: number //innerDiameter\n od: number //outerDiameter\n invert?: boolean\n faceup?: boolean\n smd?: boolean\n surface_mount?: boolean\n rightangle?: boolean\n left?: number\n right?: number\n top?: number\n bottom?: number\n innerhole?: boolean\n innerholeedgedistance?: number\n nopin?: boolean\n screen?: boolean\n screenwidth?: number\n screenheight?: number\n screencenteroffsetx?: number\n screencenteroffsety?: number\n }\n\n switch (fpJson.fn) {\n case \"dip\":\n return (\n <Dip numPins={fpJson.num_pins} pitch={fpJson.p} bodyWidth={fpJson.w} />\n )\n case \"axial\":\n return <AxialCapacitor pitch={fpJson.p} />\n case \"tssop\":\n return (\n <Tssop\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"msop\":\n return (\n <MSOP\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"vssop\":\n return (\n <VSSOP\n pinCount={fpJson.num_pins as 8 | 10}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n />\n )\n case \"qfp\":\n return (\n <QFP\n pinCount={fpJson.num_pins}\n pitch={fpJson.p}\n leadWidth={fpJson.pw}\n padContactLength={fpJson.pl}\n bodyWidth={fpJson.w}\n />\n )\n case \"tqfp\":\n return <TQFP />\n case \"lqfp\":\n return <LQFP pinCount={fpJson.num_pins} />\n case \"qfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <QFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"dfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <DFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"pinrow\": {\n // Parse rows parameter from footprint string (e.g., \"pinrow4_rows2\")\n const rowsMatch = footprint.match(/_rows(\\d+)/)\n const rows = rowsMatch && rowsMatch[1] ? parseInt(rowsMatch[1], 10) : 1\n\n if (fpJson.male)\n return (\n <PinRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n invert={fpJson.invert}\n faceup={fpJson.faceup}\n rows={rows}\n smd={fpJson.smd || fpJson.surface_mount}\n rightangle={fpJson.rightangle}\n />\n )\n if (fpJson.female)\n return (\n <FemaleHeaderRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n rows={rows}\n />\n )\n }\n\n case \"cap\": {\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color=\"#856c4d\" />\n case \"0603\":\n return <A0603 color=\"#856c4d\" />\n case \"0805\":\n return <A0805 color=\"#856c4d\" />\n case \"0201\":\n return <A0201 color=\"#856c4d\" />\n case \"01005\":\n return <A01005 color=\"#856c4d\" />\n case \"1206\":\n return <A1206 color=\"#856c4d\" />\n case \"1210\":\n return <A1210 color=\"#856c4d\" />\n case \"2010\":\n return <A2010 color=\"#856c4d\" />\n case \"2512\":\n return <A2512 color=\"#856c4d\" />\n }\n }\n case \"sot235\":\n return <SOT235 />\n case \"sot457\":\n return <SOT457 />\n case \"sot223\":\n return <SOT223 />\n case \"sot23w\":\n return <SOT23W />\n case \"sot323\":\n return <SOT323 />\n case \"sod323f\":\n return <SOD323F />\n case \"sod323fl\":\n return <SOD323FL />\n case \"sot363\":\n return <SOT363 />\n case \"sot886\":\n return <SOT886 />\n case \"sot963\":\n return <SOT963 />\n case \"pushbutton\":\n return (\n <PushButton\n width={fpJson.w}\n length={fpJson.h}\n innerDiameter={fpJson.id}\n />\n )\n case \"soic\":\n return (\n <SOIC\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"sod523\":\n return <SOD523 />\n case \"sod723\":\n return <SOD723 />\n case \"sod882\":\n return <SOD882 />\n case \"sma\":\n return <SMA />\n case \"smb\":\n return <SMB />\n case \"smc\":\n return <SMC />\n case \"smf\":\n return <SMF />\n case \"sod123f\":\n return <SOD123F />\n case \"sod123fl\":\n return <SOD123FL />\n case \"sod123w\":\n return <SOD123W />\n case \"sod128\":\n return <SOD128 />\n case \"sod323\":\n return <SOD323 />\n case \"sod923\":\n return <SOD923 />\n case \"hc49\":\n return <HC49 />\n case \"micromelf\":\n return <MicroMELF />\n case \"minimelf\":\n return <MINIMELF />\n case \"melf\":\n return <MELF />\n case \"ms012\":\n return (\n <MS012\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"ms013\":\n return (\n <MS013\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"sot723\":\n return <SOT723 />\n case \"to220\":\n return <TO220 />\n case \"to92\":\n return <TO92 />\n case \"stampboard\":\n case \"stampreceiver\":\n return (\n <StampBoard\n bodyWidth={fpJson.w}\n leadsLeft={fpJson.left}\n leadsRight={fpJson.right}\n leadsTop={fpJson.top}\n leadsBottom={fpJson.bottom}\n leadsPitch={fpJson.p}\n leadWidth={fpJson.pw}\n leadLength={fpJson.pl}\n innerHoles={fpJson.innerhole}\n innerHoleEdgeDistance={fpJson.innerholeedgedistance}\n />\n )\n case \"mountedpcbmodule\": {\n const rows = (fpJson as any).rows ?? 1\n const pinRowSide = (fpJson as any).pinRowSide ?? \"left\"\n const holeInset = (fpJson as any).holeInset\n const width = (fpJson as any).width\n const height = (fpJson as any).height\n const pinRow = (fpJson as any).pinrow\n const pinRowHoleEdgeToEdgeDist = (fpJson as any).pinRowHoleEdgeToEdgeDist\n const holes = Array.isArray((fpJson as any).holes)\n ? (fpJson as any).holes\n : []\n\n return (\n <MountedPcbModule\n numPins={pinRow}\n rows={rows}\n p={fpJson.p}\n id={fpJson.id}\n od={fpJson.od}\n width={width}\n height={height}\n pinRowSide={pinRowSide}\n holes={holes}\n holeInset={holeInset}\n pinRowHoleEdgeToEdgeDist={pinRowHoleEdgeToEdgeDist}\n nopin={fpJson.nopin}\n female={fpJson.female}\n screen={fpJson.screen}\n screenWidth={fpJson.screenwidth}\n screenHeight={fpJson.screenheight}\n screenCenterOffsetX={fpJson.screencenteroffsetx}\n screenCenterOffsetY={fpJson.screencenteroffsety}\n />\n )\n }\n }\n\n const colorMatch = footprint.match(/_color\\(([^)]+)\\)/)\n const color = colorMatch ? colorMatch[1] : undefined\n\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color={color} />\n case \"0603\":\n return <A0603 color={color} />\n case \"0805\":\n return <A0805 color={color} />\n case \"0201\":\n return <A0201 color={color} />\n case \"01005\":\n return <A01005 color={color} />\n case \"1206\":\n return <A1206 color={color} />\n case \"1210\":\n return <A1210 color={color} />\n case \"2010\":\n return <A2010 color={color} />\n case \"2512\":\n return <A2512 color={color} />\n }\n return null\n}\n","import {\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","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 { Polygon, ExtrudeLinear, Rotate, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nimport { range } from \"./utils/range\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\n// DIP components look like this:\n// https://github.com/nophead/NopSCADlib/raw/master/tests/png/dip.png\n\n// M 20 105 L 20 109 L 20 102 L 26 102 L 26 109 L 24 111 L 24 118 L 22 118 L 22 111 L 20 109\n\nconst normalizeOnY = (points: { x: number; y: number }[]) => {\n const minX = Math.min(...points.map((p) => p.x))\n const maxX = Math.max(...points.map((p) => p.x))\n const minY = Math.min(...points.map((p) => p.y))\n const maxY = Math.max(...points.map((p) => p.y))\n const height = maxY - minY\n const factor = 5.47 / height\n return points.map((p) => ({\n x: (p.x - minX - (maxX - minX) / 2) * factor,\n y: (p.y - minY) * factor,\n }))\n}\n\nconst svgPathPoints = normalizeOnY([\n { x: 20, y: 105 },\n { x: 20, y: 109 },\n { x: 20, y: 102 },\n { x: 26, y: 102 },\n { x: 26, y: 109 },\n { x: 24, y: 111 },\n { x: 24, y: 118 },\n { x: 22, y: 118 },\n { x: 22, y: 111 },\n { x: 20, y: 109 },\n])\n\nconst DIP_PIN_HEIGHT = 5.47\nconst heightAboveSurface = 0.5\n\nexport const DipPinLeg = ({ x, y, z }: { x: number; y: number; z: number }) => {\n const isRotated = x > 0\n return (\n <>\n <Translate offset={{ x: x + 0.25 / 2, y, z: z }}>\n <Rotate rotation={[\"-90deg\", 0, \"90deg\"]}>\n <ExtrudeLinear height={0.25}>\n <Polygon\n points={svgPathPoints\n .slice()\n .reverse()\n .map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n <Translate\n offset={{\n x: x,\n y: y + (isRotated ? 1 : -1),\n z: z,\n }}\n >\n <Rotate rotation={[\"-90deg\", \"90deg\", isRotated ? \"180deg\" : \"0deg\"]}>\n <ExtrudeLinear height={2}>\n <Polygon\n points={getExpandedStroke(\n [\n [0, 0],\n [-1, 0],\n [-1, -1],\n ],\n 0.25,\n ).map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </>\n )\n}\n\nexport const Dip = ({\n numPins = 8,\n pitch = 2.54,\n bodyWidth = 6.4,\n rowSpacing,\n}: {\n numPins?: number\n pitch?: number\n bodyWidth?: number\n rowSpacing?: number\n}) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n\n const pinRowSpacing =\n rowSpacing ?? (bodyWidth >= 7 ? bodyWidth : bodyWidth + 1.22)\n\n const chipBodyWidth = bodyWidth >= 7 ? pinRowSpacing - 1.22 : bodyWidth\n\n return (\n <>\n {range(numPins).map((i) => {\n const yRow = i % numPinsOnEachSide\n const xRow = (Math.floor(i / numPinsOnEachSide) - 0.5) * 2\n\n return (\n <DipPinLeg\n key={i}\n x={(xRow * pinRowSpacing) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={chipBodyWidth}\n length={numPinsOnEachSide * pitch + 0.5}\n height={DIP_PIN_HEIGHT - heightAboveSurface}\n heightAboveSurface={heightAboveSurface}\n center={{ x: 0, y: 0, z: heightAboveSurface }}\n />\n </>\n )\n}\n\nexport const DualInlinePackage = Dip\n","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 { 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 { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const QFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n\n // get default values if not specified\n if (!pitch) pitch = getPitch(pinCount, bodyWidth)\n if (!padContactLength) padContactLength = getPadContactLength(pinCount)\n if (!leadWidth) leadWidth = getLeadWidth(pinCount, bodyWidth)\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.15\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.5\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n taperRatio={0.03}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyWidth / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n// Helper functions to determine default values based on pinCount and width of QFP as footprinter repo\nconst getPitch = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.8\n case 52:\n return width === 14 ? 1 : 0.65\n case 208:\n return 0.5\n default:\n return 0.5\n }\n}\n\nconst getPadContactLength = (pinCount: number): number => {\n switch (pinCount) {\n case 32:\n return 0.6\n case 40:\n return 0.6\n case 52:\n case 64:\n return 0.65\n case 208:\n return 1.65\n default:\n return 0.6\n }\n}\n\nconst getLeadWidth = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.5\n case 52:\n return width === 14 ? 0.45 : 0.55\n case 208:\n return 0.3\n default:\n return 0.25\n }\n}\nexport default QFP\n","import { Colorize, Cuboid, Hull, Rotate, Translate } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const PinHeader = ({\n x,\n y,\n pinThickness,\n shortSidePinLength,\n longSidePinLength,\n bodyHeight,\n bodyLength = 2.54,\n bodyWidth = 2.54,\n flipZ,\n faceup,\n smd,\n rightangle,\n}: {\n x: number\n y: number\n pinThickness: number\n shortSidePinLength: number\n longSidePinLength: number\n bodyHeight: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n faceup?: boolean\n smd?: boolean\n rightangle?: boolean\n}) => {\n return (\n <>\n <Translate y={rightangle ? -3 : 0}>\n <Cuboid\n color=\"#222\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(bodyHeight / 2)]}\n />\n </Translate>\n {!faceup && (\n <Colorize color=\"gold\">\n {smd ? (\n <SmdChipLead\n rotation={-Math.PI / 2}\n position={{\n x: x,\n y: y + 1,\n z: pinThickness / 2,\n }}\n thickness={pinThickness}\n width={pinThickness}\n height={pinThickness}\n padContactLength={2}\n bodyDistance={3}\n />\n ) : (\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[x, y, flipZ(bodyHeight * 0.9 + bodyHeight / 2)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[x, y, flipZ(bodyHeight + bodyHeight / 2)]}\n />\n </Hull>\n )}\n </Colorize>\n )}\n\n <Colorize color=\"gold\">\n <Translate y={rightangle ? -3.9 : 0} z={rightangle ? 1 : 0}>\n <Rotate rotation={rightangle ? [-Math.PI / 2, 0, 0] : [0, 0, 0]}>\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[x, y, flipZ((-longSidePinLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n longSidePinLength,\n ]}\n center={[x, y, flipZ(-longSidePinLength / 2)]}\n />\n </Hull>\n </Rotate>\n </Translate>\n </Colorize>\n </>\n )\n}\n","import { PinHeader } from \"./PinHeader\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n invert,\n faceup,\n rows = 1,\n smd,\n rightangle,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n invert?: boolean\n faceup?: boolean\n rows?: number\n smd?: boolean\n rightangle?: boolean\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const shortSidePinLength = 3\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n const zOffset = !smd && !rightangle ? -bodyHeight - 1.6 : 0\n // Flip Z coordinates if invert is true\n const flipZ = (z: number) =>\n (invert || faceup ? -z + bodyHeight : z) + zOffset\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <PinHeader\n key={i}\n x={x}\n y={y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={bodyHeight}\n flipZ={flipZ}\n faceup={faceup}\n smd={smd}\n rightangle={rightangle}\n />\n )\n })}\n </>\n )\n}\n","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 { 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","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 } 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 = 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 = 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 { Colorize, Cuboid, Cylinder, Hull, Subtract } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n x,\n y,\n z = 0,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n bodyHeight = 5,\n bodyLength = pitch,\n bodyWidth = pitch,\n flipZ,\n}: {\n x: number\n y: number\n z?: number\n pitch?: number\n legsLength?: number\n innerDiameter?: number\n bodyHeight?: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const gapWidth = pinThickness * 1.6\n\n return (\n <>\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n {innerDiameter ? (\n <Cylinder\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n )}\n </Subtract>\n </Colorize>\n <Colorize color=\"silver\">\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[x, y, flipZ(z + (-legsLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[x, y, flipZ(z + -legsLength / 2)]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[x, y, flipZ(z + (gapWidth / 2) * 0.5)]}\n />\n </Colorize>\n </>\n )\n}\n","import { FemaleHeader } from \"./FemaleHeader\"\n\nexport const FemaleHeaderRow = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n rows = 1,\n invert,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n rows?: number\n invert?: boolean\n}) => {\n const bodyHeight = 5\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n // Flip Z for inversion\n const flipZ = (z: number) => (invert ? -z + bodyHeight : z)\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <FemaleHeader\n key={i}\n x={x}\n y={y}\n pitch={pitch}\n legsLength={legsLength}\n innerDiameter={innerDiameter}\n flipZ={flipZ}\n />\n )\n })}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n ExtrudeLinear,\n Polygon,\n Rotate,\n RoundedCuboid,\n Translate,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport const PushButton = ({\n width,\n length,\n innerDiameter = 1,\n}: { width: number; length: number; innerDiameter?: number }) => {\n const bodyWidth = width\n const bodyLength = length\n const bodyHeight = width * 0.7\n const legWidth = innerDiameter / 2.5\n return (\n <>\n <RoundedCuboid\n color=\"#1a1a1f\"\n center={[0, 0, bodyHeight / 2]}\n size={[bodyLength, bodyLength, bodyHeight]}\n roundRadius={0.3}\n />\n <RoundedCuboid\n color=\"#f2f2f2\"\n center={[0, 0, bodyHeight + (bodyHeight * 0.1) / 2.5]}\n size={[bodyLength, bodyLength, bodyHeight * 0.1]}\n roundRadius={0.14}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.8}\n radius={bodyWidth / 3}\n center={[0, 0, bodyHeight + (bodyHeight * 0.8) / 2]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{ x: bodyWidth / 2, y: bodyLength / 2, z: -bodyHeight * 1.2 }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: bodyWidth / 2 + innerDiameter / 3.6,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n </>\n )\n}\nexport interface PushButtonLegProps {\n thickness: number\n width: number\n horizontalLength: number\n verticalLength: number\n rotation?: number\n position?: { x: number; y: number; z?: number }\n}\n\nexport const PushButtonLeg = (props: PushButtonLegProps) => {\n const {\n thickness,\n width,\n horizontalLength,\n verticalLength,\n rotation = 0,\n position,\n } = props\n const points: [number, number][] = [\n [0, horizontalLength],\n [-verticalLength / 3, horizontalLength / 3],\n [-verticalLength / 5, horizontalLength / 4],\n [0, 0],\n ]\n const polygon = getExpandedStroke(points, thickness)\n\n return (\n <Colorize color=\"#f2f2f2\">\n <Translate\n offset={{\n x: position?.x || 0,\n y: position?.y || 0,\n z: position?.z || 0,\n }}\n >\n <Rotate rotation={[0, 55, rotation]}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.y, p.x])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// SOIC typical body and lead dimensions\nexport const SOIC = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n const bodyHeight = 1.0\n const leadHeight = 0.8\n const leadBodyOffset = leadLength * 0\n const fullLength = pitch * (sidePinCount - 1) + leadWidth + 0.2\n const bodyWidthAdjusted = bodyWidth * 0.55\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidthAdjusted}\n length={fullLength}\n height={bodyHeight}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const VSSOP = ({\n pinCount,\n pitch,\n leadWidth,\n leadLength,\n bodyWidth,\n bodyLength,\n}: {\n pinCount: 8 | 10\n pitch?: number\n leadWidth?: number\n leadLength?: number\n bodyWidth?: number\n bodyLength?: number\n}) => {\n const defaults =\n pinCount === 8\n ? {\n pitch: 0.65,\n leadWidth: 0.3,\n leadLength: 1.6,\n }\n : {\n pitch: 0.5,\n leadWidth: 0.225,\n leadLength: 1.45,\n }\n\n const _pitch = !isNaN(parseFloat(pitch as any))\n ? parseFloat(pitch as any)\n : defaults.pitch\n const _leadWidth = !isNaN(parseFloat(leadWidth as any))\n ? parseFloat(leadWidth as any) * 0.8\n : defaults.leadWidth\n const _leadLength = !isNaN(parseFloat(leadLength as any))\n ? parseFloat(leadLength as any)\n : defaults.leadLength\n const _bodyWidth = !isNaN(parseFloat(bodyWidth as any))\n ? parseFloat(bodyWidth as any) * 0.8\n : 2.6\n const _bodyLength = !isNaN(parseFloat(bodyLength as any))\n ? parseFloat(bodyLength as any)\n : 2.0 + Number(_pitch) * 1.4\n\n const sidePinCount = pinCount / 2\n const pinOffsetToCenter = ((sidePinCount - 1) * _pitch) / 2\n const leadThickness = 0.15\n const leadHeight = 0.8\n\n const componentFullWidth = 4.5\n const leadBodyDistance = (componentFullWidth - _bodyWidth) / 2\n\n const padContactLength = leadBodyDistance * 0.5\n\n return (\n <>\n {/* Left leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n {/* Right leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={_bodyWidth}\n length={_bodyLength}\n height={1.0}\n />\n </>\n )\n}\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD523 = () => {\n const fullWidth = 2.15\n const bodyLength = 0.8\n const bodyHeight = 0.6\n\n const padWidth = 0.6\n const padLength = 0.5\n const padThickness = 0.12\n\n const bodyWidth = fullWidth - padLength\n const leftPadCenterX = -bodyWidth / 2 + padLength / 2 - 0.15 // 0.15 is the distance between the pad and the body as datasheet\n const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15 // 0.15 is the distance between the pad and the body as datasheet\n\n // top taper happens only in last quarter\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n // Body geometry\n // - straightHeight: the lower (straight) portion of the body\n // - taperOffset: how much smaller the top of the body becomes\n\n return (\n <>\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <Union>\n {/* Straight bottom section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Tapered top quarter */}\n <Hull>\n {/* bottom of taper (same size as straight section top) */}\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n {/* top of taper (smaller) */}\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD523\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD882 = () => {\n const bodyLength = 0.98\n const bodyHeight = 0.47\n const pitch = 0.65\n\n const padWidth = 0.51\n const padLength = 0.26\n const padThickness = 0.12\n\n const bodyWidth = 0.58\n const leftPadCenterX = -pitch / 2\n const rightPadCenterX = pitch / 2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Translate z={bodyHeight / 2 + 0.02}>\n <Cuboid size={[bodyLength, bodyWidth, bodyHeight]} />\n </Translate>\n </Colorize>\n\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, padLength / 2, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, -padLength / 2, bodyHeight / 4]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[pitch / 2, 0, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[-pitch / 2, 0, bodyHeight / 4]}\n />\n </>\n )\n}\n\nexport default SOD882\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMA = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMA\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMB = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMB\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMC = () => {\n const bodyWidth = 6.8\n const bodyLength = 6\n const bodyHeight = 2.3\n const padWidth = 2.95\n const padThickness = 0.2 // the cad model above of bottom\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMC\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SMF = () => {\n const fullWidth = 2.9\n const bodyLength = 1.9\n const bodyHeight = 1.08\n\n const padWidth = 1.2\n const padLength = 1\n const padThickness = 0.25\n\n const bodyWidth = fullWidth\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#222\">\n <Union>\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n return (\n <>\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {Body}\n </>\n )\n}\n\nexport default SMF\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123F = () => {\n const fullWidth = 2.7\n const bodyLength = 1.6\n const bodyHeight = 1.1\n\n const padWidth = 0.6\n const padLength = 1\n const padThickness = 0.12\n\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD123F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123FL = () => {\n const fullWidth = 2.75\n const bodyLength = 1.8\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 1\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness, bodyLength - taperOffset, 0.01]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123FL\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123W = () => {\n const fullWidth = 2.6\n const bodyLength = 1.7\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.1\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123W\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD128 = () => {\n const fullWidth = 3.8\n const bodyLength = 2.5\n\n const bodyHeight = 1\n\n const padWidth = 1.75\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.05\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD128\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD923 = () => {\n const fullWidth = 0.8\n const bodyLength = 0.6\n\n const bodyHeight = 0.37\n\n const padWidth = 0.25\n const padLength = 0.4\n const padThickness = 0.14\n\n const leftPadCenterX = -(fullWidth / 2)\n const rightPadCenterX = fullWidth / 2\n\n const taperOffset = 0.1\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD923\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT223 = () => {\n const fullWidth = 6.6\n const bodyWidth = 3.5\n const bodyLength = 6.5\n const bodyHeight = 1.7\n const leadWidth = 0.7\n const leftLeadWidth = 3\n const leadThickness = 0.25\n const leadHeight = 0.75\n const padContactLength = 0.5\n const padPitch = 2.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leftLeadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.45}\n />\n </>\n )\n}\n\nexport default SOT223\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const TQFP = () => {\n const pinCount = 64\n const pitch = 0.5\n const leadWidth = 0.2\n const padContactLength = 0.45\n const bodyWidth = 9\n const sidePinCount = pinCount / 4\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength + 0.6\n const fullWidth = fullLength\n const leadHeight = 0.65\n const leadThickness = 0.25\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.2\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.2}\n chamferSize={0.7}\n taperRatio={0.05}\n notchPosition={{ x: -3.5, y: 3.5, z: 1.2 }}\n notchRadius={1.2 / 2}\n />\n </>\n )\n}\n\nexport default TQFP\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT323 = () => {\n const fullWidth = 2.05\n const bodyWidth = 1.25\n const bodyLength = 2.0\n const bodyHeight = 0.9\n const leadWidth = 0.3\n const leadThickness = 0.18\n const leadHeight = 0.65\n const padContactLength = 0.2\n const padPitch = 0.65\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Lead on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </>\n )\n}\n\nexport default SOT323\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const LQFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n if (sidePinCount !== Math.floor(sidePinCount)) {\n throw new Error(`LQFP pinCount must be divisible by 4, got ${pinCount}`)\n }\n\n // get default values if not specified\n if (!pitch) pitch = 0.5\n if (!padContactLength) padContactLength = 0.6\n if (!leadWidth) leadWidth = 0.22\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 3.3 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.2\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.4\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n heightAboveSurface={0.1}\n taperRatio={0.04}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n\nexport default LQFP\n","import { Cuboid, Translate, Colorize, Hull, Union } from \"jscad-fiber\"\n\nexport const SOT723 = () => {\n // Body dimensions (mm)\n const bodyWidth = 0.85\n const bodyLength = 1.2\n const bodyHeight = 0.38\n\n const straightHeight = bodyHeight * 0.55\n const taperOffset = 0.1\n\n const padLength = 0.3\n const padThickness = 0.1\n const leftPadWidth = 0.2\n const rightPadWidth = 0.25\n\n const rightPadCenterX = 0.55\n const rightPadCenterY = 0\n\n const leftTopPadCenterX = -0.55\n const leftTopPadCenterY = 0.4\n\n const leftBottomPadCenterX = -0.55\n const leftBottomPadCenterY = -0.4\n\n return (\n <>\n {/* Body with straight lower section + hulled tapered top */}\n <Colorize color=\"#222\">\n <Union>\n {/* straight lower section */}\n <Cuboid\n size={[bodyWidth, bodyLength, straightHeight]}\n center={[0, 0, straightHeight / 2]}\n />\n\n {/* tapered top via Hull between two thin slices */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, rightPadWidth, padThickness]}\n center={[rightPadCenterX, rightPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftTopPadCenterX, leftTopPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftBottomPadCenterX, leftBottomPadCenterY, padThickness / 2]}\n />\n </>\n )\n}\n\nexport default SOT723\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nexport const DFN = ({\n num_pins,\n bodyWidth = 5.3,\n bodyLength = 5.3,\n bodyThickness = 1,\n thermalPadSize,\n // For a body length of 5 the typical pad width/length are 0.6 and 1.\n // Scale those values proportionally when `bodyLength` changes.\n padWidth = (bodyLength / 5.3) * 0.6,\n padLength = (bodyLength / 5.3) * 1,\n pitch = 0.5,\n thermalPadThickness = 0.2,\n}: {\n num_pins: number\n bodyWidth?: number\n bodyLength?: number\n bodyThickness?: number\n thermalPadSize?: {\n width: number\n length: number\n }\n padWidth?: number\n padLength?: number\n pitch?: number\n thermalPadThickness?: number\n}) => {\n // DFN packages have pads on two opposite sides (left & right).\n // Distribute pins evenly between the two sides.\n const pinPositions: Array<{\n pinNumber: number\n x: number\n y: number\n padSizeX: number // size across the package X axis (pad width)\n padSizeY: number // size along the package Y axis (pad length)\n }> = []\n\n const pinsPerSide = Math.floor(num_pins / 2)\n // pinSpan = distance between first and last pin on a side (along Y)\n const pinSpan = pitch * (pinsPerSide - 1)\n\n for (let i = 0; i < num_pins; i++) {\n const side = i < pinsPerSide ? \"left\" : \"right\"\n const indexOnSide = i % pinsPerSide\n const y = pinSpan / 2 - indexOnSide * pitch\n\n // Pads on DFN are typically oriented vertically (long edge along Y)\n const padSizeX = padLength // X dimension of pad (short side)\n const padSizeY = padWidth // Y dimension of pad (long side)\n\n // x position: place pad inside the body so its outer edge touches the\n // package edge. Pad center should be half the pad X size away from edge.\n const x =\n side === \"left\"\n ? -bodyWidth / 2 + padSizeX / 2\n : bodyWidth / 2 - padSizeX / 2\n\n const pinNumber = i + 1\n pinPositions.push({ pinNumber, x, y, padSizeX, padSizeY })\n }\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyThickness}\n heightAboveSurface={0}\n color=\"grey\"\n chamferSize={0.2}\n taperRatio={0}\n notchPosition={{\n x: -(bodyWidth / 2 - padLength),\n y: bodyLength / 2 - padLength,\n z: bodyThickness,\n }}\n />\n {pinPositions.map((p, i) => (\n <Cuboid\n key={i}\n center={[p.x, p.y, thermalPadThickness / 2]}\n size={[p.padSizeX, p.padSizeY, thermalPadThickness]}\n />\n ))}\n {thermalPadSize?.length !== undefined &&\n thermalPadSize?.width !== undefined && (\n <Cuboid\n center={[0, 0, thermalPadThickness / 2]}\n size={[\n thermalPadSize.width,\n thermalPadSize.length,\n thermalPadThickness,\n ]}\n />\n )}\n </>\n )\n}\n\nexport default DFN\n","import { Colorize, Cylinder, Hull, RoundedCylinder } from \"jscad-fiber\"\n\nexport interface HC49Props {\n /** overall body length (mm) */\n bodyLength?: number\n /** body width (mm) */\n bodyWidth?: number\n /** body height (mm) */\n bodyHeight?: number\n /** distance between lead centers (mm) */\n leadSpacing?: number\n /** lead diameter (mm) */\n leadDiameter?: number\n /** length of the lead below the body (mm) */\n leadLength?: number\n color?: string\n leadColor?: string\n}\n\n/**\n * HC-49 (through-hole crystal) simplified 3D model.\n * Defaults chosen to match the HC-49/U-S recommended land pattern and dimensions.\n */\nexport const HC49 = ({\n bodyLength = 10.2,\n bodyWidth = 4.65,\n bodyHeight = 13.46,\n leadSpacing = 5,\n leadDiameter = 0.8,\n leadLength = 12.7,\n color = \"#ddd\",\n leadColor = \"#b87333\",\n}: HC49Props) => {\n // positions and sizes\n const halfLength = bodyLength / 2\n\n // build a capsule-like body by hullling two cylinders (circular ends) across the X axis\n const endRadius = bodyWidth / 2\n const endCenterX = halfLength - endRadius\n // center X for the through-hole leads (distance between centers = leadSpacing)\n const leadCenterX = leadSpacing / 2\n const baseHeight = 0.85\n\n return (\n <>\n <Colorize color={color}>\n <Hull>\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[-endCenterX, 0, bodyHeight]}\n />\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[endCenterX, 0, bodyHeight]}\n />\n </Hull>\n <Hull>\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[-endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n </Hull>\n </Colorize>\n\n {/* leads (through-hole) - cylinders oriented along Z, extending below the body */}\n <Colorize color={leadColor}>\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[-leadCenterX + 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[leadCenterX - 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n </Colorize>\n </>\n )\n}\n\nexport default HC49\n","import {\n Colorize,\n Cylinder,\n RoundedCylinder,\n Rotate,\n RoundedCuboid,\n} from \"jscad-fiber\"\n\nexport interface MicroMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n cathodeIdentification?: string\n}\n\nexport const MicroMELF = ({\n bodyLength = 1.4,\n bodyDiameter = 1.1,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n cathodeIdentification = \"#111\",\n}: MicroMELFProps) => {\n const padLength = 0.2\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter, bodyDiameter, bodyLength - padLength]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, 0.05]}\n />\n <Cylinder\n height={padLength / 2}\n radius={bodyDiameter / 2 - padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2 + padLength / 2]}\n />\n </Rotate>\n </Colorize>\n {/* Cathode identification: a dark stripe near the left end of the body */}\n\n <Colorize color={cathodeIdentification}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter * 1.01, bodyDiameter * 1.01, bodyLength / 3]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 4 + 0.1]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MicroMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MINIMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MINIMELF = ({\n bodyLength = 3.5,\n bodyDiameter = 1.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MINIMELFProps) => {\n const padLength = 0.5\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MINIMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MELF = ({\n bodyLength = 3.9,\n bodyDiameter = 2.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MELFProps) => {\n const padLength = 0.55\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MELF\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS012 = ({\n pinCount,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount % 2 !== 0) {\n throw new Error(\"MS012 pinCount must be even\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 4.9\n const bodyLength = 3.9\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyLength / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyLength / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyLength}\n length={bodyWidth}\n height={1.55}\n notchPosition={{\n x: -(bodyLength / 2 - 1),\n y: bodyWidth / 2 - 1,\n z: 1.55,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.09}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS013 = ({\n pinCount = 16,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount?: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount !== 16) {\n throw new Error(\"MS013 only supports 16 pins\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 7.5\n const bodyLength = 10.3\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.1}\n notchPosition={{\n x: -(bodyWidth / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.1,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.05}\n />\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Hull,\n Rotate,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const TO220 = () => {\n const fullLength = 20\n const bodyLength = 9.9\n const bodyHeight = 4.5\n const zOffset = 1\n\n const padWidth = 9.9\n const padLength = 6.5\n const padThickness = 1.3\n const padHoleDiameter = 3.0\n\n const prongWidth = 0.81\n const prongLength = 16\n const prongHeight = 0.5\n const prongPitch = 2.7\n\n const bodyWidth = padWidth\n\n const bodyFrontX = fullLength - bodyLength / 2 // left face of body\n const bodyBackX = fullLength + bodyLength / 2 // right face of body\n const prongCenterX = bodyFrontX - prongLength / 2 // prong centered so its inner face touches bodyFront\n const padCenterX = bodyBackX + padLength / 2 // pad centered so its inner face touches bodyBack\n\n return (\n <Translate center={[0, 0, zOffset]}>\n <>\n <Rotate rotation={[0, 55, -55]}>\n {/* Pads (with centered hole for pin alignment) */}\n <Subtract>\n <Cuboid\n color=\"#ccc\"\n size={[padLength + 0.1, padWidth, padThickness]}\n center={[padCenterX, 0, padThickness - 2]}\n />\n {/* hole centered through pad */}\n <Cylinder\n color=\"black\"\n center={[padCenterX, 0, padThickness - 2]}\n radius={padHoleDiameter / 2}\n height={padThickness * 1.2}\n />\n </Subtract>\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <ChipBody\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: fullLength, y: 0, z: -2.4 }}\n includeNotch={false}\n straightHeightRatio={0.3}\n taperRatio={0.04}\n heightAboveSurface={1}\n />\n </Colorize>\n </Rotate>\n <Rotate rotation={[0, 55, 55]}>\n {Array.from({ length: 3 }).map((_, i) => {\n const x = prongCenterX\n const y = (i - 1) * prongPitch\n // prongs sit on top of pads (pad top z = padThickness)\n const z = -prongHeight - 0.6\n return (\n <Colorize key={`prong-${i}`} color=\"gold\">\n <Hull>\n {/* inner fillet pieces anchored to the body front so they stay correct when prongLength changes */}\n <Translate center={[bodyFrontX - bodyHeight / 2 + 0.1, y, z]}>\n <Cuboid size={[bodyHeight, prongWidth + 1, prongHeight]} />\n </Translate>\n <Translate\n center={[bodyFrontX - bodyHeight / 2 - 1 + 0.1, y, z]}\n >\n <Cuboid size={[bodyHeight, prongWidth, prongHeight]} />\n </Translate>\n </Hull>\n <Translate center={[x, y, z]}>\n <Cuboid size={[prongLength + 0.1, prongWidth, prongHeight]} />\n </Translate>\n </Colorize>\n )\n })}\n </Rotate>\n </>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT457 = () => {\n const fullWidth = 2.8\n const bodyWidth = 1.6\n const bodyLength = 2.9\n const bodyHeight = 1.2\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.5\n const padPitch = 0.95\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.4),\n y: bodyHeight / 2 + 0.4,\n z: bodyHeight + 0.05,\n }}\n notchRadius={0.1}\n />\n </>\n )\n}\n\nexport default SOT457\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT963 = () => {\n const bodyWidth = 0.8\n const bodyLength = 1.0\n const bodyHeight = 0.37\n const terminalWidth = 0.15\n const terminalLength = 0.19\n const terminalThickness = 0.12\n const pitch = 0.35\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0.15}\n straightHeightRatio={0}\n notchPosition={{\n x: -bodyWidth / 4,\n y: pinSpan / 2.2,\n z: bodyHeight + 0.1,\n }}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2 - 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2 + 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT963\n","import {\n Colorize,\n Cuboid,\n Hull,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\n\nexport const TO92 = () => {\n // === Dimensions (mm) ===\n const bodyRadius = 2.4\n const bodyHeight = 4.5\n const flatCut = 1.1\n\n const legWidth = 0.4\n const legThickness = 0.25\n\n const bodyZ = bodyHeight / 2\n\n const bodyColor = \"#222\"\n const leadLength = 0.43\n const leadTipSize: [number, number, number] = [leadLength, legWidth, 1.32]\n const leadSmallSize: [number, number, number] = [\n leadLength,\n legWidth,\n legThickness,\n ]\n\n const leadTipPos1: [number, number, number] = [0, 0, -0.66]\n const leadMidPosA: [number, number, number] = [0, 0, -1.32]\n const leadMidPosB: [number, number, number] = [0, 1.28, -2.72]\n const leadTipPos2: [number, number, number] = [0, 1.28, -8.9]\n\n const sideLeadZ = -7.5\n\n return (\n <Translate center={[0, 1, 10.5]}>\n <Colorize color={bodyColor}>\n <Subtract>\n <Translate center={[0, 0, bodyZ]}>\n <Cylinder radius={bodyRadius} height={bodyHeight} />\n </Translate>\n <Translate center={[0, -(bodyRadius - flatCut / 2), bodyZ]}>\n <Cuboid size={[bodyRadius * 2, flatCut, bodyHeight + 0.2]} />\n </Translate>\n </Subtract>\n </Colorize>\n\n <Translate center={leadTipPos1}>\n <Cuboid size={leadTipSize} />\n </Translate>\n <Hull>\n <Translate center={leadMidPosA}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n <Translate center={leadMidPosB}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n </Hull>\n <Translate center={leadTipPos2}>\n <Cuboid size={[leadLength, legWidth, 12.2]} />\n </Translate>\n\n <Translate center={[1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n <Translate center={[-1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT363 = () => {\n const fullWidth = 2\n const bodyWidth = 1.25\n const bodyLength = 2\n const bodyHeight = 1.1\n const leadWidth = 0.25\n const leadThickness = 0.15\n const leadHeight = 0.85\n const padContactLength = 0.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.25),\n y: bodyHeight / 2 + 0.2,\n z: bodyHeight,\n }}\n heightAboveSurface={0.1}\n />\n </>\n )\n}\n\nexport default SOT363\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT886 = () => {\n const bodyWidth = 1.0\n const bodyLength = 1.45\n const bodyHeight = 0.5\n const terminalWidth = 0.2\n const terminalLength = 0.3\n const terminalThickness = 0.05\n const pitch = 0.5\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: terminalThickness }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0}\n includeNotch={false}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT886\n","import { ChipBody } from \"./ChipBody\"\nimport { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOD323 = () => {\n const fullWidth = 2.5\n const bodyLength = 1.25\n\n const bodyWidth = 1.7\n const bodyHeight = 0.95\n\n const leadWidth = 0.3\n const leadThickness = 0.175\n\n const padContactLength = 0.3\n\n const padCenterX = bodyWidth / 2\n\n const bodyDistance = 0.45\n const leadHeight = 0.7\n return (\n <>\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[bodyWidth / 3, bodyLength - 0.075, 0.02]}\n center={[(-padCenterX * 2) / 3 + 0.035, 0, bodyHeight + 0.05]}\n />\n </>\n )\n}\n\nexport default SOD323\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323F = () => {\n const fullWidth = 1.7\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.175\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2\n const rightPadCenterX = fullWidth / 2 + padLength / 2\n\n const taperOffset = 0.2\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323FL = () => {\n const fullWidth = 1.775\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.13\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2 + 0.04\n const rightPadCenterX = fullWidth / 2 + padLength / 2 - 0.04\n\n const taperOffset = 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n width={fullWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: 0, y: 0, z: 0 }}\n heightAboveSurface={0}\n straightHeightRatio={0.7}\n taperRatio={0.06}\n includeNotch={false}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - 0.05, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323FL\n","import { Colorize, Cylinder, Rotate, Sphere, Translate } from \"jscad-fiber\"\n\ninterface AxialCapacitorProps {\n pitch: number\n}\n\nexport const AxialCapacitor = ({ pitch = 10 }: AxialCapacitorProps) => {\n const heightToCenterOfCapacitor = 0.5 + 4 / 2\n\n return (\n <>\n <Cylinder height={4} radius={0.5} center={[-pitch / 2, 0, 0.5]} />\n <Sphere\n radius={0.5}\n center={[-pitch / 2, 0, heightToCenterOfCapacitor]}\n />\n <Translate x={-2.5} y={0} z={heightToCenterOfCapacitor}>\n <Rotate rotation={[0, Math.PI / 2, 0]}>\n <Cylinder\n height={pitch}\n radius={0.5}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n <Colorize color=\"#d2b48c\">\n <Cylinder\n height={5}\n radius={1.3}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n </Colorize>\n </Rotate>\n </Translate>\n <Cylinder height={4} radius={0.5} center={[pitch / 2, 0, 0.5]} />\n <Sphere radius={0.5} center={[pitch / 2, 0, heightToCenterOfCapacitor]} />\n </>\n )\n}\n","import { Colorize, Cuboid, Cylinder, Subtract, Union } from \"jscad-fiber\"\n\nexport const StampBoard = ({\n bodyWidth = 21,\n boardThickness = 0.5,\n leadWidth = 1.6,\n leadLength = 2.4,\n leadsPitch = 2.54,\n leadsLeft,\n leadsRight,\n leadsTop,\n leadsBottom,\n innerHoles = true,\n innerHoleEdgeDistance = 1.61,\n innerHoleDiameter = 1,\n}: {\n bodyWidth?: number\n boardThickness?: number\n leadWidth?: number\n leadLength?: number\n leadsPitch?: number\n leadsLeft?: number\n leadsRight?: number\n leadsTop?: number\n leadsBottom?: number\n innerHoles?: boolean\n innerHoleEdgeDistance?: number\n innerHoleDiameter?: number\n}) => {\n const halfBoardWidth = bodyWidth / 2\n const boardCenterZ = boardThickness / 2\n const boardHeight = boardThickness * 1.05\n const holeRadius = innerHoleDiameter / 2\n const bodyLength =\n Math.max(leadsLeft || 0, leadsRight || 0, leadsTop || 0, leadsBottom || 0) *\n leadsPitch || 51\n\n const pads: { x: number; y: number; pl: number; pw: number }[] = []\n const holes: { x: number; y: number }[] = []\n\n if (leadsRight) {\n const yOffset = -((leadsRight - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsRight; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: halfBoardWidth - leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: halfBoardWidth, y: -y },\n { x: halfBoardWidth - innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsLeft) {\n const yOffset = -((leadsLeft - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsLeft; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: -halfBoardWidth + leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: -halfBoardWidth, y: -y },\n { x: -halfBoardWidth + innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsTop) {\n const xOffset = -((leadsTop - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsTop; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: bodyLength / 2 - leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: bodyLength / 2 },\n { x: -x, y: bodyLength / 2 - innerHoleEdgeDistance },\n )\n }\n }\n }\n\n if (leadsBottom) {\n const xOffset = -((leadsBottom - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsBottom; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: -bodyLength / 2 + leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: -bodyLength / 2 },\n { x: -x, y: -bodyLength / 2 + innerHoleEdgeDistance },\n )\n }\n }\n }\n\n const boardBody = (\n <Colorize color=\"#008080\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ]}\n size={[bodyWidth, bodyLength, boardThickness]}\n />\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n const holePads =\n innerHoles &&\n holes.map((hole, index) => (\n <Cylinder\n key={index}\n color=\"black\"\n center={[hole.x, hole.y, boardCenterZ]}\n radius={holeRadius}\n height={boardThickness * 1.07}\n />\n ))\n\n const rectPads = pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))\n return (\n <>\n {boardBody}\n <Colorize color=\"#FFD700\">\n {innerHoles ? (\n <Subtract>\n <Union>\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Union>\n {holePads}\n </Subtract>\n ) : (\n rectPads\n )}\n </Colorize>\n </>\n )\n}\n\nexport default StampBoard\n","import { Colorize, Cuboid, Subtract, Translate } from \"jscad-fiber\"\n\nexport interface ScreenProps {\n width?: number\n height?: number\n thickness?: number\n bezelInset?: number\n bezelDepth?: number\n screenColor?: string\n bezelColor?: string\n screenWidth?: number\n screenHeight?: number\n offset?: { x?: number; y?: number; z?: number }\n}\n\nexport const Screen = ({\n width = 30,\n height = 22,\n thickness = 1,\n bezelInset = 2,\n bezelDepth = 1,\n screenColor = \"#001414\",\n bezelColor = \"#0f1116\",\n screenWidth,\n screenHeight,\n offset,\n}: ScreenProps) => {\n const w = width\n const h = height\n const stackHeight = Math.max(thickness, 0.4)\n const clampedBezelDepth = Math.max(Math.min(bezelDepth, stackHeight), 0.2)\n const backBlockHeight = Math.max(stackHeight - clampedBezelDepth, 0)\n const inset = Math.max(bezelInset, 0)\n const innerWidth = Math.max(screenWidth ?? w - inset * 2, 2)\n const innerHeight = Math.max(screenHeight ?? h - inset * 2, 2)\n const screenThickness = Math.min(\n Math.max(clampedBezelDepth * 0.6, 0.2),\n clampedBezelDepth,\n )\n const offsetX = offset?.x ?? 0\n const offsetY = offset?.y ?? 0\n const offsetZ = offset?.z ?? 0\n\n return (\n <Translate offset={{ x: offsetX, y: offsetY, z: offsetZ }}>\n {backBlockHeight > 0 && (\n <Colorize color={bezelColor}>\n <Cuboid\n size={[w, h, backBlockHeight]}\n offset={[0, 0, backBlockHeight / 2]}\n />\n </Colorize>\n )}\n\n <Colorize color={bezelColor}>\n <Subtract>\n <Cuboid\n size={[w, h, clampedBezelDepth]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n <Cuboid\n size={[innerWidth, innerHeight, clampedBezelDepth + 0.02]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n </Subtract>\n </Colorize>\n\n <Colorize color={screenColor}>\n <Cuboid\n size={[innerWidth, innerHeight, screenThickness]}\n offset={[0, 0, backBlockHeight + screenThickness / 2]}\n />\n </Colorize>\n </Translate>\n )\n}\n\n// TODO: remove Display alias after downstreams migrate\nexport const Display = Screen\n\nexport default Screen\n","import { Colorize, Cuboid, Cylinder, Subtract } from \"jscad-fiber\"\nimport { PinHeader } from \"./PinHeader\"\nimport { FemaleHeader } from \"./FemaleHeader\"\nimport { Screen } from \"./Screen\"\n\nexport const MountedPcbModule = ({\n numPins = 5,\n rows = 1,\n p = 2.54,\n id = 1.0,\n od = 1.5,\n boardThickness = 1.6,\n width,\n height,\n pinRowSide = \"left\",\n holes = [],\n holeInset = 1.0,\n pinRowHoleEdgeToEdgeDist = 2.0,\n female,\n nopin,\n screen,\n screenWidth,\n screenHeight,\n screenCenterOffsetX,\n screenCenterOffsetY,\n}: {\n numPins?: number\n rows?: number\n p?: number\n id?: number\n od?: number\n boardThickness?: number\n width?: number | string\n height?: number | string\n pinRowSide?: \"left\" | \"right\" | \"top\" | \"bottom\"\n holes?: string[]\n holeInset?: number\n pinRowHoleEdgeToEdgeDist?: number\n female?: boolean\n nopin?: boolean\n screen?: boolean\n screenWidth?: number\n screenHeight?: number\n screenCenterOffsetX?: number\n screenCenterOffsetY?: number\n}) => {\n const showScreen = screen ?? false\n const boardCenterZ = boardThickness / 2\n const numPinsPerRow = Math.ceil(numPins / rows)\n\n // Calculate width and height if not provided\n let calculatedWidth: number\n let calculatedHeight: number\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n calculatedWidth = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedHeight = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n } else {\n calculatedHeight = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedWidth = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n }\n if (numPins === 0) {\n calculatedWidth = 10\n calculatedHeight = 10\n }\n const finalWidth = Number(width ?? calculatedWidth)\n const finalHeight = Number(height ?? calculatedHeight)\n\n // Calculate pin positions\n const pins: { x: number; y: number }[] = []\n let pinStartX = 0\n let pinStartY = 0\n let pinDirectionX = 0\n let pinDirectionY = 0\n let rowDirectionX = 0\n let rowDirectionY = 0\n\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n pinStartX =\n pinRowSide === \"left\"\n ? -finalWidth / 2 + pinRowHoleEdgeToEdgeDist\n : finalWidth / 2 - pinRowHoleEdgeToEdgeDist\n pinStartY = -((numPinsPerRow - 1) / 2) * p\n pinDirectionX = 0\n pinDirectionY = p\n rowDirectionX = pinRowSide === \"left\" ? p : -p\n rowDirectionY = 0\n } else {\n pinStartX = -((numPinsPerRow - 1) / 2) * p\n pinStartY =\n pinRowSide === \"top\"\n ? finalHeight / 2 - pinRowHoleEdgeToEdgeDist\n : -finalHeight / 2 + pinRowHoleEdgeToEdgeDist\n pinDirectionX = p\n pinDirectionY = 0\n rowDirectionX = 0\n rowDirectionY = pinRowSide === \"top\" ? -p : p\n }\n\n let pinNumber = 0\n for (let row = 0; row < rows && pinNumber < numPins; row++) {\n for (let col = 0; col < numPinsPerRow && pinNumber < numPins; col++) {\n const x = pinStartX + col * pinDirectionX + row * rowDirectionX\n const y = pinStartY + col * pinDirectionY + row * rowDirectionY\n pins.push({ x, y })\n pinNumber++\n }\n }\n\n // Calculate hole positions\n const holePositions: { x: number; y: number }[] = []\n if (holes) {\n for (const pos of holes) {\n let hx = 0\n let hy = 0\n if (pos === \"topleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"topright\") {\n hx = finalWidth / 2 - holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"bottomleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"bottomright\") {\n hx = finalWidth / 2 - holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"center\") {\n hx = 0\n hy = 0\n }\n holePositions.push({ x: hx, y: hy })\n }\n }\n // Recreated pin row geometry (local copy to avoid PinRow dependency)\n const pinThickness = 0.63\n const pinBodyHeight = 2\n const longSidePinLength = 6\n const shortSidePinLength = 3\n const boardOffsetZ = nopin || female ? 0 : pinBodyHeight\n const boardTopZ = boardOffsetZ + boardThickness\n // Board body with holes subtracted\n const boardBody = (\n <Colorize color=\"#008080\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ + boardOffsetZ]}\n size={[finalWidth, finalHeight, boardThickness]}\n />\n {holePositions.map((hole, index) => (\n <Cylinder\n key={`hole-${index}`}\n center={[hole.x, hole.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n {pins.map((pin, index) => (\n <Cylinder\n key={`pin-hole-${index}`}\n center={[pin.x, pin.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n // Plated through-holes\n const platedHoles = pins.map((pin, index) => (\n <Colorize key={`pin-${index}`} color=\"#FFD700\">\n <Subtract>\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={id / 2}\n height={boardThickness}\n />\n </Subtract>\n </Colorize>\n ))\n\n const headerPins = pins.map((pin, index) => (\n <PinHeader\n key={`pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={pinBodyHeight}\n flipZ={(z: number) => z}\n />\n ))\n\n const femaleHeaderRow = pins.map((pin, index) => (\n <FemaleHeader\n key={`female-pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n flipZ={(z: number) => -z}\n />\n ))\n\n return (\n <>\n {boardBody}\n {platedHoles}\n {!female && !nopin && headerPins}\n {female && femaleHeaderRow}\n {showScreen && (\n <Screen\n width={screenWidth ?? finalWidth * 0.8}\n height={screenHeight ?? finalHeight * 0.6}\n offset={{\n x: screenCenterOffsetX ?? 0,\n y: screenCenterOffsetY ?? 0,\n z: boardTopZ,\n }}\n />\n )}\n </>\n )\n}\n\nexport default MountedPcbModule\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD723 = () => {\n const fullWidth = 1.4\n const bodyLength = 0.6\n const bodyHeight = 0.5\n\n const padWidth = 0.28\n const padLength = 0.5\n const padThickness = 0.12\n\n const bodyWidth = fullWidth - padLength\n const leftPadCenterX = -bodyWidth / 2 + padLength / 2 - 0.15 // 0.15 is the distance between the pad and the body as datasheet\n const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15 // 0.15 is the distance between the pad and the body as datasheet\n\n // top taper happens only in last quarter\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.24\n\n // Body geometry\n // - straightHeight: the lower (straight) portion of the body\n // - taperOffset: how much smaller the top of the body becomes\n\n return (\n <>\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <Union>\n {/* Straight bottom section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Tapered top quarter */}\n <Hull>\n {/* bottom of taper (same size as straight section top) */}\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n {/* top of taper (smaller) */}\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 6, bodyLength - taperOffset, 0.02]}\n center={[-bodyWidth / 4, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD723\n","import type * as jscadModeling from \"@jscad/modeling\"\n\nimport { Fragment, type VNode } from \"./h\"\nimport {\n Colorize,\n Cube,\n Cuboid,\n Cylinder,\n Sphere,\n Hull,\n Rotate,\n RoundedCuboid,\n Subtract,\n Translate,\n Union,\n Polygon,\n ExtrudeLinear,\n RoundedCylinder,\n type Color,\n} from \"./primitives\"\n\ninterface RenderContext {\n jscad: typeof jscadModeling\n}\n\nexport type ColoredGeom = { geom: any; color?: Color }\nexport type RenderResult = { geometries: ColoredGeom[] }\n\nconst isVNode = (n: any): n is VNode =>\n n && typeof n === \"object\" && \"type\" in n\n\nconst degToRad = (v: number | string | undefined): number => {\n if (typeof v === \"number\") return v\n if (typeof v === \"string\") {\n const m = /^(-?\\d+(?:\\.\\d+)?)\\s*deg$/i.exec(v)\n if (m) return (parseFloat(m[1]!) * Math.PI) / 180\n const n = Number(v)\n if (!Number.isNaN(n)) return n\n }\n return 0\n}\n\nconst toVec3 = (v: any): [number, number, number] => {\n if (Array.isArray(v))\n return [Number(v[0]) || 0, Number(v[1]) || 0, Number(v[2]) || 0]\n if (typeof v === \"object\" && v)\n return [Number(v.x) || 0, Number(v.y) || 0, Number(v.z) || 0]\n return [0, 0, 0]\n}\n\nfunction renderNode(\n node: any,\n colorCtx: Color | undefined,\n renderCtx: RenderContext,\n): ColoredGeom[] {\n const {\n jscad: { primitives, booleans, hulls, geometries, extrusions, transforms },\n } = renderCtx\n if (node == null || node === false) return []\n if (Array.isArray(node))\n return node.flatMap((n) => renderNode(n, colorCtx, renderCtx))\n\n // Already a geometry coming from user? ignore in our case\n if (!isVNode(node)) return []\n\n const { type, props, children } = node\n\n if (type === Fragment) {\n return (children ?? []).flatMap((c) => renderNode(c, colorCtx, renderCtx))\n }\n\n if (type === Colorize) {\n const newColor: Color = props?.color\n return (children ?? []).flatMap((c) =>\n renderNode(c, newColor ?? colorCtx, renderCtx),\n )\n }\n\n if (type === Translate) {\n // accept either `offset`, `center` (array or object), or x/y/z props\n const off = toVec3(\n props?.offset ??\n props?.center ?? { x: props?.x, y: props?.y, z: props?.z },\n )\n const geoms = (children ?? []).flatMap((c) =>\n renderNode(c, colorCtx, renderCtx),\n )\n return geoms.map(({ geom, color }) => ({\n geom: transforms.translate(off as any, geom),\n color: color ?? colorCtx,\n }))\n }\n\n if (type === Rotate) {\n const rot: [number, number, number] = Array.isArray(props?.rotation)\n ? [\n degToRad(props.rotation[0]),\n degToRad(props.rotation[1]),\n degToRad(props.rotation[2]),\n ]\n : [\n degToRad(props?.x ?? 0),\n degToRad(props?.y ?? 0),\n degToRad(props?.z ?? 0),\n ]\n const geoms = (children ?? []).flatMap((c) =>\n renderNode(c, colorCtx, renderCtx),\n )\n return geoms.map(({ geom, color }) => ({\n geom: transforms.rotateZ(\n rot[2],\n transforms.rotateY(rot[1], transforms.rotateX(rot[0], geom)),\n ),\n color,\n }))\n }\n\n if (type === Union || type === Subtract || type === Hull) {\n const geoms = (children ?? [])\n .flatMap((c) => renderNode(c, colorCtx, renderCtx))\n .map((g) => g.geom)\n if (geoms.length === 0) return []\n let geom: any\n if (type === Union) geom = booleans.union(geoms as any)\n else if (type === Subtract)\n geom = booleans.subtract(geoms[0] as any, geoms.slice(1) as any)\n else geom = hulls.hull(geoms as any)\n return [{ geom, color: colorCtx }]\n }\n\n if (type === Polygon) {\n const points: Array<[number, number]> = props?.points ?? []\n const g2 = geometries.geom2.fromPoints(points as any)\n return [{ geom: g2, color: colorCtx ?? props?.color }]\n }\n\n if (type === ExtrudeLinear) {\n const geoms2 = (children ?? [])\n .flatMap((c) => renderNode(c, colorCtx, renderCtx))\n .map((g) => g.geom)\n if (geoms2.length === 0) return []\n const base2 =\n geoms2.length > 1 ? (booleans.union as any)(geoms2) : geoms2[0]\n const height = props?.height ?? props?.h ?? 1\n let g3 = extrusions.extrudeLinear({ height }, base2)\n\n if (g3.polygons) {\n for (const poly of g3.polygons) {\n if (!poly.plane || !poly.vertices || poly.vertices.length < 3) continue\n // The `extrudeLinear` operation have an inverted winding order.\n poly.vertices.reverse()\n }\n }\n\n return [{ geom: g3, color: colorCtx ?? props?.color }]\n }\n\n if (\n type === Cuboid ||\n type === Cube ||\n type === Cylinder ||\n type === Sphere ||\n type === RoundedCuboid ||\n type === RoundedCylinder\n ) {\n let g: any\n if (type === Cuboid) {\n const size = props?.size ?? [1, 1, 1]\n const offset = props?.offset\n const center =\n props?.center ??\n (offset ? [offset[0], offset[1], offset[2]] : [0, 0, 0])\n g = primitives.cuboid({ size, center })\n } else if (type === Cube) {\n const size = props?.size ?? 1\n const offset = props?.offset\n const center =\n props?.center ??\n (offset ? [offset[0], offset[1], offset[2]] : [0, 0, 0])\n g = primitives.cube({ size, center })\n } else if (type === Cylinder) {\n const height = props?.height ?? 1\n const radius = props?.radius ?? 1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.cylinder({ height, radius, center })\n } else if (type === Sphere) {\n const radius = props?.radius ?? 1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.sphere({ radius, center })\n } else if (type === RoundedCylinder) {\n const height = props?.height ?? 1\n const radius = props?.radius ?? 1\n const roundRadius = props?.roundRadius ?? 0.1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.roundedCylinder({ height, radius, roundRadius, center })\n } else {\n const size = props?.size ?? [1, 1, 1]\n const roundRadius = props?.roundRadius ?? 0.1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.roundedCuboid({ size, roundRadius, center })\n }\n return [{ geom: g, color: colorCtx ?? props?.color }]\n }\n\n // Component function: call it and render result\n if (typeof type === \"function\") {\n const out = type(props ?? {})\n return renderNode(out, colorCtx, renderCtx)\n }\n\n // Unknown type -> recurse\n return (children ?? []).flatMap((c) => renderNode(c, colorCtx, renderCtx))\n}\n\nexport function render(root: VNode, jscad: typeof jscadModeling): RenderResult {\n const geometries = renderNode(root, undefined, { jscad })\n return { geometries }\n}\n","import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Matrix4,\n Vector2,\n Vector3,\n} from \"three\"\n\nexport function convertCSGToThreeGeom(csg: any): BufferGeometry {\n if (csg.polygons) {\n // 3D shape\n const vertices = []\n const indices = []\n const colors = []\n let idx = 0\n\n for (const polygon of csg.polygons) {\n for (const vertex of polygon.vertices) {\n vertex.index = idx\n vertices.push(vertex[0], vertex[1], vertex[2])\n // Add color for each vertex\n if (csg.color && csg.color.length >= 3) {\n colors.push(csg.color[0], csg.color[1], csg.color[2])\n } else {\n colors.push(1, 1, 1) // Default to white if no color\n }\n idx++\n }\n const first = polygon.vertices[0].index\n for (let i = 2; i < polygon.vertices.length; i++) {\n const second = polygon.vertices[i - 1].index\n const third = polygon.vertices[i].index\n indices.push(first, second, third)\n }\n }\n\n const geo = new BufferGeometry()\n geo.setAttribute(\n \"position\",\n new BufferAttribute(new Float32Array(vertices), 3),\n )\n geo.setIndex(indices)\n\n // Add color attribute\n if (colors.length > 0) {\n geo.setAttribute(\n \"color\",\n new BufferAttribute(new Float32Array(colors), 3),\n )\n }\n\n if (csg.transforms) {\n const transforms = new Matrix4()\n transforms.fromArray(csg.transforms)\n geo.applyMatrix4(transforms)\n }\n geo.computeVertexNormals()\n\n return geo\n }\n if (csg.sides) {\n // 2D shape\n const vertices = []\n const colors = []\n\n for (const side of csg.sides) {\n vertices.push(side[0][0], side[0][1], 0) // Add z-coordinate as 0\n // Add color for each vertex\n if (csg.color && csg.color.length >= 3) {\n colors.push(csg.color[0], csg.color[1], csg.color[2])\n } else {\n colors.push(1, 1, 1) // Default to white if no color\n }\n }\n\n const geo = new BufferGeometry()\n geo.setAttribute(\n \"position\",\n new BufferAttribute(new Float32Array(vertices), 3),\n )\n\n // Add color attribute\n if (colors.length > 0) {\n geo.setAttribute(\n \"color\",\n new BufferAttribute(new Float32Array(colors), 3),\n )\n }\n\n if (csg.transforms) {\n const transforms = new Matrix4()\n transforms.fromArray(csg.transforms)\n geo.applyMatrix4(transforms)\n }\n\n return geo\n }\n console.error(\"Invalid CSG object: neither polygons nor sides found\")\n return new BufferGeometry()\n}\n","import { ExtrudedPads } from \"../ExtrudedPads\"\nimport { Footprinter3d } from \"../Footprinter3d\"\nimport { Fragment, type VNode, h } from \"./h\"\nimport { type ColoredGeom, type RenderResult, render } from \"./render\"\nexport * from \"./convertCSGToThreeGeom\"\nimport type * as jscadModeling from \"@jscad/modeling\"\n\nexport { h, Fragment }\nexport type { VNode, RenderResult, ColoredGeom }\n\nexport function getJscadModelForFootprint(\n footprint: string,\n jscad: typeof jscadModeling,\n): RenderResult {\n const vnode = h(Footprinter3d, { footprint })\n return render(vnode, jscad)\n}\n\nexport function getJscadModelForFootprintWithPads(\n footprint: string,\n jscad: typeof jscadModeling,\n): RenderResult {\n const vnode = h(\n Fragment,\n {},\n h(Footprinter3d, { footprint }),\n h(ExtrudedPads, { footprint }),\n )\n return render(vnode, jscad)\n}\n\nexport function createJSCADRenderer(jscad: typeof jscadModeling) {\n function createJSCADRoot(container: ColoredGeom[]) {\n return {\n render(element: VNode) {\n const { geometries } = render(element, jscad)\n container.splice(0, container.length, ...geometries)\n },\n }\n }\n\n return { createJSCADRoot }\n}\n"],"mappings":"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","names":["Fragment","Fragment","fp","width","height","heightAboveSurface","width","height","Fragment","height","width","fullLength","Fragment","Fragment","Fragment","fullLength","bodyLength","width","height","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","bodyLength","fullLength","Fragment","width","bodyLength","Fragment","Fragment","h","bodyLength","Fragment","bodyLength","Fragment","fullLength","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","bodyLength","Fragment","Fragment","width","bodyLength","Fragment","fullLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","fullLength","Fragment","bodyLength","Fragment","bodyLength","fullLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","fullLength","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","Fragment","bodyLength","Fragment","width","height","h","width","height","Fragment","bodyLength","Fragment","fp","width","height","height"]}
1
+ {"version":3,"sources":["../lib/vanilla/h.ts","../lib/ExtrudedPads.tsx","../lib/vanilla/primitives.ts","../lib/vanilla/react-shim.ts","../lib/FootprintPad.tsx","../lib/FootprintPlatedHole.tsx","../lib/Footprinter3d.tsx","../lib/ChipBody.tsx","../lib/utils/range.ts","../lib/utils/getExpandedStroke.ts","../lib/DualInlinePackage.tsx","../lib/SmdChipLead.tsx","../lib/Tssop.tsx","../lib/MSOP.tsx","../lib/A0402.tsx","../lib/A0603.tsx","../lib/A0805.tsx","../lib/qfp.tsx","../lib/PinHeader.tsx","../lib/PinRow.tsx","../lib/utils/getQuadCoords.ts","../lib/utils/getQuadPinMap.ts","../lib/qfn.tsx","../lib/SOT-235.tsx","../lib/SOT-23W.tsx","../lib/A0201.tsx","../lib/A01005.tsx","../lib/A1206.tsx","../lib/A1210.tsx","../lib/A2010.tsx","../lib/A2512.tsx","../lib/FemaleHeader.tsx","../lib/FemaleHeaderRow.tsx","../lib/PushButton.tsx","../lib/SOIC.tsx","../lib/VSSOP.tsx","../lib/SOD523.tsx","../lib/SOD882.tsx","../lib/SMA.tsx","../lib/SMB.tsx","../lib/SMC.tsx","../lib/SMF.tsx","../lib/sod-123F.tsx","../lib/sod-123FL.tsx","../lib/sod-123W.tsx","../lib/sod-128.tsx","../lib/SOD-923.tsx","../lib/SOT-223.tsx","../lib/tqfp.tsx","../lib/SOT-323.tsx","../lib/lqfp.tsx","../lib/SOT-723.tsx","../lib/dfn.tsx","../lib/hc49.tsx","../lib/MicroMELF.tsx","../lib/MINIMELF.tsx","../lib/MELF.tsx","../lib/ms012.tsx","../lib/ms013.tsx","../lib/TO220.tsx","../lib/SOT-457.tsx","../lib/SOT-963.tsx","../lib/TO92.tsx","../lib/SOT-363.tsx","../lib/SOT-886.tsx","../lib/sod-323.tsx","../lib/sod-323F.tsx","../lib/sod-323FL.tsx","../lib/AxialCapacitor.tsx","../lib/stampboard.tsx","../lib/Screen.tsx","../lib/MountedPcbModule.tsx","../lib/SOD723.tsx","../lib/vanilla/render.ts","../lib/vanilla/convertCSGToThreeGeom.ts","../lib/vanilla/index.ts"],"sourcesContent":["export type VNode = {\n type: any\n props: Record<string, any>\n children?: any[]\n}\n\nexport const Fragment = Symbol(\"Fragment\")\n\nexport function h(type: any, props: any, ...restChildren: any[]): VNode {\n const provided = restChildren.length\n ? restChildren\n : props?.children !== undefined\n ? [props.children]\n : []\n const flatChildren: any[] = []\n const stack = (Array.isArray(provided) ? provided : [provided]).flat(\n Infinity,\n ) as any[]\n for (const ch of stack) {\n if (ch == null || ch === false) continue\n if (Array.isArray(ch)) flatChildren.push(...ch)\n else flatChildren.push(ch)\n }\n return {\n type,\n props:\n (props && props.children !== undefined\n ? { ...props, children: undefined }\n : props) || {},\n children: flatChildren,\n }\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { fp } from \"@tscircuit/footprinter\"\nimport { FootprintPad } from \"./FootprintPad\"\nimport { FootprintPlatedHole } from \"./FootprintPlatedHole\"\n\nexport const ExtrudedPads = ({\n circuitJson,\n footprint,\n}: { circuitJson?: AnyCircuitElement[]; footprint?: string }) => {\n if (!circuitJson && footprint) {\n circuitJson = fp.string(footprint).circuitJson() as AnyCircuitElement[]\n }\n\n if (!circuitJson)\n throw new Error(\"No circuit json or footprint provided to ExtrudedPads\")\n\n return (\n <>\n {circuitJson\n .filter((s) => s.type === \"pcb_smtpad\")\n .map((pad, i) => {\n const isPin1 = pad.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPad key={i} pad={pad} isPin1={isPin1} />\n )\n })}\n {circuitJson\n .filter((s) => s.type === \"pcb_plated_hole\")\n .map((hole, i) => {\n const isPin1 = hole.port_hints?.includes(\"1\")\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey:\n <FootprintPlatedHole key={i} hole={hole} isPin1={isPin1} />\n )\n })}\n </>\n )\n}\n","export const Cuboid = Symbol(\"Cuboid\")\nexport const Cube = Symbol(\"Cube\")\nexport const Cylinder = Symbol(\"Cylinder\")\nexport const Sphere = Symbol(\"Sphere\")\nexport const RoundedCuboid = Symbol(\"RoundedCuboid\")\n\nexport const Translate = Symbol(\"Translate\")\nexport const Rotate = Symbol(\"Rotate\")\n\nexport const Union = Symbol(\"Union\")\nexport const Subtract = Symbol(\"Subtract\")\nexport const Hull = Symbol(\"Hull\")\n\nexport const Colorize = Symbol(\"Colorize\")\n\nexport const Polygon = Symbol(\"Polygon\")\nexport const ExtrudeLinear = Symbol(\"ExtrudeLinear\")\n\nexport const RoundedCylinder = Symbol(\"RoundedCylinder\")\n\nexport type Color =\n | string\n | [number, number, number]\n | [number, number, number, number]\n","import { h, Fragment as HFragment } from \"./h\"\n\nexport const Fragment = HFragment\nexport const jsx = (type: any, props: any, _key?: any) => h(type, props)\nexport const jsxs = (type: any, props: any, _key?: any) => h(type, props)\n\nexport default { Fragment, jsx, jsxs }\n","import type { PcbSmtPad } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate } from \"jscad-fiber\"\n\nexport const FootprintPad = ({\n pad,\n isPin1,\n}: { pad: PcbSmtPad; isPin1?: boolean }) => {\n if (pad.shape === \"rect\") {\n const color: [number, number, number] = isPin1 ? [0, 255, 0] : [255, 0, 0]\n return (\n <Colorize color={color}>\n <Translate offset={[pad.x, pad.y, -0.005]}>\n <Cuboid size={[pad.width, pad.height, 0.01]} />\n </Translate>\n </Colorize>\n )\n } else {\n throw new Error(\"Shape not supported: \" + pad.shape)\n }\n}\n","import type { PcbPlatedHole } from \"circuit-json\"\nimport { Colorize, Cuboid, Translate, Cylinder, Subtract } from \"jscad-fiber\"\n\nexport const FootprintPlatedHole = ({\n hole,\n isPin1,\n}: { hole: PcbPlatedHole; isPin1?: boolean }) => {\n const color = isPin1 ? \"#00ff00\" : \"#b87333\"\n\n if (hole.shape === \"circle\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, -0.005]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cylinder radius={hole.outer_diameter / 2} height={0.01} />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n if (hole.shape === \"circular_hole_with_rect_pad\") {\n return (\n <Colorize color={color}>\n <Translate offset={[hole.x, hole.y, 0]}>\n {/* <Rotate axis=\"z\" angle={90}> */}\n <Subtract>\n <Cuboid\n size={[hole.rect_pad_width, hole.rect_pad_width, 0.01]}\n center={[0, 0, 0]}\n />\n <Cylinder radius={hole.hole_diameter / 2} height={0.01} />\n </Subtract>\n {/* </Rotate> */}\n </Translate>\n </Colorize>\n )\n }\n throw new Error(\"Shape not supported: \" + hole.shape)\n}\n","import { fp } from \"@tscircuit/footprinter\"\nimport { Dip } from \"./DualInlinePackage\"\nimport { Tssop } from \"./Tssop\"\nimport { MSOP } from \"./MSOP\"\nimport { A0402 } from \"./A0402\"\nimport { A0603 } from \"./A0603\"\nimport { A0805 } from \"./A0805\"\nimport { QFP } from \"./qfp\"\nimport { PinRow } from \"./PinRow\"\nimport QFN from \"./qfn\"\nimport SOT235 from \"./SOT-235\"\nimport { SOT23W } from \"./SOT-23W\"\nimport { A0201 } from \"./A0201\"\nimport { A01005 } from \"./A01005\"\nimport { A1206 } from \"./A1206\"\nimport { A1210 } from \"./A1210\"\nimport { A2010 } from \"./A2010\"\nimport { A2512 } from \"./A2512\"\nimport { FemaleHeaderRow } from \"./FemaleHeaderRow\"\nimport { PushButton } from \"./PushButton\"\nimport { SOIC } from \"./SOIC\"\nimport { VSSOP } from \"./VSSOP\"\nimport { SOD523 } from \"./SOD523\"\nimport { SOD882 } from \"./SOD882\"\nimport { SMA } from \"./SMA\"\nimport { SMB } from \"./SMB\"\nimport { SMC } from \"./SMC\"\nimport { SMF } from \"./SMF\"\nimport { SOD123F } from \"./sod-123F\"\nimport { SOD123FL } from \"./sod-123FL\"\nimport { SOD123W } from \"./sod-123W\"\nimport { SOD128 } from \"./sod-128\"\nimport { SOD923 } from \"./SOD-923\"\nimport { SOT223 } from \"./SOT-223\"\nimport TQFP from \"./tqfp\"\nimport { SOT323 } from \"./SOT-323\"\nimport { LQFP } from \"./lqfp\"\nimport { SOT723 } from \"./SOT-723\"\nimport { DFN } from \"./dfn\"\nimport { HC49 } from \"./hc49\"\nimport { MicroMELF } from \"./MicroMELF\"\nimport { MINIMELF } from \"./MINIMELF\"\nimport { MELF } from \"./MELF\"\nimport { MS012 } from \"./ms012\"\nimport { MS013 } from \"./ms013\"\nimport { TO220 } from \"./TO220\"\nimport { SOT457 } from \"./SOT-457\"\nimport { SOT963 } from \"./SOT-963\"\nimport { TO92 } from \"./TO92\"\nimport SOT363 from \"./SOT-363\"\nimport { SOT886 } from \"./SOT-886\"\nimport { SOD323 } from \"./sod-323\"\nimport { SOD323F } from \"./sod-323F\"\nimport { SOD323FL } from \"./sod-323FL\"\nimport { AxialCapacitor } from \"./AxialCapacitor\"\nimport { StampBoard } from \"./stampboard\"\nimport { MountedPcbModule } from \"./MountedPcbModule\"\nimport SOD723 from \"./SOD723\"\n\n/**\n * Outputs a 3d model for any [footprinter string](https://github.com/tscircuit/footprinter)\n */\n\nexport const Footprinter3d = ({ footprint }: { footprint: string }) => {\n const fpJson = fp.string(footprint).json() as unknown as {\n w: number\n p: number\n h: number\n pl: number\n pw: number\n num_pins: number\n fn: string\n thermalpad?: { x: number; y: number }\n imperial: String\n male: boolean\n female: boolean\n id: number //innerDiameter\n od: number //outerDiameter\n invert?: boolean\n faceup?: boolean\n smd?: boolean\n surface_mount?: boolean\n rightangle?: boolean\n left?: number\n right?: number\n top?: number\n bottom?: number\n innerhole?: boolean\n innerholeedgedistance?: number\n nopin?: boolean\n screen?: boolean\n screenwidth?: number\n screenheight?: number\n screencenteroffsetx?: number\n screencenteroffsety?: number\n }\n\n switch (fpJson.fn) {\n case \"dip\":\n return (\n <Dip numPins={fpJson.num_pins} pitch={fpJson.p} bodyWidth={fpJson.w} />\n )\n case \"axial\":\n return <AxialCapacitor pitch={fpJson.p} />\n case \"tssop\":\n return (\n <Tssop\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"msop\":\n return (\n <MSOP\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"vssop\":\n return (\n <VSSOP\n pinCount={fpJson.num_pins as 8 | 10}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n />\n )\n case \"qfp\":\n return (\n <QFP\n pinCount={fpJson.num_pins}\n pitch={fpJson.p}\n leadWidth={fpJson.pw}\n padContactLength={fpJson.pl}\n bodyWidth={fpJson.w}\n />\n )\n case \"tqfp\":\n return <TQFP />\n case \"lqfp\":\n return <LQFP pinCount={fpJson.num_pins} />\n case \"qfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <QFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"dfn\": {\n const hasThermalPad =\n typeof fpJson.thermalpad?.x === \"number\" &&\n typeof fpJson.thermalpad?.y === \"number\"\n return (\n <DFN\n num_pins={fpJson.num_pins}\n bodyWidth={fpJson.w}\n bodyLength={fpJson.h}\n pitch={fpJson.p}\n padLength={fpJson.pl}\n padWidth={fpJson.pw}\n thermalPadSize={\n hasThermalPad\n ? {\n width: fpJson.thermalpad!.x,\n length: fpJson.thermalpad!.y,\n }\n : undefined\n }\n />\n )\n }\n\n case \"pinrow\": {\n // Parse rows parameter from footprint string (e.g., \"pinrow4_rows2\")\n const rowsMatch = footprint.match(/_rows(\\d+)/)\n const rows = rowsMatch && rowsMatch[1] ? parseInt(rowsMatch[1], 10) : 1\n\n if (fpJson.male)\n return (\n <PinRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n invert={fpJson.invert}\n faceup={fpJson.faceup}\n rows={rows}\n smd={fpJson.smd || fpJson.surface_mount}\n rightangle={fpJson.rightangle}\n />\n )\n if (fpJson.female)\n return (\n <FemaleHeaderRow\n numberOfPins={fpJson.num_pins}\n pitch={fpJson.p}\n rows={rows}\n />\n )\n }\n\n case \"cap\": {\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color=\"#856c4d\" />\n case \"0603\":\n return <A0603 color=\"#856c4d\" />\n case \"0805\":\n return <A0805 color=\"#856c4d\" />\n case \"0201\":\n return <A0201 color=\"#856c4d\" />\n case \"01005\":\n return <A01005 color=\"#856c4d\" />\n case \"1206\":\n return <A1206 color=\"#856c4d\" />\n case \"1210\":\n return <A1210 color=\"#856c4d\" />\n case \"2010\":\n return <A2010 color=\"#856c4d\" />\n case \"2512\":\n return <A2512 color=\"#856c4d\" />\n }\n }\n case \"sot235\":\n return <SOT235 />\n case \"sot457\":\n return <SOT457 />\n case \"sot223\":\n return <SOT223 />\n case \"sot23w\":\n return <SOT23W />\n case \"sot323\":\n return <SOT323 />\n case \"sod323f\":\n return <SOD323F />\n case \"sod323fl\":\n return <SOD323FL />\n case \"sot363\":\n return <SOT363 />\n case \"sot886\":\n return <SOT886 />\n case \"sot963\":\n return <SOT963 />\n case \"pushbutton\":\n return (\n <PushButton\n width={fpJson.w}\n length={fpJson.h}\n innerDiameter={fpJson.id}\n />\n )\n case \"soic\":\n return (\n <SOIC\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"sod523\":\n return <SOD523 />\n case \"sod723\":\n return <SOD723 />\n case \"sod882\":\n return <SOD882 />\n case \"sma\":\n return <SMA />\n case \"smb\":\n return <SMB />\n case \"smc\":\n return <SMC />\n case \"smf\":\n return <SMF />\n case \"sod123f\":\n return <SOD123F />\n case \"sod123fl\":\n return <SOD123FL />\n case \"sod123w\":\n return <SOD123W />\n case \"sod128\":\n return <SOD128 />\n case \"sod323\":\n return <SOD323 />\n case \"sod923\":\n return <SOD923 />\n case \"hc49\":\n return <HC49 />\n case \"micromelf\":\n return <MicroMELF />\n case \"minimelf\":\n return <MINIMELF />\n case \"melf\":\n return <MELF />\n case \"ms012\":\n return (\n <MS012\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"ms013\":\n return (\n <MS013\n pinCount={fpJson.num_pins}\n padContactLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n />\n )\n case \"sot723\":\n return <SOT723 />\n case \"to220\":\n return <TO220 />\n case \"to92\":\n return <TO92 />\n case \"stampboard\":\n case \"stampreceiver\":\n return (\n <StampBoard\n bodyWidth={fpJson.w}\n leadsLeft={fpJson.left}\n leadsRight={fpJson.right}\n leadsTop={fpJson.top}\n leadsBottom={fpJson.bottom}\n leadsPitch={fpJson.p}\n leadWidth={fpJson.pw}\n leadLength={fpJson.pl}\n innerHoles={fpJson.innerhole}\n innerHoleEdgeDistance={fpJson.innerholeedgedistance}\n />\n )\n case \"mountedpcbmodule\": {\n const rows = (fpJson as any).rows ?? 1\n const pinRowSide = (fpJson as any).pinRowSide ?? \"left\"\n const holeInset = (fpJson as any).holeInset\n const width = (fpJson as any).width\n const height = (fpJson as any).height\n const pinRow = (fpJson as any).pinrow\n const pinRowHoleEdgeToEdgeDist = (fpJson as any).pinRowHoleEdgeToEdgeDist\n const holes = Array.isArray((fpJson as any).holes)\n ? (fpJson as any).holes\n : []\n\n return (\n <MountedPcbModule\n numPins={pinRow}\n rows={rows}\n p={fpJson.p}\n id={fpJson.id}\n od={fpJson.od}\n width={width}\n height={height}\n pinRowSide={pinRowSide}\n holes={holes}\n holeInset={holeInset}\n pinRowHoleEdgeToEdgeDist={pinRowHoleEdgeToEdgeDist}\n nopin={fpJson.nopin}\n female={fpJson.female}\n screen={fpJson.screen}\n screenWidth={fpJson.screenwidth}\n screenHeight={fpJson.screenheight}\n screenCenterOffsetX={fpJson.screencenteroffsetx}\n screenCenterOffsetY={fpJson.screencenteroffsety}\n />\n )\n }\n }\n\n const colorMatch = footprint.match(/_color\\(([^)]+)\\)/)\n const color = colorMatch ? colorMatch[1] : undefined\n\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color={color} />\n case \"0603\":\n return <A0603 color={color} />\n case \"0805\":\n return <A0805 color={color} />\n case \"0201\":\n return <A0201 color={color} />\n case \"01005\":\n return <A01005 color={color} />\n case \"1206\":\n return <A1206 color={color} />\n case \"1210\":\n return <A1210 color={color} />\n case \"2010\":\n return <A2010 color={color} />\n case \"2512\":\n return <A2512 color={color} />\n }\n return null\n}\n","import {\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","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 { Polygon, ExtrudeLinear, Rotate, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nimport { range } from \"./utils/range\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\n// DIP components look like this:\n// https://github.com/nophead/NopSCADlib/raw/master/tests/png/dip.png\n\n// M 20 105 L 20 109 L 20 102 L 26 102 L 26 109 L 24 111 L 24 118 L 22 118 L 22 111 L 20 109\n\nconst normalizeOnY = (points: { x: number; y: number }[]) => {\n const minX = Math.min(...points.map((p) => p.x))\n const maxX = Math.max(...points.map((p) => p.x))\n const minY = Math.min(...points.map((p) => p.y))\n const maxY = Math.max(...points.map((p) => p.y))\n const height = maxY - minY\n const factor = 5.47 / height\n return points.map((p) => ({\n x: (p.x - minX - (maxX - minX) / 2) * factor,\n y: (p.y - minY) * factor,\n }))\n}\n\nconst svgPathPoints = normalizeOnY([\n { x: 20, y: 105 },\n { x: 20, y: 109 },\n { x: 20, y: 102 },\n { x: 26, y: 102 },\n { x: 26, y: 109 },\n { x: 24, y: 111 },\n { x: 24, y: 118 },\n { x: 22, y: 118 },\n { x: 22, y: 111 },\n { x: 20, y: 109 },\n])\n\nconst DIP_PIN_HEIGHT = 5.47\nconst heightAboveSurface = 0.5\n\nexport const DipPinLeg = ({ x, y, z }: { x: number; y: number; z: number }) => {\n const isRotated = x > 0\n return (\n <>\n <Translate offset={{ x: x + 0.25 / 2, y, z: z }}>\n <Rotate rotation={[\"-90deg\", 0, \"90deg\"]}>\n <ExtrudeLinear height={0.25}>\n <Polygon\n points={svgPathPoints\n .slice()\n .reverse()\n .map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n <Translate\n offset={{\n x: x,\n y: y + (isRotated ? 1 : -1),\n z: z,\n }}\n >\n <Rotate rotation={[\"-90deg\", \"90deg\", isRotated ? \"180deg\" : \"0deg\"]}>\n <ExtrudeLinear height={2}>\n <Polygon\n points={getExpandedStroke(\n [\n [0, 0],\n [-1, 0],\n [-1, -1],\n ],\n 0.25,\n ).map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </>\n )\n}\n\nexport const Dip = ({\n numPins = 8,\n pitch = 2.54,\n bodyWidth = 6.4,\n rowSpacing,\n}: {\n numPins?: number\n pitch?: number\n bodyWidth?: number\n rowSpacing?: number\n}) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n\n const pinRowSpacing =\n rowSpacing ?? (bodyWidth >= 7 ? bodyWidth : bodyWidth + 1.22)\n\n const chipBodyWidth = bodyWidth >= 7 ? pinRowSpacing - 1.22 : bodyWidth\n\n return (\n <>\n {range(numPins).map((i) => {\n const yRow = i % numPinsOnEachSide\n const xRow = (Math.floor(i / numPinsOnEachSide) - 0.5) * 2\n\n return (\n <DipPinLeg\n key={i}\n x={(xRow * pinRowSpacing) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={chipBodyWidth}\n length={numPinsOnEachSide * pitch + 0.5}\n height={DIP_PIN_HEIGHT - heightAboveSurface}\n heightAboveSurface={heightAboveSurface}\n center={{ x: 0, y: 0, z: heightAboveSurface }}\n />\n </>\n )\n}\n\nexport const DualInlinePackage = Dip\n","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 { 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 { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const QFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n\n // get default values if not specified\n if (!pitch) pitch = getPitch(pinCount, bodyWidth)\n if (!padContactLength) padContactLength = getPadContactLength(pinCount)\n if (!leadWidth) leadWidth = getLeadWidth(pinCount, bodyWidth)\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.15\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.5\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.4,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.4,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n taperRatio={0.03}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyWidth / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n// Helper functions to determine default values based on pinCount and width of QFP as footprinter repo\nconst getPitch = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.8\n case 52:\n return width === 14 ? 1 : 0.65\n case 208:\n return 0.5\n default:\n return 0.5\n }\n}\n\nconst getPadContactLength = (pinCount: number): number => {\n switch (pinCount) {\n case 32:\n return 0.6\n case 40:\n return 0.6\n case 52:\n case 64:\n return 0.65\n case 208:\n return 1.65\n default:\n return 0.6\n }\n}\n\nconst getLeadWidth = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.5\n case 52:\n return width === 14 ? 0.45 : 0.55\n case 208:\n return 0.3\n default:\n return 0.25\n }\n}\nexport default QFP\n","import { Colorize, Cuboid, Hull, Rotate, Translate } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const PinHeader = ({\n x,\n y,\n pinThickness,\n shortSidePinLength,\n longSidePinLength,\n bodyHeight,\n bodyLength = 2.54,\n bodyWidth = 2.54,\n flipZ,\n faceup,\n smd,\n rightangle,\n}: {\n x: number\n y: number\n pinThickness: number\n shortSidePinLength: number\n longSidePinLength: number\n bodyHeight: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n faceup?: boolean\n smd?: boolean\n rightangle?: boolean\n}) => {\n return (\n <>\n <Translate y={rightangle ? -3 : 0}>\n <Cuboid\n color=\"#222\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(bodyHeight / 2)]}\n />\n </Translate>\n {!faceup && (\n <Colorize color=\"gold\">\n {smd ? (\n <SmdChipLead\n rotation={-Math.PI / 2}\n position={{\n x: x,\n y: y + 1,\n z: pinThickness / 2,\n }}\n thickness={pinThickness}\n width={pinThickness}\n height={pinThickness}\n padContactLength={2}\n bodyDistance={3}\n />\n ) : (\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[x, y, flipZ(bodyHeight * 0.9 + bodyHeight / 2)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[x, y, flipZ(bodyHeight + bodyHeight / 2)]}\n />\n </Hull>\n )}\n </Colorize>\n )}\n\n <Colorize color=\"gold\">\n <Translate y={rightangle ? -3.9 : 0} z={rightangle ? 1 : 0}>\n <Rotate rotation={rightangle ? [-Math.PI / 2, 0, 0] : [0, 0, 0]}>\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[x, y, flipZ((-longSidePinLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n longSidePinLength,\n ]}\n center={[x, y, flipZ(-longSidePinLength / 2)]}\n />\n </Hull>\n </Rotate>\n </Translate>\n </Colorize>\n </>\n )\n}\n","import { PinHeader } from \"./PinHeader\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n invert,\n faceup,\n rows = 1,\n smd,\n rightangle,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n invert?: boolean\n faceup?: boolean\n rows?: number\n smd?: boolean\n rightangle?: boolean\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const shortSidePinLength = 3\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n const zOffset = !smd && !rightangle ? -bodyHeight - 1.6 : 0\n // Flip Z coordinates if invert is true\n const flipZ = (z: number) =>\n (invert || faceup ? -z + bodyHeight : z) + zOffset\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <PinHeader\n key={i}\n x={x}\n y={y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={bodyHeight}\n flipZ={flipZ}\n faceup={faceup}\n smd={smd}\n rightangle={rightangle}\n />\n )\n })}\n </>\n )\n}\n","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 { 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","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 } 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 = 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 = 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 { Colorize, Cuboid, Cylinder, Hull, Subtract } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n x,\n y,\n z = 0,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n bodyHeight = 5,\n bodyLength = pitch,\n bodyWidth = pitch,\n flipZ,\n}: {\n x: number\n y: number\n z?: number\n pitch?: number\n legsLength?: number\n innerDiameter?: number\n bodyHeight?: number\n bodyLength?: number\n bodyWidth?: number\n flipZ: (z: number) => number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const gapWidth = pinThickness * 1.6\n\n return (\n <>\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyLength, bodyWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n {innerDiameter ? (\n <Cylinder\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[x, y, flipZ(z + bodyHeight / 2)]}\n />\n )}\n </Subtract>\n </Colorize>\n <Colorize color=\"silver\">\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[x, y, flipZ(z + (-legsLength / 2) * 0.9)]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[x, y, flipZ(z + -legsLength / 2)]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[x, y, flipZ(z + (gapWidth / 2) * 0.5)]}\n />\n </Colorize>\n </>\n )\n}\n","import { FemaleHeader } from \"./FemaleHeader\"\n\nexport const FemaleHeaderRow = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n innerDiameter = 0.945,\n rows = 1,\n invert,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n rows?: number\n invert?: boolean\n}) => {\n const bodyHeight = 5\n const pinsPerRow = Math.ceil(numberOfPins / rows)\n const rowSpacing = 2.54 // Standard spacing between rows\n const xoff = -((pinsPerRow - 1) / 2) * pitch\n\n // Flip Z for inversion\n const flipZ = (z: number) => (invert ? -z + bodyHeight : z)\n\n return (\n <>\n {Array.from({ length: numberOfPins }, (_, i) => {\n const row = Math.floor(i / pinsPerRow)\n const col = i % pinsPerRow\n const x = xoff + col * pitch\n const y = -row * rowSpacing\n\n return (\n <FemaleHeader\n key={i}\n x={x}\n y={y}\n pitch={pitch}\n legsLength={legsLength}\n innerDiameter={innerDiameter}\n flipZ={flipZ}\n />\n )\n })}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n ExtrudeLinear,\n Polygon,\n Rotate,\n RoundedCuboid,\n Translate,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport const PushButton = ({\n width,\n length,\n innerDiameter = 1,\n}: { width: number; length: number; innerDiameter?: number }) => {\n const bodyWidth = width\n const bodyLength = length\n const bodyHeight = width * 0.7\n const legWidth = innerDiameter / 2.5\n return (\n <>\n <RoundedCuboid\n color=\"#1a1a1f\"\n center={[0, 0, bodyHeight / 2]}\n size={[bodyLength, bodyLength, bodyHeight]}\n roundRadius={0.3}\n />\n <RoundedCuboid\n color=\"#f2f2f2\"\n center={[0, 0, bodyHeight + (bodyHeight * 0.1) / 2.5]}\n size={[bodyLength, bodyLength, bodyHeight * 0.1]}\n roundRadius={0.14}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.8}\n radius={bodyWidth / 3}\n center={[0, 0, bodyHeight + (bodyHeight * 0.8) / 2]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{ x: bodyWidth / 2, y: bodyLength / 2, z: -bodyHeight * 1.2 }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: bodyWidth / 2 + innerDiameter / 3.6,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n </>\n )\n}\nexport interface PushButtonLegProps {\n thickness: number\n width: number\n horizontalLength: number\n verticalLength: number\n rotation?: number\n position?: { x: number; y: number; z?: number }\n}\n\nexport const PushButtonLeg = (props: PushButtonLegProps) => {\n const {\n thickness,\n width,\n horizontalLength,\n verticalLength,\n rotation = 0,\n position,\n } = props\n const points: [number, number][] = [\n [0, horizontalLength],\n [-verticalLength / 3, horizontalLength / 3],\n [-verticalLength / 5, horizontalLength / 4],\n [0, 0],\n ]\n const polygon = getExpandedStroke(points, thickness)\n\n return (\n <Colorize color=\"#f2f2f2\">\n <Translate\n offset={{\n x: position?.x || 0,\n y: position?.y || 0,\n z: position?.z || 0,\n }}\n >\n <Rotate rotation={[0, 55, rotation]}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.y, p.x])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// SOIC typical body and lead dimensions\nexport const SOIC = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n const bodyHeight = 1.0\n const leadHeight = 0.8\n const leadBodyOffset = leadLength * 0\n const fullLength = pitch * (sidePinCount - 1) + leadWidth + 0.2\n const bodyWidthAdjusted = bodyWidth * 0.55\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.3}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidthAdjusted}\n length={fullLength}\n height={bodyHeight}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const VSSOP = ({\n pinCount,\n pitch,\n leadWidth,\n leadLength,\n bodyWidth,\n bodyLength,\n}: {\n pinCount: 8 | 10\n pitch?: number\n leadWidth?: number\n leadLength?: number\n bodyWidth?: number\n bodyLength?: number\n}) => {\n const defaults =\n pinCount === 8\n ? {\n pitch: 0.65,\n leadWidth: 0.3,\n leadLength: 1.6,\n }\n : {\n pitch: 0.5,\n leadWidth: 0.225,\n leadLength: 1.45,\n }\n\n const _pitch = !isNaN(parseFloat(pitch as any))\n ? parseFloat(pitch as any)\n : defaults.pitch\n const _leadWidth = !isNaN(parseFloat(leadWidth as any))\n ? parseFloat(leadWidth as any) * 0.8\n : defaults.leadWidth\n const _leadLength = !isNaN(parseFloat(leadLength as any))\n ? parseFloat(leadLength as any)\n : defaults.leadLength\n const _bodyWidth = !isNaN(parseFloat(bodyWidth as any))\n ? parseFloat(bodyWidth as any) * 0.8\n : 2.6\n const _bodyLength = !isNaN(parseFloat(bodyLength as any))\n ? parseFloat(bodyLength as any)\n : 2.0 + Number(_pitch) * 1.4\n\n const sidePinCount = pinCount / 2\n const pinOffsetToCenter = ((sidePinCount - 1) * _pitch) / 2\n const leadThickness = 0.15\n const leadHeight = 0.8\n\n const componentFullWidth = 4.5\n const leadBodyDistance = (componentFullWidth - _bodyWidth) / 2\n\n const padContactLength = leadBodyDistance * 0.5\n\n return (\n <>\n {/* Left leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n {/* Right leads - positioned at the tip, drawn inwards */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: componentFullWidth / 2,\n y: pinOffsetToCenter - i * _pitch,\n z: leadThickness / 2,\n }}\n width={_leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength + 0.05}\n bodyDistance={leadBodyDistance + 0.1}\n height={leadHeight}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={_bodyWidth}\n length={_bodyLength}\n height={1.0}\n />\n </>\n )\n}\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD523 = () => {\n const fullWidth = 2.15\n const bodyLength = 0.8\n const bodyHeight = 0.6\n\n const padWidth = 0.6\n const padLength = 0.5\n const padThickness = 0.12\n\n const bodyWidth = fullWidth - padLength\n const leftPadCenterX = -bodyWidth / 2 + padLength / 2 - 0.15 // 0.15 is the distance between the pad and the body as datasheet\n const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15 // 0.15 is the distance between the pad and the body as datasheet\n\n // top taper happens only in last quarter\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n // Body geometry\n // - straightHeight: the lower (straight) portion of the body\n // - taperOffset: how much smaller the top of the body becomes\n\n return (\n <>\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <Union>\n {/* Straight bottom section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Tapered top quarter */}\n <Hull>\n {/* bottom of taper (same size as straight section top) */}\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n {/* top of taper (smaller) */}\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD523\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD882 = () => {\n const bodyLength = 0.98\n const bodyHeight = 0.47\n const pitch = 0.65\n\n const padWidth = 0.51\n const padLength = 0.26\n const padThickness = 0.12\n\n const bodyWidth = 0.58\n const leftPadCenterX = -pitch / 2\n const rightPadCenterX = pitch / 2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Translate z={bodyHeight / 2 + 0.02}>\n <Cuboid size={[bodyLength, bodyWidth, bodyHeight]} />\n </Translate>\n </Colorize>\n\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, padLength / 2, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[bodyLength + 0.001, padLength / 2, padLength / 4]}\n center={[0, -padLength / 2, bodyHeight / 4]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[pitch / 2, 0, bodyHeight / 4]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength / 1.5, bodyWidth + 0.001, padLength / 4]}\n center={[-pitch / 2, 0, bodyHeight / 4]}\n />\n </>\n )\n}\n\nexport default SOD882\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMA = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMA\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMB = () => {\n const bodyWidth = 4.4\n const bodyLength = 3.4\n const bodyHeight = 2.3\n const padWidth = 1.45\n const padThickness = 0.12\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMB\n","import { Cuboid, Colorize, Union, Hull, Translate } from \"jscad-fiber\"\n\nexport const SMC = () => {\n const bodyWidth = 6.8\n const bodyLength = 6\n const bodyHeight = 2.3\n const padWidth = 2.95\n const padThickness = 0.2 // the cad model above of bottom\n\n const leadThickness = 0.2\n const leadHeight = 1.14\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Union>\n <Hull>\n <Translate z={padThickness + 0.01}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.03]}\n />\n </Translate>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n </Hull>\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n const Lead = ({ xDir }: { xDir: number }) => {\n const verticalGap = 1\n const lowerPadGap = 1\n const lowerPadX =\n xDir * (bodyLength / 2 - (bodyHeight * 0.8) / 2 + lowerPadGap)\n const verticalLeadX =\n xDir * (bodyLength / 2 - leadThickness / 2 + verticalGap)\n const bodyEdgeX = xDir * (bodyLength / 2 - leadThickness / 2)\n const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX)\n const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2\n\n return (\n <Colorize color=\"#c0c0c0\">\n <Union>\n <Cuboid\n size={[bodyHeight * 0.8, padWidth, leadThickness]}\n center={[lowerPadX, 0, leadThickness / 2]}\n />\n <Cuboid\n size={[leadThickness, padWidth, leadHeight]}\n center={[verticalLeadX, 0, leadHeight / 2 + leadThickness]}\n />\n <Cuboid\n size={[bridgeLength, padWidth, leadThickness]}\n center={[bridgeCenterX, 0, leadThickness / 2 + leadHeight]}\n />\n </Union>\n </Colorize>\n )\n }\n\n return (\n <>\n <Lead xDir={1} />\n <Lead xDir={-1} />\n {Body}\n </>\n )\n}\n\nexport default SMC\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SMF = () => {\n const fullWidth = 2.9\n const bodyLength = 1.9\n const bodyHeight = 1.08\n\n const padWidth = 1.2\n const padLength = 1\n const padThickness = 0.25\n\n const bodyWidth = fullWidth\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n const Body = (\n <Colorize color=\"#222\">\n <Union>\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n )\n\n return (\n <>\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {Body}\n </>\n )\n}\n\nexport default SMF\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123F = () => {\n const fullWidth = 2.7\n const bodyLength = 1.6\n const bodyHeight = 1.1\n\n const padWidth = 0.6\n const padLength = 1\n const padThickness = 0.12\n\n const leftPadCenterX = -1.3\n const rightPadCenterX = 1.3\n\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.5\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD123F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123FL = () => {\n const fullWidth = 2.75\n const bodyLength = 1.8\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 1\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness, bodyLength - taperOffset, 0.01]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123FL\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD123W = () => {\n const fullWidth = 2.6\n const bodyLength = 1.7\n\n const bodyHeight = 1\n\n const padWidth = 0.9\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.1\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD123W\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD128 = () => {\n const fullWidth = 3.8\n const bodyLength = 2.5\n\n const bodyHeight = 1\n\n const padWidth = 1.75\n const padLength = 0.9\n const padThickness = 0.2\n\n const leftPadCenterX = -(fullWidth / 2 - 0.075)\n const rightPadCenterX = fullWidth / 2 - 0.075\n\n const taperOffset = 0.4\n const lowerTaperOffset = 0.05\n const straightHeight = bodyHeight * 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset / 2,\n bodyLength - lowerTaperOffset / 2,\n 0.01,\n ]}\n />\n </Translate>\n <Translate z={0.01}>\n <Cuboid\n size={[\n fullWidth - lowerTaperOffset,\n bodyLength - lowerTaperOffset,\n 0.01,\n ]}\n />\n </Translate>\n </Hull>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[padThickness * 2.7, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD128\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD923 = () => {\n const fullWidth = 0.8\n const bodyLength = 0.6\n\n const bodyHeight = 0.37\n\n const padWidth = 0.25\n const padLength = 0.4\n const padThickness = 0.14\n\n const leftPadCenterX = -(fullWidth / 2)\n const rightPadCenterX = fullWidth / 2\n\n const taperOffset = 0.1\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n </>\n )\n}\n\nexport default SOD923\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT223 = () => {\n const fullWidth = 6.6\n const bodyWidth = 3.5\n const bodyLength = 6.5\n const bodyHeight = 1.7\n const leadWidth = 0.7\n const leftLeadWidth = 3\n const leadThickness = 0.25\n const leadHeight = 0.75\n const padContactLength = 0.5\n const padPitch = 2.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leftLeadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.45}\n />\n </>\n )\n}\n\nexport default SOT223\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const TQFP = () => {\n const pinCount = 64\n const pitch = 0.5\n const leadWidth = 0.2\n const padContactLength = 0.45\n const bodyWidth = 9\n const sidePinCount = pinCount / 4\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 2 * padContactLength + 0.6\n const fullWidth = fullLength\n const leadHeight = 0.65\n const leadThickness = 0.25\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.2\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.2}\n chamferSize={0.7}\n taperRatio={0.05}\n notchPosition={{ x: -3.5, y: 3.5, z: 1.2 }}\n notchRadius={1.2 / 2}\n />\n </>\n )\n}\n\nexport default TQFP\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT323 = () => {\n const fullWidth = 2.05\n const bodyWidth = 1.25\n const bodyLength = 2.0\n const bodyHeight = 0.9\n const leadWidth = 0.3\n const leadThickness = 0.18\n const leadHeight = 0.65\n const padContactLength = 0.2\n const padPitch = 0.65\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Lead on the right side (pin 1) */}\n <SmdChipLead\n key={4}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </>\n )\n}\n\nexport default SOT323\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const LQFP = ({\n pinCount,\n pitch,\n leadWidth,\n padContactLength,\n bodyWidth,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n bodyWidth?: number\n}) => {\n const sidePinCount = pinCount / 4\n if (sidePinCount !== Math.floor(sidePinCount)) {\n throw new Error(`LQFP pinCount must be divisible by 4, got ${pinCount}`)\n }\n\n // get default values if not specified\n if (!pitch) pitch = 0.5\n if (!padContactLength) padContactLength = 0.6\n if (!leadWidth) leadWidth = 0.22\n if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4)\n\n const bodyLength = bodyWidth\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const fullLength = bodyLength + 3.3 * padContactLength\n const fullWidth = fullLength\n const leadHeight = 0.8\n const leadThickness = 0.2\n const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.4\n\n return (\n <>\n {/* Pins on the left side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`left-${i}`}\n position={{\n x: -fullWidth / 2 - 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the right side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + 0.36,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the bottom side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`bottom-${i}`}\n rotation={Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: -fullLength / 2 - 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n {/* Pins on the top side */}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`top-${i}`}\n rotation={-Math.PI / 2}\n position={{\n x: i * pitch - pinOffsetToCenter,\n y: fullLength / 2 + 0.36,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n ))}\n\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\n heightAboveSurface={0.1}\n taperRatio={0.04}\n chamferSize={0.7}\n notchPosition={{\n x: -(bodyLength / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.5,\n }}\n notchRadius={1.5 / 2}\n />\n </>\n )\n}\n\nexport default LQFP\n","import { Cuboid, Translate, Colorize, Hull, Union } from \"jscad-fiber\"\n\nexport const SOT723 = () => {\n // Body dimensions (mm)\n const bodyWidth = 0.85\n const bodyLength = 1.2\n const bodyHeight = 0.38\n\n const straightHeight = bodyHeight * 0.55\n const taperOffset = 0.1\n\n const padLength = 0.3\n const padThickness = 0.1\n const leftPadWidth = 0.2\n const rightPadWidth = 0.25\n\n const rightPadCenterX = 0.55\n const rightPadCenterY = 0\n\n const leftTopPadCenterX = -0.55\n const leftTopPadCenterY = 0.4\n\n const leftBottomPadCenterX = -0.55\n const leftBottomPadCenterY = -0.4\n\n return (\n <>\n {/* Body with straight lower section + hulled tapered top */}\n <Colorize color=\"#222\">\n <Union>\n {/* straight lower section */}\n <Cuboid\n size={[bodyWidth, bodyLength, straightHeight]}\n center={[0, 0, straightHeight / 2]}\n />\n\n {/* tapered top via Hull between two thin slices */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, rightPadWidth, padThickness]}\n center={[rightPadCenterX, rightPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftTopPadCenterX, leftTopPadCenterY, padThickness / 2]}\n />\n\n <Cuboid\n color=\"#ccc\"\n size={[padLength, leftPadWidth, padThickness]}\n center={[leftBottomPadCenterX, leftBottomPadCenterY, padThickness / 2]}\n />\n </>\n )\n}\n\nexport default SOT723\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\nexport const DFN = ({\n num_pins,\n bodyWidth = 5.3,\n bodyLength = 5.3,\n bodyThickness = 1,\n thermalPadSize,\n // For a body length of 5 the typical pad width/length are 0.6 and 1.\n // Scale those values proportionally when `bodyLength` changes.\n padWidth = (bodyLength / 5.3) * 0.6,\n padLength = (bodyLength / 5.3) * 1,\n pitch = 0.5,\n thermalPadThickness = 0.2,\n}: {\n num_pins: number\n bodyWidth?: number\n bodyLength?: number\n bodyThickness?: number\n thermalPadSize?: {\n width: number\n length: number\n }\n padWidth?: number\n padLength?: number\n pitch?: number\n thermalPadThickness?: number\n}) => {\n // DFN packages have pads on two opposite sides (left & right).\n // Distribute pins evenly between the two sides.\n const pinPositions: Array<{\n pinNumber: number\n x: number\n y: number\n padSizeX: number // size across the package X axis (pad width)\n padSizeY: number // size along the package Y axis (pad length)\n }> = []\n\n const pinsPerSide = Math.floor(num_pins / 2)\n // pinSpan = distance between first and last pin on a side (along Y)\n const pinSpan = pitch * (pinsPerSide - 1)\n\n for (let i = 0; i < num_pins; i++) {\n const side = i < pinsPerSide ? \"left\" : \"right\"\n const indexOnSide = i % pinsPerSide\n const y = pinSpan / 2 - indexOnSide * pitch\n\n // Pads on DFN are typically oriented vertically (long edge along Y)\n const padSizeX = padLength // X dimension of pad (short side)\n const padSizeY = padWidth // Y dimension of pad (long side)\n\n // x position: place pad inside the body so its outer edge touches the\n // package edge. Pad center should be half the pad X size away from edge.\n const x =\n side === \"left\"\n ? -bodyWidth / 2 + padSizeX / 2\n : bodyWidth / 2 - padSizeX / 2\n\n const pinNumber = i + 1\n pinPositions.push({ pinNumber, x, y, padSizeX, padSizeY })\n }\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyThickness}\n heightAboveSurface={0}\n color=\"grey\"\n chamferSize={0.2}\n taperRatio={0}\n notchPosition={{\n x: -(bodyWidth / 2 - padLength),\n y: bodyLength / 2 - padLength,\n z: bodyThickness,\n }}\n />\n {pinPositions.map((p, i) => (\n <Cuboid\n key={i}\n center={[p.x, p.y, thermalPadThickness / 2]}\n size={[p.padSizeX, p.padSizeY, thermalPadThickness]}\n />\n ))}\n {thermalPadSize?.length !== undefined &&\n thermalPadSize?.width !== undefined && (\n <Cuboid\n center={[0, 0, thermalPadThickness / 2]}\n size={[\n thermalPadSize.width,\n thermalPadSize.length,\n thermalPadThickness,\n ]}\n />\n )}\n </>\n )\n}\n\nexport default DFN\n","import { Colorize, Cylinder, Hull, RoundedCylinder } from \"jscad-fiber\"\n\nexport interface HC49Props {\n /** overall body length (mm) */\n bodyLength?: number\n /** body width (mm) */\n bodyWidth?: number\n /** body height (mm) */\n bodyHeight?: number\n /** distance between lead centers (mm) */\n leadSpacing?: number\n /** lead diameter (mm) */\n leadDiameter?: number\n /** length of the lead below the body (mm) */\n leadLength?: number\n color?: string\n leadColor?: string\n}\n\n/**\n * HC-49 (through-hole crystal) simplified 3D model.\n * Defaults chosen to match the HC-49/U-S recommended land pattern and dimensions.\n */\nexport const HC49 = ({\n bodyLength = 10.2,\n bodyWidth = 4.65,\n bodyHeight = 13.46,\n leadSpacing = 5,\n leadDiameter = 0.8,\n leadLength = 12.7,\n color = \"#ddd\",\n leadColor = \"#b87333\",\n}: HC49Props) => {\n // positions and sizes\n const halfLength = bodyLength / 2\n\n // build a capsule-like body by hullling two cylinders (circular ends) across the X axis\n const endRadius = bodyWidth / 2\n const endCenterX = halfLength - endRadius\n // center X for the through-hole leads (distance between centers = leadSpacing)\n const leadCenterX = leadSpacing / 2\n const baseHeight = 0.85\n\n return (\n <>\n <Colorize color={color}>\n <Hull>\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[-endCenterX, 0, bodyHeight]}\n />\n <RoundedCylinder\n height={bodyHeight}\n roundRadius={0.5}\n radius={endRadius}\n center={[endCenterX, 0, bodyHeight]}\n />\n </Hull>\n <Hull>\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[-endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n <RoundedCylinder\n height={baseHeight}\n roundRadius={0.1}\n radius={endRadius + 0.85}\n center={[endCenterX, 0, bodyHeight / 2 + baseHeight / 2]}\n />\n </Hull>\n </Colorize>\n\n {/* leads (through-hole) - cylinders oriented along Z, extending below the body */}\n <Colorize color={leadColor}>\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[-leadCenterX + 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n <Cylinder\n height={leadLength + bodyHeight / 2}\n radius={leadDiameter / 2}\n center={[leadCenterX - 0.06, 0, -(leadLength / 2) + bodyHeight / 2]}\n />\n </Colorize>\n </>\n )\n}\n\nexport default HC49\n","import {\n Colorize,\n Cylinder,\n RoundedCylinder,\n Rotate,\n RoundedCuboid,\n} from \"jscad-fiber\"\n\nexport interface MicroMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n cathodeIdentification?: string\n}\n\nexport const MicroMELF = ({\n bodyLength = 1.4,\n bodyDiameter = 1.1,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n cathodeIdentification = \"#111\",\n}: MicroMELFProps) => {\n const padLength = 0.2\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter, bodyDiameter, bodyLength - padLength]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, 0.05]}\n />\n <Cylinder\n height={padLength / 2}\n radius={bodyDiameter / 2 - padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2 + padLength / 2]}\n />\n </Rotate>\n </Colorize>\n {/* Cathode identification: a dark stripe near the left end of the body */}\n\n <Colorize color={cathodeIdentification}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCuboid\n size={[bodyDiameter * 1.01, bodyDiameter * 1.01, bodyLength / 3]}\n roundRadius={padLength}\n center={[-bodyDiameter / 2, 0, -bodyLength / 4 + 0.1]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={padLength / 3}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MicroMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MINIMELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MINIMELF = ({\n bodyLength = 3.5,\n bodyDiameter = 1.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MINIMELFProps) => {\n const padLength = 0.5\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MINIMELF\n","import { Colorize, Cuboid, RoundedCylinder, Rotate } from \"jscad-fiber\"\n\nexport interface MELFProps {\n bodyLength?: number\n bodyDiameter?: number\n color?: string\n contactColor?: string\n}\n\nexport const MELF = ({\n bodyLength = 3.9,\n bodyDiameter = 2.5,\n color = \"#3a3a3aff\",\n contactColor = \"#c6c6c6\",\n}: MELFProps) => {\n const padLength = 0.55\n\n return (\n <>\n <Colorize color={color}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={bodyLength}\n radius={bodyDiameter / 2}\n roundRadius={0.3}\n center={[-bodyDiameter / 2, 0, 0]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, -bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n\n <Colorize color={contactColor}>\n <Rotate rotation={[0, \"90deg\", 0]}>\n <RoundedCylinder\n height={padLength}\n radius={bodyDiameter / 2}\n roundRadius={0.2}\n center={[-bodyDiameter / 2, 0, bodyLength / 2]}\n />\n </Rotate>\n </Colorize>\n </>\n )\n}\n\nexport default MELF\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS012 = ({\n pinCount,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount % 2 !== 0) {\n throw new Error(\"MS012 pinCount must be even\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 4.9\n const bodyLength = 3.9\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyLength / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyLength / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyLength}\n length={bodyWidth}\n height={1.55}\n notchPosition={{\n x: -(bodyLength / 2 - 1),\n y: bodyWidth / 2 - 1,\n z: 1.55,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.09}\n />\n </>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const MS013 = ({\n pinCount = 16,\n padContactLength = 0.6,\n leadWidth = 0.41,\n pitch = 1.27,\n}: {\n pinCount?: number\n pitch?: number\n leadWidth?: number\n padContactLength?: number\n}) => {\n if (pinCount !== 16) {\n throw new Error(\"MS013 only supports 16 pins\")\n }\n const sidePinCount = pinCount / 2\n const bodyWidth = 7.5\n const bodyLength = 10.3\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.2\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - padContactLength - 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={`right-${i}`}\n rotation={Math.PI}\n position={{\n x: bodyWidth / 2 + padContactLength + 0.3,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={padContactLength + 0.4}\n height={0.85}\n />\n ))}\n <ChipBody\n center={{ x: 0, y: 0, z: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.1}\n notchPosition={{\n x: -(bodyWidth / 2 - 1.5),\n y: bodyLength / 2 - 1.5,\n z: 1.1,\n }}\n heightAboveSurface={0.17}\n taperRatio={0.05}\n />\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Hull,\n Rotate,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const TO220 = () => {\n const fullLength = 20\n const bodyLength = 9.9\n const bodyHeight = 4.5\n const zOffset = 1\n\n const padWidth = 9.9\n const padLength = 6.5\n const padThickness = 1.3\n const padHoleDiameter = 3.0\n\n const prongWidth = 0.81\n const prongLength = 16\n const prongHeight = 0.5\n const prongPitch = 2.7\n\n const bodyWidth = padWidth\n\n const bodyFrontX = fullLength - bodyLength / 2 // left face of body\n const bodyBackX = fullLength + bodyLength / 2 // right face of body\n const prongCenterX = bodyFrontX - prongLength / 2 // prong centered so its inner face touches bodyFront\n const padCenterX = bodyBackX + padLength / 2 // pad centered so its inner face touches bodyBack\n\n return (\n <Translate center={[0, 0, zOffset]}>\n <>\n <Rotate rotation={[0, 55, -55]}>\n {/* Pads (with centered hole for pin alignment) */}\n <Subtract>\n <Cuboid\n color=\"#ccc\"\n size={[padLength + 0.1, padWidth, padThickness]}\n center={[padCenterX, 0, padThickness - 2]}\n />\n {/* hole centered through pad */}\n <Cylinder\n color=\"black\"\n center={[padCenterX, 0, padThickness - 2]}\n radius={padHoleDiameter / 2}\n height={padThickness * 1.2}\n />\n </Subtract>\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <ChipBody\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: fullLength, y: 0, z: -2.4 }}\n includeNotch={false}\n straightHeightRatio={0.3}\n taperRatio={0.04}\n heightAboveSurface={1}\n />\n </Colorize>\n </Rotate>\n <Rotate rotation={[0, 55, 55]}>\n {Array.from({ length: 3 }).map((_, i) => {\n const x = prongCenterX\n const y = (i - 1) * prongPitch\n // prongs sit on top of pads (pad top z = padThickness)\n const z = -prongHeight - 0.6\n return (\n <Colorize key={`prong-${i}`} color=\"gold\">\n <Hull>\n {/* inner fillet pieces anchored to the body front so they stay correct when prongLength changes */}\n <Translate center={[bodyFrontX - bodyHeight / 2 + 0.1, y, z]}>\n <Cuboid size={[bodyHeight, prongWidth + 1, prongHeight]} />\n </Translate>\n <Translate\n center={[bodyFrontX - bodyHeight / 2 - 1 + 0.1, y, z]}\n >\n <Cuboid size={[bodyHeight, prongWidth, prongHeight]} />\n </Translate>\n </Hull>\n <Translate center={[x, y, z]}>\n <Cuboid size={[prongLength + 0.1, prongWidth, prongHeight]} />\n </Translate>\n </Colorize>\n )\n })}\n </Rotate>\n </>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT457 = () => {\n const fullWidth = 2.8\n const bodyWidth = 1.6\n const bodyLength = 2.9\n const bodyHeight = 1.2\n const leadWidth = 0.4\n const leadThickness = 0.15\n const leadHeight = 0.95\n const padContactLength = 0.5\n const padPitch = 0.95\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: padPitch,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.4),\n y: bodyHeight / 2 + 0.4,\n z: bodyHeight + 0.05,\n }}\n notchRadius={0.1}\n />\n </>\n )\n}\n\nexport default SOT457\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT963 = () => {\n const bodyWidth = 0.8\n const bodyLength = 1.0\n const bodyHeight = 0.37\n const terminalWidth = 0.15\n const terminalLength = 0.19\n const terminalThickness = 0.12\n const pitch = 0.35\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0.15}\n straightHeightRatio={0}\n notchPosition={{\n x: -bodyWidth / 4,\n y: pinSpan / 2.2,\n z: bodyHeight + 0.1,\n }}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2 - 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2 + 0.1,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT963\n","import {\n Colorize,\n Cuboid,\n Hull,\n Translate,\n Cylinder,\n Subtract,\n} from \"jscad-fiber\"\n\nexport const TO92 = () => {\n // === Dimensions (mm) ===\n const bodyRadius = 2.4\n const bodyHeight = 4.5\n const flatCut = 1.1\n\n const legWidth = 0.4\n const legThickness = 0.25\n\n const bodyZ = bodyHeight / 2\n\n const bodyColor = \"#222\"\n const leadLength = 0.43\n const leadTipSize: [number, number, number] = [leadLength, legWidth, 1.32]\n const leadSmallSize: [number, number, number] = [\n leadLength,\n legWidth,\n legThickness,\n ]\n\n const leadTipPos1: [number, number, number] = [0, 0, -0.66]\n const leadMidPosA: [number, number, number] = [0, 0, -1.32]\n const leadMidPosB: [number, number, number] = [0, 1.28, -2.72]\n const leadTipPos2: [number, number, number] = [0, 1.28, -8.9]\n\n const sideLeadZ = -7.5\n\n return (\n <Translate center={[0, 1, 10.5]}>\n <Colorize color={bodyColor}>\n <Subtract>\n <Translate center={[0, 0, bodyZ]}>\n <Cylinder radius={bodyRadius} height={bodyHeight} />\n </Translate>\n <Translate center={[0, -(bodyRadius - flatCut / 2), bodyZ]}>\n <Cuboid size={[bodyRadius * 2, flatCut, bodyHeight + 0.2]} />\n </Translate>\n </Subtract>\n </Colorize>\n\n <Translate center={leadTipPos1}>\n <Cuboid size={leadTipSize} />\n </Translate>\n <Hull>\n <Translate center={leadMidPosA}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n <Translate center={leadMidPosB}>\n <Cuboid size={leadSmallSize} />\n </Translate>\n </Hull>\n <Translate center={leadTipPos2}>\n <Cuboid size={[leadLength, legWidth, 12.2]} />\n </Translate>\n\n <Translate center={[1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n <Translate center={[-1.3, 0, sideLeadZ]}>\n <Cuboid size={[leadLength, legWidth, 15]} />\n </Translate>\n </Translate>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOT363 = () => {\n const fullWidth = 2\n const bodyWidth = 1.25\n const bodyLength = 2\n const bodyHeight = 1.1\n const leadWidth = 0.25\n const leadThickness = 0.15\n const leadHeight = 0.85\n const padContactLength = 0.3\n\n // Increase the bodyDistance to extend leads further out\n const extendedBodyDistance = fullWidth - bodyWidth\n\n return (\n <>\n {/* Leads on the right side (pins 1 and 2) */}\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={3}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2 + extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n\n {/* Lead on the left side (pin 3) */}\n <SmdChipLead\n key={3}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: -0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n <SmdChipLead\n key={2}\n position={{\n x: -fullWidth / 2 - extendedBodyDistance / 4,\n y: 0.65,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={extendedBodyDistance}\n height={leadHeight}\n />\n {/* Chip Body */}\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n straightHeightRatio={0.6}\n notchPosition={{\n x: -(bodyWidth / 2 - 0.25),\n y: bodyHeight / 2 + 0.2,\n z: bodyHeight,\n }}\n heightAboveSurface={0.1}\n />\n </>\n )\n}\n\nexport default SOT363\n","import { Cuboid } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOT886 = () => {\n const bodyWidth = 1.0\n const bodyLength = 1.45\n const bodyHeight = 0.5\n const terminalWidth = 0.2\n const terminalLength = 0.3\n const terminalThickness = 0.05\n const pitch = 0.5\n const pinsPerSide = 3\n const pinSpan = pitch * (pinsPerSide - 1)\n\n return (\n <>\n <ChipBody\n center={{ x: 0, y: 0, z: terminalThickness }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n heightAboveSurface={0}\n color=\"#1a1a1a\"\n taperRatio={0}\n includeNotch={false}\n />\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`left-${i}`}\n center={[\n -bodyWidth / 2 + terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n\n {[0, 1, 2].map((i) => {\n const y = -pinSpan / 2 + i * pitch\n return (\n <Cuboid\n key={`right-${i}`}\n center={[\n bodyWidth / 2 - terminalLength / 2,\n y,\n terminalThickness / 2,\n ]}\n size={[terminalLength, terminalWidth, terminalThickness]}\n />\n )\n })}\n </>\n )\n}\n\nexport default SOT886\n","import { ChipBody } from \"./ChipBody\"\nimport { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\nexport const SOD323 = () => {\n const fullWidth = 2.5\n const bodyLength = 1.25\n\n const bodyWidth = 1.7\n const bodyHeight = 0.95\n\n const leadWidth = 0.3\n const leadThickness = 0.175\n\n const padContactLength = 0.3\n\n const padCenterX = bodyWidth / 2\n\n const bodyDistance = 0.45\n const leadHeight = 0.7\n return (\n <>\n <SmdChipLead\n key={1}\n position={{\n x: -fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n <SmdChipLead\n key={1}\n rotation={Math.PI}\n position={{\n x: fullWidth / 2,\n y: 0,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={padContactLength}\n bodyDistance={bodyDistance}\n height={leadHeight}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n center={{ x: 0, y: 0, z: 0 }}\n width={bodyWidth}\n length={bodyLength}\n height={bodyHeight}\n includeNotch={false}\n taperRatio={0.06}\n straightHeightRatio={0.7}\n heightAboveSurface={0.05}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[bodyWidth / 3, bodyLength - 0.075, 0.02]}\n center={[(-padCenterX * 2) / 3 + 0.035, 0, bodyHeight + 0.05]}\n />\n </>\n )\n}\n\nexport default SOD323\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323F = () => {\n const fullWidth = 1.7\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.175\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2\n const rightPadCenterX = fullWidth / 2 + padLength / 2\n\n const taperOffset = 0.2\n const straightHeight = padThickness\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <Union>\n {/* Middle straight section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[fullWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Top taper section */}\n <Hull>\n <Translate z={straightHeight}>\n <Cuboid size={[fullWidth, bodyLength, 0.01]} />\n </Translate>\n <Translate z={bodyHeight}>\n <Cuboid\n size={[fullWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - taperOffset, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323F\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\nimport { ChipBody } from \"./ChipBody\"\n\nexport const SOD323FL = () => {\n const fullWidth = 1.775\n const bodyLength = 1.25\n const bodyHeight = 0.725\n\n const padWidth = 0.325\n const padLength = 0.4\n const padThickness = 0.13\n\n const leftPadCenterX = -fullWidth / 2 - padLength / 2 + 0.04\n const rightPadCenterX = fullWidth / 2 + padLength / 2 - 0.04\n\n const taperOffset = 0.2\n\n return (\n <>\n {/* Left pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Right pad */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body */}\n <Colorize color=\"#222\">\n <ChipBody\n width={fullWidth}\n length={bodyLength}\n height={bodyHeight}\n center={{ x: 0, y: 0, z: 0 }}\n heightAboveSurface={0}\n straightHeightRatio={0.7}\n taperRatio={0.06}\n includeNotch={false}\n />\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 3, bodyLength - 0.05, 0.02]}\n center={[leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD323FL\n","import { Colorize, Cylinder, Rotate, Sphere, Translate } from \"jscad-fiber\"\n\ninterface AxialCapacitorProps {\n pitch: number\n}\n\nexport const AxialCapacitor = ({ pitch = 10 }: AxialCapacitorProps) => {\n const heightToCenterOfCapacitor = 0.5 + 4 / 2\n\n return (\n <>\n <Cylinder height={4} radius={0.5} center={[-pitch / 2, 0, 0.5]} />\n <Sphere\n radius={0.5}\n center={[-pitch / 2, 0, heightToCenterOfCapacitor]}\n />\n <Translate x={-2.5} y={0} z={heightToCenterOfCapacitor}>\n <Rotate rotation={[0, Math.PI / 2, 0]}>\n <Cylinder\n height={pitch}\n radius={0.5}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n <Colorize color=\"#d2b48c\">\n <Cylinder\n height={5}\n radius={1.3}\n center={[0, 0, heightToCenterOfCapacitor]}\n />\n </Colorize>\n </Rotate>\n </Translate>\n <Cylinder height={4} radius={0.5} center={[pitch / 2, 0, 0.5]} />\n <Sphere radius={0.5} center={[pitch / 2, 0, heightToCenterOfCapacitor]} />\n </>\n )\n}\n","import { Colorize, Cuboid, Cylinder, Subtract, Union } from \"jscad-fiber\"\n\nexport const StampBoard = ({\n bodyWidth = 21,\n boardThickness = 0.5,\n leadWidth = 1.6,\n leadLength = 2.4,\n leadsPitch = 2.54,\n leadsLeft,\n leadsRight,\n leadsTop,\n leadsBottom,\n innerHoles = true,\n innerHoleEdgeDistance = 1.61,\n innerHoleDiameter = 1,\n}: {\n bodyWidth?: number\n boardThickness?: number\n leadWidth?: number\n leadLength?: number\n leadsPitch?: number\n leadsLeft?: number\n leadsRight?: number\n leadsTop?: number\n leadsBottom?: number\n innerHoles?: boolean\n innerHoleEdgeDistance?: number\n innerHoleDiameter?: number\n}) => {\n const halfBoardWidth = bodyWidth / 2\n const boardCenterZ = boardThickness / 2\n const boardHeight = boardThickness * 1.05\n const holeRadius = innerHoleDiameter / 2\n const bodyLength =\n Math.max(leadsLeft || 0, leadsRight || 0, leadsTop || 0, leadsBottom || 0) *\n leadsPitch || 51\n\n const pads: { x: number; y: number; pl: number; pw: number }[] = []\n const holes: { x: number; y: number }[] = []\n\n if (leadsRight) {\n const yOffset = -((leadsRight - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsRight; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: halfBoardWidth - leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: halfBoardWidth, y: -y },\n { x: halfBoardWidth - innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsLeft) {\n const yOffset = -((leadsLeft - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsLeft; i++) {\n const y = yOffset + i * leadsPitch\n pads.push({\n x: -halfBoardWidth + leadLength / 2,\n y: -y, // Flip y\n pl: leadLength,\n pw: leadWidth,\n })\n if (innerHoles) {\n holes.push(\n { x: -halfBoardWidth, y: -y },\n { x: -halfBoardWidth + innerHoleEdgeDistance, y: -y },\n )\n }\n }\n }\n\n if (leadsTop) {\n const xOffset = -((leadsTop - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsTop; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: bodyLength / 2 - leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: bodyLength / 2 },\n { x: -x, y: bodyLength / 2 - innerHoleEdgeDistance },\n )\n }\n }\n }\n\n if (leadsBottom) {\n const xOffset = -((leadsBottom - 1) / 2) * leadsPitch\n for (let i = 0; i < leadsBottom; i++) {\n const x = xOffset + i * leadsPitch\n pads.push({\n x: -x, // Flip x\n y: -bodyLength / 2 + leadLength / 2,\n pl: leadWidth,\n pw: leadLength,\n })\n if (innerHoles) {\n holes.push(\n { x: -x, y: -bodyLength / 2 },\n { x: -x, y: -bodyLength / 2 + innerHoleEdgeDistance },\n )\n }\n }\n }\n\n const boardBody = (\n <Colorize color=\"#051a0a\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ]}\n size={[bodyWidth, bodyLength, boardThickness]}\n />\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n const holePads =\n innerHoles &&\n holes.map((hole, index) => (\n <Cylinder\n key={index}\n color=\"black\"\n center={[hole.x, hole.y, boardCenterZ]}\n radius={holeRadius}\n height={boardThickness * 1.07}\n />\n ))\n\n const rectPads = pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))\n return (\n <>\n {boardBody}\n <Colorize color=\"#FFD700\">\n {innerHoles ? (\n <Subtract>\n <Union>\n {pads.map((pad, index) => (\n <Cuboid\n key={index}\n center={[pad.x, pad.y, boardCenterZ]}\n size={[pad.pl + 0.01, pad.pw + 0.01, boardHeight]}\n />\n ))}\n </Union>\n {holePads}\n </Subtract>\n ) : (\n rectPads\n )}\n </Colorize>\n </>\n )\n}\n\nexport default StampBoard\n","import { Colorize, Cuboid, Subtract, Translate } from \"jscad-fiber\"\n\nexport interface ScreenProps {\n width?: number\n height?: number\n thickness?: number\n bezelInset?: number\n bezelDepth?: number\n screenColor?: string\n bezelColor?: string\n screenWidth?: number\n screenHeight?: number\n offset?: { x?: number; y?: number; z?: number }\n}\n\nexport const Screen = ({\n width = 30,\n height = 22,\n thickness = 1,\n bezelInset = 2,\n bezelDepth = 1,\n screenColor = \"#001414\",\n bezelColor = \"#0f1116\",\n screenWidth,\n screenHeight,\n offset,\n}: ScreenProps) => {\n const w = width\n const h = height\n const stackHeight = Math.max(thickness, 0.4)\n const clampedBezelDepth = Math.max(Math.min(bezelDepth, stackHeight), 0.2)\n const backBlockHeight = Math.max(stackHeight - clampedBezelDepth, 0)\n const inset = Math.max(bezelInset, 0)\n const innerWidth = Math.max(screenWidth ?? w - inset * 2, 2)\n const innerHeight = Math.max(screenHeight ?? h - inset * 2, 2)\n const screenThickness = Math.min(\n Math.max(clampedBezelDepth * 0.6, 0.2),\n clampedBezelDepth,\n )\n const offsetX = offset?.x ?? 0\n const offsetY = offset?.y ?? 0\n const offsetZ = offset?.z ?? 0\n\n return (\n <Translate offset={{ x: offsetX, y: offsetY, z: offsetZ }}>\n {backBlockHeight > 0 && (\n <Colorize color={bezelColor}>\n <Cuboid\n size={[w, h, backBlockHeight]}\n offset={[0, 0, backBlockHeight / 2]}\n />\n </Colorize>\n )}\n\n <Colorize color={bezelColor}>\n <Subtract>\n <Cuboid\n size={[w, h, clampedBezelDepth]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n <Cuboid\n size={[innerWidth, innerHeight, clampedBezelDepth + 0.02]}\n offset={[0, 0, backBlockHeight + clampedBezelDepth / 2]}\n />\n </Subtract>\n </Colorize>\n\n <Colorize color={screenColor}>\n <Cuboid\n size={[innerWidth, innerHeight, screenThickness]}\n offset={[0, 0, backBlockHeight + screenThickness / 2]}\n />\n </Colorize>\n </Translate>\n )\n}\n\n// TODO: remove Display alias after downstreams migrate\nexport const Display = Screen\n\nexport default Screen\n","import { Colorize, Cuboid, Cylinder, Subtract } from \"jscad-fiber\"\nimport { PinHeader } from \"./PinHeader\"\nimport { FemaleHeader } from \"./FemaleHeader\"\nimport { Screen } from \"./Screen\"\n\nexport const MountedPcbModule = ({\n numPins = 5,\n rows = 1,\n p = 2.54,\n id = 1.0,\n od = 1.5,\n boardThickness = 1.6,\n width,\n height,\n pinRowSide = \"left\",\n holes = [],\n holeInset = 1.0,\n pinRowHoleEdgeToEdgeDist = 2.0,\n female,\n nopin,\n screen,\n screenWidth,\n screenHeight,\n screenCenterOffsetX,\n screenCenterOffsetY,\n}: {\n numPins?: number\n rows?: number\n p?: number\n id?: number\n od?: number\n boardThickness?: number\n width?: number | string\n height?: number | string\n pinRowSide?: \"left\" | \"right\" | \"top\" | \"bottom\"\n holes?: string[]\n holeInset?: number\n pinRowHoleEdgeToEdgeDist?: number\n female?: boolean\n nopin?: boolean\n screen?: boolean\n screenWidth?: number\n screenHeight?: number\n screenCenterOffsetX?: number\n screenCenterOffsetY?: number\n}) => {\n const showScreen = screen ?? false\n const boardCenterZ = boardThickness / 2\n const numPinsPerRow = Math.ceil(numPins / rows)\n\n // Calculate width and height if not provided\n let calculatedWidth: number\n let calculatedHeight: number\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n calculatedWidth = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedHeight = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n } else {\n calculatedHeight = (rows - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n calculatedWidth = (numPinsPerRow - 1) * p + 2 * pinRowHoleEdgeToEdgeDist\n }\n if (numPins === 0) {\n calculatedWidth = 10\n calculatedHeight = 10\n }\n const finalWidth = Number(width ?? calculatedWidth)\n const finalHeight = Number(height ?? calculatedHeight)\n\n // Calculate pin positions\n const pins: { x: number; y: number }[] = []\n let pinStartX = 0\n let pinStartY = 0\n let pinDirectionX = 0\n let pinDirectionY = 0\n let rowDirectionX = 0\n let rowDirectionY = 0\n\n if (pinRowSide === \"left\" || pinRowSide === \"right\") {\n pinStartX =\n pinRowSide === \"left\"\n ? -finalWidth / 2 + pinRowHoleEdgeToEdgeDist\n : finalWidth / 2 - pinRowHoleEdgeToEdgeDist\n pinStartY = -((numPinsPerRow - 1) / 2) * p\n pinDirectionX = 0\n pinDirectionY = p\n rowDirectionX = pinRowSide === \"left\" ? p : -p\n rowDirectionY = 0\n } else {\n pinStartX = -((numPinsPerRow - 1) / 2) * p\n pinStartY =\n pinRowSide === \"top\"\n ? finalHeight / 2 - pinRowHoleEdgeToEdgeDist\n : -finalHeight / 2 + pinRowHoleEdgeToEdgeDist\n pinDirectionX = p\n pinDirectionY = 0\n rowDirectionX = 0\n rowDirectionY = pinRowSide === \"top\" ? -p : p\n }\n\n let pinNumber = 0\n for (let row = 0; row < rows && pinNumber < numPins; row++) {\n for (let col = 0; col < numPinsPerRow && pinNumber < numPins; col++) {\n const x = pinStartX + col * pinDirectionX + row * rowDirectionX\n const y = pinStartY + col * pinDirectionY + row * rowDirectionY\n pins.push({ x, y })\n pinNumber++\n }\n }\n\n // Calculate hole positions\n const holePositions: { x: number; y: number }[] = []\n if (holes) {\n for (const pos of holes) {\n let hx = 0\n let hy = 0\n if (pos === \"topleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"topright\") {\n hx = finalWidth / 2 - holeInset\n hy = finalHeight / 2 - holeInset\n } else if (pos === \"bottomleft\") {\n hx = -finalWidth / 2 + holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"bottomright\") {\n hx = finalWidth / 2 - holeInset\n hy = -finalHeight / 2 + holeInset\n } else if (pos === \"center\") {\n hx = 0\n hy = 0\n }\n holePositions.push({ x: hx, y: hy })\n }\n }\n // Recreated pin row geometry (local copy to avoid PinRow dependency)\n const pinThickness = 0.63\n const pinBodyHeight = 2\n const longSidePinLength = 6\n const shortSidePinLength = 3\n const boardOffsetZ = nopin || female ? 0 : pinBodyHeight\n const boardTopZ = boardOffsetZ + boardThickness\n // Board body with holes subtracted\n const boardBody = (\n <Colorize color=\"#008080\">\n <Subtract>\n <Cuboid\n center={[0, 0, boardCenterZ + boardOffsetZ]}\n size={[finalWidth, finalHeight, boardThickness]}\n />\n {holePositions.map((hole, index) => (\n <Cylinder\n key={`hole-${index}`}\n center={[hole.x, hole.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n {pins.map((pin, index) => (\n <Cylinder\n key={`pin-hole-${index}`}\n center={[pin.x, pin.y, boardCenterZ + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n ))}\n </Subtract>\n </Colorize>\n )\n\n // Plated through-holes\n const platedHoles = pins.map((pin, index) => (\n <Colorize key={`pin-${index}`} color=\"#FFD700\">\n <Subtract>\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={od / 2}\n height={boardThickness}\n />\n <Cylinder\n center={[pin.x, pin.y, boardThickness / 2 + boardOffsetZ]}\n radius={id / 2}\n height={boardThickness}\n />\n </Subtract>\n </Colorize>\n ))\n\n const headerPins = pins.map((pin, index) => (\n <PinHeader\n key={`pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n pinThickness={pinThickness}\n shortSidePinLength={shortSidePinLength}\n longSidePinLength={longSidePinLength}\n bodyHeight={pinBodyHeight}\n flipZ={(z: number) => z}\n />\n ))\n\n const femaleHeaderRow = pins.map((pin, index) => (\n <FemaleHeader\n key={`female-pin-3d-${index}`}\n x={pin.x}\n y={pin.y}\n flipZ={(z: number) => -z}\n />\n ))\n\n return (\n <>\n {boardBody}\n {platedHoles}\n {!female && !nopin && headerPins}\n {female && femaleHeaderRow}\n {showScreen && (\n <Screen\n width={screenWidth ?? finalWidth * 0.8}\n height={screenHeight ?? finalHeight * 0.6}\n offset={{\n x: screenCenterOffsetX ?? 0,\n y: screenCenterOffsetY ?? 0,\n z: boardTopZ,\n }}\n />\n )}\n </>\n )\n}\n\nexport default MountedPcbModule\n","import { Colorize, Cuboid, Hull, Translate, Union } from \"jscad-fiber\"\n\nexport const SOD723 = () => {\n const fullWidth = 1.4\n const bodyLength = 0.6\n const bodyHeight = 0.5\n\n const padWidth = 0.28\n const padLength = 0.5\n const padThickness = 0.12\n\n const bodyWidth = fullWidth - padLength\n const leftPadCenterX = -bodyWidth / 2 + padLength / 2 - 0.15 // 0.15 is the distance between the pad and the body as datasheet\n const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15 // 0.15 is the distance between the pad and the body as datasheet\n\n // top taper happens only in last quarter\n const taperOffset = 0.2\n const straightHeight = bodyHeight * 0.24\n\n // Body geometry\n // - straightHeight: the lower (straight) portion of the body\n // - taperOffset: how much smaller the top of the body becomes\n\n return (\n <>\n {/* Pads */}\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[leftPadCenterX, 0, padThickness / 2]}\n />\n <Cuboid\n color=\"#ccc\"\n size={[padLength, padWidth, padThickness]}\n center={[rightPadCenterX, 0, padThickness / 2]}\n />\n\n {/* Body (lifted above pads) */}\n <Colorize color=\"#222\">\n <Union>\n {/* Straight bottom section */}\n <Translate z={straightHeight / 2}>\n <Cuboid size={[bodyWidth, bodyLength, straightHeight]} />\n </Translate>\n\n {/* Tapered top quarter */}\n <Hull>\n {/* bottom of taper (same size as straight section top) */}\n <Translate z={straightHeight}>\n <Cuboid size={[bodyWidth, bodyLength, 0.01]} />\n </Translate>\n\n {/* top of taper (smaller) */}\n <Translate z={bodyHeight}>\n <Cuboid\n size={[bodyWidth - taperOffset, bodyLength - taperOffset, 0.01]}\n />\n </Translate>\n </Hull>\n </Union>\n </Colorize>\n\n {/* Grey polarity/top strip */}\n <Cuboid\n color=\"#777\"\n size={[fullWidth / 6, bodyLength - taperOffset, 0.02]}\n center={[-bodyWidth / 4, 0, bodyHeight]}\n />\n </>\n )\n}\n\nexport default SOD723\n","import type * as jscadModeling from \"@jscad/modeling\"\n\nimport { Fragment, type VNode } from \"./h\"\nimport {\n Colorize,\n Cube,\n Cuboid,\n Cylinder,\n Sphere,\n Hull,\n Rotate,\n RoundedCuboid,\n Subtract,\n Translate,\n Union,\n Polygon,\n ExtrudeLinear,\n RoundedCylinder,\n type Color,\n} from \"./primitives\"\n\ninterface RenderContext {\n jscad: typeof jscadModeling\n}\n\nexport type ColoredGeom = { geom: any; color?: Color }\nexport type RenderResult = { geometries: ColoredGeom[] }\n\nconst isVNode = (n: any): n is VNode =>\n n && typeof n === \"object\" && \"type\" in n\n\nconst degToRad = (v: number | string | undefined): number => {\n if (typeof v === \"number\") return v\n if (typeof v === \"string\") {\n const m = /^(-?\\d+(?:\\.\\d+)?)\\s*deg$/i.exec(v)\n if (m) return (parseFloat(m[1]!) * Math.PI) / 180\n const n = Number(v)\n if (!Number.isNaN(n)) return n\n }\n return 0\n}\n\nconst toVec3 = (v: any): [number, number, number] => {\n if (Array.isArray(v))\n return [Number(v[0]) || 0, Number(v[1]) || 0, Number(v[2]) || 0]\n if (typeof v === \"object\" && v)\n return [Number(v.x) || 0, Number(v.y) || 0, Number(v.z) || 0]\n return [0, 0, 0]\n}\n\nfunction renderNode(\n node: any,\n colorCtx: Color | undefined,\n renderCtx: RenderContext,\n): ColoredGeom[] {\n const {\n jscad: { primitives, booleans, hulls, geometries, extrusions, transforms },\n } = renderCtx\n if (node == null || node === false) return []\n if (Array.isArray(node))\n return node.flatMap((n) => renderNode(n, colorCtx, renderCtx))\n\n // Already a geometry coming from user? ignore in our case\n if (!isVNode(node)) return []\n\n const { type, props, children } = node\n\n if (type === Fragment) {\n return (children ?? []).flatMap((c) => renderNode(c, colorCtx, renderCtx))\n }\n\n if (type === Colorize) {\n const newColor: Color = props?.color\n return (children ?? []).flatMap((c) =>\n renderNode(c, newColor ?? colorCtx, renderCtx),\n )\n }\n\n if (type === Translate) {\n // accept either `offset`, `center` (array or object), or x/y/z props\n const off = toVec3(\n props?.offset ??\n props?.center ?? { x: props?.x, y: props?.y, z: props?.z },\n )\n const geoms = (children ?? []).flatMap((c) =>\n renderNode(c, colorCtx, renderCtx),\n )\n return geoms.map(({ geom, color }) => ({\n geom: transforms.translate(off as any, geom),\n color: color ?? colorCtx,\n }))\n }\n\n if (type === Rotate) {\n const rot: [number, number, number] = Array.isArray(props?.rotation)\n ? [\n degToRad(props.rotation[0]),\n degToRad(props.rotation[1]),\n degToRad(props.rotation[2]),\n ]\n : [\n degToRad(props?.x ?? 0),\n degToRad(props?.y ?? 0),\n degToRad(props?.z ?? 0),\n ]\n const geoms = (children ?? []).flatMap((c) =>\n renderNode(c, colorCtx, renderCtx),\n )\n return geoms.map(({ geom, color }) => ({\n geom: transforms.rotateZ(\n rot[2],\n transforms.rotateY(rot[1], transforms.rotateX(rot[0], geom)),\n ),\n color,\n }))\n }\n\n if (type === Union || type === Subtract || type === Hull) {\n const geoms = (children ?? [])\n .flatMap((c) => renderNode(c, colorCtx, renderCtx))\n .map((g) => g.geom)\n if (geoms.length === 0) return []\n let geom: any\n if (type === Union) geom = booleans.union(geoms as any)\n else if (type === Subtract)\n geom = booleans.subtract(geoms[0] as any, geoms.slice(1) as any)\n else geom = hulls.hull(geoms as any)\n return [{ geom, color: colorCtx }]\n }\n\n if (type === Polygon) {\n const points: Array<[number, number]> = props?.points ?? []\n const g2 = geometries.geom2.fromPoints(points as any)\n return [{ geom: g2, color: colorCtx ?? props?.color }]\n }\n\n if (type === ExtrudeLinear) {\n const geoms2 = (children ?? [])\n .flatMap((c) => renderNode(c, colorCtx, renderCtx))\n .map((g) => g.geom)\n if (geoms2.length === 0) return []\n const base2 =\n geoms2.length > 1 ? (booleans.union as any)(geoms2) : geoms2[0]\n const height = props?.height ?? props?.h ?? 1\n let g3 = extrusions.extrudeLinear({ height }, base2)\n\n if (g3.polygons) {\n for (const poly of g3.polygons) {\n if (!poly.plane || !poly.vertices || poly.vertices.length < 3) continue\n // The `extrudeLinear` operation have an inverted winding order.\n poly.vertices.reverse()\n }\n }\n\n return [{ geom: g3, color: colorCtx ?? props?.color }]\n }\n\n if (\n type === Cuboid ||\n type === Cube ||\n type === Cylinder ||\n type === Sphere ||\n type === RoundedCuboid ||\n type === RoundedCylinder\n ) {\n let g: any\n if (type === Cuboid) {\n const size = props?.size ?? [1, 1, 1]\n const offset = props?.offset\n const center =\n props?.center ??\n (offset ? [offset[0], offset[1], offset[2]] : [0, 0, 0])\n g = primitives.cuboid({ size, center })\n } else if (type === Cube) {\n const size = props?.size ?? 1\n const offset = props?.offset\n const center =\n props?.center ??\n (offset ? [offset[0], offset[1], offset[2]] : [0, 0, 0])\n g = primitives.cube({ size, center })\n } else if (type === Cylinder) {\n const height = props?.height ?? 1\n const radius = props?.radius ?? 1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.cylinder({ height, radius, center })\n } else if (type === Sphere) {\n const radius = props?.radius ?? 1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.sphere({ radius, center })\n } else if (type === RoundedCylinder) {\n const height = props?.height ?? 1\n const radius = props?.radius ?? 1\n const roundRadius = props?.roundRadius ?? 0.1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.roundedCylinder({ height, radius, roundRadius, center })\n } else {\n const size = props?.size ?? [1, 1, 1]\n const roundRadius = props?.roundRadius ?? 0.1\n const center = props?.center ?? [0, 0, 0]\n g = primitives.roundedCuboid({ size, roundRadius, center })\n }\n return [{ geom: g, color: colorCtx ?? props?.color }]\n }\n\n // Component function: call it and render result\n if (typeof type === \"function\") {\n const out = type(props ?? {})\n return renderNode(out, colorCtx, renderCtx)\n }\n\n // Unknown type -> recurse\n return (children ?? []).flatMap((c) => renderNode(c, colorCtx, renderCtx))\n}\n\nexport function render(root: VNode, jscad: typeof jscadModeling): RenderResult {\n const geometries = renderNode(root, undefined, { jscad })\n return { geometries }\n}\n","import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Matrix4,\n Vector2,\n Vector3,\n} from \"three\"\n\nexport function convertCSGToThreeGeom(csg: any): BufferGeometry {\n if (csg.polygons) {\n // 3D shape\n const vertices = []\n const indices = []\n const colors = []\n let idx = 0\n\n for (const polygon of csg.polygons) {\n for (const vertex of polygon.vertices) {\n vertex.index = idx\n vertices.push(vertex[0], vertex[1], vertex[2])\n // Add color for each vertex\n if (csg.color && csg.color.length >= 3) {\n colors.push(csg.color[0], csg.color[1], csg.color[2])\n } else {\n colors.push(1, 1, 1) // Default to white if no color\n }\n idx++\n }\n const first = polygon.vertices[0].index\n for (let i = 2; i < polygon.vertices.length; i++) {\n const second = polygon.vertices[i - 1].index\n const third = polygon.vertices[i].index\n indices.push(first, second, third)\n }\n }\n\n const geo = new BufferGeometry()\n geo.setAttribute(\n \"position\",\n new BufferAttribute(new Float32Array(vertices), 3),\n )\n geo.setIndex(indices)\n\n // Add color attribute\n if (colors.length > 0) {\n geo.setAttribute(\n \"color\",\n new BufferAttribute(new Float32Array(colors), 3),\n )\n }\n\n if (csg.transforms) {\n const transforms = new Matrix4()\n transforms.fromArray(csg.transforms)\n geo.applyMatrix4(transforms)\n }\n geo.computeVertexNormals()\n\n return geo\n }\n if (csg.sides) {\n // 2D shape\n const vertices = []\n const colors = []\n\n for (const side of csg.sides) {\n vertices.push(side[0][0], side[0][1], 0) // Add z-coordinate as 0\n // Add color for each vertex\n if (csg.color && csg.color.length >= 3) {\n colors.push(csg.color[0], csg.color[1], csg.color[2])\n } else {\n colors.push(1, 1, 1) // Default to white if no color\n }\n }\n\n const geo = new BufferGeometry()\n geo.setAttribute(\n \"position\",\n new BufferAttribute(new Float32Array(vertices), 3),\n )\n\n // Add color attribute\n if (colors.length > 0) {\n geo.setAttribute(\n \"color\",\n new BufferAttribute(new Float32Array(colors), 3),\n )\n }\n\n if (csg.transforms) {\n const transforms = new Matrix4()\n transforms.fromArray(csg.transforms)\n geo.applyMatrix4(transforms)\n }\n\n return geo\n }\n console.error(\"Invalid CSG object: neither polygons nor sides found\")\n return new BufferGeometry()\n}\n","import { ExtrudedPads } from \"../ExtrudedPads\"\nimport { Footprinter3d } from \"../Footprinter3d\"\nimport { Fragment, type VNode, h } from \"./h\"\nimport { type ColoredGeom, type RenderResult, render } from \"./render\"\nexport * from \"./convertCSGToThreeGeom\"\nimport type * as jscadModeling from \"@jscad/modeling\"\n\nexport { h, Fragment }\nexport type { VNode, RenderResult, ColoredGeom }\n\nexport function getJscadModelForFootprint(\n footprint: string,\n jscad: typeof jscadModeling,\n): RenderResult {\n const vnode = h(Footprinter3d, { footprint })\n return render(vnode, jscad)\n}\n\nexport function getJscadModelForFootprintWithPads(\n footprint: string,\n jscad: typeof jscadModeling,\n): RenderResult {\n const vnode = h(\n Fragment,\n {},\n h(Footprinter3d, { footprint }),\n h(ExtrudedPads, { footprint }),\n )\n return render(vnode, jscad)\n}\n\nexport function createJSCADRenderer(jscad: typeof jscadModeling) {\n function createJSCADRoot(container: ColoredGeom[]) {\n return {\n render(element: VNode) {\n const { geometries } = render(element, jscad)\n container.splice(0, container.length, ...geometries)\n },\n }\n }\n\n return { createJSCADRoot }\n}\n"],"mappings":"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","names":["Fragment","Fragment","fp","width","height","heightAboveSurface","width","height","Fragment","height","width","fullLength","Fragment","Fragment","Fragment","fullLength","bodyLength","width","height","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","bodyLength","fullLength","Fragment","width","bodyLength","Fragment","Fragment","h","bodyLength","Fragment","bodyLength","Fragment","fullLength","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","bodyLength","Fragment","Fragment","width","bodyLength","Fragment","fullLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","fullLength","Fragment","bodyLength","Fragment","bodyLength","fullLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","fullLength","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","bodyLength","Fragment","Fragment","bodyLength","Fragment","width","height","h","width","height","Fragment","bodyLength","Fragment","fp","width","height","height"]}