biscuitboard 1.0.5 → 1.0.7

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/README.md CHANGED
@@ -217,11 +217,13 @@ upper-right clad hole clears the D0-D7 header. Relative placement remains
217
217
  official UNO R3 geometry for the 1x8 power header, 1x6 analog header, 1x8
218
218
  D0-D7 header, 1x10 R3 digital/AREF/I2C header, and 2x3 ICSP socket.
219
219
 
220
- The 262 assignable fixed vias use 0.3 mm drills, 0.6 mm copper pads, and 1.3 mm
221
- center-to-center pitch. The clustered layout has upper- and lower-left edge
222
- fields, two inset left fields, a central routing field spanning -19 to -3 mm,
223
- and split right-edge rails. The area immediately left of ICSP, the header rows, and
224
- the original clad mounting holes remain open. The bare template and its
220
+ The 226 assignable fixed vias use 0.3 mm drills, 0.6 mm copper pads, and 1.3 mm
221
+ center-to-center pitch. A 130-via central routing field spanning -19 to -3 mm
222
+ is retained. Three corners use compact three-via-wide L-shaped fields; the
223
+ upper-right uses one three-row horizontal arm parallel to its two mounting
224
+ holes and lowered around the crowded UNO header region. The area immediately
225
+ left of ICSP, the header rows, and the original clad mounting holes remain
226
+ open. The bare template and its
225
227
  checked-in PCB snapshot are in
226
228
  [`examples/arduino-shield-clad.tsx`](./examples/arduino-shield-clad.tsx).
227
229
 
@@ -308,18 +310,17 @@ bun test tests/feather-clad.test.tsx
308
310
  [`BreadboardClad`](./lib/breadboard-clad.tsx) is a laser-routable 75 mm x
309
311
  55 mm plug-in prototyping board. It provides 210 individually routable female
310
312
  header sockets labeled A1 through J21, with the standard 2.54 mm terminal pitch
311
- and a 7.62 mm DIP channel. Four 21-pin power/header rails run along the top and
312
- bottom. Unlike a solderless breadboard, none of these sockets are connected in
313
- groups: the consuming tscircuit design defines every connection, allowing the
314
- corresponding copper traces to be laser cut for a particular circuit.
315
-
316
- The 162 assignable prefabricated vias have 0.3 mm holes and 0.6 mm pads. A
317
- single 21-via row sits between each power-header pair and its neighboring
318
- terminal field, while two 21-via rows run through the central DIP channel. A
319
- single-via-wide outer field runs beyond the headers on all four sides. The
320
- socket grids themselves remain clear.
321
- `BreadboardTerminalHeaders` exposes terminal aliases such as `A1` and `J21`;
322
- `BreadboardPowerHeader` exposes `COL1` through `COL21`. The bare preview is in
313
+ and a 7.62 mm DIP channel. Unlike a solderless breadboard, none of these
314
+ sockets are connected in groups: the consuming tscircuit design defines every
315
+ connection, allowing the corresponding copper traces to be laser cut for a
316
+ particular circuit.
317
+
318
+ The 148 assignable prefabricated vias have 0.3 mm holes and 0.6 mm pads. Two
319
+ 21-via rows sit beyond the terminal fields, two 21-via rows run through the
320
+ central DIP channel, and four two-via-wide L-shaped corner fields provide 64
321
+ additional vias. The socket grid remains clear.
322
+ `BreadboardTerminalHeaders` exposes terminal aliases such as `A1` and `J21`.
323
+ The bare preview is in
323
324
  [`examples/breadboard-clad.tsx`](./examples/breadboard-clad.tsx).
324
325
 
325
326
  ```sh
package/dist/npm.cjs CHANGED
@@ -785,15 +785,18 @@ __export(npm_exports, {
785
785
  BREADBOARD_CLAD_WIDTH: () => BREADBOARD_CLAD_WIDTH,
786
786
  BREADBOARD_COLUMN_COUNT: () => BREADBOARD_COLUMN_COUNT,
787
787
  BREADBOARD_COLUMN_XS: () => BREADBOARD_COLUMN_XS,
788
+ BREADBOARD_CORNER_VIA_ARM_WIDTH: () => BREADBOARD_CORNER_VIA_ARM_WIDTH,
789
+ BREADBOARD_CORNER_VIA_POSITIONS: () => BREADBOARD_CORNER_VIA_POSITIONS,
790
+ BREADBOARD_CORNER_VIA_SPACING: () => BREADBOARD_CORNER_VIA_SPACING,
791
+ BREADBOARD_CORNER_VIA_X_INNER_OFFSET: () => BREADBOARD_CORNER_VIA_X_INNER_OFFSET,
792
+ BREADBOARD_CORNER_VIA_X_OUTER_OFFSET: () => BREADBOARD_CORNER_VIA_X_OUTER_OFFSET,
793
+ BREADBOARD_CORNER_VIA_X_OUTWARD_SHIFT: () => BREADBOARD_CORNER_VIA_X_OUTWARD_SHIFT,
794
+ BREADBOARD_CORNER_VIA_Y_INNER_OFFSET: () => BREADBOARD_CORNER_VIA_Y_INNER_OFFSET,
795
+ BREADBOARD_CORNER_VIA_Y_OUTER_OFFSET: () => BREADBOARD_CORNER_VIA_Y_OUTER_OFFSET,
788
796
  BREADBOARD_HEADER_HOLE_DIAMETER: () => BREADBOARD_HEADER_HOLE_DIAMETER,
789
797
  BREADBOARD_HEADER_PAD_DIAMETER: () => BREADBOARD_HEADER_PAD_DIAMETER,
790
798
  BREADBOARD_HEADER_PITCH: () => BREADBOARD_HEADER_PITCH,
791
799
  BREADBOARD_MOUNTING_HOLE_DIAMETER: () => BREADBOARD_MOUNTING_HOLE_DIAMETER,
792
- BREADBOARD_OUTER_VERTICAL_VIA_YS: () => BREADBOARD_OUTER_VERTICAL_VIA_YS,
793
- BREADBOARD_OUTER_VIA_COLUMN_XS: () => BREADBOARD_OUTER_VIA_COLUMN_XS,
794
- BREADBOARD_OUTER_VIA_ROW_YS: () => BREADBOARD_OUTER_VIA_ROW_YS,
795
- BREADBOARD_POWER_HEADER_POSITIONS: () => BREADBOARD_POWER_HEADER_POSITIONS,
796
- BREADBOARD_POWER_RAILS: () => BREADBOARD_POWER_RAILS,
797
800
  BREADBOARD_TERMINAL_HEADER_POSITIONS: () => BREADBOARD_TERMINAL_HEADER_POSITIONS,
798
801
  BREADBOARD_TERMINAL_ROW_LABELS: () => BREADBOARD_TERMINAL_ROW_LABELS,
799
802
  BREADBOARD_TERMINAL_ROW_YS: () => BREADBOARD_TERMINAL_ROW_YS,
@@ -803,7 +806,6 @@ __export(npm_exports, {
803
806
  BoosterPackLeftHeader: () => BoosterPackLeftHeader,
804
807
  BoosterPackRightHeader: () => BoosterPackRightHeader,
805
808
  BreadboardClad: () => BreadboardClad,
806
- BreadboardPowerHeader: () => BreadboardPowerHeader,
807
809
  BreadboardTerminalHeaders: () => BreadboardTerminalHeaders,
808
810
  CLAD_40X40_EDGE_MOUNTING_HOLE_INSET: () => CLAD_40X40_EDGE_MOUNTING_HOLE_INSET,
809
811
  CLAD_40X40_HEIGHT: () => CLAD_40X40_HEIGHT,
@@ -14524,41 +14526,46 @@ var ARDUINO_SHIELD_CLAD_VIA_SPACING = 1.3;
14524
14526
  var ARDUINO_SHIELD_EDGE_CLEARANCE = 0.2;
14525
14527
  var ARDUINO_SHIELD_EDGE_CLEARANCE_VALIDATION_TOLERANCE = 1e-3;
14526
14528
  var rangeInclusive = (start, end, increment) => Array.from(
14527
- { length: Math.max(0, Math.floor((end - start) / increment) + 1) },
14529
+ {
14530
+ length: Math.max(0, Math.floor((end - start) / increment + 1e-9) + 1)
14531
+ },
14528
14532
  (_, index) => Math.round((start + index * increment) * 1e6) / 1e6
14529
14533
  );
14530
14534
  var createViaZone2 = (zone) => rangeInclusive(zone.minX, zone.maxX, zone.spacing).flatMap(
14531
14535
  (x) => rangeInclusive(zone.minY, zone.maxY, zone.spacing).map((y) => ({ x, y }))
14532
14536
  );
14533
14537
  var ARDUINO_SHIELD_CLAD_VIA_CANDIDATE_ZONES = [
14538
+ // Upper-left horizontal and vertical arms.
14534
14539
  {
14535
- minX: -33.5,
14536
- maxX: -25.5,
14537
- minY: 17.5,
14538
- maxY: 21.5,
14540
+ minX: -36.1,
14541
+ maxX: -29.6,
14542
+ minY: 19.7,
14543
+ maxY: 22.3,
14539
14544
  spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14540
14545
  },
14541
14546
  {
14542
- minX: -33.5,
14543
- maxX: -25.5,
14544
- minY: -21.5,
14545
- maxY: -17.5,
14547
+ minX: -32.2,
14548
+ maxX: -29.6,
14549
+ minY: 19.7,
14550
+ maxY: 26.2,
14546
14551
  spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14547
14552
  },
14553
+ // Lower-left horizontal and vertical arms.
14548
14554
  {
14549
- minX: -21.5,
14550
- maxX: -13.5,
14551
- minY: 13.5,
14552
- maxY: 17.5,
14555
+ minX: -36.1,
14556
+ maxX: -29.6,
14557
+ minY: -22.3,
14558
+ maxY: -19.7,
14553
14559
  spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14554
14560
  },
14555
14561
  {
14556
- minX: -21.5,
14557
- maxX: -13.5,
14558
- minY: -17.5,
14559
- maxY: -13.5,
14562
+ minX: -32.2,
14563
+ maxX: -29.6,
14564
+ minY: -26.2,
14565
+ maxY: -19.7,
14560
14566
  spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14561
14567
  },
14568
+ // Preserve the large central routing field exactly.
14562
14569
  {
14563
14570
  minX: -19,
14564
14571
  maxX: -3,
@@ -14566,18 +14573,27 @@ var ARDUINO_SHIELD_CLAD_VIA_CANDIDATE_ZONES = [
14566
14573
  maxY: 6,
14567
14574
  spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14568
14575
  },
14576
+ // Upper-right horizontal arm, parallel to the two mounting holes.
14569
14577
  {
14570
- minX: 34.5,
14571
- maxX: 34.5,
14572
- minY: -19.5,
14573
- maxY: -7.5,
14578
+ minX: 30.9,
14579
+ maxX: 36.1,
14580
+ minY: 19.7,
14581
+ maxY: 22.3,
14574
14582
  spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14575
14583
  },
14584
+ // Lower-right horizontal and vertical arms.
14576
14585
  {
14577
- minX: 34.5,
14578
- maxX: 34.5,
14579
- minY: 7.5,
14580
- maxY: 19.5,
14586
+ minX: 29.6,
14587
+ maxX: 36.1,
14588
+ minY: -22.3,
14589
+ maxY: -19.7,
14590
+ spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14591
+ },
14592
+ {
14593
+ minX: 29.6,
14594
+ maxX: 32.2,
14595
+ minY: -26.2,
14596
+ maxY: -19.7,
14581
14597
  spacing: ARDUINO_SHIELD_CLAD_VIA_SPACING
14582
14598
  }
14583
14599
  ];
@@ -14894,17 +14910,23 @@ var ArduinoShieldClad = ({
14894
14910
  fontSize: "0.6mm"
14895
14911
  }
14896
14912
  ),
14897
- ARDUINO_SHIELD_CLAD_VIA_CANDIDATE_ZONES.map((zone) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
14898
- "pcbnoterect",
14913
+ ARDUINO_SHIELD_CLAD_VIA_CANDIDATE_ZONES.map((zone) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
14914
+ import_react2.Fragment,
14899
14915
  {
14900
- color: "blue",
14901
- width: Math.max(0.2, zone.maxX - zone.minX),
14902
- height: Math.max(0.2, zone.maxY - zone.minY),
14903
- pcbPositionAnchor: "center",
14904
- pcbX: zone.minX + (zone.maxX - zone.minX) / 2,
14905
- pcbY: zone.minY + (zone.maxY - zone.minY) / 2
14906
- }
14907
- ) }, `arduino-via-zone-${zone.minX}-${zone.minY}`)),
14916
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
14917
+ "pcbnoterect",
14918
+ {
14919
+ color: "blue",
14920
+ width: Math.max(0.2, zone.maxX - zone.minX),
14921
+ height: Math.max(0.2, zone.maxY - zone.minY),
14922
+ pcbPositionAnchor: "center",
14923
+ pcbX: zone.minX + (zone.maxX - zone.minX) / 2,
14924
+ pcbY: zone.minY + (zone.maxY - zone.minY) / 2
14925
+ }
14926
+ )
14927
+ },
14928
+ `arduino-via-zone-${zone.minX}-${zone.maxX}-${zone.minY}-${zone.maxY}`
14929
+ )),
14908
14930
  ARDUINO_SHIELD_CLAD_VIA_POSITIONS.map((via) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
14909
14931
  "via",
14910
14932
  {
@@ -15587,8 +15609,13 @@ var BREADBOARD_CLAD_VIA_ROW_YS = [
15587
15609
  BREADBOARD_HEADER_PITCH / 2,
15588
15610
  16.51
15589
15611
  ];
15590
- var BREADBOARD_OUTER_VIA_ROW_YS = [-24.13, 24.13];
15591
- var BREADBOARD_OUTER_VIA_COLUMN_XS = [-27.94, 27.94];
15612
+ var BREADBOARD_CORNER_VIA_SPACING = 1.3;
15613
+ var BREADBOARD_CORNER_VIA_ARM_WIDTH = 1.3;
15614
+ var BREADBOARD_CORNER_VIA_X_INNER_OFFSET = 27;
15615
+ var BREADBOARD_CORNER_VIA_X_OUTER_OFFSET = 32.2;
15616
+ var BREADBOARD_CORNER_VIA_Y_INNER_OFFSET = 21;
15617
+ var BREADBOARD_CORNER_VIA_Y_OUTER_OFFSET = 26.2;
15618
+ var BREADBOARD_CORNER_VIA_X_OUTWARD_SHIFT = 3.9;
15592
15619
  var BREADBOARD_MOUNTING_HOLE_DIAMETER = 2.2;
15593
15620
  var BREADBOARD_CLAD_EDGE_CLEARANCE = 0.2;
15594
15621
  var BREADBOARD_CLAD_EDGE_CLEARANCE_VALIDATION_TOLERANCE = 1e-3;
@@ -15606,16 +15633,18 @@ var BREADBOARD_TERMINAL_ROW_LABELS = [
15606
15633
  "J"
15607
15634
  ];
15608
15635
  var roundCoordinate3 = (value) => Math.round(value * 1e6) / 1e6;
15636
+ var createPitchedRange = (start, end) => Array.from(
15637
+ {
15638
+ length: Math.round((end - start) / BREADBOARD_CORNER_VIA_SPACING) + 1
15639
+ },
15640
+ (_, index) => roundCoordinate3(start + index * BREADBOARD_CORNER_VIA_SPACING)
15641
+ );
15609
15642
  var BREADBOARD_COLUMN_XS = Array.from(
15610
15643
  { length: BREADBOARD_COLUMN_COUNT },
15611
15644
  (_, index) => roundCoordinate3(
15612
15645
  (index - (BREADBOARD_COLUMN_COUNT - 1) / 2) * BREADBOARD_HEADER_PITCH
15613
15646
  )
15614
15647
  );
15615
- var BREADBOARD_OUTER_VERTICAL_VIA_YS = Array.from(
15616
- { length: 18 },
15617
- (_, index) => roundCoordinate3(-21.59 + index * BREADBOARD_CLAD_VIA_PITCH)
15618
- );
15619
15648
  var BREADBOARD_TERMINAL_ROW_YS = Object.fromEntries(
15620
15649
  BREADBOARD_TERMINAL_ROW_LABELS.map((label, index) => {
15621
15650
  const bankIndex = index < 5 ? index : index - 5;
@@ -15632,32 +15661,61 @@ var BREADBOARD_TERMINAL_HEADER_POSITIONS = BREADBOARD_TERMINAL_ROW_LABELS.flatMa
15632
15661
  y: BREADBOARD_TERMINAL_ROW_YS[row]
15633
15662
  }))
15634
15663
  );
15635
- var BREADBOARD_POWER_RAILS = [
15636
- { id: "topPositive", label: "+", y: 21.59 },
15637
- { id: "topNegative", label: "-", y: 19.05 },
15638
- { id: "bottomPositive", label: "+", y: -19.05 },
15639
- { id: "bottomNegative", label: "-", y: -21.59 }
15640
- ];
15641
- var BREADBOARD_POWER_HEADER_POSITIONS = BREADBOARD_POWER_RAILS.flatMap(
15642
- (rail) => BREADBOARD_COLUMN_XS.map((x, columnIndex) => ({
15643
- rail: rail.id,
15644
- pin: columnIndex + 1,
15645
- label: `${rail.id}${columnIndex + 1}`,
15646
- column: columnIndex + 1,
15647
- x,
15648
- y: rail.y
15649
- }))
15664
+ var cornerViaAxisX = createPitchedRange(
15665
+ BREADBOARD_CORNER_VIA_X_INNER_OFFSET,
15666
+ BREADBOARD_CORNER_VIA_X_OUTER_OFFSET
15667
+ );
15668
+ var cornerViaAxisY = createPitchedRange(
15669
+ BREADBOARD_CORNER_VIA_Y_INNER_OFFSET,
15670
+ BREADBOARD_CORNER_VIA_Y_OUTER_OFFSET
15671
+ );
15672
+ var cornerViaArmAxisX = createPitchedRange(
15673
+ BREADBOARD_CORNER_VIA_X_INNER_OFFSET,
15674
+ BREADBOARD_CORNER_VIA_X_INNER_OFFSET + BREADBOARD_CORNER_VIA_ARM_WIDTH
15675
+ );
15676
+ var cornerViaArmAxisY = createPitchedRange(
15677
+ BREADBOARD_CORNER_VIA_Y_INNER_OFFSET,
15678
+ BREADBOARD_CORNER_VIA_Y_INNER_OFFSET + BREADBOARD_CORNER_VIA_ARM_WIDTH
15679
+ );
15680
+ var createCornerViaPositions = (xSign, ySign, xOutwardShift = 0) => {
15681
+ const shiftedCornerViaAxisX = cornerViaAxisX.map(
15682
+ (x) => roundCoordinate3(x + xOutwardShift)
15683
+ );
15684
+ const shiftedCornerViaArmAxisX = cornerViaArmAxisX.map(
15685
+ (x) => roundCoordinate3(x + xOutwardShift)
15686
+ );
15687
+ const horizontalArm = shiftedCornerViaAxisX.flatMap(
15688
+ (x) => cornerViaArmAxisY.map((y) => ({ x: x * xSign, y: y * ySign }))
15689
+ );
15690
+ const verticalArm = shiftedCornerViaArmAxisX.flatMap(
15691
+ (x) => cornerViaAxisY.map((y) => ({ x: x * xSign, y: y * ySign }))
15692
+ );
15693
+ return Array.from(
15694
+ new Map(
15695
+ [...horizontalArm, ...verticalArm].map((point) => [
15696
+ `${point.x},${point.y}`,
15697
+ point
15698
+ ])
15699
+ ).values()
15700
+ );
15701
+ };
15702
+ var BREADBOARD_CORNER_VIA_POSITIONS = [
15703
+ [-1, -1],
15704
+ [-1, 1],
15705
+ [1, -1],
15706
+ [1, 1]
15707
+ ].flatMap(
15708
+ ([xSign, ySign]) => createCornerViaPositions(
15709
+ xSign,
15710
+ ySign,
15711
+ xSign === -1 || ySign === -1 ? BREADBOARD_CORNER_VIA_X_OUTWARD_SHIFT : 0
15712
+ )
15650
15713
  );
15651
15714
  var BREADBOARD_CLAD_VIA_POSITIONS = [
15652
15715
  ...BREADBOARD_CLAD_VIA_ROW_YS.flatMap(
15653
15716
  (y) => BREADBOARD_COLUMN_XS.map((x) => ({ x, y }))
15654
15717
  ),
15655
- ...BREADBOARD_OUTER_VIA_ROW_YS.flatMap(
15656
- (y) => BREADBOARD_COLUMN_XS.map((x) => ({ x, y }))
15657
- ),
15658
- ...BREADBOARD_OUTER_VIA_COLUMN_XS.flatMap(
15659
- (x) => BREADBOARD_OUTER_VERTICAL_VIA_YS.map((y) => ({ x, y }))
15660
- )
15718
+ ...BREADBOARD_CORNER_VIA_POSITIONS
15661
15719
  ];
15662
15720
  var terminalPinLabels = Object.fromEntries(
15663
15721
  BREADBOARD_TERMINAL_HEADER_POSITIONS.map((position) => [
@@ -15665,16 +15723,9 @@ var terminalPinLabels = Object.fromEntries(
15665
15723
  [position.label]
15666
15724
  ])
15667
15725
  );
15668
- var powerPinLabels = Object.fromEntries(
15669
- BREADBOARD_COLUMN_XS.map((_, index) => [
15670
- `pin${index + 1}`,
15671
- [`COL${index + 1}`]
15672
- ])
15673
- );
15674
15726
  var terminalPinNames = BREADBOARD_TERMINAL_HEADER_POSITIONS.map(
15675
15727
  (position) => `pin${position.pin}`
15676
15728
  );
15677
- var powerPinNames = BREADBOARD_COLUMN_XS.map((_, index) => `pin${index + 1}`);
15678
15729
  var BreadboardTerminalHeaderFootprint = () => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("footprint", { insertionDirection: "from_above", children: BREADBOARD_TERMINAL_HEADER_POSITIONS.map((position) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react4.Fragment, { children: position.pin === 1 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
15679
15730
  "platedhole",
15680
15731
  {
@@ -15697,26 +15748,6 @@ var BreadboardTerminalHeaderFootprint = () => /* @__PURE__ */ (0, import_jsx_run
15697
15748
  pcbY: position.y
15698
15749
  }
15699
15750
  ) }, `terminal-${position.label}`)) });
15700
- var BreadboardPowerHeaderFootprint = () => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("footprint", { insertionDirection: "from_above", children: BREADBOARD_COLUMN_XS.map((x, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react4.Fragment, { children: index === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
15701
- "platedhole",
15702
- {
15703
- portHints: [`pin${index + 1}`],
15704
- shape: "circular_hole_with_rect_pad",
15705
- holeDiameter: `${BREADBOARD_HEADER_HOLE_DIAMETER}mm`,
15706
- rectPadWidth: `${BREADBOARD_HEADER_PAD_DIAMETER}mm`,
15707
- rectPadHeight: `${BREADBOARD_HEADER_PAD_DIAMETER}mm`,
15708
- pcbX: x
15709
- }
15710
- ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
15711
- "platedhole",
15712
- {
15713
- portHints: [`pin${index + 1}`],
15714
- shape: "circle",
15715
- holeDiameter: `${BREADBOARD_HEADER_HOLE_DIAMETER}mm`,
15716
- outerDiameter: `${BREADBOARD_HEADER_PAD_DIAMETER}mm`,
15717
- pcbX: x
15718
- }
15719
- ) }, `power-pin-${index + 1}`)) });
15720
15751
  var BreadboardTerminalHeaders = (props) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
15721
15752
  "connector",
15722
15753
  {
@@ -15727,20 +15758,6 @@ var BreadboardTerminalHeaders = (props) => /* @__PURE__ */ (0, import_jsx_runtim
15727
15758
  ...props
15728
15759
  }
15729
15760
  );
15730
- var BreadboardPowerHeader = ({
15731
- rail,
15732
- ...props
15733
- }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
15734
- "connector",
15735
- {
15736
- pinLabels: powerPinLabels,
15737
- manufacturerPartNumber: "GENERIC-BREADBOARD-1X21-FEMALE-2.54MM",
15738
- footprint: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BreadboardPowerHeaderFootprint, {}),
15739
- noSchematicRepresentation: true,
15740
- pcbY: BREADBOARD_POWER_RAILS.find((candidate) => candidate.id === rail).y,
15741
- ...props
15742
- }
15743
- );
15744
15761
  var BreadboardClad = ({
15745
15762
  children,
15746
15763
  autorouter,
@@ -15789,14 +15806,6 @@ var BreadboardClad = ({
15789
15806
  noConnect: headerNoConnects?.terminals ?? (markHeadersNoConnect ? terminalPinNames : void 0)
15790
15807
  }
15791
15808
  ),
15792
- BREADBOARD_POWER_RAILS.map((rail) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react4.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
15793
- BreadboardPowerHeader,
15794
- {
15795
- rail: rail.id,
15796
- name: `J_${rail.id.replace(/([A-Z])/g, "_$1").toUpperCase()}`,
15797
- noConnect: headerNoConnects?.[rail.id] ?? (markHeadersNoConnect ? powerPinNames : void 0)
15798
- }
15799
- ) }, rail.id)),
15800
15809
  [1, 5, 10, 15, 20, BREADBOARD_COLUMN_COUNT].map((column) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react4.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
15801
15810
  "silkscreentext",
15802
15811
  {
@@ -16498,15 +16507,18 @@ var XiaoCladWithPerforatedPinHeaders = ({
16498
16507
  BREADBOARD_CLAD_WIDTH,
16499
16508
  BREADBOARD_COLUMN_COUNT,
16500
16509
  BREADBOARD_COLUMN_XS,
16510
+ BREADBOARD_CORNER_VIA_ARM_WIDTH,
16511
+ BREADBOARD_CORNER_VIA_POSITIONS,
16512
+ BREADBOARD_CORNER_VIA_SPACING,
16513
+ BREADBOARD_CORNER_VIA_X_INNER_OFFSET,
16514
+ BREADBOARD_CORNER_VIA_X_OUTER_OFFSET,
16515
+ BREADBOARD_CORNER_VIA_X_OUTWARD_SHIFT,
16516
+ BREADBOARD_CORNER_VIA_Y_INNER_OFFSET,
16517
+ BREADBOARD_CORNER_VIA_Y_OUTER_OFFSET,
16501
16518
  BREADBOARD_HEADER_HOLE_DIAMETER,
16502
16519
  BREADBOARD_HEADER_PAD_DIAMETER,
16503
16520
  BREADBOARD_HEADER_PITCH,
16504
16521
  BREADBOARD_MOUNTING_HOLE_DIAMETER,
16505
- BREADBOARD_OUTER_VERTICAL_VIA_YS,
16506
- BREADBOARD_OUTER_VIA_COLUMN_XS,
16507
- BREADBOARD_OUTER_VIA_ROW_YS,
16508
- BREADBOARD_POWER_HEADER_POSITIONS,
16509
- BREADBOARD_POWER_RAILS,
16510
16522
  BREADBOARD_TERMINAL_HEADER_POSITIONS,
16511
16523
  BREADBOARD_TERMINAL_ROW_LABELS,
16512
16524
  BREADBOARD_TERMINAL_ROW_YS,
@@ -16516,7 +16528,6 @@ var XiaoCladWithPerforatedPinHeaders = ({
16516
16528
  BoosterPackLeftHeader,
16517
16529
  BoosterPackRightHeader,
16518
16530
  BreadboardClad,
16519
- BreadboardPowerHeader,
16520
16531
  BreadboardTerminalHeaders,
16521
16532
  CLAD_40X40_EDGE_MOUNTING_HOLE_INSET,
16522
16533
  CLAD_40X40_HEIGHT,