@tscircuit/core 0.0.35 → 0.0.37

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
@@ -6,7 +6,7 @@ import { ReactElement } from 'react';
6
6
  import { Matrix } from 'transformation-matrix';
7
7
  import { SchSymbol, BaseSymbolName } from 'schematic-symbols';
8
8
  import * as Props from '@tscircuit/props';
9
- import { traceProps, groupProps, boardProps, footprintProps, smtPadProps, resistorProps, ledProps, capacitorProps, traceHintProps, chipProps, jumperProps, silkscreenPathProps, platedHoleProps, constraintProps, holeProps } from '@tscircuit/props';
9
+ import { traceProps, groupProps, boardProps, footprintProps, smtPadProps, resistorProps, ledProps, diodeProps, capacitorProps, traceHintProps, chipProps, jumperProps, silkscreenPathProps, platedHoleProps, constraintProps, holeProps } from '@tscircuit/props';
10
10
 
11
11
  declare class Circuit {
12
12
  firstChild: PrimitiveComponent | null;
@@ -534,6 +534,10 @@ declare class Port extends PrimitiveComponent<typeof portProps> {
534
534
  doInitialSourceParentAttachment(): void;
535
535
  doInitialPcbPortRender(): void;
536
536
  doInitialSchematicPortRender(): void;
537
+ _setPositionFromLayout(newCenter: {
538
+ x: number;
539
+ y: number;
540
+ }): void;
537
541
  }
538
542
 
539
543
  type ReactSubtree = {
@@ -1616,6 +1620,405 @@ declare class Led extends NormalComponent<typeof ledProps, PolarizedPassivePorts
1616
1620
  cathode: Port;
1617
1621
  }
1618
1622
 
1623
+ declare class Diode extends NormalComponent<typeof diodeProps, TwoPinPorts> {
1624
+ pin1: Port;
1625
+ pin2: Port;
1626
+ get config(): {
1627
+ zodProps: zod.ZodObject<zod.objectUtil.extendShape<zod.objectUtil.extendShape<zod.objectUtil.extendShape<{
1628
+ pcbX: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
1629
+ pcbY: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
1630
+ pcbRotation: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
1631
+ schX: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
1632
+ schY: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
1633
+ schRotation: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
1634
+ layer: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodEnum<["top", "bottom", "inner1", "inner2", "inner3", "inner4", "inner5", "inner6"]>, zod.ZodObject<{
1635
+ name: zod.ZodEnum<["top", "bottom", "inner1", "inner2", "inner3", "inner4", "inner5", "inner6"]>;
1636
+ }, "strip", zod.ZodTypeAny, {
1637
+ name: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6";
1638
+ }, {
1639
+ name: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6";
1640
+ }>]>, "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6", "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6" | {
1641
+ name: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6";
1642
+ }>>;
1643
+ footprint: zod.ZodOptional<zod.ZodType<Props.Footprint, zod.ZodTypeDef, Props.Footprint>>;
1644
+ }, {
1645
+ supplierPartNumbers: zod.ZodOptional<zod.ZodRecord<zod.ZodEnum<["jlcpcb", "macrofab", "pcbway", "digikey", "mouser", "lcsc"]>, zod.ZodArray<zod.ZodString, "many">>>;
1646
+ }>, {
1647
+ name: zod.ZodString;
1648
+ cadModel: zod.ZodOptional<zod.ZodUnion<[zod.ZodString, zod.ZodObject<zod.objectUtil.extendShape<{
1649
+ rotationOffset: zod.ZodOptional<zod.ZodUnion<[zod.ZodNumber, zod.ZodObject<{
1650
+ x: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1651
+ y: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1652
+ z: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1653
+ }, "strip", zod.ZodTypeAny, {
1654
+ x: string | number;
1655
+ y: string | number;
1656
+ z: string | number;
1657
+ }, {
1658
+ x: string | number;
1659
+ y: string | number;
1660
+ z: string | number;
1661
+ }>]>>;
1662
+ positionOffset: zod.ZodOptional<zod.ZodObject<{
1663
+ x: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1664
+ y: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1665
+ z: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1666
+ }, "strip", zod.ZodTypeAny, {
1667
+ x: number;
1668
+ y: number;
1669
+ z: number;
1670
+ }, {
1671
+ x: string | number;
1672
+ y: string | number;
1673
+ z: string | number;
1674
+ }>>;
1675
+ size: zod.ZodOptional<zod.ZodObject<{
1676
+ x: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1677
+ y: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1678
+ z: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1679
+ }, "strip", zod.ZodTypeAny, {
1680
+ x: number;
1681
+ y: number;
1682
+ z: number;
1683
+ }, {
1684
+ x: string | number;
1685
+ y: string | number;
1686
+ z: string | number;
1687
+ }>>;
1688
+ }, {
1689
+ stlUrl: zod.ZodString;
1690
+ }>, "strip", zod.ZodTypeAny, {
1691
+ stlUrl: string;
1692
+ rotationOffset?: number | {
1693
+ x: string | number;
1694
+ y: string | number;
1695
+ z: string | number;
1696
+ } | undefined;
1697
+ positionOffset?: {
1698
+ x: number;
1699
+ y: number;
1700
+ z: number;
1701
+ } | undefined;
1702
+ size?: {
1703
+ x: number;
1704
+ y: number;
1705
+ z: number;
1706
+ } | undefined;
1707
+ }, {
1708
+ stlUrl: string;
1709
+ rotationOffset?: number | {
1710
+ x: string | number;
1711
+ y: string | number;
1712
+ z: string | number;
1713
+ } | undefined;
1714
+ positionOffset?: {
1715
+ x: string | number;
1716
+ y: string | number;
1717
+ z: string | number;
1718
+ } | undefined;
1719
+ size?: {
1720
+ x: string | number;
1721
+ y: string | number;
1722
+ z: string | number;
1723
+ } | undefined;
1724
+ }>, zod.ZodObject<zod.objectUtil.extendShape<{
1725
+ rotationOffset: zod.ZodOptional<zod.ZodUnion<[zod.ZodNumber, zod.ZodObject<{
1726
+ x: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1727
+ y: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1728
+ z: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1729
+ }, "strip", zod.ZodTypeAny, {
1730
+ x: string | number;
1731
+ y: string | number;
1732
+ z: string | number;
1733
+ }, {
1734
+ x: string | number;
1735
+ y: string | number;
1736
+ z: string | number;
1737
+ }>]>>;
1738
+ positionOffset: zod.ZodOptional<zod.ZodObject<{
1739
+ x: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1740
+ y: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1741
+ z: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1742
+ }, "strip", zod.ZodTypeAny, {
1743
+ x: number;
1744
+ y: number;
1745
+ z: number;
1746
+ }, {
1747
+ x: string | number;
1748
+ y: string | number;
1749
+ z: string | number;
1750
+ }>>;
1751
+ size: zod.ZodOptional<zod.ZodObject<{
1752
+ x: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1753
+ y: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1754
+ z: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1755
+ }, "strip", zod.ZodTypeAny, {
1756
+ x: number;
1757
+ y: number;
1758
+ z: number;
1759
+ }, {
1760
+ x: string | number;
1761
+ y: string | number;
1762
+ z: string | number;
1763
+ }>>;
1764
+ }, {
1765
+ objUrl: zod.ZodString;
1766
+ mtlUrl: zod.ZodOptional<zod.ZodString>;
1767
+ }>, "strip", zod.ZodTypeAny, {
1768
+ objUrl: string;
1769
+ rotationOffset?: number | {
1770
+ x: string | number;
1771
+ y: string | number;
1772
+ z: string | number;
1773
+ } | undefined;
1774
+ positionOffset?: {
1775
+ x: number;
1776
+ y: number;
1777
+ z: number;
1778
+ } | undefined;
1779
+ size?: {
1780
+ x: number;
1781
+ y: number;
1782
+ z: number;
1783
+ } | undefined;
1784
+ mtlUrl?: string | undefined;
1785
+ }, {
1786
+ objUrl: string;
1787
+ rotationOffset?: number | {
1788
+ x: string | number;
1789
+ y: string | number;
1790
+ z: string | number;
1791
+ } | undefined;
1792
+ positionOffset?: {
1793
+ x: string | number;
1794
+ y: string | number;
1795
+ z: string | number;
1796
+ } | undefined;
1797
+ size?: {
1798
+ x: string | number;
1799
+ y: string | number;
1800
+ z: string | number;
1801
+ } | undefined;
1802
+ mtlUrl?: string | undefined;
1803
+ }>, zod.ZodObject<zod.objectUtil.extendShape<{
1804
+ rotationOffset: zod.ZodOptional<zod.ZodUnion<[zod.ZodNumber, zod.ZodObject<{
1805
+ x: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1806
+ y: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1807
+ z: zod.ZodUnion<[zod.ZodNumber, zod.ZodString]>;
1808
+ }, "strip", zod.ZodTypeAny, {
1809
+ x: string | number;
1810
+ y: string | number;
1811
+ z: string | number;
1812
+ }, {
1813
+ x: string | number;
1814
+ y: string | number;
1815
+ z: string | number;
1816
+ }>]>>;
1817
+ positionOffset: zod.ZodOptional<zod.ZodObject<{
1818
+ x: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1819
+ y: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1820
+ z: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1821
+ }, "strip", zod.ZodTypeAny, {
1822
+ x: number;
1823
+ y: number;
1824
+ z: number;
1825
+ }, {
1826
+ x: string | number;
1827
+ y: string | number;
1828
+ z: string | number;
1829
+ }>>;
1830
+ size: zod.ZodOptional<zod.ZodObject<{
1831
+ x: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1832
+ y: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1833
+ z: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>;
1834
+ }, "strip", zod.ZodTypeAny, {
1835
+ x: number;
1836
+ y: number;
1837
+ z: number;
1838
+ }, {
1839
+ x: string | number;
1840
+ y: string | number;
1841
+ z: string | number;
1842
+ }>>;
1843
+ }, {
1844
+ jscad: zod.ZodRecord<zod.ZodString, zod.ZodAny>;
1845
+ }>, "strip", zod.ZodTypeAny, {
1846
+ jscad: Record<string, any>;
1847
+ rotationOffset?: number | {
1848
+ x: string | number;
1849
+ y: string | number;
1850
+ z: string | number;
1851
+ } | undefined;
1852
+ positionOffset?: {
1853
+ x: number;
1854
+ y: number;
1855
+ z: number;
1856
+ } | undefined;
1857
+ size?: {
1858
+ x: number;
1859
+ y: number;
1860
+ z: number;
1861
+ } | undefined;
1862
+ }, {
1863
+ jscad: Record<string, any>;
1864
+ rotationOffset?: number | {
1865
+ x: string | number;
1866
+ y: string | number;
1867
+ z: string | number;
1868
+ } | undefined;
1869
+ positionOffset?: {
1870
+ x: string | number;
1871
+ y: string | number;
1872
+ z: string | number;
1873
+ } | undefined;
1874
+ size?: {
1875
+ x: string | number;
1876
+ y: string | number;
1877
+ z: string | number;
1878
+ } | undefined;
1879
+ }>]>>;
1880
+ children: zod.ZodOptional<zod.ZodAny>;
1881
+ symbolName: zod.ZodOptional<zod.ZodString>;
1882
+ }>, {}>, "strip", zod.ZodTypeAny, {
1883
+ name: string;
1884
+ pcbX?: number | undefined;
1885
+ pcbY?: number | undefined;
1886
+ pcbRotation?: number | undefined;
1887
+ schX?: number | undefined;
1888
+ schY?: number | undefined;
1889
+ schRotation?: number | undefined;
1890
+ layer?: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6" | undefined;
1891
+ footprint?: Props.Footprint | undefined;
1892
+ supplierPartNumbers?: Partial<Record<"jlcpcb" | "macrofab" | "pcbway" | "digikey" | "mouser" | "lcsc", string[]>> | undefined;
1893
+ cadModel?: string | {
1894
+ stlUrl: string;
1895
+ rotationOffset?: number | {
1896
+ x: string | number;
1897
+ y: string | number;
1898
+ z: string | number;
1899
+ } | undefined;
1900
+ positionOffset?: {
1901
+ x: number;
1902
+ y: number;
1903
+ z: number;
1904
+ } | undefined;
1905
+ size?: {
1906
+ x: number;
1907
+ y: number;
1908
+ z: number;
1909
+ } | undefined;
1910
+ } | {
1911
+ objUrl: string;
1912
+ rotationOffset?: number | {
1913
+ x: string | number;
1914
+ y: string | number;
1915
+ z: string | number;
1916
+ } | undefined;
1917
+ positionOffset?: {
1918
+ x: number;
1919
+ y: number;
1920
+ z: number;
1921
+ } | undefined;
1922
+ size?: {
1923
+ x: number;
1924
+ y: number;
1925
+ z: number;
1926
+ } | undefined;
1927
+ mtlUrl?: string | undefined;
1928
+ } | {
1929
+ jscad: Record<string, any>;
1930
+ rotationOffset?: number | {
1931
+ x: string | number;
1932
+ y: string | number;
1933
+ z: string | number;
1934
+ } | undefined;
1935
+ positionOffset?: {
1936
+ x: number;
1937
+ y: number;
1938
+ z: number;
1939
+ } | undefined;
1940
+ size?: {
1941
+ x: number;
1942
+ y: number;
1943
+ z: number;
1944
+ } | undefined;
1945
+ } | undefined;
1946
+ children?: any;
1947
+ symbolName?: string | undefined;
1948
+ }, {
1949
+ name: string;
1950
+ pcbX?: string | number | undefined;
1951
+ pcbY?: string | number | undefined;
1952
+ pcbRotation?: string | number | undefined;
1953
+ schX?: string | number | undefined;
1954
+ schY?: string | number | undefined;
1955
+ schRotation?: string | number | undefined;
1956
+ layer?: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6" | {
1957
+ name: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6";
1958
+ } | undefined;
1959
+ footprint?: Props.Footprint | undefined;
1960
+ supplierPartNumbers?: Partial<Record<"jlcpcb" | "macrofab" | "pcbway" | "digikey" | "mouser" | "lcsc", string[]>> | undefined;
1961
+ cadModel?: string | {
1962
+ stlUrl: string;
1963
+ rotationOffset?: number | {
1964
+ x: string | number;
1965
+ y: string | number;
1966
+ z: string | number;
1967
+ } | undefined;
1968
+ positionOffset?: {
1969
+ x: string | number;
1970
+ y: string | number;
1971
+ z: string | number;
1972
+ } | undefined;
1973
+ size?: {
1974
+ x: string | number;
1975
+ y: string | number;
1976
+ z: string | number;
1977
+ } | undefined;
1978
+ } | {
1979
+ objUrl: string;
1980
+ rotationOffset?: number | {
1981
+ x: string | number;
1982
+ y: string | number;
1983
+ z: string | number;
1984
+ } | undefined;
1985
+ positionOffset?: {
1986
+ x: string | number;
1987
+ y: string | number;
1988
+ z: string | number;
1989
+ } | undefined;
1990
+ size?: {
1991
+ x: string | number;
1992
+ y: string | number;
1993
+ z: string | number;
1994
+ } | undefined;
1995
+ mtlUrl?: string | undefined;
1996
+ } | {
1997
+ jscad: Record<string, any>;
1998
+ rotationOffset?: number | {
1999
+ x: string | number;
2000
+ y: string | number;
2001
+ z: string | number;
2002
+ } | undefined;
2003
+ positionOffset?: {
2004
+ x: string | number;
2005
+ y: string | number;
2006
+ z: string | number;
2007
+ } | undefined;
2008
+ size?: {
2009
+ x: string | number;
2010
+ y: string | number;
2011
+ z: string | number;
2012
+ } | undefined;
2013
+ } | undefined;
2014
+ children?: any;
2015
+ symbolName?: string | undefined;
2016
+ }>;
2017
+ sourceFtype: Ftype;
2018
+ };
2019
+ initPorts(): void;
2020
+ }
2021
+
1619
2022
  type PortNames = "1" | "2" | "pin1" | "pin2" | "left" | "right" | "anode" | "cathode";
1620
2023
  declare class Capacitor extends NormalComponent<typeof capacitorProps, PortNames> {
1621
2024
  get config(): {
@@ -3647,4 +4050,4 @@ declare global {
3647
4050
  }
3648
4051
  }
3649
4052
 
3650
- export { Board, Capacitor, Chip, Circuit, Constraint, Footprint, Group, Hole, type IRenderable, Jumper, Led, Net, NormalComponent, PlatedHole, Port, PrimitiveComponent, Project, Renderable, Resistor, SilkscreenPath, SmtPad, Trace, TraceHint };
4053
+ export { Board, Capacitor, Chip, Circuit, Constraint, Diode, Footprint, Group, Hole, type IRenderable, Jumper, Led, Net, NormalComponent, PlatedHole, Port, PrimitiveComponent, Project, Renderable, Resistor, SilkscreenPath, SmtPad, Trace, TraceHint };
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ __export(components_exports, {
11
11
  Capacitor: () => Capacitor,
12
12
  Chip: () => Chip,
13
13
  Constraint: () => Constraint2,
14
+ Diode: () => Diode,
14
15
  Footprint: () => Footprint,
15
16
  Group: () => Group,
16
17
  Hole: () => Hole,
@@ -681,6 +682,9 @@ var Footprint = class extends PrimitiveComponent {
681
682
  x: -(bounds.right + bounds.left) / 2,
682
683
  y: -(bounds.top + bounds.bottom) / 2
683
684
  };
685
+ const containerPos = this.getPrimitiveContainer()._getGlobalPcbPositionBeforeLayout();
686
+ globalOffset.x += containerPos.x;
687
+ globalOffset.y += containerPos.y;
684
688
  for (const { component, selector } of involvedComponents) {
685
689
  const kvx = getKVar(`${selector}_x`);
686
690
  const kvy = getKVar(`${selector}_y`);
@@ -869,6 +873,12 @@ var Port = class extends PrimitiveComponent {
869
873
  });
870
874
  this.schematic_port_id = schematic_port.schematic_port_id;
871
875
  }
876
+ _setPositionFromLayout(newCenter) {
877
+ const { db } = this.root;
878
+ db.schematic_port.update(this.schematic_port_id, {
879
+ center: newCenter
880
+ });
881
+ }
872
882
  };
873
883
 
874
884
  // lib/components/base-components/NormalComponent.ts
@@ -2442,8 +2452,8 @@ var Led = class extends NormalComponent {
2442
2452
  cathode = this.portMap.pin2;
2443
2453
  };
2444
2454
 
2445
- // lib/components/normal-components/Capacitor.ts
2446
- import { ledProps as ledProps2 } from "@tscircuit/props";
2455
+ // lib/components/normal-components/Diode.ts
2456
+ import { diodeProps } from "@tscircuit/props";
2447
2457
 
2448
2458
  // lib/utils/constants.ts
2449
2459
  var stringProxy = new Proxy(
@@ -2454,7 +2464,25 @@ var stringProxy = new Proxy(
2454
2464
  );
2455
2465
  var FTYPE = stringProxy;
2456
2466
 
2467
+ // lib/components/normal-components/Diode.ts
2468
+ var Diode = class extends NormalComponent {
2469
+ pin1 = this.portMap.pin1;
2470
+ pin2 = this.portMap.pin2;
2471
+ get config() {
2472
+ return {
2473
+ // schematicSymbolName: "diode" as BaseSymbolName,
2474
+ zodProps: diodeProps,
2475
+ sourceFtype: "simple_diode"
2476
+ };
2477
+ }
2478
+ initPorts() {
2479
+ this.add(new Port({ name: "pin1", aliases: ["1", "pin1"] }));
2480
+ this.add(new Port({ name: "pin2", aliases: ["2", "pin2"] }));
2481
+ }
2482
+ };
2483
+
2457
2484
  // lib/components/normal-components/Capacitor.ts
2485
+ import { ledProps as ledProps2 } from "@tscircuit/props";
2458
2486
  var Capacitor = class extends NormalComponent {
2459
2487
  get config() {
2460
2488
  return {
@@ -3003,9 +3031,9 @@ var Constraint2 = class extends PrimitiveComponent {
3003
3031
  }
3004
3032
  _getAllReferencedComponents() {
3005
3033
  const componentsWithSelectors = [];
3006
- const subcircuit = this.getSubcircuit();
3034
+ const container = this.getPrimitiveContainer();
3007
3035
  function addComponentFromSelector(selector) {
3008
- const component = subcircuit.selectOne(selector);
3036
+ const component = container.selectOne(selector);
3009
3037
  if (component) {
3010
3038
  const maybeEdge = selector.split(" ").pop();
3011
3039
  const edge = edgeSpecifiers.includes(maybeEdge) ? maybeEdge : void 0;
@@ -3187,6 +3215,7 @@ export {
3187
3215
  Chip,
3188
3216
  Circuit,
3189
3217
  Constraint2 as Constraint,
3218
+ Diode,
3190
3219
  Footprint,
3191
3220
  Group,
3192
3221
  Hole,
@@ -7,6 +7,7 @@ export { SmtPad } from "./primitive-components/SmtPad"
7
7
  export { Port } from "./primitive-components/Port"
8
8
  export { Resistor } from "./normal-components/Resistor"
9
9
  export { Led } from "./normal-components/Led"
10
+ export { Diode } from "./normal-components/Diode"
10
11
  export { Capacitor } from "./normal-components/Capacitor"
11
12
  export { Net } from "./primitive-components/Net"
12
13
  export { Trace } from "./primitive-components/Trace"
@@ -51,12 +51,12 @@ export class Constraint extends PrimitiveComponent<typeof constraintProps> {
51
51
  edge: EdgeSpecifier | undefined
52
52
  }> = []
53
53
 
54
- const subcircuit = this.getSubcircuit()
54
+ const container = this.getPrimitiveContainer()!
55
55
 
56
56
  function addComponentFromSelector(selector: string) {
57
57
  // TODO this selector has to be modified in case it contains a leftedge,
58
58
  // center/topedge/rightedge indicator
59
- const component = subcircuit.selectOne(selector)
59
+ const component = container.selectOne(selector)
60
60
  if (component) {
61
61
  const maybeEdge = selector.split(" ").pop() as EdgeSpecifier
62
62
  const edge = edgeSpecifiers.includes(maybeEdge) ? maybeEdge : undefined
@@ -220,6 +220,12 @@ export class Footprint extends PrimitiveComponent<typeof footprintProps> {
220
220
  y: -(bounds.top + bounds.bottom) / 2,
221
221
  }
222
222
 
223
+ const containerPos =
224
+ this.getPrimitiveContainer()!._getGlobalPcbPositionBeforeLayout()
225
+
226
+ globalOffset.x += containerPos.x
227
+ globalOffset.y += containerPos.y
228
+
223
229
  // 4. Update the component positions
224
230
  for (const { component, selector } of involvedComponents) {
225
231
  const kvx = getKVar(`${selector}_x`)
@@ -205,4 +205,12 @@ export class Port extends PrimitiveComponent<typeof portProps> {
205
205
 
206
206
  this.schematic_port_id = schematic_port.schematic_port_id
207
207
  }
208
+
209
+ _setPositionFromLayout(newCenter: { x: number; y: number }): void {
210
+ const { db } = this.root!
211
+
212
+ db.schematic_port.update(this.schematic_port_id!, {
213
+ center: newCenter,
214
+ })
215
+ }
208
216
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@tscircuit/core",
3
3
  "module": "index.ts",
4
4
  "type": "module",
5
- "version": "0.0.35",
5
+ "version": "0.0.37",
6
6
  "types": "dist/index.d.ts",
7
7
  "main": "dist/index.js",
8
8
  "files": [