@tscircuit/footprinter 0.0.103 → 0.0.105
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 +1 -1
- package/dist/index.d.ts +32 -32
- package/dist/index.js +207 -161
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ __export(fn_exports, {
|
|
|
29
29
|
res: () => res,
|
|
30
30
|
sod123: () => sod123,
|
|
31
31
|
soic: () => soic,
|
|
32
|
+
sop8: () => sop8,
|
|
32
33
|
sot23: () => sot23,
|
|
33
34
|
sot235: () => sot235,
|
|
34
35
|
sot236: () => sot236,
|
|
@@ -42,15 +43,6 @@ __export(fn_exports, {
|
|
|
42
43
|
tssop: () => tssop
|
|
43
44
|
});
|
|
44
45
|
|
|
45
|
-
// src/helpers/u-curve.ts
|
|
46
|
-
var u_curve = Array.from(
|
|
47
|
-
{ length: 9 },
|
|
48
|
-
(_, i) => Math.cos(i / 8 * Math.PI - Math.PI)
|
|
49
|
-
).map((x) => ({
|
|
50
|
-
x,
|
|
51
|
-
y: -Math.sqrt(1 - x ** 2)
|
|
52
|
-
}));
|
|
53
|
-
|
|
54
46
|
// src/helpers/platedhole.ts
|
|
55
47
|
import { mm } from "@tscircuit/mm";
|
|
56
48
|
var platedhole = (pn, x, y, id, od) => {
|
|
@@ -67,10 +59,34 @@ var platedhole = (pn, x, y, id, od) => {
|
|
|
67
59
|
};
|
|
68
60
|
};
|
|
69
61
|
|
|
70
|
-
// src/fn/
|
|
62
|
+
// src/fn/soic.ts
|
|
71
63
|
import { z } from "zod";
|
|
72
64
|
import { length } from "circuit-json";
|
|
73
65
|
|
|
66
|
+
// src/helpers/u-curve.ts
|
|
67
|
+
var u_curve = Array.from(
|
|
68
|
+
{ length: 9 },
|
|
69
|
+
(_, i) => Math.cos(i / 8 * Math.PI - Math.PI)
|
|
70
|
+
).map((x) => ({
|
|
71
|
+
x,
|
|
72
|
+
y: -Math.sqrt(1 - x ** 2)
|
|
73
|
+
}));
|
|
74
|
+
|
|
75
|
+
// src/helpers/rectpad.ts
|
|
76
|
+
var rectpad = (pn, x, y, w, h) => {
|
|
77
|
+
return {
|
|
78
|
+
type: "pcb_smtpad",
|
|
79
|
+
x,
|
|
80
|
+
y,
|
|
81
|
+
width: w,
|
|
82
|
+
height: h,
|
|
83
|
+
layer: "top",
|
|
84
|
+
shape: "rect",
|
|
85
|
+
pcb_smtpad_id: "",
|
|
86
|
+
port_hints: Array.isArray(pn) ? pn.map((item) => item.toString()) : [pn.toString()]
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
|
|
74
90
|
// src/helpers/silkscreenRef.ts
|
|
75
91
|
var silkscreenRef = (x, y, font_size) => {
|
|
76
92
|
return {
|
|
@@ -86,20 +102,157 @@ var silkscreenRef = (x, y, font_size) => {
|
|
|
86
102
|
};
|
|
87
103
|
};
|
|
88
104
|
|
|
89
|
-
// src/fn/
|
|
90
|
-
var
|
|
105
|
+
// src/fn/soic.ts
|
|
106
|
+
var extendSoicDef = (newDefaults) => z.object({
|
|
91
107
|
fn: z.string(),
|
|
92
|
-
num_pins: z.number().optional().default(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
108
|
+
num_pins: z.number().optional().default(8),
|
|
109
|
+
w: length.default(length.parse(newDefaults.w ?? "5.3mm")),
|
|
110
|
+
p: length.default(length.parse(newDefaults.p ?? "1.27mm")),
|
|
111
|
+
pw: length.optional(),
|
|
112
|
+
pl: length.optional(),
|
|
113
|
+
legsoutside: z.boolean().optional().default(newDefaults.legsoutside ?? false)
|
|
114
|
+
}).transform((v) => {
|
|
115
|
+
if (!v.pw && !v.pl) {
|
|
116
|
+
v.pw = length.parse("0.6mm");
|
|
117
|
+
v.pl = length.parse("1.0mm");
|
|
118
|
+
} else if (!v.pw) {
|
|
119
|
+
v.pw = v.pl * (0.6 / 1);
|
|
120
|
+
} else if (!v.pl) {
|
|
121
|
+
v.pl = v.pw * (1 / 0.6);
|
|
122
|
+
}
|
|
123
|
+
return v;
|
|
124
|
+
});
|
|
125
|
+
var soic_def = extendSoicDef({});
|
|
126
|
+
var getCcwSoicCoords = (parameters) => {
|
|
127
|
+
if (parameters.widthincludeslegs !== void 0) {
|
|
128
|
+
parameters.legsoutside = !parameters.widthincludeslegs;
|
|
129
|
+
}
|
|
130
|
+
const { num_pins, pn, w, p, pl, legsoutside } = parameters;
|
|
131
|
+
const ph = num_pins / 2;
|
|
132
|
+
const isLeft = pn <= ph;
|
|
133
|
+
const leftPinGaps = ph - 1;
|
|
134
|
+
const gs = p;
|
|
135
|
+
const h = gs * leftPinGaps;
|
|
136
|
+
const legoffset = legsoutside ? pl / 2 : -pl / 2;
|
|
137
|
+
if (isLeft) {
|
|
138
|
+
return { x: -w / 2 - legoffset, y: h / 2 - (pn - 1) * gs };
|
|
139
|
+
} else {
|
|
140
|
+
return { x: w / 2 + legoffset, y: -h / 2 + (pn - ph - 1) * gs };
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
var soic = (raw_params) => {
|
|
144
|
+
const parameters = soic_def.parse(raw_params);
|
|
145
|
+
return {
|
|
146
|
+
circuitJson: soicWithoutParsing(parameters),
|
|
147
|
+
parameters
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
var soicWithoutParsing = (parameters) => {
|
|
151
|
+
const pads = [];
|
|
152
|
+
for (let i = 0; i < parameters.num_pins; i++) {
|
|
153
|
+
const { x, y } = getCcwSoicCoords({
|
|
154
|
+
num_pins: parameters.num_pins,
|
|
155
|
+
pn: i + 1,
|
|
156
|
+
w: parameters.w,
|
|
157
|
+
p: parameters.p ?? 1.27,
|
|
158
|
+
pl: parameters.pl,
|
|
159
|
+
legsoutside: parameters.legsoutside
|
|
160
|
+
});
|
|
161
|
+
pads.push(
|
|
162
|
+
rectpad(i + 1, x, y, parameters.pl ?? "1mm", parameters.pw ?? "0.6mm")
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
const m = Math.min(1, parameters.p / 2);
|
|
166
|
+
const sw = parameters.w - (parameters.legsoutside ? 0 : parameters.pl * 2) - 0.2;
|
|
167
|
+
const sh = (parameters.num_pins / 2 - 1) * parameters.p + parameters.pw + m;
|
|
168
|
+
const silkscreenRefText = silkscreenRef(
|
|
169
|
+
0,
|
|
170
|
+
sh / 2 + 0.4,
|
|
171
|
+
sh / 12
|
|
172
|
+
);
|
|
173
|
+
const silkscreenBorder = {
|
|
174
|
+
type: "pcb_silkscreen_path",
|
|
175
|
+
layer: "top",
|
|
176
|
+
pcb_component_id: "",
|
|
177
|
+
pcb_silkscreen_path_id: "silkscreen_path_1",
|
|
178
|
+
stroke_width: 0.1,
|
|
179
|
+
route: [
|
|
180
|
+
{ x: -sw / 2, y: -sh / 2 },
|
|
181
|
+
{ x: -sw / 2, y: sh / 2 },
|
|
182
|
+
// Little U shape at the top
|
|
183
|
+
...u_curve.map(({ x, y }) => ({
|
|
184
|
+
x: x * sw / 6,
|
|
185
|
+
y: y * sw / 6 + sh / 2
|
|
186
|
+
})),
|
|
187
|
+
{ x: sw / 2, y: sh / 2 },
|
|
188
|
+
{ x: sw / 2, y: -sh / 2 },
|
|
189
|
+
{ x: -sw / 2, y: -sh / 2 }
|
|
190
|
+
]
|
|
191
|
+
};
|
|
192
|
+
return [...pads, silkscreenBorder, silkscreenRefText];
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// src/fn/sop8.ts
|
|
196
|
+
var sop8_def = extendSoicDef({});
|
|
197
|
+
var sop8 = (raw_params) => {
|
|
198
|
+
const parameters = sop8_def.parse(raw_params);
|
|
199
|
+
const pads = [];
|
|
200
|
+
for (let i = 0; i < parameters.num_pins; i++) {
|
|
201
|
+
const { x, y } = getCcwSoicCoords({
|
|
202
|
+
num_pins: parameters.num_pins,
|
|
203
|
+
pn: i + 1,
|
|
204
|
+
w: parameters.w,
|
|
205
|
+
p: parameters.p ?? 1.27,
|
|
206
|
+
pl: parameters.pl,
|
|
207
|
+
widthincludeslegs: true
|
|
208
|
+
});
|
|
209
|
+
pads.push(
|
|
210
|
+
rectpad(i + 1, x, y, parameters.pl ?? "1.5mm", parameters.pw ?? "0.6mm")
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
const sh = (parameters.num_pins / 2 - 1) * parameters.p + parameters.pw;
|
|
214
|
+
const silkscreenRefText = silkscreenRef(
|
|
215
|
+
0,
|
|
216
|
+
sh / 2 - 0.5,
|
|
217
|
+
sh / 12
|
|
218
|
+
);
|
|
219
|
+
const silkscreenLine = {
|
|
220
|
+
layer: "top",
|
|
221
|
+
pcb_component_id: "",
|
|
222
|
+
pcb_silkscreen_path_id: "",
|
|
223
|
+
type: "pcb_silkscreen_path",
|
|
224
|
+
route: [
|
|
225
|
+
{ x: -parameters.w / 3, y: sh / 2 + 0.2 },
|
|
226
|
+
{ x: parameters.w / 3, y: sh / 2 + 0.2 }
|
|
227
|
+
],
|
|
228
|
+
stroke_width: 0.1
|
|
229
|
+
};
|
|
230
|
+
return {
|
|
231
|
+
circuitJson: [
|
|
232
|
+
...pads,
|
|
233
|
+
silkscreenRefText,
|
|
234
|
+
silkscreenLine
|
|
235
|
+
],
|
|
236
|
+
parameters
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// src/fn/dip.ts
|
|
241
|
+
import { z as z2 } from "zod";
|
|
242
|
+
import { length as length2 } from "circuit-json";
|
|
243
|
+
var extendDipDef = (newDefaults) => z2.object({
|
|
244
|
+
fn: z2.string(),
|
|
245
|
+
num_pins: z2.number().optional().default(6),
|
|
246
|
+
wide: z2.boolean().optional(),
|
|
247
|
+
narrow: z2.boolean().optional(),
|
|
248
|
+
w: length2.optional(),
|
|
249
|
+
p: length2.default(length2.parse(newDefaults.p ?? "2.54mm")),
|
|
250
|
+
id: length2.optional(),
|
|
251
|
+
od: length2.optional()
|
|
99
252
|
}).transform((v) => {
|
|
100
253
|
if (!v.id && !v.od) {
|
|
101
|
-
v.id =
|
|
102
|
-
v.od =
|
|
254
|
+
v.id = length2.parse("1.0mm");
|
|
255
|
+
v.od = length2.parse("1.5mm");
|
|
103
256
|
} else if (!v.id) {
|
|
104
257
|
v.id = v.od * (1 / 1.5);
|
|
105
258
|
} else if (!v.od) {
|
|
@@ -107,11 +260,11 @@ var extendDipDef = (newDefaults) => z.object({
|
|
|
107
260
|
}
|
|
108
261
|
if (!v.w) {
|
|
109
262
|
if (v.wide) {
|
|
110
|
-
v.w =
|
|
263
|
+
v.w = length2.parse("600mil");
|
|
111
264
|
} else if (v.narrow) {
|
|
112
|
-
v.w =
|
|
265
|
+
v.w = length2.parse("300mil");
|
|
113
266
|
} else {
|
|
114
|
-
v.w =
|
|
267
|
+
v.w = length2.parse(newDefaults.w ?? "300mil");
|
|
115
268
|
}
|
|
116
269
|
}
|
|
117
270
|
return v;
|
|
@@ -198,25 +351,10 @@ var dip = (raw_params) => {
|
|
|
198
351
|
};
|
|
199
352
|
};
|
|
200
353
|
|
|
201
|
-
// src/helpers/rectpad.ts
|
|
202
|
-
var rectpad = (pn, x, y, w, h) => {
|
|
203
|
-
return {
|
|
204
|
-
type: "pcb_smtpad",
|
|
205
|
-
x,
|
|
206
|
-
y,
|
|
207
|
-
width: w,
|
|
208
|
-
height: h,
|
|
209
|
-
layer: "top",
|
|
210
|
-
shape: "rect",
|
|
211
|
-
pcb_smtpad_id: "",
|
|
212
|
-
port_hints: Array.isArray(pn) ? pn.map((item) => item.toString()) : [pn.toString()]
|
|
213
|
-
};
|
|
214
|
-
};
|
|
215
|
-
|
|
216
354
|
// src/helpers/passive-fn.ts
|
|
217
355
|
import mm2 from "@tscircuit/mm";
|
|
218
|
-
import { z as
|
|
219
|
-
import { length as
|
|
356
|
+
import { z as z3 } from "zod";
|
|
357
|
+
import { length as length3, distance } from "circuit-json";
|
|
220
358
|
var footprintSizes = [
|
|
221
359
|
{
|
|
222
360
|
imperial: "01005",
|
|
@@ -305,15 +443,15 @@ var imperialMap = footprintSizes.reduce(
|
|
|
305
443
|
},
|
|
306
444
|
{}
|
|
307
445
|
);
|
|
308
|
-
var passive_def =
|
|
309
|
-
tht:
|
|
310
|
-
p:
|
|
311
|
-
pw:
|
|
312
|
-
ph:
|
|
446
|
+
var passive_def = z3.object({
|
|
447
|
+
tht: z3.boolean(),
|
|
448
|
+
p: length3,
|
|
449
|
+
pw: length3.optional(),
|
|
450
|
+
ph: length3.optional(),
|
|
313
451
|
metric: distance.optional(),
|
|
314
452
|
imperial: distance.optional(),
|
|
315
|
-
w:
|
|
316
|
-
h:
|
|
453
|
+
w: length3.optional(),
|
|
454
|
+
h: length3.optional()
|
|
317
455
|
});
|
|
318
456
|
var deriveXFromH = (h) => 0.079 * h ** 2 + 0.94 * h - 9e-3;
|
|
319
457
|
var deriveZFromW = (w) => 1.09 * w + 0.6;
|
|
@@ -404,27 +542,27 @@ var res = (parameters) => {
|
|
|
404
542
|
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
405
543
|
|
|
406
544
|
// src/fn/bga.ts
|
|
407
|
-
import { z as
|
|
408
|
-
import { length as
|
|
545
|
+
import { z as z6 } from "zod";
|
|
546
|
+
import { length as length4, distance as distance2 } from "circuit-json";
|
|
409
547
|
|
|
410
548
|
// src/helpers/zod/dim-2d.ts
|
|
411
|
-
import { z as
|
|
412
|
-
var dim2d =
|
|
549
|
+
import { z as z4 } from "zod";
|
|
550
|
+
var dim2d = z4.string().transform((a) => {
|
|
413
551
|
const [x, y] = a.split(/[x ]/);
|
|
414
552
|
return {
|
|
415
553
|
x: parseFloat(x),
|
|
416
554
|
y: parseFloat(y)
|
|
417
555
|
};
|
|
418
556
|
}).pipe(
|
|
419
|
-
|
|
420
|
-
x:
|
|
421
|
-
y:
|
|
557
|
+
z4.object({
|
|
558
|
+
x: z4.number(),
|
|
559
|
+
y: z4.number()
|
|
422
560
|
})
|
|
423
561
|
);
|
|
424
562
|
|
|
425
563
|
// src/helpers/zod/function-call.ts
|
|
426
|
-
import { z as
|
|
427
|
-
var function_call =
|
|
564
|
+
import { z as z5 } from "zod";
|
|
565
|
+
var function_call = z5.string().or(z5.array(z5.any())).transform((a) => {
|
|
428
566
|
if (Array.isArray(a))
|
|
429
567
|
return a;
|
|
430
568
|
if (a.startsWith("(") && a.endsWith(")")) {
|
|
@@ -434,22 +572,22 @@ var function_call = z4.string().or(z4.array(z4.any())).transform((a) => {
|
|
|
434
572
|
const numVal = Number(v);
|
|
435
573
|
return isNaN(numVal) ? v : numVal;
|
|
436
574
|
});
|
|
437
|
-
}).pipe(
|
|
575
|
+
}).pipe(z5.array(z5.string().or(z5.number())));
|
|
438
576
|
|
|
439
577
|
// src/fn/bga.ts
|
|
440
|
-
var bga_def =
|
|
441
|
-
fn:
|
|
442
|
-
num_pins:
|
|
578
|
+
var bga_def = z6.object({
|
|
579
|
+
fn: z6.string(),
|
|
580
|
+
num_pins: z6.number().optional().default(64),
|
|
443
581
|
grid: dim2d.optional(),
|
|
444
582
|
p: distance2.default("0.8mm"),
|
|
445
|
-
w:
|
|
446
|
-
h:
|
|
447
|
-
ball:
|
|
448
|
-
pad:
|
|
449
|
-
tlorigin:
|
|
450
|
-
blorigin:
|
|
451
|
-
trorigin:
|
|
452
|
-
brorigin:
|
|
583
|
+
w: length4.optional(),
|
|
584
|
+
h: length4.optional(),
|
|
585
|
+
ball: length4.optional().describe("ball diameter"),
|
|
586
|
+
pad: length4.optional().describe("pad width/height"),
|
|
587
|
+
tlorigin: z6.boolean().optional(),
|
|
588
|
+
blorigin: z6.boolean().optional(),
|
|
589
|
+
trorigin: z6.boolean().optional(),
|
|
590
|
+
brorigin: z6.boolean().optional(),
|
|
453
591
|
missing: function_call.default([])
|
|
454
592
|
}).transform((a) => {
|
|
455
593
|
let origin = "tl";
|
|
@@ -538,98 +676,6 @@ var bga = (raw_params) => {
|
|
|
538
676
|
};
|
|
539
677
|
};
|
|
540
678
|
|
|
541
|
-
// src/fn/soic.ts
|
|
542
|
-
import { z as z6 } from "zod";
|
|
543
|
-
import { length as length4 } from "circuit-json";
|
|
544
|
-
var extendSoicDef = (newDefaults) => z6.object({
|
|
545
|
-
fn: z6.string(),
|
|
546
|
-
num_pins: z6.number().optional().default(8),
|
|
547
|
-
w: length4.default(length4.parse(newDefaults.w ?? "5.3mm")),
|
|
548
|
-
p: length4.default(length4.parse(newDefaults.p ?? "1.27mm")),
|
|
549
|
-
pw: length4.optional(),
|
|
550
|
-
pl: length4.optional(),
|
|
551
|
-
legsoutside: z6.boolean().optional().default(newDefaults.legsoutside ?? false)
|
|
552
|
-
}).transform((v) => {
|
|
553
|
-
if (!v.pw && !v.pl) {
|
|
554
|
-
v.pw = length4.parse("0.6mm");
|
|
555
|
-
v.pl = length4.parse("1.0mm");
|
|
556
|
-
} else if (!v.pw) {
|
|
557
|
-
v.pw = v.pl * (0.6 / 1);
|
|
558
|
-
} else if (!v.pl) {
|
|
559
|
-
v.pl = v.pw * (1 / 0.6);
|
|
560
|
-
}
|
|
561
|
-
return v;
|
|
562
|
-
});
|
|
563
|
-
var soic_def = extendSoicDef({});
|
|
564
|
-
var getCcwSoicCoords = (parameters) => {
|
|
565
|
-
if (parameters.widthincludeslegs !== void 0) {
|
|
566
|
-
parameters.legsoutside = !parameters.widthincludeslegs;
|
|
567
|
-
}
|
|
568
|
-
const { num_pins, pn, w, p, pl, legsoutside } = parameters;
|
|
569
|
-
const ph = num_pins / 2;
|
|
570
|
-
const isLeft = pn <= ph;
|
|
571
|
-
const leftPinGaps = ph - 1;
|
|
572
|
-
const gs = p;
|
|
573
|
-
const h = gs * leftPinGaps;
|
|
574
|
-
const legoffset = legsoutside ? pl / 2 : -pl / 2;
|
|
575
|
-
if (isLeft) {
|
|
576
|
-
return { x: -w / 2 - legoffset, y: h / 2 - (pn - 1) * gs };
|
|
577
|
-
} else {
|
|
578
|
-
return { x: w / 2 + legoffset, y: -h / 2 + (pn - ph - 1) * gs };
|
|
579
|
-
}
|
|
580
|
-
};
|
|
581
|
-
var soic = (raw_params) => {
|
|
582
|
-
const parameters = soic_def.parse(raw_params);
|
|
583
|
-
return {
|
|
584
|
-
circuitJson: soicWithoutParsing(parameters),
|
|
585
|
-
parameters
|
|
586
|
-
};
|
|
587
|
-
};
|
|
588
|
-
var soicWithoutParsing = (parameters) => {
|
|
589
|
-
const pads = [];
|
|
590
|
-
for (let i = 0; i < parameters.num_pins; i++) {
|
|
591
|
-
const { x, y } = getCcwSoicCoords({
|
|
592
|
-
num_pins: parameters.num_pins,
|
|
593
|
-
pn: i + 1,
|
|
594
|
-
w: parameters.w,
|
|
595
|
-
p: parameters.p ?? 1.27,
|
|
596
|
-
pl: parameters.pl,
|
|
597
|
-
legsoutside: parameters.legsoutside
|
|
598
|
-
});
|
|
599
|
-
pads.push(
|
|
600
|
-
rectpad(i + 1, x, y, parameters.pl ?? "1mm", parameters.pw ?? "0.6mm")
|
|
601
|
-
);
|
|
602
|
-
}
|
|
603
|
-
const m = Math.min(1, parameters.p / 2);
|
|
604
|
-
const sw = parameters.w - (parameters.legsoutside ? 0 : parameters.pl * 2) - 0.2;
|
|
605
|
-
const sh = (parameters.num_pins / 2 - 1) * parameters.p + parameters.pw + m;
|
|
606
|
-
const silkscreenRefText = silkscreenRef(
|
|
607
|
-
0,
|
|
608
|
-
sh / 2 + 0.4,
|
|
609
|
-
sh / 12
|
|
610
|
-
);
|
|
611
|
-
const silkscreenBorder = {
|
|
612
|
-
type: "pcb_silkscreen_path",
|
|
613
|
-
layer: "top",
|
|
614
|
-
pcb_component_id: "",
|
|
615
|
-
pcb_silkscreen_path_id: "silkscreen_path_1",
|
|
616
|
-
stroke_width: 0.1,
|
|
617
|
-
route: [
|
|
618
|
-
{ x: -sw / 2, y: -sh / 2 },
|
|
619
|
-
{ x: -sw / 2, y: sh / 2 },
|
|
620
|
-
// Little U shape at the top
|
|
621
|
-
...u_curve.map(({ x, y }) => ({
|
|
622
|
-
x: x * sw / 6,
|
|
623
|
-
y: y * sw / 6 + sh / 2
|
|
624
|
-
})),
|
|
625
|
-
{ x: sw / 2, y: sh / 2 },
|
|
626
|
-
{ x: sw / 2, y: -sh / 2 },
|
|
627
|
-
{ x: -sw / 2, y: -sh / 2 }
|
|
628
|
-
]
|
|
629
|
-
};
|
|
630
|
-
return [...pads, silkscreenBorder, silkscreenRefText];
|
|
631
|
-
};
|
|
632
|
-
|
|
633
679
|
// src/fn/quad.ts
|
|
634
680
|
import { z as z8 } from "zod";
|
|
635
681
|
import { length as length5 } from "circuit-json";
|