@tscircuit/3d-viewer 0.0.471 → 0.0.473

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1188 -208
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -24976,10 +24976,12 @@ var DipPinLeg = ({ x, y, z: z135 }) => {
24976
24976
  var Dip = ({
24977
24977
  numPins = 8,
24978
24978
  pitch = 2.54,
24979
- bodyWidth = 6.4
24979
+ bodyWidth = 6.4,
24980
+ rowSpacing
24980
24981
  }) => {
24981
24982
  const numPinsOnEachSide = Math.floor(numPins / 2);
24982
- const crossBodyPinWidth = bodyWidth + 1;
24983
+ const pinRowSpacing = rowSpacing ?? (bodyWidth >= 7 ? bodyWidth : bodyWidth + 1.22);
24984
+ const chipBodyWidth = bodyWidth >= 7 ? pinRowSpacing - 1.22 : bodyWidth;
24983
24985
  return /* @__PURE__ */ jsxs(Fragment22, { children: [
24984
24986
  range(numPins).map((i) => {
24985
24987
  const yRow = i % numPinsOnEachSide;
@@ -24987,7 +24989,7 @@ var Dip = ({
24987
24989
  return /* @__PURE__ */ jsx5(
24988
24990
  DipPinLeg,
24989
24991
  {
24990
- x: xRow * crossBodyPinWidth / 2,
24992
+ x: xRow * pinRowSpacing / 2,
24991
24993
  y: yRow * pitch - (numPinsOnEachSide - 1) / 2 * pitch,
24992
24994
  z: DIP_PIN_HEIGHT / 2 + heightAboveSurface
24993
24995
  },
@@ -24997,7 +24999,7 @@ var Dip = ({
24997
24999
  /* @__PURE__ */ jsx5(
24998
25000
  ChipBody,
24999
25001
  {
25000
- width: bodyWidth,
25002
+ width: chipBodyWidth,
25001
25003
  length: numPinsOnEachSide * pitch + 0.5,
25002
25004
  height: DIP_PIN_HEIGHT - heightAboveSurface,
25003
25005
  heightAboveSurface,
@@ -25343,7 +25345,7 @@ var QFP = ({
25343
25345
  taperRatio: 0.03,
25344
25346
  chamferSize: 0.7,
25345
25347
  notchPosition: {
25346
- x: bodyLength10 / 2 - 1.5,
25348
+ x: -(bodyLength10 / 2 - 1.5),
25347
25349
  y: bodyWidth / 2 - 1.5,
25348
25350
  z: 1.5
25349
25351
  },
@@ -25396,72 +25398,86 @@ var getLeadWidth = (pinCount, width10) => {
25396
25398
  var PinRow = ({
25397
25399
  numberOfPins,
25398
25400
  pitch = 2.54,
25399
- longSidePinLength = 6
25401
+ longSidePinLength = 6,
25402
+ invert,
25403
+ faceup,
25404
+ rows = 1
25400
25405
  }) => {
25401
25406
  const pinThickness = 0.63;
25402
25407
  const bodyHeight = 2;
25403
- const bodyWidth = numberOfPins * pitch;
25408
+ const pinsPerRow = Math.ceil(numberOfPins / rows);
25409
+ const rowSpacing = 2.54;
25410
+ const bodyWidth = pinsPerRow * pitch;
25411
+ const bodyDepth = rows > 1 ? (rows - 1) * rowSpacing + pinThickness * 3 : pinThickness * 3;
25404
25412
  const shortSidePinLength = 3;
25405
- const xoff = -((numberOfPins - 1) / 2) * pitch;
25413
+ const xoff = -((pinsPerRow - 1) / 2) * pitch;
25414
+ const bodyCenterY = rows > 1 ? -((rows - 1) * rowSpacing) / 2 : 0;
25415
+ const flipZ = (z135) => invert || faceup ? -z135 + bodyHeight : z135;
25406
25416
  return /* @__PURE__ */ jsxs(Fragment22, { children: [
25407
25417
  /* @__PURE__ */ jsx5(
25408
25418
  Cuboid,
25409
25419
  {
25410
25420
  color: "#222",
25411
- size: [bodyWidth, pinThickness * 3, bodyHeight],
25412
- center: [0, 0, bodyHeight / 2]
25421
+ size: [bodyWidth, bodyDepth, bodyHeight],
25422
+ center: [0, bodyCenterY, flipZ(bodyHeight / 2)]
25413
25423
  }
25414
25424
  ),
25415
- Array.from({ length: numberOfPins }, (_, i) => /* @__PURE__ */ jsxs(Fragment22, { children: [
25416
- /* @__PURE__ */ jsx5(Colorize, { color: "gold", children: /* @__PURE__ */ jsxs(Hull, { children: [
25417
- /* @__PURE__ */ jsx5(
25418
- Cuboid,
25419
- {
25420
- color: "gold",
25421
- size: [pinThickness, pinThickness, shortSidePinLength * 0.9],
25422
- center: [
25423
- xoff + i * pitch,
25424
- 0,
25425
- bodyHeight * 0.9 + bodyHeight / 2
25426
- ]
25427
- }
25428
- ),
25429
- /* @__PURE__ */ jsx5(
25430
- Cuboid,
25431
- {
25432
- color: "gold",
25433
- size: [
25434
- pinThickness / 1.8,
25435
- pinThickness / 1.8,
25436
- shortSidePinLength
25437
- ],
25438
- center: [xoff + i * pitch, 0, bodyHeight + bodyHeight / 2]
25439
- }
25440
- )
25441
- ] }) }),
25442
- /* @__PURE__ */ jsx5(Colorize, { color: "gold", children: /* @__PURE__ */ jsxs(Hull, { children: [
25443
- /* @__PURE__ */ jsx5(
25444
- Cuboid,
25445
- {
25446
- color: "gold",
25447
- size: [pinThickness, pinThickness, longSidePinLength * 0.9],
25448
- center: [xoff + i * pitch, 0, -longSidePinLength / 2 * 0.9]
25449
- }
25450
- ),
25451
- /* @__PURE__ */ jsx5(
25452
- Cuboid,
25453
- {
25454
- color: "gold",
25455
- size: [
25456
- pinThickness / 1.8,
25457
- pinThickness / 1.8,
25458
- longSidePinLength
25459
- ],
25460
- center: [xoff + i * pitch, 0, -longSidePinLength / 2]
25461
- }
25462
- )
25463
- ] }) })
25464
- ] }))
25425
+ Array.from({ length: numberOfPins }, (_, i) => {
25426
+ const row = Math.floor(i / pinsPerRow);
25427
+ const col = i % pinsPerRow;
25428
+ const x = xoff + col * pitch;
25429
+ const y = -row * rowSpacing;
25430
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
25431
+ !faceup && /* @__PURE__ */ jsx5(Colorize, { color: "gold", children: /* @__PURE__ */ jsxs(Hull, { children: [
25432
+ /* @__PURE__ */ jsx5(
25433
+ Cuboid,
25434
+ {
25435
+ color: "gold",
25436
+ size: [
25437
+ pinThickness,
25438
+ pinThickness,
25439
+ shortSidePinLength * 0.9
25440
+ ],
25441
+ center: [x, y, flipZ(bodyHeight * 0.9 + bodyHeight / 2)]
25442
+ }
25443
+ ),
25444
+ /* @__PURE__ */ jsx5(
25445
+ Cuboid,
25446
+ {
25447
+ color: "gold",
25448
+ size: [
25449
+ pinThickness / 1.8,
25450
+ pinThickness / 1.8,
25451
+ shortSidePinLength
25452
+ ],
25453
+ center: [x, y, flipZ(bodyHeight + bodyHeight / 2)]
25454
+ }
25455
+ )
25456
+ ] }) }, `short-${i}`),
25457
+ /* @__PURE__ */ jsx5(Colorize, { color: "gold", children: /* @__PURE__ */ jsxs(Hull, { children: [
25458
+ /* @__PURE__ */ jsx5(
25459
+ Cuboid,
25460
+ {
25461
+ color: "gold",
25462
+ size: [pinThickness, pinThickness, longSidePinLength * 0.9],
25463
+ center: [x, y, flipZ(-longSidePinLength / 2 * 0.9)]
25464
+ }
25465
+ ),
25466
+ /* @__PURE__ */ jsx5(
25467
+ Cuboid,
25468
+ {
25469
+ color: "gold",
25470
+ size: [
25471
+ pinThickness / 1.8,
25472
+ pinThickness / 1.8,
25473
+ longSidePinLength
25474
+ ],
25475
+ center: [x, y, flipZ(-longSidePinLength / 2)]
25476
+ }
25477
+ )
25478
+ ] }) }, `long-${i}`)
25479
+ ] });
25480
+ })
25465
25481
  ] });
25466
25482
  };
25467
25483
  var getQuadCoords2 = (params) => {
@@ -25724,6 +25740,79 @@ var SOT235 = () => {
25724
25740
  ] });
25725
25741
  };
25726
25742
  var SOT_235_default = SOT235;
25743
+ var SOT23W = ({ fullWidth = 2.9, fullLength: fullLength10 = 2.8 }) => {
25744
+ const bodyWidth = 1.92;
25745
+ const bodyLength10 = 2.9;
25746
+ const bodyHeight = 1.1;
25747
+ const leadWidth = 0.4;
25748
+ const leadThickness = 0.15;
25749
+ const leadHeight = 0.45;
25750
+ const padContactLength = 0.25;
25751
+ const padThickness = leadThickness / 2;
25752
+ const extendedBodyDistance = (fullWidth - bodyWidth) / 2 + 0.3;
25753
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
25754
+ /* @__PURE__ */ jsx5(
25755
+ SmdChipLead,
25756
+ {
25757
+ rotation: Math.PI,
25758
+ position: {
25759
+ x: fullWidth / 2,
25760
+ y: 0,
25761
+ z: padThickness
25762
+ },
25763
+ width: leadWidth,
25764
+ thickness: leadThickness,
25765
+ padContactLength,
25766
+ bodyDistance: extendedBodyDistance,
25767
+ height: leadHeight
25768
+ },
25769
+ 1
25770
+ ),
25771
+ /* @__PURE__ */ jsx5(
25772
+ SmdChipLead,
25773
+ {
25774
+ position: {
25775
+ x: -fullWidth / 2,
25776
+ y: -0.95,
25777
+ z: padThickness
25778
+ },
25779
+ width: leadWidth,
25780
+ thickness: leadThickness,
25781
+ padContactLength,
25782
+ bodyDistance: extendedBodyDistance,
25783
+ height: leadHeight
25784
+ },
25785
+ 2
25786
+ ),
25787
+ /* @__PURE__ */ jsx5(
25788
+ SmdChipLead,
25789
+ {
25790
+ position: {
25791
+ x: -fullWidth / 2,
25792
+ y: 0.95,
25793
+ z: padThickness
25794
+ },
25795
+ width: leadWidth,
25796
+ thickness: leadThickness,
25797
+ padContactLength,
25798
+ bodyDistance: extendedBodyDistance,
25799
+ height: leadHeight
25800
+ },
25801
+ 3
25802
+ ),
25803
+ /* @__PURE__ */ jsx5(
25804
+ ChipBody,
25805
+ {
25806
+ center: { x: 0, y: 0, z: 0 },
25807
+ width: bodyWidth,
25808
+ length: bodyLength10,
25809
+ height: bodyHeight,
25810
+ straightHeightRatio: 0.45,
25811
+ heightAboveSurface: 0.05
25812
+ }
25813
+ )
25814
+ ] });
25815
+ };
25727
25816
  var fullLength4 = 0.6;
25728
25817
  var width4 = 0.3;
25729
25818
  var height4 = 0.33;
@@ -25927,31 +26016,39 @@ var FemaleHeader = ({
25927
26016
  pitch = 2.54,
25928
26017
  legsLength = 3,
25929
26018
  outerDiameter = 0.945,
25930
- innerDiameter = 0.945
26019
+ innerDiameter = 0.945,
26020
+ rows = 1
25931
26021
  }) => {
25932
26022
  const pinThickness = innerDiameter / 1.5;
25933
26023
  const bodyDepth = pinThickness * 2 + outerDiameter;
25934
26024
  const bodyHeight = 5;
25935
- const bodyWidth = (numberOfPins - 1) * pitch + outerDiameter + pitch / 2;
26025
+ const pinsPerRow = Math.ceil(numberOfPins / rows);
26026
+ const rowSpacing = 2.54;
26027
+ const bodyWidth = (pinsPerRow - 1) * pitch + outerDiameter + pitch / 2;
26028
+ const bodyDepthTotal = rows > 1 ? (rows - 1) * rowSpacing + bodyDepth : bodyDepth;
25936
26029
  const gapWidth = pinThickness * 1.6;
25937
- const xoff = -((numberOfPins - 1) / 2) * pitch;
26030
+ const xoff = -((pinsPerRow - 1) / 2) * pitch;
26031
+ const bodyCenterY = rows > 1 ? -((rows - 1) * rowSpacing) / 2 : 0;
25938
26032
  const Body = /* @__PURE__ */ jsx5(Colorize, { color: "#1a1a1a", children: /* @__PURE__ */ jsxs(Subtract, { children: [
25939
26033
  /* @__PURE__ */ jsx5(
25940
26034
  Cuboid,
25941
26035
  {
25942
26036
  color: "#000",
25943
- size: [bodyWidth, bodyDepth, bodyHeight],
25944
- center: [0, 0, bodyHeight / 2]
26037
+ size: [bodyWidth, bodyDepthTotal, bodyHeight],
26038
+ center: [0, bodyCenterY, bodyHeight / 2]
25945
26039
  }
25946
26040
  ),
25947
- Array.from(
25948
- { length: numberOfPins },
25949
- (_, i) => innerDiameter ? /* @__PURE__ */ jsx5(
26041
+ Array.from({ length: numberOfPins }, (_, i) => {
26042
+ const row = Math.floor(i / pinsPerRow);
26043
+ const col = i % pinsPerRow;
26044
+ const x = xoff + col * pitch;
26045
+ const y = -row * rowSpacing;
26046
+ return innerDiameter ? /* @__PURE__ */ jsx5(
25950
26047
  Cylinder,
25951
26048
  {
25952
26049
  height: bodyHeight + 0.1,
25953
26050
  radius: innerDiameter / 2,
25954
- center: [xoff + i * pitch, 0, bodyHeight / 2],
26051
+ center: [x, y, bodyHeight / 2],
25955
26052
  color: "#222"
25956
26053
  },
25957
26054
  i
@@ -25959,42 +26056,48 @@ var FemaleHeader = ({
25959
26056
  Cuboid,
25960
26057
  {
25961
26058
  size: [gapWidth, gapWidth, bodyHeight],
25962
- center: [xoff + i * pitch, 0, bodyHeight / 2]
26059
+ center: [x, y, bodyHeight / 2]
25963
26060
  },
25964
26061
  i
25965
- )
25966
- )
26062
+ );
26063
+ })
25967
26064
  ] }) });
25968
26065
  return /* @__PURE__ */ jsxs(Fragment22, { children: [
25969
26066
  Body,
25970
- Array.from({ length: numberOfPins }, (_, i) => /* @__PURE__ */ jsxs(Colorize, { color: "silver", children: [
25971
- /* @__PURE__ */ jsxs(Hull, { children: [
25972
- /* @__PURE__ */ jsx5(
25973
- Cuboid,
25974
- {
25975
- color: "silver",
25976
- size: [pinThickness, pinThickness, legsLength * 0.9],
25977
- center: [xoff + i * pitch, 0, -legsLength / 2 * 0.9]
25978
- }
25979
- ),
26067
+ Array.from({ length: numberOfPins }, (_, i) => {
26068
+ const row = Math.floor(i / pinsPerRow);
26069
+ const col = i % pinsPerRow;
26070
+ const x = xoff + col * pitch;
26071
+ const y = -row * rowSpacing;
26072
+ return /* @__PURE__ */ jsxs(Colorize, { color: "silver", children: [
26073
+ /* @__PURE__ */ jsxs(Hull, { children: [
26074
+ /* @__PURE__ */ jsx5(
26075
+ Cuboid,
26076
+ {
26077
+ color: "silver",
26078
+ size: [pinThickness, pinThickness, legsLength * 0.9],
26079
+ center: [x, y, -legsLength / 2 * 0.9]
26080
+ }
26081
+ ),
26082
+ /* @__PURE__ */ jsx5(
26083
+ Cuboid,
26084
+ {
26085
+ color: "silver",
26086
+ size: [pinThickness / 1.8, pinThickness / 1.8, legsLength],
26087
+ center: [x, y, -legsLength / 2]
26088
+ }
26089
+ )
26090
+ ] }),
25980
26091
  /* @__PURE__ */ jsx5(
25981
26092
  Cuboid,
25982
26093
  {
25983
26094
  color: "silver",
25984
- size: [pinThickness / 1.8, pinThickness / 1.8, legsLength],
25985
- center: [xoff + i * pitch, 0, -legsLength / 2]
26095
+ size: [gapWidth, gapWidth, gapWidth * 0.5],
26096
+ center: [x, y, gapWidth / 2 * 0.5]
25986
26097
  }
25987
26098
  )
25988
- ] }),
25989
- /* @__PURE__ */ jsx5(
25990
- Cuboid,
25991
- {
25992
- color: "silver",
25993
- size: [gapWidth, gapWidth, gapWidth * 0.5],
25994
- center: [xoff + i * pitch, 0, gapWidth / 2 * 0.5]
25995
- }
25996
- )
25997
- ] }, i))
26099
+ ] }, i);
26100
+ })
25998
26101
  ] });
25999
26102
  };
26000
26103
  var PushButton = ({
@@ -26749,6 +26852,150 @@ var SOD123FL = () => {
26749
26852
  )
26750
26853
  ] });
26751
26854
  };
26855
+ var SOD123W = () => {
26856
+ const fullWidth = 2.6;
26857
+ const bodyLength10 = 1.7;
26858
+ const bodyHeight = 1;
26859
+ const padWidth = 0.9;
26860
+ const padLength = 0.9;
26861
+ const padThickness = 0.2;
26862
+ const leftPadCenterX = -(fullWidth / 2 - 0.075);
26863
+ const rightPadCenterX = fullWidth / 2 - 0.075;
26864
+ const taperOffset = 0.4;
26865
+ const lowerTaperOffset = 0.1;
26866
+ const straightHeight = bodyHeight * 0.2;
26867
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26868
+ /* @__PURE__ */ jsx5(
26869
+ Cuboid,
26870
+ {
26871
+ color: "#ccc",
26872
+ size: [padLength, padWidth, padThickness],
26873
+ center: [leftPadCenterX, 0, padThickness / 2]
26874
+ }
26875
+ ),
26876
+ /* @__PURE__ */ jsx5(
26877
+ Cuboid,
26878
+ {
26879
+ color: "#ccc",
26880
+ size: [padLength, padWidth, padThickness],
26881
+ center: [rightPadCenterX, 0, padThickness / 2]
26882
+ }
26883
+ ),
26884
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
26885
+ /* @__PURE__ */ jsxs(Hull, { children: [
26886
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(
26887
+ Cuboid,
26888
+ {
26889
+ size: [
26890
+ fullWidth - lowerTaperOffset / 2,
26891
+ bodyLength10 - lowerTaperOffset / 2,
26892
+ 0.01
26893
+ ]
26894
+ }
26895
+ ) }),
26896
+ /* @__PURE__ */ jsx5(Translate, { z: 0.01, children: /* @__PURE__ */ jsx5(
26897
+ Cuboid,
26898
+ {
26899
+ size: [
26900
+ fullWidth - lowerTaperOffset,
26901
+ bodyLength10 - lowerTaperOffset,
26902
+ 0.01
26903
+ ]
26904
+ }
26905
+ ) })
26906
+ ] }),
26907
+ /* @__PURE__ */ jsxs(Hull, { children: [
26908
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, 0.01] }) }),
26909
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26910
+ Cuboid,
26911
+ {
26912
+ size: [fullWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26913
+ }
26914
+ ) })
26915
+ ] })
26916
+ ] }) }),
26917
+ /* @__PURE__ */ jsx5(
26918
+ Cuboid,
26919
+ {
26920
+ color: "#777",
26921
+ size: [padThickness * 2.7, bodyLength10 - taperOffset, 0.02],
26922
+ center: [leftPadCenterX + taperOffset, 0, bodyHeight]
26923
+ }
26924
+ )
26925
+ ] });
26926
+ };
26927
+ var SOD128 = () => {
26928
+ const fullWidth = 3.8;
26929
+ const bodyLength10 = 2.5;
26930
+ const bodyHeight = 1;
26931
+ const padWidth = 1.75;
26932
+ const padLength = 0.9;
26933
+ const padThickness = 0.2;
26934
+ const leftPadCenterX = -(fullWidth / 2 - 0.075);
26935
+ const rightPadCenterX = fullWidth / 2 - 0.075;
26936
+ const taperOffset = 0.4;
26937
+ const lowerTaperOffset = 0.05;
26938
+ const straightHeight = bodyHeight * 0.2;
26939
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
26940
+ /* @__PURE__ */ jsx5(
26941
+ Cuboid,
26942
+ {
26943
+ color: "#ccc",
26944
+ size: [padLength, padWidth, padThickness],
26945
+ center: [leftPadCenterX, 0, padThickness / 2]
26946
+ }
26947
+ ),
26948
+ /* @__PURE__ */ jsx5(
26949
+ Cuboid,
26950
+ {
26951
+ color: "#ccc",
26952
+ size: [padLength, padWidth, padThickness],
26953
+ center: [rightPadCenterX, 0, padThickness / 2]
26954
+ }
26955
+ ),
26956
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
26957
+ /* @__PURE__ */ jsxs(Hull, { children: [
26958
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(
26959
+ Cuboid,
26960
+ {
26961
+ size: [
26962
+ fullWidth - lowerTaperOffset / 2,
26963
+ bodyLength10 - lowerTaperOffset / 2,
26964
+ 0.01
26965
+ ]
26966
+ }
26967
+ ) }),
26968
+ /* @__PURE__ */ jsx5(Translate, { z: 0.01, children: /* @__PURE__ */ jsx5(
26969
+ Cuboid,
26970
+ {
26971
+ size: [
26972
+ fullWidth - lowerTaperOffset,
26973
+ bodyLength10 - lowerTaperOffset,
26974
+ 0.01
26975
+ ]
26976
+ }
26977
+ ) })
26978
+ ] }),
26979
+ /* @__PURE__ */ jsxs(Hull, { children: [
26980
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, 0.01] }) }),
26981
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
26982
+ Cuboid,
26983
+ {
26984
+ size: [fullWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
26985
+ }
26986
+ ) })
26987
+ ] })
26988
+ ] }) }),
26989
+ /* @__PURE__ */ jsx5(
26990
+ Cuboid,
26991
+ {
26992
+ color: "#777",
26993
+ size: [padThickness * 2.7, bodyLength10 - taperOffset, 0.02],
26994
+ center: [leftPadCenterX + taperOffset, 0, bodyHeight]
26995
+ }
26996
+ )
26997
+ ] });
26998
+ };
26752
26999
  var SOD923 = () => {
26753
27000
  const fullWidth = 0.8;
26754
27001
  const bodyLength10 = 0.6;
@@ -26974,7 +27221,7 @@ var TQFP = () => {
26974
27221
  height: 1.2,
26975
27222
  chamferSize: 0.7,
26976
27223
  taperRatio: 0.05,
26977
- notchPosition: { x: 3.5, y: 3.5, z: 1.2 },
27224
+ notchPosition: { x: -3.5, y: 3.5, z: 1.2 },
26978
27225
  notchRadius: 1.2 / 2
26979
27226
  }
26980
27227
  )
@@ -27158,7 +27405,7 @@ var LQFP = ({
27158
27405
  taperRatio: 0.04,
27159
27406
  chamferSize: 0.7,
27160
27407
  notchPosition: {
27161
- x: bodyLength10 / 2 - 1.5,
27408
+ x: -(bodyLength10 / 2 - 1.5),
27162
27409
  y: bodyLength10 / 2 - 1.5,
27163
27410
  z: 1.5
27164
27411
  },
@@ -27267,7 +27514,7 @@ var DFN = ({
27267
27514
  chamferSize: 0.2,
27268
27515
  taperRatio: 0,
27269
27516
  notchPosition: {
27270
- x: bodyWidth / 2 - padLength,
27517
+ x: -(bodyWidth / 2 - padLength),
27271
27518
  y: bodyLength10 / 2 - padLength,
27272
27519
  z: bodyThickness
27273
27520
  }
@@ -27501,140 +27748,788 @@ var MELF = ({
27501
27748
  ) }) })
27502
27749
  ] });
27503
27750
  };
27504
- var MS012 = ({
27505
- pinCount,
27506
- padContactLength = 0.6,
27507
- leadWidth = 0.41,
27508
- pitch = 1.27
27509
- }) => {
27510
- if (pinCount % 2 !== 0) {
27511
- throw new Error("MS012 pinCount must be even");
27512
- }
27513
- const sidePinCount = pinCount / 2;
27514
- const bodyWidth = 4.9;
27515
- const bodyLength10 = 3.9;
27516
- const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
27517
- const leadThickness = 0.2;
27751
+ var MS012 = ({
27752
+ pinCount,
27753
+ padContactLength = 0.6,
27754
+ leadWidth = 0.41,
27755
+ pitch = 1.27
27756
+ }) => {
27757
+ if (pinCount % 2 !== 0) {
27758
+ throw new Error("MS012 pinCount must be even");
27759
+ }
27760
+ const sidePinCount = pinCount / 2;
27761
+ const bodyWidth = 4.9;
27762
+ const bodyLength10 = 3.9;
27763
+ const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
27764
+ const leadThickness = 0.2;
27765
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27766
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
27767
+ SmdChipLead,
27768
+ {
27769
+ position: {
27770
+ x: -bodyLength10 / 2 - padContactLength - 0.3,
27771
+ y: i * pitch - pinOffsetToCenter,
27772
+ z: leadThickness / 2
27773
+ },
27774
+ width: leadWidth,
27775
+ thickness: leadThickness,
27776
+ padContactLength,
27777
+ bodyDistance: padContactLength + 0.4,
27778
+ height: 0.85
27779
+ },
27780
+ i
27781
+ )),
27782
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
27783
+ SmdChipLead,
27784
+ {
27785
+ rotation: Math.PI,
27786
+ position: {
27787
+ x: bodyLength10 / 2 + padContactLength + 0.3,
27788
+ y: i * pitch - pinOffsetToCenter,
27789
+ z: leadThickness / 2
27790
+ },
27791
+ width: leadWidth,
27792
+ thickness: leadThickness,
27793
+ padContactLength,
27794
+ bodyDistance: padContactLength + 0.4,
27795
+ height: 0.85
27796
+ },
27797
+ `right-${i}`
27798
+ )),
27799
+ /* @__PURE__ */ jsx5(
27800
+ ChipBody,
27801
+ {
27802
+ center: { x: 0, y: 0, z: leadThickness / 2 },
27803
+ width: bodyLength10,
27804
+ length: bodyWidth,
27805
+ height: 1.55,
27806
+ notchPosition: {
27807
+ x: -(bodyLength10 / 2 - 1),
27808
+ y: bodyWidth / 2 - 1,
27809
+ z: 1.55
27810
+ },
27811
+ heightAboveSurface: 0.17,
27812
+ taperRatio: 0.09
27813
+ }
27814
+ )
27815
+ ] });
27816
+ };
27817
+ var MS013 = ({
27818
+ pinCount = 16,
27819
+ padContactLength = 0.6,
27820
+ leadWidth = 0.41,
27821
+ pitch = 1.27
27822
+ }) => {
27823
+ if (pinCount !== 16) {
27824
+ throw new Error("MS013 only supports 16 pins");
27825
+ }
27826
+ const sidePinCount = pinCount / 2;
27827
+ const bodyWidth = 7.5;
27828
+ const bodyLength10 = 10.3;
27829
+ const pinOffsetToCenter = (sidePinCount - 1) * pitch / 2;
27830
+ const leadThickness = 0.2;
27831
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27832
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
27833
+ SmdChipLead,
27834
+ {
27835
+ position: {
27836
+ x: -bodyWidth / 2 - padContactLength - 0.3,
27837
+ y: i * pitch - pinOffsetToCenter,
27838
+ z: leadThickness / 2
27839
+ },
27840
+ width: leadWidth,
27841
+ thickness: leadThickness,
27842
+ padContactLength,
27843
+ bodyDistance: padContactLength + 0.4,
27844
+ height: 0.85
27845
+ },
27846
+ i
27847
+ )),
27848
+ Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
27849
+ SmdChipLead,
27850
+ {
27851
+ rotation: Math.PI,
27852
+ position: {
27853
+ x: bodyWidth / 2 + padContactLength + 0.3,
27854
+ y: i * pitch - pinOffsetToCenter,
27855
+ z: leadThickness / 2
27856
+ },
27857
+ width: leadWidth,
27858
+ thickness: leadThickness,
27859
+ padContactLength,
27860
+ bodyDistance: padContactLength + 0.4,
27861
+ height: 0.85
27862
+ },
27863
+ `right-${i}`
27864
+ )),
27865
+ /* @__PURE__ */ jsx5(
27866
+ ChipBody,
27867
+ {
27868
+ center: { x: 0, y: 0, z: leadThickness / 2 },
27869
+ width: bodyWidth,
27870
+ length: bodyLength10,
27871
+ height: 1.1,
27872
+ notchPosition: {
27873
+ x: -(bodyWidth / 2 - 1.5),
27874
+ y: bodyLength10 / 2 - 1.5,
27875
+ z: 1.1
27876
+ },
27877
+ heightAboveSurface: 0.17,
27878
+ taperRatio: 0.05
27879
+ }
27880
+ )
27881
+ ] });
27882
+ };
27883
+ var TO220 = () => {
27884
+ const fullLength10 = 20;
27885
+ const bodyLength10 = 9.9;
27886
+ const bodyHeight = 4.5;
27887
+ const zOffset = 1;
27888
+ const padWidth = 9.9;
27889
+ const padLength = 6.5;
27890
+ const padThickness = 1.3;
27891
+ const padHoleDiameter = 3;
27892
+ const prongWidth = 0.81;
27893
+ const prongLength = 16;
27894
+ const prongHeight = 0.5;
27895
+ const prongPitch = 2.7;
27896
+ const bodyWidth = padWidth;
27897
+ const bodyFrontX = fullLength10 - bodyLength10 / 2;
27898
+ const bodyBackX = fullLength10 + bodyLength10 / 2;
27899
+ const prongCenterX = bodyFrontX - prongLength / 2;
27900
+ const padCenterX = bodyBackX + padLength / 2;
27901
+ return /* @__PURE__ */ jsx5(Translate, { center: [0, 0, zOffset], children: /* @__PURE__ */ jsxs(Fragment22, { children: [
27902
+ /* @__PURE__ */ jsxs(Rotate, { rotation: [0, 55, -55], children: [
27903
+ /* @__PURE__ */ jsxs(Subtract, { children: [
27904
+ /* @__PURE__ */ jsx5(
27905
+ Cuboid,
27906
+ {
27907
+ color: "#ccc",
27908
+ size: [padLength + 0.1, padWidth, padThickness],
27909
+ center: [padCenterX, 0, padThickness - 2]
27910
+ }
27911
+ ),
27912
+ /* @__PURE__ */ jsx5(
27913
+ Cylinder,
27914
+ {
27915
+ color: "black",
27916
+ center: [padCenterX, 0, padThickness - 2],
27917
+ radius: padHoleDiameter / 2,
27918
+ height: padThickness * 1.2
27919
+ }
27920
+ )
27921
+ ] }),
27922
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsx5(
27923
+ ChipBody,
27924
+ {
27925
+ width: bodyWidth,
27926
+ length: bodyLength10,
27927
+ height: bodyHeight,
27928
+ center: { x: fullLength10, y: 0, z: -2.4 },
27929
+ includeNotch: false,
27930
+ straightHeightRatio: 0.3,
27931
+ taperRatio: 0.04,
27932
+ heightAboveSurface: 1
27933
+ }
27934
+ ) })
27935
+ ] }),
27936
+ /* @__PURE__ */ jsx5(Rotate, { rotation: [0, 55, 55], children: Array.from({ length: 3 }).map((_, i) => {
27937
+ const x = prongCenterX;
27938
+ const y = (i - 1) * prongPitch;
27939
+ const z135 = -prongHeight - 0.6;
27940
+ return /* @__PURE__ */ jsxs(Colorize, { color: "gold", children: [
27941
+ /* @__PURE__ */ jsxs(Hull, { children: [
27942
+ /* @__PURE__ */ jsx5(Translate, { center: [bodyFrontX - bodyHeight / 2 + 0.1, y, z135], children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyHeight, prongWidth + 1, prongHeight] }) }),
27943
+ /* @__PURE__ */ jsx5(
27944
+ Translate,
27945
+ {
27946
+ center: [bodyFrontX - bodyHeight / 2 - 1 + 0.1, y, z135],
27947
+ children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyHeight, prongWidth, prongHeight] })
27948
+ }
27949
+ )
27950
+ ] }),
27951
+ /* @__PURE__ */ jsx5(Translate, { center: [x, y, z135], children: /* @__PURE__ */ jsx5(Cuboid, { size: [prongLength + 0.1, prongWidth, prongHeight] }) })
27952
+ ] }, `prong-${i}`);
27953
+ }) })
27954
+ ] }) });
27955
+ };
27956
+ var SOT457 = () => {
27957
+ const fullWidth = 2.8;
27958
+ const bodyWidth = 1.6;
27959
+ const bodyLength10 = 2.9;
27960
+ const bodyHeight = 1.2;
27961
+ const leadWidth = 0.4;
27962
+ const leadThickness = 0.15;
27963
+ const leadHeight = 0.95;
27964
+ const padContactLength = 0.5;
27965
+ const padPitch = 0.95;
27966
+ const extendedBodyDistance = fullWidth - bodyWidth;
27967
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
27968
+ /* @__PURE__ */ jsx5(
27969
+ SmdChipLead,
27970
+ {
27971
+ rotation: Math.PI,
27972
+ position: {
27973
+ x: fullWidth / 2 + extendedBodyDistance / 4,
27974
+ y: -padPitch,
27975
+ z: leadThickness / 2
27976
+ },
27977
+ width: leadWidth,
27978
+ thickness: leadThickness,
27979
+ padContactLength,
27980
+ bodyDistance: extendedBodyDistance,
27981
+ height: leadHeight
27982
+ },
27983
+ 1
27984
+ ),
27985
+ /* @__PURE__ */ jsx5(
27986
+ SmdChipLead,
27987
+ {
27988
+ rotation: Math.PI,
27989
+ position: {
27990
+ x: fullWidth / 2 + extendedBodyDistance / 4,
27991
+ y: 0,
27992
+ z: leadThickness / 2
27993
+ },
27994
+ width: leadWidth,
27995
+ thickness: leadThickness,
27996
+ padContactLength,
27997
+ bodyDistance: extendedBodyDistance,
27998
+ height: leadHeight
27999
+ },
28000
+ 2
28001
+ ),
28002
+ /* @__PURE__ */ jsx5(
28003
+ SmdChipLead,
28004
+ {
28005
+ rotation: Math.PI,
28006
+ position: {
28007
+ x: fullWidth / 2 + extendedBodyDistance / 4,
28008
+ y: padPitch,
28009
+ z: leadThickness / 2
28010
+ },
28011
+ width: leadWidth,
28012
+ thickness: leadThickness,
28013
+ padContactLength,
28014
+ bodyDistance: extendedBodyDistance,
28015
+ height: leadHeight
28016
+ },
28017
+ 3
28018
+ ),
28019
+ /* @__PURE__ */ jsx5(
28020
+ SmdChipLead,
28021
+ {
28022
+ position: {
28023
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
28024
+ y: 0,
28025
+ z: leadThickness / 2
28026
+ },
28027
+ width: leadWidth,
28028
+ thickness: leadThickness,
28029
+ padContactLength,
28030
+ bodyDistance: extendedBodyDistance,
28031
+ height: leadHeight
28032
+ },
28033
+ 3
28034
+ ),
28035
+ /* @__PURE__ */ jsx5(
28036
+ SmdChipLead,
28037
+ {
28038
+ position: {
28039
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
28040
+ y: -padPitch,
28041
+ z: leadThickness / 2
28042
+ },
28043
+ width: leadWidth,
28044
+ thickness: leadThickness,
28045
+ padContactLength,
28046
+ bodyDistance: extendedBodyDistance,
28047
+ height: leadHeight
28048
+ },
28049
+ 1
28050
+ ),
28051
+ /* @__PURE__ */ jsx5(
28052
+ SmdChipLead,
28053
+ {
28054
+ position: {
28055
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
28056
+ y: padPitch,
28057
+ z: leadThickness / 2
28058
+ },
28059
+ width: leadWidth,
28060
+ thickness: leadThickness,
28061
+ padContactLength,
28062
+ bodyDistance: extendedBodyDistance,
28063
+ height: leadHeight
28064
+ },
28065
+ 2
28066
+ ),
28067
+ /* @__PURE__ */ jsx5(
28068
+ ChipBody,
28069
+ {
28070
+ center: { x: 0, y: 0, z: 0 },
28071
+ width: bodyWidth,
28072
+ length: bodyLength10,
28073
+ height: bodyHeight,
28074
+ straightHeightRatio: 0.6,
28075
+ notchPosition: {
28076
+ x: -(bodyWidth / 2 - 0.4),
28077
+ y: bodyHeight / 2 + 0.4,
28078
+ z: bodyHeight + 0.05
28079
+ },
28080
+ notchRadius: 0.1
28081
+ }
28082
+ )
28083
+ ] });
28084
+ };
28085
+ var SOT963 = () => {
28086
+ const bodyWidth = 0.8;
28087
+ const bodyLength10 = 1;
28088
+ const bodyHeight = 0.37;
28089
+ const terminalWidth = 0.15;
28090
+ const terminalLength = 0.19;
28091
+ const terminalThickness = 0.12;
28092
+ const pitch = 0.35;
28093
+ const pinsPerSide = 3;
28094
+ const pinSpan = pitch * (pinsPerSide - 1);
28095
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
28096
+ /* @__PURE__ */ jsx5(
28097
+ ChipBody,
28098
+ {
28099
+ center: { x: 0, y: 0, z: 0 },
28100
+ width: bodyWidth,
28101
+ length: bodyLength10,
28102
+ height: bodyHeight,
28103
+ heightAboveSurface: 0,
28104
+ color: "#1a1a1a",
28105
+ taperRatio: 0.15,
28106
+ straightHeightRatio: 0,
28107
+ notchPosition: {
28108
+ x: -bodyWidth / 4,
28109
+ y: pinSpan / 2.2,
28110
+ z: bodyHeight + 0.1
28111
+ }
28112
+ }
28113
+ ),
28114
+ [0, 1, 2].map((i) => {
28115
+ const y = -pinSpan / 2 + i * pitch;
28116
+ return /* @__PURE__ */ jsx5(
28117
+ Cuboid,
28118
+ {
28119
+ center: [
28120
+ -bodyWidth / 2 + terminalLength / 2 - 0.1,
28121
+ y,
28122
+ terminalThickness / 2
28123
+ ],
28124
+ size: [terminalLength, terminalWidth, terminalThickness]
28125
+ },
28126
+ `left-${i}`
28127
+ );
28128
+ }),
28129
+ [0, 1, 2].map((i) => {
28130
+ const y = -pinSpan / 2 + i * pitch;
28131
+ return /* @__PURE__ */ jsx5(
28132
+ Cuboid,
28133
+ {
28134
+ center: [
28135
+ bodyWidth / 2 - terminalLength / 2 + 0.1,
28136
+ y,
28137
+ terminalThickness / 2
28138
+ ],
28139
+ size: [terminalLength, terminalWidth, terminalThickness]
28140
+ },
28141
+ `right-${i}`
28142
+ );
28143
+ })
28144
+ ] });
28145
+ };
28146
+ var TO92 = () => {
28147
+ const bodyRadius = 2.4;
28148
+ const bodyHeight = 4.5;
28149
+ const flatCut = 1.1;
28150
+ const legWidth = 0.4;
28151
+ const legThickness = 0.25;
28152
+ const bodyZ = bodyHeight / 2;
28153
+ const bodyColor = "#222";
28154
+ const leadLength = 0.43;
28155
+ const leadTipSize = [leadLength, legWidth, 1.32];
28156
+ const leadSmallSize = [
28157
+ leadLength,
28158
+ legWidth,
28159
+ legThickness
28160
+ ];
28161
+ const leadTipPos1 = [0, 0, -0.66];
28162
+ const leadMidPosA = [0, 0, -1.32];
28163
+ const leadMidPosB = [0, 1.28, -2.72];
28164
+ const leadTipPos2 = [0, 1.28, -8.9];
28165
+ const sideLeadZ = -7.5;
28166
+ return /* @__PURE__ */ jsxs(Translate, { center: [0, 1, 10.5], children: [
28167
+ /* @__PURE__ */ jsx5(Colorize, { color: bodyColor, children: /* @__PURE__ */ jsxs(Subtract, { children: [
28168
+ /* @__PURE__ */ jsx5(Translate, { center: [0, 0, bodyZ], children: /* @__PURE__ */ jsx5(Cylinder, { radius: bodyRadius, height: bodyHeight }) }),
28169
+ /* @__PURE__ */ jsx5(Translate, { center: [0, -(bodyRadius - flatCut / 2), bodyZ], children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyRadius * 2, flatCut, bodyHeight + 0.2] }) })
28170
+ ] }) }),
28171
+ /* @__PURE__ */ jsx5(Translate, { center: leadTipPos1, children: /* @__PURE__ */ jsx5(Cuboid, { size: leadTipSize }) }),
28172
+ /* @__PURE__ */ jsxs(Hull, { children: [
28173
+ /* @__PURE__ */ jsx5(Translate, { center: leadMidPosA, children: /* @__PURE__ */ jsx5(Cuboid, { size: leadSmallSize }) }),
28174
+ /* @__PURE__ */ jsx5(Translate, { center: leadMidPosB, children: /* @__PURE__ */ jsx5(Cuboid, { size: leadSmallSize }) })
28175
+ ] }),
28176
+ /* @__PURE__ */ jsx5(Translate, { center: leadTipPos2, children: /* @__PURE__ */ jsx5(Cuboid, { size: [leadLength, legWidth, 12.2] }) }),
28177
+ /* @__PURE__ */ jsx5(Translate, { center: [1.3, 0, sideLeadZ], children: /* @__PURE__ */ jsx5(Cuboid, { size: [leadLength, legWidth, 15] }) }),
28178
+ /* @__PURE__ */ jsx5(Translate, { center: [-1.3, 0, sideLeadZ], children: /* @__PURE__ */ jsx5(Cuboid, { size: [leadLength, legWidth, 15] }) })
28179
+ ] });
28180
+ };
28181
+ var SOT363 = () => {
28182
+ const fullWidth = 2;
28183
+ const bodyWidth = 1.25;
28184
+ const bodyLength10 = 2;
28185
+ const bodyHeight = 1.1;
28186
+ const leadWidth = 0.25;
28187
+ const leadThickness = 0.15;
28188
+ const leadHeight = 0.85;
28189
+ const padContactLength = 0.3;
28190
+ const extendedBodyDistance = fullWidth - bodyWidth;
28191
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
28192
+ /* @__PURE__ */ jsx5(
28193
+ SmdChipLead,
28194
+ {
28195
+ rotation: Math.PI,
28196
+ position: {
28197
+ x: fullWidth / 2 + extendedBodyDistance / 4,
28198
+ y: -0.65,
28199
+ z: leadThickness / 2
28200
+ },
28201
+ width: leadWidth,
28202
+ thickness: leadThickness,
28203
+ padContactLength,
28204
+ bodyDistance: extendedBodyDistance,
28205
+ height: leadHeight
28206
+ },
28207
+ 1
28208
+ ),
28209
+ /* @__PURE__ */ jsx5(
28210
+ SmdChipLead,
28211
+ {
28212
+ rotation: Math.PI,
28213
+ position: {
28214
+ x: fullWidth / 2 + extendedBodyDistance / 4,
28215
+ y: 0,
28216
+ z: leadThickness / 2
28217
+ },
28218
+ width: leadWidth,
28219
+ thickness: leadThickness,
28220
+ padContactLength,
28221
+ bodyDistance: extendedBodyDistance,
28222
+ height: leadHeight
28223
+ },
28224
+ 2
28225
+ ),
28226
+ /* @__PURE__ */ jsx5(
28227
+ SmdChipLead,
28228
+ {
28229
+ rotation: Math.PI,
28230
+ position: {
28231
+ x: fullWidth / 2 + extendedBodyDistance / 4,
28232
+ y: 0.65,
28233
+ z: leadThickness / 2
28234
+ },
28235
+ width: leadWidth,
28236
+ thickness: leadThickness,
28237
+ padContactLength,
28238
+ bodyDistance: extendedBodyDistance,
28239
+ height: leadHeight
28240
+ },
28241
+ 3
28242
+ ),
28243
+ /* @__PURE__ */ jsx5(
28244
+ SmdChipLead,
28245
+ {
28246
+ position: {
28247
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
28248
+ y: 0,
28249
+ z: leadThickness / 2
28250
+ },
28251
+ width: leadWidth,
28252
+ thickness: leadThickness,
28253
+ padContactLength,
28254
+ bodyDistance: extendedBodyDistance,
28255
+ height: leadHeight
28256
+ },
28257
+ 3
28258
+ ),
28259
+ /* @__PURE__ */ jsx5(
28260
+ SmdChipLead,
28261
+ {
28262
+ position: {
28263
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
28264
+ y: -0.65,
28265
+ z: leadThickness / 2
28266
+ },
28267
+ width: leadWidth,
28268
+ thickness: leadThickness,
28269
+ padContactLength,
28270
+ bodyDistance: extendedBodyDistance,
28271
+ height: leadHeight
28272
+ },
28273
+ 1
28274
+ ),
28275
+ /* @__PURE__ */ jsx5(
28276
+ SmdChipLead,
28277
+ {
28278
+ position: {
28279
+ x: -fullWidth / 2 - extendedBodyDistance / 4,
28280
+ y: 0.65,
28281
+ z: leadThickness / 2
28282
+ },
28283
+ width: leadWidth,
28284
+ thickness: leadThickness,
28285
+ padContactLength,
28286
+ bodyDistance: extendedBodyDistance,
28287
+ height: leadHeight
28288
+ },
28289
+ 2
28290
+ ),
28291
+ /* @__PURE__ */ jsx5(
28292
+ ChipBody,
28293
+ {
28294
+ center: { x: 0, y: 0, z: 0 },
28295
+ width: bodyWidth,
28296
+ length: bodyLength10,
28297
+ height: bodyHeight,
28298
+ straightHeightRatio: 0.6,
28299
+ notchPosition: {
28300
+ x: -(bodyWidth / 2 - 0.25),
28301
+ y: bodyHeight / 2 + 0.2,
28302
+ z: bodyHeight
28303
+ },
28304
+ heightAboveSurface: 0.1
28305
+ }
28306
+ )
28307
+ ] });
28308
+ };
28309
+ var SOT_363_default = SOT363;
28310
+ var SOT886 = () => {
28311
+ const bodyWidth = 1;
28312
+ const bodyLength10 = 1.45;
28313
+ const bodyHeight = 0.5;
28314
+ const terminalWidth = 0.2;
28315
+ const terminalLength = 0.3;
28316
+ const terminalThickness = 0.05;
28317
+ const pitch = 0.5;
28318
+ const pinsPerSide = 3;
28319
+ const pinSpan = pitch * (pinsPerSide - 1);
28320
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
28321
+ /* @__PURE__ */ jsx5(
28322
+ ChipBody,
28323
+ {
28324
+ center: { x: 0, y: 0, z: terminalThickness },
28325
+ width: bodyWidth,
28326
+ length: bodyLength10,
28327
+ height: bodyHeight,
28328
+ heightAboveSurface: 0,
28329
+ color: "#1a1a1a",
28330
+ taperRatio: 0,
28331
+ includeNotch: false
28332
+ }
28333
+ ),
28334
+ [0, 1, 2].map((i) => {
28335
+ const y = -pinSpan / 2 + i * pitch;
28336
+ return /* @__PURE__ */ jsx5(
28337
+ Cuboid,
28338
+ {
28339
+ center: [
28340
+ -bodyWidth / 2 + terminalLength / 2,
28341
+ y,
28342
+ terminalThickness / 2
28343
+ ],
28344
+ size: [terminalLength, terminalWidth, terminalThickness]
28345
+ },
28346
+ `left-${i}`
28347
+ );
28348
+ }),
28349
+ [0, 1, 2].map((i) => {
28350
+ const y = -pinSpan / 2 + i * pitch;
28351
+ return /* @__PURE__ */ jsx5(
28352
+ Cuboid,
28353
+ {
28354
+ center: [
28355
+ bodyWidth / 2 - terminalLength / 2,
28356
+ y,
28357
+ terminalThickness / 2
28358
+ ],
28359
+ size: [terminalLength, terminalWidth, terminalThickness]
28360
+ },
28361
+ `right-${i}`
28362
+ );
28363
+ })
28364
+ ] });
28365
+ };
28366
+ var SOD323 = () => {
28367
+ const fullWidth = 2.5;
28368
+ const bodyLength10 = 1.25;
28369
+ const bodyWidth = 1.7;
28370
+ const bodyHeight = 0.95;
28371
+ const leadWidth = 0.3;
28372
+ const leadThickness = 0.175;
28373
+ const padContactLength = 0.3;
28374
+ const padCenterX = bodyWidth / 2;
28375
+ const bodyDistance = 0.45;
28376
+ const leadHeight = 0.7;
27518
28377
  return /* @__PURE__ */ jsxs(Fragment22, { children: [
27519
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
28378
+ /* @__PURE__ */ jsx5(
27520
28379
  SmdChipLead,
27521
28380
  {
27522
28381
  position: {
27523
- x: -bodyLength10 / 2 - padContactLength - 0.3,
27524
- y: i * pitch - pinOffsetToCenter,
28382
+ x: -fullWidth / 2,
28383
+ y: 0,
27525
28384
  z: leadThickness / 2
27526
28385
  },
27527
28386
  width: leadWidth,
27528
28387
  thickness: leadThickness,
27529
28388
  padContactLength,
27530
- bodyDistance: padContactLength + 0.4,
27531
- height: 0.85
28389
+ bodyDistance,
28390
+ height: leadHeight
27532
28391
  },
27533
- i
27534
- )),
27535
- Array.from({ length: sidePinCount }).map((_, i) => /* @__PURE__ */ jsx5(
28392
+ 1
28393
+ ),
28394
+ /* @__PURE__ */ jsx5(
27536
28395
  SmdChipLead,
27537
28396
  {
27538
28397
  rotation: Math.PI,
27539
28398
  position: {
27540
- x: bodyLength10 / 2 + padContactLength + 0.3,
27541
- y: i * pitch - pinOffsetToCenter,
28399
+ x: fullWidth / 2,
28400
+ y: 0,
27542
28401
  z: leadThickness / 2
27543
28402
  },
27544
28403
  width: leadWidth,
27545
28404
  thickness: leadThickness,
27546
28405
  padContactLength,
27547
- bodyDistance: padContactLength + 0.4,
27548
- height: 0.85
28406
+ bodyDistance,
28407
+ height: leadHeight
27549
28408
  },
27550
- `right-${i}`
27551
- )),
27552
- /* @__PURE__ */ jsx5(
28409
+ 1
28410
+ ),
28411
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsx5(
27553
28412
  ChipBody,
27554
28413
  {
27555
- center: { x: 0, y: 0, z: leadThickness / 2 },
27556
- width: bodyLength10,
27557
- length: bodyWidth,
27558
- height: 1.55,
27559
- notchPosition: { x: bodyLength10 / 2 - 1, y: bodyWidth / 2 - 1, z: 1.55 },
27560
- heightAboveSurface: 0.17,
27561
- taperRatio: 0.09
28414
+ center: { x: 0, y: 0, z: 0 },
28415
+ width: bodyWidth,
28416
+ length: bodyLength10,
28417
+ height: bodyHeight,
28418
+ includeNotch: false,
28419
+ taperRatio: 0.06,
28420
+ straightHeightRatio: 0.7,
28421
+ heightAboveSurface: 0.05
28422
+ }
28423
+ ) }),
28424
+ /* @__PURE__ */ jsx5(
28425
+ Cuboid,
28426
+ {
28427
+ color: "#777",
28428
+ size: [bodyWidth / 3, bodyLength10 - 0.075, 0.02],
28429
+ center: [-padCenterX * 2 / 3 + 0.035, 0, bodyHeight + 0.05]
27562
28430
  }
27563
28431
  )
27564
28432
  ] });
27565
28433
  };
27566
- var TO220 = () => {
27567
- const fullLength10 = 20;
27568
- const bodyLength10 = 9.9;
27569
- const bodyHeight = 4.5;
27570
- const zOffset = 1;
27571
- const padWidth = 9.9;
27572
- const padLength = 6.5;
27573
- const padThickness = 1.3;
27574
- const padHoleDiameter = 3;
27575
- const prongWidth = 0.81;
27576
- const prongLength = 16;
27577
- const prongHeight = 0.5;
27578
- const prongPitch = 2.7;
27579
- const bodyWidth = padWidth;
27580
- const bodyFrontX = fullLength10 - bodyLength10 / 2;
27581
- const bodyBackX = fullLength10 + bodyLength10 / 2;
27582
- const prongCenterX = bodyFrontX - prongLength / 2;
27583
- const padCenterX = bodyBackX + padLength / 2;
27584
- return /* @__PURE__ */ jsx5(Translate, { center: [0, 0, zOffset], children: /* @__PURE__ */ jsxs(Fragment22, { children: [
27585
- /* @__PURE__ */ jsxs(Rotate, { rotation: [0, 55, -55], children: [
27586
- /* @__PURE__ */ jsxs(Subtract, { children: [
27587
- /* @__PURE__ */ jsx5(
28434
+ var SOD323F = () => {
28435
+ const fullWidth = 1.7;
28436
+ const bodyLength10 = 1.25;
28437
+ const bodyHeight = 0.725;
28438
+ const padWidth = 0.325;
28439
+ const padLength = 0.4;
28440
+ const padThickness = 0.175;
28441
+ const leftPadCenterX = -fullWidth / 2 - padLength / 2;
28442
+ const rightPadCenterX = fullWidth / 2 + padLength / 2;
28443
+ const taperOffset = 0.2;
28444
+ const straightHeight = padThickness;
28445
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
28446
+ /* @__PURE__ */ jsx5(
28447
+ Cuboid,
28448
+ {
28449
+ color: "#ccc",
28450
+ size: [padLength, padWidth, padThickness],
28451
+ center: [leftPadCenterX, 0, padThickness / 2]
28452
+ }
28453
+ ),
28454
+ /* @__PURE__ */ jsx5(
28455
+ Cuboid,
28456
+ {
28457
+ color: "#ccc",
28458
+ size: [padLength, padWidth, padThickness],
28459
+ center: [rightPadCenterX, 0, padThickness / 2]
28460
+ }
28461
+ ),
28462
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsxs(Union, { children: [
28463
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight / 2, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, straightHeight] }) }),
28464
+ /* @__PURE__ */ jsxs(Hull, { children: [
28465
+ /* @__PURE__ */ jsx5(Translate, { z: straightHeight, children: /* @__PURE__ */ jsx5(Cuboid, { size: [fullWidth, bodyLength10, 0.01] }) }),
28466
+ /* @__PURE__ */ jsx5(Translate, { z: bodyHeight, children: /* @__PURE__ */ jsx5(
27588
28467
  Cuboid,
27589
28468
  {
27590
- color: "#ccc",
27591
- size: [padLength + 0.1, padWidth, padThickness],
27592
- center: [padCenterX, 0, padThickness - 2]
27593
- }
27594
- ),
27595
- /* @__PURE__ */ jsx5(
27596
- Cylinder,
27597
- {
27598
- color: "black",
27599
- center: [padCenterX, 0, padThickness - 2],
27600
- radius: padHoleDiameter / 2,
27601
- height: padThickness * 1.2
28469
+ size: [fullWidth - taperOffset, bodyLength10 - taperOffset, 0.01]
27602
28470
  }
27603
- )
27604
- ] }),
27605
- /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsx5(
27606
- ChipBody,
27607
- {
27608
- width: bodyWidth,
27609
- length: bodyLength10,
27610
- height: bodyHeight,
27611
- center: { x: fullLength10, y: 0, z: -2.4 },
27612
- includeNotch: false,
27613
- straightHeightRatio: 0.3,
27614
- taperRatio: 0.04,
27615
- heightAboveSurface: 1
27616
- }
27617
- ) })
27618
- ] }),
27619
- /* @__PURE__ */ jsx5(Rotate, { rotation: [0, 55, 55], children: Array.from({ length: 3 }).map((_, i) => {
27620
- const x = prongCenterX;
27621
- const y = (i - 1) * prongPitch;
27622
- const z135 = -prongHeight - 0.6;
27623
- return /* @__PURE__ */ jsxs(Colorize, { color: "gold", children: [
27624
- /* @__PURE__ */ jsxs(Hull, { children: [
27625
- /* @__PURE__ */ jsx5(Translate, { center: [bodyFrontX - bodyHeight / 2 + 0.1, y, z135], children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyHeight, prongWidth + 1, prongHeight] }) }),
27626
- /* @__PURE__ */ jsx5(
27627
- Translate,
27628
- {
27629
- center: [bodyFrontX - bodyHeight / 2 - 1 + 0.1, y, z135],
27630
- children: /* @__PURE__ */ jsx5(Cuboid, { size: [bodyHeight, prongWidth, prongHeight] })
27631
- }
27632
- )
27633
- ] }),
27634
- /* @__PURE__ */ jsx5(Translate, { center: [x, y, z135], children: /* @__PURE__ */ jsx5(Cuboid, { size: [prongLength + 0.1, prongWidth, prongHeight] }) })
27635
- ] }, `prong-${i}`);
27636
- }) })
27637
- ] }) });
28471
+ ) })
28472
+ ] })
28473
+ ] }) }),
28474
+ /* @__PURE__ */ jsx5(
28475
+ Cuboid,
28476
+ {
28477
+ color: "#777",
28478
+ size: [fullWidth / 3, bodyLength10 - taperOffset, 0.02],
28479
+ center: [leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]
28480
+ }
28481
+ )
28482
+ ] });
28483
+ };
28484
+ var SOD323FL = () => {
28485
+ const fullWidth = 1.775;
28486
+ const bodyLength10 = 1.25;
28487
+ const bodyHeight = 0.725;
28488
+ const padWidth = 0.325;
28489
+ const padLength = 0.4;
28490
+ const padThickness = 0.13;
28491
+ const leftPadCenterX = -fullWidth / 2 - padLength / 2 + 0.04;
28492
+ const rightPadCenterX = fullWidth / 2 + padLength / 2 - 0.04;
28493
+ const taperOffset = 0.2;
28494
+ return /* @__PURE__ */ jsxs(Fragment22, { children: [
28495
+ /* @__PURE__ */ jsx5(
28496
+ Cuboid,
28497
+ {
28498
+ color: "#ccc",
28499
+ size: [padLength, padWidth, padThickness],
28500
+ center: [leftPadCenterX, 0, padThickness / 2]
28501
+ }
28502
+ ),
28503
+ /* @__PURE__ */ jsx5(
28504
+ Cuboid,
28505
+ {
28506
+ color: "#ccc",
28507
+ size: [padLength, padWidth, padThickness],
28508
+ center: [rightPadCenterX, 0, padThickness / 2]
28509
+ }
28510
+ ),
28511
+ /* @__PURE__ */ jsx5(Colorize, { color: "#222", children: /* @__PURE__ */ jsx5(
28512
+ ChipBody,
28513
+ {
28514
+ width: fullWidth,
28515
+ length: bodyLength10,
28516
+ height: bodyHeight,
28517
+ center: { x: 0, y: 0, z: 0 },
28518
+ heightAboveSurface: 0,
28519
+ straightHeightRatio: 0.7,
28520
+ taperRatio: 0.06,
28521
+ includeNotch: false
28522
+ }
28523
+ ) }),
28524
+ /* @__PURE__ */ jsx5(
28525
+ Cuboid,
28526
+ {
28527
+ color: "#777",
28528
+ size: [fullWidth / 3, bodyLength10 - 0.05, 0.02],
28529
+ center: [leftPadCenterX + fullWidth / 4.4 + taperOffset, 0, bodyHeight]
28530
+ }
28531
+ )
28532
+ ] });
27638
28533
  };
27639
28534
  var Footprinter3d = ({ footprint }) => {
27640
28535
  const fpJson = fp.string(footprint).json();
@@ -27726,11 +28621,30 @@ var Footprinter3d = ({ footprint }) => {
27726
28621
  }
27727
28622
  );
27728
28623
  }
27729
- case "pinrow":
28624
+ case "pinrow": {
28625
+ const rowsMatch = footprint.match(/_rows(\d+)/);
28626
+ const rows = rowsMatch && rowsMatch[1] ? parseInt(rowsMatch[1], 10) : 1;
27730
28627
  if (fpJson.male)
27731
- return /* @__PURE__ */ jsx5(PinRow, { numberOfPins: fpJson.num_pins, pitch: fpJson.p });
28628
+ return /* @__PURE__ */ jsx5(
28629
+ PinRow,
28630
+ {
28631
+ numberOfPins: fpJson.num_pins,
28632
+ pitch: fpJson.p,
28633
+ invert: fpJson.invert,
28634
+ faceup: fpJson.faceup,
28635
+ rows
28636
+ }
28637
+ );
27732
28638
  if (fpJson.female)
27733
- return /* @__PURE__ */ jsx5(FemaleHeader, { numberOfPins: fpJson.num_pins, pitch: fpJson.p });
28639
+ return /* @__PURE__ */ jsx5(
28640
+ FemaleHeader,
28641
+ {
28642
+ numberOfPins: fpJson.num_pins,
28643
+ pitch: fpJson.p,
28644
+ rows
28645
+ }
28646
+ );
28647
+ }
27734
28648
  case "cap": {
27735
28649
  switch (fpJson.imperial) {
27736
28650
  case "0402":
@@ -27755,10 +28669,24 @@ var Footprinter3d = ({ footprint }) => {
27755
28669
  }
27756
28670
  case "sot235":
27757
28671
  return /* @__PURE__ */ jsx5(SOT_235_default, {});
28672
+ case "sot457":
28673
+ return /* @__PURE__ */ jsx5(SOT457, {});
27758
28674
  case "sot223":
27759
28675
  return /* @__PURE__ */ jsx5(SOT223, {});
28676
+ case "sot23w":
28677
+ return /* @__PURE__ */ jsx5(SOT23W, {});
27760
28678
  case "sot323":
27761
28679
  return /* @__PURE__ */ jsx5(SOT323, {});
28680
+ case "sod323f":
28681
+ return /* @__PURE__ */ jsx5(SOD323F, {});
28682
+ case "sod323fl":
28683
+ return /* @__PURE__ */ jsx5(SOD323FL, {});
28684
+ case "sot363":
28685
+ return /* @__PURE__ */ jsx5(SOT_363_default, {});
28686
+ case "sot886":
28687
+ return /* @__PURE__ */ jsx5(SOT886, {});
28688
+ case "sot963":
28689
+ return /* @__PURE__ */ jsx5(SOT963, {});
27762
28690
  case "pushbutton":
27763
28691
  return /* @__PURE__ */ jsx5(
27764
28692
  PushButton,
@@ -27795,6 +28723,12 @@ var Footprinter3d = ({ footprint }) => {
27795
28723
  return /* @__PURE__ */ jsx5(SOD123F, {});
27796
28724
  case "sod123fl":
27797
28725
  return /* @__PURE__ */ jsx5(SOD123FL, {});
28726
+ case "sod123w":
28727
+ return /* @__PURE__ */ jsx5(SOD123W, {});
28728
+ case "sod128":
28729
+ return /* @__PURE__ */ jsx5(SOD128, {});
28730
+ case "sod323":
28731
+ return /* @__PURE__ */ jsx5(SOD323, {});
27798
28732
  case "sod923":
27799
28733
  return /* @__PURE__ */ jsx5(SOD923, {});
27800
28734
  case "hc49":
@@ -27815,10 +28749,22 @@ var Footprinter3d = ({ footprint }) => {
27815
28749
  pitch: fpJson.p
27816
28750
  }
27817
28751
  );
28752
+ case "ms013":
28753
+ return /* @__PURE__ */ jsx5(
28754
+ MS013,
28755
+ {
28756
+ pinCount: fpJson.num_pins,
28757
+ padContactLength: fpJson.pl,
28758
+ leadWidth: fpJson.pw,
28759
+ pitch: fpJson.p
28760
+ }
28761
+ );
27818
28762
  case "sot723":
27819
28763
  return /* @__PURE__ */ jsx5(SOT723, {});
27820
28764
  case "to220":
27821
28765
  return /* @__PURE__ */ jsx5(TO220, {});
28766
+ case "to92":
28767
+ return /* @__PURE__ */ jsx5(TO92, {});
27822
28768
  }
27823
28769
  const colorMatch = footprint.match(/_color\(([^)]+)\)/);
27824
28770
  const color = colorMatch ? colorMatch[1] : void 0;
@@ -28509,7 +29455,7 @@ import * as THREE15 from "three";
28509
29455
  // package.json
28510
29456
  var package_default = {
28511
29457
  name: "@tscircuit/3d-viewer",
28512
- version: "0.0.470",
29458
+ version: "0.0.472",
28513
29459
  main: "./dist/index.js",
28514
29460
  module: "./dist/index.js",
28515
29461
  type: "module",
@@ -28576,7 +29522,7 @@ var package_default = {
28576
29522
  "circuit-json": "0.0.325",
28577
29523
  "circuit-to-svg": "^0.0.179",
28578
29524
  debug: "^4.4.0",
28579
- "jscad-electronics": "^0.0.91",
29525
+ "jscad-electronics": "^0.0.109",
28580
29526
  "jscad-planner": "^0.0.13",
28581
29527
  jsdom: "^26.0.0",
28582
29528
  "manifold-3d": "^3.2.1",
@@ -32420,6 +33366,7 @@ function createSilkscreenTextureForLayer({
32420
33366
  const pcbSilkscreenRects = su6(circuitJson).pcb_silkscreen_rect.list();
32421
33367
  const pcbSilkscreenCircles = su6(circuitJson).pcb_silkscreen_circle.list();
32422
33368
  const pcbFabricationNoteRects = su6(circuitJson).pcb_fabrication_note_rect.list();
33369
+ const pcbNoteLines = su6(circuitJson).pcb_note_line.list();
32423
33370
  const textsOnLayer = pcbSilkscreenTexts.filter((t) => t.layer === layer);
32424
33371
  const pathsOnLayer = pcbSilkscreenPaths.filter((p) => p.layer === layer);
32425
33372
  const linesOnLayer = pcbSilkscreenLines.filter((l) => l.layer === layer);
@@ -32428,7 +33375,10 @@ function createSilkscreenTextureForLayer({
32428
33375
  const fabricationNoteRectsOnLayer = pcbFabricationNoteRects.filter(
32429
33376
  (r) => r.layer === layer
32430
33377
  );
32431
- if (textsOnLayer.length === 0 && pathsOnLayer.length === 0 && linesOnLayer.length === 0 && rectsOnLayer.length === 0 && circlesOnLayer.length === 0 && fabricationNoteRectsOnLayer.length === 0) {
33378
+ const noteLinesOnLayer = pcbNoteLines.filter(
33379
+ (l) => l.layer === layer
33380
+ );
33381
+ if (textsOnLayer.length === 0 && pathsOnLayer.length === 0 && linesOnLayer.length === 0 && rectsOnLayer.length === 0 && circlesOnLayer.length === 0 && fabricationNoteRectsOnLayer.length === 0 && noteLinesOnLayer.length === 0) {
32432
33382
  return null;
32433
33383
  }
32434
33384
  const canvas = document.createElement("canvas");
@@ -32459,6 +33409,36 @@ function createSilkscreenTextureForLayer({
32459
33409
  ctx.lineTo(canvasXFromPcb(endXmm), canvasYFromPcb(endYmm));
32460
33410
  ctx.stroke();
32461
33411
  });
33412
+ noteLinesOnLayer.forEach((lineEl) => {
33413
+ const startXmm = parseDimensionToMm(lineEl.x1) ?? 0;
33414
+ const startYmm = parseDimensionToMm(lineEl.y1) ?? 0;
33415
+ const endXmm = parseDimensionToMm(lineEl.x2) ?? 0;
33416
+ const endYmm = parseDimensionToMm(lineEl.y2) ?? 0;
33417
+ if (startXmm === endXmm && startYmm === endYmm) return;
33418
+ ctx.save();
33419
+ let strokeColor = silkscreenColor;
33420
+ if (lineEl.color) {
33421
+ strokeColor = parseFabricationNoteColor(lineEl.color);
33422
+ } else {
33423
+ strokeColor = "rgb(255, 243, 204)";
33424
+ }
33425
+ ctx.strokeStyle = strokeColor;
33426
+ ctx.beginPath();
33427
+ ctx.lineWidth = coerceDimensionToMm(lineEl.stroke_width, 0.1) * traceTextureResolution;
33428
+ ctx.lineCap = "round";
33429
+ const isDashed = lineEl.is_dashed ?? false;
33430
+ if (isDashed) {
33431
+ const dashLength = Math.max(ctx.lineWidth * 2, 1);
33432
+ ctx.setLineDash([dashLength, dashLength]);
33433
+ }
33434
+ ctx.moveTo(canvasXFromPcb(startXmm), canvasYFromPcb(startYmm));
33435
+ ctx.lineTo(canvasXFromPcb(endXmm), canvasYFromPcb(endYmm));
33436
+ ctx.stroke();
33437
+ if (isDashed) {
33438
+ ctx.setLineDash([]);
33439
+ }
33440
+ ctx.restore();
33441
+ });
32462
33442
  pathsOnLayer.forEach((path) => {
32463
33443
  if (path.route.length < 2) return;
32464
33444
  ctx.beginPath();