@tscircuit/footprinter 0.0.204 → 0.0.206
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +9 -9
- package/dist/index.js +130 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -377,7 +377,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
377
377
|
nosquareplating: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
378
378
|
nopinlabels: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
379
379
|
doublesidedpinlabel: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
380
|
-
|
|
380
|
+
bottomsidepinlabel: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
381
381
|
}, "strip", z.ZodTypeAny, {
|
|
382
382
|
fn: string;
|
|
383
383
|
num_pins: number;
|
|
@@ -393,7 +393,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
393
393
|
nosquareplating: boolean;
|
|
394
394
|
nopinlabels: boolean;
|
|
395
395
|
doublesidedpinlabel: boolean;
|
|
396
|
-
|
|
396
|
+
bottomsidepinlabel: boolean;
|
|
397
397
|
male?: boolean | undefined;
|
|
398
398
|
female?: boolean | undefined;
|
|
399
399
|
}, {
|
|
@@ -413,7 +413,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
413
413
|
nosquareplating?: boolean | undefined;
|
|
414
414
|
nopinlabels?: boolean | undefined;
|
|
415
415
|
doublesidedpinlabel?: boolean | undefined;
|
|
416
|
-
|
|
416
|
+
bottomsidepinlabel?: boolean | undefined;
|
|
417
417
|
}>, {
|
|
418
418
|
pinlabelAnchorSide: "top" | "bottom" | "left" | "right";
|
|
419
419
|
male: boolean;
|
|
@@ -432,7 +432,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
432
432
|
nosquareplating: boolean;
|
|
433
433
|
nopinlabels: boolean;
|
|
434
434
|
doublesidedpinlabel: boolean;
|
|
435
|
-
|
|
435
|
+
bottomsidepinlabel: boolean;
|
|
436
436
|
}, {
|
|
437
437
|
fn: string;
|
|
438
438
|
num_pins?: number | undefined;
|
|
@@ -450,7 +450,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
450
450
|
nosquareplating?: boolean | undefined;
|
|
451
451
|
nopinlabels?: boolean | undefined;
|
|
452
452
|
doublesidedpinlabel?: boolean | undefined;
|
|
453
|
-
|
|
453
|
+
bottomsidepinlabel?: boolean | undefined;
|
|
454
454
|
}>, {
|
|
455
455
|
pinlabelAnchorSide: "top" | "bottom" | "left" | "right";
|
|
456
456
|
male: boolean;
|
|
@@ -469,7 +469,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
469
469
|
nosquareplating: boolean;
|
|
470
470
|
nopinlabels: boolean;
|
|
471
471
|
doublesidedpinlabel: boolean;
|
|
472
|
-
|
|
472
|
+
bottomsidepinlabel: boolean;
|
|
473
473
|
}, {
|
|
474
474
|
fn: string;
|
|
475
475
|
num_pins?: number | undefined;
|
|
@@ -487,7 +487,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
487
487
|
nosquareplating?: boolean | undefined;
|
|
488
488
|
nopinlabels?: boolean | undefined;
|
|
489
489
|
doublesidedpinlabel?: boolean | undefined;
|
|
490
|
-
|
|
490
|
+
bottomsidepinlabel?: boolean | undefined;
|
|
491
491
|
}>, z.ZodEffects<z.ZodObject<{
|
|
492
492
|
fn: z.ZodString;
|
|
493
493
|
cc: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
@@ -1168,7 +1168,7 @@ type Footprinter = {
|
|
|
1168
1168
|
ssop: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p">;
|
|
1169
1169
|
tssop: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p">;
|
|
1170
1170
|
dfn: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p">;
|
|
1171
|
-
pinrow: (num_pins?: number) => FootprinterParamsBuilder<"p" | "id" | "od" | "male" | "female" | "rows" | "pinlabeltextalignleft" | "pinlabeltextaligncenter" | "pinlabeltextalignright" | "pinlabelverticallyinverted" | "pinlabelorthogonal" | "nosquareplating" | "nopinlabels" | "doublesidedpinlabel" | "
|
|
1171
|
+
pinrow: (num_pins?: number) => FootprinterParamsBuilder<"p" | "id" | "od" | "male" | "female" | "rows" | "pinlabeltextalignleft" | "pinlabeltextaligncenter" | "pinlabeltextalignright" | "pinlabelverticallyinverted" | "pinlabelorthogonal" | "nosquareplating" | "nopinlabels" | "doublesidedpinlabel" | "bottomsidepinlabel">;
|
|
1172
1172
|
axial: () => FootprinterParamsBuilder<"p" | "id" | "od">;
|
|
1173
1173
|
hc49: () => FootprinterParamsBuilder<"p" | "id" | "od" | "w" | "h">;
|
|
1174
1174
|
to220: () => FootprinterParamsBuilder<"w" | "h" | "p" | "id" | "od">;
|
|
@@ -1185,7 +1185,7 @@ type Footprinter = {
|
|
|
1185
1185
|
smc: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl">;
|
|
1186
1186
|
minimelf: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl">;
|
|
1187
1187
|
melf: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl">;
|
|
1188
|
-
jst: () => FootprinterParamsBuilder<"w" | "h" | "p" | "id" | "pw" | "pl">;
|
|
1188
|
+
jst: () => FootprinterParamsBuilder<"w" | "h" | "p" | "id" | "pw" | "pl" | "ph" | "sh">;
|
|
1189
1189
|
micromelf: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl">;
|
|
1190
1190
|
ms013: () => FootprinterParamsBuilder<"w" | "p">;
|
|
1191
1191
|
ms012: () => FootprinterParamsBuilder<"w" | "p">;
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ __export(fn_exports, {
|
|
|
29
29
|
msop: () => msop,
|
|
30
30
|
pad: () => pad,
|
|
31
31
|
pinrow: () => pinrow,
|
|
32
|
-
platedhole: () =>
|
|
32
|
+
platedhole: () => platedhole2,
|
|
33
33
|
potentiometer: () => potentiometer,
|
|
34
34
|
pushbutton: () => pushbutton,
|
|
35
35
|
qfn: () => qfn,
|
|
@@ -1662,7 +1662,7 @@ var pinrow_def = z12.object({
|
|
|
1662
1662
|
nosquareplating: z12.boolean().optional().default(false).describe("do not use rectangular pad for pin 1"),
|
|
1663
1663
|
nopinlabels: z12.boolean().optional().default(false).describe("omit silkscreen pin labels"),
|
|
1664
1664
|
doublesidedpinlabel: z12.boolean().optional().default(false).describe("add silkscreen pins in top and bottom layers"),
|
|
1665
|
-
|
|
1665
|
+
bottomsidepinlabel: z12.boolean().optional().default(false).describe(
|
|
1666
1666
|
"place the silkscreen reference text on the bottom layer instead of top"
|
|
1667
1667
|
)
|
|
1668
1668
|
}).transform((data) => {
|
|
@@ -1697,7 +1697,7 @@ var pinrow = (raw_params) => {
|
|
|
1697
1697
|
pinlabeltextalignright,
|
|
1698
1698
|
nopinlabels,
|
|
1699
1699
|
doublesidedpinlabel,
|
|
1700
|
-
|
|
1700
|
+
bottomsidepinlabel
|
|
1701
1701
|
} = parameters;
|
|
1702
1702
|
let pinlabelTextAlign = "center";
|
|
1703
1703
|
if (pinlabeltextalignleft) pinlabelTextAlign = "left";
|
|
@@ -1742,7 +1742,7 @@ var pinrow = (raw_params) => {
|
|
|
1742
1742
|
anchorSide: pinlabelAnchorSide
|
|
1743
1743
|
});
|
|
1744
1744
|
if (!nopinlabels) {
|
|
1745
|
-
if (!
|
|
1745
|
+
if (!bottomsidepinlabel) {
|
|
1746
1746
|
holes.push(
|
|
1747
1747
|
silkscreenPin({
|
|
1748
1748
|
fs: od / 5,
|
|
@@ -5365,43 +5365,135 @@ import {
|
|
|
5365
5365
|
import { z as z47 } from "zod";
|
|
5366
5366
|
var jst_def = z47.object({
|
|
5367
5367
|
fn: z47.string(),
|
|
5368
|
-
p: length35.optional()
|
|
5369
|
-
id: length35.optional()
|
|
5370
|
-
pw: length35.optional()
|
|
5371
|
-
pl: length35.optional()
|
|
5372
|
-
w: length35.optional()
|
|
5373
|
-
h: length35.optional()
|
|
5368
|
+
p: length35.optional(),
|
|
5369
|
+
id: length35.optional(),
|
|
5370
|
+
pw: length35.optional(),
|
|
5371
|
+
pl: length35.optional(),
|
|
5372
|
+
w: length35.optional(),
|
|
5373
|
+
h: length35.optional(),
|
|
5374
|
+
sh: z47.union([z47.boolean(), z47.string(), z47.number()]).optional().transform((v) => {
|
|
5375
|
+
if (typeof v === "string") {
|
|
5376
|
+
const n = Number(v);
|
|
5377
|
+
return Number.isNaN(n) ? true : n;
|
|
5378
|
+
}
|
|
5379
|
+
return v;
|
|
5380
|
+
}).describe(
|
|
5381
|
+
'JST SH (Surface-mount) connector family. SH stands for "Super High-density".'
|
|
5382
|
+
),
|
|
5383
|
+
ph: z47.boolean().optional().describe(
|
|
5384
|
+
'JST PH (Through-hole) connector family. PH stands for "Pin Header".'
|
|
5385
|
+
),
|
|
5386
|
+
string: z47.string().optional()
|
|
5374
5387
|
});
|
|
5388
|
+
var variantDefaults = {
|
|
5389
|
+
ph: {
|
|
5390
|
+
p: length35.parse("2.2mm"),
|
|
5391
|
+
id: length35.parse("0.70mm"),
|
|
5392
|
+
pw: length35.parse("1.20mm"),
|
|
5393
|
+
pl: length35.parse("1.20mm"),
|
|
5394
|
+
w: length35.parse("6mm"),
|
|
5395
|
+
h: length35.parse("5mm")
|
|
5396
|
+
},
|
|
5397
|
+
sh: {
|
|
5398
|
+
p: length35.parse("1mm"),
|
|
5399
|
+
pw: length35.parse("0.6mm"),
|
|
5400
|
+
pl: length35.parse("1.55mm"),
|
|
5401
|
+
w: length35.parse("5.8mm"),
|
|
5402
|
+
h: length35.parse("7.8mm")
|
|
5403
|
+
}
|
|
5404
|
+
};
|
|
5405
|
+
function getVariant(params) {
|
|
5406
|
+
if (params.sh) return "sh";
|
|
5407
|
+
if (params.ph) return "ph";
|
|
5408
|
+
return "ph";
|
|
5409
|
+
}
|
|
5410
|
+
function generatePads(variant, numPins, p, id, pw, pl) {
|
|
5411
|
+
const pads = [];
|
|
5412
|
+
if (variant === "ph") {
|
|
5413
|
+
const half_p = p / 2;
|
|
5414
|
+
pads.push(platedHoleWithRectPad(1, -half_p, 2, id, pw, pl));
|
|
5415
|
+
pads.push(platedHoleWithRectPad(2, half_p, 2, id, pw, pl));
|
|
5416
|
+
} else {
|
|
5417
|
+
const startX = -((numPins - 1) / 2) * p;
|
|
5418
|
+
for (let i = 0; i < numPins; i++) {
|
|
5419
|
+
const x = startX + i * p;
|
|
5420
|
+
console.log("x si", x);
|
|
5421
|
+
pads.push(rectpad(i + 1, x, -1.325, pw, pl));
|
|
5422
|
+
}
|
|
5423
|
+
const sideOffset = (numPins - 1) / 2 * p + 1.3;
|
|
5424
|
+
console.log("offset", sideOffset);
|
|
5425
|
+
pads.push(rectpad(numPins + 1, -sideOffset, 1.22, 1.2, 1.8));
|
|
5426
|
+
pads.push(rectpad(numPins + 2, sideOffset, 1.22, 1.2, 1.8));
|
|
5427
|
+
}
|
|
5428
|
+
return pads;
|
|
5429
|
+
}
|
|
5430
|
+
function generateSilkscreenBody(variant, w, h) {
|
|
5431
|
+
if (variant === "ph") {
|
|
5432
|
+
return {
|
|
5433
|
+
type: "pcb_silkscreen_path",
|
|
5434
|
+
layer: "top",
|
|
5435
|
+
pcb_component_id: "",
|
|
5436
|
+
route: [
|
|
5437
|
+
{ x: -3, y: 3 },
|
|
5438
|
+
{ x: 3, y: 3 },
|
|
5439
|
+
{ x: 3, y: -2 },
|
|
5440
|
+
{ x: -3, y: -2 },
|
|
5441
|
+
{ x: -3, y: 3 }
|
|
5442
|
+
],
|
|
5443
|
+
stroke_width: 0.1,
|
|
5444
|
+
pcb_silkscreen_path_id: ""
|
|
5445
|
+
};
|
|
5446
|
+
} else {
|
|
5447
|
+
return {
|
|
5448
|
+
type: "pcb_silkscreen_path",
|
|
5449
|
+
layer: "top",
|
|
5450
|
+
pcb_component_id: "",
|
|
5451
|
+
route: [],
|
|
5452
|
+
stroke_width: 0.1,
|
|
5453
|
+
pcb_silkscreen_path_id: ""
|
|
5454
|
+
};
|
|
5455
|
+
}
|
|
5456
|
+
}
|
|
5375
5457
|
var jst = (raw_params) => {
|
|
5376
|
-
const
|
|
5377
|
-
const
|
|
5378
|
-
const
|
|
5379
|
-
const
|
|
5380
|
-
|
|
5381
|
-
|
|
5382
|
-
|
|
5383
|
-
const
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5458
|
+
const params = jst_def.parse(raw_params);
|
|
5459
|
+
const variant = getVariant(params);
|
|
5460
|
+
const defaults = variantDefaults[variant];
|
|
5461
|
+
const p = params.p ?? defaults.p;
|
|
5462
|
+
const id = params.id ?? defaults.id;
|
|
5463
|
+
const pw = params.pw ?? defaults.pw;
|
|
5464
|
+
const pl = params.pl ?? defaults.pl;
|
|
5465
|
+
const w = params.w ?? defaults.w;
|
|
5466
|
+
const h = params.h ?? defaults.h;
|
|
5467
|
+
let numPins = variant === "sh" ? 4 : 2;
|
|
5468
|
+
if (variant === "sh") {
|
|
5469
|
+
const str = typeof raw_params.string === "string" ? raw_params.string : "";
|
|
5470
|
+
const match = str.match(/sh(\d+)/);
|
|
5471
|
+
if (match && match[1]) {
|
|
5472
|
+
const parsed = parseInt(match[1], 10);
|
|
5473
|
+
if (!Number.isNaN(parsed)) {
|
|
5474
|
+
numPins = parsed;
|
|
5475
|
+
}
|
|
5476
|
+
} else if (typeof params.sh === "number") {
|
|
5477
|
+
numPins = params.sh;
|
|
5478
|
+
}
|
|
5479
|
+
}
|
|
5480
|
+
const pads = generatePads(variant, numPins, p, id, pw, pl);
|
|
5481
|
+
const silkscreenBody = generateSilkscreenBody(variant, w, h);
|
|
5397
5482
|
const silkscreenRefText = silkscreenRef(0, h / 2 + 1, 0.5);
|
|
5398
5483
|
return {
|
|
5399
|
-
circuitJson: [
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5484
|
+
circuitJson: [...pads, silkscreenBody, silkscreenRefText],
|
|
5485
|
+
parameters: {
|
|
5486
|
+
...params,
|
|
5487
|
+
p,
|
|
5488
|
+
id,
|
|
5489
|
+
pw,
|
|
5490
|
+
pl,
|
|
5491
|
+
w,
|
|
5492
|
+
h,
|
|
5493
|
+
num_pins: numPins,
|
|
5494
|
+
sh: variant === "sh",
|
|
5495
|
+
ph: variant === "ph"
|
|
5496
|
+
}
|
|
5405
5497
|
};
|
|
5406
5498
|
};
|
|
5407
5499
|
|
|
@@ -6779,7 +6871,7 @@ var platedhole_def = z60.object({
|
|
|
6779
6871
|
squarepad: v.squarepad ?? false
|
|
6780
6872
|
};
|
|
6781
6873
|
});
|
|
6782
|
-
var
|
|
6874
|
+
var platedhole2 = (raw_params) => {
|
|
6783
6875
|
const params = platedhole_def.parse(raw_params);
|
|
6784
6876
|
const { d, pd, squarepad } = params;
|
|
6785
6877
|
return {
|