jscad-electronics 0.0.140 → 0.0.142

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
@@ -5238,8 +5238,328 @@ var FPC = ({
5238
5238
  ] });
5239
5239
  };
5240
5240
 
5241
+ // lib/SmdPinHeader.tsx
5242
+ import { Colorize as Colorize38, Cuboid as Cuboid46, Hull as Hull24, Translate as Translate32 } from "jscad-fiber";
5243
+ import { Fragment as Fragment63, jsx as jsx69, jsxs as jsxs65 } from "react/jsx-runtime";
5244
+ var SmdPinHeader = ({
5245
+ numberOfPins,
5246
+ pitch = 2.54,
5247
+ pinThickness = 0.64,
5248
+ bodyWidth = 2.5,
5249
+ bodyHeight = 2.54,
5250
+ standoffHeight = 1.27,
5251
+ matingPinLength = 5.8,
5252
+ tailSpan = 5.08
5253
+ }) => {
5254
+ const xStart = -((numberOfPins - 1) * pitch) / 2;
5255
+ const bodyTop = standoffHeight + bodyHeight;
5256
+ const tailLength = tailSpan / 2;
5257
+ const tipChamferHeight = pinThickness * 0.35;
5258
+ return /* @__PURE__ */ jsx69(Fragment63, { children: Array.from({ length: numberOfPins }, (_, index) => {
5259
+ const x = xStart + index * pitch;
5260
+ const tailDirection = index % 2 === 0 ? 1 : -1;
5261
+ const postBodyLength = matingPinLength - tipChamferHeight;
5262
+ const verticalTailLength = standoffHeight - pinThickness / 2;
5263
+ return /* @__PURE__ */ jsxs65(Translate32, { x, children: [
5264
+ /* @__PURE__ */ jsx69(
5265
+ Cuboid46,
5266
+ {
5267
+ color: "#222",
5268
+ size: [pitch, bodyWidth, bodyHeight],
5269
+ center: [0, 0, standoffHeight + bodyHeight / 2]
5270
+ }
5271
+ ),
5272
+ /* @__PURE__ */ jsxs65(Colorize38, { color: "#d4af37", children: [
5273
+ /* @__PURE__ */ jsx69(
5274
+ Cuboid46,
5275
+ {
5276
+ size: [pinThickness, tailLength, pinThickness],
5277
+ center: [0, tailDirection * (tailLength / 2), pinThickness / 2]
5278
+ }
5279
+ ),
5280
+ /* @__PURE__ */ jsx69(
5281
+ Cuboid46,
5282
+ {
5283
+ size: [pinThickness, pinThickness, verticalTailLength],
5284
+ center: [0, 0, pinThickness / 2 + verticalTailLength / 2]
5285
+ }
5286
+ ),
5287
+ /* @__PURE__ */ jsx69(
5288
+ Cuboid46,
5289
+ {
5290
+ size: [pinThickness, pinThickness, postBodyLength],
5291
+ center: [0, 0, bodyTop + postBodyLength / 2]
5292
+ }
5293
+ ),
5294
+ /* @__PURE__ */ jsxs65(Hull24, { children: [
5295
+ /* @__PURE__ */ jsx69(
5296
+ Cuboid46,
5297
+ {
5298
+ size: [pinThickness, pinThickness, 0.01],
5299
+ center: [0, 0, bodyTop + postBodyLength]
5300
+ }
5301
+ ),
5302
+ /* @__PURE__ */ jsx69(
5303
+ Cuboid46,
5304
+ {
5305
+ size: [pinThickness * 0.65, pinThickness * 0.65, 0.01],
5306
+ center: [0, 0, bodyTop + matingPinLength]
5307
+ }
5308
+ )
5309
+ ] })
5310
+ ] })
5311
+ ] }, index);
5312
+ }) });
5313
+ };
5314
+
5315
+ // lib/RJ45.tsx
5316
+ import {
5317
+ Colorize as Colorize39,
5318
+ Cuboid as Cuboid47,
5319
+ Cylinder as Cylinder13,
5320
+ Rotate as Rotate14,
5321
+ RoundedCuboid as RoundedCuboid4,
5322
+ Subtract as Subtract11,
5323
+ Translate as Translate33
5324
+ } from "jscad-fiber";
5325
+ import { Fragment as Fragment64, jsx as jsx70, jsxs as jsxs66 } from "react/jsx-runtime";
5326
+ var range2 = (length) => Array.from({ length }, (_, index) => index);
5327
+ var RJ45 = ({
5328
+ bodyWidth = 16.26,
5329
+ bodyDepth = 15.88,
5330
+ bodyHeight = 13.5,
5331
+ bodyCenterY = -0.96,
5332
+ ledPins = false,
5333
+ firstPinLeft = false,
5334
+ firstPinTop = false,
5335
+ signalPitch = 1.02,
5336
+ signalRowPitch = 1.78,
5337
+ signalHoleDiameter = 0.9144,
5338
+ shieldPinX = 8.13,
5339
+ shieldPinY = 0.13,
5340
+ shieldHoleDiameter = 1.8,
5341
+ locatorHoleX = 6.35,
5342
+ locatorHoleY = -3.43,
5343
+ locatorHoleDiameter = 3.25,
5344
+ ledPinX = 4.57,
5345
+ ledPinPitch = 2.29,
5346
+ ledPinY = 5.7,
5347
+ openingDirection,
5348
+ shellColor = "#b7bdc2",
5349
+ housingColor = "#20242a",
5350
+ contactColor = "#d6a928"
5351
+ }) => {
5352
+ const frontDirection = openingDirection ?? (bodyCenterY > 0 ? 1 : -1);
5353
+ const frontY = bodyCenterY + frontDirection * bodyDepth / 2;
5354
+ const shellThickness = Math.min(0.38, bodyWidth * 0.024);
5355
+ const openingWidth = Math.max(bodyWidth - 2.5, bodyWidth * 0.72);
5356
+ const openingHeight = Math.min(bodyHeight - 2.4, 9.6);
5357
+ const openingCenterZ = 1.3 + openingHeight / 2;
5358
+ const cavityDepth = Math.min(4.4, bodyDepth * 0.34);
5359
+ const cavityCenterY = frontY - frontDirection * cavityDepth / 2;
5360
+ const backWallY = frontY - frontDirection * (cavityDepth + shellThickness * 0.7);
5361
+ const signalLeadRadius = Math.max(
5362
+ 0.22,
5363
+ Math.min(signalHoleDiameter * 0.36, 0.38)
5364
+ );
5365
+ const signalPinPositions = range2(8).map((index) => {
5366
+ const defaultX = (3.5 - index) * signalPitch;
5367
+ const defaultY = index % 2 === 0 ? -signalRowPitch / 2 : signalRowPitch / 2;
5368
+ return {
5369
+ x: firstPinLeft ? -defaultX : defaultX,
5370
+ y: firstPinTop ? -defaultY : defaultY
5371
+ };
5372
+ });
5373
+ const ledPinPositions = [
5374
+ -ledPinX - ledPinPitch,
5375
+ -ledPinX,
5376
+ ledPinX,
5377
+ ledPinX + ledPinPitch
5378
+ ];
5379
+ const contactPitch = openingWidth / 10;
5380
+ const contactY = frontY - frontDirection * Math.max(cavityDepth * 0.48, 1.2);
5381
+ const contactZ = openingCenterZ + openingHeight * 0.18;
5382
+ const frontLipY = frontY + frontDirection * shellThickness * 0.2;
5383
+ return /* @__PURE__ */ jsxs66(Fragment64, { children: [
5384
+ /* @__PURE__ */ jsxs66(Colorize39, { color: shellColor, children: [
5385
+ /* @__PURE__ */ jsxs66(Subtract11, { children: [
5386
+ /* @__PURE__ */ jsx70(
5387
+ Cuboid47,
5388
+ {
5389
+ center: [0, bodyCenterY, bodyHeight / 2],
5390
+ size: [bodyWidth, bodyDepth, bodyHeight]
5391
+ }
5392
+ ),
5393
+ /* @__PURE__ */ jsx70(
5394
+ Cuboid47,
5395
+ {
5396
+ center: [0, cavityCenterY, openingCenterZ],
5397
+ size: [
5398
+ openingWidth,
5399
+ cavityDepth + shellThickness * 2,
5400
+ openingHeight
5401
+ ]
5402
+ }
5403
+ )
5404
+ ] }),
5405
+ /* @__PURE__ */ jsx70(
5406
+ Cuboid47,
5407
+ {
5408
+ center: [0, frontLipY, 0.72],
5409
+ size: [openingWidth + 0.5, shellThickness * 1.25, 1.05]
5410
+ }
5411
+ ),
5412
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx70(
5413
+ Cuboid47,
5414
+ {
5415
+ center: [direction * shieldPinX, shieldPinY, 0.25],
5416
+ size: [
5417
+ Math.max(shieldHoleDiameter * 0.46, 0.65),
5418
+ Math.max(shieldHoleDiameter * 0.72, 1.1),
5419
+ 3.4
5420
+ ]
5421
+ },
5422
+ `shield-tab:${direction}`
5423
+ )),
5424
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx70(
5425
+ Cuboid47,
5426
+ {
5427
+ center: [
5428
+ direction * bodyWidth * 0.24,
5429
+ bodyCenterY - frontDirection * bodyDepth * 0.08,
5430
+ bodyHeight + 0.04
5431
+ ],
5432
+ size: [bodyWidth * 0.22, bodyDepth * 0.42, 0.1]
5433
+ },
5434
+ `top-seam:${direction}`
5435
+ ))
5436
+ ] }),
5437
+ /* @__PURE__ */ jsxs66(Colorize39, { color: housingColor, children: [
5438
+ /* @__PURE__ */ jsxs66(Subtract11, { children: [
5439
+ /* @__PURE__ */ jsx70(
5440
+ RoundedCuboid4,
5441
+ {
5442
+ center: [0, cavityCenterY, openingCenterZ],
5443
+ size: [
5444
+ openingWidth - 0.2,
5445
+ cavityDepth + shellThickness * 0.5,
5446
+ openingHeight - 0.2
5447
+ ],
5448
+ roundRadius: 0.22
5449
+ }
5450
+ ),
5451
+ /* @__PURE__ */ jsx70(
5452
+ Cuboid47,
5453
+ {
5454
+ center: [
5455
+ 0,
5456
+ cavityCenterY - frontDirection * shellThickness * 0.2,
5457
+ openingCenterZ - 0.05
5458
+ ],
5459
+ size: [
5460
+ openingWidth - 1.25,
5461
+ cavityDepth + shellThickness,
5462
+ openingHeight - 1.35
5463
+ ]
5464
+ }
5465
+ )
5466
+ ] }),
5467
+ /* @__PURE__ */ jsx70(
5468
+ Cuboid47,
5469
+ {
5470
+ center: [0, backWallY, openingCenterZ],
5471
+ size: [openingWidth - 1.15, shellThickness, openingHeight - 1.25]
5472
+ }
5473
+ ),
5474
+ /* @__PURE__ */ jsx70(
5475
+ RoundedCuboid4,
5476
+ {
5477
+ center: [0, frontY - frontDirection * cavityDepth * 0.28, 1.55],
5478
+ size: [openingWidth - 2.6, cavityDepth * 0.5, 1.15],
5479
+ roundRadius: 0.16
5480
+ }
5481
+ ),
5482
+ [-1, 1].map((direction) => /* @__PURE__ */ jsx70(
5483
+ Cylinder13,
5484
+ {
5485
+ center: [direction * locatorHoleX, locatorHoleY, -0.25],
5486
+ radius: Math.max(locatorHoleDiameter * 0.41, 0.65),
5487
+ height: 2.7
5488
+ },
5489
+ `locator:${direction}`
5490
+ ))
5491
+ ] }),
5492
+ /* @__PURE__ */ jsxs66(Colorize39, { color: contactColor, children: [
5493
+ signalPinPositions.map(({ x, y }, index) => /* @__PURE__ */ jsx70(
5494
+ Cylinder13,
5495
+ {
5496
+ center: [x, y, 0.15],
5497
+ radius: signalLeadRadius,
5498
+ height: 3.1
5499
+ },
5500
+ `signal-lead:${index}`
5501
+ )),
5502
+ range2(8).map((index) => /* @__PURE__ */ jsx70(
5503
+ Translate33,
5504
+ {
5505
+ offset: [
5506
+ (index - 3.5) * contactPitch,
5507
+ contactY,
5508
+ contactZ + (index % 2 === 0 ? 0.03 : -0.03)
5509
+ ],
5510
+ children: /* @__PURE__ */ jsx70(Rotate14, { rotation: [frontDirection * 0.2, 0, 0], children: /* @__PURE__ */ jsx70(
5511
+ RoundedCuboid4,
5512
+ {
5513
+ size: [Math.max(contactPitch * 0.28, 0.28), 3.25, 0.16],
5514
+ roundRadius: 0.05
5515
+ }
5516
+ ) })
5517
+ },
5518
+ `socket-contact:${index}`
5519
+ )),
5520
+ ledPins && ledPinPositions.map((x, index) => /* @__PURE__ */ jsx70(
5521
+ Cylinder13,
5522
+ {
5523
+ center: [x, ledPinY, 0.15],
5524
+ radius: signalLeadRadius,
5525
+ height: 3.1
5526
+ },
5527
+ `led-lead:${index}`
5528
+ ))
5529
+ ] }),
5530
+ ledPins && /* @__PURE__ */ jsxs66(Fragment64, { children: [
5531
+ /* @__PURE__ */ jsx70(
5532
+ RoundedCuboid4,
5533
+ {
5534
+ color: "#73b744",
5535
+ center: [
5536
+ -bodyWidth / 2 + 2.05,
5537
+ frontY + frontDirection * shellThickness * 0.35,
5538
+ bodyHeight - 2.05
5539
+ ],
5540
+ size: [2.15, shellThickness * 1.55, 1.45],
5541
+ roundRadius: 0.18
5542
+ }
5543
+ ),
5544
+ /* @__PURE__ */ jsx70(
5545
+ RoundedCuboid4,
5546
+ {
5547
+ color: "#e0aa35",
5548
+ center: [
5549
+ bodyWidth / 2 - 2.05,
5550
+ frontY + frontDirection * shellThickness * 0.35,
5551
+ bodyHeight - 2.05
5552
+ ],
5553
+ size: [2.15, shellThickness * 1.55, 1.45],
5554
+ roundRadius: 0.18
5555
+ }
5556
+ )
5557
+ ] })
5558
+ ] });
5559
+ };
5560
+
5241
5561
  // lib/Footprinter3d.tsx
5242
- import { jsx as jsx69 } from "react/jsx-runtime";
5562
+ import { jsx as jsx71 } from "react/jsx-runtime";
5243
5563
  var Footprinter3d = ({ footprint }) => {
5244
5564
  let normalizedFootprint = footprint;
5245
5565
  if (footprint.startsWith("jstzh1_5mm")) {
@@ -5250,11 +5570,11 @@ var Footprinter3d = ({ footprint }) => {
5250
5570
  const fpJson = fp3.string(normalizedFootprint).json();
5251
5571
  switch (fpJson.fn) {
5252
5572
  case "dip":
5253
- return /* @__PURE__ */ jsx69(Dip, { numPins: fpJson.num_pins, pitch: fpJson.p, bodyWidth: fpJson.w });
5573
+ return /* @__PURE__ */ jsx71(Dip, { numPins: fpJson.num_pins, pitch: fpJson.p, bodyWidth: fpJson.w });
5254
5574
  case "axial":
5255
- return /* @__PURE__ */ jsx69(AxialCapacitor, { pitch: fpJson.p });
5575
+ return /* @__PURE__ */ jsx71(AxialCapacitor, { pitch: fpJson.p });
5256
5576
  case "tssop":
5257
- return /* @__PURE__ */ jsx69(
5577
+ return /* @__PURE__ */ jsx71(
5258
5578
  Tssop,
5259
5579
  {
5260
5580
  pinCount: fpJson.num_pins,
@@ -5265,7 +5585,7 @@ var Footprinter3d = ({ footprint }) => {
5265
5585
  }
5266
5586
  );
5267
5587
  case "msop":
5268
- return /* @__PURE__ */ jsx69(
5588
+ return /* @__PURE__ */ jsx71(
5269
5589
  MSOP,
5270
5590
  {
5271
5591
  pinCount: fpJson.num_pins,
@@ -5276,7 +5596,7 @@ var Footprinter3d = ({ footprint }) => {
5276
5596
  }
5277
5597
  );
5278
5598
  case "vssop":
5279
- return /* @__PURE__ */ jsx69(
5599
+ return /* @__PURE__ */ jsx71(
5280
5600
  VSSOP,
5281
5601
  {
5282
5602
  pinCount: fpJson.num_pins,
@@ -5288,7 +5608,7 @@ var Footprinter3d = ({ footprint }) => {
5288
5608
  }
5289
5609
  );
5290
5610
  case "qfp":
5291
- return /* @__PURE__ */ jsx69(
5611
+ return /* @__PURE__ */ jsx71(
5292
5612
  QFP,
5293
5613
  {
5294
5614
  pinCount: fpJson.num_pins,
@@ -5299,12 +5619,12 @@ var Footprinter3d = ({ footprint }) => {
5299
5619
  }
5300
5620
  );
5301
5621
  case "tqfp":
5302
- return /* @__PURE__ */ jsx69(tqfp_default, {});
5622
+ return /* @__PURE__ */ jsx71(tqfp_default, {});
5303
5623
  case "lqfp":
5304
- return /* @__PURE__ */ jsx69(LQFP, { pinCount: fpJson.num_pins });
5624
+ return /* @__PURE__ */ jsx71(LQFP, { pinCount: fpJson.num_pins });
5305
5625
  case "qfn": {
5306
5626
  const hasThermalPad = typeof fpJson.thermalpad?.x === "number" && typeof fpJson.thermalpad?.y === "number";
5307
- return /* @__PURE__ */ jsx69(
5627
+ return /* @__PURE__ */ jsx71(
5308
5628
  qfn_default,
5309
5629
  {
5310
5630
  num_pins: fpJson.num_pins,
@@ -5322,7 +5642,7 @@ var Footprinter3d = ({ footprint }) => {
5322
5642
  }
5323
5643
  case "dfn": {
5324
5644
  const hasThermalPad = typeof fpJson.thermalpad?.x === "number" && typeof fpJson.thermalpad?.y === "number";
5325
- return /* @__PURE__ */ jsx69(
5645
+ return /* @__PURE__ */ jsx71(
5326
5646
  DFN,
5327
5647
  {
5328
5648
  num_pins: fpJson.num_pins,
@@ -5342,7 +5662,7 @@ var Footprinter3d = ({ footprint }) => {
5342
5662
  const rowsMatch = footprint.match(/_rows(\d+)/);
5343
5663
  const rows = rowsMatch && rowsMatch[1] ? parseInt(rowsMatch[1], 10) : 1;
5344
5664
  if (fpJson.male)
5345
- return /* @__PURE__ */ jsx69(
5665
+ return /* @__PURE__ */ jsx71(
5346
5666
  PinRow,
5347
5667
  {
5348
5668
  numberOfPins: fpJson.num_pins,
@@ -5355,7 +5675,7 @@ var Footprinter3d = ({ footprint }) => {
5355
5675
  }
5356
5676
  );
5357
5677
  if (fpJson.female)
5358
- return /* @__PURE__ */ jsx69(
5678
+ return /* @__PURE__ */ jsx71(
5359
5679
  FemaleHeaderRow,
5360
5680
  {
5361
5681
  numberOfPins: fpJson.num_pins,
@@ -5364,50 +5684,59 @@ var Footprinter3d = ({ footprint }) => {
5364
5684
  }
5365
5685
  );
5366
5686
  }
5687
+ case "smdpinheader":
5688
+ return /* @__PURE__ */ jsx71(
5689
+ SmdPinHeader,
5690
+ {
5691
+ numberOfPins: fpJson.num_pins,
5692
+ pitch: fpJson.p,
5693
+ bodyWidth: fpJson.bh
5694
+ }
5695
+ );
5367
5696
  case "cap": {
5368
5697
  switch (fpJson.imperial) {
5369
5698
  case "0402":
5370
- return /* @__PURE__ */ jsx69(A0402, { color: "#856c4d" });
5699
+ return /* @__PURE__ */ jsx71(A0402, { color: "#856c4d" });
5371
5700
  case "0603":
5372
- return /* @__PURE__ */ jsx69(A0603, { color: "#856c4d" });
5701
+ return /* @__PURE__ */ jsx71(A0603, { color: "#856c4d" });
5373
5702
  case "0805":
5374
- return /* @__PURE__ */ jsx69(A0805, { color: "#856c4d" });
5703
+ return /* @__PURE__ */ jsx71(A0805, { color: "#856c4d" });
5375
5704
  case "0201":
5376
- return /* @__PURE__ */ jsx69(A0201, { color: "#856c4d" });
5705
+ return /* @__PURE__ */ jsx71(A0201, { color: "#856c4d" });
5377
5706
  case "01005":
5378
- return /* @__PURE__ */ jsx69(A01005, { color: "#856c4d" });
5707
+ return /* @__PURE__ */ jsx71(A01005, { color: "#856c4d" });
5379
5708
  case "1206":
5380
- return /* @__PURE__ */ jsx69(A1206, { color: "#856c4d" });
5709
+ return /* @__PURE__ */ jsx71(A1206, { color: "#856c4d" });
5381
5710
  case "1210":
5382
- return /* @__PURE__ */ jsx69(A1210, { color: "#856c4d" });
5711
+ return /* @__PURE__ */ jsx71(A1210, { color: "#856c4d" });
5383
5712
  case "2010":
5384
- return /* @__PURE__ */ jsx69(A2010, { color: "#856c4d" });
5713
+ return /* @__PURE__ */ jsx71(A2010, { color: "#856c4d" });
5385
5714
  case "2512":
5386
- return /* @__PURE__ */ jsx69(A2512, { color: "#856c4d" });
5715
+ return /* @__PURE__ */ jsx71(A2512, { color: "#856c4d" });
5387
5716
  }
5388
5717
  }
5389
5718
  case "sot235":
5390
- return /* @__PURE__ */ jsx69(SOT_235_default, {});
5719
+ return /* @__PURE__ */ jsx71(SOT_235_default, {});
5391
5720
  case "sot457":
5392
- return /* @__PURE__ */ jsx69(SOT457, {});
5721
+ return /* @__PURE__ */ jsx71(SOT457, {});
5393
5722
  case "sot223":
5394
- return /* @__PURE__ */ jsx69(SOT223, {});
5723
+ return /* @__PURE__ */ jsx71(SOT223, {});
5395
5724
  case "sot23w":
5396
- return /* @__PURE__ */ jsx69(SOT23W, {});
5725
+ return /* @__PURE__ */ jsx71(SOT23W, {});
5397
5726
  case "sot323":
5398
- return /* @__PURE__ */ jsx69(SOT323, {});
5727
+ return /* @__PURE__ */ jsx71(SOT323, {});
5399
5728
  case "sod323f":
5400
- return /* @__PURE__ */ jsx69(SOD323F, {});
5729
+ return /* @__PURE__ */ jsx71(SOD323F, {});
5401
5730
  case "sod323fl":
5402
- return /* @__PURE__ */ jsx69(SOD323FL, {});
5731
+ return /* @__PURE__ */ jsx71(SOD323FL, {});
5403
5732
  case "sot363":
5404
- return /* @__PURE__ */ jsx69(SOT_363_default, {});
5733
+ return /* @__PURE__ */ jsx71(SOT_363_default, {});
5405
5734
  case "sot886":
5406
- return /* @__PURE__ */ jsx69(SOT886, {});
5735
+ return /* @__PURE__ */ jsx71(SOT886, {});
5407
5736
  case "sot963":
5408
- return /* @__PURE__ */ jsx69(SOT963, {});
5737
+ return /* @__PURE__ */ jsx71(SOT963, {});
5409
5738
  case "pushbutton":
5410
- return /* @__PURE__ */ jsx69(
5739
+ return /* @__PURE__ */ jsx71(
5411
5740
  PushButton,
5412
5741
  {
5413
5742
  width: fpJson.w,
@@ -5417,11 +5746,11 @@ var Footprinter3d = ({ footprint }) => {
5417
5746
  );
5418
5747
  case "jst":
5419
5748
  if (fpJson.zh) {
5420
- return /* @__PURE__ */ jsx69(JSTZH1_5mm, { numPins: fpJson.num_pins });
5749
+ return /* @__PURE__ */ jsx71(JSTZH1_5mm, { numPins: fpJson.num_pins });
5421
5750
  }
5422
5751
  break;
5423
5752
  case "fpc":
5424
- return /* @__PURE__ */ jsx69(
5753
+ return /* @__PURE__ */ jsx71(
5425
5754
  FPC,
5426
5755
  {
5427
5756
  pinCount: fpJson.num_pins,
@@ -5440,8 +5769,32 @@ var Footprinter3d = ({ footprint }) => {
5440
5769
  mountPadLength: fpJson.mpl
5441
5770
  }
5442
5771
  );
5772
+ case "rj45":
5773
+ return /* @__PURE__ */ jsx71(
5774
+ RJ45,
5775
+ {
5776
+ bodyWidth: fpJson.w,
5777
+ bodyDepth: fpJson.h,
5778
+ bodyCenterY: fpJson.bodyy,
5779
+ ledPins: fpJson.ledpins || fpJson.num_pins === 14,
5780
+ firstPinLeft: fpJson.firstpinleft,
5781
+ firstPinTop: fpJson.firstpintop,
5782
+ signalPitch: fpJson.p,
5783
+ signalRowPitch: fpJson.py,
5784
+ signalHoleDiameter: fpJson.id,
5785
+ shieldPinX: fpJson.shieldx,
5786
+ shieldPinY: fpJson.shieldy,
5787
+ shieldHoleDiameter: fpJson.shieldid,
5788
+ locatorHoleX: fpJson.holex,
5789
+ locatorHoleY: fpJson.holey,
5790
+ locatorHoleDiameter: fpJson.holed,
5791
+ ledPinX: fpJson.ledx,
5792
+ ledPinPitch: fpJson.ledp,
5793
+ ledPinY: fpJson.ledy
5794
+ }
5795
+ );
5443
5796
  case "soic":
5444
- return /* @__PURE__ */ jsx69(
5797
+ return /* @__PURE__ */ jsx71(
5445
5798
  SOIC,
5446
5799
  {
5447
5800
  pinCount: fpJson.num_pins,
@@ -5452,41 +5805,41 @@ var Footprinter3d = ({ footprint }) => {
5452
5805
  }
5453
5806
  );
5454
5807
  case "sod523":
5455
- return /* @__PURE__ */ jsx69(SOD523, {});
5808
+ return /* @__PURE__ */ jsx71(SOD523, {});
5456
5809
  case "sod723":
5457
- return /* @__PURE__ */ jsx69(SOD723_default, {});
5810
+ return /* @__PURE__ */ jsx71(SOD723_default, {});
5458
5811
  case "sod882":
5459
- return /* @__PURE__ */ jsx69(SOD882, {});
5812
+ return /* @__PURE__ */ jsx71(SOD882, {});
5460
5813
  case "sma":
5461
- return /* @__PURE__ */ jsx69(SMA, {});
5814
+ return /* @__PURE__ */ jsx71(SMA, {});
5462
5815
  case "smb":
5463
- return /* @__PURE__ */ jsx69(SMB, {});
5816
+ return /* @__PURE__ */ jsx71(SMB, {});
5464
5817
  case "smc":
5465
- return /* @__PURE__ */ jsx69(SMC, {});
5818
+ return /* @__PURE__ */ jsx71(SMC, {});
5466
5819
  case "smf":
5467
- return /* @__PURE__ */ jsx69(SMF, {});
5820
+ return /* @__PURE__ */ jsx71(SMF, {});
5468
5821
  case "sod123f":
5469
- return /* @__PURE__ */ jsx69(SOD123F, {});
5822
+ return /* @__PURE__ */ jsx71(SOD123F, {});
5470
5823
  case "sod123fl":
5471
- return /* @__PURE__ */ jsx69(SOD123FL, {});
5824
+ return /* @__PURE__ */ jsx71(SOD123FL, {});
5472
5825
  case "sod123w":
5473
- return /* @__PURE__ */ jsx69(SOD123W, {});
5826
+ return /* @__PURE__ */ jsx71(SOD123W, {});
5474
5827
  case "sod128":
5475
- return /* @__PURE__ */ jsx69(SOD128, {});
5828
+ return /* @__PURE__ */ jsx71(SOD128, {});
5476
5829
  case "sod323":
5477
- return /* @__PURE__ */ jsx69(SOD323, {});
5830
+ return /* @__PURE__ */ jsx71(SOD323, {});
5478
5831
  case "sod923":
5479
- return /* @__PURE__ */ jsx69(SOD923, {});
5832
+ return /* @__PURE__ */ jsx71(SOD923, {});
5480
5833
  case "hc49":
5481
- return /* @__PURE__ */ jsx69(HC49, {});
5834
+ return /* @__PURE__ */ jsx71(HC49, {});
5482
5835
  case "micromelf":
5483
- return /* @__PURE__ */ jsx69(MicroMELF, {});
5836
+ return /* @__PURE__ */ jsx71(MicroMELF, {});
5484
5837
  case "minimelf":
5485
- return /* @__PURE__ */ jsx69(MINIMELF, {});
5838
+ return /* @__PURE__ */ jsx71(MINIMELF, {});
5486
5839
  case "melf":
5487
- return /* @__PURE__ */ jsx69(MELF, {});
5840
+ return /* @__PURE__ */ jsx71(MELF, {});
5488
5841
  case "ms012":
5489
- return /* @__PURE__ */ jsx69(
5842
+ return /* @__PURE__ */ jsx71(
5490
5843
  MS012,
5491
5844
  {
5492
5845
  pinCount: fpJson.num_pins,
@@ -5496,7 +5849,7 @@ var Footprinter3d = ({ footprint }) => {
5496
5849
  }
5497
5850
  );
5498
5851
  case "ms013":
5499
- return /* @__PURE__ */ jsx69(
5852
+ return /* @__PURE__ */ jsx71(
5500
5853
  MS013,
5501
5854
  {
5502
5855
  pinCount: fpJson.num_pins,
@@ -5506,14 +5859,14 @@ var Footprinter3d = ({ footprint }) => {
5506
5859
  }
5507
5860
  );
5508
5861
  case "sot723":
5509
- return /* @__PURE__ */ jsx69(SOT723, {});
5862
+ return /* @__PURE__ */ jsx71(SOT723, {});
5510
5863
  case "to220":
5511
- return /* @__PURE__ */ jsx69(TO220, {});
5864
+ return /* @__PURE__ */ jsx71(TO220, {});
5512
5865
  case "to92":
5513
- return /* @__PURE__ */ jsx69(TO92, {});
5866
+ return /* @__PURE__ */ jsx71(TO92, {});
5514
5867
  case "stampboard":
5515
5868
  case "stampreceiver":
5516
- return /* @__PURE__ */ jsx69(
5869
+ return /* @__PURE__ */ jsx71(
5517
5870
  StampBoard,
5518
5871
  {
5519
5872
  bodyWidth: fpJson.w,
@@ -5537,7 +5890,7 @@ var Footprinter3d = ({ footprint }) => {
5537
5890
  const pinRow = fpJson.pinrow;
5538
5891
  const pinRowHoleEdgeToEdgeDist = fpJson.pinRowHoleEdgeToEdgeDist;
5539
5892
  const holes = Array.isArray(fpJson.holes) ? fpJson.holes : [];
5540
- return /* @__PURE__ */ jsx69(
5893
+ return /* @__PURE__ */ jsx71(
5541
5894
  MountedPcbModule,
5542
5895
  {
5543
5896
  numPins: pinRow,
@@ -5566,29 +5919,29 @@ var Footprinter3d = ({ footprint }) => {
5566
5919
  const color = colorMatch ? colorMatch[1] : void 0;
5567
5920
  switch (fpJson.imperial) {
5568
5921
  case "0402":
5569
- return /* @__PURE__ */ jsx69(A0402, { color });
5922
+ return /* @__PURE__ */ jsx71(A0402, { color });
5570
5923
  case "0603":
5571
- return /* @__PURE__ */ jsx69(A0603, { color });
5924
+ return /* @__PURE__ */ jsx71(A0603, { color });
5572
5925
  case "0805":
5573
- return /* @__PURE__ */ jsx69(A0805, { color });
5926
+ return /* @__PURE__ */ jsx71(A0805, { color });
5574
5927
  case "0201":
5575
- return /* @__PURE__ */ jsx69(A0201, { color });
5928
+ return /* @__PURE__ */ jsx71(A0201, { color });
5576
5929
  case "01005":
5577
- return /* @__PURE__ */ jsx69(A01005, { color });
5930
+ return /* @__PURE__ */ jsx71(A01005, { color });
5578
5931
  case "1206":
5579
- return /* @__PURE__ */ jsx69(A1206, { color });
5932
+ return /* @__PURE__ */ jsx71(A1206, { color });
5580
5933
  case "1210":
5581
- return /* @__PURE__ */ jsx69(A1210, { color });
5934
+ return /* @__PURE__ */ jsx71(A1210, { color });
5582
5935
  case "2010":
5583
- return /* @__PURE__ */ jsx69(A2010, { color });
5936
+ return /* @__PURE__ */ jsx71(A2010, { color });
5584
5937
  case "2512":
5585
- return /* @__PURE__ */ jsx69(A2512, { color });
5938
+ return /* @__PURE__ */ jsx71(A2512, { color });
5586
5939
  }
5587
5940
  return null;
5588
5941
  };
5589
5942
 
5590
5943
  // lib/SOT-23-3P.tsx
5591
- import { Fragment as Fragment63, jsx as jsx70, jsxs as jsxs65 } from "react/jsx-runtime";
5944
+ import { Fragment as Fragment65, jsx as jsx72, jsxs as jsxs67 } from "react/jsx-runtime";
5592
5945
  var SOT233P = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
5593
5946
  const bodyWidth = 1.3;
5594
5947
  const bodyLength10 = 2.9;
@@ -5599,8 +5952,8 @@ var SOT233P = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
5599
5952
  const padContactLength = 0.4;
5600
5953
  const padThickness = leadThickness / 2;
5601
5954
  const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3;
5602
- return /* @__PURE__ */ jsxs65(Fragment63, { children: [
5603
- /* @__PURE__ */ jsx70(
5955
+ return /* @__PURE__ */ jsxs67(Fragment65, { children: [
5956
+ /* @__PURE__ */ jsx72(
5604
5957
  SmdChipLead,
5605
5958
  {
5606
5959
  rotation: Math.PI,
@@ -5617,7 +5970,7 @@ var SOT233P = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
5617
5970
  },
5618
5971
  1
5619
5972
  ),
5620
- /* @__PURE__ */ jsx70(
5973
+ /* @__PURE__ */ jsx72(
5621
5974
  SmdChipLead,
5622
5975
  {
5623
5976
  rotation: Math.PI,
@@ -5634,7 +5987,7 @@ var SOT233P = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
5634
5987
  },
5635
5988
  2
5636
5989
  ),
5637
- /* @__PURE__ */ jsx70(
5990
+ /* @__PURE__ */ jsx72(
5638
5991
  SmdChipLead,
5639
5992
  {
5640
5993
  position: {
@@ -5650,7 +6003,7 @@ var SOT233P = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
5650
6003
  },
5651
6004
  3
5652
6005
  ),
5653
- /* @__PURE__ */ jsx70(
6006
+ /* @__PURE__ */ jsx72(
5654
6007
  ChipBody,
5655
6008
  {
5656
6009
  center: { x: 0, y: 0, z: 0 },
@@ -5663,8 +6016,8 @@ var SOT233P = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
5663
6016
  };
5664
6017
 
5665
6018
  // lib/SOT-563.tsx
5666
- import { Cuboid as Cuboid46, Translate as Translate32, Rotate as Rotate14, Colorize as Colorize38 } from "jscad-fiber";
5667
- import { Fragment as Fragment64, jsx as jsx71, jsxs as jsxs66 } from "react/jsx-runtime";
6019
+ import { Cuboid as Cuboid48, Translate as Translate34, Rotate as Rotate15, Colorize as Colorize40 } from "jscad-fiber";
6020
+ import { Fragment as Fragment66, jsx as jsx73, jsxs as jsxs68 } from "react/jsx-runtime";
5668
6021
  var SOT563 = ({ fullWidth = 1.94, fullLength: fullLength10 = 1.6 }) => {
5669
6022
  const bodyWidth = 1.2;
5670
6023
  const bodyLength10 = 1.6;
@@ -5674,28 +6027,28 @@ var SOT563 = ({ fullWidth = 1.94, fullLength: fullLength10 = 1.6 }) => {
5674
6027
  const leadHeight = 0.13;
5675
6028
  const leadSpacing = 0.5;
5676
6029
  const bodyZOffset = -0.4;
5677
- return /* @__PURE__ */ jsxs66(Fragment64, { children: [
5678
- /* @__PURE__ */ jsx71(Rotate14, { rotation: [45 * Math.PI, 0, 0], children: /* @__PURE__ */ jsx71(Translate32, { center: [0, 0, bodyZOffset], children: /* @__PURE__ */ jsx71(Colorize38, { color: "grey", children: /* @__PURE__ */ jsx71(Cuboid46, { size: [bodyWidth, bodyLength10, bodyHeight] }) }) }) }),
6030
+ return /* @__PURE__ */ jsxs68(Fragment66, { children: [
6031
+ /* @__PURE__ */ jsx73(Rotate15, { rotation: [45 * Math.PI, 0, 0], children: /* @__PURE__ */ jsx73(Translate34, { center: [0, 0, bodyZOffset], children: /* @__PURE__ */ jsx73(Colorize40, { color: "grey", children: /* @__PURE__ */ jsx73(Cuboid48, { size: [bodyWidth, bodyLength10, bodyHeight] }) }) }) }),
5679
6032
  [-1, 0, 1].flatMap((yOffset, index) => [
5680
6033
  // Left lead
5681
- /* @__PURE__ */ jsx71(
5682
- Translate32,
6034
+ /* @__PURE__ */ jsx73(
6035
+ Translate34,
5683
6036
  {
5684
6037
  center: [
5685
6038
  -bodyWidth / 2 - 0.03,
5686
6039
  yOffset * leadSpacing,
5687
6040
  leadHeight / 2
5688
6041
  ],
5689
- children: /* @__PURE__ */ jsx71(Cuboid46, { size: [leadLength, leadWidth, leadHeight] })
6042
+ children: /* @__PURE__ */ jsx73(Cuboid48, { size: [leadLength, leadWidth, leadHeight] })
5690
6043
  },
5691
6044
  `left-${index}`
5692
6045
  ),
5693
6046
  // Right lead
5694
- /* @__PURE__ */ jsx71(
5695
- Translate32,
6047
+ /* @__PURE__ */ jsx73(
6048
+ Translate34,
5696
6049
  {
5697
6050
  center: [bodyWidth / 2 + 0.03, yOffset * leadSpacing, leadHeight / 2],
5698
- children: /* @__PURE__ */ jsx71(Cuboid46, { size: [leadLength, leadWidth, leadHeight] })
6051
+ children: /* @__PURE__ */ jsx73(Cuboid48, { size: [leadLength, leadWidth, leadHeight] })
5699
6052
  },
5700
6053
  `right-${index}`
5701
6054
  )
@@ -5704,7 +6057,7 @@ var SOT563 = ({ fullWidth = 1.94, fullLength: fullLength10 = 1.6 }) => {
5704
6057
  };
5705
6058
 
5706
6059
  // lib/sod-123.tsx
5707
- import { Fragment as Fragment65, jsx as jsx72, jsxs as jsxs67 } from "react/jsx-runtime";
6060
+ import { Fragment as Fragment67, jsx as jsx74, jsxs as jsxs69 } from "react/jsx-runtime";
5708
6061
  var SOD123 = ({ fullWidth = 3.8, fullLength: fullLength10 = 1.6 }) => {
5709
6062
  const bodyWidth = 2.9;
5710
6063
  const bodyLength10 = 1.3;
@@ -5715,8 +6068,8 @@ var SOD123 = ({ fullWidth = 3.8, fullLength: fullLength10 = 1.6 }) => {
5715
6068
  const padContactLength = 0.4;
5716
6069
  const padThickness = leadThickness / 2;
5717
6070
  const bodyDistance = (fullWidth - bodyWidth) / 2;
5718
- return /* @__PURE__ */ jsxs67(Fragment65, { children: [
5719
- /* @__PURE__ */ jsx72(
6071
+ return /* @__PURE__ */ jsxs69(Fragment67, { children: [
6072
+ /* @__PURE__ */ jsx74(
5720
6073
  SmdChipLead,
5721
6074
  {
5722
6075
  position: {
@@ -5732,7 +6085,7 @@ var SOD123 = ({ fullWidth = 3.8, fullLength: fullLength10 = 1.6 }) => {
5732
6085
  },
5733
6086
  1
5734
6087
  ),
5735
- /* @__PURE__ */ jsx72(
6088
+ /* @__PURE__ */ jsx74(
5736
6089
  SmdChipLead,
5737
6090
  {
5738
6091
  rotation: Math.PI,
@@ -5749,7 +6102,7 @@ var SOD123 = ({ fullWidth = 3.8, fullLength: fullLength10 = 1.6 }) => {
5749
6102
  },
5750
6103
  2
5751
6104
  ),
5752
- /* @__PURE__ */ jsx72(
6105
+ /* @__PURE__ */ jsx74(
5753
6106
  ChipBody,
5754
6107
  {
5755
6108
  center: { x: 0, y: 0, z: 0 },
@@ -5796,6 +6149,7 @@ export {
5796
6149
  PinRow,
5797
6150
  QFN,
5798
6151
  QFP,
6152
+ RJ45,
5799
6153
  SMA,
5800
6154
  SMB,
5801
6155
  SMC,
@@ -5824,6 +6178,7 @@ export {
5824
6178
  SOT963,
5825
6179
  Screen,
5826
6180
  SmdChipLead,
6181
+ SmdPinHeader,
5827
6182
  StampBoard,
5828
6183
  TO220,
5829
6184
  TO92,