@tscircuit/footprinter 0.0.204 → 0.0.205

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 CHANGED
@@ -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: () => platedhole3,
32
+ platedhole: () => platedhole2,
33
33
  potentiometer: () => potentiometer,
34
34
  pushbutton: () => pushbutton,
35
35
  qfn: () => qfn,
@@ -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().default("2.2mm"),
5369
- id: length35.optional().default("0.70mm"),
5370
- pw: length35.optional().default("1.20mm"),
5371
- pl: length35.optional().default("1.20mm"),
5372
- w: length35.optional().default("6mm"),
5373
- h: length35.optional().default("5mm")
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 parameters = jst_def.parse(raw_params);
5377
- const { p, id, pw, pl, h } = parameters;
5378
- const half_p = p / 2;
5379
- const plated_holes = [
5380
- platedHoleWithRectPad(1, -half_p, 2, id, pw, pl),
5381
- platedHoleWithRectPad(2, half_p, 2, id, pw, pl)
5382
- ];
5383
- const silkscreenBody = {
5384
- type: "pcb_silkscreen_path",
5385
- layer: "top",
5386
- pcb_component_id: "",
5387
- route: [
5388
- { x: -3, y: 3 },
5389
- { x: 3, y: 3 },
5390
- { x: 3, y: -2 },
5391
- { x: -3, y: -2 },
5392
- { x: -3, y: 3 }
5393
- ],
5394
- stroke_width: 0.1,
5395
- pcb_silkscreen_path_id: ""
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
- ...plated_holes,
5401
- silkscreenBody,
5402
- silkscreenRefText
5403
- ],
5404
- parameters
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 platedhole3 = (raw_params) => {
6874
+ var platedhole2 = (raw_params) => {
6783
6875
  const params = platedhole_def.parse(raw_params);
6784
6876
  const { d, pd, squarepad } = params;
6785
6877
  return {