@tscircuit/core 0.0.1943 → 0.0.1945

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
@@ -1,7 +1,7 @@
1
1
  import * as circuit_json from 'circuit-json';
2
2
  import { PcbGroup, PcbTraceError, PcbPlacementError, PcbManualEditConflictWarning, PcbViaClearanceError, PcbVia as PcbVia$1, LayerRef, AnyCircuitElement, Size, PcbTrace as PcbTrace$1, PcbTraceRoutePoint, AnySourceComponent, PcbComponent, SchematicPort, SchematicComponent, SimulationVoltageSource, SimulationCurrentSource, PcbSilkscreenGraphic, SourceBus, RouteHintPoint, PcbBoard, SchematicSheet as SchematicSheet$1, SchematicGraphic as SchematicGraphic$1, SimulationExperiment, SimulationParameterSweep, CircuitJson } from 'circuit-json';
3
3
  import * as _tscircuit_props from '@tscircuit/props';
4
- import { PlatformConfig, traceProps, netProps, AutoroutingPhaseProps, AutorouterProp, subcircuitGroupProps, AutorouterConfig, PcbSx, portProps, PinAttributeMap, SupplierPartNumbers, CadModelProp, SchematicPortArrangement, groupProps, platedHoleProps, BoardOutlinePoint, boardProps, subcircuitProps, subpanelProps, capacitorProps, antennaProps, chipProps, pinoutProps, diodeProps, fuseProps, jumperProps, interconnectProps, solderjumperProps, ledProps, powerSourceProps, voltageSourceProps, currentSourceProps, ammeterProps, resistorProps, constraintProps, drcCheckProps, autoroutingPhaseProps, fabricationNoteRectProps, fabricationNotePathProps, fabricationNoteTextProps, fabricationNoteDimensionProps, pcbNoteLineProps, pcbNoteRectProps, pcbNoteTextProps, pcbNotePathProps, pcbNoteDimensionProps, footprintProps, breakoutProps, breakoutPointProps, holeProps, pcbKeepoutProps, netLabelProps, cadmodelProps, cadassemblyProps, courtyardCircleProps, courtyardOutlineProps, courtyardRectProps, silkscreenCircleProps, silkscreenPathProps, silkscreenRectProps, silkscreenTextProps, silkscreenLineProps, silkscreenGraphicProps, smtPadProps, fiducialProps, busProps, differentialPairProps, traceHintProps, viaProps, copperPourProps, copperTextProps, cutoutProps, assemblyDeviceProps, enclosureCutoutApertureProps, enclosureFdmBoxProps, batteryProps, pinHeaderProps, resonatorProps, inductorProps, potentiometerProps, pushButtonProps, crystalProps, CrystalPinLabels, transistorProps, mosfetProps, opampProps, OpAmpPinLabels, switchProps, SwitchProps, testpointProps, schematicTextProps, schematicLineProps, schematicRectProps, schematicArcProps, schematicCircleProps, schematicPathProps, schematicBoxProps, schematicSymbolProps, schematicSectionProps, schematicSheetProps, schematicGraphicProps, schematicTableProps, schematicRowProps, schematicCellProps, symbolProps, analogSimulationProps, analogTransientSimulationProps, analogDcOperatingPointSimulationProps, analogDcSweepSimulationProps, analogAcSweepSimulationProps, analogSweepParameterProps, voltageProbeProps, spicemodelProps, AnalogTransientSimulationProps, AnalogDcSweepSimulationProps, AnalogAcSweepSimulationProps, AnalogSweepParameterProps, AssemblyDevicePropsInput, EnclosureCutoutApertureProps, EnclosureFdmBoxProps, CapacitorProps, ChipProps, DiodeProps, ResistorProps, ManualEditEvent, ManualEditsFile, ChipConnections, manual_edits_file } from '@tscircuit/props';
4
+ import { PlatformConfig, traceProps, netProps, AutoroutingPhaseProps, AutorouterProp, subcircuitGroupProps, AutorouterConfig, PcbSx, portProps, PinAttributeMap, SupplierPartNumbers, CadModelProp, SchematicPortArrangement, groupProps, platedHoleProps, BoardOutlinePoint, boardProps, subcircuitProps, subpanelProps, capacitorProps, antennaProps, chipProps, pinoutProps, diodeProps, fuseProps, jumperProps, interconnectProps, solderjumperProps, ledProps, powerSourceProps, voltageSourceProps, currentSourceProps, ammeterProps, resistorProps, constraintProps, drcCheckProps, autoroutingPhaseProps, fabricationNoteRectProps, fabricationNotePathProps, fabricationNoteTextProps, fabricationNoteDimensionProps, pcbNoteLineProps, pcbNoteRectProps, pcbNoteTextProps, pcbNotePathProps, pcbNoteDimensionProps, footprintProps, breakoutProps, breakoutPointProps, holeProps, pcbKeepoutProps, netLabelProps, cadmodelProps, cadassemblyProps, courtyardCircleProps, courtyardOutlineProps, courtyardRectProps, silkscreenCircleProps, silkscreenPathProps, silkscreenRectProps, silkscreenTextProps, silkscreenLineProps, silkscreenGraphicProps, smtPadProps, fiducialProps, busProps, differentialPairProps, traceHintProps, viaProps, copperPourProps, copperTextProps, cutoutProps, assemblyDeviceProps, assemblyScreenProps, enclosureCutoutApertureProps, enclosureFdmBoxProps, batteryProps, pinHeaderProps, resonatorProps, inductorProps, potentiometerProps, pushButtonProps, crystalProps, CrystalPinLabels, transistorProps, mosfetProps, opampProps, OpAmpPinLabels, switchProps, SwitchProps, testpointProps, schematicTextProps, schematicLineProps, schematicRectProps, schematicArcProps, schematicCircleProps, schematicPathProps, schematicBoxProps, schematicSymbolProps, schematicSectionProps, schematicSheetProps, schematicGraphicProps, schematicTableProps, schematicRowProps, schematicCellProps, symbolProps, analogSimulationProps, analogTransientSimulationProps, analogDcOperatingPointSimulationProps, analogDcSweepSimulationProps, analogAcSweepSimulationProps, analogSweepParameterProps, voltageProbeProps, spicemodelProps, AnalogTransientSimulationProps, AnalogDcSweepSimulationProps, AnalogAcSweepSimulationProps, AnalogSweepParameterProps, AssemblyDevicePropsInput, AssemblyScreenPropsInput, EnclosureCutoutApertureProps, EnclosureFdmBoxProps, CapacitorProps, ChipProps, DiodeProps, ResistorProps, ManualEditEvent, ManualEditsFile, ChipConnections, manual_edits_file } from '@tscircuit/props';
5
5
  export { FanoutTracePath, fanoutTracePath, kicadFootprintStrings } from '@tscircuit/props';
6
6
  import * as react from 'react';
7
7
  import react__default, { ReactElement, ReactNode } from 'react';
@@ -2474,6 +2474,17 @@ declare class NormalComponent<ZodProps extends z.ZodType = any, PortNames extend
2474
2474
  protected _getPcbComponentLayer(): LayerRef;
2475
2475
  _getFootprintOriginalLayer(): LayerRef | undefined;
2476
2476
  protected _getPcbComponentInsertionDirection(componentLayer: LayerRef, rotationDegrees?: number): PcbComponent["insertion_direction"] | undefined;
2477
+ /**
2478
+ * The connector insertion axis as a continuous unit direction in Circuit
2479
+ * JSON's board-world XYZ frame (+Z above the board). This is a direction, not
2480
+ * a position, so it has no units or translation. It receives the same
2481
+ * rotation and layer flip as the footprint's pads.
2482
+ */
2483
+ _getPcbComponentInsertionAxisDirection(componentLayer: LayerRef, rotationDegrees?: number): {
2484
+ x: number;
2485
+ y: number;
2486
+ z: number;
2487
+ } | undefined;
2477
2488
  /**
2478
2489
  * The enclosure aperture's outward axis as a continuous unit direction in
2479
2490
  * board XYZ (+Z above the board). It is a direction, not a point, and receives
@@ -109934,10 +109945,10 @@ declare class Cutout extends PrimitiveComponent<typeof cutoutProps> {
109934
109945
  }
109935
109946
 
109936
109947
  /**
109937
- * An assembly device container is a product-level wrapper (today only `<assembly.device>`)
109938
- * that may sit above a `<board>` without being an electrical group or
109939
- * subcircuit. Components that would otherwise assume "my parent is a
109940
- * subcircuit" use this to opt out.
109948
+ * An assembly-device element is a product-level `<assembly.device>` wrapper or
109949
+ * a semantic subtype such as `<assembly.screen>`. It is not an electrical group
109950
+ * or subcircuit. Components that would otherwise assume "my parent is a
109951
+ * subcircuit" use this marker to opt out.
109941
109952
  */
109942
109953
  interface AssemblyDeviceContainer {
109943
109954
  isAssemblyDeviceContainer: true;
@@ -109960,6 +109971,48 @@ declare class AssemblyDevice extends PrimitiveComponent<typeof assemblyDevicePro
109960
109971
  _computePcbGlobalTransformBeforeLayout(): Matrix;
109961
109972
  }
109962
109973
 
109974
+ declare class AssemblyScreen extends PrimitiveComponent<typeof assemblyScreenProps> implements AssemblyDeviceContainer {
109975
+ isAssemblyDeviceContainer: true;
109976
+ get config(): {
109977
+ componentName: string;
109978
+ zodProps: zod.ZodEffects<zod.ZodObject<{
109979
+ name: zod.ZodEffects<zod.ZodString, string, string>;
109980
+ connectsTo: zod.ZodEffects<zod.ZodString, string, string>;
109981
+ width: zod.ZodOptional<zod.ZodEffects<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>, number, string | number>>;
109982
+ height: zod.ZodOptional<zod.ZodEffects<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>, number, string | number>>;
109983
+ cadModel: zod.ZodOptional<zod.ZodEffects<zod.ZodString, string, string>>;
109984
+ }, "strip", zod.ZodTypeAny, {
109985
+ name: string;
109986
+ connectsTo: string;
109987
+ width?: number | undefined;
109988
+ height?: number | undefined;
109989
+ cadModel?: string | undefined;
109990
+ }, {
109991
+ name: string;
109992
+ connectsTo: string;
109993
+ width?: string | number | undefined;
109994
+ height?: string | number | undefined;
109995
+ cadModel?: string | undefined;
109996
+ }>, {
109997
+ name: string;
109998
+ connectsTo: string;
109999
+ width?: number | undefined;
110000
+ height?: number | undefined;
110001
+ cadModel?: string | undefined;
110002
+ }, {
110003
+ name: string;
110004
+ connectsTo: string;
110005
+ width?: string | number | undefined;
110006
+ height?: string | number | undefined;
110007
+ cadModel?: string | undefined;
110008
+ }>;
110009
+ };
110010
+ doInitialAssignNameToUnnamedComponents(): void;
110011
+ doInitialSourceRender(): void;
110012
+ doInitialPcbComponentRender(): void;
110013
+ doInitialCadModelRender(): void;
110014
+ }
110015
+
109963
110016
  interface GetFdmEnclosureSolverInputParams {
109964
110017
  board: Board;
109965
110018
  pcbBoard: PcbBoard;
@@ -192031,8 +192084,11 @@ declare const analog: {
192031
192084
  interface AssemblyDeviceJsxProps extends AssemblyDevicePropsInput {
192032
192085
  children?: ReactNode;
192033
192086
  }
192087
+ interface AssemblyScreenJsxProps extends AssemblyScreenPropsInput {
192088
+ }
192034
192089
  declare const assembly: {
192035
192090
  readonly device: react.FunctionComponent<AssemblyDeviceJsxProps>;
192091
+ readonly screen: react.FunctionComponent<AssemblyScreenJsxProps>;
192036
192092
  };
192037
192093
 
192038
192094
  declare const enclosure: {
@@ -193792,4 +193848,4 @@ declare module "react/jsx-runtime" {
193792
193848
  }
193793
193849
  }
193794
193850
 
193795
- export { Ammeter, AnalogAcSweepSimulation, AnalogAnalysisSimulation, AnalogDcOperatingPointSimulation, AnalogDcSweepSimulation, AnalogSimulation, AnalogSweepParameter, AnalogTransientSimulation, Antenna, AssemblyDevice, type AssemblyDeviceJsxProps, type AsyncEffect, type AutorouterCompleteEvent, type AutorouterErrorEvent, type AutorouterEvent, type AutorouterProgressEvent, type AutoroutingCacheDisabledReason, type AutoroutingCacheStatus, type AutoroutingEndEvent, type AutoroutingErrorEvent, type AutoroutingExecutionMetadata, AutoroutingPhase, type AutoroutingProgressEvent, type AutoroutingStartEvent, Battery, Board, Breakout, BreakoutPoint, Bus, CadAssembly, CadModel, Capacitor, Chip, Circuit, type CircuitJsonMetadata, type ComponentWithPins, Connector, Constraint, CopperPour, CopperText, CourtyardCircle, CourtyardOutline, CourtyardRect, Crystal, CurrentSource, Cutout, type DebugLogOutputEvent, DifferentialPair, Diode, DrcCheck, EnclosureCutoutAperture, EnclosureFdmBox, FabricationNoteDimension, FabricationNotePath, FabricationNoteRect, FabricationNoteText, Breakout as Fanout, BreakoutPoint as FanoutPoint, Fiducial, Footprint, Fuse, type GenericConnectionsAndSelectorsSel, type GenericLocalAutorouter, Group, Hole, type IIsolatedCircuit, type IRenderable, type IRootCircuit, Inductor, Interconnect, IsolatedCircuit, Jumper, Keepout, Led, type LocalCacheEngine, Mosfet, MountedBoard, Net, NetLabel, NormalComponent, type Obstacle, OpAmp, type PackingEndEvent, type PackingErrorEvent, type PackingStartEvent, Panel, type PcbGroupId, PcbNoteDimension, PcbNoteLine, PcbNotePath, PcbNoteRect, PcbNoteText, PcbTrace, PcbVia, PinHeader, type PinLabelSpec, Pinout, PlatedHole, Port, Potentiometer, PowerSource, PrimitiveComponent, Project, PushButton, type RenderPhase, type RenderPhaseFn, type RenderPhaseFunctions, type RenderPhaseStates, Renderable, Resistor, Resonator, RootCircuit, type RootCircuitEventName, SOLVERS, SchematicArc, SchematicBox, SchematicCell, SchematicCircle, SchematicGraphic, SchematicLine, SchematicPath, SchematicRect, SchematicRow, SchematicSection, SchematicSheet, SchematicSymbol, SchematicTable, SchematicText, type Sel, SilkscreenCircle, SilkscreenGraphic, SilkscreenLine, SilkscreenPath, SilkscreenRect, SilkscreenText, type SimpleRouteBounds, type SimpleRouteBus, type SimpleRouteBusTermination, type SimpleRouteConnection, type SimpleRouteDifferentialPair, type SimpleRouteJson, type SimpleRoutePoint, type SimplifiedPcbTrace, type SingleLayerConnectionPoint, SmtPad, SolderJumper, type SolverEndedEvent, type SolverName, type SolverStartedEvent, SpiceModel, type SrjConnectionName, Subcircuit, Subpanel, Switch, SymbolComponent as Symbol, TestPoint, Trace, TraceHint, Transistor, Via, VoltageProbe, VoltageSource, analog, applyEditEvents, applyEditEventsToManualEditsFile, applyPcbEditEventsToManualEditsFile, applySchematicEditEventsToManualEditsFile, assembly, createUseComponent, enclosure, getPhaseTimingsFromRenderEvents, getSimpleRouteJsonFromCircuitJson, normalizePinLabels, orderedRenderPhases, renderPhaseIndexMap, resolveStaticFileImport, sel, unrouteCircuitJson, useCapacitor, useChip, useDiode, useLed, useRenderedCircuit, useResistor };
193851
+ export { Ammeter, AnalogAcSweepSimulation, AnalogAnalysisSimulation, AnalogDcOperatingPointSimulation, AnalogDcSweepSimulation, AnalogSimulation, AnalogSweepParameter, AnalogTransientSimulation, Antenna, AssemblyDevice, type AssemblyDeviceJsxProps, AssemblyScreen, type AssemblyScreenJsxProps, type AsyncEffect, type AutorouterCompleteEvent, type AutorouterErrorEvent, type AutorouterEvent, type AutorouterProgressEvent, type AutoroutingCacheDisabledReason, type AutoroutingCacheStatus, type AutoroutingEndEvent, type AutoroutingErrorEvent, type AutoroutingExecutionMetadata, AutoroutingPhase, type AutoroutingProgressEvent, type AutoroutingStartEvent, Battery, Board, Breakout, BreakoutPoint, Bus, CadAssembly, CadModel, Capacitor, Chip, Circuit, type CircuitJsonMetadata, type ComponentWithPins, Connector, Constraint, CopperPour, CopperText, CourtyardCircle, CourtyardOutline, CourtyardRect, Crystal, CurrentSource, Cutout, type DebugLogOutputEvent, DifferentialPair, Diode, DrcCheck, EnclosureCutoutAperture, EnclosureFdmBox, FabricationNoteDimension, FabricationNotePath, FabricationNoteRect, FabricationNoteText, Breakout as Fanout, BreakoutPoint as FanoutPoint, Fiducial, Footprint, Fuse, type GenericConnectionsAndSelectorsSel, type GenericLocalAutorouter, Group, Hole, type IIsolatedCircuit, type IRenderable, type IRootCircuit, Inductor, Interconnect, IsolatedCircuit, Jumper, Keepout, Led, type LocalCacheEngine, Mosfet, MountedBoard, Net, NetLabel, NormalComponent, type Obstacle, OpAmp, type PackingEndEvent, type PackingErrorEvent, type PackingStartEvent, Panel, type PcbGroupId, PcbNoteDimension, PcbNoteLine, PcbNotePath, PcbNoteRect, PcbNoteText, PcbTrace, PcbVia, PinHeader, type PinLabelSpec, Pinout, PlatedHole, Port, Potentiometer, PowerSource, PrimitiveComponent, Project, PushButton, type RenderPhase, type RenderPhaseFn, type RenderPhaseFunctions, type RenderPhaseStates, Renderable, Resistor, Resonator, RootCircuit, type RootCircuitEventName, SOLVERS, SchematicArc, SchematicBox, SchematicCell, SchematicCircle, SchematicGraphic, SchematicLine, SchematicPath, SchematicRect, SchematicRow, SchematicSection, SchematicSheet, SchematicSymbol, SchematicTable, SchematicText, type Sel, SilkscreenCircle, SilkscreenGraphic, SilkscreenLine, SilkscreenPath, SilkscreenRect, SilkscreenText, type SimpleRouteBounds, type SimpleRouteBus, type SimpleRouteBusTermination, type SimpleRouteConnection, type SimpleRouteDifferentialPair, type SimpleRouteJson, type SimpleRoutePoint, type SimplifiedPcbTrace, type SingleLayerConnectionPoint, SmtPad, SolderJumper, type SolverEndedEvent, type SolverName, type SolverStartedEvent, SpiceModel, type SrjConnectionName, Subcircuit, Subpanel, Switch, SymbolComponent as Symbol, TestPoint, Trace, TraceHint, Transistor, Via, VoltageProbe, VoltageSource, analog, applyEditEvents, applyEditEventsToManualEditsFile, applyPcbEditEventsToManualEditsFile, applySchematicEditEventsToManualEditsFile, assembly, createUseComponent, enclosure, getPhaseTimingsFromRenderEvents, getSimpleRouteJsonFromCircuitJson, normalizePinLabels, orderedRenderPhases, renderPhaseIndexMap, resolveStaticFileImport, sel, unrouteCircuitJson, useCapacitor, useChip, useDiode, useLed, useRenderedCircuit, useResistor };
package/dist/index.js CHANGED
@@ -17,6 +17,7 @@ __export(components_exports, {
17
17
  AnalogTransientSimulation: () => AnalogTransientSimulation,
18
18
  Antenna: () => Antenna,
19
19
  AssemblyDevice: () => AssemblyDevice,
20
+ AssemblyScreen: () => AssemblyScreen,
20
21
  AutoroutingPhase: () => AutoroutingPhase,
21
22
  Battery: () => Battery,
22
23
  Board: () => Board,
@@ -15849,6 +15850,24 @@ var NormalComponent3 = class extends PrimitiveComponent2 {
15849
15850
  })
15850
15851
  });
15851
15852
  }
15853
+ /**
15854
+ * The connector insertion axis as a continuous unit direction in Circuit
15855
+ * JSON's board-world XYZ frame (+Z above the board). This is a direction, not
15856
+ * a position, so it has no units or translation. It receives the same
15857
+ * rotation and layer flip as the footprint's pads.
15858
+ */
15859
+ _getPcbComponentInsertionAxisDirection(componentLayer, rotationDegrees = this.getGlobalTransformRotation()) {
15860
+ const footprintMetadata = this._getFootprintMetadataForPcbComponent();
15861
+ if (!footprintMetadata?.insertionDirection) return void 0;
15862
+ return transformFootprintInsertionDirectionVector({
15863
+ insertionDirection: footprintMetadata.insertionDirection,
15864
+ rotationDegrees,
15865
+ isFlipped: isFootprintFlipped({
15866
+ componentLayer,
15867
+ originalLayer: footprintMetadata.originalLayer
15868
+ })
15869
+ });
15870
+ }
15852
15871
  /**
15853
15872
  * The enclosure aperture's outward axis as a continuous unit direction in
15854
15873
  * board XYZ (+Z above the board). It is a direction, not a point, and receives
@@ -53615,6 +53634,9 @@ var resolvePointToPointConnection = (differentialPair, connectionSelector) => {
53615
53634
  (sourcePort) => sourcePort.subcircuit_connectivity_map_key === connectivityMapKey
53616
53635
  );
53617
53636
  return {
53637
+ sourceTraceIds: subcircuitSourceTraces.filter(
53638
+ (trace) => trace.subcircuit_connectivity_map_key === connectivityMapKey
53639
+ ).map((trace) => trace.source_trace_id),
53618
53640
  sourcePorts,
53619
53641
  sourceTraceName: matchingSourceTraces.length > 0 ? connectionSelector : void 0
53620
53642
  };
@@ -53657,6 +53679,8 @@ var DifferentialPair_doInitialSourceDesignRuleChecks = (differentialPair) => {
53657
53679
  name: sourceComponent.name
53658
53680
  });
53659
53681
  }
53682
+ const memberTraceIds = [];
53683
+ let resolvedPolarityCount = 0;
53660
53684
  for (const connectionPolarity of ["positive", "negative"]) {
53661
53685
  let connectionSelector = differentialPair._parsedProps.negativeConnection;
53662
53686
  if (connectionPolarity === "positive") {
@@ -53667,6 +53691,8 @@ var DifferentialPair_doInitialSourceDesignRuleChecks = (differentialPair) => {
53667
53691
  connectionSelector
53668
53692
  );
53669
53693
  if (!resolvedConnection) continue;
53694
+ resolvedPolarityCount++;
53695
+ memberTraceIds.push(...resolvedConnection.sourceTraceIds);
53670
53696
  const terminalSourcePorts = resolvedConnection.sourcePorts;
53671
53697
  if (terminalSourcePorts.length === 2) continue;
53672
53698
  let warningSourceComponentId = "";
@@ -53696,6 +53722,14 @@ var DifferentialPair_doInitialSourceDesignRuleChecks = (differentialPair) => {
53696
53722
  subcircuit_id: differentialPair.getSubcircuit().subcircuit_id ?? void 0
53697
53723
  });
53698
53724
  }
53725
+ if (resolvedPolarityCount === 2 && memberTraceIds.length > 0) {
53726
+ db.source_bus.insert({
53727
+ name: differentialPair.name,
53728
+ source_trace_ids: [...new Set(memberTraceIds)],
53729
+ max_length_skew: differentialPair._parsedProps.maxLengthSkew,
53730
+ subcircuit_id: differentialPair.getSubcircuit().subcircuit_id ?? void 0
53731
+ });
53732
+ }
53699
53733
  };
53700
53734
 
53701
53735
  // lib/components/primitive-components/DifferentialPair.ts
@@ -63427,7 +63461,7 @@ function Group_getRoutingPhasePlans(group) {
63427
63461
  var package_default = {
63428
63462
  name: "@tscircuit/core",
63429
63463
  type: "module",
63430
- version: "0.0.1942",
63464
+ version: "0.0.1944",
63431
63465
  types: "dist/index.d.ts",
63432
63466
  main: "dist/index.js",
63433
63467
  module: "dist/index.js",
@@ -75364,6 +75398,172 @@ var AssemblyDevice = class extends PrimitiveComponent2 {
75364
75398
  // changing the authoring element or its assembly-container semantics.
75365
75399
  };
75366
75400
 
75401
+ // lib/components/primitive-components/AssemblyScreen.ts
75402
+ import { assemblyScreenProps } from "@tscircuit/props";
75403
+
75404
+ // lib/components/primitive-components/AssemblyScreen_doInitialCadModelRender.ts
75405
+ import { normalizeDegrees as normalizeDegrees8 } from "@tscircuit/math-utils";
75406
+
75407
+ // lib/components/primitive-components/get-assembly-screen-target.ts
75408
+ import { selectAll as selectAll2 } from "css-select";
75409
+ var getAssemblyScreenTarget = (component, connectsTo) => {
75410
+ const rootComponent = component.root?.firstChild;
75411
+ if (!rootComponent) {
75412
+ throw new Error(
75413
+ `Could not resolve assembly.screen "${component.name}" because the circuit has no root component`
75414
+ );
75415
+ }
75416
+ let selectionScope = rootComponent;
75417
+ let ancestor = component.parent;
75418
+ while (ancestor) {
75419
+ if (ancestor.componentName === "AssemblyDevice") {
75420
+ selectionScope = ancestor;
75421
+ break;
75422
+ }
75423
+ ancestor = ancestor.parent;
75424
+ }
75425
+ const matches = selectAll2(
75426
+ preprocessSelector(connectsTo, component),
75427
+ selectionScope,
75428
+ { adapter: cssSelectPrimitiveComponentAdapter }
75429
+ );
75430
+ if (matches.length !== 1) {
75431
+ throw new Error(
75432
+ `assembly.screen "${component.name}" connectsTo selector "${connectsTo}" matched ${matches.length} components; expected exactly one`
75433
+ );
75434
+ }
75435
+ const target = matches[0];
75436
+ if (!target.pcb_component_id) {
75437
+ throw new Error(
75438
+ `assembly.screen "${component.name}" connectsTo selector "${connectsTo}" matched ${target.getString()}, but it has no PCB component`
75439
+ );
75440
+ }
75441
+ return target;
75442
+ };
75443
+
75444
+ // lib/components/primitive-components/AssemblyScreen_doInitialCadModelRender.ts
75445
+ var formatMillimetersForModelprinter = (millimeters) => Number(millimeters.toFixed(6)).toString();
75446
+ var getDefaultFlexScreenModel = (component) => {
75447
+ const { width, height } = component._parsedProps;
75448
+ if (width === void 0 || height === void 0) {
75449
+ throw new Error(
75450
+ `assembly.screen "${component.name}" requires both width and height when cadModel is omitted`
75451
+ );
75452
+ }
75453
+ return `flexscreen_w${formatMillimetersForModelprinter(width)}mm_h${formatMillimetersForModelprinter(height)}mm`;
75454
+ };
75455
+ var AssemblyScreen_doInitialCadModelRender = (component) => {
75456
+ const root = component.root;
75457
+ if (!root || root.pcbDisabled || !component.source_component_id || !component.pcb_component_id) {
75458
+ return;
75459
+ }
75460
+ const { db } = root;
75461
+ const props = component._parsedProps;
75462
+ const target = getAssemblyScreenTarget(component, props.connectsTo);
75463
+ const targetPcbComponent = db.pcb_component.get(target.pcb_component_id);
75464
+ if (!targetPcbComponent) {
75465
+ throw new Error(
75466
+ `assembly.screen "${component.name}" could not read the PCB component selected by "${props.connectsTo}"`
75467
+ );
75468
+ }
75469
+ const board = target._getBoard();
75470
+ if (!board) {
75471
+ throw new Error(
75472
+ `assembly.screen "${component.name}" target "${props.connectsTo}" is not on a board`
75473
+ );
75474
+ }
75475
+ const pcbBoard = board.pcb_board_id ? db.pcb_board.get(board.pcb_board_id) : null;
75476
+ const boardThickness = pcbBoard?.thickness ?? board.boardThickness;
75477
+ const layer = targetPcbComponent.layer === "bottom" ? "bottom" : "top";
75478
+ const isBottomLayer = layer === "bottom";
75479
+ const targetRotation = targetPcbComponent.rotation ?? 0;
75480
+ const insertionAxis = target instanceof NormalComponent3 ? target._getPcbComponentInsertionAxisDirection(layer, targetRotation) : void 0;
75481
+ const insertionAxisLength = insertionAxis ? Math.hypot(insertionAxis.x, insertionAxis.y) : 0;
75482
+ const cableInsertionCenter = targetPcbComponent.cable_insertion_center ?? targetPcbComponent.center;
75483
+ const inferredCableAxis = {
75484
+ x: cableInsertionCenter.x - targetPcbComponent.center.x,
75485
+ y: cableInsertionCenter.y - targetPcbComponent.center.y
75486
+ };
75487
+ const inferredCableAxisLength = Math.hypot(
75488
+ inferredCableAxis.x,
75489
+ inferredCableAxis.y
75490
+ );
75491
+ const screenBoardRotation = normalizeDegrees8(
75492
+ insertionAxis && insertionAxisLength > 1e-9 ? Math.atan2(-insertionAxis.x, insertionAxis.y) * 180 / Math.PI : inferredCableAxisLength > 1e-9 ? Math.atan2(-inferredCableAxis.x, inferredCableAxis.y) * 180 / Math.PI : targetRotation
75493
+ );
75494
+ db.pcb_component.update(component.pcb_component_id, {
75495
+ center: cableInsertionCenter,
75496
+ layer,
75497
+ rotation: screenBoardRotation,
75498
+ subcircuit_id: targetPcbComponent.subcircuit_id
75499
+ });
75500
+ const cadComponent = db.cad_component.insert({
75501
+ position: {
75502
+ x: cableInsertionCenter.x,
75503
+ y: cableInsertionCenter.y,
75504
+ z: isBottomLayer ? -boardThickness / 2 : boardThickness / 2
75505
+ },
75506
+ rotation: {
75507
+ x: 0,
75508
+ y: isBottomLayer ? 180 : 0,
75509
+ z: normalizeDegrees8(
75510
+ isBottomLayer ? -screenBoardRotation : screenBoardRotation
75511
+ )
75512
+ },
75513
+ pcb_component_id: component.pcb_component_id,
75514
+ source_component_id: component.source_component_id,
75515
+ subcircuit_id: targetPcbComponent.subcircuit_id,
75516
+ footprinter_string: props.cadModel ?? getDefaultFlexScreenModel(component),
75517
+ model_unit_to_mm_scale_factor: 1,
75518
+ model_object_fit: "contain_within_bounds",
75519
+ model_origin_position: { x: 0, y: 0, z: 0 },
75520
+ anchor_alignment: "center",
75521
+ show_as_translucent_model: false
75522
+ });
75523
+ component.cad_component_id = cadComponent.cad_component_id;
75524
+ };
75525
+
75526
+ // lib/components/primitive-components/AssemblyScreen.ts
75527
+ var AssemblyScreen = class extends PrimitiveComponent2 {
75528
+ isAssemblyDeviceContainer = true;
75529
+ get config() {
75530
+ return {
75531
+ componentName: "AssemblyScreen",
75532
+ zodProps: assemblyScreenProps
75533
+ };
75534
+ }
75535
+ doInitialAssignNameToUnnamedComponents() {
75536
+ if (this._parsedProps.name) return;
75537
+ throw new Error("assembly.screen requires a non-empty name");
75538
+ }
75539
+ doInitialSourceRender() {
75540
+ const sourceComponent = this.root.db.source_component.insert({
75541
+ ftype: "simple_chip",
75542
+ name: this.name
75543
+ });
75544
+ this.source_component_id = sourceComponent.source_component_id;
75545
+ }
75546
+ doInitialPcbComponentRender() {
75547
+ const root = this.root;
75548
+ if (!root || root.pcbDisabled || !this.source_component_id) return;
75549
+ const pcbComponent = root.db.pcb_component.insert({
75550
+ center: { x: 0, y: 0 },
75551
+ width: 0,
75552
+ height: 0,
75553
+ layer: "top",
75554
+ rotation: 0,
75555
+ source_component_id: this.source_component_id,
75556
+ obstructs_within_bounds: false,
75557
+ do_not_place: true,
75558
+ is_allowed_to_be_off_board: true
75559
+ });
75560
+ this.pcb_component_id = pcbComponent.pcb_component_id;
75561
+ }
75562
+ doInitialCadModelRender() {
75563
+ AssemblyScreen_doInitialCadModelRender(this);
75564
+ }
75565
+ };
75566
+
75367
75567
  // lib/components/primitive-components/EnclosureCutoutAperture/EnclosureCutoutAperture.ts
75368
75568
  import { enclosureCutoutApertureProps } from "@tscircuit/props";
75369
75569
 
@@ -77783,7 +77983,8 @@ var analog = {
77783
77983
 
77784
77984
  // lib/namespaced-elements/assembly.ts
77785
77985
  var assembly = {
77786
- device: createNamespacedElement("assembly.device")
77986
+ device: createNamespacedElement("assembly.device"),
77987
+ screen: createNamespacedElement("assembly.screen")
77787
77988
  };
77788
77989
 
77789
77990
  // lib/namespaced-elements/enclosure.ts
@@ -78023,6 +78224,7 @@ import { kicadFootprintStrings } from "@tscircuit/props";
78023
78224
  extendCatalogue(components_exports);
78024
78225
  extendCatalogue({
78025
78226
  "assembly.device": AssemblyDevice,
78227
+ "assembly.screen": AssemblyScreen,
78026
78228
  Bug: Chip,
78027
78229
  "enclosure.cutoutaperture": EnclosureCutoutAperture,
78028
78230
  "enclosure.fdm.box": EnclosureFdmBox,
@@ -78043,6 +78245,7 @@ export {
78043
78245
  AnalogTransientSimulation,
78044
78246
  Antenna,
78045
78247
  AssemblyDevice,
78248
+ AssemblyScreen,
78046
78249
  AutoroutingPhase,
78047
78250
  Battery,
78048
78251
  Board,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/core",
3
3
  "type": "module",
4
- "version": "0.0.1943",
4
+ "version": "0.0.1945",
5
5
  "types": "dist/index.d.ts",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",