jscad-electronics 0.0.36 → 0.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/vanilla.d.ts CHANGED
@@ -1,3 +1,13 @@
1
+ import { BufferGeometry } from 'three';
2
+
3
+ type VNode = {
4
+ type: any;
5
+ props: Record<string, any>;
6
+ children?: any[];
7
+ };
8
+ declare const Fragment: unique symbol;
9
+ declare function h(type: any, props: any, ...restChildren: any[]): VNode;
10
+
1
11
  type Color = string | [number, number, number] | [number, number, number, number];
2
12
 
3
13
  type ColoredGeom = {
@@ -8,6 +18,13 @@ type RenderResult = {
8
18
  geometries: ColoredGeom[];
9
19
  };
10
20
 
21
+ declare function convertCSGToThreeGeom(csg: any): BufferGeometry;
22
+
11
23
  declare function getJscadModelForFootprint(footprint: string): RenderResult;
24
+ declare function createJSCADRenderer(_jscad: any): {
25
+ createJSCADRoot: (container: ColoredGeom[]) => {
26
+ render(element: VNode): void;
27
+ };
28
+ };
12
29
 
13
- export { getJscadModelForFootprint };
30
+ export { type ColoredGeom, Fragment, type RenderResult, type VNode, convertCSGToThreeGeom, createJSCADRenderer, getJscadModelForFootprint, h };
package/dist/vanilla.js CHANGED
@@ -1637,17 +1637,17 @@ function renderNode(node, colorCtx) {
1637
1637
  if (!isVNode(node)) return [];
1638
1638
  const { type, props, children } = node;
1639
1639
  if (type === Fragment) {
1640
- return children.flatMap((c) => renderNode(c, colorCtx));
1640
+ return (children ?? []).flatMap((c) => renderNode(c, colorCtx));
1641
1641
  }
1642
1642
  if (type === Colorize) {
1643
1643
  const newColor = props?.color;
1644
- return children.flatMap((c) => renderNode(c, newColor ?? colorCtx));
1644
+ return (children ?? []).flatMap((c) => renderNode(c, newColor ?? colorCtx));
1645
1645
  }
1646
1646
  if (type === Translate) {
1647
1647
  const off = toVec3(
1648
1648
  props?.offset ?? { x: props?.x, y: props?.y, z: props?.z }
1649
1649
  );
1650
- const geoms = children.flatMap((c) => renderNode(c, colorCtx));
1650
+ const geoms = (children ?? []).flatMap((c) => renderNode(c, colorCtx));
1651
1651
  return geoms.map(({ geom, color }) => ({
1652
1652
  geom: transforms.translate(off, geom),
1653
1653
  color: color ?? colorCtx
@@ -1663,7 +1663,7 @@ function renderNode(node, colorCtx) {
1663
1663
  degToRad(props?.y ?? 0),
1664
1664
  degToRad(props?.z ?? 0)
1665
1665
  ];
1666
- const geoms = children.flatMap((c) => renderNode(c, colorCtx));
1666
+ const geoms = (children ?? []).flatMap((c) => renderNode(c, colorCtx));
1667
1667
  return geoms.map(({ geom, color }) => ({
1668
1668
  geom: transforms.rotateZ(
1669
1669
  rot[2],
@@ -1673,7 +1673,7 @@ function renderNode(node, colorCtx) {
1673
1673
  }));
1674
1674
  }
1675
1675
  if (type === Union || type === Subtract || type === Hull) {
1676
- const geoms = children.flatMap((c) => renderNode(c, colorCtx)).map((g) => g.geom);
1676
+ const geoms = (children ?? []).flatMap((c) => renderNode(c, colorCtx)).map((g) => g.geom);
1677
1677
  if (geoms.length === 0) return [];
1678
1678
  let geom;
1679
1679
  if (type === Union) geom = booleans.union(geoms);
@@ -1688,7 +1688,7 @@ function renderNode(node, colorCtx) {
1688
1688
  return [{ geom: g2, color: colorCtx ?? props?.color }];
1689
1689
  }
1690
1690
  if (type === ExtrudeLinear) {
1691
- const geoms2 = children.flatMap((c) => renderNode(c, colorCtx)).map((g) => g.geom);
1691
+ const geoms2 = (children ?? []).flatMap((c) => renderNode(c, colorCtx)).map((g) => g.geom);
1692
1692
  if (geoms2.length === 0) return [];
1693
1693
  const base2 = geoms2.length > 1 ? booleans.union(geoms2) : geoms2[0];
1694
1694
  const height10 = props?.height ?? props?.h ?? 1;
@@ -1728,19 +1728,117 @@ function renderNode(node, colorCtx) {
1728
1728
  const out = type(props ?? {});
1729
1729
  return renderNode(out, colorCtx);
1730
1730
  }
1731
- return children.flatMap((c) => renderNode(c, colorCtx));
1731
+ return (children ?? []).flatMap((c) => renderNode(c, colorCtx));
1732
1732
  }
1733
1733
  function render(root) {
1734
1734
  const geometries2 = renderNode(root);
1735
1735
  return { geometries: geometries2 };
1736
1736
  }
1737
1737
 
1738
+ // lib/vanilla/convertCSGToThreeGeom.ts
1739
+ import {
1740
+ BufferAttribute,
1741
+ BufferGeometry,
1742
+ Matrix4
1743
+ } from "three";
1744
+ function convertCSGToThreeGeom(csg) {
1745
+ if (csg.polygons) {
1746
+ const vertices = [];
1747
+ const indices = [];
1748
+ const colors = [];
1749
+ let idx = 0;
1750
+ for (const polygon of csg.polygons) {
1751
+ for (const vertex of polygon.vertices) {
1752
+ vertex.index = idx;
1753
+ vertices.push(vertex[0], vertex[1], vertex[2]);
1754
+ if (csg.color && csg.color.length >= 3) {
1755
+ colors.push(csg.color[0], csg.color[1], csg.color[2]);
1756
+ } else {
1757
+ colors.push(1, 1, 1);
1758
+ }
1759
+ idx++;
1760
+ }
1761
+ const first = polygon.vertices[0].index;
1762
+ for (let i = 2; i < polygon.vertices.length; i++) {
1763
+ const second = polygon.vertices[i - 1].index;
1764
+ const third = polygon.vertices[i].index;
1765
+ indices.push(first, second, third);
1766
+ }
1767
+ }
1768
+ const geo = new BufferGeometry();
1769
+ geo.setAttribute(
1770
+ "position",
1771
+ new BufferAttribute(new Float32Array(vertices), 3)
1772
+ );
1773
+ geo.setIndex(indices);
1774
+ if (colors.length > 0) {
1775
+ geo.setAttribute(
1776
+ "color",
1777
+ new BufferAttribute(new Float32Array(colors), 3)
1778
+ );
1779
+ }
1780
+ if (csg.transforms) {
1781
+ const transforms2 = new Matrix4();
1782
+ transforms2.fromArray(csg.transforms);
1783
+ geo.applyMatrix4(transforms2);
1784
+ }
1785
+ geo.computeVertexNormals();
1786
+ return geo;
1787
+ }
1788
+ if (csg.sides) {
1789
+ const vertices = [];
1790
+ const colors = [];
1791
+ for (const side of csg.sides) {
1792
+ vertices.push(side[0][0], side[0][1], 0);
1793
+ if (csg.color && csg.color.length >= 3) {
1794
+ colors.push(csg.color[0], csg.color[1], csg.color[2]);
1795
+ } else {
1796
+ colors.push(1, 1, 1);
1797
+ }
1798
+ }
1799
+ const geo = new BufferGeometry();
1800
+ geo.setAttribute(
1801
+ "position",
1802
+ new BufferAttribute(new Float32Array(vertices), 3)
1803
+ );
1804
+ if (colors.length > 0) {
1805
+ geo.setAttribute(
1806
+ "color",
1807
+ new BufferAttribute(new Float32Array(colors), 3)
1808
+ );
1809
+ }
1810
+ if (csg.transforms) {
1811
+ const transforms2 = new Matrix4();
1812
+ transforms2.fromArray(csg.transforms);
1813
+ geo.applyMatrix4(transforms2);
1814
+ }
1815
+ return geo;
1816
+ }
1817
+ console.error("Invalid CSG object: neither polygons nor sides found");
1818
+ return new BufferGeometry();
1819
+ }
1820
+
1738
1821
  // lib/vanilla/index.ts
1739
1822
  function getJscadModelForFootprint(footprint) {
1740
1823
  const vnode = h(Footprinter3d, { footprint });
1741
1824
  return render(vnode);
1742
1825
  }
1826
+ function createJSCADRenderer(_jscad) {
1827
+ function createJSCADRoot(container) {
1828
+ return {
1829
+ render(element) {
1830
+ const { geometries: geometries2 } = render(element);
1831
+ container.splice(0, container.length, ...geometries2);
1832
+ }
1833
+ };
1834
+ }
1835
+ return { createJSCADRoot };
1836
+ }
1743
1837
  export {
1744
- getJscadModelForFootprint
1838
+ Fragment,
1839
+ convertCSGToThreeGeom,
1840
+ createJSCADRenderer,
1841
+ getJscadModelForFootprint,
1842
+ h
1745
1843
  };
1746
1844
  //# sourceMappingURL=vanilla.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/vanilla/h.ts","../lib/Footprinter3d.tsx","../lib/vanilla/primitives.ts","../lib/vanilla/react-shim.ts","../lib/ChipBody.tsx","../lib/utils/range.ts","../lib/utils/getExpandedStroke.ts","../lib/DualInlinePackage.tsx","../lib/SmdChipLead.tsx","../lib/Tssop.tsx","../lib/A0402.tsx","../lib/A0603.tsx","../lib/A0805.tsx","../lib/qfp.tsx","../lib/PinRow.tsx","../lib/utils/getQuadCoords.ts","../lib/utils/getQuadPinMap.ts","../lib/qfn.tsx","../lib/SOT-235.tsx","../lib/A0201.tsx","../lib/A01005.tsx","../lib/A1206.tsx","../lib/A1210.tsx","../lib/A2010.tsx","../lib/A2512.tsx","../lib/FemaleHeader.tsx","../lib/PushButton.tsx","../lib/SOIC.tsx","../lib/VSSOP.tsx","../lib/vanilla/render.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 { fp } from \"@tscircuit/footprinter\"\nimport { Dip } from \"./DualInlinePackage\"\nimport { Tssop } from \"./Tssop\"\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 { A0201 } from \"./A0201\"\nimport { A01005 } from \"./A01005\"\nimport { A1206 } from \"./A1206\"\nimport { A1210 } from \"./A1210\"\nimport { A2010 } from \"./A2010\"\nimport { A2512 } from \"./A2512\"\nimport { FemaleHeader } from \"./FemaleHeader\"\nimport { PushButton } from \"./PushButton\"\nimport { SOIC } from \"./SOIC\"\nimport { VSSOP } from \"./VSSOP\"\n\n/**\n * Outputs a 3d model for any [footprinter string](https://github.com/tscircuit/footprinter)\n */\n\nexport const Footprinter3d = ({ footprint }: { footprint: string }) => {\n const fpJson = fp.string(footprint).json() as unknown as {\n w: number\n p: number\n h: number\n pl: number\n pw: number\n num_pins: number\n fn: string\n thermalpad: { x: number; y: number }\n imperial: String\n male: boolean\n female: boolean\n id: number //innerDiameter\n od: number //outerDiameter\n }\n\n switch (fpJson.fn) {\n case \"dip\":\n return (\n <Dip numPins={fpJson.num_pins} pitch={fpJson.p} bodyWidth={fpJson.w} />\n )\n case \"tssop\":\n return (\n <Tssop\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"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 \"qfn\":\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 width: fpJson.thermalpad.x,\n length: fpJson.thermalpad.y,\n }}\n />\n )\n case \"pinrow\":\n if (fpJson.male)\n return <PinRow numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\n if (fpJson.female)\n return <FemaleHeader numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\n\n case \"cap\": {\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color=\"#856c4d\" />\n case \"0603\":\n return <A0603 color=\"#856c4d\" />\n case \"0805\":\n return <A0805 color=\"#856c4d\" />\n case \"0201\":\n return <A0201 color=\"#856c4d\" />\n case \"01005\":\n return <A01005 color=\"#856c4d\" />\n case \"1206\":\n return <A1206 color=\"#856c4d\" />\n case \"1210\":\n return <A1210 color=\"#856c4d\" />\n case \"2010\":\n return <A2010 color=\"#856c4d\" />\n case \"2512\":\n return <A2512 color=\"#856c4d\" />\n }\n }\n case \"sot235\":\n return <SOT235 />\n case \"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 }\n\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 />\n case \"0603\":\n return <A0603 />\n case \"0805\":\n return <A0805 />\n case \"0201\":\n return <A0201 />\n case \"01005\":\n return <A01005 />\n case \"1206\":\n return <A1206 />\n case \"1210\":\n return <A1210 />\n case \"2010\":\n return <A2010 />\n case \"2512\":\n return <A2512 />\n }\n return null\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 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 { Colorize, RoundedCuboid, Translate } from \"jscad-fiber\"\n\nexport interface ChipBodyProps {\n width: number\n length: number\n height: number\n heightAboveSurface?: number\n center: { x: number; y: number; z: number }\n}\n\nexport const ChipBody = ({\n center,\n width,\n length,\n height,\n heightAboveSurface = 0.15,\n}: ChipBodyProps) => {\n // TODO the bodies flex a bit outward IRL\n return (\n <Colorize color=\"#555\">\n <Translate offset={center}>\n <Translate offset={{ x: 0, y: 0, z: height / 2 + heightAboveSurface }}>\n <RoundedCuboid roundRadius={0.2} size={[width, length, height]} />\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 points={svgPathPoints.map((p) => [p.x, p.y])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n <Translate\n offset={{\n x: x,\n y: y + (isRotated ? 1 : -1),\n z: z,\n }}\n >\n <Rotate rotation={[\"-90deg\", \"90deg\", isRotated ? \"180deg\" : \"0deg\"]}>\n <ExtrudeLinear height={2}>\n <Polygon\n points={getExpandedStroke(\n [\n [0, 0],\n [-1, 0],\n [-1, -1],\n ],\n 0.25,\n ).map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </>\n )\n}\n\nexport const Dip = ({\n numPins = 8,\n pitch = 2.54,\n bodyWidth = 6.4,\n}: { numPins?: number; pitch?: number; bodyWidth?: number }) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n const crossBodyPinWidth = bodyWidth + 1\n\n return (\n <>\n {range(numPins).map((i) => {\n const yRow = i % numPinsOnEachSide\n const xRow = (Math.floor(i / numPinsOnEachSide) - 0.5) * 2\n\n return (\n <DipPinLeg\n key={i}\n x={(xRow * crossBodyPinWidth) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={bodyWidth}\n length={numPinsOnEachSide * pitch + 0.5}\n height={DIP_PIN_HEIGHT - heightAboveSurface}\n heightAboveSurface={heightAboveSurface}\n center={{ x: 0, y: 0, z: heightAboveSurface }}\n />\n </>\n )\n}\n\nexport const DualInlinePackage = Dip\n","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 { 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\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: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\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 44:\n case 52:\n case 64:\n return 2.25\n case 208:\n return 1.65\n default:\n return 1\n }\n}\n\nconst getLeadWidth = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.5\n case 52:\n return width === 14 ? 0.45 : 0.55\n case 208:\n return 0.3\n default:\n return 0.25\n }\n}\nexport default QFP\n","import { Cuboid, Cylinder, Union, HullChain, Colorize, Hull } from \"jscad-fiber\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const bodyWidth = numberOfPins * pitch\n const shortSidePinLength = 3\n const xoff = -((numberOfPins - 1) / 2) * pitch\n return (\n <>\n <Cuboid\n color=\"#222\"\n size={[bodyWidth, pinThickness * 3, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) => (\n <>\n {/*Short pins (top) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[\n xoff + i * pitch,\n 0,\n bodyHeight * 0.9 + bodyHeight / 2,\n ]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[xoff + i * pitch, 0, bodyHeight + bodyHeight / 2]}\n />\n </Hull>\n </Colorize>\n {/*Long pins (bottom) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[xoff + i * pitch, 0, (-longSidePinLength / 2) * 0.9]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n longSidePinLength,\n ]}\n center={[xoff + i * pitch, 0, -longSidePinLength / 2]}\n />\n </Hull>\n </Colorize>\n </>\n ))}\n </>\n )\n}\n","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 { 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 { Cuboid, Colorize, Hull, Subtract, Cylinder } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n outerDiameter = 0.945,\n innerDiameter = 0.945,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const bodyDepth = pinThickness * 2 + outerDiameter\n const bodyHeight = 5\n const bodyWidth = (numberOfPins - 1) * pitch + outerDiameter + pitch / 2\n const gapWidth = pinThickness * 1.6\n const xoff = -((numberOfPins - 1) / 2) * pitch\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyWidth, bodyDepth, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) =>\n innerDiameter ? (\n <Cylinder\n key={i}\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n key={i}\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n />\n ),\n )}\n </Subtract>\n </Colorize>\n )\n return (\n <>\n {Body}\n {Array.from({ length: numberOfPins }, (_, i) => (\n <Colorize color=\"silver\" key={i}>\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[xoff + i * pitch, 0, (-legsLength / 2) * 0.9]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[xoff + i * pitch, 0, -legsLength / 2]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[xoff + i * pitch, 0, (gapWidth / 2) * 0.5]}\n />\n </Colorize>\n ))}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n ExtrudeLinear,\n Polygon,\n Rotate,\n RoundedCuboid,\n Translate,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport const PushButton = ({\n width,\n length,\n innerDiameter = 1,\n}: { width: number; length: number; innerDiameter?: number }) => {\n const bodyWidth = width\n const bodyLength = length\n const bodyHeight = width * 0.7\n const legWidth = innerDiameter / 2.5\n return (\n <>\n <RoundedCuboid\n color=\"#1a1a1f\"\n center={[0, 0, bodyHeight / 2]}\n size={[bodyLength, bodyLength, bodyHeight]}\n roundRadius={0.3}\n />\n <RoundedCuboid\n color=\"#f2f2f2\"\n center={[0, 0, bodyHeight + (bodyHeight * 0.1) / 2.5]}\n size={[bodyLength, bodyLength, bodyHeight * 0.1]}\n roundRadius={0.14}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.8}\n radius={bodyWidth / 3}\n center={[0, 0, bodyHeight + (bodyHeight * 0.8) / 2]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{ x: bodyWidth / 2, y: bodyLength / 2, z: -bodyHeight * 1.2 }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: bodyWidth / 2 + innerDiameter / 3.6,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n </>\n )\n}\nexport interface PushButtonLegProps {\n thickness: number\n width: number\n horizontalLength: number\n verticalLength: number\n rotation?: number\n position?: { x: number; y: number; z?: number }\n}\n\nexport const PushButtonLeg = (props: PushButtonLegProps) => {\n const {\n thickness,\n width,\n horizontalLength,\n verticalLength,\n rotation = 0,\n position,\n } = props\n const points: [number, number][] = [\n [0, horizontalLength],\n [-verticalLength / 3, horizontalLength / 3],\n [-verticalLength / 5, horizontalLength / 4],\n [0, 0],\n ]\n const polygon = getExpandedStroke(points, thickness)\n\n return (\n <Colorize color=\"#f2f2f2\">\n <Translate\n offset={{\n x: position?.x || 0,\n y: position?.y || 0,\n z: position?.z || 0,\n }}\n >\n <Rotate rotation={[0, 55, rotation]}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.y, p.x])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// SOIC typical body and lead dimensions\nexport const SOIC = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n const bodyHeight = 1.0\n const leadHeight = 0.8\n const leadBodyOffset = leadLength * 0\n const fullLength = pitch * (sidePinCount - 1) + leadWidth + 0.2\n const bodyWidthAdjusted = bodyWidth * 0.55\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.2}\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.2}\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.05}\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.05}\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 {\n primitives,\n transforms,\n booleans,\n hulls,\n geometries,\n extrusions,\n} 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 type Color,\n} from \"./primitives\"\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(node: any, colorCtx?: Color): ColoredGeom[] {\n if (node == null || node === false) return []\n if (Array.isArray(node)) return node.flatMap((n) => renderNode(n, colorCtx))\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))\n }\n\n if (type === Colorize) {\n const newColor: Color = props?.color\n return children.flatMap((c) => renderNode(c, newColor ?? colorCtx))\n }\n\n if (type === Translate) {\n const off = toVec3(\n props?.offset ?? { x: props?.x, y: props?.y, z: props?.z },\n )\n const geoms = children.flatMap((c) => renderNode(c, colorCtx))\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) => renderNode(c, colorCtx))\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))\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 }]\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))\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 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 ) {\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 {\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)\n }\n\n // Unknown type -> recurse\n return children.flatMap((c) => renderNode(c, colorCtx))\n}\n\nexport function render(root: VNode): RenderResult {\n const geometries = renderNode(root)\n return { geometries }\n}\n","import { Footprinter3d } from \"../Footprinter3d\"\nimport { h } from \"./h\"\nimport { render, type RenderResult } from \"./render\"\n\nexport function getJscadModelForFootprint(footprint: string): RenderResult {\n const vnode = h(Footprinter3d, { footprint })\n return render(vnode)\n}\n"],"mappings":";AAMO,IAAM,WAAW,OAAO,UAAU;AAElC,SAAS,EAAE,MAAW,UAAe,cAA4B;AACtE,QAAM,WAAW,aAAa,SAC1B,eACA,OAAO,aAAa,SAClB,CAAC,MAAM,QAAQ,IACf,CAAC;AACP,QAAM,eAAsB,CAAC;AAC7B,QAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ,GAAG;AAAA,IAC9D;AAAA,EACF;AACA,aAAW,MAAM,OAAO;AACtB,QAAI,MAAM,QAAQ,OAAO,MAAO;AAChC,QAAI,MAAM,QAAQ,EAAE,EAAG,cAAa,KAAK,GAAG,EAAE;AAAA,QACzC,cAAa,KAAK,EAAE;AAAA,EAC3B;AACA,SAAO;AAAA,IACL;AAAA,IACA,QACG,SAAS,MAAM,aAAa,SACzB,EAAE,GAAG,OAAO,UAAU,OAAU,IAChC,UAAU,CAAC;AAAA,IACjB,UAAU;AAAA,EACZ;AACF;;;AC/BA,SAAS,UAAU;;;ACAZ,IAAM,SAAS,OAAO,QAAQ;AAC9B,IAAM,OAAO,OAAO,MAAM;AAC1B,IAAM,WAAW,OAAO,UAAU;AAClC,IAAM,SAAS,OAAO,QAAQ;AAC9B,IAAM,gBAAgB,OAAO,eAAe;AAE5C,IAAM,YAAY,OAAO,WAAW;AACpC,IAAM,SAAS,OAAO,QAAQ;AAE9B,IAAM,QAAQ,OAAO,OAAO;AAC5B,IAAM,WAAW,OAAO,UAAU;AAClC,IAAM,OAAO,OAAO,MAAM;AAE1B,IAAM,WAAW,OAAO,UAAU;AAElC,IAAM,UAAU,OAAO,SAAS;AAChC,IAAM,gBAAgB,OAAO,eAAe;;;ACd5C,IAAMA,YAAW;AACjB,IAAM,MAAM,CAAC,MAAW,OAAY,SAAe,EAAE,MAAM,KAAK;AAChE,IAAM,OAAO,CAAC,MAAW,OAAY,SAAe,EAAE,MAAM,KAAK;;;ACMjE,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,OAAAC;AAAA,EACA;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC,sBAAqB;AACvB,MAAqB;AAEnB,SACE,oBAAC,YAAS,OAAM,QACd,8BAAC,aAAU,QAAQ,QACjB,8BAAC,aAAU,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAGD,WAAS,IAAIC,oBAAmB,GAClE,8BAAC,iBAAc,aAAa,KAAK,MAAM,CAACF,SAAO,QAAQC,QAAM,GAAG,GAClE,GACF,GACF;AAEJ;;;AC3BO,IAAM,QAAQ,CAAC,QAAgB,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC;;;ACoBtE,SAAS,kBACd,aACAE,SACS;AACT,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,QAAM,SAAkB,MAAM,QAAQ,YAAY,CAAC,CAAC,IAC/C,YAAoB,IAAI,CAAC,CAAC,GAAG,CAAC,OAAyB,EAAE,GAAG,EAAE,EAAE,IACjE;AAEJ,QAAM,YAAYA,UAAQ;AAC1B,QAAM,WAAoB,CAAC;AAC3B,QAAM,YAAqB,CAAC;AAE5B,WAAS,UAAU,IAAW,IAAkB;AAC9C,UAAM,KAAK,GAAG,IAAI,GAAG;AACrB,UAAM,KAAK,GAAG,IAAI,GAAG;AACrB,UAAM,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAC1C,WAAO,EAAE,GAAG,CAAC,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA,EAC3C;AAEA,WAAS,SAAS,OAAc,QAAe,QAAgB;AAC7D,UAAM,WAAW;AAAA,MACf,GAAG,MAAM,IAAI,OAAO,IAAI,YAAY;AAAA,MACpC,GAAG,MAAM,IAAI,OAAO,IAAI,YAAY;AAAA,IACtC;AACA,QAAI,SAAS,GAAG;AACd,eAAS,KAAK,QAAQ;AAAA,IACxB,OAAO;AACL,gBAAU,QAAQ,QAAQ;AAAA,IAC5B;AAAA,EACF;AAGA,QAAM,cAAc,UAAU,OAAO,CAAC,GAAI,OAAO,CAAC,CAAE;AACpD,WAAS,OAAO,CAAC,GAAI,aAAa,CAAC;AACnC,WAAS,OAAO,CAAC,GAAI,aAAa,EAAE;AAGpC,WAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,KAAK;AAC1C,UAAM,OAAO,OAAO,IAAI,CAAC;AACzB,UAAM,UAAU,OAAO,CAAC;AACxB,UAAM,OAAO,OAAO,IAAI,CAAC;AAEzB,UAAM,aAAa,UAAU,MAAM,OAAO;AAC1C,UAAM,aAAa,UAAU,SAAS,IAAI;AAG1C,UAAM,SAAS,WAAW,IAAI,WAAW;AACzC,UAAM,SAAS,WAAW,IAAI,WAAW;AACzC,UAAM,cAAc,KAAK,KAAK,SAAS,SAAS,SAAS,MAAM;AAG/D,UAAM,aAAa;AACnB,QAAI,cAAc,IAAI,aAAa,WAAW;AAE5C,eAAS,SAAS,YAAY,CAAC;AAC/B,eAAS,SAAS,YAAY,CAAC;AAC/B,eAAS,SAAS,YAAY,EAAE;AAChC,eAAS,SAAS,YAAY,EAAE;AAAA,IAClC,OAAO;AAEL,YAAM,QAAQ,IAAI;AAClB,eAAS,SAAS,EAAE,GAAG,SAAS,OAAO,GAAG,SAAS,MAAM,GAAG,CAAC;AAC7D,eAAS,SAAS,EAAE,GAAG,SAAS,OAAO,GAAG,SAAS,MAAM,GAAG,EAAE;AAAA,IAChE;AAAA,EACF;AAGA,QAAM,aAAa;AAAA,IACjB,OAAO,OAAO,SAAS,CAAC;AAAA,IACxB,OAAO,OAAO,SAAS,CAAC;AAAA,EAC1B;AACA,WAAS,OAAO,OAAO,SAAS,CAAC,GAAI,YAAY,CAAC;AAClD,WAAS,OAAO,OAAO,SAAS,CAAC,GAAI,YAAY,EAAE;AAGnD,SAAO,CAAC,GAAG,UAAU,GAAG,SAAS;AACnC;;;ACzFA,IAAM,eAAe,CAAC,WAAuC;AAC3D,QAAM,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAM,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAM,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAM,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAMC,WAAS,OAAO;AACtB,QAAM,SAAS,OAAOA;AACtB,SAAO,OAAO,IAAI,CAAC,OAAO;AAAA,IACxB,IAAI,EAAE,IAAI,QAAQ,OAAO,QAAQ,KAAK;AAAA,IACtC,IAAI,EAAE,IAAI,QAAQ;AAAA,EACpB,EAAE;AACJ;AAEA,IAAM,gBAAgB,aAAa;AAAA,EACjC,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAAA,EAChB,EAAE,GAAG,IAAI,GAAG,IAAI;AAClB,CAAC;AAED,IAAM,iBAAiB;AACvB,IAAM,qBAAqB;AAEpB,IAAM,YAAY,CAAC,EAAE,GAAG,GAAG,EAAE,MAA2C;AAC7E,QAAM,YAAY,IAAI;AACtB,SACE,qBAAAC,WAAA,EACE;AAAA,wBAAC,aAAU,QAAQ,EAAE,GAAG,IAAI,OAAO,GAAG,GAAG,EAAK,GAC5C,8BAAC,UAAO,UAAU,CAAC,UAAU,GAAG,OAAO,GACrC,8BAAC,iBAAc,QAAQ,MACrB,8BAAC,WAAQ,QAAQ,cAAc,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GACzD,GACF,GACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,UACN;AAAA,UACA,GAAG,KAAK,YAAY,IAAI;AAAA,UACxB;AAAA,QACF;AAAA,QAEA,8BAAC,UAAO,UAAU,CAAC,UAAU,SAAS,YAAY,WAAW,MAAM,GACjE,8BAAC,iBAAc,QAAQ,GACrB;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ;AAAA,cACN;AAAA,gBACE,CAAC,GAAG,CAAC;AAAA,gBACL,CAAC,IAAI,CAAC;AAAA,gBACN,CAAC,IAAI,EAAE;AAAA,cACT;AAAA,cACA;AAAA,YACF,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAAA;AAAA,QACzB,GACF,GACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEO,IAAM,MAAM,CAAC;AAAA,EAClB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AACd,MAAgE;AAC9D,QAAM,oBAAoB,KAAK,MAAM,UAAU,CAAC;AAChD,QAAM,oBAAoB,YAAY;AAEtC,SACE,qBAAAA,WAAA,EACG;AAAA,UAAM,OAAO,EAAE,IAAI,CAAC,MAAM;AACzB,YAAM,OAAO,IAAI;AACjB,YAAM,QAAQ,KAAK,MAAM,IAAI,iBAAiB,IAAI,OAAO;AAEzD,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,GAAI,OAAO,oBAAqB;AAAA,UAChC,GAAG,OAAO,SAAU,oBAAoB,KAAK,IAAK;AAAA,UAClD,GAAG,iBAAiB,IAAI;AAAA;AAAA,QAHnB;AAAA,MAIP;AAAA,IAEJ,CAAC;AAAA,IACD;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,QAAQ,oBAAoB,QAAQ;AAAA,QACpC,QAAQ,iBAAiB;AAAA,QACzB;AAAA,QACA,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,mBAAmB;AAAA;AAAA,IAC9C;AAAA,KACF;AAEJ;;;ACvFA,SAAS,gBACP,GACA;AAAA,EACE,QAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,GACA;AACA,MAAI,CAAC,YAAa,eAAc,eAAe;AAC/C,MAAI,4BAA4B,eAAe,mBAAmB;AAClE,MAAI,4BAA4B,GAAG;AACjC,mBAAe;AACf,gCAA4B;AAAA,EAC9B;AACA,QAAM,aAAa,mBAAmB;AACtC,QAAM,WACJ,mBACA,eACC,eAAe,mBAAmB,eAAe;AAEpD,MAAI,KAAK,WAAY,QAAO;AAC5B,MAAI,KAAK,SAAU,QAAOA;AAE1B,QAAM,KAAK,IAAI,eAAe,WAAW;AAGzC,SAAOA,YAAU,IAAI,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI;AACtD;AAKO,IAAM,cAAc,CAAC,UAA4B;AACtD,QAAM,EAAE,WAAW,OAAAC,SAAO,kBAAkB,cAAc,QAAAD,UAAQ,SAAS,IACzE;AAEF,QAAM,IAAI;AAEV,QAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EACpC,IAAI,CAAC,GAAG,MAAO,KAAK,IAAI,KAAM,YAAY,EAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,gBAAgB,GAAG,KAAK,CAAC,CAAqB;AAchE,QAAM,UAAU,kBAAkB,QAAQ,SAAS;AACnD,SACE,oBAAC,YAAS,OAAM,QACd,8BAAC,aAAU,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,SAAS,GACvD,8BAAC,UAAO,UAAU,CAAC,SAAS,GAAG,YAAY,CAAC,GAC1C,8BAAC,aAAU,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAACC,UAAQ,EAAE,GAC7C,8BAAC,iBAAc,QAAQA,SACrB,8BAAC,WAAQ,QAAQ,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GACnD,GACF,GACF,GACF,GACF;AAEJ;;;ACvFO,IAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,eAAe,KAAK,KAAK,WAAW,CAAC;AAC3C,QAAMC,eAAc,QAAQ,WAAY,IAAI,YAAY;AACxD,QAAM,qBAAsB,eAAe,KAAK,QAAS;AACzD,QAAM,gBAAgB;AAEtB,SACE,qBAAAC,WAAA,EACG;AAAA,UAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,UACR,GAAG,CAAC,YAAY,IAAI;AAAA,UACpB,GAAG,IAAI,QAAQ;AAAA,UACf,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX,kBAAkB;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,QAAQ;AAAA;AAAA,MAVH;AAAA,IAWP,CACD;AAAA,IACA,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,KAAK;AAAA,QACf,UAAU;AAAA,UACR,GAAG,YAAY,IAAI;AAAA,UACnB,GAAG,IAAI,QAAQ;AAAA,UACf,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX,kBAAkB;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,QAAQ;AAAA;AAAA,MAXH;AAAA,IAYP,CACD;AAAA,IACD;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,gBAAgB,EAAE;AAAA,QAC3C,OAAO,YAAY,YAAY;AAAA,QAC/B,QAAQD;AAAA,QACR,QAAQ;AAAA;AAAA,IACV;AAAA,KACF;AAEJ;;;AC7DA,IAAM,aAAa;AACnB,IAAM,QAAQ;AACd,IAAM,SAAS;AACf,IAAM,kBAAkB;AAExB,IAAM,aAAa,aAAa,kBAAkB;AAE3C,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAAC,YAAY,OAAO,MAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAG,SAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAAC,iBAAiB,QAAQ,KAAK;AAAA,QACrC,QAAQ,CAAC,aAAa,IAAI,kBAAkB,GAAG,GAAG,SAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAAC,iBAAiB,QAAQ,KAAK;AAAA,QACrC,QAAQ,CAAC,CAAC,aAAa,IAAI,kBAAkB,GAAG,GAAG,SAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;ACxBA,IAAMC,cAAa;AACnB,IAAMC,cAAaD,cAAa,MAAM;AACtC,IAAM,mBAAmB;AACzB,IAAME,SAAQ;AACd,IAAMC,UAAS;AAER,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAC,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACH,aAAYC,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAAC,kBAAkBD,QAAOC,OAAM;AAAA,QACtC,QAAQ,CAACH,cAAa,IAAI,mBAAmB,GAAG,GAAGG,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAAC,kBAAkBD,QAAOC,OAAM;AAAA,QACtC,QAAQ,CAAC,CAACH,cAAa,IAAI,mBAAmB,GAAG,GAAGG,UAAS,CAAC;AAAA,QAC9D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC7BA,IAAME,cAAa;AACnB,IAAMC,SAAQ;AACd,IAAMC,UAAS;AACf,IAAMC,mBAAkB;AAExB,IAAMC,cAAaJ,cAAaG,mBAAkB;AAE3C,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACD,aAAYH,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAAC,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC1BO,IAAM,MAAM,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,eAAe,WAAW;AAGhC,MAAI,CAAC,MAAO,SAAQ,SAAS,UAAU,SAAS;AAChD,MAAI,CAAC,iBAAkB,oBAAmB,oBAAoB,QAAQ;AACtE,MAAI,CAAC,UAAW,aAAY,aAAa,UAAU,SAAS;AAC5D,MAAI,CAAC,UAAW,aAAY,SAAS,eAAe;AAEpD,QAAMI,eAAa;AACnB,QAAM,qBAAsB,eAAe,KAAK,QAAS;AACzD,QAAMC,eAAaD,eAAa,IAAI;AACpC,QAAM,YAAYC;AAClB,QAAM,aAAa;AACnB,QAAM,gBAAgB;AACtB,QAAM,gBAAgB,YAAY,aAAa;AAE/C,SACE,qBAAAC,WAAA,EAEG;AAAA,UAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,UACR,GAAG,CAAC,YAAY;AAAA,UAChB,GAAG,IAAI,QAAQ;AAAA,UACf,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,QAAQ;AAAA;AAAA,MAVH,QAAQ,CAAC;AAAA,IAWhB,CACD;AAAA,IAGA,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,KAAK;AAAA,QACf,UAAU;AAAA,UACR,GAAG,YAAY;AAAA,UACf,GAAG,IAAI,QAAQ;AAAA,UACf,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,QAAQ;AAAA;AAAA,MAXH,SAAS,CAAC;AAAA,IAYjB,CACD;AAAA,IAGA,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,KAAK,KAAK;AAAA,QACpB,UAAU;AAAA,UACR,GAAG,IAAI,QAAQ;AAAA,UACf,GAAG,CAACD,eAAa;AAAA,UACjB,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,QAAQ;AAAA;AAAA,MAXH,UAAU,CAAC;AAAA,IAYlB,CACD;AAAA,IAGA,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,CAAC,KAAK,KAAK;AAAA,QACrB,UAAU;AAAA,UACR,GAAG,IAAI,QAAQ;AAAA,UACf,GAAGA,eAAa;AAAA,UAChB,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,QAAQ;AAAA;AAAA,MAXH,OAAO,CAAC;AAAA,IAYf,CACD;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,gBAAgB,EAAE;AAAA,QAC3C,OAAO;AAAA,QACP,QAAQD;AAAA,QACR,QAAQ;AAAA;AAAA,IACV;AAAA,KACF;AAEJ;AAEA,IAAM,WAAW,CAAC,UAAkBG,YAA2B;AAC7D,UAAQ,UAAU;AAAA,IAChB,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAOA,YAAU,KAAK,IAAI;AAAA,IAC5B,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,sBAAsB,CAAC,aAA6B;AACxD,UAAQ,UAAU;AAAA,IAChB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,eAAe,CAAC,UAAkBA,YAA2B;AACjE,UAAQ,UAAU;AAAA,IAChB,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAOA,YAAU,KAAK,OAAO;AAAA,IAC/B,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;ACxJO,IAAM,SAAS,CAAC;AAAA,EACrB;AAAA,EACA,QAAQ;AAAA,EACR,oBAAoB;AACtB,MAIM;AACJ,QAAM,eAAe;AACrB,QAAM,aAAa;AACnB,QAAM,YAAY,eAAe;AACjC,QAAM,qBAAqB;AAC3B,QAAM,OAAO,GAAG,eAAe,KAAK,KAAK;AACzC,SACE,qBAAAC,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,CAAC,WAAW,eAAe,GAAG,UAAU;AAAA,QAC9C,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC;AAAA;AAAA,IAC/B;AAAA,IACC,MAAM,KAAK,EAAE,QAAQ,aAAa,GAAG,CAAC,GAAG,MACxC,qBAAAA,WAAA,EAEE;AAAA,0BAAC,YAAS,OAAM,QACd,+BAAC,QACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM,CAAC,cAAc,cAAc,qBAAqB,GAAG;AAAA,YAC3D,QAAQ;AAAA,cACN,OAAO,IAAI;AAAA,cACX;AAAA,cACA,aAAa,MAAM,aAAa;AAAA,YAClC;AAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM;AAAA,cACJ,eAAe;AAAA,cACf,eAAe;AAAA,cACf;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAG,aAAa,aAAa,CAAC;AAAA;AAAA,QAC3D;AAAA,SACF,GACF;AAAA,MAEA,oBAAC,YAAS,OAAM,QACd,+BAAC,QACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM,CAAC,cAAc,cAAc,oBAAoB,GAAG;AAAA,YAC1D,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAI,CAAC,oBAAoB,IAAK,GAAG;AAAA;AAAA,QAC9D;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM;AAAA,cACJ,eAAe;AAAA,cACf,eAAe;AAAA,cACf;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,oBAAoB,CAAC;AAAA;AAAA,QACtD;AAAA,SACF,GACF;AAAA,OACF,CACD;AAAA,KACH;AAEJ;;;ACvEO,IAAM,gBAAgB,CAAC,WAQxB;AACJ,QAAM,YAAY,CAAC,QAAQ,UAAU,SAAS,KAAK;AACnD,QAAM,EAAE,WAAW,IAAI,GAAG,GAAAC,IAAG,GAAG,IAAI,YAAY,IAAI;AACpD,QAAM,eAAe,YAAY;AACjC,QAAM,OAAO,UAAU,KAAK,OAAO,KAAK,KAAK,YAAY,CAAC;AAC1D,QAAM,OAAO,KAAK,KAAK;AAEvB,QAAM,MAAM,KAAK,eAAe;AAEhC,QAAM,MAAM,KAAK,eAAe;AAGhC,QAAM,QAAQ,cAAc,KAAK,IAAI,CAAC,KAAK;AAE3C,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,MAAM,IAAI,MAAM,GAAG,GAAG,OAAO;AAAA,IAC9D,KAAK;AACH,aAAO,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,GAAG,CAACA,KAAI,IAAI,OAAO,GAAG,OAAO;AAAA,IAC/D,KAAK;AACH,aAAO,EAAE,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,GAAG,OAAO;AAAA,IAC9D,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,IAAI,MAAM,GAAG,GAAGA,KAAI,IAAI,OAAO,GAAG,OAAO;AAAA,IAC7D;AACE,YAAM,IAAI,MAAM,oBAAoB;AAAA,EACxC;AACF;;;ACzBO,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKgB;AACd,QAAM,UAAoB,CAAC;AAC3B,QAAM,gBAAgB,WAAW;AACjC,MAAI,8BAA8B;AAGlC,QAAM,MAA0C,CAAC;AACjD,aAAW,aAAa,eAAe,CAAC,GAAG;AACzC,QAAI,SAAS,IAAI;AAAA,EACnB;AACA,MAAI,CAAC,IAAI,YAAY,CAAC,IAAI,WAAW,CAAC,IAAI,aAAa,CAAC,IAAI,YAAY;AACtE,QAAI,WAAW;AAAA,EACjB;AACA,MAAI,CAAC,IAAI,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,YAAY,CAAC,IAAI,QAAQ;AAClE,QAAI,IAAI,UAAU;AAChB,UAAI,SAAS;AAAA,IACf,WAAW,IAAI,SAAS;AACtB,UAAI,WAAW;AAAA,IACjB,WAAW,IAAI,WAAW;AACxB,UAAI,YAAY;AAAA,IAClB,WAAW,IAAI,YAAY;AACzB,UAAI,UAAU;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,IAAI,YAAY,IAAI,QAAQ;AAC9B,kCAA8B;AAAA,EAChC,WAAW,IAAI,YAAY,IAAI,WAAW;AACxC,kCAA8B;AAAA,EAChC,WAAW,IAAI,cAAc,IAAI,SAAS;AACxC,kCAA8B,gBAAgB;AAAA,EAChD,WAAW,IAAI,cAAc,IAAI,UAAU;AACzC,kCAA8B,gBAAgB;AAAA,EAChD,WAAW,IAAI,aAAa,IAAI,WAAW;AACzC,kCAA8B,gBAAgB,IAAI;AAAA,EACpD,WAAW,IAAI,aAAa,IAAI,QAAQ;AACtC,kCAA8B,gBAAgB;AAAA,EAChD,WAAW,IAAI,WAAW,IAAI,UAAU;AACtC,kCAA8B,gBAAgB,IAAI;AAAA,EACpD,WAAW,IAAI,WAAW,IAAI,SAAS;AACrC,kCAA8B,gBAAgB;AAAA,EAChD;AAEA,UAAQ,KAAK,EAAE;AAKf,WAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,YAAQ,2BAA2B,IAAI,IAAI;AAC3C,QAAI,OAAO,CAAC,IAAI;AACd;AACA,UAAI,8BAA8B,UAAU;AAC1C,sCAA8B;AAAA,MAChC;AAAA,IACF,OAAO;AACL;AACA,UAAI,8BAA8B,GAAG;AACnC,sCAA8B;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AChFO,IAAM,MAAM,CAAC;AAAA,EAClB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAAC,eAAa;AAAA,EACb,gBAAgB;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,sBAAsB;AACxB,MAaM;AACJ,QAAM,UAAU,cAAc;AAAA,IAC5B;AAAA,IACA,IAAI;AAAA,IACJ,KAAK;AAAA,EACP,CAAC;AACD,QAAM,eAAe,CAAC;AACtB,QAAM,MAAM,WAAW;AACvB,WAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI,cAAc;AAAA,MAChB,WAAW;AAAA,MACX,IAAI,IAAI;AAAA,MACR,GAAG;AAAA,MACH,GAAGA;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,aAAa;AAAA,IACf,CAAC;AAED,QAAI,KAAK;AACT,QAAI,KAAK;AACT,QAAI,gBAAgB,QAAQ;AAC1B;AAAC,OAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAAA,IACrB;AAEA,UAAM,KAAK,QAAQ,IAAI,CAAC;AACxB,iBAAa,KAAK,EAAE,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;AAAA,EACxC;AAEA,SACE,qBAAAC,WAAA,EACE;AAAA,wBAAC,YAAS,OAAM,QACd;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,gBAAgB,EAAE;AAAA,QAC3C,MAAM,CAAC,WAAWD,cAAY,aAAa;AAAA;AAAA,IAC7C,GACF;AAAA,IACC,aAAa,IAAI,CAAC,GAAG,MACpB;AAAA,MAAC;AAAA;AAAA,QAEC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,sBAAsB,EAAE;AAAA,QACrD,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,mBAAmB;AAAA;AAAA,MAFjC;AAAA,IAGP,CACD;AAAA,IACA,gBAAgB,WAAW,UAC1B,gBAAgB,UAAU,UACxB;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,sBAAsB,EAAE;AAAA,QACjD,MAAM;AAAA,UACJ,eAAe;AAAA,UACf,eAAe;AAAA,UACf;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KAEN;AAEJ;AAEA,IAAO,cAAQ;;;ACtFR,IAAM,SAAS,MAAM;AAC1B,QAAM,YAAY;AAClB,QAAM,YAAY;AAClB,QAAME,eAAa;AACnB,QAAM,aAAa;AACnB,QAAM,YAAY;AAClB,QAAM,gBAAgB;AACtB,QAAM,aAAa;AACnB,QAAM,mBAAmB;AACzB,QAAM,WAAW;AAGjB,QAAM,uBAAuB,YAAY;AAEzC,SACE,qBAAAC,WAAA,EAEE;AAAA;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,KAAK;AAAA,QACf,UAAU;AAAA,UACR,GAAG,YAAY,IAAI,uBAAuB;AAAA,UAC1C,GAAG;AAAA,UACH,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA,cAAc;AAAA,QACd,QAAQ;AAAA;AAAA,MAXH;AAAA,IAYP;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,KAAK;AAAA,QACf,UAAU;AAAA,UACR,GAAG,YAAY,IAAI,uBAAuB;AAAA,UAC1C,GAAG;AAAA,UACH,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA,cAAc;AAAA,QACd,QAAQ;AAAA;AAAA,MAXH;AAAA,IAYP;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,UACR,GAAG,CAAC,YAAY,IAAI,uBAAuB;AAAA,UAC3C,GAAG;AAAA,UACH,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA,cAAc;AAAA,QACd,QAAQ;AAAA;AAAA,MAVH;AAAA,IAWP;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,UACR,GAAG,CAAC,YAAY,IAAI,uBAAuB;AAAA,UAC3C,GAAG;AAAA,UACH,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA,cAAc;AAAA,QACd,QAAQ;AAAA;AAAA,MAVH;AAAA,IAWP;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,UACR,GAAG,CAAC,YAAY,IAAI,uBAAuB;AAAA,UAC3C,GAAG;AAAA,UACH,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX;AAAA,QACA,cAAc;AAAA,QACd,QAAQ;AAAA;AAAA,MAVH;AAAA,IAWP;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,QAC3B,OAAO;AAAA,QACP,QAAQD;AAAA,QACR,QAAQ;AAAA;AAAA,IACV;AAAA,KACF;AAEJ;AAEA,IAAO,kBAAQ;;;AClGf,IAAME,cAAa;AACnB,IAAMC,SAAQ;AACd,IAAMC,UAAS;AACf,IAAMC,mBAAkB;AAExB,IAAMC,cAAaJ,cAAaG,mBAAkB;AAE3C,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACD,aAAYH,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAAC,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC3BA,IAAMI,cAAa;AACnB,IAAMC,SAAQ;AACd,IAAMC,UAAS;AACf,IAAMC,mBAAkB;AAExB,IAAMC,cAAaJ,cAAaG,mBAAkB;AAE3C,IAAM,SAAS,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC5C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACD,aAAYH,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAAC,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC3BA,IAAMI,cAAa;AACnB,IAAMC,SAAQ;AACd,IAAMC,UAAS;AACf,IAAMC,mBAAkB;AAExB,IAAMC,cAAaJ,cAAaG,mBAAkB;AAE3C,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACD,aAAYH,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAAC,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC3BA,IAAMI,cAAa;AACnB,IAAMC,SAAQ;AACd,IAAMC,UAAS;AACf,IAAMC,mBAAkB;AAExB,IAAMC,cAAaJ,cAAaG,mBAAkB;AAE3C,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACD,aAAYH,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAAC,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC3BA,IAAMI,cAAa;AACnB,IAAMC,SAAQ;AACd,IAAMC,UAAS;AACf,IAAMC,mBAAkB;AAExB,IAAMC,cAAaJ,cAAaG,mBAAkB;AAE3C,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACD,aAAYH,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAAC,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC3BA,IAAMI,cAAa;AACnB,IAAMC,SAAQ;AACd,IAAMC,UAAS;AACf,IAAMC,mBAAkB;AAExB,IAAMC,cAAaJ,cAAaG,mBAAkB;AAE3C,IAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,MAAM;AAC3C,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACD,aAAYH,QAAOC,OAAM;AAAA,QAChC,QAAQ,CAAC,GAAG,GAAGA,UAAS,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC5D,OAAM;AAAA;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAACC,kBAAiBF,QAAOC,OAAM;AAAA,QACrC,QAAQ,CAAC,CAACF,cAAa,IAAIG,mBAAkB,GAAG,GAAGD,UAAS,CAAC;AAAA,QAC7D,OAAM;AAAA;AAAA,IACR;AAAA,KACF;AAEJ;;;AC3BO,IAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,MAMM;AACJ,QAAM,eAAe,gBAAgB;AACrC,QAAM,YAAY,eAAe,IAAI;AACrC,QAAM,aAAa;AACnB,QAAM,aAAa,eAAe,KAAK,QAAQ,gBAAgB,QAAQ;AACvE,QAAM,WAAW,eAAe;AAChC,QAAM,OAAO,GAAG,eAAe,KAAK,KAAK;AACzC,QAAM,OACJ,oBAAC,YAAS,OAAM,WACd,+BAAC,YACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,CAAC,WAAW,WAAW,UAAU;AAAA,QACvC,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC;AAAA;AAAA,IAC/B;AAAA,IACC,MAAM;AAAA,MAAK,EAAE,QAAQ,aAAa;AAAA,MAAG,CAAC,GAAG,MACxC,gBACE;AAAA,QAAC;AAAA;AAAA,UAEC,QAAQ,aAAa;AAAA,UACrB,QAAQ,gBAAgB;AAAA,UACxB,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAG,aAAa,CAAC;AAAA,UAC5C,OAAM;AAAA;AAAA,QAJD;AAAA,MAKP,IAEA;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM,CAAC,UAAU,UAAU,UAAU;AAAA,UACrC,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAG,aAAa,CAAC;AAAA;AAAA,QAFvC;AAAA,MAGP;AAAA,IAEJ;AAAA,KACF,GACF;AAEF,SACE,qBAAAI,WAAA,EACG;AAAA;AAAA,IACA,MAAM,KAAK,EAAE,QAAQ,aAAa,GAAG,CAAC,GAAG,MACxC,qBAAC,YAAS,OAAM,UACd;AAAA,2BAAC,QACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM,CAAC,cAAc,cAAc,aAAa,GAAG;AAAA,YACnD,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAI,CAAC,aAAa,IAAK,GAAG;AAAA;AAAA,QACvD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM,CAAC,eAAe,KAAK,eAAe,KAAK,UAAU;AAAA,YACzD,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,aAAa,CAAC;AAAA;AAAA,QAC/C;AAAA,SACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,MAAM,CAAC,UAAU,UAAU,WAAW,GAAG;AAAA,UACzC,QAAQ,CAAC,OAAO,IAAI,OAAO,GAAI,WAAW,IAAK,GAAG;AAAA;AAAA,MACpD;AAAA,SAjB4B,CAkB9B,CACD;AAAA,KACH;AAEJ;;;AC/DO,IAAM,aAAa,CAAC;AAAA,EACzB,OAAAC;AAAA,EACA;AAAA,EACA,gBAAgB;AAClB,MAAiE;AAC/D,QAAM,YAAYA;AAClB,QAAMC,eAAa;AACnB,QAAM,aAAaD,UAAQ;AAC3B,QAAM,WAAW,gBAAgB;AACjC,SACE,qBAAAE,WAAA,EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC;AAAA,QAC7B,MAAM,CAACD,cAAYA,cAAY,UAAU;AAAA,QACzC,aAAa;AAAA;AAAA,IACf;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,QAAQ,CAAC,GAAG,GAAG,aAAc,aAAa,MAAO,GAAG;AAAA,QACpD,MAAM,CAACA,cAAYA,cAAY,aAAa,GAAG;AAAA,QAC/C,aAAa;AAAA;AAAA,IACf;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,QAAQ,aAAa;AAAA,QACrB,QAAQ,YAAY;AAAA,QACpB,QAAQ,CAAC,GAAG,GAAG,aAAc,aAAa,MAAO,CAAC;AAAA;AAAA,IACpD;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,QAAQ,aAAa;AAAA,QACrB,QAAQ,gBAAgB;AAAA,QACxB,QAAQ;AAAA,UACNA,eAAa;AAAA,UACbA,eAAa;AAAA,UACb,aAAc,aAAa,MAAO;AAAA,QACpC;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,QAAQ,aAAa;AAAA,QACrB,QAAQ,gBAAgB;AAAA,QACxB,QAAQ;AAAA,UACN,CAACA,eAAa;AAAA,UACd,CAACA,eAAa;AAAA,UACd,aAAc,aAAa,MAAO;AAAA,QACpC;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,QAAQ,aAAa;AAAA,QACrB,QAAQ,gBAAgB;AAAA,QACxB,QAAQ;AAAA,UACN,CAACA,eAAa;AAAA,UACdA,eAAa;AAAA,UACb,aAAc,aAAa,MAAO;AAAA,QACpC;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,QAAQ,aAAa;AAAA,QACrB,QAAQ,gBAAgB;AAAA,QACxB,QAAQ;AAAA,UACNA,eAAa;AAAA,UACb,CAACA,eAAa;AAAA,UACd,aAAc,aAAa,MAAO;AAAA,QACpC;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,gBAAgB;AAAA,QAC3B,OAAO;AAAA,QACP,kBAAkBA,eAAa;AAAA,QAC/B,gBAAgB,aAAa;AAAA,QAC7B,UAAU;AAAA,UACR,GAAG,CAAC,YAAY;AAAA,UAChB,GAAG,CAACA,eAAa;AAAA,UACjB,GAAG,CAAC,aAAa;AAAA,QACnB;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,gBAAgB;AAAA,QAC3B,OAAO;AAAA,QACP,kBAAkBA,eAAa;AAAA,QAC/B,gBAAgB,aAAa;AAAA,QAC7B,UAAU;AAAA,UACR,GAAG,CAAC,YAAY;AAAA,UAChB,GAAGA,eAAa;AAAA,UAChB,GAAG,CAAC,aAAa;AAAA,QACnB;AAAA,QACA,UAAU,KAAK;AAAA;AAAA,IACjB;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,gBAAgB;AAAA,QAC3B,OAAO;AAAA,QACP,kBAAkBA,eAAa;AAAA,QAC/B,gBAAgB,aAAa;AAAA,QAC7B,UAAU,EAAE,GAAG,YAAY,GAAG,GAAGA,eAAa,GAAG,GAAG,CAAC,aAAa,IAAI;AAAA,QACtE,UAAU,KAAK;AAAA;AAAA,IACjB;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,gBAAgB;AAAA,QAC3B,OAAO;AAAA,QACP,kBAAkBA,eAAa;AAAA,QAC/B,gBAAgB,aAAa;AAAA,QAC7B,UAAU;AAAA,UACR,GAAG,YAAY,IAAI,gBAAgB;AAAA,UACnC,GAAG,CAACA,eAAa;AAAA,UACjB,GAAG,CAAC,aAAa;AAAA,QACnB;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAUO,IAAM,gBAAgB,CAAC,UAA8B;AAC1D,QAAM;AAAA,IACJ;AAAA,IACA,OAAAD;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,EACF,IAAI;AACJ,QAAM,SAA6B;AAAA,IACjC,CAAC,GAAG,gBAAgB;AAAA,IACpB,CAAC,CAAC,iBAAiB,GAAG,mBAAmB,CAAC;AAAA,IAC1C,CAAC,CAAC,iBAAiB,GAAG,mBAAmB,CAAC;AAAA,IAC1C,CAAC,GAAG,CAAC;AAAA,EACP;AACA,QAAM,UAAU,kBAAkB,QAAQ,SAAS;AAEnD,SACE,oBAAC,YAAS,OAAM,WACd;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,QACN,GAAG,UAAU,KAAK;AAAA,QAClB,GAAG,UAAU,KAAK;AAAA,QAClB,GAAG,UAAU,KAAK;AAAA,MACpB;AAAA,MAEA,8BAAC,UAAO,UAAU,CAAC,GAAG,IAAI,QAAQ,GAChC,8BAAC,iBAAc,QAAQA,SACrB,8BAAC,WAAQ,QAAQ,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GACnD,GACF;AAAA;AAAA,EACF,GACF;AAEJ;;;ACrKO,IAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,eAAe,KAAK,KAAK,WAAW,CAAC;AAC3C,QAAM,qBAAsB,eAAe,KAAK,QAAS;AACzD,QAAM,gBAAgB;AACtB,QAAM,aAAa;AACnB,QAAM,aAAa;AACnB,QAAM,iBAAiB,aAAa;AACpC,QAAMG,eAAa,SAAS,eAAe,KAAK,YAAY;AAC5D,QAAM,oBAAoB,YAAY;AAEtC,SACE,qBAAAC,WAAA,EACG;AAAA,UAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,UACR,GAAG,CAAC,YAAY,IAAI;AAAA,UACpB,GAAG,IAAI,QAAQ;AAAA,UACf,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX,kBAAkB,aAAa;AAAA,QAC/B,cAAc,aAAa;AAAA,QAC3B,QAAQ;AAAA;AAAA,MAVH;AAAA,IAWP,CACD;AAAA,IACA,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,KAAK;AAAA,QACf,UAAU;AAAA,UACR,GAAG,YAAY,IAAI;AAAA,UACnB,GAAG,IAAI,QAAQ;AAAA,UACf,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX,kBAAkB,aAAa;AAAA,QAC/B,cAAc,aAAa;AAAA,QAC3B,QAAQ;AAAA;AAAA,MAXH;AAAA,IAYP,CACD;AAAA,IACD;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,gBAAgB,EAAE;AAAA,QAC3C,OAAO;AAAA,QACP,QAAQD;AAAA,QACR,QAAQ;AAAA;AAAA,IACV;AAAA,KACF;AAEJ;;;AChEO,IAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAAE;AACF,MAOM;AACJ,QAAM,WACJ,aAAa,IACT;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd,IACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAEN,QAAM,SAAS,CAAC,MAAM,WAAW,KAAY,CAAC,IAC1C,WAAW,KAAY,IACvB,SAAS;AACb,QAAM,aAAa,CAAC,MAAM,WAAW,SAAgB,CAAC,IAClD,WAAW,SAAgB,IAAI,MAC/B,SAAS;AACb,QAAM,cAAc,CAAC,MAAM,WAAW,UAAiB,CAAC,IACpD,WAAW,UAAiB,IAC5B,SAAS;AACb,QAAM,aAAa,CAAC,MAAM,WAAW,SAAgB,CAAC,IAClD,WAAW,SAAgB,IAAI,MAC/B;AACJ,QAAM,cAAc,CAAC,MAAM,WAAWA,YAAiB,CAAC,IACpD,WAAWA,YAAiB,IAC5B,IAAM,OAAO,MAAM,IAAI;AAE3B,QAAM,eAAe,WAAW;AAChC,QAAM,qBAAsB,eAAe,KAAK,SAAU;AAC1D,QAAM,gBAAgB;AACtB,QAAM,aAAa;AAEnB,QAAM,qBAAqB;AAC3B,QAAM,oBAAoB,qBAAqB,cAAc;AAE7D,QAAM,mBAAmB,mBAAmB;AAE5C,SACE,qBAAAC,WAAA,EAEG;AAAA,UAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,UACR,GAAG,CAAC,qBAAqB;AAAA,UACzB,GAAG,oBAAoB,IAAI;AAAA,UAC3B,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX,kBAAkB,mBAAmB;AAAA,QACrC,cAAc,mBAAmB;AAAA,QACjC,QAAQ;AAAA;AAAA,MAVH,QAAQ,CAAC;AAAA,IAWhB,CACD;AAAA,IAEA,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,MAC5C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,KAAK;AAAA,QACf,UAAU;AAAA,UACR,GAAG,qBAAqB;AAAA,UACxB,GAAG,oBAAoB,IAAI;AAAA,UAC3B,GAAG,gBAAgB;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX,kBAAkB,mBAAmB;AAAA,QACrC,cAAc,mBAAmB;AAAA,QACjC,QAAQ;AAAA;AAAA,MAXH,SAAS,CAAC;AAAA,IAYjB,CACD;AAAA,IACD;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,gBAAgB,EAAE;AAAA,QAC3C,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA;AAAA,IACV;AAAA,KACF;AAEJ;;;A3B3EO,IAAM,gBAAgB,CAAC,EAAE,UAAU,MAA6B;AACrE,QAAM,SAAS,GAAG,OAAO,SAAS,EAAE,KAAK;AAgBzC,UAAQ,OAAO,IAAI;AAAA,IACjB,KAAK;AACH,aACE,oBAAC,OAAI,SAAS,OAAO,UAAU,OAAO,OAAO,GAAG,WAAW,OAAO,GAAG;AAAA,IAEzE,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,UACnB,WAAW,OAAO;AAAA,UAClB,OAAO,OAAO;AAAA,UACd,WAAW,OAAO;AAAA;AAAA,MACpB;AAAA,IAEJ,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,UACnB,WAAW,OAAO;AAAA,UAClB,OAAO,OAAO;AAAA,UACd,WAAW,OAAO;AAAA,UAClB,YAAY,OAAO;AAAA;AAAA,MACrB;AAAA,IAEJ,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,OAAO;AAAA,UACjB,OAAO,OAAO;AAAA,UACd,WAAW,OAAO;AAAA,UAClB,kBAAkB,OAAO;AAAA,UACzB,WAAW,OAAO;AAAA;AAAA,MACpB;AAAA,IAEJ,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,OAAO;AAAA,UACjB,WAAW,OAAO;AAAA,UAClB,YAAY,OAAO;AAAA,UACnB,OAAO,OAAO;AAAA,UACd,WAAW,OAAO;AAAA,UAClB,UAAU,OAAO;AAAA,UACjB,gBAAgB;AAAA,YACd,OAAO,OAAO,WAAW;AAAA,YACzB,QAAQ,OAAO,WAAW;AAAA,UAC5B;AAAA;AAAA,MACF;AAAA,IAEJ,KAAK;AACH,UAAI,OAAO;AACT,eAAO,oBAAC,UAAO,cAAc,OAAO,UAAU,OAAO,OAAO,GAAG;AACjE,UAAI,OAAO;AACT,eAAO,oBAAC,gBAAa,cAAc,OAAO,UAAU,OAAO,OAAO,GAAG;AAAA,IAEzE,KAAK,OAAO;AACV,cAAQ,OAAO,UAAU;AAAA,QACvB,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,QAChC,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,QAChC,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,QAChC,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,QAChC,KAAK;AACH,iBAAO,oBAAC,UAAO,OAAM,WAAU;AAAA,QACjC,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,QAChC,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,QAChC,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,QAChC,KAAK;AACH,iBAAO,oBAAC,SAAM,OAAM,WAAU;AAAA,MAClC;AAAA,IACF;AAAA,IACA,KAAK;AACH,aAAO,oBAAC,mBAAO;AAAA,IACjB,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,UACf,eAAe,OAAO;AAAA;AAAA,MACxB;AAAA,IAEJ,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,UACnB,WAAW,OAAO;AAAA,UAClB,OAAO,OAAO;AAAA,UACd,WAAW,OAAO;AAAA;AAAA,MACpB;AAAA,EAEN;AAEA,UAAQ,OAAO,UAAU;AAAA,IACvB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAC,UAAO;AAAA,IACjB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAC,SAAM;AAAA,EAClB;AACA,SAAO;AACT;;;A4BpKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAuBP,IAAM,UAAU,CAAC,MACf,KAAK,OAAO,MAAM,YAAY,UAAU;AAE1C,IAAM,WAAW,CAAC,MAA2C;AAC3D,MAAI,OAAO,MAAM,SAAU,QAAO;AAClC,MAAI,OAAO,MAAM,UAAU;AACzB,UAAM,IAAI,6BAA6B,KAAK,CAAC;AAC7C,QAAI,EAAG,QAAQ,WAAW,EAAE,CAAC,CAAE,IAAI,KAAK,KAAM;AAC9C,UAAM,IAAI,OAAO,CAAC;AAClB,QAAI,CAAC,OAAO,MAAM,CAAC,EAAG,QAAO;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,IAAM,SAAS,CAAC,MAAqC;AACnD,MAAI,MAAM,QAAQ,CAAC;AACjB,WAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;AACjE,MAAI,OAAO,MAAM,YAAY;AAC3B,WAAO,CAAC,OAAO,EAAE,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC;AAC9D,SAAO,CAAC,GAAG,GAAG,CAAC;AACjB;AAEA,SAAS,WAAW,MAAW,UAAiC;AAC9D,MAAI,QAAQ,QAAQ,SAAS,MAAO,QAAO,CAAC;AAC5C,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO,KAAK,QAAQ,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAG3E,MAAI,CAAC,QAAQ,IAAI,EAAG,QAAO,CAAC;AAE5B,QAAM,EAAE,MAAM,OAAO,SAAS,IAAI;AAElC,MAAI,SAAS,UAAU;AACrB,WAAO,SAAS,QAAQ,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAAA,EACxD;AAEA,MAAI,SAAS,UAAU;AACrB,UAAM,WAAkB,OAAO;AAC/B,WAAO,SAAS,QAAQ,CAAC,MAAM,WAAW,GAAG,YAAY,QAAQ,CAAC;AAAA,EACpE;AAEA,MAAI,SAAS,WAAW;AACtB,UAAM,MAAM;AAAA,MACV,OAAO,UAAU,EAAE,GAAG,OAAO,GAAG,GAAG,OAAO,GAAG,GAAG,OAAO,EAAE;AAAA,IAC3D;AACA,UAAM,QAAQ,SAAS,QAAQ,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7D,WAAO,MAAM,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO;AAAA,MACrC,MAAM,WAAW,UAAU,KAAY,IAAI;AAAA,MAC3C,OAAO,SAAS;AAAA,IAClB,EAAE;AAAA,EACJ;AAEA,MAAI,SAAS,QAAQ;AACnB,UAAM,MAAgC,MAAM,QAAQ,OAAO,QAAQ,IAC/D;AAAA,MACE,SAAS,MAAM,SAAS,CAAC,CAAC;AAAA,MAC1B,SAAS,MAAM,SAAS,CAAC,CAAC;AAAA,MAC1B,SAAS,MAAM,SAAS,CAAC,CAAC;AAAA,IAC5B,IACA;AAAA,MACE,SAAS,OAAO,KAAK,CAAC;AAAA,MACtB,SAAS,OAAO,KAAK,CAAC;AAAA,MACtB,SAAS,OAAO,KAAK,CAAC;AAAA,IACxB;AACJ,UAAM,QAAQ,SAAS,QAAQ,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7D,WAAO,MAAM,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO;AAAA,MACrC,MAAM,WAAW;AAAA,QACf,IAAI,CAAC;AAAA,QACL,WAAW,QAAQ,IAAI,CAAC,GAAG,WAAW,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC;AAAA,MAC7D;AAAA,MACA;AAAA,IACF,EAAE;AAAA,EACJ;AAEA,MAAI,SAAS,SAAS,SAAS,YAAY,SAAS,MAAM;AACxD,UAAM,QAAQ,SACX,QAAQ,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,EACtC,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,QAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAChC,QAAI;AACJ,QAAI,SAAS,MAAO,QAAO,SAAS,MAAM,KAAY;AAAA,aAC7C,SAAS;AAChB,aAAO,SAAS,SAAS,MAAM,CAAC,GAAU,MAAM,MAAM,CAAC,CAAQ;AAAA,QAC5D,QAAO,MAAM,KAAK,KAAY;AACnC,WAAO,CAAC,EAAE,KAAK,CAAC;AAAA,EAClB;AAEA,MAAI,SAAS,SAAS;AACpB,UAAM,SAAkC,OAAO,UAAU,CAAC;AAC1D,UAAM,KAAK,WAAW,MAAM,WAAW,MAAa;AACpD,WAAO,CAAC,EAAE,MAAM,IAAI,OAAO,YAAY,OAAO,MAAM,CAAC;AAAA,EACvD;AAEA,MAAI,SAAS,eAAe;AAC1B,UAAM,SAAS,SACZ,QAAQ,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,EACtC,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,QAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AACjC,UAAM,QACJ,OAAO,SAAS,IAAK,SAAS,MAAc,MAAM,IAAI,OAAO,CAAC;AAChE,UAAMC,WAAS,OAAO,UAAU,OAAO,KAAK;AAC5C,QAAI,KAAK,WAAW,cAAc,EAAE,QAAAA,SAAO,GAAG,KAAK;AACnD,WAAO,CAAC,EAAE,MAAM,IAAI,OAAO,YAAY,OAAO,MAAM,CAAC;AAAA,EACvD;AAEA,MACE,SAAS,UACT,SAAS,QACT,SAAS,YACT,SAAS,UACT,SAAS,eACT;AACA,QAAI;AACJ,QAAI,SAAS,QAAQ;AACnB,YAAM,OAAO,OAAO,QAAQ,CAAC,GAAG,GAAG,CAAC;AACpC,YAAM,SAAS,OAAO;AACtB,YAAM,SACJ,OAAO,WACN,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AACxD,UAAI,WAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,IACxC,WAAW,SAAS,MAAM;AACxB,YAAM,OAAO,OAAO,QAAQ;AAC5B,YAAM,SAAS,OAAO;AACtB,YAAM,SACJ,OAAO,WACN,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AACxD,UAAI,WAAW,KAAK,EAAE,MAAM,OAAO,CAAC;AAAA,IACtC,WAAW,SAAS,UAAU;AAC5B,YAAMA,WAAS,OAAO,UAAU;AAChC,YAAM,SAAS,OAAO,UAAU;AAChC,YAAM,SAAS,OAAO,UAAU,CAAC,GAAG,GAAG,CAAC;AACxC,UAAI,WAAW,SAAS,EAAE,QAAAA,UAAQ,QAAQ,OAAO,CAAC;AAAA,IACpD,WAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,OAAO,UAAU;AAChC,YAAM,SAAS,OAAO,UAAU,CAAC,GAAG,GAAG,CAAC;AACxC,UAAI,WAAW,OAAO,EAAE,QAAQ,OAAO,CAAC;AAAA,IAC1C,OAAO;AACL,YAAM,OAAO,OAAO,QAAQ,CAAC,GAAG,GAAG,CAAC;AACpC,YAAM,cAAc,OAAO,eAAe;AAC1C,YAAM,SAAS,OAAO,UAAU,CAAC,GAAG,GAAG,CAAC;AACxC,UAAI,WAAW,cAAc,EAAE,MAAM,aAAa,OAAO,CAAC;AAAA,IAC5D;AACA,WAAO,CAAC,EAAE,MAAM,GAAG,OAAO,YAAY,OAAO,MAAM,CAAC;AAAA,EACtD;AAGA,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,MAAM,KAAK,SAAS,CAAC,CAAC;AAC5B,WAAO,WAAW,KAAK,QAAQ;AAAA,EACjC;AAGA,SAAO,SAAS,QAAQ,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AACxD;AAEO,SAAS,OAAO,MAA2B;AAChD,QAAMC,cAAa,WAAW,IAAI;AAClC,SAAO,EAAE,YAAAA,YAAW;AACtB;;;ACvLO,SAAS,0BAA0B,WAAiC;AACzE,QAAM,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;AAC5C,SAAO,OAAO,KAAK;AACrB;","names":["Fragment","width","height","heightAboveSurface","width","height","Fragment","height","width","fullLength","Fragment","Fragment","fullLength","bodyLength","width","height","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","bodyLength","fullLength","Fragment","width","Fragment","h","bodyLength","Fragment","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","Fragment","width","bodyLength","Fragment","fullLength","Fragment","bodyLength","Fragment","height","geometries"]}
1
+ {"version":3,"sources":["../lib/vanilla/h.ts","../lib/Footprinter3d.tsx","../lib/vanilla/primitives.ts","../lib/vanilla/react-shim.ts","../lib/ChipBody.tsx","../lib/utils/range.ts","../lib/utils/getExpandedStroke.ts","../lib/DualInlinePackage.tsx","../lib/SmdChipLead.tsx","../lib/Tssop.tsx","../lib/A0402.tsx","../lib/A0603.tsx","../lib/A0805.tsx","../lib/qfp.tsx","../lib/PinRow.tsx","../lib/utils/getQuadCoords.ts","../lib/utils/getQuadPinMap.ts","../lib/qfn.tsx","../lib/SOT-235.tsx","../lib/A0201.tsx","../lib/A01005.tsx","../lib/A1206.tsx","../lib/A1210.tsx","../lib/A2010.tsx","../lib/A2512.tsx","../lib/FemaleHeader.tsx","../lib/PushButton.tsx","../lib/SOIC.tsx","../lib/VSSOP.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 { fp } from \"@tscircuit/footprinter\"\nimport { Dip } from \"./DualInlinePackage\"\nimport { Tssop } from \"./Tssop\"\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 { A0201 } from \"./A0201\"\nimport { A01005 } from \"./A01005\"\nimport { A1206 } from \"./A1206\"\nimport { A1210 } from \"./A1210\"\nimport { A2010 } from \"./A2010\"\nimport { A2512 } from \"./A2512\"\nimport { FemaleHeader } from \"./FemaleHeader\"\nimport { PushButton } from \"./PushButton\"\nimport { SOIC } from \"./SOIC\"\nimport { VSSOP } from \"./VSSOP\"\n\n/**\n * Outputs a 3d model for any [footprinter string](https://github.com/tscircuit/footprinter)\n */\n\nexport const Footprinter3d = ({ footprint }: { footprint: string }) => {\n const fpJson = fp.string(footprint).json() as unknown as {\n w: number\n p: number\n h: number\n pl: number\n pw: number\n num_pins: number\n fn: string\n thermalpad: { x: number; y: number }\n imperial: String\n male: boolean\n female: boolean\n id: number //innerDiameter\n od: number //outerDiameter\n }\n\n switch (fpJson.fn) {\n case \"dip\":\n return (\n <Dip numPins={fpJson.num_pins} pitch={fpJson.p} bodyWidth={fpJson.w} />\n )\n case \"tssop\":\n return (\n <Tssop\n pinCount={fpJson.num_pins}\n leadLength={fpJson.pl}\n leadWidth={fpJson.pw}\n pitch={fpJson.p}\n bodyWidth={fpJson.w}\n />\n )\n case \"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 \"qfn\":\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 width: fpJson.thermalpad.x,\n length: fpJson.thermalpad.y,\n }}\n />\n )\n case \"pinrow\":\n if (fpJson.male)\n return <PinRow numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\n if (fpJson.female)\n return <FemaleHeader numberOfPins={fpJson.num_pins} pitch={fpJson.p} />\n\n case \"cap\": {\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 color=\"#856c4d\" />\n case \"0603\":\n return <A0603 color=\"#856c4d\" />\n case \"0805\":\n return <A0805 color=\"#856c4d\" />\n case \"0201\":\n return <A0201 color=\"#856c4d\" />\n case \"01005\":\n return <A01005 color=\"#856c4d\" />\n case \"1206\":\n return <A1206 color=\"#856c4d\" />\n case \"1210\":\n return <A1210 color=\"#856c4d\" />\n case \"2010\":\n return <A2010 color=\"#856c4d\" />\n case \"2512\":\n return <A2512 color=\"#856c4d\" />\n }\n }\n case \"sot235\":\n return <SOT235 />\n case \"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 }\n\n switch (fpJson.imperial) {\n case \"0402\":\n return <A0402 />\n case \"0603\":\n return <A0603 />\n case \"0805\":\n return <A0805 />\n case \"0201\":\n return <A0201 />\n case \"01005\":\n return <A01005 />\n case \"1206\":\n return <A1206 />\n case \"1210\":\n return <A1210 />\n case \"2010\":\n return <A2010 />\n case \"2512\":\n return <A2512 />\n }\n return null\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 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 { Colorize, RoundedCuboid, Translate } from \"jscad-fiber\"\n\nexport interface ChipBodyProps {\n width: number\n length: number\n height: number\n heightAboveSurface?: number\n center: { x: number; y: number; z: number }\n}\n\nexport const ChipBody = ({\n center,\n width,\n length,\n height,\n heightAboveSurface = 0.15,\n}: ChipBodyProps) => {\n // TODO the bodies flex a bit outward IRL\n return (\n <Colorize color=\"#555\">\n <Translate offset={center}>\n <Translate offset={{ x: 0, y: 0, z: height / 2 + heightAboveSurface }}>\n <RoundedCuboid roundRadius={0.2} size={[width, length, height]} />\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 points={svgPathPoints.map((p) => [p.x, p.y])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n <Translate\n offset={{\n x: x,\n y: y + (isRotated ? 1 : -1),\n z: z,\n }}\n >\n <Rotate rotation={[\"-90deg\", \"90deg\", isRotated ? \"180deg\" : \"0deg\"]}>\n <ExtrudeLinear height={2}>\n <Polygon\n points={getExpandedStroke(\n [\n [0, 0],\n [-1, 0],\n [-1, -1],\n ],\n 0.25,\n ).map((p) => [p.x, p.y])}\n />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </>\n )\n}\n\nexport const Dip = ({\n numPins = 8,\n pitch = 2.54,\n bodyWidth = 6.4,\n}: { numPins?: number; pitch?: number; bodyWidth?: number }) => {\n const numPinsOnEachSide = Math.floor(numPins / 2)\n const crossBodyPinWidth = bodyWidth + 1\n\n return (\n <>\n {range(numPins).map((i) => {\n const yRow = i % numPinsOnEachSide\n const xRow = (Math.floor(i / numPinsOnEachSide) - 0.5) * 2\n\n return (\n <DipPinLeg\n key={i}\n x={(xRow * crossBodyPinWidth) / 2}\n y={yRow * pitch - ((numPinsOnEachSide - 1) / 2) * pitch}\n z={DIP_PIN_HEIGHT / 2 + heightAboveSurface}\n />\n )\n })}\n <ChipBody\n width={bodyWidth}\n length={numPinsOnEachSide * pitch + 0.5}\n height={DIP_PIN_HEIGHT - heightAboveSurface}\n heightAboveSurface={heightAboveSurface}\n center={{ x: 0, y: 0, z: heightAboveSurface }}\n />\n </>\n )\n}\n\nexport const DualInlinePackage = Dip\n","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 { 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\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: leadThickness / 2 }}\n width={bodyWidth}\n length={bodyLength}\n height={1.5}\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 44:\n case 52:\n case 64:\n return 2.25\n case 208:\n return 1.65\n default:\n return 1\n }\n}\n\nconst getLeadWidth = (pinCount: number, width?: number): number => {\n switch (pinCount) {\n case 44:\n case 64:\n return 0.5\n case 52:\n return width === 14 ? 0.45 : 0.55\n case 208:\n return 0.3\n default:\n return 0.25\n }\n}\nexport default QFP\n","import { Cuboid, Cylinder, Union, HullChain, Colorize, Hull } from \"jscad-fiber\"\n\nexport const PinRow = ({\n numberOfPins,\n pitch = 2.54,\n longSidePinLength = 6,\n}: {\n numberOfPins: number\n pitch?: number\n longSidePinLength?: number\n}) => {\n const pinThickness = 0.63\n const bodyHeight = 2\n const bodyWidth = numberOfPins * pitch\n const shortSidePinLength = 3\n const xoff = -((numberOfPins - 1) / 2) * pitch\n return (\n <>\n <Cuboid\n color=\"#222\"\n size={[bodyWidth, pinThickness * 3, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) => (\n <>\n {/*Short pins (top) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, shortSidePinLength * 0.9]}\n center={[\n xoff + i * pitch,\n 0,\n bodyHeight * 0.9 + bodyHeight / 2,\n ]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n shortSidePinLength,\n ]}\n center={[xoff + i * pitch, 0, bodyHeight + bodyHeight / 2]}\n />\n </Hull>\n </Colorize>\n {/*Long pins (bottom) */}\n <Colorize color=\"gold\">\n <Hull>\n <Cuboid\n color=\"gold\"\n size={[pinThickness, pinThickness, longSidePinLength * 0.9]}\n center={[xoff + i * pitch, 0, (-longSidePinLength / 2) * 0.9]}\n />\n <Cuboid\n color=\"gold\"\n size={[\n pinThickness / 1.8,\n pinThickness / 1.8,\n longSidePinLength,\n ]}\n center={[xoff + i * pitch, 0, -longSidePinLength / 2]}\n />\n </Hull>\n </Colorize>\n </>\n ))}\n </>\n )\n}\n","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 { 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 { Cuboid, Colorize, Hull, Subtract, Cylinder } from \"jscad-fiber\"\n\nexport const FemaleHeader = ({\n numberOfPins,\n pitch = 2.54,\n legsLength = 3,\n outerDiameter = 0.945,\n innerDiameter = 0.945,\n}: {\n numberOfPins: number\n pitch?: number\n legsLength?: number\n outerDiameter?: number\n innerDiameter?: number\n}) => {\n const pinThickness = innerDiameter / 1.5\n const bodyDepth = pinThickness * 2 + outerDiameter\n const bodyHeight = 5\n const bodyWidth = (numberOfPins - 1) * pitch + outerDiameter + pitch / 2\n const gapWidth = pinThickness * 1.6\n const xoff = -((numberOfPins - 1) / 2) * pitch\n const Body = (\n <Colorize color=\"#1a1a1a\">\n <Subtract>\n <Cuboid\n color=\"#000\"\n size={[bodyWidth, bodyDepth, bodyHeight]}\n center={[0, 0, bodyHeight / 2]}\n />\n {Array.from({ length: numberOfPins }, (_, i) =>\n innerDiameter ? (\n <Cylinder\n key={i}\n height={bodyHeight + 0.1}\n radius={innerDiameter / 2}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n color=\"#222\"\n />\n ) : (\n <Cuboid\n key={i}\n size={[gapWidth, gapWidth, bodyHeight]}\n center={[xoff + i * pitch, 0, bodyHeight / 2]}\n />\n ),\n )}\n </Subtract>\n </Colorize>\n )\n return (\n <>\n {Body}\n {Array.from({ length: numberOfPins }, (_, i) => (\n <Colorize color=\"silver\" key={i}>\n <Hull>\n <Cuboid\n color=\"silver\"\n size={[pinThickness, pinThickness, legsLength * 0.9]}\n center={[xoff + i * pitch, 0, (-legsLength / 2) * 0.9]}\n />\n <Cuboid\n color=\"silver\"\n size={[pinThickness / 1.8, pinThickness / 1.8, legsLength]}\n center={[xoff + i * pitch, 0, -legsLength / 2]}\n />\n </Hull>\n <Cuboid\n color=\"silver\"\n size={[gapWidth, gapWidth, gapWidth * 0.5]}\n center={[xoff + i * pitch, 0, (gapWidth / 2) * 0.5]}\n />\n </Colorize>\n ))}\n </>\n )\n}\n","import {\n Colorize,\n Cuboid,\n Cylinder,\n ExtrudeLinear,\n Polygon,\n Rotate,\n RoundedCuboid,\n Translate,\n} from \"jscad-fiber\"\nimport { getExpandedStroke } from \"./utils/getExpandedStroke\"\n\nexport const PushButton = ({\n width,\n length,\n innerDiameter = 1,\n}: { width: number; length: number; innerDiameter?: number }) => {\n const bodyWidth = width\n const bodyLength = length\n const bodyHeight = width * 0.7\n const legWidth = innerDiameter / 2.5\n return (\n <>\n <RoundedCuboid\n color=\"#1a1a1f\"\n center={[0, 0, bodyHeight / 2]}\n size={[bodyLength, bodyLength, bodyHeight]}\n roundRadius={0.3}\n />\n <RoundedCuboid\n color=\"#f2f2f2\"\n center={[0, 0, bodyHeight + (bodyHeight * 0.1) / 2.5]}\n size={[bodyLength, bodyLength, bodyHeight * 0.1]}\n roundRadius={0.14}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.8}\n radius={bodyWidth / 3}\n center={[0, 0, bodyHeight + (bodyHeight * 0.8) / 2]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n -bodyLength / 3,\n bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <Cylinder\n color=\"#1a1a1f\"\n height={bodyHeight * 0.2}\n radius={innerDiameter / 2}\n center={[\n bodyLength / 3,\n -bodyLength / 3,\n bodyHeight + (bodyHeight * 0.1) / 2,\n ]}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: -bodyWidth / 2,\n y: bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{ x: bodyWidth / 2, y: bodyLength / 2, z: -bodyHeight * 1.2 }}\n rotation={Math.PI}\n />\n <PushButtonLeg\n thickness={innerDiameter / 3}\n width={legWidth}\n horizontalLength={bodyLength * 0.8}\n verticalLength={bodyHeight / 2}\n position={{\n x: bodyWidth / 2 + innerDiameter / 3.6,\n y: -bodyLength / 2,\n z: -bodyHeight * 1.2,\n }}\n />\n </>\n )\n}\nexport interface PushButtonLegProps {\n thickness: number\n width: number\n horizontalLength: number\n verticalLength: number\n rotation?: number\n position?: { x: number; y: number; z?: number }\n}\n\nexport const PushButtonLeg = (props: PushButtonLegProps) => {\n const {\n thickness,\n width,\n horizontalLength,\n verticalLength,\n rotation = 0,\n position,\n } = props\n const points: [number, number][] = [\n [0, horizontalLength],\n [-verticalLength / 3, horizontalLength / 3],\n [-verticalLength / 5, horizontalLength / 4],\n [0, 0],\n ]\n const polygon = getExpandedStroke(points, thickness)\n\n return (\n <Colorize color=\"#f2f2f2\">\n <Translate\n offset={{\n x: position?.x || 0,\n y: position?.y || 0,\n z: position?.z || 0,\n }}\n >\n <Rotate rotation={[0, 55, rotation]}>\n <ExtrudeLinear height={width}>\n <Polygon points={polygon.map((p) => [p.y, p.x])} />\n </ExtrudeLinear>\n </Rotate>\n </Translate>\n </Colorize>\n )\n}\n","import { ChipBody } from \"./ChipBody\"\nimport { SmdChipLead } from \"./SmdChipLead\"\n\n// SOIC typical body and lead dimensions\nexport const SOIC = ({\n pinCount,\n leadLength,\n leadWidth,\n pitch,\n bodyWidth,\n}: {\n pinCount: number\n pitch: number\n leadWidth: number\n leadLength: number\n bodyWidth: number\n}) => {\n const sidePinCount = Math.ceil(pinCount / 2)\n const pinOffsetToCenter = ((sidePinCount - 1) * pitch) / 2\n const leadThickness = 0.25\n const bodyHeight = 1.0\n const leadHeight = 0.8\n const leadBodyOffset = leadLength * 0\n const fullLength = pitch * (sidePinCount - 1) + leadWidth + 0.2\n const bodyWidthAdjusted = bodyWidth * 0.55\n\n return (\n <>\n {Array.from({ length: sidePinCount }).map((_, i) => (\n <SmdChipLead\n key={i}\n position={{\n x: -bodyWidth / 2 - leadBodyOffset,\n y: i * pitch - pinOffsetToCenter,\n z: leadThickness / 2,\n }}\n width={leadWidth}\n thickness={leadThickness}\n padContactLength={leadLength / 2}\n bodyDistance={leadLength + 0.2}\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.2}\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.05}\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.05}\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 {\n primitives,\n transforms,\n booleans,\n hulls,\n geometries,\n extrusions,\n} 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 type Color,\n} from \"./primitives\"\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(node: any, colorCtx?: Color): ColoredGeom[] {\n if (node == null || node === false) return []\n if (Array.isArray(node)) return node.flatMap((n) => renderNode(n, colorCtx))\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))\n }\n\n if (type === Colorize) {\n const newColor: Color = props?.color\n return (children ?? []).flatMap((c) => renderNode(c, newColor ?? colorCtx))\n }\n\n if (type === Translate) {\n const off = toVec3(\n props?.offset ?? { x: props?.x, y: props?.y, z: props?.z },\n )\n const geoms = (children ?? []).flatMap((c) => renderNode(c, colorCtx))\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) => renderNode(c, colorCtx))\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))\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 }]\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))\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 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 ) {\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 {\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)\n }\n\n // Unknown type -> recurse\n return (children ?? []).flatMap((c) => renderNode(c, colorCtx))\n}\n\nexport function render(root: VNode): RenderResult {\n const geometries = renderNode(root)\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 { Footprinter3d } from \"../Footprinter3d\"\nimport { h, Fragment, type VNode } from \"./h\"\nimport { render, type RenderResult, type ColoredGeom } from \"./render\"\nexport * from \"./convertCSGToThreeGeom\"\n\nexport { h, Fragment }\nexport type { VNode, RenderResult, ColoredGeom }\n\nexport function getJscadModelForFootprint(footprint: string): RenderResult {\n const vnode = h(Footprinter3d, { footprint })\n return render(vnode)\n}\n\nexport function createJSCADRenderer(_jscad: any) {\n function createJSCADRoot(container: ColoredGeom[]) {\n return {\n render(element: VNode) {\n const { geometries } = render(element)\n container.splice(0, container.length, ...geometries)\n },\n }\n }\n\n return { createJSCADRoot }\n}\n"],"mappings":"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","names":["Fragment","width","height","heightAboveSurface","width","height","Fragment","height","width","fullLength","Fragment","Fragment","fullLength","bodyLength","width","height","Fragment","fullLength","width","height","terminatorWidth","bodyLength","Fragment","bodyLength","fullLength","Fragment","width","Fragment","h","bodyLength","Fragment","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","Fragment","width","bodyLength","Fragment","fullLength","Fragment","bodyLength","Fragment","height","geometries","transforms","geometries"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "jscad-electronics",
3
3
  "type": "module",
4
- "version": "0.0.36",
4
+ "version": "0.0.38",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {
7
7
  ".": {
@@ -32,11 +32,13 @@
32
32
  "@tscircuit/footprinter": "^0.0.228",
33
33
  "@types/react": "19",
34
34
  "@types/react-dom": "19",
35
+ "@types/three": "^0.179.0",
35
36
  "bun-types": "^1.2.20",
36
37
  "react-cosmos": "7.0.0",
37
38
  "react-cosmos-plugin-vite": "7.0.0",
38
39
  "tsup": "^8.3.0",
39
40
  "vite": "^7.1.2",
41
+ "jscad-fiber": "^0.0.85",
40
42
  "vite-tsconfig-paths": "^5.0.1"
41
43
  },
42
44
  "peerDependencies": {
@@ -47,5 +49,10 @@
47
49
  "circuit-json": "^0.0.232",
48
50
  "react": "19.1.0",
49
51
  "react-dom": "19.1.0"
52
+ },
53
+ "peerDependenciesMeta": {
54
+ "jscad-fiber": {
55
+ "optional": true
56
+ }
50
57
  }
51
58
  }