@tscircuit/3d-viewer 0.0.430 → 0.0.431

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.
Files changed (2) hide show
  1. package/dist/index.js +1436 -51
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -15959,6 +15959,8 @@ var pcb_component = z69.object({
15959
15959
  do_not_place: z69.boolean().optional(),
15960
15960
  subcircuit_id: z69.string().optional(),
15961
15961
  pcb_group_id: z69.string().optional(),
15962
+ position_mode: z69.enum(["packed", "relative_to_group_anchor", "none"]).optional(),
15963
+ positioned_relative_to_pcb_group_id: z69.string().optional(),
15962
15964
  obstructs_within_bounds: z69.boolean().default(true).describe(
15963
15965
  "Does this component take up all the space within its bounds on a layer. This is generally true except for when separated pin headers are being represented by a single component (in which case, chips can be placed between the pin headers) or for tall modules where chips fit underneath"
15964
15966
  )
@@ -16488,12 +16490,13 @@ var pcb_board = z83.object({
16488
16490
  pcb_panel_id: z83.string().optional(),
16489
16491
  is_subcircuit: z83.boolean().optional(),
16490
16492
  subcircuit_id: z83.string().optional(),
16491
- width: length,
16492
- height: length,
16493
+ width: length.optional(),
16494
+ height: length.optional(),
16493
16495
  center: point,
16494
16496
  thickness: length.optional().default(1.4),
16495
16497
  num_layers: z83.number().optional().default(4),
16496
16498
  outline: z83.array(point).optional(),
16499
+ shape: z83.enum(["rect", "polygon"]).optional(),
16497
16500
  material: z83.enum(["fr4", "fr1"]).default("fr4")
16498
16501
  }).describe("Defines the board outline of the PCB");
16499
16502
  expectTypesMatch(true);
@@ -16939,6 +16942,7 @@ var pcb_group = z109.object({
16939
16942
  anchor_position: point.optional(),
16940
16943
  anchor_alignment: z109.enum(["center", "top_left", "top_right", "bottom_left", "bottom_right"]).optional(),
16941
16944
  pcb_component_ids: z109.array(z109.string()),
16945
+ child_layout_mode: z109.enum(["packed", "none"]).optional(),
16942
16946
  name: z109.string().optional(),
16943
16947
  description: z109.string().optional(),
16944
16948
  layout_mode: z109.string().optional(),
@@ -24576,6 +24580,7 @@ var Hull = Symbol("Hull");
24576
24580
  var Colorize = Symbol("Colorize");
24577
24581
  var Polygon = Symbol("Polygon");
24578
24582
  var ExtrudeLinear = Symbol("ExtrudeLinear");
24583
+ var RoundedCylinder = Symbol("RoundedCylinder");
24579
24584
  var Fragment22 = Fragment2;
24580
24585
  var jsx5 = (type, props, _key) => h(type, props);
24581
24586
  var jsxs = (type, props, _key) => h(type, props);
@@ -24584,31 +24589,68 @@ var ChipBody = ({
24584
24589
  width: width10,
24585
24590
  length: length2,
24586
24591
  height: height10,
24587
- heightAboveSurface: heightAboveSurface2 = 0.15
24592
+ heightAboveSurface: heightAboveSurface2 = 0.15,
24593
+ color = "#555",
24594
+ taperRatio = 0.12,
24595
+ faceRatio = 0.75,
24596
+ straightHeightRatio = 0.5,
24597
+ includeNotch = true,
24598
+ notchRadius,
24599
+ notchPosition,
24600
+ notchRotation = [0, 0, 0],
24601
+ notchLength = 0.5,
24602
+ notchWidth = 0.25,
24603
+ chamferSize = 0
24588
24604
  }) => {
24589
- const straightHeight = height10 * 0.5;
24605
+ const straightHeight = height10 * straightHeightRatio;
24590
24606
  const taperHeight = height10 - straightHeight;
24591
- const taperInset = Math.min(width10, length2) * 0.12;
24592
- const faceWidth = Math.max(width10 - taperInset, width10 * 0.75);
24593
- const faceLength = Math.max(length2 - taperInset, length2 * 0.75);
24594
- const notchRadius = Math.min(width10, length2) * 0.12;
24595
- const notchCenterZ = height10 - notchRadius * 0.6;
24596
- const notchCenterY = length2 / 2 - notchRadius * 0.25;
24597
- const notchLength = faceLength / 8;
24598
- const notchWidth = height10 / 4;
24599
- return /* @__PURE__ */ jsx5(Colorize, { color: "#555", children: /* @__PURE__ */ jsx5(Translate, { offset: center, children: /* @__PURE__ */ jsx5(Translate, { offset: { x: 0, y: 0, z: heightAboveSurface2 }, children: /* @__PURE__ */ jsxs(Subtract, { children: [
24600
- /* @__PURE__ */ jsxs(Union, { children: [
24601
- /* @__PURE__ */ jsxs(Hull, { children: [
24602
- /* @__PURE__ */ jsx5(Translate, { z: 5e-3, children: /* @__PURE__ */ jsx5(Cuboid, { size: [faceWidth, faceLength, 0.01] }) }),
24603
- /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [width10, length2, 0.01] }) })
24604
- ] }),
24605
- /* @__PURE__ */ jsxs(Hull, { children: [
24606
- /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [width10, length2, 0.01] }) }),
24607
- /* @__PURE__ */ jsx5(Translate, { z: straightHeight + taperHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [faceWidth, faceLength, 0.01] }) })
24608
- ] })
24607
+ const taperInset = Math.min(width10, length2) * taperRatio;
24608
+ const faceWidth = Math.max(width10 - taperInset, width10 * faceRatio);
24609
+ const faceLength = Math.max(length2 - taperInset, length2 * faceRatio);
24610
+ const defaultNotchRadius = Math.min(width10, length2) * 0.12;
24611
+ const actualNotchRadius = notchRadius ?? defaultNotchRadius;
24612
+ const defaultNotchPosition = {
24613
+ x: 0,
24614
+ y: length2 / 2 - actualNotchRadius * 0.25,
24615
+ z: height10
24616
+ };
24617
+ const actualNotchPosition = notchPosition ?? defaultNotchPosition;
24618
+ const body = /* @__PURE__ */ jsxs(Union, { children: [
24619
+ /* @__PURE__ */ jsxs(Hull, { children: [
24620
+ /* @__PURE__ */ jsx5(Translate, { z: 5e-3, children: /* @__PURE__ */ jsx5(Cuboid, { size: [faceWidth, faceLength, 0.01] }) }),
24621
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [width10, length2, 0.01] }) })
24609
24622
  ] }),
24610
- /* @__PURE__ */ jsx5(Translate, { offset: { x: 0, y: notchCenterY, z: height10 }, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, 0, 0], children: /* @__PURE__ */ jsx5(Cylinder, { radius: notchLength, height: notchWidth }) }) })
24611
- ] }) }) }) });
24623
+ /* @__PURE__ */ jsxs(Hull, { children: [
24624
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [width10, length2, 0.01] }) }),
24625
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight + taperHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [faceWidth, faceLength, 0.01] }) })
24626
+ ] })
24627
+ ] });
24628
+ const chamferCutout = (xPos, yPos) => /* @__PURE__ */ jsx5(Translate, { offset: { x: xPos, y: yPos, z: 0 }, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, 0, Math.PI / 4], children: /* @__PURE__ */ jsx5(
24629
+ Cuboid,
24630
+ {
24631
+ size: [
24632
+ chamferSize * Math.SQRT2,
24633
+ chamferSize * Math.SQRT2,
24634
+ height10 * 3
24635
+ ]
24636
+ }
24637
+ ) }) });
24638
+ let finalBody = body;
24639
+ if (chamferSize > 0) {
24640
+ const xOffset = width10 / 2;
24641
+ const yOffset = length2 / 2;
24642
+ finalBody = /* @__PURE__ */ jsxs(Subtract, { children: [
24643
+ body,
24644
+ chamferCutout(xOffset, yOffset),
24645
+ chamferCutout(-xOffset, yOffset),
24646
+ chamferCutout(xOffset, -yOffset),
24647
+ chamferCutout(-xOffset, -yOffset)
24648
+ ] });
24649
+ }
24650
+ return /* @__PURE__ */ jsx5(Colorize, { color, children: /* @__PURE__ */ jsx5(Translate, { offset: center, children: /* @__PURE__ */ jsx5(Translate, { offset: { x: 0, y: 0, z: heightAboveSurface2 }, children: includeNotch ? /* @__PURE__ */ jsxs(Subtract, { children: [
24651
+ finalBody,
24652
+ /* @__PURE__ */ jsx5(Translate, { offset: actualNotchPosition, children: /* @__PURE__ */ jsx5(Rotate, { rotation: notchRotation, children: /* @__PURE__ */ jsx5(Cylinder, { radius: actualNotchRadius, height: notchWidth }) }) })
24653
+ ] }) : finalBody }) }) });
24612
24654
  };
24613
24655
  var range = (end) => Array.from({ length: end }, (_, i) => i);
24614
24656
  function getExpandedStroke(strokeInput, width10) {
@@ -24697,7 +24739,12 @@ var heightAboveSurface = 0.5;
24697
24739
  var DipPinLeg = ({ x, y, z: z133 }) => {
24698
24740
  const isRotated = x > 0;
24699
24741
  return /* @__PURE__ */ jsxs(Fragment22, { children: [
24700
- /* @__PURE__ */ jsx5(Translate, { offset: { x: x + 0.25 / 2, y, z: z133 }, children: /* @__PURE__ */ jsx5(Rotate, { rotation: ["-90deg", 0, "90deg"], children: /* @__PURE__ */ jsx5(ExtrudeLinear, { height: 0.25, children: /* @__PURE__ */ jsx5(Polygon, { points: svgPathPoints.map((p) => [p.x, p.y]) }) }) }) }),
24742
+ /* @__PURE__ */ jsx5(Translate, { offset: { x: x + 0.25 / 2, y, z: z133 }, children: /* @__PURE__ */ jsx5(Rotate, { rotation: ["-90deg", 0, "90deg"], children: /* @__PURE__ */ jsx5(ExtrudeLinear, { height: 0.25, children: /* @__PURE__ */ jsx5(
24743
+ Polygon,
24744
+ {
24745
+ points: svgPathPoints.slice().reverse().map((p) => [p.x, p.y])
24746
+ }
24747
+ ) }) }) }),
24701
24748
  /* @__PURE__ */ jsx5(
24702
24749
  Translate,
24703
24750
  {
@@ -24839,6 +24886,64 @@ var Tssop = ({
24839
24886
  )
24840
24887
  ] });
24841
24888
  };
24889
+ var MSOP = ({
24890
+ pinCount,
24891
+ padContactLength = 0.4,
24892
+ leadWidth = 0.2,
24893
+ pitch = 0.65,
24894
+ bodyWidth = 3
24895
+ }) => {
24896
+ const sidePinCount = Math.ceil(pinCount / 2);
24897
+ const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
24898
+ const leadThickness = 0.2;
24899
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
24900
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
24901
+ SmdChipLead,
24902
+ {
24903
+ position: {
24904
+ x: -bodyWidth / 2 - padContactLength - 0.3,
24905
+ y: i * pitch - pinOffsetToCenter,
24906
+ z: leadThickness / 2
24907
+ },
24908
+ width: leadWidth,
24909
+ thickness: leadThickness,
24910
+ padContactLength,
24911
+ bodyDistance: padContactLength + 0.4,
24912
+ height: 0.6
24913
+ },
24914
+ i
24915
+ )),
24916
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
24917
+ SmdChipLead,
24918
+ {
24919
+ rotation: Math.PI,
24920
+ position: {
24921
+ x: bodyWidth / 2 + padContactLength + 0.3,
24922
+ y: i * pitch - pinOffsetToCenter,
24923
+ z: leadThickness / 2
24924
+ },
24925
+ width: leadWidth,
24926
+ thickness: leadThickness,
24927
+ padContactLength,
24928
+ bodyDistance: padContactLength + 0.4,
24929
+ height: 0.6
24930
+ },
24931
+ i
24932
+ )),
24933
+ /* @__PURE__ */ jsx5(
24934
+ ChipBody,
24935
+ {
24936
+ center: { x: 0, y: 0, z: leadThickness / 2 },
24937
+ width: bodyWidth,
24938
+ length: bodyWidth,
24939
+ height: 1.1,
24940
+ notchRadius: 0.35,
24941
+ heightAboveSurface: 0.1,
24942
+ taperRatio: 0.09
24943
+ }
24944
+ )
24945
+ ] });
24946
+ };
24842
24947
  var fullLength = 1;
24843
24948
  var width = 0.5;
24844
24949
  var height = 0.5;
@@ -24956,13 +25061,13 @@ var QFP = ({
24956
25061
  const fullWidth = fullLength10;
24957
25062
  const leadHeight = 0.8;
24958
25063
  const leadThickness = 0.15;
24959
- const bodyDistance = (fullWidth - bodyWidth) / 2;
25064
+ const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.5;
24960
25065
  return /* @__PURE__ */ jsxs(Fragment22, { children: [
24961
25066
  Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
24962
25067
  SmdChipLead,
24963
25068
  {
24964
25069
  position: {
24965
- x: -fullWidth / 2,
25070
+ x: -fullWidth / 2 - 0.4,
24966
25071
  y: i * pitch - pinOffsetToCenter,
24967
25072
  z: leadThickness / 2
24968
25073
  },
@@ -24979,7 +25084,7 @@ var QFP = ({
24979
25084
  {
24980
25085
  rotation: Math.PI,
24981
25086
  position: {
24982
- x: fullWidth / 2,
25087
+ x: fullWidth / 2 + 0.4,
24983
25088
  y: i * pitch - pinOffsetToCenter,
24984
25089
  z: leadThickness / 2
24985
25090
  },
@@ -24997,7 +25102,7 @@ var QFP = ({
24997
25102
  rotation: Math.PI / 2,
24998
25103
  position: {
24999
25104
  x: i * pitch - pinOffsetToCenter,
25000
- y: -fullLength10 / 2,
25105
+ y: -fullLength10 / 2 - 0.4,
25001
25106
  z: leadThickness / 2
25002
25107
  },
25003
25108
  width: leadWidth,
@@ -25014,7 +25119,7 @@ var QFP = ({
25014
25119
  rotation: -Math.PI / 2,
25015
25120
  position: {
25016
25121
  x: i * pitch - pinOffsetToCenter,
25017
- y: fullLength10 / 2,
25122
+ y: fullLength10 / 2 + 0.4,
25018
25123
  z: leadThickness / 2
25019
25124
  },
25020
25125
  width: leadWidth,
@@ -25028,10 +25133,18 @@ var QFP = ({
25028
25133
  /* @__PURE__ */ jsx5(
25029
25134
  ChipBody,
25030
25135
  {
25031
- center: { x: 0, y: 0, z: leadThickness / 2 },
25136
+ center: { x: 0, y: 0, z: 0 },
25032
25137
  width: bodyWidth,
25033
25138
  length: bodyLength10,
25034
- height: 1.5
25139
+ height: 1.5,
25140
+ taperRatio: 0.03,
25141
+ chamferSize: 0.7,
25142
+ notchPosition: {
25143
+ x: bodyLength10 / 2 - 1.5,
25144
+ y: bodyWidth / 2 - 1.5,
25145
+ z: 1.5
25146
+ },
25147
+ notchRadius: 1.5 / 2
25035
25148
  }
25036
25149
  )
25037
25150
  ] });
@@ -25051,14 +25164,17 @@ var getPitch = (pinCount, width10) => {
25051
25164
  };
25052
25165
  var getPadContactLength = (pinCount) => {
25053
25166
  switch (pinCount) {
25054
- case 44:
25167
+ case 32:
25168
+ return 0.6;
25169
+ case 40:
25170
+ return 0.6;
25055
25171
  case 52:
25056
25172
  case 64:
25057
- return 2.25;
25173
+ return 0.65;
25058
25174
  case 208:
25059
25175
  return 1.65;
25060
25176
  default:
25061
- return 1;
25177
+ return 0.6;
25062
25178
  }
25063
25179
  };
25064
25180
  var getLeadWidth = (pinCount, width10) => {
@@ -25878,7 +25994,7 @@ var SOIC = ({
25878
25994
  width: leadWidth,
25879
25995
  thickness: leadThickness,
25880
25996
  padContactLength: leadLength / 2,
25881
- bodyDistance: leadLength + 0.2,
25997
+ bodyDistance: leadLength + 0.3,
25882
25998
  height: leadHeight
25883
25999
  },
25884
26000
  i
@@ -25895,7 +26011,7 @@ var SOIC = ({
25895
26011
  width: leadWidth,
25896
26012
  thickness: leadThickness,
25897
26013
  padContactLength: leadLength / 2,
25898
- bodyDistance: leadLength + 0.2,
26014
+ bodyDistance: leadLength + 0.3,
25899
26015
  height: leadHeight
25900
26016
  },
25901
26017
  i
@@ -25952,7 +26068,7 @@ var VSSOP = ({
25952
26068
  width: _leadWidth,
25953
26069
  thickness: leadThickness,
25954
26070
  padContactLength: padContactLength + 0.05,
25955
- bodyDistance: leadBodyDistance + 0.05,
26071
+ bodyDistance: leadBodyDistance + 0.1,
25956
26072
  height: leadHeight
25957
26073
  },
25958
26074
  `left-${i}`
@@ -25969,7 +26085,7 @@ var VSSOP = ({
25969
26085
  width: _leadWidth,
25970
26086
  thickness: leadThickness,
25971
26087
  padContactLength: padContactLength + 0.05,
25972
- bodyDistance: leadBodyDistance + 0.05,
26088
+ bodyDistance: leadBodyDistance + 0.1,
25973
26089
  height: leadHeight
25974
26090
  },
25975
26091
  `right-${i}`
@@ -25997,6 +26113,315 @@ var SOD523 = () => {
25997
26113
  const rightPadCenterX = bodyWidth / 2 - padLength / 2 + 0.15;
25998
26114
  const taperOffset = 0.2;
25999
26115
  const straightHeight = bodyHeight * 0.5;
26116
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26117
+ /* @__PURE__ */ jsx5(
26118
+ Cuboid,
26119
+ {
26120
+ color: "#ccc",
26121
+ size: [padLength, padWidth, padThickness],
26122
+ center: [leftPadCenterX, 0, padThickness / 2]
26123
+ }
26124
+ ),
26125
+ /* @__PURE__ */ jsx5(
26126
+ Cuboid,
26127
+ {
26128
+ color: "#ccc",
26129
+ size: [padLength, padWidth, padThickness],
26130
+ center: [rightPadCenterX, 0, padThickness / 2]
26131
+ }
26132
+ ),
26133
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
26134
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight / 2, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, straightHeight] }) }),
26135
+ /* @__PURE__ */ jsxs(Hull, { children: [
26136
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, 0.01] }) }),
26137
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26138
+ Cuboid,
26139
+ {
26140
+ size: [bodyWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26141
+ }
26142
+ ) })
26143
+ ] })
26144
+ ] }) })
26145
+ ] });
26146
+ };
26147
+ var SOD882 = () => {
26148
+ const bodyLength10 = 0.98;
26149
+ const bodyHeight = 0.47;
26150
+ const pitch = 0.65;
26151
+ const padWidth = 0.51;
26152
+ const padLength = 0.26;
26153
+ const padThickness = 0.12;
26154
+ const bodyWidth = 0.58;
26155
+ const leftPadCenterX = -pitch / 2;
26156
+ const rightPadCenterX = pitch / 2;
26157
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26158
+ /* @__PURE__ */ jsx5(
26159
+ Cuboid,
26160
+ {
26161
+ color: "#ccc",
26162
+ size: [padLength, padWidth, padThickness],
26163
+ center: [leftPadCenterX, 0, padThickness / 2]
26164
+ }
26165
+ ),
26166
+ /* @__PURE__ */ jsx5(
26167
+ Cuboid,
26168
+ {
26169
+ color: "#ccc",
26170
+ size: [padLength, padWidth, padThickness],
26171
+ center: [rightPadCenterX, 0, padThickness / 2]
26172
+ }
26173
+ ),
26174
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsx5(Translate, { z: bodyHeight / 2 + 0.02, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyLength10, bodyWidth, bodyHeight] }) }) }),
26175
+ /* @__PURE__ */ jsx5(
26176
+ Cuboid,
26177
+ {
26178
+ color: "#ccc",
26179
+ size: [bodyLength10 + 1e-3, padLength / 2, padLength / 4],
26180
+ center: [0, padLength / 2, bodyHeight / 4]
26181
+ }
26182
+ ),
26183
+ /* @__PURE__ */ jsx5(
26184
+ Cuboid,
26185
+ {
26186
+ color: "#ccc",
26187
+ size: [bodyLength10 + 1e-3, padLength / 2, padLength / 4],
26188
+ center: [0, -padLength / 2, bodyHeight / 4]
26189
+ }
26190
+ ),
26191
+ /* @__PURE__ */ jsx5(
26192
+ Cuboid,
26193
+ {
26194
+ color: "#ccc",
26195
+ size: [padLength / 1.5, bodyWidth + 1e-3, padLength / 4],
26196
+ center: [pitch / 2, 0, bodyHeight / 4]
26197
+ }
26198
+ ),
26199
+ /* @__PURE__ */ jsx5(
26200
+ Cuboid,
26201
+ {
26202
+ color: "#ccc",
26203
+ size: [padLength / 1.5, bodyWidth + 1e-3, padLength / 4],
26204
+ center: [-pitch / 2, 0, bodyHeight / 4]
26205
+ }
26206
+ )
26207
+ ] });
26208
+ };
26209
+ var SMA = () => {
26210
+ const bodyWidth = 4.4;
26211
+ const bodyLength10 = 3.4;
26212
+ const bodyHeight = 2.3;
26213
+ const padWidth = 1.45;
26214
+ const padThickness = 0.12;
26215
+ const leadThickness = 0.2;
26216
+ const leadHeight = 1.14;
26217
+ const taperOffset = 0.4;
26218
+ const straightHeight = bodyHeight * 0.5;
26219
+ const Body = /* @__PURE__ */ jsx5(Colorize, { color: "#1a1a1a", children: /* @__PURE__ */ jsxs(Union, { children: [
26220
+ /* @__PURE__ */ jsxs(Hull, { children: [
26221
+ /* @__PURE__ */ jsx5(Translate, { z: padThickness + 0.01, children: /* @__PURE__ */ jsx5(
26222
+ Cuboid,
26223
+ {
26224
+ size: [bodyWidth - taperOffset, bodyLength10 - taperOffset, 0.03]
26225
+ }
26226
+ ) }),
26227
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, 0.01] }) })
26228
+ ] }),
26229
+ /* @__PURE__ */ jsxs(Hull, { children: [
26230
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, 0.01] }) }),
26231
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26232
+ Cuboid,
26233
+ {
26234
+ size: [bodyWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26235
+ }
26236
+ ) })
26237
+ ] })
26238
+ ] }) });
26239
+ const Lead = ({ xDir }) => {
26240
+ const verticalGap = 1;
26241
+ const lowerPadGap = 1;
26242
+ const lowerPadX = xDir * (bodyLength10 / 2 - bodyHeight * 0.8 / 2 + lowerPadGap);
26243
+ const verticalLeadX = xDir * (bodyLength10 / 2 - leadThickness / 2 + verticalGap);
26244
+ const bodyEdgeX = xDir * (bodyLength10 / 2 - leadThickness / 2);
26245
+ const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX);
26246
+ const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2;
26247
+ return /* @__PURE__ */ jsx5(Colorize, { color: "#c0c0c0", children: /* @__PURE__ */ jsxs(Union, { children: [
26248
+ /* @__PURE__ */ jsx5(
26249
+ Cuboid,
26250
+ {
26251
+ size: [bodyHeight * 0.8, padWidth, leadThickness],
26252
+ center: [lowerPadX, 0, leadThickness / 2]
26253
+ }
26254
+ ),
26255
+ /* @__PURE__ */ jsx5(
26256
+ Cuboid,
26257
+ {
26258
+ size: [leadThickness, padWidth, leadHeight],
26259
+ center: [verticalLeadX, 0, leadHeight / 2 + leadThickness]
26260
+ }
26261
+ ),
26262
+ /* @__PURE__ */ jsx5(
26263
+ Cuboid,
26264
+ {
26265
+ size: [bridgeLength, padWidth, leadThickness],
26266
+ center: [bridgeCenterX, 0, leadThickness / 2 + leadHeight]
26267
+ }
26268
+ )
26269
+ ] }) });
26270
+ };
26271
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26272
+ /* @__PURE__ */ jsx5(Lead, { xDir: 1 }),
26273
+ /* @__PURE__ */ jsx5(Lead, { xDir: -1 }),
26274
+ Body
26275
+ ] });
26276
+ };
26277
+ var SMB = () => {
26278
+ const bodyWidth = 4.4;
26279
+ const bodyLength10 = 3.4;
26280
+ const bodyHeight = 2.3;
26281
+ const padWidth = 1.45;
26282
+ const padThickness = 0.12;
26283
+ const leadThickness = 0.2;
26284
+ const leadHeight = 1.14;
26285
+ const taperOffset = 0.4;
26286
+ const straightHeight = bodyHeight * 0.5;
26287
+ const Body = /* @__PURE__ */ jsx5(Colorize, { color: "#1a1a1a", children: /* @__PURE__ */ jsxs(Union, { children: [
26288
+ /* @__PURE__ */ jsxs(Hull, { children: [
26289
+ /* @__PURE__ */ jsx5(Translate, { z: padThickness + 0.01, children: /* @__PURE__ */ jsx5(
26290
+ Cuboid,
26291
+ {
26292
+ size: [bodyWidth - taperOffset, bodyLength10 - taperOffset, 0.03]
26293
+ }
26294
+ ) }),
26295
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, 0.01] }) })
26296
+ ] }),
26297
+ /* @__PURE__ */ jsxs(Hull, { children: [
26298
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, 0.01] }) }),
26299
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26300
+ Cuboid,
26301
+ {
26302
+ size: [bodyWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26303
+ }
26304
+ ) })
26305
+ ] })
26306
+ ] }) });
26307
+ const Lead = ({ xDir }) => {
26308
+ const verticalGap = 1;
26309
+ const lowerPadGap = 1;
26310
+ const lowerPadX = xDir * (bodyLength10 / 2 - bodyHeight * 0.8 / 2 + lowerPadGap);
26311
+ const verticalLeadX = xDir * (bodyLength10 / 2 - leadThickness / 2 + verticalGap);
26312
+ const bodyEdgeX = xDir * (bodyLength10 / 2 - leadThickness / 2);
26313
+ const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX);
26314
+ const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2;
26315
+ return /* @__PURE__ */ jsx5(Colorize, { color: "#c0c0c0", children: /* @__PURE__ */ jsxs(Union, { children: [
26316
+ /* @__PURE__ */ jsx5(
26317
+ Cuboid,
26318
+ {
26319
+ size: [bodyHeight * 0.8, padWidth, leadThickness],
26320
+ center: [lowerPadX, 0, leadThickness / 2]
26321
+ }
26322
+ ),
26323
+ /* @__PURE__ */ jsx5(
26324
+ Cuboid,
26325
+ {
26326
+ size: [leadThickness, padWidth, leadHeight],
26327
+ center: [verticalLeadX, 0, leadHeight / 2 + leadThickness]
26328
+ }
26329
+ ),
26330
+ /* @__PURE__ */ jsx5(
26331
+ Cuboid,
26332
+ {
26333
+ size: [bridgeLength, padWidth, leadThickness],
26334
+ center: [bridgeCenterX, 0, leadThickness / 2 + leadHeight]
26335
+ }
26336
+ )
26337
+ ] }) });
26338
+ };
26339
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26340
+ /* @__PURE__ */ jsx5(Lead, { xDir: 1 }),
26341
+ /* @__PURE__ */ jsx5(Lead, { xDir: -1 }),
26342
+ Body
26343
+ ] });
26344
+ };
26345
+ var SMC = () => {
26346
+ const bodyWidth = 6.8;
26347
+ const bodyLength10 = 6;
26348
+ const bodyHeight = 2.3;
26349
+ const padWidth = 2.95;
26350
+ const padThickness = 0.2;
26351
+ const leadThickness = 0.2;
26352
+ const leadHeight = 1.14;
26353
+ const taperOffset = 0.4;
26354
+ const straightHeight = bodyHeight * 0.5;
26355
+ const Body = /* @__PURE__ */ jsx5(Colorize, { color: "#1a1a1a", children: /* @__PURE__ */ jsxs(Union, { children: [
26356
+ /* @__PURE__ */ jsxs(Hull, { children: [
26357
+ /* @__PURE__ */ jsx5(Translate, { z: padThickness + 0.01, children: /* @__PURE__ */ jsx5(
26358
+ Cuboid,
26359
+ {
26360
+ size: [bodyWidth - taperOffset, bodyLength10 - taperOffset, 0.03]
26361
+ }
26362
+ ) }),
26363
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, 0.01] }) })
26364
+ ] }),
26365
+ /* @__PURE__ */ jsxs(Hull, { children: [
26366
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, 0.01] }) }),
26367
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26368
+ Cuboid,
26369
+ {
26370
+ size: [bodyWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26371
+ }
26372
+ ) })
26373
+ ] })
26374
+ ] }) });
26375
+ const Lead = ({ xDir }) => {
26376
+ const verticalGap = 1;
26377
+ const lowerPadGap = 1;
26378
+ const lowerPadX = xDir * (bodyLength10 / 2 - bodyHeight * 0.8 / 2 + lowerPadGap);
26379
+ const verticalLeadX = xDir * (bodyLength10 / 2 - leadThickness / 2 + verticalGap);
26380
+ const bodyEdgeX = xDir * (bodyLength10 / 2 - leadThickness / 2);
26381
+ const bridgeLength = Math.abs(bodyEdgeX - verticalLeadX);
26382
+ const bridgeCenterX = (verticalLeadX + bodyEdgeX) / 2;
26383
+ return /* @__PURE__ */ jsx5(Colorize, { color: "#c0c0c0", children: /* @__PURE__ */ jsxs(Union, { children: [
26384
+ /* @__PURE__ */ jsx5(
26385
+ Cuboid,
26386
+ {
26387
+ size: [bodyHeight * 0.8, padWidth, leadThickness],
26388
+ center: [lowerPadX, 0, leadThickness / 2]
26389
+ }
26390
+ ),
26391
+ /* @__PURE__ */ jsx5(
26392
+ Cuboid,
26393
+ {
26394
+ size: [leadThickness, padWidth, leadHeight],
26395
+ center: [verticalLeadX, 0, leadHeight / 2 + leadThickness]
26396
+ }
26397
+ ),
26398
+ /* @__PURE__ */ jsx5(
26399
+ Cuboid,
26400
+ {
26401
+ size: [bridgeLength, padWidth, leadThickness],
26402
+ center: [bridgeCenterX, 0, leadThickness / 2 + leadHeight]
26403
+ }
26404
+ )
26405
+ ] }) });
26406
+ };
26407
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26408
+ /* @__PURE__ */ jsx5(Lead, { xDir: 1 }),
26409
+ /* @__PURE__ */ jsx5(Lead, { xDir: -1 }),
26410
+ Body
26411
+ ] });
26412
+ };
26413
+ var SMF = () => {
26414
+ const fullWidth = 2.9;
26415
+ const bodyLength10 = 1.9;
26416
+ const bodyHeight = 1.08;
26417
+ const padWidth = 1.2;
26418
+ const padLength = 1;
26419
+ const padThickness = 0.25;
26420
+ const bodyWidth = fullWidth;
26421
+ const leftPadCenterX = -1.3;
26422
+ const rightPadCenterX = 1.3;
26423
+ const taperOffset = 0.2;
26424
+ const straightHeight = bodyHeight * 0.5;
26000
26425
  const Body = /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
26001
26426
  /* @__PURE__ */ jsx5(Translate, { z: straightHeight / 2, children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, straightHeight] }) }),
26002
26427
  /* @__PURE__ */ jsxs(Hull, { children: [
@@ -26029,10 +26454,889 @@ var SOD523 = () => {
26029
26454
  Body
26030
26455
  ] });
26031
26456
  };
26032
- var Footprinter3d = ({ footprint }) => {
26033
- const fpJson = fp.string(footprint).json();
26034
- switch (fpJson.fn) {
26035
- case "dip":
26457
+ var SOD123F = () => {
26458
+ const fullWidth = 2.7;
26459
+ const bodyLength10 = 1.6;
26460
+ const bodyHeight = 1.1;
26461
+ const padWidth = 0.6;
26462
+ const padLength = 1;
26463
+ const padThickness = 0.12;
26464
+ const leftPadCenterX = -1.3;
26465
+ const rightPadCenterX = 1.3;
26466
+ const taperOffset = 0.2;
26467
+ const straightHeight = bodyHeight * 0.5;
26468
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26469
+ /* @__PURE__ */ jsx5(
26470
+ Cuboid,
26471
+ {
26472
+ color: "#ccc",
26473
+ size: [padLength, padWidth, padThickness],
26474
+ center: [leftPadCenterX, 0, padThickness / 2]
26475
+ }
26476
+ ),
26477
+ /* @__PURE__ */ jsx5(
26478
+ Cuboid,
26479
+ {
26480
+ color: "#ccc",
26481
+ size: [padLength, padWidth, padThickness],
26482
+ center: [rightPadCenterX, 0, padThickness / 2]
26483
+ }
26484
+ ),
26485
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
26486
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight / 2, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, straightHeight] }) }),
26487
+ /* @__PURE__ */ jsxs(Hull, { children: [
26488
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, 0.01] }) }),
26489
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26490
+ Cuboid,
26491
+ {
26492
+ size: [fullWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26493
+ }
26494
+ ) })
26495
+ ] })
26496
+ ] }) })
26497
+ ] });
26498
+ };
26499
+ var SOD123FL = () => {
26500
+ const fullWidth = 2.75;
26501
+ const bodyLength10 = 1.8;
26502
+ const bodyHeight = 1;
26503
+ const padWidth = 0.9;
26504
+ const padLength = 1;
26505
+ const padThickness = 0.2;
26506
+ const leftPadCenterX = -(fullWidth / 2 - 0.075);
26507
+ const rightPadCenterX = fullWidth / 2 - 0.075;
26508
+ const taperOffset = 0.4;
26509
+ const straightHeight = bodyHeight * 0.2;
26510
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26511
+ /* @__PURE__ */ jsx5(
26512
+ Cuboid,
26513
+ {
26514
+ color: "#ccc",
26515
+ size: [padLength, padWidth, padThickness],
26516
+ center: [leftPadCenterX, 0, padThickness / 2]
26517
+ }
26518
+ ),
26519
+ /* @__PURE__ */ jsx5(
26520
+ Cuboid,
26521
+ {
26522
+ color: "#ccc",
26523
+ size: [padLength, padWidth, padThickness],
26524
+ center: [rightPadCenterX, 0, padThickness / 2]
26525
+ }
26526
+ ),
26527
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
26528
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight / 2, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, straightHeight] }) }),
26529
+ /* @__PURE__ */ jsxs(Hull, { children: [
26530
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, 0.01] }) }),
26531
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26532
+ Cuboid,
26533
+ {
26534
+ size: [fullWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26535
+ }
26536
+ ) })
26537
+ ] })
26538
+ ] }) }),
26539
+ /* @__PURE__ */ jsx5(
26540
+ Cuboid,
26541
+ {
26542
+ color: "#777",
26543
+ size: [padThickness, bodyLength10 - taperOffset, 0.01],
26544
+ center: [leftPadCenterX + taperOffset, 0, bodyHeight]
26545
+ }
26546
+ )
26547
+ ] });
26548
+ };
26549
+ var SOD923 = () => {
26550
+ const fullWidth = 0.8;
26551
+ const bodyLength10 = 0.6;
26552
+ const bodyHeight = 0.37;
26553
+ const padWidth = 0.25;
26554
+ const padLength = 0.4;
26555
+ const padThickness = 0.14;
26556
+ const leftPadCenterX = -(fullWidth / 2);
26557
+ const rightPadCenterX = fullWidth / 2;
26558
+ const taperOffset = 0.1;
26559
+ const straightHeight = padThickness;
26560
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26561
+ /* @__PURE__ */ jsx5(
26562
+ Cuboid,
26563
+ {
26564
+ color: "#ccc",
26565
+ size: [padLength, padWidth, padThickness],
26566
+ center: [leftPadCenterX, 0, padThickness / 2]
26567
+ }
26568
+ ),
26569
+ /* @__PURE__ */ jsx5(
26570
+ Cuboid,
26571
+ {
26572
+ color: "#ccc",
26573
+ size: [padLength, padWidth, padThickness],
26574
+ center: [rightPadCenterX, 0, padThickness / 2]
26575
+ }
26576
+ ),
26577
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
26578
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight / 2, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, straightHeight] }) }),
26579
+ /* @__PURE__ */ jsxs(Hull, { children: [
26580
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, 0.01] }) }),
26581
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26582
+ Cuboid,
26583
+ {
26584
+ size: [fullWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26585
+ }
26586
+ ) })
26587
+ ] })
26588
+ ] }) })
26589
+ ] });
26590
+ };
26591
+ var SOT223 = () => {
26592
+ const fullWidth = 6.6;
26593
+ const bodyWidth = 3.5;
26594
+ const bodyLength10 = 6.5;
26595
+ const bodyHeight = 1.7;
26596
+ const leadWidth = 0.7;
26597
+ const leftLeadWidth = 3;
26598
+ const leadThickness = 0.25;
26599
+ const leadHeight = 0.75;
26600
+ const padContactLength = 0.5;
26601
+ const padPitch = 2.3;
26602
+ const extendedBodyDistance = fullWidth - bodyWidth;
26603
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26604
+ /* @__PURE__ */ jsx5(
26605
+ SmdChipLead,
26606
+ {
26607
+ rotation: Math.PI,
26608
+ position: {
26609
+ x: fullWidth / 2 + extendedBodyDistance / 4,
26610
+ y: 0,
26611
+ z: leadThickness / 2
26612
+ },
26613
+ width: leftLeadWidth,
26614
+ thickness: leadThickness,
26615
+ padContactLength,
26616
+ bodyDistance: extendedBodyDistance,
26617
+ height: leadHeight
26618
+ },
26619
+ 4
26620
+ ),
26621
+ /* @__PURE__ */ jsx5(
26622
+ SmdChipLead,
26623
+ {
26624
+ position: {
26625
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
26626
+ y: 0,
26627
+ z: leadThickness / 2
26628
+ },
26629
+ width: leadWidth,
26630
+ thickness: leadThickness,
26631
+ padContactLength,
26632
+ bodyDistance: extendedBodyDistance,
26633
+ height: leadHeight
26634
+ },
26635
+ 3
26636
+ ),
26637
+ /* @__PURE__ */ jsx5(
26638
+ SmdChipLead,
26639
+ {
26640
+ position: {
26641
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
26642
+ y: -padPitch,
26643
+ z: leadThickness / 2
26644
+ },
26645
+ width: leadWidth,
26646
+ thickness: leadThickness,
26647
+ padContactLength,
26648
+ bodyDistance: extendedBodyDistance,
26649
+ height: leadHeight
26650
+ },
26651
+ 1
26652
+ ),
26653
+ /* @__PURE__ */ jsx5(
26654
+ SmdChipLead,
26655
+ {
26656
+ position: {
26657
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
26658
+ y: padPitch,
26659
+ z: leadThickness / 2
26660
+ },
26661
+ width: leadWidth,
26662
+ thickness: leadThickness,
26663
+ padContactLength,
26664
+ bodyDistance: extendedBodyDistance,
26665
+ height: leadHeight
26666
+ },
26667
+ 2
26668
+ ),
26669
+ /* @__PURE__ */ jsx5(
26670
+ ChipBody,
26671
+ {
26672
+ center: { x: 0, y: 0, z: 0 },
26673
+ width: bodyWidth,
26674
+ length: bodyLength10,
26675
+ height: bodyHeight,
26676
+ includeNotch: false,
26677
+ taperRatio: 0.06,
26678
+ straightHeightRatio: 0.45
26679
+ }
26680
+ )
26681
+ ] });
26682
+ };
26683
+ var TQFP = () => {
26684
+ const pinCount = 64;
26685
+ const pitch = 0.5;
26686
+ const leadWidth = 0.2;
26687
+ const padContactLength = 0.45;
26688
+ const bodyWidth = 9;
26689
+ const sidePinCount = pinCount / 4;
26690
+ const bodyLength10 = bodyWidth;
26691
+ const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
26692
+ const fullLength10 = bodyLength10 + 2 * padContactLength + 0.6;
26693
+ const fullWidth = fullLength10;
26694
+ const leadHeight = 0.65;
26695
+ const leadThickness = 0.25;
26696
+ const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.2;
26697
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26698
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26699
+ SmdChipLead,
26700
+ {
26701
+ position: {
26702
+ x: -fullWidth / 2,
26703
+ y: i * pitch - pinOffsetToCenter,
26704
+ z: leadThickness / 2
26705
+ },
26706
+ width: leadWidth,
26707
+ thickness: leadThickness,
26708
+ padContactLength,
26709
+ bodyDistance,
26710
+ height: leadHeight
26711
+ },
26712
+ `left-${i}`
26713
+ )),
26714
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26715
+ SmdChipLead,
26716
+ {
26717
+ rotation: Math.PI,
26718
+ position: {
26719
+ x: fullWidth / 2,
26720
+ y: i * pitch - pinOffsetToCenter,
26721
+ z: leadThickness / 2
26722
+ },
26723
+ width: leadWidth,
26724
+ thickness: leadThickness,
26725
+ padContactLength,
26726
+ bodyDistance,
26727
+ height: leadHeight
26728
+ },
26729
+ `right-${i}`
26730
+ )),
26731
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26732
+ SmdChipLead,
26733
+ {
26734
+ rotation: Math.PI / 2,
26735
+ position: {
26736
+ x: i * pitch - pinOffsetToCenter,
26737
+ y: -fullLength10 / 2,
26738
+ z: leadThickness / 2
26739
+ },
26740
+ width: leadWidth,
26741
+ thickness: leadThickness,
26742
+ padContactLength,
26743
+ bodyDistance,
26744
+ height: leadHeight
26745
+ },
26746
+ `bottom-${i}`
26747
+ )),
26748
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26749
+ SmdChipLead,
26750
+ {
26751
+ rotation: -Math.PI / 2,
26752
+ position: {
26753
+ x: i * pitch - pinOffsetToCenter,
26754
+ y: fullLength10 / 2,
26755
+ z: leadThickness / 2
26756
+ },
26757
+ width: leadWidth,
26758
+ thickness: leadThickness,
26759
+ padContactLength,
26760
+ bodyDistance,
26761
+ height: leadHeight
26762
+ },
26763
+ `top-${i}`
26764
+ )),
26765
+ /* @__PURE__ */ jsx5(
26766
+ ChipBody,
26767
+ {
26768
+ center: { x: 0, y: 0, z: 0 },
26769
+ width: bodyWidth,
26770
+ length: bodyLength10,
26771
+ height: 1.2,
26772
+ chamferSize: 0.7,
26773
+ taperRatio: 0.05,
26774
+ notchPosition: { x: 3.5, y: 3.5, z: 1.2 },
26775
+ notchRadius: 1.2 / 2
26776
+ }
26777
+ )
26778
+ ] });
26779
+ };
26780
+ var tqfp_default = TQFP;
26781
+ var SOT323 = () => {
26782
+ const fullWidth = 2.05;
26783
+ const bodyWidth = 1.25;
26784
+ const bodyLength10 = 2;
26785
+ const bodyHeight = 0.9;
26786
+ const leadWidth = 0.3;
26787
+ const leadThickness = 0.18;
26788
+ const leadHeight = 0.65;
26789
+ const padContactLength = 0.2;
26790
+ const padPitch = 0.65;
26791
+ const extendedBodyDistance = fullWidth - bodyWidth;
26792
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26793
+ /* @__PURE__ */ jsx5(
26794
+ SmdChipLead,
26795
+ {
26796
+ rotation: Math.PI,
26797
+ position: {
26798
+ x: fullWidth / 2 + extendedBodyDistance / 4,
26799
+ y: 0,
26800
+ z: leadThickness / 2
26801
+ },
26802
+ width: leadWidth,
26803
+ thickness: leadThickness,
26804
+ padContactLength,
26805
+ bodyDistance: extendedBodyDistance,
26806
+ height: leadHeight
26807
+ },
26808
+ 4
26809
+ ),
26810
+ /* @__PURE__ */ jsx5(
26811
+ SmdChipLead,
26812
+ {
26813
+ position: {
26814
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
26815
+ y: -padPitch,
26816
+ z: leadThickness / 2
26817
+ },
26818
+ width: leadWidth,
26819
+ thickness: leadThickness,
26820
+ padContactLength,
26821
+ bodyDistance: extendedBodyDistance,
26822
+ height: leadHeight
26823
+ },
26824
+ 1
26825
+ ),
26826
+ /* @__PURE__ */ jsx5(
26827
+ SmdChipLead,
26828
+ {
26829
+ position: {
26830
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
26831
+ y: padPitch,
26832
+ z: leadThickness / 2
26833
+ },
26834
+ width: leadWidth,
26835
+ thickness: leadThickness,
26836
+ padContactLength,
26837
+ bodyDistance: extendedBodyDistance,
26838
+ height: leadHeight
26839
+ },
26840
+ 2
26841
+ ),
26842
+ /* @__PURE__ */ jsx5(
26843
+ ChipBody,
26844
+ {
26845
+ center: { x: 0, y: 0, z: 0 },
26846
+ width: bodyWidth,
26847
+ length: bodyLength10,
26848
+ height: bodyHeight,
26849
+ includeNotch: false,
26850
+ taperRatio: 0.06,
26851
+ straightHeightRatio: 0.7,
26852
+ heightAboveSurface: 0.05
26853
+ }
26854
+ )
26855
+ ] });
26856
+ };
26857
+ var LQFP = ({
26858
+ pinCount,
26859
+ pitch,
26860
+ leadWidth,
26861
+ padContactLength,
26862
+ bodyWidth
26863
+ }) => {
26864
+ const sidePinCount = pinCount / 4;
26865
+ if (sidePinCount !== Math.floor(sidePinCount)) {
26866
+ throw new Error(`LQFP pinCount must be divisible by 4, got ${pinCount}`);
26867
+ }
26868
+ if (!pitch) pitch = 0.5;
26869
+ if (!padContactLength) padContactLength = 0.6;
26870
+ if (!leadWidth) leadWidth = 0.22;
26871
+ if (!bodyWidth) bodyWidth = pitch * (sidePinCount + 4);
26872
+ const bodyLength10 = bodyWidth;
26873
+ const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
26874
+ const fullLength10 = bodyLength10 + 3.3 * padContactLength;
26875
+ const fullWidth = fullLength10;
26876
+ const leadHeight = 0.8;
26877
+ const leadThickness = 0.2;
26878
+ const bodyDistance = (fullWidth - bodyWidth) / 2 + 0.4;
26879
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26880
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26881
+ SmdChipLead,
26882
+ {
26883
+ position: {
26884
+ x: -fullWidth / 2 - 0.36,
26885
+ y: i * pitch - pinOffsetToCenter,
26886
+ z: leadThickness / 2
26887
+ },
26888
+ width: leadWidth,
26889
+ thickness: leadThickness,
26890
+ padContactLength,
26891
+ bodyDistance,
26892
+ height: leadHeight
26893
+ },
26894
+ `left-${i}`
26895
+ )),
26896
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26897
+ SmdChipLead,
26898
+ {
26899
+ rotation: Math.PI,
26900
+ position: {
26901
+ x: fullWidth / 2 + 0.36,
26902
+ y: i * pitch - pinOffsetToCenter,
26903
+ z: leadThickness / 2
26904
+ },
26905
+ width: leadWidth,
26906
+ thickness: leadThickness,
26907
+ padContactLength,
26908
+ bodyDistance,
26909
+ height: leadHeight
26910
+ },
26911
+ `right-${i}`
26912
+ )),
26913
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26914
+ SmdChipLead,
26915
+ {
26916
+ rotation: Math.PI / 2,
26917
+ position: {
26918
+ x: i * pitch - pinOffsetToCenter,
26919
+ y: -fullLength10 / 2 - 0.36,
26920
+ z: leadThickness / 2
26921
+ },
26922
+ width: leadWidth,
26923
+ thickness: leadThickness,
26924
+ padContactLength,
26925
+ bodyDistance,
26926
+ height: leadHeight
26927
+ },
26928
+ `bottom-${i}`
26929
+ )),
26930
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
26931
+ SmdChipLead,
26932
+ {
26933
+ rotation: -Math.PI / 2,
26934
+ position: {
26935
+ x: i * pitch - pinOffsetToCenter,
26936
+ y: fullLength10 / 2 + 0.36,
26937
+ z: leadThickness / 2
26938
+ },
26939
+ width: leadWidth,
26940
+ thickness: leadThickness,
26941
+ padContactLength,
26942
+ bodyDistance,
26943
+ height: leadHeight
26944
+ },
26945
+ `top-${i}`
26946
+ )),
26947
+ /* @__PURE__ */ jsx5(
26948
+ ChipBody,
26949
+ {
26950
+ center: { x: 0, y: 0, z: 0 },
26951
+ width: bodyWidth,
26952
+ length: bodyLength10,
26953
+ height: 1.5,
26954
+ heightAboveSurface: 0.1,
26955
+ taperRatio: 0.04,
26956
+ chamferSize: 0.7,
26957
+ notchPosition: {
26958
+ x: bodyLength10 / 2 - 1.5,
26959
+ y: bodyLength10 / 2 - 1.5,
26960
+ z: 1.5
26961
+ },
26962
+ notchRadius: 1.5 / 2
26963
+ }
26964
+ )
26965
+ ] });
26966
+ };
26967
+ var getCcwSot723Coords2 = (pn) => {
26968
+ if (pn === 1) {
26969
+ return { x: 0, y: 0 };
26970
+ } else if (pn === 2) {
26971
+ return { x: 1, y: -0.4 };
26972
+ } else {
26973
+ return { x: 1, y: 0.4 };
26974
+ }
26975
+ };
26976
+ var SOT723 = () => {
26977
+ const bodyWidth = 0.8;
26978
+ const bodyLength10 = 1.2;
26979
+ const bodyHeight = 0.5;
26980
+ const leadWidth = 0.32;
26981
+ const leadLength = 0.3;
26982
+ const leadHeight = 0.1;
26983
+ const centerLeadWidth = 0.42;
26984
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26985
+ /* @__PURE__ */ jsx5(Rotate, { rotation: [45 * Math.PI, 0, 0], children: /* @__PURE__ */ jsx5(Translate, { center: [0.475, leadHeight / 2, -0.25], children: /* @__PURE__ */ jsx5(Colorize, { color: "grey", children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyWidth, bodyLength10, bodyHeight] }) }) }) }),
26986
+ [1, 2, 3].map((pn) => {
26987
+ const { x, y } = getCcwSot723Coords2(pn);
26988
+ return /* @__PURE__ */ jsx5(Translate, { center: [x, y, 0.05], children: /* @__PURE__ */ jsx5(
26989
+ Cuboid,
26990
+ {
26991
+ size: [
26992
+ leadLength,
26993
+ pn === 1 ? centerLeadWidth : leadWidth,
26994
+ leadHeight
26995
+ ]
26996
+ }
26997
+ ) }, `lead-${pn}`);
26998
+ })
26999
+ ] });
27000
+ };
27001
+ var DFN = ({
27002
+ num_pins,
27003
+ bodyWidth = 5.3,
27004
+ bodyLength: bodyLength10 = 5.3,
27005
+ bodyThickness = 1,
27006
+ thermalPadSize,
27007
+ // For a body length of 5 the typical pad width/length are 0.6 and 1.
27008
+ // Scale those values proportionally when `bodyLength` changes.
27009
+ padWidth = bodyLength10 / 5.3 * 0.6,
27010
+ padLength = bodyLength10 / 5.3 * 1,
27011
+ pitch = 0.5,
27012
+ thermalPadThickness = 0.2
27013
+ }) => {
27014
+ const pinPositions = [];
27015
+ const pinsPerSide = Math.floor(num_pins / 2);
27016
+ const pinSpan = pitch * (pinsPerSide - 1);
27017
+ for (let i = 0; i < num_pins; i++) {
27018
+ const side = i < pinsPerSide ? "left" : "right";
27019
+ const indexOnSide = i % pinsPerSide;
27020
+ const y = pinSpan / 2 - indexOnSide * pitch;
27021
+ const padSizeX = padLength;
27022
+ const padSizeY = padWidth;
27023
+ const x = side === "left" ? -bodyWidth / 2 + padSizeX / 2 : bodyWidth / 2 - padSizeX / 2;
27024
+ const pinNumber = i + 1;
27025
+ pinPositions.push({ pinNumber, x, y, padSizeX, padSizeY });
27026
+ }
27027
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27028
+ /* @__PURE__ */ jsx5(
27029
+ ChipBody,
27030
+ {
27031
+ center: { x: 0, y: 0, z: 0 },
27032
+ width: bodyWidth,
27033
+ length: bodyLength10,
27034
+ height: bodyThickness,
27035
+ heightAboveSurface: 0,
27036
+ color: "grey",
27037
+ chamferSize: 0.2,
27038
+ taperRatio: 0,
27039
+ notchPosition: {
27040
+ x: bodyWidth / 2 - padLength,
27041
+ y: bodyLength10 / 2 - padLength,
27042
+ z: bodyThickness
27043
+ }
27044
+ }
27045
+ ),
27046
+ pinPositions.map((p, i) => /* @__PURE__ */ jsx5(
27047
+ Cuboid,
27048
+ {
27049
+ center: [p.x, p.y, thermalPadThickness / 2],
27050
+ size: [p.padSizeX, p.padSizeY, thermalPadThickness]
27051
+ },
27052
+ i
27053
+ )),
27054
+ thermalPadSize?.length !== void 0 && thermalPadSize?.width !== void 0 && /* @__PURE__ */ jsx5(
27055
+ Cuboid,
27056
+ {
27057
+ center: [0, 0, thermalPadThickness / 2],
27058
+ size: [
27059
+ thermalPadSize.width,
27060
+ thermalPadSize.length,
27061
+ thermalPadThickness
27062
+ ]
27063
+ }
27064
+ )
27065
+ ] });
27066
+ };
27067
+ var HC49 = ({
27068
+ bodyLength: bodyLength10 = 10.2,
27069
+ bodyWidth = 4.65,
27070
+ bodyHeight = 13.46,
27071
+ leadSpacing = 5,
27072
+ leadDiameter = 0.8,
27073
+ leadLength = 12.7,
27074
+ color = "#ddd",
27075
+ leadColor = "#b87333"
27076
+ }) => {
27077
+ const halfLength = bodyLength10 / 2;
27078
+ const endRadius = bodyWidth / 2;
27079
+ const endCenterX = halfLength - endRadius;
27080
+ const leadCenterX = leadSpacing / 2;
27081
+ const baseHeight = 0.85;
27082
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27083
+ /* @__PURE__ */ jsxs(Colorize, { color, children: [
27084
+ /* @__PURE__ */ jsxs(Hull, { children: [
27085
+ /* @__PURE__ */ jsx5(
27086
+ RoundedCylinder,
27087
+ {
27088
+ height: bodyHeight,
27089
+ roundRadius: 0.5,
27090
+ radius: endRadius,
27091
+ center: [-endCenterX, 0, bodyHeight]
27092
+ }
27093
+ ),
27094
+ /* @__PURE__ */ jsx5(
27095
+ RoundedCylinder,
27096
+ {
27097
+ height: bodyHeight,
27098
+ roundRadius: 0.5,
27099
+ radius: endRadius,
27100
+ center: [endCenterX, 0, bodyHeight]
27101
+ }
27102
+ )
27103
+ ] }),
27104
+ /* @__PURE__ */ jsxs(Hull, { children: [
27105
+ /* @__PURE__ */ jsx5(
27106
+ RoundedCylinder,
27107
+ {
27108
+ height: baseHeight,
27109
+ roundRadius: 0.1,
27110
+ radius: endRadius + 0.85,
27111
+ center: [-endCenterX, 0, bodyHeight / 2 + baseHeight / 2]
27112
+ }
27113
+ ),
27114
+ /* @__PURE__ */ jsx5(
27115
+ RoundedCylinder,
27116
+ {
27117
+ height: baseHeight,
27118
+ roundRadius: 0.1,
27119
+ radius: endRadius + 0.85,
27120
+ center: [endCenterX, 0, bodyHeight / 2 + baseHeight / 2]
27121
+ }
27122
+ )
27123
+ ] })
27124
+ ] }),
27125
+ /* @__PURE__ */ jsxs(Colorize, { color: leadColor, children: [
27126
+ /* @__PURE__ */ jsx5(
27127
+ Cylinder,
27128
+ {
27129
+ height: leadLength + bodyHeight / 2,
27130
+ radius: leadDiameter / 2,
27131
+ center: [-leadCenterX + 0.06, 0, -(leadLength / 2) + bodyHeight / 2]
27132
+ }
27133
+ ),
27134
+ /* @__PURE__ */ jsx5(
27135
+ Cylinder,
27136
+ {
27137
+ height: leadLength + bodyHeight / 2,
27138
+ radius: leadDiameter / 2,
27139
+ center: [leadCenterX - 0.06, 0, -(leadLength / 2) + bodyHeight / 2]
27140
+ }
27141
+ )
27142
+ ] })
27143
+ ] });
27144
+ };
27145
+ var MicroMELF = ({
27146
+ bodyLength: bodyLength10 = 1.4,
27147
+ bodyDiameter = 1.1,
27148
+ color = "#3a3a3aff",
27149
+ contactColor = "#c6c6c6",
27150
+ cathodeIdentification = "#111"
27151
+ }) => {
27152
+ const padLength = 0.2;
27153
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27154
+ /* @__PURE__ */ jsx5(Colorize, { color, children: /* @__PURE__ */ jsxs(Rotate, { rotation: [0, "90deg", 0], children: [
27155
+ /* @__PURE__ */ jsx5(
27156
+ RoundedCuboid,
27157
+ {
27158
+ size: [bodyDiameter, bodyDiameter, bodyLength10 - padLength],
27159
+ roundRadius: padLength,
27160
+ center: [-bodyDiameter / 2, 0, 0.05]
27161
+ }
27162
+ ),
27163
+ /* @__PURE__ */ jsx5(
27164
+ Cylinder,
27165
+ {
27166
+ height: padLength / 2,
27167
+ radius: bodyDiameter / 2 - padLength,
27168
+ center: [-bodyDiameter / 2, 0, -bodyLength10 / 2 + padLength / 2]
27169
+ }
27170
+ )
27171
+ ] }) }),
27172
+ /* @__PURE__ */ jsx5(Colorize, { color: cathodeIdentification, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27173
+ RoundedCuboid,
27174
+ {
27175
+ size: [bodyDiameter * 1.01, bodyDiameter * 1.01, bodyLength10 / 3],
27176
+ roundRadius: padLength,
27177
+ center: [-bodyDiameter / 2, 0, -bodyLength10 / 4 + 0.1]
27178
+ }
27179
+ ) }) }),
27180
+ /* @__PURE__ */ jsx5(Colorize, { color: contactColor, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27181
+ RoundedCylinder,
27182
+ {
27183
+ height: padLength,
27184
+ radius: bodyDiameter / 2,
27185
+ roundRadius: padLength / 3,
27186
+ center: [-bodyDiameter / 2, 0, -bodyLength10 / 2]
27187
+ }
27188
+ ) }) }),
27189
+ /* @__PURE__ */ jsx5(Colorize, { color: contactColor, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27190
+ RoundedCylinder,
27191
+ {
27192
+ height: padLength,
27193
+ radius: bodyDiameter / 2,
27194
+ roundRadius: padLength / 3,
27195
+ center: [-bodyDiameter / 2, 0, bodyLength10 / 2]
27196
+ }
27197
+ ) }) })
27198
+ ] });
27199
+ };
27200
+ var MINIMELF = ({
27201
+ bodyLength: bodyLength10 = 3.5,
27202
+ bodyDiameter = 1.5,
27203
+ color = "#3a3a3aff",
27204
+ contactColor = "#c6c6c6"
27205
+ }) => {
27206
+ const padLength = 0.5;
27207
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27208
+ /* @__PURE__ */ jsx5(Colorize, { color, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27209
+ RoundedCylinder,
27210
+ {
27211
+ height: bodyLength10,
27212
+ radius: bodyDiameter / 2,
27213
+ roundRadius: 0.3,
27214
+ center: [-bodyDiameter / 2, 0, 0]
27215
+ }
27216
+ ) }) }),
27217
+ /* @__PURE__ */ jsx5(Colorize, { color: contactColor, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27218
+ RoundedCylinder,
27219
+ {
27220
+ height: padLength,
27221
+ radius: bodyDiameter / 2,
27222
+ roundRadius: 0.2,
27223
+ center: [-bodyDiameter / 2, 0, -bodyLength10 / 2]
27224
+ }
27225
+ ) }) }),
27226
+ /* @__PURE__ */ jsx5(Colorize, { color: contactColor, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27227
+ RoundedCylinder,
27228
+ {
27229
+ height: padLength,
27230
+ radius: bodyDiameter / 2,
27231
+ roundRadius: 0.2,
27232
+ center: [-bodyDiameter / 2, 0, bodyLength10 / 2]
27233
+ }
27234
+ ) }) })
27235
+ ] });
27236
+ };
27237
+ var MELF = ({
27238
+ bodyLength: bodyLength10 = 3.9,
27239
+ bodyDiameter = 2.5,
27240
+ color = "#3a3a3aff",
27241
+ contactColor = "#c6c6c6"
27242
+ }) => {
27243
+ const padLength = 0.55;
27244
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27245
+ /* @__PURE__ */ jsx5(Colorize, { color, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27246
+ RoundedCylinder,
27247
+ {
27248
+ height: bodyLength10,
27249
+ radius: bodyDiameter / 2,
27250
+ roundRadius: 0.3,
27251
+ center: [-bodyDiameter / 2, 0, 0]
27252
+ }
27253
+ ) }) }),
27254
+ /* @__PURE__ */ jsx5(Colorize, { color: contactColor, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27255
+ RoundedCylinder,
27256
+ {
27257
+ height: padLength,
27258
+ radius: bodyDiameter / 2,
27259
+ roundRadius: 0.2,
27260
+ center: [-bodyDiameter / 2, 0, -bodyLength10 / 2]
27261
+ }
27262
+ ) }) }),
27263
+ /* @__PURE__ */ jsx5(Colorize, { color: contactColor, children: /* @__PURE__ */ jsx5(Rotate, { rotation: [0, "90deg", 0], children: /* @__PURE__ */ jsx5(
27264
+ RoundedCylinder,
27265
+ {
27266
+ height: padLength,
27267
+ radius: bodyDiameter / 2,
27268
+ roundRadius: 0.2,
27269
+ center: [-bodyDiameter / 2, 0, bodyLength10 / 2]
27270
+ }
27271
+ ) }) })
27272
+ ] });
27273
+ };
27274
+ var MS012 = ({
27275
+ pinCount,
27276
+ padContactLength = 0.6,
27277
+ leadWidth = 0.41,
27278
+ pitch = 1.27
27279
+ }) => {
27280
+ if (pinCount % 2 !== 0) {
27281
+ throw new Error("MS012 pinCount must be even");
27282
+ }
27283
+ const sidePinCount = pinCount / 2;
27284
+ const bodyWidth = 4.9;
27285
+ const bodyLength10 = 3.9;
27286
+ const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
27287
+ const leadThickness = 0.2;
27288
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27289
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
27290
+ SmdChipLead,
27291
+ {
27292
+ position: {
27293
+ x: -bodyLength10 / 2 - padContactLength - 0.3,
27294
+ y: i * pitch - pinOffsetToCenter,
27295
+ z: leadThickness / 2
27296
+ },
27297
+ width: leadWidth,
27298
+ thickness: leadThickness,
27299
+ padContactLength,
27300
+ bodyDistance: padContactLength + 0.4,
27301
+ height: 0.85
27302
+ },
27303
+ i
27304
+ )),
27305
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
27306
+ SmdChipLead,
27307
+ {
27308
+ rotation: Math.PI,
27309
+ position: {
27310
+ x: bodyLength10 / 2 + padContactLength + 0.3,
27311
+ y: i * pitch - pinOffsetToCenter,
27312
+ z: leadThickness / 2
27313
+ },
27314
+ width: leadWidth,
27315
+ thickness: leadThickness,
27316
+ padContactLength,
27317
+ bodyDistance: padContactLength + 0.4,
27318
+ height: 0.85
27319
+ },
27320
+ `right-${i}`
27321
+ )),
27322
+ /* @__PURE__ */ jsx5(
27323
+ ChipBody,
27324
+ {
27325
+ center: { x: 0, y: 0, z: leadThickness / 2 },
27326
+ width: bodyLength10,
27327
+ length: bodyWidth,
27328
+ height: 1.55,
27329
+ notchPosition: { x: bodyLength10 / 2 - 1, y: bodyWidth / 2 - 1, z: 1.55 },
27330
+ heightAboveSurface: 0.17,
27331
+ taperRatio: 0.09
27332
+ }
27333
+ )
27334
+ ] });
27335
+ };
27336
+ var Footprinter3d = ({ footprint }) => {
27337
+ const fpJson = fp.string(footprint).json();
27338
+ switch (fpJson.fn) {
27339
+ case "dip":
26036
27340
  return /* @__PURE__ */ jsx5(Dip, { numPins: fpJson.num_pins, pitch: fpJson.p, bodyWidth: fpJson.w });
26037
27341
  case "tssop":
26038
27342
  return /* @__PURE__ */ jsx5(
@@ -26045,6 +27349,17 @@ var Footprinter3d = ({ footprint }) => {
26045
27349
  bodyWidth: fpJson.w
26046
27350
  }
26047
27351
  );
27352
+ case "msop":
27353
+ return /* @__PURE__ */ jsx5(
27354
+ MSOP,
27355
+ {
27356
+ pinCount: fpJson.num_pins,
27357
+ padContactLength: fpJson.pl,
27358
+ leadWidth: fpJson.pw,
27359
+ pitch: fpJson.p,
27360
+ bodyWidth: fpJson.w
27361
+ }
27362
+ );
26048
27363
  case "vssop":
26049
27364
  return /* @__PURE__ */ jsx5(
26050
27365
  VSSOP,
@@ -26068,7 +27383,12 @@ var Footprinter3d = ({ footprint }) => {
26068
27383
  bodyWidth: fpJson.w
26069
27384
  }
26070
27385
  );
26071
- case "qfn":
27386
+ case "tqfp":
27387
+ return /* @__PURE__ */ jsx5(tqfp_default, {});
27388
+ case "lqfp":
27389
+ return /* @__PURE__ */ jsx5(LQFP, { pinCount: fpJson.num_pins });
27390
+ case "qfn": {
27391
+ const hasThermalPad = typeof fpJson.thermalpad?.x === "number" && typeof fpJson.thermalpad?.y === "number";
26072
27392
  return /* @__PURE__ */ jsx5(
26073
27393
  qfn_default,
26074
27394
  {
@@ -26078,12 +27398,31 @@ var Footprinter3d = ({ footprint }) => {
26078
27398
  pitch: fpJson.p,
26079
27399
  padLength: fpJson.pl,
26080
27400
  padWidth: fpJson.pw,
26081
- thermalPadSize: {
27401
+ thermalPadSize: hasThermalPad ? {
26082
27402
  width: fpJson.thermalpad.x,
26083
27403
  length: fpJson.thermalpad.y
26084
- }
27404
+ } : void 0
27405
+ }
27406
+ );
27407
+ }
27408
+ case "dfn": {
27409
+ const hasThermalPad = typeof fpJson.thermalpad?.x === "number" && typeof fpJson.thermalpad?.y === "number";
27410
+ return /* @__PURE__ */ jsx5(
27411
+ DFN,
27412
+ {
27413
+ num_pins: fpJson.num_pins,
27414
+ bodyWidth: fpJson.w,
27415
+ bodyLength: fpJson.h,
27416
+ pitch: fpJson.p,
27417
+ padLength: fpJson.pl,
27418
+ padWidth: fpJson.pw,
27419
+ thermalPadSize: hasThermalPad ? {
27420
+ width: fpJson.thermalpad.x,
27421
+ length: fpJson.thermalpad.y
27422
+ } : void 0
26085
27423
  }
26086
27424
  );
27425
+ }
26087
27426
  case "pinrow":
26088
27427
  if (fpJson.male)
26089
27428
  return /* @__PURE__ */ jsx5(PinRow, { numberOfPins: fpJson.num_pins, pitch: fpJson.p });
@@ -26113,6 +27452,10 @@ var Footprinter3d = ({ footprint }) => {
26113
27452
  }
26114
27453
  case "sot235":
26115
27454
  return /* @__PURE__ */ jsx5(SOT_235_default, {});
27455
+ case "sot223":
27456
+ return /* @__PURE__ */ jsx5(SOT223, {});
27457
+ case "sot323":
27458
+ return /* @__PURE__ */ jsx5(SOT323, {});
26116
27459
  case "pushbutton":
26117
27460
  return /* @__PURE__ */ jsx5(
26118
27461
  PushButton,
@@ -26135,6 +27478,42 @@ var Footprinter3d = ({ footprint }) => {
26135
27478
  );
26136
27479
  case "sod523":
26137
27480
  return /* @__PURE__ */ jsx5(SOD523, {});
27481
+ case "sod882":
27482
+ return /* @__PURE__ */ jsx5(SOD882, {});
27483
+ case "sma":
27484
+ return /* @__PURE__ */ jsx5(SMA, {});
27485
+ case "smb":
27486
+ return /* @__PURE__ */ jsx5(SMB, {});
27487
+ case "smc":
27488
+ return /* @__PURE__ */ jsx5(SMC, {});
27489
+ case "smf":
27490
+ return /* @__PURE__ */ jsx5(SMF, {});
27491
+ case "sod123f":
27492
+ return /* @__PURE__ */ jsx5(SOD123F, {});
27493
+ case "sod123fl":
27494
+ return /* @__PURE__ */ jsx5(SOD123FL, {});
27495
+ case "sod923":
27496
+ return /* @__PURE__ */ jsx5(SOD923, {});
27497
+ case "hc49":
27498
+ return /* @__PURE__ */ jsx5(HC49, {});
27499
+ case "micromelf":
27500
+ return /* @__PURE__ */ jsx5(MicroMELF, {});
27501
+ case "minimelf":
27502
+ return /* @__PURE__ */ jsx5(MINIMELF, {});
27503
+ case "melf":
27504
+ return /* @__PURE__ */ jsx5(MELF, {});
27505
+ case "ms012":
27506
+ return /* @__PURE__ */ jsx5(
27507
+ MS012,
27508
+ {
27509
+ pinCount: fpJson.num_pins,
27510
+ padContactLength: fpJson.pl,
27511
+ leadWidth: fpJson.pw,
27512
+ pitch: fpJson.p
27513
+ }
27514
+ );
27515
+ case "sot723":
27516
+ return /* @__PURE__ */ jsx5(SOT723, {});
26138
27517
  }
26139
27518
  const colorMatch = footprint.match(/_color\(([^)]+)\)/);
26140
27519
  const color = colorMatch ? colorMatch[1] : void 0;
@@ -26237,7 +27616,7 @@ function renderNode(node, colorCtx, renderCtx) {
26237
27616
  else if (type === Subtract)
26238
27617
  geom = booleans.subtract(geoms[0], geoms.slice(1));
26239
27618
  else geom = hulls.hull(geoms);
26240
- return [{ geom }];
27619
+ return [{ geom, color: colorCtx }];
26241
27620
  }
26242
27621
  if (type === Polygon) {
26243
27622
  const points = props?.points ?? [];
@@ -26258,7 +27637,7 @@ function renderNode(node, colorCtx, renderCtx) {
26258
27637
  }
26259
27638
  return [{ geom: g3, color: colorCtx ?? props?.color }];
26260
27639
  }
26261
- if (type === Cuboid || type === Cube || type === Cylinder || type === Sphere || type === RoundedCuboid) {
27640
+ if (type === Cuboid || type === Cube || type === Cylinder || type === Sphere || type === RoundedCuboid || type === RoundedCylinder) {
26262
27641
  let g;
26263
27642
  if (type === Cuboid) {
26264
27643
  const size5 = props?.size ?? [1, 1, 1];
@@ -26279,6 +27658,12 @@ function renderNode(node, colorCtx, renderCtx) {
26279
27658
  const radius = props?.radius ?? 1;
26280
27659
  const center = props?.center ?? [0, 0, 0];
26281
27660
  g = primitives.sphere({ radius, center });
27661
+ } else if (type === RoundedCylinder) {
27662
+ const height10 = props?.height ?? 1;
27663
+ const radius = props?.radius ?? 1;
27664
+ const roundRadius = props?.roundRadius ?? 0.1;
27665
+ const center = props?.center ?? [0, 0, 0];
27666
+ g = primitives.roundedCylinder({ height: height10, radius, roundRadius, center });
26282
27667
  } else {
26283
27668
  const size5 = props?.size ?? [1, 1, 1];
26284
27669
  const roundRadius = props?.roundRadius ?? 0.1;
@@ -26789,7 +28174,7 @@ import * as THREE14 from "three";
26789
28174
  // package.json
26790
28175
  var package_default = {
26791
28176
  name: "@tscircuit/3d-viewer",
26792
- version: "0.0.429",
28177
+ version: "0.0.430",
26793
28178
  main: "./dist/index.js",
26794
28179
  module: "./dist/index.js",
26795
28180
  type: "module",
@@ -26850,10 +28235,10 @@ var package_default = {
26850
28235
  "@vitejs/plugin-react": "^4.3.4",
26851
28236
  "bun-match-svg": "^0.0.9",
26852
28237
  "bun-types": "1.2.1",
26853
- "circuit-json": "0.0.300",
28238
+ "circuit-json": "0.0.303",
26854
28239
  "circuit-to-svg": "^0.0.179",
26855
28240
  debug: "^4.4.0",
26856
- "jscad-electronics": "^0.0.48",
28241
+ "jscad-electronics": "^0.0.89",
26857
28242
  "jscad-planner": "^0.0.13",
26858
28243
  jsdom: "^26.0.0",
26859
28244
  "manifold-3d": "^3.2.1",