biscuitboard 1.0.18 → 1.0.19

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/npm.js CHANGED
@@ -15752,9 +15752,513 @@ var BreadboardClad = ({
15752
15752
  }
15753
15753
  );
15754
15754
 
15755
- // lib/Clad32x32.tsx
15755
+ // lib/breadboard-clad-0.8mm-vias.tsx
15756
15756
  import { Fragment as Fragment5 } from "react";
15757
15757
  import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
15758
+ var BREADBOARD_08MM_VIA_HOLE_DIAMETER = 0.8;
15759
+ var BREADBOARD_08MM_VIA_PAD_DIAMETER = 0.9;
15760
+ var BREADBOARD_08MM_MIN_VIA_EDGE_SPACING = 2;
15761
+ var BREADBOARD_08MM_BREAKOUT_TRACE_WIDTH = 0.15;
15762
+ var BREADBOARD_08MM_ROW_TRACE_WIDTH = 0.3;
15763
+ var BREADBOARD_08MM_BREAKOUT_PAD_DIAMETER = 0.3;
15764
+ var BREADBOARD_08MM_CORNER_VIA_SPACING = 3;
15765
+ var BREADBOARD_08MM_CORNER_VIA_ARM_WIDTH = 3;
15766
+ var BREADBOARD_08MM_CORNER_VIA_ARM_X_INNER_OFFSET = 25;
15767
+ var BREADBOARD_08MM_CORNER_VIA_LONG_SIDE_COLUMNS = 5;
15768
+ var BREADBOARD_08MM_TOP_RIGHT_LONG_SIDE_COLUMNS = 6;
15769
+ var BREADBOARD_08MM_CORNER_VIA_X_OUTER_OFFSET = 31;
15770
+ var BREADBOARD_08MM_CORNER_VIA_X_INNER_OFFSET = BREADBOARD_08MM_CORNER_VIA_X_OUTER_OFFSET - (BREADBOARD_08MM_CORNER_VIA_LONG_SIDE_COLUMNS - 1) * BREADBOARD_08MM_CORNER_VIA_SPACING;
15771
+ var BREADBOARD_08MM_CORNER_VIA_Y_INNER_OFFSET = 19;
15772
+ var BREADBOARD_08MM_CORNER_VIA_Y_OUTER_OFFSET = 25;
15773
+ var BREADBOARD_08MM_CORNER_VIA_X_OUTWARD_SHIFT = 3;
15774
+ var BREADBOARD_08MM_EDGE_HUG_COLUMN_COUNT = 2;
15775
+ var BREADBOARD_08MM_EDGE_HUG_Y_SHIFT = BREADBOARD_08MM_CORNER_VIA_SPACING;
15776
+ var BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET = 0.8;
15777
+ var BREADBOARD_08MM_BREAKOUT_LANE_SPACING = 0.4;
15778
+ var BREADBOARD_08MM_VIA_BREAKOUT_LENGTH = 1;
15779
+ var BREADBOARD_08MM_ROW_BREAKOUT_LENGTH = 1.2;
15780
+ var BREADBOARD_08MM_CLAD_EDGE_CLEARANCE = 0.2;
15781
+ var BREADBOARD_08MM_CLAD_EDGE_CLEARANCE_VALIDATION_TOLERANCE = 1e-3;
15782
+ var BREADBOARD_08MM_BOTTOM_BEHIND_VIA_LANE_START_OFFSET = 1.2;
15783
+ var BREADBOARD_08MM_BOTTOM_BEHIND_VIA_LANE_SPACING = 0.4;
15784
+ var BREADBOARD_08MM_TOP_BANK_ROWS = [
15785
+ "A",
15786
+ "B",
15787
+ "C",
15788
+ "D",
15789
+ "E"
15790
+ ];
15791
+ var BREADBOARD_08MM_BOTTOM_BANK_ROWS = [
15792
+ "F",
15793
+ "G",
15794
+ "H",
15795
+ "I",
15796
+ "J"
15797
+ ];
15798
+ var roundCoordinate4 = (value) => Math.round(value * 1e6) / 1e6;
15799
+ var createPitchedRange2 = (start, end) => Array.from(
15800
+ {
15801
+ length: Math.round((end - start) / BREADBOARD_08MM_CORNER_VIA_SPACING) + 1
15802
+ },
15803
+ (_, index) => roundCoordinate4(start + index * BREADBOARD_08MM_CORNER_VIA_SPACING)
15804
+ );
15805
+ var cornerViaAxisX2 = createPitchedRange2(
15806
+ BREADBOARD_08MM_CORNER_VIA_X_INNER_OFFSET,
15807
+ BREADBOARD_08MM_CORNER_VIA_X_OUTER_OFFSET
15808
+ );
15809
+ var cornerViaArmAxisX2 = createPitchedRange2(
15810
+ BREADBOARD_08MM_CORNER_VIA_ARM_X_INNER_OFFSET,
15811
+ BREADBOARD_08MM_CORNER_VIA_ARM_X_INNER_OFFSET + BREADBOARD_08MM_CORNER_VIA_ARM_WIDTH
15812
+ );
15813
+ var cornerViaArmAxisY2 = createPitchedRange2(
15814
+ BREADBOARD_08MM_CORNER_VIA_Y_INNER_OFFSET,
15815
+ BREADBOARD_08MM_CORNER_VIA_Y_INNER_OFFSET + BREADBOARD_08MM_CORNER_VIA_ARM_WIDTH
15816
+ );
15817
+ var createCornerViaPositions2 = (corner, xSign, ySign) => {
15818
+ const xOutwardShift = xSign === -1 || ySign === -1 ? BREADBOARD_08MM_CORNER_VIA_X_OUTWARD_SHIFT : 0;
15819
+ const toBoardPoint = (point) => ({
15820
+ x: roundCoordinate4(point.x * xSign),
15821
+ y: roundCoordinate4(point.y * ySign)
15822
+ });
15823
+ const cornerLongSideAxisX = corner === "top_right" ? [
15824
+ ...cornerViaAxisX2,
15825
+ BREADBOARD_08MM_CORNER_VIA_X_OUTER_OFFSET + BREADBOARD_08MM_CORNER_VIA_SPACING
15826
+ ] : cornerViaAxisX2;
15827
+ const shiftedCornerViaAxisX = cornerLongSideAxisX.map(
15828
+ (x) => roundCoordinate4(x + xOutwardShift)
15829
+ );
15830
+ const shiftedCornerViaArmAxisX = cornerViaArmAxisX2.map(
15831
+ (x) => roundCoordinate4(x + xOutwardShift)
15832
+ );
15833
+ const verticalExtensionY = BREADBOARD_08MM_CORNER_VIA_Y_OUTER_OFFSET;
15834
+ const localVias = [
15835
+ ...shiftedCornerViaAxisX.flatMap(
15836
+ (x, xIndex) => cornerViaArmAxisY2.map((y, yIndex) => ({
15837
+ nameSuffix: `H${xIndex + 1}_${yIndex === 0 ? "INNER" : "OUTER"}`,
15838
+ arm: "horizontal",
15839
+ x,
15840
+ y: y + (xIndex < BREADBOARD_08MM_EDGE_HUG_COLUMN_COUNT ? BREADBOARD_08MM_EDGE_HUG_Y_SHIFT : 0)
15841
+ }))
15842
+ ),
15843
+ ...shiftedCornerViaArmAxisX.map((x, xIndex) => ({
15844
+ nameSuffix: `V3_${xIndex === 0 ? "INNER" : "OUTER"}`,
15845
+ arm: "vertical",
15846
+ x,
15847
+ y: verticalExtensionY
15848
+ }))
15849
+ ];
15850
+ const createBreakout = (via, openAreaEdge, layer) => {
15851
+ const innerX = shiftedCornerViaAxisX[0];
15852
+ const openCenterX = innerX - BREADBOARD_08MM_VIA_BREAKOUT_LENGTH;
15853
+ const openRowsY = BREADBOARD_08MM_CORNER_VIA_Y_INNER_OFFSET - BREADBOARD_08MM_VIA_BREAKOUT_LENGTH;
15854
+ const columnIndex = Math.round(
15855
+ (via.x - innerX) / BREADBOARD_08MM_CORNER_VIA_SPACING
15856
+ );
15857
+ if (layer === "top") {
15858
+ if (openAreaEdge === "toward_breadboard_rows") {
15859
+ if (via.y === BREADBOARD_08MM_CORNER_VIA_Y_INNER_OFFSET) {
15860
+ return {
15861
+ openAreaEdge,
15862
+ style: "direct",
15863
+ route: [],
15864
+ end: { x: via.x, y: openRowsY }
15865
+ };
15866
+ }
15867
+ const rowWeaveDirection = columnIndex % 2 === 0 ? -1 : 1;
15868
+ const weaveDirection = via.y === BREADBOARD_08MM_CORNER_VIA_Y_OUTER_OFFSET ? -rowWeaveDirection : rowWeaveDirection;
15869
+ const weaveX = via.x + weaveDirection * BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET;
15870
+ return {
15871
+ openAreaEdge,
15872
+ style: "woven",
15873
+ route: [
15874
+ {
15875
+ x: weaveX,
15876
+ y: via.y - BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET
15877
+ }
15878
+ ],
15879
+ end: { x: weaveX, y: openRowsY }
15880
+ };
15881
+ }
15882
+ if (columnIndex === 0) {
15883
+ return {
15884
+ openAreaEdge,
15885
+ style: "direct",
15886
+ route: [],
15887
+ end: { x: openCenterX, y: via.y }
15888
+ };
15889
+ }
15890
+ const weaveY = via.y - BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET;
15891
+ return {
15892
+ openAreaEdge,
15893
+ style: "woven",
15894
+ route: [
15895
+ {
15896
+ x: via.x - BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET,
15897
+ y: weaveY
15898
+ }
15899
+ ],
15900
+ end: { x: openCenterX, y: weaveY }
15901
+ };
15902
+ }
15903
+ if (openAreaEdge === "toward_board_center") {
15904
+ if (via.arm === "vertical") {
15905
+ const verticalArmIndex = shiftedCornerViaArmAxisX.indexOf(via.x);
15906
+ const behindViaLaneY = via.y + BREADBOARD_08MM_BOTTOM_BEHIND_VIA_LANE_START_OFFSET + verticalArmIndex * BREADBOARD_08MM_BOTTOM_BEHIND_VIA_LANE_SPACING;
15907
+ return {
15908
+ openAreaEdge,
15909
+ style: "woven",
15910
+ route: [
15911
+ {
15912
+ x: via.x - BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET,
15913
+ y: behindViaLaneY
15914
+ }
15915
+ ],
15916
+ end: { x: openCenterX, y: behindViaLaneY }
15917
+ };
15918
+ }
15919
+ if (columnIndex === 0) {
15920
+ return {
15921
+ openAreaEdge,
15922
+ style: "direct",
15923
+ route: [],
15924
+ end: { x: openCenterX, y: via.y }
15925
+ };
15926
+ }
15927
+ const laneOffset = 0.7 + (columnIndex - 1) * BREADBOARD_08MM_BREAKOUT_LANE_SPACING;
15928
+ const laneY = via.y - laneOffset;
15929
+ return {
15930
+ openAreaEdge,
15931
+ style: "woven",
15932
+ route: [
15933
+ {
15934
+ x: via.x - BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET,
15935
+ y: laneY
15936
+ }
15937
+ ],
15938
+ end: { x: openCenterX, y: laneY }
15939
+ };
15940
+ }
15941
+ const wrapLaneX = openCenterX - (via.y === BREADBOARD_08MM_CORNER_VIA_Y_OUTER_OFFSET ? columnIndex === 0 ? 1.6 : 2 : 0.4);
15942
+ const outerRowWeaveY = via.y + BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET;
15943
+ const route = via.y === BREADBOARD_08MM_CORNER_VIA_Y_OUTER_OFFSET && columnIndex > 0 ? [
15944
+ {
15945
+ x: via.x - BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET,
15946
+ y: outerRowWeaveY
15947
+ },
15948
+ {
15949
+ x: wrapLaneX,
15950
+ y: outerRowWeaveY
15951
+ }
15952
+ ] : [{ x: wrapLaneX, y: via.y }];
15953
+ return {
15954
+ openAreaEdge,
15955
+ style: "woven",
15956
+ route,
15957
+ end: { x: wrapLaneX, y: openRowsY }
15958
+ };
15959
+ };
15960
+ const toBoardBreakout = (breakout) => ({
15961
+ openAreaEdge: breakout.openAreaEdge,
15962
+ style: breakout.style,
15963
+ route: breakout.route.map(toBoardPoint),
15964
+ end: toBoardPoint(breakout.end)
15965
+ });
15966
+ return localVias.map((via) => {
15967
+ const boardCenterDistance = via.x - shiftedCornerViaAxisX[0];
15968
+ const breadboardRowsDistance = via.y - BREADBOARD_08MM_CORNER_VIA_Y_INNER_OFFSET;
15969
+ const topOpenAreaEdge = boardCenterDistance < breadboardRowsDistance ? "toward_board_center" : "toward_breadboard_rows";
15970
+ const bottomOpenAreaEdge = topOpenAreaEdge === "toward_board_center" ? "toward_breadboard_rows" : "toward_board_center";
15971
+ return {
15972
+ name: `V_${corner.toUpperCase()}_${via.nameSuffix}`,
15973
+ corner,
15974
+ arm: via.arm,
15975
+ ...toBoardPoint(via),
15976
+ topBreakout: toBoardBreakout(createBreakout(via, topOpenAreaEdge, "top")),
15977
+ bottomBreakout: toBoardBreakout(
15978
+ createBreakout(via, bottomOpenAreaEdge, "bottom")
15979
+ )
15980
+ };
15981
+ });
15982
+ };
15983
+ var BREADBOARD_08MM_VIA_POSITIONS = [
15984
+ ["top_left", -1, 1],
15985
+ ["top_right", 1, 1],
15986
+ ["bottom_left", -1, -1],
15987
+ ["bottom_right", 1, -1]
15988
+ ].flatMap(
15989
+ ([corner, xSign, ySign]) => createCornerViaPositions2(corner, xSign, ySign)
15990
+ );
15991
+ var createBankRowConnections = (rows, column) => rows.slice(0, -1).map((row, index) => ({
15992
+ from: `${row}${column}`,
15993
+ to: `${rows[index + 1]}${column}`,
15994
+ column
15995
+ }));
15996
+ var BREADBOARD_08MM_ROW_CONNECTIONS = Array.from(
15997
+ { length: BREADBOARD_COLUMN_COUNT },
15998
+ (_, index) => index + 1
15999
+ ).flatMap((column) => [
16000
+ ...createBankRowConnections(BREADBOARD_08MM_TOP_BANK_ROWS, column),
16001
+ ...createBankRowConnections(BREADBOARD_08MM_BOTTOM_BANK_ROWS, column)
16002
+ ]);
16003
+ var createRowBreakout = (terminalLabel, column, y, yDirection) => {
16004
+ const x = BREADBOARD_COLUMN_XS[column - 1];
16005
+ return {
16006
+ name: `ROW_${terminalLabel}_BREAKOUT`,
16007
+ terminalLabel,
16008
+ column,
16009
+ start: { x, y },
16010
+ end: {
16011
+ x,
16012
+ y: roundCoordinate4(y + yDirection * BREADBOARD_08MM_ROW_BREAKOUT_LENGTH)
16013
+ }
16014
+ };
16015
+ };
16016
+ var BREADBOARD_08MM_ROW_BREAKOUTS = Array.from(
16017
+ { length: BREADBOARD_COLUMN_COUNT },
16018
+ (_, index) => index + 1
16019
+ ).flatMap((column) => [
16020
+ createRowBreakout(`A${column}`, column, BREADBOARD_TERMINAL_ROW_YS.A, 1),
16021
+ createRowBreakout(`E${column}`, column, BREADBOARD_TERMINAL_ROW_YS.E, -1),
16022
+ createRowBreakout(`F${column}`, column, BREADBOARD_TERMINAL_ROW_YS.F, 1),
16023
+ createRowBreakout(`J${column}`, column, BREADBOARD_TERMINAL_ROW_YS.J, -1)
16024
+ ]);
16025
+ var viaBreakoutPinLabels = Object.fromEntries(
16026
+ BREADBOARD_08MM_VIA_POSITIONS.flatMap((via, index) => [
16027
+ [`pin${index * 2 + 1}`, `${via.name}_TOP`],
16028
+ [`pin${index * 2 + 2}`, `${via.name}_BOTTOM`]
16029
+ ])
16030
+ );
16031
+ var rowBreakoutPinLabels = Object.fromEntries(
16032
+ BREADBOARD_08MM_ROW_BREAKOUTS.map((breakout, index) => [
16033
+ `pin${index + 1}`,
16034
+ breakout.name
16035
+ ])
16036
+ );
16037
+ var Breadboard08mmViaBreakoutFootprint = () => /* @__PURE__ */ jsx5("footprint", { children: BREADBOARD_08MM_VIA_POSITIONS.map((via, index) => /* @__PURE__ */ jsxs5(Fragment5, { children: [
16038
+ /* @__PURE__ */ jsx5(
16039
+ "smtpad",
16040
+ {
16041
+ portHints: [`pin${index * 2 + 1}`],
16042
+ shape: "circle",
16043
+ radius: `${BREADBOARD_08MM_BREAKOUT_PAD_DIAMETER / 2}mm`,
16044
+ layer: "top",
16045
+ pcbX: via.topBreakout.end.x,
16046
+ pcbY: via.topBreakout.end.y
16047
+ }
16048
+ ),
16049
+ /* @__PURE__ */ jsx5(
16050
+ "smtpad",
16051
+ {
16052
+ portHints: [`pin${index * 2 + 2}`],
16053
+ shape: "circle",
16054
+ radius: `${BREADBOARD_08MM_BREAKOUT_PAD_DIAMETER / 2}mm`,
16055
+ layer: "bottom",
16056
+ pcbX: via.bottomBreakout.end.x,
16057
+ pcbY: via.bottomBreakout.end.y
16058
+ }
16059
+ )
16060
+ ] }, `via-breakout-pad-${via.name}`)) });
16061
+ var Breadboard08mmRowBreakoutFootprint = () => /* @__PURE__ */ jsx5("footprint", { children: BREADBOARD_08MM_ROW_BREAKOUTS.map((breakout, index) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16062
+ "smtpad",
16063
+ {
16064
+ portHints: [`pin${index + 1}`],
16065
+ shape: "circle",
16066
+ radius: `${BREADBOARD_08MM_BREAKOUT_PAD_DIAMETER / 2}mm`,
16067
+ pcbX: breakout.end.x,
16068
+ pcbY: breakout.end.y
16069
+ }
16070
+ ) }, `row-breakout-pad-${breakout.name}`)) });
16071
+ var BreadboardClad08mmVias = ({
16072
+ children,
16073
+ autorouter,
16074
+ autorouterOptions,
16075
+ minTraceWidth,
16076
+ nominalTraceWidth = BREADBOARD_08MM_BREAKOUT_TRACE_WIDTH
16077
+ }) => /* @__PURE__ */ jsxs5(
16078
+ "board",
16079
+ {
16080
+ name: "BreadboardClad08mmVias",
16081
+ title: "Pre-routed breadboard clad with separate 0.8 mm corner vias",
16082
+ width: `${BREADBOARD_CLAD_WIDTH}mm`,
16083
+ height: `${BREADBOARD_CLAD_HEIGHT}mm`,
16084
+ borderRadius: "2mm",
16085
+ layers: 2,
16086
+ minTraceWidth: `${minTraceWidth ?? 0.15}mm`,
16087
+ minBoardEdgeClearance: `${BREADBOARD_08MM_CLAD_EDGE_CLEARANCE - BREADBOARD_08MM_CLAD_EDGE_CLEARANCE_VALIDATION_TOLERANCE}mm`,
16088
+ minViaHoleDiameter: `${BREADBOARD_08MM_VIA_HOLE_DIAMETER}mm`,
16089
+ minViaPadDiameter: `${BREADBOARD_08MM_VIA_PAD_DIAMETER}mm`,
16090
+ minViaHoleEdgeToViaHoleEdgeClearance: `${BREADBOARD_08MM_MIN_VIA_EDGE_SPACING}mm`,
16091
+ pcbStyle: {
16092
+ viaHoleDiameter: `${BREADBOARD_08MM_VIA_HOLE_DIAMETER}mm`,
16093
+ viaPadDiameter: `${BREADBOARD_08MM_VIA_PAD_DIAMETER}mm`
16094
+ },
16095
+ autorouter: autorouter ?? createPrefabricatedViaAutorouter({
16096
+ width: BREADBOARD_CLAD_WIDTH,
16097
+ height: BREADBOARD_CLAD_HEIGHT,
16098
+ edgeClearance: BREADBOARD_08MM_CLAD_EDGE_CLEARANCE,
16099
+ options: autorouterOptions,
16100
+ minimumTraceWidth: minTraceWidth,
16101
+ nominalTraceWidth
16102
+ }),
16103
+ children: [
16104
+ BISCUIT_BOARD_MOUNTING_HOLE_POSITIONS.map((hole) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16105
+ "hole",
16106
+ {
16107
+ pcbX: hole.x,
16108
+ pcbY: hole.y,
16109
+ diameter: `${BREADBOARD_MOUNTING_HOLE_DIAMETER}mm`
16110
+ }
16111
+ ) }, `breadboard-08mm-mounting-hole-${hole.x}-${hole.y}`)),
16112
+ /* @__PURE__ */ jsx5(BreadboardTerminalHeaders, { name: "J_TERMINALS" }),
16113
+ /* @__PURE__ */ jsx5(
16114
+ "pinheader",
16115
+ {
16116
+ name: "J_VIA_BREAKOUTS",
16117
+ pinCount: BREADBOARD_08MM_VIA_POSITIONS.length * 2,
16118
+ pinLabels: viaBreakoutPinLabels,
16119
+ manufacturerPartNumber: "GENERIC-BREADBOARD-08MM-VIA-BREAKOUTS",
16120
+ footprint: /* @__PURE__ */ jsx5(Breadboard08mmViaBreakoutFootprint, {}),
16121
+ gender: "unpopulated",
16122
+ showSilkscreenPinLabels: false,
16123
+ obstructsWithinBounds: false,
16124
+ pcbX: 0,
16125
+ pcbY: 0,
16126
+ shouldBeOnEdgeOfBoard: false,
16127
+ pcbStyle: { silkscreenTextVisibility: "hidden" }
16128
+ }
16129
+ ),
16130
+ /* @__PURE__ */ jsx5(
16131
+ "pinheader",
16132
+ {
16133
+ name: "J_ROW_BREAKOUTS",
16134
+ pinCount: BREADBOARD_08MM_ROW_BREAKOUTS.length,
16135
+ pinLabels: rowBreakoutPinLabels,
16136
+ manufacturerPartNumber: "GENERIC-BREADBOARD-ROW-BREAKOUTS",
16137
+ footprint: /* @__PURE__ */ jsx5(Breadboard08mmRowBreakoutFootprint, {}),
16138
+ gender: "unpopulated",
16139
+ showSilkscreenPinLabels: false,
16140
+ obstructsWithinBounds: false,
16141
+ pcbX: 0,
16142
+ pcbY: 0,
16143
+ shouldBeOnEdgeOfBoard: false,
16144
+ pcbStyle: { silkscreenTextVisibility: "hidden" }
16145
+ }
16146
+ ),
16147
+ [1, 5, 10, 15, 20, BREADBOARD_COLUMN_COUNT].map((column) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16148
+ "silkscreentext",
16149
+ {
16150
+ text: `${column}`,
16151
+ pcbX: BREADBOARD_COLUMN_XS[column - 1],
16152
+ pcbY: 17.2,
16153
+ fontSize: "0.55mm"
16154
+ }
16155
+ ) }, `breadboard-08mm-column-label-${column}`)),
16156
+ BREADBOARD_08MM_VIA_POSITIONS.map((via) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16157
+ "trace",
16158
+ {
16159
+ name: `${via.name}_DUAL_LAYER_BREAKOUT`,
16160
+ from: `.J_VIA_BREAKOUTS > .${via.name}_TOP`,
16161
+ to: `.J_VIA_BREAKOUTS > .${via.name}_BOTTOM`,
16162
+ pcbPath: [
16163
+ `.J_VIA_BREAKOUTS > .${via.name}_TOP`,
16164
+ ...via.topBreakout.route.toReversed(),
16165
+ { x: via.x, y: via.y },
16166
+ {
16167
+ x: via.x,
16168
+ y: via.y,
16169
+ via: true,
16170
+ fromLayer: "top",
16171
+ toLayer: "bottom"
16172
+ },
16173
+ { x: via.x, y: via.y },
16174
+ ...via.bottomBreakout.route,
16175
+ `.J_VIA_BREAKOUTS > .${via.name}_BOTTOM`
16176
+ ],
16177
+ width: `${BREADBOARD_08MM_BREAKOUT_TRACE_WIDTH}mm`
16178
+ }
16179
+ ) }, via.name)),
16180
+ BREADBOARD_08MM_ROW_CONNECTIONS.map((connection) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16181
+ "trace",
16182
+ {
16183
+ name: `ROW_${connection.from}_${connection.to}`,
16184
+ from: `.J_TERMINALS > .${connection.from}`,
16185
+ to: `.J_TERMINALS > .${connection.to}`,
16186
+ width: `${BREADBOARD_08MM_ROW_TRACE_WIDTH}mm`
16187
+ }
16188
+ ) }, `${connection.from}-${connection.to}`)),
16189
+ BREADBOARD_08MM_ROW_BREAKOUTS.map((breakout) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16190
+ "trace",
16191
+ {
16192
+ name: breakout.name,
16193
+ from: `.J_TERMINALS > .${breakout.terminalLabel}`,
16194
+ to: `.J_ROW_BREAKOUTS > .${breakout.name}`,
16195
+ width: `${BREADBOARD_08MM_ROW_TRACE_WIDTH}mm`
16196
+ }
16197
+ ) }, breakout.name)),
16198
+ /* @__PURE__ */ jsx5(
16199
+ "silkscreentext",
16200
+ {
16201
+ text: "0.8MM VIA BREADBOARD",
16202
+ pcbX: 33.5,
16203
+ pcbY: 0,
16204
+ pcbRotation: 90,
16205
+ fontSize: "0.65mm"
16206
+ }
16207
+ ),
16208
+ BREADBOARD_08MM_TOP_BANK_ROWS.map((row) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16209
+ "silkscreentext",
16210
+ {
16211
+ text: row,
16212
+ pcbX: -28.3,
16213
+ pcbY: BREADBOARD_TERMINAL_ROW_YS[row],
16214
+ fontSize: "0.55mm"
16215
+ }
16216
+ ) }, `top-row-label-${row}`)),
16217
+ BREADBOARD_08MM_BOTTOM_BANK_ROWS.map((row) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16218
+ "silkscreentext",
16219
+ {
16220
+ text: row,
16221
+ pcbX: -28.3,
16222
+ pcbY: BREADBOARD_TERMINAL_ROW_YS[row],
16223
+ fontSize: "0.55mm"
16224
+ }
16225
+ ) }, `bottom-row-label-${row}`)),
16226
+ /* @__PURE__ */ jsx5(
16227
+ "pcbnotedimension",
16228
+ {
16229
+ from: {
16230
+ x: -BREADBOARD_CLAD_WIDTH / 2,
16231
+ y: BREADBOARD_CLAD_HEIGHT / 2 + 2.5
16232
+ },
16233
+ to: {
16234
+ x: BREADBOARD_CLAD_WIDTH / 2,
16235
+ y: BREADBOARD_CLAD_HEIGHT / 2 + 2.5
16236
+ },
16237
+ text: `${BREADBOARD_CLAD_WIDTH}mm`
16238
+ }
16239
+ ),
16240
+ /* @__PURE__ */ jsx5(
16241
+ "pcbnotedimension",
16242
+ {
16243
+ from: {
16244
+ x: BREADBOARD_CLAD_WIDTH / 2 + 2.5,
16245
+ y: -BREADBOARD_CLAD_HEIGHT / 2
16246
+ },
16247
+ to: {
16248
+ x: BREADBOARD_CLAD_WIDTH / 2 + 2.5,
16249
+ y: BREADBOARD_CLAD_HEIGHT / 2
16250
+ },
16251
+ text: `${BREADBOARD_CLAD_HEIGHT}mm`
16252
+ }
16253
+ ),
16254
+ children
16255
+ ]
16256
+ }
16257
+ );
16258
+
16259
+ // lib/Clad32x32.tsx
16260
+ import { Fragment as Fragment6 } from "react";
16261
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
15758
16262
  var CLAD_32X32_WIDTH = 32;
15759
16263
  var CLAD_32X32_HEIGHT = 32;
15760
16264
  var CLAD_32X32_MOUNTING_HOLE_DIAMETER = 2;
@@ -15775,22 +16279,22 @@ var CLAD_32X32_MOUNTING_HOLE_POSITIONS = [
15775
16279
  ];
15776
16280
  var CLAD_32X32_EDGE_CLEARANCE = 0.2;
15777
16281
  var CLAD_32X32_EDGE_CLEARANCE_VALIDATION_TOLERANCE = 1e-3;
15778
- var roundCoordinate4 = (value) => Math.round(value * 1e6) / 1e6;
15779
- var createPitchedRange2 = (start, end) => Array.from(
16282
+ var roundCoordinate5 = (value) => Math.round(value * 1e6) / 1e6;
16283
+ var createPitchedRange3 = (start, end) => Array.from(
15780
16284
  {
15781
16285
  length: Math.round((end - start) / CLAD_32X32_VIA_SPACING) + 1
15782
16286
  },
15783
- (_, index) => roundCoordinate4(start + index * CLAD_32X32_VIA_SPACING)
16287
+ (_, index) => roundCoordinate5(start + index * CLAD_32X32_VIA_SPACING)
15784
16288
  );
15785
- var cornerAxis = createPitchedRange2(
16289
+ var cornerAxis = createPitchedRange3(
15786
16290
  CLAD_32X32_VIA_ARM_INNER_OFFSET,
15787
16291
  CLAD_32X32_VIA_ARM_OUTER_OFFSET
15788
16292
  );
15789
- var armAxis = createPitchedRange2(
16293
+ var armAxis = createPitchedRange3(
15790
16294
  CLAD_32X32_VIA_ARM_INNER_OFFSET,
15791
16295
  CLAD_32X32_VIA_ARM_INNER_OFFSET + CLAD_32X32_VIA_ARM_WIDTH
15792
16296
  );
15793
- var createCornerViaPositions2 = (xSign, ySign) => {
16297
+ var createCornerViaPositions3 = (xSign, ySign) => {
15794
16298
  const horizontalArm = cornerAxis.flatMap(
15795
16299
  (x) => armAxis.map((y) => ({ x: x * xSign, y: y * ySign }))
15796
16300
  );
@@ -15811,7 +16315,7 @@ var CLAD_32X32_VIA_POSITIONS = [
15811
16315
  [-1, 1],
15812
16316
  [1, -1],
15813
16317
  [1, 1]
15814
- ].flatMap(([xSign, ySign]) => createCornerViaPositions2(xSign, ySign));
16318
+ ].flatMap(([xSign, ySign]) => createCornerViaPositions3(xSign, ySign));
15815
16319
  var Clad32x32 = ({
15816
16320
  children,
15817
16321
  autorouter,
@@ -15819,7 +16323,7 @@ var Clad32x32 = ({
15819
16323
  minTraceWidth,
15820
16324
  nominalTraceWidth = 0.2,
15821
16325
  routingDisabled = false
15822
- }) => /* @__PURE__ */ jsxs5(
16326
+ }) => /* @__PURE__ */ jsxs6(
15823
16327
  "board",
15824
16328
  {
15825
16329
  name: "Clad32x32",
@@ -15842,7 +16346,7 @@ var Clad32x32 = ({
15842
16346
  }),
15843
16347
  routingDisabled,
15844
16348
  children: [
15845
- CLAD_32X32_MOUNTING_HOLE_POSITIONS.map((hole) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16349
+ CLAD_32X32_MOUNTING_HOLE_POSITIONS.map((hole) => /* @__PURE__ */ jsx6(Fragment6, { children: /* @__PURE__ */ jsx6(
15846
16350
  "hole",
15847
16351
  {
15848
16352
  pcbX: hole.x,
@@ -15850,7 +16354,7 @@ var Clad32x32 = ({
15850
16354
  diameter: `${CLAD_32X32_MOUNTING_HOLE_DIAMETER}mm`
15851
16355
  }
15852
16356
  ) }, `clad-32x32-mounting-hole-${hole.x}-${hole.y}`)),
15853
- CLAD_32X32_VIA_POSITIONS.map((via) => /* @__PURE__ */ jsx5(Fragment5, { children: /* @__PURE__ */ jsx5(
16357
+ CLAD_32X32_VIA_POSITIONS.map((via) => /* @__PURE__ */ jsx6(Fragment6, { children: /* @__PURE__ */ jsx6(
15854
16358
  "via",
15855
16359
  {
15856
16360
  netIsAssignable: true,
@@ -15862,7 +16366,7 @@ var Clad32x32 = ({
15862
16366
  outerDiameter: `${CLAD_32X32_VIA_PAD_DIAMETER}mm`
15863
16367
  }
15864
16368
  ) }, `clad-32x32-prefab-via-${via.x}-${via.y}`)),
15865
- /* @__PURE__ */ jsx5(
16369
+ /* @__PURE__ */ jsx6(
15866
16370
  "pcbnotedimension",
15867
16371
  {
15868
16372
  from: { x: -CLAD_32X32_WIDTH / 2, y: CLAD_32X32_HEIGHT / 2 + 2.5 },
@@ -15870,7 +16374,7 @@ var Clad32x32 = ({
15870
16374
  text: `${CLAD_32X32_WIDTH}mm`
15871
16375
  }
15872
16376
  ),
15873
- /* @__PURE__ */ jsx5(
16377
+ /* @__PURE__ */ jsx6(
15874
16378
  "pcbnotedimension",
15875
16379
  {
15876
16380
  from: { x: CLAD_32X32_WIDTH / 2 + 2.5, y: -CLAD_32X32_HEIGHT / 2 },
@@ -15884,8 +16388,8 @@ var Clad32x32 = ({
15884
16388
  );
15885
16389
 
15886
16390
  // lib/feather-clad.tsx
15887
- import { Fragment as Fragment6 } from "react";
15888
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
16391
+ import { Fragment as Fragment7 } from "react";
16392
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
15889
16393
  var FEATHER_CLAD_WIDTH = 22.86;
15890
16394
  var FEATHER_CLAD_HEIGHT = 50.8;
15891
16395
  var FEATHER_HEADER_PITCH = 2.54;
@@ -15961,7 +16465,7 @@ var FEATHER_PIN_NAMES = Array.from(
15961
16465
  { length: 28 },
15962
16466
  (_, index) => `pin${index + 1}`
15963
16467
  );
15964
- var FeatherPinHeaderFootprint = () => /* @__PURE__ */ jsx6("footprint", { insertionDirection: "from_below", children: FEATHER_HEADER_POSITIONS.map((position, index) => /* @__PURE__ */ jsx6(Fragment6, { children: index === 0 ? /* @__PURE__ */ jsx6(
16468
+ var FeatherPinHeaderFootprint = () => /* @__PURE__ */ jsx7("footprint", { insertionDirection: "from_below", children: FEATHER_HEADER_POSITIONS.map((position, index) => /* @__PURE__ */ jsx7(Fragment7, { children: index === 0 ? /* @__PURE__ */ jsx7(
15965
16469
  "platedhole",
15966
16470
  {
15967
16471
  portHints: [`pin${index + 1}`],
@@ -15972,7 +16476,7 @@ var FeatherPinHeaderFootprint = () => /* @__PURE__ */ jsx6("footprint", { insert
15972
16476
  pcbX: position.x,
15973
16477
  pcbY: position.y
15974
16478
  }
15975
- ) : /* @__PURE__ */ jsx6(
16479
+ ) : /* @__PURE__ */ jsx7(
15976
16480
  "platedhole",
15977
16481
  {
15978
16482
  portHints: [`pin${index + 1}`],
@@ -15983,12 +16487,12 @@ var FeatherPinHeaderFootprint = () => /* @__PURE__ */ jsx6("footprint", { insert
15983
16487
  pcbY: position.y
15984
16488
  }
15985
16489
  ) }, `feather-header-${position.x}-${position.y}`)) });
15986
- var FeatherPinHeaders = (props) => /* @__PURE__ */ jsx6(
16490
+ var FeatherPinHeaders = (props) => /* @__PURE__ */ jsx7(
15987
16491
  "connector",
15988
16492
  {
15989
16493
  pinLabels: FEATHER_PIN_LABELS,
15990
16494
  manufacturerPartNumber: "GENERIC-FEATHER-1X16-PLUS-1X12-MALE-2.54MM-DOWN",
15991
- footprint: /* @__PURE__ */ jsx6(FeatherPinHeaderFootprint, {}),
16495
+ footprint: /* @__PURE__ */ jsx7(FeatherPinHeaderFootprint, {}),
15992
16496
  noSchematicRepresentation: true,
15993
16497
  ...props
15994
16498
  }
@@ -16002,7 +16506,7 @@ var FeatherCladWithPinHeaders = ({
16002
16506
  routingDisabled = false,
16003
16507
  markHeadersNoConnect = false,
16004
16508
  showUsbLabel = true
16005
- }) => /* @__PURE__ */ jsxs6(
16509
+ }) => /* @__PURE__ */ jsxs7(
16006
16510
  "board",
16007
16511
  {
16008
16512
  name: "FeatherCladWithPinHeaders",
@@ -16025,14 +16529,14 @@ var FeatherCladWithPinHeaders = ({
16025
16529
  }),
16026
16530
  routingDisabled,
16027
16531
  children: [
16028
- /* @__PURE__ */ jsx6(
16532
+ /* @__PURE__ */ jsx7(
16029
16533
  FeatherPinHeaders,
16030
16534
  {
16031
16535
  name: "J_FEATHER",
16032
16536
  noConnect: markHeadersNoConnect ? FEATHER_PIN_NAMES : void 0
16033
16537
  }
16034
16538
  ),
16035
- FEATHER_MOUNTING_HOLE_POSITIONS.map((hole) => /* @__PURE__ */ jsx6(Fragment6, { children: /* @__PURE__ */ jsx6(
16539
+ FEATHER_MOUNTING_HOLE_POSITIONS.map((hole) => /* @__PURE__ */ jsx7(Fragment7, { children: /* @__PURE__ */ jsx7(
16036
16540
  "hole",
16037
16541
  {
16038
16542
  pcbX: hole.x,
@@ -16040,7 +16544,7 @@ var FeatherCladWithPinHeaders = ({
16040
16544
  diameter: `${FEATHER_MOUNTING_HOLE_DIAMETER}mm`
16041
16545
  }
16042
16546
  ) }, `feather-mounting-hole-${hole.x}-${hole.y}`)),
16043
- showUsbLabel && /* @__PURE__ */ jsx6(
16547
+ showUsbLabel && /* @__PURE__ */ jsx7(
16044
16548
  "silkscreentext",
16045
16549
  {
16046
16550
  text: "UP",
@@ -16049,7 +16553,7 @@ var FeatherCladWithPinHeaders = ({
16049
16553
  fontSize: "0.7mm"
16050
16554
  }
16051
16555
  ),
16052
- FEATHER_CLAD_VIA_POSITIONS.map((via) => /* @__PURE__ */ jsx6(Fragment6, { children: /* @__PURE__ */ jsx6(
16556
+ FEATHER_CLAD_VIA_POSITIONS.map((via) => /* @__PURE__ */ jsx7(Fragment7, { children: /* @__PURE__ */ jsx7(
16053
16557
  "via",
16054
16558
  {
16055
16559
  netIsAssignable: true,
@@ -16061,7 +16565,7 @@ var FeatherCladWithPinHeaders = ({
16061
16565
  outerDiameter: `${FEATHER_CLAD_VIA_PAD_DIAMETER}mm`
16062
16566
  }
16063
16567
  ) }, `feather-prefab-via-${via.x}-${via.y}`)),
16064
- /* @__PURE__ */ jsx6(
16568
+ /* @__PURE__ */ jsx7(
16065
16569
  "pcbnotedimension",
16066
16570
  {
16067
16571
  from: {
@@ -16075,7 +16579,7 @@ var FeatherCladWithPinHeaders = ({
16075
16579
  text: `${FEATHER_CLAD_WIDTH}mm`
16076
16580
  }
16077
16581
  ),
16078
- /* @__PURE__ */ jsx6(
16582
+ /* @__PURE__ */ jsx7(
16079
16583
  "pcbnotedimension",
16080
16584
  {
16081
16585
  from: {
@@ -16095,8 +16599,8 @@ var FeatherCladWithPinHeaders = ({
16095
16599
  );
16096
16600
 
16097
16601
  // lib/xiao-clad.tsx
16098
- import { Fragment as Fragment7 } from "react";
16099
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
16602
+ import { Fragment as Fragment8 } from "react";
16603
+ import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
16100
16604
  var XIAO_CLAD_WIDTH = 17.8;
16101
16605
  var XIAO_CLAD_HEIGHT = 21;
16102
16606
  var XIAO_HEADER_PITCH = 2.54;
@@ -16142,7 +16646,7 @@ var XIAO_PIN_NAMES = Array.from(
16142
16646
  { length: 14 },
16143
16647
  (_, index) => `pin${index + 1}`
16144
16648
  );
16145
- var XiaoPinHeaderFootprint = () => /* @__PURE__ */ jsx7("footprint", { insertionDirection: "from_below", children: XIAO_HEADER_POSITIONS.map((position, index) => /* @__PURE__ */ jsx7(Fragment7, { children: index === 0 ? /* @__PURE__ */ jsx7(
16649
+ var XiaoPinHeaderFootprint = () => /* @__PURE__ */ jsx8("footprint", { insertionDirection: "from_below", children: XIAO_HEADER_POSITIONS.map((position, index) => /* @__PURE__ */ jsx8(Fragment8, { children: index === 0 ? /* @__PURE__ */ jsx8(
16146
16650
  "platedhole",
16147
16651
  {
16148
16652
  portHints: [`pin${index + 1}`],
@@ -16153,7 +16657,7 @@ var XiaoPinHeaderFootprint = () => /* @__PURE__ */ jsx7("footprint", { insertion
16153
16657
  pcbX: position.x,
16154
16658
  pcbY: position.y
16155
16659
  }
16156
- ) : /* @__PURE__ */ jsx7(
16660
+ ) : /* @__PURE__ */ jsx8(
16157
16661
  "platedhole",
16158
16662
  {
16159
16663
  portHints: [`pin${index + 1}`],
@@ -16164,12 +16668,12 @@ var XiaoPinHeaderFootprint = () => /* @__PURE__ */ jsx7("footprint", { insertion
16164
16668
  pcbY: position.y
16165
16669
  }
16166
16670
  ) }, `xiao-header-${position.x}-${position.y}`)) });
16167
- var XiaoPinHeaders = (props) => /* @__PURE__ */ jsx7(
16671
+ var XiaoPinHeaders = (props) => /* @__PURE__ */ jsx8(
16168
16672
  "connector",
16169
16673
  {
16170
16674
  pinLabels: XIAO_PIN_LABELS,
16171
16675
  manufacturerPartNumber: "GENERIC-XIAO-2X7-MALE-2.54MM-DOWN",
16172
- footprint: /* @__PURE__ */ jsx7(XiaoPinHeaderFootprint, {}),
16676
+ footprint: /* @__PURE__ */ jsx8(XiaoPinHeaderFootprint, {}),
16173
16677
  noSchematicRepresentation: true,
16174
16678
  ...props
16175
16679
  }
@@ -16186,7 +16690,7 @@ var XiaoCladLayout = ({
16186
16690
  nominalTraceWidth = 0.2,
16187
16691
  routingDisabled = false,
16188
16692
  showUsbLabel = true
16189
- }) => /* @__PURE__ */ jsxs7(
16693
+ }) => /* @__PURE__ */ jsxs8(
16190
16694
  "board",
16191
16695
  {
16192
16696
  name: boardName,
@@ -16211,7 +16715,7 @@ var XiaoCladLayout = ({
16211
16715
  children: [
16212
16716
  pinHeaders,
16213
16717
  edgeFeatures,
16214
- showUsbLabel && /* @__PURE__ */ jsx7(
16718
+ showUsbLabel && /* @__PURE__ */ jsx8(
16215
16719
  "silkscreentext",
16216
16720
  {
16217
16721
  text: "UP",
@@ -16220,7 +16724,7 @@ var XiaoCladLayout = ({
16220
16724
  fontSize: "0.7mm"
16221
16725
  }
16222
16726
  ),
16223
- XIAO_CLAD_VIA_POSITIONS.map((via) => /* @__PURE__ */ jsx7(Fragment7, { children: /* @__PURE__ */ jsx7(
16727
+ XIAO_CLAD_VIA_POSITIONS.map((via) => /* @__PURE__ */ jsx8(Fragment8, { children: /* @__PURE__ */ jsx8(
16224
16728
  "via",
16225
16729
  {
16226
16730
  netIsAssignable: true,
@@ -16232,7 +16736,7 @@ var XiaoCladLayout = ({
16232
16736
  outerDiameter: `${XIAO_CLAD_VIA_PAD_DIAMETER}mm`
16233
16737
  }
16234
16738
  ) }, `xiao-prefab-via-${via.x}-${via.y}`)),
16235
- /* @__PURE__ */ jsx7(
16739
+ /* @__PURE__ */ jsx8(
16236
16740
  "pcbnotedimension",
16237
16741
  {
16238
16742
  from: { x: -XIAO_CLAD_WIDTH / 2, y: XIAO_CLAD_HEIGHT / 2 + 2 },
@@ -16240,7 +16744,7 @@ var XiaoCladLayout = ({
16240
16744
  text: `${XIAO_CLAD_WIDTH}mm`
16241
16745
  }
16242
16746
  ),
16243
- /* @__PURE__ */ jsx7(
16747
+ /* @__PURE__ */ jsx8(
16244
16748
  "pcbnotedimension",
16245
16749
  {
16246
16750
  from: { x: XIAO_CLAD_WIDTH / 2 + 2, y: -XIAO_CLAD_HEIGHT / 2 },
@@ -16255,13 +16759,13 @@ var XiaoCladLayout = ({
16255
16759
  var XiaoCladWithPinHeaders = ({
16256
16760
  markHeadersNoConnect = false,
16257
16761
  ...props
16258
- }) => /* @__PURE__ */ jsx7(
16762
+ }) => /* @__PURE__ */ jsx8(
16259
16763
  XiaoCladLayout,
16260
16764
  {
16261
16765
  ...props,
16262
16766
  boardName: "XiaoCladWithPinHeaders",
16263
16767
  boardTitle: "XIAO form-factor copper clad with pin headers",
16264
- pinHeaders: /* @__PURE__ */ jsx7(
16768
+ pinHeaders: /* @__PURE__ */ jsx8(
16265
16769
  XiaoPinHeaders,
16266
16770
  {
16267
16771
  name: "J_XIAO",
@@ -16272,8 +16776,8 @@ var XiaoCladWithPinHeaders = ({
16272
16776
  );
16273
16777
 
16274
16778
  // lib/xiao-clad-with-perforated-pin-headers.tsx
16275
- import { Fragment as Fragment8 } from "react";
16276
- import { jsx as jsx8 } from "react/jsx-runtime";
16779
+ import { Fragment as Fragment9 } from "react";
16780
+ import { jsx as jsx9 } from "react/jsx-runtime";
16277
16781
  var XIAO_PERFORATED_HEADER_PAD_WIDTH = 2.13;
16278
16782
  var XIAO_PERFORATED_HEADER_PAD_HEIGHT = 2;
16279
16783
  var XIAO_PERFORATION_HOLE_DIAMETER = 0.7;
@@ -16283,13 +16787,13 @@ var XIAO_PERFORATION_POSITIONS = XIAO_HEADER_POSITIONS.map(
16283
16787
  y: position.y
16284
16788
  })
16285
16789
  );
16286
- var XiaoPerforatedPinHeaderFootprint = () => /* @__PURE__ */ jsx8("footprint", { insertionDirection: "from_below", children: XIAO_HEADER_POSITIONS.map((headerPosition, index) => {
16790
+ var XiaoPerforatedPinHeaderFootprint = () => /* @__PURE__ */ jsx9("footprint", { insertionDirection: "from_below", children: XIAO_HEADER_POSITIONS.map((headerPosition, index) => {
16287
16791
  const side = Math.sign(headerPosition.x);
16288
16792
  const padCenterX = side * (XIAO_CLAD_WIDTH / 2 - XIAO_PERFORATED_HEADER_PAD_WIDTH / 2);
16289
- return /* @__PURE__ */ jsx8(
16290
- Fragment8,
16793
+ return /* @__PURE__ */ jsx9(
16794
+ Fragment9,
16291
16795
  {
16292
- children: /* @__PURE__ */ jsx8(
16796
+ children: /* @__PURE__ */ jsx9(
16293
16797
  "platedhole",
16294
16798
  {
16295
16799
  portHints: [`pin${index + 1}`],
@@ -16306,12 +16810,12 @@ var XiaoPerforatedPinHeaderFootprint = () => /* @__PURE__ */ jsx8("footprint", {
16306
16810
  `xiao-perforated-header-${headerPosition.x}-${headerPosition.y}`
16307
16811
  );
16308
16812
  }) });
16309
- var XiaoPerforatedPinHeaders = (props) => /* @__PURE__ */ jsx8(
16813
+ var XiaoPerforatedPinHeaders = (props) => /* @__PURE__ */ jsx9(
16310
16814
  "connector",
16311
16815
  {
16312
16816
  pinLabels: XIAO_PIN_LABELS,
16313
16817
  manufacturerPartNumber: "GENERIC-XIAO-2X7-MALE-2.54MM-DOWN-PERFORATED",
16314
- footprint: /* @__PURE__ */ jsx8(XiaoPerforatedPinHeaderFootprint, {}),
16818
+ footprint: /* @__PURE__ */ jsx9(XiaoPerforatedPinHeaderFootprint, {}),
16315
16819
  noSchematicRepresentation: true,
16316
16820
  ...props
16317
16821
  }
@@ -16319,20 +16823,20 @@ var XiaoPerforatedPinHeaders = (props) => /* @__PURE__ */ jsx8(
16319
16823
  var XiaoCladWithPerforatedPinHeaders = ({
16320
16824
  markHeadersNoConnect = false,
16321
16825
  ...props
16322
- }) => /* @__PURE__ */ jsx8(
16826
+ }) => /* @__PURE__ */ jsx9(
16323
16827
  XiaoCladLayout,
16324
16828
  {
16325
16829
  ...props,
16326
16830
  boardName: "XiaoCladWithPerforatedPinHeaders",
16327
16831
  boardTitle: "XIAO form-factor copper clad with perforated pin-header sides",
16328
- pinHeaders: /* @__PURE__ */ jsx8(
16832
+ pinHeaders: /* @__PURE__ */ jsx9(
16329
16833
  XiaoPerforatedPinHeaders,
16330
16834
  {
16331
16835
  name: "J_XIAO",
16332
16836
  noConnect: markHeadersNoConnect ? XIAO_PIN_NAMES : void 0
16333
16837
  }
16334
16838
  ),
16335
- edgeFeatures: XIAO_PERFORATION_POSITIONS.map((position) => /* @__PURE__ */ jsx8(Fragment8, { children: /* @__PURE__ */ jsx8(
16839
+ edgeFeatures: XIAO_PERFORATION_POSITIONS.map((position) => /* @__PURE__ */ jsx9(Fragment9, { children: /* @__PURE__ */ jsx9(
16336
16840
  "cutout",
16337
16841
  {
16338
16842
  shape: "circle",
@@ -16388,6 +16892,33 @@ export {
16388
16892
  BOOSTERPACK_MIDDLE_VIA_CLUSTER_CENTER_X,
16389
16893
  BOOSTERPACK_MIDDLE_VIA_CLUSTER_HEIGHT,
16390
16894
  BOOSTERPACK_MIDDLE_VIA_CLUSTER_WIDTH,
16895
+ BREADBOARD_08MM_BOTTOM_BANK_ROWS,
16896
+ BREADBOARD_08MM_BREAKOUT_LANE_SPACING,
16897
+ BREADBOARD_08MM_BREAKOUT_PAD_DIAMETER,
16898
+ BREADBOARD_08MM_BREAKOUT_TRACE_WIDTH,
16899
+ BREADBOARD_08MM_BREAKOUT_WEAVE_OFFSET,
16900
+ BREADBOARD_08MM_CORNER_VIA_ARM_WIDTH,
16901
+ BREADBOARD_08MM_CORNER_VIA_ARM_X_INNER_OFFSET,
16902
+ BREADBOARD_08MM_CORNER_VIA_LONG_SIDE_COLUMNS,
16903
+ BREADBOARD_08MM_CORNER_VIA_SPACING,
16904
+ BREADBOARD_08MM_CORNER_VIA_X_INNER_OFFSET,
16905
+ BREADBOARD_08MM_CORNER_VIA_X_OUTER_OFFSET,
16906
+ BREADBOARD_08MM_CORNER_VIA_X_OUTWARD_SHIFT,
16907
+ BREADBOARD_08MM_CORNER_VIA_Y_INNER_OFFSET,
16908
+ BREADBOARD_08MM_CORNER_VIA_Y_OUTER_OFFSET,
16909
+ BREADBOARD_08MM_EDGE_HUG_COLUMN_COUNT,
16910
+ BREADBOARD_08MM_EDGE_HUG_Y_SHIFT,
16911
+ BREADBOARD_08MM_MIN_VIA_EDGE_SPACING,
16912
+ BREADBOARD_08MM_ROW_BREAKOUTS,
16913
+ BREADBOARD_08MM_ROW_BREAKOUT_LENGTH,
16914
+ BREADBOARD_08MM_ROW_CONNECTIONS,
16915
+ BREADBOARD_08MM_ROW_TRACE_WIDTH,
16916
+ BREADBOARD_08MM_TOP_BANK_ROWS,
16917
+ BREADBOARD_08MM_TOP_RIGHT_LONG_SIDE_COLUMNS,
16918
+ BREADBOARD_08MM_VIA_BREAKOUT_LENGTH,
16919
+ BREADBOARD_08MM_VIA_HOLE_DIAMETER,
16920
+ BREADBOARD_08MM_VIA_PAD_DIAMETER,
16921
+ BREADBOARD_08MM_VIA_POSITIONS,
16391
16922
  BREADBOARD_CLAD_HEIGHT,
16392
16923
  BREADBOARD_CLAD_VIA_HOLE_DIAMETER,
16393
16924
  BREADBOARD_CLAD_VIA_PAD_DIAMETER,
@@ -16418,6 +16949,7 @@ export {
16418
16949
  BoosterPackLeftHeader,
16419
16950
  BoosterPackRightHeader,
16420
16951
  BreadboardClad,
16952
+ BreadboardClad08mmVias,
16421
16953
  BreadboardTerminalHeaders,
16422
16954
  CLAD_32X32_EDGE_CONNECTOR_OPENING,
16423
16955
  CLAD_32X32_HEIGHT,