@tscircuit/footprinter 0.0.177 → 0.0.179

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
@@ -1067,6 +1067,7 @@ type Footprinter = {
1067
1067
  sot563: () => FootprinterParamsBuilder<"w" | "p" | "pl" | "pw">;
1068
1068
  sot723: () => FootprinterParamsBuilder<"w" | "h" | "pl" | "pw">;
1069
1069
  sot23: () => FootprinterParamsBuilder<"w" | "h" | "pl" | "pw">;
1070
+ sot: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pl" | "pw">;
1070
1071
  sot323: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pl" | "pw">;
1071
1072
  sot89: () => FootprinterParamsBuilder<"w" | "p" | "pl" | "pw" | "h">;
1072
1073
  sod323w: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pl" | "pw">;
package/dist/index.js CHANGED
@@ -60,6 +60,7 @@ __export(fn_exports, {
60
60
  solderjumper: () => solderjumper,
61
61
  son: () => son,
62
62
  sop8: () => sop8,
63
+ sot: () => sot,
63
64
  sot223: () => sot223,
64
65
  sot23: () => sot23,
65
66
  sot23w: () => sot23w,
@@ -6653,7 +6654,8 @@ var platedhole_def = z58.object({
6653
6654
  r: length45.optional(),
6654
6655
  hr: length45.optional(),
6655
6656
  pd: length45.optional(),
6656
- pr: length45.optional()
6657
+ pr: length45.optional(),
6658
+ squarepad: z58.boolean().optional().default(false)
6657
6659
  }).transform((v) => {
6658
6660
  let holeD;
6659
6661
  if (v.d !== void 0)
@@ -6676,21 +6678,146 @@ var platedhole_def = z58.object({
6676
6678
  return {
6677
6679
  fn: v.fn,
6678
6680
  d: holeD,
6679
- pd: padD
6681
+ pd: padD,
6682
+ squarepad: v.squarepad ?? false
6680
6683
  };
6681
6684
  });
6682
6685
  var platedhole3 = (raw_params) => {
6683
6686
  const params = platedhole_def.parse(raw_params);
6684
- const { d, pd } = params;
6687
+ const { d, pd, squarepad } = params;
6685
6688
  return {
6686
6689
  circuitJson: [
6687
- platedhole(1, 0, 0, d, pd),
6690
+ squarepad ? platedHoleWithRectPad(1, 0, 0, d, pd, pd) : platedhole(1, 0, 0, d, pd),
6688
6691
  silkscreenRef(0, pd / 2 + 0.5, 0.2)
6689
6692
  ],
6690
6693
  parameters: params
6691
6694
  };
6692
6695
  };
6693
6696
 
6697
+ // src/fn/sot.ts
6698
+ import { z as z59 } from "zod";
6699
+ var sot_def = z59.object({
6700
+ fn: z59.string(),
6701
+ num_pins: z59.literal(6).default(6),
6702
+ h: z59.string().default("1.6mm"),
6703
+ pl: z59.string().default("1mm"),
6704
+ pw: z59.string().default("0.7mm"),
6705
+ p: z59.string().default("0.95mm")
6706
+ });
6707
+ var sot = (raw_params) => {
6708
+ const parameters = sot_def.parse(raw_params);
6709
+ return {
6710
+ circuitJson: sotWithoutParsing(parameters),
6711
+ parameters
6712
+ };
6713
+ };
6714
+ var getCcwSotCoords = (parameters) => {
6715
+ const { p, h, pn } = parameters;
6716
+ if (pn === 1) {
6717
+ return { x: -h / 2 - 0.5, y: p };
6718
+ }
6719
+ if (pn === 2) {
6720
+ return { x: -h / 2 - 0.5, y: 0 };
6721
+ }
6722
+ if (pn === 3) {
6723
+ return { x: -h / 2 - 0.5, y: -p };
6724
+ }
6725
+ if (pn === 4) {
6726
+ return { x: h / 2 + 0.5, y: -p };
6727
+ }
6728
+ if (pn === 5) {
6729
+ return { x: h / 2 + 0.5, y: 0 };
6730
+ }
6731
+ if (pn === 6) {
6732
+ return { x: h / 2 + 0.5, y: p };
6733
+ }
6734
+ throw new Error("Invalid pin number");
6735
+ };
6736
+ var sotWithoutParsing = (parameters) => {
6737
+ const pads = [];
6738
+ for (let i = 1; i <= parameters.num_pins; i++) {
6739
+ const { x, y } = getCcwSotCoords({
6740
+ h: Number.parseFloat(parameters.h),
6741
+ p: Number.parseFloat(parameters.p),
6742
+ pn: i
6743
+ });
6744
+ pads.push(
6745
+ rectpad(
6746
+ i,
6747
+ x,
6748
+ y,
6749
+ Number.parseFloat(parameters.pl),
6750
+ Number.parseFloat(parameters.pw)
6751
+ )
6752
+ );
6753
+ }
6754
+ const width = parameters.num_pins / 2 * Number.parseFloat(parameters.p);
6755
+ const height = Number.parseFloat(parameters.h);
6756
+ const silkscreenPath1 = {
6757
+ layer: "top",
6758
+ pcb_component_id: "",
6759
+ pcb_silkscreen_path_id: "silkscreen_path_1",
6760
+ route: [
6761
+ { x: -width / 3, y: height / 2 + Number.parseFloat(parameters.p) / 1.3 },
6762
+ { x: width / 3, y: height / 2 + Number.parseFloat(parameters.p) / 1.3 }
6763
+ ],
6764
+ type: "pcb_silkscreen_path",
6765
+ stroke_width: 0.05
6766
+ };
6767
+ const silkscreenPath2 = {
6768
+ layer: "top",
6769
+ pcb_component_id: "",
6770
+ pcb_silkscreen_path_id: "silkscreen_path_2",
6771
+ route: [
6772
+ { x: -width / 3, y: -height / 2 - Number.parseFloat(parameters.p) / 1.3 },
6773
+ { x: width / 3, y: -height / 2 - Number.parseFloat(parameters.p) / 1.3 }
6774
+ ],
6775
+ type: "pcb_silkscreen_path",
6776
+ stroke_width: 0.05
6777
+ };
6778
+ const silkscreenRefText = silkscreenRef(0, height + 0.3, 0.3);
6779
+ const pin1Position = getCcwSotCoords({
6780
+ h: Number.parseFloat(parameters.h),
6781
+ p: Number.parseFloat(parameters.p),
6782
+ pn: 1
6783
+ });
6784
+ pin1Position.x = pin1Position.x - Number.parseFloat(parameters.pw) * 1.5;
6785
+ const triangleHeight = 0.7;
6786
+ const triangleWidth = 0.3;
6787
+ const pin1Indicator = {
6788
+ type: "pcb_silkscreen_path",
6789
+ layer: "top",
6790
+ pcb_component_id: "",
6791
+ pcb_silkscreen_path_id: "pin1_indicator",
6792
+ route: [
6793
+ {
6794
+ x: pin1Position.x + triangleHeight / 2,
6795
+ y: pin1Position.y
6796
+ },
6797
+ {
6798
+ x: pin1Position.x - triangleHeight / 2,
6799
+ y: pin1Position.y + triangleWidth / 2
6800
+ },
6801
+ {
6802
+ x: pin1Position.x - triangleHeight / 2,
6803
+ y: pin1Position.y - triangleWidth / 2
6804
+ },
6805
+ {
6806
+ x: pin1Position.x + triangleHeight / 2,
6807
+ y: pin1Position.y
6808
+ }
6809
+ ],
6810
+ stroke_width: 0.05
6811
+ };
6812
+ return [
6813
+ ...pads,
6814
+ silkscreenRefText,
6815
+ silkscreenPath1,
6816
+ silkscreenPath2,
6817
+ pin1Indicator
6818
+ ];
6819
+ };
6820
+
6694
6821
  // src/helpers/is-not-null.ts
6695
6822
  function isNotNull(value) {
6696
6823
  return value !== null;