jscad-electronics 0.0.170 → 0.0.171

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1058,9 +1058,150 @@ var Tssop = ({
1058
1058
  ] });
1059
1059
  };
1060
1060
 
1061
- // lib/MSOP.tsx
1061
+ // lib/utils/DualRowGullWing.tsx
1062
+ import {
1063
+ Colorize as Colorize7,
1064
+ Cuboid as Cuboid14,
1065
+ Cylinder as Cylinder5,
1066
+ Hull as Hull4,
1067
+ Subtract as Subtract3,
1068
+ Translate as Translate8,
1069
+ Union as Union4
1070
+ } from "jscad-fiber";
1062
1071
  import { Fragment as Fragment15, jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
1063
- var MSOP = ({
1072
+ function createDualRowGullWing(p) {
1073
+ const {
1074
+ pinCount,
1075
+ pitch,
1076
+ bodyWidth,
1077
+ bodyLength: bodyLength10,
1078
+ bodyHeight,
1079
+ standoff,
1080
+ leadSpan,
1081
+ leadWidth,
1082
+ leadThickness,
1083
+ contactLength,
1084
+ taperInset,
1085
+ exposedPadWidth = 0,
1086
+ exposedPadLength = 0
1087
+ } = p;
1088
+ for (const key of [
1089
+ "pitch",
1090
+ "bodyWidth",
1091
+ "bodyLength",
1092
+ "bodyHeight",
1093
+ "leadSpan",
1094
+ "leadWidth",
1095
+ "leadThickness",
1096
+ "contactLength"
1097
+ ])
1098
+ if (!Number.isFinite(p[key]) || p[key] <= 0)
1099
+ throw new Error(`${key} must be finite and positive`);
1100
+ for (const [name, value] of Object.entries({
1101
+ standoff,
1102
+ taperInset,
1103
+ exposedPadWidth,
1104
+ exposedPadLength
1105
+ }))
1106
+ if (!Number.isFinite(value) || value < 0)
1107
+ throw new Error(`${name} must be finite and nonnegative`);
1108
+ if (!Number.isInteger(pinCount) || pinCount < 4 || pinCount % 2)
1109
+ throw new Error("pinCount must be even and at least 4");
1110
+ const moldHeight = bodyHeight - standoff;
1111
+ const reach = (leadSpan - bodyWidth) / 2;
1112
+ const rowLength = (pinCount / 2 - 1) * pitch + leadWidth;
1113
+ if (moldHeight <= leadThickness * 2 || leadWidth >= pitch || rowLength >= bodyLength10 - 2 * taperInset || taperInset * 2 >= Math.min(bodyWidth, bodyLength10) || contactLength >= reach)
1114
+ throw new Error("Invalid mold, lead spacing, or terminal reach");
1115
+ if (exposedPadWidth === 0 !== (exposedPadLength === 0) || exposedPadWidth >= bodyWidth - 2 * taperInset || exposedPadLength >= bodyLength10 - 2 * taperInset)
1116
+ throw new Error("Exposed pad must fit inside the bottom mold face");
1117
+ const midZ = standoff + moldHeight / 2;
1118
+ const slice = Math.min(2e-3, moldHeight / 100);
1119
+ const body = /* @__PURE__ */ jsxs17(Hull4, { children: [
1120
+ /* @__PURE__ */ jsx19(Translate8, { z: standoff + slice / 2, children: /* @__PURE__ */ jsx19(
1121
+ Cuboid14,
1122
+ {
1123
+ size: [
1124
+ bodyWidth - 2 * taperInset,
1125
+ bodyLength10 - 2 * taperInset,
1126
+ slice
1127
+ ]
1128
+ }
1129
+ ) }),
1130
+ /* @__PURE__ */ jsx19(Translate8, { z: midZ, children: /* @__PURE__ */ jsx19(Cuboid14, { size: [bodyWidth, bodyLength10, slice] }) }),
1131
+ /* @__PURE__ */ jsx19(Translate8, { z: bodyHeight - slice / 2, children: /* @__PURE__ */ jsx19(
1132
+ Cuboid14,
1133
+ {
1134
+ size: [
1135
+ bodyWidth - 2 * taperInset,
1136
+ bodyLength10 - 2 * taperInset,
1137
+ slice
1138
+ ]
1139
+ }
1140
+ ) })
1141
+ ] });
1142
+ const dimpleRadius = Math.min(bodyWidth, bodyLength10) * 0.045;
1143
+ const dimpleDepth = Math.min(0.04, moldHeight / 10);
1144
+ const lead = (side, y) => {
1145
+ const outer = leadSpan / 2;
1146
+ const root = bodyWidth / 2 - Math.min(bodyWidth / 8, 0.15);
1147
+ const bendStart = outer - contactLength;
1148
+ const bendEnd = bodyWidth / 2 + Math.min(0.08, (reach - contactLength) / 4);
1149
+ const points = [
1150
+ [outer - slice / 2, leadThickness / 2],
1151
+ [bendStart, leadThickness / 2]
1152
+ ];
1153
+ for (let i = 1; i <= 12; i++) {
1154
+ const t = i / 12;
1155
+ points.push([
1156
+ bendStart + (bendEnd - bendStart) * t,
1157
+ leadThickness / 2 + (midZ - leadThickness / 2) * t * t * (3 - 2 * t)
1158
+ ]);
1159
+ }
1160
+ points.push([root, midZ]);
1161
+ const section = ([x, z]) => /* @__PURE__ */ jsx19(Translate8, { offset: { x: side * x, y, z }, children: /* @__PURE__ */ jsx19(Cuboid14, { size: [slice, leadWidth, leadThickness] }) });
1162
+ return /* @__PURE__ */ jsx19(Union4, { children: points.slice(1).map((point, i) => /* @__PURE__ */ jsxs17(Hull4, { children: [
1163
+ section(points[i]),
1164
+ section(point)
1165
+ ] }, i)) });
1166
+ };
1167
+ return /* @__PURE__ */ jsxs17(Fragment15, { children: [
1168
+ /* @__PURE__ */ jsx19(Colorize7, { color: "#353535", children: /* @__PURE__ */ jsxs17(Subtract3, { children: [
1169
+ body,
1170
+ /* @__PURE__ */ jsx19(
1171
+ Translate8,
1172
+ {
1173
+ offset: {
1174
+ x: -bodyWidth / 2 + taperInset + dimpleRadius * 2,
1175
+ y: bodyLength10 / 2 - taperInset - dimpleRadius * 2,
1176
+ z: bodyHeight
1177
+ },
1178
+ children: /* @__PURE__ */ jsx19(Cylinder5, { radius: dimpleRadius, height: dimpleDepth * 2 })
1179
+ }
1180
+ )
1181
+ ] }) }),
1182
+ /* @__PURE__ */ jsx19(Colorize7, { color: "#bfc1c4", children: Array.from(
1183
+ { length: pinCount },
1184
+ (_, i) => lead(
1185
+ i < pinCount / 2 ? -1 : 1,
1186
+ ((pinCount / 2 - 1) / 2 - i % (pinCount / 2)) * pitch
1187
+ )
1188
+ ) }),
1189
+ exposedPadWidth > 0 && /* @__PURE__ */ jsx19(Colorize7, { color: "#bfc1c4", children: /* @__PURE__ */ jsx19(Translate8, { z: (standoff + leadThickness) / 2, children: /* @__PURE__ */ jsx19(
1190
+ Cuboid14,
1191
+ {
1192
+ size: [
1193
+ exposedPadWidth,
1194
+ exposedPadLength,
1195
+ standoff + leadThickness
1196
+ ]
1197
+ }
1198
+ ) }) })
1199
+ ] });
1200
+ }
1201
+
1202
+ // lib/MSOP.tsx
1203
+ import { Fragment as Fragment16, jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
1204
+ var LegacyMSOP = ({
1064
1205
  pinCount,
1065
1206
  padContactLength = 0.4,
1066
1207
  leadWidth = 0.2,
@@ -1070,8 +1211,8 @@ var MSOP = ({
1070
1211
  const sidePinCount = Math.ceil(pinCount / 2);
1071
1212
  const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
1072
1213
  const leadThickness = 0.2;
1073
- return /* @__PURE__ */ jsxs17(Fragment15, { children: [
1074
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx19(
1214
+ return /* @__PURE__ */ jsxs18(Fragment16, { children: [
1215
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx20(
1075
1216
  SmdChipLead,
1076
1217
  {
1077
1218
  position: {
@@ -1087,7 +1228,7 @@ var MSOP = ({
1087
1228
  },
1088
1229
  i
1089
1230
  )),
1090
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx19(
1231
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx20(
1091
1232
  SmdChipLead,
1092
1233
  {
1093
1234
  rotation: Math.PI,
@@ -1104,7 +1245,7 @@ var MSOP = ({
1104
1245
  },
1105
1246
  i
1106
1247
  )),
1107
- /* @__PURE__ */ jsx19(
1248
+ /* @__PURE__ */ jsx20(
1108
1249
  ChipBody,
1109
1250
  {
1110
1251
  center: { x: 0, y: 0, z: leadThickness / 2 },
@@ -1118,9 +1259,10 @@ var MSOP = ({
1118
1259
  )
1119
1260
  ] });
1120
1261
  };
1262
+ var MSOP = (props) => "leadSpan" in props ? createDualRowGullWing(props) : LegacyMSOP(props);
1121
1263
 
1122
1264
  // lib/qfp.tsx
1123
- import { Fragment as Fragment16, jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
1265
+ import { Fragment as Fragment17, jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
1124
1266
  var QFP = ({
1125
1267
  pinCount,
1126
1268
  pitch,
@@ -1144,8 +1286,8 @@ var QFP = ({
1144
1286
  const bodyDistance = leadReach;
1145
1287
  const fullPadContactLength = leadReach * 0.5;
1146
1288
  const curveLength = leadReach * 0.18;
1147
- return /* @__PURE__ */ jsxs18(Fragment16, { children: [
1148
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx20(
1289
+ return /* @__PURE__ */ jsxs19(Fragment17, { children: [
1290
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx21(
1149
1291
  SmdChipLead,
1150
1292
  {
1151
1293
  position: {
@@ -1162,7 +1304,7 @@ var QFP = ({
1162
1304
  },
1163
1305
  `left-${i}`
1164
1306
  )),
1165
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx20(
1307
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx21(
1166
1308
  SmdChipLead,
1167
1309
  {
1168
1310
  rotation: Math.PI,
@@ -1180,7 +1322,7 @@ var QFP = ({
1180
1322
  },
1181
1323
  `right-${i}`
1182
1324
  )),
1183
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx20(
1325
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx21(
1184
1326
  SmdChipLead,
1185
1327
  {
1186
1328
  rotation: Math.PI / 2,
@@ -1198,7 +1340,7 @@ var QFP = ({
1198
1340
  },
1199
1341
  `bottom-${i}`
1200
1342
  )),
1201
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx20(
1343
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx21(
1202
1344
  SmdChipLead,
1203
1345
  {
1204
1346
  rotation: -Math.PI / 2,
@@ -1216,7 +1358,7 @@ var QFP = ({
1216
1358
  },
1217
1359
  `top-${i}`
1218
1360
  )),
1219
- /* @__PURE__ */ jsx20(
1361
+ /* @__PURE__ */ jsx21(
1220
1362
  ChipBody,
1221
1363
  {
1222
1364
  center: { x: 0, y: 0, z: 0 },
@@ -1278,8 +1420,8 @@ var getLeadWidth = (pinCount, width10) => {
1278
1420
  };
1279
1421
 
1280
1422
  // lib/PinHeader.tsx
1281
- import { Colorize as Colorize7, Cuboid as Cuboid14, Hull as Hull4, Rotate as Rotate6, Translate as Translate8 } from "jscad-fiber";
1282
- import { Fragment as Fragment17, jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
1423
+ import { Colorize as Colorize8, Cuboid as Cuboid15, Hull as Hull5, Rotate as Rotate6, Translate as Translate9 } from "jscad-fiber";
1424
+ import { Fragment as Fragment18, jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
1283
1425
  var PIN_METAL_COLOR = "#c0c0c0";
1284
1426
  var PinHeader = ({
1285
1427
  x,
@@ -1294,16 +1436,16 @@ var PinHeader = ({
1294
1436
  smd,
1295
1437
  rightangle
1296
1438
  }) => {
1297
- return /* @__PURE__ */ jsxs19(Fragment17, { children: [
1298
- /* @__PURE__ */ jsx21(Translate8, { y: rightangle ? -3 : 0, children: /* @__PURE__ */ jsx21(
1299
- Cuboid14,
1439
+ return /* @__PURE__ */ jsxs20(Fragment18, { children: [
1440
+ /* @__PURE__ */ jsx22(Translate9, { y: rightangle ? -3 : 0, children: /* @__PURE__ */ jsx22(
1441
+ Cuboid15,
1300
1442
  {
1301
1443
  color: "#222",
1302
1444
  size: [bodyLength10, bodyWidth, bodyHeight],
1303
1445
  center: [x, y, flipZ(bodyHeight / 2)]
1304
1446
  }
1305
1447
  ) }),
1306
- /* @__PURE__ */ jsx21(Colorize7, { color: PIN_METAL_COLOR, children: smd ? /* @__PURE__ */ jsx21(
1448
+ /* @__PURE__ */ jsx22(Colorize8, { color: PIN_METAL_COLOR, children: smd ? /* @__PURE__ */ jsx22(
1307
1449
  SmdChipLead,
1308
1450
  {
1309
1451
  rotation: -Math.PI / 2,
@@ -1318,17 +1460,17 @@ var PinHeader = ({
1318
1460
  padContactLength: 2,
1319
1461
  bodyDistance: 3
1320
1462
  }
1321
- ) : /* @__PURE__ */ jsxs19(Hull4, { children: [
1322
- /* @__PURE__ */ jsx21(
1323
- Cuboid14,
1463
+ ) : /* @__PURE__ */ jsxs20(Hull5, { children: [
1464
+ /* @__PURE__ */ jsx22(
1465
+ Cuboid15,
1324
1466
  {
1325
1467
  color: PIN_METAL_COLOR,
1326
1468
  size: [pinThickness, pinThickness, shortSidePinLength * 0.9],
1327
1469
  center: [x, y, flipZ(bodyHeight * 0.9 + bodyHeight / 2)]
1328
1470
  }
1329
1471
  ),
1330
- /* @__PURE__ */ jsx21(
1331
- Cuboid14,
1472
+ /* @__PURE__ */ jsx22(
1473
+ Cuboid15,
1332
1474
  {
1333
1475
  color: PIN_METAL_COLOR,
1334
1476
  size: [
@@ -1340,17 +1482,17 @@ var PinHeader = ({
1340
1482
  }
1341
1483
  )
1342
1484
  ] }) }),
1343
- /* @__PURE__ */ jsx21(Colorize7, { color: PIN_METAL_COLOR, children: /* @__PURE__ */ jsx21(Translate8, { y: rightangle ? -3.9 : 0, z: rightangle ? 1 : 0, children: /* @__PURE__ */ jsx21(Rotate6, { rotation: rightangle ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: /* @__PURE__ */ jsxs19(Hull4, { children: [
1344
- /* @__PURE__ */ jsx21(
1345
- Cuboid14,
1485
+ /* @__PURE__ */ jsx22(Colorize8, { color: PIN_METAL_COLOR, children: /* @__PURE__ */ jsx22(Translate9, { y: rightangle ? -3.9 : 0, z: rightangle ? 1 : 0, children: /* @__PURE__ */ jsx22(Rotate6, { rotation: rightangle ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: /* @__PURE__ */ jsxs20(Hull5, { children: [
1486
+ /* @__PURE__ */ jsx22(
1487
+ Cuboid15,
1346
1488
  {
1347
1489
  color: PIN_METAL_COLOR,
1348
1490
  size: [pinThickness, pinThickness, longSidePinLength * 0.9],
1349
1491
  center: [x, y, flipZ(-longSidePinLength / 2 * 0.9)]
1350
1492
  }
1351
1493
  ),
1352
- /* @__PURE__ */ jsx21(
1353
- Cuboid14,
1494
+ /* @__PURE__ */ jsx22(
1495
+ Cuboid15,
1354
1496
  {
1355
1497
  color: PIN_METAL_COLOR,
1356
1498
  size: [
@@ -1366,7 +1508,7 @@ var PinHeader = ({
1366
1508
  };
1367
1509
 
1368
1510
  // lib/PinRow.tsx
1369
- import { Fragment as Fragment18, jsx as jsx22 } from "react/jsx-runtime";
1511
+ import { Fragment as Fragment19, jsx as jsx23 } from "react/jsx-runtime";
1370
1512
  var PinRow = ({
1371
1513
  numberOfPins,
1372
1514
  pitch = 2.54,
@@ -1385,12 +1527,12 @@ var PinRow = ({
1385
1527
  const throughHole = !smd && !rightangle;
1386
1528
  const flipped = throughHole ? !invert : Boolean(invert);
1387
1529
  const flipZ = (z) => flipped ? -z + bodyHeight : z;
1388
- return /* @__PURE__ */ jsx22(Fragment18, { children: Array.from({ length: numberOfPins }, (_, i) => {
1530
+ return /* @__PURE__ */ jsx23(Fragment19, { children: Array.from({ length: numberOfPins }, (_, i) => {
1389
1531
  const row = Math.floor(i / pinsPerRow);
1390
1532
  const col = i % pinsPerRow;
1391
1533
  const x = xoff + col * pitch;
1392
1534
  const y = ((rows - 1) / 2 - row) * rowSpacing;
1393
- return /* @__PURE__ */ jsx22(
1535
+ return /* @__PURE__ */ jsx23(
1394
1536
  PinHeader,
1395
1537
  {
1396
1538
  x,
@@ -1409,7 +1551,7 @@ var PinRow = ({
1409
1551
  };
1410
1552
 
1411
1553
  // lib/qfn.tsx
1412
- import { Cuboid as Cuboid15, Colorize as Colorize8 } from "jscad-fiber";
1554
+ import { Cuboid as Cuboid16, Colorize as Colorize9 } from "jscad-fiber";
1413
1555
 
1414
1556
  // lib/utils/getQuadCoords.ts
1415
1557
  var getQuadCoords = (params) => {
@@ -1499,7 +1641,7 @@ var getQuadPinMap = ({
1499
1641
  };
1500
1642
 
1501
1643
  // lib/qfn.tsx
1502
- import { Fragment as Fragment19, jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
1644
+ import { Fragment as Fragment20, jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
1503
1645
  var QFN = ({
1504
1646
  num_pins = 16,
1505
1647
  bodyWidth = 9,
@@ -1541,24 +1683,24 @@ var QFN = ({
1541
1683
  const pn = pin_map[i + 1];
1542
1684
  pinPositions.push({ pn, x, y, pw, pl });
1543
1685
  }
1544
- return /* @__PURE__ */ jsxs20(Fragment19, { children: [
1545
- /* @__PURE__ */ jsx23(Colorize8, { color: "grey", children: /* @__PURE__ */ jsx23(
1546
- Cuboid15,
1686
+ return /* @__PURE__ */ jsxs21(Fragment20, { children: [
1687
+ /* @__PURE__ */ jsx24(Colorize9, { color: "grey", children: /* @__PURE__ */ jsx24(
1688
+ Cuboid16,
1547
1689
  {
1548
1690
  center: [0, 0, bodyThickness / 2],
1549
1691
  size: [bodyWidth, bodyLength10, bodyThickness]
1550
1692
  }
1551
1693
  ) }),
1552
- pinPositions.map((p, i) => /* @__PURE__ */ jsx23(
1553
- Cuboid15,
1694
+ pinPositions.map((p, i) => /* @__PURE__ */ jsx24(
1695
+ Cuboid16,
1554
1696
  {
1555
1697
  center: [p.x, p.y, thermalPadThickness / 2],
1556
1698
  size: [p.pw, p.pl, thermalPadThickness]
1557
1699
  },
1558
1700
  i
1559
1701
  )),
1560
- thermalPadSize?.length !== void 0 && thermalPadSize?.width !== void 0 && /* @__PURE__ */ jsx23(
1561
- Cuboid15,
1702
+ thermalPadSize?.length !== void 0 && thermalPadSize?.width !== void 0 && /* @__PURE__ */ jsx24(
1703
+ Cuboid16,
1562
1704
  {
1563
1705
  center: [0, 0, thermalPadThickness / 2],
1564
1706
  size: [
@@ -1573,7 +1715,7 @@ var QFN = ({
1573
1715
  var qfn_default = QFN;
1574
1716
 
1575
1717
  // lib/SOT-235.tsx
1576
- import { Fragment as Fragment20, jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
1718
+ import { Fragment as Fragment21, jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
1577
1719
  var SOT235 = () => {
1578
1720
  const fullWidth = 2.8;
1579
1721
  const bodyWidth = 1.6;
@@ -1585,8 +1727,8 @@ var SOT235 = () => {
1585
1727
  const padContactLength = 0.5;
1586
1728
  const padPitch = 0.95;
1587
1729
  const extendedBodyDistance = fullWidth - bodyWidth;
1588
- return /* @__PURE__ */ jsxs21(Fragment20, { children: [
1589
- /* @__PURE__ */ jsx24(
1730
+ return /* @__PURE__ */ jsxs22(Fragment21, { children: [
1731
+ /* @__PURE__ */ jsx25(
1590
1732
  SmdChipLead,
1591
1733
  {
1592
1734
  rotation: Math.PI,
@@ -1603,7 +1745,7 @@ var SOT235 = () => {
1603
1745
  },
1604
1746
  1
1605
1747
  ),
1606
- /* @__PURE__ */ jsx24(
1748
+ /* @__PURE__ */ jsx25(
1607
1749
  SmdChipLead,
1608
1750
  {
1609
1751
  rotation: Math.PI,
@@ -1620,7 +1762,7 @@ var SOT235 = () => {
1620
1762
  },
1621
1763
  2
1622
1764
  ),
1623
- /* @__PURE__ */ jsx24(
1765
+ /* @__PURE__ */ jsx25(
1624
1766
  SmdChipLead,
1625
1767
  {
1626
1768
  position: {
@@ -1636,7 +1778,7 @@ var SOT235 = () => {
1636
1778
  },
1637
1779
  3
1638
1780
  ),
1639
- /* @__PURE__ */ jsx24(
1781
+ /* @__PURE__ */ jsx25(
1640
1782
  SmdChipLead,
1641
1783
  {
1642
1784
  position: {
@@ -1652,7 +1794,7 @@ var SOT235 = () => {
1652
1794
  },
1653
1795
  1
1654
1796
  ),
1655
- /* @__PURE__ */ jsx24(
1797
+ /* @__PURE__ */ jsx25(
1656
1798
  SmdChipLead,
1657
1799
  {
1658
1800
  position: {
@@ -1668,7 +1810,7 @@ var SOT235 = () => {
1668
1810
  },
1669
1811
  2
1670
1812
  ),
1671
- /* @__PURE__ */ jsx24(
1813
+ /* @__PURE__ */ jsx25(
1672
1814
  ChipBody,
1673
1815
  {
1674
1816
  center: { x: 0, y: 0, z: 0 },
@@ -1682,7 +1824,7 @@ var SOT235 = () => {
1682
1824
  var SOT_235_default = SOT235;
1683
1825
 
1684
1826
  // lib/SOT-23-3P.tsx
1685
- import { Fragment as Fragment21, jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
1827
+ import { Fragment as Fragment22, jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
1686
1828
  var SOT233P = ({
1687
1829
  fullWidth = 2.9,
1688
1830
  fullLength: fullLength10 = 2.8,
@@ -1697,8 +1839,8 @@ var SOT233P = ({
1697
1839
  const padContactLength = 0.4;
1698
1840
  const padThickness = leadThickness / 2;
1699
1841
  const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3;
1700
- return /* @__PURE__ */ jsxs22(Fragment21, { children: [
1701
- /* @__PURE__ */ jsx25(
1842
+ return /* @__PURE__ */ jsxs23(Fragment22, { children: [
1843
+ /* @__PURE__ */ jsx26(
1702
1844
  SmdChipLead,
1703
1845
  {
1704
1846
  position: {
@@ -1714,7 +1856,7 @@ var SOT233P = ({
1714
1856
  },
1715
1857
  1
1716
1858
  ),
1717
- /* @__PURE__ */ jsx25(
1859
+ /* @__PURE__ */ jsx26(
1718
1860
  SmdChipLead,
1719
1861
  {
1720
1862
  position: {
@@ -1730,7 +1872,7 @@ var SOT233P = ({
1730
1872
  },
1731
1873
  2
1732
1874
  ),
1733
- /* @__PURE__ */ jsx25(
1875
+ /* @__PURE__ */ jsx26(
1734
1876
  SmdChipLead,
1735
1877
  {
1736
1878
  rotation: Math.PI,
@@ -1747,7 +1889,7 @@ var SOT233P = ({
1747
1889
  },
1748
1890
  3
1749
1891
  ),
1750
- /* @__PURE__ */ jsx25(
1892
+ /* @__PURE__ */ jsx26(
1751
1893
  ChipBody,
1752
1894
  {
1753
1895
  center: { x: 0, y: 0, z: 0 },
@@ -1761,7 +1903,7 @@ var SOT233P = ({
1761
1903
  };
1762
1904
 
1763
1905
  // lib/SOT-23W.tsx
1764
- import { Fragment as Fragment22, jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
1906
+ import { Fragment as Fragment23, jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
1765
1907
  var SOT23W = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
1766
1908
  const bodyWidth = 1.92;
1767
1909
  const bodyLength10 = 2.9;
@@ -1772,8 +1914,8 @@ var SOT23W = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
1772
1914
  const padContactLength = 0.25;
1773
1915
  const padThickness = leadThickness / 2;
1774
1916
  const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3;
1775
- return /* @__PURE__ */ jsxs23(Fragment22, { children: [
1776
- /* @__PURE__ */ jsx26(
1917
+ return /* @__PURE__ */ jsxs24(Fragment23, { children: [
1918
+ /* @__PURE__ */ jsx27(
1777
1919
  SmdChipLead,
1778
1920
  {
1779
1921
  rotation: Math.PI,
@@ -1790,7 +1932,7 @@ var SOT23W = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
1790
1932
  },
1791
1933
  1
1792
1934
  ),
1793
- /* @__PURE__ */ jsx26(
1935
+ /* @__PURE__ */ jsx27(
1794
1936
  SmdChipLead,
1795
1937
  {
1796
1938
  position: {
@@ -1806,7 +1948,7 @@ var SOT23W = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
1806
1948
  },
1807
1949
  2
1808
1950
  ),
1809
- /* @__PURE__ */ jsx26(
1951
+ /* @__PURE__ */ jsx27(
1810
1952
  SmdChipLead,
1811
1953
  {
1812
1954
  position: {
@@ -1822,7 +1964,7 @@ var SOT23W = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
1822
1964
  },
1823
1965
  3
1824
1966
  ),
1825
- /* @__PURE__ */ jsx26(
1967
+ /* @__PURE__ */ jsx27(
1826
1968
  ChipBody,
1827
1969
  {
1828
1970
  center: { x: 0, y: 0, z: 0 },
@@ -1837,8 +1979,8 @@ var SOT23W = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
1837
1979
  };
1838
1980
 
1839
1981
  // lib/FemaleHeader.tsx
1840
- import { Colorize as Colorize9, Cuboid as Cuboid16, Hull as Hull5, Subtract as Subtract3 } from "jscad-fiber";
1841
- import { Fragment as Fragment23, jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
1982
+ import { Colorize as Colorize10, Cuboid as Cuboid17, Hull as Hull6, Subtract as Subtract4 } from "jscad-fiber";
1983
+ import { Fragment as Fragment24, jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
1842
1984
  var FemaleHeader = ({
1843
1985
  x,
1844
1986
  y,
@@ -1860,33 +2002,33 @@ var FemaleHeader = ({
1860
2002
  const socketCenterZ = flipZ(z + socketDepth / 2);
1861
2003
  const socketEntryBaseZ = z + bodyHeight - socketEntryHeight;
1862
2004
  const gapWidth = pinThickness * 1.6;
1863
- return /* @__PURE__ */ jsxs24(Fragment23, { children: [
1864
- /* @__PURE__ */ jsx27(Colorize9, { color: "#1a1a1a", children: /* @__PURE__ */ jsxs24(Subtract3, { children: [
1865
- /* @__PURE__ */ jsx27(
1866
- Cuboid16,
2005
+ return /* @__PURE__ */ jsxs25(Fragment24, { children: [
2006
+ /* @__PURE__ */ jsx28(Colorize10, { color: "#1a1a1a", children: /* @__PURE__ */ jsxs25(Subtract4, { children: [
2007
+ /* @__PURE__ */ jsx28(
2008
+ Cuboid17,
1867
2009
  {
1868
2010
  color: "#000",
1869
2011
  size: [bodyLength10, bodyWidth, bodyHeight],
1870
2012
  center: [x, y, flipZ(z + bodyHeight / 2)]
1871
2013
  }
1872
2014
  ),
1873
- /* @__PURE__ */ jsx27(
1874
- Cuboid16,
2015
+ /* @__PURE__ */ jsx28(
2016
+ Cuboid17,
1875
2017
  {
1876
2018
  size: [socketWidth, socketWidth, socketDepth],
1877
2019
  center: [x, y, socketCenterZ]
1878
2020
  }
1879
2021
  ),
1880
- /* @__PURE__ */ jsxs24(Hull5, { children: [
1881
- /* @__PURE__ */ jsx27(
1882
- Cuboid16,
2022
+ /* @__PURE__ */ jsxs25(Hull6, { children: [
2023
+ /* @__PURE__ */ jsx28(
2024
+ Cuboid17,
1883
2025
  {
1884
2026
  size: [socketWidth, socketWidth, 0.01],
1885
2027
  center: [x, y, flipZ(socketEntryBaseZ)]
1886
2028
  }
1887
2029
  ),
1888
- /* @__PURE__ */ jsx27(
1889
- Cuboid16,
2030
+ /* @__PURE__ */ jsx28(
2031
+ Cuboid17,
1890
2032
  {
1891
2033
  size: [socketEntryWidth, socketEntryWidth, 0.01],
1892
2034
  center: [x, y, flipZ(z + bodyHeight)]
@@ -1894,18 +2036,18 @@ var FemaleHeader = ({
1894
2036
  )
1895
2037
  ] })
1896
2038
  ] }) }),
1897
- /* @__PURE__ */ jsxs24(Colorize9, { color: "silver", children: [
1898
- /* @__PURE__ */ jsxs24(Hull5, { children: [
1899
- /* @__PURE__ */ jsx27(
1900
- Cuboid16,
2039
+ /* @__PURE__ */ jsxs25(Colorize10, { color: "silver", children: [
2040
+ /* @__PURE__ */ jsxs25(Hull6, { children: [
2041
+ /* @__PURE__ */ jsx28(
2042
+ Cuboid17,
1901
2043
  {
1902
2044
  color: "silver",
1903
2045
  size: [pinThickness, pinThickness, legsLength * 0.9],
1904
2046
  center: [x, y, flipZ(z + -legsLength / 2 * 0.9)]
1905
2047
  }
1906
2048
  ),
1907
- /* @__PURE__ */ jsx27(
1908
- Cuboid16,
2049
+ /* @__PURE__ */ jsx28(
2050
+ Cuboid17,
1909
2051
  {
1910
2052
  color: "silver",
1911
2053
  size: [pinThickness / 1.8, pinThickness / 1.8, legsLength],
@@ -1913,8 +2055,8 @@ var FemaleHeader = ({
1913
2055
  }
1914
2056
  )
1915
2057
  ] }),
1916
- /* @__PURE__ */ jsx27(
1917
- Cuboid16,
2058
+ /* @__PURE__ */ jsx28(
2059
+ Cuboid17,
1918
2060
  {
1919
2061
  color: "silver",
1920
2062
  size: [gapWidth, gapWidth, gapWidth * 0.5],
@@ -1926,7 +2068,7 @@ var FemaleHeader = ({
1926
2068
  };
1927
2069
 
1928
2070
  // lib/FemaleHeaderRow.tsx
1929
- import { Fragment as Fragment24, jsx as jsx28 } from "react/jsx-runtime";
2071
+ import { Fragment as Fragment25, jsx as jsx29 } from "react/jsx-runtime";
1930
2072
  var FemaleHeaderRow = ({
1931
2073
  numberOfPins,
1932
2074
  pitch = 2.54,
@@ -1940,12 +2082,12 @@ var FemaleHeaderRow = ({
1940
2082
  const rowSpacing = 2.54;
1941
2083
  const xoff = -((pinsPerRow - 1) / 2) * pitch;
1942
2084
  const flipZ = (z) => invert ? -z + bodyHeight : z;
1943
- return /* @__PURE__ */ jsx28(Fragment24, { children: Array.from({ length: numberOfPins }, (_, i) => {
2085
+ return /* @__PURE__ */ jsx29(Fragment25, { children: Array.from({ length: numberOfPins }, (_, i) => {
1944
2086
  const row = Math.floor(i / pinsPerRow);
1945
2087
  const col = i % pinsPerRow;
1946
2088
  const x = xoff + col * pitch;
1947
2089
  const y = ((rows - 1) / 2 - row) * rowSpacing;
1948
- return /* @__PURE__ */ jsx28(
2090
+ return /* @__PURE__ */ jsx29(
1949
2091
  FemaleHeader,
1950
2092
  {
1951
2093
  x,
@@ -1962,15 +2104,15 @@ var FemaleHeaderRow = ({
1962
2104
 
1963
2105
  // lib/PushButton.tsx
1964
2106
  import {
1965
- Colorize as Colorize10,
1966
- Cylinder as Cylinder5,
2107
+ Colorize as Colorize11,
2108
+ Cylinder as Cylinder6,
1967
2109
  ExtrudeLinear as ExtrudeLinear5,
1968
2110
  Polygon as Polygon5,
1969
2111
  Rotate as Rotate7,
1970
2112
  RoundedCuboid,
1971
- Translate as Translate9
2113
+ Translate as Translate10
1972
2114
  } from "jscad-fiber";
1973
- import { Fragment as Fragment25, jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
2115
+ import { Fragment as Fragment26, jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
1974
2116
  var PushButton = ({
1975
2117
  width: width10,
1976
2118
  length,
@@ -1980,8 +2122,8 @@ var PushButton = ({
1980
2122
  const bodyLength10 = length;
1981
2123
  const bodyHeight = width10 * 0.7;
1982
2124
  const legWidth = innerDiameter / 2.5;
1983
- return /* @__PURE__ */ jsxs25(Fragment25, { children: [
1984
- /* @__PURE__ */ jsx29(
2125
+ return /* @__PURE__ */ jsxs26(Fragment26, { children: [
2126
+ /* @__PURE__ */ jsx30(
1985
2127
  RoundedCuboid,
1986
2128
  {
1987
2129
  color: "#1a1a1f",
@@ -1990,7 +2132,7 @@ var PushButton = ({
1990
2132
  roundRadius: 0.3
1991
2133
  }
1992
2134
  ),
1993
- /* @__PURE__ */ jsx29(
2135
+ /* @__PURE__ */ jsx30(
1994
2136
  RoundedCuboid,
1995
2137
  {
1996
2138
  color: "#f2f2f2",
@@ -1999,8 +2141,8 @@ var PushButton = ({
1999
2141
  roundRadius: 0.14
2000
2142
  }
2001
2143
  ),
2002
- /* @__PURE__ */ jsx29(
2003
- Cylinder5,
2144
+ /* @__PURE__ */ jsx30(
2145
+ Cylinder6,
2004
2146
  {
2005
2147
  color: "#1a1a1f",
2006
2148
  height: bodyHeight * 0.8,
@@ -2008,8 +2150,8 @@ var PushButton = ({
2008
2150
  center: [0, 0, bodyHeight + bodyHeight * 0.8 / 2]
2009
2151
  }
2010
2152
  ),
2011
- /* @__PURE__ */ jsx29(
2012
- Cylinder5,
2153
+ /* @__PURE__ */ jsx30(
2154
+ Cylinder6,
2013
2155
  {
2014
2156
  color: "#1a1a1f",
2015
2157
  height: bodyHeight * 0.2,
@@ -2021,8 +2163,8 @@ var PushButton = ({
2021
2163
  ]
2022
2164
  }
2023
2165
  ),
2024
- /* @__PURE__ */ jsx29(
2025
- Cylinder5,
2166
+ /* @__PURE__ */ jsx30(
2167
+ Cylinder6,
2026
2168
  {
2027
2169
  color: "#1a1a1f",
2028
2170
  height: bodyHeight * 0.2,
@@ -2034,8 +2176,8 @@ var PushButton = ({
2034
2176
  ]
2035
2177
  }
2036
2178
  ),
2037
- /* @__PURE__ */ jsx29(
2038
- Cylinder5,
2179
+ /* @__PURE__ */ jsx30(
2180
+ Cylinder6,
2039
2181
  {
2040
2182
  color: "#1a1a1f",
2041
2183
  height: bodyHeight * 0.2,
@@ -2047,8 +2189,8 @@ var PushButton = ({
2047
2189
  ]
2048
2190
  }
2049
2191
  ),
2050
- /* @__PURE__ */ jsx29(
2051
- Cylinder5,
2192
+ /* @__PURE__ */ jsx30(
2193
+ Cylinder6,
2052
2194
  {
2053
2195
  color: "#1a1a1f",
2054
2196
  height: bodyHeight * 0.2,
@@ -2060,7 +2202,7 @@ var PushButton = ({
2060
2202
  ]
2061
2203
  }
2062
2204
  ),
2063
- /* @__PURE__ */ jsx29(
2205
+ /* @__PURE__ */ jsx30(
2064
2206
  PushButtonLeg,
2065
2207
  {
2066
2208
  thickness: innerDiameter / 3,
@@ -2074,7 +2216,7 @@ var PushButton = ({
2074
2216
  }
2075
2217
  }
2076
2218
  ),
2077
- /* @__PURE__ */ jsx29(
2219
+ /* @__PURE__ */ jsx30(
2078
2220
  PushButtonLeg,
2079
2221
  {
2080
2222
  thickness: innerDiameter / 3,
@@ -2089,7 +2231,7 @@ var PushButton = ({
2089
2231
  rotation: Math.PI
2090
2232
  }
2091
2233
  ),
2092
- /* @__PURE__ */ jsx29(
2234
+ /* @__PURE__ */ jsx30(
2093
2235
  PushButtonLeg,
2094
2236
  {
2095
2237
  thickness: innerDiameter / 3,
@@ -2100,7 +2242,7 @@ var PushButton = ({
2100
2242
  rotation: Math.PI
2101
2243
  }
2102
2244
  ),
2103
- /* @__PURE__ */ jsx29(
2245
+ /* @__PURE__ */ jsx30(
2104
2246
  PushButtonLeg,
2105
2247
  {
2106
2248
  thickness: innerDiameter / 3,
@@ -2132,160 +2274,19 @@ var PushButtonLeg = (props) => {
2132
2274
  [0, 0]
2133
2275
  ];
2134
2276
  const polygon = getExpandedStroke(points, thickness);
2135
- return /* @__PURE__ */ jsx29(Colorize10, { color: "#f2f2f2", children: /* @__PURE__ */ jsx29(
2136
- Translate9,
2277
+ return /* @__PURE__ */ jsx30(Colorize11, { color: "#f2f2f2", children: /* @__PURE__ */ jsx30(
2278
+ Translate10,
2137
2279
  {
2138
2280
  offset: {
2139
2281
  x: position?.x || 0,
2140
2282
  y: position?.y || 0,
2141
2283
  z: position?.z || 0
2142
2284
  },
2143
- children: /* @__PURE__ */ jsx29(Rotate7, { rotation: [0, 55, rotation], children: /* @__PURE__ */ jsx29(ExtrudeLinear5, { height: width10, children: /* @__PURE__ */ jsx29(Polygon5, { points: polygon.map((p) => [p.y, p.x]) }) }) })
2285
+ children: /* @__PURE__ */ jsx30(Rotate7, { rotation: [0, 55, rotation], children: /* @__PURE__ */ jsx30(ExtrudeLinear5, { height: width10, children: /* @__PURE__ */ jsx30(Polygon5, { points: polygon.map((p) => [p.y, p.x]) }) }) })
2144
2286
  }
2145
2287
  ) });
2146
2288
  };
2147
2289
 
2148
- // lib/utils/DualRowGullWing.tsx
2149
- import {
2150
- Colorize as Colorize11,
2151
- Cuboid as Cuboid18,
2152
- Cylinder as Cylinder6,
2153
- Hull as Hull6,
2154
- Subtract as Subtract4,
2155
- Translate as Translate10,
2156
- Union as Union4
2157
- } from "jscad-fiber";
2158
- import { Fragment as Fragment26, jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
2159
- function createDualRowGullWing(p) {
2160
- const {
2161
- pinCount,
2162
- pitch,
2163
- bodyWidth,
2164
- bodyLength: bodyLength10,
2165
- bodyHeight,
2166
- standoff,
2167
- leadSpan,
2168
- leadWidth,
2169
- leadThickness,
2170
- contactLength,
2171
- taperInset,
2172
- exposedPadWidth = 0,
2173
- exposedPadLength = 0
2174
- } = p;
2175
- for (const key of [
2176
- "pitch",
2177
- "bodyWidth",
2178
- "bodyLength",
2179
- "bodyHeight",
2180
- "leadSpan",
2181
- "leadWidth",
2182
- "leadThickness",
2183
- "contactLength"
2184
- ])
2185
- if (!Number.isFinite(p[key]) || p[key] <= 0)
2186
- throw new Error(`${key} must be finite and positive`);
2187
- for (const [name, value] of Object.entries({
2188
- standoff,
2189
- taperInset,
2190
- exposedPadWidth,
2191
- exposedPadLength
2192
- }))
2193
- if (!Number.isFinite(value) || value < 0)
2194
- throw new Error(`${name} must be finite and nonnegative`);
2195
- if (!Number.isInteger(pinCount) || pinCount < 4 || pinCount % 2)
2196
- throw new Error("pinCount must be even and at least 4");
2197
- const moldHeight = bodyHeight - standoff;
2198
- const reach = (leadSpan - bodyWidth) / 2;
2199
- const rowLength = (pinCount / 2 - 1) * pitch + leadWidth;
2200
- if (moldHeight <= leadThickness * 2 || leadWidth >= pitch || rowLength >= bodyLength10 - 2 * taperInset || taperInset * 2 >= Math.min(bodyWidth, bodyLength10) || contactLength >= reach)
2201
- throw new Error("Invalid mold, lead spacing, or terminal reach");
2202
- if (exposedPadWidth === 0 !== (exposedPadLength === 0) || exposedPadWidth >= bodyWidth - 2 * taperInset || exposedPadLength >= bodyLength10 - 2 * taperInset)
2203
- throw new Error("Exposed pad must fit inside the bottom mold face");
2204
- const midZ = standoff + moldHeight / 2;
2205
- const slice = Math.min(2e-3, moldHeight / 100);
2206
- const body = /* @__PURE__ */ jsxs26(Hull6, { children: [
2207
- /* @__PURE__ */ jsx30(Translate10, { z: standoff + slice / 2, children: /* @__PURE__ */ jsx30(
2208
- Cuboid18,
2209
- {
2210
- size: [
2211
- bodyWidth - 2 * taperInset,
2212
- bodyLength10 - 2 * taperInset,
2213
- slice
2214
- ]
2215
- }
2216
- ) }),
2217
- /* @__PURE__ */ jsx30(Translate10, { z: midZ, children: /* @__PURE__ */ jsx30(Cuboid18, { size: [bodyWidth, bodyLength10, slice] }) }),
2218
- /* @__PURE__ */ jsx30(Translate10, { z: bodyHeight - slice / 2, children: /* @__PURE__ */ jsx30(
2219
- Cuboid18,
2220
- {
2221
- size: [
2222
- bodyWidth - 2 * taperInset,
2223
- bodyLength10 - 2 * taperInset,
2224
- slice
2225
- ]
2226
- }
2227
- ) })
2228
- ] });
2229
- const dimpleRadius = Math.min(bodyWidth, bodyLength10) * 0.045;
2230
- const dimpleDepth = Math.min(0.04, moldHeight / 10);
2231
- const lead = (side, y) => {
2232
- const outer = leadSpan / 2;
2233
- const root = bodyWidth / 2 - Math.min(bodyWidth / 8, 0.15);
2234
- const bendStart = outer - contactLength;
2235
- const bendEnd = bodyWidth / 2 + Math.min(0.08, (reach - contactLength) / 4);
2236
- const points = [
2237
- [outer - slice / 2, leadThickness / 2],
2238
- [bendStart, leadThickness / 2]
2239
- ];
2240
- for (let i = 1; i <= 12; i++) {
2241
- const t = i / 12;
2242
- points.push([
2243
- bendStart + (bendEnd - bendStart) * t,
2244
- leadThickness / 2 + (midZ - leadThickness / 2) * t * t * (3 - 2 * t)
2245
- ]);
2246
- }
2247
- points.push([root, midZ]);
2248
- const section = ([x, z]) => /* @__PURE__ */ jsx30(Translate10, { offset: { x: side * x, y, z }, children: /* @__PURE__ */ jsx30(Cuboid18, { size: [slice, leadWidth, leadThickness] }) });
2249
- return /* @__PURE__ */ jsx30(Union4, { children: points.slice(1).map((point, i) => /* @__PURE__ */ jsxs26(Hull6, { children: [
2250
- section(points[i]),
2251
- section(point)
2252
- ] }, i)) });
2253
- };
2254
- return /* @__PURE__ */ jsxs26(Fragment26, { children: [
2255
- /* @__PURE__ */ jsx30(Colorize11, { color: "#353535", children: /* @__PURE__ */ jsxs26(Subtract4, { children: [
2256
- body,
2257
- /* @__PURE__ */ jsx30(
2258
- Translate10,
2259
- {
2260
- offset: {
2261
- x: -bodyWidth / 2 + taperInset + dimpleRadius * 2,
2262
- y: bodyLength10 / 2 - taperInset - dimpleRadius * 2,
2263
- z: bodyHeight
2264
- },
2265
- children: /* @__PURE__ */ jsx30(Cylinder6, { radius: dimpleRadius, height: dimpleDepth * 2 })
2266
- }
2267
- )
2268
- ] }) }),
2269
- /* @__PURE__ */ jsx30(Colorize11, { color: "#bfc1c4", children: Array.from(
2270
- { length: pinCount },
2271
- (_, i) => lead(
2272
- i < pinCount / 2 ? -1 : 1,
2273
- ((pinCount / 2 - 1) / 2 - i % (pinCount / 2)) * pitch
2274
- )
2275
- ) }),
2276
- exposedPadWidth > 0 && /* @__PURE__ */ jsx30(Colorize11, { color: "#bfc1c4", children: /* @__PURE__ */ jsx30(Translate10, { z: (standoff + leadThickness) / 2, children: /* @__PURE__ */ jsx30(
2277
- Cuboid18,
2278
- {
2279
- size: [
2280
- exposedPadWidth,
2281
- exposedPadLength,
2282
- standoff + leadThickness
2283
- ]
2284
- }
2285
- ) }) })
2286
- ] });
2287
- }
2288
-
2289
2290
  // lib/SOIC.tsx
2290
2291
  import { Fragment as Fragment27, jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
2291
2292
  var LegacySOIC = ({