@tscircuit/footprinter 0.0.181 → 0.0.183

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
@@ -39,6 +39,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
39
39
  h: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
40
40
  ball: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
41
41
  pad: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
42
+ circularpads: z.ZodOptional<z.ZodBoolean>;
42
43
  tlorigin: z.ZodOptional<z.ZodBoolean>;
43
44
  blorigin: z.ZodOptional<z.ZodBoolean>;
44
45
  trorigin: z.ZodOptional<z.ZodBoolean>;
@@ -57,6 +58,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
57
58
  } | undefined;
58
59
  ball?: number | undefined;
59
60
  pad?: number | undefined;
61
+ circularpads?: boolean | undefined;
60
62
  tlorigin?: boolean | undefined;
61
63
  blorigin?: boolean | undefined;
62
64
  trorigin?: boolean | undefined;
@@ -70,6 +72,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
70
72
  grid?: string | undefined;
71
73
  ball?: string | number | undefined;
72
74
  pad?: string | number | undefined;
75
+ circularpads?: boolean | undefined;
73
76
  tlorigin?: boolean | undefined;
74
77
  blorigin?: boolean | undefined;
75
78
  trorigin?: boolean | undefined;
@@ -89,6 +92,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
89
92
  } | undefined;
90
93
  ball?: number | undefined;
91
94
  pad?: number | undefined;
95
+ circularpads?: boolean | undefined;
92
96
  tlorigin?: boolean | undefined;
93
97
  blorigin?: boolean | undefined;
94
98
  trorigin?: boolean | undefined;
@@ -102,6 +106,7 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
102
106
  grid?: string | undefined;
103
107
  ball?: string | number | undefined;
104
108
  pad?: string | number | undefined;
109
+ circularpads?: boolean | undefined;
105
110
  tlorigin?: boolean | undefined;
106
111
  blorigin?: boolean | undefined;
107
112
  trorigin?: boolean | undefined;
@@ -1026,6 +1031,92 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
1026
1031
  }, {
1027
1032
  w: string | number;
1028
1033
  h: string | number;
1034
+ }>, z.ZodEffects<z.ZodObject<{
1035
+ fn: z.ZodString;
1036
+ circle: z.ZodOptional<z.ZodBoolean>;
1037
+ rect: z.ZodOptional<z.ZodBoolean>;
1038
+ square: z.ZodOptional<z.ZodBoolean>;
1039
+ d: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1040
+ pd: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1041
+ diameter: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1042
+ r: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1043
+ pr: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1044
+ radius: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1045
+ w: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1046
+ pw: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1047
+ width: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1048
+ h: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1049
+ ph: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1050
+ height: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1051
+ s: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1052
+ size: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>>;
1053
+ string: z.ZodOptional<z.ZodString>;
1054
+ }, "strip", z.ZodTypeAny, {
1055
+ fn: string;
1056
+ string?: string | undefined;
1057
+ circle?: boolean | undefined;
1058
+ w?: number | undefined;
1059
+ rect?: boolean | undefined;
1060
+ width?: number | undefined;
1061
+ height?: number | undefined;
1062
+ radius?: number | undefined;
1063
+ pw?: number | undefined;
1064
+ ph?: number | undefined;
1065
+ h?: number | undefined;
1066
+ square?: boolean | undefined;
1067
+ d?: number | undefined;
1068
+ pd?: number | undefined;
1069
+ diameter?: number | undefined;
1070
+ r?: number | undefined;
1071
+ pr?: number | undefined;
1072
+ s?: number | undefined;
1073
+ size?: number | undefined;
1074
+ }, {
1075
+ fn: string;
1076
+ string?: string | undefined;
1077
+ circle?: boolean | undefined;
1078
+ w?: string | number | undefined;
1079
+ rect?: boolean | undefined;
1080
+ width?: string | number | undefined;
1081
+ height?: string | number | undefined;
1082
+ radius?: string | number | undefined;
1083
+ pw?: string | number | undefined;
1084
+ ph?: string | number | undefined;
1085
+ h?: string | number | undefined;
1086
+ square?: boolean | undefined;
1087
+ d?: string | number | undefined;
1088
+ pd?: string | number | undefined;
1089
+ diameter?: string | number | undefined;
1090
+ r?: string | number | undefined;
1091
+ pr?: string | number | undefined;
1092
+ s?: string | number | undefined;
1093
+ size?: string | number | undefined;
1094
+ }>, {
1095
+ fn: string;
1096
+ shape: "circle" | "rect" | "square";
1097
+ radius: number | undefined;
1098
+ width: number | undefined;
1099
+ height: number | undefined;
1100
+ }, {
1101
+ fn: string;
1102
+ string?: string | undefined;
1103
+ circle?: boolean | undefined;
1104
+ w?: string | number | undefined;
1105
+ rect?: boolean | undefined;
1106
+ width?: string | number | undefined;
1107
+ height?: string | number | undefined;
1108
+ radius?: string | number | undefined;
1109
+ pw?: string | number | undefined;
1110
+ ph?: string | number | undefined;
1111
+ h?: string | number | undefined;
1112
+ square?: boolean | undefined;
1113
+ d?: string | number | undefined;
1114
+ pd?: string | number | undefined;
1115
+ diameter?: string | number | undefined;
1116
+ r?: string | number | undefined;
1117
+ pr?: string | number | undefined;
1118
+ s?: string | number | undefined;
1119
+ size?: string | number | undefined;
1029
1120
  }>]>;
1030
1121
  type AnyFootprinterDefinitionOutput = z.infer<typeof any_footprinter_def>;
1031
1122
 
@@ -1051,7 +1142,7 @@ type Footprinter = {
1051
1142
  lr: (num_pins?: number) => FootprinterParamsBuilder<"w" | "l" | "pl" | "pr">;
1052
1143
  qfp: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p" | "id" | "od" | "wide" | "narrow">;
1053
1144
  quad: (num_pins?: number) => FootprinterParamsBuilder<"w" | "l" | "square" | "pl" | "pr" | "pb" | "pt" | "p" | "pw" | "ph">;
1054
- bga: (num_pins?: number) => FootprinterParamsBuilder<"grid" | "p" | "w" | "h" | "ball" | "pad" | "missing" | "tlorigin" | "blorigin" | "trorigin" | "brorigin">;
1145
+ bga: (num_pins?: number) => FootprinterParamsBuilder<"grid" | "p" | "w" | "h" | "ball" | "pad" | "missing" | "tlorigin" | "blorigin" | "trorigin" | "brorigin" | "circularpads">;
1055
1146
  qfn: (num_pins?: number) => FootprinterParamsBuilder<"w" | "h" | "p">;
1056
1147
  soic: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p" | "id" | "od">;
1057
1148
  mlp: (num_pins?: number) => FootprinterParamsBuilder<"w" | "h" | "p">;
@@ -1111,6 +1202,11 @@ type Footprinter = {
1111
1202
  stampboard: () => FootprinterParamsBuilder<"w" | "h" | "left" | "right" | "top" | "bottom" | "p" | "pw" | "pl" | "innerhole" | "innerholeedgedistance">;
1112
1203
  stampreceiver: () => FootprinterParamsBuilder<"w" | "h" | "left" | "right" | "top" | "bottom" | "p" | "pw" | "pl" | "innerhole" | "innerholeedgedistance">;
1113
1204
  breakoutheaders: () => FootprinterParamsBuilder<"w" | "h" | "left" | "right" | "top" | "bottom" | "p" | "id" | "od">;
1205
+ smtpad: () => FootprinterParamsBuilder<"circle" | "rect" | "square" | "d" | "pd" | "diameter" | "r" | "pr" | "radius" | "w" | "pw" | "width" | "h" | "ph" | "height" | "s" | "size"> & {
1206
+ params: () => any;
1207
+ soup: () => AnySoupElement[];
1208
+ circuitJson: () => AnyCircuitElement[];
1209
+ };
1114
1210
  pad: () => FootprinterParamsBuilder<"w" | "h"> & {
1115
1211
  params: () => any;
1116
1212
  soup: () => AnySoupElement[];
package/dist/index.js CHANGED
@@ -40,6 +40,7 @@ __export(fn_exports, {
40
40
  smbf: () => smbf,
41
41
  smc: () => smc,
42
42
  smf: () => smf,
43
+ smtpad: () => smtpad,
43
44
  sod110: () => sod110,
44
45
  sod123: () => sod123,
45
46
  sod123f: () => sod123f,
@@ -475,6 +476,20 @@ var res = (parameters) => {
475
476
  return { circuitJson: passive(parameters), parameters };
476
477
  };
477
478
 
479
+ // src/helpers/circlepad.ts
480
+ var circlepad = (pn, { x, y, radius }) => {
481
+ return {
482
+ type: "pcb_smtpad",
483
+ x,
484
+ y,
485
+ radius,
486
+ layer: "top",
487
+ shape: "circle",
488
+ pcb_smtpad_id: "",
489
+ port_hints: Array.isArray(pn) ? pn.map((item) => item.toString()) : [pn.toString()]
490
+ };
491
+ };
492
+
478
493
  // src/helpers/zod/ALPHABET.ts
479
494
  var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
480
495
 
@@ -521,6 +536,7 @@ var bga_def = z5.object({
521
536
  h: length2.optional(),
522
537
  ball: length2.optional().describe("ball diameter"),
523
538
  pad: length2.optional().describe("pad width/height"),
539
+ circularpads: z5.boolean().optional().describe("use circular pads"),
524
540
  tlorigin: z5.boolean().optional(),
525
541
  blorigin: z5.boolean().optional(),
526
542
  trorigin: z5.boolean().optional(),
@@ -609,14 +625,13 @@ var bga = (raw_params) => {
609
625
  continue;
610
626
  }
611
627
  pin_num -= missing_pins_passed;
628
+ const portHints = [pin_num, `${ALPHABET[pin_y]}${pin_x + 1}`];
612
629
  pads.push(
613
- rectpad(
614
- [pin_num, `${ALPHABET[pin_y]}${pin_x + 1}`],
615
- pad_x,
616
- pad_y,
617
- pad2,
618
- pad2
619
- )
630
+ parameters.circularpads ? circlepad(portHints, {
631
+ x: pad_x,
632
+ y: pad_y,
633
+ radius: pad2 / 2
634
+ }) : rectpad(portHints, pad_x, pad_y, pad2, pad2)
620
635
  );
621
636
  }
622
637
  }
@@ -4041,12 +4056,12 @@ var sot89_3 = (parameters) => {
4041
4056
  const pads = [];
4042
4057
  const padGap = Number.parseFloat(parameters.p);
4043
4058
  const padWidth = Number.parseFloat(parameters.pw);
4044
- const length46 = Number.parseFloat(parameters.w);
4059
+ const length47 = Number.parseFloat(parameters.w);
4045
4060
  const padHeight = Number.parseFloat(parameters.pl);
4046
4061
  pads.push(
4047
- rectpad(1, -length46 / 2, padGap, padHeight, padWidth),
4048
- rectpad(2, -length46 / 2 + (1.5 - 1.3) / 2, 0, 1.5, padWidth),
4049
- rectpad(3, -length46 / 2, -padGap, padHeight, padWidth)
4062
+ rectpad(1, -length47 / 2, padGap, padHeight, padWidth),
4063
+ rectpad(2, -length47 / 2 + (1.5 - 1.3) / 2, 0, 1.5, padWidth),
4064
+ rectpad(3, -length47 / 2, -padGap, padHeight, padWidth)
4050
4065
  );
4051
4066
  const silkscreenRefText = silkscreenRef(0, 0, 0.3);
4052
4067
  const width = Number.parseFloat(parameters.w) / 2 - 1;
@@ -4086,7 +4101,7 @@ var sot89_5 = (parameters) => {
4086
4101
  const pads = [];
4087
4102
  const padGap = Number.parseFloat(parameters.p);
4088
4103
  const padWidth = Number.parseFloat(parameters.pw);
4089
- const length46 = Number.parseFloat(parameters.w);
4104
+ const length47 = Number.parseFloat(parameters.w);
4090
4105
  pads.push(
4091
4106
  rectpad(1, -1.85, -1.5, 1.5, 0.7),
4092
4107
  rectpad(2, -1.85, 1.5, 1.5, 0.7),
@@ -6613,29 +6628,105 @@ var sot323_3 = (parameters) => {
6613
6628
  ];
6614
6629
  };
6615
6630
 
6616
- // src/fn/platedhole.ts
6631
+ // src/fn/smtpad.ts
6617
6632
  import { z as z58 } from "zod";
6618
6633
  import { length as length45 } from "circuit-json";
6619
6634
  import { mm as mm6 } from "@tscircuit/mm";
6620
- var platedhole_def = z58.object({
6635
+ var smtpad_def = z58.object({
6621
6636
  fn: z58.string(),
6637
+ circle: z58.boolean().optional(),
6638
+ rect: z58.boolean().optional(),
6639
+ square: z58.boolean().optional(),
6622
6640
  d: length45.optional(),
6623
- hd: length45.optional(),
6624
- r: length45.optional(),
6625
- hr: length45.optional(),
6626
6641
  pd: length45.optional(),
6642
+ diameter: length45.optional(),
6643
+ r: length45.optional(),
6627
6644
  pr: length45.optional(),
6628
- squarepad: z58.boolean().optional().default(false)
6645
+ radius: length45.optional(),
6646
+ w: length45.optional(),
6647
+ pw: length45.optional(),
6648
+ width: length45.optional(),
6649
+ h: length45.optional(),
6650
+ ph: length45.optional(),
6651
+ height: length45.optional(),
6652
+ s: length45.optional(),
6653
+ size: length45.optional(),
6654
+ string: z58.string().optional()
6655
+ }).transform((v) => {
6656
+ let shape = "rect";
6657
+ if (v.circle) shape = "circle";
6658
+ if (v.square) shape = "square";
6659
+ if (v.rect) shape = "rect";
6660
+ let radius;
6661
+ let width;
6662
+ let height;
6663
+ if (shape === "circle") {
6664
+ if (v.r !== void 0) radius = mm6(v.r);
6665
+ else if (v.pr !== void 0) radius = mm6(v.pr);
6666
+ else if (v.radius !== void 0) radius = mm6(v.radius);
6667
+ else if (v.d !== void 0) radius = mm6(v.d) / 2;
6668
+ else if (v.pd !== void 0) radius = mm6(v.pd) / 2;
6669
+ else if (v.diameter !== void 0) radius = mm6(v.diameter) / 2;
6670
+ else radius = mm6("1mm") / 2;
6671
+ } else {
6672
+ if (v.w !== void 0) width = mm6(v.w);
6673
+ else if (v.pw !== void 0) width = mm6(v.pw);
6674
+ else if (v.width !== void 0) width = mm6(v.width);
6675
+ else if (v.s !== void 0) width = mm6(v.s);
6676
+ else if (v.size !== void 0) width = mm6(v.size);
6677
+ else width = mm6("1mm");
6678
+ if (v.h !== void 0) height = mm6(v.h);
6679
+ else if (v.ph !== void 0) height = mm6(v.ph);
6680
+ else if (v.height !== void 0) height = mm6(v.height);
6681
+ else height = width;
6682
+ }
6683
+ return {
6684
+ fn: v.fn,
6685
+ shape,
6686
+ radius,
6687
+ width,
6688
+ height
6689
+ };
6690
+ });
6691
+ var smtpad = (raw_params) => {
6692
+ const params = smtpad_def.parse(raw_params);
6693
+ const { shape, radius, width, height } = params;
6694
+ return {
6695
+ circuitJson: [
6696
+ shape === "circle" ? circlepad(1, { x: 0, y: 0, radius }) : rectpad(1, 0, 0, width, height),
6697
+ silkscreenRef(
6698
+ 0,
6699
+ shape === "circle" ? radius + 0.5 : height / 2 + 0.5,
6700
+ 0.2
6701
+ )
6702
+ ],
6703
+ parameters: params
6704
+ };
6705
+ };
6706
+
6707
+ // src/fn/platedhole.ts
6708
+ import { z as z59 } from "zod";
6709
+ import { length as length46 } from "circuit-json";
6710
+ import { mm as mm7 } from "@tscircuit/mm";
6711
+ var platedhole_def = z59.object({
6712
+ fn: z59.string(),
6713
+ d: length46.optional(),
6714
+ hd: length46.optional(),
6715
+ r: length46.optional(),
6716
+ hr: length46.optional(),
6717
+ pd: length46.optional(),
6718
+ pr: length46.optional(),
6719
+ squarepad: z59.boolean().optional().default(false)
6629
6720
  }).transform((v) => {
6630
6721
  let holeD;
6631
- if (v.d !== void 0) holeD = mm6(v.d);
6632
- else if (v.hd !== void 0) holeD = mm6(v.hd);
6633
- else if (v.r !== void 0) holeD = mm6(v.r) * 2;
6634
- else if (v.hr !== void 0) holeD = mm6(v.hr) * 2;
6635
- else holeD = mm6("1mm");
6722
+ if (v.d !== void 0) holeD = mm7(v.d);
6723
+ else if (v.hd !== void 0) holeD = mm7(v.hd);
6724
+ else if (v.r !== void 0) holeD = mm7(v.r) * 2;
6725
+ else if (v.hr !== void 0) holeD = mm7(v.hr) * 2;
6726
+ else holeD = mm7("1mm");
6636
6727
  let padD;
6637
- if (v.pd !== void 0) padD = mm6(v.pd);
6638
- else if (v.pr !== void 0) padD = mm6(v.pr) * 2;
6728
+ if (v.pd !== void 0) padD = mm7(v.pd);
6729
+ else if (v.pr !== void 0) padD = mm7(v.pr) * 2;
6639
6730
  else padD = holeD * (1.5 / 1);
6640
6731
  return {
6641
6732
  fn: v.fn,
@@ -6657,14 +6748,14 @@ var platedhole3 = (raw_params) => {
6657
6748
  };
6658
6749
 
6659
6750
  // src/fn/sot.ts
6660
- import { z as z59 } from "zod";
6661
- var sot_def = z59.object({
6662
- fn: z59.string(),
6663
- num_pins: z59.literal(6).default(6),
6664
- h: z59.string().default("1.6mm"),
6665
- pl: z59.string().default("1mm"),
6666
- pw: z59.string().default("0.7mm"),
6667
- p: z59.string().default("0.95mm")
6751
+ import { z as z60 } from "zod";
6752
+ var sot_def = z60.object({
6753
+ fn: z60.string(),
6754
+ num_pins: z60.literal(6).default(6),
6755
+ h: z60.string().default("1.6mm"),
6756
+ pl: z60.string().default("1mm"),
6757
+ pw: z60.string().default("0.7mm"),
6758
+ p: z60.string().default("0.95mm")
6668
6759
  });
6669
6760
  var sot = (raw_params) => {
6670
6761
  const parameters = sot_def.parse(raw_params);