jscad-electronics 0.0.150 → 0.0.151

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
@@ -758,7 +758,7 @@ var ExtrudedPads = ({
758
758
 
759
759
  // lib/Footprinter3d.tsx
760
760
  import { fp as fp5 } from "@tscircuit/footprinter";
761
- import { Rotate as Rotate17, Translate as Translate37 } from "jscad-fiber";
761
+ import { Rotate as Rotate18, Translate as Translate38 } from "jscad-fiber";
762
762
 
763
763
  // lib/DualInlinePackage.tsx
764
764
  import { Polygon as Polygon3, ExtrudeLinear as ExtrudeLinear3, Rotate as Rotate3, Translate as Translate6 } from "jscad-fiber";
@@ -5319,17 +5319,205 @@ var JSTZH1_5mm = ({
5319
5319
  ] });
5320
5320
  };
5321
5321
 
5322
- // lib/FPC.tsx
5322
+ // lib/JSTPH2_0mm.tsx
5323
5323
  import {
5324
5324
  Colorize as Colorize38,
5325
5325
  Cuboid as Cuboid46,
5326
5326
  Cylinder as Cylinder13,
5327
5327
  Rotate as Rotate13,
5328
- RoundedCuboid as RoundedCuboid3,
5329
5328
  Subtract as Subtract10,
5330
5329
  Translate as Translate31
5331
5330
  } from "jscad-fiber";
5332
5331
  import { Fragment as Fragment66, jsx as jsx71, jsxs as jsxs67 } from "react/jsx-runtime";
5332
+ var JSTPH2_0mm = ({
5333
+ numPins = 2,
5334
+ showPins = true,
5335
+ showFootprint = true,
5336
+ bodyColor = "#f5f5f5",
5337
+ pinColor = "#635959"
5338
+ }) => {
5339
+ const pitch = 2;
5340
+ const bodyHeight = 6;
5341
+ const bodyDepth = 4.5;
5342
+ const wallThickness = 0.5;
5343
+ const hollowHeight = bodyHeight * 0.6;
5344
+ const pinTailLength = 3.4;
5345
+ const pinTop = 5.5;
5346
+ const pinThickness = 0.5;
5347
+ const pinLength = pinTailLength + pinTop;
5348
+ const bodyWidth = (numPins - 1) * pitch + 3.9;
5349
+ const startX = -((numPins - 1) * pitch) / 2;
5350
+ const latchWindowWidth = 1;
5351
+ const latchWindowHeight = 1.8;
5352
+ const latchWindowInset = 0.7;
5353
+ const topReliefWidth = 0.8;
5354
+ const topReliefDepth = 0.65;
5355
+ return /* @__PURE__ */ jsxs67(Fragment66, { children: [
5356
+ /* @__PURE__ */ jsx71(Translate31, { offset: [0, 0, bodyHeight], children: /* @__PURE__ */ jsx71(Rotate13, { angles: [Math.PI, 0, 0], children: /* @__PURE__ */ jsx71(Colorize38, { color: bodyColor, children: /* @__PURE__ */ jsxs67(Subtract10, { children: [
5357
+ /* @__PURE__ */ jsx71(
5358
+ Cuboid46,
5359
+ {
5360
+ size: [bodyWidth, bodyDepth, bodyHeight],
5361
+ center: [0, 0, bodyHeight / 2]
5362
+ }
5363
+ ),
5364
+ /* @__PURE__ */ jsx71(
5365
+ Cuboid46,
5366
+ {
5367
+ size: [
5368
+ bodyWidth - wallThickness * 2,
5369
+ bodyDepth - wallThickness * 2,
5370
+ hollowHeight
5371
+ ],
5372
+ center: [0, 0, hollowHeight / 2]
5373
+ }
5374
+ ),
5375
+ /* @__PURE__ */ jsx71(
5376
+ Cuboid46,
5377
+ {
5378
+ size: [bodyWidth, bodyDepth / 3, hollowHeight],
5379
+ center: [0, 0, hollowHeight / 6]
5380
+ }
5381
+ ),
5382
+ /* @__PURE__ */ jsx71(
5383
+ Cuboid46,
5384
+ {
5385
+ size: [
5386
+ bodyWidth - wallThickness * 2,
5387
+ wallThickness / 2,
5388
+ hollowHeight
5389
+ ],
5390
+ center: [
5391
+ 0,
5392
+ bodyDepth / 2 - wallThickness / 4,
5393
+ hollowHeight / 2
5394
+ ]
5395
+ }
5396
+ ),
5397
+ /* @__PURE__ */ jsx71(
5398
+ Cuboid46,
5399
+ {
5400
+ size: [
5401
+ bodyWidth - wallThickness * 2,
5402
+ wallThickness / 2,
5403
+ hollowHeight
5404
+ ],
5405
+ center: [
5406
+ 0,
5407
+ -bodyDepth / 2 + wallThickness / 4,
5408
+ hollowHeight / 2
5409
+ ]
5410
+ }
5411
+ ),
5412
+ /* @__PURE__ */ jsx71(
5413
+ Cuboid46,
5414
+ {
5415
+ size: [
5416
+ latchWindowWidth,
5417
+ bodyDepth + wallThickness,
5418
+ latchWindowHeight
5419
+ ],
5420
+ center: [-bodyWidth / 2 + latchWindowInset, 0, bodyHeight / 2]
5421
+ }
5422
+ ),
5423
+ /* @__PURE__ */ jsx71(
5424
+ Cuboid46,
5425
+ {
5426
+ size: [
5427
+ latchWindowWidth,
5428
+ bodyDepth + wallThickness,
5429
+ latchWindowHeight
5430
+ ],
5431
+ center: [bodyWidth / 2 - latchWindowInset, 0, bodyHeight / 2]
5432
+ }
5433
+ ),
5434
+ /* @__PURE__ */ jsx71(
5435
+ Cuboid46,
5436
+ {
5437
+ size: [wallThickness * 3, topReliefWidth, topReliefDepth],
5438
+ center: [-bodyWidth / 2, 0, topReliefDepth / 2]
5439
+ }
5440
+ ),
5441
+ /* @__PURE__ */ jsx71(Translate31, { offset: [-bodyWidth / 2, 0, topReliefDepth], children: /* @__PURE__ */ jsx71(Rotate13, { angles: [0, Math.PI / 2, 0], children: /* @__PURE__ */ jsx71(
5442
+ Cylinder13,
5443
+ {
5444
+ height: wallThickness * 3,
5445
+ radius: topReliefWidth / 2
5446
+ }
5447
+ ) }) }),
5448
+ /* @__PURE__ */ jsx71(
5449
+ Cuboid46,
5450
+ {
5451
+ size: [wallThickness * 3, topReliefWidth, topReliefDepth],
5452
+ center: [bodyWidth / 2, 0, topReliefDepth / 2]
5453
+ }
5454
+ ),
5455
+ /* @__PURE__ */ jsx71(Translate31, { offset: [bodyWidth / 2, 0, topReliefDepth], children: /* @__PURE__ */ jsx71(Rotate13, { angles: [0, Math.PI / 2, 0], children: /* @__PURE__ */ jsx71(
5456
+ Cylinder13,
5457
+ {
5458
+ height: wallThickness * 3,
5459
+ radius: topReliefWidth / 2
5460
+ }
5461
+ ) }) })
5462
+ ] }) }) }) }),
5463
+ showPins && Array.from({ length: numPins }).map((_, i) => /* @__PURE__ */ jsx71(Colorize38, { color: pinColor, children: /* @__PURE__ */ jsx71(
5464
+ Cuboid46,
5465
+ {
5466
+ size: [pinThickness, pinThickness, pinLength],
5467
+ center: [startX + i * pitch, 0, (pinTop - pinTailLength) / 2]
5468
+ }
5469
+ ) }, i)),
5470
+ showFootprint && Array.from({ length: numPins }).map((_, i) => {
5471
+ const isPin1 = i === 0;
5472
+ const hole = isPin1 ? {
5473
+ type: "pcb_plated_hole",
5474
+ pcb_plated_hole_id: `jstph_${i}`,
5475
+ shape: "circular_hole_with_rect_pad",
5476
+ x: startX + i * pitch,
5477
+ y: 0,
5478
+ hole_diameter: 0.73,
5479
+ rect_pad_width: 1.2,
5480
+ rect_pad_height: 1.2,
5481
+ hole_shape: "circle",
5482
+ pad_shape: "rect",
5483
+ layers: ["top", "bottom"],
5484
+ port_hints: [`${i + 1}`]
5485
+ } : {
5486
+ type: "pcb_plated_hole",
5487
+ pcb_plated_hole_id: `jstph_${i}`,
5488
+ shape: "pill",
5489
+ x: startX + i * pitch,
5490
+ y: 0,
5491
+ hole_height: 0.73,
5492
+ hole_width: 0.73,
5493
+ outer_height: 1.2,
5494
+ outer_width: 1.2,
5495
+ layers: ["top", "bottom"],
5496
+ port_hints: [`${i + 1}`]
5497
+ };
5498
+ return /* @__PURE__ */ jsx71(
5499
+ FootprintPlatedHole,
5500
+ {
5501
+ hole,
5502
+ isPin1
5503
+ },
5504
+ `footprint_${i}`
5505
+ );
5506
+ })
5507
+ ] });
5508
+ };
5509
+
5510
+ // lib/FPC.tsx
5511
+ import {
5512
+ Colorize as Colorize39,
5513
+ Cuboid as Cuboid47,
5514
+ Cylinder as Cylinder14,
5515
+ Rotate as Rotate14,
5516
+ RoundedCuboid as RoundedCuboid3,
5517
+ Subtract as Subtract11,
5518
+ Translate as Translate32
5519
+ } from "jscad-fiber";
5520
+ import { Fragment as Fragment67, jsx as jsx72, jsxs as jsxs68 } from "react/jsx-runtime";
5333
5521
  var HOUSING_COLOR = "#303339";
5334
5522
  var HOUSING_SHADOW = "#1f2227";
5335
5523
  var ACTUATOR_COLOR = "#eee8d8";
@@ -5416,9 +5604,9 @@ var FPC = ({
5416
5604
  const clipCapX = bodyWidth / 2 - 0.23;
5417
5605
  const sideBossX = bodyWidth / 2 - 0.32;
5418
5606
  const sideBossWidth = 0.68;
5419
- return /* @__PURE__ */ jsxs67(Fragment66, { children: [
5420
- [-1, 1].map((direction) => /* @__PURE__ */ jsx71(
5421
- Cuboid46,
5607
+ return /* @__PURE__ */ jsxs68(Fragment67, { children: [
5608
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx72(
5609
+ Cuboid47,
5422
5610
  {
5423
5611
  color: TIN_COLOR,
5424
5612
  center: [direction * endClipX, mountY, 0.07],
@@ -5426,8 +5614,8 @@ var FPC = ({
5426
5614
  },
5427
5615
  `mount-pad:${direction}`
5428
5616
  )),
5429
- contactRows.map((contact) => /* @__PURE__ */ jsx71(
5430
- Cuboid46,
5617
+ contactRows.map((contact) => /* @__PURE__ */ jsx72(
5618
+ Cuboid47,
5431
5619
  {
5432
5620
  color: TIN_COLOR,
5433
5621
  center: [contact.x, terminalCenterY, 0.065],
@@ -5435,7 +5623,7 @@ var FPC = ({
5435
5623
  },
5436
5624
  `terminal:${contact.index}`
5437
5625
  )),
5438
- /* @__PURE__ */ jsx71(
5626
+ /* @__PURE__ */ jsx72(
5439
5627
  RoundedCuboid3,
5440
5628
  {
5441
5629
  color: HOUSING_SHADOW,
@@ -5444,8 +5632,8 @@ var FPC = ({
5444
5632
  roundRadius: 0.1
5445
5633
  }
5446
5634
  ),
5447
- /* @__PURE__ */ jsx71(Colorize38, { color: HOUSING_COLOR, children: /* @__PURE__ */ jsxs67(Subtract10, { children: [
5448
- /* @__PURE__ */ jsx71(
5635
+ /* @__PURE__ */ jsx72(Colorize39, { color: HOUSING_COLOR, children: /* @__PURE__ */ jsxs68(Subtract11, { children: [
5636
+ /* @__PURE__ */ jsx72(
5449
5637
  RoundedCuboid3,
5450
5638
  {
5451
5639
  center: [0, housingCenterY, housingBaseHeight + housingHeight / 2],
@@ -5453,22 +5641,22 @@ var FPC = ({
5453
5641
  roundRadius: 0.14
5454
5642
  }
5455
5643
  ),
5456
- /* @__PURE__ */ jsx71(
5457
- Cuboid46,
5644
+ /* @__PURE__ */ jsx72(
5645
+ Cuboid47,
5458
5646
  {
5459
5647
  center: [0, throatCenterY, throatCenterZ],
5460
5648
  size: [openingWidth, throatDepth, throatHeight]
5461
5649
  }
5462
5650
  ),
5463
- /* @__PURE__ */ jsx71(
5464
- Cuboid46,
5651
+ /* @__PURE__ */ jsx72(
5652
+ Cuboid47,
5465
5653
  {
5466
5654
  center: [0, actuatorCenterY, overallHeight - actuatorHeight * 0.72],
5467
5655
  size: [actuatorWidth - 0.32, actuatorDepth - 0.16, actuatorHeight]
5468
5656
  }
5469
5657
  )
5470
5658
  ] }) }),
5471
- contactRows.map((contact) => /* @__PURE__ */ jsx71(
5659
+ contactRows.map((contact) => /* @__PURE__ */ jsx72(
5472
5660
  RoundedCuboid3,
5473
5661
  {
5474
5662
  color: TIN_HIGHLIGHT,
@@ -5478,8 +5666,8 @@ var FPC = ({
5478
5666
  },
5479
5667
  `spring:${contact.index}`
5480
5668
  )),
5481
- contactRows.map((contact) => /* @__PURE__ */ jsx71(
5482
- Cuboid46,
5669
+ contactRows.map((contact) => /* @__PURE__ */ jsx72(
5670
+ Cuboid47,
5483
5671
  {
5484
5672
  color: TIN_COLOR,
5485
5673
  center: [
@@ -5491,8 +5679,8 @@ var FPC = ({
5491
5679
  },
5492
5680
  `terminal-rise:${contact.index}`
5493
5681
  )),
5494
- /* @__PURE__ */ jsx71(
5495
- Cuboid46,
5682
+ /* @__PURE__ */ jsx72(
5683
+ Cuboid47,
5496
5684
  {
5497
5685
  color: HOUSING_SHADOW,
5498
5686
  center: [
@@ -5503,7 +5691,7 @@ var FPC = ({
5503
5691
  size: [openingWidth + 0.18, 0.16, 0.8]
5504
5692
  }
5505
5693
  ),
5506
- /* @__PURE__ */ jsx71(
5694
+ /* @__PURE__ */ jsx72(
5507
5695
  RoundedCuboid3,
5508
5696
  {
5509
5697
  color: ACTUATOR_COLOR,
@@ -5512,8 +5700,8 @@ var FPC = ({
5512
5700
  roundRadius: 0.11
5513
5701
  }
5514
5702
  ),
5515
- /* @__PURE__ */ jsx71(
5516
- Cuboid46,
5703
+ /* @__PURE__ */ jsx72(
5704
+ Cuboid47,
5517
5705
  {
5518
5706
  color: ACTUATOR_HIGHLIGHT,
5519
5707
  center: [
@@ -5524,7 +5712,7 @@ var FPC = ({
5524
5712
  size: [actuatorWidth - 0.36, 0.24, 0.07]
5525
5713
  }
5526
5714
  ),
5527
- [-1, 1].map((direction) => /* @__PURE__ */ jsx71(
5715
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx72(
5528
5716
  RoundedCuboid3,
5529
5717
  {
5530
5718
  color: ACTUATOR_COLOR,
@@ -5534,14 +5722,14 @@ var FPC = ({
5534
5722
  },
5535
5723
  `actuator-ear:${direction}`
5536
5724
  )),
5537
- [-1, 1].map((direction) => /* @__PURE__ */ jsx71(
5538
- Translate31,
5725
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx72(
5726
+ Translate32,
5539
5727
  {
5540
5728
  x: direction * sideBossX,
5541
5729
  y: hingeY,
5542
5730
  z: hingeZ,
5543
- children: /* @__PURE__ */ jsx71(Rotate13, { rotation: [0, Math.PI / 2, 0], children: /* @__PURE__ */ jsx71(
5544
- Cylinder13,
5731
+ children: /* @__PURE__ */ jsx72(Rotate14, { rotation: [0, Math.PI / 2, 0], children: /* @__PURE__ */ jsx72(
5732
+ Cylinder14,
5545
5733
  {
5546
5734
  color: ACTUATOR_HIGHLIGHT,
5547
5735
  height: sideBossWidth + 0.12,
@@ -5551,7 +5739,7 @@ var FPC = ({
5551
5739
  },
5552
5740
  `hinge:${direction}`
5553
5741
  )),
5554
- [-1, 1].map((direction) => /* @__PURE__ */ jsx71(
5742
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx72(
5555
5743
  RoundedCuboid3,
5556
5744
  {
5557
5745
  color: HOLD_DOWN_COLOR,
@@ -5561,7 +5749,7 @@ var FPC = ({
5561
5749
  },
5562
5750
  `hold-down-wall:${direction}`
5563
5751
  )),
5564
- [-1, 1].map((direction) => /* @__PURE__ */ jsx71(
5752
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx72(
5565
5753
  RoundedCuboid3,
5566
5754
  {
5567
5755
  color: HOLD_DOWN_HIGHLIGHT,
@@ -5571,16 +5759,16 @@ var FPC = ({
5571
5759
  },
5572
5760
  `hold-down-cap:${direction}`
5573
5761
  )),
5574
- /* @__PURE__ */ jsx71(
5575
- Cuboid46,
5762
+ /* @__PURE__ */ jsx72(
5763
+ Cuboid47,
5576
5764
  {
5577
5765
  color: HOUSING_SHADOW,
5578
5766
  center: [0, housingCenterY, 0.025],
5579
5767
  size: [openingWidth + 0.7, housingDepth * 0.58, 0.05]
5580
5768
  }
5581
5769
  ),
5582
- /* @__PURE__ */ jsx71(
5583
- Cuboid46,
5770
+ /* @__PURE__ */ jsx72(
5771
+ Cuboid47,
5584
5772
  {
5585
5773
  color: HOUSING_SHADOW,
5586
5774
  center: [
@@ -5595,8 +5783,8 @@ var FPC = ({
5595
5783
  };
5596
5784
 
5597
5785
  // lib/SmdPinHeader.tsx
5598
- import { Colorize as Colorize39, Cuboid as Cuboid47, Hull as Hull24, Translate as Translate32 } from "jscad-fiber";
5599
- import { Fragment as Fragment67, jsx as jsx72, jsxs as jsxs68 } from "react/jsx-runtime";
5786
+ import { Colorize as Colorize40, Cuboid as Cuboid48, Hull as Hull24, Translate as Translate33 } from "jscad-fiber";
5787
+ import { Fragment as Fragment68, jsx as jsx73, jsxs as jsxs69 } from "react/jsx-runtime";
5600
5788
  var SmdPinHeader = ({
5601
5789
  numberOfPins,
5602
5790
  pitch = 2.54,
@@ -5611,52 +5799,52 @@ var SmdPinHeader = ({
5611
5799
  const bodyTop = standoffHeight + bodyHeight;
5612
5800
  const tailLength = tailSpan / 2;
5613
5801
  const tipChamferHeight = pinThickness * 0.35;
5614
- return /* @__PURE__ */ jsx72(Fragment67, { children: Array.from({ length: numberOfPins }, (_, index) => {
5802
+ return /* @__PURE__ */ jsx73(Fragment68, { children: Array.from({ length: numberOfPins }, (_, index) => {
5615
5803
  const x = xStart + index * pitch;
5616
5804
  const tailDirection = index % 2 === 0 ? 1 : -1;
5617
5805
  const postBodyLength = matingPinLength - tipChamferHeight;
5618
5806
  const verticalTailLength = standoffHeight - pinThickness / 2;
5619
- return /* @__PURE__ */ jsxs68(Translate32, { x, children: [
5620
- /* @__PURE__ */ jsx72(
5621
- Cuboid47,
5807
+ return /* @__PURE__ */ jsxs69(Translate33, { x, children: [
5808
+ /* @__PURE__ */ jsx73(
5809
+ Cuboid48,
5622
5810
  {
5623
5811
  color: "#222",
5624
5812
  size: [pitch, bodyWidth, bodyHeight],
5625
5813
  center: [0, 0, standoffHeight + bodyHeight / 2]
5626
5814
  }
5627
5815
  ),
5628
- /* @__PURE__ */ jsxs68(Colorize39, { color: "#d4af37", children: [
5629
- /* @__PURE__ */ jsx72(
5630
- Cuboid47,
5816
+ /* @__PURE__ */ jsxs69(Colorize40, { color: "#d4af37", children: [
5817
+ /* @__PURE__ */ jsx73(
5818
+ Cuboid48,
5631
5819
  {
5632
5820
  size: [pinThickness, tailLength, pinThickness],
5633
5821
  center: [0, tailDirection * (tailLength / 2), pinThickness / 2]
5634
5822
  }
5635
5823
  ),
5636
- /* @__PURE__ */ jsx72(
5637
- Cuboid47,
5824
+ /* @__PURE__ */ jsx73(
5825
+ Cuboid48,
5638
5826
  {
5639
5827
  size: [pinThickness, pinThickness, verticalTailLength],
5640
5828
  center: [0, 0, pinThickness / 2 + verticalTailLength / 2]
5641
5829
  }
5642
5830
  ),
5643
- /* @__PURE__ */ jsx72(
5644
- Cuboid47,
5831
+ /* @__PURE__ */ jsx73(
5832
+ Cuboid48,
5645
5833
  {
5646
5834
  size: [pinThickness, pinThickness, postBodyLength],
5647
5835
  center: [0, 0, bodyTop + postBodyLength / 2]
5648
5836
  }
5649
5837
  ),
5650
- /* @__PURE__ */ jsxs68(Hull24, { children: [
5651
- /* @__PURE__ */ jsx72(
5652
- Cuboid47,
5838
+ /* @__PURE__ */ jsxs69(Hull24, { children: [
5839
+ /* @__PURE__ */ jsx73(
5840
+ Cuboid48,
5653
5841
  {
5654
5842
  size: [pinThickness, pinThickness, 0.01],
5655
5843
  center: [0, 0, bodyTop + postBodyLength]
5656
5844
  }
5657
5845
  ),
5658
- /* @__PURE__ */ jsx72(
5659
- Cuboid47,
5846
+ /* @__PURE__ */ jsx73(
5847
+ Cuboid48,
5660
5848
  {
5661
5849
  size: [pinThickness * 0.65, pinThickness * 0.65, 0.01],
5662
5850
  center: [0, 0, bodyTop + matingPinLength]
@@ -5700,7 +5888,7 @@ var getSmtPadRects = (footprint) => {
5700
5888
  };
5701
5889
 
5702
5890
  // lib/GullWingBody.tsx
5703
- import { Fragment as Fragment68, jsx as jsx73, jsxs as jsxs69 } from "react/jsx-runtime";
5891
+ import { Fragment as Fragment69, jsx as jsx74, jsxs as jsxs70 } from "react/jsx-runtime";
5704
5892
  var GullWingBody = ({
5705
5893
  bodyWidth,
5706
5894
  bodyLength: bodyLength10,
@@ -5712,8 +5900,8 @@ var GullWingBody = ({
5712
5900
  const centerX = pads.reduce((sum, pad) => sum + pad.x, 0) / (pads.length || 1);
5713
5901
  const centerY = pads.reduce((sum, pad) => sum + pad.y, 0) / (pads.length || 1);
5714
5902
  const leadHeight = bodyHeight * leadHeightRatio;
5715
- return /* @__PURE__ */ jsxs69(Fragment68, { children: [
5716
- /* @__PURE__ */ jsx73(
5903
+ return /* @__PURE__ */ jsxs70(Fragment69, { children: [
5904
+ /* @__PURE__ */ jsx74(
5717
5905
  ChipBody,
5718
5906
  {
5719
5907
  center: { x: centerX, y: centerY, z: 0 },
@@ -5729,7 +5917,7 @@ var GullWingBody = ({
5729
5917
  const outerX = pad.x + side * padWidth / 2;
5730
5918
  const run = Math.max(Math.abs(outerX - centerX) - bodyWidth / 2, 0.1);
5731
5919
  const overlap = Math.min(0.15, bodyWidth * 0.15);
5732
- return /* @__PURE__ */ jsx73(
5920
+ return /* @__PURE__ */ jsx74(
5733
5921
  SmdChipLead,
5734
5922
  {
5735
5923
  rotation: side > 0 ? Math.PI : 0,
@@ -5751,8 +5939,8 @@ var GullWingBody = ({
5751
5939
  };
5752
5940
 
5753
5941
  // lib/ParametricChip.tsx
5754
- import { Cuboid as Cuboid48 } from "jscad-fiber";
5755
- import { Fragment as Fragment69, jsx as jsx74, jsxs as jsxs70 } from "react/jsx-runtime";
5942
+ import { Cuboid as Cuboid49 } from "jscad-fiber";
5943
+ import { Fragment as Fragment70, jsx as jsx75, jsxs as jsxs71 } from "react/jsx-runtime";
5756
5944
  var ParametricChip = ({
5757
5945
  padPitch,
5758
5946
  padHeight,
@@ -5763,25 +5951,25 @@ var ParametricChip = ({
5763
5951
  const height10 = width10;
5764
5952
  const terminatorWidth9 = fullLength10 * 0.2;
5765
5953
  const bodyLength10 = fullLength10 - terminatorWidth9 * 2;
5766
- return /* @__PURE__ */ jsxs70(Fragment69, { children: [
5767
- /* @__PURE__ */ jsx74(
5768
- Cuboid48,
5954
+ return /* @__PURE__ */ jsxs71(Fragment70, { children: [
5955
+ /* @__PURE__ */ jsx75(
5956
+ Cuboid49,
5769
5957
  {
5770
5958
  size: [bodyLength10, width10, height10],
5771
5959
  offset: [0, 0, height10 / 2],
5772
5960
  color
5773
5961
  }
5774
5962
  ),
5775
- /* @__PURE__ */ jsx74(
5776
- Cuboid48,
5963
+ /* @__PURE__ */ jsx75(
5964
+ Cuboid49,
5777
5965
  {
5778
5966
  size: [terminatorWidth9, height10, width10],
5779
5967
  offset: [fullLength10 / 2 - terminatorWidth9 / 2, 0, height10 / 2],
5780
5968
  color: "#ccc"
5781
5969
  }
5782
5970
  ),
5783
- /* @__PURE__ */ jsx74(
5784
- Cuboid48,
5971
+ /* @__PURE__ */ jsx75(
5972
+ Cuboid49,
5785
5973
  {
5786
5974
  size: [terminatorWidth9, height10, width10],
5787
5975
  offset: [-fullLength10 / 2 + terminatorWidth9 / 2, 0, height10 / 2],
@@ -5793,14 +5981,14 @@ var ParametricChip = ({
5793
5981
 
5794
5982
  // lib/Led5050.tsx
5795
5983
  import {
5796
- Colorize as Colorize40,
5797
- Cuboid as Cuboid49,
5798
- Cylinder as Cylinder14,
5799
- Rotate as Rotate14,
5800
- Subtract as Subtract11,
5801
- Translate as Translate33
5984
+ Colorize as Colorize41,
5985
+ Cuboid as Cuboid50,
5986
+ Cylinder as Cylinder15,
5987
+ Rotate as Rotate15,
5988
+ Subtract as Subtract12,
5989
+ Translate as Translate34
5802
5990
  } from "jscad-fiber";
5803
- import { Fragment as Fragment70, jsx as jsx75, jsxs as jsxs71 } from "react/jsx-runtime";
5991
+ import { Fragment as Fragment71, jsx as jsx76, jsxs as jsxs72 } from "react/jsx-runtime";
5804
5992
  var Led5050 = ({
5805
5993
  color = "#ffff00",
5806
5994
  bodyColor = "#ffffff",
@@ -5821,10 +6009,10 @@ var Led5050 = ({
5821
6009
  const cornerCutDepth = 0.3;
5822
6010
  const leadYPositions = [-1.7, 0, 1.7];
5823
6011
  const leadSides = [-1, 1];
5824
- return /* @__PURE__ */ jsxs71(Fragment70, { children: [
6012
+ return /* @__PURE__ */ jsxs72(Fragment71, { children: [
5825
6013
  leadYPositions.flatMap(
5826
- (y) => leadSides.map((side) => /* @__PURE__ */ jsx75(
5827
- Cuboid49,
6014
+ (y) => leadSides.map((side) => /* @__PURE__ */ jsx76(
6015
+ Cuboid50,
5828
6016
  {
5829
6017
  color: leadColor,
5830
6018
  size: [leadLength, leadWidth, leadThickness],
@@ -5833,8 +6021,8 @@ var Led5050 = ({
5833
6021
  `${side}-${y}`
5834
6022
  ))
5835
6023
  ),
5836
- /* @__PURE__ */ jsx75(Colorize40, { color: bodyColor, children: /* @__PURE__ */ jsxs71(Subtract11, { children: [
5837
- /* @__PURE__ */ jsx75(
6024
+ /* @__PURE__ */ jsx76(Colorize41, { color: bodyColor, children: /* @__PURE__ */ jsxs72(Subtract12, { children: [
6025
+ /* @__PURE__ */ jsx76(
5838
6026
  ChipBody,
5839
6027
  {
5840
6028
  width: bodySize,
@@ -5848,28 +6036,28 @@ var Led5050 = ({
5848
6036
  includeNotch: false
5849
6037
  }
5850
6038
  ),
5851
- /* @__PURE__ */ jsx75(
5852
- Cylinder14,
6039
+ /* @__PURE__ */ jsx76(
6040
+ Cylinder15,
5853
6041
  {
5854
6042
  radius: lensRadius,
5855
6043
  height: lensHeight,
5856
6044
  center: [0, 0, bodyTop - lensHeight / 2]
5857
6045
  }
5858
6046
  ),
5859
- /* @__PURE__ */ jsx75(
5860
- Translate33,
6047
+ /* @__PURE__ */ jsx76(
6048
+ Translate34,
5861
6049
  {
5862
6050
  offset: [
5863
6051
  -bodySize / 2,
5864
6052
  bodySize / 2,
5865
6053
  bodyTop - cornerCutDepth / 2 + 5e-3
5866
6054
  ],
5867
- children: /* @__PURE__ */ jsx75(Rotate14, { rotation: [0, 0, Math.PI / 4], children: /* @__PURE__ */ jsx75(Cuboid49, { size: [0.9, 0.9, cornerCutDepth + 0.01] }) })
6055
+ children: /* @__PURE__ */ jsx76(Rotate15, { rotation: [0, 0, Math.PI / 4], children: /* @__PURE__ */ jsx76(Cuboid50, { size: [0.9, 0.9, cornerCutDepth + 0.01] }) })
5868
6056
  }
5869
6057
  )
5870
6058
  ] }) }),
5871
- /* @__PURE__ */ jsx75(
5872
- Cylinder14,
6059
+ /* @__PURE__ */ jsx76(
6060
+ Cylinder15,
5873
6061
  {
5874
6062
  color,
5875
6063
  radius: lensRadius,
@@ -5881,8 +6069,8 @@ var Led5050 = ({
5881
6069
  };
5882
6070
 
5883
6071
  // lib/Led2835.tsx
5884
- import { Colorize as Colorize41, Cuboid as Cuboid50 } from "jscad-fiber";
5885
- import { Fragment as Fragment71, jsx as jsx76, jsxs as jsxs72 } from "react/jsx-runtime";
6072
+ import { Colorize as Colorize42, Cuboid as Cuboid51 } from "jscad-fiber";
6073
+ import { Fragment as Fragment72, jsx as jsx77, jsxs as jsxs73 } from "react/jsx-runtime";
5886
6074
  var Led2835 = ({
5887
6075
  bodyWidth = 3.5,
5888
6076
  bodyLength: bodyLength10 = 2.8,
@@ -5901,26 +6089,26 @@ var Led2835 = ({
5901
6089
  const bodyCenterX = (pad1X + pad2X) / 2;
5902
6090
  const lensWidth = bodyWidth * 0.55;
5903
6091
  const lensLength = bodyLength10 * 0.55;
5904
- return /* @__PURE__ */ jsxs72(Fragment71, { children: [
6092
+ return /* @__PURE__ */ jsxs73(Fragment72, { children: [
5905
6093
  [
5906
6094
  { x: pad1X, w: pad1Width, key: "pad-1" },
5907
6095
  { x: pad2X, w: pad2Width, key: "pad-2" }
5908
- ].map(({ x, w, key }) => /* @__PURE__ */ jsx76(Colorize41, { color: padColor, children: /* @__PURE__ */ jsx76(
5909
- Cuboid50,
6096
+ ].map(({ x, w, key }) => /* @__PURE__ */ jsx77(Colorize42, { color: padColor, children: /* @__PURE__ */ jsx77(
6097
+ Cuboid51,
5910
6098
  {
5911
6099
  size: [w, padLength, padThickness],
5912
6100
  center: [x, 0, padThickness / 2]
5913
6101
  }
5914
6102
  ) }, key)),
5915
- /* @__PURE__ */ jsx76(Colorize41, { color: bodyColor, children: /* @__PURE__ */ jsx76(
5916
- Cuboid50,
6103
+ /* @__PURE__ */ jsx77(Colorize42, { color: bodyColor, children: /* @__PURE__ */ jsx77(
6104
+ Cuboid51,
5917
6105
  {
5918
6106
  size: [bodyWidth, bodyLength10, bodyHeight],
5919
6107
  center: [bodyCenterX, 0, padThickness + bodyHeight / 2]
5920
6108
  }
5921
6109
  ) }),
5922
- /* @__PURE__ */ jsx76(Colorize41, { color, children: /* @__PURE__ */ jsx76(
5923
- Cuboid50,
6110
+ /* @__PURE__ */ jsx77(Colorize42, { color, children: /* @__PURE__ */ jsx77(
6111
+ Cuboid51,
5924
6112
  {
5925
6113
  size: [lensWidth, lensLength, lensHeight],
5926
6114
  center: [
@@ -5935,15 +6123,15 @@ var Led2835 = ({
5935
6123
 
5936
6124
  // lib/RJ45.tsx
5937
6125
  import {
5938
- Colorize as Colorize42,
5939
- Cuboid as Cuboid51,
5940
- Cylinder as Cylinder15,
5941
- Rotate as Rotate15,
6126
+ Colorize as Colorize43,
6127
+ Cuboid as Cuboid52,
6128
+ Cylinder as Cylinder16,
6129
+ Rotate as Rotate16,
5942
6130
  RoundedCuboid as RoundedCuboid4,
5943
- Subtract as Subtract12,
5944
- Translate as Translate34
6131
+ Subtract as Subtract13,
6132
+ Translate as Translate35
5945
6133
  } from "jscad-fiber";
5946
- import { Fragment as Fragment72, jsx as jsx77, jsxs as jsxs73 } from "react/jsx-runtime";
6134
+ import { Fragment as Fragment73, jsx as jsx78, jsxs as jsxs74 } from "react/jsx-runtime";
5947
6135
  var range2 = (length) => Array.from({ length }, (_, index) => index);
5948
6136
  var RJ45 = ({
5949
6137
  bodyWidth = 16.26,
@@ -6001,18 +6189,18 @@ var RJ45 = ({
6001
6189
  const contactY = frontY - frontDirection * Math.max(cavityDepth * 0.48, 1.2);
6002
6190
  const contactZ = openingCenterZ + openingHeight * 0.18;
6003
6191
  const frontLipY = frontY + frontDirection * shellThickness * 0.2;
6004
- return /* @__PURE__ */ jsxs73(Fragment72, { children: [
6005
- /* @__PURE__ */ jsxs73(Colorize42, { color: shellColor, children: [
6006
- /* @__PURE__ */ jsxs73(Subtract12, { children: [
6007
- /* @__PURE__ */ jsx77(
6008
- Cuboid51,
6192
+ return /* @__PURE__ */ jsxs74(Fragment73, { children: [
6193
+ /* @__PURE__ */ jsxs74(Colorize43, { color: shellColor, children: [
6194
+ /* @__PURE__ */ jsxs74(Subtract13, { children: [
6195
+ /* @__PURE__ */ jsx78(
6196
+ Cuboid52,
6009
6197
  {
6010
6198
  center: [0, bodyCenterY, bodyHeight / 2],
6011
6199
  size: [bodyWidth, bodyDepth, bodyHeight]
6012
6200
  }
6013
6201
  ),
6014
- /* @__PURE__ */ jsx77(
6015
- Cuboid51,
6202
+ /* @__PURE__ */ jsx78(
6203
+ Cuboid52,
6016
6204
  {
6017
6205
  center: [0, cavityCenterY, openingCenterZ],
6018
6206
  size: [
@@ -6023,15 +6211,15 @@ var RJ45 = ({
6023
6211
  }
6024
6212
  )
6025
6213
  ] }),
6026
- /* @__PURE__ */ jsx77(
6027
- Cuboid51,
6214
+ /* @__PURE__ */ jsx78(
6215
+ Cuboid52,
6028
6216
  {
6029
6217
  center: [0, frontLipY, 0.72],
6030
6218
  size: [openingWidth + 0.5, shellThickness * 1.25, 1.05]
6031
6219
  }
6032
6220
  ),
6033
- [-1, 1].map((direction) => /* @__PURE__ */ jsx77(
6034
- Cuboid51,
6221
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx78(
6222
+ Cuboid52,
6035
6223
  {
6036
6224
  center: [direction * shieldPinX, shieldPinY, 0.25],
6037
6225
  size: [
@@ -6042,8 +6230,8 @@ var RJ45 = ({
6042
6230
  },
6043
6231
  `shield-tab:${direction}`
6044
6232
  )),
6045
- [-1, 1].map((direction) => /* @__PURE__ */ jsx77(
6046
- Cuboid51,
6233
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx78(
6234
+ Cuboid52,
6047
6235
  {
6048
6236
  center: [
6049
6237
  direction * bodyWidth * 0.24,
@@ -6055,9 +6243,9 @@ var RJ45 = ({
6055
6243
  `top-seam:${direction}`
6056
6244
  ))
6057
6245
  ] }),
6058
- /* @__PURE__ */ jsxs73(Colorize42, { color: housingColor, children: [
6059
- /* @__PURE__ */ jsxs73(Subtract12, { children: [
6060
- /* @__PURE__ */ jsx77(
6246
+ /* @__PURE__ */ jsxs74(Colorize43, { color: housingColor, children: [
6247
+ /* @__PURE__ */ jsxs74(Subtract13, { children: [
6248
+ /* @__PURE__ */ jsx78(
6061
6249
  RoundedCuboid4,
6062
6250
  {
6063
6251
  center: [0, cavityCenterY, openingCenterZ],
@@ -6069,8 +6257,8 @@ var RJ45 = ({
6069
6257
  roundRadius: 0.22
6070
6258
  }
6071
6259
  ),
6072
- /* @__PURE__ */ jsx77(
6073
- Cuboid51,
6260
+ /* @__PURE__ */ jsx78(
6261
+ Cuboid52,
6074
6262
  {
6075
6263
  center: [
6076
6264
  0,
@@ -6085,14 +6273,14 @@ var RJ45 = ({
6085
6273
  }
6086
6274
  )
6087
6275
  ] }),
6088
- /* @__PURE__ */ jsx77(
6089
- Cuboid51,
6276
+ /* @__PURE__ */ jsx78(
6277
+ Cuboid52,
6090
6278
  {
6091
6279
  center: [0, backWallY, openingCenterZ],
6092
6280
  size: [openingWidth - 1.15, shellThickness, openingHeight - 1.25]
6093
6281
  }
6094
6282
  ),
6095
- /* @__PURE__ */ jsx77(
6283
+ /* @__PURE__ */ jsx78(
6096
6284
  RoundedCuboid4,
6097
6285
  {
6098
6286
  center: [0, frontY - frontDirection * cavityDepth * 0.28, 1.55],
@@ -6100,8 +6288,8 @@ var RJ45 = ({
6100
6288
  roundRadius: 0.16
6101
6289
  }
6102
6290
  ),
6103
- [-1, 1].map((direction) => /* @__PURE__ */ jsx77(
6104
- Cylinder15,
6291
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx78(
6292
+ Cylinder16,
6105
6293
  {
6106
6294
  center: [direction * locatorHoleX, locatorHoleY, -0.25],
6107
6295
  radius: Math.max(locatorHoleDiameter * 0.41, 0.65),
@@ -6110,9 +6298,9 @@ var RJ45 = ({
6110
6298
  `locator:${direction}`
6111
6299
  ))
6112
6300
  ] }),
6113
- /* @__PURE__ */ jsxs73(Colorize42, { color: contactColor, children: [
6114
- signalPinPositions.map(({ x, y }, index) => /* @__PURE__ */ jsx77(
6115
- Cylinder15,
6301
+ /* @__PURE__ */ jsxs74(Colorize43, { color: contactColor, children: [
6302
+ signalPinPositions.map(({ x, y }, index) => /* @__PURE__ */ jsx78(
6303
+ Cylinder16,
6116
6304
  {
6117
6305
  center: [x, y, 0.15],
6118
6306
  radius: signalLeadRadius,
@@ -6120,15 +6308,15 @@ var RJ45 = ({
6120
6308
  },
6121
6309
  `signal-lead:${index}`
6122
6310
  )),
6123
- range2(8).map((index) => /* @__PURE__ */ jsx77(
6124
- Translate34,
6311
+ range2(8).map((index) => /* @__PURE__ */ jsx78(
6312
+ Translate35,
6125
6313
  {
6126
6314
  offset: [
6127
6315
  (index - 3.5) * contactPitch,
6128
6316
  contactY,
6129
6317
  contactZ + (index % 2 === 0 ? 0.03 : -0.03)
6130
6318
  ],
6131
- children: /* @__PURE__ */ jsx77(Rotate15, { rotation: [frontDirection * 0.2, 0, 0], children: /* @__PURE__ */ jsx77(
6319
+ children: /* @__PURE__ */ jsx78(Rotate16, { rotation: [frontDirection * 0.2, 0, 0], children: /* @__PURE__ */ jsx78(
6132
6320
  RoundedCuboid4,
6133
6321
  {
6134
6322
  size: [Math.max(contactPitch * 0.28, 0.28), 3.25, 0.16],
@@ -6138,8 +6326,8 @@ var RJ45 = ({
6138
6326
  },
6139
6327
  `socket-contact:${index}`
6140
6328
  )),
6141
- ledPins && ledPinPositions.map((x, index) => /* @__PURE__ */ jsx77(
6142
- Cylinder15,
6329
+ ledPins && ledPinPositions.map((x, index) => /* @__PURE__ */ jsx78(
6330
+ Cylinder16,
6143
6331
  {
6144
6332
  center: [x, ledPinY, 0.15],
6145
6333
  radius: signalLeadRadius,
@@ -6148,8 +6336,8 @@ var RJ45 = ({
6148
6336
  `led-lead:${index}`
6149
6337
  ))
6150
6338
  ] }),
6151
- ledPins && /* @__PURE__ */ jsxs73(Fragment72, { children: [
6152
- /* @__PURE__ */ jsx77(
6339
+ ledPins && /* @__PURE__ */ jsxs74(Fragment73, { children: [
6340
+ /* @__PURE__ */ jsx78(
6153
6341
  RoundedCuboid4,
6154
6342
  {
6155
6343
  color: "#73b744",
@@ -6162,7 +6350,7 @@ var RJ45 = ({
6162
6350
  roundRadius: 0.18
6163
6351
  }
6164
6352
  ),
6165
- /* @__PURE__ */ jsx77(
6353
+ /* @__PURE__ */ jsx78(
6166
6354
  RoundedCuboid4,
6167
6355
  {
6168
6356
  color: "#e0aa35",
@@ -6180,8 +6368,8 @@ var RJ45 = ({
6180
6368
  };
6181
6369
 
6182
6370
  // lib/DPAK.tsx
6183
- import { Colorize as Colorize43, Cuboid as Cuboid52, Hull as Hull25 } from "jscad-fiber";
6184
- import { Fragment as Fragment73, jsx as jsx78, jsxs as jsxs74 } from "react/jsx-runtime";
6371
+ import { Colorize as Colorize44, Cuboid as Cuboid53, Hull as Hull25 } from "jscad-fiber";
6372
+ import { Fragment as Fragment74, jsx as jsx79, jsxs as jsxs75 } from "react/jsx-runtime";
6185
6373
  var DPAK = ({
6186
6374
  bodyWidth = 6.1,
6187
6375
  bodyLength: bodyLength10 = 6.5,
@@ -6203,25 +6391,25 @@ var DPAK = ({
6203
6391
  const bodyFrontX = bodyCenterX - bodyWidth / 2;
6204
6392
  const leadZ = tabThickness / 2;
6205
6393
  const leadThickness = 0.4;
6206
- return /* @__PURE__ */ jsxs74(Fragment73, { children: [
6207
- /* @__PURE__ */ jsx78(Colorize43, { color: tabColor, children: /* @__PURE__ */ jsx78(
6208
- Cuboid52,
6394
+ return /* @__PURE__ */ jsxs75(Fragment74, { children: [
6395
+ /* @__PURE__ */ jsx79(Colorize44, { color: tabColor, children: /* @__PURE__ */ jsx79(
6396
+ Cuboid53,
6209
6397
  {
6210
6398
  size: [tabWidth, tabLength, tabThickness],
6211
6399
  center: [tabCenterX, 0, tabThickness / 2]
6212
6400
  }
6213
6401
  ) }),
6214
- /* @__PURE__ */ jsx78(Colorize43, { color, children: /* @__PURE__ */ jsx78(
6215
- Cuboid52,
6402
+ /* @__PURE__ */ jsx79(Colorize44, { color, children: /* @__PURE__ */ jsx79(
6403
+ Cuboid53,
6216
6404
  {
6217
6405
  size: [bodyWidth, bodyLength10, bodyHeight],
6218
6406
  center: [bodyCenterX, 0, tabThickness + bodyHeight / 2]
6219
6407
  }
6220
6408
  ) }),
6221
6409
  [-1, 1].map((side) => {
6222
- return /* @__PURE__ */ jsxs74(Colorize43, { color: leadColor, children: [
6223
- /* @__PURE__ */ jsx78(
6224
- Cuboid52,
6410
+ return /* @__PURE__ */ jsxs75(Colorize44, { color: leadColor, children: [
6411
+ /* @__PURE__ */ jsx79(
6412
+ Cuboid53,
6225
6413
  {
6226
6414
  size: [leadContactLength, leadWidth, leadThickness],
6227
6415
  center: [
@@ -6231,9 +6419,9 @@ var DPAK = ({
6231
6419
  ]
6232
6420
  }
6233
6421
  ),
6234
- /* @__PURE__ */ jsxs74(Hull25, { children: [
6235
- /* @__PURE__ */ jsx78(
6236
- Cuboid52,
6422
+ /* @__PURE__ */ jsxs75(Hull25, { children: [
6423
+ /* @__PURE__ */ jsx79(
6424
+ Cuboid53,
6237
6425
  {
6238
6426
  size: [0.1, leadWidth, leadThickness],
6239
6427
  center: [
@@ -6243,8 +6431,8 @@ var DPAK = ({
6243
6431
  ]
6244
6432
  }
6245
6433
  ),
6246
- /* @__PURE__ */ jsx78(
6247
- Cuboid52,
6434
+ /* @__PURE__ */ jsx79(
6435
+ Cuboid53,
6248
6436
  {
6249
6437
  size: [0.1, leadWidth, leadThickness],
6250
6438
  center: [bodyFrontX, side * pitch, leadZ + tabThickness / 2]
@@ -6258,13 +6446,13 @@ var DPAK = ({
6258
6446
 
6259
6447
  // lib/ElectrolyticCapacitor.tsx
6260
6448
  import {
6261
- Colorize as Colorize44,
6262
- Cuboid as Cuboid53,
6263
- Cylinder as Cylinder16,
6449
+ Colorize as Colorize45,
6450
+ Cuboid as Cuboid54,
6451
+ Cylinder as Cylinder17,
6264
6452
  RoundedCylinder as RoundedCylinder5,
6265
- Subtract as Subtract13
6453
+ Subtract as Subtract14
6266
6454
  } from "jscad-fiber";
6267
- import { Fragment as Fragment74, jsx as jsx79, jsxs as jsxs75 } from "react/jsx-runtime";
6455
+ import { Fragment as Fragment75, jsx as jsx80, jsxs as jsxs76 } from "react/jsx-runtime";
6268
6456
  var ElectrolyticCapacitor = ({
6269
6457
  diameter = 6.3,
6270
6458
  heightToDiameterRatio = 1.4,
@@ -6282,17 +6470,17 @@ var ElectrolyticCapacitor = ({
6282
6470
  const canTop = canBottom + canHeight;
6283
6471
  const grooveWidth = Math.max(diameter * 0.06, 0.2);
6284
6472
  const grooveDepth = 0.3;
6285
- return /* @__PURE__ */ jsxs75(Fragment74, { children: [
6286
- /* @__PURE__ */ jsx79(Colorize44, { color: baseColor, children: /* @__PURE__ */ jsx79(
6287
- Cylinder16,
6473
+ return /* @__PURE__ */ jsxs76(Fragment75, { children: [
6474
+ /* @__PURE__ */ jsx80(Colorize45, { color: baseColor, children: /* @__PURE__ */ jsx80(
6475
+ Cylinder17,
6288
6476
  {
6289
6477
  radius: radius - 0.05,
6290
6478
  height: baseHeight,
6291
6479
  center: [0, 0, baseHeight / 2]
6292
6480
  }
6293
6481
  ) }),
6294
- /* @__PURE__ */ jsx79(Colorize44, { color: sleeveColor, children: /* @__PURE__ */ jsxs75(Subtract13, { children: [
6295
- /* @__PURE__ */ jsx79(
6482
+ /* @__PURE__ */ jsx80(Colorize45, { color: sleeveColor, children: /* @__PURE__ */ jsxs76(Subtract14, { children: [
6483
+ /* @__PURE__ */ jsx80(
6296
6484
  RoundedCylinder5,
6297
6485
  {
6298
6486
  radius,
@@ -6301,23 +6489,23 @@ var ElectrolyticCapacitor = ({
6301
6489
  center: [0, 0, canBottom + canHeight / 2]
6302
6490
  }
6303
6491
  ),
6304
- /* @__PURE__ */ jsx79(
6305
- Cuboid53,
6492
+ /* @__PURE__ */ jsx80(
6493
+ Cuboid54,
6306
6494
  {
6307
6495
  size: [diameter, grooveWidth, grooveDepth * 2],
6308
6496
  center: [0, 0, canTop]
6309
6497
  }
6310
6498
  ),
6311
- /* @__PURE__ */ jsx79(
6312
- Cuboid53,
6499
+ /* @__PURE__ */ jsx80(
6500
+ Cuboid54,
6313
6501
  {
6314
6502
  size: [grooveWidth, diameter, grooveDepth * 2],
6315
6503
  center: [0, 0, canTop]
6316
6504
  }
6317
6505
  )
6318
6506
  ] }) }),
6319
- [-1, 1].map((side) => /* @__PURE__ */ jsx79(Colorize44, { color: "#c0c0c0", children: /* @__PURE__ */ jsx79(
6320
- Cylinder16,
6507
+ [-1, 1].map((side) => /* @__PURE__ */ jsx80(Colorize45, { color: "#c0c0c0", children: /* @__PURE__ */ jsx80(
6508
+ Cylinder17,
6321
6509
  {
6322
6510
  radius: leadDiameter / 2,
6323
6511
  height: leadLength + baseHeight,
@@ -6328,8 +6516,8 @@ var ElectrolyticCapacitor = ({
6328
6516
  };
6329
6517
 
6330
6518
  // lib/Potentiometer.tsx
6331
- import { Colorize as Colorize45, Cuboid as Cuboid54, Cylinder as Cylinder17, Subtract as Subtract14 } from "jscad-fiber";
6332
- import { Fragment as Fragment75, jsx as jsx80, jsxs as jsxs76 } from "react/jsx-runtime";
6519
+ import { Colorize as Colorize46, Cuboid as Cuboid55, Cylinder as Cylinder18, Subtract as Subtract15 } from "jscad-fiber";
6520
+ import { Fragment as Fragment76, jsx as jsx81, jsxs as jsxs77 } from "react/jsx-runtime";
6333
6521
  var Potentiometer = ({
6334
6522
  bodyWidth = 5.35,
6335
6523
  bodyLength: bodyLength10 = 14,
@@ -6347,41 +6535,41 @@ var Potentiometer = ({
6347
6535
  const adjusterHeight = 0.8;
6348
6536
  const adjusterZ = bodyHeight + adjusterHeight / 2;
6349
6537
  const slotWidth = Math.max(adjusterDiameter * 0.16, 0.3);
6350
- return /* @__PURE__ */ jsxs76(Fragment75, { children: [
6351
- /* @__PURE__ */ jsx80(Colorize45, { color: bodyColor, children: /* @__PURE__ */ jsx80(
6352
- Cuboid54,
6538
+ return /* @__PURE__ */ jsxs77(Fragment76, { children: [
6539
+ /* @__PURE__ */ jsx81(Colorize46, { color: bodyColor, children: /* @__PURE__ */ jsx81(
6540
+ Cuboid55,
6353
6541
  {
6354
6542
  size: [bodyWidth, bodyLength10, bodyHeight],
6355
6543
  center: [bodyCenterX, 0, bodyHeight / 2]
6356
6544
  }
6357
6545
  ) }),
6358
- /* @__PURE__ */ jsx80(Colorize45, { color: adjusterColor, children: /* @__PURE__ */ jsxs76(Subtract14, { children: [
6359
- /* @__PURE__ */ jsx80(
6360
- Cylinder17,
6546
+ /* @__PURE__ */ jsx81(Colorize46, { color: adjusterColor, children: /* @__PURE__ */ jsxs77(Subtract15, { children: [
6547
+ /* @__PURE__ */ jsx81(
6548
+ Cylinder18,
6361
6549
  {
6362
6550
  radius: adjusterDiameter / 2,
6363
6551
  height: adjusterHeight,
6364
6552
  center: [bodyCenterX, 0, adjusterZ]
6365
6553
  }
6366
6554
  ),
6367
- /* @__PURE__ */ jsx80(
6368
- Cuboid54,
6555
+ /* @__PURE__ */ jsx81(
6556
+ Cuboid55,
6369
6557
  {
6370
6558
  size: [adjusterDiameter, slotWidth, adjusterHeight * 0.6],
6371
6559
  center: [bodyCenterX, 0, adjusterZ + adjusterHeight / 2]
6372
6560
  }
6373
6561
  )
6374
6562
  ] }) }),
6375
- shaftHeight > 0 && shaftDiameter > 0 ? /* @__PURE__ */ jsx80(Colorize45, { color: adjusterColor, children: /* @__PURE__ */ jsx80(
6376
- Cylinder17,
6563
+ shaftHeight > 0 && shaftDiameter > 0 ? /* @__PURE__ */ jsx81(Colorize46, { color: adjusterColor, children: /* @__PURE__ */ jsx81(
6564
+ Cylinder18,
6377
6565
  {
6378
6566
  radius: shaftDiameter / 2,
6379
6567
  height: shaftHeight,
6380
6568
  center: [bodyCenterX, 0, bodyHeight + shaftHeight / 2]
6381
6569
  }
6382
6570
  ) }) : null,
6383
- leads.map((lead) => /* @__PURE__ */ jsx80(Colorize45, { color: "#c0c0c0", children: /* @__PURE__ */ jsx80(
6384
- Cylinder17,
6571
+ leads.map((lead) => /* @__PURE__ */ jsx81(Colorize46, { color: "#c0c0c0", children: /* @__PURE__ */ jsx81(
6572
+ Cylinder18,
6385
6573
  {
6386
6574
  radius: leadDiameter / 2,
6387
6575
  height: bodyHeight / 2 + leadLength,
@@ -6392,8 +6580,8 @@ var Potentiometer = ({
6392
6580
  };
6393
6581
 
6394
6582
  // lib/SmdPushButton.tsx
6395
- import { Colorize as Colorize46, Cuboid as Cuboid55, Cylinder as Cylinder18 } from "jscad-fiber";
6396
- import { Fragment as Fragment76, jsx as jsx81, jsxs as jsxs77 } from "react/jsx-runtime";
6583
+ import { Colorize as Colorize47, Cuboid as Cuboid56, Cylinder as Cylinder19 } from "jscad-fiber";
6584
+ import { Fragment as Fragment77, jsx as jsx82, jsxs as jsxs78 } from "react/jsx-runtime";
6397
6585
  var SmdPushButton = ({
6398
6586
  bodyWidth = 2.9,
6399
6587
  bodyLength: bodyLength10 = 3,
@@ -6409,16 +6597,16 @@ var SmdPushButton = ({
6409
6597
  leadColor = "#cccccc"
6410
6598
  }) => {
6411
6599
  const leadThickness = 0.15;
6412
- return /* @__PURE__ */ jsxs77(Fragment76, { children: [
6413
- /* @__PURE__ */ jsx81(Colorize46, { color: bodyColor, children: /* @__PURE__ */ jsx81(
6414
- Cuboid55,
6600
+ return /* @__PURE__ */ jsxs78(Fragment77, { children: [
6601
+ /* @__PURE__ */ jsx82(Colorize47, { color: bodyColor, children: /* @__PURE__ */ jsx82(
6602
+ Cuboid56,
6415
6603
  {
6416
6604
  size: [bodyWidth, bodyLength10, bodyHeight],
6417
6605
  center: [0, 0, bodyHeight / 2]
6418
6606
  }
6419
6607
  ) }),
6420
- /* @__PURE__ */ jsx81(Colorize46, { color: actuatorColor, children: /* @__PURE__ */ jsx81(
6421
- Cylinder18,
6608
+ /* @__PURE__ */ jsx82(Colorize47, { color: actuatorColor, children: /* @__PURE__ */ jsx82(
6609
+ Cylinder19,
6422
6610
  {
6423
6611
  radius: actuatorDiameter / 2,
6424
6612
  height: actuatorHeight,
@@ -6426,8 +6614,8 @@ var SmdPushButton = ({
6426
6614
  }
6427
6615
  ) }),
6428
6616
  [-1, 1].flatMap(
6429
- (sx) => [-1, 1].map((sy) => /* @__PURE__ */ jsx81(Colorize46, { color: leadColor, children: /* @__PURE__ */ jsx81(
6430
- Cuboid55,
6617
+ (sx) => [-1, 1].map((sy) => /* @__PURE__ */ jsx82(Colorize47, { color: leadColor, children: /* @__PURE__ */ jsx82(
6618
+ Cuboid56,
6431
6619
  {
6432
6620
  size: [padWidth, padLength, leadThickness],
6433
6621
  center: [
@@ -6442,8 +6630,8 @@ var SmdPushButton = ({
6442
6630
  };
6443
6631
 
6444
6632
  // lib/SOT-563.tsx
6445
- import { Cuboid as Cuboid56, Translate as Translate36, Rotate as Rotate16, Colorize as Colorize47 } from "jscad-fiber";
6446
- import { Fragment as Fragment77, jsx as jsx82, jsxs as jsxs78 } from "react/jsx-runtime";
6633
+ import { Cuboid as Cuboid57, Translate as Translate37, Rotate as Rotate17, Colorize as Colorize48 } from "jscad-fiber";
6634
+ import { Fragment as Fragment78, jsx as jsx83, jsxs as jsxs79 } from "react/jsx-runtime";
6447
6635
  var SOT563 = ({ fullWidth = 1.94, fullLength: fullLength10 = 1.6 }) => {
6448
6636
  const bodyWidth = 1.2;
6449
6637
  const bodyLength10 = 1.6;
@@ -6453,28 +6641,28 @@ var SOT563 = ({ fullWidth = 1.94, fullLength: fullLength10 = 1.6 }) => {
6453
6641
  const leadHeight = 0.13;
6454
6642
  const leadSpacing = 0.5;
6455
6643
  const bodyZOffset = -0.4;
6456
- return /* @__PURE__ */ jsxs78(Fragment77, { children: [
6457
- /* @__PURE__ */ jsx82(Rotate16, { rotation: [45 * Math.PI, 0, 0], children: /* @__PURE__ */ jsx82(Translate36, { center: [0, 0, bodyZOffset], children: /* @__PURE__ */ jsx82(Colorize47, { color: "grey", children: /* @__PURE__ */ jsx82(Cuboid56, { size: [bodyWidth, bodyLength10, bodyHeight] }) }) }) }),
6644
+ return /* @__PURE__ */ jsxs79(Fragment78, { children: [
6645
+ /* @__PURE__ */ jsx83(Rotate17, { rotation: [45 * Math.PI, 0, 0], children: /* @__PURE__ */ jsx83(Translate37, { center: [0, 0, bodyZOffset], children: /* @__PURE__ */ jsx83(Colorize48, { color: "grey", children: /* @__PURE__ */ jsx83(Cuboid57, { size: [bodyWidth, bodyLength10, bodyHeight] }) }) }) }),
6458
6646
  [-1, 0, 1].flatMap((yOffset, index) => [
6459
6647
  // Left lead
6460
- /* @__PURE__ */ jsx82(
6461
- Translate36,
6648
+ /* @__PURE__ */ jsx83(
6649
+ Translate37,
6462
6650
  {
6463
6651
  center: [
6464
6652
  -bodyWidth / 2 - 0.03,
6465
6653
  yOffset * leadSpacing,
6466
6654
  leadHeight / 2
6467
6655
  ],
6468
- children: /* @__PURE__ */ jsx82(Cuboid56, { size: [leadLength, leadWidth, leadHeight] })
6656
+ children: /* @__PURE__ */ jsx83(Cuboid57, { size: [leadLength, leadWidth, leadHeight] })
6469
6657
  },
6470
6658
  `left-${index}`
6471
6659
  ),
6472
6660
  // Right lead
6473
- /* @__PURE__ */ jsx82(
6474
- Translate36,
6661
+ /* @__PURE__ */ jsx83(
6662
+ Translate37,
6475
6663
  {
6476
6664
  center: [bodyWidth / 2 + 0.03, yOffset * leadSpacing, leadHeight / 2],
6477
- children: /* @__PURE__ */ jsx82(Cuboid56, { size: [leadLength, leadWidth, leadHeight] })
6665
+ children: /* @__PURE__ */ jsx83(Cuboid57, { size: [leadLength, leadWidth, leadHeight] })
6478
6666
  },
6479
6667
  `right-${index}`
6480
6668
  )
@@ -6483,13 +6671,17 @@ var SOT563 = ({ fullWidth = 1.94, fullLength: fullLength10 = 1.6 }) => {
6483
6671
  };
6484
6672
 
6485
6673
  // lib/Footprinter3d.tsx
6486
- import { Fragment as Fragment78, jsx as jsx83 } from "react/jsx-runtime";
6674
+ import { Fragment as Fragment79, jsx as jsx84 } from "react/jsx-runtime";
6487
6675
  var Footprinter3d = ({ footprint }) => {
6488
6676
  let normalizedFootprint = footprint;
6489
6677
  if (footprint.startsWith("jstzh1_5mm")) {
6490
6678
  const pinMatch = footprint.match(/jstzh1_5mm(\d+)?/);
6491
6679
  const numPins = pinMatch && pinMatch[1] ? pinMatch[1] : "7";
6492
6680
  normalizedFootprint = `zh${numPins}`;
6681
+ } else if (footprint.startsWith("jstph2_0mm")) {
6682
+ const pinMatch = footprint.match(/jstph2_0mm(\d+)?/);
6683
+ const numPins = pinMatch && pinMatch[1] ? pinMatch[1] : "2";
6684
+ normalizedFootprint = `jst${numPins}_ph`;
6493
6685
  }
6494
6686
  const fpJson = fp5.string(normalizedFootprint).json();
6495
6687
  const colorMatch = footprint.match(/_color\(([^)]+)\)/);
@@ -6501,7 +6693,7 @@ var Footprinter3d = ({ footprint }) => {
6501
6693
  };
6502
6694
  switch (fpJson.fn) {
6503
6695
  case "crystal":
6504
- return /* @__PURE__ */ jsx83(
6696
+ return /* @__PURE__ */ jsx84(
6505
6697
  Crystal,
6506
6698
  {
6507
6699
  horizontalPadPitch: fpJson.px,
@@ -6511,11 +6703,11 @@ var Footprinter3d = ({ footprint }) => {
6511
6703
  }
6512
6704
  );
6513
6705
  case "dip":
6514
- return /* @__PURE__ */ jsx83(Dip, { numPins: fpJson.num_pins, pitch: fpJson.p, bodyWidth: fpJson.w });
6706
+ return /* @__PURE__ */ jsx84(Dip, { numPins: fpJson.num_pins, pitch: fpJson.p, bodyWidth: fpJson.w });
6515
6707
  case "axial":
6516
- return /* @__PURE__ */ jsx83(AxialCapacitor, { pitch: fpJson.p });
6708
+ return /* @__PURE__ */ jsx84(AxialCapacitor, { pitch: fpJson.p });
6517
6709
  case "tssop":
6518
- return /* @__PURE__ */ jsx83(
6710
+ return /* @__PURE__ */ jsx84(
6519
6711
  Tssop,
6520
6712
  {
6521
6713
  pinCount: fpJson.num_pins,
@@ -6526,7 +6718,7 @@ var Footprinter3d = ({ footprint }) => {
6526
6718
  }
6527
6719
  );
6528
6720
  case "msop":
6529
- return /* @__PURE__ */ jsx83(
6721
+ return /* @__PURE__ */ jsx84(
6530
6722
  MSOP,
6531
6723
  {
6532
6724
  pinCount: fpJson.num_pins,
@@ -6537,7 +6729,7 @@ var Footprinter3d = ({ footprint }) => {
6537
6729
  }
6538
6730
  );
6539
6731
  case "vssop":
6540
- return /* @__PURE__ */ jsx83(
6732
+ return /* @__PURE__ */ jsx84(
6541
6733
  VSSOP,
6542
6734
  {
6543
6735
  pinCount: fpJson.num_pins,
@@ -6549,7 +6741,7 @@ var Footprinter3d = ({ footprint }) => {
6549
6741
  }
6550
6742
  );
6551
6743
  case "qfp":
6552
- return /* @__PURE__ */ jsx83(
6744
+ return /* @__PURE__ */ jsx84(
6553
6745
  QFP,
6554
6746
  {
6555
6747
  pinCount: fpJson.num_pins,
@@ -6560,12 +6752,12 @@ var Footprinter3d = ({ footprint }) => {
6560
6752
  }
6561
6753
  );
6562
6754
  case "tqfp":
6563
- return /* @__PURE__ */ jsx83(tqfp_default, {});
6755
+ return /* @__PURE__ */ jsx84(tqfp_default, {});
6564
6756
  case "lqfp":
6565
- return /* @__PURE__ */ jsx83(LQFP, { pinCount: fpJson.num_pins });
6757
+ return /* @__PURE__ */ jsx84(LQFP, { pinCount: fpJson.num_pins });
6566
6758
  case "qfn": {
6567
6759
  const hasThermalPad = typeof fpJson.thermalpad?.x === "number" && typeof fpJson.thermalpad?.y === "number";
6568
- return /* @__PURE__ */ jsx83(
6760
+ return /* @__PURE__ */ jsx84(
6569
6761
  qfn_default,
6570
6762
  {
6571
6763
  num_pins: fpJson.num_pins,
@@ -6583,7 +6775,7 @@ var Footprinter3d = ({ footprint }) => {
6583
6775
  }
6584
6776
  case "dfn": {
6585
6777
  const hasThermalPad = typeof fpJson.thermalpad?.x === "number" && typeof fpJson.thermalpad?.y === "number";
6586
- return /* @__PURE__ */ jsx83(
6778
+ return /* @__PURE__ */ jsx84(
6587
6779
  DFN,
6588
6780
  {
6589
6781
  num_pins: fpJson.num_pins,
@@ -6603,7 +6795,7 @@ var Footprinter3d = ({ footprint }) => {
6603
6795
  const rowsMatch = footprint.match(/_rows(\d+)/);
6604
6796
  const rows = rowsMatch && rowsMatch[1] ? parseInt(rowsMatch[1], 10) : 1;
6605
6797
  if (fpJson.male)
6606
- return /* @__PURE__ */ jsx83(
6798
+ return /* @__PURE__ */ jsx84(
6607
6799
  PinRow,
6608
6800
  {
6609
6801
  numberOfPins: fpJson.num_pins,
@@ -6616,7 +6808,7 @@ var Footprinter3d = ({ footprint }) => {
6616
6808
  }
6617
6809
  );
6618
6810
  if (fpJson.female)
6619
- return /* @__PURE__ */ jsx83(
6811
+ return /* @__PURE__ */ jsx84(
6620
6812
  FemaleHeaderRow,
6621
6813
  {
6622
6814
  numberOfPins: fpJson.num_pins,
@@ -6626,7 +6818,7 @@ var Footprinter3d = ({ footprint }) => {
6626
6818
  );
6627
6819
  }
6628
6820
  case "smdpinheader":
6629
- return /* @__PURE__ */ jsx83(
6821
+ return /* @__PURE__ */ jsx84(
6630
6822
  SmdPinHeader,
6631
6823
  {
6632
6824
  numberOfPins: fpJson.num_pins,
@@ -6635,44 +6827,44 @@ var Footprinter3d = ({ footprint }) => {
6635
6827
  }
6636
6828
  );
6637
6829
  case "led5050":
6638
- return /* @__PURE__ */ jsx83(Led5050, { color });
6830
+ return /* @__PURE__ */ jsx84(Led5050, { color });
6639
6831
  case "cap": {
6640
6832
  switch (fpJson.imperial) {
6641
6833
  case "0402":
6642
- return /* @__PURE__ */ jsx83(A0402, { color: "#856c4d" });
6834
+ return /* @__PURE__ */ jsx84(A0402, { color: "#856c4d" });
6643
6835
  case "0603":
6644
- return /* @__PURE__ */ jsx83(A0603, { color: "#856c4d" });
6836
+ return /* @__PURE__ */ jsx84(A0603, { color: "#856c4d" });
6645
6837
  case "0805":
6646
- return /* @__PURE__ */ jsx83(A0805, { color: "#856c4d" });
6838
+ return /* @__PURE__ */ jsx84(A0805, { color: "#856c4d" });
6647
6839
  case "0201":
6648
- return /* @__PURE__ */ jsx83(A0201, { color: "#856c4d" });
6840
+ return /* @__PURE__ */ jsx84(A0201, { color: "#856c4d" });
6649
6841
  case "01005":
6650
- return /* @__PURE__ */ jsx83(A01005, { color: "#856c4d" });
6842
+ return /* @__PURE__ */ jsx84(A01005, { color: "#856c4d" });
6651
6843
  case "1206":
6652
- return /* @__PURE__ */ jsx83(A1206, { color: "#856c4d" });
6844
+ return /* @__PURE__ */ jsx84(A1206, { color: "#856c4d" });
6653
6845
  case "1210":
6654
- return /* @__PURE__ */ jsx83(A1210, { color: "#856c4d" });
6846
+ return /* @__PURE__ */ jsx84(A1210, { color: "#856c4d" });
6655
6847
  case "2010":
6656
- return /* @__PURE__ */ jsx83(A2010, { color: "#856c4d" });
6848
+ return /* @__PURE__ */ jsx84(A2010, { color: "#856c4d" });
6657
6849
  case "2512":
6658
- return /* @__PURE__ */ jsx83(A2512, { color: "#856c4d" });
6850
+ return /* @__PURE__ */ jsx84(A2512, { color: "#856c4d" });
6659
6851
  }
6660
6852
  break;
6661
6853
  }
6662
6854
  case "sot23":
6663
6855
  switch (fpJson.num_pins) {
6664
6856
  case 3:
6665
- return /* @__PURE__ */ jsx83(SOT233P, { color });
6857
+ return /* @__PURE__ */ jsx84(SOT233P, { color });
6666
6858
  case 5:
6667
- return /* @__PURE__ */ jsx83(SOT_235_default, {});
6859
+ return /* @__PURE__ */ jsx84(SOT_235_default, {});
6668
6860
  }
6669
6861
  break;
6670
6862
  case "sot25":
6671
- return /* @__PURE__ */ jsx83(SOT_235_default, {});
6863
+ return /* @__PURE__ */ jsx84(SOT_235_default, {});
6672
6864
  case "sot":
6673
6865
  case "sot343": {
6674
6866
  const isSc70 = fpJson.fn === "sot343";
6675
- return /* @__PURE__ */ jsx83(
6867
+ return /* @__PURE__ */ jsx84(
6676
6868
  GullWingBody,
6677
6869
  {
6678
6870
  pads: getSmtPadRects(normalizedFootprint),
@@ -6683,10 +6875,10 @@ var Footprinter3d = ({ footprint }) => {
6683
6875
  );
6684
6876
  }
6685
6877
  case "sot563":
6686
- return /* @__PURE__ */ jsx83(SOT563, {});
6878
+ return /* @__PURE__ */ jsx84(SOT563, {});
6687
6879
  case "sot89": {
6688
6880
  const padSpan = dim(fpJson.w, 4.2);
6689
- return /* @__PURE__ */ jsx83(
6881
+ return /* @__PURE__ */ jsx84(
6690
6882
  SOT223,
6691
6883
  {
6692
6884
  fullWidth: padSpan,
@@ -6701,25 +6893,25 @@ var Footprinter3d = ({ footprint }) => {
6701
6893
  );
6702
6894
  }
6703
6895
  case "sot457":
6704
- return /* @__PURE__ */ jsx83(SOT457, {});
6896
+ return /* @__PURE__ */ jsx84(SOT457, {});
6705
6897
  case "sot223":
6706
- return /* @__PURE__ */ jsx83(SOT223, {});
6898
+ return /* @__PURE__ */ jsx84(SOT223, {});
6707
6899
  case "sot23w":
6708
- return /* @__PURE__ */ jsx83(SOT23W, {});
6900
+ return /* @__PURE__ */ jsx84(SOT23W, {});
6709
6901
  case "sot323":
6710
- return /* @__PURE__ */ jsx83(SOT323, {});
6902
+ return /* @__PURE__ */ jsx84(SOT323, {});
6711
6903
  case "sod323f":
6712
- return /* @__PURE__ */ jsx83(SOD323F, {});
6904
+ return /* @__PURE__ */ jsx84(SOD323F, {});
6713
6905
  case "sod323fl":
6714
- return /* @__PURE__ */ jsx83(SOD323FL, {});
6906
+ return /* @__PURE__ */ jsx84(SOD323FL, {});
6715
6907
  case "sot363":
6716
- return /* @__PURE__ */ jsx83(SOT_363_default, {});
6908
+ return /* @__PURE__ */ jsx84(SOT_363_default, {});
6717
6909
  case "sot886":
6718
- return /* @__PURE__ */ jsx83(SOT886, {});
6910
+ return /* @__PURE__ */ jsx84(SOT886, {});
6719
6911
  case "sot963":
6720
- return /* @__PURE__ */ jsx83(SOT963, {});
6912
+ return /* @__PURE__ */ jsx84(SOT963, {});
6721
6913
  case "pushbutton":
6722
- return /* @__PURE__ */ jsx83(
6914
+ return /* @__PURE__ */ jsx84(
6723
6915
  PushButton,
6724
6916
  {
6725
6917
  width: fpJson.w,
@@ -6729,11 +6921,14 @@ var Footprinter3d = ({ footprint }) => {
6729
6921
  );
6730
6922
  case "jst":
6731
6923
  if (fpJson.zh) {
6732
- return /* @__PURE__ */ jsx83(JSTZH1_5mm, { numPins: fpJson.num_pins });
6924
+ return /* @__PURE__ */ jsx84(JSTZH1_5mm, { numPins: fpJson.num_pins });
6925
+ }
6926
+ if (fpJson.ph) {
6927
+ return /* @__PURE__ */ jsx84(JSTPH2_0mm, { numPins: fpJson.num_pins });
6733
6928
  }
6734
6929
  break;
6735
6930
  case "fpc":
6736
- return /* @__PURE__ */ jsx83(
6931
+ return /* @__PURE__ */ jsx84(
6737
6932
  FPC,
6738
6933
  {
6739
6934
  pinCount: fpJson.num_pins,
@@ -6753,7 +6948,7 @@ var Footprinter3d = ({ footprint }) => {
6753
6948
  }
6754
6949
  );
6755
6950
  case "rj45":
6756
- return /* @__PURE__ */ jsx83(
6951
+ return /* @__PURE__ */ jsx84(
6757
6952
  RJ45,
6758
6953
  {
6759
6954
  bodyWidth: fpJson.w,
@@ -6779,7 +6974,7 @@ var Footprinter3d = ({ footprint }) => {
6779
6974
  case "soic":
6780
6975
  case "sop8":
6781
6976
  case "ssop":
6782
- return /* @__PURE__ */ jsx83(
6977
+ return /* @__PURE__ */ jsx84(
6783
6978
  SOIC,
6784
6979
  {
6785
6980
  pinCount: fpJson.num_pins,
@@ -6803,7 +6998,7 @@ var Footprinter3d = ({ footprint }) => {
6803
6998
  );
6804
6999
  const distinct = (values) => new Set(values.map((value) => value.toFixed(3))).size;
6805
7000
  const rowsAlongY = signalPads.length > 2 && distinct(signalPads.map((pad) => pad.y)) === 2 && distinct(signalPads.map((pad) => pad.x)) > 2;
6806
- const dfn = /* @__PURE__ */ jsx83(
7001
+ const dfn = /* @__PURE__ */ jsx84(
6807
7002
  DFN,
6808
7003
  {
6809
7004
  num_pins: fpJson.num_pins,
@@ -6818,13 +7013,13 @@ var Footprinter3d = ({ footprint }) => {
6818
7013
  } : void 0
6819
7014
  }
6820
7015
  );
6821
- return rowsAlongY ? /* @__PURE__ */ jsx83(Rotate17, { rotation: [0, 0, "90deg"], children: dfn }) : dfn;
7016
+ return rowsAlongY ? /* @__PURE__ */ jsx84(Rotate18, { rotation: [0, 0, "90deg"], children: dfn }) : dfn;
6822
7017
  }
6823
7018
  case "mlp":
6824
7019
  case "lga":
6825
7020
  case "quad": {
6826
7021
  if (fpJson.legsoutside) {
6827
- return /* @__PURE__ */ jsx83(
7022
+ return /* @__PURE__ */ jsx84(
6828
7023
  QFP,
6829
7024
  {
6830
7025
  pinCount: fpJson.num_pins,
@@ -6835,7 +7030,7 @@ var Footprinter3d = ({ footprint }) => {
6835
7030
  }
6836
7031
  );
6837
7032
  }
6838
- return /* @__PURE__ */ jsx83(
7033
+ return /* @__PURE__ */ jsx84(
6839
7034
  qfn_default,
6840
7035
  {
6841
7036
  num_pins: fpJson.num_pins,
@@ -6851,7 +7046,7 @@ var Footprinter3d = ({ footprint }) => {
6851
7046
  const pitch = dim(fpJson.p, 0.8);
6852
7047
  const columns = fpJson.grid?.x ?? 8;
6853
7048
  const rows = fpJson.grid?.y ?? 8;
6854
- return /* @__PURE__ */ jsx83(
7049
+ return /* @__PURE__ */ jsx84(
6855
7050
  BGA,
6856
7051
  {
6857
7052
  ballPitch: pitch,
@@ -6864,43 +7059,43 @@ var Footprinter3d = ({ footprint }) => {
6864
7059
  );
6865
7060
  }
6866
7061
  case "sod523":
6867
- return /* @__PURE__ */ jsx83(SOD523, {});
7062
+ return /* @__PURE__ */ jsx84(SOD523, {});
6868
7063
  case "sod723":
6869
- return /* @__PURE__ */ jsx83(SOD723_default, {});
7064
+ return /* @__PURE__ */ jsx84(SOD723_default, {});
6870
7065
  case "sod882":
6871
- return /* @__PURE__ */ jsx83(SOD882, {});
7066
+ return /* @__PURE__ */ jsx84(SOD882, {});
6872
7067
  case "sma":
6873
- return /* @__PURE__ */ jsx83(SMA, {});
7068
+ return /* @__PURE__ */ jsx84(SMA, {});
6874
7069
  case "smb":
6875
- return /* @__PURE__ */ jsx83(SMB, {});
7070
+ return /* @__PURE__ */ jsx84(SMB, {});
6876
7071
  case "smc":
6877
- return /* @__PURE__ */ jsx83(SMC, {});
7072
+ return /* @__PURE__ */ jsx84(SMC, {});
6878
7073
  case "smf":
6879
- return /* @__PURE__ */ jsx83(SMF, {});
7074
+ return /* @__PURE__ */ jsx84(SMF, {});
6880
7075
  case "sod123":
6881
- return /* @__PURE__ */ jsx83(SOD123, {});
7076
+ return /* @__PURE__ */ jsx84(SOD123, {});
6882
7077
  case "sod123f":
6883
- return /* @__PURE__ */ jsx83(SOD123F, {});
7078
+ return /* @__PURE__ */ jsx84(SOD123F, {});
6884
7079
  case "sod123fl":
6885
- return /* @__PURE__ */ jsx83(SOD123FL, {});
7080
+ return /* @__PURE__ */ jsx84(SOD123FL, {});
6886
7081
  case "sod123w":
6887
- return /* @__PURE__ */ jsx83(SOD123W, {});
7082
+ return /* @__PURE__ */ jsx84(SOD123W, {});
6888
7083
  case "sod110":
6889
- return /* @__PURE__ */ jsx83(SOD123W, { bodyWidth: 2.1, bodyLength: 1.4 });
7084
+ return /* @__PURE__ */ jsx84(SOD123W, { bodyWidth: 2.1, bodyLength: 1.4 });
6890
7085
  case "sod128":
6891
- return /* @__PURE__ */ jsx83(SOD128, {});
7086
+ return /* @__PURE__ */ jsx84(SOD128, {});
6892
7087
  case "sod323":
6893
- return /* @__PURE__ */ jsx83(SOD323, {});
7088
+ return /* @__PURE__ */ jsx84(SOD323, {});
6894
7089
  case "sod323w":
6895
- return /* @__PURE__ */ jsx83(SOD323, {});
7090
+ return /* @__PURE__ */ jsx84(SOD323, {});
6896
7091
  case "sod80":
6897
- return /* @__PURE__ */ jsx83(MINIMELF, {});
7092
+ return /* @__PURE__ */ jsx84(MINIMELF, {});
6898
7093
  case "sod882d":
6899
- return /* @__PURE__ */ jsx83(SOD882, {});
7094
+ return /* @__PURE__ */ jsx84(SOD882, {});
6900
7095
  case "smbf":
6901
- return /* @__PURE__ */ jsx83(SMB, {});
7096
+ return /* @__PURE__ */ jsx84(SMB, {});
6902
7097
  case "led2835":
6903
- return /* @__PURE__ */ jsx83(
7098
+ return /* @__PURE__ */ jsx84(
6904
7099
  Led2835,
6905
7100
  {
6906
7101
  color,
@@ -6918,10 +7113,10 @@ var Footprinter3d = ({ footprint }) => {
6918
7113
  const pitch = dim(fpJson.p, 2.5);
6919
7114
  const namedDiameter = footprint.match(/_d([\d.]+)/);
6920
7115
  const diameter = fpJson.d !== void 0 ? dim(fpJson.d, pitch * 2) : namedDiameter ? Number(namedDiameter[1]) : pitch * 2;
6921
- return /* @__PURE__ */ jsx83(ElectrolyticCapacitor, { diameter, leadPitch: pitch });
7116
+ return /* @__PURE__ */ jsx84(ElectrolyticCapacitor, { diameter, leadPitch: pitch });
6922
7117
  }
6923
7118
  case "potentiometer":
6924
- return /* @__PURE__ */ jsx83(
7119
+ return /* @__PURE__ */ jsx84(
6925
7120
  Potentiometer,
6926
7121
  {
6927
7122
  bodyWidth: dim(fpJson.w, 5.35),
@@ -6931,7 +7126,7 @@ var Footprinter3d = ({ footprint }) => {
6931
7126
  }
6932
7127
  );
6933
7128
  case "smdpushbutton":
6934
- return /* @__PURE__ */ jsx83(
7129
+ return /* @__PURE__ */ jsx84(
6935
7130
  SmdPushButton,
6936
7131
  {
6937
7132
  padSpanX: dim(fpJson.px, 4.2),
@@ -6947,20 +7142,20 @@ var Footprinter3d = ({ footprint }) => {
6947
7142
  { x: -halfWidth, pins: fpJson.left ?? 0, key: "left" },
6948
7143
  { x: halfWidth, pins: fpJson.right ?? 0, key: "right" }
6949
7144
  ];
6950
- return /* @__PURE__ */ jsx83(Fragment78, { children: sides.filter(({ pins }) => pins > 0).map(({ x, pins, key }) => /* @__PURE__ */ jsx83(Translate37, { center: [x, 0, 0], children: /* @__PURE__ */ jsx83(Rotate17, { rotation: [0, 0, "90deg"], children: /* @__PURE__ */ jsx83(PinRow, { numberOfPins: pins, pitch }) }) }, key)) });
7145
+ return /* @__PURE__ */ jsx84(Fragment79, { children: sides.filter(({ pins }) => pins > 0).map(({ x, pins, key }) => /* @__PURE__ */ jsx84(Translate38, { center: [x, 0, 0], children: /* @__PURE__ */ jsx84(Rotate18, { rotation: [0, 0, "90deg"], children: /* @__PURE__ */ jsx84(PinRow, { numberOfPins: pins, pitch }) }) }, key)) });
6951
7146
  }
6952
7147
  case "sod923":
6953
- return /* @__PURE__ */ jsx83(SOD923, {});
7148
+ return /* @__PURE__ */ jsx84(SOD923, {});
6954
7149
  case "hc49":
6955
- return /* @__PURE__ */ jsx83(HC49, {});
7150
+ return /* @__PURE__ */ jsx84(HC49, {});
6956
7151
  case "micromelf":
6957
- return /* @__PURE__ */ jsx83(MicroMELF, {});
7152
+ return /* @__PURE__ */ jsx84(MicroMELF, {});
6958
7153
  case "minimelf":
6959
- return /* @__PURE__ */ jsx83(MINIMELF, {});
7154
+ return /* @__PURE__ */ jsx84(MINIMELF, {});
6960
7155
  case "melf":
6961
- return /* @__PURE__ */ jsx83(MELF, {});
7156
+ return /* @__PURE__ */ jsx84(MELF, {});
6962
7157
  case "ms012":
6963
- return /* @__PURE__ */ jsx83(
7158
+ return /* @__PURE__ */ jsx84(
6964
7159
  MS012,
6965
7160
  {
6966
7161
  pinCount: fpJson.num_pins,
@@ -6970,7 +7165,7 @@ var Footprinter3d = ({ footprint }) => {
6970
7165
  }
6971
7166
  );
6972
7167
  case "ms013":
6973
- return /* @__PURE__ */ jsx83(
7168
+ return /* @__PURE__ */ jsx84(
6974
7169
  MS013,
6975
7170
  {
6976
7171
  pinCount: fpJson.num_pins,
@@ -6980,19 +7175,19 @@ var Footprinter3d = ({ footprint }) => {
6980
7175
  }
6981
7176
  );
6982
7177
  case "sot723":
6983
- return /* @__PURE__ */ jsx83(SOT723, {});
7178
+ return /* @__PURE__ */ jsx84(SOT723, {});
6984
7179
  case "to220":
6985
- return /* @__PURE__ */ jsx83(TO220, { leads: getPlatedHoleCenters(normalizedFootprint) });
7180
+ return /* @__PURE__ */ jsx84(TO220, { leads: getPlatedHoleCenters(normalizedFootprint) });
6986
7181
  case "to220f":
6987
- return /* @__PURE__ */ jsx83(TO220, { mouldedTab: true, leads: getPlatedHoleCenters(normalizedFootprint) });
7182
+ return /* @__PURE__ */ jsx84(TO220, { mouldedTab: true, leads: getPlatedHoleCenters(normalizedFootprint) });
6988
7183
  case "to92":
6989
- return /* @__PURE__ */ jsx83(TO92, { leads: getPlatedHoleCenters(normalizedFootprint) });
7184
+ return /* @__PURE__ */ jsx84(TO92, { leads: getPlatedHoleCenters(normalizedFootprint) });
6990
7185
  case "to92l":
6991
7186
  case "to92s": {
6992
7187
  const across = dim(fpJson.w, 4.8);
6993
7188
  const along = dim(fpJson.h, 4);
6994
7189
  const diameter = Math.max(across, along);
6995
- return /* @__PURE__ */ jsx83(
7190
+ return /* @__PURE__ */ jsx84(
6996
7191
  TO92,
6997
7192
  {
6998
7193
  bodyDiameter: diameter,
@@ -7011,7 +7206,7 @@ var Footprinter3d = ({ footprint }) => {
7011
7206
  dim(fpJson.tabh, isD2Pak ? 10 : 5.8),
7012
7207
  isD2Pak ? 10 : 6.5
7013
7208
  );
7014
- return /* @__PURE__ */ jsx83(
7209
+ return /* @__PURE__ */ jsx84(
7015
7210
  DPAK,
7016
7211
  {
7017
7212
  bodyWidth: tabWidth,
@@ -7028,7 +7223,7 @@ var Footprinter3d = ({ footprint }) => {
7028
7223
  }
7029
7224
  case "stampboard":
7030
7225
  case "stampreceiver":
7031
- return /* @__PURE__ */ jsx83(
7226
+ return /* @__PURE__ */ jsx84(
7032
7227
  StampBoard,
7033
7228
  {
7034
7229
  bodyWidth: fpJson.w,
@@ -7052,7 +7247,7 @@ var Footprinter3d = ({ footprint }) => {
7052
7247
  const pinRow = fpJson.pinrow;
7053
7248
  const pinRowHoleEdgeToEdgeDist = fpJson.pinRowHoleEdgeToEdgeDist;
7054
7249
  const holes = Array.isArray(fpJson.holes) ? fpJson.holes : [];
7055
- return /* @__PURE__ */ jsx83(
7250
+ return /* @__PURE__ */ jsx84(
7056
7251
  MountedPcbModule,
7057
7252
  {
7058
7253
  numPins: pinRow,
@@ -7079,29 +7274,29 @@ var Footprinter3d = ({ footprint }) => {
7079
7274
  }
7080
7275
  switch (fpJson.imperial) {
7081
7276
  case "0402":
7082
- return /* @__PURE__ */ jsx83(A0402, { color });
7277
+ return /* @__PURE__ */ jsx84(A0402, { color });
7083
7278
  case "0603":
7084
- return /* @__PURE__ */ jsx83(A0603, { color });
7279
+ return /* @__PURE__ */ jsx84(A0603, { color });
7085
7280
  case "0805":
7086
- return /* @__PURE__ */ jsx83(A0805, { color });
7281
+ return /* @__PURE__ */ jsx84(A0805, { color });
7087
7282
  case "0201":
7088
- return /* @__PURE__ */ jsx83(A0201, { color });
7283
+ return /* @__PURE__ */ jsx84(A0201, { color });
7089
7284
  case "01005":
7090
- return /* @__PURE__ */ jsx83(A01005, { color });
7285
+ return /* @__PURE__ */ jsx84(A01005, { color });
7091
7286
  case "1206":
7092
- return /* @__PURE__ */ jsx83(A1206, { color });
7287
+ return /* @__PURE__ */ jsx84(A1206, { color });
7093
7288
  case "1210":
7094
- return /* @__PURE__ */ jsx83(A1210, { color });
7289
+ return /* @__PURE__ */ jsx84(A1210, { color });
7095
7290
  case "2010":
7096
- return /* @__PURE__ */ jsx83(A2010, { color });
7291
+ return /* @__PURE__ */ jsx84(A2010, { color });
7097
7292
  case "2512":
7098
- return /* @__PURE__ */ jsx83(A2512, { color });
7293
+ return /* @__PURE__ */ jsx84(A2512, { color });
7099
7294
  }
7100
7295
  if ((fpJson.fn === "res" || fpJson.fn === "cap") && fpJson.p !== void 0 && fpJson.ph !== void 0) {
7101
7296
  const padPitch = mm(fpJson.p);
7102
7297
  const padHeight = mm(fpJson.ph);
7103
7298
  if (Number.isFinite(padPitch) && Number.isFinite(padHeight)) {
7104
- return /* @__PURE__ */ jsx83(
7299
+ return /* @__PURE__ */ jsx84(
7105
7300
  ParametricChip,
7106
7301
  {
7107
7302
  padPitch,
@@ -7140,6 +7335,7 @@ export {
7140
7335
  Footprinter3d,
7141
7336
  GullWingBody,
7142
7337
  HC49,
7338
+ JSTPH2_0mm,
7143
7339
  JSTZH1_5mm,
7144
7340
  LQFP,
7145
7341
  Led2835,