Generated by scripts/generate-props-overview.ts Latest version: https://github.com/tscircuit/props/blob/main/generated/PROPS_OVERVIEW.md
This document provides an overview of all the prop types available in @tscircuit/props. Each interface has a corresponding zod validator that can be imported from the package.
For example, for ChipProps there is a chipProps zod validator:
import { chipProps, type ChipProps } from "@tscircuit/props"
// Validate/parse props
const validatedProps = chipProps.parse(unknownProps)export interface AnalogSimulationProps {
simulationType?: "spice_transient_analysis"
duration?: number | string
timePerStep?: number | string
spiceEngine?: AutocompleteString<"spicey" | "ngspice">
}
export interface AutorouterConfig {
serverUrl?: string
inputFormat?: "simplified" | "circuit-json"
serverMode?: "job" | "solve-endpoint"
serverCacheEnabled?: boolean
cache?: PcbRouteCache
traceClearance?: Distance
availableJumperTypes?: Array<"1206x4" | "0603">
groupMode?:
| "sequential_trace"
| "subcircuit"
| /** @deprecated Use "sequential_trace" */ "sequential-trace"
local?: boolean
algorithmFn?: (simpleRouteJson: any) => Promise<any>
preset?:
| "sequential_trace"
| "subcircuit"
| "auto"
| "auto_local"
| "auto_cloud"
| "auto_jumper"
| "tscircuit_beta"
| "freerouting"
| "laser_prefab" // Prefabricated PCB with laser copper ablation
| /** @deprecated Use "auto_jumper" */ "auto-jumper"
| /** @deprecated Use "sequential_trace" */ "sequential-trace"
| /** @deprecated Use "auto_local" */ "auto-local"
| /** @deprecated Use "auto_cloud" */ "auto-cloud"
}
export interface AutorouterDefinition {
createAutorouter: (
simpleRouteJson: SimpleRouteJson,
opts?: Record<string, unknown>,
) => AutorouterInstance | Promise<AutorouterInstance>
}
export interface AutorouterInstance {
run: () => Promise<void>
getOutputSimpleRouteJson: () => Promise<SimpleRouteJson>
}
export interface BaseGroupProps extends CommonLayoutProps, LayoutConfig {
name?: string
key?: any
children?: any
pcbStyle?: PcbStyle
/**
* Title to display above this group in the schematic view
*/
schTitle?: string
/**
* If true, render this group as a single schematic box
*/
showAsSchematicBox?: boolean
/**
* Mapping of external pin names to internal connection targets
*/
connections?: Connections
/**
* Arrangement for pins when rendered as a schematic box
*/
schPinArrangement?: SchematicPinArrangement
/**
* Spacing between pins when rendered as a schematic box
*/
schPinSpacing?: Distance
/**
* Styles to apply to individual pins in the schematic box representation
*/
schPinStyle?: SchematicPinStyle
pcbWidth?: Distance
pcbHeight?: Distance
minTraceWidth?: Distance
nominalTraceWidth?: Distance
schWidth?: Distance
schHeight?: Distance
pcbLayout?: LayoutConfig
schLayout?: LayoutConfig
cellBorder?: Border | null
border?: Border | null
schPadding?: Distance
schPaddingLeft?: Distance
schPaddingRight?: Distance
schPaddingTop?: Distance
schPaddingBottom?: Distance
pcbPadding?: Distance
pcbPaddingLeft?: Distance
pcbPaddingRight?: Distance
pcbPaddingTop?: Distance
pcbPaddingBottom?: Distance
/**
* Anchor to use when interpreting pcbX/pcbY/pcbOffsetX/pcbOffsetY relative to pcbPosition
*/
pcbAnchorAlignment?: AutocompleteString<z.infer<typeof ninePointAnchor>>
/** @deprecated Use `pcbGrid` */
grid?: boolean
/** @deprecated Use `pcbFlex` */
flex?: boolean | string
pcbGrid?: boolean
pcbGridCols?: number | string
pcbGridRows?: number | string
pcbGridTemplateRows?: string
pcbGridTemplateColumns?: string
pcbGridTemplate?: string
pcbGridGap?: number | string
pcbGridRowGap?: number | string
pcbGridColumnGap?: number | string
pcbFlex?: boolean | string
pcbFlexGap?: number | string
pcbFlexDirection?: "row" | "column"
pcbAlignItems?: "start" | "center" | "end" | "stretch"
pcbJustifyContent?:
| "start"
| "center"
| "end"
| "stretch"
| "space-between"
| "space-around"
| "space-evenly"
pcbFlexRow?: boolean
pcbFlexColumn?: boolean
pcbGap?: number | string
pcbPack?: boolean
pcbPackGap?: number | string
schGrid?: boolean
schGridCols?: number | string
schGridRows?: number | string
schGridTemplateRows?: string
schGridTemplateColumns?: string
schGridTemplate?: string
schGridGap?: number | string
schGridRowGap?: number | string
schGridColumnGap?: number | string
schFlex?: boolean | string
schFlexGap?: number | string
schFlexDirection?: "row" | "column"
schAlignItems?: "start" | "center" | "end" | "stretch"
schJustifyContent?:
| "start"
| "center"
| "end"
| "stretch"
| "space-between"
| "space-around"
| "space-evenly"
schFlexRow?: boolean
schFlexColumn?: boolean
schGap?: number | string
schPack?: boolean
schMatchAdapt?: boolean
}
export interface BaseManualEditEvent {
edit_event_id: string
in_progress?: boolean
created_at: number
}
export interface BatteryProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
capacity?: number | string
voltage?: number | string
standard?: "AA" | "AAA" | "9V" | "CR2032" | "18650" | "C"
schOrientation?: SchematicOrientation
}
export interface BoardProps
extends Omit<SubcircuitGroupProps, "subcircuit" | "connections"> {
title?: string
material?: "fr4" | "fr1"
/** Number of layers for the PCB */
layers?: 1 | 2 | 4 | 6 | 8
borderRadius?: Distance
thickness?: Distance
boardAnchorPosition?: Point
anchorAlignment?: z.infer<typeof ninePointAnchor>
boardAnchorAlignment?: z.infer<typeof ninePointAnchor>
/** Color applied to both top and bottom solder masks */
solderMaskColor?: BoardColor
/** Color of the top solder mask */
topSolderMaskColor?: BoardColor
/** Color of the bottom solder mask */
bottomSolderMaskColor?: BoardColor
/** Color applied to both top and bottom silkscreens */
silkscreenColor?: BoardColor
/** Color of the top silkscreen */
topSilkscreenColor?: BoardColor
/** Color of the bottom silkscreen */
bottomSilkscreenColor?: BoardColor
/** Whether the board should be assembled on both sides */
doubleSidedAssembly?: boolean
/** Whether this board should be omitted from the schematic view */
schematicDisabled?: boolean
}
export interface Border {
strokeWidth?: Distance
dashed?: boolean
solid?: boolean
}
export interface BreakoutPointProps
extends Omit<PcbLayoutProps, "pcbRotation" | "layer"> {
connection: string
}
export interface BreakoutProps
extends Omit<SubcircuitGroupProps, "subcircuit"> {
padding?: Distance
paddingLeft?: Distance
paddingRight?: Distance
paddingTop?: Distance
paddingBottom?: Distance
}
export interface CadAssemblyProps {
/**
* The layer that the CAD assembly is designed for. If you set this to "top"
* then it means the children were intended to represent the top layer. If
* the <chip /> with this assembly is moved to the bottom layer, then the
* components will be mirrored.
*
* Generally, you shouldn't set this except where it can help prevent
* confusion because you have a complex multi-layer assembly. Default is
* "top" and this is most intuitive.
*/
originalLayer?: LayerRef
children?: any
}
export interface CadModelBase {
rotationOffset?:
| number
| { x: number | string; y: number | string; z: number | string }
positionOffset?: {
x: number | string
y: number | string
z: number | string
}
modelOriginPosition?: {
x: number | string
y: number | string
z: number | string
}
size?: { x: number | string; y: number | string; z: number | string }
modelUnitToMmScale?: Distance
modelBoardNormalDirection?: CadModelAxisDirection
pcbRotationOffset?: number
zOffsetFromSurface?: Distance
showAsTranslucentModel?: boolean
stepUrl?: string
}
export interface CadModelGlb extends CadModelBase {
glbUrl: string
}
export interface CadModelGltf extends CadModelBase {
gltfUrl: string
}
export interface CadModelJscad extends CadModelBase {
jscad: Record<string, any>
}
export interface CadModelObj extends CadModelBase {
objUrl: string
mtlUrl?: string
}
export interface CadModelProps extends CadModelBase {
modelUrl: string
stepUrl?: string
pcbX?: Distance
pcbY?: Distance
pcbLeftEdgeX?: Distance
pcbRightEdgeX?: Distance
pcbTopEdgeY?: Distance
pcbBottomEdgeY?: Distance
pcbOffsetX?: Distance
pcbOffsetY?: Distance
pcbZ?: Distance
}
export interface CadModelStep extends CadModelBase {
stepUrl: string
}
export interface CadModelStl extends CadModelBase {
stlUrl: string
}
export interface CadModelWrl extends CadModelBase {
wrlUrl: string
}
export interface CapacitorProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
capacitance: number | string
maxVoltageRating?: number | string
schShowRatings?: boolean
polarized?: boolean
decouplingFor?: string
decouplingTo?: string
bypassFor?: string
bypassTo?: string
maxDecouplingTraceLength?: number
schOrientation?: SchematicOrientation
schSize?: SchematicSymbolSize
connections?: Connections<CapacitorPinLabels>
}
export interface ChipPropsSU<
PinLabel extends SchematicPinLabel = SchematicPinLabel,
> extends CommonComponentProps<PinLabel> {
manufacturerPartNumber?: string
pinLabels?: PinLabelsProp<SchematicPinLabel, PinLabel>
/**
* Whether to show pin aliases in the schematic
*/
showPinAliases?: boolean
/**
* Labels for PCB pins
*/
pcbPinLabels?: Record<string, string>
schPinArrangement?: SchematicPortArrangement
/** @deprecated Use schPinArrangement instead. */
schPortArrangement?: SchematicPortArrangement
pinCompatibleVariants?: PinCompatibleVariant[]
schPinStyle?: SchematicPinStyle
schPinSpacing?: Distance
schWidth?: Distance
schHeight?: Distance
noSchematicRepresentation?: boolean
internallyConnectedPins?: (string | number)[][]
externallyConnectedPins?: string[][]
connections?: Connections<PinLabel>
}
export interface CircleCutoutProps
extends Omit<PcbLayoutProps, "layer" | "pcbRotation"> {
name?: string
shape: "circle"
radius: Distance
}
export interface CircleHoleProps extends PcbLayoutProps {
name?: string
shape?: "circle"
diameter?: Distance
radius?: Distance
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface CirclePlatedHoleProps
extends Omit<PcbLayoutProps, "pcbRotation" | "layer"> {
name?: string
connectsTo?: string | string[]
shape: "circle"
holeDiameter: number | string
outerDiameter: number | string
padDiameter?: number | string
portHints?: PortHints
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface CircleSmtPadProps extends Omit<PcbLayoutProps, "pcbRotation"> {
name?: string
shape: "circle"
radius: Distance
portHints?: PortHints
coveredWithSolderMask?: boolean
solderMaskMargin?: Distance
}
export interface CircleSolderPasteProps
extends Omit<PcbLayoutProps, "pcbRotation"> {
shape: "circle"
radius: Distance
}
export interface CircularHoleWithRectPlatedProps
extends Omit<PcbLayoutProps, "layer"> {
name?: string
connectsTo?: string | string[]
shape: "circular_hole_with_rect_pad"
holeDiameter: number | string
rectPadWidth: number | string
rectPadHeight: number | string
rectBorderRadius?: number | string
holeShape?: "circle"
padShape?: "rect"
portHints?: PortHints
holeOffsetX?: number | string
holeOffsetY?: number | string
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface CommonComponentProps<PinLabel extends string = string>
extends CommonLayoutProps {
key?: any
name: string
displayName?: string
datasheetUrl?: string
pinAttributes?: Record<PinLabel, PinAttributeMap>
supplierPartNumbers?: SupplierPartNumbers
cadModel?: CadModelProp
kicadFootprintMetadata?: KicadFootprintMetadata
kicadSymbolMetadata?: KicadSymbolMetadata
children?: any
symbolName?: string
doNotPlace?: boolean
/**
* Allows the PCB component to hang off the board (e.g. for USB ports or displays)
*/
allowOffBoard?: boolean
/**
* Does this component take up all the space within its bounds on a layer. This is generally true
* except for when separated pin headers are being represented by a single component (in which case,
* chips can be placed between the pin headers) or for tall modules where chips fit underneath.
*/
obstructsWithinBounds?: boolean
/**
* Whether to show this component's CAD model as translucent in the 3D viewer.
*/
showAsTranslucentModel?: boolean
mfn?: string
manufacturerPartNumber?: string
}
export interface CommonLayoutProps {
pcbX?: string | number
pcbY?: string | number
/**
* Position the left, right, top, or bottom edge of the component. Setting any of these
* properties changes the anchor used for pcb positioning to the specified edge.
*/
pcbLeftEdgeX?: string | number
pcbRightEdgeX?: string | number
pcbTopEdgeY?: string | number
pcbBottomEdgeY?: string | number
pcbOffsetX?: string | number
pcbOffsetY?: string | number
pcbRotation?: string | number
pcbPositionAnchor?: string
pcbPositionMode?: PcbPositionMode
shouldBeOnEdgeOfBoard?: boolean
pcbMarginTop?: string | number
pcbMarginRight?: string | number
pcbMarginBottom?: string | number
pcbMarginLeft?: string | number
pcbMarginX?: string | number
pcbMarginY?: string | number
pcbStyle?: PcbStyle
pcbSx?: PcbSx
schMarginTop?: string | number
schMarginRight?: string | number
schMarginBottom?: string | number
schMarginLeft?: string | number
schMarginX?: string | number
schMarginY?: string | number
schX?: string | number
schY?: string | number
schRotation?: string | number
layer?: LayerRefInput
footprint?: FootprintProp
symbol?: SymbolProp
schStyle?: SchStyle
/**
* If true, X/Y coordinates will be interpreted relative to the parent group
*/
relative?: boolean
/**
* If true, schX/schY will be interpreted relative to the parent group
*/
schRelative?: boolean
/**
* If true, pcbX/pcbY will be interpreted relative to the parent group
*/
pcbRelative?: boolean
}
export interface ConnectorProps extends CommonComponentProps {
manufacturerPartNumber?: string
pinLabels?: Record<
number | SchematicPinLabel,
SchematicPinLabel | SchematicPinLabel[]
>
schPinStyle?: SchematicPinStyle
schPinSpacing?: number | string
schWidth?: number | string
schHeight?: number | string
schDirection?: "left" | "right"
schPortArrangement?: SchematicPortArrangement
/**
* Groups of pins that are internally connected
* e.g., [["1","2"], ["2","3"]]
*/
internallyConnectedPins?: (string | number)[][]
/**
* Connector standard, e.g. usb_c, m2
*/
standard?: "usb_c" | "m2"
}
export interface ConstrainedLayoutProps {
name?: string
pcbOnly?: boolean
schOnly?: boolean
}
export interface CopperPourProps {
name?: string
layer: LayerRefInput
connectsTo: string
padMargin?: Distance
traceMargin?: Distance
clearance?: Distance
boardEdgeMargin?: Distance
cutoutMargin?: Distance
outline?: Point[]
coveredWithSolderMask?: boolean
}
export interface CrystalProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
frequency: number | string
loadCapacitance: number | string
manufacturerPartNumber?: string
mpn?: string
pinVariant?: PinVariant
schOrientation?: SchematicOrientation
connections?: Connections<CrystalPinLabels>
}
export interface CurrentSourceProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
current?: number | string
frequency?: number | string
peakToPeakCurrent?: number | string
waveShape?: WaveShape
phase?: number | string
dutyCycle?: number | string
connections?: Connections<CurrentSourcePinLabels>
}
export interface DiodeProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
connections?: {
anode?: string | string[] | readonly string[]
cathode?: string | string[] | readonly string[]
pin1?: string | string[] | readonly string[]
pin2?: string | string[] | readonly string[]
pos?: string | string[] | readonly string[]
neg?: string | string[] | readonly string[]
}
variant?: "standard" | "schottky" | "zener" | "avalanche" | "photo" | "tvs"
standard?: boolean
schottky?: boolean
zener?: boolean
avalanche?: boolean
photo?: boolean
tvs?: boolean
schOrientation?: SchematicOrientation
}
export interface EditPcbComponentLocationEvent extends BaseManualEditEvent {
edit_event_type: "edit_pcb_component_location"
/** @deprecated */
pcb_edit_event_type: "edit_component_location"
pcb_component_id: string
original_center: { x: number; y: number }
new_center: { x: number; y: number }
}
export interface EditPcbGroupLocationEvent extends BaseManualEditEvent {
edit_event_type: "edit_pcb_group_location"
pcb_group_id: string
original_center: { x: number; y: number }
new_center: { x: number; y: number }
}
export interface EditSchematicComponentLocationEvent
extends BaseManualEditEvent {
edit_event_type: "edit_schematic_component_location"
schematic_component_id: string
original_center: { x: number; y: number }
new_center: { x: number; y: number }
}
export interface EditSchematicGroupLocationEvent extends BaseManualEditEvent {
edit_event_type: "edit_schematic_group_location"
schematic_group_id: string
original_center: { x: number; y: number }
new_center: { x: number; y: number }
}
export interface EditTraceHintEvent extends BaseManualEditEvent {
/** @deprecated */
pcb_edit_event_type: "edit_trace_hint"
edit_event_type?: "edit_pcb_trace_hint"
pcb_port_id: string
pcb_trace_hint_id?: string
route: Array<{ x: number; y: number; via?: boolean }>
}
export interface FabricationNoteDimensionProps
extends Omit<
PcbLayoutProps,
| "pcbLeftEdgeX"
| "pcbRightEdgeX"
| "pcbTopEdgeY"
| "pcbBottomEdgeY"
| "pcbX"
| "pcbY"
| "pcbOffsetX"
| "pcbOffsetY"
| "pcbRotation"
> {
from: string | Point
to: string | Point
text?: string
offset?: string | number
font?: "tscircuit2024"
fontSize?: string | number
color?: string
arrowSize?: string | number
units?: "in" | "mm"
outerEdgeToEdge?: true
centerToCenter?: true
innerEdgeToEdge?: true
}
export interface FabricationNoteTextProps extends PcbLayoutProps {
text: string
anchorAlignment?:
| "center"
| "top_left"
| "top_right"
| "bottom_left"
| "bottom_right"
font?: "tscircuit2024"
fontSize?: string | number
color?: string
}
export interface FiducialProps extends CommonComponentProps {
soldermaskPullback?: Distance
padDiameter?: Distance
}
export interface FootprintFileParserEntry {
loadFromUrl: (url: string) => Promise<FootprintLibraryResult>
}
export interface FootprintLibraryResult {
footprintCircuitJson: any[]
cadModel?: CadModelProp
}
export interface FootprintProps {
children?: any
/**
* The layer that the footprint is designed for. If you set this to "top"
* then it means the children were intended to represent the top layer. If
* the <chip /> with this footprint is moved to the bottom layer, then the
* components will be mirrored.
*
* Generally, you shouldn't set this except where it can help prevent
* confusion because you have a complex multi-layer footprint. Default is
* "top" and this is most intuitive.
*/
originalLayer?: LayerRef
/**
* Serialized circuit JSON describing a precompiled footprint
*/
circuitJson?: any[]
/**
* Can be a footprint or kicad string
*/
src?: FootprintProp
}
export interface FuseProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
/**
* Current rating of the fuse in amperes
*/
currentRating: number | string
/**
* Voltage rating of the fuse
*/
voltageRating?: number | string
/**
* Whether to show ratings on schematic
*/
schShowRatings?: boolean
schOrientation?: SchematicOrientation
/**
* Connections to other components
*/
connections?: Connections<PinLabel>
}
export interface HoleWithPolygonPadPlatedHoleProps
extends Omit<PcbLayoutProps, "pcbRotation" | "layer"> {
name?: string
connectsTo?: string | string[]
shape: "hole_with_polygon_pad"
holeShape: "circle" | "oval" | "pill" | "rotated_pill"
holeDiameter?: number | string
holeWidth?: number | string
holeHeight?: number | string
padOutline: Point[]
holeOffsetX: number | string
holeOffsetY: number | string
portHints?: PortHints
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface InductorProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
inductance: number | string
maxCurrentRating?: number | string
schOrientation?: SchematicOrientation
connections?: Connections<InductorPinLabels>
}
export interface InterconnectProps extends CommonComponentProps {
standard?: "TSC0001_36P_XALT_2025_11" | "0805" | "0603" | "1206"
pinLabels?: Record<
number | SchematicPinLabel,
SchematicPinLabel | SchematicPinLabel[]
>
/**
* Groups of pins that are internally connected
* e.g., [["1","2"], ["2","3"]]
*/
internallyConnectedPins?: (string | number)[][]
}
export interface JumperProps extends CommonComponentProps {
manufacturerPartNumber?: string
pinLabels?: Record<
number | SchematicPinLabel,
SchematicPinLabel | SchematicPinLabel[]
>
schPinStyle?: SchematicPinStyle
schPinSpacing?: number | string
schWidth?: number | string
schHeight?: number | string
schDirection?: "left" | "right"
schPinArrangement?: SchematicPortArrangement
/**
* @deprecated Use schPinArrangement instead.
*/
schPortArrangement?: SchematicPortArrangement
/**
* Labels for PCB pins
*/
pcbPinLabels?: Record<string, string>
/**
* Number of pins on the jumper (2 or 3)
*/
pinCount?: 2 | 3
/**
* Groups of pins that are internally connected
* e.g., [["1","2"], ["2","3"]]
*/
internallyConnectedPins?: (string | number)[][]
/**
* Connections to other components
*/
connections?: Connections<string>
}
export interface KicadAt {
x: number | string
y: number | string
rotation?: number | string
}
export interface KicadEffects {
font?: KicadFont
}
export interface KicadFont {
size?: { x: number | string; y: number | string }
thickness?: number | string
}
export interface KicadFootprintAttributes {
through_hole?: boolean
smd?: boolean
exclude_from_pos_files?: boolean
exclude_from_bom?: boolean
}
export interface KicadFootprintMetadata {
footprintName?: string
version?: number | string
generator?: string
generatorVersion?: number | string
layer?: string
properties?: KicadFootprintProperties
attributes?: KicadFootprintAttributes
pads?: KicadFootprintPad[]
embeddedFonts?: boolean
model?: KicadFootprintModel
}
export interface KicadFootprintModel {
path: string
offset?: { x: number | string; y: number | string; z: number | string }
scale?: { x: number | string; y: number | string; z: number | string }
rotate?: { x: number | string; y: number | string; z: number | string }
}
export interface KicadFootprintPad {
name: string
type: string
shape?: string
at?: KicadAt
size?: { x: number | string; y: number | string }
drill?: number | string
layers?: string[]
removeUnusedLayers?: boolean
uuid?: string
}
export interface KicadFootprintProperties {
Reference?: KicadProperty
Value?: KicadProperty
Datasheet?: KicadProperty
Description?: KicadProperty
}
export interface KicadPinMetadata {
electricalType?: KicadPinElectricalType
graphicStyle?: KicadPinGraphicStyle
pinLength?: Distance
nameTextSize?: Distance
numberTextSize?: Distance
}
export interface KicadProperty {
value: string
at?: KicadAt
layer?: string
uuid?: string
hide?: boolean
effects?: KicadEffects
}
export interface KicadSymbolEffects {
font?: KicadFont
justify?: string | string[]
hide?: boolean
}
export interface KicadSymbolMetadata {
symbolName?: string
extends?: string
pinNumbers?: KicadSymbolPinNumbers
pinNames?: KicadSymbolPinNames
excludeFromSim?: boolean
inBom?: boolean
onBoard?: boolean
properties?: KicadSymbolProperties
embeddedFonts?: boolean
}
export interface KicadSymbolPinNames {
offset?: number | string
hide?: boolean
}
export interface KicadSymbolPinNumbers {
hide?: boolean
}
export interface KicadSymbolProperties {
Reference?: KicadSymbolProperty
Value?: KicadSymbolProperty
Footprint?: KicadSymbolProperty
Datasheet?: KicadSymbolProperty
Description?: KicadSymbolProperty
ki_keywords?: KicadSymbolProperty
ki_fp_filters?: KicadSymbolProperty
}
export interface KicadSymbolProperty {
value: string
id?: number | string
at?: KicadAt
effects?: KicadSymbolEffects
}
export interface LayoutConfig {
layoutMode?: "grid" | "flex" | "match-adapt" | "relative" | "none"
position?: "absolute" | "relative"
grid?: boolean
gridCols?: number | string
gridRows?: number | string
gridTemplateRows?: string
gridTemplateColumns?: string
gridTemplate?: string
gridGap?: number | string
gridRowGap?: number | string
gridColumnGap?: number | string
flex?: boolean | string
flexDirection?: "row" | "column"
alignItems?: "start" | "center" | "end" | "stretch"
justifyContent?:
| "start"
| "center"
| "end"
| "stretch"
| "space-between"
| "space-around"
| "space-evenly"
flexRow?: boolean
flexColumn?: boolean
gap?: number | string
pack?: boolean
packOrderStrategy?:
| "largest_to_smallest"
| "first_to_last"
| "highest_to_lowest_pin_count"
packPlacementStrategy?: "shortest_connection_along_outline"
padding?: Distance
paddingLeft?: Distance
paddingRight?: Distance
paddingTop?: Distance
paddingBottom?: Distance
paddingX?: Distance
paddingY?: Distance
width?: Distance
height?: Distance
matchAdapt?: boolean
matchAdaptTemplate?: any
}
export interface ManualEditsFile {
pcb_placements?: ManualPcbPlacement[]
manual_trace_hints?: ManualTraceHint[]
schematic_placements?: ManualSchematicPlacement[]
}
export interface ManualPcbPlacement {
selector: string
relative_to: string
center: Point
}
export interface ManualSchematicPlacement {
selector: string
relative_to: string
center: Point
}
export interface ManualTraceHint {
pcb_port_selector: string
offsets: Array<RouteHintPoint>
}
export interface MosfetProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
channelType: "n" | "p"
mosfetMode: "enhancement" | "depletion"
}
export interface MountedBoardProps
extends SubcircuitGroupProps,
MountedBoardChipProps {
boardToBoardDistance?: Distance
mountOrientation?: "faceDown" | "faceUp"
}
export interface NetAliasProps {
net?: string
connection?: string
schX?: number | string
schY?: number | string
schRotation?: number | string
anchorSide?: "left" | "top" | "right" | "bottom"
}
export interface NetLabelProps {
net?: string
connection?: string
connectsTo?: string | string[]
schX?: number | string
schY?: number | string
schRotation?: number | string
anchorSide?: "left" | "top" | "right" | "bottom"
}
export interface NetProps {
name: string
connectsTo?: string | string[]
highlightColor?: string
isPowerNet?: boolean
isGroundNet?: boolean
}
export interface NonSubcircuitGroupProps extends BaseGroupProps {
subcircuit?: false | undefined
}
export interface OpAmpProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
connections?: Connections<OpAmpPinLabels>
}
export interface OvalPlatedHoleProps extends Omit<PcbLayoutProps, "layer"> {
name?: string
connectsTo?: string | string[]
shape: "oval"
outerWidth: number | string
outerHeight: number | string
holeWidth: number | string
holeHeight: number | string
portHints?: PortHints
solderMaskMargin?: Distance
/** @deprecated use holeWidth */
innerWidth?: number | string
/** @deprecated use holeHeight */
innerHeight?: number | string
coveredWithSolderMask?: boolean
}
export interface PanelProps
extends Omit<BaseGroupProps, "height" | "layoutMode" | "width"> {
width?: Distance
height?: Distance
children?: BaseGroupProps["children"]
anchorAlignment?: z.infer<typeof ninePointAnchor>
/**
* If true, prevent a solder mask from being applied to this panel.
*/
noSolderMask?: boolean
/** Method for panelization */
panelizationMethod?: "tab-routing" | "none"
/** Gap between boards in a panel */
boardGap?: Distance
layoutMode?: "grid" | "pack" | "none"
row?: number
col?: number
cellWidth?: Distance
cellHeight?: Distance
tabWidth?: Distance
tabLength?: Distance
mouseBites?: boolean
edgePadding?: Distance
edgePaddingLeft?: Distance
edgePaddingRight?: Distance
edgePaddingTop?: Distance
edgePaddingBottom?: Distance
_subcircuitCachingEnabled?: boolean
}
export interface PcbLayoutProps {
pcbX?: string | number
pcbY?: string | number
/**
* Position the left, right, top, or bottom edge of the component. Setting any of these
* properties changes the anchor used for pcb positioning to the specified edge.
*/
pcbLeftEdgeX?: string | number
pcbRightEdgeX?: string | number
pcbTopEdgeY?: string | number
pcbBottomEdgeY?: string | number
pcbOffsetX?: string | number
pcbOffsetY?: string | number
pcbRotation?: string | number
pcbPositionAnchor?: string
pcbPositionMode?: PcbPositionMode
shouldBeOnEdgeOfBoard?: boolean
layer?: LayerRefInput
pcbMarginTop?: string | number
pcbMarginRight?: string | number
pcbMarginBottom?: string | number
pcbMarginLeft?: string | number
pcbMarginX?: string | number
pcbMarginY?: string | number
pcbStyle?: PcbStyle
pcbSx?: PcbSx
/**
* If true, pcbX/pcbY will be interpreted relative to the parent group
*/
pcbRelative?: boolean
/**
* If true, both pcb and schematic coordinates will be interpreted relative to the parent group
*/
relative?: boolean
}
export interface PcbNoteDimensionProps
extends Omit<
PcbLayoutProps,
| "pcbLeftEdgeX"
| "pcbRightEdgeX"
| "pcbTopEdgeY"
| "pcbBottomEdgeY"
| "pcbX"
| "pcbY"
| "pcbOffsetX"
| "pcbOffsetY"
| "pcbRotation"
> {
from: string | Point
to: string | Point
text?: string
offset?: string | number
font?: "tscircuit2024"
fontSize?: string | number
color?: string
arrowSize?: string | number
units?: "in" | "mm"
outerEdgeToEdge?: true
centerToCenter?: true
innerEdgeToEdge?: true
}
export interface PcbNoteLineProps
extends Omit<
PcbLayoutProps,
| "pcbLeftEdgeX"
| "pcbRightEdgeX"
| "pcbTopEdgeY"
| "pcbBottomEdgeY"
| "pcbX"
| "pcbY"
| "pcbOffsetX"
| "pcbOffsetY"
| "pcbRotation"
> {
x1: string | number
y1: string | number
x2: string | number
y2: string | number
strokeWidth?: string | number
color?: string
isDashed?: boolean
}
export interface PcbNotePathProps
extends Omit<
PcbLayoutProps,
| "pcbLeftEdgeX"
| "pcbRightEdgeX"
| "pcbTopEdgeY"
| "pcbBottomEdgeY"
| "pcbX"
| "pcbY"
| "pcbOffsetX"
| "pcbOffsetY"
| "pcbRotation"
> {
route: RouteHintPointInput[]
strokeWidth?: string | number
color?: string
}
export interface PcbNoteRectProps extends Omit<PcbLayoutProps, "pcbRotation"> {
width: string | number
height: string | number
strokeWidth?: string | number
isFilled?: boolean
hasStroke?: boolean
isStrokeDashed?: boolean
color?: string
cornerRadius?: string | number
}
export interface PcbNoteTextProps extends PcbLayoutProps {
text: string
anchorAlignment?:
| "center"
| "top_left"
| "top_right"
| "bottom_left"
| "bottom_right"
font?: "tscircuit2024"
fontSize?: string | number
color?: string
}
export interface PcbRouteCache {
pcbTraces: PcbTrace[]
cacheKey: string
}
export interface PcbStyle {
silkscreenFontSize?: string | number
viaPadDiameter?: string | number
viaHoleDiameter?: string | number
silkscreenTextPosition?:
| "centered"
| "outside"
| "none"
| {
offsetX: number
offsetY: number
}
silkscreenTextVisibility?: "hidden" | "visible" | "inherit"
}
export interface PcbSxValue {
fontSize?: string | number
pcbX?: string | number
pcbY?: string | number
visibility?: "hidden" | "visible" | "inherit"
}
export interface PillHoleProps extends PcbLayoutProps {
name?: string
shape: "pill"
width: Distance
height: Distance
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface PillPlatedHoleProps extends Omit<PcbLayoutProps, "layer"> {
name?: string
rectPad?: boolean
connectsTo?: string | string[]
shape: "pill"
outerWidth: number | string
outerHeight: number | string
holeWidth: number | string
holeHeight: number | string
holeOffsetX?: number | string
holeOffsetY?: number | string
/** @deprecated use holeWidth */
innerWidth?: number | string
/** @deprecated use holeHeight */
innerHeight?: number | string
portHints?: PortHints
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface PillSmtPadProps extends Omit<PcbLayoutProps, "pcbRotation"> {
name?: string
shape: "pill"
width: Distance
height: Distance
radius: Distance
portHints?: PortHints
coveredWithSolderMask?: boolean
solderMaskMargin?: Distance
}
export interface PillWithRectPadPlatedHoleProps
extends Omit<PcbLayoutProps, "layer"> {
name?: string
connectsTo?: string | string[]
shape: "pill_hole_with_rect_pad"
holeShape?: "pill"
padShape?: "rect"
holeWidth: number | string
holeHeight: number | string
rectPadWidth: number | string
rectPadHeight: number | string
portHints?: PortHints
holeOffsetX?: number | string
holeOffsetY?: number | string
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface PinAttributeMap {
capabilities?: Array<PinCapability>
activeCapabilities?: Array<PinCapability>
activeCapability?: PinCapability
providesPower?: boolean
requiresPower?: boolean
providesGround?: boolean
requiresGround?: boolean
providesVoltage?: string | number
requiresVoltage?: string | number
doNotConnect?: boolean
includeInBoardPinout?: boolean
highlightColor?: string
mustBeConnected?: boolean
canUseInternalPullup?: boolean
isUsingInternalPullup?: boolean
needsExternalPullup?: boolean
canUseInternalPulldown?: boolean
isUsingInternalPulldown?: boolean
needsExternalPulldown?: boolean
canUseOpenDrain?: boolean
isUsingOpenDrain?: boolean
canUsePushPull?: boolean
isUsingPushPull?: boolean
shouldHaveDecouplingCapacitor?: boolean
recommendedDecouplingCapacitorCapacitance?: string | number
isGpio?: boolean
}
export interface PinCompatibleVariant {
manufacturerPartNumber?: string
supplierPartNumber?: SupplierPartNumbers
}
export interface PinHeaderProps extends CommonComponentProps {
/**
* Number of pins in the header
*/
pinCount: number
/**
* Distance between pins
*/
pitch?: number | string
/**
* Schematic facing direction
*/
schFacingDirection?: "up" | "down" | "left" | "right"
/**
* Whether the header is male, female, or unpopulated
*/
gender?: "male" | "female" | "unpopulated"
/**
* Whether to show pin labels in silkscreen
*/
showSilkscreenPinLabels?: boolean
/**
* Labels for PCB pins
*/
pcbPinLabels?: Record<string, string>
/**
* Whether the header has two rows of pins
*/
doubleRow?: boolean
/**
* If true, the header is a right-angle style connector
*/
rightAngle?: boolean
/**
* Orientation of the header on the PCB
*/
pcbOrientation?: PcbOrientation
/**
* Diameter of the through-hole for each pin
*/
holeDiameter?: number | string
/**
* Diameter of the plated area around each hole
*/
platedDiameter?: number | string
/**
* Labels for each pin
*/
pinLabels?: Record<string, SchematicPinLabel> | SchematicPinLabel[]
/**
* Connections to other components
*/
connections?: Connections<string>
/**
* Direction the header is facing
*/
facingDirection?: "left" | "right"
/**
* Pin arrangement in schematic view
*/
schPinArrangement?: SchematicPinArrangement
/**
* Schematic pin style (margins, etc)
*/
schPinStyle?: SchematicPinStyle
/**
* Schematic pin spacing
*/
schPinSpacing?: number | string
/**
* Schematic width
*/
schWidth?: number | string
/**
* Schematic height
*/
schHeight?: number | string
}
export interface PinSideDefinition {
pins: Array<number | string>
direction:
| "top-to-bottom"
| "left-to-right"
| "bottom-to-top"
| "right-to-left"
}
export interface PlatformConfig {
partsEngine?: PartsEngine
autorouter?: AutorouterProp
autorouterMap?: Record<string, AutorouterDefinition>
// TODO this follows a subset of the localStorage interface
localCacheEngine?: any
registryApiUrl?: string
cloudAutorouterUrl?: string
projectName?: string
projectBaseUrl?: string
version?: string
url?: string
printBoardInformationToSilkscreen?: boolean
includeBoardFiles?: string[]
snapshotsDir?: string
defaultSpiceEngine?: AutocompleteString<"spicey" | "ngspice">
unitPreference?: "mm" | "in" | "mil"
pcbDisabled?: boolean
routingDisabled?: boolean
schematicDisabled?: boolean
partsEngineDisabled?: boolean
drcChecksDisabled?: boolean
netlistDrcChecksDisabled?: boolean
routingDrcChecksDisabled?: boolean
placementDrcChecksDisabled?: boolean
pinSpecificationDrcChecksDisabled?: boolean
spiceEngineMap?: Record<string, SpiceEngine>
footprintLibraryMap?: Record<
string,
| ((
path: string,
options?: { resolvedPcbStyle?: PcbStyle },
) => Promise<FootprintLibraryResult>)
| Record<
string,
| any[]
| ((
path: string,
options?: { resolvedPcbStyle?: PcbStyle },
) => Promise<FootprintLibraryResult>)
>
>
footprintFileParserMap?: Record<string, FootprintFileParserEntry>
resolveProjectStaticFileImportUrl?: (path: string) => Promise<string>
nodeModulesResolver?: (modulePath: string) => Promise<string | null>
platformFetch?: typeof fetch
}
export interface PolygonCutoutProps
extends Omit<PcbLayoutProps, "layer" | "pcbRotation"> {
name?: string
shape: "polygon"
points: Point[]
}
export interface PolygonSmtPadProps
extends Omit<PcbLayoutProps, "pcbRotation"> {
name?: string
shape: "polygon"
points: Point[]
portHints?: PortHints
coveredWithSolderMask?: boolean
solderMaskMargin?: Distance
}
export interface PotentiometerProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
maxResistance: number | string
pinVariant?: PotentiometerPinVariant
connections?: Connections<PotentiometerPinLabels>
}
export interface RectCutoutProps
extends Omit<PcbLayoutProps, "layer" | "pcbRotation"> {
name?: string
shape: "rect"
width: Distance
height: Distance
}
export interface RectHoleProps extends PcbLayoutProps {
name?: string
shape: "rect"
width: Distance
height: Distance
solderMaskMargin?: Distance
coveredWithSolderMask?: boolean
}
export interface RectSmtPadProps extends Omit<PcbLayoutProps, "pcbRotation"> {
name?: string
shape: "rect"
width: Distance
height: Distance
rectBorderRadius?: Distance
cornerRadius?: Distance
portHints?: PortHints
coveredWithSolderMask?: boolean
solderMaskMargin?: Distance
solderMaskMarginLeft?: Distance
solderMaskMarginRight?: Distance
solderMaskMarginTop?: Distance
solderMaskMarginBottom?: Distance
}
export interface RectSolderPasteProps
extends Omit<PcbLayoutProps, "pcbRotation"> {
shape: "rect"
width: Distance
height: Distance
}
export interface ResistorProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
resistance: number | string
tolerance?: number | string
pullupFor?: string
pullupTo?: string
pulldownFor?: string
pulldownTo?: string
schOrientation?: SchematicOrientation
schSize?: SchematicSymbolSize
connections?: Connections<ResistorPinLabels>
}
export interface ResonatorProps extends CommonComponentProps {
frequency: number | string
loadCapacitance: number | string
pinVariant?: ResonatorPinVariant
}
export interface RotatedRectSmtPadProps
extends Omit<PcbLayoutProps, "pcbRotation"> {
name?: string
shape: "rotated_rect"
width: Distance
height: Distance
cornerRadius?: Distance
ccwRotation: number
portHints?: PortHints
coveredWithSolderMask?: boolean
solderMaskMargin?: Distance
solderMaskMarginLeft?: Distance
solderMaskMarginRight?: Distance
solderMaskMarginTop?: Distance
solderMaskMarginBottom?: Distance
}
export interface SchematicArcProps {
center: Point
radius: Distance
startAngleDegrees: number | string
endAngleDegrees: number | string
direction?: "clockwise" | "counterclockwise"
strokeWidth?: Distance
color?: string
isDashed?: boolean
}
export interface SchematicBoxProps {
schX?: Distance
schY?: Distance
width?: Distance
height?: Distance
overlay?: string[]
padding?: Distance
paddingLeft?: Distance
paddingRight?: Distance
paddingTop?: Distance
paddingBottom?: Distance
title?: string
titleAlignment?: z.infer<typeof ninePointAnchor>
titleColor?: string
titleFontSize?: Distance
titleInside?: boolean
strokeStyle?: "solid" | "dashed"
}
export interface SchematicCellProps {
children?: string
horizontalAlign?: "left" | "center" | "right"
verticalAlign?: "top" | "middle" | "bottom"
fontSize?: number | string
rowSpan?: number
colSpan?: number
width?: number | string
text?: string
}
export interface SchematicCircleProps {
center: Point
radius: Distance
strokeWidth?: Distance
color?: string
isFilled?: boolean
fillColor?: string
isDashed?: boolean
}
export interface SchematicLineProps {
x1: Distance
y1: Distance
x2: Distance
y2: Distance
strokeWidth?: Distance
color?: string
isDashed?: boolean
}
export interface SchematicPathProps {
points?: Point[]
svgPath?: string
strokeWidth?: Distance
strokeColor?: string
isFilled?: boolean
fillColor?: string
}
export interface SchematicPortArrangementWithPinCounts {
leftPinCount?: number
topPinCount?: number
rightPinCount?: number
bottomPinCount?: number
}
export interface SchematicPortArrangementWithSides {
leftSide?: PinSideDefinitionInput
topSide?: PinSideDefinitionInput
rightSide?: PinSideDefinitionInput
bottomSide?: PinSideDefinitionInput
}
export interface SchematicPortArrangementWithSizes {
leftSize?: number
topSize?: number
rightSize?: number
bottomSize?: number
}
export interface SchematicRectProps {
schX?: Distance
schY?: Distance
width: Distance
height: Distance
rotation?: number | string
strokeWidth?: Distance
color?: string
isFilled?: boolean
fillColor?: string
isDashed?: boolean
cornerRadius?: Distance
}
export interface SchematicRowProps {
children?: any
height?: number | string
}
export interface SchematicTableProps {
schX?: number | string
schY?: number | string
children?: any
cellPadding?: number | string
borderWidth?: number | string
anchor?: z.infer<typeof ninePointAnchor>
fontSize?: number | string
}
export interface SchematicTextProps {
schX?: Distance
schY?: Distance
text: string
fontSize?: number
anchor?: z.infer<typeof fivePointAnchor> | z.infer<typeof ninePointAnchor>
color?: string
schRotation?: number | string
}
export interface SchStyle {
defaultPassiveSize?: "xs" | "sm" | "md" | string | number
defaultCapacitorOrientation?: "vertical" | "none"
}
export interface SolderJumperProps extends JumperProps {
/**
* Pins that are bridged with solder by default
*/
bridgedPins?: string[][]
/**
* If true, all pins are connected with cuttable traces
*/
bridged?: boolean
}
export interface SpiceEngine {
simulate: (spiceString: string) => Promise<SpiceEngineSimulationResult>
}
export interface SpiceEngineSimulationResult {
engineVersionString?: string
simulationResultCircuitJson: CircuitJson
}
export interface StampboardProps extends BoardProps {
leftPinCount?: number
rightPinCount?: number
topPinCount?: number
bottomPinCount?: number
leftPins?: string[]
rightPins?: string[]
topPins?: string[]
bottomPins?: string[]
pinPitch?: number | string
innerHoles?: boolean
}
export interface SubcircuitGroupProps extends BaseGroupProps {
manualEdits?: ManualEditsFileInput
routingDisabled?: boolean
bomDisabled?: boolean
defaultTraceWidth?: Distance
minTraceWidth?: Distance
nominalTraceWidth?: Distance
pcbRouteCache?: PcbRouteCache
autorouter?: AutorouterProp
autorouterEffortLevel?: "1x" | "2x" | "5x" | "10x" | "100x"
autorouterVersion?: "v1" | "v2" | "v3" | "v4" | "latest"
/**
* Serialized circuit JSON describing a precompiled subcircuit
*/
circuitJson?: any[]
/**
* If true, we'll automatically layout the schematic for this group. Must be
* a subcircuit (currently). This is eventually going to be replaced with more
* sophisticated layout options/modes and will be enabled by default.
*/
schAutoLayoutEnabled?: boolean
/**
* If true, net labels will automatically be created for complex traces
*/
schTraceAutoLabelEnabled?: boolean
/** Maximum length a trace can span on the schematic */
schMaxTraceDistance?: Distance
partsEngine?: PartsEngine
_subcircuitCachingEnabled?: boolean
/** When autosizing, the board will be made square */
square?: boolean
/** Desired empty area of the board e.g. "22mm^2" or "20%" */
emptyArea?: string
/** Desired filled area of the board e.g. "22mm^2" or "20%" */
filledArea?: string
width?: number | string
height?: number | string
outline?: Point[]
outlineOffsetX?: number | string
outlineOffsetY?: number | string
}
export interface SubcircuitGroupPropsWithBool extends SubcircuitGroupProps {
subcircuit: true
}
export interface SupplierProps {
supplierPartNumbers?: SupplierPartNumbers
}
export interface SwitchProps extends CommonComponentProps {
type?: "spst" | "spdt" | "dpst" | "dpdt"
isNormallyClosed?: boolean
spdt?: boolean
spst?: boolean
dpst?: boolean
dpdt?: boolean
simSwitchFrequency?: number | string
simCloseAt?: number | string
simOpenAt?: number | string
simStartClosed?: boolean
simStartOpen?: boolean
connections?: Connections<string>
}
export interface SymbolProps {
/**
* The facing direction that the symbol is designed for. If you set this to "right",
* then it means the children were intended to represent the symbol facing right.
* Generally, you shouldn't set this except where it can help prevent confusion
* because you have a complex symbol. Default is "right" and this is most intuitive.
*/
originalFacingDirection?: "up" | "down" | "left" | "right"
width?: string | number
height?: string | number
name?: string
}
export interface TestpointProps extends CommonComponentProps {
/**
* The footprint variant of the testpoint either a surface pad or through-hole
*/
footprintVariant?: "pad" | "through_hole"
/**
* The shape of the pad if using a pad variant
*/
padShape?: "rect" | "circle"
/**
* Diameter of the copper pad (applies to both SMD pads and plated holes)
*/
padDiameter?: number | string
/**
* Diameter of the hole if using a through-hole testpoint
*/
holeDiameter?: number | string
/**
* Width of the pad when padShape is rect
*/
width?: number | string
/**
* Height of the pad when padShape is rect
*/
height?: number | string
connections?: TestpointConnections
}
export interface ToolingrailProps {
children?: any
}
export interface TransistorProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
type: "npn" | "pnp" | "bjt" | "jfet" | "mosfet" | "igbt"
connections?: Connections<transistorPinsLabels>
}
export interface ViaProps extends CommonLayoutProps {
name?: string
fromLayer: LayerRefInput
toLayer: LayerRefInput
holeDiameter?: number | string
outerDiameter?: number | string
connectsTo?: string | string[]
netIsAssignable?: boolean
}
export interface VoltageProbeProps extends Omit<CommonComponentProps, "name"> {
name?: string
connectsTo: string
referenceTo?: string
color?: string
}
export interface VoltageSourceProps<PinLabel extends string = string>
extends CommonComponentProps<PinLabel> {
voltage?: number | string
frequency?: number | string
peakToPeakVoltage?: number | string
waveShape?: WaveShape
phase?: number | string
dutyCycle?: number | string
connections?: Connections<VoltageSourcePinLabels>
}