circuit-json 0.0.520 → 0.0.521

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/units/index.ts","../src/common/point.ts","../src/utils/expect-types-match.ts","../src/common/point3.ts","../src/common/size.ts","../src/common/shape.ts","../src/common/getZodPrefixedIdWithDefault.ts","../src/common/NinePointAnchor.ts","../src/common/PcbRenderLayer.ts","../src/common/asset.ts","../src/common/kicadFootprintMetadata.ts","../src/common/kicadSymbolMetadata.ts","../src/base_circuit_json_error.ts","../src/source/source_simple_capacitor.ts","../src/pcb/properties/supplier_name.ts","../src/source/base/source_component_base.ts","../src/source/source_simple_resistor.ts","../src/source/source_simple_diode.ts","../src/source/source_simple_fiducial.ts","../src/source/source_simple_led.ts","../src/source/source_simple_ground.ts","../src/source/source_simple_chip.ts","../src/source/source_printed_part.ts","../src/source/source_subassembly.ts","../src/source/source_motor.ts","../src/source/source_simple_power_source.ts","../src/source/source_simple_current_source.ts","../src/source/source_simple_fuse.ts","../src/source/source_simple_ammeter.ts","../src/source/properties/source_pin_attributes.ts","../src/source/any_source_component.ts","../src/source/source_simple_battery.ts","../src/source/source_simple_inductor.ts","../src/source/source_simple_push_button.ts","../src/source/source_simple_potentiometer.ts","../src/source/source_simple_crystal.ts","../src/source/source_simple_pin_header.ts","../src/source/source_simple_connector.ts","../src/source/source_simple_pinout.ts","../src/source/source_simple_resonator.ts","../src/source/source_simple_transistor.ts","../src/source/source_simple_test_point.ts","../src/source/source_simple_mosfet.ts","../src/source/source_simple_op_amp.ts","../src/source/source_simple_switch.ts","../src/source/source_project_metadata.ts","../src/source/source_missing_property_error.ts","../src/source/source_failed_to_create_component_error.ts","../src/source/source_invalid_component_property_error.ts","../src/source/source_trace_not_connected_error.ts","../src/source/source_property_ignored_warning.ts","../src/source/source_pin_missing_trace_warning.ts","../src/source/source_missing_manufacturer_part_number_warning.ts","../src/source/source_refdes_convention_warning.ts","../src/source/source_component_availability_warning.ts","../src/source/source_simple_voltage_probe.ts","../src/source/source_interconnect.ts","../src/source/source_i2c_misconfigured_error.ts","../src/source/source_component_misconfigured_error.ts","../src/source/source_simple_voltage_source.ts","../src/source/source_port.ts","../src/source/source_component_internal_connection.ts","../src/source/source_trace.ts","../src/source/source_group.ts","../src/source/source_net.ts","../src/source/source_board.ts","../src/source/source_ambiguous_port_reference.ts","../src/source/source_pcb_ground_plane.ts","../src/source/source_manually_placed_via.ts","../src/pcb/properties/layer_ref.ts","../src/source/source_unnamed_trace_warning.ts","../src/source/source_no_power_pin_defined_warning.ts","../src/source/source_no_ground_pin_defined_warning.ts","../src/source/source_component_pins_underspecified_warning.ts","../src/source/source_pin_must_be_connected_error.ts","../src/source/unknown_error_finding_part.ts","../src/source/source_part_not_found_warning.ts","../src/source/source_confusing_net_name_warning.ts","../src/source/source_bus.ts","../src/source/source_runtime_error.ts","../src/schematic/schematic_box.ts","../src/schematic/schematic_path.ts","../src/schematic/schematic_component.ts","../src/schematic/schematic_symbol.ts","../src/schematic/schematic_line.ts","../src/schematic/schematic_rect.ts","../src/schematic/schematic_circle.ts","../src/schematic/schematic_arc.ts","../src/schematic/schematic_trace.ts","../src/schematic/schematic_text.ts","../src/common/FivePointAnchor.ts","../src/schematic/schematic_text_part.ts","../src/schematic/schematic_port.ts","../src/schematic/schematic_net_label.ts","../src/schematic/schematic_error.ts","../src/schematic/schematic_layout_error.ts","../src/schematic/schematic_debug_object.ts","../src/schematic/schematic_voltage_probe.ts","../src/schematic/schematic_manual_edit_conflict_warning.ts","../src/schematic/schematic_component_overlap_warning.ts","../src/schematic/schematic_component_styling_warning.ts","../src/schematic/schematic_element_outside_sheet_warning.ts","../src/schematic/schematic_graphic.ts","../src/schematic/schematic_group.ts","../src/schematic/schematic_table.ts","../src/schematic/schematic_table_cell.ts","../src/schematic/schematic_sheet.ts","../src/schematic/schematic_missing_sheet_warning.ts","../src/pcb/properties/brep.ts","../src/pcb/properties/insertion_direction.ts","../src/pcb/properties/pcb_pin1_location.ts","../src/pcb/properties/pcb_route_hints.ts","../src/pcb/properties/route_hint_point.ts","../src/pcb/properties/manufacturing_drc_properties.ts","../src/pcb/pcb_component.ts","../src/pcb/pcb_debug_object.ts","../src/pcb/pcb_hole.ts","../src/pcb/pcb_plated_hole.ts","../src/pcb/pcb_port.ts","../src/pcb/pcb_smtpad.ts","../src/pcb/pcb_solder_paste.ts","../src/pcb/pcb_soldermask_opening.ts","../src/pcb/pcb_text.ts","../src/pcb/pcb_trace.ts","../src/pcb/pcb_trace_warning.ts","../src/pcb/pcb_trace_too_long_error.ts","../src/pcb/pcb_bus_length_skew_error.ts","../src/pcb/pcb_trace_too_long_warning.ts","../src/pcb/pcb_trace_too_many_vias_warning.ts","../src/pcb/pcb_bus_routing_constraint_error.ts","../src/pcb/pcb_bus_routing_constraint_warning.ts","../src/pcb/pcb_trace_error.ts","../src/pcb/pcb_trace_missing_error.ts","../src/pcb/pcb_port_not_matched_error.ts","../src/pcb/pcb_port_not_connected_error.ts","../src/pcb/pcb_net.ts","../src/pcb/pcb_via.ts","../src/pcb/pcb_board.ts","../src/pcb/pcb_bend.ts","../src/pcb/pcb_stiffener.ts","../src/pcb/pcb_panel.ts","../src/pcb/pcb_placement_error.ts","../src/pcb/pcb_packing_error.ts","../src/pcb/pcb_panelization_placement_error.ts","../src/pcb/pcb_trace_hint.ts","../src/pcb/pcb_silkscreen_line.ts","../src/pcb/pcb_silkscreen_path.ts","../src/pcb/pcb_silkscreen_text.ts","../src/pcb/pcb_copper_text.ts","../src/pcb/pcb_silkscreen_rect.ts","../src/pcb/pcb_silkscreen_circle.ts","../src/pcb/pcb_silkscreen_oval.ts","../src/pcb/pcb_silkscreen_graphic.ts","../src/pcb/pcb_silkscreen_pill.ts","../src/pcb/pcb_fabrication_note_text.ts","../src/pcb/pcb_fabrication_note_path.ts","../src/pcb/pcb_fabrication_note_rect.ts","../src/pcb/pcb_fabrication_note_dimension.ts","../src/pcb/pcb_note_text.ts","../src/pcb/pcb_note_rect.ts","../src/pcb/pcb_note_path.ts","../src/pcb/pcb_note_line.ts","../src/pcb/pcb_note_dimension.ts","../src/pcb/pcb_footprint_overlap_error.ts","../src/pcb/pcb_courtyard_overlap_error.ts","../src/pcb/pcb_keepout.ts","../src/pcb/pcb_keepout_overlap_warning.ts","../src/pcb/pcb_cutout.ts","../src/pcb/pcb_missing_footprint_error.ts","../src/pcb/external_footprint_load_error.ts","../src/pcb/circuit_json_footprint_load_error.ts","../src/pcb/pcb_group.ts","../src/pcb/pcb_autorouting_error.ts","../src/pcb/pcb_preflight_routing_error.ts","../src/pcb/pcb_manual_edit_conflict_warning.ts","../src/pcb/pcb_connector_not_in_accessible_orientation_warning.ts","../src/pcb/pcb_component_missing_courtyard_warning.ts","../src/pcb/supplier_footprint_mismatch_warning.ts","../src/pcb/pcb_fabricator_extra_charge_warning.ts","../src/pcb/pcb_breakout_point.ts","../src/pcb/pcb_ground_plane.ts","../src/pcb/pcb_ground_plane_region.ts","../src/pcb/pcb_thermal_spoke.ts","../src/pcb/pcb_copper_pour.ts","../src/pcb/pcb_component_outside_board_error.ts","../src/pcb/pcb_component_not_on_board_edge_error.ts","../src/pcb/pcb_component_invalid_layer_error.ts","../src/pcb/pcb_via_clearance_error.ts","../src/pcb/pcb_via_trace_clearance_error.ts","../src/pcb/pcb_pad_pad_clearance_error.ts","../src/pcb/pcb_pad_trace_clearance_error.ts","../src/pcb/pcb_courtyard_rect.ts","../src/pcb/pcb_courtyard_outline.ts","../src/pcb/pcb_courtyard_polygon.ts","../src/pcb/pcb_courtyard_circle.ts","../src/pcb/pcb_courtyard_pill.ts","../src/cad/cad_component.ts","../src/cad/cad_model_conventions.ts","../src/cad/cad_collision_error.ts","../src/cad/cad_cable.ts","../src/simulation/simulation_voltage_source.ts","../src/simulation/simulation_current_source.ts","../src/simulation/simulation_experiment.ts","../src/simulation/simulation_units.ts","../src/simulation/simulation_transient_voltage_graph.ts","../src/simulation/simulation_parameter_sweep_coordinate.ts","../src/simulation/simulation_transient_current_graph.ts","../src/simulation/simulation_switch.ts","../src/simulation/simulation_voltage_probe.ts","../src/simulation/simulation_current_probe.ts","../src/simulation/simulation_unknown_experiment_error.ts","../src/simulation/simulation_parameter_sweep.ts","../src/simulation/simulation_dc_operating_point_voltage.ts","../src/simulation/simulation_dc_operating_point_current.ts","../src/simulation/simulation_dc_sweep_voltage_graph.ts","../src/simulation/simulation_dc_sweep_current_graph.ts","../src/simulation/simulation_ac_sweep_voltage_graph.ts","../src/simulation/simulation_complex_sample.ts","../src/simulation/simulation_ac_sweep_current_graph.ts","../src/simulation/simulation_op_amp.ts","../src/simulation/simulation_spice_subcircuit.ts","../src/simulation/simulation_oscilloscope_trace.ts","../src/any_circuit_element.ts"],"sourcesContent":["import { parseAndConvertSiUnit } from \"format-si-unit\"\nimport { z } from \"zod\"\nexport {\n parseAndConvertSiUnit,\n type BaseTscircuitUnit,\n} from \"format-si-unit\"\n\n// // Currently, removing uncommon SI Prefixes for type simplicity.\n// export type SIPrefix =\n// // | \"y\"\n// // | \"yocto\"\n// // | \"z\"\n// // | \"zepto\"\n// // | \"atto\"\n// // | \"a\"\n// | \"femto\"\n// | \"f\"\n// | \"u\"\n// | \"micro\"\n// // | \"d\"\n// // | \"deci\"\n// | \"c\"\n// | \"centi\"\n// | \"m\"\n// | \"milli\"\n// | \"k\"\n// | \"kilo\"\n// | \"M\"\n// | \"mega\"\n// // | \"G\"\n// // | \"T\"\n// // | \"P\"\n// // | \"E\"\n// // | \"Z\"\n// // | \"Y\"\n\n// export type UnitAbbreviations = {\n// farad: \"F\"\n// ohm: \"Ω\"\n// henry: \"H\"\n// meter: \"m\"\n// volt: \"V\"\n// inch: \"in\"\n// foot: \"ft\"\n// }\n\n// export type Unit = keyof UnitAbbreviations\n// export type NumberWithUnit<T extends Unit> =\n// | `${number}${T | UnitAbbreviations[T]}`\n// | `${number} ${T | UnitAbbreviations[T]}`\n// | `${number}${SIPrefix}${T | UnitAbbreviations[T]}`\n// | `${number} ${SIPrefix}${T | UnitAbbreviations[T]}`\n// export type NumberWithAnyUnit =\n// | `${number}${UnitOrAbbreviation}`\n// | `${number} ${UnitOrAbbreviation}`\n// | `${number}${SIPrefix}${UnitOrAbbreviation}`\n// | `${number} ${SIPrefix}${UnitOrAbbreviation}`\n\n// TODO lots of validation to make sure the unit is valid etc.\nexport const resistance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"Ω\").value!)\n\nexport const capacitance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"F\").value!)\n .transform((value) => {\n return Number.parseFloat(value.toPrecision(12)) // Round to 12 significant digits\n })\n\nexport const inductance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"H\").value!)\n\nexport const voltage = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"V\").value!)\n\nexport const length = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const frequency = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"Hz\").value!)\n\n/**\n * Length in meters\n */\nexport type Length = number\nexport type Distance = number\n\nexport const distance = length\n\nexport const current = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"A\").value!)\n\nexport const duration_ms = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const time = duration_ms\n\nexport const ms = duration_ms\n\nexport const timestamp = z.string().datetime()\n\n/**\n * Rotation is always converted to degrees\n */\nexport const rotation = z\n .string()\n .or(z.number())\n .transform((arg): number => {\n if (typeof arg === \"number\") return arg\n if (arg.endsWith(\"deg\")) {\n return Number.parseFloat(arg.split(\"deg\")[0]!)\n }\n if (arg.endsWith(\"rad\")) {\n return (Number.parseFloat(arg.split(\"rad\")[0]!) * 180) / Math.PI\n }\n return Number.parseFloat(arg)\n })\n\nexport const battery_capacity = z\n .number()\n .or(z.string().endsWith(\"mAh\"))\n .transform((v) => {\n if (typeof v === \"string\") {\n const valString = v.replace(\"mAh\", \"\")\n const num = Number.parseFloat(valString)\n if (Number.isNaN(num)) {\n throw new Error(\"Invalid capacity\")\n }\n return num\n }\n return v\n })\n .describe(\"Battery capacity in mAh\")\n\nexport type InputRotation = number | string\nexport type Rotation = number\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const point = z.object({\n x: distance,\n y: distance,\n})\n\nexport const position = point\n\nexport type InputPoint = z.input<typeof point>\nexport type InputPosition = z.input<typeof position>\ntype InferredPoint = z.infer<typeof point>\ntype InferredPosition = z.infer<typeof position>\n\nexport interface Point {\n x: number\n y: number\n}\n\nexport interface Position {\n x: number\n y: number\n}\n\nexpectTypesMatch<Point, InferredPoint>(true)\nexpectTypesMatch<Position, InferredPosition>(true)\n","import type { TypeEqual } from \"ts-expect\"\n\ntype IsNever<T> = [T] extends [never] ? true : false\n\ntype GetMismatchedProps<T1, T2> = {\n [K in keyof T1 & keyof T2]: T1[K] extends T2[K]\n ? T2[K] extends T1[K]\n ? never\n : K\n : K\n}[keyof T1 & keyof T2]\n\nexport const expectTypesMatch = <\n const T1,\n const T2,\n T3 = Exclude<keyof T1, keyof T2>,\n T4 = Exclude<keyof T2, keyof T1>,\n T5 = GetMismatchedProps<T1, T2>,\n>(\n shouldBe: IsNever<T3> extends true\n ? IsNever<T4> extends true\n ? IsNever<T5> extends true\n ? TypeEqual<T1, T2>\n : `mismatched prop types: ${T5 extends string ? T5 : \"\"}`\n : `extra props ${T4 extends string ? T4 : \"\"}`\n : `missing props ${T3 extends string ? T3 : \"\"}`,\n): void => {}\n\n// ------ TESTS -------\n\nexpectTypesMatch<\n {\n a: number\n },\n {\n a: number\n b: number\n }\n>(\"extra props b\")\n\nexpectTypesMatch<\n {\n a: number\n b: number\n },\n {\n a: number\n }\n>(\"missing props b\")\n\nexpectTypesMatch<\n {\n a: number\n },\n {\n a: number\n }\n>(true)\n\nexpectTypesMatch<\n {\n a: number\n },\n {\n a: string\n }\n>(\"mismatched prop types: a\")\n\n// ------ String Union Matching -------\n\nexport type ExpectStringUnionsMatch<\n T1 extends string,\n T2 extends string,\n Diff1 = Exclude<T1, T2>,\n Diff2 = Exclude<T2, T1>,\n> = IsNever<Diff1> extends true\n ? IsNever<Diff2> extends true\n ? true // Unions are identical\n : `T2 has extra: \"${Diff2 extends string ? Diff2 : \"\"}\"` // T2 has elements not in T1\n : IsNever<Diff2> extends true\n ? `T1 has extra: \"${Diff1 extends string ? Diff1 : \"\"}\"` // T1 has elements not in T2\n : `T1 has extra: \"${Diff1 extends string\n ? Diff1\n : \"\"}\", T2 has extra: \"${Diff2 extends string ? Diff2 : \"\"}\"` // Both have differences\n\nexport const expectStringUnionsMatch = <\n const T1 extends string,\n const T2 extends string,\n ShouldBeTrue = ExpectStringUnionsMatch<T1, T2>,\n>(\n shouldBe: ShouldBeTrue,\n): void => {}\n\n// ------ TESTS -------\n\ntype TestUnion1 = \"a\" | \"b\" | \"c\"\ntype TestUnion2 = \"a\" | \"b\" | \"c\"\ntype TestUnion3 = \"a\" | \"b\" | \"d\"\ntype TestUnion4 = \"a\" | \"b\"\n\nexpectStringUnionsMatch<TestUnion1, TestUnion2>(true)\nexpectStringUnionsMatch<TestUnion1, TestUnion3>(\n 'T1 has extra: \"c\", T2 has extra: \"d\"',\n)\nexpectStringUnionsMatch<TestUnion1, TestUnion4>('T1 has extra: \"c\"')\nexpectStringUnionsMatch<TestUnion4, TestUnion1>('T2 has extra: \"c\"')\nexpectStringUnionsMatch<TestUnion3, TestUnion1>(\n 'T1 has extra: \"d\", T2 has extra: \"c\"',\n)\n\n// Example of using @ts-expect-error for expected failures\n// @ts-expect-error Type '\"T2 has extra: \\\"d\\\"\"' is not assignable to type 'true'.\nexpectStringUnionsMatch<TestUnion1, TestUnion3>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const point3 = z.object({\n x: distance,\n y: distance,\n z: distance,\n})\n\nexport const position3 = point3\n\ntype InferredPoint3 = z.infer<typeof point3>\n\nexport interface Point3 {\n x: number\n y: number\n z: number\n}\n\nexpectTypesMatch<Point3, InferredPoint3>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const size = z.object({\n width: z.number(),\n height: z.number(),\n})\n\nexport type SizeInput = z.input<typeof size>\ntype InferredSize = z.infer<typeof size>\n\nexport interface Size {\n width: number\n height: number\n}\n\nexpectTypesMatch<Size, InferredSize>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"./point\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst finite_distance = distance.pipe(z.number().finite())\nconst positive_distance = distance.pipe(z.number().finite().positive())\n\nexport const circle_shape = z\n .object({\n shape: z.literal(\"circle\"),\n x: finite_distance,\n y: finite_distance,\n radius: positive_distance,\n })\n .strict()\n\nexport const rect_shape = z\n .object({\n shape: z.literal(\"rect\"),\n x: finite_distance,\n y: finite_distance,\n width: positive_distance,\n height: positive_distance,\n })\n .strict()\n\nexport const rotated_rect_shape = rect_shape.extend({\n shape: z.literal(\"rotated_rect\"),\n ccw_rotation: rotation.pipe(z.number().finite()),\n})\n\nexport const polygon_shape = z\n .object({\n shape: z.literal(\"polygon\"),\n points: z\n .array(point.extend({ x: finite_distance, y: finite_distance }))\n .min(3)\n .refine((points) => {\n const twice_area = points.reduce((sum, point, index) => {\n const next = points[(index + 1) % points.length]!\n return sum + point.x * next.y - next.x * point.y\n }, 0)\n return Number.isFinite(twice_area) && twice_area !== 0\n }, \"Polygon boundary must enclose a nonzero area\"),\n })\n .strict()\n\n/** A circle centered at (x, y), with coordinates and radius in mm. */\nexport interface CircleShape {\n shape: \"circle\"\n x: Distance\n y: Distance\n radius: Distance\n}\n\n/** A rectangle centered at (x, y), with coordinates and dimensions in mm. */\nexport interface RectShape {\n shape: \"rect\"\n x: Distance\n y: Distance\n width: Distance\n height: Distance\n}\n\n/** A centered rectangle rotated counterclockwise in degrees. */\nexport interface RotatedRectShape extends Omit<RectShape, \"shape\"> {\n shape: \"rotated_rect\"\n ccw_rotation: Rotation\n}\n\n/** An implicitly closed boundary in mm enclosing nonzero area. */\nexport interface PolygonShape {\n shape: \"polygon\"\n points: Point[]\n}\n\nexpectTypesMatch<CircleShape, z.output<typeof circle_shape>>(true)\nexpectTypesMatch<RectShape, z.output<typeof rect_shape>>(true)\nexpectTypesMatch<RotatedRectShape, z.output<typeof rotated_rect_shape>>(true)\nexpectTypesMatch<PolygonShape, z.output<typeof polygon_shape>>(true)\n\n/**\n * Geometry only; the containing element defines the coordinate frame and meaning.\n * Elements can select a subset and extend each shape with their own record fields.\n */\nexport const standard_shape = z.discriminatedUnion(\"shape\", [\n circle_shape,\n rect_shape,\n rotated_rect_shape,\n polygon_shape,\n])\n\nexport type StandardShapeInput = z.input<typeof standard_shape>\nexport type StandardShape =\n | CircleShape\n | RectShape\n | RotatedRectShape\n | PolygonShape\n\nexpectTypesMatch<StandardShape, z.output<typeof standard_shape>>(true)\n","import { z } from \"zod\"\n\n// Generates a random string ID of specified length using alphanumeric characters\nconst randomId = (length: number): string => {\n const chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"\n return Array.from(\n { length },\n () => chars[Math.floor(Math.random() * chars.length)],\n ).join(\"\")\n}\n/**\n * Use this for primary keys for any circuit element\n */\nexport const getZodPrefixedIdWithDefault = (prefix: string) => {\n return z\n .string()\n .optional()\n .default(() => `${prefix}_${randomId(10)}`)\n}\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport type NinePointAnchor =\n | \"top_left\"\n | \"top_center\"\n | \"top_right\"\n | \"center_left\"\n | \"center\"\n | \"center_right\"\n | \"bottom_left\"\n | \"bottom_center\"\n | \"bottom_right\"\n\nexport const ninePointAnchor = z.enum([\n \"top_left\",\n \"top_center\",\n \"top_right\",\n \"center_left\",\n \"center\",\n \"center_right\",\n \"bottom_left\",\n \"bottom_center\",\n \"bottom_right\",\n])\n\ntype InferredNinePointAnchor = z.infer<typeof ninePointAnchor>\n\nexpectTypesMatch<NinePointAnchor, InferredNinePointAnchor>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport type PcbRenderLayer =\n | \"top_silkscreen\"\n | \"bottom_silkscreen\"\n | \"top_copper\"\n | \"bottom_copper\"\n | \"top_soldermask\"\n | \"bottom_soldermask\"\n | \"top_fabrication_note\"\n | \"bottom_fabrication_note\"\n | \"top_user_note\"\n | \"bottom_user_note\"\n | \"top_courtyard\"\n | \"bottom_courtyard\"\n | \"inner1_copper\"\n | \"inner2_copper\"\n | \"inner3_copper\"\n | \"inner4_copper\"\n | \"inner5_copper\"\n | \"inner6_copper\"\n | \"inner7_copper\"\n | \"inner8_copper\"\n | \"edge_cuts\"\n | \"drill\"\n\nexport const pcbRenderLayer = z.enum([\n \"top_silkscreen\",\n \"bottom_silkscreen\",\n \"top_copper\",\n \"bottom_copper\",\n \"top_soldermask\",\n \"bottom_soldermask\",\n \"top_fabrication_note\",\n \"bottom_fabrication_note\",\n \"top_user_note\",\n \"bottom_user_note\",\n \"top_courtyard\",\n \"bottom_courtyard\",\n \"inner1_copper\",\n \"inner2_copper\",\n \"inner3_copper\",\n \"inner4_copper\",\n \"inner5_copper\",\n \"inner6_copper\",\n \"inner7_copper\",\n \"inner8_copper\",\n \"edge_cuts\",\n \"drill\",\n])\n\ntype InferredPcbRenderLayer = z.infer<typeof pcbRenderLayer>\n\nexpectTypesMatch<PcbRenderLayer, InferredPcbRenderLayer>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const asset = z.object({\n project_relative_path: z.string(),\n url: z.string(),\n mimetype: z.string(),\n})\n\nexport type AssetInput = z.input<typeof asset>\nexport type Asset = z.infer<typeof asset>\n\nexpectTypesMatch<Asset, AssetInput>(true)\n","import { z } from \"zod\"\nimport { point } from \"./point\"\nimport { point3 } from \"./point3\"\nimport { distance, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface KicadAt {\n x: number\n y: number\n rotation?: number\n}\n\nexport const kicadAt = point.extend({\n rotation: rotation.optional(),\n})\n\ntype InferredKicadAt = z.infer<typeof kicadAt>\nexpectTypesMatch<KicadAt, InferredKicadAt>(true)\n\nexport interface KicadFont {\n size?: { x: number; y: number }\n thickness?: number\n}\n\nexport const kicadFont = z.object({\n size: point.optional(),\n thickness: distance.optional(),\n})\n\ntype InferredKicadFont = z.infer<typeof kicadFont>\nexpectTypesMatch<KicadFont, InferredKicadFont>(true)\n\nexport interface KicadEffects {\n font?: KicadFont\n}\n\nexport const kicadEffects = z.object({\n font: kicadFont.optional(),\n})\n\ntype InferredKicadEffects = z.infer<typeof kicadEffects>\nexpectTypesMatch<KicadEffects, InferredKicadEffects>(true)\n\nexport interface KicadProperty {\n value: string\n at?: KicadAt\n layer?: string\n uuid?: string\n hide?: boolean\n effects?: KicadEffects\n}\n\nexport const kicadProperty = z.object({\n value: z.string(),\n at: kicadAt.optional(),\n layer: z.string().optional(),\n uuid: z.string().optional(),\n hide: z.boolean().optional(),\n effects: kicadEffects.optional(),\n})\n\ntype InferredKicadProperty = z.infer<typeof kicadProperty>\nexpectTypesMatch<KicadProperty, InferredKicadProperty>(true)\n\nexport interface KicadFootprintProperties {\n Reference?: KicadProperty\n Value?: KicadProperty\n Datasheet?: KicadProperty\n Description?: KicadProperty\n}\n\nexport const kicadFootprintProperties = z.object({\n Reference: kicadProperty.optional(),\n Value: kicadProperty.optional(),\n Datasheet: kicadProperty.optional(),\n Description: kicadProperty.optional(),\n})\n\ntype InferredKicadFootprintProperties = z.infer<typeof kicadFootprintProperties>\nexpectTypesMatch<KicadFootprintProperties, InferredKicadFootprintProperties>(\n true,\n)\n\nexport interface KicadFootprintAttributes {\n through_hole?: boolean\n smd?: boolean\n exclude_from_pos_files?: boolean\n exclude_from_bom?: boolean\n}\n\nexport const kicadFootprintAttributes = z.object({\n through_hole: z.boolean().optional(),\n smd: z.boolean().optional(),\n exclude_from_pos_files: z.boolean().optional(),\n exclude_from_bom: z.boolean().optional(),\n})\n\ntype InferredKicadFootprintAttributes = z.infer<typeof kicadFootprintAttributes>\nexpectTypesMatch<KicadFootprintAttributes, InferredKicadFootprintAttributes>(\n true,\n)\n\nexport interface KicadFootprintPad {\n name: string\n type: string\n shape?: string\n at?: KicadAt\n size?: { x: number; y: number }\n drill?: number\n layers?: string[]\n removeUnusedLayers?: boolean\n uuid?: string\n}\n\nexport const kicadFootprintPad = z.object({\n name: z.string(),\n type: z.string(),\n shape: z.string().optional(),\n at: kicadAt.optional(),\n size: point.optional(),\n drill: distance.optional(),\n layers: z.array(z.string()).optional(),\n removeUnusedLayers: z.boolean().optional(),\n uuid: z.string().optional(),\n})\n\ntype InferredKicadFootprintPad = z.infer<typeof kicadFootprintPad>\nexpectTypesMatch<KicadFootprintPad, InferredKicadFootprintPad>(true)\n\nexport interface KicadFootprintModel {\n path: string\n offset?: { x: number; y: number; z: number }\n scale?: { x: number; y: number; z: number }\n rotate?: { x: number; y: number; z: number }\n}\n\nexport const kicadFootprintModel = z.object({\n path: z.string(),\n offset: point3.optional(),\n scale: point3.optional(),\n rotate: point3.optional(),\n})\n\ntype InferredKicadFootprintModel = z.infer<typeof kicadFootprintModel>\nexpectTypesMatch<KicadFootprintModel, InferredKicadFootprintModel>(true)\n\nexport interface KicadFootprintMetadata {\n footprintName?: string\n version?: number | string\n generator?: string\n generatorVersion?: number | string\n layer?: string\n properties?: KicadFootprintProperties\n attributes?: KicadFootprintAttributes\n pads?: KicadFootprintPad[]\n embeddedFonts?: boolean\n model?: KicadFootprintModel\n}\n\nexport const kicadFootprintMetadata = z.object({\n footprintName: z.string().optional(),\n version: z.union([z.number(), z.string()]).optional(),\n generator: z.string().optional(),\n generatorVersion: z.union([z.number(), z.string()]).optional(),\n layer: z.string().optional(),\n properties: kicadFootprintProperties.optional(),\n attributes: kicadFootprintAttributes.optional(),\n pads: z.array(kicadFootprintPad).optional(),\n embeddedFonts: z.boolean().optional(),\n model: kicadFootprintModel.optional(),\n})\n\ntype InferredKicadFootprintMetadata = z.infer<typeof kicadFootprintMetadata>\nexpectTypesMatch<KicadFootprintMetadata, InferredKicadFootprintMetadata>(true)\n","import { z } from \"zod\"\nimport { distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n kicadAt,\n kicadFont,\n type KicadAt,\n type KicadFont,\n} from \"./kicadFootprintMetadata\"\n\nexport interface KicadSymbolPinNumbers {\n hide?: boolean\n}\n\nexport const kicadSymbolPinNumbers = z.object({\n hide: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolPinNumbers = z.infer<typeof kicadSymbolPinNumbers>\nexpectTypesMatch<KicadSymbolPinNumbers, InferredKicadSymbolPinNumbers>(true)\n\nexport interface KicadSymbolPinNames {\n offset?: number\n hide?: boolean\n}\n\nexport const kicadSymbolPinNames = z.object({\n offset: distance.optional(),\n hide: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolPinNames = z.infer<typeof kicadSymbolPinNames>\nexpectTypesMatch<KicadSymbolPinNames, InferredKicadSymbolPinNames>(true)\n\nexport interface KicadSymbolEffects {\n font?: KicadFont\n justify?: string | string[]\n hide?: boolean\n}\n\nexport const kicadSymbolEffects = z.object({\n font: kicadFont.optional(),\n justify: z.union([z.string(), z.array(z.string())]).optional(),\n hide: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolEffects = z.infer<typeof kicadSymbolEffects>\nexpectTypesMatch<KicadSymbolEffects, InferredKicadSymbolEffects>(true)\n\nexport interface KicadSymbolProperty {\n value: string\n id?: number | string\n at?: KicadAt\n effects?: KicadSymbolEffects\n}\n\nexport const kicadSymbolProperty = z.object({\n value: z.string(),\n id: z.union([z.number(), z.string()]).optional(),\n at: kicadAt.optional(),\n effects: kicadSymbolEffects.optional(),\n})\n\ntype InferredKicadSymbolProperty = z.infer<typeof kicadSymbolProperty>\nexpectTypesMatch<KicadSymbolProperty, InferredKicadSymbolProperty>(true)\n\nexport interface KicadSymbolProperties {\n Reference?: KicadSymbolProperty\n Value?: KicadSymbolProperty\n Footprint?: KicadSymbolProperty\n Datasheet?: KicadSymbolProperty\n Description?: KicadSymbolProperty\n ki_keywords?: KicadSymbolProperty\n ki_fp_filters?: KicadSymbolProperty\n}\n\nexport const kicadSymbolProperties = z.object({\n Reference: kicadSymbolProperty.optional(),\n Value: kicadSymbolProperty.optional(),\n Footprint: kicadSymbolProperty.optional(),\n Datasheet: kicadSymbolProperty.optional(),\n Description: kicadSymbolProperty.optional(),\n ki_keywords: kicadSymbolProperty.optional(),\n ki_fp_filters: kicadSymbolProperty.optional(),\n})\n\ntype InferredKicadSymbolProperties = z.infer<typeof kicadSymbolProperties>\nexpectTypesMatch<KicadSymbolProperties, InferredKicadSymbolProperties>(true)\n\nexport interface KicadSymbolMetadata {\n symbolName?: string\n extends?: string\n pinNumbers?: KicadSymbolPinNumbers\n pinNames?: KicadSymbolPinNames\n excludeFromSim?: boolean\n inBom?: boolean\n onBoard?: boolean\n properties?: KicadSymbolProperties\n embeddedFonts?: boolean\n}\n\nexport const kicadSymbolMetadata = z.object({\n symbolName: z.string().optional(),\n extends: z.string().optional(),\n pinNumbers: kicadSymbolPinNumbers.optional(),\n pinNames: kicadSymbolPinNames.optional(),\n excludeFromSim: z.boolean().optional(),\n inBom: z.boolean().optional(),\n onBoard: z.boolean().optional(),\n properties: kicadSymbolProperties.optional(),\n embeddedFonts: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolMetadata = z.infer<typeof kicadSymbolMetadata>\nexpectTypesMatch<KicadSymbolMetadata, InferredKicadSymbolMetadata>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const base_circuit_json_error = z.object({\n error_type: z.string(),\n message: z.string(),\n is_fatal: z.boolean().optional(),\n})\n\nexport type BaseCircuitJsonErrorInput = z.input<typeof base_circuit_json_error>\ntype InferredBaseCircuitJsonError = z.infer<typeof base_circuit_json_error>\n\nexport interface BaseCircuitJsonError {\n error_type: string\n message: string\n is_fatal?: boolean\n}\n\nexpectTypesMatch<BaseCircuitJsonError, InferredBaseCircuitJsonError>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { capacitance, distance, voltage } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_capacitor = source_component_base.extend({\n ftype: z.literal(\"simple_capacitor\"),\n capacitance,\n max_voltage_rating: voltage.optional(),\n display_capacitance: z.string().optional(),\n max_decoupling_trace_length: distance.optional(),\n})\n\nexport type SourceSimpleCapacitorInput = z.input<typeof source_simple_capacitor>\ntype InferredSourceSimpleCapacitor = z.infer<typeof source_simple_capacitor>\n\n/**\n * Defines a simple capacitor component\n */\nexport interface SourceSimpleCapacitor extends SourceComponentBase {\n ftype: \"simple_capacitor\"\n capacitance: number\n max_voltage_rating?: number\n display_capacitance?: string\n max_decoupling_trace_length?: number\n}\n\nexpectTypesMatch<SourceSimpleCapacitor, InferredSourceSimpleCapacitor>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const supplier_name = z.enum([\n \"jlcpcb\",\n \"macrofab\",\n \"pcbway\",\n \"digikey\",\n \"mouser\",\n \"lcsc\",\n])\n\ntype InferredSupplierName = z.infer<typeof supplier_name>\n\nexport type SupplierName =\n | \"jlcpcb\"\n | \"macrofab\"\n | \"pcbway\"\n | \"digikey\"\n | \"mouser\"\n | \"lcsc\"\n\nexpectTypesMatch<SupplierName, InferredSupplierName>(true)\n","import {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface SourceComponentBase {\n type: \"source_component\"\n ftype?: string\n source_component_id: string\n name: string\n manufacturer_part_number?: string\n supplier_part_numbers?: Partial<Record<SupplierName, string[]>>\n display_value?: string\n display_name?: string\n are_pins_interchangeable?: boolean\n internally_connected_source_port_ids?: string[][]\n source_group_id?: string\n subcircuit_id?: string\n}\n\nexport const source_component_base = z.object({\n type: z.literal(\"source_component\"),\n ftype: z.string().optional(),\n source_component_id: z.string(),\n name: z.string(),\n manufacturer_part_number: z.string().optional(),\n supplier_part_numbers: z\n .record(supplier_name, z.array(z.string()))\n .optional(),\n display_value: z.string().optional(),\n display_name: z.string().optional(),\n are_pins_interchangeable: z.boolean().optional(),\n internally_connected_source_port_ids: z.array(z.array(z.string())).optional(),\n source_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\ntype InferredSourceComponentBase = z.infer<typeof source_component_base>\n\nexpectTypesMatch<SourceComponentBase, InferredSourceComponentBase>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_resistor = source_component_base.extend({\n ftype: z.literal(\"simple_resistor\"),\n resistance,\n display_resistance: z.string().optional(),\n})\n\nexport type SourceSimpleResistorInput = z.input<typeof source_simple_resistor>\ntype InferredSourceSimpleResistor = z.infer<typeof source_simple_resistor>\n\n/**\n * Defines a simple resistor component\n */\nexport interface SourceSimpleResistor extends SourceComponentBase {\n ftype: \"simple_resistor\"\n resistance: number\n display_resistance?: string\n}\n\nexpectTypesMatch<SourceSimpleResistor, InferredSourceSimpleResistor>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_diode = source_component_base.extend({\n ftype: z.literal(\"simple_diode\"),\n})\n\nexport type SourceSimpleDiodeInput = z.input<typeof source_simple_diode>\ntype InferredSourceSimpleDiode = z.infer<typeof source_simple_diode>\n\n/**\n * Defines a simple diode component\n */\nexport interface SourceSimpleDiode extends SourceComponentBase {\n ftype: \"simple_diode\"\n}\n\nexpectTypesMatch<SourceSimpleDiode, InferredSourceSimpleDiode>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_fiducial = source_component_base.extend({\n ftype: z.literal(\"simple_fiducial\"),\n})\n\nexport type SourceSimpleFiducialInput = z.input<typeof source_simple_fiducial>\ntype InferredSourceSimpleFiducial = z.infer<typeof source_simple_fiducial>\n\n/**\n * Defines a simple fiducial component\n */\nexport interface SourceSimpleFiducial extends SourceComponentBase {\n ftype: \"simple_fiducial\"\n}\n\nexpectTypesMatch<SourceSimpleFiducial, InferredSourceSimpleFiducial>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n source_simple_diode,\n type SourceSimpleDiode,\n} from \"./source_simple_diode\"\n\nexport const source_simple_led = source_simple_diode.extend({\n ftype: z.literal(\"simple_led\"),\n color: z.string().optional(),\n wavelength: z.string().optional(),\n})\n\nexport type SourceSimpleLedInput = z.input<typeof source_simple_led>\ntype InferredSourceSimpleLed = z.infer<typeof source_simple_led>\n\n/**\n * Defines a simple led component\n */\nexport interface SourceSimpleLed extends Omit<SourceSimpleDiode, \"ftype\"> {\n ftype: \"simple_led\"\n color?: string\n wavelength?: string\n}\n\nexpectTypesMatch<SourceSimpleLed, InferredSourceSimpleLed>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_ground = source_component_base.extend({\n ftype: z.literal(\"simple_ground\"),\n})\n\nexport type SourceSimpleGroundInput = z.input<typeof source_simple_ground>\ntype InferredSourceSimpleGround = z.infer<typeof source_simple_ground>\n\n/**\n * Defines a simple ground component\n */\nexport interface SourceSimpleGround extends SourceComponentBase {\n ftype: \"simple_ground\"\n}\n\nexpectTypesMatch<SourceSimpleGround, InferredSourceSimpleGround>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_chip = source_component_base.extend({\n ftype: z.literal(\"simple_chip\"),\n})\n\nexport type SourceSimpleChipInput = z.input<typeof source_simple_chip>\ntype InferredSourceSimpleChip = z.infer<typeof source_simple_chip>\n\n/**\n * Defines a simple integrated circuit component\n */\nexport interface SourceSimpleChip extends SourceComponentBase {\n ftype: \"simple_chip\"\n}\n\nexpectTypesMatch<SourceSimpleChip, InferredSourceSimpleChip>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_printed_part = source_component_base.extend({\n ftype: z.literal(\"printedpart\"),\n})\n\nexport type SourcePrintedPartInput = z.input<typeof source_printed_part>\ntype InferredSourcePrintedPart = z.infer<typeof source_printed_part>\n\n/** Defines a 3D-printed part in an assembly. */\nexport interface SourcePrintedPart extends SourceComponentBase {\n ftype: \"printedpart\"\n}\n\nexpectTypesMatch<SourcePrintedPart, InferredSourcePrintedPart>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_subassembly = source_component_base.extend({\n ftype: z.literal(\"subassembly\"),\n})\n\nexport type SourceSubassemblyInput = z.input<typeof source_subassembly>\ntype InferredSourceSubassembly = z.infer<typeof source_subassembly>\n\n/** Defines a subassembly component. */\nexport interface SourceSubassembly extends SourceComponentBase {\n ftype: \"subassembly\"\n}\n\nexpectTypesMatch<SourceSubassembly, InferredSourceSubassembly>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_motor = source_component_base.extend({\n ftype: z.literal(\"motor\"),\n})\n\nexport type SourceMotorInput = z.input<typeof source_motor>\ntype InferredSourceMotor = z.infer<typeof source_motor>\n\n/** Defines a motor component. */\nexport interface SourceMotor extends SourceComponentBase {\n ftype: \"motor\"\n}\n\nexpectTypesMatch<SourceMotor, InferredSourceMotor>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { voltage } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_power_source = source_component_base.extend({\n ftype: z.literal(\"simple_power_source\"),\n voltage,\n})\n\nexport type SourceSimplePowerSourceInput = z.input<\n typeof source_simple_power_source\n>\ntype InferredSourceSimplePowerSource = z.infer<\n typeof source_simple_power_source\n>\n\n/**\n * Defines a simple power source component\n */\nexport interface SourceSimplePowerSource extends SourceComponentBase {\n ftype: \"simple_power_source\"\n voltage: number\n}\n\nexpectTypesMatch<SourceSimplePowerSource, InferredSourceSimplePowerSource>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { current, frequency } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_current_source = source_component_base.extend({\n ftype: z.literal(\"simple_current_source\"),\n current,\n frequency: frequency.optional(),\n peak_to_peak_current: current.optional(),\n wave_shape: z\n .enum([\"sine\", \"square\", \"triangle\", \"sawtooth\", \"dc\"])\n .optional()\n .default(\"dc\"),\n phase: z.number().optional(),\n duty_cycle: z.number().min(0).max(1).optional(),\n})\n\nexport type SourceSimpleCurrentSourceInput = z.input<\n typeof source_simple_current_source\n>\ntype InferredSourceSimpleCurrentSource = z.infer<\n typeof source_simple_current_source\n>\n\n/**\n * Defines a simple current source component\n */\nexport interface SourceSimpleCurrentSource extends SourceComponentBase {\n ftype: \"simple_current_source\"\n current: number\n frequency?: number\n peak_to_peak_current?: number\n wave_shape: \"sine\" | \"square\" | \"triangle\" | \"sawtooth\" | \"dc\"\n phase?: number\n duty_cycle?: number\n}\n\nexpectTypesMatch<SourceSimpleCurrentSource, InferredSourceSimpleCurrentSource>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"./base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_fuse = source_component_base.extend({\n ftype: z.literal(\"simple_fuse\"),\n\n current_rating_amps: z\n .number()\n .describe(\"Nominal current in amps the fuse is rated for\"),\n\n voltage_rating_volts: z\n .number()\n .describe(\"Voltage rating in volts, e.g. ±5V would be 5\"),\n})\n\nexport interface SourceSimpleFuse extends SourceComponentBase {\n ftype: \"simple_fuse\"\n current_rating_amps: number\n voltage_rating_volts: number\n}\n\nexport type SourceSimpleFuseInput = z.input<typeof source_simple_fuse>\ntype InferredSourceSimpleFuse = z.infer<typeof source_simple_fuse>\n\nexpectTypesMatch<SourceSimpleFuse, InferredSourceSimpleFuse>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_ammeter = source_component_base.extend({\n ftype: z.literal(\"simple_ammeter\"),\n})\n\nexport type SourceSimpleAmmeterInput = z.input<typeof source_simple_ammeter>\ntype InferredSourceSimpleAmmeter = z.infer<typeof source_simple_ammeter>\n\n/**\n * Defines a simple ammeter component for simulation and measurement\n */\nexport interface SourceSimpleAmmeter extends SourceComponentBase {\n ftype: \"simple_ammeter\"\n}\n\nexpectTypesMatch<SourceSimpleAmmeter, InferredSourceSimpleAmmeter>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { voltage } from \"src/units\"\n\n// Require a complete scalar before the shared unit parser can normalize it.\n// Ranges and prose cannot be represented by the scalar voltage fields.\nconst pin_voltage: z.ZodType<number, z.ZodTypeDef, number | string> = z\n .union([\n z.number(),\n z\n .string()\n .trim()\n .regex(\n /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?\\s*(?:[fpnumkKMGTµμ]?V?|V)?$/,\n \"Expected a scalar voltage, optionally with SI units\",\n ),\n ])\n .pipe(voltage)\n .pipe(z.number().finite())\n\nexport const source_pin_attributes = z.object({\n is_input: z.boolean().optional(),\n is_output: z.boolean().optional(),\n is_bidirectional: z.boolean().optional(),\n is_passive: z.boolean().optional(),\n can_use_tri_state: z.boolean().optional(),\n is_using_tri_state: z.boolean().optional(),\n can_use_open_collector: z.boolean().optional(),\n is_using_open_collector: z.boolean().optional(),\n can_use_open_emitter: z.boolean().optional(),\n is_using_open_emitter: z.boolean().optional(),\n is_gpio: z.boolean().optional(),\n highlight_color: z.string().optional(),\n must_be_connected: z.boolean().optional(),\n provides_power: z.boolean().optional(),\n requires_power: z.boolean().optional(),\n provides_ground: z.boolean().optional(),\n requires_ground: z.boolean().optional(),\n provides_voltage: pin_voltage.optional(),\n requires_voltage: pin_voltage.optional(),\n required_voltage_tolerance: z.number().finite().min(0).max(1).optional(),\n do_not_connect: z.boolean().optional(),\n include_in_board_pinout: z.boolean().optional(),\n can_use_internal_pullup: z.boolean().optional(),\n is_using_internal_pullup: z.boolean().optional(),\n needs_external_pullup: z.boolean().optional(),\n can_use_internal_pulldown: z.boolean().optional(),\n is_using_internal_pulldown: z.boolean().optional(),\n needs_external_pulldown: z.boolean().optional(),\n can_use_open_drain: z.boolean().optional(),\n is_using_open_drain: z.boolean().optional(),\n can_use_push_pull: z.boolean().optional(),\n is_using_push_pull: z.boolean().optional(),\n should_have_decoupling_capacitor: z.boolean().optional(),\n recommended_decoupling_capacitor_capacitance: z\n .union([z.string(), z.number()])\n .optional(),\n is_configured_for_i2c_sda: z.boolean().optional(),\n is_configured_for_i2c_scl: z.boolean().optional(),\n is_configured_for_spi_mosi: z.boolean().optional(),\n is_configured_for_spi_miso: z.boolean().optional(),\n is_configured_for_spi_sck: z.boolean().optional(),\n is_configured_for_spi_cs: z.boolean().optional(),\n is_configured_for_uart_tx: z.boolean().optional(),\n is_configured_for_uart_rx: z.boolean().optional(),\n supports_i2c_sda: z.boolean().optional(),\n supports_i2c_scl: z.boolean().optional(),\n supports_spi_mosi: z.boolean().optional(),\n supports_spi_miso: z.boolean().optional(),\n supports_spi_sck: z.boolean().optional(),\n supports_spi_cs: z.boolean().optional(),\n supports_uart_tx: z.boolean().optional(),\n supports_uart_rx: z.boolean().optional(),\n})\n\ntype InferredSourcePinAttributes = z.infer<typeof source_pin_attributes>\nexport type SourcePinAttributesInput = z.input<typeof source_pin_attributes>\n\nexport interface SourcePinAttributes {\n is_input?: boolean\n is_output?: boolean\n is_bidirectional?: boolean\n is_passive?: boolean\n can_use_tri_state?: boolean\n is_using_tri_state?: boolean\n can_use_open_collector?: boolean\n is_using_open_collector?: boolean\n can_use_open_emitter?: boolean\n is_using_open_emitter?: boolean\n is_gpio?: boolean\n highlight_color?: string\n must_be_connected?: boolean\n provides_power?: boolean\n requires_power?: boolean\n provides_ground?: boolean\n requires_ground?: boolean\n provides_voltage?: number\n requires_voltage?: number\n /** Allowed relative deviation from requires_voltage, e.g. 0.05 for ±5%. */\n required_voltage_tolerance?: number\n do_not_connect?: boolean\n include_in_board_pinout?: boolean\n can_use_internal_pullup?: boolean\n is_using_internal_pullup?: boolean\n needs_external_pullup?: boolean\n can_use_internal_pulldown?: boolean\n is_using_internal_pulldown?: boolean\n needs_external_pulldown?: boolean\n can_use_open_drain?: boolean\n is_using_open_drain?: boolean\n can_use_push_pull?: boolean\n is_using_push_pull?: boolean\n should_have_decoupling_capacitor?: boolean\n recommended_decoupling_capacitor_capacitance?: string | number\n is_configured_for_i2c_sda?: boolean\n is_configured_for_i2c_scl?: boolean\n is_configured_for_spi_mosi?: boolean\n is_configured_for_spi_miso?: boolean\n is_configured_for_spi_sck?: boolean\n is_configured_for_spi_cs?: boolean\n is_configured_for_uart_tx?: boolean\n is_configured_for_uart_rx?: boolean\n supports_i2c_sda?: boolean\n supports_i2c_scl?: boolean\n supports_spi_mosi?: boolean\n supports_spi_miso?: boolean\n supports_spi_sck?: boolean\n supports_spi_cs?: boolean\n supports_uart_tx?: boolean\n supports_uart_rx?: boolean\n}\n\nexpectTypesMatch<SourcePinAttributes, InferredSourcePinAttributes>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n source_simple_resistor,\n type SourceSimpleResistor,\n} from \"./source_simple_resistor\"\nimport {\n source_simple_capacitor,\n type SourceSimpleCapacitor,\n} from \"./source_simple_capacitor\"\nimport { source_simple_fuse, type SourceSimpleFuse } from \"./source_simple_fuse\"\nimport {\n source_simple_diode,\n type SourceSimpleDiode,\n} from \"./source_simple_diode\"\nimport {\n source_simple_fiducial,\n type SourceSimpleFiducial,\n} from \"./source_simple_fiducial\"\nimport { source_simple_led, type SourceSimpleLed } from \"./source_simple_led\"\nimport {\n source_simple_ground,\n type SourceSimpleGround,\n} from \"./source_simple_ground\"\nimport { source_simple_chip, type SourceSimpleChip } from \"./source_simple_chip\"\nimport {\n source_printed_part,\n type SourcePrintedPart,\n} from \"./source_printed_part\"\nimport {\n source_subassembly,\n type SourceSubassembly,\n} from \"./source_subassembly\"\nimport { source_motor, type SourceMotor } from \"./source_motor\"\nimport {\n source_simple_power_source,\n type SourceSimplePowerSource,\n} from \"./source_simple_power_source\"\nimport {\n source_simple_current_source,\n type SourceSimpleCurrentSource,\n} from \"./source_simple_current_source\"\nimport {\n source_simple_ammeter,\n type SourceSimpleAmmeter,\n} from \"./source_simple_ammeter\"\nimport {\n source_simple_battery,\n type SourceSimpleBattery,\n} from \"./source_simple_battery\"\nimport {\n source_simple_inductor,\n type SourceSimpleInductor,\n} from \"./source_simple_inductor\"\nimport {\n source_simple_push_button,\n type SourceSimplePushButton,\n} from \"./source_simple_push_button\"\nimport {\n source_simple_potentiometer,\n type SourceSimplePotentiometer,\n} from \"./source_simple_potentiometer\"\nimport {\n source_simple_crystal,\n type SourceSimpleCrystal,\n} from \"./source_simple_crystal\"\nimport {\n source_simple_pin_header,\n type SourceSimplePinHeader,\n} from \"./source_simple_pin_header\"\nimport {\n source_simple_connector,\n type SourceSimpleConnector,\n} from \"./source_simple_connector\"\nimport {\n source_simple_pinout,\n type SourceSimplePinout,\n} from \"./source_simple_pinout\"\nimport {\n source_simple_resonator,\n type SourceSimpleResonator,\n} from \"./source_simple_resonator\"\nimport {\n source_simple_transistor,\n type SourceSimpleTransistor,\n} from \"./source_simple_transistor\"\nimport {\n source_simple_test_point,\n type SourceSimpleTestPoint,\n} from \"./source_simple_test_point\"\nimport {\n source_simple_mosfet,\n type SourceSimpleMosfet,\n} from \"./source_simple_mosfet\"\nimport {\n source_simple_op_amp,\n type SourceSimpleOpAmp,\n} from \"./source_simple_op_amp\"\nimport {\n source_simple_switch,\n type SourceSimpleSwitch,\n} from \"./source_simple_switch\"\nimport {\n source_project_metadata,\n type SourceProjectMetadata,\n} from \"./source_project_metadata\"\nimport {\n source_missing_property_error,\n type SourceMissingPropertyError,\n} from \"./source_missing_property_error\"\nimport {\n source_failed_to_create_component_error,\n type SourceFailedToCreateComponentError,\n} from \"./source_failed_to_create_component_error\"\nimport {\n source_invalid_component_property_error,\n type SourceInvalidComponentPropertyError,\n} from \"./source_invalid_component_property_error\"\nimport {\n source_trace_not_connected_error,\n type SourceTraceNotConnectedError,\n} from \"./source_trace_not_connected_error\"\nimport {\n source_property_ignored_warning,\n type SourcePropertyIgnoredWarning,\n} from \"./source_property_ignored_warning\"\nimport {\n source_pin_missing_trace_warning,\n type SourcePinMissingTraceWarning,\n} from \"./source_pin_missing_trace_warning\"\nimport {\n source_missing_manufacturer_part_number_warning,\n type SourceMissingManufacturerPartNumberWarning,\n} from \"./source_missing_manufacturer_part_number_warning\"\nimport {\n source_refdes_convention_warning,\n type SourceRefdesConventionWarning,\n} from \"./source_refdes_convention_warning\"\nimport {\n source_component_availability_warning,\n type SourceComponentAvailabilityWarning,\n} from \"./source_component_availability_warning\"\nimport {\n source_simple_voltage_probe,\n type SourceSimpleVoltageProbe,\n} from \"./source_simple_voltage_probe\"\nimport {\n source_interconnect,\n type SourceInterconnect,\n} from \"./source_interconnect\"\nimport {\n source_i2c_misconfigured_error,\n type SourceI2cMisconfiguredError,\n} from \"./source_i2c_misconfigured_error\"\nimport {\n source_component_misconfigured_error,\n type SourceComponentMisconfiguredError,\n} from \"./source_component_misconfigured_error\"\nimport {\n source_simple_voltage_source,\n type SourceSimpleVoltageSource,\n} from \"./source_simple_voltage_source\"\n\nexport const any_source_component = z.union([\n source_simple_resistor,\n source_simple_capacitor,\n source_simple_diode,\n source_simple_fiducial,\n source_simple_led,\n source_simple_ground,\n source_simple_chip,\n source_printed_part,\n source_subassembly,\n source_motor,\n source_simple_power_source,\n source_simple_current_source,\n source_simple_ammeter,\n source_simple_battery,\n source_simple_inductor,\n source_simple_push_button,\n source_simple_potentiometer,\n source_simple_crystal,\n source_simple_pin_header,\n source_simple_connector,\n source_simple_pinout,\n source_simple_resonator,\n source_simple_switch,\n source_simple_transistor,\n source_simple_test_point,\n source_simple_mosfet,\n source_simple_op_amp,\n source_simple_fuse,\n source_simple_voltage_probe,\n source_interconnect,\n source_simple_voltage_source,\n source_project_metadata,\n source_missing_property_error,\n source_invalid_component_property_error,\n source_failed_to_create_component_error,\n source_trace_not_connected_error,\n source_property_ignored_warning,\n source_pin_missing_trace_warning,\n source_missing_manufacturer_part_number_warning,\n source_refdes_convention_warning,\n source_component_availability_warning,\n source_i2c_misconfigured_error,\n source_component_misconfigured_error,\n])\n\n/**\n * Deprecated: use `AnySourceElement` instead\n */\nexport type AnySourceComponent = z.infer<typeof any_source_component>\n\nexport type AnySourceElement =\n | SourceSimpleResistor\n | SourceSimpleCapacitor\n | SourceSimpleDiode\n | SourceSimpleFiducial\n | SourceSimpleLed\n | SourceSimpleGround\n | SourceSimpleChip\n | SourcePrintedPart\n | SourceSubassembly\n | SourceMotor\n | SourceSimplePowerSource\n | SourceSimpleCurrentSource\n | SourceSimpleAmmeter\n | SourceSimpleBattery\n | SourceSimpleInductor\n | SourceSimplePushButton\n | SourceSimplePotentiometer\n | SourceSimpleCrystal\n | SourceSimplePinHeader\n | SourceSimpleConnector\n | SourceSimplePinout\n | SourceSimpleResonator\n | SourceSimpleSwitch\n | SourceSimpleTransistor\n | SourceSimpleTestPoint\n | SourceSimpleMosfet\n | SourceSimpleFuse\n | SourceSimpleOpAmp\n | SourceSimpleVoltageProbe\n | SourceSimpleVoltageSource\n | SourceInterconnect\n | SourceProjectMetadata\n | SourceMissingPropertyError\n | SourceInvalidComponentPropertyError\n | SourceFailedToCreateComponentError\n | SourceTraceNotConnectedError\n | SourcePropertyIgnoredWarning\n | SourcePinMissingTraceWarning\n | SourceMissingManufacturerPartNumberWarning\n | SourceComponentAvailabilityWarning\n | SourceRefdesConventionWarning\n | SourceI2cMisconfiguredError\n | SourceComponentMisconfiguredError\n\nexpectTypesMatch<AnySourceElement, AnySourceComponent>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { battery_capacity } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_battery = source_component_base.extend({\n ftype: z.literal(\"simple_battery\"),\n capacity: battery_capacity,\n})\n\nexport type SourceSimpleBatteryInput = z.input<typeof source_simple_battery>\ntype InferredSourceSimpleBattery = z.infer<typeof source_simple_battery>\n\n/**\n * Defines a simple battery component\n */\nexport interface SourceSimpleBattery extends SourceComponentBase {\n ftype: \"simple_battery\"\n capacity: number\n}\n\nexpectTypesMatch<SourceSimpleBattery, InferredSourceSimpleBattery>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { inductance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_inductor = source_component_base.extend({\n ftype: z.literal(\"simple_inductor\"),\n inductance,\n display_inductance: z.string().optional(),\n max_current_rating: z.number().optional(),\n})\n\nexport type SourceSimpleInductorInput = z.input<typeof source_simple_inductor>\ntype InferredSourceSimpleInductor = z.infer<typeof source_simple_inductor>\n\n/**\n * Defines a simple inductor component\n */\nexport interface SourceSimpleInductor extends SourceComponentBase {\n ftype: \"simple_inductor\"\n inductance: number\n display_inductance?: string\n max_current_rating?: number\n}\n\nexpectTypesMatch<SourceSimpleInductor, InferredSourceSimpleInductor>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_push_button = source_component_base.extend({\n ftype: z.literal(\"simple_push_button\"),\n})\n\nexport type SourceSimplePushButtonInput = z.input<\n typeof source_simple_push_button\n>\ntype InferredSourceSimplePushButton = z.infer<typeof source_simple_push_button>\n\n/**\n * Defines a simple push button component\n */\nexport interface SourceSimplePushButton extends SourceComponentBase {\n ftype: \"simple_push_button\"\n}\n\nexpectTypesMatch<SourceSimplePushButton, InferredSourceSimplePushButton>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_potentiometer = source_component_base.extend({\n ftype: z.literal(\"simple_potentiometer\"),\n max_resistance: resistance,\n display_max_resistance: z.string().optional(),\n})\n\nexport type SourceSimplePotentiometerInput = z.input<\n typeof source_simple_potentiometer\n>\ntype InferredSourceSimplePotentiometer = z.infer<\n typeof source_simple_potentiometer\n>\n\nexport interface SourceSimplePotentiometer extends SourceComponentBase {\n ftype: \"simple_potentiometer\"\n max_resistance: number\n display_max_resistance?: string\n}\n\nexpectTypesMatch<SourceSimplePotentiometer, InferredSourceSimplePotentiometer>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_crystal = source_component_base.extend({\n ftype: z.literal(\"simple_crystal\"),\n frequency: z.number().describe(\"Frequency in Hz\"),\n load_capacitance: z.number().optional().describe(\"Load capacitance in pF\"),\n pin_variant: z.enum([\"two_pin\", \"four_pin\"]).optional(),\n})\n\nexport type SourceSimpleCrystalInput = z.input<typeof source_simple_crystal>\ntype InferredSourceSimpleCrystal = z.infer<typeof source_simple_crystal>\n\n/**\n * Defines a simple crystal oscillator component\n */\nexport interface SourceSimpleCrystal extends SourceComponentBase {\n ftype: \"simple_crystal\"\n frequency: number\n load_capacitance?: number\n pin_variant?: \"two_pin\" | \"four_pin\"\n}\n\nexpectTypesMatch<SourceSimpleCrystal, InferredSourceSimpleCrystal>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_pin_header = source_component_base.extend({\n ftype: z.literal(\"simple_pin_header\"),\n pin_count: z.number(),\n gender: z.enum([\"male\", \"female\"]).optional().default(\"male\"),\n})\n\nexport type SourceSimplePinHeaderInput = z.input<\n typeof source_simple_pin_header\n>\ntype InferredSourceSimplePinHeader = z.infer<typeof source_simple_pin_header>\n\nexport interface SourceSimplePinHeader extends SourceComponentBase {\n ftype: \"simple_pin_header\"\n pin_count: number\n gender: \"male\" | \"female\"\n}\n\nexpectTypesMatch<SourceSimplePinHeader, InferredSourceSimplePinHeader>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_connector_standards = [\n \"usb_c\",\n \"m2\",\n \"jst_sh\",\n \"jst_gh\",\n \"jst_zh\",\n \"jst_ph\",\n \"jst_xh\",\n \"jst_vh\",\n] as const\n\nexport type SourceSimpleConnectorStandard =\n (typeof source_simple_connector_standards)[number]\n\nexport const source_simple_connector = source_component_base.extend({\n ftype: z.literal(\"simple_connector\"),\n standard: z.enum(source_simple_connector_standards).optional(),\n pin_count: z.number().int().positive().optional(),\n})\n\nexport type SourceSimpleConnectorInput = z.input<typeof source_simple_connector>\ntype InferredSourceSimpleConnector = z.infer<typeof source_simple_connector>\n\n/**\n * Defines a simple connector component\n */\nexport interface SourceSimpleConnector extends SourceComponentBase {\n ftype: \"simple_connector\"\n /** Connector interface or product family, such as usb_c, m2, or jst_ph */\n standard?: SourceSimpleConnectorStandard\n /** Number of electrical circuits in the connector */\n pin_count?: number\n}\n\nexpectTypesMatch<SourceSimpleConnector, InferredSourceSimpleConnector>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_pinout = source_component_base.extend({\n ftype: z.literal(\"simple_pinout\"),\n})\n\nexport type SourceSimplePinoutInput = z.input<typeof source_simple_pinout>\ntype InferredSourceSimplePinout = z.infer<typeof source_simple_pinout>\n\n/**\n * Defines a simple pinout component\n */\nexport interface SourceSimplePinout extends SourceComponentBase {\n ftype: \"simple_pinout\"\n}\n\nexpectTypesMatch<SourceSimplePinout, InferredSourceSimplePinout>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { capacitance, resistance, frequency } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_resonator = source_component_base.extend({\n ftype: z.literal(\"simple_resonator\"),\n load_capacitance: capacitance,\n equivalent_series_resistance: resistance.optional(),\n frequency: frequency,\n})\n\nexport type SourceSimpleResonatorInput = z.input<typeof source_simple_resonator>\ntype InferredSourceSimpleResonator = z.infer<typeof source_simple_resonator>\n\n/**\n * Defines a simple resonator component\n */\nexport interface SourceSimpleResonator extends SourceComponentBase {\n ftype: \"simple_resonator\"\n load_capacitance: number\n equivalent_series_resistance?: number\n frequency: number\n}\n\nexpectTypesMatch<SourceSimpleResonator, InferredSourceSimpleResonator>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_transistor = source_component_base.extend({\n ftype: z.literal(\"simple_transistor\"),\n transistor_type: z.enum([\"npn\", \"pnp\"]),\n})\n\nexport type SourceSimpleTransistorInput = z.input<\n typeof source_simple_transistor\n>\ntype InferredSourceSimpleTransistor = z.infer<typeof source_simple_transistor>\n\n/**\n * Defines a simple transistor component\n * This is a three-pin semiconductor device (emitter, base, collector)\n * Pin configuration is handled by the schematic port system\n */\n\nexport interface SourceSimpleTransistor extends SourceComponentBase {\n ftype: \"simple_transistor\"\n transistor_type: \"npn\" | \"pnp\"\n}\n\nexpectTypesMatch<SourceSimpleTransistor, InferredSourceSimpleTransistor>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_test_point = source_component_base.extend({\n ftype: z.literal(\"simple_test_point\"),\n footprint_variant: z.enum([\"pad\", \"through_hole\"]).optional(),\n pad_shape: z.enum([\"rect\", \"circle\"]).optional(),\n pad_diameter: z.union([z.number(), z.string()]).optional(),\n hole_diameter: z.union([z.number(), z.string()]).optional(),\n width: z.union([z.number(), z.string()]).optional(),\n height: z.union([z.number(), z.string()]).optional(),\n})\n\nexport type SourceSimpleTestPointInput = z.input<\n typeof source_simple_test_point\n>\ntype InferredSourceSimpleTestPoint = z.infer<typeof source_simple_test_point>\n\n/**\n * Defines a simple test point component\n * Can be surface-mount or through-hole.\n * Pad shape and dimensions configurable for different use cases.\n */\nexport interface SourceSimpleTestPoint extends SourceComponentBase {\n ftype: \"simple_test_point\"\n footprint_variant?: \"pad\" | \"through_hole\"\n pad_shape?: \"rect\" | \"circle\"\n pad_diameter?: number | string\n hole_diameter?: number | string\n width?: number | string\n height?: number | string\n}\n\nexpectTypesMatch<SourceSimpleTestPoint, InferredSourceSimpleTestPoint>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_mosfet = source_component_base.extend({\n ftype: z.literal(\"simple_mosfet\"),\n channel_type: z.enum([\"n\", \"p\"]),\n mosfet_mode: z.enum([\"enhancement\", \"depletion\"]),\n})\n\nexport type SourceSimpleMosfetInput = z.input<typeof source_simple_mosfet>\ntype InferredSourceSimpleMosfet = z.infer<typeof source_simple_mosfet>\n\n/**\n * Defines a simple mosfet component\n * This is a three-pin semiconductor device (source, gate, drain)\n * Pin configuration is handled by the schematic port system\n */\n\nexport interface SourceSimpleMosfet extends SourceComponentBase {\n ftype: \"simple_mosfet\"\n channel_type: \"n\" | \"p\"\n mosfet_mode: \"enhancement\" | \"depletion\"\n}\n\nexpectTypesMatch<SourceSimpleMosfet, InferredSourceSimpleMosfet>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_op_amp = source_component_base.extend({\n ftype: z.literal(\"simple_op_amp\"),\n})\n\nexport type SourceSimpleOpAmpInput = z.input<typeof source_simple_op_amp>\ntype InferredSourceSimpleOpAmp = z.infer<typeof source_simple_op_amp>\n\n/**\n * Defines a simple op-amp component\n */\nexport interface SourceSimpleOpAmp extends SourceComponentBase {\n ftype: \"simple_op_amp\"\n}\n\nexpectTypesMatch<SourceSimpleOpAmp, InferredSourceSimpleOpAmp>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_switch = source_component_base.extend({\n ftype: z.literal(\"simple_switch\"),\n})\nexport type SourceSimpleSwitchInput = z.input<typeof source_simple_switch>\ntype InferredSourceSimpleSwitch = z.infer<typeof source_simple_switch>\n\n/**\n * Defines a simple switch component\n */\nexport interface SourceSimpleSwitch extends SourceComponentBase {\n ftype: \"simple_switch\"\n}\n\nexpectTypesMatch<SourceSimpleSwitch, InferredSourceSimpleSwitch>(true)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { timestamp } from \"src/units\"\n\nexport interface SourceProjectMetadata {\n type: \"source_project_metadata\"\n name?: string\n software_used_string?: string\n project_url?: string\n source_filesystem_md5_hash?: string\n created_at?: string // ISO8601 timestamp\n}\n\nexport const source_project_metadata = z.object({\n type: z.literal(\"source_project_metadata\"),\n name: z.string().optional(),\n software_used_string: z.string().optional(),\n project_url: z.string().optional(),\n source_filesystem_md5_hash: z.string().optional(),\n created_at: timestamp.optional(),\n})\n\nexport type InferredProjectMetadata = z.infer<typeof source_project_metadata>\nexpectTypesMatch<SourceProjectMetadata, InferredProjectMetadata>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_missing_property_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_missing_property_error\"),\n source_missing_property_error_id: getZodPrefixedIdWithDefault(\n \"source_missing_property_error\",\n ),\n source_component_id: z.string(),\n property_name: z.string(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"source_missing_property_error\")\n .default(\"source_missing_property_error\"),\n })\n .describe(\"The source code is missing a property\")\n\nexport type SourceMissingPropertyErrorInput = z.input<\n typeof source_missing_property_error\n>\ntype InferredSourceMissingPropertyError = z.infer<\n typeof source_missing_property_error\n>\n\n/**\n * The source code is missing a property\n */\nexport interface SourceMissingPropertyError extends BaseCircuitJsonError {\n type: \"source_missing_property_error\"\n source_missing_property_error_id: string\n source_component_id: string\n property_name: string\n subcircuit_id?: string\n error_type: \"source_missing_property_error\"\n}\n\nexpectTypesMatch<\n SourceMissingPropertyError,\n InferredSourceMissingPropertyError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_failed_to_create_component_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_failed_to_create_component_error\"),\n source_failed_to_create_component_error_id: getZodPrefixedIdWithDefault(\n \"source_failed_to_create_component_error\",\n ),\n error_type: z\n .literal(\"source_failed_to_create_component_error\")\n .default(\"source_failed_to_create_component_error\"),\n component_name: z.string().optional(),\n subcircuit_id: z.string().optional(),\n parent_source_component_id: z.string().optional(),\n pcb_center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n schematic_center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n })\n .describe(\"Error emitted when a component fails to be constructed\")\n\nexport type SourceFailedToCreateComponentErrorInput = z.input<\n typeof source_failed_to_create_component_error\n>\ntype InferredSourceFailedToCreateComponentError = z.infer<\n typeof source_failed_to_create_component_error\n>\n\n/**\n * Error emitted when a component fails to be constructed.\n * Contains details about the failure and prevents the component from being rendered.\n */\nexport interface SourceFailedToCreateComponentError\n extends BaseCircuitJsonError {\n type: \"source_failed_to_create_component_error\"\n source_failed_to_create_component_error_id: string\n error_type: \"source_failed_to_create_component_error\"\n component_name?: string\n subcircuit_id?: string\n parent_source_component_id?: string\n pcb_center?: {\n x?: number\n y?: number\n }\n schematic_center?: {\n x?: number\n y?: number\n }\n}\n\nexpectTypesMatch<\n SourceFailedToCreateComponentError,\n InferredSourceFailedToCreateComponentError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_invalid_component_property_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_invalid_component_property_error\"),\n source_invalid_component_property_error_id: getZodPrefixedIdWithDefault(\n \"source_invalid_component_property_error\",\n ),\n source_component_id: z.string(),\n property_name: z.string(),\n property_value: z.unknown().optional(),\n expected_format: z.string().optional(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"source_invalid_component_property_error\")\n .default(\"source_invalid_component_property_error\"),\n })\n .describe(\"The source component property is invalid\")\n\nexport type SourceInvalidComponentPropertyErrorInput = z.input<\n typeof source_invalid_component_property_error\n>\ntype InferredSourceInvalidComponentPropertyError = z.infer<\n typeof source_invalid_component_property_error\n>\n\n/**\n * The source component property is invalid\n */\nexport interface SourceInvalidComponentPropertyError\n extends BaseCircuitJsonError {\n type: \"source_invalid_component_property_error\"\n source_invalid_component_property_error_id: string\n source_component_id: string\n property_name: string\n property_value?: unknown\n expected_format?: string\n subcircuit_id?: string\n error_type: \"source_invalid_component_property_error\"\n}\n\nexpectTypesMatch<\n SourceInvalidComponentPropertyError,\n InferredSourceInvalidComponentPropertyError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_trace_not_connected_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_trace_not_connected_error\"),\n source_trace_not_connected_error_id: getZodPrefixedIdWithDefault(\n \"source_trace_not_connected_error\",\n ),\n error_type: z\n .literal(\"source_trace_not_connected_error\")\n .default(\"source_trace_not_connected_error\"),\n subcircuit_id: z.string().optional(),\n source_group_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n connected_source_port_ids: z.array(z.string()).optional(),\n selectors_not_found: z.array(z.string()).optional(),\n })\n .describe(\"Occurs when a source trace selector does not match any ports\")\n\nexport type SourceTraceNotConnectedErrorInput = z.input<\n typeof source_trace_not_connected_error\n>\ntype InferredSourceTraceNotConnectedError = z.infer<\n typeof source_trace_not_connected_error\n>\n\n/**\n * Occurs when a source trace selector does not match any ports\n */\nexport interface SourceTraceNotConnectedError extends BaseCircuitJsonError {\n type: \"source_trace_not_connected_error\"\n source_trace_not_connected_error_id: string\n error_type: \"source_trace_not_connected_error\"\n subcircuit_id?: string\n source_group_id?: string\n source_trace_id?: string\n connected_source_port_ids?: string[]\n selectors_not_found?: string[]\n}\n\nexpectTypesMatch<\n SourceTraceNotConnectedError,\n InferredSourceTraceNotConnectedError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_property_ignored_warning = z\n .object({\n type: z.literal(\"source_property_ignored_warning\"),\n source_property_ignored_warning_id: getZodPrefixedIdWithDefault(\n \"source_property_ignored_warning\",\n ),\n source_component_id: z.string(),\n property_name: z.string(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"source_property_ignored_warning\")\n .default(\"source_property_ignored_warning\"),\n message: z.string(),\n })\n .describe(\"The source property was ignored\")\n\nexport type SourcePropertyIgnoredWarningInput = z.input<\n typeof source_property_ignored_warning\n>\ntype InferredSourcePropertyIgnoredWarning = z.infer<\n typeof source_property_ignored_warning\n>\n\n/**\n * The source property was ignored\n */\nexport interface SourcePropertyIgnoredWarning {\n type: \"source_property_ignored_warning\"\n source_property_ignored_warning_id: string\n source_component_id: string\n property_name: string\n subcircuit_id?: string\n error_type: \"source_property_ignored_warning\"\n message: string\n}\n\nexpectTypesMatch<\n SourcePropertyIgnoredWarning,\n InferredSourcePropertyIgnoredWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_pin_missing_trace_warning = z\n .object({\n type: z.literal(\"source_pin_missing_trace_warning\"),\n source_pin_missing_trace_warning_id: getZodPrefixedIdWithDefault(\n \"source_pin_missing_trace_warning\",\n ),\n warning_type: z\n .literal(\"source_pin_missing_trace_warning\")\n .default(\"source_pin_missing_trace_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a source component pin is missing a trace connection\",\n )\n\nexport type SourcePinMissingTraceWarningInput = z.input<\n typeof source_pin_missing_trace_warning\n>\ntype InferredSourcePinMissingTraceWarning = z.infer<\n typeof source_pin_missing_trace_warning\n>\n\n/**\n * Warning emitted when a source component pin is missing a trace connection\n */\nexport interface SourcePinMissingTraceWarning {\n type: \"source_pin_missing_trace_warning\"\n source_pin_missing_trace_warning_id: string\n warning_type: \"source_pin_missing_trace_warning\"\n message: string\n source_component_id: string\n source_port_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourcePinMissingTraceWarning,\n InferredSourcePinMissingTraceWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_missing_manufacturer_part_number_warning = z\n .object({\n type: z.literal(\"source_missing_manufacturer_part_number_warning\"),\n source_missing_manufacturer_part_number_warning_id:\n getZodPrefixedIdWithDefault(\n \"source_missing_manufacturer_part_number_warning\",\n ),\n warning_type: z\n .literal(\"source_missing_manufacturer_part_number_warning\")\n .default(\"source_missing_manufacturer_part_number_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n standard: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a source component is missing its manufacturer part number\",\n )\n\nexport type SourceMissingManufacturerPartNumberWarningInput = z.input<\n typeof source_missing_manufacturer_part_number_warning\n>\ntype InferredSourceMissingManufacturerPartNumberWarning = z.infer<\n typeof source_missing_manufacturer_part_number_warning\n>\n\n/**\n * Warning emitted when a source component is missing its manufacturer part number\n */\nexport interface SourceMissingManufacturerPartNumberWarning {\n type: \"source_missing_manufacturer_part_number_warning\"\n source_missing_manufacturer_part_number_warning_id: string\n warning_type: \"source_missing_manufacturer_part_number_warning\"\n message: string\n source_component_id: string\n standard?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceMissingManufacturerPartNumberWarning,\n InferredSourceMissingManufacturerPartNumberWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common/getZodPrefixedIdWithDefault\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_refdes_convention_warning = z\n .object({\n type: z.literal(\"source_refdes_convention_warning\"),\n source_refdes_convention_warning_id: getZodPrefixedIdWithDefault(\n \"source_refdes_convention_warning\",\n ),\n warning_type: z\n .literal(\"source_refdes_convention_warning\")\n .default(\"source_refdes_convention_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n refdes: z.string(),\n source_component_ftype: z.string(),\n expected_prefixes: z.array(z.string()),\n actual_prefix: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a source component reference designator does not match the component type convention\",\n )\n\nexport type SourceRefdesConventionWarningInput = z.input<\n typeof source_refdes_convention_warning\n>\ntype InferredSourceRefdesConventionWarning = z.infer<\n typeof source_refdes_convention_warning\n>\n\n/**\n * Warning emitted when a source component reference designator does not match the component type convention\n */\nexport interface SourceRefdesConventionWarning {\n type: \"source_refdes_convention_warning\"\n source_refdes_convention_warning_id: string\n warning_type: \"source_refdes_convention_warning\"\n message: string\n source_component_id: string\n refdes: string\n source_component_ftype: string\n expected_prefixes: string[]\n actual_prefix?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceRefdesConventionWarning,\n InferredSourceRefdesConventionWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_component_availability_warning = z\n .object({\n type: z.literal(\"source_component_availability_warning\"),\n source_component_availability_warning_id: getZodPrefixedIdWithDefault(\n \"source_component_availability_warning\",\n ),\n warning_type: z\n .literal(\"source_component_availability_warning\")\n .default(\"source_component_availability_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n subcircuit_id: z.string().optional(),\n supplier_name,\n supplier_part_numbers: z.array(z.string()).nonempty(),\n })\n .describe(\n \"Warning emitted when no supplier alternative can be confirmed in stock. Availability may be unknown or change over time.\",\n )\n\nexport type SourceComponentAvailabilityWarningInput = z.input<\n typeof source_component_availability_warning\n>\ntype InferredSourceComponentAvailabilityWarning = z.infer<\n typeof source_component_availability_warning\n>\n\n/** Warning emitted when no supplier alternative can be confirmed in stock. */\nexport interface SourceComponentAvailabilityWarning {\n type: \"source_component_availability_warning\"\n source_component_availability_warning_id: string\n warning_type: \"source_component_availability_warning\"\n message: string\n source_component_id: string\n subcircuit_id?: string\n supplier_name: SupplierName\n supplier_part_numbers: [string, ...string[]]\n}\n\nexpectTypesMatch<\n SourceComponentAvailabilityWarning,\n InferredSourceComponentAvailabilityWarning\n>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_voltage_probe = source_component_base.extend({\n ftype: z.literal(\"simple_voltage_probe\"),\n})\n\nexport type SourceSimpleVoltageProbeInput = z.input<\n typeof source_simple_voltage_probe\n>\ntype InferredSourceSimpleVoltageProbe = z.infer<\n typeof source_simple_voltage_probe\n>\n\n/**\n * Defines a simple voltage probe component for simulation and measurement\n */\nexport interface SourceSimpleVoltageProbe extends SourceComponentBase {\n ftype: \"simple_voltage_probe\"\n}\n\nexpectTypesMatch<SourceSimpleVoltageProbe, InferredSourceSimpleVoltageProbe>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_interconnect = source_component_base.extend({\n ftype: z.literal(\"interconnect\"),\n})\n\nexport type SourceInterconnectInput = z.input<typeof source_interconnect>\ntype InferredSourceInterconnect = z.infer<typeof source_interconnect>\n\n/**\n * Defines a generic interconnect component\n */\nexport interface SourceInterconnect extends SourceComponentBase {\n ftype: \"interconnect\"\n}\n\nexpectTypesMatch<SourceInterconnect, InferredSourceInterconnect>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_i2c_misconfigured_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_i2c_misconfigured_error\"),\n source_i2c_misconfigured_error_id: getZodPrefixedIdWithDefault(\n \"source_i2c_misconfigured_error\",\n ),\n error_type: z\n .literal(\"source_i2c_misconfigured_error\")\n .default(\"source_i2c_misconfigured_error\"),\n source_port_ids: z.array(z.string()),\n })\n .describe(\n \"Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net\",\n )\n\nexport type SourceI2cMisconfiguredErrorInput = z.input<\n typeof source_i2c_misconfigured_error\n>\ntype InferredSourceI2cMisconfiguredError = z.infer<\n typeof source_i2c_misconfigured_error\n>\n\n/**\n * Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net\n */\nexport interface SourceI2cMisconfiguredError extends BaseCircuitJsonError {\n type: \"source_i2c_misconfigured_error\"\n source_i2c_misconfigured_error_id: string\n error_type: \"source_i2c_misconfigured_error\"\n source_port_ids: string[]\n}\n\nexpectTypesMatch<\n SourceI2cMisconfiguredError,\n InferredSourceI2cMisconfiguredError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_component_misconfigured_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_component_misconfigured_error\"),\n source_component_misconfigured_error_id: getZodPrefixedIdWithDefault(\n \"source_component_misconfigured_error\",\n ),\n error_type: z\n .literal(\"source_component_misconfigured_error\")\n .default(\"source_component_misconfigured_error\"),\n source_component_ids: z.array(z.string()),\n source_port_ids: z.array(z.string()).optional(),\n })\n .describe(\n \"Error emitted when one or more source components have an invalid or conflicting configuration\",\n )\n\nexport type SourceComponentMisconfiguredErrorInput = z.input<\n typeof source_component_misconfigured_error\n>\ntype InferredSourceComponentMisconfiguredError = z.infer<\n typeof source_component_misconfigured_error\n>\n\n/**\n * Error emitted when one or more source components have an invalid or conflicting configuration\n */\nexport interface SourceComponentMisconfiguredError\n extends BaseCircuitJsonError {\n type: \"source_component_misconfigured_error\"\n source_component_misconfigured_error_id: string\n error_type: \"source_component_misconfigured_error\"\n source_component_ids: string[]\n source_port_ids?: string[]\n}\n\nexpectTypesMatch<\n SourceComponentMisconfiguredError,\n InferredSourceComponentMisconfiguredError\n>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { voltage, frequency, ms, rotation } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_voltage_source = source_component_base.extend({\n ftype: z.literal(\"simple_voltage_source\"),\n voltage,\n frequency: frequency.optional(),\n peak_to_peak_voltage: voltage.optional(),\n wave_shape: z.enum([\"sinewave\", \"square\", \"triangle\", \"sawtooth\"]).optional(),\n phase: rotation.optional(),\n duty_cycle: z\n .number()\n .optional()\n .describe(\"Duty cycle as a fraction (0 to 1)\"),\n pulse_delay: ms.optional(),\n rise_time: ms.optional(),\n fall_time: ms.optional(),\n pulse_width: ms.optional(),\n period: ms.optional(),\n})\n\nexport type SourceSimpleVoltageSourceInput = z.input<\n typeof source_simple_voltage_source\n>\ntype InferredSourceSimpleVoltageSource = z.infer<\n typeof source_simple_voltage_source\n>\n\n/**\n * Defines a simple voltage source component\n */\nexport interface SourceSimpleVoltageSource extends SourceComponentBase {\n ftype: \"simple_voltage_source\"\n voltage: number\n frequency?: number\n peak_to_peak_voltage?: number\n wave_shape?: \"sinewave\" | \"square\" | \"triangle\" | \"sawtooth\"\n phase?: number\n duty_cycle?: number\n pulse_delay?: number // ms\n rise_time?: number // ms\n fall_time?: number // ms\n pulse_width?: number // ms\n period?: number // ms\n}\n\nexpectTypesMatch<SourceSimpleVoltageSource, InferredSourceSimpleVoltageSource>(\n true,\n)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n source_pin_attributes,\n type SourcePinAttributes,\n} from \"./properties/source_pin_attributes\"\n\nexport const source_port = z\n .object({\n type: z.literal(\"source_port\"),\n pin_number: z.number().optional(),\n port_hints: z.array(z.string()).optional(),\n name: z.string(),\n source_port_id: z.string(),\n source_component_id: z.string().optional(),\n source_group_id: z.string().optional(),\n most_frequently_referenced_by_name: z.string().optional(),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n })\n .merge(source_pin_attributes)\n\nexport type SourcePortInput = z.input<typeof source_port>\ntype InferredSourcePort = z.infer<typeof source_port>\n\n/**\n * Defines a source port that can be connected to other components\n */\nexport interface SourcePort extends SourcePinAttributes {\n type: \"source_port\"\n pin_number?: number\n port_hints?: string[]\n name: string\n source_port_id: string\n source_component_id?: string\n source_group_id?: string\n most_frequently_referenced_by_name?: string\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n}\n\nexpectTypesMatch<SourcePort, InferredSourcePort>(true)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface SourceComponentInternalConnection {\n type: \"source_component_internal_connection\"\n source_component_internal_connection_id: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexport const source_component_internal_connection = z.object({\n type: z.literal(\"source_component_internal_connection\"),\n source_component_internal_connection_id: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n})\n\ntype InferredSourceComponentInternalConnection = z.infer<\n typeof source_component_internal_connection\n>\n\nexpectTypesMatch<\n SourceComponentInternalConnection,\n InferredSourceComponentInternalConnection\n>(true)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface SourceTrace {\n type: \"source_trace\"\n source_trace_id: string\n connected_source_port_ids: string[]\n connected_source_net_ids: string[]\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n max_length?: number\n max_via_count?: number\n name?: string\n display_name?: string\n min_trace_thickness?: number\n}\n\nexport const source_trace = z.object({\n type: z.literal(\"source_trace\"),\n source_trace_id: z.string(),\n connected_source_port_ids: z.array(z.string()),\n connected_source_net_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n max_length: z.number().optional(),\n max_via_count: z.number().int().nonnegative().optional(),\n name: z.string().optional(),\n min_trace_thickness: z.number().optional(),\n display_name: z.string().optional(),\n})\n\ntype InferredSourceTrace = z.infer<typeof source_trace>\n\nexpectTypesMatch<SourceTrace, InferredSourceTrace>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_group = z.object({\n type: z.literal(\"source_group\"),\n source_group_id: z.string(),\n subcircuit_id: z.string().optional(),\n parent_subcircuit_id: z.string().optional(),\n parent_source_group_id: z.string().optional(),\n is_subcircuit: z.boolean().optional(),\n show_as_schematic_box: z.boolean().optional(),\n name: z.string().optional(),\n was_automatically_named: z.boolean().optional(),\n})\n\nexport type SourceGroupInput = z.input<typeof source_group>\ntype InferredSourceGroup = z.infer<typeof source_group>\n\nexport interface SourceGroup {\n type: \"source_group\"\n source_group_id: string\n subcircuit_id?: string\n parent_subcircuit_id?: string\n parent_source_group_id?: string\n is_subcircuit?: boolean\n show_as_schematic_box?: boolean\n name?: string\n was_automatically_named?: boolean\n}\n\nexpectTypesMatch<SourceGroup, InferredSourceGroup>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_net = z.object({\n type: z.literal(\"source_net\"),\n source_net_id: z.string(),\n name: z.string(),\n member_source_group_ids: z.array(z.string()),\n is_power: z.boolean().optional(),\n is_ground: z.boolean().optional(),\n is_digital_signal: z.boolean().optional(),\n is_analog_signal: z.boolean().optional(),\n is_positive_voltage_source: z.boolean().optional(),\n trace_width: z.number().optional(),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n})\n\nexport type SourceNetInput = z.input<typeof source_net>\ntype InferredSourceNet = z.infer<typeof source_net>\n\nexport interface SourceNet {\n type: \"source_net\"\n source_net_id: string\n name: string\n member_source_group_ids: string[]\n is_power?: boolean\n is_ground?: boolean\n is_digital_signal?: boolean\n is_analog_signal?: boolean\n is_positive_voltage_source?: boolean\n trace_width?: number\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n}\n\nexpectTypesMatch<SourceNet, InferredSourceNet>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_board = z\n .object({\n type: z.literal(\"source_board\"),\n source_board_id: z.string(),\n source_group_id: z.string(),\n title: z.string().optional(),\n })\n .describe(\"Defines a board in the source domain\")\n\nexport type SourceBoardInput = z.input<typeof source_board>\ntype InferredSourceBoard = z.infer<typeof source_board>\n\n/**\n * Defines a board in the source domain\n */\nexport interface SourceBoard {\n type: \"source_board\"\n source_board_id: string\n source_group_id: string\n title?: string\n}\n\nexpectTypesMatch<SourceBoard, InferredSourceBoard>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_ambiguous_port_reference = base_circuit_json_error\n .extend({\n type: z.literal(\"source_ambiguous_port_reference\"),\n source_ambiguous_port_reference_id: getZodPrefixedIdWithDefault(\n \"source_ambiguous_port_reference\",\n ),\n error_type: z\n .literal(\"source_ambiguous_port_reference\")\n .default(\"source_ambiguous_port_reference\"),\n source_port_id: z.string().optional(),\n source_component_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a port hint matches multiple non-overlapping pads, making the port reference ambiguous\",\n )\n\nexport type SourceAmbiguousPortReferenceInput = z.input<\n typeof source_ambiguous_port_reference\n>\ntype InferredSourceAmbiguousPortReference = z.infer<\n typeof source_ambiguous_port_reference\n>\n\n/**\n * Error emitted when a port hint matches multiple non-overlapping pads,\n * making the port reference ambiguous (e.g. multiple pads all named \"SH\").\n */\nexport interface SourceAmbiguousPortReference extends BaseCircuitJsonError {\n type: \"source_ambiguous_port_reference\"\n source_ambiguous_port_reference_id: string\n error_type: \"source_ambiguous_port_reference\"\n source_port_id?: string\n source_component_id?: string\n}\n\nexpectTypesMatch<\n SourceAmbiguousPortReference,\n InferredSourceAmbiguousPortReference\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_pcb_ground_plane = z\n .object({\n type: z.literal(\"source_pcb_ground_plane\"),\n source_pcb_ground_plane_id: z.string(),\n source_group_id: z.string(),\n source_net_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a ground plane in the source domain\")\n\nexport type SourcePcbGroundPlaneInput = z.input<typeof source_pcb_ground_plane>\ntype InferredSourcePcbGroundPlane = z.infer<typeof source_pcb_ground_plane>\n\n/**\n * Defines a ground plane in the source domain\n */\nexport interface SourcePcbGroundPlane {\n type: \"source_pcb_ground_plane\"\n source_pcb_ground_plane_id: string\n source_group_id: string\n source_net_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SourcePcbGroundPlane, InferredSourcePcbGroundPlane>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_manually_placed_via = z\n .object({\n type: z.literal(\"source_manually_placed_via\"),\n source_manually_placed_via_id: z.string(),\n source_group_id: z.string(),\n source_net_id: z.string().min(1).optional(),\n subcircuit_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n })\n .describe(\"Defines a via that is manually placed in the source domain\")\n\nexport type SourceManuallyPlacedViaInput = z.input<\n typeof source_manually_placed_via\n>\ntype InferredSourceManuallyPlacedVia = z.infer<\n typeof source_manually_placed_via\n>\n\n/**\n * Defines a via that is manually placed in the source domain\n */\nexport interface SourceManuallyPlacedVia {\n type: \"source_manually_placed_via\"\n source_manually_placed_via_id: string\n source_group_id: string\n source_net_id?: string\n subcircuit_id?: string\n source_trace_id?: string\n}\n\nexpectTypesMatch<SourceManuallyPlacedVia, InferredSourceManuallyPlacedVia>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const all_layers = [\n \"top\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n \"inner7\",\n \"inner8\",\n] as const\n\nexport const layer_string = z.enum(all_layers)\n\nexport const layer_ref = layer_string\n .or(\n z.object({\n name: layer_string,\n }),\n )\n .transform((layer) => {\n if (typeof layer === \"string\") {\n return layer\n }\n return layer.name\n })\n\nexport type LayerRefInput = z.input<typeof layer_ref>\ntype InferredLayerRef = z.output<typeof layer_ref>\nexport type LayerRef = (typeof all_layers)[number]\n\nexpectTypesMatch<LayerRef, InferredLayerRef>(true)\n\nexport const visible_layer = z.enum([\"top\", \"bottom\"])\nexport type VisibleLayerRef = z.infer<typeof visible_layer>\nexport type VisibleLayer = z.infer<typeof visible_layer>\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_unnamed_trace_warning = z\n .object({\n type: z.literal(\"source_unnamed_trace_warning\"),\n source_unnamed_trace_warning_id: getZodPrefixedIdWithDefault(\n \"source_unnamed_trace_warning\",\n ),\n warning_type: z\n .literal(\"source_unnamed_trace_warning\")\n .default(\"source_unnamed_trace_warning\"),\n message: z.string(),\n source_trace_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Warning emitted when a source trace is missing a name\")\n\nexport type SourceUnnamedTraceWarningInput = z.input<\n typeof source_unnamed_trace_warning\n>\ntype InferredSourceUnnamedTraceWarning = z.infer<\n typeof source_unnamed_trace_warning\n>\n\n/**\n * Warning emitted when a source trace is missing a name\n */\nexport interface SourceUnnamedTraceWarning {\n type: \"source_unnamed_trace_warning\"\n source_unnamed_trace_warning_id: string\n warning_type: \"source_unnamed_trace_warning\"\n message: string\n source_trace_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SourceUnnamedTraceWarning, InferredSourceUnnamedTraceWarning>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_no_power_pin_defined_warning = z\n .object({\n type: z.literal(\"source_no_power_pin_defined_warning\"),\n source_no_power_pin_defined_warning_id: getZodPrefixedIdWithDefault(\n \"source_no_power_pin_defined_warning\",\n ),\n warning_type: z\n .literal(\"source_no_power_pin_defined_warning\")\n .default(\"source_no_power_pin_defined_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a chip has no source ports with requires_power=true\",\n )\n\nexport type SourceNoPowerPinDefinedWarningInput = z.input<\n typeof source_no_power_pin_defined_warning\n>\ntype InferredSourceNoPowerPinDefinedWarning = z.infer<\n typeof source_no_power_pin_defined_warning\n>\n\n/**\n * Warning emitted when a chip has no source ports with requires_power=true\n */\nexport interface SourceNoPowerPinDefinedWarning {\n type: \"source_no_power_pin_defined_warning\"\n source_no_power_pin_defined_warning_id: string\n warning_type: \"source_no_power_pin_defined_warning\"\n message: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceNoPowerPinDefinedWarning,\n InferredSourceNoPowerPinDefinedWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_no_ground_pin_defined_warning = z\n .object({\n type: z.literal(\"source_no_ground_pin_defined_warning\"),\n source_no_ground_pin_defined_warning_id: getZodPrefixedIdWithDefault(\n \"source_no_ground_pin_defined_warning\",\n ),\n warning_type: z\n .literal(\"source_no_ground_pin_defined_warning\")\n .default(\"source_no_ground_pin_defined_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a chip has no source ports marked as ground pins\",\n )\n\nexport type SourceNoGroundPinDefinedWarningInput = z.input<\n typeof source_no_ground_pin_defined_warning\n>\ntype InferredSourceNoGroundPinDefinedWarning = z.infer<\n typeof source_no_ground_pin_defined_warning\n>\n\n/**\n * Warning emitted when a chip has no source ports marked as ground pins\n */\nexport interface SourceNoGroundPinDefinedWarning {\n type: \"source_no_ground_pin_defined_warning\"\n source_no_ground_pin_defined_warning_id: string\n warning_type: \"source_no_ground_pin_defined_warning\"\n message: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceNoGroundPinDefinedWarning,\n InferredSourceNoGroundPinDefinedWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_component_pins_underspecified_warning = z\n .object({\n type: z.literal(\"source_component_pins_underspecified_warning\"),\n source_component_pins_underspecified_warning_id:\n getZodPrefixedIdWithDefault(\n \"source_component_pins_underspecified_warning\",\n ),\n warning_type: z\n .literal(\"source_component_pins_underspecified_warning\")\n .default(\"source_component_pins_underspecified_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when all ports on a source component are underspecified\",\n )\n\nexport type SourceComponentPinsUnderspecifiedWarningInput = z.input<\n typeof source_component_pins_underspecified_warning\n>\ntype InferredSourceComponentPinsUnderspecifiedWarning = z.infer<\n typeof source_component_pins_underspecified_warning\n>\n\n/**\n * Warning emitted when all ports on a source component are underspecified\n */\nexport interface SourceComponentPinsUnderspecifiedWarning {\n type: \"source_component_pins_underspecified_warning\"\n source_component_pins_underspecified_warning_id: string\n warning_type: \"source_component_pins_underspecified_warning\"\n message: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceComponentPinsUnderspecifiedWarning,\n InferredSourceComponentPinsUnderspecifiedWarning\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_pin_must_be_connected_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_pin_must_be_connected_error\"),\n source_pin_must_be_connected_error_id: getZodPrefixedIdWithDefault(\n \"source_pin_must_be_connected_error\",\n ),\n error_type: z\n .literal(\"source_pin_must_be_connected_error\")\n .default(\"source_pin_must_be_connected_error\"),\n source_component_id: z.string(),\n source_port_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a pin with mustBeConnected attribute is not connected to any trace\",\n )\n\nexport type SourcePinMustBeConnectedErrorInput = z.input<\n typeof source_pin_must_be_connected_error\n>\ntype InferredSourcePinMustBeConnectedError = z.infer<\n typeof source_pin_must_be_connected_error\n>\n\n/**\n * Error emitted when a pin with mustBeConnected attribute is not connected to any trace\n */\nexport interface SourcePinMustBeConnectedError extends BaseCircuitJsonError {\n type: \"source_pin_must_be_connected_error\"\n source_pin_must_be_connected_error_id: string\n error_type: \"source_pin_must_be_connected_error\"\n source_component_id: string\n source_port_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourcePinMustBeConnectedError,\n InferredSourcePinMustBeConnectedError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const unknown_error_finding_part = base_circuit_json_error\n .extend({\n type: z.literal(\"unknown_error_finding_part\"),\n unknown_error_finding_part_id: getZodPrefixedIdWithDefault(\n \"unknown_error_finding_part\",\n ),\n error_type: z\n .literal(\"unknown_error_finding_part\")\n .default(\"unknown_error_finding_part\"),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when an unexpected error occurs while finding a part\",\n )\n\nexport type UnknownErrorFindingPartInput = z.input<\n typeof unknown_error_finding_part\n>\ntype InferredUnknownErrorFindingPart = z.infer<\n typeof unknown_error_finding_part\n>\n\n/**\n * Error emitted when an unexpected error occurs while finding a part.\n * This includes cases where the API returns HTML instead of JSON,\n * network failures, or other unexpected responses.\n */\nexport interface UnknownErrorFindingPart extends BaseCircuitJsonError {\n type: \"unknown_error_finding_part\"\n unknown_error_finding_part_id: string\n error_type: \"unknown_error_finding_part\"\n source_component_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<UnknownErrorFindingPart, InferredUnknownErrorFindingPart>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_part_not_found_warning = z\n .object({\n type: z.literal(\"source_part_not_found_warning\"),\n source_part_not_found_warning_id: getZodPrefixedIdWithDefault(\n \"source_part_not_found_warning\",\n ),\n warning_type: z\n .literal(\"source_part_not_found_warning\")\n .default(\"source_part_not_found_warning\"),\n message: z.string(),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n supplier_name: supplier_name.optional(),\n manufacturer_part_number: z.string().optional(),\n supplier_part_number: z.string().optional(),\n part_name: z.string().optional(),\n })\n .describe(\"Warning emitted when a requested part can not be found\")\n\nexport type SourcePartNotFoundWarningInput = z.input<\n typeof source_part_not_found_warning\n>\ntype InferredSourcePartNotFoundWarning = z.infer<\n typeof source_part_not_found_warning\n>\n\n/**\n * Warning emitted when a requested part can not be found\n */\nexport interface SourcePartNotFoundWarning {\n type: \"source_part_not_found_warning\"\n source_part_not_found_warning_id: string\n warning_type: \"source_part_not_found_warning\"\n message: string\n source_component_id?: string\n subcircuit_id?: string\n supplier_name?: SupplierName\n manufacturer_part_number?: string\n supplier_part_number?: string\n part_name?: string\n}\n\nexpectTypesMatch<SourcePartNotFoundWarning, InferredSourcePartNotFoundWarning>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_confusing_net_name_warning = z\n .object({\n type: z.literal(\"source_confusing_net_name_warning\"),\n source_confusing_net_name_warning_id: getZodPrefixedIdWithDefault(\n \"source_confusing_net_name_warning\",\n ),\n warning_type: z\n .literal(\"source_confusing_net_name_warning\")\n .default(\"source_confusing_net_name_warning\"),\n message: z.string(),\n source_net_ids: z.array(z.string()).min(2),\n net_name: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when electrically disconnected source nets share a name\",\n )\n\nexport type SourceConfusingNetNameWarningInput = z.input<\n typeof source_confusing_net_name_warning\n>\ntype InferredSourceConfusingNetNameWarning = z.infer<\n typeof source_confusing_net_name_warning\n>\n\n/**\n * Warning emitted when electrically disconnected source nets share a name\n */\nexport interface SourceConfusingNetNameWarning {\n type: \"source_confusing_net_name_warning\"\n source_confusing_net_name_warning_id: string\n warning_type: \"source_confusing_net_name_warning\"\n message: string\n source_net_ids: string[]\n net_name: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceConfusingNetNameWarning,\n InferredSourceConfusingNetNameWarning\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** A routed length in mm, or an offset from the longest endpoint Manhattan distance.\n * Explicit references are resolved source traces; omitted references use the bus\n * members and length_match_source_trace_ids. */\nexport type SourceBusRouteLength =\n | number\n | {\n reference: \"longest_manhattan\"\n source_trace_ids?: string[]\n offset?: number\n }\n\n/** Centerline separation in mm or a multiple of the larger local trace width. */\nexport type SourceBusTraceSpacing = number | { width_multiplier: number }\n\nconst route_length = z.union([\n z.number().nonnegative().finite(),\n z.object({\n reference: z.literal(\"longest_manhattan\"),\n source_trace_ids: z.array(z.string()).min(1).optional(),\n offset: z.number().finite().optional(),\n }),\n])\nconst trace_spacing = z.union([\n z.number().positive().finite(),\n z.object({ width_multiplier: z.number().positive().finite() }),\n])\n\n/** A group of resolved source traces with a maximum routed-length difference. */\nexport interface SourceBus {\n type: \"source_bus\"\n source_bus_id: string\n name?: string\n source_trace_ids: string[]\n /** Maximum difference between the longest and shortest member, in millimeters. */\n max_length_skew?: number\n /** Intended single-ended characteristic impedance, in ohms. */\n target_impedance?: number\n /** Intended differential characteristic impedance, in ohms. */\n target_differential_impedance?: number\n /** Ordered polarity for a resolved point-to-point differential pair. */\n differential_pair?: {\n positive_source_trace_id: string\n negative_source_trace_id: string\n trace_gap?: number\n max_uncoupled_length?: number\n }\n /** Additional traces for length comparison, without changing electrical membership. */\n length_match_source_trace_ids?: string[]\n min_length?: SourceBusRouteLength\n max_length?: SourceBusRouteLength\n target_length?: SourceBusRouteLength\n length_tolerance?: number\n /** Within this bus, excluding declared differential partners. */\n pcb_trace_spacing?: SourceBusTraceSpacing\n /** To all signals outside this bus or pair. */\n pcb_spacing_to_other_signals?: SourceBusTraceSpacing\n target_impedance_min?: number\n target_impedance_max?: number\n target_differential_impedance_min?: number\n target_differential_impedance_max?: number\n subcircuit_id?: string\n}\n\nexport const source_bus = z.object({\n type: z.literal(\"source_bus\"),\n source_bus_id: z.string(),\n name: z.string().optional(),\n source_trace_ids: z.array(z.string()).min(1),\n max_length_skew: z.number().nonnegative().finite().optional(),\n target_impedance: z.number().positive().finite().optional(),\n target_differential_impedance: z.number().positive().finite().optional(),\n differential_pair: z\n .object({\n positive_source_trace_id: z.string(),\n negative_source_trace_id: z.string(),\n trace_gap: z.number().positive().finite().optional(),\n max_uncoupled_length: z.number().nonnegative().finite().optional(),\n })\n .optional(),\n length_match_source_trace_ids: z.array(z.string()).min(1).optional(),\n min_length: route_length.optional(),\n max_length: route_length.optional(),\n target_length: route_length.optional(),\n length_tolerance: z.number().nonnegative().finite().optional(),\n pcb_trace_spacing: trace_spacing.optional(),\n pcb_spacing_to_other_signals: trace_spacing.optional(),\n target_impedance_min: z.number().positive().finite().optional(),\n target_impedance_max: z.number().positive().finite().optional(),\n target_differential_impedance_min: z.number().positive().finite().optional(),\n target_differential_impedance_max: z.number().positive().finite().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SourceBusInput = z.input<typeof source_bus>\nexpectTypesMatch<SourceBus, z.infer<typeof source_bus>>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"../base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\n/** An unexpected runtime failure while generating or validating a circuit. */\nexport const source_runtime_error = base_circuit_json_error\n .pick({ message: true, error_type: true })\n .extend({\n type: z.literal(\"source_runtime_error\"),\n source_runtime_error_id: getZodPrefixedIdWithDefault(\n \"source_runtime_error\",\n ),\n error_type: z\n .literal(\"source_runtime_error\")\n .default(\"source_runtime_error\"),\n phase_name: z.string().optional(),\n })\n .describe(\n \"An unexpected runtime failure while generating or validating a circuit\",\n )\n\nexport type SourceRuntimeErrorInput = z.input<typeof source_runtime_error>\nexport interface SourceRuntimeError\n extends Pick<BaseCircuitJsonError, \"message\" | \"error_type\"> {\n type: \"source_runtime_error\"\n source_runtime_error_id: string\n error_type: \"source_runtime_error\"\n phase_name?: string\n}\nexpectTypesMatch<SourceRuntimeError, z.infer<typeof source_runtime_error>>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicBox {\n type: \"schematic_box\"\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n width: number\n height: number\n is_dashed: boolean\n x: number\n y: number\n subcircuit_id?: string\n}\n\nexport const schematic_box = z\n .object({\n type: z.literal(\"schematic_box\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n width: distance,\n height: distance,\n is_dashed: z.boolean().default(false),\n x: distance,\n y: distance,\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a box on the schematic\")\n\nexport type SchematicBoxInput = z.input<typeof schematic_box>\ntype InferredSchematicBox = z.infer<typeof schematic_box>\n\nexpectTypesMatch<SchematicBox, InferredSchematicBox>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { type Point, point } from \"../common/point\"\nimport { distance } from \"../units\"\n\nexport interface SchematicPath {\n type: \"schematic_path\"\n schematic_path_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n fill_color?: string\n is_filled?: boolean\n is_dashed: boolean\n stroke_width?: number | null\n stroke_color?: string\n dash_length?: number\n dash_gap?: number\n points: Point[]\n subcircuit_id?: string\n}\n\nexport const schematic_path = z.object({\n type: z.literal(\"schematic_path\"),\n schematic_path_id: getZodPrefixedIdWithDefault(\"schematic_path\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n fill_color: z.string().optional(),\n is_filled: z.boolean().optional(),\n is_dashed: z.boolean().default(false),\n stroke_width: distance.nullable().optional(),\n stroke_color: z.string().optional(),\n dash_length: distance.optional(),\n dash_gap: distance.optional(),\n points: z.array(point),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SchematicPathInput = z.input<typeof schematic_path>\ntype InferredSchematicPath = z.infer<typeof schematic_path>\n\nexpectTypesMatch<SchematicPath, InferredSchematicPath>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { size, type Size } from \"../common/size\"\nimport { length } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_pin_styles = z.record(\n z.object({\n left_margin: length.optional(),\n right_margin: length.optional(),\n top_margin: length.optional(),\n bottom_margin: length.optional(),\n }),\n)\n\nexport interface SchematicPortArrangementBySize {\n left_size: number\n right_size: number\n top_size?: number\n bottom_size?: number\n}\n\nexport interface SchematicPortArrangementBySides {\n left_side?: { pins: number[]; direction?: \"top-to-bottom\" | \"bottom-to-top\" }\n right_side?: { pins: number[]; direction?: \"top-to-bottom\" | \"bottom-to-top\" }\n top_side?: { pins: number[]; direction?: \"left-to-right\" | \"right-to-left\" }\n bottom_side?: {\n pins: number[]\n direction?: \"left-to-right\" | \"right-to-left\"\n }\n}\n\nexport type SchematicPortArrangement =\n | SchematicPortArrangementBySize\n | SchematicPortArrangementBySides\n\nexport interface SchematicComponent {\n type: \"schematic_component\"\n size: Size\n center: Point\n source_component_id?: string\n schematic_component_id: string\n schematic_sheet_id?: string\n schematic_symbol_id?: string\n pin_spacing?: number\n pin_styles?: Record<\n string,\n {\n left_margin?: number\n right_margin?: number\n top_margin?: number\n bottom_margin?: number\n }\n >\n box_width?: number\n symbol_name?: string\n port_arrangement?: SchematicPortArrangement\n port_labels?: Record<string, string>\n symbol_display_value?: string\n subcircuit_id?: string\n schematic_group_id?: string\n is_schematic_group?: boolean\n source_group_id?: string\n is_box_with_pins: boolean\n}\n\nexport const schematic_component_port_arrangement_by_size = z.object({\n left_size: z.number(),\n right_size: z.number(),\n top_size: z.number().optional(),\n bottom_size: z.number().optional(),\n})\n\nexpectTypesMatch<\n SchematicPortArrangementBySize,\n z.infer<typeof schematic_component_port_arrangement_by_size>\n>(true)\n\nexport const schematic_component_port_arrangement_by_sides = z.object({\n left_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n right_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n top_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n bottom_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n})\n\nexpectTypesMatch<\n SchematicPortArrangementBySides,\n z.infer<typeof schematic_component_port_arrangement_by_sides>\n>(true)\n\nexport const port_arrangement = z.union([\n schematic_component_port_arrangement_by_size,\n schematic_component_port_arrangement_by_sides,\n])\n\nexport const schematic_component = z.object({\n type: z.literal(\"schematic_component\"),\n size,\n center: point,\n source_component_id: z.string().optional(),\n schematic_component_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n pin_spacing: length.optional(),\n pin_styles: schematic_pin_styles.optional(),\n box_width: length.optional(),\n symbol_name: z.string().optional(),\n port_arrangement: port_arrangement.optional(),\n port_labels: z.record(z.string()).optional(),\n symbol_display_value: z.string().optional(),\n subcircuit_id: z.string().optional(),\n schematic_group_id: z.string().optional(),\n is_schematic_group: z.boolean().optional(),\n source_group_id: z.string().optional(),\n is_box_with_pins: z.boolean().optional().default(true),\n})\n\nexport type SchematicComponentInput = z.input<typeof schematic_component>\ntype InferredSchematicComponent = z.infer<typeof schematic_component>\n\nexpectTypesMatch<SchematicComponent, InferredSchematicComponent>(true)\n","import { kicadSymbolMetadata } from \"src/common/kicadSymbolMetadata\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nconst schematicSymbolMetadata = z\n .object({\n kicad_symbol: kicadSymbolMetadata.optional(),\n })\n .catchall(z.unknown())\n\nexport type SchematicSymbolMetadata = z.infer<typeof schematicSymbolMetadata>\n\nexport interface SchematicSymbol {\n type: \"schematic_symbol\"\n schematic_symbol_id: string\n name?: string\n metadata?: SchematicSymbolMetadata\n}\n\nexport const schematic_symbol = z\n .object({\n type: z.literal(\"schematic_symbol\"),\n schematic_symbol_id: z.string(),\n name: z.string().optional(),\n metadata: schematicSymbolMetadata.optional(),\n })\n .describe(\n \"Defines a named schematic symbol that can be referenced by components.\",\n )\n\nexport type SchematicSymbolInput = z.input<typeof schematic_symbol>\ntype InferredSchematicSymbol = z.infer<typeof schematic_symbol>\n\nexpectTypesMatch<SchematicSymbol, InferredSchematicSymbol>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { distance } from \"../units\"\n\n/** Draws a styled line on the schematic */\nexport interface SchematicLine {\n type: \"schematic_line\"\n schematic_line_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n x1: number\n y1: number\n x2: number\n y2: number\n stroke_width?: number | null\n color: string\n is_dashed: boolean\n dash_length?: number\n dash_gap?: number\n subcircuit_id?: string\n}\n\nexport const schematic_line = z\n .object({\n type: z.literal(\"schematic_line\"),\n schematic_line_id: getZodPrefixedIdWithDefault(\"schematic_line\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_dashed: z.boolean().default(false),\n dash_length: distance.optional(),\n dash_gap: distance.optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled line on the schematic\")\n\nexport type SchematicLineInput = z.input<typeof schematic_line>\ntype InferredSchematicLine = z.infer<typeof schematic_line>\n\nexpectTypesMatch<SchematicLine, InferredSchematicLine>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { distance, rotation } from \"../units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** Draws a styled rectangle on the schematic */\nexport interface SchematicRect {\n type: \"schematic_rect\"\n schematic_rect_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n center: Point\n width: number\n height: number\n rotation: number\n stroke_width?: number | null\n color: string\n is_filled: boolean\n fill_color?: string\n is_dashed: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_rect = z\n .object({\n type: z.literal(\"schematic_rect\"),\n schematic_rect_id: getZodPrefixedIdWithDefault(\"schematic_rect\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n center: point,\n width: distance,\n height: distance,\n rotation: rotation.default(0),\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_filled: z.boolean().default(false),\n fill_color: z.string().optional(),\n is_dashed: z.boolean().default(false),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled rectangle on the schematic\")\n\nexport type SchematicRectInput = z.input<typeof schematic_rect>\ntype InferredSchematicRect = z.infer<typeof schematic_rect>\n\nexpectTypesMatch<SchematicRect, InferredSchematicRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { distance } from \"../units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** Draws a styled circle on the schematic */\nexport interface SchematicCircle {\n type: \"schematic_circle\"\n schematic_circle_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n center: Point\n radius: number\n stroke_width?: number | null\n color: string\n is_filled: boolean\n fill_color?: string\n is_dashed: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_circle = z\n .object({\n type: z.literal(\"schematic_circle\"),\n schematic_circle_id: getZodPrefixedIdWithDefault(\"schematic_circle\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n center: point,\n radius: distance,\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_filled: z.boolean().default(false),\n fill_color: z.string().optional(),\n is_dashed: z.boolean().default(false),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled circle on the schematic\")\n\nexport type SchematicCircleInput = z.input<typeof schematic_circle>\ntype InferredSchematicCircle = z.infer<typeof schematic_circle>\n\nexpectTypesMatch<SchematicCircle, InferredSchematicCircle>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { distance, rotation } from \"../units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** Draws a styled arc on the schematic */\nexport interface SchematicArc {\n type: \"schematic_arc\"\n schematic_arc_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n center: Point\n radius: number\n start_angle_degrees: number\n end_angle_degrees: number\n direction: \"clockwise\" | \"counterclockwise\"\n stroke_width?: number | null\n color: string\n is_dashed: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_arc = z\n .object({\n type: z.literal(\"schematic_arc\"),\n schematic_arc_id: getZodPrefixedIdWithDefault(\"schematic_arc\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n center: point,\n radius: distance,\n start_angle_degrees: rotation,\n end_angle_degrees: rotation,\n direction: z\n .enum([\"clockwise\", \"counterclockwise\"])\n .default(\"counterclockwise\"),\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_dashed: z.boolean().default(false),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled arc on the schematic\")\n\nexport type SchematicArcInput = z.input<typeof schematic_arc>\ntype InferredSchematicArc = z.infer<typeof schematic_arc>\n\nexpectTypesMatch<SchematicArc, InferredSchematicArc>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicTraceEdge {\n from: {\n x: number\n y: number\n }\n to: {\n x: number\n y: number\n }\n is_crossing?: boolean\n from_schematic_port_id?: string\n to_schematic_port_id?: string\n}\n\nexport interface SchematicTrace {\n type: \"schematic_trace\"\n schematic_trace_id: string\n schematic_sheet_id?: string\n source_trace_id?: string\n junctions: {\n x: number\n y: number\n }[]\n edges: SchematicTraceEdge[]\n subcircuit_id?: string\n /** Optional for now, but will be required in a future release */\n subcircuit_connectivity_map_key?: string\n}\n\nexport const schematic_trace = z.object({\n type: z.literal(\"schematic_trace\"),\n schematic_trace_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n junctions: z.array(\n z.object({\n x: z.number(),\n y: z.number(),\n }),\n ),\n edges: z.array(\n z.object({\n from: z.object({\n x: z.number(),\n y: z.number(),\n }),\n to: z.object({\n x: z.number(),\n y: z.number(),\n }),\n is_crossing: z.boolean().optional(),\n from_schematic_port_id: z.string().optional(),\n to_schematic_port_id: z.string().optional(),\n }),\n ),\n subcircuit_id: z.string().optional(),\n // TODO: make required in a future release\n subcircuit_connectivity_map_key: z.string().optional(),\n})\n\nexport type SchematicTraceInput = z.input<typeof schematic_trace>\ntype InferredSchematicTrace = z.infer<typeof schematic_trace>\n\nexpectTypesMatch<SchematicTraceInput, InferredSchematicTrace>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { ninePointAnchor } from \"src/common/NinePointAnchor\"\nimport type { NinePointAnchor } from \"src/common/NinePointAnchor\"\nimport type { FivePointAnchor } from \"src/common/FivePointAnchor\"\nimport { fivePointAnchor } from \"src/common/FivePointAnchor\"\nimport type { SchematicTextPart } from \"./schematic_text_part\"\nimport { schematic_text_part } from \"./schematic_text_part\"\n\nexport interface SchematicText {\n type: \"schematic_text\"\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n schematic_text_id: string\n /**\n * Set when the text annotates a trace rather than a component, as an inline\n * net label does - the net name drawn alongside a point-to-point wire instead\n * of as an anchored `schematic_net_label`. Lets consumers tell such a label\n * apart from free-standing text and resolve the net it belongs to.\n */\n source_trace_id?: string\n text: string\n /**\n * Ordered parts with per-part display options.\n * Consumers that do not support styled text can use `text`.\n */\n text_parts?: SchematicTextPart[]\n /** Display-only superscript suffix, e.g. \"1\" in GND¹ for an inline net label. */\n display_superscript?: string\n font_size: number\n position: {\n x: number\n y: number\n }\n rotation: number\n anchor: NinePointAnchor | FivePointAnchor\n color: string\n subcircuit_id?: string\n}\n\nexport const schematic_text = z.object({\n type: z.literal(\"schematic_text\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n schematic_text_id: z.string(),\n source_trace_id: z.string().optional(),\n text: z.string(),\n text_parts: z.array(schematic_text_part).min(1).optional(),\n display_superscript: z.string().optional(),\n font_size: z.number().default(0.18),\n position: z.object({\n x: distance,\n y: distance,\n }),\n rotation: z.number().default(0),\n anchor: z\n .union([fivePointAnchor.describe(\"legacy\"), ninePointAnchor])\n .default(\"center\"),\n color: z.string().default(\"#000000\"),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SchematicTextInput = z.input<typeof schematic_text>\ntype InferredSchematicText = z.infer<typeof schematic_text>\n\nexpectTypesMatch<SchematicText, InferredSchematicText>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport type FivePointAnchor = \"center\" | \"left\" | \"right\" | \"top\" | \"bottom\"\n\nexport const fivePointAnchor = z.enum([\n \"center\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n])\n\ntype InferredFivePointAnchor = z.infer<typeof fivePointAnchor>\n\nexpectTypesMatch<FivePointAnchor, InferredFivePointAnchor>(true)\n","import { z } from \"zod\"\n\n/** One part of schematic text with its display options. */\nexport interface SchematicTextPart {\n /** The literal text displayed for this part. */\n text: string\n /** Draw a line above this part, typically indicating an active-low signal. */\n is_overlined?: boolean\n}\n\nexport const schematic_text_part = z.object({\n text: z.string(),\n is_overlined: z.boolean().optional(),\n})\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport type { SchematicTextPart } from \"./schematic_text_part\"\nimport { schematic_text_part } from \"./schematic_text_part\"\n\nexport interface SchematicPort {\n type: \"schematic_port\"\n schematic_port_id: string\n source_port_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n center: Point\n facing_direction?: \"up\" | \"down\" | \"left\" | \"right\"\n distance_from_component_edge?: number\n side_of_component?: \"top\" | \"bottom\" | \"left\" | \"right\"\n true_ccw_index?: number\n pin_number?: number\n display_pin_label?: string\n /**\n * Ordered parts of the pin label with per-part styling.\n * For example, `A~{BC}D` is represented as `A`, overlined `BC`, then `D`.\n * Consumers that do not support styled text can use `display_pin_label`.\n */\n display_pin_label_text_parts?: SchematicTextPart[]\n display_pin_label_font_size?: number\n subcircuit_id?: string\n is_connected?: boolean\n is_internal_circuit_port?: boolean\n is_overlapping_internal_circuit_port?: boolean\n has_input_arrow?: boolean\n has_output_arrow?: boolean\n is_drawn_with_inversion_circle?: boolean\n}\n\nexport const schematic_port = z\n .object({\n type: z.literal(\"schematic_port\"),\n schematic_port_id: z.string(),\n source_port_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n center: point,\n facing_direction: z.enum([\"up\", \"down\", \"left\", \"right\"]).optional(),\n distance_from_component_edge: z.number().optional(),\n side_of_component: z.enum([\"top\", \"bottom\", \"left\", \"right\"]).optional(),\n true_ccw_index: z.number().optional(),\n pin_number: z.number().optional(),\n display_pin_label: z.string().optional(),\n display_pin_label_text_parts: z\n .array(schematic_text_part)\n .min(1)\n .optional(),\n display_pin_label_font_size: z.number().positive().finite().optional(),\n subcircuit_id: z.string().optional(),\n is_connected: z.boolean().optional(),\n is_internal_circuit_port: z.boolean().optional(),\n is_overlapping_internal_circuit_port: z.boolean().optional(),\n has_input_arrow: z.boolean().optional(),\n has_output_arrow: z.boolean().optional(),\n is_drawn_with_inversion_circle: z.boolean().optional(),\n })\n .describe(\"Defines a port on a schematic component\")\n\nexport type SchematicPortInput = z.input<typeof schematic_port>\ntype InferredSchematicPort = z.infer<typeof schematic_port>\n\nexpectTypesMatch<SchematicPort, InferredSchematicPort>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\n\nexport interface SchematicNetLabel {\n type: \"schematic_net_label\"\n schematic_net_label_id: string\n schematic_sheet_id?: string\n schematic_trace_id?: string\n source_trace_id?: string\n source_net_id: string\n center: Point\n anchor_position?: Point | undefined\n anchor_side: \"top\" | \"bottom\" | \"left\" | \"right\"\n text: string\n /** Display-only superscript suffix, e.g. \"1\" in GND¹. Does not change net identity. */\n display_superscript?: string\n symbol_name?: string | undefined\n /**\n * When true the net label can be repositioned. When false the label's\n * position is fixed by the element it is attached to.\n */\n is_movable?: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_net_label = z.object({\n type: z.literal(\"schematic_net_label\"),\n schematic_net_label_id: getZodPrefixedIdWithDefault(\"schematic_net_label\"),\n schematic_sheet_id: z.string().optional(),\n schematic_trace_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n source_net_id: z.string(),\n center: point,\n anchor_position: point.optional(),\n anchor_side: z.enum([\"top\", \"bottom\", \"left\", \"right\"]),\n text: z.string(),\n display_superscript: z.string().optional(),\n symbol_name: z.string().optional(),\n is_movable: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SchematicNetLabelInput = z.input<typeof schematic_net_label>\nexport type InferredSchematicNetLabel = z.infer<typeof schematic_net_label>\n\nexpectTypesMatch<SchematicNetLabel, InferredSchematicNetLabel>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicError extends BaseCircuitJsonError {\n type: \"schematic_error\"\n schematic_error_id: string\n error_type: \"schematic_port_not_found\"\n subcircuit_id?: string\n}\n\nexport const schematic_error = base_circuit_json_error\n .extend({\n type: z.literal(\"schematic_error\"),\n schematic_error_id: z.string(),\n // eventually each error type should be broken out into a dir of files\n error_type: z\n .literal(\"schematic_port_not_found\")\n .default(\"schematic_port_not_found\"),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a schematic error on the schematic\")\n\nexport type SchematicErrorInput = z.input<typeof schematic_error>\ntype InferredSchematicError = z.infer<typeof schematic_error>\n\nexpectTypesMatch<SchematicError, InferredSchematicError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_layout_error = base_circuit_json_error\n .extend({\n type: z.literal(\"schematic_layout_error\"),\n schematic_layout_error_id: getZodPrefixedIdWithDefault(\n \"schematic_layout_error\",\n ),\n error_type: z\n .literal(\"schematic_layout_error\")\n .default(\"schematic_layout_error\"),\n source_group_id: z.string(),\n schematic_group_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Error emitted when schematic layout fails for a group\")\n\nexport type SchematicLayoutErrorInput = z.input<typeof schematic_layout_error>\ntype InferredSchematicLayoutError = z.infer<typeof schematic_layout_error>\n\nexport interface SchematicLayoutError extends BaseCircuitJsonError {\n type: \"schematic_layout_error\"\n schematic_layout_error_id: string\n error_type: \"schematic_layout_error\"\n source_group_id: string\n schematic_group_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SchematicLayoutError, InferredSchematicLayoutError>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { size, type Size } from \"../common/size\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_debug_object_base = z.object({\n type: z.literal(\"schematic_debug_object\"),\n label: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport const schematic_debug_rect = schematic_debug_object_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n size: size,\n})\n\nexport const schematic_debug_line = schematic_debug_object_base.extend({\n shape: z.literal(\"line\"),\n start: point,\n end: point,\n})\n\nexport const schematic_debug_point = schematic_debug_object_base.extend({\n shape: z.literal(\"point\"),\n center: point,\n})\n\nexport const schematic_debug_object = z.discriminatedUnion(\"shape\", [\n schematic_debug_rect,\n schematic_debug_line,\n schematic_debug_point,\n])\ntype InferredSchematicDebugObject = z.infer<typeof schematic_debug_object>\n\nexport interface SchematicDebugRect {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"rect\"\n center: Point\n size: Size\n subcircuit_id?: string\n}\n\nexport interface SchematicDebugLine {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"line\"\n start: Point\n end: Point\n subcircuit_id?: string\n}\n\nexport interface SchematicDebugPoint {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"point\"\n center: Point\n subcircuit_id?: string\n}\n\nexport type SchematicDebugObject =\n | SchematicDebugRect\n | SchematicDebugLine\n | SchematicDebugPoint\n\nexpectTypesMatch<SchematicDebugObject, InferredSchematicDebugObject>(true)\nexport type SchematicDebugObjectInput = z.input<typeof schematic_debug_object>\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { voltage } from \"src/units\"\nimport {\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common/NinePointAnchor\"\n\nexport interface SchematicVoltageProbe {\n type: \"schematic_voltage_probe\"\n schematic_voltage_probe_id: string\n schematic_sheet_id?: string\n source_component_id?: string\n name?: string\n position: Point\n schematic_trace_id: string\n voltage?: number\n subcircuit_id?: string\n color?: string\n label_alignment?: NinePointAnchor\n}\n\nexport const schematic_voltage_probe = z\n .object({\n type: z.literal(\"schematic_voltage_probe\"),\n schematic_voltage_probe_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n source_component_id: z.string().optional(),\n name: z.string().optional(),\n position: point,\n schematic_trace_id: z.string(),\n voltage: voltage.optional(),\n subcircuit_id: z.string().optional(),\n color: z.string().optional(),\n label_alignment: ninePointAnchor.optional(),\n })\n .describe(\"Defines a voltage probe measurement point on a schematic trace\")\n\nexport type SchematicVoltageProbeInput = z.input<typeof schematic_voltage_probe>\ntype InferredSchematicVoltageProbe = z.infer<typeof schematic_voltage_probe>\n\nexpectTypesMatch<SchematicVoltageProbe, InferredSchematicVoltageProbe>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_manual_edit_conflict_warning = z\n .object({\n type: z.literal(\"schematic_manual_edit_conflict_warning\"),\n schematic_manual_edit_conflict_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_manual_edit_conflict_warning\",\n ),\n warning_type: z\n .literal(\"schematic_manual_edit_conflict_warning\")\n .default(\"schematic_manual_edit_conflict_warning\"),\n message: z.string(),\n schematic_component_id: z.string(),\n schematic_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n source_component_id: z.string(),\n })\n .describe(\n \"Warning emitted when a component has both manual placement and explicit schX/schY coordinates\",\n )\n\nexport type SchematicManualEditConflictWarningInput = z.input<\n typeof schematic_manual_edit_conflict_warning\n>\ntype InferredSchematicManualEditConflictWarning = z.infer<\n typeof schematic_manual_edit_conflict_warning\n>\n\n/**\n * Warning emitted when a component has both manual placement (via manualEdits) and explicit schX/schY coordinates\n */\nexport interface SchematicManualEditConflictWarning {\n type: \"schematic_manual_edit_conflict_warning\"\n schematic_manual_edit_conflict_warning_id: string\n warning_type: \"schematic_manual_edit_conflict_warning\"\n message: string\n schematic_component_id: string\n schematic_group_id?: string\n subcircuit_id?: string\n source_component_id: string\n}\n\nexpectTypesMatch<\n SchematicManualEditConflictWarning,\n InferredSchematicManualEditConflictWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_component_overlap_warning = z\n .object({\n type: z.literal(\"schematic_component_overlap_warning\"),\n schematic_component_overlap_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_component_overlap_warning\",\n ),\n warning_type: z\n .literal(\"schematic_component_overlap_warning\")\n .default(\"schematic_component_overlap_warning\"),\n message: z.string(),\n schematic_component_ids: z.tuple([z.string(), z.string()]),\n schematic_sheet_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when the rendered bounds of two schematic components overlap\",\n )\n\nexport type SchematicComponentOverlapWarningInput = z.input<\n typeof schematic_component_overlap_warning\n>\ntype InferredSchematicComponentOverlapWarning = z.infer<\n typeof schematic_component_overlap_warning\n>\n\n/** Warning emitted when the rendered bounds of two schematic components overlap */\nexport interface SchematicComponentOverlapWarning {\n type: \"schematic_component_overlap_warning\"\n schematic_component_overlap_warning_id: string\n warning_type: \"schematic_component_overlap_warning\"\n message: string\n schematic_component_ids: [string, string]\n schematic_sheet_id?: string\n}\n\nexpectTypesMatch<\n SchematicComponentOverlapWarning,\n InferredSchematicComponentOverlapWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_component_styling_warning = z\n .object({\n type: z.literal(\"schematic_component_styling_warning\"),\n schematic_component_styling_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_component_styling_warning\",\n ),\n warning_type: z\n .literal(\"schematic_component_styling_warning\")\n .default(\"schematic_component_styling_warning\"),\n message: z.string(),\n schematic_component_id: z.string(),\n styling_issue_type: z.string(),\n schematic_port_ids: z.array(z.string()).optional(),\n source_component_id: z.string().optional(),\n schematic_sheet_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a schematic component has a visual styling issue\",\n )\n\nexport type SchematicComponentStylingWarningInput = z.input<\n typeof schematic_component_styling_warning\n>\ntype InferredSchematicComponentStylingWarning = z.infer<\n typeof schematic_component_styling_warning\n>\n\n/** Warning emitted when a schematic component has a visual styling issue */\nexport interface SchematicComponentStylingWarning {\n type: \"schematic_component_styling_warning\"\n schematic_component_styling_warning_id: string\n warning_type: \"schematic_component_styling_warning\"\n message: string\n schematic_component_id: string\n styling_issue_type: string\n schematic_port_ids?: string[]\n source_component_id?: string\n schematic_sheet_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SchematicComponentStylingWarning,\n InferredSchematicComponentStylingWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_element_outside_sheet_warning = z\n .object({\n type: z.literal(\"schematic_element_outside_sheet_warning\"),\n schematic_element_outside_sheet_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_element_outside_sheet_warning\",\n ),\n warning_type: z\n .literal(\"schematic_element_outside_sheet_warning\")\n .default(\"schematic_element_outside_sheet_warning\"),\n message: z.string(),\n schematic_sheet_id: z.string(),\n schematic_element_type: z.enum([\n \"schematic_component\",\n \"schematic_net_label\",\n \"schematic_trace\",\n ]),\n schematic_element_id: z.string(),\n })\n .describe(\n \"Warning emitted when a schematic component, net label, or trace extends outside its schematic sheet\",\n )\n\nexport type SchematicElementOutsideSheetWarningInput = z.input<\n typeof schematic_element_outside_sheet_warning\n>\ntype InferredSchematicElementOutsideSheetWarning = z.infer<\n typeof schematic_element_outside_sheet_warning\n>\n\n/** Warning emitted when a schematic component, net label, or trace extends outside its schematic sheet */\nexport interface SchematicElementOutsideSheetWarning {\n type: \"schematic_element_outside_sheet_warning\"\n schematic_element_outside_sheet_warning_id: string\n warning_type: \"schematic_element_outside_sheet_warning\"\n message: string\n schematic_sheet_id: string\n schematic_element_type:\n | \"schematic_component\"\n | \"schematic_net_label\"\n | \"schematic_trace\"\n schematic_element_id: string\n}\n\nexpectTypesMatch<\n SchematicElementOutsideSheetWarning,\n InferredSchematicElementOutsideSheetWarning\n>(true)\n","import { z } from \"zod\"\nimport { asset, type Asset, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst positiveFiniteDistance = distance.pipe(z.number().positive().finite())\n\nexport const schematic_graphic = z\n .object({\n type: z.literal(\"schematic_graphic\"),\n schematic_graphic_id: getZodPrefixedIdWithDefault(\"schematic_graphic\"),\n schematic_sheet_id: z.string().optional(),\n asset: asset.optional(),\n svg_content: z.string().optional(),\n width: positiveFiniteDistance.optional(),\n height: positiveFiniteDistance.optional(),\n })\n .describe(\n \"References a graphic asset or inline SVG content with optional centered layout bounds on a schematic sheet\",\n )\n .superRefine(({ asset, svg_content }, ctx) => {\n if (asset === undefined && svg_content === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"At least one of asset or svg_content is required\",\n })\n }\n })\n\nexport type SchematicGraphicInput = z.input<typeof schematic_graphic>\ntype InferredSchematicGraphic = z.infer<typeof schematic_graphic>\n\n/** References a graphic asset or inline SVG content on a schematic sheet. */\nexport interface SchematicGraphic {\n type: \"schematic_graphic\"\n schematic_graphic_id: string\n schematic_sheet_id?: string\n /** Optional canonical source asset; at least one graphic source is required. */\n asset?: Asset\n /** Optional inline SVG source or materialized fallback content. */\n svg_content?: string\n /** Positive centered layout width in schematic units. */\n width?: number\n /** Positive centered layout height in schematic units. */\n height?: number\n}\n\nexpectTypesMatch<SchematicGraphic, InferredSchematicGraphic>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_group = z\n .object({\n type: z.literal(\"schematic_group\"),\n schematic_group_id: getZodPrefixedIdWithDefault(\"schematic_group\"),\n schematic_sheet_id: z.string().optional(),\n source_group_id: z.string(),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n width: length,\n height: length,\n center: point,\n schematic_component_ids: z.array(z.string()),\n show_as_schematic_box: z.boolean().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n })\n .describe(\"Defines a group of components on the schematic\")\n\nexport type SchematicGroupInput = z.input<typeof schematic_group>\ntype InferredSchematicGroup = z.infer<typeof schematic_group>\n\n/**\n * Defines a group of components on the schematic\n */\nexport interface SchematicGroup {\n type: \"schematic_group\"\n schematic_group_id: string\n schematic_sheet_id?: string\n source_group_id: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n width: Length\n height: Length\n center: Point\n schematic_component_ids: string[]\n show_as_schematic_box?: boolean\n name?: string\n description?: string\n}\n\nexpectTypesMatch<SchematicGroup, InferredSchematicGroup>(true)\n","import { z } from \"zod\"\nimport {\n getZodPrefixedIdWithDefault,\n ninePointAnchor,\n point,\n type NinePointAnchor,\n type Point,\n} from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_table = z\n .object({\n type: z.literal(\"schematic_table\"),\n schematic_table_id: getZodPrefixedIdWithDefault(\"schematic_table\"),\n schematic_sheet_id: z.string().optional(),\n anchor_position: point,\n column_widths: z.array(distance),\n row_heights: z.array(distance),\n cell_padding: distance.optional(),\n border_width: distance.optional(),\n subcircuit_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n anchor: ninePointAnchor.optional(),\n })\n .describe(\"Defines a table on the schematic\")\n\nexport type SchematicTableInput = z.input<typeof schematic_table>\ntype InferredSchematicTable = z.infer<typeof schematic_table>\n\n/**\n * Defines a table on the schematic, useful for displaying data in a structured format.\n */\nexport interface SchematicTable {\n type: \"schematic_table\"\n schematic_table_id: string\n schematic_sheet_id?: string\n anchor_position: Point\n column_widths: Length[]\n row_heights: Length[]\n cell_padding?: Length\n border_width?: Length\n subcircuit_id?: string\n schematic_component_id?: string\n anchor?: NinePointAnchor\n}\n\nexpectTypesMatch<SchematicTable, InferredSchematicTable>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_table_cell = z\n .object({\n type: z.literal(\"schematic_table_cell\"),\n schematic_table_cell_id: getZodPrefixedIdWithDefault(\n \"schematic_table_cell\",\n ),\n schematic_sheet_id: z.string().optional(),\n schematic_table_id: z.string(),\n start_row_index: z.number(),\n end_row_index: z.number(),\n start_column_index: z.number(),\n end_column_index: z.number(),\n text: z.string().optional(),\n center: point,\n width: distance,\n height: distance,\n horizontal_align: z.enum([\"left\", \"center\", \"right\"]).optional(),\n vertical_align: z.enum([\"top\", \"middle\", \"bottom\"]).optional(),\n font_size: distance.optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a cell within a schematic_table\")\n\nexport type SchematicTableCellInput = z.input<typeof schematic_table_cell>\ntype InferredSchematicTableCell = z.infer<typeof schematic_table_cell>\n\n/**\n * Defines a cell within a schematic_table\n */\nexport interface SchematicTableCell {\n type: \"schematic_table_cell\"\n schematic_table_cell_id: string\n schematic_sheet_id?: string\n schematic_table_id: string\n start_row_index: number\n end_row_index: number\n start_column_index: number\n end_column_index: number\n text?: string\n center: Point\n width: Length\n height: Length\n horizontal_align?: \"left\" | \"center\" | \"right\"\n vertical_align?: \"top\" | \"middle\" | \"bottom\"\n font_size?: Length\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SchematicTableCell, InferredSchematicTableCell>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_sheet_size = z.enum([\"a4\", \"ansi_b\"])\nexport type SchematicSheetSize = z.infer<typeof schematic_sheet_size>\n\nexport const schematic_sheet = z\n .object({\n type: z.literal(\"schematic_sheet\"),\n schematic_sheet_id: getZodPrefixedIdWithDefault(\"schematic_sheet\"),\n name: z.string().optional(),\n sheet_index: z.number().optional(),\n sheet_size: schematic_sheet_size.optional(),\n sheet_width: z.number().positive().optional(),\n sheet_height: z.number().positive().optional(),\n subcircuit_id: z.string().optional(),\n outline_color: z.string().optional(),\n })\n .describe(\n \"Defines a schematic sheet or page that components can be placed on\",\n )\n\nexport type SchematicSheetInput = z.input<typeof schematic_sheet>\ntype InferredSchematicSheet = z.infer<typeof schematic_sheet>\n\n/**\n * Defines a schematic sheet or page that components can be placed on.\n */\nexport interface SchematicSheet {\n type: \"schematic_sheet\"\n schematic_sheet_id: string\n name?: string\n sheet_index?: number\n sheet_size?: SchematicSheetSize\n sheet_width?: number\n sheet_height?: number\n subcircuit_id?: string\n outline_color?: string\n}\n\nexpectTypesMatch<SchematicSheet, InferredSchematicSheet>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\n/** Circuit-wide warning: display as a banner, without a target outline or leader. */\nexport const schematic_missing_sheet_warning = z\n .object({\n type: z.literal(\"schematic_missing_sheet_warning\"),\n schematic_missing_sheet_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_missing_sheet_warning\",\n ),\n warning_type: z\n .literal(\"schematic_missing_sheet_warning\")\n .default(\"schematic_missing_sheet_warning\"),\n message: z.string(),\n })\n .describe(\n \"Circuit-wide warning emitted when a schematic has no schematic sheet. Display as a banner without attaching it to a component or drawing a target outline or leader line.\",\n )\n\nexport type SchematicMissingSheetWarningInput = z.input<\n typeof schematic_missing_sheet_warning\n>\ntype InferredSchematicMissingSheetWarning = z.infer<\n typeof schematic_missing_sheet_warning\n>\n\n/** Circuit-wide warning that a schematic has no sheet; has no component target. */\nexport interface SchematicMissingSheetWarning {\n type: \"schematic_missing_sheet_warning\"\n schematic_missing_sheet_warning_id: string\n warning_type: \"schematic_missing_sheet_warning\"\n message: string\n}\n\nexpectTypesMatch<\n SchematicMissingSheetWarning,\n InferredSchematicMissingSheetWarning\n>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const point_with_bulge = z.object({\n x: distance,\n y: distance,\n bulge: z.number().optional(),\n})\n\nexport interface PointWithBulge {\n x: Distance\n y: Distance\n bulge?: number\n}\ntype InferredPointWithBulge = z.infer<typeof point_with_bulge>\nexpectTypesMatch<PointWithBulge, InferredPointWithBulge>(true)\n\nexport const ring = z.object({\n vertices: z.array(point_with_bulge),\n})\n\nexport interface Ring {\n vertices: PointWithBulge[]\n}\ntype InferredRing = z.infer<typeof ring>\nexpectTypesMatch<Ring, InferredRing>(true)\n\nexport const brep_shape = z.object({\n outer_ring: ring,\n inner_rings: z.array(ring).default([]),\n})\n\n/**\n * B-rep shape defined by an outer ring and inner rings (holes).\n */\nexport interface BRepShape {\n /**\n * The outer boundary of the shape. Vertices must be in clockwise order.\n */\n outer_ring: Ring\n /**\n * Inner boundaries (holes). Vertices must be in counter-clockwise order.\n */\n inner_rings: Ring[]\n}\ntype InferredBRepShape = z.infer<typeof brep_shape>\nexpectTypesMatch<BRepShape, InferredBRepShape>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/**\n * The direction a cable or mating part is attached from, named for the side of\n * the board it approaches from.\n *\n * This names a side, not a motion. A receptacle on the +Y edge of the board is\n * `from_top` because that is the side the plug comes from, even though the plug\n * itself moves in -Y as it seats.\n *\n * Names follow the tscircuit 2D convention, i.e. the board as drawn in the PCB\n * view: `top` is +Y, `bottom` is -Y, `left` is -X and `right` is +X. The Z axis\n * uses `above` for +Z and `below` for -Z so that it never collides with the\n * `top`/`bottom` used for the Y axis. Note that this is unrelated to the\n * `layer` field, where \"top\" and \"bottom\" name copper layers rather than\n * directions.\n *\n * Every name has an equivalent Cartesian spelling (`\"from_y_pos\"` and\n * friends). The two are interchangeable on input; parsing normalizes the\n * Cartesian spellings to the named ones, so a parsed `insertion_direction` is\n * always one of the six named values.\n */\nexport type InsertionDirection =\n | \"from_left\"\n | \"from_right\"\n | \"from_top\"\n | \"from_bottom\"\n | \"from_above\"\n | \"from_below\"\n\n/**\n * Cartesian spellings accepted as input for {@link InsertionDirection}.\n *\n * Spelled `_pos`/`_neg` rather than `+`/`-` because Circuit JSON enum values\n * must be snake_case (see `scripts/zod-lint.ts`).\n */\nexport type InsertionDirectionCartesian =\n | \"from_x_neg\"\n | \"from_x_pos\"\n | \"from_y_pos\"\n | \"from_y_neg\"\n | \"from_z_pos\"\n | \"from_z_neg\"\n\n/**\n * Spellings retained only so that existing Circuit JSON and existing sources\n * keep parsing. They normalize to the canonical values on input and are never\n * produced by parsing.\n *\n * @deprecated `from_front` named +Y and `from_back` named -Y, which read as if\n * they described a 3D viewport rather than the board as drawn in the 2D PCB\n * view. Use `from_top` and `from_bottom`. Remove these once no published\n * package still emits them.\n */\nexport type InsertionDirectionDeprecated = \"from_front\" | \"from_back\"\n\nexport type InsertionDirectionInput =\n | InsertionDirection\n | InsertionDirectionCartesian\n | InsertionDirectionDeprecated\n\n/**\n * Maps each accepted spelling to the canonical named value.\n */\nexport const insertionDirectionToCanonical = {\n from_left: \"from_left\",\n from_right: \"from_right\",\n from_top: \"from_top\",\n from_bottom: \"from_bottom\",\n from_above: \"from_above\",\n from_below: \"from_below\",\n from_x_neg: \"from_left\",\n from_x_pos: \"from_right\",\n from_y_pos: \"from_top\",\n from_y_neg: \"from_bottom\",\n from_z_pos: \"from_above\",\n from_z_neg: \"from_below\",\n /** @deprecated use `from_top` */\n from_front: \"from_top\",\n /** @deprecated use `from_bottom` */\n from_back: \"from_bottom\",\n} as const satisfies Record<InsertionDirectionInput, InsertionDirection>\n\n/**\n * The unit vector each canonical direction points along, in board coordinates.\n */\nexport const insertionDirectionToVector = {\n from_left: { x: -1, y: 0, z: 0 },\n from_right: { x: 1, y: 0, z: 0 },\n from_top: { x: 0, y: 1, z: 0 },\n from_bottom: { x: 0, y: -1, z: 0 },\n from_above: { x: 0, y: 0, z: 1 },\n from_below: { x: 0, y: 0, z: -1 },\n} as const satisfies Record<\n InsertionDirection,\n { x: number; y: number; z: number }\n>\n\nexport const insertion_direction = z\n .enum([\n \"from_left\",\n \"from_right\",\n \"from_top\",\n \"from_bottom\",\n \"from_above\",\n \"from_below\",\n \"from_x_neg\",\n \"from_x_pos\",\n \"from_y_pos\",\n \"from_y_neg\",\n \"from_z_pos\",\n \"from_z_neg\",\n // Deprecated, accepted so existing Circuit JSON keeps parsing.\n \"from_front\",\n \"from_back\",\n ])\n .transform((value) => insertionDirectionToCanonical[value])\n .describe(\n 'The side exposing the receptacle where the cable or mating part is attached, following the 2D PCB diagram convention, not a 3D viewport frame. In project coordinate space, \"from_top\" is +Y, \"from_bottom\" -Y, \"from_left\" -X, \"from_right\" +X, \"from_above\" +Z and \"from_below\" -Z. A receptacle on the +Y edge is \"from_top\" even though the plug moves in -Y as it seats. Cartesian spellings such as \"from_y_pos\" are accepted and normalized to the named values, as are the deprecated \"from_front\" (now \"from_top\") and \"from_back\" (now \"from_bottom\").',\n )\n\nexpectTypesMatch<InsertionDirection, z.infer<typeof insertion_direction>>(true)\nexpectTypesMatch<InsertionDirectionInput, z.input<typeof insertion_direction>>(\n true,\n)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\n/**\n * Describes where pin 1 is located on an unrotated, top-view PCB footprint.\n */\nexport const pcb_pin1_location = z.enum([\n \"leftside_top\",\n \"leftside_bottom\",\n \"rightside_top\",\n \"rightside_bottom\",\n \"topside_left\",\n \"topside_right\",\n \"bottomside_left\",\n \"bottomside_right\",\n])\n\ntype InferredPcbPin1Location = z.infer<typeof pcb_pin1_location>\n\nexport type PcbPin1Location =\n | \"leftside_top\"\n | \"leftside_bottom\"\n | \"rightside_top\"\n | \"rightside_bottom\"\n | \"topside_left\"\n | \"topside_right\"\n | \"bottomside_left\"\n | \"bottomside_right\"\n\nexpectTypesMatch<PcbPin1Location, InferredPcbPin1Location>(true)\n\nexport type PcbPin1LocationRotation = 0 | 90 | 180 | 270\n\nconst pin1LocationRotationCycles: readonly (readonly PcbPin1Location[])[] = [\n [\n \"leftside_top\",\n \"bottomside_left\",\n \"rightside_bottom\",\n \"topside_right\",\n ],\n [\n \"leftside_bottom\",\n \"bottomside_right\",\n \"rightside_top\",\n \"topside_left\",\n ],\n]\n\n/**\n * Returns the counter-clockwise rotation that maps one pin 1 location to\n * another, or null when the locations differ by reflection rather than\n * rotation.\n */\nexport const getRotationBetweenPcbPin1Locations = (\n from: PcbPin1Location,\n to: PcbPin1Location,\n): PcbPin1LocationRotation | null => {\n for (const cycle of pin1LocationRotationCycles) {\n const fromIndex = cycle.indexOf(from)\n const toIndex = cycle.indexOf(to)\n\n if (fromIndex !== -1 && toIndex !== -1) {\n return (((toIndex - fromIndex + cycle.length) % cycle.length) *\n 90) as PcbPin1LocationRotation\n }\n }\n\n return null\n}\n","import { z } from \"zod\"\nimport { distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"./layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n// x: string | number\n// y: string | number\n// via?: boolean\n// via_to_layer?: string\nexport const pcb_route_hint = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n via_to_layer: layer_ref.optional(),\n})\nexport const pcb_route_hints = z.array(pcb_route_hint)\n\nexport type PcbRouteHintInput = z.input<typeof pcb_route_hint>\nexport type PcbRouteHintsInput = z.input<typeof pcb_route_hints>\ntype InferredPcbRouteHint = z.output<typeof pcb_route_hint>\ntype InferredPcbRouteHints = z.output<typeof pcb_route_hints>\n\nexport interface PcbRouteHint {\n x: number\n y: number\n via?: boolean\n via_to_layer?: LayerRef\n}\n\nexport type PcbRouteHints = PcbRouteHint[]\n\nexpectTypesMatch<PcbRouteHint, InferredPcbRouteHint>(true)\nexpectTypesMatch<PcbRouteHints, InferredPcbRouteHints>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../../units\"\nimport { layer_ref, type LayerRef } from \"./layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const route_hint_point = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n to_layer: layer_ref.optional(),\n trace_width: distance.optional(),\n})\n\nexport type RouteHintPointInput = z.input<typeof route_hint_point>\ntype InferredRouteHintPoint = z.infer<typeof route_hint_point>\n\nexport interface RouteHintPoint {\n x: number\n y: number\n via?: boolean\n to_layer?: LayerRef\n trace_width?: number\n}\n\nexpectTypesMatch<RouteHintPoint, InferredRouteHintPoint>(true)\n","import { z } from \"zod\"\nimport { length, type Length } from \"src/units\"\n\nexport const manufacturing_drc_properties = z.object({\n min_trace_width: length.optional(),\n min_board_edge_clearance: length.optional(),\n min_via_hole_edge_to_via_hole_edge_clearance: length.optional(),\n min_plated_hole_drill_edge_to_drill_edge_clearance: length.optional(),\n min_trace_to_pad_edge_clearance: length.optional(),\n min_trace_to_hole_edge_clearance: length\n .optional()\n .describe(\n \"Minimum distance from a trace copper edge to a non-plated hole edge, in mm. No default is applied when omitted.\",\n ),\n min_pad_edge_to_pad_edge_clearance: length.optional(),\n min_same_net_trace_edge_to_trace_edge_clearance: length.optional(),\n min_different_net_trace_edge_to_trace_edge_clearance: length.optional(),\n min_via_edge_to_pad_edge_clearance: length.optional(),\n min_via_hole_diameter: length.optional(),\n min_via_pad_diameter: length.optional(),\n})\n\nexport interface ManufacturingDrcProperties {\n min_trace_width?: Length\n min_board_edge_clearance?: Length\n min_via_hole_edge_to_via_hole_edge_clearance?: Length\n min_plated_hole_drill_edge_to_drill_edge_clearance?: Length\n min_trace_to_pad_edge_clearance?: Length\n /** Minimum trace copper edge to non-plated hole edge clearance in mm. */\n min_trace_to_hole_edge_clearance?: Length\n min_pad_edge_to_pad_edge_clearance?: Length\n min_same_net_trace_edge_to_trace_edge_clearance?: Length\n min_different_net_trace_edge_to_trace_edge_clearance?: Length\n min_via_edge_to_pad_edge_clearance?: Length\n min_via_hole_diameter?: Length\n min_via_pad_diameter?: Length\n}\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport {\n type KicadFootprintMetadata,\n kicadFootprintMetadata,\n} from \"src/common/kicadFootprintMetadata\"\nimport {\n type NinePointAnchor,\n ninePointAnchor,\n} from \"src/common/NinePointAnchor\"\nimport {\n type InsertionDirection,\n insertion_direction,\n} from \"src/pcb/properties/insertion_direction\"\nimport { type LayerRef, layer_ref } from \"src/pcb/properties/layer_ref\"\nimport {\n type PcbPin1Location,\n pcb_pin1_location,\n} from \"src/pcb/properties/pcb_pin1_location\"\nimport {\n type SupplierName,\n supplier_name,\n} from \"src/pcb/properties/supplier_name\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface PcbComponentMetadata {\n kicad_footprint?: KicadFootprintMetadata\n}\n\nexport type SupplierPin1LocationMap = Partial<\n Record<SupplierName, PcbPin1Location>\n>\n\nexport const pcb_component = z\n .object({\n type: z.literal(\"pcb_component\"),\n pcb_component_id: getZodPrefixedIdWithDefault(\"pcb_component\"),\n source_component_id: z.string(),\n center: point,\n layer: layer_ref,\n rotation: rotation,\n display_offset_x: z\n .string()\n .optional()\n .describe(\n \"How to display the x offset for this part, usually corresponding with how the user specified it\",\n ),\n display_offset_y: z\n .string()\n .optional()\n .describe(\n \"How to display the y offset for this part, usually corresponding with how the user specified it\",\n ),\n width: length,\n height: length,\n do_not_place: z.boolean().optional(),\n is_allowed_to_be_off_board: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n position_mode: z\n .enum([\n \"packed\",\n \"relative_to_group_anchor\",\n \"relative_to_another_component\",\n \"none\",\n ])\n .optional(),\n anchor_position: point.optional(),\n anchor_alignment: ninePointAnchor.optional(),\n positioned_relative_to_pcb_group_id: z.string().optional(),\n positioned_relative_to_pcb_board_id: z.string().optional(),\n cable_insertion_center: point.optional(),\n insertion_direction: insertion_direction.optional(),\n pin1_location: pcb_pin1_location\n .optional()\n .describe(\n \"Location of pin 1 on the unrotated, top-view component footprint\",\n ),\n supplier_pin1_location_map: z\n .record(supplier_name, pcb_pin1_location)\n .optional()\n .describe(\n \"Pin 1 location for each supplier's unrotated, top-view footprint\",\n ),\n metadata: z\n .object({\n kicad_footprint: kicadFootprintMetadata.optional(),\n })\n .optional(),\n obstructs_within_bounds: z\n .boolean()\n .default(true)\n .describe(\n \"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\",\n ),\n })\n .describe(\"Defines a component on the PCB\")\n\nexport type PcbComponentInput = z.input<typeof pcb_component>\ntype InferredPcbComponent = z.infer<typeof pcb_component>\n\n/**\n * Defines a component on the PCB\n */\nexport interface PcbComponent {\n type: \"pcb_component\"\n pcb_component_id: string\n source_component_id: string\n subcircuit_id?: string\n center: Point\n layer: LayerRef\n rotation: Rotation\n display_offset_x?: string\n display_offset_y?: string\n width: Length\n height: Length\n do_not_place?: boolean\n is_allowed_to_be_off_board?: boolean\n pcb_group_id?: string\n position_mode?:\n | \"packed\"\n | \"relative_to_group_anchor\"\n | \"relative_to_another_component\"\n | \"none\"\n anchor_position?: Point\n anchor_alignment?: NinePointAnchor\n positioned_relative_to_pcb_group_id?: string\n positioned_relative_to_pcb_board_id?: string\n cable_insertion_center?: Point\n insertion_direction?: InsertionDirection\n pin1_location?: PcbPin1Location\n supplier_pin1_location_map?: SupplierPin1LocationMap\n metadata?: PcbComponentMetadata\n obstructs_within_bounds: boolean\n}\n\n/**\n * @deprecated use PcbComponent\n */\nexport type PCBComponent = PcbComponent\n\nexpectTypesMatch<PcbComponent, InferredPcbComponent>(true)\n","import { z } from \"zod\"\nimport {\n getZodPrefixedIdWithDefault,\n point,\n type Point,\n size,\n type Size,\n} from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_debug_object_base = z.object({\n type: z.literal(\"pcb_debug_object\"),\n pcb_debug_object_id: getZodPrefixedIdWithDefault(\"pcb_debug_object\"),\n label: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport const pcb_debug_rect = pcb_debug_object_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n size: size,\n})\n\nexport const pcb_debug_line = pcb_debug_object_base.extend({\n shape: z.literal(\"line\"),\n start: point,\n end: point,\n})\n\nexport const pcb_debug_point = pcb_debug_object_base.extend({\n shape: z.literal(\"point\"),\n center: point,\n})\n\nexport const pcb_debug_object = z.discriminatedUnion(\"shape\", [\n pcb_debug_rect,\n pcb_debug_line,\n pcb_debug_point,\n])\ntype InferredPcbDebugObject = z.infer<typeof pcb_debug_object>\n\nexport interface PcbDebugRect {\n type: \"pcb_debug_object\"\n pcb_debug_object_id: string\n label?: string\n shape: \"rect\"\n center: Point\n size: Size\n subcircuit_id?: string\n}\n\nexport interface PcbDebugLine {\n type: \"pcb_debug_object\"\n pcb_debug_object_id: string\n label?: string\n shape: \"line\"\n start: Point\n end: Point\n subcircuit_id?: string\n}\n\nexport interface PcbDebugPoint {\n type: \"pcb_debug_object\"\n pcb_debug_object_id: string\n label?: string\n shape: \"point\"\n center: Point\n subcircuit_id?: string\n}\n\nexport type PcbDebugObject = PcbDebugRect | PcbDebugLine | PcbDebugPoint\n\nexpectTypesMatch<PcbDebugObject, InferredPcbDebugObject>(true)\nexport type PcbDebugObjectInput = z.input<typeof pcb_debug_object>\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_hole_circle = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"circle\"),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_circle_shape = pcb_hole_circle.describe(\n \"Defines a circular hole on the PCB\",\n)\n\nexport type PcbHoleCircleInput = z.input<typeof pcb_hole_circle>\ntype InferredPcbHoleCircle = z.infer<typeof pcb_hole_circle>\n\n/**\n * Defines a circular hole on the PCB\n */\nexport interface PcbHoleCircle {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"circle\"\n hole_diameter: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleCircle, InferredPcbHoleCircle>(true)\n\nconst pcb_hole_rect = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"rect\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_rect_shape = pcb_hole_rect.describe(\n \"Defines a rectangular (square-capable) hole on the PCB. Use equal width/height for square.\",\n)\n\nexport type PcbHoleRectInput = z.input<typeof pcb_hole_rect>\ntype InferredPcbHoleRect = z.infer<typeof pcb_hole_rect>\n\n/**\n * Defines a rectangular (or square) hole on the PCB\n */\nexport interface PcbHoleRect {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"rect\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\nexpectTypesMatch<PcbHoleRect, InferredPcbHoleRect>(true)\n\nconst pcb_hole_circle_or_square = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.enum([\"circle\", \"square\"]),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_circle_or_square_shape =\n pcb_hole_circle_or_square.describe(\n \"Defines a circular or square hole on the PCB\",\n )\n\nexport type PcbHoleCircleOrSquareInput = z.input<\n typeof pcb_hole_circle_or_square\n>\ntype InferredPcbHoleCircleOrSquare = z.infer<typeof pcb_hole_circle_or_square>\n\n/**\n * Defines a circular or square hole on the PCB\n */\n\n/**\n * @deprecated Use `PcbHoleCircle` for circular holes or `PcbHoleRect` for square holes.\n */\nexport interface PcbHoleCircleOrSquare {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"circle\" | \"square\"\n hole_diameter: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleCircleOrSquare, InferredPcbHoleCircleOrSquare>(true)\n\nconst pcb_hole_oval = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"oval\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_oval_shape = pcb_hole_oval.describe(\n \"Defines an oval hole on the PCB\",\n)\n\nexport type PcbHoleOvalInput = z.input<typeof pcb_hole_oval>\ntype InferredPcbHoleOval = z.infer<typeof pcb_hole_oval>\n\n/**\n * Defines an oval hole on the PCB\n */\nexport interface PcbHoleOval {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"oval\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleOval, InferredPcbHoleOval>(true)\n\nconst pcb_hole_pill = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"pill\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_pill_shape = pcb_hole_pill.describe(\n \"Defines a pill-shaped hole on the PCB\",\n)\n\nexport type PcbHolePillInput = z.input<typeof pcb_hole_pill>\ntype InferredPcbHolePill = z.infer<typeof pcb_hole_pill>\n\n/**\n * Defines a pill-shaped hole on the PCB\n */\nexport interface PcbHolePill {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"pill\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHolePill, InferredPcbHolePill>(true)\n\nconst pcb_hole_rotated_pill = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"rotated_pill\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n ccw_rotation: rotation,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_rotated_pill_shape = pcb_hole_rotated_pill.describe(\n \"Defines a rotated pill-shaped hole on the PCB\",\n)\n\nexport type PcbHoleRotatedPillInput = z.input<typeof pcb_hole_rotated_pill>\ntype InferredPcbHoleRotatedPill = z.infer<typeof pcb_hole_rotated_pill>\n\n/**\n * Defines a rotated pill-shaped hole on the PCB\n */\nexport interface PcbHoleRotatedPill {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"rotated_pill\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n ccw_rotation: Rotation\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleRotatedPill, InferredPcbHoleRotatedPill>(true)\n\nexport const pcb_hole = pcb_hole_circle_or_square\n .or(pcb_hole_oval)\n .or(pcb_hole_pill)\n .or(pcb_hole_rotated_pill)\n .or(pcb_hole_circle)\n .or(pcb_hole_rect)\n\n/**\n * @deprecated Use PcbHoleCircleOrSquare, PcbHoleCircle, PcbHoleRect, PcbHoleOval, PcbHolePill, or PcbHoleRotatedPill\n */\nexport type PCBHoleInput = z.input<typeof pcb_hole>\n/**\n * @deprecated Use PcbHoleCircleOrSquare, PcbHoleCircle, PcbHoleRect, PcbHoleOval, PcbHolePill, or PcbHoleRotatedPill\n */\nexport type PCBHole = z.infer<typeof pcb_hole>\n\nexport type PcbHole =\n | PcbHoleCircleOrSquare\n | PcbHoleOval\n | PcbHolePill\n | PcbHoleRotatedPill\n | PcbHoleCircle\n | PcbHoleRect\n","import { z } from \"zod\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_plated_hole_circle = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"circle\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n outer_diameter: z.number(),\n hole_diameter: z.number(),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\n\n/**\n * Defines a circular plated hole on the PCB\n */\nexport interface PcbPlatedHoleCircle {\n type: \"pcb_plated_hole\"\n shape: \"circle\"\n pcb_group_id?: string\n subcircuit_id?: string\n outer_diameter: number\n hole_diameter: number\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nconst pcb_plated_hole_oval = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.enum([\"oval\", \"pill\"]),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n outer_width: z.number(),\n outer_height: z.number(),\n hole_width: z.number(),\n hole_height: z.number(),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n ccw_rotation: rotation,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\n\n/**\n * Defines an oval or pill-shaped plated hole on the PCB\n */\nexport interface PcbPlatedHoleOval {\n type: \"pcb_plated_hole\"\n shape: \"oval\" | \"pill\"\n pcb_group_id?: string\n subcircuit_id?: string\n outer_width: number\n outer_height: number\n hole_width: number\n hole_height: number\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n ccw_rotation: Rotation\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nconst pcb_circular_hole_with_rect_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"circular_hole_with_rect_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.literal(\"circle\"),\n pad_shape: z.literal(\"rect\"),\n hole_diameter: z.number(),\n rect_pad_width: z.number(),\n rect_pad_height: z.number(),\n rect_border_radius: z.number().optional(),\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n rect_ccw_rotation: rotation.optional(),\n})\nconst pcb_pill_hole_with_rect_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"pill_hole_with_rect_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.literal(\"pill\"),\n pad_shape: z.literal(\"rect\"),\n hole_width: z.number(),\n hole_height: z.number(),\n rect_pad_width: z.number(),\n rect_pad_height: z.number(),\n rect_border_radius: z.number().optional(),\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\nconst pcb_rotated_pill_hole_with_rect_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"rotated_pill_hole_with_rect_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.literal(\"rotated_pill\"),\n pad_shape: z.literal(\"rect\"),\n hole_width: z.number(),\n hole_height: z.number(),\n hole_ccw_rotation: rotation,\n rect_pad_width: z.number(),\n rect_pad_height: z.number(),\n rect_border_radius: z.number().optional(),\n rect_ccw_rotation: rotation,\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\nexport interface PcbHolePillWithRectPad {\n type: \"pcb_plated_hole\"\n shape: \"pill_hole_with_rect_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"pill\"\n pad_shape: \"rect\"\n hole_width: number\n hole_height: number\n rect_pad_width: number\n rect_pad_height: number\n rect_border_radius?: number\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nexport interface PcbHoleRotatedPillWithRectPad {\n type: \"pcb_plated_hole\"\n shape: \"rotated_pill_hole_with_rect_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"rotated_pill\"\n pad_shape: \"rect\"\n hole_width: number\n hole_height: number\n hole_ccw_rotation: Rotation\n rect_pad_width: number\n rect_pad_height: number\n rect_border_radius?: number\n rect_ccw_rotation: Rotation\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nexport interface PcbHoleCircularWithRectPad {\n type: \"pcb_plated_hole\"\n shape: \"circular_hole_with_rect_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"circle\"\n pad_shape: \"rect\"\n hole_diameter: number\n rect_pad_width: number\n rect_pad_height: number\n rect_border_radius?: number\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n rect_ccw_rotation?: Rotation\n}\nconst pcb_hole_with_polygon_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"hole_with_polygon_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.enum([\"circle\", \"oval\", \"pill\", \"rotated_pill\"]),\n hole_diameter: z.number().optional(),\n hole_width: z.number().optional(),\n hole_height: z.number().optional(),\n\n pad_outline: z\n .array(\n z.object({\n x: distance,\n y: distance,\n }),\n )\n .min(3),\n\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n ccw_rotation: rotation.optional(),\n})\n\n/**\n * Defines a plated hole with a polygonal pad on the PCB\n */\n\nexport interface PcbHoleWithPolygonPad {\n type: \"pcb_plated_hole\"\n shape: \"hole_with_polygon_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"circle\" | \"oval\" | \"pill\" | \"rotated_pill\"\n hole_diameter?: number\n hole_width?: number\n hole_height?: number\n pad_outline: { x: Distance; y: Distance }[]\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n ccw_rotation?: Rotation\n}\n\nexport const pcb_plated_hole = z.union([\n pcb_plated_hole_circle,\n pcb_plated_hole_oval,\n pcb_circular_hole_with_rect_pad,\n pcb_pill_hole_with_rect_pad,\n pcb_rotated_pill_hole_with_rect_pad,\n pcb_hole_with_polygon_pad,\n])\nexport type PcbPlatedHole =\n | PcbPlatedHoleCircle\n | PcbPlatedHoleOval\n | PcbHoleCircularWithRectPad\n | PcbHolePillWithRectPad\n | PcbHoleRotatedPillWithRectPad\n | PcbHoleWithPolygonPad\n\nexpectTypesMatch<PcbPlatedHoleCircle, z.infer<typeof pcb_plated_hole_circle>>(\n true,\n)\nexpectTypesMatch<PcbPlatedHoleOval, z.infer<typeof pcb_plated_hole_oval>>(true)\nexpectTypesMatch<\n PcbHoleCircularWithRectPad,\n z.infer<typeof pcb_circular_hole_with_rect_pad>\n>(true)\nexpectTypesMatch<\n PcbHolePillWithRectPad,\n z.infer<typeof pcb_pill_hole_with_rect_pad>\n>(true)\nexpectTypesMatch<\n PcbHoleRotatedPillWithRectPad,\n z.infer<typeof pcb_rotated_pill_hole_with_rect_pad>\n>(true)\nexpectTypesMatch<\n PcbHoleWithPolygonPad,\n z.infer<typeof pcb_hole_with_polygon_pad>\n>(true)\n/**\n * @deprecated use PcbPlatedHole\n */\nexport type PCBPlatedHole = PcbPlatedHole\n\n/**\n * @deprecated use PcbPlatedHoleInput\n */\nexport type PCBPlatedHoleInput = z.input<typeof pcb_plated_hole>\nexport type PcbPlatedHoleInput = z.input<typeof pcb_plated_hole>\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port = z\n .object({\n type: z.literal(\"pcb_port\"),\n pcb_port_id: getZodPrefixedIdWithDefault(\"pcb_port\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n source_port_id: z.string(),\n pcb_component_id: z.string().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n is_board_pinout: z.boolean().optional(),\n })\n .describe(\"Defines a port on the PCB\")\n\nexport type PcbPortInput = z.input<typeof pcb_port>\ntype InferredPcbPort = z.infer<typeof pcb_port>\n\n/**\n * Defines a port on the PCB\n */\nexport interface PcbPort {\n type: \"pcb_port\"\n pcb_port_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n source_port_id: string\n pcb_component_id?: string\n x: Distance\n y: Distance\n layers: LayerRef[]\n is_board_pinout?: boolean\n}\n\n/**\n * @deprecated use PcbPort\n */\nexport type PCBPort = PcbPort\n\n/**\n * @deprecated use PcbPortInput\n */\nexport type PCBPortInput = PcbPortInput\n\nexpectTypesMatch<PcbPort, InferredPcbPort>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_smtpad_circle = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"circle\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n radius: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nconst pcb_smtpad_rect = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rect\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n rect_border_radius: z.number().optional(),\n corner_radius: z.number().optional(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n soldermask_margin_left: z.number().optional(),\n soldermask_margin_top: z.number().optional(),\n soldermask_margin_right: z.number().optional(),\n soldermask_margin_bottom: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nconst pcb_smtpad_rotated_rect = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rotated_rect\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n rect_border_radius: z.number().optional(),\n corner_radius: z.number().optional(),\n ccw_rotation: rotation,\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n soldermask_margin_left: z.number().optional(),\n soldermask_margin_top: z.number().optional(),\n soldermask_margin_right: z.number().optional(),\n soldermask_margin_bottom: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nexport const pcb_smtpad_pill = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"pill\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\nconst pcb_smtpad_rotated_pill = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rotated_pill\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n ccw_rotation: rotation,\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nconst pcb_smtpad_polygon = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"polygon\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n points: z.array(point),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nexport const pcb_smtpad = z\n .discriminatedUnion(\"shape\", [\n pcb_smtpad_circle,\n pcb_smtpad_rect,\n pcb_smtpad_rotated_rect,\n pcb_smtpad_rotated_pill,\n pcb_smtpad_pill,\n pcb_smtpad_polygon,\n ])\n .describe(\"Defines an SMT pad on the PCB\")\n\nexport type PCBSMTPadInput = z.input<typeof pcb_smtpad>\ntype PCBSMTPadCircle = z.infer<typeof pcb_smtpad_circle>\ntype PCBSMTPadRect = z.infer<typeof pcb_smtpad_rect>\ntype PCBSMTPadRotatedRect = z.infer<typeof pcb_smtpad_rotated_rect>\ntype PCBSMTPadRotatedPill = z.infer<typeof pcb_smtpad_rotated_pill>\ntype PCBSMTPadPill = z.infer<typeof pcb_smtpad_pill>\ntype PCBSMTPadPolygon = z.infer<typeof pcb_smtpad_polygon>\n\n/**\n * Defines a circular SMT pad on the PCB\n */\nexport interface PcbSmtPadCircle {\n type: \"pcb_smtpad\"\n shape: \"circle\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n radius: number\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a rectangular SMT pad on the PCB\n */\nexport interface PcbSmtPadRect {\n type: \"pcb_smtpad\"\n shape: \"rect\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n rect_border_radius?: number\n corner_radius?: number\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n soldermask_margin_left?: number\n soldermask_margin_top?: number\n soldermask_margin_right?: number\n soldermask_margin_bottom?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a rotated rectangular SMT pad on the PCB\n */\nexport interface PcbSmtPadRotatedRect {\n type: \"pcb_smtpad\"\n shape: \"rotated_rect\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n rect_border_radius?: number\n corner_radius?: number\n ccw_rotation: Rotation\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n soldermask_margin_left?: number\n soldermask_margin_top?: number\n soldermask_margin_right?: number\n soldermask_margin_bottom?: number\n solderpaste_margin?: number\n}\n/**\n * Defines a pill-shaped SMT pad on the PCB (rounded rectangle).\n */\nexport interface PcbSmtPadPill {\n type: \"pcb_smtpad\"\n shape: \"pill\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a rotated pill-shaped SMT pad on the PCB\n */\nexport interface PcbSmtPadRotatedPill {\n type: \"pcb_smtpad\"\n shape: \"rotated_pill\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n ccw_rotation: Rotation\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a polygonal SMT pad on the PCB\n */\nexport interface PcbSmtPadPolygon {\n type: \"pcb_smtpad\"\n shape: \"polygon\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n points: Point[]\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\nexport type PcbSmtPad =\n | PcbSmtPadCircle\n | PcbSmtPadRect\n | PcbSmtPadRotatedRect\n | PcbSmtPadRotatedPill\n | PcbSmtPadPill\n | PcbSmtPadPolygon\n\n/**\n * @deprecated use PcbSmtPad\n */\nexport type PCBSMTPad = PcbSmtPad\n\nexpectTypesMatch<PcbSmtPadCircle, PCBSMTPadCircle>(true)\nexpectTypesMatch<PcbSmtPadRect, PCBSMTPadRect>(true)\nexpectTypesMatch<PcbSmtPadRotatedRect, PCBSMTPadRotatedRect>(true)\nexpectTypesMatch<PcbSmtPadRotatedPill, PCBSMTPadRotatedPill>(true)\nexpectTypesMatch<PcbSmtPadPill, PCBSMTPadPill>(true)\nexpectTypesMatch<PcbSmtPadPolygon, PCBSMTPadPolygon>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport {\n getZodPrefixedIdWithDefault,\n polygon_shape,\n type Point,\n type PolygonShape,\n} from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_solder_paste_circle = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"circle\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n radius: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_rect = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"rect\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\nconst pcb_solder_paste_pill = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"pill\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\nconst pcb_solder_paste_rotated_rect = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"rotated_rect\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n ccw_rotation: distance,\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_rotated_pill = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"rotated_pill\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n ccw_rotation: rotation,\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_oval = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"oval\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_polygon = polygon_shape.extend({\n type: z.literal(\"pcb_solder_paste\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n holes: z.array(polygon_shape.shape.points).optional(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nexport const pcb_solder_paste = z\n .union([\n pcb_solder_paste_circle,\n pcb_solder_paste_rect,\n pcb_solder_paste_pill,\n pcb_solder_paste_rotated_rect,\n pcb_solder_paste_rotated_pill,\n pcb_solder_paste_oval,\n pcb_solder_paste_polygon,\n ])\n .describe(\"Defines solderpaste on the PCB\")\n\nexport type PCBSolderPasteInput = z.input<typeof pcb_solder_paste>\ntype InferredPcbSolderPasteCircle = z.infer<typeof pcb_solder_paste_circle>\ntype InferredPcbSolderPasteRect = z.infer<typeof pcb_solder_paste_rect>\ntype InferredPcbSolderPastePill = z.infer<typeof pcb_solder_paste_pill>\ntype InferredPcbSolderPasteRotatedRect = z.infer<\n typeof pcb_solder_paste_rotated_rect\n>\ntype InferredPcbSolderPasteRotatedPill = z.infer<\n typeof pcb_solder_paste_rotated_pill\n>\ntype InferredPcbSolderPastePolygon = z.infer<typeof pcb_solder_paste_polygon>\ntype InferredPcbSolderPasteOval = z.infer<typeof pcb_solder_paste_oval>\n\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteCircle {\n type: \"pcb_solder_paste\"\n shape: \"circle\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n radius: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteRect {\n type: \"pcb_solder_paste\"\n shape: \"rect\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPastePill {\n type: \"pcb_solder_paste\"\n shape: \"pill\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteRotatedRect {\n type: \"pcb_solder_paste\"\n shape: \"rotated_rect\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n ccw_rotation: Distance\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteRotatedPill {\n type: \"pcb_solder_paste\"\n shape: \"rotated_pill\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n ccw_rotation: Rotation\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteOval {\n type: \"pcb_solder_paste\"\n shape: \"oval\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n\n/**\n * A closed solder-paste contour in board-world mm: +X right, +Y up,\n * right-handed with +Z above the board. Points include placement translation;\n * top/bottom identifies the PCB layer, not the Y direction.\n */\nexport interface PcbSolderPastePolygon extends PolygonShape {\n type: \"pcb_solder_paste\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n /** Closed inner contours remove paste from this aperture. */\n holes?: Point[][]\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n\nexport type PcbSolderPaste =\n | PcbSolderPasteCircle\n | PcbSolderPasteRect\n | PcbSolderPastePill\n | PcbSolderPasteRotatedRect\n | PcbSolderPasteRotatedPill\n | PcbSolderPasteOval\n | PcbSolderPastePolygon\n\nexpectTypesMatch<PcbSolderPasteCircle, InferredPcbSolderPasteCircle>(true)\nexpectTypesMatch<PcbSolderPasteRect, InferredPcbSolderPasteRect>(true)\nexpectTypesMatch<PcbSolderPastePill, InferredPcbSolderPastePill>(true)\nexpectTypesMatch<PcbSolderPasteRotatedRect, InferredPcbSolderPasteRotatedRect>(\n true,\n)\nexpectTypesMatch<PcbSolderPasteRotatedPill, InferredPcbSolderPasteRotatedPill>(\n true,\n)\nexpectTypesMatch<PcbSolderPasteOval, InferredPcbSolderPasteOval>(true)\n\nexpectTypesMatch<PcbSolderPastePolygon, InferredPcbSolderPastePolygon>(true)\n","import { z } from \"zod\"\nimport {\n getZodPrefixedIdWithDefault,\n circle_shape,\n rect_shape,\n rotated_rect_shape,\n polygon_shape,\n type CircleShape,\n type RectShape,\n type RotatedRectShape,\n type PolygonShape,\n} from \"src/common\"\nimport { layer_ref, visible_layer } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst opening_base = z.object({\n type: z.literal(\"pcb_soldermask_opening\"),\n pcb_soldermask_opening_id: getZodPrefixedIdWithDefault(\n \"pcb_soldermask_opening\",\n ),\n layer: layer_ref.pipe(visible_layer),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport const pcb_soldermask_opening = z\n .discriminatedUnion(\"shape\", [\n circle_shape.extend(opening_base.shape),\n rect_shape.extend(opening_base.shape),\n rotated_rect_shape.extend(opening_base.shape),\n polygon_shape.extend(opening_base.shape),\n ])\n .describe(\n \"An explicit opening in top or bottom solder mask or flex coverlay, independent of pads. Removes mask without adding copper or solder paste.\",\n )\n\nexport type PcbSoldermaskOpeningInput = z.input<typeof pcb_soldermask_opening>\n\nexport interface PcbSoldermaskOpeningBase {\n type: \"pcb_soldermask_opening\"\n pcb_soldermask_opening_id: string\n layer: \"top\" | \"bottom\"\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n}\n\n/** A circular solder-mask opening centered at (x, y). */\nexport interface PcbSoldermaskOpeningCircle\n extends PcbSoldermaskOpeningBase,\n CircleShape {}\n\n/** A rectangular solder-mask opening centered at (x, y). */\nexport interface PcbSoldermaskOpeningRect\n extends PcbSoldermaskOpeningBase,\n RectShape {}\n\n/** A rectangular opening rotated counterclockwise about (x, y), in degrees. */\nexport interface PcbSoldermaskOpeningRotatedRect\n extends PcbSoldermaskOpeningBase,\n RotatedRectShape {}\n\n/** An implicitly closed boundary of at least three points enclosing nonzero area. */\nexport interface PcbSoldermaskOpeningPolygon\n extends PcbSoldermaskOpeningBase,\n PolygonShape {}\n\n/**\n * Solder-mask or flex-coverlay removal, independent of pads, vias, and electrical nets.\n * Numeric coordinates and dimensions use millimeters in the PCB coordinate system.\n * Placement, parent rotation, and bottom-footprint reflection are already resolved.\n * Openings expose the underlying substrate or existing copper; they add no material.\n */\nexport type PcbSoldermaskOpening =\n | PcbSoldermaskOpeningCircle\n | PcbSoldermaskOpeningRect\n | PcbSoldermaskOpeningRotatedRect\n | PcbSoldermaskOpeningPolygon\n\nexpectTypesMatch<PcbSoldermaskOpening, z.output<typeof pcb_soldermask_opening>>(\n true,\n)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_text = z\n .object({\n type: z.literal(\"pcb_text\"),\n pcb_text_id: getZodPrefixedIdWithDefault(\"pcb_text\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n text: z.string(),\n center: point,\n layer: layer_ref,\n width: length,\n height: length,\n lines: z.number(),\n // @ts-ignore\n align: z.enum([\"bottom-left\"]),\n })\n .describe(\"Defines text on the PCB\")\n\nexport type PcbTextInput = z.input<typeof pcb_text>\ntype InferredPcbText = z.infer<typeof pcb_text>\n\n/**\n * Defines text on the PCB\n */\nexport interface PcbText {\n type: \"pcb_text\"\n pcb_text_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n text: string\n center: Point\n layer: LayerRef\n width: Length\n height: Length\n lines: number\n // @ts-ignore\n align: \"bottom-left\"\n}\n\n/**\n * @deprecated use PcbText\n */\nexport type PCBText = PcbText\n\nexpectTypesMatch<PcbText, InferredPcbText>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst positive_width = distance.pipe(z.number().finite().positive())\n\nexport const pcb_trace_route_point_wire = z\n .object({\n route_type: z.literal(\"wire\"),\n x: distance,\n y: distance,\n width: distance,\n start_width: positive_width.optional(),\n end_width: positive_width.optional(),\n width_interpolation_mode: z.enum([\"linear\", \"quadratic\"]).optional(),\n copper_pour_id: z.string().optional(),\n is_inside_copper_pour: z.boolean().optional(),\n start_pcb_port_id: z.string().optional(),\n end_pcb_port_id: z.string().optional(),\n layer: layer_ref,\n })\n .superRefine((wire, ctx) => {\n const present = [\n wire.start_width,\n wire.end_width,\n wire.width_interpolation_mode,\n ].filter((v) => v !== undefined).length\n if (present === 0) return\n if (present !== 3) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Wire taper requires start_width, end_width and width_interpolation_mode together\",\n })\n }\n if (wire.width !== wire.start_width) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"start_width\"],\n message: \"start_width must equal width\",\n })\n }\n if (!Number.isFinite(wire.x) || !Number.isFinite(wire.y)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Tapered wire coordinates must be finite\",\n })\n }\n })\n\nexport const pcb_trace_route_point_via = z.object({\n route_type: z.literal(\"via\"),\n x: distance,\n y: distance,\n copper_pour_id: z.string().optional(),\n is_inside_copper_pour: z.boolean().optional(),\n hole_diameter: distance.optional(),\n outer_diameter: distance.optional(),\n tented_on_top: z.boolean().optional(),\n tented_on_bottom: z.boolean().optional(),\n from_layer: layer_ref,\n to_layer: layer_ref,\n})\n\nexport const pcb_trace_route_point_through_pad = z.object({\n route_type: z.literal(\"through_pad\"),\n start: point,\n end: point,\n width: distance,\n start_layer: layer_ref,\n end_layer: layer_ref,\n pcb_smtpad_id: z.string().optional(),\n pcb_plated_hole_id: z.string().optional(),\n})\n\nexport const pcb_trace_route_point = z.union([\n pcb_trace_route_point_wire,\n pcb_trace_route_point_via,\n pcb_trace_route_point_through_pad,\n])\ntype InferredPcbTraceRoutePoint = z.infer<typeof pcb_trace_route_point>\n\nexport const pcb_trace = z\n .object({\n type: z.literal(\"pcb_trace\"),\n source_trace_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n pcb_trace_id: getZodPrefixedIdWithDefault(\"pcb_trace\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n route_thickness_mode: z\n .enum([\"constant\", \"interpolated\"])\n .default(\"constant\")\n .optional(),\n route_order_index: z.number().optional(),\n should_round_corners: z.boolean().optional(),\n trace_length: z.number().optional(),\n is_antenna_trace: z.boolean().optional(),\n highlight_color: z.string().optional(),\n route: z.array(pcb_trace_route_point).superRefine((route, ctx) => {\n for (const [i, wire] of route.entries()) {\n if (\n wire.route_type !== \"wire\" ||\n wire.width_interpolation_mode === undefined\n )\n continue\n const next = route[i + 1]\n const end = next?.route_type === \"through_pad\" ? next.start : next\n const layer =\n next?.route_type === \"wire\"\n ? next.layer\n : next?.route_type === \"via\"\n ? next.from_layer\n : next?.start_layer\n const length = end ? Math.hypot(end.x - wire.x, end.y - wire.y) : NaN\n if (!Number.isFinite(length) || length <= 0 || layer !== wire.layer) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [i],\n message:\n \"Tapered wire must lead to a distinct finite next point on the same layer\",\n })\n }\n }\n }),\n })\n .describe(\"Defines a trace on the PCB\")\n\nexport type PcbTraceInput = z.input<typeof pcb_trace>\ntype InferredPcbTrace = z.infer<typeof pcb_trace>\n\nexport interface PcbTraceRoutePointWire {\n route_type: \"wire\"\n x: Distance\n y: Distance\n width: Distance\n /** Outgoing segment taper; all three fields must be specified together. */\n start_width?: Distance\n end_width?: Distance\n width_interpolation_mode?: \"linear\" | \"quadratic\"\n copper_pour_id?: string\n is_inside_copper_pour?: boolean\n start_pcb_port_id?: string\n end_pcb_port_id?: string\n layer: LayerRef\n}\n\nexport interface PcbTraceRoutePointVia {\n route_type: \"via\"\n x: Distance\n y: Distance\n copper_pour_id?: string\n is_inside_copper_pour?: boolean\n hole_diameter?: Distance\n outer_diameter?: Distance\n tented_on_top?: boolean\n tented_on_bottom?: boolean\n from_layer: LayerRef\n to_layer: LayerRef\n}\n\nexport interface PcbTraceRoutePointThroughPad {\n route_type: \"through_pad\"\n start: Point\n end: Point\n width: Distance\n start_layer: LayerRef\n end_layer: LayerRef\n pcb_smtpad_id?: string\n pcb_plated_hole_id?: string\n}\n\nexport type PcbTraceRoutePoint =\n | PcbTraceRoutePointWire\n | PcbTraceRoutePointVia\n | PcbTraceRoutePointThroughPad\n\n/**\n * Defines a trace on the PCB\n */\nexport interface PcbTrace {\n type: \"pcb_trace\"\n source_trace_id?: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_trace_id: string\n /**\n * The order that this trace was routed in. This can be used to debug the\n * autorouter and to understand the trace path better\n *\n * The route_order_index should be relative to a subcircuit\n */\n route_order_index?: number\n route_thickness_mode?: \"constant\" | \"interpolated\"\n should_round_corners?: boolean\n trace_length?: number\n is_antenna_trace?: boolean\n highlight_color?: string\n route: Array<PcbTraceRoutePoint>\n}\n\n/**\n * @deprecated use PcbTrace\n */\nexport type PCBTrace = PcbTrace\n\n/**\n * @deprecated use PcbTraceInput\n */\nexport type PCBTraceInput = PcbTraceInput\n\nexpectTypesMatch<PcbTraceRoutePoint, InferredPcbTraceRoutePoint>(true)\nexpectTypesMatch<PcbTrace, InferredPcbTrace>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_warning = z\n .object({\n type: z.literal(\"pcb_trace_warning\"),\n pcb_trace_warning_id: getZodPrefixedIdWithDefault(\"pcb_trace_warning\"),\n warning_type: z.literal(\"pcb_trace_warning\").default(\"pcb_trace_warning\"),\n message: z.string(),\n center: point.optional(),\n pcb_trace_id: z.string(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a trace warning on the PCB\")\n\nexport type PcbTraceWarningInput = z.input<typeof pcb_trace_warning>\ntype InferredPcbTraceWarning = z.infer<typeof pcb_trace_warning>\n\n/**\n * Defines a trace warning on the PCB\n */\nexport interface PcbTraceWarning {\n type: \"pcb_trace_warning\"\n pcb_trace_warning_id: string\n warning_type: \"pcb_trace_warning\"\n message: string\n center?: Point\n pcb_trace_id: string\n source_trace_id: string\n pcb_component_ids: string[]\n pcb_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbTraceWarning, InferredPcbTraceWarning>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_too_long_error = z\n .object({\n type: z.literal(\"pcb_trace_too_long_error\"),\n pcb_trace_too_long_error_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_too_long_error\",\n ),\n error_type: z\n .literal(\"pcb_trace_too_long_error\")\n .default(\"pcb_trace_too_long_error\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_net_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n actual_trace_length: distance,\n maximum_trace_length: distance,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a PCB trace is longer than its maximum allowed length\",\n )\n\nexport type PcbTraceTooLongErrorInput = z.input<typeof pcb_trace_too_long_error>\ntype InferredPcbTraceTooLongError = z.infer<typeof pcb_trace_too_long_error>\n\n/** Error emitted when a PCB trace is longer than its maximum allowed length */\nexport interface PcbTraceTooLongError {\n type: \"pcb_trace_too_long_error\"\n pcb_trace_too_long_error_id: string\n error_type: \"pcb_trace_too_long_error\"\n message: string\n pcb_trace_id: string\n source_net_id?: string\n source_trace_id?: string\n actual_trace_length: Distance\n maximum_trace_length: Distance\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbTraceTooLongError, InferredPcbTraceTooLongError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** The routed lengths of a bus's members exceed its allowed skew. */\nexport interface PcbBusLengthSkewError extends BaseCircuitJsonError {\n type: \"pcb_bus_length_skew_error\"\n pcb_bus_length_skew_error_id: string\n error_type: \"pcb_bus_length_skew_error\"\n source_bus_id: string\n source_trace_ids: string[]\n pcb_trace_ids: string[]\n actual_length_skew: number\n maximum_length_skew: number\n subcircuit_id?: string\n}\n\nexport const pcb_bus_length_skew_error = base_circuit_json_error.extend({\n type: z.literal(\"pcb_bus_length_skew_error\"),\n pcb_bus_length_skew_error_id: getZodPrefixedIdWithDefault(\n \"pcb_bus_length_skew_error\",\n ),\n error_type: z\n .literal(\"pcb_bus_length_skew_error\")\n .default(\"pcb_bus_length_skew_error\"),\n source_bus_id: z.string(),\n source_trace_ids: z.array(z.string()),\n pcb_trace_ids: z.array(z.string()),\n actual_length_skew: z.number().nonnegative().finite(),\n maximum_length_skew: z.number().nonnegative().finite(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type PcbBusLengthSkewErrorInput = z.input<\n typeof pcb_bus_length_skew_error\n>\nexpectTypesMatch<\n PcbBusLengthSkewError,\n z.infer<typeof pcb_bus_length_skew_error>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_too_long_warning = z\n .object({\n type: z.literal(\"pcb_trace_too_long_warning\"),\n pcb_trace_too_long_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_too_long_warning\",\n ),\n warning_type: z\n .literal(\"pcb_trace_too_long_warning\")\n .default(\"pcb_trace_too_long_warning\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_net_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n actual_trace_length: distance,\n maximum_trace_length: distance,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a PCB trace is longer than its maximum allowed length\",\n )\n\nexport type PcbTraceTooLongWarningInput = z.input<\n typeof pcb_trace_too_long_warning\n>\ntype InferredPcbTraceTooLongWarning = z.infer<typeof pcb_trace_too_long_warning>\n\n/** Warning emitted when a PCB trace is longer than its maximum allowed length */\nexport interface PcbTraceTooLongWarning {\n type: \"pcb_trace_too_long_warning\"\n pcb_trace_too_long_warning_id: string\n warning_type: \"pcb_trace_too_long_warning\"\n message: string\n pcb_trace_id: string\n source_net_id?: string\n source_trace_id?: string\n actual_trace_length: Distance\n maximum_trace_length: Distance\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbTraceTooLongWarning, InferredPcbTraceTooLongWarning>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_too_many_vias_warning = z\n .object({\n type: z.literal(\"pcb_trace_too_many_vias_warning\"),\n pcb_trace_too_many_vias_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_too_many_vias_warning\",\n ),\n warning_type: z\n .literal(\"pcb_trace_too_many_vias_warning\")\n .default(\"pcb_trace_too_many_vias_warning\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_net_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n actual_via_count: z.number().int().nonnegative(),\n maximum_via_count: z.number().int().nonnegative(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a PCB trace has more vias than its maximum allowed count\",\n )\n\nexport type PcbTraceTooManyViasWarningInput = z.input<\n typeof pcb_trace_too_many_vias_warning\n>\ntype InferredPcbTraceTooManyViasWarning = z.infer<\n typeof pcb_trace_too_many_vias_warning\n>\n\n/** Warning emitted when a PCB trace has more vias than its maximum allowed count */\nexport interface PcbTraceTooManyViasWarning {\n type: \"pcb_trace_too_many_vias_warning\"\n pcb_trace_too_many_vias_warning_id: string\n warning_type: \"pcb_trace_too_many_vias_warning\"\n message: string\n pcb_trace_id: string\n source_net_id?: string\n source_trace_id?: string\n actual_via_count: number\n maximum_via_count: number\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbTraceTooManyViasWarning,\n InferredPcbTraceTooManyViasWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\n\n/** Rule-specific routing measurements. Lengths and centreline spacing are mm; impedance is ohms. */\nexport type PcbBusRoutingConstraintViolation =\n | {\n routing_rule: \"length_skew\"\n actual_length_skew: number\n maximum_length_skew: number\n }\n | {\n routing_rule: \"min_length\"\n actual_trace_length: number\n minimum_trace_length: number\n }\n | {\n routing_rule: \"max_length\"\n actual_trace_length: number\n maximum_trace_length: number\n }\n | {\n routing_rule: \"target_length\"\n actual_trace_length: number\n target_trace_length: number\n length_tolerance: number\n }\n | {\n routing_rule: \"pcb_trace_spacing\"\n other_pcb_trace_id: string\n other_source_trace_id?: string\n actual_centerline_spacing: number\n minimum_centerline_spacing: number\n }\n | {\n routing_rule: \"pcb_spacing_to_other_signals\"\n other_pcb_trace_id: string\n other_source_trace_id?: string\n actual_centerline_spacing: number\n minimum_centerline_spacing: number\n }\n | {\n routing_rule: \"impedance_target\"\n target_impedance: number\n minimum_impedance?: number\n maximum_impedance?: number\n }\n\ninterface PcbBusRoutingConstraintErrorBase extends BaseCircuitJsonError {\n type: \"pcb_bus_routing_constraint_error\"\n pcb_bus_routing_constraint_error_id: string\n error_type: \"pcb_bus_routing_constraint_error\"\n source_bus_id: string\n source_trace_ids: string[]\n pcb_trace_ids: string[]\n subcircuit_id?: string\n}\n\n/** A declared bus or differential-pair routing constraint is violated. */\ntype WithErrorContext<Violation> = Violation extends unknown\n ? {\n [Key in keyof (PcbBusRoutingConstraintErrorBase &\n Violation)]: (PcbBusRoutingConstraintErrorBase & Violation)[Key]\n }\n : never\nexport type PcbBusRoutingConstraintError =\n WithErrorContext<PcbBusRoutingConstraintViolation>\n\nconst error_base = base_circuit_json_error.extend({\n type: z.literal(\"pcb_bus_routing_constraint_error\"),\n pcb_bus_routing_constraint_error_id: getZodPrefixedIdWithDefault(\n \"pcb_bus_routing_constraint_error\",\n ),\n error_type: z\n .literal(\"pcb_bus_routing_constraint_error\")\n .default(\"pcb_bus_routing_constraint_error\"),\n source_bus_id: z.string(),\n source_trace_ids: z.array(z.string()).min(1),\n pcb_trace_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n})\n\nexport const pcb_bus_routing_constraint_error = z\n .discriminatedUnion(\"routing_rule\", [\n error_base.extend({\n routing_rule: z.literal(\"length_skew\"),\n actual_length_skew: z.number().nonnegative().finite(),\n maximum_length_skew: z.number().nonnegative().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"min_length\"),\n actual_trace_length: z.number().nonnegative().finite(),\n minimum_trace_length: z.number().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"max_length\"),\n actual_trace_length: z.number().nonnegative().finite(),\n maximum_trace_length: z.number().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"target_length\"),\n actual_trace_length: z.number().nonnegative().finite(),\n target_trace_length: z.number().finite(),\n length_tolerance: z.number().nonnegative().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"pcb_trace_spacing\"),\n other_pcb_trace_id: z.string(),\n other_source_trace_id: z.string().optional(),\n actual_centerline_spacing: z.number().nonnegative().finite(),\n minimum_centerline_spacing: z.number().positive().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"pcb_spacing_to_other_signals\"),\n other_pcb_trace_id: z.string(),\n other_source_trace_id: z.string().optional(),\n actual_centerline_spacing: z.number().nonnegative().finite(),\n minimum_centerline_spacing: z.number().positive().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"impedance_target\"),\n target_impedance: z.number().positive().finite(),\n minimum_impedance: z.number().positive().finite().optional(),\n maximum_impedance: z.number().positive().finite().optional(),\n }),\n ])\n .superRefine((error, ctx) => {\n if (error.routing_rule !== \"impedance_target\") return\n if (\n error.minimum_impedance === undefined &&\n error.maximum_impedance === undefined\n )\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"minimum_impedance\"],\n message: \"Provide an impedance bound\",\n })\n if (\n error.minimum_impedance !== undefined &&\n error.maximum_impedance !== undefined &&\n error.minimum_impedance > error.maximum_impedance\n )\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"maximum_impedance\"],\n message: \"Impedance bounds must be ordered\",\n })\n })\n .describe(\n \"A declared bus or differential-pair routing constraint is violated.\",\n )\n\nexport type PcbBusRoutingConstraintErrorInput = z.input<\n typeof pcb_bus_routing_constraint_error\n>\nexpectTypesMatch<\n PcbBusRoutingConstraintError,\n z.infer<typeof pcb_bus_routing_constraint_error>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** A declared bus or pair constraint could not be verified; this is not a pass. */\ninterface PcbBusRoutingConstraintWarningBase {\n type: \"pcb_bus_routing_constraint_warning\"\n pcb_bus_routing_constraint_warning_id: string\n warning_type: \"pcb_bus_routing_constraint_warning\"\n source_bus_id: string\n source_trace_ids: string[]\n pcb_trace_ids: string[]\n message: string\n subcircuit_id?: string\n}\n\nconst warning_base = z\n .object({\n type: z.literal(\"pcb_bus_routing_constraint_warning\"),\n pcb_bus_routing_constraint_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_bus_routing_constraint_warning\",\n ),\n warning_type: z\n .literal(\"pcb_bus_routing_constraint_warning\")\n .default(\"pcb_bus_routing_constraint_warning\"),\n source_bus_id: z.string(),\n source_trace_ids: z.array(z.string()).min(1),\n pcb_trace_ids: z.array(z.string()),\n message: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"A declared bus or pair constraint could not be verified; this is not a pass.\",\n )\n\ntype WarningRule =\n | \"route_geometry\"\n | \"reference_geometry\"\n | \"spacing_geometry\"\n | \"target_length\"\n | \"physical_impedance\"\ntype WithWarningContext<Rule> = Rule extends WarningRule\n ? {\n [Key in keyof (PcbBusRoutingConstraintWarningBase & {\n routing_rule: Rule\n })]: (PcbBusRoutingConstraintWarningBase & { routing_rule: Rule })[Key]\n }\n : never\nexport type PcbBusRoutingConstraintWarning = WithWarningContext<WarningRule>\n\nexport const pcb_bus_routing_constraint_warning = z.discriminatedUnion(\n \"routing_rule\",\n [\n warning_base.extend({ routing_rule: z.literal(\"route_geometry\") }),\n warning_base.extend({ routing_rule: z.literal(\"reference_geometry\") }),\n warning_base.extend({ routing_rule: z.literal(\"spacing_geometry\") }),\n warning_base.extend({ routing_rule: z.literal(\"target_length\") }),\n warning_base.extend({ routing_rule: z.literal(\"physical_impedance\") }),\n ],\n)\n\nexport type PcbBusRoutingConstraintWarningInput = z.input<\n typeof pcb_bus_routing_constraint_warning\n>\nexpectTypesMatch<\n PcbBusRoutingConstraintWarning,\n z.infer<typeof pcb_bus_routing_constraint_warning>\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_trace_error\"),\n pcb_trace_error_id: getZodPrefixedIdWithDefault(\"pcb_trace_error\"),\n error_type: z.literal(\"pcb_trace_error\").default(\"pcb_trace_error\"),\n center: point.optional(),\n pcb_trace_id: z.string(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a trace error on the PCB\")\n\nexport type PcbTraceErrorInput = z.input<typeof pcb_trace_error>\ntype InferredPcbTraceError = z.infer<typeof pcb_trace_error>\n\n/**\n * Defines a trace error on the PCB\n */\nexport interface PcbTraceError extends BaseCircuitJsonError {\n type: \"pcb_trace_error\"\n pcb_trace_error_id: string\n error_type: \"pcb_trace_error\"\n center?: Point\n pcb_trace_id: string\n source_trace_id: string\n pcb_component_ids: string[]\n pcb_port_ids: string[]\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbTraceError\n */\nexport type PCBTraceError = PcbTraceError\n\nexpectTypesMatch<PcbTraceError, InferredPcbTraceError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_missing_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_trace_missing_error\"),\n pcb_trace_missing_error_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_missing_error\",\n ),\n error_type: z\n .literal(\"pcb_trace_missing_error\")\n .default(\"pcb_trace_missing_error\"),\n center: point.optional(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Defines an error when a source trace has no corresponding PCB trace\",\n )\n\nexport type PcbTraceMissingErrorInput = z.input<typeof pcb_trace_missing_error>\ntype InferredPcbTraceMissingError = z.infer<typeof pcb_trace_missing_error>\n\n/**\n * Defines an error when a source trace has no corresponding PCB trace\n */\nexport interface PcbTraceMissingError extends BaseCircuitJsonError {\n type: \"pcb_trace_missing_error\"\n pcb_trace_missing_error_id: string\n error_type: \"pcb_trace_missing_error\"\n center?: Point\n source_trace_id: string\n pcb_component_ids: string[]\n pcb_port_ids: string[]\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbTraceMissingError\n */\nexport type PCBTraceMissingError = PcbTraceMissingError\n\nexpectTypesMatch<PcbTraceMissingError, InferredPcbTraceMissingError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port_not_matched_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_port_not_matched_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_port_not_matched_error\")\n .default(\"pcb_port_not_matched_error\"),\n pcb_component_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a trace error on the PCB where a port is not matched\")\n\nexport type PcbPortNotMatchedErrorInput = z.input<\n typeof pcb_port_not_matched_error\n>\ntype InferredPcbPortNotMatchedError = z.infer<typeof pcb_port_not_matched_error>\n\n/**\n * Defines a trace error on the PCB where a port is not matched\n */\nexport interface PcbPortNotMatchedError extends BaseCircuitJsonError {\n type: \"pcb_port_not_matched_error\"\n pcb_error_id: string\n error_type: \"pcb_port_not_matched_error\"\n pcb_component_ids: string[]\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPortNotMatchedError\n */\nexport type PCBPortNotMatchedError = PcbPortNotMatchedError\n\nexpectTypesMatch<PcbPortNotMatchedError, InferredPcbPortNotMatchedError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port_not_connected_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_port_not_connected_error\"),\n pcb_port_not_connected_error_id: getZodPrefixedIdWithDefault(\n \"pcb_port_not_connected_error\",\n ),\n error_type: z\n .literal(\"pcb_port_not_connected_error\")\n .default(\"pcb_port_not_connected_error\"),\n pcb_port_ids: z.array(z.string()),\n pcb_component_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines an error when a pcb port is not connected to any trace\")\n\nexport type PcbPortNotConnectedErrorInput = z.input<\n typeof pcb_port_not_connected_error\n>\ntype InferredPcbPortNotConnectedError = z.infer<\n typeof pcb_port_not_connected_error\n>\n\n/**\n * Defines an error when a pcb port is not connected to any trace\n */\nexport interface PcbPortNotConnectedError extends BaseCircuitJsonError {\n type: \"pcb_port_not_connected_error\"\n pcb_port_not_connected_error_id: string\n error_type: \"pcb_port_not_connected_error\"\n pcb_port_ids: string[]\n pcb_component_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbPortNotConnectedError, InferredPcbPortNotConnectedError>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_net = z\n .object({\n type: z.literal(\"pcb_net\"),\n pcb_net_id: getZodPrefixedIdWithDefault(\"pcb_net\"),\n source_net_id: z.string().optional(),\n highlight_color: z.string().optional(),\n })\n .describe(\"Defines a net on the PCB\")\n\nexport type PcbNetInput = z.input<typeof pcb_net>\ntype InferredPcbNet = z.infer<typeof pcb_net>\n\n/**\n * Defines a net on the PCB\n */\nexport interface PcbNet {\n type: \"pcb_net\"\n pcb_net_id: string\n source_net_id?: string\n highlight_color?: string\n}\n\nexpectTypesMatch<PcbNet, InferredPcbNet>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_via = z\n .object({\n type: z.literal(\"pcb_via\"),\n pcb_via_id: getZodPrefixedIdWithDefault(\"pcb_via\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n x: distance,\n y: distance,\n outer_diameter: distance.default(\"0.6mm\"),\n hole_diameter: distance.default(\"0.25mm\"),\n topmost_drill_layer: layer_ref.optional(),\n bottommost_drill_layer: layer_ref.optional(),\n through_hole: z.boolean().optional(),\n /** @deprecated */\n from_layer: layer_ref.optional(),\n /** @deprecated */\n to_layer: layer_ref.optional(),\n layers: z.array(layer_ref),\n /** PCB ports belonging to this via, including layer ports and aliases. */\n pcb_port_ids: z.array(z.string()).optional(),\n pcb_trace_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n source_net_id: z.string().min(1).optional(),\n net_is_assignable: z.boolean().optional(),\n net_assigned: z.boolean().optional(),\n /** @deprecated Use tented_on_top and tented_on_bottom instead. */\n is_tented: z.boolean().optional(),\n tented_on_top: z.boolean().optional(),\n tented_on_bottom: z.boolean().optional(),\n })\n .transform(({ is_tented, ...via }) => {\n if (is_tented !== undefined) {\n via.tented_on_top ??= is_tented\n via.tented_on_bottom ??= is_tented\n }\n return via\n })\n .describe(\"Defines a via on the PCB\")\n\nexport type PcbViaInput = z.input<typeof pcb_via>\ntype InferredPcbVia = z.infer<typeof pcb_via>\n\n/**\n * Defines a via on the PCB\n */\nexport interface PcbVia {\n type: \"pcb_via\"\n pcb_via_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n x: Distance\n y: Distance\n outer_diameter: Distance\n hole_diameter: Distance\n topmost_drill_layer?: LayerRef\n bottommost_drill_layer?: LayerRef\n through_hole?: boolean\n /** @deprecated */\n from_layer?: LayerRef\n /** @deprecated */\n to_layer?: LayerRef\n layers: LayerRef[]\n /** PCB ports belonging to this via, including layer ports and aliases. */\n pcb_port_ids?: string[]\n pcb_trace_id?: string\n source_trace_id?: string\n source_net_id?: string\n net_is_assignable?: boolean\n net_assigned?: boolean\n tented_on_top?: boolean\n tented_on_bottom?: boolean\n}\n\n/**\n * @deprecated use PcbVia\n */\nexport type PCBVia = PcbVia\n\nexpectTypesMatch<PcbVia, InferredPcbVia>(true)\n","import {\n type NinePointAnchor,\n type Point,\n getZodPrefixedIdWithDefault,\n ninePointAnchor,\n point,\n} from \"src/common\"\nimport {\n type ManufacturingDrcProperties,\n manufacturing_drc_properties,\n} from \"src/pcb/properties/manufacturing_drc_properties\"\nimport { type Length, length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport const pcb_board = z\n .object({\n type: z.literal(\"pcb_board\"),\n pcb_board_id: getZodPrefixedIdWithDefault(\"pcb_board\"),\n pcb_panel_id: z.string().optional(),\n carrier_pcb_board_id: z.string().optional(),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n is_mounted_to_carrier_board: z.boolean().optional(),\n is_via_in_pad_allowed: z.boolean().optional(),\n default_via_tented_on_top: z.boolean().optional(),\n default_via_tented_on_bottom: z.boolean().optional(),\n default_via_plugged: z.boolean().optional(),\n width: length.optional(),\n height: length.optional(),\n center: point,\n display_offset_x: z\n .string()\n .optional()\n .describe(\n \"How to display the x offset for this board, usually corresponding with how the user specified it\",\n ),\n display_offset_y: z\n .string()\n .optional()\n .describe(\n \"How to display the y offset for this board, usually corresponding with how the user specified it\",\n ),\n thickness: length.optional().default(1.4),\n num_layers: z.number().optional().default(4),\n allow_blind_and_buried_vias: z\n .boolean()\n .optional()\n .describe(\n \"Whether autorouters may generate blind and buried vias. False restricts newly generated vias to the full board stack.\",\n ),\n outline: z.array(point).optional(),\n shape: z.enum([\"rect\", \"polygon\"]).optional(),\n material: z.enum([\"fr4\", \"fr1\", \"flex\"]).default(\"fr4\"),\n solder_mask_color: z.string().optional(),\n silkscreen_color: z.string().optional(),\n anchor_position: point.optional(),\n anchor_alignment: ninePointAnchor.optional(),\n position_mode: z.enum([\"relative_to_panel_anchor\", \"none\"]).optional(),\n })\n .merge(manufacturing_drc_properties)\n .describe(\"Defines the board outline of the PCB\")\n\n/**\n * Defines the board outline of the PCB\n */\nexport interface PcbBoard extends ManufacturingDrcProperties {\n type: \"pcb_board\"\n pcb_board_id: string\n pcb_panel_id?: string\n carrier_pcb_board_id?: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n is_mounted_to_carrier_board?: boolean\n is_via_in_pad_allowed?: boolean\n default_via_tented_on_top?: boolean\n default_via_tented_on_bottom?: boolean\n default_via_plugged?: boolean\n width?: Length\n height?: Length\n display_offset_x?: string\n display_offset_y?: string\n thickness: Length\n num_layers: number\n /** Whether autorouters may generate blind and buried vias. */\n allow_blind_and_buried_vias?: boolean\n center: Point\n outline?: Point[]\n shape?: \"rect\" | \"polygon\"\n material: \"fr4\" | \"fr1\" | \"flex\"\n solder_mask_color?: string\n silkscreen_color?: string\n anchor_position?: Point\n anchor_alignment?: NinePointAnchor\n position_mode?: \"relative_to_panel_anchor\" | \"none\"\n}\n\nexport type PcbBoardInput = z.input<typeof pcb_board>\ntype InferredPcbBoard = z.infer<typeof pcb_board>\n\n/**\n * @deprecated use PcbBoard\n */\nexport type PCBBoard = PcbBoard\n\nexpectTypesMatch<PcbBoard, InferredPcbBoard>(true)\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nconst finite_point = point.extend({\n x: length.pipe(z.number().finite()),\n y: length.pipe(z.number().finite()),\n})\n\nexport const pcb_bend = z\n .object({\n type: z.literal(\"pcb_bend\"),\n pcb_bend_id: getZodPrefixedIdWithDefault(\"pcb_bend\"),\n pcb_board_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n start: finite_point,\n end: finite_point,\n bend_angle: rotation.pipe(z.number().finite()),\n bend_radius: length.pipe(z.number().finite().positive()),\n bend_side: z.enum([\"left\", \"right\"]),\n })\n .refine(({ start, end }) => start.x !== end.x || start.y !== end.y, {\n message: \"Bend centerline endpoints must be distinct\",\n path: [\"end\"],\n })\n .describe(\n \"Defines a finite-radius bend on a flat PCB for runtime CAD folding\",\n )\n\nexport type PcbBendInput = z.input<typeof pcb_bend>\ntype InferredPcbBend = z.infer<typeof pcb_bend>\n\n/** Defines a bend without changing the flat PCB layout or stored CAD poses. */\nexport interface PcbBend {\n type: \"pcb_bend\"\n pcb_bend_id: string\n pcb_board_id: string\n /** Ownership only; group transforms are already resolved into board coordinates. */\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n /** Bend-zone centerline endpoints, relative to the flat board center, in mm. */\n start: Point\n end: Point\n /** Target angle in signed degrees; positive folds the moving side toward local top. Zero is flat. */\n bend_angle: Rotation\n /** Positive radius at the neutral surface, in mm. Zone width is radius times absolute angle in radians. */\n bend_radius: Length\n /** Moving side looking from start toward end in the flat top view. */\n bend_side: \"left\" | \"right\"\n}\n\nexpectTypesMatch<PcbBend, InferredPcbBend>(true)\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nconst positive_length = length.pipe(z.number().finite().positive())\nconst finite_point = point.extend({\n x: length.pipe(z.number().finite()),\n y: length.pipe(z.number().finite()),\n})\n\nconst pcb_stiffener_base = z.object({\n type: z.literal(\"pcb_stiffener\"),\n pcb_stiffener_id: getZodPrefixedIdWithDefault(\"pcb_stiffener\"),\n pcb_board_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n layer: z.enum([\"top\", \"bottom\"]),\n material: z.enum([\"fr4\", \"polyimide\", \"stainless_steel\", \"aluminum\"]),\n thickness: positive_length,\n adhesive_thickness: length.pipe(z.number().finite().nonnegative()).optional(),\n})\n\n/** Common properties of bonded PCB reinforcement. */\nexport interface PcbStiffenerBase {\n type: \"pcb_stiffener\"\n pcb_stiffener_id: string\n pcb_board_id: string\n /** Ownership only; geometry is already resolved into board coordinates. */\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n /** Attachment face, not an additional copper layer. */\n layer: \"top\" | \"bottom\"\n material: \"fr4\" | \"polyimide\" | \"stainless_steel\" | \"aluminum\"\n /** Material thickness in mm, excluding the PCB and adhesive. */\n thickness: Length\n /** Adhesive thickness in mm; omission means unspecified, not zero. */\n adhesive_thickness?: Length\n}\n\nexport const pcb_stiffener_rect = pcb_stiffener_base.extend({\n shape: z.literal(\"rect\"),\n center: finite_point,\n rotation: rotation.pipe(z.number().finite()).optional(),\n width: positive_length,\n height: positive_length,\n outline: z.never().optional(),\n})\n\nexport type PcbStiffenerRectInput = z.input<typeof pcb_stiffener_rect>\n/** A rectangular reinforcement bonded to one face of the PCB. */\nexport interface PcbStiffenerRect extends PcbStiffenerBase {\n shape: \"rect\"\n /** Relative to the flat board center, in mm. */\n center: Point\n /** Degrees counterclockwise in the flat top view; omission means zero. */\n rotation?: Rotation\n width: Length\n height: Length\n outline?: never\n}\nexpectTypesMatch<PcbStiffenerRect, z.infer<typeof pcb_stiffener_rect>>(true)\n\nexport const pcb_stiffener_polygon = pcb_stiffener_base.extend({\n shape: z.literal(\"polygon\"),\n outline: z\n .array(finite_point)\n .min(3)\n .refine((points) => {\n const twice_area = points.reduce((sum, p, i) => {\n const next = points[(i + 1) % points.length]!\n return sum + p.x * next.y - next.x * p.y\n }, 0)\n return Number.isFinite(twice_area) && twice_area !== 0\n }, \"Stiffener outline must enclose a nonzero area\"),\n center: z.never().optional(),\n rotation: z.never().optional(),\n width: z.never().optional(),\n height: z.never().optional(),\n})\n\nexport type PcbStiffenerPolygonInput = z.input<typeof pcb_stiffener_polygon>\n/** A polygonal reinforcement with resolved flat-board geometry. */\nexport interface PcbStiffenerPolygon extends PcbStiffenerBase {\n shape: \"polygon\"\n /** Implicitly closed vertices relative to the flat board center, in mm. All placement/rotation is baked in. */\n outline: Point[]\n center?: never\n rotation?: never\n width?: never\n height?: never\n}\nexpectTypesMatch<PcbStiffenerPolygon, z.infer<typeof pcb_stiffener_polygon>>(\n true,\n)\n\nexport const pcb_stiffener = z\n .discriminatedUnion(\"shape\", [pcb_stiffener_rect, pcb_stiffener_polygon])\n .describe(\n \"Defines bonded mechanical PCB reinforcement without adding copper layers\",\n )\n\nexport type PcbStiffenerInput = z.input<typeof pcb_stiffener>\nexport type PcbStiffener = PcbStiffenerRect | PcbStiffenerPolygon\nexpectTypesMatch<PcbStiffener, z.infer<typeof pcb_stiffener>>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_panel = z\n .object({\n type: z.literal(\"pcb_panel\"),\n pcb_panel_id: getZodPrefixedIdWithDefault(\"pcb_panel\"),\n width: length,\n height: length,\n center: point,\n thickness: length.optional().default(1.4),\n covered_with_solder_mask: z.boolean().optional().default(true),\n })\n .describe(\"Defines a PCB panel that can contain multiple boards\")\n\n/**\n * Defines a PCB panel that can contain multiple boards\n */\nexport interface PcbPanel {\n type: \"pcb_panel\"\n pcb_panel_id: string\n width: Length\n height: Length\n center: Point\n thickness: Length\n covered_with_solder_mask: boolean\n}\n\nexport type PcbPanelInput = z.input<typeof pcb_panel>\ntype InferredPcbPanel = z.infer<typeof pcb_panel>\n\n/**\n * @deprecated use PcbPanel\n */\nexport type PCBPanel = PcbPanel\n\nexpectTypesMatch<PcbPanel, InferredPcbPanel>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_placement_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_placement_error\"),\n pcb_placement_error_id: getZodPrefixedIdWithDefault(\"pcb_placement_error\"),\n error_type: z.literal(\"pcb_placement_error\").default(\"pcb_placement_error\"),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a placement error on the PCB\")\n\nexport type PcbPlacementErrorInput = z.input<typeof pcb_placement_error>\ntype InferredPcbPlacementError = z.infer<typeof pcb_placement_error>\n\n/**\n * Defines a placement error on the PCB\n */\nexport interface PcbPlacementError extends BaseCircuitJsonError {\n type: \"pcb_placement_error\"\n pcb_placement_error_id: string\n error_type: \"pcb_placement_error\"\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPlacementError\n */\nexport type PCBPlacementError = PcbPlacementError\n\nexpectTypesMatch<PcbPlacementError, InferredPcbPlacementError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_packing_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_packing_error\"),\n pcb_packing_error_id: getZodPrefixedIdWithDefault(\"pcb_packing_error\"),\n error_type: z.literal(\"pcb_packing_error\").default(\"pcb_packing_error\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a failure to pack PCB components within layout bounds\")\n\nexport type PcbPackingErrorInput = z.input<typeof pcb_packing_error>\ntype InferredPcbPackingError = z.infer<typeof pcb_packing_error>\n\n/**\n * Defines a failure to pack PCB components within layout bounds\n */\nexport interface PcbPackingError extends BaseCircuitJsonError {\n type: \"pcb_packing_error\"\n pcb_packing_error_id: string\n error_type: \"pcb_packing_error\"\n pcb_group_id?: string\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPackingError\n */\nexport type PCBPackingError = PcbPackingError\n\nexpectTypesMatch<PcbPackingError, InferredPcbPackingError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_panelization_placement_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_panelization_placement_error\"),\n pcb_panelization_placement_error_id: getZodPrefixedIdWithDefault(\n \"pcb_panelization_placement_error\",\n ),\n error_type: z\n .literal(\"pcb_panelization_placement_error\")\n .default(\"pcb_panelization_placement_error\"),\n pcb_panel_id: z.string().optional(),\n pcb_board_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a panelization placement error on the PCB\")\n\nexport type PcbPanelizationPlacementErrorInput = z.input<\n typeof pcb_panelization_placement_error\n>\ntype InferredPcbPanelizationPlacementError = z.infer<\n typeof pcb_panelization_placement_error\n>\n\n/**\n * Defines a panelization placement error on the PCB\n */\nexport interface PcbPanelizationPlacementError extends BaseCircuitJsonError {\n type: \"pcb_panelization_placement_error\"\n pcb_panelization_placement_error_id: string\n error_type: \"pcb_panelization_placement_error\"\n pcb_panel_id?: string\n pcb_board_id?: string\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPanelizationPlacementError\n */\nexport type PCBPanelizationPlacementError = PcbPanelizationPlacementError\n\nexpectTypesMatch<\n PcbPanelizationPlacementError,\n InferredPcbPanelizationPlacementError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { route_hint_point, type RouteHintPoint } from \"src/pcb\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/**\n * A hint that can be used during generation of a PCB trace.\n */\nexport interface PcbTraceHint {\n type: \"pcb_trace_hint\"\n pcb_trace_hint_id: string\n pcb_port_id: string\n pcb_component_id: string\n route: RouteHintPoint[]\n subcircuit_id?: string\n}\n\nexport const pcb_trace_hint = z\n .object({\n type: z.literal(\"pcb_trace_hint\"),\n pcb_trace_hint_id: getZodPrefixedIdWithDefault(\"pcb_trace_hint\"),\n pcb_port_id: z.string(),\n pcb_component_id: z.string(),\n route: z.array(route_hint_point),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"A hint that can be used during generation of a PCB trace\")\n\nexport type PcbTraceHintInput = z.input<typeof pcb_trace_hint>\ntype InferredPcbTraceHint = z.infer<typeof pcb_trace_hint>\n\n/**\n * @deprecated use PcbTraceHint\n */\nexport type PCBTraceHint = PcbTraceHint\n\nexpectTypesMatch<PcbTraceHint, InferredPcbTraceHint>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport {\n layer_ref,\n type LayerRef,\n type VisibleLayer,\n visible_layer,\n} from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_line = z\n .object({\n type: z.literal(\"pcb_silkscreen_line\"),\n pcb_silkscreen_line_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_line\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n stroke_width: distance.default(\"0.1mm\"),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n layer: visible_layer,\n })\n .describe(\"Defines a silkscreen line on the PCB\")\n\nexport type PcbSilkscreenLineInput = z.input<typeof pcb_silkscreen_line>\ntype InferredPcbSilkscreenLine = z.infer<typeof pcb_silkscreen_line>\n\n/**\n * Defines a silkscreen line on the PCB\n */\nexport interface PcbSilkscreenLine {\n type: \"pcb_silkscreen_line\"\n pcb_silkscreen_line_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n stroke_width: Distance\n x1: Distance\n y1: Distance\n x2: Distance\n y2: Distance\n layer: VisibleLayer\n}\n\n/**\n * @deprecated use PcbSilkscreenLine\n */\nexport type PCBSilkscreenLine = PcbSilkscreenLine\n\nexpectTypesMatch<PcbSilkscreenLine, InferredPcbSilkscreenLine>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n visible_layer,\n type VisibleLayerRef,\n} from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_path = z\n .object({\n type: z.literal(\"pcb_silkscreen_path\"),\n pcb_silkscreen_path_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_path\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n route: z.array(point),\n stroke_width: length,\n })\n .describe(\"Defines a silkscreen path on the PCB\")\n\nexport type PcbSilkscreenPathInput = z.input<typeof pcb_silkscreen_path>\ntype InferredPcbSilkscreenPath = z.infer<typeof pcb_silkscreen_path>\n\n/**\n * Defines a silkscreen path on the PCB\n */\nexport interface PcbSilkscreenPath {\n type: \"pcb_silkscreen_path\"\n pcb_silkscreen_path_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayerRef\n route: Point[]\n stroke_width: Length\n}\n\n/**\n * @deprecated use PcbSilkscreenPath\n */\nexport type PcbSilkscreenPathDeprecated = PcbSilkscreenPath\n\nexpectTypesMatch<PcbSilkscreenPath, InferredPcbSilkscreenPath>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { distance, length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common/NinePointAnchor\"\n\nexport const pcb_silkscreen_text = z\n .object({\n type: z.literal(\"pcb_silkscreen_text\"),\n pcb_silkscreen_text_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_text\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"0.2mm\"),\n pcb_component_id: z.string(),\n text: z.string(),\n is_knockout: z.boolean().default(false).optional(),\n knockout_padding: z\n .object({\n left: length,\n top: length,\n bottom: length,\n right: length,\n })\n .default({\n left: \"0.2mm\",\n top: \"0.2mm\",\n bottom: \"0.2mm\",\n right: \"0.2mm\",\n })\n .optional(),\n ccw_rotation: z.number().optional(),\n layer: layer_ref,\n is_mirrored: z.boolean().default(false).optional(),\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: ninePointAnchor.default(\"center\"),\n })\n .describe(\"Defines silkscreen text on the PCB\")\n\nexport type PcbSilkscreenTextInput = z.input<typeof pcb_silkscreen_text>\ntype InferredPcbSilkscreenText = z.infer<typeof pcb_silkscreen_text>\n\n/**\n * Defines silkscreen text on the PCB\n */\nexport interface PcbSilkscreenText {\n type: \"pcb_silkscreen_text\"\n pcb_silkscreen_text_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n font: \"tscircuit2024\"\n font_size: Length\n pcb_component_id: string\n text: string\n is_knockout?: boolean\n knockout_padding?: {\n left: Length\n top: Length\n bottom: Length\n right: Length\n }\n ccw_rotation?: number\n layer: LayerRef\n is_mirrored?: boolean\n anchor_position: Point\n anchor_alignment: NinePointAnchor\n}\n\n/**\n * @deprecated use PcbSilkscreenText\n */\nexport type PCBSilkscreenText = PcbSilkscreenText\n\nexpectTypesMatch<PcbSilkscreenText, InferredPcbSilkscreenText>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { distance, length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common/NinePointAnchor\"\n\nexport const pcb_copper_text = z\n .object({\n type: z.literal(\"pcb_copper_text\"),\n pcb_copper_text_id: getZodPrefixedIdWithDefault(\"pcb_copper_text\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"0.2mm\"),\n pcb_component_id: z.string(),\n text: z.string(),\n is_knockout: z.boolean().default(false).optional(),\n knockout_padding: z\n .object({\n left: length,\n top: length,\n bottom: length,\n right: length,\n })\n .default({\n left: \"0.2mm\",\n top: \"0.2mm\",\n bottom: \"0.2mm\",\n right: \"0.2mm\",\n })\n .optional(),\n ccw_rotation: z.number().optional(),\n layer: layer_ref,\n is_mirrored: z.boolean().default(false).optional(),\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: ninePointAnchor.default(\"center\"),\n })\n .describe(\"Defines copper text on the PCB\")\n\nexport type PcbCopperTextInput = z.input<typeof pcb_copper_text>\ntype InferredPcbCopperText = z.infer<typeof pcb_copper_text>\n\n/**\n * Defines copper text on the PCB\n */\nexport interface PcbCopperText {\n type: \"pcb_copper_text\"\n pcb_copper_text_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n font: \"tscircuit2024\"\n font_size: Length\n pcb_component_id: string\n text: string\n is_knockout?: boolean\n knockout_padding?: {\n left: Length\n top: Length\n bottom: Length\n right: Length\n }\n ccw_rotation?: number\n layer: LayerRef\n is_mirrored?: boolean\n anchor_position: Point\n anchor_alignment: NinePointAnchor\n}\n\n/**\n * @deprecated use PcbCopperText\n */\nexport type PCBCopperText = PcbCopperText\n\nexpectTypesMatch<PcbCopperText, InferredPcbCopperText>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_rect = z\n .object({\n type: z.literal(\"pcb_silkscreen_rect\"),\n pcb_silkscreen_rect_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_rect\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: layer_ref,\n stroke_width: length.default(\"1mm\"),\n corner_radius: length.optional(),\n is_filled: z.boolean().default(true).optional(),\n has_stroke: z.boolean().optional(),\n is_stroke_dashed: z.boolean().optional(),\n ccw_rotation: z.number().optional(),\n })\n .describe(\"Defines a silkscreen rect on the PCB\")\n\nexport type PcbSilkscreenRectInput = z.input<typeof pcb_silkscreen_rect>\ntype InferredPcbSilkscreenRect = z.infer<typeof pcb_silkscreen_rect>\n\n/**\n * Defines a silkscreen rect on the PCB\n */\nexport interface PcbSilkscreenRect {\n type: \"pcb_silkscreen_rect\"\n pcb_silkscreen_rect_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: LayerRef\n stroke_width: Length\n corner_radius?: Length\n is_filled?: boolean\n has_stroke?: boolean\n is_stroke_dashed?: boolean\n ccw_rotation?: number\n}\n\n/**\n * @deprecated use PcbSilkscreenRect\n */\nexport type PcbSilkscreenRectOld = PcbSilkscreenRect\n\nexpectTypesMatch<PcbSilkscreenRect, InferredPcbSilkscreenRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n layer_ref,\n visible_layer,\n type LayerRef,\n type VisibleLayer,\n} from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_circle = z\n .object({\n type: z.literal(\"pcb_silkscreen_circle\"),\n pcb_silkscreen_circle_id: getZodPrefixedIdWithDefault(\n \"pcb_silkscreen_circle\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius: length,\n layer: visible_layer,\n stroke_width: length.default(\"1mm\"),\n is_filled: z.boolean().optional(),\n })\n .describe(\"Defines a silkscreen circle on the PCB\")\n\nexport type PcbSilkscreenCircleInput = z.input<typeof pcb_silkscreen_circle>\ntype InferredPcbSilkscreenCircle = z.infer<typeof pcb_silkscreen_circle>\n\n/**\n * Defines a silkscreen circle on the PCB\n */\nexport interface PcbSilkscreenCircle {\n type: \"pcb_silkscreen_circle\"\n pcb_silkscreen_circle_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius: Length\n layer: VisibleLayer\n stroke_width: Length\n is_filled?: boolean\n}\n\nexpectTypesMatch<PcbSilkscreenCircle, InferredPcbSilkscreenCircle>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n layer_ref,\n type LayerRef,\n visible_layer,\n type VisibleLayer,\n} from \"src/pcb/properties/layer_ref\"\nimport { distance, rotation, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_oval = z\n .object({\n type: z.literal(\"pcb_silkscreen_oval\"),\n pcb_silkscreen_oval_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_oval\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius_x: distance,\n radius_y: distance,\n layer: visible_layer,\n ccw_rotation: rotation.optional(),\n })\n .describe(\"Defines a silkscreen oval on the PCB\")\n\nexport type PcbSilkscreenOvalInput = z.input<typeof pcb_silkscreen_oval>\ntype InferredPcbSilkscreenOval = z.infer<typeof pcb_silkscreen_oval>\n\n/**\n * Defines a silkscreen oval on the PCB\n */\nexport interface PcbSilkscreenOval {\n type: \"pcb_silkscreen_oval\"\n pcb_silkscreen_oval_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius_x: Distance\n radius_y: Distance\n layer: VisibleLayer\n ccw_rotation?: number\n}\n\n/**\n * @deprecated use PcbSilkscreenOval\n */\nexport type PcbSilkscreenOvalDeprecated = PcbSilkscreenOval\n\nexpectTypesMatch<PcbSilkscreenOval, InferredPcbSilkscreenOval>(true)\n","import { z } from \"zod\"\nimport { asset, type Asset, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { brep_shape, type BRepShape } from \"./properties/brep\"\n\nconst pcb_silkscreen_graphic_base = z.object({\n type: z.literal(\"pcb_silkscreen_graphic\"),\n pcb_silkscreen_graphic_id: getZodPrefixedIdWithDefault(\n \"pcb_silkscreen_graphic\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n image_asset: asset.optional(),\n})\n\nexport const pcb_silkscreen_graphic_brep = pcb_silkscreen_graphic_base\n .extend({\n shape: z.literal(\"brep\"),\n brep_shape: brep_shape,\n })\n .describe(\"Defines a BRep silkscreen graphic on the PCB\")\n\nexport type PcbSilkscreenGraphicBRepInput = z.input<\n typeof pcb_silkscreen_graphic_brep\n>\ntype InferredPcbSilkscreenGraphicBRep = z.infer<\n typeof pcb_silkscreen_graphic_brep\n>\n\n/**\n * Defines a BRep silkscreen graphic on the PCB\n */\nexport interface PcbSilkscreenGraphicBRep {\n type: \"pcb_silkscreen_graphic\"\n pcb_silkscreen_graphic_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n image_asset?: Asset\n shape: \"brep\"\n brep_shape: BRepShape\n}\nexpectTypesMatch<PcbSilkscreenGraphicBRep, InferredPcbSilkscreenGraphicBRep>(\n true,\n)\n\nexport const pcb_silkscreen_graphic = z\n .discriminatedUnion(\"shape\", [pcb_silkscreen_graphic_brep])\n .describe(\"Defines a silkscreen graphic on the PCB\")\n\nexport type PcbSilkscreenGraphicInput = z.input<typeof pcb_silkscreen_graphic>\nexport type PcbSilkscreenGraphic = PcbSilkscreenGraphicBRep\n\ntype InferredPcbSilkscreenGraphic = z.infer<typeof pcb_silkscreen_graphic>\nexpectTypesMatch<PcbSilkscreenGraphic, InferredPcbSilkscreenGraphic>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_pill = z\n .object({\n type: z.literal(\"pcb_silkscreen_pill\"),\n pcb_silkscreen_pill_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_pill\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: layer_ref,\n ccw_rotation: z.number().optional(),\n })\n .describe(\"Defines a silkscreen pill on the PCB\")\n\nexport type PcbSilkscreenPillInput = z.input<typeof pcb_silkscreen_pill>\ntype InferredPcbSilkscreenPill = z.infer<typeof pcb_silkscreen_pill>\n\n/**\n * Defines a silkscreen pill on the PCB\n */\nexport interface PcbSilkscreenPill {\n type: \"pcb_silkscreen_pill\"\n pcb_silkscreen_pill_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: LayerRef\n ccw_rotation?: number\n}\n\n/**\n * @deprecated use PcbSilkscreenPill\n */\nexport type PcbSilkscreenPillDeprecated = PcbSilkscreenPill\n\nexpectTypesMatch<PcbSilkscreenPill, InferredPcbSilkscreenPill>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault } from \"src/common/getZodPrefixedIdWithDefault\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_text = z\n .object({\n type: z.literal(\"pcb_fabrication_note_text\"),\n pcb_fabrication_note_text_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_text\",\n ),\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"1mm\"),\n pcb_component_id: z.string(),\n text: z.string(),\n ccw_rotation: z.number().optional(),\n layer: visible_layer,\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: z\n .enum([\"center\", \"top_left\", \"top_right\", \"bottom_left\", \"bottom_right\"])\n .default(\"center\"),\n color: z.string().optional(),\n })\n .describe(\n \"Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators\",\n )\n\nexport type PcbFabricationNoteTextInput = z.input<\n typeof pcb_fabrication_note_text\n>\ntype InferredPcbFabricationNoteText = z.infer<typeof pcb_fabrication_note_text>\n\n/**\n * Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators\n */\nexport interface PcbFabricationNoteText {\n type: \"pcb_fabrication_note_text\"\n pcb_fabrication_note_text_id: string\n subcircuit_id?: string\n pcb_group_id?: string\n font: \"tscircuit2024\"\n font_size: Length\n pcb_component_id: string\n text: string\n ccw_rotation?: number\n layer: VisibleLayer\n anchor_position: Point\n anchor_alignment:\n | \"center\"\n | \"top_left\"\n | \"top_right\"\n | \"bottom_left\"\n | \"bottom_right\"\n color?: string\n}\n\n/**\n * @deprecated use PcbFabricationNoteText\n */\nexport type PCBFabricationNoteText = PcbFabricationNoteText\n\nexpectTypesMatch<PcbFabricationNoteText, InferredPcbFabricationNoteText>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n layer_ref,\n visible_layer,\n type LayerRef,\n} from \"src/pcb/properties/layer_ref\"\nimport { point, type Point } from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_path = z\n .object({\n type: z.literal(\"pcb_fabrication_note_path\"),\n pcb_fabrication_note_path_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_path\",\n ),\n pcb_component_id: z.string(),\n subcircuit_id: z.string().optional(),\n layer: layer_ref,\n route: z.array(point),\n stroke_width: length,\n color: z.string().optional(),\n is_filled: z.boolean().optional(),\n has_stroke: z.boolean().optional(),\n })\n .describe(\n \"Defines a fabrication path on the PCB for fabricators or assemblers\",\n )\n\nexport type PcbFabricationNotePathInput = z.input<\n typeof pcb_fabrication_note_path\n>\ntype InferredPcbFabricationNotePath = z.infer<typeof pcb_fabrication_note_path>\n\n/**\n * Defines a fabrication path on the PCB for fabricators or assemblers\n */\nexport interface PcbFabricationNotePath {\n type: \"pcb_fabrication_note_path\"\n pcb_fabrication_note_path_id: string\n pcb_component_id: string\n subcircuit_id?: string\n layer: LayerRef\n route: Point[]\n stroke_width: Length\n color?: string\n /** Fill the route as a closed polygon using color. Defaults to false. */\n is_filled?: boolean\n /** Draw the outline using stroke_width and color. Defaults to true. */\n has_stroke?: boolean\n}\n\n/**\n * @deprecated use PcbFabricationNotePath\n */\nexport type PCBFabricationNotePath = PcbFabricationNotePath\n\nexpectTypesMatch<PcbFabricationNotePath, InferredPcbFabricationNotePath>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_rect = z\n .object({\n type: z.literal(\"pcb_fabrication_note_rect\"),\n pcb_fabrication_note_rect_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_rect\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: visible_layer,\n stroke_width: length.default(\"0.1mm\"),\n corner_radius: length.optional(),\n is_filled: z.boolean().optional(),\n has_stroke: z.boolean().optional(),\n is_stroke_dashed: z.boolean().optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a fabrication note rectangle on the PCB\")\n\nexport type PcbFabricationNoteRectInput = z.input<\n typeof pcb_fabrication_note_rect\n>\ntype InferredPcbFabricationNoteRect = z.infer<typeof pcb_fabrication_note_rect>\n\n/**\n * Defines a fabrication note rectangle on the PCB\n */\nexport interface PcbFabricationNoteRect {\n type: \"pcb_fabrication_note_rect\"\n pcb_fabrication_note_rect_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: VisibleLayer\n stroke_width: Length\n corner_radius?: Length\n is_filled?: boolean\n has_stroke?: boolean\n is_stroke_dashed?: boolean\n color?: string\n}\n\n/**\n * @deprecated use PcbFabricationNoteRect\n */\nexport type PCBFabricationNoteRect = PcbFabricationNoteRect\n\nexpectTypesMatch<PcbFabricationNoteRect, InferredPcbFabricationNoteRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_dimension = z\n .object({\n type: z.literal(\"pcb_fabrication_note_dimension\"),\n pcb_fabrication_note_dimension_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_dimension\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n from: point,\n to: point,\n text: z.string().optional(),\n text_ccw_rotation: z.number().optional(),\n offset: length.optional(),\n offset_distance: length.optional(),\n offset_direction: z\n .object({\n x: z.number(),\n y: z.number(),\n })\n .optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: length.default(\"1mm\"),\n color: z.string().optional(),\n arrow_size: length.default(\"1mm\"),\n })\n .describe(\"Defines a measurement annotation within PCB fabrication notes\")\n\nexport type PcbFabricationNoteDimensionInput = z.input<\n typeof pcb_fabrication_note_dimension\n>\ntype InferredPcbFabricationNoteDimension = z.infer<\n typeof pcb_fabrication_note_dimension\n>\n\n/**\n * Defines a measurement annotation within PCB fabrication notes\n */\nexport interface PcbFabricationNoteDimension {\n type: \"pcb_fabrication_note_dimension\"\n pcb_fabrication_note_dimension_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n from: Point\n to: Point\n text?: string\n text_ccw_rotation?: number\n offset?: Length\n offset_distance?: Length\n offset_direction?: {\n x: number\n y: number\n }\n font: \"tscircuit2024\"\n font_size: Length\n color?: string\n arrow_size: Length\n}\n\n/**\n * @deprecated use PcbFabricationNoteDimension\n */\nexport type PCBFabricationNoteDimension = PcbFabricationNoteDimension\n\nexpectTypesMatch<\n PcbFabricationNoteDimension,\n InferredPcbFabricationNoteDimension\n>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { distance, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_text = z\n .object({\n type: z.literal(\"pcb_note_text\"),\n pcb_note_text_id: getZodPrefixedIdWithDefault(\"pcb_note_text\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"1mm\"),\n text: z.string().optional(),\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: z\n .enum([\"center\", \"top_left\", \"top_right\", \"bottom_left\", \"bottom_right\"])\n .default(\"center\"),\n layer: visible_layer.default(\"top\"),\n is_mirrored_from_top_view: z.boolean().optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a documentation note in text on the PCB\")\n\nexport type PcbNoteTextInput = z.input<typeof pcb_note_text>\ntype InferredPcbNoteText = z.infer<typeof pcb_note_text>\n\n/**\n * Defines a documentation note in text on the PCB\n */\nexport interface PcbNoteText {\n type: \"pcb_note_text\"\n pcb_note_text_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n font: \"tscircuit2024\"\n font_size: Length\n text?: string\n anchor_position: Point\n anchor_alignment:\n | \"center\"\n | \"top_left\"\n | \"top_right\"\n | \"bottom_left\"\n | \"bottom_right\"\n layer: VisibleLayer\n is_mirrored_from_top_view?: boolean\n color?: string\n}\n\nexpectTypesMatch<PcbNoteText, InferredPcbNoteText>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_rect = z\n .object({\n type: z.literal(\"pcb_note_rect\"),\n pcb_note_rect_id: getZodPrefixedIdWithDefault(\"pcb_note_rect\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n text: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: visible_layer.default(\"top\"),\n stroke_width: length.default(\"0.1mm\"),\n corner_radius: length.optional(),\n is_filled: z.boolean().optional(),\n has_stroke: z.boolean().optional(),\n is_stroke_dashed: z.boolean().optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a rectangular documentation note on the PCB\")\n\nexport type PcbNoteRectInput = z.input<typeof pcb_note_rect>\ntype InferredPcbNoteRect = z.infer<typeof pcb_note_rect>\n\n/**\n * Defines a rectangular documentation note on the PCB\n */\nexport interface PcbNoteRect {\n type: \"pcb_note_rect\"\n pcb_note_rect_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n text?: string\n center: Point\n width: Length\n height: Length\n layer: VisibleLayer\n stroke_width: Length\n corner_radius?: Length\n is_filled?: boolean\n has_stroke?: boolean\n is_stroke_dashed?: boolean\n color?: string\n}\n\nexpectTypesMatch<PcbNoteRect, InferredPcbNoteRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_path = z\n .object({\n type: z.literal(\"pcb_note_path\"),\n pcb_note_path_id: getZodPrefixedIdWithDefault(\"pcb_note_path\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n text: z.string().optional(),\n route: z.array(point),\n layer: visible_layer.default(\"top\"),\n stroke_width: length.default(\"0.1mm\"),\n color: z.string().optional(),\n })\n .describe(\"Defines a polyline documentation note on the PCB\")\n\nexport type PcbNotePathInput = z.input<typeof pcb_note_path>\ntype InferredPcbNotePath = z.infer<typeof pcb_note_path>\n\n/**\n * Defines a polyline documentation note on the PCB\n */\nexport interface PcbNotePath {\n type: \"pcb_note_path\"\n pcb_note_path_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n text?: string\n route: Point[]\n layer: VisibleLayer\n stroke_width: Length\n color?: string\n}\n\nexpectTypesMatch<PcbNotePath, InferredPcbNotePath>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_line = z\n .object({\n type: z.literal(\"pcb_note_line\"),\n pcb_note_line_id: getZodPrefixedIdWithDefault(\"pcb_note_line\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n text: z.string().optional(),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n layer: visible_layer.default(\"top\"),\n stroke_width: distance.default(\"0.1mm\"),\n color: z.string().optional(),\n is_dashed: z.boolean().optional(),\n })\n .describe(\"Defines a straight documentation note line on the PCB\")\n\nexport type PcbNoteLineInput = z.input<typeof pcb_note_line>\ntype InferredPcbNoteLine = z.infer<typeof pcb_note_line>\n\n/**\n * Defines a straight documentation note line on the PCB\n */\nexport interface PcbNoteLine {\n type: \"pcb_note_line\"\n pcb_note_line_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n text?: string\n x1: Distance\n y1: Distance\n x2: Distance\n y2: Distance\n layer: VisibleLayer\n stroke_width: Distance\n color?: string\n is_dashed?: boolean\n}\n\nexpectTypesMatch<PcbNoteLine, InferredPcbNoteLine>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_dimension = z\n .object({\n type: z.literal(\"pcb_note_dimension\"),\n pcb_note_dimension_id: getZodPrefixedIdWithDefault(\"pcb_note_dimension\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n from: point,\n to: point,\n text: z.string().optional(),\n text_ccw_rotation: z.number().optional(),\n offset_distance: length.optional(),\n offset_direction: z\n .object({\n x: z.number(),\n y: z.number(),\n })\n .optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: length.default(\"1mm\"),\n layer: visible_layer.default(\"top\"),\n color: z.string().optional(),\n arrow_size: length.default(\"1mm\"),\n })\n .describe(\"Defines a measurement annotation within PCB documentation notes\")\n\nexport type PcbNoteDimensionInput = z.input<typeof pcb_note_dimension>\ntype InferredPcbNoteDimension = z.infer<typeof pcb_note_dimension>\n\n/**\n * Defines a measurement annotation within PCB documentation notes\n */\nexport interface PcbNoteDimension {\n type: \"pcb_note_dimension\"\n pcb_note_dimension_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n from: Point\n to: Point\n text?: string\n text_ccw_rotation?: number\n offset_distance?: Length\n offset_direction?: {\n x: number\n y: number\n }\n font: \"tscircuit2024\"\n font_size: Length\n layer: VisibleLayer\n color?: string\n arrow_size: Length\n}\n\nexpectTypesMatch<PcbNoteDimension, InferredPcbNoteDimension>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_footprint_overlap_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_footprint_overlap_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_footprint_overlap_error\")\n .default(\"pcb_footprint_overlap_error\"),\n pcb_smtpad_ids: z.array(z.string()).optional(),\n pcb_plated_hole_ids: z.array(z.string()).optional(),\n pcb_hole_ids: z.array(z.string()).optional(),\n pcb_keepout_ids: z.array(z.string()).optional(),\n })\n .describe(\"Error emitted when a pcb footprint overlaps with another element\")\n\nexport type PcbFootprintOverlapErrorInput = z.input<\n typeof pcb_footprint_overlap_error\n>\ntype InferredPcbFootprintOverlapError = z.infer<\n typeof pcb_footprint_overlap_error\n>\n\n/** Error emitted when a pcb footprint overlaps with another element */\nexport interface PcbFootprintOverlapError extends BaseCircuitJsonError {\n type: \"pcb_footprint_overlap_error\"\n pcb_error_id: string\n error_type: \"pcb_footprint_overlap_error\"\n pcb_smtpad_ids?: string[]\n pcb_plated_hole_ids?: string[]\n pcb_hole_ids?: string[]\n pcb_keepout_ids?: string[]\n}\n\nexpectTypesMatch<PcbFootprintOverlapError, InferredPcbFootprintOverlapError>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_overlap_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_courtyard_overlap_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_courtyard_overlap_error\")\n .default(\"pcb_courtyard_overlap_error\"),\n pcb_component_ids: z.tuple([z.string(), z.string()]),\n })\n .describe(\n \"Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another\",\n )\n\nexport type PcbCourtyardOverlapErrorInput = z.input<\n typeof pcb_courtyard_overlap_error\n>\ntype InferredPcbCourtyardOverlapError = z.infer<\n typeof pcb_courtyard_overlap_error\n>\n\n/** Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another */\nexport interface PcbCourtyardOverlapError extends BaseCircuitJsonError {\n type: \"pcb_courtyard_overlap_error\"\n pcb_error_id: string\n error_type: \"pcb_courtyard_overlap_error\"\n pcb_component_ids: [string, string]\n}\n\nexpectTypesMatch<PcbCourtyardOverlapError, InferredPcbCourtyardOverlapError>(\n true,\n)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { type Point, point } from \"../common\"\nimport { distance, type Length, length } from \"../units\"\n\nexport const pcb_keepout_outline = z.object({\n type: z.literal(\"pcb_keepout\"),\n shape: z.literal(\"outline\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n outline: z.array(point).min(2),\n stroke_width: length,\n pcb_keepout_id: z.string(),\n layers: z.array(z.string()),\n description: z.string().optional(),\n excluded_pcb_component_ids: z.array(z.string()).optional(),\n warning_only: z.boolean().optional(),\n allow_traces: z.boolean().optional(),\n allow_placements: z.boolean().optional(),\n})\n\nexport type PcbKeepoutOutlineInput = z.input<typeof pcb_keepout_outline>\ntype InferredPcbKeepoutOutline = z.infer<typeof pcb_keepout_outline>\n\nexport const pcb_keepout = z\n .object({\n type: z.literal(\"pcb_keepout\"),\n shape: z.literal(\"rect\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: distance,\n height: distance,\n pcb_keepout_id: z.string(),\n layers: z.array(z.string()), // Specify layers where the keepout applies\n description: z.string().optional(), // Optional description of the keepout\n excluded_pcb_component_ids: z.array(z.string()).optional(),\n warning_only: z.boolean().optional(),\n allow_traces: z.boolean().optional(),\n allow_placements: z.boolean().optional(),\n })\n .or(\n z.object({\n type: z.literal(\"pcb_keepout\"),\n shape: z.literal(\"circle\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius: distance,\n pcb_keepout_id: z.string(),\n layers: z.array(z.string()), // Specify layers where the keepout applies\n description: z.string().optional(), // Optional description of the keepout\n excluded_pcb_component_ids: z.array(z.string()).optional(),\n warning_only: z.boolean().optional(),\n allow_traces: z.boolean().optional(),\n allow_placements: z.boolean().optional(),\n }),\n )\n .or(pcb_keepout_outline)\n\nexport type PCBKeepoutInput = z.input<typeof pcb_keepout>\ntype InferredPCBKeepout = z.infer<typeof pcb_keepout>\n\nexport interface PCBKeepoutRect {\n type: \"pcb_keepout\"\n shape: \"rect\"\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: number\n height: number\n pcb_keepout_id: string\n layers: string[]\n description?: string\n /** PCB components excluded from keepout DRC enforcement. */\n excluded_pcb_component_ids?: string[]\n /**\n * When true, this keepout is advisory: it does not block routing or copper\n * placement, and DRC reports overlaps as pcb_keepout_overlap_warning records.\n * False or omitted preserves normal enforcement. Component exclusions still apply.\n */\n warning_only?: boolean\n /** Allow trace crossings without keepout diagnostics; copper pours remain excluded. */\n allow_traces?: boolean\n /** Allow components and their pads/plated holes without keepout diagnostics; copper pours remain excluded. */\n allow_placements?: boolean\n}\n\nexport interface PCBKeepoutCircle {\n type: \"pcb_keepout\"\n shape: \"circle\"\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius: number\n pcb_keepout_id: string\n layers: string[]\n description?: string\n /** PCB components excluded from keepout DRC enforcement. */\n excluded_pcb_component_ids?: string[]\n /**\n * When true, this keepout is advisory: it does not block routing or copper\n * placement, and DRC reports overlaps as pcb_keepout_overlap_warning records.\n * False or omitted preserves normal enforcement. Component exclusions still apply.\n */\n warning_only?: boolean\n /** Allow trace crossings without keepout diagnostics; copper pours remain excluded. */\n allow_traces?: boolean\n /** Allow components and their pads/plated holes without keepout diagnostics; copper pours remain excluded. */\n allow_placements?: boolean\n}\n\nexport interface PcbKeepoutOutline {\n type: \"pcb_keepout\"\n shape: \"outline\"\n pcb_group_id?: string\n subcircuit_id?: string\n outline: Point[]\n stroke_width: Length\n pcb_keepout_id: string\n layers: string[]\n description?: string\n /** PCB components excluded from keepout DRC enforcement. */\n excluded_pcb_component_ids?: string[]\n /**\n * When true, this keepout is advisory: it does not block routing or copper\n * placement, and DRC reports overlaps as pcb_keepout_overlap_warning records.\n * False or omitted preserves normal enforcement. Component exclusions still apply.\n */\n warning_only?: boolean\n /** Allow trace crossings without keepout diagnostics; copper pours remain excluded. */\n allow_traces?: boolean\n /** Allow components and their pads/plated holes without keepout diagnostics; copper pours remain excluded. */\n allow_placements?: boolean\n}\n\nexpectTypesMatch<PcbKeepoutOutline, InferredPcbKeepoutOutline>(true)\n\nexport type PCBKeepout = PCBKeepoutRect | PCBKeepoutCircle | PcbKeepoutOutline\n\nexpectTypesMatch<PCBKeepout, InferredPCBKeepout>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_keepout_overlap_warning = z\n .object({\n type: z.literal(\"pcb_keepout_overlap_warning\"),\n pcb_keepout_overlap_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_keepout_overlap_warning\",\n ),\n warning_type: z\n .literal(\"pcb_keepout_overlap_warning\")\n .default(\"pcb_keepout_overlap_warning\"),\n message: z.string(),\n pcb_keepout_id: z.string(),\n pcb_component_ids: z.array(z.string()).optional(),\n pcb_trace_ids: z.array(z.string()).optional(),\n pcb_smtpad_ids: z.array(z.string()).optional(),\n pcb_plated_hole_ids: z.array(z.string()).optional(),\n pcb_via_ids: z.array(z.string()).optional(),\n center: point.optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when copper overlaps a PCB keepout with warning_only enabled\",\n )\n\nexport type PcbKeepoutOverlapWarningInput = z.input<\n typeof pcb_keepout_overlap_warning\n>\ntype InferredPcbKeepoutOverlapWarning = z.infer<\n typeof pcb_keepout_overlap_warning\n>\n\n/** Warning emitted when copper overlaps a PCB keepout with warning_only enabled. */\nexport interface PcbKeepoutOverlapWarning {\n type: \"pcb_keepout_overlap_warning\"\n pcb_keepout_overlap_warning_id: string\n warning_type: \"pcb_keepout_overlap_warning\"\n message: string\n /** The advisory keepout that was overlapped. */\n pcb_keepout_id: string\n /** IDs of the components and copper primitives involved in the overlap. */\n pcb_component_ids?: string[]\n pcb_trace_ids?: string[]\n pcb_smtpad_ids?: string[]\n pcb_plated_hole_ids?: string[]\n pcb_via_ids?: string[]\n /** Optional overlap location in PCB coordinates, in millimeters. */\n center?: Point\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbKeepoutOverlapWarning, InferredPcbKeepoutOverlapWarning>(\n true,\n)\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\n// Common properties base for all cutout shapes (internal)\nconst pcb_cutout_base = z.object({\n type: z.literal(\"pcb_cutout\"),\n pcb_cutout_id: getZodPrefixedIdWithDefault(\"pcb_cutout\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_board_id: z.string().optional(),\n pcb_panel_id: z.string().optional(),\n})\n\n// Rectangular Cutout\nexport const pcb_cutout_rect = pcb_cutout_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n width: length,\n height: length,\n rotation: rotation.optional(),\n corner_radius: length.optional(),\n})\nexport type PcbCutoutRectInput = z.input<typeof pcb_cutout_rect>\ntype InferredPcbCutoutRect = z.infer<typeof pcb_cutout_rect>\n/**\n * Defines a rectangular cutout on the PCB.\n */\nexport interface PcbCutoutRect {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"rect\"\n center: Point\n width: Length\n height: Length\n rotation?: Rotation\n corner_radius?: Length\n}\nexpectTypesMatch<PcbCutoutRect, InferredPcbCutoutRect>(true)\n\n// Circular Cutout\nexport const pcb_cutout_circle = pcb_cutout_base.extend({\n shape: z.literal(\"circle\"),\n center: point,\n radius: length,\n})\nexport type PcbCutoutCircleInput = z.input<typeof pcb_cutout_circle>\ntype InferredPcbCutoutCircle = z.infer<typeof pcb_cutout_circle>\n/**\n * Defines a circular cutout on the PCB.\n */\nexport interface PcbCutoutCircle {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"circle\"\n center: Point\n radius: Length\n}\nexpectTypesMatch<PcbCutoutCircle, InferredPcbCutoutCircle>(true)\n\n// Polygon Cutout\nexport const pcb_cutout_polygon = pcb_cutout_base.extend({\n shape: z.literal(\"polygon\"),\n points: z.array(point),\n})\nexport type PcbCutoutPolygonInput = z.input<typeof pcb_cutout_polygon>\ntype InferredPcbCutoutPolygon = z.infer<typeof pcb_cutout_polygon>\n/**\n * Defines a polygonal cutout on the PCB, specified by a list of points.\n * The polygon should be closed (the last point implicitly connects to the first).\n */\nexport interface PcbCutoutPolygon {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"polygon\"\n points: Point[]\n}\nexpectTypesMatch<PcbCutoutPolygon, InferredPcbCutoutPolygon>(true)\n\n// Path Cutout (for slots along a path)\nexport const pcb_cutout_path = pcb_cutout_base.extend({\n shape: z.literal(\"path\"),\n route: z.array(point),\n slot_width: length,\n slot_length: length.optional(),\n space_between_slots: length.optional(),\n slot_corner_radius: length.optional(),\n})\nexport type PcbCutoutPathInput = z.input<typeof pcb_cutout_path>\ntype InferredPcbCutoutPath = z.infer<typeof pcb_cutout_path>\n/**\n * Defines a path-based cutout on the PCB, creating slots along the specified path.\n * When slot_length and space_between_slots are specified, creates a dashed pattern of slots.\n * When they are omitted, creates a continuous slot along the entire path.\n * The slot_corner_radius controls the rounding of slot corners (0 = square, slot_width/2 = circle).\n */\nexport interface PcbCutoutPath {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"path\"\n route: Point[]\n slot_width: Length\n slot_length?: Length\n space_between_slots?: Length\n slot_corner_radius?: Length\n}\nexpectTypesMatch<PcbCutoutPath, InferredPcbCutoutPath>(true)\n\n// Union of all cutout shapes\nexport const pcb_cutout = z\n .discriminatedUnion(\"shape\", [\n pcb_cutout_rect,\n pcb_cutout_circle,\n pcb_cutout_polygon,\n pcb_cutout_path,\n ])\n .describe(\"Defines a cutout on the PCB, removing board material.\")\n\nexport type PcbCutoutInput = z.input<typeof pcb_cutout>\nexport type PcbCutout =\n | PcbCutoutRect\n | PcbCutoutCircle\n | PcbCutoutPolygon\n | PcbCutoutPath\n\ntype InferredPcbCutout = z.infer<typeof pcb_cutout>\nexpectTypesMatch<PcbCutout, InferredPcbCutout>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_missing_footprint_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_missing_footprint_error\"),\n pcb_missing_footprint_error_id: getZodPrefixedIdWithDefault(\n \"pcb_missing_footprint_error\",\n ),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"pcb_missing_footprint_error\")\n .default(\"pcb_missing_footprint_error\"),\n source_component_id: z.string(),\n })\n .describe(\"Defines a missing footprint error on the PCB\")\n\nexport type PcbMissingFootprintErrorInput = z.input<\n typeof pcb_missing_footprint_error\n>\ntype InferredPcbMissingFootprintError = z.infer<\n typeof pcb_missing_footprint_error\n>\n\n/**\n * Defines a placement error on the PCB\n */\nexport interface PcbMissingFootprintError extends BaseCircuitJsonError {\n type: \"pcb_missing_footprint_error\"\n pcb_missing_footprint_error_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n error_type: \"pcb_missing_footprint_error\"\n source_component_id: string\n}\n\n/**\n * @deprecated use PcbMissingFootprintError\n */\nexport type PCBMissingFootprintError = PcbMissingFootprintError\n\nexpectTypesMatch<PcbMissingFootprintError, InferredPcbMissingFootprintError>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const external_footprint_load_error = base_circuit_json_error\n .extend({\n type: z.literal(\"external_footprint_load_error\"),\n external_footprint_load_error_id: getZodPrefixedIdWithDefault(\n \"external_footprint_load_error\",\n ),\n pcb_component_id: z.string(),\n source_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n footprinter_string: z.string().optional(),\n error_type: z\n .literal(\"external_footprint_load_error\")\n .default(\"external_footprint_load_error\"),\n })\n .describe(\"Defines an error when an external footprint fails to load\")\n\nexport type ExternalFootprintLoadErrorInput = z.input<\n typeof external_footprint_load_error\n>\ntype InferredExternalFootprintLoadError = z.infer<\n typeof external_footprint_load_error\n>\n\nexport interface ExternalFootprintLoadError extends BaseCircuitJsonError {\n type: \"external_footprint_load_error\"\n external_footprint_load_error_id: string\n pcb_component_id: string\n source_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n footprinter_string?: string\n error_type: \"external_footprint_load_error\"\n}\n\nexpectTypesMatch<\n ExternalFootprintLoadError,\n InferredExternalFootprintLoadError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const circuit_json_footprint_load_error = base_circuit_json_error\n .extend({\n type: z.literal(\"circuit_json_footprint_load_error\"),\n circuit_json_footprint_load_error_id: getZodPrefixedIdWithDefault(\n \"circuit_json_footprint_load_error\",\n ),\n pcb_component_id: z.string(),\n source_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"circuit_json_footprint_load_error\")\n .default(\"circuit_json_footprint_load_error\"),\n circuit_json: z.array(z.any()).optional(),\n })\n .describe(\"Defines an error when a circuit JSON footprint fails to load\")\n\nexport type CircuitJsonFootprintLoadErrorInput = z.input<\n typeof circuit_json_footprint_load_error\n>\ntype InferredCircuitJsonFootprintLoadError = z.infer<\n typeof circuit_json_footprint_load_error\n>\n\nexport interface CircuitJsonFootprintLoadError extends BaseCircuitJsonError {\n type: \"circuit_json_footprint_load_error\"\n circuit_json_footprint_load_error_id: string\n pcb_component_id: string\n source_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n error_type: \"circuit_json_footprint_load_error\"\n circuit_json?: any[]\n}\n\nexpectTypesMatch<\n CircuitJsonFootprintLoadError,\n InferredCircuitJsonFootprintLoadError\n>(true)\n","import { z } from \"zod\"\nimport {\n point,\n type Point,\n getZodPrefixedIdWithDefault,\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_group = z\n .object({\n type: z.literal(\"pcb_group\"),\n pcb_group_id: getZodPrefixedIdWithDefault(\"pcb_group\"),\n source_group_id: z.string(),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n width: length.optional(),\n height: length.optional(),\n center: point,\n display_offset_x: z\n .string()\n .optional()\n .describe(\n \"How to display the x offset for this group, usually corresponding with how the user specified it\",\n ),\n display_offset_y: z\n .string()\n .optional()\n .describe(\n \"How to display the y offset for this group, usually corresponding with how the user specified it\",\n ),\n outline: z.array(point).optional(),\n anchor_position: point.optional(),\n anchor_alignment: ninePointAnchor.default(\"center\"),\n position_mode: z\n .enum([\"packed\", \"relative_to_group_anchor\", \"none\"])\n .optional(),\n positioned_relative_to_pcb_group_id: z.string().optional(),\n positioned_relative_to_pcb_board_id: z.string().optional(),\n pcb_component_ids: z.array(z.string()),\n child_layout_mode: z.enum([\"packed\", \"none\"]).optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n layout_mode: z.string().optional(),\n autorouter_configuration: z\n .object({\n trace_clearance: length,\n })\n .optional(),\n autorouter_used_string: z.string().optional(),\n })\n .describe(\"Defines a group of components on the PCB\")\n\nexport type PcbGroupInput = z.input<typeof pcb_group>\ntype InferredPcbGroup = z.infer<typeof pcb_group>\n\n/**\n * Defines a group of components on the PCB\n */\nexport interface PcbGroup {\n type: \"pcb_group\"\n pcb_group_id: string\n source_group_id: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n width?: Length\n height?: Length\n center: Point\n display_offset_x?: string\n display_offset_y?: string\n outline?: Point[]\n anchor_position?: Point\n anchor_alignment: NinePointAnchor\n position_mode?: \"packed\" | \"relative_to_group_anchor\" | \"none\"\n positioned_relative_to_pcb_group_id?: string\n positioned_relative_to_pcb_board_id?: string\n pcb_component_ids: string[]\n child_layout_mode?: \"packed\" | \"none\"\n name?: string\n description?: string\n layout_mode?: string\n autorouter_configuration?: {\n trace_clearance: Length\n }\n autorouter_used_string?: string\n}\n\nexpectTypesMatch<PcbGroup, InferredPcbGroup>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_autorouting_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_autorouting_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_autorouting_error\"),\n error_type: z\n .literal(\"pcb_autorouting_error\")\n .default(\"pcb_autorouting_error\"),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"The autorouting has failed to route a portion of the board\")\n\nexport type PcbAutoroutingErrorInput = z.input<typeof pcb_autorouting_error>\ntype PcbInferredAutoroutingError = z.infer<typeof pcb_autorouting_error>\n\nexport interface PcbAutoroutingErrorInterface extends BaseCircuitJsonError {\n type: \"pcb_autorouting_error\"\n pcb_error_id: string\n error_type: \"pcb_autorouting_error\"\n subcircuit_id?: string\n}\n\nexport type PcbAutoroutingError = PcbAutoroutingErrorInterface\n\nexpectTypesMatch<PcbAutoroutingError, PcbInferredAutoroutingError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_preflight_routing_error = base_circuit_json_error.extend({\n type: z.literal(\"pcb_preflight_routing_error\"),\n pcb_preflight_routing_error_id: getZodPrefixedIdWithDefault(\n \"pcb_preflight_routing_error\",\n ),\n error_type: z\n .literal(\"pcb_preflight_routing_error\")\n .default(\"pcb_preflight_routing_error\"),\n error_code: z.string(),\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n routing_phase_index: z.number().int().optional(),\n phase_name: z.string().optional(),\n source_trace_ids: z.array(z.string()).optional(),\n pcb_component_ids: z.array(z.string()).optional(),\n pcb_port_ids: z.array(z.string()).optional(),\n related_error_ids: z.array(z.string()).optional(),\n measurements: z.record(z.number().finite()).optional(),\n})\n\nexport type PcbPreflightRoutingErrorInput = z.input<\n typeof pcb_preflight_routing_error\n>\n\nexport interface PcbPreflightRoutingError extends BaseCircuitJsonError {\n type: \"pcb_preflight_routing_error\"\n pcb_preflight_routing_error_id: string\n error_type: \"pcb_preflight_routing_error\"\n error_code: string\n subcircuit_id?: string\n pcb_group_id?: string\n routing_phase_index?: number\n phase_name?: string\n source_trace_ids?: string[]\n pcb_component_ids?: string[]\n pcb_port_ids?: string[]\n related_error_ids?: string[]\n measurements?: Record<string, number>\n}\n\nexpectTypesMatch<\n PcbPreflightRoutingError,\n z.infer<typeof pcb_preflight_routing_error>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const pcb_manual_edit_conflict_warning = z\n .object({\n type: z.literal(\"pcb_manual_edit_conflict_warning\"),\n pcb_manual_edit_conflict_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_manual_edit_conflict_warning\",\n ),\n warning_type: z\n .literal(\"pcb_manual_edit_conflict_warning\")\n .default(\"pcb_manual_edit_conflict_warning\"),\n message: z.string(),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n source_component_id: z.string(),\n })\n .describe(\n \"Warning emitted when a component has both manual placement and explicit pcbX/pcbY coordinates\",\n )\n\nexport type PcbManualEditConflictWarningInput = z.input<\n typeof pcb_manual_edit_conflict_warning\n>\ntype InferredPcbManualEditConflictWarning = z.infer<\n typeof pcb_manual_edit_conflict_warning\n>\n\n/**\n * Warning emitted when a component has both manual placement (via manualEdits) and explicit pcbX/pcbY coordinates\n */\nexport interface PcbManualEditConflictWarning {\n type: \"pcb_manual_edit_conflict_warning\"\n pcb_manual_edit_conflict_warning_id: string\n warning_type: \"pcb_manual_edit_conflict_warning\"\n message: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n source_component_id: string\n}\n\nexpectTypesMatch<\n PcbManualEditConflictWarning,\n InferredPcbManualEditConflictWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst connectorOrientationDirection = z.enum([\"x-\", \"x+\", \"y+\", \"y-\"])\n\ntype ConnectorOrientationDirection = z.infer<\n typeof connectorOrientationDirection\n>\n\nexport const pcb_connector_not_in_accessible_orientation_warning = z\n .object({\n type: z.literal(\"pcb_connector_not_in_accessible_orientation_warning\"),\n pcb_connector_not_in_accessible_orientation_warning_id:\n getZodPrefixedIdWithDefault(\n \"pcb_connector_not_in_accessible_orientation_warning\",\n ),\n warning_type: z\n .literal(\"pcb_connector_not_in_accessible_orientation_warning\")\n .default(\"pcb_connector_not_in_accessible_orientation_warning\"),\n message: z.string(),\n pcb_component_id: z.string(),\n source_component_id: z.string().optional(),\n pcb_board_id: z.string().optional(),\n facing_direction: connectorOrientationDirection,\n recommended_facing_direction: connectorOrientationDirection,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented to an outward-facing direction\",\n )\n\nexport type PcbConnectorNotInAccessibleOrientationWarningInput = z.input<\n typeof pcb_connector_not_in_accessible_orientation_warning\n>\ntype InferredPcbConnectorNotInAccessibleOrientationWarning = z.infer<\n typeof pcb_connector_not_in_accessible_orientation_warning\n>\n\n/** Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented */\nexport interface PcbConnectorNotInAccessibleOrientationWarning {\n type: \"pcb_connector_not_in_accessible_orientation_warning\"\n pcb_connector_not_in_accessible_orientation_warning_id: string\n warning_type: \"pcb_connector_not_in_accessible_orientation_warning\"\n message: string\n pcb_component_id: string\n source_component_id?: string\n pcb_board_id?: string\n facing_direction: ConnectorOrientationDirection\n recommended_facing_direction: ConnectorOrientationDirection\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbConnectorNotInAccessibleOrientationWarning,\n InferredPcbConnectorNotInAccessibleOrientationWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_missing_courtyard_warning = z\n .object({\n type: z.literal(\"pcb_component_missing_courtyard_warning\"),\n pcb_component_missing_courtyard_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_component_missing_courtyard_warning\",\n ),\n warning_type: z\n .literal(\"pcb_component_missing_courtyard_warning\")\n .default(\"pcb_component_missing_courtyard_warning\"),\n message: z.string(),\n pcb_component_id: z.string(),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Warning emitted when a PCB component has no courtyard geometry\")\n\nexport type PcbComponentMissingCourtyardWarningInput = z.input<\n typeof pcb_component_missing_courtyard_warning\n>\n\ntype InferredPcbComponentMissingCourtyardWarning = z.infer<\n typeof pcb_component_missing_courtyard_warning\n>\n\n/** Warning emitted when a PCB component has no courtyard geometry */\nexport interface PcbComponentMissingCourtyardWarning {\n type: \"pcb_component_missing_courtyard_warning\"\n pcb_component_missing_courtyard_warning_id: string\n warning_type: \"pcb_component_missing_courtyard_warning\"\n message: string\n pcb_component_id: string\n source_component_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentMissingCourtyardWarning,\n InferredPcbComponentMissingCourtyardWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const supplier_footprint_mismatch_warning = z\n .object({\n type: z.literal(\"supplier_footprint_mismatch_warning\"),\n supplier_footprint_mismatch_warning_id: getZodPrefixedIdWithDefault(\n \"supplier_footprint_mismatch_warning\",\n ),\n warning_type: z\n .literal(\"supplier_footprint_mismatch_warning\")\n .default(\"supplier_footprint_mismatch_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n supplier_name: supplier_name.optional(),\n supplier_part_number: z.string().optional(),\n supplier_footprint_url: z.string().optional(),\n footprint_copper_intersection_over_union: z.number(),\n })\n .describe(\n \"Warning emitted when a supplier part footprint does not match the expected footprint\",\n )\n\nexport type SupplierFootprintMismatchWarningInput = z.input<\n typeof supplier_footprint_mismatch_warning\n>\ntype InferredSupplierFootprintMismatchWarning = z.infer<\n typeof supplier_footprint_mismatch_warning\n>\n\n/**\n * Warning emitted when a supplier part footprint does not match the expected footprint\n */\nexport interface SupplierFootprintMismatchWarning {\n type: \"supplier_footprint_mismatch_warning\"\n supplier_footprint_mismatch_warning_id: string\n warning_type: \"supplier_footprint_mismatch_warning\"\n message: string\n source_component_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n supplier_name?: SupplierName\n supplier_part_number?: string\n supplier_footprint_url?: string\n footprint_copper_intersection_over_union: number\n}\n\nexpectTypesMatch<\n SupplierFootprintMismatchWarning,\n InferredSupplierFootprintMismatchWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabricator_extra_charge_warning = z\n .object({\n type: z.literal(\"pcb_fabricator_extra_charge_warning\"),\n pcb_fabricator_extra_charge_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_fabricator_extra_charge_warning\",\n ),\n warning_type: z\n .literal(\"pcb_fabricator_extra_charge_warning\")\n .default(\"pcb_fabricator_extra_charge_warning\"),\n message: z.string(),\n fabricator_preset: z.string(),\n pcb_board_id: z.string().optional(),\n pcb_via_ids: z.array(z.string()).optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning that a design feature incurs an extra charge for the selected fabricator preset, such as via hole diameters below 0.3 mm with JLCPCB economy or standard presets.\",\n )\n\nexport type PcbFabricatorExtraChargeWarningInput = z.input<\n typeof pcb_fabricator_extra_charge_warning\n>\ntype InferredPcbFabricatorExtraChargeWarning = z.infer<\n typeof pcb_fabricator_extra_charge_warning\n>\n\n/**\n * Warning that a design feature incurs an extra charge for the selected\n * fabricator preset. For JLCPCB economy or standard presets (including dated\n * variants), via hole diameters below 0.3 mm are an intended use case.\n * The producer detects the condition; this record describes the warning.\n */\nexport interface PcbFabricatorExtraChargeWarning {\n type: \"pcb_fabricator_extra_charge_warning\"\n pcb_fabricator_extra_charge_warning_id: string\n warning_type: \"pcb_fabricator_extra_charge_warning\"\n message: string\n /** Selected preset, for example jlcpcb_economy or jlcpcb_standard_20260912. */\n fabricator_preset: string\n pcb_board_id?: string\n /** Vias responsible for the extra charge, when the warning concerns vias. */\n pcb_via_ids?: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbFabricatorExtraChargeWarning,\n InferredPcbFabricatorExtraChargeWarning\n>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { type LayerRef, layer_ref } from \"src/pcb/properties/layer_ref\"\nimport { type Distance, distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport const pcb_breakout_point = z\n .object({\n type: z.literal(\"pcb_breakout_point\"),\n pcb_breakout_point_id: getZodPrefixedIdWithDefault(\"pcb_breakout_point\"),\n pcb_group_id: z.string(),\n subcircuit_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n source_port_id: z.string().optional(),\n source_net_id: z.string().optional(),\n layer: layer_ref.optional(),\n x: distance,\n y: distance,\n })\n .describe(\n \"Defines a routing target within a pcb_group for a source_trace or source_net\",\n )\n\nexport type PcbBreakoutPointInput = z.input<typeof pcb_breakout_point>\ntype InferredPcbBreakoutPoint = z.infer<typeof pcb_breakout_point>\n\n/**\n * Defines a routing target within a pcb_group for a source_trace or source_net\n */\nexport interface PcbBreakoutPoint {\n type: \"pcb_breakout_point\"\n pcb_breakout_point_id: string\n pcb_group_id: string\n subcircuit_id?: string\n source_trace_id?: string\n source_port_id?: string\n source_net_id?: string\n layer?: LayerRef\n x: Distance\n y: Distance\n}\n\nexpectTypesMatch<PcbBreakoutPoint, InferredPcbBreakoutPoint>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_ground_plane = z\n .object({\n type: z.literal(\"pcb_ground_plane\"),\n pcb_ground_plane_id: getZodPrefixedIdWithDefault(\"pcb_ground_plane\"),\n source_pcb_ground_plane_id: z.string(),\n source_net_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a ground plane on the PCB\")\n\nexport type PcbGroundPlaneInput = z.input<typeof pcb_ground_plane>\ntype InferredPcbGroundPlane = z.infer<typeof pcb_ground_plane>\n\n/**\n * Defines a ground plane on the PCB\n */\nexport interface PcbGroundPlane {\n type: \"pcb_ground_plane\"\n pcb_ground_plane_id: string\n source_pcb_ground_plane_id: string\n source_net_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbGroundPlane, InferredPcbGroundPlane>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_ground_plane_region = z\n .object({\n type: z.literal(\"pcb_ground_plane_region\"),\n pcb_ground_plane_region_id: getZodPrefixedIdWithDefault(\n \"pcb_ground_plane_region\",\n ),\n pcb_ground_plane_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: layer_ref,\n points: z.array(point),\n })\n .describe(\"Defines a polygon region of a ground plane\")\n\nexport type PcbGroundPlaneRegionInput = z.input<typeof pcb_ground_plane_region>\ntype InferredPcbGroundPlaneRegion = z.infer<typeof pcb_ground_plane_region>\n\n/**\n * Defines a polygon region of a ground plane\n */\nexport interface PcbGroundPlaneRegion {\n type: \"pcb_ground_plane_region\"\n pcb_ground_plane_region_id: string\n pcb_ground_plane_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n points: Point[]\n}\n\nexpectTypesMatch<PcbGroundPlaneRegion, InferredPcbGroundPlaneRegion>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_thermal_spoke = z\n .object({\n type: z.literal(\"pcb_thermal_spoke\"),\n pcb_thermal_spoke_id: getZodPrefixedIdWithDefault(\"pcb_thermal_spoke\"),\n pcb_ground_plane_id: z.string(),\n shape: z.string(),\n spoke_count: z.number(),\n spoke_thickness: distance,\n spoke_inner_diameter: distance,\n spoke_outer_diameter: distance,\n pcb_plated_hole_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Pattern for connecting a ground plane to a plated hole\")\n\nexport type PcbThermalSpokeInput = z.input<typeof pcb_thermal_spoke>\ntype InferredPcbThermalSpoke = z.infer<typeof pcb_thermal_spoke>\n\n/**\n * Pattern for connecting a ground plane to a plated hole\n */\nexport interface PcbThermalSpoke {\n type: \"pcb_thermal_spoke\"\n pcb_thermal_spoke_id: string\n pcb_ground_plane_id: string\n shape: string\n spoke_count: number\n spoke_thickness: Distance\n spoke_inner_diameter: Distance\n spoke_outer_diameter: Distance\n pcb_plated_hole_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbThermalSpoke, InferredPcbThermalSpoke>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { length, type Length, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"./properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { brep_shape, type BRepShape } from \"./properties/brep\"\n\n// Common properties base for all pour shapes (internal)\nconst pcb_copper_pour_base = z.object({\n type: z.literal(\"pcb_copper_pour\"),\n pcb_copper_pour_id: getZodPrefixedIdWithDefault(\"pcb_copper_pour\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: layer_ref,\n source_net_id: z.string().optional(),\n covered_with_solder_mask: z.boolean().optional().default(true),\n})\n\n// Rectangular Pour\nexport const pcb_copper_pour_rect = pcb_copper_pour_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n width: length,\n height: length,\n rotation: rotation.optional(),\n})\nexport type PcbCopperPourRectInput = z.input<typeof pcb_copper_pour_rect>\ntype InferredPcbCopperPourRect = z.infer<typeof pcb_copper_pour_rect>\n/**\n * Defines a rectangular copper pour on the PCB.\n */\nexport interface PcbCopperPourRect {\n type: \"pcb_copper_pour\"\n pcb_copper_pour_id: string\n covered_with_solder_mask: boolean\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n source_net_id?: string\n shape: \"rect\"\n center: Point\n width: Length\n height: Length\n rotation?: Rotation\n}\nexpectTypesMatch<PcbCopperPourRect, InferredPcbCopperPourRect>(true)\n\n// BRep Pour\nexport const pcb_copper_pour_brep = pcb_copper_pour_base.extend({\n shape: z.literal(\"brep\"),\n brep_shape: brep_shape,\n})\nexport type PcbCopperPourBRepInput = z.input<typeof pcb_copper_pour_brep>\ntype InferredPcbCopperPourBRep = z.infer<typeof pcb_copper_pour_brep>\n/**\n * Defines a BRep copper pour on the PCB.\n */\nexport interface PcbCopperPourBRep {\n type: \"pcb_copper_pour\"\n pcb_copper_pour_id: string\n covered_with_solder_mask: boolean\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n source_net_id?: string\n shape: \"brep\"\n brep_shape: BRepShape\n}\nexpectTypesMatch<PcbCopperPourBRep, InferredPcbCopperPourBRep>(true)\n\n// Polygon Pour\nexport const pcb_copper_pour_polygon = pcb_copper_pour_base.extend({\n shape: z.literal(\"polygon\"),\n points: z.array(point),\n})\nexport type PcbCopperPourPolygonInput = z.input<typeof pcb_copper_pour_polygon>\ntype InferredPcbCopperPourPolygon = z.infer<typeof pcb_copper_pour_polygon>\n/**\n * Defines a polygonal copper pour on the PCB, specified by a list of points.\n * The polygon should be closed (the last point implicitly connects to the first).\n */\nexport interface PcbCopperPourPolygon {\n type: \"pcb_copper_pour\"\n pcb_copper_pour_id: string\n covered_with_solder_mask: boolean\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n source_net_id?: string\n shape: \"polygon\"\n points: Point[]\n}\nexpectTypesMatch<PcbCopperPourPolygon, InferredPcbCopperPourPolygon>(true)\n\n// Union of all pour shapes\nexport const pcb_copper_pour = z\n .discriminatedUnion(\"shape\", [\n pcb_copper_pour_rect,\n pcb_copper_pour_brep,\n pcb_copper_pour_polygon,\n ])\n .describe(\"Defines a copper pour on the PCB.\")\n\nexport type PcbCopperPourInput = z.input<typeof pcb_copper_pour>\nexport type PcbCopperPour =\n | PcbCopperPourRect\n | PcbCopperPourBRep\n | PcbCopperPourPolygon\n\ntype InferredPcbCopperPour = z.infer<typeof pcb_copper_pour>\nexpectTypesMatch<PcbCopperPour, InferredPcbCopperPour>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_outside_board_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_component_outside_board_error\"),\n pcb_component_outside_board_error_id: getZodPrefixedIdWithDefault(\n \"pcb_component_outside_board_error\",\n ),\n error_type: z\n .literal(\"pcb_component_outside_board_error\")\n .default(\"pcb_component_outside_board_error\"),\n pcb_component_id: z.string(),\n pcb_board_id: z.string(),\n component_center: point,\n component_bounds: z.object({\n min_x: z.number(),\n max_x: z.number(),\n min_y: z.number(),\n max_y: z.number(),\n }),\n subcircuit_id: z.string().optional(),\n source_component_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a PCB component is placed outside the board boundaries\",\n )\n\nexport type PcbComponentOutsideBoardErrorInput = z.input<\n typeof pcb_component_outside_board_error\n>\ntype InferredPcbComponentOutsideBoardError = z.infer<\n typeof pcb_component_outside_board_error\n>\n\n/** Error emitted when a PCB component is placed outside the board boundaries */\nexport interface PcbComponentOutsideBoardError extends BaseCircuitJsonError {\n type: \"pcb_component_outside_board_error\"\n pcb_component_outside_board_error_id: string\n error_type: \"pcb_component_outside_board_error\"\n pcb_component_id: string\n pcb_board_id: string\n component_center: Point\n component_bounds: {\n min_x: number\n max_x: number\n min_y: number\n max_y: number\n }\n subcircuit_id?: string\n source_component_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentOutsideBoardError,\n InferredPcbComponentOutsideBoardError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_not_on_board_edge_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_component_not_on_board_edge_error\"),\n pcb_component_not_on_board_edge_error_id: getZodPrefixedIdWithDefault(\n \"pcb_component_not_on_board_edge_error\",\n ),\n error_type: z\n .literal(\"pcb_component_not_on_board_edge_error\")\n .default(\"pcb_component_not_on_board_edge_error\"),\n pcb_component_id: z.string(),\n pcb_board_id: z.string(),\n component_center: point,\n pad_to_nearest_board_edge_distance: z.number(),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a component that must be placed on the board edge is centered away from the edge\",\n )\n\nexport type PcbComponentNotOnBoardEdgeErrorInput = z.input<\n typeof pcb_component_not_on_board_edge_error\n>\ntype InferredPcbComponentNotOnBoardEdgeError = z.infer<\n typeof pcb_component_not_on_board_edge_error\n>\n\n/** Error emitted when a component that must be placed on the board edge is centered away from the edge */\nexport interface PcbComponentNotOnBoardEdgeError extends BaseCircuitJsonError {\n type: \"pcb_component_not_on_board_edge_error\"\n pcb_component_not_on_board_edge_error_id: string\n error_type: \"pcb_component_not_on_board_edge_error\"\n pcb_component_id: string\n pcb_board_id: string\n component_center: Point\n pad_to_nearest_board_edge_distance: number\n source_component_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentNotOnBoardEdgeError,\n InferredPcbComponentNotOnBoardEdgeError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_invalid_layer_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_component_invalid_layer_error\"),\n pcb_component_invalid_layer_error_id: getZodPrefixedIdWithDefault(\n \"pcb_component_invalid_layer_error\",\n ),\n error_type: z\n .literal(\"pcb_component_invalid_layer_error\")\n .default(\"pcb_component_invalid_layer_error\"),\n pcb_component_id: z.string().optional(),\n source_component_id: z.string(),\n layer: layer_ref,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers)\",\n )\n\nexport type PcbComponentInvalidLayerErrorInput = z.input<\n typeof pcb_component_invalid_layer_error\n>\ntype InferredPcbComponentInvalidLayerError = z.infer<\n typeof pcb_component_invalid_layer_error\n>\n\n/** Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers) */\nexport interface PcbComponentInvalidLayerError extends BaseCircuitJsonError {\n type: \"pcb_component_invalid_layer_error\"\n pcb_component_invalid_layer_error_id: string\n error_type: \"pcb_component_invalid_layer_error\"\n pcb_component_id?: string\n source_component_id: string\n layer: LayerRef\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentInvalidLayerError,\n InferredPcbComponentInvalidLayerError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_via_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_via_clearance_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_via_clearance_error\")\n .default(\"pcb_via_clearance_error\"),\n pcb_via_ids: z.array(z.string()).min(2),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n pcb_center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Error emitted when vias are closer than the allowed clearance\")\n\nexport type PcbViaClearanceErrorInput = z.input<typeof pcb_via_clearance_error>\ntype InferredPcbViaClearanceError = z.infer<typeof pcb_via_clearance_error>\n\n/** Error emitted when vias are closer than the allowed clearance */\nexport interface PcbViaClearanceError extends BaseCircuitJsonError {\n type: \"pcb_via_clearance_error\"\n pcb_error_id: string\n error_type: \"pcb_via_clearance_error\"\n pcb_via_ids: string[]\n minimum_clearance?: Distance\n actual_clearance?: Distance\n pcb_center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbViaClearanceError, InferredPcbViaClearanceError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_via_trace_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_via_trace_clearance_error\"),\n pcb_via_trace_clearance_error_id: getZodPrefixedIdWithDefault(\n \"pcb_via_trace_clearance_error\",\n ),\n error_type: z\n .literal(\"pcb_via_trace_clearance_error\")\n .default(\"pcb_via_trace_clearance_error\"),\n pcb_via_id: z.string(),\n pcb_trace_id: z.string(),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a via and trace are closer than the allowed clearance\",\n )\n\nexport type PcbViaTraceClearanceErrorInput = z.input<\n typeof pcb_via_trace_clearance_error\n>\ntype InferredPcbViaTraceClearanceError = z.infer<\n typeof pcb_via_trace_clearance_error\n>\n\n/** Error emitted when a via and trace are closer than the allowed clearance */\nexport interface PcbViaTraceClearanceError extends BaseCircuitJsonError {\n type: \"pcb_via_trace_clearance_error\"\n pcb_via_trace_clearance_error_id: string\n error_type: \"pcb_via_trace_clearance_error\"\n pcb_via_id: string\n pcb_trace_id: string\n minimum_clearance?: Distance\n actual_clearance?: Distance\n center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbViaTraceClearanceError, InferredPcbViaTraceClearanceError>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_pad_pad_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_pad_pad_clearance_error\"),\n pcb_pad_pad_clearance_error_id: getZodPrefixedIdWithDefault(\n \"pcb_pad_pad_clearance_error\",\n ),\n error_type: z\n .literal(\"pcb_pad_pad_clearance_error\")\n .default(\"pcb_pad_pad_clearance_error\"),\n pcb_pad_ids: z.array(z.string()).min(2),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Error emitted when pads are closer than the allowed clearance\")\n\nexport type PcbPadPadClearanceErrorInput = z.input<\n typeof pcb_pad_pad_clearance_error\n>\ntype InferredPcbPadPadClearanceError = z.infer<\n typeof pcb_pad_pad_clearance_error\n>\n\n/** Error emitted when pads are closer than the allowed clearance */\nexport interface PcbPadPadClearanceError extends BaseCircuitJsonError {\n type: \"pcb_pad_pad_clearance_error\"\n pcb_pad_pad_clearance_error_id: string\n error_type: \"pcb_pad_pad_clearance_error\"\n pcb_pad_ids: string[]\n minimum_clearance?: Distance\n actual_clearance?: Distance\n center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbPadPadClearanceError, InferredPcbPadPadClearanceError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_pad_trace_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_pad_trace_clearance_error\"),\n pcb_pad_trace_clearance_error_id: getZodPrefixedIdWithDefault(\n \"pcb_pad_trace_clearance_error\",\n ),\n error_type: z\n .literal(\"pcb_pad_trace_clearance_error\")\n .default(\"pcb_pad_trace_clearance_error\"),\n pcb_pad_id: z.string(),\n pcb_trace_id: z.string(),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a pad and trace are closer than allowed clearance\",\n )\n\nexport type PcbPadTraceClearanceErrorInput = z.input<\n typeof pcb_pad_trace_clearance_error\n>\ntype InferredPcbPadTraceClearanceError = z.infer<\n typeof pcb_pad_trace_clearance_error\n>\n\n/** Error emitted when a pad and trace are closer than allowed clearance */\nexport interface PcbPadTraceClearanceError extends BaseCircuitJsonError {\n type: \"pcb_pad_trace_clearance_error\"\n pcb_pad_trace_clearance_error_id: string\n error_type: \"pcb_pad_trace_clearance_error\"\n pcb_pad_id: string\n pcb_trace_id: string\n minimum_clearance?: Distance\n actual_clearance?: Distance\n center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbPadTraceClearanceError, InferredPcbPadTraceClearanceError>(\n true,\n)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_rect = z\n .object({\n type: z.literal(\"pcb_courtyard_rect\"),\n pcb_courtyard_rect_id: getZodPrefixedIdWithDefault(\"pcb_courtyard_rect\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: visible_layer,\n ccw_rotation: rotation.optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard rectangle on the PCB\")\n\nexport type PcbCourtyardRectInput = z.input<typeof pcb_courtyard_rect>\ntype InferredPcbCourtyardRect = z.infer<typeof pcb_courtyard_rect>\n\n/**\n * Defines a courtyard rectangle on the PCB\n */\nexport interface PcbCourtyardRect {\n type: \"pcb_courtyard_rect\"\n pcb_courtyard_rect_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: VisibleLayer\n ccw_rotation?: Rotation\n color?: string\n}\n\n/**\n * @deprecated use PcbCourtyardRect\n */\nexport type PCBCourtyardRect = PcbCourtyardRect\n\nexpectTypesMatch<PcbCourtyardRect, InferredPcbCourtyardRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_outline = z\n .object({\n type: z.literal(\"pcb_courtyard_outline\"),\n pcb_courtyard_outline_id: getZodPrefixedIdWithDefault(\n \"pcb_courtyard_outline\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n outline: z.array(point).min(2),\n })\n .describe(\"Defines a courtyard outline on the PCB\")\n\nexport type PcbCourtyardOutlineInput = z.input<typeof pcb_courtyard_outline>\ntype InferredPcbCourtyardOutline = z.infer<typeof pcb_courtyard_outline>\n\n/**\n * Defines a courtyard outline on the PCB\n */\nexport interface PcbCourtyardOutline {\n type: \"pcb_courtyard_outline\"\n pcb_courtyard_outline_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n outline: Point[]\n}\n\n/**\n * @deprecated use PcbCourtyardOutline\n */\nexport type PCBCourtyardOutline = PcbCourtyardOutline\n\nexpectTypesMatch<PcbCourtyardOutline, InferredPcbCourtyardOutline>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_polygon = z\n .object({\n type: z.literal(\"pcb_courtyard_polygon\"),\n pcb_courtyard_polygon_id: getZodPrefixedIdWithDefault(\n \"pcb_courtyard_polygon\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n points: z.array(point).min(3),\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard polygon on the PCB\")\n\nexport type PcbCourtyardPolygonInput = z.input<typeof pcb_courtyard_polygon>\ntype InferredPcbCourtyardPolygon = z.infer<typeof pcb_courtyard_polygon>\n\n/**\n * Defines a courtyard polygon on the PCB\n */\nexport interface PcbCourtyardPolygon {\n type: \"pcb_courtyard_polygon\"\n pcb_courtyard_polygon_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n points: Point[]\n color?: string\n}\n\n/**\n * @deprecated use PcbCourtyardPolygon\n */\nexport type PCBCourtyardPolygon = PcbCourtyardPolygon\n\nexpectTypesMatch<PcbCourtyardPolygon, InferredPcbCourtyardPolygon>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_circle = z\n .object({\n type: z.literal(\"pcb_courtyard_circle\"),\n pcb_courtyard_circle_id: getZodPrefixedIdWithDefault(\n \"pcb_courtyard_circle\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius: length,\n layer: visible_layer,\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard circle on the PCB\")\n\nexport type PcbCourtyardCircleInput = z.input<typeof pcb_courtyard_circle>\ntype InferredPcbCourtyardCircle = z.infer<typeof pcb_courtyard_circle>\n\n/**\n * Defines a courtyard circle on the PCB\n */\nexport interface PcbCourtyardCircle {\n type: \"pcb_courtyard_circle\"\n pcb_courtyard_circle_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius: Length\n layer: VisibleLayer\n color?: string\n}\n\nexpectTypesMatch<PcbCourtyardCircle, InferredPcbCourtyardCircle>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_pill = z\n .object({\n type: z.literal(\"pcb_courtyard_pill\"),\n pcb_courtyard_pill_id: getZodPrefixedIdWithDefault(\"pcb_courtyard_pill\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n radius: length,\n layer: visible_layer,\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard pill on the PCB\")\n\nexport type PcbCourtyardPillInput = z.input<typeof pcb_courtyard_pill>\ntype InferredPcbCourtyardPill = z.infer<typeof pcb_courtyard_pill>\n\n/**\n * Defines a courtyard pill on the PCB\n */\nexport interface PcbCourtyardPill {\n type: \"pcb_courtyard_pill\"\n pcb_courtyard_pill_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n radius: Length\n layer: VisibleLayer\n color?: string\n}\n\nexpectTypesMatch<PcbCourtyardPill, InferredPcbCourtyardPill>(true)\n","import { type LayerRef, layer_ref } from \"src/pcb\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { type Asset, type Point3, asset, point3 } from \"../common\"\nimport { type Length, type Rotation, length, rotation } from \"../units\"\nimport {\n type CadModelAxisDirection,\n cad_model_axis_directions,\n} from \"./cad_model_conventions\"\n\nexport const cad_component = z\n .object({\n type: z.literal(\"cad_component\"),\n cad_component_id: z.string(),\n pcb_component_id: z\n .string()\n .optional()\n .describe(\n \"Optional PCB component reference; omit for CAD geometry without a PCB component\",\n ),\n source_component_id: z.string(),\n position: point3,\n rotation: point3.optional(),\n is_on_folded_board: z\n .boolean()\n .optional()\n .describe(\n \"True when position and rotation describe the assembled folded board pose. False or omitted means the flat board pose. PCB records remain flat; pcb_component_id identifies the flat mount and owning board for reversible transforms.\",\n ),\n size: point3.optional(),\n layer: layer_ref.optional(),\n subcircuit_id: z.string().optional(),\n\n // These are all ways to generate/load the 3d model\n footprinter_string: z.string().optional(),\n model_obj_url: z.string().optional(),\n model_stl_url: z.string().optional(),\n model_3mf_url: z.string().optional(),\n model_gltf_url: z.string().optional(),\n model_glb_url: z.string().optional(),\n model_step_url: z.string().optional(),\n model_wrl_url: z.string().optional(),\n model_asset: asset.optional(),\n model_unit_to_mm_scale_factor: z.number().optional(),\n model_board_normal_direction: z\n .enum(cad_model_axis_directions)\n .optional()\n .describe(\n 'The direction in the model\\'s coordinate space that is considered \"up\" or \"coming out of the board surface\"',\n ),\n model_origin_position: point3.optional(),\n model_origin_alignment: z\n .enum([\n \"unknown\",\n \"center\",\n \"center_of_component_on_board_surface\",\n \"bottom_center_of_component\",\n ] as const)\n .optional(),\n model_object_fit: z\n .enum([\"contain_within_bounds\", \"fill_bounds\"] as const)\n .optional()\n .default(\"contain_within_bounds\"),\n model_jscad: z.any().optional(),\n show_as_translucent_model: z.boolean().optional(),\n show_as_bounding_box: z.boolean().optional(),\n show_hidden_edges: z.boolean().optional(),\n anchor_alignment: z\n .enum([\"center\", \"center_of_component_on_board_surface\"] as const)\n .optional()\n .default(\"center\"),\n })\n .describe(\"Defines CAD geometry, optionally associated with a PCB component\")\n\nexport type CadComponentInput = z.input<typeof cad_component>\ntype InferredCadComponent = z.infer<typeof cad_component>\n\nexport type CadComponentAnchorAlignment = NonNullable<\n InferredCadComponent[\"anchor_alignment\"]\n>\n\n/** CAD geometry, optionally associated with a PCB component. */\nexport interface CadComponent {\n type: \"cad_component\"\n cad_component_id: string\n /** Omit for CAD geometry that has no corresponding PCB component. */\n pcb_component_id?: string\n source_component_id: string\n position: Point3\n rotation?: Point3\n /** True for assembled folded position/rotation; false or omitted for flat.\n * PCB records stay flat. pcb_component_id identifies the mount/owning board.\n */\n is_on_folded_board?: boolean\n size?: Point3\n layer?: LayerRef\n subcircuit_id?: string\n footprinter_string?: string\n model_obj_url?: string\n model_stl_url?: string\n model_3mf_url?: string\n model_gltf_url?: string\n model_glb_url?: string\n model_step_url?: string\n model_wrl_url?: string\n model_asset?: Asset\n model_unit_to_mm_scale_factor?: number\n model_board_normal_direction?: CadModelAxisDirection\n model_origin_position?: Point3\n model_origin_alignment?:\n | \"unknown\"\n | \"center\"\n | \"center_of_component_on_board_surface\"\n | \"bottom_center_of_component\"\n model_object_fit: \"contain_within_bounds\" | \"fill_bounds\"\n model_jscad?: any\n show_as_translucent_model?: boolean\n show_as_bounding_box?: boolean\n show_hidden_edges?: boolean\n anchor_alignment: CadComponentAnchorAlignment\n}\n\nexpectTypesMatch<CadComponent, InferredCadComponent>(true)\n","export const cad_model_formats = [\n \"obj\",\n \"stl\",\n \"3mf\",\n \"gltf\",\n \"glb\",\n \"step\",\n \"wrl\",\n] as const\n\nexport const cad_model_axis_directions = [\n \"x+\",\n \"x-\",\n \"y+\",\n \"y-\",\n \"z+\",\n \"z-\",\n] as const\n\nexport type CadModelFormat = (typeof cad_model_formats)[number]\nexport type CadModelAxisDirection = (typeof cad_model_axis_directions)[number]\n\nexport const cadModelDefaultDirectionMap = {\n obj: \"z+\",\n stl: \"z+\",\n \"3mf\": \"z+\",\n gltf: \"y+\",\n glb: \"y+\",\n step: \"z+\",\n wrl: \"y+\",\n} as const\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"../base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const cad_collision_error = base_circuit_json_error\n .extend({\n type: z.literal(\"cad_collision_error\"),\n cad_collision_error_id: getZodPrefixedIdWithDefault(\"cad_collision_error\"),\n error_type: z.literal(\"cad_collision_error\").default(\"cad_collision_error\"),\n cad_component_ids: z.array(z.string()).min(1),\n pcb_component_ids: z.array(z.string()).optional(),\n source_component_ids: z.array(z.string()).min(1),\n intersection_area_mm2: z.number().finite().nonnegative(),\n threshold_area_mm2: z.number().finite().nonnegative(),\n })\n .describe(\n \"An aperture-bearing part intersects the finished enclosure. The intersection_area_mm2 is the union silhouette area of the solid intersection projected along the aperture face normal, in the right-handed Circuit JSON world frame (+X right, +Y top, +Z above). It is an area in square millimetres, not intersection volume or surface area. This indicates possible aperture misplacement, insufficient size/depth, or body clearance problems; it does not prove which cause applies.\",\n )\n\nexport type CadCollisionErrorInput = z.input<typeof cad_collision_error>\nexport interface CadCollisionError extends BaseCircuitJsonError {\n type: \"cad_collision_error\"\n cad_collision_error_id: string\n error_type: \"cad_collision_error\"\n cad_component_ids: string[]\n pcb_component_ids?: string[]\n source_component_ids: string[]\n /** Union silhouette of solid intersection, projected along face normal (mm²). */\n intersection_area_mm2: number\n threshold_area_mm2: number\n}\n\nexpectTypesMatch<CadCollisionError, z.infer<typeof cad_collision_error>>(true)\n","import { z } from \"zod\"\nimport { point3, type Point3 } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nconst connectorPin1Position = point3\n .refine(\n (point) => [point.x, point.y, point.z].every(Number.isFinite),\n \"Connector pin 1 positions must be finite\",\n )\n .describe(\n \"Resolved pin 1 position at the connector mating face, in right-handed circuit world, millimeters: +X right, +Y top, +Z above. An absolute point, not a direction. Computed by the circuit producer from endpoint geometry. Together with the endpoint path tangent, fixes connector roll and identifies its pin 1 side; renderers must not infer it from footprints.\",\n )\n\nexport const cad_cable = z\n .object({\n type: z.literal(\"cad_cable\"),\n cad_cable_id: z.string(),\n name: z.string().min(1),\n from_source_component_id: z.string(),\n to_source_component_id: z.string(),\n from_connector_pin1_position: connectorPin1Position.optional(),\n to_connector_pin1_position: connectorPin1Position.optional(),\n cableprinter_string: z\n .string()\n .min(1)\n .describe(\n 'Physical cable definition, e.g. \"usb_c\" or \"jst_ph_pins6\". Independent of the route.',\n ),\n path: z\n .array(point3)\n .min(2)\n .refine(\n (path) =>\n path.every(\n (point, i) =>\n [point.x, point.y, point.z].every(Number.isFinite) &&\n (i === 0 ||\n Math.hypot(\n point.x - path[i - 1]!.x,\n point.y - path[i - 1]!.y,\n point.z - path[i - 1]!.z,\n ) > 1e-8),\n ),\n \"Cable paths require finite, distinct consecutive points\",\n )\n .describe(\n \"Resolved cable centerline points in right-handed circuit world, millimeters: +X right, +Y top, +Z above. First/last samples are connector wire exits; their tangents point into/out of the cable. Includes routing/slack; renderers must not recompute the path.\",\n ),\n })\n .describe(\n \"A physical assembly cable with a resolved 3D route. Several cables are independent cad_cable records, each with its own endpoints, definition and path. Does not imply electrical pin mapping.\",\n )\n\nexport type CadCableInput = z.input<typeof cad_cable>\ntype InferredCadCable = z.infer<typeof cad_cable>\n\n/** Resolved cable geometry in circuit-world XYZ, mm, +Z up. Path samples are\n * points; first and last are wire exits. Optional pin 1 positions are absolute\n * points at the connector mating faces, resolved by the circuit producer.\n * Their transverse offsets from the endpoint centerlines fix connector roll.\n * Omitted positions preserve legacy parallel-transport orientation.\n * Rendering consumes this path without rerouting or adding sag.\n */\nexport interface CadCable {\n type: \"cad_cable\"\n cad_cable_id: string\n name: string\n from_source_component_id: string\n to_source_component_id: string\n from_connector_pin1_position?: Point3\n to_connector_pin1_position?: Point3\n cableprinter_string: string\n path: Point3[]\n}\n\nexpectTypesMatch<CadCable, InferredCadCable>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { frequency, ms, rotation, voltage } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const wave_shape = z.enum([\"sinewave\", \"square\", \"triangle\", \"sawtooth\"])\nexport type WaveShape = z.infer<typeof wave_shape>\n\nconst percentage = z\n .union([z.string(), z.number()])\n .transform((val) => {\n if (typeof val === \"string\") {\n if (val.endsWith(\"%\")) {\n return parseFloat(val.slice(0, -1)) / 100\n }\n return parseFloat(val)\n }\n return val\n })\n .pipe(\n z\n .number()\n .min(0, \"Duty cycle must be non-negative\")\n .max(1, \"Duty cycle cannot be greater than 100%\"),\n )\n\nexport const simulation_dc_voltage_source = z\n .object({\n type: z.literal(\"simulation_voltage_source\"),\n simulation_voltage_source_id: getZodPrefixedIdWithDefault(\n \"simulation_voltage_source\",\n ),\n is_dc_source: z.literal(true).optional().default(true),\n positive_source_port_id: z.string().optional(),\n negative_source_port_id: z.string().optional(),\n positive_source_net_id: z.string().optional(),\n negative_source_net_id: z.string().optional(),\n voltage: voltage,\n ac_magnitude: voltage.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines a DC voltage source for simulation\")\n\nexport const simulation_ac_voltage_source = z\n .object({\n type: z.literal(\"simulation_voltage_source\"),\n simulation_voltage_source_id: getZodPrefixedIdWithDefault(\n \"simulation_voltage_source\",\n ),\n is_dc_source: z.literal(false),\n terminal1_source_port_id: z.string().optional(),\n terminal2_source_port_id: z.string().optional(),\n terminal1_source_net_id: z.string().optional(),\n terminal2_source_net_id: z.string().optional(),\n voltage: voltage.optional(),\n frequency: frequency.optional(),\n peak_to_peak_voltage: voltage.optional(),\n wave_shape: wave_shape.optional(),\n phase: rotation.optional(),\n duty_cycle: percentage.optional(),\n pulse_delay: ms.optional(),\n rise_time: ms.optional(),\n fall_time: ms.optional(),\n pulse_width: ms.optional(),\n period: ms.optional(),\n ac_magnitude: voltage.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines an AC voltage source for simulation\")\n\nexport type SimulationAcVoltageSourceInput = z.input<\n typeof simulation_ac_voltage_source\n>\n\nexport const simulation_voltage_source = z\n .union([simulation_dc_voltage_source, simulation_ac_voltage_source])\n .describe(\"Defines a voltage source for simulation\")\n\nexport type SimulationVoltageSourceInput = z.input<\n typeof simulation_voltage_source\n>\ntype InferredSimulationVoltageSource = z.infer<typeof simulation_voltage_source>\n\n/**\n * Defines a DC voltage source for simulation purposes. It applies a voltage\n * difference between two source ports.\n */\nexport interface SimulationDcVoltageSource {\n type: \"simulation_voltage_source\"\n simulation_voltage_source_id: string\n is_dc_source: true\n positive_source_port_id?: string\n positive_source_net_id?: string\n negative_source_port_id?: string\n negative_source_net_id?: string\n voltage: number\n ac_magnitude?: number\n ac_phase?: number\n}\n\n/**\n * Defines an AC voltage source for simulation purposes.\n */\nexport interface SimulationAcVoltageSource {\n type: \"simulation_voltage_source\"\n simulation_voltage_source_id: string\n is_dc_source: false\n terminal1_source_port_id?: string\n terminal2_source_port_id?: string\n terminal1_source_net_id?: string\n terminal2_source_net_id?: string\n voltage?: number\n frequency?: number\n peak_to_peak_voltage?: number\n wave_shape?: WaveShape\n phase?: number\n duty_cycle?: number\n pulse_delay?: number // ms\n rise_time?: number // ms\n fall_time?: number // ms\n pulse_width?: number // ms\n period?: number // ms\n ac_magnitude?: number\n ac_phase?: number\n}\n\nexport type SimulationVoltageSource =\n | SimulationDcVoltageSource\n | SimulationAcVoltageSource\n\nexpectTypesMatch<\n SimulationDcVoltageSource,\n z.infer<typeof simulation_dc_voltage_source>\n>(true)\nexpectTypesMatch<\n SimulationAcVoltageSource,\n z.infer<typeof simulation_ac_voltage_source>\n>(true)\nexpectTypesMatch<SimulationVoltageSource, InferredSimulationVoltageSource>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { current, frequency, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n wave_shape,\n type WaveShape,\n} from \"src/simulation/simulation_voltage_source\"\n\nconst percentage = z\n .union([z.string(), z.number()])\n .transform((val) => {\n if (typeof val === \"string\") {\n if (val.endsWith(\"%\")) {\n return parseFloat(val.slice(0, -1)) / 100\n }\n return parseFloat(val)\n }\n return val\n })\n .pipe(\n z\n .number()\n .min(0, \"Duty cycle must be non-negative\")\n .max(1, \"Duty cycle cannot be greater than 100%\"),\n )\n\nexport const simulation_dc_current_source = z\n .object({\n type: z.literal(\"simulation_current_source\"),\n simulation_current_source_id: getZodPrefixedIdWithDefault(\n \"simulation_current_source\",\n ),\n is_dc_source: z.literal(true).optional().default(true),\n positive_source_port_id: z.string().optional(),\n negative_source_port_id: z.string().optional(),\n positive_source_net_id: z.string().optional(),\n negative_source_net_id: z.string().optional(),\n current: current,\n ac_magnitude: current.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines a DC current source for simulation\")\n\nexport const simulation_ac_current_source = z\n .object({\n type: z.literal(\"simulation_current_source\"),\n simulation_current_source_id: getZodPrefixedIdWithDefault(\n \"simulation_current_source\",\n ),\n is_dc_source: z.literal(false),\n terminal1_source_port_id: z.string().optional(),\n terminal2_source_port_id: z.string().optional(),\n terminal1_source_net_id: z.string().optional(),\n terminal2_source_net_id: z.string().optional(),\n current: current.optional(),\n frequency: frequency.optional(),\n peak_to_peak_current: current.optional(),\n wave_shape: wave_shape.optional(),\n phase: rotation.optional(),\n duty_cycle: percentage.optional(),\n ac_magnitude: current.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines an AC current source for simulation\")\n\nexport type SimulationAcCurrentSourceInput = z.input<\n typeof simulation_ac_current_source\n>\n\nexport const simulation_current_source = z\n .union([simulation_dc_current_source, simulation_ac_current_source])\n .describe(\"Defines a current source for simulation\")\n\nexport type SimulationCurrentSourceInput = z.input<\n typeof simulation_current_source\n>\ntype InferredSimulationCurrentSource = z.infer<typeof simulation_current_source>\n\n/**\n * Defines a DC current source for simulation purposes. It forces a current\n * between two source ports.\n */\nexport interface SimulationDcCurrentSource {\n type: \"simulation_current_source\"\n simulation_current_source_id: string\n is_dc_source: true\n positive_source_port_id?: string\n positive_source_net_id?: string\n negative_source_port_id?: string\n negative_source_net_id?: string\n current: number\n ac_magnitude?: number\n ac_phase?: number\n}\n\n/**\n * Defines an AC current source for simulation purposes.\n */\nexport interface SimulationAcCurrentSource {\n type: \"simulation_current_source\"\n simulation_current_source_id: string\n is_dc_source: false\n terminal1_source_port_id?: string\n terminal2_source_port_id?: string\n terminal1_source_net_id?: string\n terminal2_source_net_id?: string\n current?: number\n frequency?: number\n peak_to_peak_current?: number\n wave_shape?: WaveShape\n phase?: number\n duty_cycle?: number\n ac_magnitude?: number\n ac_phase?: number\n}\n\nexport type SimulationCurrentSource =\n | SimulationDcCurrentSource\n | SimulationAcCurrentSource\n\nexpectTypesMatch<\n SimulationDcCurrentSource,\n z.infer<typeof simulation_dc_current_source>\n>(true)\nexpectTypesMatch<\n SimulationAcCurrentSource,\n z.infer<typeof simulation_ac_current_source>\n>(true)\nexpectTypesMatch<SimulationCurrentSource, InferredSimulationCurrentSource>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { duration_ms, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { simulation_dc_sweep_unit } from \"./simulation_units\"\n\nexport const experiment_type = z.union([\n z.literal(\"spice_dc_sweep\"),\n z.literal(\"spice_dc_operating_point\"),\n z.literal(\"spice_transient_analysis\"),\n z.literal(\"spice_ac_analysis\"),\n])\n\nexport type ExperimentType = z.infer<typeof experiment_type>\n\nexport const spice_simulation_options = z\n .object({\n method: z.enum([\"trap\", \"gear\"]).optional(),\n reltol: z.union([z.number(), z.string()]).optional(),\n abstol: z.union([z.number(), z.string()]).optional(),\n vntol: z.union([z.number(), z.string()]).optional(),\n })\n .describe(\"SPICE solver options for a simulation experiment\")\n\nexport interface SpiceSimulationOptions {\n method?: \"trap\" | \"gear\"\n reltol?: number | string\n abstol?: number | string\n vntol?: number | string\n}\n\nexport interface SimulationExperiment {\n type: \"simulation_experiment\"\n simulation_experiment_id: string\n name: string\n experiment_type: ExperimentType\n time_per_step?: number // ms\n start_time_ms?: number // ms\n end_time_ms?: number // ms\n spice_options?: SpiceSimulationOptions\n dc_sweep_voltage_source_id?: string\n dc_sweep_current_source_id?: string\n dc_sweep_start?: number\n dc_sweep_stop?: number\n dc_sweep_step?: number\n dc_sweep_unit?: \"V\" | \"A\"\n ac_sweep_type?: \"linear\" | \"decade\" | \"octave\"\n ac_samples_per_interval?: number\n ac_sample_count?: number\n ac_start_frequency_hz?: number\n ac_stop_frequency_hz?: number\n}\n\nexport const simulation_experiment = z\n .object({\n type: z.literal(\"simulation_experiment\"),\n simulation_experiment_id: getZodPrefixedIdWithDefault(\n \"simulation_experiment\",\n ),\n name: z.string(),\n experiment_type,\n time_per_step: duration_ms.optional(),\n start_time_ms: ms.optional(),\n end_time_ms: ms.optional(),\n spice_options: spice_simulation_options.optional(),\n dc_sweep_voltage_source_id: z.string().optional(),\n dc_sweep_current_source_id: z.string().optional(),\n dc_sweep_start: z.number().optional(),\n dc_sweep_stop: z.number().optional(),\n dc_sweep_step: z\n .number()\n .refine((dcSweepStep) => dcSweepStep !== 0)\n .optional(),\n dc_sweep_unit: simulation_dc_sweep_unit.optional(),\n ac_sweep_type: z.enum([\"linear\", \"decade\", \"octave\"]).optional(),\n ac_samples_per_interval: z.number().int().positive().optional(),\n ac_sample_count: z.number().int().positive().optional(),\n ac_start_frequency_hz: z.number().positive().optional(),\n ac_stop_frequency_hz: z.number().positive().optional(),\n })\n .superRefine((experiment, context) => {\n if (experiment.experiment_type === \"spice_dc_sweep\") {\n const requiredFields = [\n \"dc_sweep_start\",\n \"dc_sweep_stop\",\n \"dc_sweep_step\",\n \"dc_sweep_unit\",\n ] as const\n for (const field of requiredFields) {\n if (experiment[field] === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [field],\n message: `${field} is required for a DC sweep`,\n })\n }\n }\n\n const hasVoltageSource =\n experiment.dc_sweep_voltage_source_id !== undefined\n const hasCurrentSource =\n experiment.dc_sweep_current_source_id !== undefined\n if (hasVoltageSource === hasCurrentSource) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"dc_sweep_voltage_source_id\"],\n message:\n \"Exactly one DC sweep voltage or current source ID is required\",\n })\n }\n }\n\n if (experiment.experiment_type === \"spice_ac_analysis\") {\n if (experiment.ac_sweep_type === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_sweep_type\"],\n message: \"ac_sweep_type is required for an AC analysis\",\n })\n }\n if (experiment.ac_start_frequency_hz === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_start_frequency_hz\"],\n message: \"ac_start_frequency_hz is required for an AC analysis\",\n })\n }\n if (experiment.ac_stop_frequency_hz === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_stop_frequency_hz\"],\n message: \"ac_stop_frequency_hz is required for an AC analysis\",\n })\n }\n if (\n experiment.ac_sweep_type === \"linear\" &&\n experiment.ac_sample_count === undefined\n ) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_sample_count\"],\n message: \"ac_sample_count is required for a linear AC analysis\",\n })\n }\n if (\n (experiment.ac_sweep_type === \"decade\" ||\n experiment.ac_sweep_type === \"octave\") &&\n experiment.ac_samples_per_interval === undefined\n ) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_samples_per_interval\"],\n message:\n \"ac_samples_per_interval is required for decade and octave AC analyses\",\n })\n }\n }\n })\n .describe(\"Defines a simulation experiment configuration\")\n\nexport type SimulationExperimentInput = z.input<typeof simulation_experiment>\ntype InferredSimulationExperiment = z.infer<typeof simulation_experiment>\n\nexpectTypesMatch<SimulationExperiment, InferredSimulationExperiment>(true)\n","import { z } from \"zod\"\n\nexport type SimulationDcSweepUnit = \"V\" | \"A\"\n\n// Units intentionally use their canonical symbols instead of enum-style names.\nexport const simulation_dc_sweep_unit = z.custom<SimulationDcSweepUnit>(\n (dcSweepUnit) => dcSweepUnit === \"V\" || dcSweepUnit === \"A\",\n)\n\nexport type SimulationParameterUnit = \"Ω\" | \"F\" | \"H\" | \"V\" | \"A\"\n\n// Units intentionally use their canonical symbols instead of enum-style names.\nexport const simulation_parameter_unit = z.custom<SimulationParameterUnit>(\n (parameterUnit) =>\n parameterUnit === \"Ω\" ||\n parameterUnit === \"F\" ||\n parameterUnit === \"H\" ||\n parameterUnit === \"V\" ||\n parameterUnit === \"A\",\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { duration_ms, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationTransientVoltageGraph {\n type: \"simulation_transient_voltage_graph\"\n simulation_transient_voltage_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n timestamps_ms?: number[]\n voltage_levels: number[]\n source_component_id?: string\n subcircuit_connectivity_map_key?: string\n time_per_step: number\n start_time_ms: number\n end_time_ms: number\n name?: string\n color?: string\n}\n\nexport const simulation_transient_voltage_graph = z\n .object({\n type: z.literal(\"simulation_transient_voltage_graph\"),\n simulation_transient_voltage_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_transient_voltage_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n timestamps_ms: z.array(z.number()).optional(),\n voltage_levels: z.array(z.number()),\n source_component_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n time_per_step: duration_ms,\n start_time_ms: ms,\n end_time_ms: ms,\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\"Stores voltage measurements over time for a simulation\")\n\nexport type SimulationTransientVoltageGraphInput = z.input<\n typeof simulation_transient_voltage_graph\n>\ntype InferredSimulationTransientVoltageGraph = z.infer<\n typeof simulation_transient_voltage_graph\n>\n\nexpectTypesMatch<\n SimulationTransientVoltageGraph,\n InferredSimulationTransientVoltageGraph\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_unit,\n type SimulationParameterUnit,\n} from \"./simulation_units\"\n\nexport interface SimulationParameterSweepCoordinate {\n simulation_parameter_sweep_id: string\n sweep_index: number\n parameter_value: number\n parameter_unit: SimulationParameterUnit\n}\n\nexport const simulation_parameter_sweep_coordinate = z.object({\n simulation_parameter_sweep_id: z.string(),\n sweep_index: z.number().int().nonnegative(),\n parameter_value: z.number(),\n parameter_unit: simulation_parameter_unit,\n})\n\nexpectTypesMatch<\n SimulationParameterSweepCoordinate,\n z.infer<typeof simulation_parameter_sweep_coordinate>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { duration_ms, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationTransientCurrentGraph {\n type: \"simulation_transient_current_graph\"\n simulation_transient_current_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n timestamps_ms?: number[]\n current_levels: number[]\n source_component_id?: string\n subcircuit_connectivity_map_key?: string\n time_per_step: number\n start_time_ms: number\n end_time_ms: number\n name?: string\n color?: string\n}\n\nexport const simulation_transient_current_graph = z\n .object({\n type: z.literal(\"simulation_transient_current_graph\"),\n simulation_transient_current_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_transient_current_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n timestamps_ms: z.array(z.number()).optional(),\n current_levels: z.array(z.number()),\n source_component_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n time_per_step: duration_ms,\n start_time_ms: ms,\n end_time_ms: ms,\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\"Stores current measurements over time for a simulation\")\n\nexport type SimulationTransientCurrentGraphInput = z.input<\n typeof simulation_transient_current_graph\n>\ntype InferredSimulationTransientCurrentGraph = z.infer<\n typeof simulation_transient_current_graph\n>\n\nexpectTypesMatch<\n SimulationTransientCurrentGraph,\n InferredSimulationTransientCurrentGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { frequency, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_switch = z\n .object({\n type: z.literal(\"simulation_switch\"),\n simulation_switch_id: getZodPrefixedIdWithDefault(\"simulation_switch\"),\n source_component_id: z.string().optional(),\n closes_at: ms.optional(),\n opens_at: ms.optional(),\n starts_closed: z.boolean().optional(),\n switching_frequency: frequency.optional(),\n })\n .describe(\"Defines a switch for simulation timing control\")\n\nexport type SimulationSwitchInput = z.input<typeof simulation_switch>\n\ntype InferredSimulationSwitch = z.infer<typeof simulation_switch>\n\nexport interface SimulationSwitch {\n type: \"simulation_switch\"\n simulation_switch_id: string\n source_component_id?: string\n closes_at?: number\n opens_at?: number\n starts_closed?: boolean\n switching_frequency?: number\n}\n\nexpectTypesMatch<SimulationSwitch, InferredSimulationSwitch>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_voltage_probe = z\n .object({\n type: z.literal(\"simulation_voltage_probe\"),\n simulation_voltage_probe_id: getZodPrefixedIdWithDefault(\n \"simulation_voltage_probe\",\n ),\n source_component_id: z.string().optional(),\n name: z.string().optional(),\n signal_input_source_port_id: z.string().optional(),\n signal_input_source_net_id: z.string().optional(),\n reference_input_source_port_id: z.string().optional(),\n reference_input_source_net_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\n \"Defines a voltage probe for simulation. If a reference input is not provided, it measures against ground. If a reference input is provided, it measures the differential voltage between two points.\",\n )\n .superRefine((data, ctx) => {\n const is_differential =\n data.reference_input_source_port_id || data.reference_input_source_net_id\n\n if (is_differential) {\n const has_ports =\n !!data.signal_input_source_port_id ||\n !!data.reference_input_source_port_id\n const has_nets =\n !!data.signal_input_source_net_id ||\n !!data.reference_input_source_net_id\n\n if (has_ports && has_nets) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Cannot mix port and net connections in a differential probe.\",\n })\n } else if (has_ports) {\n if (\n !data.signal_input_source_port_id ||\n !data.reference_input_source_port_id\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Differential port probe requires both signal_input_source_port_id and reference_input_source_port_id.\",\n })\n }\n } else if (has_nets) {\n if (\n !data.signal_input_source_net_id ||\n !data.reference_input_source_net_id\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Differential net probe requires both signal_input_source_net_id and reference_input_source_net_id.\",\n })\n }\n }\n } else {\n // Single-ended probe\n if (\n !!data.signal_input_source_port_id === !!data.signal_input_source_net_id\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"A voltage probe must have exactly one of signal_input_source_port_id or signal_input_source_net_id.\",\n })\n }\n }\n })\n\nexport type SimulationVoltageProbeInput = z.input<\n typeof simulation_voltage_probe\n>\ntype InferredSimulationVoltageProbe = z.infer<typeof simulation_voltage_probe>\n\n/**\n * Defines a voltage probe for simulation. If a reference input is not provided,\n * it measures against ground. If a reference input is provided, it measures\n * the differential voltage between two points.\n */\nexport interface SimulationVoltageProbe {\n type: \"simulation_voltage_probe\"\n simulation_voltage_probe_id: string\n source_component_id?: string\n name?: string\n signal_input_source_port_id?: string\n signal_input_source_net_id?: string\n reference_input_source_port_id?: string\n reference_input_source_net_id?: string\n subcircuit_id?: string\n color?: string\n}\n\nexpectTypesMatch<SimulationVoltageProbe, InferredSimulationVoltageProbe>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_current_probe = z\n .object({\n type: z.literal(\"simulation_current_probe\"),\n simulation_current_probe_id: getZodPrefixedIdWithDefault(\n \"simulation_current_probe\",\n ),\n source_component_id: z.string().optional(),\n name: z.string().optional(),\n positive_source_port_id: z.string().optional(),\n negative_source_port_id: z.string().optional(),\n positive_source_net_id: z.string().optional(),\n negative_source_net_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\n \"Defines a current probe for simulation. It measures current flowing from the positive endpoint to the negative endpoint.\",\n )\n .superRefine((data, ctx) => {\n const hasPositivePort = !!data.positive_source_port_id\n const hasNegativePort = !!data.negative_source_port_id\n const hasPositiveNet = !!data.positive_source_net_id\n const hasNegativeNet = !!data.negative_source_net_id\n const hasPorts = hasPositivePort || hasNegativePort\n const hasNets = hasPositiveNet || hasNegativeNet\n\n if (hasPorts && hasNets) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Cannot mix port and net connections in a current probe.\",\n })\n return\n }\n\n if (hasPorts) {\n if (!hasPositivePort || !hasNegativePort) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Current probe using source ports requires both positive_source_port_id and negative_source_port_id.\",\n })\n }\n return\n }\n\n if (hasNets) {\n if (!hasPositiveNet || !hasNegativeNet) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Current probe using source nets requires both positive_source_net_id and negative_source_net_id.\",\n })\n }\n return\n }\n\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"A current probe must have either positive/negative source port ids or positive/negative source net ids.\",\n })\n })\n\nexport type SimulationCurrentProbeInput = z.input<\n typeof simulation_current_probe\n>\ntype InferredSimulationCurrentProbe = z.infer<typeof simulation_current_probe>\n\n/**\n * Defines a current probe for simulation. It measures current flowing from the\n * positive endpoint to the negative endpoint.\n */\nexport interface SimulationCurrentProbe {\n type: \"simulation_current_probe\"\n simulation_current_probe_id: string\n source_component_id?: string\n name?: string\n positive_source_port_id?: string\n negative_source_port_id?: string\n positive_source_net_id?: string\n negative_source_net_id?: string\n subcircuit_id?: string\n color?: string\n}\n\nexpectTypesMatch<SimulationCurrentProbe, InferredSimulationCurrentProbe>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_unknown_experiment_error = base_circuit_json_error\n .extend({\n type: z.literal(\"simulation_unknown_experiment_error\"),\n simulation_unknown_experiment_error_id: getZodPrefixedIdWithDefault(\n \"simulation_unknown_experiment_error\",\n ),\n error_type: z\n .literal(\"simulation_unknown_experiment_error\")\n .default(\"simulation_unknown_experiment_error\"),\n simulation_experiment_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"An unknown error occurred during the simulation experiment.\")\n\nexport type SimulationUnknownExperimentErrorInput = z.input<\n typeof simulation_unknown_experiment_error\n>\ntype InferredSimulationUnknownExperimentError = z.infer<\n typeof simulation_unknown_experiment_error\n>\n\n/**\n * An unknown error occurred during the simulation experiment.\n */\nexport interface SimulationUnknownExperimentError extends BaseCircuitJsonError {\n type: \"simulation_unknown_experiment_error\"\n simulation_unknown_experiment_error_id: string\n error_type: \"simulation_unknown_experiment_error\"\n simulation_experiment_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SimulationUnknownExperimentError,\n InferredSimulationUnknownExperimentError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_unit,\n type SimulationParameterUnit,\n} from \"./simulation_units\"\n\nexport const simulation_parameter_type = z.enum([\n \"resistance\",\n \"capacitance\",\n \"inductance\",\n \"voltage\",\n \"current\",\n])\n\nexport type SimulationParameterType = z.infer<typeof simulation_parameter_type>\n\ninterface SimulationParameterSweepBase {\n type: \"simulation_parameter_sweep\"\n simulation_parameter_sweep_id: string\n simulation_experiment_id: string\n name?: string\n parameter_values: number[]\n parameter_unit: SimulationParameterUnit\n}\n\nexport interface SimulationResistanceParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"resistance\"\n resistor_source_component_id: string\n}\n\nexport interface SimulationCapacitanceParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"capacitance\"\n capacitor_source_component_id: string\n}\n\nexport interface SimulationInductanceParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"inductance\"\n inductor_source_component_id: string\n}\n\nexport interface SimulationVoltageParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"voltage\"\n source_net_id: string\n}\n\nexport interface SimulationCurrentParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"current\"\n current_source_component_id: string\n}\n\nexport type SimulationParameterSweep =\n | SimulationResistanceParameterSweep\n | SimulationCapacitanceParameterSweep\n | SimulationInductanceParameterSweep\n | SimulationVoltageParameterSweep\n | SimulationCurrentParameterSweep\n\nconst simulation_parameter_sweep_base = z.object({\n type: z.literal(\"simulation_parameter_sweep\"),\n simulation_parameter_sweep_id: getZodPrefixedIdWithDefault(\n \"simulation_parameter_sweep\",\n ),\n simulation_experiment_id: z.string(),\n name: z.string().optional(),\n parameter_values: z.array(z.number()).min(1),\n parameter_unit: simulation_parameter_unit,\n})\n\nexport const simulation_parameter_sweep = z\n .discriminatedUnion(\"parameter_type\", [\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"resistance\"),\n resistor_source_component_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"capacitance\"),\n capacitor_source_component_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"inductance\"),\n inductor_source_component_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"voltage\"),\n source_net_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"current\"),\n current_source_component_id: z.string(),\n }),\n ])\n .describe(\"Repeats a simulation experiment over component parameter values\")\n\nexport type SimulationParameterSweepInput = z.input<\n typeof simulation_parameter_sweep\n>\ntype InferredSimulationParameterSweep = z.infer<\n typeof simulation_parameter_sweep\n>\n\nexpectTypesMatch<SimulationParameterSweep, InferredSimulationParameterSweep>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcOperatingPointVoltage {\n type: \"simulation_dc_operating_point_voltage\"\n simulation_dc_operating_point_voltage_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_voltage_probe_id: string\n voltage: number\n name?: string\n color?: string\n}\n\nexport const simulation_dc_operating_point_voltage = z.object({\n type: z.literal(\"simulation_dc_operating_point_voltage\"),\n simulation_dc_operating_point_voltage_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_operating_point_voltage\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_voltage_probe_id: z.string(),\n voltage: z.number(),\n name: z.string().optional(),\n color: z.string().optional(),\n})\n\nexport type SimulationDcOperatingPointVoltageInput = z.input<\n typeof simulation_dc_operating_point_voltage\n>\ntype InferredSimulationDcOperatingPointVoltage = z.infer<\n typeof simulation_dc_operating_point_voltage\n>\n\nexpectTypesMatch<\n SimulationDcOperatingPointVoltage,\n InferredSimulationDcOperatingPointVoltage\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcOperatingPointCurrent {\n type: \"simulation_dc_operating_point_current\"\n simulation_dc_operating_point_current_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_current_probe_id: string\n current: number\n name?: string\n color?: string\n}\n\nexport const simulation_dc_operating_point_current = z.object({\n type: z.literal(\"simulation_dc_operating_point_current\"),\n simulation_dc_operating_point_current_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_operating_point_current\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_current_probe_id: z.string(),\n current: z.number(),\n name: z.string().optional(),\n color: z.string().optional(),\n})\n\nexport type SimulationDcOperatingPointCurrentInput = z.input<\n typeof simulation_dc_operating_point_current\n>\ntype InferredSimulationDcOperatingPointCurrent = z.infer<\n typeof simulation_dc_operating_point_current\n>\n\nexpectTypesMatch<\n SimulationDcOperatingPointCurrent,\n InferredSimulationDcOperatingPointCurrent\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_dc_sweep_unit,\n type SimulationDcSweepUnit,\n} from \"./simulation_units\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcSweepVoltageGraph {\n type: \"simulation_dc_sweep_voltage_graph\"\n simulation_dc_sweep_voltage_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_voltage_probe_id: string\n sweep_values: number[]\n sweep_unit: SimulationDcSweepUnit\n voltage_levels: number[]\n name?: string\n color?: string\n}\n\nexport const simulation_dc_sweep_voltage_graph = z\n .object({\n type: z.literal(\"simulation_dc_sweep_voltage_graph\"),\n simulation_dc_sweep_voltage_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_sweep_voltage_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_voltage_probe_id: z.string(),\n sweep_values: z.array(z.number()),\n sweep_unit: simulation_dc_sweep_unit,\n voltage_levels: z.array(z.number()),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.sweep_values.length === graph.voltage_levels.length,\n {\n message: \"sweep_values and voltage_levels must have the same length\",\n },\n )\n\nexport type SimulationDcSweepVoltageGraphInput = z.input<\n typeof simulation_dc_sweep_voltage_graph\n>\ntype InferredSimulationDcSweepVoltageGraph = z.infer<\n typeof simulation_dc_sweep_voltage_graph\n>\n\nexpectTypesMatch<\n SimulationDcSweepVoltageGraph,\n InferredSimulationDcSweepVoltageGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_dc_sweep_unit,\n type SimulationDcSweepUnit,\n} from \"./simulation_units\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcSweepCurrentGraph {\n type: \"simulation_dc_sweep_current_graph\"\n simulation_dc_sweep_current_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_current_probe_id: string\n sweep_values: number[]\n sweep_unit: SimulationDcSweepUnit\n current_levels: number[]\n name?: string\n color?: string\n}\n\nexport const simulation_dc_sweep_current_graph = z\n .object({\n type: z.literal(\"simulation_dc_sweep_current_graph\"),\n simulation_dc_sweep_current_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_sweep_current_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_current_probe_id: z.string(),\n sweep_values: z.array(z.number()),\n sweep_unit: simulation_dc_sweep_unit,\n current_levels: z.array(z.number()),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.sweep_values.length === graph.current_levels.length,\n {\n message: \"sweep_values and current_levels must have the same length\",\n },\n )\n\nexport type SimulationDcSweepCurrentGraphInput = z.input<\n typeof simulation_dc_sweep_current_graph\n>\ntype InferredSimulationDcSweepCurrentGraph = z.infer<\n typeof simulation_dc_sweep_current_graph\n>\n\nexpectTypesMatch<\n SimulationDcSweepCurrentGraph,\n InferredSimulationDcSweepCurrentGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_complex_sample,\n type SimulationComplexSample,\n} from \"./simulation_complex_sample\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationAcSweepVoltageGraph {\n type: \"simulation_ac_sweep_voltage_graph\"\n simulation_ac_sweep_voltage_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_voltage_probe_id: string\n frequencies_hz: number[]\n complex_voltages: SimulationComplexSample[]\n name?: string\n color?: string\n}\n\nexport const simulation_ac_sweep_voltage_graph = z\n .object({\n type: z.literal(\"simulation_ac_sweep_voltage_graph\"),\n simulation_ac_sweep_voltage_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_ac_sweep_voltage_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_voltage_probe_id: z.string(),\n frequencies_hz: z.array(z.number()),\n complex_voltages: z.array(simulation_complex_sample),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.frequencies_hz.length === graph.complex_voltages.length,\n {\n message: \"frequencies_hz and complex_voltages must have the same length\",\n },\n )\n\nexport type SimulationAcSweepVoltageGraphInput = z.input<\n typeof simulation_ac_sweep_voltage_graph\n>\ntype InferredSimulationAcSweepVoltageGraph = z.infer<\n typeof simulation_ac_sweep_voltage_graph\n>\n\nexpectTypesMatch<\n SimulationAcSweepVoltageGraph,\n InferredSimulationAcSweepVoltageGraph\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_complex_sample = z.object({\n re: z.number(),\n im: z.number(),\n})\n\nexport interface SimulationComplexSample {\n re: number\n im: number\n}\n\nexpectTypesMatch<\n SimulationComplexSample,\n z.infer<typeof simulation_complex_sample>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_complex_sample,\n type SimulationComplexSample,\n} from \"./simulation_complex_sample\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationAcSweepCurrentGraph {\n type: \"simulation_ac_sweep_current_graph\"\n simulation_ac_sweep_current_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_current_probe_id: string\n frequencies_hz: number[]\n complex_currents: SimulationComplexSample[]\n name?: string\n color?: string\n}\n\nexport const simulation_ac_sweep_current_graph = z\n .object({\n type: z.literal(\"simulation_ac_sweep_current_graph\"),\n simulation_ac_sweep_current_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_ac_sweep_current_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_current_probe_id: z.string(),\n frequencies_hz: z.array(z.number()),\n complex_currents: z.array(simulation_complex_sample),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.frequencies_hz.length === graph.complex_currents.length,\n {\n message: \"frequencies_hz and complex_currents must have the same length\",\n },\n )\n\nexport type SimulationAcSweepCurrentGraphInput = z.input<\n typeof simulation_ac_sweep_current_graph\n>\ntype InferredSimulationAcSweepCurrentGraph = z.infer<\n typeof simulation_ac_sweep_current_graph\n>\n\nexpectTypesMatch<\n SimulationAcSweepCurrentGraph,\n InferredSimulationAcSweepCurrentGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_op_amp = z\n .object({\n type: z.literal(\"simulation_op_amp\"),\n simulation_op_amp_id: getZodPrefixedIdWithDefault(\"simulation_op_amp\"),\n source_component_id: z.string().optional(),\n inverting_input_source_port_id: z.string(),\n non_inverting_input_source_port_id: z.string(),\n output_source_port_id: z.string(),\n positive_supply_source_port_id: z.string(),\n negative_supply_source_port_id: z.string(),\n })\n .describe(\"Defines a simple ideal operational amplifier for simulation\")\n\nexport type SimulationOpAmpInput = z.input<typeof simulation_op_amp>\ntype InferredSimulationOpAmp = z.infer<typeof simulation_op_amp>\n\n/**\n * Defines a simple ideal operational amplifier for simulation.\n */\nexport interface SimulationOpAmp {\n type: \"simulation_op_amp\"\n simulation_op_amp_id: string\n source_component_id?: string\n inverting_input_source_port_id: string\n non_inverting_input_source_port_id: string\n output_source_port_id: string\n positive_supply_source_port_id: string\n negative_supply_source_port_id: string\n}\n\nexpectTypesMatch<SimulationOpAmp, InferredSimulationOpAmp>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport const simulation_spice_subcircuit = z\n .object({\n type: z.literal(\"simulation_spice_subcircuit\"),\n simulation_spice_subcircuit_id: getZodPrefixedIdWithDefault(\n \"simulation_spice_subcircuit\",\n ),\n source_component_id: z.string(),\n spice_pin_to_source_port_map: z.record(z.string(), z.string()),\n subcircuit_source: z.string(),\n })\n .describe(\"Defines a custom SPICE subcircuit model for simulation\")\n\nexport type SimulationSpiceSubcircuitInput = z.input<\n typeof simulation_spice_subcircuit\n>\ntype InferredSimulationSpiceSubcircuit = z.infer<\n typeof simulation_spice_subcircuit\n>\n\n/**\n * Defines a custom SPICE subcircuit model for simulation.\n */\nexport interface SimulationSpiceSubcircuit {\n type: \"simulation_spice_subcircuit\"\n simulation_spice_subcircuit_id: string\n /**\n * Source component this SPICE subcircuit models.\n */\n source_component_id: string\n /**\n * Maps SPICE subcircuit pin names to source port ids.\n */\n spice_pin_to_source_port_map: Record<string, string>\n /**\n * Full SPICE subcircuit source text.\n */\n subcircuit_source: string\n}\n\nexpectTypesMatch<SimulationSpiceSubcircuit, InferredSimulationSpiceSubcircuit>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst hasValue = (value: unknown) => value !== undefined\n\nexport const simulation_oscilloscope_trace = z\n .object({\n type: z.literal(\"simulation_oscilloscope_trace\"),\n simulation_oscilloscope_trace_id: getZodPrefixedIdWithDefault(\n \"simulation_oscilloscope_trace\",\n ),\n simulation_transient_voltage_graph_id: z.string().optional(),\n simulation_transient_current_graph_id: z.string().optional(),\n simulation_voltage_probe_id: z.string().optional(),\n simulation_current_probe_id: z.string().optional(),\n display_name: z.string().optional(),\n color: z.string().optional(),\n display_center_value: z.number().optional(),\n display_center_offset_divs: z.number().optional(),\n volts_per_div: z.number().positive().optional(),\n amps_per_div: z.number().positive().optional(),\n })\n .describe(\n \"Defines how a simulation measurement is rendered as an oscilloscope-style trace.\",\n )\n .superRefine((data, ctx) => {\n const voltageReferences = [\n data.simulation_transient_voltage_graph_id,\n data.simulation_voltage_probe_id,\n ].filter(hasValue).length\n const currentReferences = [\n data.simulation_transient_current_graph_id,\n data.simulation_current_probe_id,\n ].filter(hasValue).length\n\n if (voltageReferences + currentReferences !== 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"An oscilloscope trace must reference exactly one voltage graph, current graph, voltage probe, or current probe.\",\n })\n }\n\n if (voltageReferences > 0 && data.amps_per_div !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Voltage oscilloscope traces must use volts_per_div, not amps_per_div.\",\n })\n }\n\n if (currentReferences > 0 && data.volts_per_div !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Current oscilloscope traces must use amps_per_div, not volts_per_div.\",\n })\n }\n })\n\nexport type SimulationOscilloscopeTraceInput = z.input<\n typeof simulation_oscilloscope_trace\n>\ntype InferredSimulationOscilloscopeTrace = z.infer<\n typeof simulation_oscilloscope_trace\n>\n\n/**\n * Defines how a simulation measurement is rendered as an oscilloscope-style\n * trace. Display fields live here because they describe the relationship\n * between measurement data and a graph, not the probe itself.\n *\n * Scope display fields map measured values into display divisions using\n * display_div = display_center_offset_divs + (raw_value - display_center_value) / units_per_div.\n * Use volts_per_div for voltage traces and amps_per_div for current traces.\n */\nexport interface SimulationOscilloscopeTrace {\n type: \"simulation_oscilloscope_trace\"\n simulation_oscilloscope_trace_id: string\n simulation_transient_voltage_graph_id?: string\n simulation_transient_current_graph_id?: string\n simulation_voltage_probe_id?: string\n simulation_current_probe_id?: string\n display_name?: string\n color?: string\n display_center_value?: number\n display_center_offset_divs?: number\n volts_per_div?: number\n amps_per_div?: number\n}\n\nexpectTypesMatch<\n SimulationOscilloscopeTrace,\n InferredSimulationOscilloscopeTrace\n>(true)\n","import { z } from \"zod\"\nimport * as cad from \"./cad\"\nimport * as pcb from \"./pcb\"\nimport * as sch from \"./schematic\"\nimport * as sim from \"./simulation\"\nimport * as src from \"./source\"\nimport {\n expectStringUnionsMatch,\n expectTypesMatch,\n} from \"./utils/expect-types-match\"\n\nexport const any_circuit_element = z.union([\n src.source_runtime_error,\n // TODO source_config\n // TODO pcb_config\n // TODO schematic_config\n // TODO schematic_group\n src.source_trace,\n src.source_bus,\n src.source_port,\n src.source_component_internal_connection,\n src.any_source_component,\n src.source_net,\n src.source_group,\n src.source_simple_chip,\n src.source_simple_capacitor,\n src.source_simple_diode,\n src.source_simple_led,\n src.source_simple_resistor,\n src.source_simple_power_source,\n src.source_simple_battery,\n src.source_simple_inductor,\n src.source_simple_pin_header,\n src.source_simple_pinout,\n src.source_simple_resonator,\n src.source_simple_switch,\n src.source_simple_transistor,\n src.source_simple_test_point,\n src.source_simple_mosfet,\n src.source_simple_op_amp,\n src.source_simple_potentiometer,\n src.source_simple_push_button,\n src.source_pcb_ground_plane,\n src.source_manually_placed_via,\n src.source_board,\n src.source_project_metadata,\n src.source_invalid_component_property_error,\n src.source_trace_not_connected_error,\n src.source_pin_missing_trace_warning,\n src.source_unnamed_trace_warning,\n src.source_confusing_net_name_warning,\n src.source_missing_manufacturer_part_number_warning,\n src.source_component_availability_warning,\n src.source_refdes_convention_warning,\n src.source_no_power_pin_defined_warning,\n src.source_no_ground_pin_defined_warning,\n src.source_component_pins_underspecified_warning,\n src.source_pin_must_be_connected_error,\n src.unknown_error_finding_part,\n src.source_part_not_found_warning,\n src.source_i2c_misconfigured_error,\n src.source_component_misconfigured_error,\n src.source_ambiguous_port_reference,\n pcb.pcb_component,\n pcb.pcb_debug_object,\n pcb.pcb_hole,\n pcb.pcb_missing_footprint_error,\n pcb.external_footprint_load_error,\n pcb.circuit_json_footprint_load_error,\n pcb.pcb_manual_edit_conflict_warning,\n pcb.pcb_connector_not_in_accessible_orientation_warning,\n pcb.pcb_component_missing_courtyard_warning,\n pcb.supplier_footprint_mismatch_warning,\n pcb.pcb_fabricator_extra_charge_warning,\n pcb.pcb_plated_hole,\n pcb.pcb_keepout,\n pcb.pcb_keepout_overlap_warning,\n pcb.pcb_port,\n pcb.pcb_net,\n pcb.pcb_text,\n pcb.pcb_trace,\n pcb.pcb_trace_warning,\n pcb.pcb_trace_too_long_warning,\n pcb.pcb_trace_too_long_error,\n pcb.pcb_bus_length_skew_error,\n pcb.pcb_trace_too_many_vias_warning,\n pcb.pcb_via,\n pcb.pcb_smtpad,\n pcb.pcb_solder_paste,\n pcb.pcb_soldermask_opening,\n pcb.pcb_board,\n pcb.pcb_bend,\n pcb.pcb_stiffener,\n pcb.pcb_panel,\n pcb.pcb_group,\n pcb.pcb_trace_hint,\n pcb.pcb_silkscreen_line,\n pcb.pcb_silkscreen_path,\n pcb.pcb_silkscreen_text,\n pcb.pcb_silkscreen_pill,\n pcb.pcb_copper_text,\n pcb.pcb_silkscreen_rect,\n pcb.pcb_silkscreen_circle,\n pcb.pcb_silkscreen_oval,\n pcb.pcb_silkscreen_graphic,\n pcb.pcb_bus_routing_constraint_error,\n pcb.pcb_bus_routing_constraint_warning,\n pcb.pcb_trace_error,\n pcb.pcb_trace_missing_error,\n pcb.pcb_placement_error,\n pcb.pcb_packing_error,\n pcb.pcb_panelization_placement_error,\n pcb.pcb_port_not_matched_error,\n pcb.pcb_port_not_connected_error,\n pcb.pcb_via_clearance_error,\n pcb.pcb_via_trace_clearance_error,\n pcb.pcb_pad_pad_clearance_error,\n pcb.pcb_pad_trace_clearance_error,\n pcb.pcb_fabrication_note_path,\n pcb.pcb_fabrication_note_text,\n pcb.pcb_fabrication_note_rect,\n pcb.pcb_fabrication_note_dimension,\n pcb.pcb_note_text,\n pcb.pcb_note_rect,\n pcb.pcb_note_path,\n pcb.pcb_note_line,\n pcb.pcb_note_dimension,\n pcb.pcb_autorouting_error,\n pcb.pcb_preflight_routing_error,\n pcb.pcb_footprint_overlap_error,\n pcb.pcb_courtyard_overlap_error,\n pcb.pcb_breakout_point,\n pcb.pcb_cutout,\n pcb.pcb_ground_plane,\n pcb.pcb_ground_plane_region,\n pcb.pcb_thermal_spoke,\n pcb.pcb_copper_pour,\n pcb.pcb_component_outside_board_error,\n pcb.pcb_component_not_on_board_edge_error,\n pcb.pcb_component_invalid_layer_error,\n pcb.pcb_courtyard_rect,\n pcb.pcb_courtyard_outline,\n pcb.pcb_courtyard_polygon,\n pcb.pcb_courtyard_circle,\n pcb.pcb_courtyard_pill,\n sch.schematic_box,\n sch.schematic_text,\n sch.schematic_line,\n sch.schematic_rect,\n sch.schematic_circle,\n sch.schematic_arc,\n sch.schematic_component,\n sch.schematic_symbol,\n sch.schematic_port,\n sch.schematic_trace,\n sch.schematic_path,\n sch.schematic_error,\n sch.schematic_layout_error,\n sch.schematic_net_label,\n sch.schematic_debug_object,\n sch.schematic_voltage_probe,\n sch.schematic_manual_edit_conflict_warning,\n sch.schematic_component_overlap_warning,\n sch.schematic_component_styling_warning,\n sch.schematic_missing_sheet_warning,\n sch.schematic_element_outside_sheet_warning,\n sch.schematic_graphic,\n sch.schematic_group,\n sch.schematic_sheet,\n sch.schematic_table,\n sch.schematic_table_cell,\n cad.cad_component,\n cad.cad_cable,\n cad.cad_collision_error,\n sim.simulation_voltage_source,\n sim.simulation_current_source,\n sim.simulation_experiment,\n sim.simulation_transient_voltage_graph,\n sim.simulation_transient_current_graph,\n sim.simulation_dc_operating_point_voltage,\n sim.simulation_dc_operating_point_current,\n sim.simulation_dc_sweep_voltage_graph,\n sim.simulation_dc_sweep_current_graph,\n sim.simulation_ac_sweep_voltage_graph,\n sim.simulation_ac_sweep_current_graph,\n sim.simulation_parameter_sweep,\n sim.simulation_switch,\n sim.simulation_voltage_probe,\n sim.simulation_current_probe,\n sim.simulation_oscilloscope_trace,\n sim.simulation_unknown_experiment_error,\n sim.simulation_op_amp,\n sim.simulation_spice_subcircuit,\n])\n\n/**\n * @deprecated use any_circuit_element instead\n */\nexport const any_soup_element = any_circuit_element\n\nexport type AnyCircuitElement = z.infer<typeof any_circuit_element>\nexport type AnyCircuitElementInput = z.input<typeof any_circuit_element>\n/**\n * @deprecated use AnyCircuitElement instead\n */\nexport type AnySoupElement = AnyCircuitElement\n\n/**\n * @deprecated use AnyCircuitElementInput instead\n */\nexport type AnySoupElementInput = AnyCircuitElementInput\n\n/**\n * Type representing a complete Circuit JSON document, which is an array of circuit elements.\n * This is the primary type used when working with circuit-json files or API responses.\n */\nexport type CircuitJson = AnyCircuitElement[]\n\n// ------------------- SAFETY CHECKS -------------------\n\n// SAFETY CHECK: Every element has a type\nexpectTypesMatch<\n AnyCircuitElement extends { type: string } ? AnyCircuitElement : never,\n AnyCircuitElement\n>(true)\n\n// SAFETY CHECK: Every element has an id with the key name `${type}_id`\ntype FindMissingId<T extends AnyCircuitElement> = T extends {\n type: infer U extends string\n}\n ? T extends { [K in `${U}_id`]: infer V }\n ? V extends string\n ? never\n : `${U} DOES NOT HAVE AN ${U}_id PROPERTY`\n : `${U} DOES NOT HAVE AN ${U}_id PROPERTY`\n : never\n\nexpectStringUnionsMatch<\n FindMissingId<AnyCircuitElement>,\n // EXCEPTIONS TO THE RULE\n // THIS IS FOR LEGACY REASONS, DO NOT ADD MORE EXCEPTIONS\n | \"source_project_metadata DOES NOT HAVE AN source_project_metadata_id PROPERTY\"\n | \"pcb_port_not_matched_error DOES NOT HAVE AN pcb_port_not_matched_error_id PROPERTY\"\n | \"pcb_autorouting_error DOES NOT HAVE AN pcb_autorouting_error_id PROPERTY\"\n | \"pcb_footprint_overlap_error DOES NOT HAVE AN pcb_footprint_overlap_error_id PROPERTY\"\n | \"pcb_courtyard_overlap_error DOES NOT HAVE AN pcb_courtyard_overlap_error_id PROPERTY\"\n | \"pcb_via_clearance_error DOES NOT HAVE AN pcb_via_clearance_error_id PROPERTY\"\n | \"schematic_debug_object DOES NOT HAVE AN schematic_debug_object_id PROPERTY\"\n | \"schematic_box DOES NOT HAVE AN schematic_box_id PROPERTY\"\n>(true)\n"],"mappings":";AAAA,SAAS,6BAA6B;AACtC,SAAS,SAAS;AAClB;AAAA,EACE,yBAAAA;AAAA,OAEK;AAsDA,IAAM,aAAa,EACvB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,GAAG,QAAG,EAAE,KAAM;AAEjD,IAAM,cAAc,EACxB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,KAAM,EACrD,UAAU,CAAC,UAAU;AACpB,SAAO,OAAO,WAAW,MAAM,YAAY,EAAE,CAAC;AAChD,CAAC;AAEI,IAAM,aAAa,EACvB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,KAAM;AAEjD,IAAM,UAAU,EACpB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,KAAM;AAEjD,IAAM,SAAS,EACnB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAM;AAE5C,IAAM,YAAY,EACtB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,GAAG,IAAI,EAAE,KAAM;AAQlD,IAAM,WAAW;AAEjB,IAAM,UAAU,EACpB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,KAAM;AAEjD,IAAM,cAAc,EACxB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAM;AAE5C,IAAM,OAAO;AAEb,IAAM,KAAK;AAEX,IAAM,YAAY,EAAE,OAAO,EAAE,SAAS;AAKtC,IAAM,WAAW,EACrB,OAAO,EACP,GAAG,EAAE,OAAO,CAAC,EACb,UAAU,CAAC,QAAgB;AAC1B,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,MAAI,IAAI,SAAS,KAAK,GAAG;AACvB,WAAO,OAAO,WAAW,IAAI,MAAM,KAAK,EAAE,CAAC,CAAE;AAAA,EAC/C;AACA,MAAI,IAAI,SAAS,KAAK,GAAG;AACvB,WAAQ,OAAO,WAAW,IAAI,MAAM,KAAK,EAAE,CAAC,CAAE,IAAI,MAAO,KAAK;AAAA,EAChE;AACA,SAAO,OAAO,WAAW,GAAG;AAC9B,CAAC;AAEI,IAAM,mBAAmB,EAC7B,OAAO,EACP,GAAG,EAAE,OAAO,EAAE,SAAS,KAAK,CAAC,EAC7B,UAAU,CAAC,MAAM;AAChB,MAAI,OAAO,MAAM,UAAU;AACzB,UAAM,YAAY,EAAE,QAAQ,OAAO,EAAE;AACrC,UAAM,MAAM,OAAO,WAAW,SAAS;AACvC,QAAI,OAAO,MAAM,GAAG,GAAG;AACrB,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT,CAAC,EACA,SAAS,yBAAyB;;;ACnJrC,SAAS,KAAAC,UAAS;;;ACYX,IAAM,mBAAmB,CAO9B,aAOS;AAAC;AAIZ,iBAQE,eAAe;AAEjB,iBAQE,iBAAiB;AAEnB,iBAOE,IAAI;AAEN,iBAOE,0BAA0B;AAmBrB,IAAM,0BAA0B,CAKrC,aACS;AAAC;AASZ,wBAAgD,IAAI;AACpD;AAAA,EACE;AACF;AACA,wBAAgD,mBAAmB;AACnE,wBAAgD,mBAAmB;AACnE;AAAA,EACE;AACF;AAIA,wBAAgD,IAAI;;;AD5G7C,IAAM,QAAQC,GAAE,OAAO;AAAA,EAC5B,GAAG;AAAA,EACH,GAAG;AACL,CAAC;AAEM,IAAM,WAAW;AAiBxB,iBAAuC,IAAI;AAC3C,iBAA6C,IAAI;;;AE3BjD,SAAS,KAAAC,UAAS;AAIX,IAAM,SAASC,GAAE,OAAO;AAAA,EAC7B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,CAAC;AAEM,IAAM,YAAY;AAUzB,iBAAyC,IAAI;;;ACpB7C,SAAS,KAAAC,UAAS;AAGX,IAAM,OAAOC,GAAE,OAAO;AAAA,EAC3B,OAAOA,GAAE,OAAO;AAAA,EAChB,QAAQA,GAAE,OAAO;AACnB,CAAC;AAUD,iBAAqC,IAAI;;;AChBzC,SAAS,KAAAC,UAAS;AAKlB,IAAM,kBAAkB,SAAS,KAAKC,GAAE,OAAO,EAAE,OAAO,CAAC;AACzD,IAAM,oBAAoB,SAAS,KAAKA,GAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;AAE/D,IAAM,eAAeA,GACzB,OAAO;AAAA,EACN,OAAOA,GAAE,QAAQ,QAAQ;AAAA,EACzB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQ;AACV,CAAC,EACA,OAAO;AAEH,IAAM,aAAaA,GACvB,OAAO;AAAA,EACN,OAAOA,GAAE,QAAQ,MAAM;AAAA,EACvB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAO;AAAA,EACP,QAAQ;AACV,CAAC,EACA,OAAO;AAEH,IAAM,qBAAqB,WAAW,OAAO;AAAA,EAClD,OAAOA,GAAE,QAAQ,cAAc;AAAA,EAC/B,cAAc,SAAS,KAAKA,GAAE,OAAO,EAAE,OAAO,CAAC;AACjD,CAAC;AAEM,IAAM,gBAAgBA,GAC1B,OAAO;AAAA,EACN,OAAOA,GAAE,QAAQ,SAAS;AAAA,EAC1B,QAAQA,GACL,MAAM,MAAM,OAAO,EAAE,GAAG,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,EAC9D,IAAI,CAAC,EACL,OAAO,CAAC,WAAW;AAClB,UAAM,aAAa,OAAO,OAAO,CAAC,KAAKC,QAAO,UAAU;AACtD,YAAM,OAAO,QAAQ,QAAQ,KAAK,OAAO,MAAM;AAC/C,aAAO,MAAMA,OAAM,IAAI,KAAK,IAAI,KAAK,IAAIA,OAAM;AAAA,IACjD,GAAG,CAAC;AACJ,WAAO,OAAO,SAAS,UAAU,KAAK,eAAe;AAAA,EACvD,GAAG,8CAA8C;AACrD,CAAC,EACA,OAAO;AA+BV,iBAA6D,IAAI;AACjE,iBAAyD,IAAI;AAC7D,iBAAwE,IAAI;AAC5E,iBAA+D,IAAI;AAM5D,IAAM,iBAAiBD,GAAE,mBAAmB,SAAS;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AASD,iBAAiE,IAAI;;;ACpGrE,SAAS,KAAAE,UAAS;AAGlB,IAAM,WAAW,CAACC,YAA2B;AAC3C,QAAM,QAAQ;AACd,SAAO,MAAM;AAAA,IACX,EAAE,QAAAA,QAAO;AAAA,IACT,MAAM,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC;AAAA,EACtD,EAAE,KAAK,EAAE;AACX;AAIO,IAAM,8BAA8B,CAAC,WAAmB;AAC7D,SAAOD,GACJ,OAAO,EACP,SAAS,EACT,QAAQ,MAAM,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,EAAE;AAC9C;;;AClBA,SAAS,KAAAE,UAAS;AAcX,IAAM,kBAAkBC,GAAE,KAAK;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAID,iBAA2D,IAAI;;;AC5B/D,SAAS,KAAAC,UAAS;AA2BX,IAAM,iBAAiBC,GAAE,KAAK;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAID,iBAAyD,IAAI;;;ACtD7D,SAAS,KAAAC,UAAS;AAGX,IAAM,QAAQC,GAAE,OAAO;AAAA,EAC5B,uBAAuBA,GAAE,OAAO;AAAA,EAChC,KAAKA,GAAE,OAAO;AAAA,EACd,UAAUA,GAAE,OAAO;AACrB,CAAC;AAKD,iBAAoC,IAAI;;;ACZxC,SAAS,KAAAC,WAAS;AAYX,IAAM,UAAU,MAAM,OAAO;AAAA,EAClC,UAAU,SAAS,SAAS;AAC9B,CAAC;AAGD,iBAA2C,IAAI;AAOxC,IAAM,YAAYC,IAAE,OAAO;AAAA,EAChC,MAAM,MAAM,SAAS;AAAA,EACrB,WAAW,SAAS,SAAS;AAC/B,CAAC;AAGD,iBAA+C,IAAI;AAM5C,IAAM,eAAeA,IAAE,OAAO;AAAA,EACnC,MAAM,UAAU,SAAS;AAC3B,CAAC;AAGD,iBAAqD,IAAI;AAWlD,IAAM,gBAAgBA,IAAE,OAAO;AAAA,EACpC,OAAOA,IAAE,OAAO;AAAA,EAChB,IAAI,QAAQ,SAAS;AAAA,EACrB,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC3B,SAAS,aAAa,SAAS;AACjC,CAAC;AAGD,iBAAuD,IAAI;AASpD,IAAM,2BAA2BA,IAAE,OAAO;AAAA,EAC/C,WAAW,cAAc,SAAS;AAAA,EAClC,OAAO,cAAc,SAAS;AAAA,EAC9B,WAAW,cAAc,SAAS;AAAA,EAClC,aAAa,cAAc,SAAS;AACtC,CAAC;AAGD;AAAA,EACE;AACF;AASO,IAAM,2BAA2BA,IAAE,OAAO;AAAA,EAC/C,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,KAAKA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC1B,wBAAwBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC7C,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AACzC,CAAC;AAGD;AAAA,EACE;AACF;AAcO,IAAM,oBAAoBA,IAAE,OAAO;AAAA,EACxC,MAAMA,IAAE,OAAO;AAAA,EACf,MAAMA,IAAE,OAAO;AAAA,EACf,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,IAAI,QAAQ,SAAS;AAAA,EACrB,MAAM,MAAM,SAAS;AAAA,EACrB,OAAO,SAAS,SAAS;AAAA,EACzB,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,oBAAoBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,MAAMA,IAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAGD,iBAA+D,IAAI;AAS5D,IAAM,sBAAsBA,IAAE,OAAO;AAAA,EAC1C,MAAMA,IAAE,OAAO;AAAA,EACf,QAAQ,OAAO,SAAS;AAAA,EACxB,OAAO,OAAO,SAAS;AAAA,EACvB,QAAQ,OAAO,SAAS;AAC1B,CAAC;AAGD,iBAAmE,IAAI;AAehE,IAAM,yBAAyBA,IAAE,OAAO;AAAA,EAC7C,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,SAASA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACpD,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,kBAAkBA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EAC7D,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAY,yBAAyB,SAAS;AAAA,EAC9C,YAAY,yBAAyB,SAAS;AAAA,EAC9C,MAAMA,IAAE,MAAM,iBAAiB,EAAE,SAAS;AAAA,EAC1C,eAAeA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,OAAO,oBAAoB,SAAS;AACtC,CAAC;AAGD,iBAAyE,IAAI;;;AC7K7E,SAAS,KAAAC,WAAS;AAcX,IAAM,wBAAwBC,IAAE,OAAO;AAAA,EAC5C,MAAMA,IAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAGD,iBAAuE,IAAI;AAOpE,IAAM,sBAAsBA,IAAE,OAAO;AAAA,EAC1C,QAAQ,SAAS,SAAS;AAAA,EAC1B,MAAMA,IAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAGD,iBAAmE,IAAI;AAQhE,IAAM,qBAAqBA,IAAE,OAAO;AAAA,EACzC,MAAM,UAAU,SAAS;AAAA,EACzB,SAASA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC7D,MAAMA,IAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAGD,iBAAiE,IAAI;AAS9D,IAAM,sBAAsBA,IAAE,OAAO;AAAA,EAC1C,OAAOA,IAAE,OAAO;AAAA,EAChB,IAAIA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EAC/C,IAAI,QAAQ,SAAS;AAAA,EACrB,SAAS,mBAAmB,SAAS;AACvC,CAAC;AAGD,iBAAmE,IAAI;AAYhE,IAAM,wBAAwBA,IAAE,OAAO;AAAA,EAC5C,WAAW,oBAAoB,SAAS;AAAA,EACxC,OAAO,oBAAoB,SAAS;AAAA,EACpC,WAAW,oBAAoB,SAAS;AAAA,EACxC,WAAW,oBAAoB,SAAS;AAAA,EACxC,aAAa,oBAAoB,SAAS;AAAA,EAC1C,aAAa,oBAAoB,SAAS;AAAA,EAC1C,eAAe,oBAAoB,SAAS;AAC9C,CAAC;AAGD,iBAAuE,IAAI;AAcpE,IAAM,sBAAsBA,IAAE,OAAO;AAAA,EAC1C,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,YAAY,sBAAsB,SAAS;AAAA,EAC3C,UAAU,oBAAoB,SAAS;AAAA,EACvC,gBAAgBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,OAAOA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,SAASA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,YAAY,sBAAsB,SAAS;AAAA,EAC3C,eAAeA,IAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;AAGD,iBAAmE,IAAI;;;AClHvE,SAAS,KAAAC,WAAS;AAGX,IAAM,0BAA0BC,IAAE,OAAO;AAAA,EAC9C,YAAYA,IAAE,OAAO;AAAA,EACrB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,QAAQ,EAAE,SAAS;AACjC,CAAC;AAWD,iBAAqE,IAAI;;;AClBzE,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,gBAAgBC,IAAE,KAAK;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAYD,iBAAqD,IAAI;;;ACjBzD,SAAS,KAAAC,WAAS;AAiBX,IAAM,wBAAwBA,IAAE,OAAO;AAAA,EAC5C,MAAMA,IAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,MAAMA,IAAE,OAAO;AAAA,EACf,0BAA0BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,uBAAuBA,IACpB,OAAO,eAAeA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,EACzC,SAAS;AAAA,EACZ,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,0BAA0BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/C,sCAAsCA,IAAE,MAAMA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EAC5E,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAID,iBAAmE,IAAI;;;AFjChE,IAAM,0BAA0B,sBAAsB,OAAO;AAAA,EAClE,OAAOC,IAAE,QAAQ,kBAAkB;AAAA,EACnC;AAAA,EACA,oBAAoB,QAAQ,SAAS;AAAA,EACrC,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,6BAA6B,SAAS,SAAS;AACjD,CAAC;AAgBD,iBAAuE,IAAI;;;AG9B3E,SAAS,KAAAC,WAAS;AAQX,IAAM,yBAAyB,sBAAsB,OAAO;AAAA,EACjE,OAAOC,IAAE,QAAQ,iBAAiB;AAAA,EAClC;AAAA,EACA,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAcD,iBAAqE,IAAI;;;ACtBzE,SAAS,KAAAC,WAAS;AAGX,IAAM,sBAAsB,sBAAsB,OAAO;AAAA,EAC9D,OAAOC,IAAE,QAAQ,cAAc;AACjC,CAAC;AAYD,iBAA+D,IAAI;;;ACrBnE,SAAS,KAAAC,WAAS;AAOX,IAAM,yBAAyB,sBAAsB,OAAO;AAAA,EACjE,OAAOC,IAAE,QAAQ,iBAAiB;AACpC,CAAC;AAYD,iBAAqE,IAAI;;;ACjBzE,SAAS,KAAAC,WAAS;AAOX,IAAM,oBAAoB,oBAAoB,OAAO;AAAA,EAC1D,OAAOC,IAAE,QAAQ,YAAY;AAAA,EAC7B,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAYA,IAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAcD,iBAA2D,IAAI;;;ACzB/D,SAAS,KAAAC,WAAS;AAGX,IAAM,uBAAuB,sBAAsB,OAAO;AAAA,EAC/D,OAAOC,IAAE,QAAQ,eAAe;AAClC,CAAC;AAYD,iBAAiE,IAAI;;;ACrBrE,SAAS,KAAAC,WAAS;AAOX,IAAM,qBAAqB,sBAAsB,OAAO;AAAA,EAC7D,OAAOC,IAAE,QAAQ,aAAa;AAChC,CAAC;AAYD,iBAA6D,IAAI;;;ACrBjE,SAAS,KAAAC,WAAS;AAOX,IAAM,sBAAsB,sBAAsB,OAAO;AAAA,EAC9D,OAAOC,IAAE,QAAQ,aAAa;AAChC,CAAC;AAUD,iBAA+D,IAAI;;;ACnBnE,SAAS,KAAAC,WAAS;AAOX,IAAM,qBAAqB,sBAAsB,OAAO;AAAA,EAC7D,OAAOC,IAAE,QAAQ,aAAa;AAChC,CAAC;AAUD,iBAA+D,IAAI;;;ACnBnE,SAAS,KAAAC,WAAS;AAOX,IAAM,eAAe,sBAAsB,OAAO;AAAA,EACvD,OAAOC,IAAE,QAAQ,OAAO;AAC1B,CAAC;AAUD,iBAAmD,IAAI;;;ACnBvD,SAAS,KAAAC,WAAS;AAQX,IAAM,6BAA6B,sBAAsB,OAAO;AAAA,EACrE,OAAOC,IAAE,QAAQ,qBAAqB;AAAA,EACtC;AACF,CAAC;AAiBD,iBAA2E,IAAI;;;AC5B/E,SAAS,KAAAC,WAAS;AAQX,IAAM,+BAA+B,sBAAsB,OAAO;AAAA,EACvE,OAAOC,IAAE,QAAQ,uBAAuB;AAAA,EACxC;AAAA,EACA,WAAW,UAAU,SAAS;AAAA,EAC9B,sBAAsB,QAAQ,SAAS;AAAA,EACvC,YAAYA,IACT,KAAK,CAAC,QAAQ,UAAU,YAAY,YAAY,IAAI,CAAC,EACrD,SAAS,EACT,QAAQ,IAAI;AAAA,EACf,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAYA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAChD,CAAC;AAsBD;AAAA,EACE;AACF;;;AC3CA,SAAS,KAAAC,WAAS;AAOX,IAAM,qBAAqB,sBAAsB,OAAO;AAAA,EAC7D,OAAOC,IAAE,QAAQ,aAAa;AAAA,EAE9B,qBAAqBA,IAClB,OAAO,EACP,SAAS,+CAA+C;AAAA,EAE3D,sBAAsBA,IACnB,OAAO,EACP,SAAS,iDAA8C;AAC5D,CAAC;AAWD,iBAA6D,IAAI;;;AC5BjE,SAAS,KAAAC,WAAS;AAOX,IAAM,wBAAwB,sBAAsB,OAAO;AAAA,EAChE,OAAOC,IAAE,QAAQ,gBAAgB;AACnC,CAAC;AAYD,iBAAmE,IAAI;;;ACrBvE,SAAS,KAAAC,WAAS;AAMlB,IAAM,cAAgEC,IACnE,MAAM;AAAA,EACLA,IAAE,OAAO;AAAA,EACTA,IACG,OAAO,EACP,KAAK,EACL;AAAA,IACC;AAAA,IACA;AAAA,EACF;AACJ,CAAC,EACA,KAAK,OAAO,EACZ,KAAKA,IAAE,OAAO,EAAE,OAAO,CAAC;AAEpB,IAAM,wBAAwBA,IAAE,OAAO;AAAA,EAC5C,UAAUA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,YAAYA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,oBAAoBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,wBAAwBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC7C,yBAAyBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC9C,sBAAsBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,uBAAuBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,SAASA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,gBAAgBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,gBAAgBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,iBAAiBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,iBAAiBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,kBAAkB,YAAY,SAAS;AAAA,EACvC,kBAAkB,YAAY,SAAS;AAAA,EACvC,4BAA4BA,IAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACvE,gBAAgBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,yBAAyBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC9C,yBAAyBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC9C,0BAA0BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/C,uBAAuBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,2BAA2BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,4BAA4BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,yBAAyBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC9C,oBAAoBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,qBAAqBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC1C,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,oBAAoBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,kCAAkCA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvD,8CAA8CA,IAC3C,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAC9B,SAAS;AAAA,EACZ,2BAA2BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,2BAA2BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,4BAA4BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,4BAA4BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,2BAA2BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,0BAA0BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/C,2BAA2BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,2BAA2BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,iBAAiBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AACzC,CAAC;AA2DD,iBAAmE,IAAI;;;ACpIvE,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAQX,IAAM,wBAAwB,sBAAsB,OAAO;AAAA,EAChE,OAAOC,IAAE,QAAQ,gBAAgB;AAAA,EACjC,UAAU;AACZ,CAAC;AAaD,iBAAmE,IAAI;;;ACxBvE,SAAS,KAAAC,WAAS;AAQX,IAAM,yBAAyB,sBAAsB,OAAO;AAAA,EACjE,OAAOC,IAAE,QAAQ,iBAAiB;AAAA,EAClC;AAAA,EACA,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAeD,iBAAqE,IAAI;;;AC5BzE,SAAS,KAAAC,WAAS;AAOX,IAAM,4BAA4B,sBAAsB,OAAO;AAAA,EACpE,OAAOC,IAAE,QAAQ,oBAAoB;AACvC,CAAC;AAcD,iBAAyE,IAAI;;;ACvB7E,SAAS,KAAAC,WAAS;AAQX,IAAM,8BAA8B,sBAAsB,OAAO;AAAA,EACtE,OAAOC,IAAE,QAAQ,sBAAsB;AAAA,EACvC,gBAAgB;AAAA,EAChB,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAC9C,CAAC;AAeD;AAAA,EACE;AACF;;;AC7BA,SAAS,KAAAC,WAAS;AAOX,IAAM,wBAAwB,sBAAsB,OAAO;AAAA,EAChE,OAAOC,IAAE,QAAQ,gBAAgB;AAAA,EACjC,WAAWA,IAAE,OAAO,EAAE,SAAS,iBAAiB;AAAA,EAChD,kBAAkBA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,EACzE,aAAaA,IAAE,KAAK,CAAC,WAAW,UAAU,CAAC,EAAE,SAAS;AACxD,CAAC;AAeD,iBAAmE,IAAI;;;ACvBvE,SAAS,KAAAC,WAAS;AAGX,IAAM,2BAA2B,sBAAsB,OAAO;AAAA,EACnE,OAAOC,IAAE,QAAQ,mBAAmB;AAAA,EACpC,WAAWA,IAAE,OAAO;AAAA,EACpB,QAAQA,IAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,MAAM;AAC9D,CAAC;AAaD,iBAAuE,IAAI;;;ACpB3E,SAAS,KAAAC,WAAS;AAGX,IAAM,oCAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,0BAA0B,sBAAsB,OAAO;AAAA,EAClE,OAAOC,IAAE,QAAQ,kBAAkB;AAAA,EACnC,UAAUA,IAAE,KAAK,iCAAiC,EAAE,SAAS;AAAA,EAC7D,WAAWA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAClD,CAAC;AAgBD,iBAAuE,IAAI;;;ACzC3E,SAAS,KAAAC,WAAS;AAOX,IAAM,uBAAuB,sBAAsB,OAAO;AAAA,EAC/D,OAAOC,IAAE,QAAQ,eAAe;AAClC,CAAC;AAYD,iBAAiE,IAAI;;;ACrBrE,SAAS,KAAAC,WAAS;AAQX,IAAM,0BAA0B,sBAAsB,OAAO;AAAA,EAClE,OAAOC,IAAE,QAAQ,kBAAkB;AAAA,EACnC,kBAAkB;AAAA,EAClB,8BAA8B,WAAW,SAAS;AAAA,EAClD;AACF,CAAC;AAeD,iBAAuE,IAAI;;;AC5B3E,SAAS,KAAAC,WAAS;AAOX,IAAM,2BAA2B,sBAAsB,OAAO;AAAA,EACnE,OAAOC,IAAE,QAAQ,mBAAmB;AAAA,EACpC,iBAAiBA,IAAE,KAAK,CAAC,OAAO,KAAK,CAAC;AACxC,CAAC;AAkBD,iBAAyE,IAAI;;;AC5B7E,SAAS,KAAAC,WAAS;AAOX,IAAM,2BAA2B,sBAAsB,OAAO;AAAA,EACnE,OAAOC,IAAE,QAAQ,mBAAmB;AAAA,EACpC,mBAAmBA,IAAE,KAAK,CAAC,OAAO,cAAc,CAAC,EAAE,SAAS;AAAA,EAC5D,WAAWA,IAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC/C,cAAcA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACzD,eAAeA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EAC1D,OAAOA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EAClD,QAAQA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AACrD,CAAC;AAsBD,iBAAuE,IAAI;;;ACrC3E,SAAS,KAAAC,WAAS;AAOX,IAAM,uBAAuB,sBAAsB,OAAO;AAAA,EAC/D,OAAOC,IAAE,QAAQ,eAAe;AAAA,EAChC,cAAcA,IAAE,KAAK,CAAC,KAAK,GAAG,CAAC;AAAA,EAC/B,aAAaA,IAAE,KAAK,CAAC,eAAe,WAAW,CAAC;AAClD,CAAC;AAiBD,iBAAiE,IAAI;;;AC5BrE,SAAS,KAAAC,WAAS;AAOX,IAAM,uBAAuB,sBAAsB,OAAO;AAAA,EAC/D,OAAOC,IAAE,QAAQ,eAAe;AAClC,CAAC;AAYD,iBAA+D,IAAI;;;ACrBnE,SAAS,KAAAC,WAAS;AAOX,IAAM,uBAAuB,sBAAsB,OAAO;AAAA,EAC/D,OAAOC,IAAE,QAAQ,eAAe;AAClC,CAAC;AAWD,iBAAiE,IAAI;;;ACnBrE,SAAS,KAAAC,WAAS;AAYX,IAAM,0BAA0BC,IAAE,OAAO;AAAA,EAC9C,MAAMA,IAAE,QAAQ,yBAAyB;AAAA,EACzC,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,4BAA4BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChD,YAAY,UAAU,SAAS;AACjC,CAAC;AAGD,iBAAiE,IAAI;;;ACvBrE,SAAS,KAAAC,WAAS;AAQX,IAAM,gCAAgC,wBAC1C,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,+BAA+B;AAAA,EAC/C,kCAAkC;AAAA,IAChC;AAAA,EACF;AAAA,EACA,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,eAAeA,IAAE,OAAO;AAAA,EACxB,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,IACT,QAAQ,+BAA+B,EACvC,QAAQ,+BAA+B;AAC5C,CAAC,EACA,SAAS,uCAAuC;AAqBnD,iBAGE,IAAI;;;AC7CN,SAAS,KAAAC,WAAS;AAQX,IAAM,0CAA0C,wBACpD,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,yCAAyC;AAAA,EACzD,4CAA4C;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,yCAAyC,EACjD,QAAQ,yCAAyC;AAAA,EACpD,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,4BAA4BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChD,YAAYA,IACT,OAAO;AAAA,IACN,GAAGA,IAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAGA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzB,CAAC,EACA,SAAS;AAAA,EACZ,kBAAkBA,IACf,OAAO;AAAA,IACN,GAAGA,IAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAGA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzB,CAAC,EACA,SAAS;AACd,CAAC,EACA,SAAS,wDAAwD;AA+BpE,iBAGE,IAAI;;;ACnEN,SAAS,KAAAC,WAAS;AAQX,IAAM,0CAA0C,wBACpD,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,yCAAyC;AAAA,EACzD,4CAA4C;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,eAAeA,IAAE,OAAO;AAAA,EACxB,gBAAgBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,IACT,QAAQ,yCAAyC,EACjD,QAAQ,yCAAyC;AACtD,CAAC,EACA,SAAS,0CAA0C;AAwBtD,iBAGE,IAAI;;;AClDN,SAAS,KAAAC,WAAS;AAQX,IAAM,mCAAmC,wBAC7C,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,kCAAkC;AAAA,EAClD,qCAAqC;AAAA,IACnC;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,kCAAkC,EAC1C,QAAQ,kCAAkC;AAAA,EAC7C,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,2BAA2BA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxD,qBAAqBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AACpD,CAAC,EACA,SAAS,8DAA8D;AAuB1E,iBAGE,IAAI;;;ACjDN,SAAS,KAAAC,WAAS;AAIX,IAAM,kCAAkCC,IAC5C,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,iCAAiC;AAAA,EACjD,oCAAoC;AAAA,IAClC;AAAA,EACF;AAAA,EACA,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,eAAeA,IAAE,OAAO;AAAA,EACxB,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,IACT,QAAQ,iCAAiC,EACzC,QAAQ,iCAAiC;AAAA,EAC5C,SAASA,IAAE,OAAO;AACpB,CAAC,EACA,SAAS,iCAAiC;AAsB7C,iBAGE,IAAI;;;AC3CN,SAAS,KAAAC,WAAS;AAIX,IAAM,mCAAmCC,IAC7C,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,kCAAkC;AAAA,EAClD,qCAAqC;AAAA,IACnC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,kCAAkC,EAC1C,QAAQ,kCAAkC;AAAA,EAC7C,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,gBAAgBA,IAAE,OAAO;AAAA,EACzB,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAGE,IAAI;;;AC7CN,SAAS,KAAAC,WAAS;AAIX,IAAM,kDAAkDC,IAC5D,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,iDAAiD;AAAA,EACjE,oDACE;AAAA,IACE;AAAA,EACF;AAAA,EACF,cAAcA,IACX,QAAQ,iDAAiD,EACzD,QAAQ,iDAAiD;AAAA,EAC5D,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAGE,IAAI;;;AC9CN,SAAS,KAAAC,WAAS;AAIX,IAAM,mCAAmCC,IAC7C,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,kCAAkC;AAAA,EAClD,qCAAqC;AAAA,IACnC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,kCAAkC,EAC1C,QAAQ,kCAAkC;AAAA,EAC7C,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,QAAQA,IAAE,OAAO;AAAA,EACjB,wBAAwBA,IAAE,OAAO;AAAA,EACjC,mBAAmBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACrC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAyBF,iBAGE,IAAI;;;ACnDN,SAAS,KAAAC,WAAS;AAQX,IAAM,wCAAwCC,IAClD,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,uCAAuC;AAAA,EACvD,0CAA0C;AAAA,IACxC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,uCAAuC,EAC/C,QAAQ,uCAAuC;AAAA,EAClD,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC;AAAA,EACA,uBAAuBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AACtD,CAAC,EACA;AAAA,EACC;AACF;AAqBF,iBAGE,IAAI;;;ACjDN,SAAS,KAAAC,WAAS;AAOX,IAAM,8BAA8B,sBAAsB,OAAO;AAAA,EACtE,OAAOC,IAAE,QAAQ,sBAAsB;AACzC,CAAC;AAgBD;AAAA,EACE;AACF;;;AC3BA,SAAS,KAAAC,WAAS;AAOX,IAAM,sBAAsB,sBAAsB,OAAO;AAAA,EAC9D,OAAOC,IAAE,QAAQ,cAAc;AACjC,CAAC;AAYD,iBAAiE,IAAI;;;ACrBrE,SAAS,KAAAC,WAAS;AAQX,IAAM,iCAAiC,wBAC3C,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,gCAAgC;AAAA,EAChD,mCAAmC;AAAA,IACjC;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,gCAAgC,EACxC,QAAQ,gCAAgC;AAAA,EAC3C,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAmBF,iBAGE,IAAI;;;AC3CN,SAAS,KAAAC,WAAS;AAQX,IAAM,uCAAuC,wBACjD,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,sCAAsC;AAAA,EACtD,yCAAyC;AAAA,IACvC;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,sCAAsC,EAC9C,QAAQ,sCAAsC;AAAA,EACjD,sBAAsBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACxC,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAChD,CAAC,EACA;AAAA,EACC;AACF;AAqBF,iBAGE,IAAI;;;AC9CN,SAAS,KAAAC,WAAS;AAQX,IAAM,+BAA+B,sBAAsB,OAAO;AAAA,EACvE,OAAOC,IAAE,QAAQ,uBAAuB;AAAA,EACxC;AAAA,EACA,WAAW,UAAU,SAAS;AAAA,EAC9B,sBAAsB,QAAQ,SAAS;AAAA,EACvC,YAAYA,IAAE,KAAK,CAAC,YAAY,UAAU,YAAY,UAAU,CAAC,EAAE,SAAS;AAAA,EAC5E,OAAO,SAAS,SAAS;AAAA,EACzB,YAAYA,IACT,OAAO,EACP,SAAS,EACT,SAAS,mCAAmC;AAAA,EAC/C,aAAa,GAAG,SAAS;AAAA,EACzB,WAAW,GAAG,SAAS;AAAA,EACvB,WAAW,GAAG,SAAS;AAAA,EACvB,aAAa,GAAG,SAAS;AAAA,EACzB,QAAQ,GAAG,SAAS;AACtB,CAAC;AA2BD;AAAA,EACE;AACF;;;A7B8GO,IAAM,uBAAuBC,IAAE,MAAM;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAoDD,iBAAuD,IAAI;;;A8BnQ3D,SAAS,KAAAC,WAAS;AAOX,IAAM,cAAcC,IACxB,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,aAAa;AAAA,EAC7B,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAYA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,MAAMA,IAAE,OAAO;AAAA,EACf,gBAAgBA,IAAE,OAAO;AAAA,EACzB,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,oCAAoCA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxD,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iCAAiCA,IAAE,OAAO,EAAE,SAAS;AACvD,CAAC,EACA,MAAM,qBAAqB;AAqB9B,iBAAiD,IAAI;;;ACxCrD,SAAS,KAAAC,WAAS;AAUX,IAAM,uCAAuCA,IAAE,OAAO;AAAA,EAC3D,MAAMA,IAAE,QAAQ,sCAAsC;AAAA,EACtD,yCAAyCA,IAAE,OAAO;AAAA,EAClD,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAMD,iBAGE,IAAI;;;ACzBN,SAAS,KAAAC,WAAS;AAgBX,IAAM,eAAeA,IAAE,OAAO;AAAA,EACnC,MAAMA,IAAE,QAAQ,cAAc;AAAA,EAC9B,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,2BAA2BA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC7C,0BAA0BA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC5C,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iCAAiCA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrD,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,eAAeA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACvD,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,cAAcA,IAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAID,iBAAmD,IAAI;;;ACjCvD,SAAS,KAAAC,WAAS;AAGX,IAAM,eAAeC,IAAE,OAAO;AAAA,EACnC,MAAMA,IAAE,QAAQ,cAAc;AAAA,EAC9B,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,eAAeA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,uBAAuBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,yBAAyBA,IAAE,QAAQ,EAAE,SAAS;AAChD,CAAC;AAiBD,iBAAmD,IAAI;;;AC9BvD,SAAS,KAAAC,WAAS;AAGX,IAAM,aAAaC,IAAE,OAAO;AAAA,EACjC,MAAMA,IAAE,QAAQ,YAAY;AAAA,EAC5B,eAAeA,IAAE,OAAO;AAAA,EACxB,MAAMA,IAAE,OAAO;AAAA,EACf,yBAAyBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC3C,UAAUA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,4BAA4BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iCAAiCA,IAAE,OAAO,EAAE,SAAS;AACvD,CAAC;AAoBD,iBAA+C,IAAI;;;ACpCnD,SAAS,KAAAC,WAAS;AAGX,IAAM,eAAeC,IACzB,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,cAAc;AAAA,EAC9B,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,OAAOA,IAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,sCAAsC;AAelD,iBAAmD,IAAI;;;ACzBvD,SAAS,KAAAC,WAAS;AAQX,IAAM,kCAAkC,wBAC5C,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,iCAAiC;AAAA,EACjD,oCAAoC;AAAA,IAClC;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,iCAAiC,EACzC,QAAQ,iCAAiC;AAAA,EAC5C,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAC3C,CAAC,EACA;AAAA,EACC;AACF;AAqBF,iBAGE,IAAI;;;AC9CN,SAAS,KAAAC,WAAS;AAGX,IAAM,0BAA0BC,IACpC,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,yBAAyB;AAAA,EACzC,4BAA4BA,IAAE,OAAO;AAAA,EACrC,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,eAAeA,IAAE,OAAO;AAAA,EACxB,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,6CAA6C;AAgBzD,iBAAqE,IAAI;;;AC3BzE,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,eAAeC,IAAE,KAAK,UAAU;AAEtC,IAAM,YAAY,aACtB;AAAA,EACCA,IAAE,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACH,EACC,UAAU,CAAC,UAAU;AACpB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,SAAO,MAAM;AACf,CAAC;AAMH,iBAA6C,IAAI;AAE1C,IAAM,gBAAgBA,IAAE,KAAK,CAAC,OAAO,QAAQ,CAAC;;;ADhC9C,IAAM,6BAA6BC,IACvC,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,4BAA4B;AAAA,EAC5C,+BAA+BA,IAAE,OAAO;AAAA,EACxC,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,eAAeA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC1C,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AACvC,CAAC,EACA,SAAS,4DAA4D;AAqBxE,iBAA2E,IAAI;;;AEnC/E,SAAS,KAAAC,WAAS;AAIX,IAAM,+BAA+BC,IACzC,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,8BAA8B;AAAA,EAC9C,iCAAiC;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,8BAA8B,EACtC,QAAQ,8BAA8B;AAAA,EACzC,SAASA,IAAE,OAAO;AAAA,EAClB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,uDAAuD;AAqBnE;AAAA,EACE;AACF;;;ACxCA,SAAS,KAAAC,WAAS;AAIX,IAAM,sCAAsCC,IAChD,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,qCAAqC;AAAA,EACrD,wCAAwC;AAAA,IACtC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,qCAAqC,EAC7C,QAAQ,qCAAqC;AAAA,EAChD,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAGE,IAAI;;;AC7CN,SAAS,KAAAC,WAAS;AAIX,IAAM,uCAAuCC,IACjD,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,sCAAsC;AAAA,EACtD,yCAAyC;AAAA,IACvC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,sCAAsC,EAC9C,QAAQ,sCAAsC;AAAA,EACjD,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAGE,IAAI;;;AC7CN,SAAS,KAAAC,WAAS;AAIX,IAAM,+CAA+CC,IACzD,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,8CAA8C;AAAA,EAC9D,iDACE;AAAA,IACE;AAAA,EACF;AAAA,EACF,cAAcA,IACX,QAAQ,8CAA8C,EACtD,QAAQ,8CAA8C;AAAA,EACzD,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAGE,IAAI;;;AC9CN,SAAS,KAAAC,WAAS;AAQX,IAAM,qCAAqC,wBAC/C,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,oCAAoC;AAAA,EACpD,uCAAuC;AAAA,IACrC;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,oCAAoC,EAC5C,QAAQ,oCAAoC;AAAA,EAC/C,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,gBAAgBA,IAAE,OAAO;AAAA,EACzB,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAqBF,iBAGE,IAAI;;;AC/CN,SAAS,KAAAC,WAAS;AAQX,IAAM,6BAA6B,wBACvC,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,4BAA4B;AAAA,EAC5C,+BAA+B;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,4BAA4B,EACpC,QAAQ,4BAA4B;AAAA,EACvC,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAA2E,IAAI;;;AC5C/E,SAAS,KAAAC,WAAS;AAQX,IAAM,gCAAgCC,IAC1C,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,+BAA+B;AAAA,EAC/C,kCAAkC;AAAA,IAChC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,+BAA+B,EACvC,QAAQ,+BAA+B;AAAA,EAC1C,SAASA,IAAE,OAAO;AAAA,EAClB,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,cAAc,SAAS;AAAA,EACtC,0BAA0BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,WAAWA,IAAE,OAAO,EAAE,SAAS;AACjC,CAAC,EACA,SAAS,wDAAwD;AAyBpE;AAAA,EACE;AACF;;;ACpDA,SAAS,KAAAC,WAAS;AAIX,IAAM,oCAAoCC,IAC9C,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,mCAAmC,EAC3C,QAAQ,mCAAmC;AAAA,EAC9C,SAASA,IAAE,OAAO;AAAA,EAClB,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EACzC,UAAUA,IAAE,OAAO;AAAA,EACnB,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAGE,IAAI;;;AC7CN,SAAS,KAAAC,WAAS;AAiBlB,IAAM,eAAeC,IAAE,MAAM;AAAA,EAC3BA,IAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,EAChCA,IAAE,OAAO;AAAA,IACP,WAAWA,IAAE,QAAQ,mBAAmB;AAAA,IACxC,kBAAkBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACtD,QAAQA,IAAE,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EACvC,CAAC;AACH,CAAC;AACD,IAAM,gBAAgBA,IAAE,MAAM;AAAA,EAC5BA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO;AAAA,EAC7BA,IAAE,OAAO,EAAE,kBAAkBA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAC/D,CAAC;AAsCM,IAAM,aAAaA,IAAE,OAAO;AAAA,EACjC,MAAMA,IAAE,QAAQ,YAAY;AAAA,EAC5B,eAAeA,IAAE,OAAO;AAAA,EACxB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,kBAAkBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAC3C,iBAAiBA,IAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5D,kBAAkBA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1D,+BAA+BA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EACvE,mBAAmBA,IAChB,OAAO;AAAA,IACN,0BAA0BA,IAAE,OAAO;AAAA,IACnC,0BAA0BA,IAAE,OAAO;AAAA,IACnC,WAAWA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,IACnD,sBAAsBA,IAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EACnE,CAAC,EACA,SAAS;AAAA,EACZ,+BAA+BA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnE,YAAY,aAAa,SAAS;AAAA,EAClC,YAAY,aAAa,SAAS;AAAA,EAClC,eAAe,aAAa,SAAS;AAAA,EACrC,kBAAkBA,IAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7D,mBAAmB,cAAc,SAAS;AAAA,EAC1C,8BAA8B,cAAc,SAAS;AAAA,EACrD,sBAAsBA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9D,sBAAsBA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9D,mCAAmCA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3E,mCAAmCA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3E,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAGD,iBAAwD,IAAI;;;ACjG5D,SAAS,KAAAC,WAAS;AASX,IAAM,uBAAuB,wBACjC,KAAK,EAAE,SAAS,MAAM,YAAY,KAAK,CAAC,EACxC,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,sBAAsB;AAAA,EACtC,yBAAyB;AAAA,IACvB;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,sBAAsB,EAC9B,QAAQ,sBAAsB;AAAA,EACjC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAClC,CAAC,EACA;AAAA,EACC;AACF;AAUF,iBAA2E,IAAI;;;ACjC/E,SAAS,KAAAC,WAAS;AAiBX,IAAM,gBAAgBC,IAC1B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,eAAe;AAAA,EAC/B,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,8BAA8B;AAK1C,iBAAqD,IAAI;;;ACjCzD,SAAS,KAAAC,WAAS;AAqBX,IAAM,iBAAiBC,IAAE,OAAO;AAAA,EACrC,MAAMA,IAAE,QAAQ,gBAAgB;AAAA,EAChC,mBAAmB,4BAA4B,gBAAgB;AAAA,EAC/D,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,cAAc,SAAS,SAAS,EAAE,SAAS;AAAA,EAC3C,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,aAAa,SAAS,SAAS;AAAA,EAC/B,UAAU,SAAS,SAAS;AAAA,EAC5B,QAAQA,IAAE,MAAM,KAAK;AAAA,EACrB,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAKD,iBAAuD,IAAI;;;AC3C3D,SAAS,KAAAC,WAAS;AAMX,IAAM,uBAAuBC,IAAE;AAAA,EACpCA,IAAE,OAAO;AAAA,IACP,aAAa,OAAO,SAAS;AAAA,IAC7B,cAAc,OAAO,SAAS;AAAA,IAC9B,YAAY,OAAO,SAAS;AAAA,IAC5B,eAAe,OAAO,SAAS;AAAA,EACjC,CAAC;AACH;AAqDO,IAAM,+CAA+CA,IAAE,OAAO;AAAA,EACnE,WAAWA,IAAE,OAAO;AAAA,EACpB,YAAYA,IAAE,OAAO;AAAA,EACrB,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,aAAaA,IAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAED,iBAGE,IAAI;AAEC,IAAM,gDAAgDA,IAAE,OAAO;AAAA,EACpE,WAAWA,IACR,OAAO;AAAA,IACN,MAAMA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA;AAAA,IAExB,WAAWA,IAAE,KAAK,CAAC,iBAAiB,eAAe,CAAC,EAAE,SAAS;AAAA,EACjE,CAAC,EACA,SAAS;AAAA,EACZ,YAAYA,IACT,OAAO;AAAA,IACN,MAAMA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA;AAAA,IAExB,WAAWA,IAAE,KAAK,CAAC,iBAAiB,eAAe,CAAC,EAAE,SAAS;AAAA,EACjE,CAAC,EACA,SAAS;AAAA,EACZ,UAAUA,IACP,OAAO;AAAA,IACN,MAAMA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA;AAAA,IAExB,WAAWA,IAAE,KAAK,CAAC,iBAAiB,eAAe,CAAC,EAAE,SAAS;AAAA,EACjE,CAAC,EACA,SAAS;AAAA,EACZ,aAAaA,IACV,OAAO;AAAA,IACN,MAAMA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA;AAAA,IAExB,WAAWA,IAAE,KAAK,CAAC,iBAAiB,eAAe,CAAC,EAAE,SAAS;AAAA,EACjE,CAAC,EACA,SAAS;AACd,CAAC;AAED,iBAGE,IAAI;AAEC,IAAM,mBAAmBA,IAAE,MAAM;AAAA,EACtC;AAAA,EACA;AACF,CAAC;AAEM,IAAM,sBAAsBA,IAAE,OAAO;AAAA,EAC1C,MAAMA,IAAE,QAAQ,qBAAqB;AAAA,EACrC;AAAA,EACA,QAAQ;AAAA,EACR,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,wBAAwBA,IAAE,OAAO;AAAA,EACjC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,aAAa,OAAO,SAAS;AAAA,EAC7B,YAAY,qBAAqB,SAAS;AAAA,EAC1C,WAAW,OAAO,SAAS;AAAA,EAC3B,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,kBAAkB,iBAAiB,SAAS;AAAA,EAC5C,aAAaA,IAAE,OAAOA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,oBAAoBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AACvD,CAAC;AAKD,iBAAiE,IAAI;;;AC9IrE,SAAS,KAAAC,WAAS;AAElB,IAAM,0BAA0BA,IAC7B,OAAO;AAAA,EACN,cAAc,oBAAoB,SAAS;AAC7C,CAAC,EACA,SAASA,IAAE,QAAQ,CAAC;AAWhB,IAAM,mBAAmBA,IAC7B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,kBAAkB;AAAA,EAClC,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,wBAAwB,SAAS;AAC7C,CAAC,EACA;AAAA,EACC;AACF;AAKF,iBAA2D,IAAI;;;AC/B/D,SAAS,KAAAC,WAAS;AAsBX,IAAM,iBAAiBC,IAC3B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,gBAAgB;AAAA,EAChC,mBAAmB,4BAA4B,gBAAgB;AAAA,EAC/D,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,cAAc,SAAS,SAAS,EAAE,SAAS;AAAA,EAC3C,OAAOA,IAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,EACnC,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,aAAa,SAAS,SAAS;AAAA,EAC/B,UAAU,SAAS,SAAS;AAAA,EAC5B,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,sCAAsC;AAKlD,iBAAuD,IAAI;;;AC/C3D,SAAS,KAAAC,WAAS;AAyBX,IAAM,iBAAiBC,IAC3B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,gBAAgB;AAAA,EAChC,mBAAmB,4BAA4B,gBAAgB;AAAA,EAC/D,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU,SAAS,QAAQ,CAAC;AAAA,EAC5B,cAAc,SAAS,SAAS,EAAE,SAAS;AAAA,EAC3C,OAAOA,IAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,EACnC,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,2CAA2C;AAKvD,iBAAuD,IAAI;;;AChD3D,SAAS,KAAAC,WAAS;AAuBX,IAAM,mBAAmBC,IAC7B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,kBAAkB;AAAA,EAClC,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,cAAc,SAAS,SAAS,EAAE,SAAS;AAAA,EAC3C,OAAOA,IAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,EACnC,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,wCAAwC;AAKpD,iBAA2D,IAAI;;;AC5C/D,SAAS,KAAAC,WAAS;AAwBX,IAAM,gBAAgBC,IAC1B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkB,4BAA4B,eAAe;AAAA,EAC7D,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,WAAWA,IACR,KAAK,CAAC,aAAa,kBAAkB,CAAC,EACtC,QAAQ,kBAAkB;AAAA,EAC7B,cAAc,SAAS,SAAS,EAAE,SAAS;AAAA,EAC3C,OAAOA,IAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,EACnC,WAAWA,IAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,qCAAqC;AAKjD,iBAAqD,IAAI;;;AChDzD,SAAS,KAAAC,WAAS;AAiCX,IAAM,kBAAkBC,IAAE,OAAO;AAAA,EACtC,MAAMA,IAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,WAAWA,IAAE;AAAA,IACXA,IAAE,OAAO;AAAA,MACP,GAAGA,IAAE,OAAO;AAAA,MACZ,GAAGA,IAAE,OAAO;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,OAAOA,IAAE;AAAA,IACPA,IAAE,OAAO;AAAA,MACP,MAAMA,IAAE,OAAO;AAAA,QACb,GAAGA,IAAE,OAAO;AAAA,QACZ,GAAGA,IAAE,OAAO;AAAA,MACd,CAAC;AAAA,MACD,IAAIA,IAAE,OAAO;AAAA,QACX,GAAGA,IAAE,OAAO;AAAA,QACZ,GAAGA,IAAE,OAAO;AAAA,MACd,CAAC;AAAA,MACD,aAAaA,IAAE,QAAQ,EAAE,SAAS;AAAA,MAClC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC5C,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA,EACA,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEnC,iCAAiCA,IAAE,OAAO,EAAE,SAAS;AACvD,CAAC;AAKD,iBAA8D,IAAI;;;ACnElE,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAKX,IAAM,kBAAkBC,IAAE,KAAK;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAID,iBAA2D,IAAI;;;ACf/D,SAAS,KAAAC,WAAS;AAUX,IAAM,sBAAsBA,IAAE,OAAO;AAAA,EAC1C,MAAMA,IAAE,OAAO;AAAA,EACf,cAAcA,IAAE,QAAQ,EAAE,SAAS;AACrC,CAAC;;;AF6BM,IAAM,iBAAiBC,IAAE,OAAO;AAAA,EACrC,MAAMA,IAAE,QAAQ,gBAAgB;AAAA,EAChC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,mBAAmBA,IAAE,OAAO;AAAA,EAC5B,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,MAAMA,IAAE,OAAO;AAAA,EACf,YAAYA,IAAE,MAAM,mBAAmB,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACzD,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,WAAWA,IAAE,OAAO,EAAE,QAAQ,IAAI;AAAA,EAClC,UAAUA,IAAE,OAAO;AAAA,IACjB,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAAA,EACD,UAAUA,IAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EAC9B,QAAQA,IACL,MAAM,CAAC,gBAAgB,SAAS,QAAQ,GAAG,eAAe,CAAC,EAC3D,QAAQ,QAAQ;AAAA,EACnB,OAAOA,IAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAKD,iBAAuD,IAAI;;;AGpE3D,SAAS,KAAAC,WAAS;AAmCX,IAAM,iBAAiBC,IAC3B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,gBAAgB;AAAA,EAChC,mBAAmBA,IAAE,OAAO;AAAA,EAC5B,gBAAgBA,IAAE,OAAO;AAAA,EACzB,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,QAAQ;AAAA,EACR,kBAAkBA,IAAE,KAAK,CAAC,MAAM,QAAQ,QAAQ,OAAO,CAAC,EAAE,SAAS;AAAA,EACnE,8BAA8BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClD,mBAAmBA,IAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,OAAO,CAAC,EAAE,SAAS;AAAA,EACvE,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACvC,8BAA8BA,IAC3B,MAAM,mBAAmB,EACzB,IAAI,CAAC,EACL,SAAS;AAAA,EACZ,6BAA6BA,IAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EACrE,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,0BAA0BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/C,sCAAsCA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC3D,iBAAiBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,gCAAgCA,IAAE,QAAQ,EAAE,SAAS;AACvD,CAAC,EACA,SAAS,yCAAyC;AAKrD,iBAAuD,IAAI;;;ACnE3D,SAAS,KAAAC,WAAS;AA2BX,IAAM,sBAAsBC,IAAE,OAAO;AAAA,EAC1C,MAAMA,IAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAeA,IAAE,OAAO;AAAA,EACxB,QAAQ;AAAA,EACR,iBAAiB,MAAM,SAAS;AAAA,EAChC,aAAaA,IAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,OAAO,CAAC;AAAA,EACtD,MAAMA,IAAE,OAAO;AAAA,EACf,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAYA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAKD,iBAA+D,IAAI;;;AC/CnE,SAAS,KAAAC,WAAS;AAcX,IAAM,kBAAkB,wBAC5B,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoBA,IAAE,OAAO;AAAA;AAAA,EAE7B,YAAYA,IACT,QAAQ,0BAA0B,EAClC,QAAQ,0BAA0B;AAAA,EACrC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,4CAA4C;AAKxD,iBAAyD,IAAI;;;AC7B7D,SAAS,KAAAC,WAAS;AAQX,IAAM,yBAAyB,wBACnC,OAAO;AAAA,EACN,MAAMC,IAAE,QAAQ,wBAAwB;AAAA,EACxC,2BAA2B;AAAA,IACzB;AAAA,EACF;AAAA,EACA,YAAYA,IACT,QAAQ,wBAAwB,EAChC,QAAQ,wBAAwB;AAAA,EACnC,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,uDAAuD;AAcnE,iBAAqE,IAAI;;;ACnCzE,SAAS,KAAAC,WAAS;AAKX,IAAM,8BAA8BC,IAAE,OAAO;AAAA,EAClD,MAAMA,IAAE,QAAQ,wBAAwB;AAAA,EACxC,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,uBAAuB,4BAA4B,OAAO;AAAA,EACrE,OAAOA,IAAE,QAAQ,MAAM;AAAA,EACvB,QAAQ;AAAA,EACR;AACF,CAAC;AAEM,IAAM,uBAAuB,4BAA4B,OAAO;AAAA,EACrE,OAAOA,IAAE,QAAQ,MAAM;AAAA,EACvB,OAAO;AAAA,EACP,KAAK;AACP,CAAC;AAEM,IAAM,wBAAwB,4BAA4B,OAAO;AAAA,EACtE,OAAOA,IAAE,QAAQ,OAAO;AAAA,EACxB,QAAQ;AACV,CAAC;AAEM,IAAM,yBAAyBA,IAAE,mBAAmB,SAAS;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAkCD,iBAAqE,IAAI;;;AClEzE,SAAS,KAAAC,WAAS;AAuBX,IAAM,0BAA0BC,IACpC,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,yBAAyB;AAAA,EACzC,4BAA4BA,IAAE,OAAO;AAAA,EACrC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU;AAAA,EACV,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,SAAS,QAAQ,SAAS;AAAA,EAC1B,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,iBAAiB,gBAAgB,SAAS;AAC5C,CAAC,EACA,SAAS,gEAAgE;AAK5E,iBAAuE,IAAI;;;AC1C3E,SAAS,KAAAC,WAAS;AAIX,IAAM,yCAAyCC,IACnD,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,wCAAwC;AAAA,EACxD,2CAA2C;AAAA,IACzC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,wCAAwC,EAChD,QAAQ,wCAAwC;AAAA,EACnD,SAASA,IAAE,OAAO;AAAA,EAClB,wBAAwBA,IAAE,OAAO;AAAA,EACjC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,qBAAqBA,IAAE,OAAO;AAChC,CAAC,EACA;AAAA,EACC;AACF;AAuBF,iBAGE,IAAI;;;AC/CN,SAAS,KAAAC,WAAS;AAIX,IAAM,sCAAsCC,IAChD,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,qCAAqC;AAAA,EACrD,wCAAwC;AAAA,IACtC;AAAA,EACF;AAAA,EACA,cAAcA,IACX,QAAQ,qCAAqC,EAC7C,QAAQ,qCAAqC;AAAA,EAChD,SAASA,IAAE,OAAO;AAAA,EAClB,yBAAyBA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC;AAAA,EACzD,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAC1C,CAAC,EACA;AAAA,EACC;AACF;AAmBF,iBAGE,IAAI;;;ACzCN,SAAS,KAAAC,YAAS;AAIX,IAAM,sCAAsCC,KAChD,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qCAAqC;AAAA,EACrD,wCAAwC;AAAA,IACtC;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,qCAAqC,EAC7C,QAAQ,qCAAqC;AAAA,EAChD,SAASA,KAAE,OAAO;AAAA,EAClB,wBAAwBA,KAAE,OAAO;AAAA,EACjC,oBAAoBA,KAAE,OAAO;AAAA,EAC7B,oBAAoBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACjD,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAuBF,iBAGE,IAAI;;;ACjDN,SAAS,KAAAC,YAAS;AAIX,IAAM,0CAA0CC,KACpD,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,yCAAyC;AAAA,EACzD,4CAA4C;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,yCAAyC,EACjD,QAAQ,yCAAyC;AAAA,EACpD,SAASA,KAAE,OAAO;AAAA,EAClB,oBAAoBA,KAAE,OAAO;AAAA,EAC7B,wBAAwBA,KAAE,KAAK;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,sBAAsBA,KAAE,OAAO;AACjC,CAAC,EACA;AAAA,EACC;AACF;AAuBF,iBAGE,IAAI;;;AClDN,SAAS,KAAAC,YAAS;AAKlB,IAAM,yBAAyB,SAAS,KAAKC,KAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;AAEpE,IAAM,oBAAoBA,KAC9B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mBAAmB;AAAA,EACnC,sBAAsB,4BAA4B,mBAAmB;AAAA,EACrE,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,OAAO,MAAM,SAAS;AAAA,EACtB,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,OAAO,uBAAuB,SAAS;AAAA,EACvC,QAAQ,uBAAuB,SAAS;AAC1C,CAAC,EACA;AAAA,EACC;AACF,EACC,YAAY,CAAC,EAAE,OAAAC,QAAO,YAAY,GAAG,QAAQ;AAC5C,MAAIA,WAAU,UAAa,gBAAgB,QAAW;AACpD,QAAI,SAAS;AAAA,MACX,MAAMD,KAAE,aAAa;AAAA,MACrB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAoBH,iBAA6D,IAAI;;;AC/CjE,SAAS,KAAAE,YAAS;AAKX,IAAM,kBAAkBC,KAC5B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,eAAeA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,yBAAyBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAC3C,uBAAuBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,aAAaA,KAAE,OAAO,EAAE,SAAS;AACnC,CAAC,EACA,SAAS,gDAAgD;AAwB5D,iBAAyD,IAAI;;;AC7C7D,SAAS,KAAAC,YAAS;AAWX,IAAM,kBAAkBC,KAC5B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,iBAAiB;AAAA,EACjB,eAAeA,KAAE,MAAM,QAAQ;AAAA,EAC/B,aAAaA,KAAE,MAAM,QAAQ;AAAA,EAC7B,cAAc,SAAS,SAAS;AAAA,EAChC,cAAc,SAAS,SAAS;AAAA,EAChC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,QAAQ,gBAAgB,SAAS;AACnC,CAAC,EACA,SAAS,kCAAkC;AAsB9C,iBAAyD,IAAI;;;AC/C7D,SAAS,KAAAC,YAAS;AAKX,IAAM,uBAAuBC,KACjC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,sBAAsB;AAAA,EACtC,yBAAyB;AAAA,IACvB;AAAA,EACF;AAAA,EACA,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,oBAAoBA,KAAE,OAAO;AAAA,EAC7B,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,eAAeA,KAAE,OAAO;AAAA,EACxB,oBAAoBA,KAAE,OAAO;AAAA,EAC7B,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,kBAAkBA,KAAE,KAAK,CAAC,QAAQ,UAAU,OAAO,CAAC,EAAE,SAAS;AAAA,EAC/D,gBAAgBA,KAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC7D,WAAW,SAAS,SAAS;AAAA,EAC7B,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,yCAAyC;AA2BrD,iBAAiE,IAAI;;;ACrDrE,SAAS,KAAAC,YAAS;AAIX,IAAM,uBAAuBC,KAAE,KAAK,CAAC,MAAM,QAAQ,CAAC;AAGpD,IAAM,kBAAkBA,KAC5B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAY,qBAAqB,SAAS;AAAA,EAC1C,aAAaA,KAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,cAAcA,KAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAoBF,iBAAyD,IAAI;;;ACzC7D,SAAS,KAAAC,YAAS;AAKX,IAAM,kCAAkCC,KAC5C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,iCAAiC;AAAA,EACjD,oCAAoC;AAAA,IAClC;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,iCAAiC,EACzC,QAAQ,iCAAiC;AAAA,EAC5C,SAASA,KAAE,OAAO;AACpB,CAAC,EACA;AAAA,EACC;AACF;AAiBF,iBAGE,IAAI;;;ACtCN,SAAS,KAAAC,YAAS;AAIX,IAAM,mBAAmBC,KAAE,OAAO;AAAA,EACvC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAQD,iBAAyD,IAAI;AAEtD,IAAM,OAAOA,KAAE,OAAO;AAAA,EAC3B,UAAUA,KAAE,MAAM,gBAAgB;AACpC,CAAC;AAMD,iBAAqC,IAAI;AAElC,IAAM,aAAaA,KAAE,OAAO;AAAA,EACjC,YAAY;AAAA,EACZ,aAAaA,KAAE,MAAM,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAgBD,iBAA+C,IAAI;;;AC/CnD,SAAS,KAAAC,YAAS;AAiEX,IAAM,gCAAgC;AAAA,EAC3C,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA;AAAA,EAEZ,YAAY;AAAA;AAAA,EAEZ,WAAW;AACb;AAKO,IAAM,6BAA6B;AAAA,EACxC,WAAW,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;AAAA,EAC/B,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC/B,UAAU,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC7B,aAAa,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE;AAAA,EACjC,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC/B,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAClC;AAKO,IAAM,sBAAsBC,KAChC,KAAK;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AACF,CAAC,EACA,UAAU,CAAC,UAAU,8BAA8B,KAAK,CAAC,EACzD;AAAA,EACC;AACF;AAEF,iBAA0E,IAAI;AAC9E;AAAA,EACE;AACF;;;AC5HA,SAAS,KAAAC,YAAS;AAKX,IAAM,oBAAoBA,KAAE,KAAK;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAcD,iBAA2D,IAAI;AAI/D,IAAM,6BAAsE;AAAA,EAC1E;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAOO,IAAM,qCAAqC,CAChD,MACA,OACmC;AACnC,aAAW,SAAS,4BAA4B;AAC9C,UAAM,YAAY,MAAM,QAAQ,IAAI;AACpC,UAAM,UAAU,MAAM,QAAQ,EAAE;AAEhC,QAAI,cAAc,MAAM,YAAY,IAAI;AACtC,cAAU,UAAU,YAAY,MAAM,UAAU,MAAM,SACpD;AAAA,IACJ;AAAA,EACF;AAEA,SAAO;AACT;;;ACpEA,SAAS,KAAAC,YAAS;AASX,IAAM,iBAAiBC,KAAE,OAAO;AAAA,EACrC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,KAAKA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC1B,cAAc,UAAU,SAAS;AACnC,CAAC;AACM,IAAM,kBAAkBA,KAAE,MAAM,cAAc;AAgBrD,iBAAqD,IAAI;AACzD,iBAAuD,IAAI;;;AChC3D,SAAS,KAAAC,YAAS;AAKX,IAAM,mBAAmBC,KAAE,OAAO;AAAA,EACvC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,KAAKA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC1B,UAAU,UAAU,SAAS;AAAA,EAC7B,aAAa,SAAS,SAAS;AACjC,CAAC;AAaD,iBAAyD,IAAI;;;ACxB7D,SAAS,KAAAC,YAAS;AAGX,IAAM,+BAA+BC,KAAE,OAAO;AAAA,EACnD,iBAAiB,OAAO,SAAS;AAAA,EACjC,0BAA0B,OAAO,SAAS;AAAA,EAC1C,8CAA8C,OAAO,SAAS;AAAA,EAC9D,oDAAoD,OAAO,SAAS;AAAA,EACpE,iCAAiC,OAAO,SAAS;AAAA,EACjD,kCAAkC,OAC/B,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,oCAAoC,OAAO,SAAS;AAAA,EACpD,iDAAiD,OAAO,SAAS;AAAA,EACjE,sDAAsD,OAAO,SAAS;AAAA,EACtE,oCAAoC,OAAO,SAAS;AAAA,EACpD,uBAAuB,OAAO,SAAS;AAAA,EACvC,sBAAsB,OAAO,SAAS;AACxC,CAAC;;;ACID,SAAS,KAAAC,YAAS;AAUX,IAAM,gBAAgBA,KAC1B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkB,4BAA4B,eAAe;AAAA,EAC7D,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA,kBAAkBA,KACf,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,kBAAkBA,KACf,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,4BAA4BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KACZ,KAAK;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,EACA,SAAS;AAAA,EACZ,iBAAiB,MAAM,SAAS;AAAA,EAChC,kBAAkB,gBAAgB,SAAS;AAAA,EAC3C,qCAAqCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzD,qCAAqCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzD,wBAAwB,MAAM,SAAS;AAAA,EACvC,qBAAqB,oBAAoB,SAAS;AAAA,EAClD,eAAe,kBACZ,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,4BAA4BA,KACzB,OAAO,eAAe,iBAAiB,EACvC,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,UAAUA,KACP,OAAO;AAAA,IACN,iBAAiB,uBAAuB,SAAS;AAAA,EACnD,CAAC,EACA,SAAS;AAAA,EACZ,yBAAyBA,KACtB,QAAQ,EACR,QAAQ,IAAI,EACZ;AAAA,IACC;AAAA,EACF;AACJ,CAAC,EACA,SAAS,gCAAgC;AA6C5C,iBAAqD,IAAI;;;AC9IzD,SAAS,KAAAC,YAAS;AAUX,IAAM,wBAAwBC,KAAE,OAAO;AAAA,EAC5C,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,OAAOA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,iBAAiB,sBAAsB,OAAO;AAAA,EACzD,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,QAAQ;AAAA,EACR;AACF,CAAC;AAEM,IAAM,iBAAiB,sBAAsB,OAAO;AAAA,EACzD,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,OAAO;AAAA,EACP,KAAK;AACP,CAAC;AAEM,IAAM,kBAAkB,sBAAsB,OAAO;AAAA,EAC1D,OAAOA,KAAE,QAAQ,OAAO;AAAA,EACxB,QAAQ;AACV,CAAC;AAEM,IAAM,mBAAmBA,KAAE,mBAAmB,SAAS;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAkCD,iBAAyD,IAAI;;;ACxE7D,SAAS,KAAAC,YAAS;AAKlB,IAAM,kBAAkBC,KAAE,OAAO;AAAA,EAC/B,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,YAAYA,KAAE,QAAQ,QAAQ;AAAA,EAC9B,eAAeA,KAAE,OAAO;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,wBAAwB,gBAAgB;AAAA,EACnD;AACF;AAsBA,iBAAuD,IAAI;AAE3D,IAAM,gBAAgBA,KAAE,OAAO;AAAA,EAC7B,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,YAAYA,KAAE,QAAQ,MAAM;AAAA,EAC5B,YAAYA,KAAE,OAAO;AAAA,EACrB,aAAaA,KAAE,OAAO;AAAA,EACtB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,sBAAsB,cAAc;AAAA,EAC/C;AACF;AAsBA,iBAAmD,IAAI;AAEvD,IAAM,4BAA4BA,KAAE,OAAO;AAAA,EACzC,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,YAAYA,KAAE,KAAK,CAAC,UAAU,QAAQ,CAAC;AAAA,EACvC,eAAeA,KAAE,OAAO;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,kCACX,0BAA0B;AAAA,EACxB;AACF;AA4BF,iBAAuE,IAAI;AAE3E,IAAM,gBAAgBA,KAAE,OAAO;AAAA,EAC7B,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,YAAYA,KAAE,QAAQ,MAAM;AAAA,EAC5B,YAAYA,KAAE,OAAO;AAAA,EACrB,aAAaA,KAAE,OAAO;AAAA,EACtB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,sBAAsB,cAAc;AAAA,EAC/C;AACF;AAuBA,iBAAmD,IAAI;AAEvD,IAAM,gBAAgBA,KAAE,OAAO;AAAA,EAC7B,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,YAAYA,KAAE,QAAQ,MAAM;AAAA,EAC5B,YAAYA,KAAE,OAAO;AAAA,EACrB,aAAaA,KAAE,OAAO;AAAA,EACtB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,sBAAsB,cAAc;AAAA,EAC/C;AACF;AAuBA,iBAAmD,IAAI;AAEvD,IAAM,wBAAwBA,KAAE,OAAO;AAAA,EACrC,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,YAAYA,KAAE,QAAQ,cAAc;AAAA,EACpC,YAAYA,KAAE,OAAO;AAAA,EACrB,aAAaA,KAAE,OAAO;AAAA,EACtB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,cAAc;AAAA,EACd,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,8BAA8B,sBAAsB;AAAA,EAC/D;AACF;AAwBA,iBAAiE,IAAI;AAE9D,IAAM,WAAW,0BACrB,GAAG,aAAa,EAChB,GAAG,aAAa,EAChB,GAAG,qBAAqB,EACxB,GAAG,eAAe,EAClB,GAAG,aAAa;;;AC1QnB,SAAS,KAAAC,YAAS;AAMlB,IAAM,yBAAyBC,KAAE,OAAO;AAAA,EACtC,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,OAAOA,KAAE,QAAQ,QAAQ;AAAA,EACzB,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgBA,KAAE,OAAO;AAAA,EACzB,eAAeA,KAAE,OAAO;AAAA,EACxB,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,MAAM,SAAS;AAAA,EACzB,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAuBD,IAAM,uBAAuBA,KAAE,OAAO;AAAA,EACpC,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,OAAOA,KAAE,KAAK,CAAC,QAAQ,MAAM,CAAC;AAAA,EAC9B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAaA,KAAE,OAAO;AAAA,EACtB,cAAcA,KAAE,OAAO;AAAA,EACvB,YAAYA,KAAE,OAAO;AAAA,EACrB,aAAaA,KAAE,OAAO;AAAA,EACtB,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,cAAc;AAAA,EACd,QAAQA,KAAE,MAAM,SAAS;AAAA,EACzB,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AA0BD,IAAM,kCAAkCA,KAAE,OAAO;AAAA,EAC/C,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,OAAOA,KAAE,QAAQ,6BAA6B;AAAA,EAC9C,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,KAAE,QAAQ,QAAQ;AAAA,EAC9B,WAAWA,KAAE,QAAQ,MAAM;AAAA,EAC3B,eAAeA,KAAE,OAAO;AAAA,EACxB,gBAAgBA,KAAE,OAAO;AAAA,EACzB,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,MAAM,SAAS;AAAA,EACzB,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,mBAAmB,SAAS,SAAS;AACvC,CAAC;AACD,IAAM,8BAA8BA,KAAE,OAAO;AAAA,EAC3C,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,OAAOA,KAAE,QAAQ,yBAAyB;AAAA,EAC1C,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,KAAE,QAAQ,MAAM;AAAA,EAC5B,WAAWA,KAAE,QAAQ,MAAM;AAAA,EAC3B,YAAYA,KAAE,OAAO;AAAA,EACrB,aAAaA,KAAE,OAAO;AAAA,EACtB,gBAAgBA,KAAE,OAAO;AAAA,EACzB,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,MAAM,SAAS;AAAA,EACzB,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AACD,IAAM,sCAAsCA,KAAE,OAAO;AAAA,EACnD,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,OAAOA,KAAE,QAAQ,iCAAiC;AAAA,EAClD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,KAAE,QAAQ,cAAc;AAAA,EACpC,WAAWA,KAAE,QAAQ,MAAM;AAAA,EAC3B,YAAYA,KAAE,OAAO;AAAA,EACrB,aAAaA,KAAE,OAAO;AAAA,EACtB,mBAAmB;AAAA,EACnB,gBAAgBA,KAAE,OAAO;AAAA,EACzB,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,mBAAmB;AAAA,EACnB,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,MAAM,SAAS;AAAA,EACzB,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AA6ED,IAAM,4BAA4BA,KAAE,OAAO;AAAA,EACzC,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,OAAOA,KAAE,QAAQ,uBAAuB;AAAA,EACxC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,KAAE,KAAK,CAAC,UAAU,QAAQ,QAAQ,cAAc,CAAC;AAAA,EAC7D,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,KAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EAEjC,aAAaA,KACV;AAAA,IACCA,KAAE,OAAO;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,EACH,EACC,IAAI,CAAC;AAAA,EAER,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,eAAe,SAAS,QAAQ,CAAC;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,MAAM,SAAS;AAAA,EACzB,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,cAAc,SAAS,SAAS;AAClC,CAAC;AA8BM,IAAM,kBAAkBA,KAAE,MAAM;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AASD;AAAA,EACE;AACF;AACA,iBAA0E,IAAI;AAC9E,iBAGE,IAAI;AACN,iBAGE,IAAI;AACN,iBAGE,IAAI;AACN,iBAGE,IAAI;;;AChVN,SAAS,KAAAC,YAAS;AAMX,IAAM,WAAWC,KACrB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgBA,KAAE,OAAO;AAAA,EACzB,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,MAAM,SAAS;AAAA,EACzB,iBAAiBA,KAAE,QAAQ,EAAE,SAAS;AACxC,CAAC,EACA,SAAS,2BAA2B;AA+BvC,iBAA2C,IAAI;;;AClD/C,SAAS,KAAAC,YAAS;AAMlB,IAAM,oBAAoBC,KAAE,OAAO;AAAA,EACjC,MAAMA,KAAE,QAAQ,YAAY;AAAA,EAC5B,OAAOA,KAAE,QAAQ,QAAQ;AAAA,EACzB,eAAe,4BAA4B,YAAY;AAAA,EACvD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,OAAO;AAAA,EACjB,OAAO;AAAA,EACP,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAED,IAAM,kBAAkBA,KAAE,OAAO;AAAA,EAC/B,MAAMA,KAAE,QAAQ,YAAY;AAAA,EAC5B,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,eAAe,4BAA4B,YAAY;AAAA,EACvD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,uBAAuBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,0BAA0BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAED,IAAM,0BAA0BA,KAAE,OAAO;AAAA,EACvC,MAAMA,KAAE,QAAQ,YAAY;AAAA,EAC5B,OAAOA,KAAE,QAAQ,cAAc;AAAA,EAC/B,eAAe,4BAA4B,YAAY;AAAA,EACvD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAc;AAAA,EACd,OAAO;AAAA,EACP,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,uBAAuBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,0BAA0BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,kBAAkBA,KAAE,OAAO;AAAA,EACtC,MAAMA,KAAE,QAAQ,YAAY;AAAA,EAC5B,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,eAAe,4BAA4B,YAAY;AAAA,EACvD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,QAAQA,KAAE,OAAO;AAAA,EACjB,OAAO;AAAA,EACP,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AACD,IAAM,0BAA0BA,KAAE,OAAO;AAAA,EACvC,MAAMA,KAAE,QAAQ,YAAY;AAAA,EAC5B,OAAOA,KAAE,QAAQ,cAAc;AAAA,EAC/B,eAAe,4BAA4B,YAAY;AAAA,EACvD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,QAAQA,KAAE,OAAO;AAAA,EACjB,cAAc;AAAA,EACd,OAAO;AAAA,EACP,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAED,IAAM,qBAAqBA,KAAE,OAAO;AAAA,EAClC,MAAMA,KAAE,QAAQ,YAAY;AAAA,EAC5B,OAAOA,KAAE,QAAQ,SAAS;AAAA,EAC1B,eAAe,4BAA4B,YAAY;AAAA,EACvD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQA,KAAE,MAAM,KAAK;AAAA,EACrB,OAAO;AAAA,EACP,YAAYA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,aAAaA,KACvB,mBAAmB,SAAS;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,EACA,SAAS,+BAA+B;AAsK3C,iBAAmD,IAAI;AACvD,iBAA+C,IAAI;AACnD,iBAA6D,IAAI;AACjE,iBAA6D,IAAI;AACjE,iBAA+C,IAAI;AACnD,iBAAqD,IAAI;;;ACvTzD,SAAS,KAAAC,YAAS;AAWlB,IAAM,0BAA0BC,KAAE,OAAO;AAAA,EACvC,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAOA,KAAE,QAAQ,QAAQ;AAAA,EACzB,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQA,KAAE,OAAO;AAAA,EACjB,OAAO;AAAA,EACP,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAED,IAAM,wBAAwBA,KAAE,OAAO;AAAA,EACrC,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,OAAO;AAAA,EACP,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AACD,IAAM,wBAAwBA,KAAE,OAAO;AAAA,EACrC,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,QAAQA,KAAE,OAAO;AAAA,EACjB,OAAO;AAAA,EACP,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AACD,IAAM,gCAAgCA,KAAE,OAAO;AAAA,EAC7C,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAOA,KAAE,QAAQ,cAAc;AAAA,EAC/B,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,cAAc;AAAA,EACd,OAAO;AAAA,EACP,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAED,IAAM,gCAAgCA,KAAE,OAAO;AAAA,EAC7C,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAOA,KAAE,QAAQ,cAAc;AAAA,EAC/B,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,QAAQA,KAAE,OAAO;AAAA,EACjB,cAAc;AAAA,EACd,OAAO;AAAA,EACP,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAED,IAAM,wBAAwBA,KAAE,OAAO;AAAA,EACrC,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAOA,KAAE,OAAO;AAAA,EAChB,QAAQA,KAAE,OAAO;AAAA,EACjB,OAAO;AAAA,EACP,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAED,IAAM,2BAA2B,cAAc,OAAO;AAAA,EACpD,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAOA,KAAE,MAAM,cAAc,MAAM,MAAM,EAAE,SAAS;AAAA,EACpD,OAAO;AAAA,EACP,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,mBAAmBA,KAC7B,MAAM;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,EACA,SAAS,gCAAgC;AAoJ5C,iBAAqE,IAAI;AACzE,iBAAiE,IAAI;AACrE,iBAAiE,IAAI;AACrE;AAAA,EACE;AACF;AACA;AAAA,EACE;AACF;AACA,iBAAiE,IAAI;AAErE,iBAAuE,IAAI;;;AC1R3E,SAAS,KAAAC,YAAS;AAelB,IAAM,eAAeC,KAAE,OAAO;AAAA,EAC5B,MAAMA,KAAE,QAAQ,wBAAwB;AAAA,EACxC,2BAA2B;AAAA,IACzB;AAAA,EACF;AAAA,EACA,OAAO,UAAU,KAAK,aAAa;AAAA,EACnC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,yBAAyBA,KACnC,mBAAmB,SAAS;AAAA,EAC3B,aAAa,OAAO,aAAa,KAAK;AAAA,EACtC,WAAW,OAAO,aAAa,KAAK;AAAA,EACpC,mBAAmB,OAAO,aAAa,KAAK;AAAA,EAC5C,cAAc,OAAO,aAAa,KAAK;AACzC,CAAC,EACA;AAAA,EACC;AACF;AA6CF;AAAA,EACE;AACF;;;AClFA,SAAS,KAAAC,YAAS;AAMX,IAAM,WAAWC,KACrB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO;AAAA,EACf,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAOA,KAAE,OAAO;AAAA;AAAA,EAEhB,OAAOA,KAAE,KAAK,CAAC,aAAa,CAAC;AAC/B,CAAC,EACA,SAAS,yBAAyB;AA4BrC,iBAA2C,IAAI;;;ACjD/C,SAAS,KAAAC,YAAS;AAMlB,IAAM,iBAAiB,SAAS,KAAKC,KAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;AAE5D,IAAM,6BAA6BA,KACvC,OAAO;AAAA,EACN,YAAYA,KAAE,QAAQ,MAAM;AAAA,EAC5B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAO;AAAA,EACP,aAAa,eAAe,SAAS;AAAA,EACrC,WAAW,eAAe,SAAS;AAAA,EACnC,0BAA0BA,KAAE,KAAK,CAAC,UAAU,WAAW,CAAC,EAAE,SAAS;AAAA,EACnE,gBAAgBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACpC,uBAAuBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,OAAO;AACT,CAAC,EACA,YAAY,CAAC,MAAM,QAAQ;AAC1B,QAAM,UAAU;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP,EAAE,OAAO,CAAC,MAAM,MAAM,MAAS,EAAE;AACjC,MAAI,YAAY,EAAG;AACnB,MAAI,YAAY,GAAG;AACjB,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACA,MAAI,KAAK,UAAU,KAAK,aAAa;AACnC,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,MAAM,CAAC,aAAa;AAAA,MACpB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,CAAC,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,OAAO,SAAS,KAAK,CAAC,GAAG;AACxD,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAEI,IAAM,4BAA4BA,KAAE,OAAO;AAAA,EAChD,YAAYA,KAAE,QAAQ,KAAK;AAAA,EAC3B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,gBAAgBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACpC,uBAAuBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,eAAe,SAAS,SAAS;AAAA,EACjC,gBAAgB,SAAS,SAAS;AAAA,EAClC,eAAeA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,YAAY;AAAA,EACZ,UAAU;AACZ,CAAC;AAEM,IAAM,oCAAoCA,KAAE,OAAO;AAAA,EACxD,YAAYA,KAAE,QAAQ,aAAa;AAAA,EACnC,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,aAAa;AAAA,EACb,WAAW;AAAA,EACX,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,wBAAwBA,KAAE,MAAM;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,YAAYA,KACtB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,WAAW;AAAA,EAC3B,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAc,4BAA4B,WAAW;AAAA,EACrD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,sBAAsBA,KACnB,KAAK,CAAC,YAAY,cAAc,CAAC,EACjC,QAAQ,UAAU,EAClB,SAAS;AAAA,EACZ,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,sBAAsBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,OAAOA,KAAE,MAAM,qBAAqB,EAAE,YAAY,CAAC,OAAO,QAAQ;AAChE,eAAW,CAAC,GAAG,IAAI,KAAK,MAAM,QAAQ,GAAG;AACvC,UACE,KAAK,eAAe,UACpB,KAAK,6BAA6B;AAElC;AACF,YAAM,OAAO,MAAM,IAAI,CAAC;AACxB,YAAM,MAAM,MAAM,eAAe,gBAAgB,KAAK,QAAQ;AAC9D,YAAM,QACJ,MAAM,eAAe,SACjB,KAAK,QACL,MAAM,eAAe,QACnB,KAAK,aACL,MAAM;AACd,YAAMC,UAAS,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI;AAClE,UAAI,CAAC,OAAO,SAASA,OAAM,KAAKA,WAAU,KAAK,UAAU,KAAK,OAAO;AACnE,YAAI,SAAS;AAAA,UACX,MAAMD,KAAE,aAAa;AAAA,UACrB,MAAM,CAAC,CAAC;AAAA,UACR,SACE;AAAA,QACJ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC,EACA,SAAS,4BAA4B;AAsFxC,iBAAiE,IAAI;AACrE,iBAA6C,IAAI;;;ACvNjD,SAAS,KAAAE,YAAS;AAIX,IAAM,oBAAoBC,KAC9B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mBAAmB;AAAA,EACnC,sBAAsB,4BAA4B,mBAAmB;AAAA,EACrE,cAAcA,KAAE,QAAQ,mBAAmB,EAAE,QAAQ,mBAAmB;AAAA,EACxE,SAASA,KAAE,OAAO;AAAA,EAClB,QAAQ,MAAM,SAAS;AAAA,EACvB,cAAcA,KAAE,OAAO;AAAA,EACvB,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACrC,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAChC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,oCAAoC;AAqBhD,iBAA2D,IAAI;;;ACtC/D,SAAS,KAAAC,YAAS;AAKX,IAAM,2BAA2BC,KACrC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,0BAA0B;AAAA,EAC1C,6BAA6B;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,0BAA0B,EAClC,QAAQ,0BAA0B;AAAA,EACrC,SAASA,KAAE,OAAO;AAAA,EAClB,cAAcA,KAAE,OAAO;AAAA,EACvB,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAmBF,iBAAqE,IAAI;;;AC3CzE,SAAS,KAAAC,YAAS;AAqBX,IAAM,4BAA4B,wBAAwB,OAAO;AAAA,EACtE,MAAMC,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,2BAA2B,EACnC,QAAQ,2BAA2B;AAAA,EACtC,eAAeA,KAAE,OAAO;AAAA,EACxB,kBAAkBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACpC,eAAeA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACjC,oBAAoBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,EACpD,qBAAqBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,EACrD,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAKD,iBAGE,IAAI;;;AC3CN,SAAS,KAAAC,YAAS;AAKX,IAAM,6BAA6BC,KACvC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,4BAA4B;AAAA,EAC5C,+BAA+B;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,4BAA4B,EACpC,QAAQ,4BAA4B;AAAA,EACvC,SAASA,KAAE,OAAO;AAAA,EAClB,cAAcA,KAAE,OAAO;AAAA,EACvB,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAqBF,iBAAyE,IAAI;;;AC7C7E,SAAS,KAAAC,YAAS;AAIX,IAAM,kCAAkCC,KAC5C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,iCAAiC;AAAA,EACjD,oCAAoC;AAAA,IAClC;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,iCAAiC,EACzC,QAAQ,iCAAiC;AAAA,EAC5C,SAASA,KAAE,OAAO;AAAA,EAClB,cAAcA,KAAE,OAAO;AAAA,EACvB,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,kBAAkBA,KAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC/C,mBAAmBA,KAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAuBF,iBAGE,IAAI;;;ACjDN,SAAS,KAAAC,YAAS;AAwElB,IAAM,aAAa,wBAAwB,OAAO;AAAA,EAChD,MAAMC,KAAE,QAAQ,kCAAkC;AAAA,EAClD,qCAAqC;AAAA,IACnC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,kCAAkC,EAC1C,QAAQ,kCAAkC;AAAA,EAC7C,eAAeA,KAAE,OAAO;AAAA,EACxB,kBAAkBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAC3C,eAAeA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACjC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,mCAAmCA,KAC7C,mBAAmB,gBAAgB;AAAA,EAClC,WAAW,OAAO;AAAA,IAChB,cAAcA,KAAE,QAAQ,aAAa;AAAA,IACrC,oBAAoBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,IACpD,qBAAqBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,EACvD,CAAC;AAAA,EACD,WAAW,OAAO;AAAA,IAChB,cAAcA,KAAE,QAAQ,YAAY;AAAA,IACpC,qBAAqBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,IACrD,sBAAsBA,KAAE,OAAO,EAAE,OAAO;AAAA,EAC1C,CAAC;AAAA,EACD,WAAW,OAAO;AAAA,IAChB,cAAcA,KAAE,QAAQ,YAAY;AAAA,IACpC,qBAAqBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,IACrD,sBAAsBA,KAAE,OAAO,EAAE,OAAO;AAAA,EAC1C,CAAC;AAAA,EACD,WAAW,OAAO;AAAA,IAChB,cAAcA,KAAE,QAAQ,eAAe;AAAA,IACvC,qBAAqBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,IACrD,qBAAqBA,KAAE,OAAO,EAAE,OAAO;AAAA,IACvC,kBAAkBA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,EACpD,CAAC;AAAA,EACD,WAAW,OAAO;AAAA,IAChB,cAAcA,KAAE,QAAQ,mBAAmB;AAAA,IAC3C,oBAAoBA,KAAE,OAAO;AAAA,IAC7B,uBAAuBA,KAAE,OAAO,EAAE,SAAS;AAAA,IAC3C,2BAA2BA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,IAC3D,4BAA4BA,KAAE,OAAO,EAAE,SAAS,EAAE,OAAO;AAAA,EAC3D,CAAC;AAAA,EACD,WAAW,OAAO;AAAA,IAChB,cAAcA,KAAE,QAAQ,8BAA8B;AAAA,IACtD,oBAAoBA,KAAE,OAAO;AAAA,IAC7B,uBAAuBA,KAAE,OAAO,EAAE,SAAS;AAAA,IAC3C,2BAA2BA,KAAE,OAAO,EAAE,YAAY,EAAE,OAAO;AAAA,IAC3D,4BAA4BA,KAAE,OAAO,EAAE,SAAS,EAAE,OAAO;AAAA,EAC3D,CAAC;AAAA,EACD,WAAW,OAAO;AAAA,IAChB,cAAcA,KAAE,QAAQ,kBAAkB;AAAA,IAC1C,kBAAkBA,KAAE,OAAO,EAAE,SAAS,EAAE,OAAO;AAAA,IAC/C,mBAAmBA,KAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,IAC3D,mBAAmBA,KAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7D,CAAC;AACH,CAAC,EACA,YAAY,CAAC,OAAO,QAAQ;AAC3B,MAAI,MAAM,iBAAiB,mBAAoB;AAC/C,MACE,MAAM,sBAAsB,UAC5B,MAAM,sBAAsB;AAE5B,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,MAAM,CAAC,mBAAmB;AAAA,MAC1B,SAAS;AAAA,IACX,CAAC;AACH,MACE,MAAM,sBAAsB,UAC5B,MAAM,sBAAsB,UAC5B,MAAM,oBAAoB,MAAM;AAEhC,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,MAAM,CAAC,mBAAmB;AAAA,MAC1B,SAAS;AAAA,IACX,CAAC;AACL,CAAC,EACA;AAAA,EACC;AACF;AAKF,iBAGE,IAAI;;;AClKN,SAAS,KAAAC,YAAS;AAgBlB,IAAM,eAAeC,KAClB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,oCAAoC;AAAA,EACpD,uCAAuC;AAAA,IACrC;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,oCAAoC,EAC5C,QAAQ,oCAAoC;AAAA,EAC/C,eAAeA,KAAE,OAAO;AAAA,EACxB,kBAAkBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAC3C,eAAeA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACjC,SAASA,KAAE,OAAO;AAAA,EAClB,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAiBK,IAAM,qCAAqCA,KAAE;AAAA,EAClD;AAAA,EACA;AAAA,IACE,aAAa,OAAO,EAAE,cAAcA,KAAE,QAAQ,gBAAgB,EAAE,CAAC;AAAA,IACjE,aAAa,OAAO,EAAE,cAAcA,KAAE,QAAQ,oBAAoB,EAAE,CAAC;AAAA,IACrE,aAAa,OAAO,EAAE,cAAcA,KAAE,QAAQ,kBAAkB,EAAE,CAAC;AAAA,IACnE,aAAa,OAAO,EAAE,cAAcA,KAAE,QAAQ,eAAe,EAAE,CAAC;AAAA,IAChE,aAAa,OAAO,EAAE,cAAcA,KAAE,QAAQ,oBAAoB,EAAE,CAAC;AAAA,EACvE;AACF;AAKA,iBAGE,IAAI;;;ACnEN,SAAS,KAAAC,YAAS;AAQX,IAAM,kBAAkB,wBAC5B,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,YAAYA,KAAE,QAAQ,iBAAiB,EAAE,QAAQ,iBAAiB;AAAA,EAClE,QAAQ,MAAM,SAAS;AAAA,EACvB,cAAcA,KAAE,OAAO;AAAA,EACvB,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACrC,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAChC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,kCAAkC;AAyB9C,iBAAuD,IAAI;;;AC7C3D,SAAS,KAAAC,YAAS;AAQX,IAAM,0BAA0B,wBACpC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,yBAAyB;AAAA,EACzC,4BAA4B;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,yBAAyB,EACjC,QAAQ,yBAAyB;AAAA,EACpC,QAAQ,MAAM,SAAS;AAAA,EACvB,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACrC,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAChC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAwBF,iBAAqE,IAAI;;;ACjDzE,SAAS,KAAAC,YAAS;AAQX,IAAM,6BAA6B,wBACvC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,4BAA4B;AAAA,EAC5C,cAAc,4BAA4B,WAAW;AAAA,EACrD,YAAYA,KACT,QAAQ,4BAA4B,EACpC,QAAQ,4BAA4B;AAAA,EACvC,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACrC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,8DAA8D;AAuB1E,iBAAyE,IAAI;;;ACzC7E,SAAS,KAAAC,YAAS;AAQX,IAAM,+BAA+B,wBACzC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,8BAA8B;AAAA,EAC9C,iCAAiC;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,8BAA8B,EACtC,QAAQ,8BAA8B;AAAA,EACzC,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAChC,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACrC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,gEAAgE;AAqB5E;AAAA,EACE;AACF;;;AC5CA,SAAS,KAAAC,YAAS;AAIX,IAAM,UAAUC,KACpB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,SAAS;AAAA,EACzB,YAAY,4BAA4B,SAAS;AAAA,EACjD,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AACvC,CAAC,EACA,SAAS,0BAA0B;AAetC,iBAAyC,IAAI;;;AC1B7C,SAAS,KAAAC,YAAS;AAMX,IAAM,UAAUC,KACpB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,SAAS;AAAA,EACzB,YAAY,4BAA4B,SAAS;AAAA,EACjD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iCAAiCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,gBAAgB,SAAS,QAAQ,OAAO;AAAA,EACxC,eAAe,SAAS,QAAQ,QAAQ;AAAA,EACxC,qBAAqB,UAAU,SAAS;AAAA,EACxC,wBAAwB,UAAU,SAAS;AAAA,EAC3C,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAEnC,YAAY,UAAU,SAAS;AAAA;AAAA,EAE/B,UAAU,UAAU,SAAS;AAAA,EAC7B,QAAQA,KAAE,MAAM,SAAS;AAAA;AAAA,EAEzB,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAeA,KAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC1C,mBAAmBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAEnC,WAAWA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,eAAeA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AACzC,CAAC,EACA,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,MAAM;AACpC,MAAI,cAAc,QAAW;AAC3B,QAAI,kBAAkB;AACtB,QAAI,qBAAqB;AAAA,EAC3B;AACA,SAAO;AACT,CAAC,EACA,SAAS,0BAA0B;AA0CtC,iBAAyC,IAAI;;;ACzE7C,SAAS,KAAAC,YAAS;AAEX,IAAM,YAAYA,KACtB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,WAAW;AAAA,EAC3B,cAAc,4BAA4B,WAAW;AAAA,EACrD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,sBAAsBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,eAAeA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,6BAA6BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,uBAAuBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,2BAA2BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,8BAA8BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACnD,qBAAqBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC1C,OAAO,OAAO,SAAS;AAAA,EACvB,QAAQ,OAAO,SAAS;AAAA,EACxB,QAAQ;AAAA,EACR,kBAAkBA,KACf,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,kBAAkBA,KACf,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,WAAW,OAAO,SAAS,EAAE,QAAQ,GAAG;AAAA,EACxC,YAAYA,KAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA,EAC3C,6BAA6BA,KAC1B,QAAQ,EACR,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,SAASA,KAAE,MAAM,KAAK,EAAE,SAAS;AAAA,EACjC,OAAOA,KAAE,KAAK,CAAC,QAAQ,SAAS,CAAC,EAAE,SAAS;AAAA,EAC5C,UAAUA,KAAE,KAAK,CAAC,OAAO,OAAO,MAAM,CAAC,EAAE,QAAQ,KAAK;AAAA,EACtD,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,iBAAiB,MAAM,SAAS;AAAA,EAChC,kBAAkB,gBAAgB,SAAS;AAAA,EAC3C,eAAeA,KAAE,KAAK,CAAC,4BAA4B,MAAM,CAAC,EAAE,SAAS;AACvE,CAAC,EACA,MAAM,4BAA4B,EAClC,SAAS,sCAAsC;AA4ClD,iBAA6C,IAAI;;;ACtGjD,SAAS,KAAAC,YAAS;AAElB,IAAM,eAAe,MAAM,OAAO;AAAA,EAChC,GAAG,OAAO,KAAKA,KAAE,OAAO,EAAE,OAAO,CAAC;AAAA,EAClC,GAAG,OAAO,KAAKA,KAAE,OAAO,EAAE,OAAO,CAAC;AACpC,CAAC;AAEM,IAAM,WAAWA,KACrB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,UAAU;AAAA,EAC1B,aAAa,4BAA4B,UAAU;AAAA,EACnD,cAAcA,KAAE,OAAO;AAAA,EACvB,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO;AAAA,EACP,KAAK;AAAA,EACL,YAAY,SAAS,KAAKA,KAAE,OAAO,EAAE,OAAO,CAAC;AAAA,EAC7C,aAAa,OAAO,KAAKA,KAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;AAAA,EACvD,WAAWA,KAAE,KAAK,CAAC,QAAQ,OAAO,CAAC;AACrC,CAAC,EACA,OAAO,CAAC,EAAE,OAAO,IAAI,MAAM,MAAM,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI,GAAG;AAAA,EAClE,SAAS;AAAA,EACT,MAAM,CAAC,KAAK;AACd,CAAC,EACA;AAAA,EACC;AACF;AAyBF,iBAA2C,IAAI;;;ACpD/C,SAAS,KAAAC,YAAS;AAElB,IAAM,kBAAkB,OAAO,KAAKA,KAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;AAClE,IAAMC,gBAAe,MAAM,OAAO;AAAA,EAChC,GAAG,OAAO,KAAKD,KAAE,OAAO,EAAE,OAAO,CAAC;AAAA,EAClC,GAAG,OAAO,KAAKA,KAAE,OAAO,EAAE,OAAO,CAAC;AACpC,CAAC;AAED,IAAM,qBAAqBA,KAAE,OAAO;AAAA,EAClC,MAAMA,KAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkB,4BAA4B,eAAe;AAAA,EAC7D,cAAcA,KAAE,OAAO;AAAA,EACvB,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,KAAK,CAAC,OAAO,QAAQ,CAAC;AAAA,EAC/B,UAAUA,KAAE,KAAK,CAAC,OAAO,aAAa,mBAAmB,UAAU,CAAC;AAAA,EACpE,WAAW;AAAA,EACX,oBAAoB,OAAO,KAAKA,KAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,SAAS;AAC9E,CAAC;AAoBM,IAAM,qBAAqB,mBAAmB,OAAO;AAAA,EAC1D,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,QAAQC;AAAA,EACR,UAAU,SAAS,KAAKD,KAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAASA,KAAE,MAAM,EAAE,SAAS;AAC9B,CAAC;AAcD,iBAAuE,IAAI;AAEpE,IAAM,wBAAwB,mBAAmB,OAAO;AAAA,EAC7D,OAAOA,KAAE,QAAQ,SAAS;AAAA,EAC1B,SAASA,KACN,MAAMC,aAAY,EAClB,IAAI,CAAC,EACL,OAAO,CAAC,WAAW;AAClB,UAAM,aAAa,OAAO,OAAO,CAAC,KAAK,GAAG,MAAM;AAC9C,YAAM,OAAO,QAAQ,IAAI,KAAK,OAAO,MAAM;AAC3C,aAAO,MAAM,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE;AAAA,IACzC,GAAG,CAAC;AACJ,WAAO,OAAO,SAAS,UAAU,KAAK,eAAe;AAAA,EACvD,GAAG,+CAA+C;AAAA,EACpD,QAAQD,KAAE,MAAM,EAAE,SAAS;AAAA,EAC3B,UAAUA,KAAE,MAAM,EAAE,SAAS;AAAA,EAC7B,OAAOA,KAAE,MAAM,EAAE,SAAS;AAAA,EAC1B,QAAQA,KAAE,MAAM,EAAE,SAAS;AAC7B,CAAC;AAaD;AAAA,EACE;AACF;AAEO,IAAM,gBAAgBA,KAC1B,mBAAmB,SAAS,CAAC,oBAAoB,qBAAqB,CAAC,EACvE;AAAA,EACC;AACF;AAIF,iBAA8D,IAAI;;;AC1GlE,SAAS,KAAAE,YAAS;AAKX,IAAM,YAAYC,KACtB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,WAAW;AAAA,EAC3B,cAAc,4BAA4B,WAAW;AAAA,EACrD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW,OAAO,SAAS,EAAE,QAAQ,GAAG;AAAA,EACxC,0BAA0BA,KAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAC/D,CAAC,EACA,SAAS,sDAAsD;AAuBlE,iBAA6C,IAAI;;;ACtCjD,SAAS,KAAAC,YAAS;AAQX,IAAM,sBAAsB,wBAChC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,YAAYA,KAAE,QAAQ,qBAAqB,EAAE,QAAQ,qBAAqB;AAAA,EAC1E,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,sCAAsC;AAoBlD,iBAA+D,IAAI;;;ACnCnE,SAAS,KAAAC,YAAS;AAQX,IAAM,oBAAoB,wBAC9B,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,mBAAmB;AAAA,EACnC,sBAAsB,4BAA4B,mBAAmB;AAAA,EACrE,YAAYA,KAAE,QAAQ,mBAAmB,EAAE,QAAQ,mBAAmB;AAAA,EACtE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,+DAA+D;AAqB3E,iBAA2D,IAAI;;;ACrC/D,SAAS,KAAAC,YAAS;AAQX,IAAM,mCAAmC,wBAC7C,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,kCAAkC;AAAA,EAClD,qCAAqC;AAAA,IACnC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,kCAAkC,EAC1C,QAAQ,kCAAkC;AAAA,EAC7C,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,mDAAmD;AA0B/D,iBAGE,IAAI;;;AClDN,SAAS,KAAAC,YAAS;AAiBX,IAAM,iBAAiBC,KAC3B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,gBAAgB;AAAA,EAChC,mBAAmB,4BAA4B,gBAAgB;AAAA,EAC/D,aAAaA,KAAE,OAAO;AAAA,EACtB,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,OAAOA,KAAE,MAAM,gBAAgB;AAAA,EAC/B,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,0DAA0D;AAUtE,iBAAqD,IAAI;;;ACpCzD,SAAS,KAAAC,YAAS;AAWX,IAAM,sBAAsBC,KAChC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAc,SAAS,QAAQ,OAAO;AAAA,EACtC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT,CAAC,EACA,SAAS,sCAAsC;AA2BlD,iBAA+D,IAAI;;;ACpDnE,SAAS,KAAAC,YAAS;AASX,IAAM,sBAAsBC,KAChC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,OAAOA,KAAE,MAAM,KAAK;AAAA,EACpB,cAAc;AAChB,CAAC,EACA,SAAS,sCAAsC;AAwBlD,iBAA+D,IAAI;;;AC5CnE,SAAS,KAAAC,YAAS;AAUX,IAAM,sBAAsBC,KAChC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,QAAQ,eAAe,EAAE,QAAQ,eAAe;AAAA,EACxD,WAAW,SAAS,QAAQ,OAAO;AAAA,EACnC,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,MAAMA,KAAE,OAAO;AAAA,EACf,aAAaA,KAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EACjD,kBAAkBA,KACf,OAAO;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC,EACA,QAAQ;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC,EACA,SAAS;AAAA,EACZ,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO;AAAA,EACP,aAAaA,KAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EACjD,iBAAiB,MAAM,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,EAC7C,kBAAkB,gBAAgB,QAAQ,QAAQ;AACpD,CAAC,EACA,SAAS,oCAAoC;AAoChD,iBAA+D,IAAI;;;AC7EnE,SAAS,KAAAC,YAAS;AAUX,IAAM,kBAAkBC,KAC5B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,QAAQ,eAAe,EAAE,QAAQ,eAAe;AAAA,EACxD,WAAW,SAAS,QAAQ,OAAO;AAAA,EACnC,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,MAAMA,KAAE,OAAO;AAAA,EACf,aAAaA,KAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EACjD,kBAAkBA,KACf,OAAO;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC,EACA,QAAQ;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC,EACA,SAAS;AAAA,EACZ,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO;AAAA,EACP,aAAaA,KAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EACjD,iBAAiB,MAAM,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,EAC7C,kBAAkB,gBAAgB,QAAQ,QAAQ;AACpD,CAAC,EACA,SAAS,gCAAgC;AAoC5C,iBAAuD,IAAI;;;AC7E3D,SAAS,KAAAC,YAAS;AAMX,IAAM,sBAAsBC,KAChC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc,OAAO,QAAQ,KAAK;AAAA,EAClC,eAAe,OAAO,SAAS;AAAA,EAC/B,WAAWA,KAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EAC9C,YAAYA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,cAAcA,KAAE,OAAO,EAAE,SAAS;AACpC,CAAC,EACA,SAAS,sCAAsC;AA+BlD,iBAA+D,IAAI;;;ACvDnE,SAAS,KAAAC,YAAS;AAWX,IAAM,wBAAwBC,KAClC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,uBAAuB;AAAA,EACvC,0BAA0B;AAAA,IACxB;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc,OAAO,QAAQ,KAAK;AAAA,EAClC,WAAWA,KAAE,QAAQ,EAAE,SAAS;AAClC,CAAC,EACA,SAAS,wCAAwC;AAqBpD,iBAAmE,IAAI;;;AC/CvE,SAAS,KAAAC,YAAS;AAWX,IAAM,sBAAsBC,KAChC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,cAAc,SAAS,SAAS;AAClC,CAAC,EACA,SAAS,sCAAsC;AA0BlD,iBAA+D,IAAI;;;AClDnE,SAAS,KAAAC,YAAS;AAMlB,IAAM,8BAA8BC,KAAE,OAAO;AAAA,EAC3C,MAAMA,KAAE,QAAQ,wBAAwB;AAAA,EACxC,2BAA2B;AAAA,IACzB;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,aAAa,MAAM,SAAS;AAC9B,CAAC;AAEM,IAAM,8BAA8B,4BACxC,OAAO;AAAA,EACN,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB;AACF,CAAC,EACA,SAAS,8CAA8C;AAuB1D;AAAA,EACE;AACF;AAEO,IAAM,yBAAyBA,KACnC,mBAAmB,SAAS,CAAC,2BAA2B,CAAC,EACzD,SAAS,yCAAyC;AAMrD,iBAAqE,IAAI;;;AC1DzE,SAAS,KAAAC,YAAS;AAMX,IAAM,sBAAsBC,KAChC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAcA,KAAE,OAAO,EAAE,SAAS;AACpC,CAAC,EACA,SAAS,sCAAsC;AA0BlD,iBAA+D,IAAI;;;AC7CnE,SAAS,KAAAC,YAAS;AAOX,IAAM,4BAA4BC,KACtC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,MAAMA,KAAE,QAAQ,eAAe,EAAE,QAAQ,eAAe;AAAA,EACxD,WAAW,SAAS,QAAQ,KAAK;AAAA,EACjC,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,MAAMA,KAAE,OAAO;AAAA,EACf,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO;AAAA,EACP,iBAAiB,MAAM,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,EAC7C,kBAAkBA,KACf,KAAK,CAAC,UAAU,YAAY,aAAa,eAAe,cAAc,CAAC,EACvE,QAAQ,QAAQ;AAAA,EACnB,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA;AAAA,EACC;AACF;AAoCF,iBAAyE,IAAI;;;ACjE7E,SAAS,KAAAC,YAAS;AAWX,IAAM,4BAA4BC,KACtC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,OAAOA,KAAE,MAAM,KAAK;AAAA,EACpB,cAAc;AAAA,EACd,OAAOA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAWA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,YAAYA,KAAE,QAAQ,EAAE,SAAS;AACnC,CAAC,EACA;AAAA,EACC;AACF;AA8BF,iBAAyE,IAAI;;;AC1D7E,SAAS,KAAAC,YAAS;AAMX,IAAM,4BAA4BC,KACtC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc,OAAO,QAAQ,OAAO;AAAA,EACpC,eAAe,OAAO,SAAS;AAAA,EAC/B,WAAWA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,YAAYA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,iDAAiD;AAiC7D,iBAAyE,IAAI;;;AC3D7E,SAAS,KAAAC,YAAS;AAMX,IAAM,iCAAiCC,KAC3C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,gCAAgC;AAAA,EAChD,mCAAmC;AAAA,IACjC;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,QAAQ,OAAO,SAAS;AAAA,EACxB,iBAAiB,OAAO,SAAS;AAAA,EACjC,kBAAkBA,KACf,OAAO;AAAA,IACN,GAAGA,KAAE,OAAO;AAAA,IACZ,GAAGA,KAAE,OAAO;AAAA,EACd,CAAC,EACA,SAAS;AAAA,EACZ,MAAMA,KAAE,QAAQ,eAAe,EAAE,QAAQ,eAAe;AAAA,EACxD,WAAW,OAAO,QAAQ,KAAK;AAAA,EAC/B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAY,OAAO,QAAQ,KAAK;AAClC,CAAC,EACA,SAAS,+DAA+D;AAwC3E,iBAGE,IAAI;;;AC5EN,SAAS,KAAAC,YAAS;AAMX,IAAM,gBAAgBC,KAC1B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkB,4BAA4B,eAAe;AAAA,EAC7D,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,KAAE,QAAQ,eAAe,EAAE,QAAQ,eAAe;AAAA,EACxD,WAAW,SAAS,QAAQ,KAAK;AAAA,EACjC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,iBAAiB,MAAM,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,EAC7C,kBAAkBA,KACf,KAAK,CAAC,UAAU,YAAY,aAAa,eAAe,cAAc,CAAC,EACvE,QAAQ,QAAQ;AAAA,EACnB,OAAO,cAAc,QAAQ,KAAK;AAAA,EAClC,2BAA2BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,iDAAiD;AA8B7D,iBAAmD,IAAI;;;ACvDvD,SAAS,KAAAC,YAAS;AAMX,IAAM,gBAAgBC,KAC1B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkB,4BAA4B,eAAe;AAAA,EAC7D,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO,cAAc,QAAQ,KAAK;AAAA,EAClC,cAAc,OAAO,QAAQ,OAAO;AAAA,EACpC,eAAe,OAAO,SAAS;AAAA,EAC/B,WAAWA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,YAAYA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,qDAAqD;AA4BjE,iBAAmD,IAAI;;;ACtDvD,SAAS,KAAAC,YAAS;AAMX,IAAM,gBAAgBC,KAC1B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkB,4BAA4B,eAAe;AAAA,EAC7D,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,MAAM,KAAK;AAAA,EACpB,OAAO,cAAc,QAAQ,KAAK;AAAA,EAClC,cAAc,OAAO,QAAQ,OAAO;AAAA,EACpC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,kDAAkD;AAsB9D,iBAAmD,IAAI;;;AC1CvD,SAAS,KAAAC,YAAS;AAMX,IAAM,gBAAgBC,KAC1B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkB,4BAA4B,eAAe;AAAA,EAC7D,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO,cAAc,QAAQ,KAAK;AAAA,EAClC,cAAc,SAAS,QAAQ,OAAO;AAAA,EACtC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAWA,KAAE,QAAQ,EAAE,SAAS;AAClC,CAAC,EACA,SAAS,uDAAuD;AA0BnE,iBAAmD,IAAI;;;AClDvD,SAAS,KAAAC,YAAS;AAMX,IAAM,qBAAqBC,KAC/B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,oBAAoB;AAAA,EACpC,uBAAuB,4BAA4B,oBAAoB;AAAA,EACvE,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,mBAAmBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACvC,iBAAiB,OAAO,SAAS;AAAA,EACjC,kBAAkBA,KACf,OAAO;AAAA,IACN,GAAGA,KAAE,OAAO;AAAA,IACZ,GAAGA,KAAE,OAAO;AAAA,EACd,CAAC,EACA,SAAS;AAAA,EACZ,MAAMA,KAAE,QAAQ,eAAe,EAAE,QAAQ,eAAe;AAAA,EACxD,WAAW,OAAO,QAAQ,KAAK;AAAA,EAC/B,OAAO,cAAc,QAAQ,KAAK;AAAA,EAClC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAY,OAAO,QAAQ,KAAK;AAClC,CAAC,EACA,SAAS,iEAAiE;AA+B7E,iBAA6D,IAAI;;;AC9DjE,SAAS,KAAAC,YAAS;AAQX,IAAM,8BAA8B,wBACxC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,6BAA6B;AAAA,EAC7C,cAAc,4BAA4B,WAAW;AAAA,EACrD,YAAYA,KACT,QAAQ,6BAA6B,EACrC,QAAQ,6BAA6B;AAAA,EACxC,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,qBAAqBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAClD,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,iBAAiBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAChD,CAAC,EACA,SAAS,kEAAkE;AAoB9E;AAAA,EACE;AACF;;;AC1CA,SAAS,KAAAC,YAAS;AAQX,IAAM,8BAA8B,wBACxC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,6BAA6B;AAAA,EAC7C,cAAc,4BAA4B,WAAW;AAAA,EACrD,YAAYA,KACT,QAAQ,6BAA6B,EACrC,QAAQ,6BAA6B;AAAA,EACxC,mBAAmBA,KAAE,MAAM,CAACA,KAAE,OAAO,GAAGA,KAAE,OAAO,CAAC,CAAC;AACrD,CAAC,EACA;AAAA,EACC;AACF;AAiBF;AAAA,EACE;AACF;;;ACrCA,SAAS,KAAAC,YAAS;AAIX,IAAM,sBAAsBC,KAAE,OAAO;AAAA,EAC1C,MAAMA,KAAE,QAAQ,aAAa;AAAA,EAC7B,OAAOA,KAAE,QAAQ,SAAS;AAAA,EAC1B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,SAASA,KAAE,MAAM,KAAK,EAAE,IAAI,CAAC;AAAA,EAC7B,cAAc;AAAA,EACd,gBAAgBA,KAAE,OAAO;AAAA,EACzB,QAAQA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAC1B,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,4BAA4BA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzD,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AACzC,CAAC;AAKM,IAAM,cAAcA,KACxB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,aAAa;AAAA,EAC7B,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,gBAAgBA,KAAE,OAAO;AAAA,EACzB,QAAQA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA;AAAA,EAC1B,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EACjC,4BAA4BA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzD,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AACzC,CAAC,EACA;AAAA,EACCA,KAAE,OAAO;AAAA,IACP,MAAMA,KAAE,QAAQ,aAAa;AAAA,IAC7B,OAAOA,KAAE,QAAQ,QAAQ;AAAA,IACzB,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,IAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,IACnC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,gBAAgBA,KAAE,OAAO;AAAA,IACzB,QAAQA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA;AAAA,IAC1B,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA;AAAA,IACjC,4BAA4BA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACzD,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA,IACnC,cAAcA,KAAE,QAAQ,EAAE,SAAS;AAAA,IACnC,kBAAkBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,CAAC;AACH,EACC,GAAG,mBAAmB;AA8EzB,iBAA+D,IAAI;AAInE,iBAAiD,IAAI;;;AC5IrD,SAAS,KAAAC,YAAS;AAIX,IAAM,8BAA8BC,KACxC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,6BAA6B;AAAA,EAC7C,gCAAgC;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,6BAA6B,EACrC,QAAQ,6BAA6B;AAAA,EACxC,SAASA,KAAE,OAAO;AAAA,EAClB,gBAAgBA,KAAE,OAAO;AAAA,EACzB,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAChD,eAAeA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,qBAAqBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAClD,aAAaA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,QAAQ,MAAM,SAAS;AAAA,EACvB,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AA4BF;AAAA,EACE;AACF;;;ACpDA,SAAS,KAAAC,YAAS;AAGlB,IAAM,kBAAkBA,KAAE,OAAO;AAAA,EAC/B,MAAMA,KAAE,QAAQ,YAAY;AAAA,EAC5B,eAAe,4BAA4B,YAAY;AAAA,EACvD,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,cAAcA,KAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAGM,IAAM,kBAAkB,gBAAgB,OAAO;AAAA,EACpD,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU,SAAS,SAAS;AAAA,EAC5B,eAAe,OAAO,SAAS;AACjC,CAAC;AAqBD,iBAAuD,IAAI;AAGpD,IAAM,oBAAoB,gBAAgB,OAAO;AAAA,EACtD,OAAOA,KAAE,QAAQ,QAAQ;AAAA,EACzB,QAAQ;AAAA,EACR,QAAQ;AACV,CAAC;AAkBD,iBAA2D,IAAI;AAGxD,IAAM,qBAAqB,gBAAgB,OAAO;AAAA,EACvD,OAAOA,KAAE,QAAQ,SAAS;AAAA,EAC1B,QAAQA,KAAE,MAAM,KAAK;AACvB,CAAC;AAkBD,iBAA6D,IAAI;AAG1D,IAAM,kBAAkB,gBAAgB,OAAO;AAAA,EACpD,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,OAAOA,KAAE,MAAM,KAAK;AAAA,EACpB,YAAY;AAAA,EACZ,aAAa,OAAO,SAAS;AAAA,EAC7B,qBAAqB,OAAO,SAAS;AAAA,EACrC,oBAAoB,OAAO,SAAS;AACtC,CAAC;AAwBD,iBAAuD,IAAI;AAGpD,IAAM,aAAaA,KACvB,mBAAmB,SAAS;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,EACA,SAAS,uDAAuD;AAUnE,iBAA+C,IAAI;;;ACpJnD,SAAS,KAAAC,YAAS;AAQX,IAAM,8BAA8B,wBACxC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,6BAA6B;AAAA,EAC7C,gCAAgC;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,KACT,QAAQ,6BAA6B,EACrC,QAAQ,6BAA6B;AAAA,EACxC,qBAAqBA,KAAE,OAAO;AAChC,CAAC,EACA,SAAS,8CAA8C;AA0B1D;AAAA,EACE;AACF;;;ACjDA,SAAS,KAAAC,YAAS;AAQX,IAAM,gCAAgC,wBAC1C,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,+BAA+B;AAAA,EAC/C,kCAAkC;AAAA,IAChC;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,YAAYA,KACT,QAAQ,+BAA+B,EACvC,QAAQ,+BAA+B;AAC5C,CAAC,EACA,SAAS,2DAA2D;AAoBvE,iBAGE,IAAI;;;AC9CN,SAAS,KAAAC,YAAS;AAQX,IAAM,oCAAoC,wBAC9C,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,KACT,QAAQ,mCAAmC,EAC3C,QAAQ,mCAAmC;AAAA,EAC9C,cAAcA,KAAE,MAAMA,KAAE,IAAI,CAAC,EAAE,SAAS;AAC1C,CAAC,EACA,SAAS,8DAA8D;AAoB1E,iBAGE,IAAI;;;AC9CN,SAAS,KAAAC,YAAS;AAWX,IAAM,YAAYC,KACtB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,WAAW;AAAA,EAC3B,cAAc,4BAA4B,WAAW;AAAA,EACrD,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,eAAeA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO,OAAO,SAAS;AAAA,EACvB,QAAQ,OAAO,SAAS;AAAA,EACxB,QAAQ;AAAA,EACR,kBAAkBA,KACf,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,kBAAkBA,KACf,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,SAASA,KAAE,MAAM,KAAK,EAAE,SAAS;AAAA,EACjC,iBAAiB,MAAM,SAAS;AAAA,EAChC,kBAAkB,gBAAgB,QAAQ,QAAQ;AAAA,EAClD,eAAeA,KACZ,KAAK,CAAC,UAAU,4BAA4B,MAAM,CAAC,EACnD,SAAS;AAAA,EACZ,qCAAqCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzD,qCAAqCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzD,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EACrC,mBAAmBA,KAAE,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,SAAS;AAAA,EACvD,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAaA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjC,0BAA0BA,KACvB,OAAO;AAAA,IACN,iBAAiB;AAAA,EACnB,CAAC,EACA,SAAS;AAAA,EACZ,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAC9C,CAAC,EACA,SAAS,0CAA0C;AAoCtD,iBAA6C,IAAI;;;ACzFjD,SAAS,KAAAC,YAAS;AAQX,IAAM,wBAAwB,wBAClC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,uBAAuB;AAAA,EACvC,cAAc,4BAA4B,uBAAuB;AAAA,EACjE,YAAYA,KACT,QAAQ,uBAAuB,EAC/B,QAAQ,uBAAuB;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,4DAA4D;AAcxE,iBAAmE,IAAI;;;AC/BvE,SAAS,KAAAC,YAAS;AAQX,IAAM,8BAA8B,wBAAwB,OAAO;AAAA,EACxE,MAAMC,KAAE,QAAQ,6BAA6B;AAAA,EAC7C,gCAAgC;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,6BAA6B,EACrC,QAAQ,6BAA6B;AAAA,EACxC,YAAYA,KAAE,OAAO;AAAA,EACrB,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,qBAAqBA,KAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC/C,YAAYA,KAAE,OAAO,EAAE,SAAS;AAAA,EAChC,kBAAkBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC/C,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAChD,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAChD,cAAcA,KAAE,OAAOA,KAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS;AACvD,CAAC;AAsBD,iBAGE,IAAI;;;ACnDN,SAAS,KAAAC,YAAS;AAIX,IAAM,mCAAmCC,KAC7C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,kCAAkC;AAAA,EAClD,qCAAqC;AAAA,IACnC;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,kCAAkC,EAC1C,QAAQ,kCAAkC;AAAA,EAC7C,SAASA,KAAE,OAAO;AAAA,EAClB,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,qBAAqBA,KAAE,OAAO;AAChC,CAAC,EACA;AAAA,EACC;AACF;AAuBF,iBAGE,IAAI;;;AC/CN,SAAS,KAAAC,YAAS;AAIlB,IAAM,gCAAgCC,KAAE,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI,CAAC;AAM9D,IAAM,sDAAsDA,KAChE,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qDAAqD;AAAA,EACrE,wDACE;AAAA,IACE;AAAA,EACF;AAAA,EACF,cAAcA,KACX,QAAQ,qDAAqD,EAC7D,QAAQ,qDAAqD;AAAA,EAChE,SAASA,KAAE,OAAO;AAAA,EAClB,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,kBAAkB;AAAA,EAClB,8BAA8B;AAAA,EAC9B,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAuBF,iBAGE,IAAI;;;ACxDN,SAAS,KAAAC,YAAS;AAIX,IAAM,0CAA0CC,KACpD,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,yCAAyC;AAAA,EACzD,4CAA4C;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,yCAAyC,EACjD,QAAQ,yCAAyC;AAAA,EACpD,SAASA,KAAE,OAAO;AAAA,EAClB,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,gEAAgE;AAqB5E,iBAGE,IAAI;;;AC1CN,SAAS,KAAAC,YAAS;AAQX,IAAM,sCAAsCC,KAChD,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qCAAqC;AAAA,EACrD,wCAAwC;AAAA,IACtC;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,qCAAqC,EAC7C,QAAQ,qCAAqC;AAAA,EAChD,SAASA,KAAE,OAAO;AAAA,EAClB,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,cAAc,SAAS;AAAA,EACtC,sBAAsBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,0CAA0CA,KAAE,OAAO;AACrD,CAAC,EACA;AAAA,EACC;AACF;AA2BF,iBAGE,IAAI;;;AC3DN,SAAS,KAAAC,YAAS;AAIX,IAAM,sCAAsCC,KAChD,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,qCAAqC;AAAA,EACrD,wCAAwC;AAAA,IACtC;AAAA,EACF;AAAA,EACA,cAAcA,KACX,QAAQ,qCAAqC,EAC7C,QAAQ,qCAAqC;AAAA,EAChD,SAASA,KAAE,OAAO;AAAA,EAClB,mBAAmBA,KAAE,OAAO;AAAA,EAC5B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,aAAaA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AA4BF,iBAGE,IAAI;;;AChDN,SAAS,KAAAC,YAAS;AAEX,IAAM,qBAAqBA,KAC/B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,oBAAoB;AAAA,EACpC,uBAAuB,4BAA4B,oBAAoB;AAAA,EACvE,cAAcA,KAAE,OAAO;AAAA,EACvB,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrC,gBAAgBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACpC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO,UAAU,SAAS;AAAA,EAC1B,GAAG;AAAA,EACH,GAAG;AACL,CAAC,EACA;AAAA,EACC;AACF;AAqBF,iBAA6D,IAAI;;;AC1CjE,SAAS,KAAAC,YAAS;AAIX,IAAM,mBAAmBC,KAC7B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,kBAAkB;AAAA,EAClC,qBAAqB,4BAA4B,kBAAkB;AAAA,EACnE,4BAA4BA,KAAE,OAAO;AAAA,EACrC,eAAeA,KAAE,OAAO;AAAA,EACxB,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,mCAAmC;AAiB/C,iBAAyD,IAAI;;;AC9B7D,SAAS,KAAAC,YAAS;AAKX,IAAM,0BAA0BC,KACpC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,yBAAyB;AAAA,EACzC,4BAA4B;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,QAAQA,KAAE,MAAM,KAAK;AACvB,CAAC,EACA,SAAS,4CAA4C;AAkBxD,iBAAqE,IAAI;;;ACnCzE,SAAS,KAAAC,YAAS;AAKX,IAAM,oBAAoBC,KAC9B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mBAAmB;AAAA,EACnC,sBAAsB,4BAA4B,mBAAmB;AAAA,EACrE,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,OAAOA,KAAE,OAAO;AAAA,EAChB,aAAaA,KAAE,OAAO;AAAA,EACtB,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,wDAAwD;AAqBpE,iBAA2D,IAAI;;;ACvC/D,SAAS,KAAAC,YAAS;AAQlB,IAAM,uBAAuBC,KAAE,OAAO;AAAA,EACpC,MAAMA,KAAE,QAAQ,iBAAiB;AAAA,EACjC,oBAAoB,4BAA4B,iBAAiB;AAAA,EACjE,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,0BAA0BA,KAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAC/D,CAAC;AAGM,IAAM,uBAAuB,qBAAqB,OAAO;AAAA,EAC9D,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU,SAAS,SAAS;AAC9B,CAAC;AAoBD,iBAA+D,IAAI;AAG5D,IAAM,uBAAuB,qBAAqB,OAAO;AAAA,EAC9D,OAAOA,KAAE,QAAQ,MAAM;AAAA,EACvB;AACF,CAAC;AAiBD,iBAA+D,IAAI;AAG5D,IAAM,0BAA0B,qBAAqB,OAAO;AAAA,EACjE,OAAOA,KAAE,QAAQ,SAAS;AAAA,EAC1B,QAAQA,KAAE,MAAM,KAAK;AACvB,CAAC;AAkBD,iBAAqE,IAAI;AAGlE,IAAM,kBAAkBA,KAC5B,mBAAmB,SAAS;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,CAAC,EACA,SAAS,mCAAmC;AAS/C,iBAAuD,IAAI;;;AC9G3D,SAAS,KAAAC,YAAS;AASX,IAAM,oCAAoC,wBAC9C,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,mCAAmC,EAC3C,QAAQ,mCAAmC;AAAA,EAC9C,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO;AAAA,EACvB,kBAAkB;AAAA,EAClB,kBAAkBA,KAAE,OAAO;AAAA,IACzB,OAAOA,KAAE,OAAO;AAAA,IAChB,OAAOA,KAAE,OAAO;AAAA,IAChB,OAAOA,KAAE,OAAO;AAAA,IAChB,OAAOA,KAAE,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAC3C,CAAC,EACA;AAAA,EACC;AACF;AA2BF,iBAGE,IAAI;;;AC9DN,SAAS,KAAAC,YAAS;AAQX,IAAM,wCAAwC,wBAClD,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,uCAAuC;AAAA,EACvD,0CAA0C;AAAA,IACxC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,uCAAuC,EAC/C,QAAQ,uCAAuC;AAAA,EAClD,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO;AAAA,EACvB,kBAAkB;AAAA,EAClB,oCAAoCA,KAAE,OAAO;AAAA,EAC7C,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAsBF,iBAGE,IAAI;;;ACnDN,SAAS,KAAAC,YAAS;AASX,IAAM,oCAAoC,wBAC9C,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,mCAAmC,EAC3C,QAAQ,mCAAmC;AAAA,EAC9C,kBAAkBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACtC,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,OAAO;AAAA,EACP,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAoBF,iBAGE,IAAI;;;AChDN,SAAS,KAAAC,YAAS;AASX,IAAM,0BAA0B,wBACpC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,yBAAyB;AAAA,EACzC,cAAc,4BAA4B,WAAW;AAAA,EACrD,YAAYA,KACT,QAAQ,yBAAyB,EACjC,QAAQ,yBAAyB;AAAA,EACpC,aAAaA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EACtC,mBAAmB,SAAS,SAAS;AAAA,EACrC,kBAAkB,SAAS,SAAS;AAAA,EACpC,YAAYA,KACT,OAAO;AAAA,IACN,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzB,CAAC,EACA,SAAS;AAAA,EACZ,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,+DAA+D;AAoB3E,iBAAqE,IAAI;;;AC/CzE,SAAS,KAAAC,YAAS;AASX,IAAM,gCAAgC,wBAC1C,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,+BAA+B;AAAA,EAC/C,kCAAkC;AAAA,IAChC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,+BAA+B,EACvC,QAAQ,+BAA+B;AAAA,EAC1C,YAAYA,KAAE,OAAO;AAAA,EACrB,cAAcA,KAAE,OAAO;AAAA,EACvB,mBAAmB,SAAS,SAAS;AAAA,EACrC,kBAAkB,SAAS,SAAS;AAAA,EACpC,QAAQA,KACL,OAAO;AAAA,IACN,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzB,CAAC,EACA,SAAS;AAAA,EACZ,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAyBF;AAAA,EACE;AACF;;;AC3DA,SAAS,KAAAC,YAAS;AASX,IAAM,8BAA8B,wBACxC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,6BAA6B;AAAA,EAC7C,gCAAgC;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,6BAA6B,EACrC,QAAQ,6BAA6B;AAAA,EACxC,aAAaA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EACtC,mBAAmB,SAAS,SAAS;AAAA,EACrC,kBAAkB,SAAS,SAAS;AAAA,EACpC,QAAQA,KACL,OAAO;AAAA,IACN,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzB,CAAC,EACA,SAAS;AAAA,EACZ,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,+DAA+D;AAwB3E,iBAA2E,IAAI;;;ACrD/E,SAAS,KAAAC,YAAS;AASX,IAAM,gCAAgC,wBAC1C,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,+BAA+B;AAAA,EAC/C,kCAAkC;AAAA,IAChC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,+BAA+B,EACvC,QAAQ,+BAA+B;AAAA,EAC1C,YAAYA,KAAE,OAAO;AAAA,EACrB,cAAcA,KAAE,OAAO;AAAA,EACvB,mBAAmB,SAAS,SAAS;AAAA,EACrC,kBAAkB,SAAS,SAAS;AAAA,EACpC,QAAQA,KACL,OAAO;AAAA,IACN,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAGA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzB,CAAC,EACA,SAAS;AAAA,EACZ,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA;AAAA,EACC;AACF;AAyBF;AAAA,EACE;AACF;;;AC3DA,SAAS,KAAAC,YAAS;AAMX,IAAM,qBAAqBC,KAC/B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,oBAAoB;AAAA,EACpC,uBAAuB,4BAA4B,oBAAoB;AAAA,EACvE,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc,SAAS,SAAS;AAAA,EAChC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,0CAA0C;AA2BtD,iBAA6D,IAAI;;;AC/CjE,SAAS,KAAAC,YAAS;AAMX,IAAM,wBAAwBC,KAClC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,uBAAuB;AAAA,EACvC,0BAA0B;AAAA,IACxB;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,SAASA,KAAE,MAAM,KAAK,EAAE,IAAI,CAAC;AAC/B,CAAC,EACA,SAAS,wCAAwC;AAuBpD,iBAAmE,IAAI;;;ACzCvE,SAAS,KAAAC,YAAS;AAKX,IAAM,wBAAwBC,KAClC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,uBAAuB;AAAA,EACvC,0BAA0B;AAAA,IACxB;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO;AAAA,EACP,QAAQA,KAAE,MAAM,KAAK,EAAE,IAAI,CAAC;AAAA,EAC5B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,wCAAwC;AAwBpD,iBAAmE,IAAI;;;AC1CvE,SAAS,KAAAC,YAAS;AAMX,IAAM,uBAAuBC,KACjC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,sBAAsB;AAAA,EACtC,yBAAyB;AAAA,IACvB;AAAA,EACF;AAAA,EACA,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,uCAAuC;AAoBnD,iBAAiE,IAAI;;;ACxCrE,SAAS,KAAAC,YAAS;AAMX,IAAM,qBAAqBC,KAC/B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,oBAAoB;AAAA,EACpC,uBAAuB,4BAA4B,oBAAoB;AAAA,EACvE,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,qCAAqC;AAsBjD,iBAA6D,IAAI;;;ACxCjE,SAAS,KAAAC,YAAS;;;ACFX,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,8BAA8B;AAAA,EACzC,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AACP;;;ADpBO,IAAM,gBAAgBC,KAC1B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,eAAe;AAAA,EAC/B,kBAAkBA,KAAE,OAAO;AAAA,EAC3B,kBAAkBA,KACf,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,UAAU;AAAA,EACV,UAAU,OAAO,SAAS;AAAA,EAC1B,oBAAoBA,KACjB,QAAQ,EACR,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,MAAM,OAAO,SAAS;AAAA,EACtB,OAAO,UAAU,SAAS;AAAA,EAC1B,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAGnC,oBAAoBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACxC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACpC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACpC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,MAAM,SAAS;AAAA,EAC5B,+BAA+BA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnD,8BAA8BA,KAC3B,KAAK,yBAAyB,EAC9B,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,uBAAuB,OAAO,SAAS;AAAA,EACvC,wBAAwBA,KACrB,KAAK;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAU,EACT,SAAS;AAAA,EACZ,kBAAkBA,KACf,KAAK,CAAC,yBAAyB,aAAa,CAAU,EACtD,SAAS,EACT,QAAQ,uBAAuB;AAAA,EAClC,aAAaA,KAAE,IAAI,EAAE,SAAS;AAAA,EAC9B,2BAA2BA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,sBAAsBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,mBAAmBA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,kBAAkBA,KACf,KAAK,CAAC,UAAU,sCAAsC,CAAU,EAChE,SAAS,EACT,QAAQ,QAAQ;AACrB,CAAC,EACA,SAAS,kEAAkE;AAkD9E,iBAAqD,IAAI;;;AE1HzD,SAAS,KAAAC,YAAS;AAQX,IAAM,sBAAsB,wBAChC,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,qBAAqB;AAAA,EACrC,wBAAwB,4BAA4B,qBAAqB;AAAA,EACzE,YAAYA,KAAE,QAAQ,qBAAqB,EAAE,QAAQ,qBAAqB;AAAA,EAC1E,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAC5C,mBAAmBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAChD,sBAAsBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAC/C,uBAAuBA,KAAE,OAAO,EAAE,OAAO,EAAE,YAAY;AAAA,EACvD,oBAAoBA,KAAE,OAAO,EAAE,OAAO,EAAE,YAAY;AACtD,CAAC,EACA;AAAA,EACC;AACF;AAeF,iBAAyE,IAAI;;;ACpC7E,SAAS,KAAAC,YAAS;AAIlB,IAAM,wBAAwB,OAC3B;AAAA,EACC,CAACC,WAAU,CAACA,OAAM,GAAGA,OAAM,GAAGA,OAAM,CAAC,EAAE,MAAM,OAAO,QAAQ;AAAA,EAC5D;AACF,EACC;AAAA,EACC;AACF;AAEK,IAAM,YAAYC,KACtB,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,WAAW;AAAA,EAC3B,cAAcA,KAAE,OAAO;AAAA,EACvB,MAAMA,KAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,0BAA0BA,KAAE,OAAO;AAAA,EACnC,wBAAwBA,KAAE,OAAO;AAAA,EACjC,8BAA8B,sBAAsB,SAAS;AAAA,EAC7D,4BAA4B,sBAAsB,SAAS;AAAA,EAC3D,qBAAqBA,KAClB,OAAO,EACP,IAAI,CAAC,EACL;AAAA,IACC;AAAA,EACF;AAAA,EACF,MAAMA,KACH,MAAM,MAAM,EACZ,IAAI,CAAC,EACL;AAAA,IACC,CAAC,SACC,KAAK;AAAA,MACH,CAACD,QAAO,MACN,CAACA,OAAM,GAAGA,OAAM,GAAGA,OAAM,CAAC,EAAE,MAAM,OAAO,QAAQ,MAChD,MAAM,KACL,KAAK;AAAA,QACHA,OAAM,IAAI,KAAK,IAAI,CAAC,EAAG;AAAA,QACvBA,OAAM,IAAI,KAAK,IAAI,CAAC,EAAG;AAAA,QACvBA,OAAM,IAAI,KAAK,IAAI,CAAC,EAAG;AAAA,MACzB,IAAI;AAAA,IACV;AAAA,IACF;AAAA,EACF,EACC;AAAA,IACC;AAAA,EACF;AACJ,CAAC,EACA;AAAA,EACC;AACF;AAwBF,iBAA6C,IAAI;;;AC3EjD,SAAS,KAAAE,YAAS;AAKX,IAAM,aAAaC,KAAE,KAAK,CAAC,YAAY,UAAU,YAAY,UAAU,CAAC;AAG/E,IAAM,aAAaA,KAChB,MAAM,CAACA,KAAE,OAAO,GAAGA,KAAE,OAAO,CAAC,CAAC,EAC9B,UAAU,CAAC,QAAQ;AAClB,MAAI,OAAO,QAAQ,UAAU;AAC3B,QAAI,IAAI,SAAS,GAAG,GAAG;AACrB,aAAO,WAAW,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI;AAAA,IACxC;AACA,WAAO,WAAW,GAAG;AAAA,EACvB;AACA,SAAO;AACT,CAAC,EACA;AAAA,EACCA,KACG,OAAO,EACP,IAAI,GAAG,iCAAiC,EACxC,IAAI,GAAG,wCAAwC;AACpD;AAEK,IAAM,+BAA+BA,KACzC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,cAAcA,KAAE,QAAQ,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACrD,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C;AAAA,EACA,cAAc,QAAQ,SAAS;AAAA,EAC/B,UAAU,SAAS,SAAS;AAC9B,CAAC,EACA,SAAS,4CAA4C;AAEjD,IAAM,+BAA+BA,KACzC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,cAAcA,KAAE,QAAQ,KAAK;AAAA,EAC7B,0BAA0BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,0BAA0BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,SAAS,QAAQ,SAAS;AAAA,EAC1B,WAAW,UAAU,SAAS;AAAA,EAC9B,sBAAsB,QAAQ,SAAS;AAAA,EACvC,YAAY,WAAW,SAAS;AAAA,EAChC,OAAO,SAAS,SAAS;AAAA,EACzB,YAAY,WAAW,SAAS;AAAA,EAChC,aAAa,GAAG,SAAS;AAAA,EACzB,WAAW,GAAG,SAAS;AAAA,EACvB,WAAW,GAAG,SAAS;AAAA,EACvB,aAAa,GAAG,SAAS;AAAA,EACzB,QAAQ,GAAG,SAAS;AAAA,EACpB,cAAc,QAAQ,SAAS;AAAA,EAC/B,UAAU,SAAS,SAAS;AAC9B,CAAC,EACA,SAAS,6CAA6C;AAMlD,IAAM,4BAA4BA,KACtC,MAAM,CAAC,8BAA8B,4BAA4B,CAAC,EAClE,SAAS,yCAAyC;AAsDrD,iBAGE,IAAI;AACN,iBAGE,IAAI;AACN,iBAA2E,IAAI;;;AC1I/E,SAAS,KAAAC,YAAS;AASlB,IAAMC,cAAaC,KAChB,MAAM,CAACA,KAAE,OAAO,GAAGA,KAAE,OAAO,CAAC,CAAC,EAC9B,UAAU,CAAC,QAAQ;AAClB,MAAI,OAAO,QAAQ,UAAU;AAC3B,QAAI,IAAI,SAAS,GAAG,GAAG;AACrB,aAAO,WAAW,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI;AAAA,IACxC;AACA,WAAO,WAAW,GAAG;AAAA,EACvB;AACA,SAAO;AACT,CAAC,EACA;AAAA,EACCA,KACG,OAAO,EACP,IAAI,GAAG,iCAAiC,EACxC,IAAI,GAAG,wCAAwC;AACpD;AAEK,IAAM,+BAA+BA,KACzC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,cAAcA,KAAE,QAAQ,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACrD,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C;AAAA,EACA,cAAc,QAAQ,SAAS;AAAA,EAC/B,UAAU,SAAS,SAAS;AAC9B,CAAC,EACA,SAAS,4CAA4C;AAEjD,IAAM,+BAA+BA,KACzC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,2BAA2B;AAAA,EAC3C,8BAA8B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,cAAcA,KAAE,QAAQ,KAAK;AAAA,EAC7B,0BAA0BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,0BAA0BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,SAAS,QAAQ,SAAS;AAAA,EAC1B,WAAW,UAAU,SAAS;AAAA,EAC9B,sBAAsB,QAAQ,SAAS;AAAA,EACvC,YAAY,WAAW,SAAS;AAAA,EAChC,OAAO,SAAS,SAAS;AAAA,EACzB,YAAYD,YAAW,SAAS;AAAA,EAChC,cAAc,QAAQ,SAAS;AAAA,EAC/B,UAAU,SAAS,SAAS;AAC9B,CAAC,EACA,SAAS,6CAA6C;AAMlD,IAAM,4BAA4BC,KACtC,MAAM,CAAC,8BAA8B,4BAA4B,CAAC,EAClE,SAAS,yCAAyC;AAiDrD,iBAGE,IAAI;AACN,iBAGE,IAAI;AACN,iBAA2E,IAAI;;;ACjI/E,SAAS,KAAAC,YAAS;;;ACAlB,SAAS,KAAAC,YAAS;AAKX,IAAM,2BAA2BA,KAAE;AAAA,EACxC,CAAC,gBAAgB,gBAAgB,OAAO,gBAAgB;AAC1D;AAKO,IAAM,4BAA4BA,KAAE;AAAA,EACzC,CAAC,kBACC,kBAAkB,YAClB,kBAAkB,OAClB,kBAAkB,OAClB,kBAAkB,OAClB,kBAAkB;AACtB;;;ADbO,IAAM,kBAAkBC,KAAE,MAAM;AAAA,EACrCA,KAAE,QAAQ,gBAAgB;AAAA,EAC1BA,KAAE,QAAQ,0BAA0B;AAAA,EACpCA,KAAE,QAAQ,0BAA0B;AAAA,EACpCA,KAAE,QAAQ,mBAAmB;AAC/B,CAAC;AAIM,IAAM,2BAA2BA,KACrC,OAAO;AAAA,EACN,QAAQA,KAAE,KAAK,CAAC,QAAQ,MAAM,CAAC,EAAE,SAAS;AAAA,EAC1C,QAAQA,KAAE,MAAM,CAACA,KAAE,OAAO,GAAGA,KAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACnD,QAAQA,KAAE,MAAM,CAACA,KAAE,OAAO,GAAGA,KAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACnD,OAAOA,KAAE,MAAM,CAACA,KAAE,OAAO,GAAGA,KAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AACpD,CAAC,EACA,SAAS,kDAAkD;AA+BvD,IAAM,wBAAwBA,KAClC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,uBAAuB;AAAA,EACvC,0BAA0B;AAAA,IACxB;AAAA,EACF;AAAA,EACA,MAAMA,KAAE,OAAO;AAAA,EACf;AAAA,EACA,eAAe,YAAY,SAAS;AAAA,EACpC,eAAe,GAAG,SAAS;AAAA,EAC3B,aAAa,GAAG,SAAS;AAAA,EACzB,eAAe,yBAAyB,SAAS;AAAA,EACjD,4BAA4BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAChD,4BAA4BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAChD,gBAAgBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACpC,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,KACZ,OAAO,EACP,OAAO,CAAC,gBAAgB,gBAAgB,CAAC,EACzC,SAAS;AAAA,EACZ,eAAe,yBAAyB,SAAS;AAAA,EACjD,eAAeA,KAAE,KAAK,CAAC,UAAU,UAAU,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC/D,yBAAyBA,KAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9D,iBAAiBA,KAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,uBAAuBA,KAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,sBAAsBA,KAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACvD,CAAC,EACA,YAAY,CAAC,YAAY,YAAY;AACpC,MAAI,WAAW,oBAAoB,kBAAkB;AACnD,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,eAAW,SAAS,gBAAgB;AAClC,UAAI,WAAW,KAAK,MAAM,QAAW;AACnC,gBAAQ,SAAS;AAAA,UACf,MAAMA,KAAE,aAAa;AAAA,UACrB,MAAM,CAAC,KAAK;AAAA,UACZ,SAAS,GAAG,KAAK;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,mBACJ,WAAW,+BAA+B;AAC5C,UAAM,mBACJ,WAAW,+BAA+B;AAC5C,QAAI,qBAAqB,kBAAkB;AACzC,cAAQ,SAAS;AAAA,QACf,MAAMA,KAAE,aAAa;AAAA,QACrB,MAAM,CAAC,4BAA4B;AAAA,QACnC,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,WAAW,oBAAoB,qBAAqB;AACtD,QAAI,WAAW,kBAAkB,QAAW;AAC1C,cAAQ,SAAS;AAAA,QACf,MAAMA,KAAE,aAAa;AAAA,QACrB,MAAM,CAAC,eAAe;AAAA,QACtB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,WAAW,0BAA0B,QAAW;AAClD,cAAQ,SAAS;AAAA,QACf,MAAMA,KAAE,aAAa;AAAA,QACrB,MAAM,CAAC,uBAAuB;AAAA,QAC9B,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,WAAW,yBAAyB,QAAW;AACjD,cAAQ,SAAS;AAAA,QACf,MAAMA,KAAE,aAAa;AAAA,QACrB,MAAM,CAAC,sBAAsB;AAAA,QAC7B,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QACE,WAAW,kBAAkB,YAC7B,WAAW,oBAAoB,QAC/B;AACA,cAAQ,SAAS;AAAA,QACf,MAAMA,KAAE,aAAa;AAAA,QACrB,MAAM,CAAC,iBAAiB;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,SACG,WAAW,kBAAkB,YAC5B,WAAW,kBAAkB,aAC/B,WAAW,4BAA4B,QACvC;AACA,cAAQ,SAAS;AAAA,QACf,MAAMA,KAAE,aAAa;AAAA,QACrB,MAAM,CAAC,yBAAyB;AAAA,QAChC,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC,EACA,SAAS,+CAA+C;AAK3D,iBAAqE,IAAI;;;AEnKzE,SAAS,KAAAC,YAAS;;;ACAlB,SAAS,KAAAC,YAAS;AAcX,IAAM,wCAAwCC,KAAE,OAAO;AAAA,EAC5D,+BAA+BA,KAAE,OAAO;AAAA,EACxC,aAAaA,KAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC1C,iBAAiBA,KAAE,OAAO;AAAA,EAC1B,gBAAgB;AAClB,CAAC;AAED,iBAGE,IAAI;;;ADCC,IAAM,qCAAqCC,KAC/C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,oCAAoC;AAAA,EACpD,uCAAuC;AAAA,IACrC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,eAAeA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAClC,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,iCAAiCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrD,eAAe;AAAA,EACf,eAAe;AAAA,EACf,aAAa;AAAA,EACb,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,wDAAwD;AASpE,iBAGE,IAAI;;;AExDN,SAAS,KAAAC,YAAS;AAyBX,IAAM,qCAAqCC,KAC/C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,oCAAoC;AAAA,EACpD,uCAAuC;AAAA,IACrC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,eAAeA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAClC,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,iCAAiCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACrD,eAAe;AAAA,EACf,eAAe;AAAA,EACf,aAAa;AAAA,EACb,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,SAAS,wDAAwD;AASpE,iBAGE,IAAI;;;ACxDN,SAAS,KAAAC,YAAS;AAKX,IAAM,oBAAoBC,KAC9B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mBAAmB;AAAA,EACnC,sBAAsB,4BAA4B,mBAAmB;AAAA,EACrE,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,WAAW,GAAG,SAAS;AAAA,EACvB,UAAU,GAAG,SAAS;AAAA,EACtB,eAAeA,KAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,qBAAqB,UAAU,SAAS;AAC1C,CAAC,EACA,SAAS,gDAAgD;AAgB5D,iBAA6D,IAAI;;;AC/BjE,SAAS,KAAAC,YAAS;AAIX,IAAM,2BAA2BC,KACrC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,0BAA0B;AAAA,EAC1C,6BAA6B;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,6BAA6BA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjD,4BAA4BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAChD,gCAAgCA,KAAE,OAAO,EAAE,SAAS;AAAA,EACpD,+BAA+BA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnD,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA;AAAA,EACC;AACF,EACC,YAAY,CAAC,MAAM,QAAQ;AAC1B,QAAM,kBACJ,KAAK,kCAAkC,KAAK;AAE9C,MAAI,iBAAiB;AACnB,UAAM,YACJ,CAAC,CAAC,KAAK,+BACP,CAAC,CAAC,KAAK;AACT,UAAM,WACJ,CAAC,CAAC,KAAK,8BACP,CAAC,CAAC,KAAK;AAET,QAAI,aAAa,UAAU;AACzB,UAAI,SAAS;AAAA,QACX,MAAMA,KAAE,aAAa;AAAA,QACrB,SACE;AAAA,MACJ,CAAC;AAAA,IACH,WAAW,WAAW;AACpB,UACE,CAAC,KAAK,+BACN,CAAC,KAAK,gCACN;AACA,YAAI,SAAS;AAAA,UACX,MAAMA,KAAE,aAAa;AAAA,UACrB,SACE;AAAA,QACJ,CAAC;AAAA,MACH;AAAA,IACF,WAAW,UAAU;AACnB,UACE,CAAC,KAAK,8BACN,CAAC,KAAK,+BACN;AACA,YAAI,SAAS;AAAA,UACX,MAAMA,KAAE,aAAa;AAAA,UACrB,SACE;AAAA,QACJ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,OAAO;AAEL,QACE,CAAC,CAAC,KAAK,gCAAgC,CAAC,CAAC,KAAK,4BAC9C;AACA,UAAI,SAAS;AAAA,QACX,MAAMA,KAAE,aAAa;AAAA,QACrB,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAyBH,iBAAyE,IAAI;;;ACpG7E,SAAS,KAAAC,YAAS;AAIX,IAAM,2BAA2BC,KACrC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,0BAA0B;AAAA,EAC1C,6BAA6B;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,yBAAyBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,wBAAwBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,eAAeA,KAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA;AAAA,EACC;AACF,EACC,YAAY,CAAC,MAAM,QAAQ;AAC1B,QAAM,kBAAkB,CAAC,CAAC,KAAK;AAC/B,QAAM,kBAAkB,CAAC,CAAC,KAAK;AAC/B,QAAM,iBAAiB,CAAC,CAAC,KAAK;AAC9B,QAAM,iBAAiB,CAAC,CAAC,KAAK;AAC9B,QAAM,WAAW,mBAAmB;AACpC,QAAM,UAAU,kBAAkB;AAElC,MAAI,YAAY,SAAS;AACvB,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,MAAI,UAAU;AACZ,QAAI,CAAC,mBAAmB,CAAC,iBAAiB;AACxC,UAAI,SAAS;AAAA,QACX,MAAMA,KAAE,aAAa;AAAA,QACrB,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AACA;AAAA,EACF;AAEA,MAAI,SAAS;AACX,QAAI,CAAC,kBAAkB,CAAC,gBAAgB;AACtC,UAAI,SAAS;AAAA,QACX,MAAMA,KAAE,aAAa;AAAA,QACrB,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AACA;AAAA,EACF;AAEA,MAAI,SAAS;AAAA,IACX,MAAMA,KAAE,aAAa;AAAA,IACrB,SACE;AAAA,EACJ,CAAC;AACH,CAAC;AAwBH,iBAAyE,IAAI;;;ACzF7E,SAAS,KAAAC,YAAS;AAQX,IAAM,sCAAsC,wBAChD,OAAO;AAAA,EACN,MAAMC,KAAE,QAAQ,qCAAqC;AAAA,EACrD,wCAAwC;AAAA,IACtC;AAAA,EACF;AAAA,EACA,YAAYA,KACT,QAAQ,qCAAqC,EAC7C,QAAQ,qCAAqC;AAAA,EAChD,0BAA0BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,eAAeA,KAAE,OAAO,EAAE,SAAS;AACrC,CAAC,EACA,SAAS,6DAA6D;AAoBzE,iBAGE,IAAI;;;AC3CN,SAAS,KAAAC,YAAS;AAQX,IAAM,4BAA4BC,KAAE,KAAK;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAkDD,IAAM,kCAAkCA,KAAE,OAAO;AAAA,EAC/C,MAAMA,KAAE,QAAQ,4BAA4B;AAAA,EAC5C,+BAA+B;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,kBAAkBA,KAAE,MAAMA,KAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAC3C,gBAAgB;AAClB,CAAC;AAEM,IAAM,6BAA6BA,KACvC,mBAAmB,kBAAkB;AAAA,EACpC,gCAAgC,OAAO;AAAA,IACrC,gBAAgBA,KAAE,QAAQ,YAAY;AAAA,IACtC,8BAA8BA,KAAE,OAAO;AAAA,EACzC,CAAC;AAAA,EACD,gCAAgC,OAAO;AAAA,IACrC,gBAAgBA,KAAE,QAAQ,aAAa;AAAA,IACvC,+BAA+BA,KAAE,OAAO;AAAA,EAC1C,CAAC;AAAA,EACD,gCAAgC,OAAO;AAAA,IACrC,gBAAgBA,KAAE,QAAQ,YAAY;AAAA,IACtC,8BAA8BA,KAAE,OAAO;AAAA,EACzC,CAAC;AAAA,EACD,gCAAgC,OAAO;AAAA,IACrC,gBAAgBA,KAAE,QAAQ,SAAS;AAAA,IACnC,eAAeA,KAAE,OAAO;AAAA,EAC1B,CAAC;AAAA,EACD,gCAAgC,OAAO;AAAA,IACrC,gBAAgBA,KAAE,QAAQ,SAAS;AAAA,IACnC,6BAA6BA,KAAE,OAAO;AAAA,EACxC,CAAC;AACH,CAAC,EACA,SAAS,iEAAiE;AAS7E;AAAA,EACE;AACF;;;AC7GA,SAAS,KAAAC,YAAS;AAmBX,IAAM,wCAAwCC,KAAE,OAAO;AAAA,EAC5D,MAAMA,KAAE,QAAQ,uCAAuC;AAAA,EACvD,0CAA0C;AAAA,IACxC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,6BAA6BA,KAAE,OAAO;AAAA,EACtC,SAASA,KAAE,OAAO;AAAA,EAClB,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AASD,iBAGE,IAAI;;;AC3CN,SAAS,KAAAC,YAAS;AAmBX,IAAM,wCAAwCC,KAAE,OAAO;AAAA,EAC5D,MAAMA,KAAE,QAAQ,uCAAuC;AAAA,EACvD,0CAA0C;AAAA,IACxC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,6BAA6BA,KAAE,OAAO;AAAA,EACtC,SAASA,KAAE,OAAO;AAAA,EAClB,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AASD,iBAGE,IAAI;;;AC3CN,SAAS,KAAAC,YAAS;AAyBX,IAAM,oCAAoCC,KAC9C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,6BAA6BA,KAAE,OAAO;AAAA,EACtC,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAChC,YAAY;AAAA,EACZ,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAClC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA;AAAA,EACC,CAAC,UAAU,MAAM,aAAa,WAAW,MAAM,eAAe;AAAA,EAC9D;AAAA,IACE,SAAS;AAAA,EACX;AACF;AASF,iBAGE,IAAI;;;AC1DN,SAAS,KAAAC,YAAS;AAyBX,IAAM,oCAAoCC,KAC9C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,6BAA6BA,KAAE,OAAO;AAAA,EACtC,cAAcA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAChC,YAAY;AAAA,EACZ,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAClC,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA;AAAA,EACC,CAAC,UAAU,MAAM,aAAa,WAAW,MAAM,eAAe;AAAA,EAC9D;AAAA,IACE,SAAS;AAAA,EACX;AACF;AASF,iBAGE,IAAI;;;AC1DN,SAAS,KAAAC,YAAS;;;ACAlB,SAAS,KAAAC,YAAS;AAGX,IAAM,4BAA4BC,KAAE,OAAO;AAAA,EAChD,IAAIA,KAAE,OAAO;AAAA,EACb,IAAIA,KAAE,OAAO;AACf,CAAC;AAOD,iBAGE,IAAI;;;ADQC,IAAM,oCAAoCC,KAC9C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,6BAA6BA,KAAE,OAAO;AAAA,EACtC,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAClC,kBAAkBA,KAAE,MAAM,yBAAyB;AAAA,EACnD,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA;AAAA,EACC,CAAC,UAAU,MAAM,eAAe,WAAW,MAAM,iBAAiB;AAAA,EAClE;AAAA,IACE,SAAS;AAAA,EACX;AACF;AASF,iBAGE,IAAI;;;AExDN,SAAS,KAAAC,YAAS;AAwBX,IAAM,oCAAoCC,KAC9C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mCAAmC;AAAA,EACnD,sCAAsC;AAAA,IACpC;AAAA,EACF;AAAA,EACA,0BAA0BA,KAAE,OAAO;AAAA,EACnC,uCACE,sCAAsC,SAAS;AAAA,EACjD,6BAA6BA,KAAE,OAAO;AAAA,EACtC,gBAAgBA,KAAE,MAAMA,KAAE,OAAO,CAAC;AAAA,EAClC,kBAAkBA,KAAE,MAAM,yBAAyB;AAAA,EACnD,MAAMA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,KAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA;AAAA,EACC,CAAC,UAAU,MAAM,eAAe,WAAW,MAAM,iBAAiB;AAAA,EAClE;AAAA,IACE,SAAS;AAAA,EACX;AACF;AASF,iBAGE,IAAI;;;ACxDN,SAAS,KAAAC,YAAS;AAIX,IAAM,oBAAoBC,KAC9B,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,mBAAmB;AAAA,EACnC,sBAAsB,4BAA4B,mBAAmB;AAAA,EACrE,qBAAqBA,KAAE,OAAO,EAAE,SAAS;AAAA,EACzC,gCAAgCA,KAAE,OAAO;AAAA,EACzC,oCAAoCA,KAAE,OAAO;AAAA,EAC7C,uBAAuBA,KAAE,OAAO;AAAA,EAChC,gCAAgCA,KAAE,OAAO;AAAA,EACzC,gCAAgCA,KAAE,OAAO;AAC3C,CAAC,EACA,SAAS,6DAA6D;AAmBzE,iBAA2D,IAAI;;;AChC/D,SAAS,KAAAC,YAAS;AAEX,IAAM,8BAA8BA,KACxC,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,6BAA6B;AAAA,EAC7C,gCAAgC;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,qBAAqBA,KAAE,OAAO;AAAA,EAC9B,8BAA8BA,KAAE,OAAOA,KAAE,OAAO,GAAGA,KAAE,OAAO,CAAC;AAAA,EAC7D,mBAAmBA,KAAE,OAAO;AAC9B,CAAC,EACA,SAAS,wDAAwD;AA6BpE;AAAA,EACE;AACF;;;AC7CA,SAAS,KAAAC,YAAS;AAIlB,IAAM,WAAW,CAAC,UAAmB,UAAU;AAExC,IAAM,gCAAgCC,KAC1C,OAAO;AAAA,EACN,MAAMA,KAAE,QAAQ,+BAA+B;AAAA,EAC/C,kCAAkC;AAAA,IAChC;AAAA,EACF;AAAA,EACA,uCAAuCA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3D,uCAAuCA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3D,6BAA6BA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjD,6BAA6BA,KAAE,OAAO,EAAE,SAAS;AAAA,EACjD,cAAcA,KAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAOA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,sBAAsBA,KAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,4BAA4BA,KAAE,OAAO,EAAE,SAAS;AAAA,EAChD,eAAeA,KAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,cAAcA,KAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC/C,CAAC,EACA;AAAA,EACC;AACF,EACC,YAAY,CAAC,MAAM,QAAQ;AAC1B,QAAM,oBAAoB;AAAA,IACxB,KAAK;AAAA,IACL,KAAK;AAAA,EACP,EAAE,OAAO,QAAQ,EAAE;AACnB,QAAM,oBAAoB;AAAA,IACxB,KAAK;AAAA,IACL,KAAK;AAAA,EACP,EAAE,OAAO,QAAQ,EAAE;AAEnB,MAAI,oBAAoB,sBAAsB,GAAG;AAC/C,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MAAI,oBAAoB,KAAK,KAAK,iBAAiB,QAAW;AAC5D,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MAAI,oBAAoB,KAAK,KAAK,kBAAkB,QAAW;AAC7D,QAAI,SAAS;AAAA,MACX,MAAMA,KAAE,aAAa;AAAA,MACrB,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACF,CAAC;AAiCH,iBAGE,IAAI;;;AC/FN,SAAS,KAAAC,YAAS;AAWX,IAAM,sBAAsBC,KAAE,MAAM;AAAA,EACrC;AAAA,EAKA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACN,CAAC;AAKM,IAAM,mBAAmB;AAuBhC,iBAGE,IAAI;AAaN,wBAYE,IAAI;","names":["parseAndConvertSiUnit","z","z","z","z","z","z","z","z","point","z","length","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","asset","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","length","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","finite_point","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","point","z","z","z","z","percentage","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z"]}
1
+ {"version":3,"sources":["../src/units/index.ts","../src/common/point.ts","../src/utils/expect-types-match.ts","../src/common/point3.ts","../src/common/size.ts","../src/common/shape.ts","../src/common/getZodPrefixedIdWithDefault.ts","../src/common/NinePointAnchor.ts","../src/common/PcbRenderLayer.ts","../src/common/asset.ts","../src/common/kicadFootprintMetadata.ts","../src/common/kicadSymbolMetadata.ts","../src/base_circuit_json_error.ts","../src/source/source_simple_capacitor.ts","../src/pcb/properties/supplier_name.ts","../src/source/base/source_component_base.ts","../src/source/source_simple_resistor.ts","../src/source/source_simple_diode.ts","../src/source/source_simple_fiducial.ts","../src/source/source_simple_led.ts","../src/source/source_simple_ground.ts","../src/source/source_simple_chip.ts","../src/source/source_printed_part.ts","../src/source/source_subassembly.ts","../src/source/source_motor.ts","../src/source/source_simple_power_source.ts","../src/source/source_simple_current_source.ts","../src/source/source_simple_fuse.ts","../src/source/source_simple_ammeter.ts","../src/source/properties/source_pin_attributes.ts","../src/source/any_source_component.ts","../src/source/source_simple_battery.ts","../src/source/source_simple_inductor.ts","../src/source/source_simple_push_button.ts","../src/source/source_simple_potentiometer.ts","../src/source/source_simple_crystal.ts","../src/source/source_simple_pin_header.ts","../src/source/source_simple_connector.ts","../src/source/source_simple_pinout.ts","../src/source/source_simple_resonator.ts","../src/source/source_simple_transistor.ts","../src/source/source_simple_test_point.ts","../src/source/source_simple_mosfet.ts","../src/source/source_simple_op_amp.ts","../src/source/source_simple_switch.ts","../src/source/source_project_metadata.ts","../src/source/source_missing_property_error.ts","../src/source/source_failed_to_create_component_error.ts","../src/source/source_invalid_component_property_error.ts","../src/source/source_trace_not_connected_error.ts","../src/source/source_property_ignored_warning.ts","../src/source/source_pin_missing_trace_warning.ts","../src/source/source_missing_manufacturer_part_number_warning.ts","../src/source/source_refdes_convention_warning.ts","../src/source/source_component_availability_warning.ts","../src/source/source_simple_voltage_probe.ts","../src/source/source_interconnect.ts","../src/source/source_i2c_misconfigured_error.ts","../src/source/source_component_misconfigured_error.ts","../src/source/source_simple_voltage_source.ts","../src/source/source_port.ts","../src/source/source_component_internal_connection.ts","../src/source/source_trace.ts","../src/source/source_group.ts","../src/source/source_net.ts","../src/source/source_board.ts","../src/source/source_ambiguous_port_reference.ts","../src/source/source_pcb_ground_plane.ts","../src/source/source_manually_placed_via.ts","../src/pcb/properties/layer_ref.ts","../src/source/source_unnamed_trace_warning.ts","../src/source/source_no_power_pin_defined_warning.ts","../src/source/source_no_ground_pin_defined_warning.ts","../src/source/source_component_pins_underspecified_warning.ts","../src/source/source_pin_must_be_connected_error.ts","../src/source/unknown_error_finding_part.ts","../src/source/source_part_not_found_warning.ts","../src/source/source_confusing_net_name_warning.ts","../src/source/source_bus.ts","../src/source/source_runtime_error.ts","../src/schematic/schematic_box.ts","../src/schematic/schematic_path.ts","../src/schematic/schematic_component.ts","../src/schematic/schematic_symbol.ts","../src/schematic/schematic_line.ts","../src/schematic/schematic_rect.ts","../src/schematic/schematic_circle.ts","../src/schematic/schematic_arc.ts","../src/schematic/schematic_trace.ts","../src/schematic/schematic_text.ts","../src/common/FivePointAnchor.ts","../src/schematic/schematic_text_part.ts","../src/schematic/schematic_port.ts","../src/schematic/schematic_net_label.ts","../src/schematic/schematic_error.ts","../src/schematic/schematic_layout_error.ts","../src/schematic/schematic_debug_object.ts","../src/schematic/schematic_voltage_probe.ts","../src/schematic/schematic_manual_edit_conflict_warning.ts","../src/schematic/schematic_component_overlap_warning.ts","../src/schematic/schematic_component_styling_warning.ts","../src/schematic/schematic_sheet_styling_warning.ts","../src/schematic/schematic_element_outside_sheet_warning.ts","../src/schematic/schematic_graphic.ts","../src/schematic/schematic_group.ts","../src/schematic/schematic_table.ts","../src/schematic/schematic_table_cell.ts","../src/schematic/schematic_sheet.ts","../src/schematic/schematic_missing_sheet_warning.ts","../src/pcb/properties/brep.ts","../src/pcb/properties/insertion_direction.ts","../src/pcb/properties/pcb_pin1_location.ts","../src/pcb/properties/pcb_route_hints.ts","../src/pcb/properties/route_hint_point.ts","../src/pcb/properties/manufacturing_drc_properties.ts","../src/pcb/pcb_component.ts","../src/pcb/pcb_debug_object.ts","../src/pcb/pcb_hole.ts","../src/pcb/pcb_plated_hole.ts","../src/pcb/pcb_port.ts","../src/pcb/pcb_smtpad.ts","../src/pcb/pcb_solder_paste.ts","../src/pcb/pcb_soldermask_opening.ts","../src/pcb/pcb_text.ts","../src/pcb/pcb_trace.ts","../src/pcb/pcb_trace_warning.ts","../src/pcb/pcb_trace_too_long_error.ts","../src/pcb/pcb_bus_length_skew_error.ts","../src/pcb/pcb_trace_too_long_warning.ts","../src/pcb/pcb_trace_too_many_vias_warning.ts","../src/pcb/pcb_bus_routing_constraint_error.ts","../src/pcb/pcb_bus_routing_constraint_warning.ts","../src/pcb/pcb_trace_error.ts","../src/pcb/pcb_trace_missing_error.ts","../src/pcb/pcb_port_not_matched_error.ts","../src/pcb/pcb_port_not_connected_error.ts","../src/pcb/pcb_net.ts","../src/pcb/pcb_via.ts","../src/pcb/pcb_board.ts","../src/pcb/pcb_bend.ts","../src/pcb/pcb_stiffener.ts","../src/pcb/pcb_panel.ts","../src/pcb/pcb_placement_error.ts","../src/pcb/pcb_packing_error.ts","../src/pcb/pcb_panelization_placement_error.ts","../src/pcb/pcb_trace_hint.ts","../src/pcb/pcb_silkscreen_line.ts","../src/pcb/pcb_silkscreen_path.ts","../src/pcb/pcb_silkscreen_text.ts","../src/pcb/pcb_copper_text.ts","../src/pcb/pcb_silkscreen_rect.ts","../src/pcb/pcb_silkscreen_circle.ts","../src/pcb/pcb_silkscreen_oval.ts","../src/pcb/pcb_silkscreen_graphic.ts","../src/pcb/pcb_silkscreen_pill.ts","../src/pcb/pcb_fabrication_note_text.ts","../src/pcb/pcb_fabrication_note_path.ts","../src/pcb/pcb_fabrication_note_rect.ts","../src/pcb/pcb_fabrication_note_dimension.ts","../src/pcb/pcb_note_text.ts","../src/pcb/pcb_note_rect.ts","../src/pcb/pcb_note_path.ts","../src/pcb/pcb_note_line.ts","../src/pcb/pcb_note_dimension.ts","../src/pcb/pcb_footprint_overlap_error.ts","../src/pcb/pcb_courtyard_overlap_error.ts","../src/pcb/pcb_keepout.ts","../src/pcb/pcb_keepout_overlap_warning.ts","../src/pcb/pcb_cutout.ts","../src/pcb/pcb_missing_footprint_error.ts","../src/pcb/external_footprint_load_error.ts","../src/pcb/circuit_json_footprint_load_error.ts","../src/pcb/pcb_group.ts","../src/pcb/pcb_autorouting_error.ts","../src/pcb/pcb_preflight_routing_error.ts","../src/pcb/pcb_manual_edit_conflict_warning.ts","../src/pcb/pcb_connector_not_in_accessible_orientation_warning.ts","../src/pcb/pcb_component_missing_courtyard_warning.ts","../src/pcb/supplier_footprint_mismatch_warning.ts","../src/pcb/pcb_fabricator_extra_charge_warning.ts","../src/pcb/pcb_breakout_point.ts","../src/pcb/pcb_ground_plane.ts","../src/pcb/pcb_ground_plane_region.ts","../src/pcb/pcb_thermal_spoke.ts","../src/pcb/pcb_copper_pour.ts","../src/pcb/pcb_component_outside_board_error.ts","../src/pcb/pcb_component_not_on_board_edge_error.ts","../src/pcb/pcb_component_invalid_layer_error.ts","../src/pcb/pcb_via_clearance_error.ts","../src/pcb/pcb_via_trace_clearance_error.ts","../src/pcb/pcb_pad_pad_clearance_error.ts","../src/pcb/pcb_pad_trace_clearance_error.ts","../src/pcb/pcb_courtyard_rect.ts","../src/pcb/pcb_courtyard_outline.ts","../src/pcb/pcb_courtyard_polygon.ts","../src/pcb/pcb_courtyard_circle.ts","../src/pcb/pcb_courtyard_pill.ts","../src/cad/cad_component.ts","../src/cad/cad_model_conventions.ts","../src/cad/cad_collision_error.ts","../src/cad/cad_cable.ts","../src/simulation/simulation_voltage_source.ts","../src/simulation/simulation_current_source.ts","../src/simulation/simulation_experiment.ts","../src/simulation/simulation_units.ts","../src/simulation/simulation_transient_voltage_graph.ts","../src/simulation/simulation_parameter_sweep_coordinate.ts","../src/simulation/simulation_transient_current_graph.ts","../src/simulation/simulation_switch.ts","../src/simulation/simulation_voltage_probe.ts","../src/simulation/simulation_current_probe.ts","../src/simulation/simulation_unknown_experiment_error.ts","../src/simulation/simulation_parameter_sweep.ts","../src/simulation/simulation_dc_operating_point_voltage.ts","../src/simulation/simulation_dc_operating_point_current.ts","../src/simulation/simulation_dc_sweep_voltage_graph.ts","../src/simulation/simulation_dc_sweep_current_graph.ts","../src/simulation/simulation_ac_sweep_voltage_graph.ts","../src/simulation/simulation_complex_sample.ts","../src/simulation/simulation_ac_sweep_current_graph.ts","../src/simulation/simulation_op_amp.ts","../src/simulation/simulation_spice_subcircuit.ts","../src/simulation/simulation_oscilloscope_trace.ts","../src/any_circuit_element.ts"],"sourcesContent":["import { parseAndConvertSiUnit } from \"format-si-unit\"\nimport { z } from \"zod\"\nexport {\n parseAndConvertSiUnit,\n type BaseTscircuitUnit,\n} from \"format-si-unit\"\n\n// // Currently, removing uncommon SI Prefixes for type simplicity.\n// export type SIPrefix =\n// // | \"y\"\n// // | \"yocto\"\n// // | \"z\"\n// // | \"zepto\"\n// // | \"atto\"\n// // | \"a\"\n// | \"femto\"\n// | \"f\"\n// | \"u\"\n// | \"micro\"\n// // | \"d\"\n// // | \"deci\"\n// | \"c\"\n// | \"centi\"\n// | \"m\"\n// | \"milli\"\n// | \"k\"\n// | \"kilo\"\n// | \"M\"\n// | \"mega\"\n// // | \"G\"\n// // | \"T\"\n// // | \"P\"\n// // | \"E\"\n// // | \"Z\"\n// // | \"Y\"\n\n// export type UnitAbbreviations = {\n// farad: \"F\"\n// ohm: \"Ω\"\n// henry: \"H\"\n// meter: \"m\"\n// volt: \"V\"\n// inch: \"in\"\n// foot: \"ft\"\n// }\n\n// export type Unit = keyof UnitAbbreviations\n// export type NumberWithUnit<T extends Unit> =\n// | `${number}${T | UnitAbbreviations[T]}`\n// | `${number} ${T | UnitAbbreviations[T]}`\n// | `${number}${SIPrefix}${T | UnitAbbreviations[T]}`\n// | `${number} ${SIPrefix}${T | UnitAbbreviations[T]}`\n// export type NumberWithAnyUnit =\n// | `${number}${UnitOrAbbreviation}`\n// | `${number} ${UnitOrAbbreviation}`\n// | `${number}${SIPrefix}${UnitOrAbbreviation}`\n// | `${number} ${SIPrefix}${UnitOrAbbreviation}`\n\n// TODO lots of validation to make sure the unit is valid etc.\nexport const resistance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"Ω\").value!)\n\nexport const capacitance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"F\").value!)\n .transform((value) => {\n return Number.parseFloat(value.toPrecision(12)) // Round to 12 significant digits\n })\n\nexport const inductance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"H\").value!)\n\nexport const voltage = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"V\").value!)\n\nexport const length = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const frequency = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"Hz\").value!)\n\n/**\n * Length in meters\n */\nexport type Length = number\nexport type Distance = number\n\nexport const distance = length\n\nexport const current = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v, \"A\").value!)\n\nexport const duration_ms = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const time = duration_ms\n\nexport const ms = duration_ms\n\nexport const timestamp = z.string().datetime()\n\n/**\n * Rotation is always converted to degrees\n */\nexport const rotation = z\n .string()\n .or(z.number())\n .transform((arg): number => {\n if (typeof arg === \"number\") return arg\n if (arg.endsWith(\"deg\")) {\n return Number.parseFloat(arg.split(\"deg\")[0]!)\n }\n if (arg.endsWith(\"rad\")) {\n return (Number.parseFloat(arg.split(\"rad\")[0]!) * 180) / Math.PI\n }\n return Number.parseFloat(arg)\n })\n\nexport const battery_capacity = z\n .number()\n .or(z.string().endsWith(\"mAh\"))\n .transform((v) => {\n if (typeof v === \"string\") {\n const valString = v.replace(\"mAh\", \"\")\n const num = Number.parseFloat(valString)\n if (Number.isNaN(num)) {\n throw new Error(\"Invalid capacity\")\n }\n return num\n }\n return v\n })\n .describe(\"Battery capacity in mAh\")\n\nexport type InputRotation = number | string\nexport type Rotation = number\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const point = z.object({\n x: distance,\n y: distance,\n})\n\nexport const position = point\n\nexport type InputPoint = z.input<typeof point>\nexport type InputPosition = z.input<typeof position>\ntype InferredPoint = z.infer<typeof point>\ntype InferredPosition = z.infer<typeof position>\n\nexport interface Point {\n x: number\n y: number\n}\n\nexport interface Position {\n x: number\n y: number\n}\n\nexpectTypesMatch<Point, InferredPoint>(true)\nexpectTypesMatch<Position, InferredPosition>(true)\n","import type { TypeEqual } from \"ts-expect\"\n\ntype IsNever<T> = [T] extends [never] ? true : false\n\ntype GetMismatchedProps<T1, T2> = {\n [K in keyof T1 & keyof T2]: T1[K] extends T2[K]\n ? T2[K] extends T1[K]\n ? never\n : K\n : K\n}[keyof T1 & keyof T2]\n\nexport const expectTypesMatch = <\n const T1,\n const T2,\n T3 = Exclude<keyof T1, keyof T2>,\n T4 = Exclude<keyof T2, keyof T1>,\n T5 = GetMismatchedProps<T1, T2>,\n>(\n shouldBe: IsNever<T3> extends true\n ? IsNever<T4> extends true\n ? IsNever<T5> extends true\n ? TypeEqual<T1, T2>\n : `mismatched prop types: ${T5 extends string ? T5 : \"\"}`\n : `extra props ${T4 extends string ? T4 : \"\"}`\n : `missing props ${T3 extends string ? T3 : \"\"}`,\n): void => {}\n\n// ------ TESTS -------\n\nexpectTypesMatch<\n {\n a: number\n },\n {\n a: number\n b: number\n }\n>(\"extra props b\")\n\nexpectTypesMatch<\n {\n a: number\n b: number\n },\n {\n a: number\n }\n>(\"missing props b\")\n\nexpectTypesMatch<\n {\n a: number\n },\n {\n a: number\n }\n>(true)\n\nexpectTypesMatch<\n {\n a: number\n },\n {\n a: string\n }\n>(\"mismatched prop types: a\")\n\n// ------ String Union Matching -------\n\nexport type ExpectStringUnionsMatch<\n T1 extends string,\n T2 extends string,\n Diff1 = Exclude<T1, T2>,\n Diff2 = Exclude<T2, T1>,\n> = IsNever<Diff1> extends true\n ? IsNever<Diff2> extends true\n ? true // Unions are identical\n : `T2 has extra: \"${Diff2 extends string ? Diff2 : \"\"}\"` // T2 has elements not in T1\n : IsNever<Diff2> extends true\n ? `T1 has extra: \"${Diff1 extends string ? Diff1 : \"\"}\"` // T1 has elements not in T2\n : `T1 has extra: \"${Diff1 extends string\n ? Diff1\n : \"\"}\", T2 has extra: \"${Diff2 extends string ? Diff2 : \"\"}\"` // Both have differences\n\nexport const expectStringUnionsMatch = <\n const T1 extends string,\n const T2 extends string,\n ShouldBeTrue = ExpectStringUnionsMatch<T1, T2>,\n>(\n shouldBe: ShouldBeTrue,\n): void => {}\n\n// ------ TESTS -------\n\ntype TestUnion1 = \"a\" | \"b\" | \"c\"\ntype TestUnion2 = \"a\" | \"b\" | \"c\"\ntype TestUnion3 = \"a\" | \"b\" | \"d\"\ntype TestUnion4 = \"a\" | \"b\"\n\nexpectStringUnionsMatch<TestUnion1, TestUnion2>(true)\nexpectStringUnionsMatch<TestUnion1, TestUnion3>(\n 'T1 has extra: \"c\", T2 has extra: \"d\"',\n)\nexpectStringUnionsMatch<TestUnion1, TestUnion4>('T1 has extra: \"c\"')\nexpectStringUnionsMatch<TestUnion4, TestUnion1>('T2 has extra: \"c\"')\nexpectStringUnionsMatch<TestUnion3, TestUnion1>(\n 'T1 has extra: \"d\", T2 has extra: \"c\"',\n)\n\n// Example of using @ts-expect-error for expected failures\n// @ts-expect-error Type '\"T2 has extra: \\\"d\\\"\"' is not assignable to type 'true'.\nexpectStringUnionsMatch<TestUnion1, TestUnion3>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const point3 = z.object({\n x: distance,\n y: distance,\n z: distance,\n})\n\nexport const position3 = point3\n\ntype InferredPoint3 = z.infer<typeof point3>\n\nexport interface Point3 {\n x: number\n y: number\n z: number\n}\n\nexpectTypesMatch<Point3, InferredPoint3>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const size = z.object({\n width: z.number(),\n height: z.number(),\n})\n\nexport type SizeInput = z.input<typeof size>\ntype InferredSize = z.infer<typeof size>\n\nexport interface Size {\n width: number\n height: number\n}\n\nexpectTypesMatch<Size, InferredSize>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"./point\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst finite_distance = distance.pipe(z.number().finite())\nconst positive_distance = distance.pipe(z.number().finite().positive())\n\nexport const circle_shape = z\n .object({\n shape: z.literal(\"circle\"),\n x: finite_distance,\n y: finite_distance,\n radius: positive_distance,\n })\n .strict()\n\nexport const rect_shape = z\n .object({\n shape: z.literal(\"rect\"),\n x: finite_distance,\n y: finite_distance,\n width: positive_distance,\n height: positive_distance,\n })\n .strict()\n\nexport const rotated_rect_shape = rect_shape.extend({\n shape: z.literal(\"rotated_rect\"),\n ccw_rotation: rotation.pipe(z.number().finite()),\n})\n\nexport const polygon_shape = z\n .object({\n shape: z.literal(\"polygon\"),\n points: z\n .array(point.extend({ x: finite_distance, y: finite_distance }))\n .min(3)\n .refine((points) => {\n const twice_area = points.reduce((sum, point, index) => {\n const next = points[(index + 1) % points.length]!\n return sum + point.x * next.y - next.x * point.y\n }, 0)\n return Number.isFinite(twice_area) && twice_area !== 0\n }, \"Polygon boundary must enclose a nonzero area\"),\n })\n .strict()\n\n/** A circle centered at (x, y), with coordinates and radius in mm. */\nexport interface CircleShape {\n shape: \"circle\"\n x: Distance\n y: Distance\n radius: Distance\n}\n\n/** A rectangle centered at (x, y), with coordinates and dimensions in mm. */\nexport interface RectShape {\n shape: \"rect\"\n x: Distance\n y: Distance\n width: Distance\n height: Distance\n}\n\n/** A centered rectangle rotated counterclockwise in degrees. */\nexport interface RotatedRectShape extends Omit<RectShape, \"shape\"> {\n shape: \"rotated_rect\"\n ccw_rotation: Rotation\n}\n\n/** An implicitly closed boundary in mm enclosing nonzero area. */\nexport interface PolygonShape {\n shape: \"polygon\"\n points: Point[]\n}\n\nexpectTypesMatch<CircleShape, z.output<typeof circle_shape>>(true)\nexpectTypesMatch<RectShape, z.output<typeof rect_shape>>(true)\nexpectTypesMatch<RotatedRectShape, z.output<typeof rotated_rect_shape>>(true)\nexpectTypesMatch<PolygonShape, z.output<typeof polygon_shape>>(true)\n\n/**\n * Geometry only; the containing element defines the coordinate frame and meaning.\n * Elements can select a subset and extend each shape with their own record fields.\n */\nexport const standard_shape = z.discriminatedUnion(\"shape\", [\n circle_shape,\n rect_shape,\n rotated_rect_shape,\n polygon_shape,\n])\n\nexport type StandardShapeInput = z.input<typeof standard_shape>\nexport type StandardShape =\n | CircleShape\n | RectShape\n | RotatedRectShape\n | PolygonShape\n\nexpectTypesMatch<StandardShape, z.output<typeof standard_shape>>(true)\n","import { z } from \"zod\"\n\n// Generates a random string ID of specified length using alphanumeric characters\nconst randomId = (length: number): string => {\n const chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"\n return Array.from(\n { length },\n () => chars[Math.floor(Math.random() * chars.length)],\n ).join(\"\")\n}\n/**\n * Use this for primary keys for any circuit element\n */\nexport const getZodPrefixedIdWithDefault = (prefix: string) => {\n return z\n .string()\n .optional()\n .default(() => `${prefix}_${randomId(10)}`)\n}\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport type NinePointAnchor =\n | \"top_left\"\n | \"top_center\"\n | \"top_right\"\n | \"center_left\"\n | \"center\"\n | \"center_right\"\n | \"bottom_left\"\n | \"bottom_center\"\n | \"bottom_right\"\n\nexport const ninePointAnchor = z.enum([\n \"top_left\",\n \"top_center\",\n \"top_right\",\n \"center_left\",\n \"center\",\n \"center_right\",\n \"bottom_left\",\n \"bottom_center\",\n \"bottom_right\",\n])\n\ntype InferredNinePointAnchor = z.infer<typeof ninePointAnchor>\n\nexpectTypesMatch<NinePointAnchor, InferredNinePointAnchor>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport type PcbRenderLayer =\n | \"top_silkscreen\"\n | \"bottom_silkscreen\"\n | \"top_copper\"\n | \"bottom_copper\"\n | \"top_soldermask\"\n | \"bottom_soldermask\"\n | \"top_fabrication_note\"\n | \"bottom_fabrication_note\"\n | \"top_user_note\"\n | \"bottom_user_note\"\n | \"top_courtyard\"\n | \"bottom_courtyard\"\n | \"inner1_copper\"\n | \"inner2_copper\"\n | \"inner3_copper\"\n | \"inner4_copper\"\n | \"inner5_copper\"\n | \"inner6_copper\"\n | \"inner7_copper\"\n | \"inner8_copper\"\n | \"edge_cuts\"\n | \"drill\"\n\nexport const pcbRenderLayer = z.enum([\n \"top_silkscreen\",\n \"bottom_silkscreen\",\n \"top_copper\",\n \"bottom_copper\",\n \"top_soldermask\",\n \"bottom_soldermask\",\n \"top_fabrication_note\",\n \"bottom_fabrication_note\",\n \"top_user_note\",\n \"bottom_user_note\",\n \"top_courtyard\",\n \"bottom_courtyard\",\n \"inner1_copper\",\n \"inner2_copper\",\n \"inner3_copper\",\n \"inner4_copper\",\n \"inner5_copper\",\n \"inner6_copper\",\n \"inner7_copper\",\n \"inner8_copper\",\n \"edge_cuts\",\n \"drill\",\n])\n\ntype InferredPcbRenderLayer = z.infer<typeof pcbRenderLayer>\n\nexpectTypesMatch<PcbRenderLayer, InferredPcbRenderLayer>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const asset = z.object({\n project_relative_path: z.string(),\n url: z.string(),\n mimetype: z.string(),\n})\n\nexport type AssetInput = z.input<typeof asset>\nexport type Asset = z.infer<typeof asset>\n\nexpectTypesMatch<Asset, AssetInput>(true)\n","import { z } from \"zod\"\nimport { point } from \"./point\"\nimport { point3 } from \"./point3\"\nimport { distance, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface KicadAt {\n x: number\n y: number\n rotation?: number\n}\n\nexport const kicadAt = point.extend({\n rotation: rotation.optional(),\n})\n\ntype InferredKicadAt = z.infer<typeof kicadAt>\nexpectTypesMatch<KicadAt, InferredKicadAt>(true)\n\nexport interface KicadFont {\n size?: { x: number; y: number }\n thickness?: number\n}\n\nexport const kicadFont = z.object({\n size: point.optional(),\n thickness: distance.optional(),\n})\n\ntype InferredKicadFont = z.infer<typeof kicadFont>\nexpectTypesMatch<KicadFont, InferredKicadFont>(true)\n\nexport interface KicadEffects {\n font?: KicadFont\n}\n\nexport const kicadEffects = z.object({\n font: kicadFont.optional(),\n})\n\ntype InferredKicadEffects = z.infer<typeof kicadEffects>\nexpectTypesMatch<KicadEffects, InferredKicadEffects>(true)\n\nexport interface KicadProperty {\n value: string\n at?: KicadAt\n layer?: string\n uuid?: string\n hide?: boolean\n effects?: KicadEffects\n}\n\nexport const kicadProperty = z.object({\n value: z.string(),\n at: kicadAt.optional(),\n layer: z.string().optional(),\n uuid: z.string().optional(),\n hide: z.boolean().optional(),\n effects: kicadEffects.optional(),\n})\n\ntype InferredKicadProperty = z.infer<typeof kicadProperty>\nexpectTypesMatch<KicadProperty, InferredKicadProperty>(true)\n\nexport interface KicadFootprintProperties {\n Reference?: KicadProperty\n Value?: KicadProperty\n Datasheet?: KicadProperty\n Description?: KicadProperty\n}\n\nexport const kicadFootprintProperties = z.object({\n Reference: kicadProperty.optional(),\n Value: kicadProperty.optional(),\n Datasheet: kicadProperty.optional(),\n Description: kicadProperty.optional(),\n})\n\ntype InferredKicadFootprintProperties = z.infer<typeof kicadFootprintProperties>\nexpectTypesMatch<KicadFootprintProperties, InferredKicadFootprintProperties>(\n true,\n)\n\nexport interface KicadFootprintAttributes {\n through_hole?: boolean\n smd?: boolean\n exclude_from_pos_files?: boolean\n exclude_from_bom?: boolean\n}\n\nexport const kicadFootprintAttributes = z.object({\n through_hole: z.boolean().optional(),\n smd: z.boolean().optional(),\n exclude_from_pos_files: z.boolean().optional(),\n exclude_from_bom: z.boolean().optional(),\n})\n\ntype InferredKicadFootprintAttributes = z.infer<typeof kicadFootprintAttributes>\nexpectTypesMatch<KicadFootprintAttributes, InferredKicadFootprintAttributes>(\n true,\n)\n\nexport interface KicadFootprintPad {\n name: string\n type: string\n shape?: string\n at?: KicadAt\n size?: { x: number; y: number }\n drill?: number\n layers?: string[]\n removeUnusedLayers?: boolean\n uuid?: string\n}\n\nexport const kicadFootprintPad = z.object({\n name: z.string(),\n type: z.string(),\n shape: z.string().optional(),\n at: kicadAt.optional(),\n size: point.optional(),\n drill: distance.optional(),\n layers: z.array(z.string()).optional(),\n removeUnusedLayers: z.boolean().optional(),\n uuid: z.string().optional(),\n})\n\ntype InferredKicadFootprintPad = z.infer<typeof kicadFootprintPad>\nexpectTypesMatch<KicadFootprintPad, InferredKicadFootprintPad>(true)\n\nexport interface KicadFootprintModel {\n path: string\n offset?: { x: number; y: number; z: number }\n scale?: { x: number; y: number; z: number }\n rotate?: { x: number; y: number; z: number }\n}\n\nexport const kicadFootprintModel = z.object({\n path: z.string(),\n offset: point3.optional(),\n scale: point3.optional(),\n rotate: point3.optional(),\n})\n\ntype InferredKicadFootprintModel = z.infer<typeof kicadFootprintModel>\nexpectTypesMatch<KicadFootprintModel, InferredKicadFootprintModel>(true)\n\nexport interface KicadFootprintMetadata {\n footprintName?: string\n version?: number | string\n generator?: string\n generatorVersion?: number | string\n layer?: string\n properties?: KicadFootprintProperties\n attributes?: KicadFootprintAttributes\n pads?: KicadFootprintPad[]\n embeddedFonts?: boolean\n model?: KicadFootprintModel\n}\n\nexport const kicadFootprintMetadata = z.object({\n footprintName: z.string().optional(),\n version: z.union([z.number(), z.string()]).optional(),\n generator: z.string().optional(),\n generatorVersion: z.union([z.number(), z.string()]).optional(),\n layer: z.string().optional(),\n properties: kicadFootprintProperties.optional(),\n attributes: kicadFootprintAttributes.optional(),\n pads: z.array(kicadFootprintPad).optional(),\n embeddedFonts: z.boolean().optional(),\n model: kicadFootprintModel.optional(),\n})\n\ntype InferredKicadFootprintMetadata = z.infer<typeof kicadFootprintMetadata>\nexpectTypesMatch<KicadFootprintMetadata, InferredKicadFootprintMetadata>(true)\n","import { z } from \"zod\"\nimport { distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n kicadAt,\n kicadFont,\n type KicadAt,\n type KicadFont,\n} from \"./kicadFootprintMetadata\"\n\nexport interface KicadSymbolPinNumbers {\n hide?: boolean\n}\n\nexport const kicadSymbolPinNumbers = z.object({\n hide: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolPinNumbers = z.infer<typeof kicadSymbolPinNumbers>\nexpectTypesMatch<KicadSymbolPinNumbers, InferredKicadSymbolPinNumbers>(true)\n\nexport interface KicadSymbolPinNames {\n offset?: number\n hide?: boolean\n}\n\nexport const kicadSymbolPinNames = z.object({\n offset: distance.optional(),\n hide: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolPinNames = z.infer<typeof kicadSymbolPinNames>\nexpectTypesMatch<KicadSymbolPinNames, InferredKicadSymbolPinNames>(true)\n\nexport interface KicadSymbolEffects {\n font?: KicadFont\n justify?: string | string[]\n hide?: boolean\n}\n\nexport const kicadSymbolEffects = z.object({\n font: kicadFont.optional(),\n justify: z.union([z.string(), z.array(z.string())]).optional(),\n hide: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolEffects = z.infer<typeof kicadSymbolEffects>\nexpectTypesMatch<KicadSymbolEffects, InferredKicadSymbolEffects>(true)\n\nexport interface KicadSymbolProperty {\n value: string\n id?: number | string\n at?: KicadAt\n effects?: KicadSymbolEffects\n}\n\nexport const kicadSymbolProperty = z.object({\n value: z.string(),\n id: z.union([z.number(), z.string()]).optional(),\n at: kicadAt.optional(),\n effects: kicadSymbolEffects.optional(),\n})\n\ntype InferredKicadSymbolProperty = z.infer<typeof kicadSymbolProperty>\nexpectTypesMatch<KicadSymbolProperty, InferredKicadSymbolProperty>(true)\n\nexport interface KicadSymbolProperties {\n Reference?: KicadSymbolProperty\n Value?: KicadSymbolProperty\n Footprint?: KicadSymbolProperty\n Datasheet?: KicadSymbolProperty\n Description?: KicadSymbolProperty\n ki_keywords?: KicadSymbolProperty\n ki_fp_filters?: KicadSymbolProperty\n}\n\nexport const kicadSymbolProperties = z.object({\n Reference: kicadSymbolProperty.optional(),\n Value: kicadSymbolProperty.optional(),\n Footprint: kicadSymbolProperty.optional(),\n Datasheet: kicadSymbolProperty.optional(),\n Description: kicadSymbolProperty.optional(),\n ki_keywords: kicadSymbolProperty.optional(),\n ki_fp_filters: kicadSymbolProperty.optional(),\n})\n\ntype InferredKicadSymbolProperties = z.infer<typeof kicadSymbolProperties>\nexpectTypesMatch<KicadSymbolProperties, InferredKicadSymbolProperties>(true)\n\nexport interface KicadSymbolMetadata {\n symbolName?: string\n extends?: string\n pinNumbers?: KicadSymbolPinNumbers\n pinNames?: KicadSymbolPinNames\n excludeFromSim?: boolean\n inBom?: boolean\n onBoard?: boolean\n properties?: KicadSymbolProperties\n embeddedFonts?: boolean\n}\n\nexport const kicadSymbolMetadata = z.object({\n symbolName: z.string().optional(),\n extends: z.string().optional(),\n pinNumbers: kicadSymbolPinNumbers.optional(),\n pinNames: kicadSymbolPinNames.optional(),\n excludeFromSim: z.boolean().optional(),\n inBom: z.boolean().optional(),\n onBoard: z.boolean().optional(),\n properties: kicadSymbolProperties.optional(),\n embeddedFonts: z.boolean().optional(),\n})\n\ntype InferredKicadSymbolMetadata = z.infer<typeof kicadSymbolMetadata>\nexpectTypesMatch<KicadSymbolMetadata, InferredKicadSymbolMetadata>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const base_circuit_json_error = z.object({\n error_type: z.string(),\n message: z.string(),\n is_fatal: z.boolean().optional(),\n})\n\nexport type BaseCircuitJsonErrorInput = z.input<typeof base_circuit_json_error>\ntype InferredBaseCircuitJsonError = z.infer<typeof base_circuit_json_error>\n\nexport interface BaseCircuitJsonError {\n error_type: string\n message: string\n is_fatal?: boolean\n}\n\nexpectTypesMatch<BaseCircuitJsonError, InferredBaseCircuitJsonError>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { capacitance, distance, voltage } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_capacitor = source_component_base.extend({\n ftype: z.literal(\"simple_capacitor\"),\n capacitance,\n max_voltage_rating: voltage.optional(),\n display_capacitance: z.string().optional(),\n max_decoupling_trace_length: distance.optional(),\n})\n\nexport type SourceSimpleCapacitorInput = z.input<typeof source_simple_capacitor>\ntype InferredSourceSimpleCapacitor = z.infer<typeof source_simple_capacitor>\n\n/**\n * Defines a simple capacitor component\n */\nexport interface SourceSimpleCapacitor extends SourceComponentBase {\n ftype: \"simple_capacitor\"\n capacitance: number\n max_voltage_rating?: number\n display_capacitance?: string\n max_decoupling_trace_length?: number\n}\n\nexpectTypesMatch<SourceSimpleCapacitor, InferredSourceSimpleCapacitor>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const supplier_name = z.enum([\n \"jlcpcb\",\n \"macrofab\",\n \"pcbway\",\n \"digikey\",\n \"mouser\",\n \"lcsc\",\n])\n\ntype InferredSupplierName = z.infer<typeof supplier_name>\n\nexport type SupplierName =\n | \"jlcpcb\"\n | \"macrofab\"\n | \"pcbway\"\n | \"digikey\"\n | \"mouser\"\n | \"lcsc\"\n\nexpectTypesMatch<SupplierName, InferredSupplierName>(true)\n","import {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface SourceComponentBase {\n type: \"source_component\"\n ftype?: string\n source_component_id: string\n name: string\n manufacturer_part_number?: string\n supplier_part_numbers?: Partial<Record<SupplierName, string[]>>\n display_value?: string\n display_name?: string\n are_pins_interchangeable?: boolean\n internally_connected_source_port_ids?: string[][]\n source_group_id?: string\n subcircuit_id?: string\n}\n\nexport const source_component_base = z.object({\n type: z.literal(\"source_component\"),\n ftype: z.string().optional(),\n source_component_id: z.string(),\n name: z.string(),\n manufacturer_part_number: z.string().optional(),\n supplier_part_numbers: z\n .record(supplier_name, z.array(z.string()))\n .optional(),\n display_value: z.string().optional(),\n display_name: z.string().optional(),\n are_pins_interchangeable: z.boolean().optional(),\n internally_connected_source_port_ids: z.array(z.array(z.string())).optional(),\n source_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\ntype InferredSourceComponentBase = z.infer<typeof source_component_base>\n\nexpectTypesMatch<SourceComponentBase, InferredSourceComponentBase>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_resistor = source_component_base.extend({\n ftype: z.literal(\"simple_resistor\"),\n resistance,\n display_resistance: z.string().optional(),\n})\n\nexport type SourceSimpleResistorInput = z.input<typeof source_simple_resistor>\ntype InferredSourceSimpleResistor = z.infer<typeof source_simple_resistor>\n\n/**\n * Defines a simple resistor component\n */\nexport interface SourceSimpleResistor extends SourceComponentBase {\n ftype: \"simple_resistor\"\n resistance: number\n display_resistance?: string\n}\n\nexpectTypesMatch<SourceSimpleResistor, InferredSourceSimpleResistor>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_diode = source_component_base.extend({\n ftype: z.literal(\"simple_diode\"),\n})\n\nexport type SourceSimpleDiodeInput = z.input<typeof source_simple_diode>\ntype InferredSourceSimpleDiode = z.infer<typeof source_simple_diode>\n\n/**\n * Defines a simple diode component\n */\nexport interface SourceSimpleDiode extends SourceComponentBase {\n ftype: \"simple_diode\"\n}\n\nexpectTypesMatch<SourceSimpleDiode, InferredSourceSimpleDiode>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_fiducial = source_component_base.extend({\n ftype: z.literal(\"simple_fiducial\"),\n})\n\nexport type SourceSimpleFiducialInput = z.input<typeof source_simple_fiducial>\ntype InferredSourceSimpleFiducial = z.infer<typeof source_simple_fiducial>\n\n/**\n * Defines a simple fiducial component\n */\nexport interface SourceSimpleFiducial extends SourceComponentBase {\n ftype: \"simple_fiducial\"\n}\n\nexpectTypesMatch<SourceSimpleFiducial, InferredSourceSimpleFiducial>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n source_simple_diode,\n type SourceSimpleDiode,\n} from \"./source_simple_diode\"\n\nexport const source_simple_led = source_simple_diode.extend({\n ftype: z.literal(\"simple_led\"),\n color: z.string().optional(),\n wavelength: z.string().optional(),\n})\n\nexport type SourceSimpleLedInput = z.input<typeof source_simple_led>\ntype InferredSourceSimpleLed = z.infer<typeof source_simple_led>\n\n/**\n * Defines a simple led component\n */\nexport interface SourceSimpleLed extends Omit<SourceSimpleDiode, \"ftype\"> {\n ftype: \"simple_led\"\n color?: string\n wavelength?: string\n}\n\nexpectTypesMatch<SourceSimpleLed, InferredSourceSimpleLed>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_ground = source_component_base.extend({\n ftype: z.literal(\"simple_ground\"),\n})\n\nexport type SourceSimpleGroundInput = z.input<typeof source_simple_ground>\ntype InferredSourceSimpleGround = z.infer<typeof source_simple_ground>\n\n/**\n * Defines a simple ground component\n */\nexport interface SourceSimpleGround extends SourceComponentBase {\n ftype: \"simple_ground\"\n}\n\nexpectTypesMatch<SourceSimpleGround, InferredSourceSimpleGround>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_chip = source_component_base.extend({\n ftype: z.literal(\"simple_chip\"),\n})\n\nexport type SourceSimpleChipInput = z.input<typeof source_simple_chip>\ntype InferredSourceSimpleChip = z.infer<typeof source_simple_chip>\n\n/**\n * Defines a simple integrated circuit component\n */\nexport interface SourceSimpleChip extends SourceComponentBase {\n ftype: \"simple_chip\"\n}\n\nexpectTypesMatch<SourceSimpleChip, InferredSourceSimpleChip>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_printed_part = source_component_base.extend({\n ftype: z.literal(\"printedpart\"),\n})\n\nexport type SourcePrintedPartInput = z.input<typeof source_printed_part>\ntype InferredSourcePrintedPart = z.infer<typeof source_printed_part>\n\n/** Defines a 3D-printed part in an assembly. */\nexport interface SourcePrintedPart extends SourceComponentBase {\n ftype: \"printedpart\"\n}\n\nexpectTypesMatch<SourcePrintedPart, InferredSourcePrintedPart>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_subassembly = source_component_base.extend({\n ftype: z.literal(\"subassembly\"),\n})\n\nexport type SourceSubassemblyInput = z.input<typeof source_subassembly>\ntype InferredSourceSubassembly = z.infer<typeof source_subassembly>\n\n/** Defines a subassembly component. */\nexport interface SourceSubassembly extends SourceComponentBase {\n ftype: \"subassembly\"\n}\n\nexpectTypesMatch<SourceSubassembly, InferredSourceSubassembly>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_motor = source_component_base.extend({\n ftype: z.literal(\"motor\"),\n})\n\nexport type SourceMotorInput = z.input<typeof source_motor>\ntype InferredSourceMotor = z.infer<typeof source_motor>\n\n/** Defines a motor component. */\nexport interface SourceMotor extends SourceComponentBase {\n ftype: \"motor\"\n}\n\nexpectTypesMatch<SourceMotor, InferredSourceMotor>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { voltage } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_power_source = source_component_base.extend({\n ftype: z.literal(\"simple_power_source\"),\n voltage,\n})\n\nexport type SourceSimplePowerSourceInput = z.input<\n typeof source_simple_power_source\n>\ntype InferredSourceSimplePowerSource = z.infer<\n typeof source_simple_power_source\n>\n\n/**\n * Defines a simple power source component\n */\nexport interface SourceSimplePowerSource extends SourceComponentBase {\n ftype: \"simple_power_source\"\n voltage: number\n}\n\nexpectTypesMatch<SourceSimplePowerSource, InferredSourceSimplePowerSource>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { current, frequency } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_current_source = source_component_base.extend({\n ftype: z.literal(\"simple_current_source\"),\n current,\n frequency: frequency.optional(),\n peak_to_peak_current: current.optional(),\n wave_shape: z\n .enum([\"sine\", \"square\", \"triangle\", \"sawtooth\", \"dc\"])\n .optional()\n .default(\"dc\"),\n phase: z.number().optional(),\n duty_cycle: z.number().min(0).max(1).optional(),\n})\n\nexport type SourceSimpleCurrentSourceInput = z.input<\n typeof source_simple_current_source\n>\ntype InferredSourceSimpleCurrentSource = z.infer<\n typeof source_simple_current_source\n>\n\n/**\n * Defines a simple current source component\n */\nexport interface SourceSimpleCurrentSource extends SourceComponentBase {\n ftype: \"simple_current_source\"\n current: number\n frequency?: number\n peak_to_peak_current?: number\n wave_shape: \"sine\" | \"square\" | \"triangle\" | \"sawtooth\" | \"dc\"\n phase?: number\n duty_cycle?: number\n}\n\nexpectTypesMatch<SourceSimpleCurrentSource, InferredSourceSimpleCurrentSource>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"./base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_fuse = source_component_base.extend({\n ftype: z.literal(\"simple_fuse\"),\n\n current_rating_amps: z\n .number()\n .describe(\"Nominal current in amps the fuse is rated for\"),\n\n voltage_rating_volts: z\n .number()\n .describe(\"Voltage rating in volts, e.g. ±5V would be 5\"),\n})\n\nexport interface SourceSimpleFuse extends SourceComponentBase {\n ftype: \"simple_fuse\"\n current_rating_amps: number\n voltage_rating_volts: number\n}\n\nexport type SourceSimpleFuseInput = z.input<typeof source_simple_fuse>\ntype InferredSourceSimpleFuse = z.infer<typeof source_simple_fuse>\n\nexpectTypesMatch<SourceSimpleFuse, InferredSourceSimpleFuse>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_ammeter = source_component_base.extend({\n ftype: z.literal(\"simple_ammeter\"),\n})\n\nexport type SourceSimpleAmmeterInput = z.input<typeof source_simple_ammeter>\ntype InferredSourceSimpleAmmeter = z.infer<typeof source_simple_ammeter>\n\n/**\n * Defines a simple ammeter component for simulation and measurement\n */\nexport interface SourceSimpleAmmeter extends SourceComponentBase {\n ftype: \"simple_ammeter\"\n}\n\nexpectTypesMatch<SourceSimpleAmmeter, InferredSourceSimpleAmmeter>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { voltage } from \"src/units\"\n\n// Require a complete scalar before the shared unit parser can normalize it.\n// Ranges and prose cannot be represented by the scalar voltage fields.\nconst pin_voltage: z.ZodType<number, z.ZodTypeDef, number | string> = z\n .union([\n z.number(),\n z\n .string()\n .trim()\n .regex(\n /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?\\s*(?:[fpnumkKMGTµμ]?V?|V)?$/,\n \"Expected a scalar voltage, optionally with SI units\",\n ),\n ])\n .pipe(voltage)\n .pipe(z.number().finite())\n\nexport const source_pin_attributes = z.object({\n is_input: z.boolean().optional(),\n is_output: z.boolean().optional(),\n is_bidirectional: z.boolean().optional(),\n is_passive: z.boolean().optional(),\n can_use_tri_state: z.boolean().optional(),\n is_using_tri_state: z.boolean().optional(),\n can_use_open_collector: z.boolean().optional(),\n is_using_open_collector: z.boolean().optional(),\n can_use_open_emitter: z.boolean().optional(),\n is_using_open_emitter: z.boolean().optional(),\n is_gpio: z.boolean().optional(),\n highlight_color: z.string().optional(),\n must_be_connected: z.boolean().optional(),\n provides_power: z.boolean().optional(),\n requires_power: z.boolean().optional(),\n provides_ground: z.boolean().optional(),\n requires_ground: z.boolean().optional(),\n provides_voltage: pin_voltage.optional(),\n requires_voltage: pin_voltage.optional(),\n required_voltage_tolerance: z.number().finite().min(0).max(1).optional(),\n do_not_connect: z.boolean().optional(),\n include_in_board_pinout: z.boolean().optional(),\n can_use_internal_pullup: z.boolean().optional(),\n is_using_internal_pullup: z.boolean().optional(),\n needs_external_pullup: z.boolean().optional(),\n can_use_internal_pulldown: z.boolean().optional(),\n is_using_internal_pulldown: z.boolean().optional(),\n needs_external_pulldown: z.boolean().optional(),\n can_use_open_drain: z.boolean().optional(),\n is_using_open_drain: z.boolean().optional(),\n can_use_push_pull: z.boolean().optional(),\n is_using_push_pull: z.boolean().optional(),\n should_have_decoupling_capacitor: z.boolean().optional(),\n recommended_decoupling_capacitor_capacitance: z\n .union([z.string(), z.number()])\n .optional(),\n is_configured_for_i2c_sda: z.boolean().optional(),\n is_configured_for_i2c_scl: z.boolean().optional(),\n is_configured_for_spi_mosi: z.boolean().optional(),\n is_configured_for_spi_miso: z.boolean().optional(),\n is_configured_for_spi_sck: z.boolean().optional(),\n is_configured_for_spi_cs: z.boolean().optional(),\n is_configured_for_uart_tx: z.boolean().optional(),\n is_configured_for_uart_rx: z.boolean().optional(),\n supports_i2c_sda: z.boolean().optional(),\n supports_i2c_scl: z.boolean().optional(),\n supports_spi_mosi: z.boolean().optional(),\n supports_spi_miso: z.boolean().optional(),\n supports_spi_sck: z.boolean().optional(),\n supports_spi_cs: z.boolean().optional(),\n supports_uart_tx: z.boolean().optional(),\n supports_uart_rx: z.boolean().optional(),\n})\n\ntype InferredSourcePinAttributes = z.infer<typeof source_pin_attributes>\nexport type SourcePinAttributesInput = z.input<typeof source_pin_attributes>\n\nexport interface SourcePinAttributes {\n is_input?: boolean\n is_output?: boolean\n is_bidirectional?: boolean\n is_passive?: boolean\n can_use_tri_state?: boolean\n is_using_tri_state?: boolean\n can_use_open_collector?: boolean\n is_using_open_collector?: boolean\n can_use_open_emitter?: boolean\n is_using_open_emitter?: boolean\n is_gpio?: boolean\n highlight_color?: string\n must_be_connected?: boolean\n provides_power?: boolean\n requires_power?: boolean\n provides_ground?: boolean\n requires_ground?: boolean\n provides_voltage?: number\n requires_voltage?: number\n /** Allowed relative deviation from requires_voltage, e.g. 0.05 for ±5%. */\n required_voltage_tolerance?: number\n do_not_connect?: boolean\n include_in_board_pinout?: boolean\n can_use_internal_pullup?: boolean\n is_using_internal_pullup?: boolean\n needs_external_pullup?: boolean\n can_use_internal_pulldown?: boolean\n is_using_internal_pulldown?: boolean\n needs_external_pulldown?: boolean\n can_use_open_drain?: boolean\n is_using_open_drain?: boolean\n can_use_push_pull?: boolean\n is_using_push_pull?: boolean\n should_have_decoupling_capacitor?: boolean\n recommended_decoupling_capacitor_capacitance?: string | number\n is_configured_for_i2c_sda?: boolean\n is_configured_for_i2c_scl?: boolean\n is_configured_for_spi_mosi?: boolean\n is_configured_for_spi_miso?: boolean\n is_configured_for_spi_sck?: boolean\n is_configured_for_spi_cs?: boolean\n is_configured_for_uart_tx?: boolean\n is_configured_for_uart_rx?: boolean\n supports_i2c_sda?: boolean\n supports_i2c_scl?: boolean\n supports_spi_mosi?: boolean\n supports_spi_miso?: boolean\n supports_spi_sck?: boolean\n supports_spi_cs?: boolean\n supports_uart_tx?: boolean\n supports_uart_rx?: boolean\n}\n\nexpectTypesMatch<SourcePinAttributes, InferredSourcePinAttributes>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n source_simple_resistor,\n type SourceSimpleResistor,\n} from \"./source_simple_resistor\"\nimport {\n source_simple_capacitor,\n type SourceSimpleCapacitor,\n} from \"./source_simple_capacitor\"\nimport { source_simple_fuse, type SourceSimpleFuse } from \"./source_simple_fuse\"\nimport {\n source_simple_diode,\n type SourceSimpleDiode,\n} from \"./source_simple_diode\"\nimport {\n source_simple_fiducial,\n type SourceSimpleFiducial,\n} from \"./source_simple_fiducial\"\nimport { source_simple_led, type SourceSimpleLed } from \"./source_simple_led\"\nimport {\n source_simple_ground,\n type SourceSimpleGround,\n} from \"./source_simple_ground\"\nimport { source_simple_chip, type SourceSimpleChip } from \"./source_simple_chip\"\nimport {\n source_printed_part,\n type SourcePrintedPart,\n} from \"./source_printed_part\"\nimport {\n source_subassembly,\n type SourceSubassembly,\n} from \"./source_subassembly\"\nimport { source_motor, type SourceMotor } from \"./source_motor\"\nimport {\n source_simple_power_source,\n type SourceSimplePowerSource,\n} from \"./source_simple_power_source\"\nimport {\n source_simple_current_source,\n type SourceSimpleCurrentSource,\n} from \"./source_simple_current_source\"\nimport {\n source_simple_ammeter,\n type SourceSimpleAmmeter,\n} from \"./source_simple_ammeter\"\nimport {\n source_simple_battery,\n type SourceSimpleBattery,\n} from \"./source_simple_battery\"\nimport {\n source_simple_inductor,\n type SourceSimpleInductor,\n} from \"./source_simple_inductor\"\nimport {\n source_simple_push_button,\n type SourceSimplePushButton,\n} from \"./source_simple_push_button\"\nimport {\n source_simple_potentiometer,\n type SourceSimplePotentiometer,\n} from \"./source_simple_potentiometer\"\nimport {\n source_simple_crystal,\n type SourceSimpleCrystal,\n} from \"./source_simple_crystal\"\nimport {\n source_simple_pin_header,\n type SourceSimplePinHeader,\n} from \"./source_simple_pin_header\"\nimport {\n source_simple_connector,\n type SourceSimpleConnector,\n} from \"./source_simple_connector\"\nimport {\n source_simple_pinout,\n type SourceSimplePinout,\n} from \"./source_simple_pinout\"\nimport {\n source_simple_resonator,\n type SourceSimpleResonator,\n} from \"./source_simple_resonator\"\nimport {\n source_simple_transistor,\n type SourceSimpleTransistor,\n} from \"./source_simple_transistor\"\nimport {\n source_simple_test_point,\n type SourceSimpleTestPoint,\n} from \"./source_simple_test_point\"\nimport {\n source_simple_mosfet,\n type SourceSimpleMosfet,\n} from \"./source_simple_mosfet\"\nimport {\n source_simple_op_amp,\n type SourceSimpleOpAmp,\n} from \"./source_simple_op_amp\"\nimport {\n source_simple_switch,\n type SourceSimpleSwitch,\n} from \"./source_simple_switch\"\nimport {\n source_project_metadata,\n type SourceProjectMetadata,\n} from \"./source_project_metadata\"\nimport {\n source_missing_property_error,\n type SourceMissingPropertyError,\n} from \"./source_missing_property_error\"\nimport {\n source_failed_to_create_component_error,\n type SourceFailedToCreateComponentError,\n} from \"./source_failed_to_create_component_error\"\nimport {\n source_invalid_component_property_error,\n type SourceInvalidComponentPropertyError,\n} from \"./source_invalid_component_property_error\"\nimport {\n source_trace_not_connected_error,\n type SourceTraceNotConnectedError,\n} from \"./source_trace_not_connected_error\"\nimport {\n source_property_ignored_warning,\n type SourcePropertyIgnoredWarning,\n} from \"./source_property_ignored_warning\"\nimport {\n source_pin_missing_trace_warning,\n type SourcePinMissingTraceWarning,\n} from \"./source_pin_missing_trace_warning\"\nimport {\n source_missing_manufacturer_part_number_warning,\n type SourceMissingManufacturerPartNumberWarning,\n} from \"./source_missing_manufacturer_part_number_warning\"\nimport {\n source_refdes_convention_warning,\n type SourceRefdesConventionWarning,\n} from \"./source_refdes_convention_warning\"\nimport {\n source_component_availability_warning,\n type SourceComponentAvailabilityWarning,\n} from \"./source_component_availability_warning\"\nimport {\n source_simple_voltage_probe,\n type SourceSimpleVoltageProbe,\n} from \"./source_simple_voltage_probe\"\nimport {\n source_interconnect,\n type SourceInterconnect,\n} from \"./source_interconnect\"\nimport {\n source_i2c_misconfigured_error,\n type SourceI2cMisconfiguredError,\n} from \"./source_i2c_misconfigured_error\"\nimport {\n source_component_misconfigured_error,\n type SourceComponentMisconfiguredError,\n} from \"./source_component_misconfigured_error\"\nimport {\n source_simple_voltage_source,\n type SourceSimpleVoltageSource,\n} from \"./source_simple_voltage_source\"\n\nexport const any_source_component = z.union([\n source_simple_resistor,\n source_simple_capacitor,\n source_simple_diode,\n source_simple_fiducial,\n source_simple_led,\n source_simple_ground,\n source_simple_chip,\n source_printed_part,\n source_subassembly,\n source_motor,\n source_simple_power_source,\n source_simple_current_source,\n source_simple_ammeter,\n source_simple_battery,\n source_simple_inductor,\n source_simple_push_button,\n source_simple_potentiometer,\n source_simple_crystal,\n source_simple_pin_header,\n source_simple_connector,\n source_simple_pinout,\n source_simple_resonator,\n source_simple_switch,\n source_simple_transistor,\n source_simple_test_point,\n source_simple_mosfet,\n source_simple_op_amp,\n source_simple_fuse,\n source_simple_voltage_probe,\n source_interconnect,\n source_simple_voltage_source,\n source_project_metadata,\n source_missing_property_error,\n source_invalid_component_property_error,\n source_failed_to_create_component_error,\n source_trace_not_connected_error,\n source_property_ignored_warning,\n source_pin_missing_trace_warning,\n source_missing_manufacturer_part_number_warning,\n source_refdes_convention_warning,\n source_component_availability_warning,\n source_i2c_misconfigured_error,\n source_component_misconfigured_error,\n])\n\n/**\n * Deprecated: use `AnySourceElement` instead\n */\nexport type AnySourceComponent = z.infer<typeof any_source_component>\n\nexport type AnySourceElement =\n | SourceSimpleResistor\n | SourceSimpleCapacitor\n | SourceSimpleDiode\n | SourceSimpleFiducial\n | SourceSimpleLed\n | SourceSimpleGround\n | SourceSimpleChip\n | SourcePrintedPart\n | SourceSubassembly\n | SourceMotor\n | SourceSimplePowerSource\n | SourceSimpleCurrentSource\n | SourceSimpleAmmeter\n | SourceSimpleBattery\n | SourceSimpleInductor\n | SourceSimplePushButton\n | SourceSimplePotentiometer\n | SourceSimpleCrystal\n | SourceSimplePinHeader\n | SourceSimpleConnector\n | SourceSimplePinout\n | SourceSimpleResonator\n | SourceSimpleSwitch\n | SourceSimpleTransistor\n | SourceSimpleTestPoint\n | SourceSimpleMosfet\n | SourceSimpleFuse\n | SourceSimpleOpAmp\n | SourceSimpleVoltageProbe\n | SourceSimpleVoltageSource\n | SourceInterconnect\n | SourceProjectMetadata\n | SourceMissingPropertyError\n | SourceInvalidComponentPropertyError\n | SourceFailedToCreateComponentError\n | SourceTraceNotConnectedError\n | SourcePropertyIgnoredWarning\n | SourcePinMissingTraceWarning\n | SourceMissingManufacturerPartNumberWarning\n | SourceComponentAvailabilityWarning\n | SourceRefdesConventionWarning\n | SourceI2cMisconfiguredError\n | SourceComponentMisconfiguredError\n\nexpectTypesMatch<AnySourceElement, AnySourceComponent>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { battery_capacity } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_battery = source_component_base.extend({\n ftype: z.literal(\"simple_battery\"),\n capacity: battery_capacity,\n})\n\nexport type SourceSimpleBatteryInput = z.input<typeof source_simple_battery>\ntype InferredSourceSimpleBattery = z.infer<typeof source_simple_battery>\n\n/**\n * Defines a simple battery component\n */\nexport interface SourceSimpleBattery extends SourceComponentBase {\n ftype: \"simple_battery\"\n capacity: number\n}\n\nexpectTypesMatch<SourceSimpleBattery, InferredSourceSimpleBattery>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { inductance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_inductor = source_component_base.extend({\n ftype: z.literal(\"simple_inductor\"),\n inductance,\n display_inductance: z.string().optional(),\n max_current_rating: z.number().optional(),\n})\n\nexport type SourceSimpleInductorInput = z.input<typeof source_simple_inductor>\ntype InferredSourceSimpleInductor = z.infer<typeof source_simple_inductor>\n\n/**\n * Defines a simple inductor component\n */\nexport interface SourceSimpleInductor extends SourceComponentBase {\n ftype: \"simple_inductor\"\n inductance: number\n display_inductance?: string\n max_current_rating?: number\n}\n\nexpectTypesMatch<SourceSimpleInductor, InferredSourceSimpleInductor>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_push_button = source_component_base.extend({\n ftype: z.literal(\"simple_push_button\"),\n})\n\nexport type SourceSimplePushButtonInput = z.input<\n typeof source_simple_push_button\n>\ntype InferredSourceSimplePushButton = z.infer<typeof source_simple_push_button>\n\n/**\n * Defines a simple push button component\n */\nexport interface SourceSimplePushButton extends SourceComponentBase {\n ftype: \"simple_push_button\"\n}\n\nexpectTypesMatch<SourceSimplePushButton, InferredSourceSimplePushButton>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_potentiometer = source_component_base.extend({\n ftype: z.literal(\"simple_potentiometer\"),\n max_resistance: resistance,\n display_max_resistance: z.string().optional(),\n})\n\nexport type SourceSimplePotentiometerInput = z.input<\n typeof source_simple_potentiometer\n>\ntype InferredSourceSimplePotentiometer = z.infer<\n typeof source_simple_potentiometer\n>\n\nexport interface SourceSimplePotentiometer extends SourceComponentBase {\n ftype: \"simple_potentiometer\"\n max_resistance: number\n display_max_resistance?: string\n}\n\nexpectTypesMatch<SourceSimplePotentiometer, InferredSourceSimplePotentiometer>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_crystal = source_component_base.extend({\n ftype: z.literal(\"simple_crystal\"),\n frequency: z.number().describe(\"Frequency in Hz\"),\n load_capacitance: z.number().optional().describe(\"Load capacitance in pF\"),\n pin_variant: z.enum([\"two_pin\", \"four_pin\"]).optional(),\n})\n\nexport type SourceSimpleCrystalInput = z.input<typeof source_simple_crystal>\ntype InferredSourceSimpleCrystal = z.infer<typeof source_simple_crystal>\n\n/**\n * Defines a simple crystal oscillator component\n */\nexport interface SourceSimpleCrystal extends SourceComponentBase {\n ftype: \"simple_crystal\"\n frequency: number\n load_capacitance?: number\n pin_variant?: \"two_pin\" | \"four_pin\"\n}\n\nexpectTypesMatch<SourceSimpleCrystal, InferredSourceSimpleCrystal>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_pin_header = source_component_base.extend({\n ftype: z.literal(\"simple_pin_header\"),\n pin_count: z.number(),\n gender: z.enum([\"male\", \"female\"]).optional().default(\"male\"),\n})\n\nexport type SourceSimplePinHeaderInput = z.input<\n typeof source_simple_pin_header\n>\ntype InferredSourceSimplePinHeader = z.infer<typeof source_simple_pin_header>\n\nexport interface SourceSimplePinHeader extends SourceComponentBase {\n ftype: \"simple_pin_header\"\n pin_count: number\n gender: \"male\" | \"female\"\n}\n\nexpectTypesMatch<SourceSimplePinHeader, InferredSourceSimplePinHeader>(true)\n","import {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_connector_standards = [\n \"usb_c\",\n \"m2\",\n \"jst_sh\",\n \"jst_gh\",\n \"jst_zh\",\n \"jst_ph\",\n \"jst_xh\",\n \"jst_vh\",\n] as const\n\nexport type SourceSimpleConnectorStandard =\n (typeof source_simple_connector_standards)[number]\n\nexport const source_simple_connector = source_component_base.extend({\n ftype: z.literal(\"simple_connector\"),\n standard: z.enum(source_simple_connector_standards).optional(),\n pin_count: z.number().int().positive().optional(),\n})\n\nexport type SourceSimpleConnectorInput = z.input<typeof source_simple_connector>\ntype InferredSourceSimpleConnector = z.infer<typeof source_simple_connector>\n\n/**\n * Defines a simple connector component\n */\nexport interface SourceSimpleConnector extends SourceComponentBase {\n ftype: \"simple_connector\"\n /** Connector interface or product family, such as usb_c, m2, or jst_ph */\n standard?: SourceSimpleConnectorStandard\n /** Number of electrical circuits in the connector */\n pin_count?: number\n}\n\nexpectTypesMatch<SourceSimpleConnector, InferredSourceSimpleConnector>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_pinout = source_component_base.extend({\n ftype: z.literal(\"simple_pinout\"),\n})\n\nexport type SourceSimplePinoutInput = z.input<typeof source_simple_pinout>\ntype InferredSourceSimplePinout = z.infer<typeof source_simple_pinout>\n\n/**\n * Defines a simple pinout component\n */\nexport interface SourceSimplePinout extends SourceComponentBase {\n ftype: \"simple_pinout\"\n}\n\nexpectTypesMatch<SourceSimplePinout, InferredSourceSimplePinout>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { capacitance, resistance, frequency } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_resonator = source_component_base.extend({\n ftype: z.literal(\"simple_resonator\"),\n load_capacitance: capacitance,\n equivalent_series_resistance: resistance.optional(),\n frequency: frequency,\n})\n\nexport type SourceSimpleResonatorInput = z.input<typeof source_simple_resonator>\ntype InferredSourceSimpleResonator = z.infer<typeof source_simple_resonator>\n\n/**\n * Defines a simple resonator component\n */\nexport interface SourceSimpleResonator extends SourceComponentBase {\n ftype: \"simple_resonator\"\n load_capacitance: number\n equivalent_series_resistance?: number\n frequency: number\n}\n\nexpectTypesMatch<SourceSimpleResonator, InferredSourceSimpleResonator>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_transistor = source_component_base.extend({\n ftype: z.literal(\"simple_transistor\"),\n transistor_type: z.enum([\"npn\", \"pnp\"]),\n})\n\nexport type SourceSimpleTransistorInput = z.input<\n typeof source_simple_transistor\n>\ntype InferredSourceSimpleTransistor = z.infer<typeof source_simple_transistor>\n\n/**\n * Defines a simple transistor component\n * This is a three-pin semiconductor device (emitter, base, collector)\n * Pin configuration is handled by the schematic port system\n */\n\nexport interface SourceSimpleTransistor extends SourceComponentBase {\n ftype: \"simple_transistor\"\n transistor_type: \"npn\" | \"pnp\"\n}\n\nexpectTypesMatch<SourceSimpleTransistor, InferredSourceSimpleTransistor>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_test_point = source_component_base.extend({\n ftype: z.literal(\"simple_test_point\"),\n footprint_variant: z.enum([\"pad\", \"through_hole\"]).optional(),\n pad_shape: z.enum([\"rect\", \"circle\"]).optional(),\n pad_diameter: z.union([z.number(), z.string()]).optional(),\n hole_diameter: z.union([z.number(), z.string()]).optional(),\n width: z.union([z.number(), z.string()]).optional(),\n height: z.union([z.number(), z.string()]).optional(),\n})\n\nexport type SourceSimpleTestPointInput = z.input<\n typeof source_simple_test_point\n>\ntype InferredSourceSimpleTestPoint = z.infer<typeof source_simple_test_point>\n\n/**\n * Defines a simple test point component\n * Can be surface-mount or through-hole.\n * Pad shape and dimensions configurable for different use cases.\n */\nexport interface SourceSimpleTestPoint extends SourceComponentBase {\n ftype: \"simple_test_point\"\n footprint_variant?: \"pad\" | \"through_hole\"\n pad_shape?: \"rect\" | \"circle\"\n pad_diameter?: number | string\n hole_diameter?: number | string\n width?: number | string\n height?: number | string\n}\n\nexpectTypesMatch<SourceSimpleTestPoint, InferredSourceSimpleTestPoint>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_mosfet = source_component_base.extend({\n ftype: z.literal(\"simple_mosfet\"),\n channel_type: z.enum([\"n\", \"p\"]),\n mosfet_mode: z.enum([\"enhancement\", \"depletion\"]),\n})\n\nexport type SourceSimpleMosfetInput = z.input<typeof source_simple_mosfet>\ntype InferredSourceSimpleMosfet = z.infer<typeof source_simple_mosfet>\n\n/**\n * Defines a simple mosfet component\n * This is a three-pin semiconductor device (source, gate, drain)\n * Pin configuration is handled by the schematic port system\n */\n\nexport interface SourceSimpleMosfet extends SourceComponentBase {\n ftype: \"simple_mosfet\"\n channel_type: \"n\" | \"p\"\n mosfet_mode: \"enhancement\" | \"depletion\"\n}\n\nexpectTypesMatch<SourceSimpleMosfet, InferredSourceSimpleMosfet>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_op_amp = source_component_base.extend({\n ftype: z.literal(\"simple_op_amp\"),\n})\n\nexport type SourceSimpleOpAmpInput = z.input<typeof source_simple_op_amp>\ntype InferredSourceSimpleOpAmp = z.infer<typeof source_simple_op_amp>\n\n/**\n * Defines a simple op-amp component\n */\nexport interface SourceSimpleOpAmp extends SourceComponentBase {\n ftype: \"simple_op_amp\"\n}\n\nexpectTypesMatch<SourceSimpleOpAmp, InferredSourceSimpleOpAmp>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_switch = source_component_base.extend({\n ftype: z.literal(\"simple_switch\"),\n})\nexport type SourceSimpleSwitchInput = z.input<typeof source_simple_switch>\ntype InferredSourceSimpleSwitch = z.infer<typeof source_simple_switch>\n\n/**\n * Defines a simple switch component\n */\nexport interface SourceSimpleSwitch extends SourceComponentBase {\n ftype: \"simple_switch\"\n}\n\nexpectTypesMatch<SourceSimpleSwitch, InferredSourceSimpleSwitch>(true)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { timestamp } from \"src/units\"\n\nexport interface SourceProjectMetadata {\n type: \"source_project_metadata\"\n name?: string\n software_used_string?: string\n project_url?: string\n source_filesystem_md5_hash?: string\n created_at?: string // ISO8601 timestamp\n}\n\nexport const source_project_metadata = z.object({\n type: z.literal(\"source_project_metadata\"),\n name: z.string().optional(),\n software_used_string: z.string().optional(),\n project_url: z.string().optional(),\n source_filesystem_md5_hash: z.string().optional(),\n created_at: timestamp.optional(),\n})\n\nexport type InferredProjectMetadata = z.infer<typeof source_project_metadata>\nexpectTypesMatch<SourceProjectMetadata, InferredProjectMetadata>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_missing_property_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_missing_property_error\"),\n source_missing_property_error_id: getZodPrefixedIdWithDefault(\n \"source_missing_property_error\",\n ),\n source_component_id: z.string(),\n property_name: z.string(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"source_missing_property_error\")\n .default(\"source_missing_property_error\"),\n })\n .describe(\"The source code is missing a property\")\n\nexport type SourceMissingPropertyErrorInput = z.input<\n typeof source_missing_property_error\n>\ntype InferredSourceMissingPropertyError = z.infer<\n typeof source_missing_property_error\n>\n\n/**\n * The source code is missing a property\n */\nexport interface SourceMissingPropertyError extends BaseCircuitJsonError {\n type: \"source_missing_property_error\"\n source_missing_property_error_id: string\n source_component_id: string\n property_name: string\n subcircuit_id?: string\n error_type: \"source_missing_property_error\"\n}\n\nexpectTypesMatch<\n SourceMissingPropertyError,\n InferredSourceMissingPropertyError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_failed_to_create_component_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_failed_to_create_component_error\"),\n source_failed_to_create_component_error_id: getZodPrefixedIdWithDefault(\n \"source_failed_to_create_component_error\",\n ),\n error_type: z\n .literal(\"source_failed_to_create_component_error\")\n .default(\"source_failed_to_create_component_error\"),\n component_name: z.string().optional(),\n subcircuit_id: z.string().optional(),\n parent_source_component_id: z.string().optional(),\n pcb_center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n schematic_center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n })\n .describe(\"Error emitted when a component fails to be constructed\")\n\nexport type SourceFailedToCreateComponentErrorInput = z.input<\n typeof source_failed_to_create_component_error\n>\ntype InferredSourceFailedToCreateComponentError = z.infer<\n typeof source_failed_to_create_component_error\n>\n\n/**\n * Error emitted when a component fails to be constructed.\n * Contains details about the failure and prevents the component from being rendered.\n */\nexport interface SourceFailedToCreateComponentError\n extends BaseCircuitJsonError {\n type: \"source_failed_to_create_component_error\"\n source_failed_to_create_component_error_id: string\n error_type: \"source_failed_to_create_component_error\"\n component_name?: string\n subcircuit_id?: string\n parent_source_component_id?: string\n pcb_center?: {\n x?: number\n y?: number\n }\n schematic_center?: {\n x?: number\n y?: number\n }\n}\n\nexpectTypesMatch<\n SourceFailedToCreateComponentError,\n InferredSourceFailedToCreateComponentError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_invalid_component_property_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_invalid_component_property_error\"),\n source_invalid_component_property_error_id: getZodPrefixedIdWithDefault(\n \"source_invalid_component_property_error\",\n ),\n source_component_id: z.string(),\n property_name: z.string(),\n property_value: z.unknown().optional(),\n expected_format: z.string().optional(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"source_invalid_component_property_error\")\n .default(\"source_invalid_component_property_error\"),\n })\n .describe(\"The source component property is invalid\")\n\nexport type SourceInvalidComponentPropertyErrorInput = z.input<\n typeof source_invalid_component_property_error\n>\ntype InferredSourceInvalidComponentPropertyError = z.infer<\n typeof source_invalid_component_property_error\n>\n\n/**\n * The source component property is invalid\n */\nexport interface SourceInvalidComponentPropertyError\n extends BaseCircuitJsonError {\n type: \"source_invalid_component_property_error\"\n source_invalid_component_property_error_id: string\n source_component_id: string\n property_name: string\n property_value?: unknown\n expected_format?: string\n subcircuit_id?: string\n error_type: \"source_invalid_component_property_error\"\n}\n\nexpectTypesMatch<\n SourceInvalidComponentPropertyError,\n InferredSourceInvalidComponentPropertyError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_trace_not_connected_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_trace_not_connected_error\"),\n source_trace_not_connected_error_id: getZodPrefixedIdWithDefault(\n \"source_trace_not_connected_error\",\n ),\n error_type: z\n .literal(\"source_trace_not_connected_error\")\n .default(\"source_trace_not_connected_error\"),\n subcircuit_id: z.string().optional(),\n source_group_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n connected_source_port_ids: z.array(z.string()).optional(),\n selectors_not_found: z.array(z.string()).optional(),\n })\n .describe(\"Occurs when a source trace selector does not match any ports\")\n\nexport type SourceTraceNotConnectedErrorInput = z.input<\n typeof source_trace_not_connected_error\n>\ntype InferredSourceTraceNotConnectedError = z.infer<\n typeof source_trace_not_connected_error\n>\n\n/**\n * Occurs when a source trace selector does not match any ports\n */\nexport interface SourceTraceNotConnectedError extends BaseCircuitJsonError {\n type: \"source_trace_not_connected_error\"\n source_trace_not_connected_error_id: string\n error_type: \"source_trace_not_connected_error\"\n subcircuit_id?: string\n source_group_id?: string\n source_trace_id?: string\n connected_source_port_ids?: string[]\n selectors_not_found?: string[]\n}\n\nexpectTypesMatch<\n SourceTraceNotConnectedError,\n InferredSourceTraceNotConnectedError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_property_ignored_warning = z\n .object({\n type: z.literal(\"source_property_ignored_warning\"),\n source_property_ignored_warning_id: getZodPrefixedIdWithDefault(\n \"source_property_ignored_warning\",\n ),\n source_component_id: z.string(),\n property_name: z.string(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"source_property_ignored_warning\")\n .default(\"source_property_ignored_warning\"),\n message: z.string(),\n })\n .describe(\"The source property was ignored\")\n\nexport type SourcePropertyIgnoredWarningInput = z.input<\n typeof source_property_ignored_warning\n>\ntype InferredSourcePropertyIgnoredWarning = z.infer<\n typeof source_property_ignored_warning\n>\n\n/**\n * The source property was ignored\n */\nexport interface SourcePropertyIgnoredWarning {\n type: \"source_property_ignored_warning\"\n source_property_ignored_warning_id: string\n source_component_id: string\n property_name: string\n subcircuit_id?: string\n error_type: \"source_property_ignored_warning\"\n message: string\n}\n\nexpectTypesMatch<\n SourcePropertyIgnoredWarning,\n InferredSourcePropertyIgnoredWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_pin_missing_trace_warning = z\n .object({\n type: z.literal(\"source_pin_missing_trace_warning\"),\n source_pin_missing_trace_warning_id: getZodPrefixedIdWithDefault(\n \"source_pin_missing_trace_warning\",\n ),\n warning_type: z\n .literal(\"source_pin_missing_trace_warning\")\n .default(\"source_pin_missing_trace_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a source component pin is missing a trace connection\",\n )\n\nexport type SourcePinMissingTraceWarningInput = z.input<\n typeof source_pin_missing_trace_warning\n>\ntype InferredSourcePinMissingTraceWarning = z.infer<\n typeof source_pin_missing_trace_warning\n>\n\n/**\n * Warning emitted when a source component pin is missing a trace connection\n */\nexport interface SourcePinMissingTraceWarning {\n type: \"source_pin_missing_trace_warning\"\n source_pin_missing_trace_warning_id: string\n warning_type: \"source_pin_missing_trace_warning\"\n message: string\n source_component_id: string\n source_port_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourcePinMissingTraceWarning,\n InferredSourcePinMissingTraceWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_missing_manufacturer_part_number_warning = z\n .object({\n type: z.literal(\"source_missing_manufacturer_part_number_warning\"),\n source_missing_manufacturer_part_number_warning_id:\n getZodPrefixedIdWithDefault(\n \"source_missing_manufacturer_part_number_warning\",\n ),\n warning_type: z\n .literal(\"source_missing_manufacturer_part_number_warning\")\n .default(\"source_missing_manufacturer_part_number_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n standard: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a source component is missing its manufacturer part number\",\n )\n\nexport type SourceMissingManufacturerPartNumberWarningInput = z.input<\n typeof source_missing_manufacturer_part_number_warning\n>\ntype InferredSourceMissingManufacturerPartNumberWarning = z.infer<\n typeof source_missing_manufacturer_part_number_warning\n>\n\n/**\n * Warning emitted when a source component is missing its manufacturer part number\n */\nexport interface SourceMissingManufacturerPartNumberWarning {\n type: \"source_missing_manufacturer_part_number_warning\"\n source_missing_manufacturer_part_number_warning_id: string\n warning_type: \"source_missing_manufacturer_part_number_warning\"\n message: string\n source_component_id: string\n standard?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceMissingManufacturerPartNumberWarning,\n InferredSourceMissingManufacturerPartNumberWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common/getZodPrefixedIdWithDefault\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_refdes_convention_warning = z\n .object({\n type: z.literal(\"source_refdes_convention_warning\"),\n source_refdes_convention_warning_id: getZodPrefixedIdWithDefault(\n \"source_refdes_convention_warning\",\n ),\n warning_type: z\n .literal(\"source_refdes_convention_warning\")\n .default(\"source_refdes_convention_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n refdes: z.string(),\n source_component_ftype: z.string(),\n expected_prefixes: z.array(z.string()),\n actual_prefix: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a source component reference designator does not match the component type convention\",\n )\n\nexport type SourceRefdesConventionWarningInput = z.input<\n typeof source_refdes_convention_warning\n>\ntype InferredSourceRefdesConventionWarning = z.infer<\n typeof source_refdes_convention_warning\n>\n\n/**\n * Warning emitted when a source component reference designator does not match the component type convention\n */\nexport interface SourceRefdesConventionWarning {\n type: \"source_refdes_convention_warning\"\n source_refdes_convention_warning_id: string\n warning_type: \"source_refdes_convention_warning\"\n message: string\n source_component_id: string\n refdes: string\n source_component_ftype: string\n expected_prefixes: string[]\n actual_prefix?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceRefdesConventionWarning,\n InferredSourceRefdesConventionWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_component_availability_warning = z\n .object({\n type: z.literal(\"source_component_availability_warning\"),\n source_component_availability_warning_id: getZodPrefixedIdWithDefault(\n \"source_component_availability_warning\",\n ),\n warning_type: z\n .literal(\"source_component_availability_warning\")\n .default(\"source_component_availability_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n subcircuit_id: z.string().optional(),\n supplier_name,\n supplier_part_numbers: z.array(z.string()).nonempty(),\n })\n .describe(\n \"Warning emitted when no supplier alternative can be confirmed in stock. Availability may be unknown or change over time.\",\n )\n\nexport type SourceComponentAvailabilityWarningInput = z.input<\n typeof source_component_availability_warning\n>\ntype InferredSourceComponentAvailabilityWarning = z.infer<\n typeof source_component_availability_warning\n>\n\n/** Warning emitted when no supplier alternative can be confirmed in stock. */\nexport interface SourceComponentAvailabilityWarning {\n type: \"source_component_availability_warning\"\n source_component_availability_warning_id: string\n warning_type: \"source_component_availability_warning\"\n message: string\n source_component_id: string\n subcircuit_id?: string\n supplier_name: SupplierName\n supplier_part_numbers: [string, ...string[]]\n}\n\nexpectTypesMatch<\n SourceComponentAvailabilityWarning,\n InferredSourceComponentAvailabilityWarning\n>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_voltage_probe = source_component_base.extend({\n ftype: z.literal(\"simple_voltage_probe\"),\n})\n\nexport type SourceSimpleVoltageProbeInput = z.input<\n typeof source_simple_voltage_probe\n>\ntype InferredSourceSimpleVoltageProbe = z.infer<\n typeof source_simple_voltage_probe\n>\n\n/**\n * Defines a simple voltage probe component for simulation and measurement\n */\nexport interface SourceSimpleVoltageProbe extends SourceComponentBase {\n ftype: \"simple_voltage_probe\"\n}\n\nexpectTypesMatch<SourceSimpleVoltageProbe, InferredSourceSimpleVoltageProbe>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_interconnect = source_component_base.extend({\n ftype: z.literal(\"interconnect\"),\n})\n\nexport type SourceInterconnectInput = z.input<typeof source_interconnect>\ntype InferredSourceInterconnect = z.infer<typeof source_interconnect>\n\n/**\n * Defines a generic interconnect component\n */\nexport interface SourceInterconnect extends SourceComponentBase {\n ftype: \"interconnect\"\n}\n\nexpectTypesMatch<SourceInterconnect, InferredSourceInterconnect>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_i2c_misconfigured_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_i2c_misconfigured_error\"),\n source_i2c_misconfigured_error_id: getZodPrefixedIdWithDefault(\n \"source_i2c_misconfigured_error\",\n ),\n error_type: z\n .literal(\"source_i2c_misconfigured_error\")\n .default(\"source_i2c_misconfigured_error\"),\n source_port_ids: z.array(z.string()),\n })\n .describe(\n \"Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net\",\n )\n\nexport type SourceI2cMisconfiguredErrorInput = z.input<\n typeof source_i2c_misconfigured_error\n>\ntype InferredSourceI2cMisconfiguredError = z.infer<\n typeof source_i2c_misconfigured_error\n>\n\n/**\n * Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net\n */\nexport interface SourceI2cMisconfiguredError extends BaseCircuitJsonError {\n type: \"source_i2c_misconfigured_error\"\n source_i2c_misconfigured_error_id: string\n error_type: \"source_i2c_misconfigured_error\"\n source_port_ids: string[]\n}\n\nexpectTypesMatch<\n SourceI2cMisconfiguredError,\n InferredSourceI2cMisconfiguredError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_component_misconfigured_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_component_misconfigured_error\"),\n source_component_misconfigured_error_id: getZodPrefixedIdWithDefault(\n \"source_component_misconfigured_error\",\n ),\n error_type: z\n .literal(\"source_component_misconfigured_error\")\n .default(\"source_component_misconfigured_error\"),\n source_component_ids: z.array(z.string()),\n source_port_ids: z.array(z.string()).optional(),\n })\n .describe(\n \"Error emitted when one or more source components have an invalid or conflicting configuration\",\n )\n\nexport type SourceComponentMisconfiguredErrorInput = z.input<\n typeof source_component_misconfigured_error\n>\ntype InferredSourceComponentMisconfiguredError = z.infer<\n typeof source_component_misconfigured_error\n>\n\n/**\n * Error emitted when one or more source components have an invalid or conflicting configuration\n */\nexport interface SourceComponentMisconfiguredError\n extends BaseCircuitJsonError {\n type: \"source_component_misconfigured_error\"\n source_component_misconfigured_error_id: string\n error_type: \"source_component_misconfigured_error\"\n source_component_ids: string[]\n source_port_ids?: string[]\n}\n\nexpectTypesMatch<\n SourceComponentMisconfiguredError,\n InferredSourceComponentMisconfiguredError\n>(true)\n","import { z } from \"zod\"\nimport {\n source_component_base,\n type SourceComponentBase,\n} from \"src/source/base/source_component_base\"\nimport { voltage, frequency, ms, rotation } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_simple_voltage_source = source_component_base.extend({\n ftype: z.literal(\"simple_voltage_source\"),\n voltage,\n frequency: frequency.optional(),\n peak_to_peak_voltage: voltage.optional(),\n wave_shape: z.enum([\"sinewave\", \"square\", \"triangle\", \"sawtooth\"]).optional(),\n phase: rotation.optional(),\n duty_cycle: z\n .number()\n .optional()\n .describe(\"Duty cycle as a fraction (0 to 1)\"),\n pulse_delay: ms.optional(),\n rise_time: ms.optional(),\n fall_time: ms.optional(),\n pulse_width: ms.optional(),\n period: ms.optional(),\n})\n\nexport type SourceSimpleVoltageSourceInput = z.input<\n typeof source_simple_voltage_source\n>\ntype InferredSourceSimpleVoltageSource = z.infer<\n typeof source_simple_voltage_source\n>\n\n/**\n * Defines a simple voltage source component\n */\nexport interface SourceSimpleVoltageSource extends SourceComponentBase {\n ftype: \"simple_voltage_source\"\n voltage: number\n frequency?: number\n peak_to_peak_voltage?: number\n wave_shape?: \"sinewave\" | \"square\" | \"triangle\" | \"sawtooth\"\n phase?: number\n duty_cycle?: number\n pulse_delay?: number // ms\n rise_time?: number // ms\n fall_time?: number // ms\n pulse_width?: number // ms\n period?: number // ms\n}\n\nexpectTypesMatch<SourceSimpleVoltageSource, InferredSourceSimpleVoltageSource>(\n true,\n)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n source_pin_attributes,\n type SourcePinAttributes,\n} from \"./properties/source_pin_attributes\"\n\nexport const source_port = z\n .object({\n type: z.literal(\"source_port\"),\n pin_number: z.number().optional(),\n port_hints: z.array(z.string()).optional(),\n name: z.string(),\n source_port_id: z.string(),\n source_component_id: z.string().optional(),\n source_group_id: z.string().optional(),\n most_frequently_referenced_by_name: z.string().optional(),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n })\n .merge(source_pin_attributes)\n\nexport type SourcePortInput = z.input<typeof source_port>\ntype InferredSourcePort = z.infer<typeof source_port>\n\n/**\n * Defines a source port that can be connected to other components\n */\nexport interface SourcePort extends SourcePinAttributes {\n type: \"source_port\"\n pin_number?: number\n port_hints?: string[]\n name: string\n source_port_id: string\n source_component_id?: string\n source_group_id?: string\n most_frequently_referenced_by_name?: string\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n}\n\nexpectTypesMatch<SourcePort, InferredSourcePort>(true)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface SourceComponentInternalConnection {\n type: \"source_component_internal_connection\"\n source_component_internal_connection_id: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexport const source_component_internal_connection = z.object({\n type: z.literal(\"source_component_internal_connection\"),\n source_component_internal_connection_id: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n})\n\ntype InferredSourceComponentInternalConnection = z.infer<\n typeof source_component_internal_connection\n>\n\nexpectTypesMatch<\n SourceComponentInternalConnection,\n InferredSourceComponentInternalConnection\n>(true)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface SourceTrace {\n type: \"source_trace\"\n source_trace_id: string\n connected_source_port_ids: string[]\n connected_source_net_ids: string[]\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n max_length?: number\n max_via_count?: number\n name?: string\n display_name?: string\n min_trace_thickness?: number\n}\n\nexport const source_trace = z.object({\n type: z.literal(\"source_trace\"),\n source_trace_id: z.string(),\n connected_source_port_ids: z.array(z.string()),\n connected_source_net_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n max_length: z.number().optional(),\n max_via_count: z.number().int().nonnegative().optional(),\n name: z.string().optional(),\n min_trace_thickness: z.number().optional(),\n display_name: z.string().optional(),\n})\n\ntype InferredSourceTrace = z.infer<typeof source_trace>\n\nexpectTypesMatch<SourceTrace, InferredSourceTrace>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_group = z.object({\n type: z.literal(\"source_group\"),\n source_group_id: z.string(),\n subcircuit_id: z.string().optional(),\n parent_subcircuit_id: z.string().optional(),\n parent_source_group_id: z.string().optional(),\n is_subcircuit: z.boolean().optional(),\n show_as_schematic_box: z.boolean().optional(),\n name: z.string().optional(),\n was_automatically_named: z.boolean().optional(),\n})\n\nexport type SourceGroupInput = z.input<typeof source_group>\ntype InferredSourceGroup = z.infer<typeof source_group>\n\nexport interface SourceGroup {\n type: \"source_group\"\n source_group_id: string\n subcircuit_id?: string\n parent_subcircuit_id?: string\n parent_source_group_id?: string\n is_subcircuit?: boolean\n show_as_schematic_box?: boolean\n name?: string\n was_automatically_named?: boolean\n}\n\nexpectTypesMatch<SourceGroup, InferredSourceGroup>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_net = z.object({\n type: z.literal(\"source_net\"),\n source_net_id: z.string(),\n name: z.string(),\n member_source_group_ids: z.array(z.string()),\n is_power: z.boolean().optional(),\n is_ground: z.boolean().optional(),\n is_digital_signal: z.boolean().optional(),\n is_analog_signal: z.boolean().optional(),\n is_positive_voltage_source: z.boolean().optional(),\n trace_width: z.number().optional(),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n})\n\nexport type SourceNetInput = z.input<typeof source_net>\ntype InferredSourceNet = z.infer<typeof source_net>\n\nexport interface SourceNet {\n type: \"source_net\"\n source_net_id: string\n name: string\n member_source_group_ids: string[]\n is_power?: boolean\n is_ground?: boolean\n is_digital_signal?: boolean\n is_analog_signal?: boolean\n is_positive_voltage_source?: boolean\n trace_width?: number\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n}\n\nexpectTypesMatch<SourceNet, InferredSourceNet>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_board = z\n .object({\n type: z.literal(\"source_board\"),\n source_board_id: z.string(),\n source_group_id: z.string(),\n title: z.string().optional(),\n })\n .describe(\"Defines a board in the source domain\")\n\nexport type SourceBoardInput = z.input<typeof source_board>\ntype InferredSourceBoard = z.infer<typeof source_board>\n\n/**\n * Defines a board in the source domain\n */\nexport interface SourceBoard {\n type: \"source_board\"\n source_board_id: string\n source_group_id: string\n title?: string\n}\n\nexpectTypesMatch<SourceBoard, InferredSourceBoard>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_ambiguous_port_reference = base_circuit_json_error\n .extend({\n type: z.literal(\"source_ambiguous_port_reference\"),\n source_ambiguous_port_reference_id: getZodPrefixedIdWithDefault(\n \"source_ambiguous_port_reference\",\n ),\n error_type: z\n .literal(\"source_ambiguous_port_reference\")\n .default(\"source_ambiguous_port_reference\"),\n source_port_id: z.string().optional(),\n source_component_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a port hint matches multiple non-overlapping pads, making the port reference ambiguous\",\n )\n\nexport type SourceAmbiguousPortReferenceInput = z.input<\n typeof source_ambiguous_port_reference\n>\ntype InferredSourceAmbiguousPortReference = z.infer<\n typeof source_ambiguous_port_reference\n>\n\n/**\n * Error emitted when a port hint matches multiple non-overlapping pads,\n * making the port reference ambiguous (e.g. multiple pads all named \"SH\").\n */\nexport interface SourceAmbiguousPortReference extends BaseCircuitJsonError {\n type: \"source_ambiguous_port_reference\"\n source_ambiguous_port_reference_id: string\n error_type: \"source_ambiguous_port_reference\"\n source_port_id?: string\n source_component_id?: string\n}\n\nexpectTypesMatch<\n SourceAmbiguousPortReference,\n InferredSourceAmbiguousPortReference\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_pcb_ground_plane = z\n .object({\n type: z.literal(\"source_pcb_ground_plane\"),\n source_pcb_ground_plane_id: z.string(),\n source_group_id: z.string(),\n source_net_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a ground plane in the source domain\")\n\nexport type SourcePcbGroundPlaneInput = z.input<typeof source_pcb_ground_plane>\ntype InferredSourcePcbGroundPlane = z.infer<typeof source_pcb_ground_plane>\n\n/**\n * Defines a ground plane in the source domain\n */\nexport interface SourcePcbGroundPlane {\n type: \"source_pcb_ground_plane\"\n source_pcb_ground_plane_id: string\n source_group_id: string\n source_net_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SourcePcbGroundPlane, InferredSourcePcbGroundPlane>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_manually_placed_via = z\n .object({\n type: z.literal(\"source_manually_placed_via\"),\n source_manually_placed_via_id: z.string(),\n source_group_id: z.string(),\n source_net_id: z.string().min(1).optional(),\n subcircuit_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n })\n .describe(\"Defines a via that is manually placed in the source domain\")\n\nexport type SourceManuallyPlacedViaInput = z.input<\n typeof source_manually_placed_via\n>\ntype InferredSourceManuallyPlacedVia = z.infer<\n typeof source_manually_placed_via\n>\n\n/**\n * Defines a via that is manually placed in the source domain\n */\nexport interface SourceManuallyPlacedVia {\n type: \"source_manually_placed_via\"\n source_manually_placed_via_id: string\n source_group_id: string\n source_net_id?: string\n subcircuit_id?: string\n source_trace_id?: string\n}\n\nexpectTypesMatch<SourceManuallyPlacedVia, InferredSourceManuallyPlacedVia>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const all_layers = [\n \"top\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n \"inner7\",\n \"inner8\",\n] as const\n\nexport const layer_string = z.enum(all_layers)\n\nexport const layer_ref = layer_string\n .or(\n z.object({\n name: layer_string,\n }),\n )\n .transform((layer) => {\n if (typeof layer === \"string\") {\n return layer\n }\n return layer.name\n })\n\nexport type LayerRefInput = z.input<typeof layer_ref>\ntype InferredLayerRef = z.output<typeof layer_ref>\nexport type LayerRef = (typeof all_layers)[number]\n\nexpectTypesMatch<LayerRef, InferredLayerRef>(true)\n\nexport const visible_layer = z.enum([\"top\", \"bottom\"])\nexport type VisibleLayerRef = z.infer<typeof visible_layer>\nexport type VisibleLayer = z.infer<typeof visible_layer>\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_unnamed_trace_warning = z\n .object({\n type: z.literal(\"source_unnamed_trace_warning\"),\n source_unnamed_trace_warning_id: getZodPrefixedIdWithDefault(\n \"source_unnamed_trace_warning\",\n ),\n warning_type: z\n .literal(\"source_unnamed_trace_warning\")\n .default(\"source_unnamed_trace_warning\"),\n message: z.string(),\n source_trace_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Warning emitted when a source trace is missing a name\")\n\nexport type SourceUnnamedTraceWarningInput = z.input<\n typeof source_unnamed_trace_warning\n>\ntype InferredSourceUnnamedTraceWarning = z.infer<\n typeof source_unnamed_trace_warning\n>\n\n/**\n * Warning emitted when a source trace is missing a name\n */\nexport interface SourceUnnamedTraceWarning {\n type: \"source_unnamed_trace_warning\"\n source_unnamed_trace_warning_id: string\n warning_type: \"source_unnamed_trace_warning\"\n message: string\n source_trace_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SourceUnnamedTraceWarning, InferredSourceUnnamedTraceWarning>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_no_power_pin_defined_warning = z\n .object({\n type: z.literal(\"source_no_power_pin_defined_warning\"),\n source_no_power_pin_defined_warning_id: getZodPrefixedIdWithDefault(\n \"source_no_power_pin_defined_warning\",\n ),\n warning_type: z\n .literal(\"source_no_power_pin_defined_warning\")\n .default(\"source_no_power_pin_defined_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a chip has no source ports with requires_power=true\",\n )\n\nexport type SourceNoPowerPinDefinedWarningInput = z.input<\n typeof source_no_power_pin_defined_warning\n>\ntype InferredSourceNoPowerPinDefinedWarning = z.infer<\n typeof source_no_power_pin_defined_warning\n>\n\n/**\n * Warning emitted when a chip has no source ports with requires_power=true\n */\nexport interface SourceNoPowerPinDefinedWarning {\n type: \"source_no_power_pin_defined_warning\"\n source_no_power_pin_defined_warning_id: string\n warning_type: \"source_no_power_pin_defined_warning\"\n message: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceNoPowerPinDefinedWarning,\n InferredSourceNoPowerPinDefinedWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_no_ground_pin_defined_warning = z\n .object({\n type: z.literal(\"source_no_ground_pin_defined_warning\"),\n source_no_ground_pin_defined_warning_id: getZodPrefixedIdWithDefault(\n \"source_no_ground_pin_defined_warning\",\n ),\n warning_type: z\n .literal(\"source_no_ground_pin_defined_warning\")\n .default(\"source_no_ground_pin_defined_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a chip has no source ports marked as ground pins\",\n )\n\nexport type SourceNoGroundPinDefinedWarningInput = z.input<\n typeof source_no_ground_pin_defined_warning\n>\ntype InferredSourceNoGroundPinDefinedWarning = z.infer<\n typeof source_no_ground_pin_defined_warning\n>\n\n/**\n * Warning emitted when a chip has no source ports marked as ground pins\n */\nexport interface SourceNoGroundPinDefinedWarning {\n type: \"source_no_ground_pin_defined_warning\"\n source_no_ground_pin_defined_warning_id: string\n warning_type: \"source_no_ground_pin_defined_warning\"\n message: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceNoGroundPinDefinedWarning,\n InferredSourceNoGroundPinDefinedWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_component_pins_underspecified_warning = z\n .object({\n type: z.literal(\"source_component_pins_underspecified_warning\"),\n source_component_pins_underspecified_warning_id:\n getZodPrefixedIdWithDefault(\n \"source_component_pins_underspecified_warning\",\n ),\n warning_type: z\n .literal(\"source_component_pins_underspecified_warning\")\n .default(\"source_component_pins_underspecified_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n source_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when all ports on a source component are underspecified\",\n )\n\nexport type SourceComponentPinsUnderspecifiedWarningInput = z.input<\n typeof source_component_pins_underspecified_warning\n>\ntype InferredSourceComponentPinsUnderspecifiedWarning = z.infer<\n typeof source_component_pins_underspecified_warning\n>\n\n/**\n * Warning emitted when all ports on a source component are underspecified\n */\nexport interface SourceComponentPinsUnderspecifiedWarning {\n type: \"source_component_pins_underspecified_warning\"\n source_component_pins_underspecified_warning_id: string\n warning_type: \"source_component_pins_underspecified_warning\"\n message: string\n source_component_id: string\n source_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceComponentPinsUnderspecifiedWarning,\n InferredSourceComponentPinsUnderspecifiedWarning\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_pin_must_be_connected_error = base_circuit_json_error\n .extend({\n type: z.literal(\"source_pin_must_be_connected_error\"),\n source_pin_must_be_connected_error_id: getZodPrefixedIdWithDefault(\n \"source_pin_must_be_connected_error\",\n ),\n error_type: z\n .literal(\"source_pin_must_be_connected_error\")\n .default(\"source_pin_must_be_connected_error\"),\n source_component_id: z.string(),\n source_port_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a pin with mustBeConnected attribute is not connected to any trace\",\n )\n\nexport type SourcePinMustBeConnectedErrorInput = z.input<\n typeof source_pin_must_be_connected_error\n>\ntype InferredSourcePinMustBeConnectedError = z.infer<\n typeof source_pin_must_be_connected_error\n>\n\n/**\n * Error emitted when a pin with mustBeConnected attribute is not connected to any trace\n */\nexport interface SourcePinMustBeConnectedError extends BaseCircuitJsonError {\n type: \"source_pin_must_be_connected_error\"\n source_pin_must_be_connected_error_id: string\n error_type: \"source_pin_must_be_connected_error\"\n source_component_id: string\n source_port_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourcePinMustBeConnectedError,\n InferredSourcePinMustBeConnectedError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const unknown_error_finding_part = base_circuit_json_error\n .extend({\n type: z.literal(\"unknown_error_finding_part\"),\n unknown_error_finding_part_id: getZodPrefixedIdWithDefault(\n \"unknown_error_finding_part\",\n ),\n error_type: z\n .literal(\"unknown_error_finding_part\")\n .default(\"unknown_error_finding_part\"),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when an unexpected error occurs while finding a part\",\n )\n\nexport type UnknownErrorFindingPartInput = z.input<\n typeof unknown_error_finding_part\n>\ntype InferredUnknownErrorFindingPart = z.infer<\n typeof unknown_error_finding_part\n>\n\n/**\n * Error emitted when an unexpected error occurs while finding a part.\n * This includes cases where the API returns HTML instead of JSON,\n * network failures, or other unexpected responses.\n */\nexport interface UnknownErrorFindingPart extends BaseCircuitJsonError {\n type: \"unknown_error_finding_part\"\n unknown_error_finding_part_id: string\n error_type: \"unknown_error_finding_part\"\n source_component_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<UnknownErrorFindingPart, InferredUnknownErrorFindingPart>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_part_not_found_warning = z\n .object({\n type: z.literal(\"source_part_not_found_warning\"),\n source_part_not_found_warning_id: getZodPrefixedIdWithDefault(\n \"source_part_not_found_warning\",\n ),\n warning_type: z\n .literal(\"source_part_not_found_warning\")\n .default(\"source_part_not_found_warning\"),\n message: z.string(),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n supplier_name: supplier_name.optional(),\n manufacturer_part_number: z.string().optional(),\n supplier_part_number: z.string().optional(),\n part_name: z.string().optional(),\n })\n .describe(\"Warning emitted when a requested part can not be found\")\n\nexport type SourcePartNotFoundWarningInput = z.input<\n typeof source_part_not_found_warning\n>\ntype InferredSourcePartNotFoundWarning = z.infer<\n typeof source_part_not_found_warning\n>\n\n/**\n * Warning emitted when a requested part can not be found\n */\nexport interface SourcePartNotFoundWarning {\n type: \"source_part_not_found_warning\"\n source_part_not_found_warning_id: string\n warning_type: \"source_part_not_found_warning\"\n message: string\n source_component_id?: string\n subcircuit_id?: string\n supplier_name?: SupplierName\n manufacturer_part_number?: string\n supplier_part_number?: string\n part_name?: string\n}\n\nexpectTypesMatch<SourcePartNotFoundWarning, InferredSourcePartNotFoundWarning>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_confusing_net_name_warning = z\n .object({\n type: z.literal(\"source_confusing_net_name_warning\"),\n source_confusing_net_name_warning_id: getZodPrefixedIdWithDefault(\n \"source_confusing_net_name_warning\",\n ),\n warning_type: z\n .literal(\"source_confusing_net_name_warning\")\n .default(\"source_confusing_net_name_warning\"),\n message: z.string(),\n source_net_ids: z.array(z.string()).min(2),\n net_name: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when electrically disconnected source nets share a name\",\n )\n\nexport type SourceConfusingNetNameWarningInput = z.input<\n typeof source_confusing_net_name_warning\n>\ntype InferredSourceConfusingNetNameWarning = z.infer<\n typeof source_confusing_net_name_warning\n>\n\n/**\n * Warning emitted when electrically disconnected source nets share a name\n */\nexport interface SourceConfusingNetNameWarning {\n type: \"source_confusing_net_name_warning\"\n source_confusing_net_name_warning_id: string\n warning_type: \"source_confusing_net_name_warning\"\n message: string\n source_net_ids: string[]\n net_name: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SourceConfusingNetNameWarning,\n InferredSourceConfusingNetNameWarning\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** A routed length in mm, or an offset from the longest endpoint Manhattan distance.\n * Explicit references are resolved source traces; omitted references use the bus\n * members and length_match_source_trace_ids. */\nexport type SourceBusRouteLength =\n | number\n | {\n reference: \"longest_manhattan\"\n source_trace_ids?: string[]\n offset?: number\n }\n\n/** Centerline separation in mm or a multiple of the larger local trace width. */\nexport type SourceBusTraceSpacing = number | { width_multiplier: number }\n\nconst route_length = z.union([\n z.number().nonnegative().finite(),\n z.object({\n reference: z.literal(\"longest_manhattan\"),\n source_trace_ids: z.array(z.string()).min(1).optional(),\n offset: z.number().finite().optional(),\n }),\n])\nconst trace_spacing = z.union([\n z.number().positive().finite(),\n z.object({ width_multiplier: z.number().positive().finite() }),\n])\n\n/** A group of resolved source traces with a maximum routed-length difference. */\nexport interface SourceBus {\n type: \"source_bus\"\n source_bus_id: string\n name?: string\n source_trace_ids: string[]\n /** Maximum difference between the longest and shortest member, in millimeters. */\n max_length_skew?: number\n /** Intended single-ended characteristic impedance, in ohms. */\n target_impedance?: number\n /** Intended differential characteristic impedance, in ohms. */\n target_differential_impedance?: number\n /** Ordered polarity for a resolved point-to-point differential pair. */\n differential_pair?: {\n positive_source_trace_id: string\n negative_source_trace_id: string\n trace_gap?: number\n max_uncoupled_length?: number\n }\n /** Additional traces for length comparison, without changing electrical membership. */\n length_match_source_trace_ids?: string[]\n min_length?: SourceBusRouteLength\n max_length?: SourceBusRouteLength\n target_length?: SourceBusRouteLength\n length_tolerance?: number\n /** Within this bus, excluding declared differential partners. */\n pcb_trace_spacing?: SourceBusTraceSpacing\n /** To all signals outside this bus or pair. */\n pcb_spacing_to_other_signals?: SourceBusTraceSpacing\n target_impedance_min?: number\n target_impedance_max?: number\n target_differential_impedance_min?: number\n target_differential_impedance_max?: number\n subcircuit_id?: string\n}\n\nexport const source_bus = z.object({\n type: z.literal(\"source_bus\"),\n source_bus_id: z.string(),\n name: z.string().optional(),\n source_trace_ids: z.array(z.string()).min(1),\n max_length_skew: z.number().nonnegative().finite().optional(),\n target_impedance: z.number().positive().finite().optional(),\n target_differential_impedance: z.number().positive().finite().optional(),\n differential_pair: z\n .object({\n positive_source_trace_id: z.string(),\n negative_source_trace_id: z.string(),\n trace_gap: z.number().positive().finite().optional(),\n max_uncoupled_length: z.number().nonnegative().finite().optional(),\n })\n .optional(),\n length_match_source_trace_ids: z.array(z.string()).min(1).optional(),\n min_length: route_length.optional(),\n max_length: route_length.optional(),\n target_length: route_length.optional(),\n length_tolerance: z.number().nonnegative().finite().optional(),\n pcb_trace_spacing: trace_spacing.optional(),\n pcb_spacing_to_other_signals: trace_spacing.optional(),\n target_impedance_min: z.number().positive().finite().optional(),\n target_impedance_max: z.number().positive().finite().optional(),\n target_differential_impedance_min: z.number().positive().finite().optional(),\n target_differential_impedance_max: z.number().positive().finite().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SourceBusInput = z.input<typeof source_bus>\nexpectTypesMatch<SourceBus, z.infer<typeof source_bus>>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"../base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\n/** An unexpected runtime failure while generating or validating a circuit. */\nexport const source_runtime_error = base_circuit_json_error\n .pick({ message: true, error_type: true })\n .extend({\n type: z.literal(\"source_runtime_error\"),\n source_runtime_error_id: getZodPrefixedIdWithDefault(\n \"source_runtime_error\",\n ),\n error_type: z\n .literal(\"source_runtime_error\")\n .default(\"source_runtime_error\"),\n phase_name: z.string().optional(),\n })\n .describe(\n \"An unexpected runtime failure while generating or validating a circuit\",\n )\n\nexport type SourceRuntimeErrorInput = z.input<typeof source_runtime_error>\nexport interface SourceRuntimeError\n extends Pick<BaseCircuitJsonError, \"message\" | \"error_type\"> {\n type: \"source_runtime_error\"\n source_runtime_error_id: string\n error_type: \"source_runtime_error\"\n phase_name?: string\n}\nexpectTypesMatch<SourceRuntimeError, z.infer<typeof source_runtime_error>>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicBox {\n type: \"schematic_box\"\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n width: number\n height: number\n is_dashed: boolean\n x: number\n y: number\n subcircuit_id?: string\n}\n\nexport const schematic_box = z\n .object({\n type: z.literal(\"schematic_box\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n width: distance,\n height: distance,\n is_dashed: z.boolean().default(false),\n x: distance,\n y: distance,\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a box on the schematic\")\n\nexport type SchematicBoxInput = z.input<typeof schematic_box>\ntype InferredSchematicBox = z.infer<typeof schematic_box>\n\nexpectTypesMatch<SchematicBox, InferredSchematicBox>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { type Point, point } from \"../common/point\"\nimport { distance } from \"../units\"\n\nexport interface SchematicPath {\n type: \"schematic_path\"\n schematic_path_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n fill_color?: string\n is_filled?: boolean\n is_dashed: boolean\n stroke_width?: number | null\n stroke_color?: string\n dash_length?: number\n dash_gap?: number\n points: Point[]\n subcircuit_id?: string\n}\n\nexport const schematic_path = z.object({\n type: z.literal(\"schematic_path\"),\n schematic_path_id: getZodPrefixedIdWithDefault(\"schematic_path\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n fill_color: z.string().optional(),\n is_filled: z.boolean().optional(),\n is_dashed: z.boolean().default(false),\n stroke_width: distance.nullable().optional(),\n stroke_color: z.string().optional(),\n dash_length: distance.optional(),\n dash_gap: distance.optional(),\n points: z.array(point),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SchematicPathInput = z.input<typeof schematic_path>\ntype InferredSchematicPath = z.infer<typeof schematic_path>\n\nexpectTypesMatch<SchematicPath, InferredSchematicPath>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { size, type Size } from \"../common/size\"\nimport { length } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_pin_styles = z.record(\n z.object({\n left_margin: length.optional(),\n right_margin: length.optional(),\n top_margin: length.optional(),\n bottom_margin: length.optional(),\n }),\n)\n\nexport interface SchematicPortArrangementBySize {\n left_size: number\n right_size: number\n top_size?: number\n bottom_size?: number\n}\n\nexport interface SchematicPortArrangementBySides {\n left_side?: { pins: number[]; direction?: \"top-to-bottom\" | \"bottom-to-top\" }\n right_side?: { pins: number[]; direction?: \"top-to-bottom\" | \"bottom-to-top\" }\n top_side?: { pins: number[]; direction?: \"left-to-right\" | \"right-to-left\" }\n bottom_side?: {\n pins: number[]\n direction?: \"left-to-right\" | \"right-to-left\"\n }\n}\n\nexport type SchematicPortArrangement =\n | SchematicPortArrangementBySize\n | SchematicPortArrangementBySides\n\nexport interface SchematicComponent {\n type: \"schematic_component\"\n size: Size\n center: Point\n source_component_id?: string\n schematic_component_id: string\n schematic_sheet_id?: string\n schematic_symbol_id?: string\n pin_spacing?: number\n pin_styles?: Record<\n string,\n {\n left_margin?: number\n right_margin?: number\n top_margin?: number\n bottom_margin?: number\n }\n >\n box_width?: number\n symbol_name?: string\n port_arrangement?: SchematicPortArrangement\n port_labels?: Record<string, string>\n symbol_display_value?: string\n subcircuit_id?: string\n schematic_group_id?: string\n is_schematic_group?: boolean\n source_group_id?: string\n is_box_with_pins: boolean\n}\n\nexport const schematic_component_port_arrangement_by_size = z.object({\n left_size: z.number(),\n right_size: z.number(),\n top_size: z.number().optional(),\n bottom_size: z.number().optional(),\n})\n\nexpectTypesMatch<\n SchematicPortArrangementBySize,\n z.infer<typeof schematic_component_port_arrangement_by_size>\n>(true)\n\nexport const schematic_component_port_arrangement_by_sides = z.object({\n left_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n right_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n top_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n bottom_side: z\n .object({\n pins: z.array(z.number()),\n // @ts-ignore\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n})\n\nexpectTypesMatch<\n SchematicPortArrangementBySides,\n z.infer<typeof schematic_component_port_arrangement_by_sides>\n>(true)\n\nexport const port_arrangement = z.union([\n schematic_component_port_arrangement_by_size,\n schematic_component_port_arrangement_by_sides,\n])\n\nexport const schematic_component = z.object({\n type: z.literal(\"schematic_component\"),\n size,\n center: point,\n source_component_id: z.string().optional(),\n schematic_component_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n pin_spacing: length.optional(),\n pin_styles: schematic_pin_styles.optional(),\n box_width: length.optional(),\n symbol_name: z.string().optional(),\n port_arrangement: port_arrangement.optional(),\n port_labels: z.record(z.string()).optional(),\n symbol_display_value: z.string().optional(),\n subcircuit_id: z.string().optional(),\n schematic_group_id: z.string().optional(),\n is_schematic_group: z.boolean().optional(),\n source_group_id: z.string().optional(),\n is_box_with_pins: z.boolean().optional().default(true),\n})\n\nexport type SchematicComponentInput = z.input<typeof schematic_component>\ntype InferredSchematicComponent = z.infer<typeof schematic_component>\n\nexpectTypesMatch<SchematicComponent, InferredSchematicComponent>(true)\n","import { kicadSymbolMetadata } from \"src/common/kicadSymbolMetadata\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nconst schematicSymbolMetadata = z\n .object({\n kicad_symbol: kicadSymbolMetadata.optional(),\n })\n .catchall(z.unknown())\n\nexport type SchematicSymbolMetadata = z.infer<typeof schematicSymbolMetadata>\n\nexport interface SchematicSymbol {\n type: \"schematic_symbol\"\n schematic_symbol_id: string\n name?: string\n metadata?: SchematicSymbolMetadata\n}\n\nexport const schematic_symbol = z\n .object({\n type: z.literal(\"schematic_symbol\"),\n schematic_symbol_id: z.string(),\n name: z.string().optional(),\n metadata: schematicSymbolMetadata.optional(),\n })\n .describe(\n \"Defines a named schematic symbol that can be referenced by components.\",\n )\n\nexport type SchematicSymbolInput = z.input<typeof schematic_symbol>\ntype InferredSchematicSymbol = z.infer<typeof schematic_symbol>\n\nexpectTypesMatch<SchematicSymbol, InferredSchematicSymbol>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { distance } from \"../units\"\n\n/** Draws a styled line on the schematic */\nexport interface SchematicLine {\n type: \"schematic_line\"\n schematic_line_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n x1: number\n y1: number\n x2: number\n y2: number\n stroke_width?: number | null\n color: string\n is_dashed: boolean\n dash_length?: number\n dash_gap?: number\n subcircuit_id?: string\n}\n\nexport const schematic_line = z\n .object({\n type: z.literal(\"schematic_line\"),\n schematic_line_id: getZodPrefixedIdWithDefault(\"schematic_line\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_dashed: z.boolean().default(false),\n dash_length: distance.optional(),\n dash_gap: distance.optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled line on the schematic\")\n\nexport type SchematicLineInput = z.input<typeof schematic_line>\ntype InferredSchematicLine = z.infer<typeof schematic_line>\n\nexpectTypesMatch<SchematicLine, InferredSchematicLine>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { distance, rotation } from \"../units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** Draws a styled rectangle on the schematic */\nexport interface SchematicRect {\n type: \"schematic_rect\"\n schematic_rect_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n center: Point\n width: number\n height: number\n rotation: number\n stroke_width?: number | null\n color: string\n is_filled: boolean\n fill_color?: string\n is_dashed: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_rect = z\n .object({\n type: z.literal(\"schematic_rect\"),\n schematic_rect_id: getZodPrefixedIdWithDefault(\"schematic_rect\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n center: point,\n width: distance,\n height: distance,\n rotation: rotation.default(0),\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_filled: z.boolean().default(false),\n fill_color: z.string().optional(),\n is_dashed: z.boolean().default(false),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled rectangle on the schematic\")\n\nexport type SchematicRectInput = z.input<typeof schematic_rect>\ntype InferredSchematicRect = z.infer<typeof schematic_rect>\n\nexpectTypesMatch<SchematicRect, InferredSchematicRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { distance } from \"../units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** Draws a styled circle on the schematic */\nexport interface SchematicCircle {\n type: \"schematic_circle\"\n schematic_circle_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n center: Point\n radius: number\n stroke_width?: number | null\n color: string\n is_filled: boolean\n fill_color?: string\n is_dashed: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_circle = z\n .object({\n type: z.literal(\"schematic_circle\"),\n schematic_circle_id: getZodPrefixedIdWithDefault(\"schematic_circle\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n center: point,\n radius: distance,\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_filled: z.boolean().default(false),\n fill_color: z.string().optional(),\n is_dashed: z.boolean().default(false),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled circle on the schematic\")\n\nexport type SchematicCircleInput = z.input<typeof schematic_circle>\ntype InferredSchematicCircle = z.infer<typeof schematic_circle>\n\nexpectTypesMatch<SchematicCircle, InferredSchematicCircle>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { distance, rotation } from \"../units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** Draws a styled arc on the schematic */\nexport interface SchematicArc {\n type: \"schematic_arc\"\n schematic_arc_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n center: Point\n radius: number\n start_angle_degrees: number\n end_angle_degrees: number\n direction: \"clockwise\" | \"counterclockwise\"\n stroke_width?: number | null\n color: string\n is_dashed: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_arc = z\n .object({\n type: z.literal(\"schematic_arc\"),\n schematic_arc_id: getZodPrefixedIdWithDefault(\"schematic_arc\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n center: point,\n radius: distance,\n start_angle_degrees: rotation,\n end_angle_degrees: rotation,\n direction: z\n .enum([\"clockwise\", \"counterclockwise\"])\n .default(\"counterclockwise\"),\n stroke_width: distance.nullable().optional(),\n color: z.string().default(\"#000000\"),\n is_dashed: z.boolean().default(false),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Draws a styled arc on the schematic\")\n\nexport type SchematicArcInput = z.input<typeof schematic_arc>\ntype InferredSchematicArc = z.infer<typeof schematic_arc>\n\nexpectTypesMatch<SchematicArc, InferredSchematicArc>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicTraceEdge {\n from: {\n x: number\n y: number\n }\n to: {\n x: number\n y: number\n }\n is_crossing?: boolean\n from_schematic_port_id?: string\n to_schematic_port_id?: string\n}\n\nexport interface SchematicTrace {\n type: \"schematic_trace\"\n schematic_trace_id: string\n schematic_sheet_id?: string\n source_trace_id?: string\n junctions: {\n x: number\n y: number\n }[]\n edges: SchematicTraceEdge[]\n subcircuit_id?: string\n /** Optional for now, but will be required in a future release */\n subcircuit_connectivity_map_key?: string\n}\n\nexport const schematic_trace = z.object({\n type: z.literal(\"schematic_trace\"),\n schematic_trace_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n junctions: z.array(\n z.object({\n x: z.number(),\n y: z.number(),\n }),\n ),\n edges: z.array(\n z.object({\n from: z.object({\n x: z.number(),\n y: z.number(),\n }),\n to: z.object({\n x: z.number(),\n y: z.number(),\n }),\n is_crossing: z.boolean().optional(),\n from_schematic_port_id: z.string().optional(),\n to_schematic_port_id: z.string().optional(),\n }),\n ),\n subcircuit_id: z.string().optional(),\n // TODO: make required in a future release\n subcircuit_connectivity_map_key: z.string().optional(),\n})\n\nexport type SchematicTraceInput = z.input<typeof schematic_trace>\ntype InferredSchematicTrace = z.infer<typeof schematic_trace>\n\nexpectTypesMatch<SchematicTraceInput, InferredSchematicTrace>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { ninePointAnchor } from \"src/common/NinePointAnchor\"\nimport type { NinePointAnchor } from \"src/common/NinePointAnchor\"\nimport type { FivePointAnchor } from \"src/common/FivePointAnchor\"\nimport { fivePointAnchor } from \"src/common/FivePointAnchor\"\nimport type { SchematicTextPart } from \"./schematic_text_part\"\nimport { schematic_text_part } from \"./schematic_text_part\"\n\nexport interface SchematicText {\n type: \"schematic_text\"\n schematic_sheet_id?: string\n schematic_component_id?: string\n schematic_symbol_id?: string\n schematic_text_id: string\n /**\n * Set when the text annotates a trace rather than a component, as an inline\n * net label does - the net name drawn alongside a point-to-point wire instead\n * of as an anchored `schematic_net_label`. Lets consumers tell such a label\n * apart from free-standing text and resolve the net it belongs to.\n */\n source_trace_id?: string\n text: string\n /**\n * Ordered parts with per-part display options.\n * Consumers that do not support styled text can use `text`.\n */\n text_parts?: SchematicTextPart[]\n /** Display-only superscript suffix, e.g. \"1\" in GND¹ for an inline net label. */\n display_superscript?: string\n font_size: number\n position: {\n x: number\n y: number\n }\n rotation: number\n anchor: NinePointAnchor | FivePointAnchor\n color: string\n subcircuit_id?: string\n}\n\nexport const schematic_text = z.object({\n type: z.literal(\"schematic_text\"),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n schematic_symbol_id: z.string().optional(),\n schematic_text_id: z.string(),\n source_trace_id: z.string().optional(),\n text: z.string(),\n text_parts: z.array(schematic_text_part).min(1).optional(),\n display_superscript: z.string().optional(),\n font_size: z.number().default(0.18),\n position: z.object({\n x: distance,\n y: distance,\n }),\n rotation: z.number().default(0),\n anchor: z\n .union([fivePointAnchor.describe(\"legacy\"), ninePointAnchor])\n .default(\"center\"),\n color: z.string().default(\"#000000\"),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SchematicTextInput = z.input<typeof schematic_text>\ntype InferredSchematicText = z.infer<typeof schematic_text>\n\nexpectTypesMatch<SchematicText, InferredSchematicText>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport type FivePointAnchor = \"center\" | \"left\" | \"right\" | \"top\" | \"bottom\"\n\nexport const fivePointAnchor = z.enum([\n \"center\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n])\n\ntype InferredFivePointAnchor = z.infer<typeof fivePointAnchor>\n\nexpectTypesMatch<FivePointAnchor, InferredFivePointAnchor>(true)\n","import { z } from \"zod\"\n\n/** One part of schematic text with its display options. */\nexport interface SchematicTextPart {\n /** The literal text displayed for this part. */\n text: string\n /** Draw a line above this part, typically indicating an active-low signal. */\n is_overlined?: boolean\n}\n\nexport const schematic_text_part = z.object({\n text: z.string(),\n is_overlined: z.boolean().optional(),\n})\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport type { SchematicTextPart } from \"./schematic_text_part\"\nimport { schematic_text_part } from \"./schematic_text_part\"\n\nexport interface SchematicPort {\n type: \"schematic_port\"\n schematic_port_id: string\n source_port_id: string\n schematic_sheet_id?: string\n schematic_component_id?: string\n center: Point\n facing_direction?: \"up\" | \"down\" | \"left\" | \"right\"\n distance_from_component_edge?: number\n side_of_component?: \"top\" | \"bottom\" | \"left\" | \"right\"\n true_ccw_index?: number\n pin_number?: number\n display_pin_label?: string\n /**\n * Ordered parts of the pin label with per-part styling.\n * For example, `A~{BC}D` is represented as `A`, overlined `BC`, then `D`.\n * Consumers that do not support styled text can use `display_pin_label`.\n */\n display_pin_label_text_parts?: SchematicTextPart[]\n display_pin_label_font_size?: number\n subcircuit_id?: string\n is_connected?: boolean\n is_internal_circuit_port?: boolean\n is_overlapping_internal_circuit_port?: boolean\n has_input_arrow?: boolean\n has_output_arrow?: boolean\n is_drawn_with_inversion_circle?: boolean\n}\n\nexport const schematic_port = z\n .object({\n type: z.literal(\"schematic_port\"),\n schematic_port_id: z.string(),\n source_port_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n center: point,\n facing_direction: z.enum([\"up\", \"down\", \"left\", \"right\"]).optional(),\n distance_from_component_edge: z.number().optional(),\n side_of_component: z.enum([\"top\", \"bottom\", \"left\", \"right\"]).optional(),\n true_ccw_index: z.number().optional(),\n pin_number: z.number().optional(),\n display_pin_label: z.string().optional(),\n display_pin_label_text_parts: z\n .array(schematic_text_part)\n .min(1)\n .optional(),\n display_pin_label_font_size: z.number().positive().finite().optional(),\n subcircuit_id: z.string().optional(),\n is_connected: z.boolean().optional(),\n is_internal_circuit_port: z.boolean().optional(),\n is_overlapping_internal_circuit_port: z.boolean().optional(),\n has_input_arrow: z.boolean().optional(),\n has_output_arrow: z.boolean().optional(),\n is_drawn_with_inversion_circle: z.boolean().optional(),\n })\n .describe(\"Defines a port on a schematic component\")\n\nexport type SchematicPortInput = z.input<typeof schematic_port>\ntype InferredSchematicPort = z.infer<typeof schematic_port>\n\nexpectTypesMatch<SchematicPort, InferredSchematicPort>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\n\nexport interface SchematicNetLabel {\n type: \"schematic_net_label\"\n schematic_net_label_id: string\n schematic_sheet_id?: string\n schematic_trace_id?: string\n source_trace_id?: string\n source_net_id: string\n center: Point\n anchor_position?: Point | undefined\n anchor_side: \"top\" | \"bottom\" | \"left\" | \"right\"\n text: string\n /** Display-only superscript suffix, e.g. \"1\" in GND¹. Does not change net identity. */\n display_superscript?: string\n symbol_name?: string | undefined\n /**\n * When true the net label can be repositioned. When false the label's\n * position is fixed by the element it is attached to.\n */\n is_movable?: boolean\n subcircuit_id?: string\n}\n\nexport const schematic_net_label = z.object({\n type: z.literal(\"schematic_net_label\"),\n schematic_net_label_id: getZodPrefixedIdWithDefault(\"schematic_net_label\"),\n schematic_sheet_id: z.string().optional(),\n schematic_trace_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n source_net_id: z.string(),\n center: point,\n anchor_position: point.optional(),\n anchor_side: z.enum([\"top\", \"bottom\", \"left\", \"right\"]),\n text: z.string(),\n display_superscript: z.string().optional(),\n symbol_name: z.string().optional(),\n is_movable: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SchematicNetLabelInput = z.input<typeof schematic_net_label>\nexport type InferredSchematicNetLabel = z.infer<typeof schematic_net_label>\n\nexpectTypesMatch<SchematicNetLabel, InferredSchematicNetLabel>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicError extends BaseCircuitJsonError {\n type: \"schematic_error\"\n schematic_error_id: string\n error_type: \"schematic_port_not_found\"\n subcircuit_id?: string\n}\n\nexport const schematic_error = base_circuit_json_error\n .extend({\n type: z.literal(\"schematic_error\"),\n schematic_error_id: z.string(),\n // eventually each error type should be broken out into a dir of files\n error_type: z\n .literal(\"schematic_port_not_found\")\n .default(\"schematic_port_not_found\"),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a schematic error on the schematic\")\n\nexport type SchematicErrorInput = z.input<typeof schematic_error>\ntype InferredSchematicError = z.infer<typeof schematic_error>\n\nexpectTypesMatch<SchematicError, InferredSchematicError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_layout_error = base_circuit_json_error\n .extend({\n type: z.literal(\"schematic_layout_error\"),\n schematic_layout_error_id: getZodPrefixedIdWithDefault(\n \"schematic_layout_error\",\n ),\n error_type: z\n .literal(\"schematic_layout_error\")\n .default(\"schematic_layout_error\"),\n source_group_id: z.string(),\n schematic_group_id: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Error emitted when schematic layout fails for a group\")\n\nexport type SchematicLayoutErrorInput = z.input<typeof schematic_layout_error>\ntype InferredSchematicLayoutError = z.infer<typeof schematic_layout_error>\n\nexport interface SchematicLayoutError extends BaseCircuitJsonError {\n type: \"schematic_layout_error\"\n schematic_layout_error_id: string\n error_type: \"schematic_layout_error\"\n source_group_id: string\n schematic_group_id: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SchematicLayoutError, InferredSchematicLayoutError>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { size, type Size } from \"../common/size\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_debug_object_base = z.object({\n type: z.literal(\"schematic_debug_object\"),\n label: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport const schematic_debug_rect = schematic_debug_object_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n size: size,\n})\n\nexport const schematic_debug_line = schematic_debug_object_base.extend({\n shape: z.literal(\"line\"),\n start: point,\n end: point,\n})\n\nexport const schematic_debug_point = schematic_debug_object_base.extend({\n shape: z.literal(\"point\"),\n center: point,\n})\n\nexport const schematic_debug_object = z.discriminatedUnion(\"shape\", [\n schematic_debug_rect,\n schematic_debug_line,\n schematic_debug_point,\n])\ntype InferredSchematicDebugObject = z.infer<typeof schematic_debug_object>\n\nexport interface SchematicDebugRect {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"rect\"\n center: Point\n size: Size\n subcircuit_id?: string\n}\n\nexport interface SchematicDebugLine {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"line\"\n start: Point\n end: Point\n subcircuit_id?: string\n}\n\nexport interface SchematicDebugPoint {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"point\"\n center: Point\n subcircuit_id?: string\n}\n\nexport type SchematicDebugObject =\n | SchematicDebugRect\n | SchematicDebugLine\n | SchematicDebugPoint\n\nexpectTypesMatch<SchematicDebugObject, InferredSchematicDebugObject>(true)\nexport type SchematicDebugObjectInput = z.input<typeof schematic_debug_object>\n","import { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { voltage } from \"src/units\"\nimport {\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common/NinePointAnchor\"\n\nexport interface SchematicVoltageProbe {\n type: \"schematic_voltage_probe\"\n schematic_voltage_probe_id: string\n schematic_sheet_id?: string\n source_component_id?: string\n name?: string\n position: Point\n schematic_trace_id: string\n voltage?: number\n subcircuit_id?: string\n color?: string\n label_alignment?: NinePointAnchor\n}\n\nexport const schematic_voltage_probe = z\n .object({\n type: z.literal(\"schematic_voltage_probe\"),\n schematic_voltage_probe_id: z.string(),\n schematic_sheet_id: z.string().optional(),\n source_component_id: z.string().optional(),\n name: z.string().optional(),\n position: point,\n schematic_trace_id: z.string(),\n voltage: voltage.optional(),\n subcircuit_id: z.string().optional(),\n color: z.string().optional(),\n label_alignment: ninePointAnchor.optional(),\n })\n .describe(\"Defines a voltage probe measurement point on a schematic trace\")\n\nexport type SchematicVoltageProbeInput = z.input<typeof schematic_voltage_probe>\ntype InferredSchematicVoltageProbe = z.infer<typeof schematic_voltage_probe>\n\nexpectTypesMatch<SchematicVoltageProbe, InferredSchematicVoltageProbe>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_manual_edit_conflict_warning = z\n .object({\n type: z.literal(\"schematic_manual_edit_conflict_warning\"),\n schematic_manual_edit_conflict_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_manual_edit_conflict_warning\",\n ),\n warning_type: z\n .literal(\"schematic_manual_edit_conflict_warning\")\n .default(\"schematic_manual_edit_conflict_warning\"),\n message: z.string(),\n schematic_component_id: z.string(),\n schematic_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n source_component_id: z.string(),\n })\n .describe(\n \"Warning emitted when a component has both manual placement and explicit schX/schY coordinates\",\n )\n\nexport type SchematicManualEditConflictWarningInput = z.input<\n typeof schematic_manual_edit_conflict_warning\n>\ntype InferredSchematicManualEditConflictWarning = z.infer<\n typeof schematic_manual_edit_conflict_warning\n>\n\n/**\n * Warning emitted when a component has both manual placement (via manualEdits) and explicit schX/schY coordinates\n */\nexport interface SchematicManualEditConflictWarning {\n type: \"schematic_manual_edit_conflict_warning\"\n schematic_manual_edit_conflict_warning_id: string\n warning_type: \"schematic_manual_edit_conflict_warning\"\n message: string\n schematic_component_id: string\n schematic_group_id?: string\n subcircuit_id?: string\n source_component_id: string\n}\n\nexpectTypesMatch<\n SchematicManualEditConflictWarning,\n InferredSchematicManualEditConflictWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_component_overlap_warning = z\n .object({\n type: z.literal(\"schematic_component_overlap_warning\"),\n schematic_component_overlap_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_component_overlap_warning\",\n ),\n warning_type: z\n .literal(\"schematic_component_overlap_warning\")\n .default(\"schematic_component_overlap_warning\"),\n message: z.string(),\n schematic_component_ids: z.tuple([z.string(), z.string()]),\n schematic_sheet_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when the rendered bounds of two schematic components overlap\",\n )\n\nexport type SchematicComponentOverlapWarningInput = z.input<\n typeof schematic_component_overlap_warning\n>\ntype InferredSchematicComponentOverlapWarning = z.infer<\n typeof schematic_component_overlap_warning\n>\n\n/** Warning emitted when the rendered bounds of two schematic components overlap */\nexport interface SchematicComponentOverlapWarning {\n type: \"schematic_component_overlap_warning\"\n schematic_component_overlap_warning_id: string\n warning_type: \"schematic_component_overlap_warning\"\n message: string\n schematic_component_ids: [string, string]\n schematic_sheet_id?: string\n}\n\nexpectTypesMatch<\n SchematicComponentOverlapWarning,\n InferredSchematicComponentOverlapWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_component_styling_warning = z\n .object({\n type: z.literal(\"schematic_component_styling_warning\"),\n schematic_component_styling_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_component_styling_warning\",\n ),\n warning_type: z\n .literal(\"schematic_component_styling_warning\")\n .default(\"schematic_component_styling_warning\"),\n message: z.string(),\n schematic_component_id: z.string(),\n styling_issue_type: z.string(),\n schematic_port_ids: z.array(z.string()).optional(),\n source_component_id: z.string().optional(),\n schematic_sheet_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a schematic component has a visual styling issue\",\n )\n\nexport type SchematicComponentStylingWarningInput = z.input<\n typeof schematic_component_styling_warning\n>\ntype InferredSchematicComponentStylingWarning = z.infer<\n typeof schematic_component_styling_warning\n>\n\n/** Warning emitted when a schematic component has a visual styling issue */\nexport interface SchematicComponentStylingWarning {\n type: \"schematic_component_styling_warning\"\n schematic_component_styling_warning_id: string\n warning_type: \"schematic_component_styling_warning\"\n message: string\n schematic_component_id: string\n styling_issue_type: string\n schematic_port_ids?: string[]\n source_component_id?: string\n schematic_sheet_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SchematicComponentStylingWarning,\n InferredSchematicComponentStylingWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_sheet_styling_warning = z\n .object({\n type: z.literal(\"schematic_sheet_styling_warning\"),\n schematic_sheet_styling_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_sheet_styling_warning\",\n ),\n warning_type: z\n .literal(\"schematic_sheet_styling_warning\")\n .default(\"schematic_sheet_styling_warning\"),\n message: z.string(),\n schematic_sheet_id: z.string(),\n styling_issue_type: z.literal(\"non_default_sheet_size\"),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Style warning emitted when a schematic sheet uses a non-default size\",\n )\n\nexport type SchematicSheetStylingWarningInput = z.input<\n typeof schematic_sheet_styling_warning\n>\ntype InferredSchematicSheetStylingWarning = z.infer<\n typeof schematic_sheet_styling_warning\n>\n\n/** Style warning emitted when a schematic sheet uses a non-default size. */\nexport interface SchematicSheetStylingWarning {\n type: \"schematic_sheet_styling_warning\"\n schematic_sheet_styling_warning_id: string\n warning_type: \"schematic_sheet_styling_warning\"\n message: string\n schematic_sheet_id: string\n styling_issue_type: \"non_default_sheet_size\"\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SchematicSheetStylingWarning,\n InferredSchematicSheetStylingWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const schematic_element_outside_sheet_warning = z\n .object({\n type: z.literal(\"schematic_element_outside_sheet_warning\"),\n schematic_element_outside_sheet_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_element_outside_sheet_warning\",\n ),\n warning_type: z\n .literal(\"schematic_element_outside_sheet_warning\")\n .default(\"schematic_element_outside_sheet_warning\"),\n message: z.string(),\n schematic_sheet_id: z.string(),\n schematic_element_type: z.enum([\n \"schematic_component\",\n \"schematic_net_label\",\n \"schematic_trace\",\n ]),\n schematic_element_id: z.string(),\n })\n .describe(\n \"Warning emitted when a schematic component, net label, or trace extends outside its schematic sheet\",\n )\n\nexport type SchematicElementOutsideSheetWarningInput = z.input<\n typeof schematic_element_outside_sheet_warning\n>\ntype InferredSchematicElementOutsideSheetWarning = z.infer<\n typeof schematic_element_outside_sheet_warning\n>\n\n/** Warning emitted when a schematic component, net label, or trace extends outside its schematic sheet */\nexport interface SchematicElementOutsideSheetWarning {\n type: \"schematic_element_outside_sheet_warning\"\n schematic_element_outside_sheet_warning_id: string\n warning_type: \"schematic_element_outside_sheet_warning\"\n message: string\n schematic_sheet_id: string\n schematic_element_type:\n | \"schematic_component\"\n | \"schematic_net_label\"\n | \"schematic_trace\"\n schematic_element_id: string\n}\n\nexpectTypesMatch<\n SchematicElementOutsideSheetWarning,\n InferredSchematicElementOutsideSheetWarning\n>(true)\n","import { z } from \"zod\"\nimport { asset, type Asset, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst positiveFiniteDistance = distance.pipe(z.number().positive().finite())\n\nexport const schematic_graphic = z\n .object({\n type: z.literal(\"schematic_graphic\"),\n schematic_graphic_id: getZodPrefixedIdWithDefault(\"schematic_graphic\"),\n schematic_sheet_id: z.string().optional(),\n asset: asset.optional(),\n svg_content: z.string().optional(),\n width: positiveFiniteDistance.optional(),\n height: positiveFiniteDistance.optional(),\n })\n .describe(\n \"References a graphic asset or inline SVG content with optional centered layout bounds on a schematic sheet\",\n )\n .superRefine(({ asset, svg_content }, ctx) => {\n if (asset === undefined && svg_content === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"At least one of asset or svg_content is required\",\n })\n }\n })\n\nexport type SchematicGraphicInput = z.input<typeof schematic_graphic>\ntype InferredSchematicGraphic = z.infer<typeof schematic_graphic>\n\n/** References a graphic asset or inline SVG content on a schematic sheet. */\nexport interface SchematicGraphic {\n type: \"schematic_graphic\"\n schematic_graphic_id: string\n schematic_sheet_id?: string\n /** Optional canonical source asset; at least one graphic source is required. */\n asset?: Asset\n /** Optional inline SVG source or materialized fallback content. */\n svg_content?: string\n /** Positive centered layout width in schematic units. */\n width?: number\n /** Positive centered layout height in schematic units. */\n height?: number\n}\n\nexpectTypesMatch<SchematicGraphic, InferredSchematicGraphic>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_group = z\n .object({\n type: z.literal(\"schematic_group\"),\n schematic_group_id: getZodPrefixedIdWithDefault(\"schematic_group\"),\n schematic_sheet_id: z.string().optional(),\n source_group_id: z.string(),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n width: length,\n height: length,\n center: point,\n schematic_component_ids: z.array(z.string()),\n show_as_schematic_box: z.boolean().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n })\n .describe(\"Defines a group of components on the schematic\")\n\nexport type SchematicGroupInput = z.input<typeof schematic_group>\ntype InferredSchematicGroup = z.infer<typeof schematic_group>\n\n/**\n * Defines a group of components on the schematic\n */\nexport interface SchematicGroup {\n type: \"schematic_group\"\n schematic_group_id: string\n schematic_sheet_id?: string\n source_group_id: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n width: Length\n height: Length\n center: Point\n schematic_component_ids: string[]\n show_as_schematic_box?: boolean\n name?: string\n description?: string\n}\n\nexpectTypesMatch<SchematicGroup, InferredSchematicGroup>(true)\n","import { z } from \"zod\"\nimport {\n getZodPrefixedIdWithDefault,\n ninePointAnchor,\n point,\n type NinePointAnchor,\n type Point,\n} from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_table = z\n .object({\n type: z.literal(\"schematic_table\"),\n schematic_table_id: getZodPrefixedIdWithDefault(\"schematic_table\"),\n schematic_sheet_id: z.string().optional(),\n anchor_position: point,\n column_widths: z.array(distance),\n row_heights: z.array(distance),\n cell_padding: distance.optional(),\n border_width: distance.optional(),\n subcircuit_id: z.string().optional(),\n schematic_component_id: z.string().optional(),\n anchor: ninePointAnchor.optional(),\n })\n .describe(\"Defines a table on the schematic\")\n\nexport type SchematicTableInput = z.input<typeof schematic_table>\ntype InferredSchematicTable = z.infer<typeof schematic_table>\n\n/**\n * Defines a table on the schematic, useful for displaying data in a structured format.\n */\nexport interface SchematicTable {\n type: \"schematic_table\"\n schematic_table_id: string\n schematic_sheet_id?: string\n anchor_position: Point\n column_widths: Length[]\n row_heights: Length[]\n cell_padding?: Length\n border_width?: Length\n subcircuit_id?: string\n schematic_component_id?: string\n anchor?: NinePointAnchor\n}\n\nexpectTypesMatch<SchematicTable, InferredSchematicTable>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_table_cell = z\n .object({\n type: z.literal(\"schematic_table_cell\"),\n schematic_table_cell_id: getZodPrefixedIdWithDefault(\n \"schematic_table_cell\",\n ),\n schematic_sheet_id: z.string().optional(),\n schematic_table_id: z.string(),\n start_row_index: z.number(),\n end_row_index: z.number(),\n start_column_index: z.number(),\n end_column_index: z.number(),\n text: z.string().optional(),\n center: point,\n width: distance,\n height: distance,\n horizontal_align: z.enum([\"left\", \"center\", \"right\"]).optional(),\n vertical_align: z.enum([\"top\", \"middle\", \"bottom\"]).optional(),\n font_size: distance.optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a cell within a schematic_table\")\n\nexport type SchematicTableCellInput = z.input<typeof schematic_table_cell>\ntype InferredSchematicTableCell = z.infer<typeof schematic_table_cell>\n\n/**\n * Defines a cell within a schematic_table\n */\nexport interface SchematicTableCell {\n type: \"schematic_table_cell\"\n schematic_table_cell_id: string\n schematic_sheet_id?: string\n schematic_table_id: string\n start_row_index: number\n end_row_index: number\n start_column_index: number\n end_column_index: number\n text?: string\n center: Point\n width: Length\n height: Length\n horizontal_align?: \"left\" | \"center\" | \"right\"\n vertical_align?: \"top\" | \"middle\" | \"bottom\"\n font_size?: Length\n subcircuit_id?: string\n}\n\nexpectTypesMatch<SchematicTableCell, InferredSchematicTableCell>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const schematic_sheet_size = z.enum([\"a4\", \"ansi_b\"])\nexport type SchematicSheetSize = z.infer<typeof schematic_sheet_size>\n\nexport const schematic_sheet = z\n .object({\n type: z.literal(\"schematic_sheet\"),\n schematic_sheet_id: getZodPrefixedIdWithDefault(\"schematic_sheet\"),\n name: z.string().optional(),\n sheet_index: z.number().optional(),\n sheet_size: schematic_sheet_size.optional(),\n sheet_width: z.number().positive().optional(),\n sheet_height: z.number().positive().optional(),\n subcircuit_id: z.string().optional(),\n outline_color: z.string().optional(),\n })\n .describe(\n \"Defines a schematic sheet or page that components can be placed on\",\n )\n\nexport type SchematicSheetInput = z.input<typeof schematic_sheet>\ntype InferredSchematicSheet = z.infer<typeof schematic_sheet>\n\n/**\n * Defines a schematic sheet or page that components can be placed on.\n */\nexport interface SchematicSheet {\n type: \"schematic_sheet\"\n schematic_sheet_id: string\n name?: string\n sheet_index?: number\n sheet_size?: SchematicSheetSize\n sheet_width?: number\n sheet_height?: number\n subcircuit_id?: string\n outline_color?: string\n}\n\nexpectTypesMatch<SchematicSheet, InferredSchematicSheet>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\n/** Circuit-wide warning: display as a banner, without a target outline or leader. */\nexport const schematic_missing_sheet_warning = z\n .object({\n type: z.literal(\"schematic_missing_sheet_warning\"),\n schematic_missing_sheet_warning_id: getZodPrefixedIdWithDefault(\n \"schematic_missing_sheet_warning\",\n ),\n warning_type: z\n .literal(\"schematic_missing_sheet_warning\")\n .default(\"schematic_missing_sheet_warning\"),\n message: z.string(),\n })\n .describe(\n \"Circuit-wide warning emitted when a schematic has no schematic sheet. Display as a banner without attaching it to a component or drawing a target outline or leader line.\",\n )\n\nexport type SchematicMissingSheetWarningInput = z.input<\n typeof schematic_missing_sheet_warning\n>\ntype InferredSchematicMissingSheetWarning = z.infer<\n typeof schematic_missing_sheet_warning\n>\n\n/** Circuit-wide warning that a schematic has no sheet; has no component target. */\nexport interface SchematicMissingSheetWarning {\n type: \"schematic_missing_sheet_warning\"\n schematic_missing_sheet_warning_id: string\n warning_type: \"schematic_missing_sheet_warning\"\n message: string\n}\n\nexpectTypesMatch<\n SchematicMissingSheetWarning,\n InferredSchematicMissingSheetWarning\n>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const point_with_bulge = z.object({\n x: distance,\n y: distance,\n bulge: z.number().optional(),\n})\n\nexport interface PointWithBulge {\n x: Distance\n y: Distance\n bulge?: number\n}\ntype InferredPointWithBulge = z.infer<typeof point_with_bulge>\nexpectTypesMatch<PointWithBulge, InferredPointWithBulge>(true)\n\nexport const ring = z.object({\n vertices: z.array(point_with_bulge),\n})\n\nexport interface Ring {\n vertices: PointWithBulge[]\n}\ntype InferredRing = z.infer<typeof ring>\nexpectTypesMatch<Ring, InferredRing>(true)\n\nexport const brep_shape = z.object({\n outer_ring: ring,\n inner_rings: z.array(ring).default([]),\n})\n\n/**\n * B-rep shape defined by an outer ring and inner rings (holes).\n */\nexport interface BRepShape {\n /**\n * The outer boundary of the shape. Vertices must be in clockwise order.\n */\n outer_ring: Ring\n /**\n * Inner boundaries (holes). Vertices must be in counter-clockwise order.\n */\n inner_rings: Ring[]\n}\ntype InferredBRepShape = z.infer<typeof brep_shape>\nexpectTypesMatch<BRepShape, InferredBRepShape>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/**\n * The direction a cable or mating part is attached from, named for the side of\n * the board it approaches from.\n *\n * This names a side, not a motion. A receptacle on the +Y edge of the board is\n * `from_top` because that is the side the plug comes from, even though the plug\n * itself moves in -Y as it seats.\n *\n * Names follow the tscircuit 2D convention, i.e. the board as drawn in the PCB\n * view: `top` is +Y, `bottom` is -Y, `left` is -X and `right` is +X. The Z axis\n * uses `above` for +Z and `below` for -Z so that it never collides with the\n * `top`/`bottom` used for the Y axis. Note that this is unrelated to the\n * `layer` field, where \"top\" and \"bottom\" name copper layers rather than\n * directions.\n *\n * Every name has an equivalent Cartesian spelling (`\"from_y_pos\"` and\n * friends). The two are interchangeable on input; parsing normalizes the\n * Cartesian spellings to the named ones, so a parsed `insertion_direction` is\n * always one of the six named values.\n */\nexport type InsertionDirection =\n | \"from_left\"\n | \"from_right\"\n | \"from_top\"\n | \"from_bottom\"\n | \"from_above\"\n | \"from_below\"\n\n/**\n * Cartesian spellings accepted as input for {@link InsertionDirection}.\n *\n * Spelled `_pos`/`_neg` rather than `+`/`-` because Circuit JSON enum values\n * must be snake_case (see `scripts/zod-lint.ts`).\n */\nexport type InsertionDirectionCartesian =\n | \"from_x_neg\"\n | \"from_x_pos\"\n | \"from_y_pos\"\n | \"from_y_neg\"\n | \"from_z_pos\"\n | \"from_z_neg\"\n\n/**\n * Spellings retained only so that existing Circuit JSON and existing sources\n * keep parsing. They normalize to the canonical values on input and are never\n * produced by parsing.\n *\n * @deprecated `from_front` named +Y and `from_back` named -Y, which read as if\n * they described a 3D viewport rather than the board as drawn in the 2D PCB\n * view. Use `from_top` and `from_bottom`. Remove these once no published\n * package still emits them.\n */\nexport type InsertionDirectionDeprecated = \"from_front\" | \"from_back\"\n\nexport type InsertionDirectionInput =\n | InsertionDirection\n | InsertionDirectionCartesian\n | InsertionDirectionDeprecated\n\n/**\n * Maps each accepted spelling to the canonical named value.\n */\nexport const insertionDirectionToCanonical = {\n from_left: \"from_left\",\n from_right: \"from_right\",\n from_top: \"from_top\",\n from_bottom: \"from_bottom\",\n from_above: \"from_above\",\n from_below: \"from_below\",\n from_x_neg: \"from_left\",\n from_x_pos: \"from_right\",\n from_y_pos: \"from_top\",\n from_y_neg: \"from_bottom\",\n from_z_pos: \"from_above\",\n from_z_neg: \"from_below\",\n /** @deprecated use `from_top` */\n from_front: \"from_top\",\n /** @deprecated use `from_bottom` */\n from_back: \"from_bottom\",\n} as const satisfies Record<InsertionDirectionInput, InsertionDirection>\n\n/**\n * The unit vector each canonical direction points along, in board coordinates.\n */\nexport const insertionDirectionToVector = {\n from_left: { x: -1, y: 0, z: 0 },\n from_right: { x: 1, y: 0, z: 0 },\n from_top: { x: 0, y: 1, z: 0 },\n from_bottom: { x: 0, y: -1, z: 0 },\n from_above: { x: 0, y: 0, z: 1 },\n from_below: { x: 0, y: 0, z: -1 },\n} as const satisfies Record<\n InsertionDirection,\n { x: number; y: number; z: number }\n>\n\nexport const insertion_direction = z\n .enum([\n \"from_left\",\n \"from_right\",\n \"from_top\",\n \"from_bottom\",\n \"from_above\",\n \"from_below\",\n \"from_x_neg\",\n \"from_x_pos\",\n \"from_y_pos\",\n \"from_y_neg\",\n \"from_z_pos\",\n \"from_z_neg\",\n // Deprecated, accepted so existing Circuit JSON keeps parsing.\n \"from_front\",\n \"from_back\",\n ])\n .transform((value) => insertionDirectionToCanonical[value])\n .describe(\n 'The side exposing the receptacle where the cable or mating part is attached, following the 2D PCB diagram convention, not a 3D viewport frame. In project coordinate space, \"from_top\" is +Y, \"from_bottom\" -Y, \"from_left\" -X, \"from_right\" +X, \"from_above\" +Z and \"from_below\" -Z. A receptacle on the +Y edge is \"from_top\" even though the plug moves in -Y as it seats. Cartesian spellings such as \"from_y_pos\" are accepted and normalized to the named values, as are the deprecated \"from_front\" (now \"from_top\") and \"from_back\" (now \"from_bottom\").',\n )\n\nexpectTypesMatch<InsertionDirection, z.infer<typeof insertion_direction>>(true)\nexpectTypesMatch<InsertionDirectionInput, z.input<typeof insertion_direction>>(\n true,\n)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\n/**\n * Describes where pin 1 is located on an unrotated, top-view PCB footprint.\n */\nexport const pcb_pin1_location = z.enum([\n \"leftside_top\",\n \"leftside_bottom\",\n \"rightside_top\",\n \"rightside_bottom\",\n \"topside_left\",\n \"topside_right\",\n \"bottomside_left\",\n \"bottomside_right\",\n])\n\ntype InferredPcbPin1Location = z.infer<typeof pcb_pin1_location>\n\nexport type PcbPin1Location =\n | \"leftside_top\"\n | \"leftside_bottom\"\n | \"rightside_top\"\n | \"rightside_bottom\"\n | \"topside_left\"\n | \"topside_right\"\n | \"bottomside_left\"\n | \"bottomside_right\"\n\nexpectTypesMatch<PcbPin1Location, InferredPcbPin1Location>(true)\n\nexport type PcbPin1LocationRotation = 0 | 90 | 180 | 270\n\nconst pin1LocationRotationCycles: readonly (readonly PcbPin1Location[])[] = [\n [\n \"leftside_top\",\n \"bottomside_left\",\n \"rightside_bottom\",\n \"topside_right\",\n ],\n [\n \"leftside_bottom\",\n \"bottomside_right\",\n \"rightside_top\",\n \"topside_left\",\n ],\n]\n\n/**\n * Returns the counter-clockwise rotation that maps one pin 1 location to\n * another, or null when the locations differ by reflection rather than\n * rotation.\n */\nexport const getRotationBetweenPcbPin1Locations = (\n from: PcbPin1Location,\n to: PcbPin1Location,\n): PcbPin1LocationRotation | null => {\n for (const cycle of pin1LocationRotationCycles) {\n const fromIndex = cycle.indexOf(from)\n const toIndex = cycle.indexOf(to)\n\n if (fromIndex !== -1 && toIndex !== -1) {\n return (((toIndex - fromIndex + cycle.length) % cycle.length) *\n 90) as PcbPin1LocationRotation\n }\n }\n\n return null\n}\n","import { z } from \"zod\"\nimport { distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"./layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n// x: string | number\n// y: string | number\n// via?: boolean\n// via_to_layer?: string\nexport const pcb_route_hint = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n via_to_layer: layer_ref.optional(),\n})\nexport const pcb_route_hints = z.array(pcb_route_hint)\n\nexport type PcbRouteHintInput = z.input<typeof pcb_route_hint>\nexport type PcbRouteHintsInput = z.input<typeof pcb_route_hints>\ntype InferredPcbRouteHint = z.output<typeof pcb_route_hint>\ntype InferredPcbRouteHints = z.output<typeof pcb_route_hints>\n\nexport interface PcbRouteHint {\n x: number\n y: number\n via?: boolean\n via_to_layer?: LayerRef\n}\n\nexport type PcbRouteHints = PcbRouteHint[]\n\nexpectTypesMatch<PcbRouteHint, InferredPcbRouteHint>(true)\nexpectTypesMatch<PcbRouteHints, InferredPcbRouteHints>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../../units\"\nimport { layer_ref, type LayerRef } from \"./layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const route_hint_point = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n to_layer: layer_ref.optional(),\n trace_width: distance.optional(),\n})\n\nexport type RouteHintPointInput = z.input<typeof route_hint_point>\ntype InferredRouteHintPoint = z.infer<typeof route_hint_point>\n\nexport interface RouteHintPoint {\n x: number\n y: number\n via?: boolean\n to_layer?: LayerRef\n trace_width?: number\n}\n\nexpectTypesMatch<RouteHintPoint, InferredRouteHintPoint>(true)\n","import { z } from \"zod\"\nimport { length, type Length } from \"src/units\"\n\nexport const manufacturing_drc_properties = z.object({\n min_trace_width: length.optional(),\n min_board_edge_clearance: length.optional(),\n min_via_hole_edge_to_via_hole_edge_clearance: length.optional(),\n min_plated_hole_drill_edge_to_drill_edge_clearance: length.optional(),\n min_trace_to_pad_edge_clearance: length.optional(),\n min_trace_to_hole_edge_clearance: length\n .optional()\n .describe(\n \"Minimum distance from a trace copper edge to a non-plated hole edge, in mm. No default is applied when omitted.\",\n ),\n min_pad_edge_to_pad_edge_clearance: length.optional(),\n min_same_net_trace_edge_to_trace_edge_clearance: length.optional(),\n min_different_net_trace_edge_to_trace_edge_clearance: length.optional(),\n min_via_edge_to_pad_edge_clearance: length.optional(),\n min_via_hole_diameter: length.optional(),\n min_via_pad_diameter: length.optional(),\n})\n\nexport interface ManufacturingDrcProperties {\n min_trace_width?: Length\n min_board_edge_clearance?: Length\n min_via_hole_edge_to_via_hole_edge_clearance?: Length\n min_plated_hole_drill_edge_to_drill_edge_clearance?: Length\n min_trace_to_pad_edge_clearance?: Length\n /** Minimum trace copper edge to non-plated hole edge clearance in mm. */\n min_trace_to_hole_edge_clearance?: Length\n min_pad_edge_to_pad_edge_clearance?: Length\n min_same_net_trace_edge_to_trace_edge_clearance?: Length\n min_different_net_trace_edge_to_trace_edge_clearance?: Length\n min_via_edge_to_pad_edge_clearance?: Length\n min_via_hole_diameter?: Length\n min_via_pad_diameter?: Length\n}\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport {\n type KicadFootprintMetadata,\n kicadFootprintMetadata,\n} from \"src/common/kicadFootprintMetadata\"\nimport {\n type NinePointAnchor,\n ninePointAnchor,\n} from \"src/common/NinePointAnchor\"\nimport {\n type InsertionDirection,\n insertion_direction,\n} from \"src/pcb/properties/insertion_direction\"\nimport { type LayerRef, layer_ref } from \"src/pcb/properties/layer_ref\"\nimport {\n type PcbPin1Location,\n pcb_pin1_location,\n} from \"src/pcb/properties/pcb_pin1_location\"\nimport {\n type SupplierName,\n supplier_name,\n} from \"src/pcb/properties/supplier_name\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport interface PcbComponentMetadata {\n kicad_footprint?: KicadFootprintMetadata\n}\n\nexport type SupplierPin1LocationMap = Partial<\n Record<SupplierName, PcbPin1Location>\n>\n\nexport const pcb_component = z\n .object({\n type: z.literal(\"pcb_component\"),\n pcb_component_id: getZodPrefixedIdWithDefault(\"pcb_component\"),\n source_component_id: z.string(),\n center: point,\n layer: layer_ref,\n rotation: rotation,\n display_offset_x: z\n .string()\n .optional()\n .describe(\n \"How to display the x offset for this part, usually corresponding with how the user specified it\",\n ),\n display_offset_y: z\n .string()\n .optional()\n .describe(\n \"How to display the y offset for this part, usually corresponding with how the user specified it\",\n ),\n width: length,\n height: length,\n do_not_place: z.boolean().optional(),\n is_allowed_to_be_off_board: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n position_mode: z\n .enum([\n \"packed\",\n \"relative_to_group_anchor\",\n \"relative_to_another_component\",\n \"none\",\n ])\n .optional(),\n anchor_position: point.optional(),\n anchor_alignment: ninePointAnchor.optional(),\n positioned_relative_to_pcb_group_id: z.string().optional(),\n positioned_relative_to_pcb_board_id: z.string().optional(),\n cable_insertion_center: point.optional(),\n insertion_direction: insertion_direction.optional(),\n pin1_location: pcb_pin1_location\n .optional()\n .describe(\n \"Location of pin 1 on the unrotated, top-view component footprint\",\n ),\n supplier_pin1_location_map: z\n .record(supplier_name, pcb_pin1_location)\n .optional()\n .describe(\n \"Pin 1 location for each supplier's unrotated, top-view footprint\",\n ),\n metadata: z\n .object({\n kicad_footprint: kicadFootprintMetadata.optional(),\n })\n .optional(),\n obstructs_within_bounds: z\n .boolean()\n .default(true)\n .describe(\n \"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\",\n ),\n })\n .describe(\"Defines a component on the PCB\")\n\nexport type PcbComponentInput = z.input<typeof pcb_component>\ntype InferredPcbComponent = z.infer<typeof pcb_component>\n\n/**\n * Defines a component on the PCB\n */\nexport interface PcbComponent {\n type: \"pcb_component\"\n pcb_component_id: string\n source_component_id: string\n subcircuit_id?: string\n center: Point\n layer: LayerRef\n rotation: Rotation\n display_offset_x?: string\n display_offset_y?: string\n width: Length\n height: Length\n do_not_place?: boolean\n is_allowed_to_be_off_board?: boolean\n pcb_group_id?: string\n position_mode?:\n | \"packed\"\n | \"relative_to_group_anchor\"\n | \"relative_to_another_component\"\n | \"none\"\n anchor_position?: Point\n anchor_alignment?: NinePointAnchor\n positioned_relative_to_pcb_group_id?: string\n positioned_relative_to_pcb_board_id?: string\n cable_insertion_center?: Point\n insertion_direction?: InsertionDirection\n pin1_location?: PcbPin1Location\n supplier_pin1_location_map?: SupplierPin1LocationMap\n metadata?: PcbComponentMetadata\n obstructs_within_bounds: boolean\n}\n\n/**\n * @deprecated use PcbComponent\n */\nexport type PCBComponent = PcbComponent\n\nexpectTypesMatch<PcbComponent, InferredPcbComponent>(true)\n","import { z } from \"zod\"\nimport {\n getZodPrefixedIdWithDefault,\n point,\n type Point,\n size,\n type Size,\n} from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_debug_object_base = z.object({\n type: z.literal(\"pcb_debug_object\"),\n pcb_debug_object_id: getZodPrefixedIdWithDefault(\"pcb_debug_object\"),\n label: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport const pcb_debug_rect = pcb_debug_object_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n size: size,\n})\n\nexport const pcb_debug_line = pcb_debug_object_base.extend({\n shape: z.literal(\"line\"),\n start: point,\n end: point,\n})\n\nexport const pcb_debug_point = pcb_debug_object_base.extend({\n shape: z.literal(\"point\"),\n center: point,\n})\n\nexport const pcb_debug_object = z.discriminatedUnion(\"shape\", [\n pcb_debug_rect,\n pcb_debug_line,\n pcb_debug_point,\n])\ntype InferredPcbDebugObject = z.infer<typeof pcb_debug_object>\n\nexport interface PcbDebugRect {\n type: \"pcb_debug_object\"\n pcb_debug_object_id: string\n label?: string\n shape: \"rect\"\n center: Point\n size: Size\n subcircuit_id?: string\n}\n\nexport interface PcbDebugLine {\n type: \"pcb_debug_object\"\n pcb_debug_object_id: string\n label?: string\n shape: \"line\"\n start: Point\n end: Point\n subcircuit_id?: string\n}\n\nexport interface PcbDebugPoint {\n type: \"pcb_debug_object\"\n pcb_debug_object_id: string\n label?: string\n shape: \"point\"\n center: Point\n subcircuit_id?: string\n}\n\nexport type PcbDebugObject = PcbDebugRect | PcbDebugLine | PcbDebugPoint\n\nexpectTypesMatch<PcbDebugObject, InferredPcbDebugObject>(true)\nexport type PcbDebugObjectInput = z.input<typeof pcb_debug_object>\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_hole_circle = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"circle\"),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_circle_shape = pcb_hole_circle.describe(\n \"Defines a circular hole on the PCB\",\n)\n\nexport type PcbHoleCircleInput = z.input<typeof pcb_hole_circle>\ntype InferredPcbHoleCircle = z.infer<typeof pcb_hole_circle>\n\n/**\n * Defines a circular hole on the PCB\n */\nexport interface PcbHoleCircle {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"circle\"\n hole_diameter: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleCircle, InferredPcbHoleCircle>(true)\n\nconst pcb_hole_rect = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"rect\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_rect_shape = pcb_hole_rect.describe(\n \"Defines a rectangular (square-capable) hole on the PCB. Use equal width/height for square.\",\n)\n\nexport type PcbHoleRectInput = z.input<typeof pcb_hole_rect>\ntype InferredPcbHoleRect = z.infer<typeof pcb_hole_rect>\n\n/**\n * Defines a rectangular (or square) hole on the PCB\n */\nexport interface PcbHoleRect {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"rect\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\nexpectTypesMatch<PcbHoleRect, InferredPcbHoleRect>(true)\n\nconst pcb_hole_circle_or_square = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.enum([\"circle\", \"square\"]),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_circle_or_square_shape =\n pcb_hole_circle_or_square.describe(\n \"Defines a circular or square hole on the PCB\",\n )\n\nexport type PcbHoleCircleOrSquareInput = z.input<\n typeof pcb_hole_circle_or_square\n>\ntype InferredPcbHoleCircleOrSquare = z.infer<typeof pcb_hole_circle_or_square>\n\n/**\n * Defines a circular or square hole on the PCB\n */\n\n/**\n * @deprecated Use `PcbHoleCircle` for circular holes or `PcbHoleRect` for square holes.\n */\nexport interface PcbHoleCircleOrSquare {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"circle\" | \"square\"\n hole_diameter: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleCircleOrSquare, InferredPcbHoleCircleOrSquare>(true)\n\nconst pcb_hole_oval = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"oval\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_oval_shape = pcb_hole_oval.describe(\n \"Defines an oval hole on the PCB\",\n)\n\nexport type PcbHoleOvalInput = z.input<typeof pcb_hole_oval>\ntype InferredPcbHoleOval = z.infer<typeof pcb_hole_oval>\n\n/**\n * Defines an oval hole on the PCB\n */\nexport interface PcbHoleOval {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"oval\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleOval, InferredPcbHoleOval>(true)\n\nconst pcb_hole_pill = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"pill\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_pill_shape = pcb_hole_pill.describe(\n \"Defines a pill-shaped hole on the PCB\",\n)\n\nexport type PcbHolePillInput = z.input<typeof pcb_hole_pill>\ntype InferredPcbHolePill = z.infer<typeof pcb_hole_pill>\n\n/**\n * Defines a pill-shaped hole on the PCB\n */\nexport interface PcbHolePill {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"pill\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHolePill, InferredPcbHolePill>(true)\n\nconst pcb_hole_rotated_pill = z.object({\n type: z.literal(\"pcb_hole\"),\n pcb_hole_id: getZodPrefixedIdWithDefault(\"pcb_hole\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n hole_shape: z.literal(\"rotated_pill\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\n ccw_rotation: rotation,\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n})\n\nexport const pcb_hole_rotated_pill_shape = pcb_hole_rotated_pill.describe(\n \"Defines a rotated pill-shaped hole on the PCB\",\n)\n\nexport type PcbHoleRotatedPillInput = z.input<typeof pcb_hole_rotated_pill>\ntype InferredPcbHoleRotatedPill = z.infer<typeof pcb_hole_rotated_pill>\n\n/**\n * Defines a rotated pill-shaped hole on the PCB\n */\nexport interface PcbHoleRotatedPill {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_component_id?: string\n hole_shape: \"rotated_pill\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n ccw_rotation: Rotation\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n}\n\nexpectTypesMatch<PcbHoleRotatedPill, InferredPcbHoleRotatedPill>(true)\n\nexport const pcb_hole = pcb_hole_circle_or_square\n .or(pcb_hole_oval)\n .or(pcb_hole_pill)\n .or(pcb_hole_rotated_pill)\n .or(pcb_hole_circle)\n .or(pcb_hole_rect)\n\n/**\n * @deprecated Use PcbHoleCircleOrSquare, PcbHoleCircle, PcbHoleRect, PcbHoleOval, PcbHolePill, or PcbHoleRotatedPill\n */\nexport type PCBHoleInput = z.input<typeof pcb_hole>\n/**\n * @deprecated Use PcbHoleCircleOrSquare, PcbHoleCircle, PcbHoleRect, PcbHoleOval, PcbHolePill, or PcbHoleRotatedPill\n */\nexport type PCBHole = z.infer<typeof pcb_hole>\n\nexport type PcbHole =\n | PcbHoleCircleOrSquare\n | PcbHoleOval\n | PcbHolePill\n | PcbHoleRotatedPill\n | PcbHoleCircle\n | PcbHoleRect\n","import { z } from \"zod\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_plated_hole_circle = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"circle\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n outer_diameter: z.number(),\n hole_diameter: z.number(),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\n\n/**\n * Defines a circular plated hole on the PCB\n */\nexport interface PcbPlatedHoleCircle {\n type: \"pcb_plated_hole\"\n shape: \"circle\"\n pcb_group_id?: string\n subcircuit_id?: string\n outer_diameter: number\n hole_diameter: number\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nconst pcb_plated_hole_oval = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.enum([\"oval\", \"pill\"]),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n outer_width: z.number(),\n outer_height: z.number(),\n hole_width: z.number(),\n hole_height: z.number(),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n ccw_rotation: rotation,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\n\n/**\n * Defines an oval or pill-shaped plated hole on the PCB\n */\nexport interface PcbPlatedHoleOval {\n type: \"pcb_plated_hole\"\n shape: \"oval\" | \"pill\"\n pcb_group_id?: string\n subcircuit_id?: string\n outer_width: number\n outer_height: number\n hole_width: number\n hole_height: number\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n ccw_rotation: Rotation\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nconst pcb_circular_hole_with_rect_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"circular_hole_with_rect_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.literal(\"circle\"),\n pad_shape: z.literal(\"rect\"),\n hole_diameter: z.number(),\n rect_pad_width: z.number(),\n rect_pad_height: z.number(),\n rect_border_radius: z.number().optional(),\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n rect_ccw_rotation: rotation.optional(),\n})\nconst pcb_pill_hole_with_rect_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"pill_hole_with_rect_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.literal(\"pill\"),\n pad_shape: z.literal(\"rect\"),\n hole_width: z.number(),\n hole_height: z.number(),\n rect_pad_width: z.number(),\n rect_pad_height: z.number(),\n rect_border_radius: z.number().optional(),\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\nconst pcb_rotated_pill_hole_with_rect_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"rotated_pill_hole_with_rect_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.literal(\"rotated_pill\"),\n pad_shape: z.literal(\"rect\"),\n hole_width: z.number(),\n hole_height: z.number(),\n hole_ccw_rotation: rotation,\n rect_pad_width: z.number(),\n rect_pad_height: z.number(),\n rect_border_radius: z.number().optional(),\n rect_ccw_rotation: rotation,\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n})\nexport interface PcbHolePillWithRectPad {\n type: \"pcb_plated_hole\"\n shape: \"pill_hole_with_rect_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"pill\"\n pad_shape: \"rect\"\n hole_width: number\n hole_height: number\n rect_pad_width: number\n rect_pad_height: number\n rect_border_radius?: number\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nexport interface PcbHoleRotatedPillWithRectPad {\n type: \"pcb_plated_hole\"\n shape: \"rotated_pill_hole_with_rect_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"rotated_pill\"\n pad_shape: \"rect\"\n hole_width: number\n hole_height: number\n hole_ccw_rotation: Rotation\n rect_pad_width: number\n rect_pad_height: number\n rect_border_radius?: number\n rect_ccw_rotation: Rotation\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n}\n\nexport interface PcbHoleCircularWithRectPad {\n type: \"pcb_plated_hole\"\n shape: \"circular_hole_with_rect_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"circle\"\n pad_shape: \"rect\"\n hole_diameter: number\n rect_pad_width: number\n rect_pad_height: number\n rect_border_radius?: number\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n rect_ccw_rotation?: Rotation\n}\nconst pcb_hole_with_polygon_pad = z.object({\n type: z.literal(\"pcb_plated_hole\"),\n shape: z.literal(\"hole_with_polygon_pad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n hole_shape: z.enum([\"circle\", \"oval\", \"pill\", \"rotated_pill\"]),\n hole_diameter: z.number().optional(),\n hole_width: z.number().optional(),\n hole_height: z.number().optional(),\n\n pad_outline: z\n .array(\n z.object({\n x: distance,\n y: distance,\n }),\n )\n .min(3),\n\n hole_offset_x: distance.default(0),\n hole_offset_y: distance.default(0),\n is_covered_with_solder_mask: z.boolean().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n pcb_plated_hole_id: getZodPrefixedIdWithDefault(\"pcb_plated_hole\"),\n soldermask_margin: z.number().optional(),\n ccw_rotation: rotation.optional(),\n})\n\n/**\n * Defines a plated hole with a polygonal pad on the PCB\n */\n\nexport interface PcbHoleWithPolygonPad {\n type: \"pcb_plated_hole\"\n shape: \"hole_with_polygon_pad\"\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"circle\" | \"oval\" | \"pill\" | \"rotated_pill\"\n hole_diameter?: number\n hole_width?: number\n hole_height?: number\n pad_outline: { x: Distance; y: Distance }[]\n hole_offset_x: Distance\n hole_offset_y: Distance\n is_covered_with_solder_mask?: boolean\n x: Distance\n y: Distance\n layers: LayerRef[]\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n pcb_plated_hole_id: string\n soldermask_margin?: number\n ccw_rotation?: Rotation\n}\n\nexport const pcb_plated_hole = z.union([\n pcb_plated_hole_circle,\n pcb_plated_hole_oval,\n pcb_circular_hole_with_rect_pad,\n pcb_pill_hole_with_rect_pad,\n pcb_rotated_pill_hole_with_rect_pad,\n pcb_hole_with_polygon_pad,\n])\nexport type PcbPlatedHole =\n | PcbPlatedHoleCircle\n | PcbPlatedHoleOval\n | PcbHoleCircularWithRectPad\n | PcbHolePillWithRectPad\n | PcbHoleRotatedPillWithRectPad\n | PcbHoleWithPolygonPad\n\nexpectTypesMatch<PcbPlatedHoleCircle, z.infer<typeof pcb_plated_hole_circle>>(\n true,\n)\nexpectTypesMatch<PcbPlatedHoleOval, z.infer<typeof pcb_plated_hole_oval>>(true)\nexpectTypesMatch<\n PcbHoleCircularWithRectPad,\n z.infer<typeof pcb_circular_hole_with_rect_pad>\n>(true)\nexpectTypesMatch<\n PcbHolePillWithRectPad,\n z.infer<typeof pcb_pill_hole_with_rect_pad>\n>(true)\nexpectTypesMatch<\n PcbHoleRotatedPillWithRectPad,\n z.infer<typeof pcb_rotated_pill_hole_with_rect_pad>\n>(true)\nexpectTypesMatch<\n PcbHoleWithPolygonPad,\n z.infer<typeof pcb_hole_with_polygon_pad>\n>(true)\n/**\n * @deprecated use PcbPlatedHole\n */\nexport type PCBPlatedHole = PcbPlatedHole\n\n/**\n * @deprecated use PcbPlatedHoleInput\n */\nexport type PCBPlatedHoleInput = z.input<typeof pcb_plated_hole>\nexport type PcbPlatedHoleInput = z.input<typeof pcb_plated_hole>\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port = z\n .object({\n type: z.literal(\"pcb_port\"),\n pcb_port_id: getZodPrefixedIdWithDefault(\"pcb_port\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n source_port_id: z.string(),\n pcb_component_id: z.string().optional(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n is_board_pinout: z.boolean().optional(),\n })\n .describe(\"Defines a port on the PCB\")\n\nexport type PcbPortInput = z.input<typeof pcb_port>\ntype InferredPcbPort = z.infer<typeof pcb_port>\n\n/**\n * Defines a port on the PCB\n */\nexport interface PcbPort {\n type: \"pcb_port\"\n pcb_port_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n source_port_id: string\n pcb_component_id?: string\n x: Distance\n y: Distance\n layers: LayerRef[]\n is_board_pinout?: boolean\n}\n\n/**\n * @deprecated use PcbPort\n */\nexport type PCBPort = PcbPort\n\n/**\n * @deprecated use PcbPortInput\n */\nexport type PCBPortInput = PcbPortInput\n\nexpectTypesMatch<PcbPort, InferredPcbPort>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_smtpad_circle = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"circle\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n radius: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nconst pcb_smtpad_rect = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rect\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n rect_border_radius: z.number().optional(),\n corner_radius: z.number().optional(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n soldermask_margin_left: z.number().optional(),\n soldermask_margin_top: z.number().optional(),\n soldermask_margin_right: z.number().optional(),\n soldermask_margin_bottom: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nconst pcb_smtpad_rotated_rect = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rotated_rect\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n rect_border_radius: z.number().optional(),\n corner_radius: z.number().optional(),\n ccw_rotation: rotation,\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n soldermask_margin_left: z.number().optional(),\n soldermask_margin_top: z.number().optional(),\n soldermask_margin_right: z.number().optional(),\n soldermask_margin_bottom: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nexport const pcb_smtpad_pill = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"pill\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\nconst pcb_smtpad_rotated_pill = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rotated_pill\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n ccw_rotation: rotation,\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nconst pcb_smtpad_polygon = z.object({\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"polygon\"),\n pcb_smtpad_id: getZodPrefixedIdWithDefault(\"pcb_smtpad\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n points: z.array(point),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n is_covered_with_solder_mask: z.boolean().optional(),\n soldermask_margin: z.number().optional(),\n solderpaste_margin: z.number().optional(),\n})\n\nexport const pcb_smtpad = z\n .discriminatedUnion(\"shape\", [\n pcb_smtpad_circle,\n pcb_smtpad_rect,\n pcb_smtpad_rotated_rect,\n pcb_smtpad_rotated_pill,\n pcb_smtpad_pill,\n pcb_smtpad_polygon,\n ])\n .describe(\"Defines an SMT pad on the PCB\")\n\nexport type PCBSMTPadInput = z.input<typeof pcb_smtpad>\ntype PCBSMTPadCircle = z.infer<typeof pcb_smtpad_circle>\ntype PCBSMTPadRect = z.infer<typeof pcb_smtpad_rect>\ntype PCBSMTPadRotatedRect = z.infer<typeof pcb_smtpad_rotated_rect>\ntype PCBSMTPadRotatedPill = z.infer<typeof pcb_smtpad_rotated_pill>\ntype PCBSMTPadPill = z.infer<typeof pcb_smtpad_pill>\ntype PCBSMTPadPolygon = z.infer<typeof pcb_smtpad_polygon>\n\n/**\n * Defines a circular SMT pad on the PCB\n */\nexport interface PcbSmtPadCircle {\n type: \"pcb_smtpad\"\n shape: \"circle\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n radius: number\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a rectangular SMT pad on the PCB\n */\nexport interface PcbSmtPadRect {\n type: \"pcb_smtpad\"\n shape: \"rect\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n rect_border_radius?: number\n corner_radius?: number\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n soldermask_margin_left?: number\n soldermask_margin_top?: number\n soldermask_margin_right?: number\n soldermask_margin_bottom?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a rotated rectangular SMT pad on the PCB\n */\nexport interface PcbSmtPadRotatedRect {\n type: \"pcb_smtpad\"\n shape: \"rotated_rect\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n rect_border_radius?: number\n corner_radius?: number\n ccw_rotation: Rotation\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n soldermask_margin_left?: number\n soldermask_margin_top?: number\n soldermask_margin_right?: number\n soldermask_margin_bottom?: number\n solderpaste_margin?: number\n}\n/**\n * Defines a pill-shaped SMT pad on the PCB (rounded rectangle).\n */\nexport interface PcbSmtPadPill {\n type: \"pcb_smtpad\"\n shape: \"pill\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a rotated pill-shaped SMT pad on the PCB\n */\nexport interface PcbSmtPadRotatedPill {\n type: \"pcb_smtpad\"\n shape: \"rotated_pill\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n ccw_rotation: Rotation\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\n/**\n * Defines a polygonal SMT pad on the PCB\n */\nexport interface PcbSmtPadPolygon {\n type: \"pcb_smtpad\"\n shape: \"polygon\"\n pcb_smtpad_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n points: Point[]\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\n is_covered_with_solder_mask?: boolean\n soldermask_margin?: number\n solderpaste_margin?: number\n}\n\nexport type PcbSmtPad =\n | PcbSmtPadCircle\n | PcbSmtPadRect\n | PcbSmtPadRotatedRect\n | PcbSmtPadRotatedPill\n | PcbSmtPadPill\n | PcbSmtPadPolygon\n\n/**\n * @deprecated use PcbSmtPad\n */\nexport type PCBSMTPad = PcbSmtPad\n\nexpectTypesMatch<PcbSmtPadCircle, PCBSMTPadCircle>(true)\nexpectTypesMatch<PcbSmtPadRect, PCBSMTPadRect>(true)\nexpectTypesMatch<PcbSmtPadRotatedRect, PCBSMTPadRotatedRect>(true)\nexpectTypesMatch<PcbSmtPadRotatedPill, PCBSMTPadRotatedPill>(true)\nexpectTypesMatch<PcbSmtPadPill, PCBSMTPadPill>(true)\nexpectTypesMatch<PcbSmtPadPolygon, PCBSMTPadPolygon>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport {\n getZodPrefixedIdWithDefault,\n polygon_shape,\n type Point,\n type PolygonShape,\n} from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst pcb_solder_paste_circle = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"circle\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n radius: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_rect = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"rect\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\nconst pcb_solder_paste_pill = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"pill\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\nconst pcb_solder_paste_rotated_rect = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"rotated_rect\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n ccw_rotation: distance,\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_rotated_pill = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"rotated_pill\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n radius: z.number(),\n ccw_rotation: rotation,\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_oval = z.object({\n type: z.literal(\"pcb_solder_paste\"),\n shape: z.literal(\"oval\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nconst pcb_solder_paste_polygon = polygon_shape.extend({\n type: z.literal(\"pcb_solder_paste\"),\n pcb_solder_paste_id: getZodPrefixedIdWithDefault(\"pcb_solder_paste\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n holes: z.array(polygon_shape.shape.points).optional(),\n layer: layer_ref,\n pcb_component_id: z.string().optional(),\n pcb_smtpad_id: z.string().optional(),\n})\n\nexport const pcb_solder_paste = z\n .union([\n pcb_solder_paste_circle,\n pcb_solder_paste_rect,\n pcb_solder_paste_pill,\n pcb_solder_paste_rotated_rect,\n pcb_solder_paste_rotated_pill,\n pcb_solder_paste_oval,\n pcb_solder_paste_polygon,\n ])\n .describe(\"Defines solderpaste on the PCB\")\n\nexport type PCBSolderPasteInput = z.input<typeof pcb_solder_paste>\ntype InferredPcbSolderPasteCircle = z.infer<typeof pcb_solder_paste_circle>\ntype InferredPcbSolderPasteRect = z.infer<typeof pcb_solder_paste_rect>\ntype InferredPcbSolderPastePill = z.infer<typeof pcb_solder_paste_pill>\ntype InferredPcbSolderPasteRotatedRect = z.infer<\n typeof pcb_solder_paste_rotated_rect\n>\ntype InferredPcbSolderPasteRotatedPill = z.infer<\n typeof pcb_solder_paste_rotated_pill\n>\ntype InferredPcbSolderPastePolygon = z.infer<typeof pcb_solder_paste_polygon>\ntype InferredPcbSolderPasteOval = z.infer<typeof pcb_solder_paste_oval>\n\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteCircle {\n type: \"pcb_solder_paste\"\n shape: \"circle\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n radius: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteRect {\n type: \"pcb_solder_paste\"\n shape: \"rect\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPastePill {\n type: \"pcb_solder_paste\"\n shape: \"pill\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteRotatedRect {\n type: \"pcb_solder_paste\"\n shape: \"rotated_rect\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n ccw_rotation: Distance\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteRotatedPill {\n type: \"pcb_solder_paste\"\n shape: \"rotated_pill\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n radius: number\n ccw_rotation: Rotation\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n/**\n * Defines solderpaste on the PCB\n */\nexport interface PcbSolderPasteOval {\n type: \"pcb_solder_paste\"\n shape: \"oval\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n x: Distance\n y: Distance\n width: number\n height: number\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n\n/**\n * A closed solder-paste contour in board-world mm: +X right, +Y up,\n * right-handed with +Z above the board. Points include placement translation;\n * top/bottom identifies the PCB layer, not the Y direction.\n */\nexport interface PcbSolderPastePolygon extends PolygonShape {\n type: \"pcb_solder_paste\"\n pcb_solder_paste_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n /** Closed inner contours remove paste from this aperture. */\n holes?: Point[][]\n layer: LayerRef\n pcb_component_id?: string\n pcb_smtpad_id?: string\n}\n\nexport type PcbSolderPaste =\n | PcbSolderPasteCircle\n | PcbSolderPasteRect\n | PcbSolderPastePill\n | PcbSolderPasteRotatedRect\n | PcbSolderPasteRotatedPill\n | PcbSolderPasteOval\n | PcbSolderPastePolygon\n\nexpectTypesMatch<PcbSolderPasteCircle, InferredPcbSolderPasteCircle>(true)\nexpectTypesMatch<PcbSolderPasteRect, InferredPcbSolderPasteRect>(true)\nexpectTypesMatch<PcbSolderPastePill, InferredPcbSolderPastePill>(true)\nexpectTypesMatch<PcbSolderPasteRotatedRect, InferredPcbSolderPasteRotatedRect>(\n true,\n)\nexpectTypesMatch<PcbSolderPasteRotatedPill, InferredPcbSolderPasteRotatedPill>(\n true,\n)\nexpectTypesMatch<PcbSolderPasteOval, InferredPcbSolderPasteOval>(true)\n\nexpectTypesMatch<PcbSolderPastePolygon, InferredPcbSolderPastePolygon>(true)\n","import { z } from \"zod\"\nimport {\n getZodPrefixedIdWithDefault,\n circle_shape,\n rect_shape,\n rotated_rect_shape,\n polygon_shape,\n type CircleShape,\n type RectShape,\n type RotatedRectShape,\n type PolygonShape,\n} from \"src/common\"\nimport { layer_ref, visible_layer } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst opening_base = z.object({\n type: z.literal(\"pcb_soldermask_opening\"),\n pcb_soldermask_opening_id: getZodPrefixedIdWithDefault(\n \"pcb_soldermask_opening\",\n ),\n layer: layer_ref.pipe(visible_layer),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport const pcb_soldermask_opening = z\n .discriminatedUnion(\"shape\", [\n circle_shape.extend(opening_base.shape),\n rect_shape.extend(opening_base.shape),\n rotated_rect_shape.extend(opening_base.shape),\n polygon_shape.extend(opening_base.shape),\n ])\n .describe(\n \"An explicit opening in top or bottom solder mask or flex coverlay, independent of pads. Removes mask without adding copper or solder paste.\",\n )\n\nexport type PcbSoldermaskOpeningInput = z.input<typeof pcb_soldermask_opening>\n\nexport interface PcbSoldermaskOpeningBase {\n type: \"pcb_soldermask_opening\"\n pcb_soldermask_opening_id: string\n layer: \"top\" | \"bottom\"\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n}\n\n/** A circular solder-mask opening centered at (x, y). */\nexport interface PcbSoldermaskOpeningCircle\n extends PcbSoldermaskOpeningBase,\n CircleShape {}\n\n/** A rectangular solder-mask opening centered at (x, y). */\nexport interface PcbSoldermaskOpeningRect\n extends PcbSoldermaskOpeningBase,\n RectShape {}\n\n/** A rectangular opening rotated counterclockwise about (x, y), in degrees. */\nexport interface PcbSoldermaskOpeningRotatedRect\n extends PcbSoldermaskOpeningBase,\n RotatedRectShape {}\n\n/** An implicitly closed boundary of at least three points enclosing nonzero area. */\nexport interface PcbSoldermaskOpeningPolygon\n extends PcbSoldermaskOpeningBase,\n PolygonShape {}\n\n/**\n * Solder-mask or flex-coverlay removal, independent of pads, vias, and electrical nets.\n * Numeric coordinates and dimensions use millimeters in the PCB coordinate system.\n * Placement, parent rotation, and bottom-footprint reflection are already resolved.\n * Openings expose the underlying substrate or existing copper; they add no material.\n */\nexport type PcbSoldermaskOpening =\n | PcbSoldermaskOpeningCircle\n | PcbSoldermaskOpeningRect\n | PcbSoldermaskOpeningRotatedRect\n | PcbSoldermaskOpeningPolygon\n\nexpectTypesMatch<PcbSoldermaskOpening, z.output<typeof pcb_soldermask_opening>>(\n true,\n)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_text = z\n .object({\n type: z.literal(\"pcb_text\"),\n pcb_text_id: getZodPrefixedIdWithDefault(\"pcb_text\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n text: z.string(),\n center: point,\n layer: layer_ref,\n width: length,\n height: length,\n lines: z.number(),\n // @ts-ignore\n align: z.enum([\"bottom-left\"]),\n })\n .describe(\"Defines text on the PCB\")\n\nexport type PcbTextInput = z.input<typeof pcb_text>\ntype InferredPcbText = z.infer<typeof pcb_text>\n\n/**\n * Defines text on the PCB\n */\nexport interface PcbText {\n type: \"pcb_text\"\n pcb_text_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n text: string\n center: Point\n layer: LayerRef\n width: Length\n height: Length\n lines: number\n // @ts-ignore\n align: \"bottom-left\"\n}\n\n/**\n * @deprecated use PcbText\n */\nexport type PCBText = PcbText\n\nexpectTypesMatch<PcbText, InferredPcbText>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst positive_width = distance.pipe(z.number().finite().positive())\n\nexport const pcb_trace_route_point_wire = z\n .object({\n route_type: z.literal(\"wire\"),\n x: distance,\n y: distance,\n width: distance,\n start_width: positive_width.optional(),\n end_width: positive_width.optional(),\n width_interpolation_mode: z.enum([\"linear\", \"quadratic\"]).optional(),\n copper_pour_id: z.string().optional(),\n is_inside_copper_pour: z.boolean().optional(),\n start_pcb_port_id: z.string().optional(),\n end_pcb_port_id: z.string().optional(),\n layer: layer_ref,\n })\n .superRefine((wire, ctx) => {\n const present = [\n wire.start_width,\n wire.end_width,\n wire.width_interpolation_mode,\n ].filter((v) => v !== undefined).length\n if (present === 0) return\n if (present !== 3) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Wire taper requires start_width, end_width and width_interpolation_mode together\",\n })\n }\n if (wire.width !== wire.start_width) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"start_width\"],\n message: \"start_width must equal width\",\n })\n }\n if (!Number.isFinite(wire.x) || !Number.isFinite(wire.y)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Tapered wire coordinates must be finite\",\n })\n }\n })\n\nexport const pcb_trace_route_point_via = z.object({\n route_type: z.literal(\"via\"),\n x: distance,\n y: distance,\n copper_pour_id: z.string().optional(),\n is_inside_copper_pour: z.boolean().optional(),\n hole_diameter: distance.optional(),\n outer_diameter: distance.optional(),\n tented_on_top: z.boolean().optional(),\n tented_on_bottom: z.boolean().optional(),\n from_layer: layer_ref,\n to_layer: layer_ref,\n})\n\nexport const pcb_trace_route_point_through_pad = z.object({\n route_type: z.literal(\"through_pad\"),\n start: point,\n end: point,\n width: distance,\n start_layer: layer_ref,\n end_layer: layer_ref,\n pcb_smtpad_id: z.string().optional(),\n pcb_plated_hole_id: z.string().optional(),\n})\n\nexport const pcb_trace_route_point = z.union([\n pcb_trace_route_point_wire,\n pcb_trace_route_point_via,\n pcb_trace_route_point_through_pad,\n])\ntype InferredPcbTraceRoutePoint = z.infer<typeof pcb_trace_route_point>\n\nexport const pcb_trace = z\n .object({\n type: z.literal(\"pcb_trace\"),\n source_trace_id: z.string().optional(),\n pcb_component_id: z.string().optional(),\n pcb_trace_id: getZodPrefixedIdWithDefault(\"pcb_trace\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n route_thickness_mode: z\n .enum([\"constant\", \"interpolated\"])\n .default(\"constant\")\n .optional(),\n route_order_index: z.number().optional(),\n should_round_corners: z.boolean().optional(),\n trace_length: z.number().optional(),\n is_antenna_trace: z.boolean().optional(),\n highlight_color: z.string().optional(),\n route: z.array(pcb_trace_route_point).superRefine((route, ctx) => {\n for (const [i, wire] of route.entries()) {\n if (\n wire.route_type !== \"wire\" ||\n wire.width_interpolation_mode === undefined\n )\n continue\n const next = route[i + 1]\n const end = next?.route_type === \"through_pad\" ? next.start : next\n const layer =\n next?.route_type === \"wire\"\n ? next.layer\n : next?.route_type === \"via\"\n ? next.from_layer\n : next?.start_layer\n const length = end ? Math.hypot(end.x - wire.x, end.y - wire.y) : NaN\n if (!Number.isFinite(length) || length <= 0 || layer !== wire.layer) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [i],\n message:\n \"Tapered wire must lead to a distinct finite next point on the same layer\",\n })\n }\n }\n }),\n })\n .describe(\"Defines a trace on the PCB\")\n\nexport type PcbTraceInput = z.input<typeof pcb_trace>\ntype InferredPcbTrace = z.infer<typeof pcb_trace>\n\nexport interface PcbTraceRoutePointWire {\n route_type: \"wire\"\n x: Distance\n y: Distance\n width: Distance\n /** Outgoing segment taper; all three fields must be specified together. */\n start_width?: Distance\n end_width?: Distance\n width_interpolation_mode?: \"linear\" | \"quadratic\"\n copper_pour_id?: string\n is_inside_copper_pour?: boolean\n start_pcb_port_id?: string\n end_pcb_port_id?: string\n layer: LayerRef\n}\n\nexport interface PcbTraceRoutePointVia {\n route_type: \"via\"\n x: Distance\n y: Distance\n copper_pour_id?: string\n is_inside_copper_pour?: boolean\n hole_diameter?: Distance\n outer_diameter?: Distance\n tented_on_top?: boolean\n tented_on_bottom?: boolean\n from_layer: LayerRef\n to_layer: LayerRef\n}\n\nexport interface PcbTraceRoutePointThroughPad {\n route_type: \"through_pad\"\n start: Point\n end: Point\n width: Distance\n start_layer: LayerRef\n end_layer: LayerRef\n pcb_smtpad_id?: string\n pcb_plated_hole_id?: string\n}\n\nexport type PcbTraceRoutePoint =\n | PcbTraceRoutePointWire\n | PcbTraceRoutePointVia\n | PcbTraceRoutePointThroughPad\n\n/**\n * Defines a trace on the PCB\n */\nexport interface PcbTrace {\n type: \"pcb_trace\"\n source_trace_id?: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_trace_id: string\n /**\n * The order that this trace was routed in. This can be used to debug the\n * autorouter and to understand the trace path better\n *\n * The route_order_index should be relative to a subcircuit\n */\n route_order_index?: number\n route_thickness_mode?: \"constant\" | \"interpolated\"\n should_round_corners?: boolean\n trace_length?: number\n is_antenna_trace?: boolean\n highlight_color?: string\n route: Array<PcbTraceRoutePoint>\n}\n\n/**\n * @deprecated use PcbTrace\n */\nexport type PCBTrace = PcbTrace\n\n/**\n * @deprecated use PcbTraceInput\n */\nexport type PCBTraceInput = PcbTraceInput\n\nexpectTypesMatch<PcbTraceRoutePoint, InferredPcbTraceRoutePoint>(true)\nexpectTypesMatch<PcbTrace, InferredPcbTrace>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_warning = z\n .object({\n type: z.literal(\"pcb_trace_warning\"),\n pcb_trace_warning_id: getZodPrefixedIdWithDefault(\"pcb_trace_warning\"),\n warning_type: z.literal(\"pcb_trace_warning\").default(\"pcb_trace_warning\"),\n message: z.string(),\n center: point.optional(),\n pcb_trace_id: z.string(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a trace warning on the PCB\")\n\nexport type PcbTraceWarningInput = z.input<typeof pcb_trace_warning>\ntype InferredPcbTraceWarning = z.infer<typeof pcb_trace_warning>\n\n/**\n * Defines a trace warning on the PCB\n */\nexport interface PcbTraceWarning {\n type: \"pcb_trace_warning\"\n pcb_trace_warning_id: string\n warning_type: \"pcb_trace_warning\"\n message: string\n center?: Point\n pcb_trace_id: string\n source_trace_id: string\n pcb_component_ids: string[]\n pcb_port_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbTraceWarning, InferredPcbTraceWarning>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_too_long_error = z\n .object({\n type: z.literal(\"pcb_trace_too_long_error\"),\n pcb_trace_too_long_error_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_too_long_error\",\n ),\n error_type: z\n .literal(\"pcb_trace_too_long_error\")\n .default(\"pcb_trace_too_long_error\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_net_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n actual_trace_length: distance,\n maximum_trace_length: distance,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a PCB trace is longer than its maximum allowed length\",\n )\n\nexport type PcbTraceTooLongErrorInput = z.input<typeof pcb_trace_too_long_error>\ntype InferredPcbTraceTooLongError = z.infer<typeof pcb_trace_too_long_error>\n\n/** Error emitted when a PCB trace is longer than its maximum allowed length */\nexport interface PcbTraceTooLongError {\n type: \"pcb_trace_too_long_error\"\n pcb_trace_too_long_error_id: string\n error_type: \"pcb_trace_too_long_error\"\n message: string\n pcb_trace_id: string\n source_net_id?: string\n source_trace_id?: string\n actual_trace_length: Distance\n maximum_trace_length: Distance\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbTraceTooLongError, InferredPcbTraceTooLongError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** The routed lengths of a bus's members exceed its allowed skew. */\nexport interface PcbBusLengthSkewError extends BaseCircuitJsonError {\n type: \"pcb_bus_length_skew_error\"\n pcb_bus_length_skew_error_id: string\n error_type: \"pcb_bus_length_skew_error\"\n source_bus_id: string\n source_trace_ids: string[]\n pcb_trace_ids: string[]\n actual_length_skew: number\n maximum_length_skew: number\n subcircuit_id?: string\n}\n\nexport const pcb_bus_length_skew_error = base_circuit_json_error.extend({\n type: z.literal(\"pcb_bus_length_skew_error\"),\n pcb_bus_length_skew_error_id: getZodPrefixedIdWithDefault(\n \"pcb_bus_length_skew_error\",\n ),\n error_type: z\n .literal(\"pcb_bus_length_skew_error\")\n .default(\"pcb_bus_length_skew_error\"),\n source_bus_id: z.string(),\n source_trace_ids: z.array(z.string()),\n pcb_trace_ids: z.array(z.string()),\n actual_length_skew: z.number().nonnegative().finite(),\n maximum_length_skew: z.number().nonnegative().finite(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type PcbBusLengthSkewErrorInput = z.input<\n typeof pcb_bus_length_skew_error\n>\nexpectTypesMatch<\n PcbBusLengthSkewError,\n z.infer<typeof pcb_bus_length_skew_error>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_too_long_warning = z\n .object({\n type: z.literal(\"pcb_trace_too_long_warning\"),\n pcb_trace_too_long_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_too_long_warning\",\n ),\n warning_type: z\n .literal(\"pcb_trace_too_long_warning\")\n .default(\"pcb_trace_too_long_warning\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_net_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n actual_trace_length: distance,\n maximum_trace_length: distance,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a PCB trace is longer than its maximum allowed length\",\n )\n\nexport type PcbTraceTooLongWarningInput = z.input<\n typeof pcb_trace_too_long_warning\n>\ntype InferredPcbTraceTooLongWarning = z.infer<typeof pcb_trace_too_long_warning>\n\n/** Warning emitted when a PCB trace is longer than its maximum allowed length */\nexport interface PcbTraceTooLongWarning {\n type: \"pcb_trace_too_long_warning\"\n pcb_trace_too_long_warning_id: string\n warning_type: \"pcb_trace_too_long_warning\"\n message: string\n pcb_trace_id: string\n source_net_id?: string\n source_trace_id?: string\n actual_trace_length: Distance\n maximum_trace_length: Distance\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbTraceTooLongWarning, InferredPcbTraceTooLongWarning>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_too_many_vias_warning = z\n .object({\n type: z.literal(\"pcb_trace_too_many_vias_warning\"),\n pcb_trace_too_many_vias_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_too_many_vias_warning\",\n ),\n warning_type: z\n .literal(\"pcb_trace_too_many_vias_warning\")\n .default(\"pcb_trace_too_many_vias_warning\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_net_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n actual_via_count: z.number().int().nonnegative(),\n maximum_via_count: z.number().int().nonnegative(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a PCB trace has more vias than its maximum allowed count\",\n )\n\nexport type PcbTraceTooManyViasWarningInput = z.input<\n typeof pcb_trace_too_many_vias_warning\n>\ntype InferredPcbTraceTooManyViasWarning = z.infer<\n typeof pcb_trace_too_many_vias_warning\n>\n\n/** Warning emitted when a PCB trace has more vias than its maximum allowed count */\nexport interface PcbTraceTooManyViasWarning {\n type: \"pcb_trace_too_many_vias_warning\"\n pcb_trace_too_many_vias_warning_id: string\n warning_type: \"pcb_trace_too_many_vias_warning\"\n message: string\n pcb_trace_id: string\n source_net_id?: string\n source_trace_id?: string\n actual_via_count: number\n maximum_via_count: number\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbTraceTooManyViasWarning,\n InferredPcbTraceTooManyViasWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\n\n/** Rule-specific routing measurements. Lengths and centreline spacing are mm; impedance is ohms. */\nexport type PcbBusRoutingConstraintViolation =\n | {\n routing_rule: \"length_skew\"\n actual_length_skew: number\n maximum_length_skew: number\n }\n | {\n routing_rule: \"min_length\"\n actual_trace_length: number\n minimum_trace_length: number\n }\n | {\n routing_rule: \"max_length\"\n actual_trace_length: number\n maximum_trace_length: number\n }\n | {\n routing_rule: \"target_length\"\n actual_trace_length: number\n target_trace_length: number\n length_tolerance: number\n }\n | {\n routing_rule: \"pcb_trace_spacing\"\n other_pcb_trace_id: string\n other_source_trace_id?: string\n actual_centerline_spacing: number\n minimum_centerline_spacing: number\n }\n | {\n routing_rule: \"pcb_spacing_to_other_signals\"\n other_pcb_trace_id: string\n other_source_trace_id?: string\n actual_centerline_spacing: number\n minimum_centerline_spacing: number\n }\n | {\n routing_rule: \"impedance_target\"\n target_impedance: number\n minimum_impedance?: number\n maximum_impedance?: number\n }\n\ninterface PcbBusRoutingConstraintErrorBase extends BaseCircuitJsonError {\n type: \"pcb_bus_routing_constraint_error\"\n pcb_bus_routing_constraint_error_id: string\n error_type: \"pcb_bus_routing_constraint_error\"\n source_bus_id: string\n source_trace_ids: string[]\n pcb_trace_ids: string[]\n subcircuit_id?: string\n}\n\n/** A declared bus or differential-pair routing constraint is violated. */\ntype WithErrorContext<Violation> = Violation extends unknown\n ? {\n [Key in keyof (PcbBusRoutingConstraintErrorBase &\n Violation)]: (PcbBusRoutingConstraintErrorBase & Violation)[Key]\n }\n : never\nexport type PcbBusRoutingConstraintError =\n WithErrorContext<PcbBusRoutingConstraintViolation>\n\nconst error_base = base_circuit_json_error.extend({\n type: z.literal(\"pcb_bus_routing_constraint_error\"),\n pcb_bus_routing_constraint_error_id: getZodPrefixedIdWithDefault(\n \"pcb_bus_routing_constraint_error\",\n ),\n error_type: z\n .literal(\"pcb_bus_routing_constraint_error\")\n .default(\"pcb_bus_routing_constraint_error\"),\n source_bus_id: z.string(),\n source_trace_ids: z.array(z.string()).min(1),\n pcb_trace_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n})\n\nexport const pcb_bus_routing_constraint_error = z\n .discriminatedUnion(\"routing_rule\", [\n error_base.extend({\n routing_rule: z.literal(\"length_skew\"),\n actual_length_skew: z.number().nonnegative().finite(),\n maximum_length_skew: z.number().nonnegative().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"min_length\"),\n actual_trace_length: z.number().nonnegative().finite(),\n minimum_trace_length: z.number().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"max_length\"),\n actual_trace_length: z.number().nonnegative().finite(),\n maximum_trace_length: z.number().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"target_length\"),\n actual_trace_length: z.number().nonnegative().finite(),\n target_trace_length: z.number().finite(),\n length_tolerance: z.number().nonnegative().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"pcb_trace_spacing\"),\n other_pcb_trace_id: z.string(),\n other_source_trace_id: z.string().optional(),\n actual_centerline_spacing: z.number().nonnegative().finite(),\n minimum_centerline_spacing: z.number().positive().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"pcb_spacing_to_other_signals\"),\n other_pcb_trace_id: z.string(),\n other_source_trace_id: z.string().optional(),\n actual_centerline_spacing: z.number().nonnegative().finite(),\n minimum_centerline_spacing: z.number().positive().finite(),\n }),\n error_base.extend({\n routing_rule: z.literal(\"impedance_target\"),\n target_impedance: z.number().positive().finite(),\n minimum_impedance: z.number().positive().finite().optional(),\n maximum_impedance: z.number().positive().finite().optional(),\n }),\n ])\n .superRefine((error, ctx) => {\n if (error.routing_rule !== \"impedance_target\") return\n if (\n error.minimum_impedance === undefined &&\n error.maximum_impedance === undefined\n )\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"minimum_impedance\"],\n message: \"Provide an impedance bound\",\n })\n if (\n error.minimum_impedance !== undefined &&\n error.maximum_impedance !== undefined &&\n error.minimum_impedance > error.maximum_impedance\n )\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"maximum_impedance\"],\n message: \"Impedance bounds must be ordered\",\n })\n })\n .describe(\n \"A declared bus or differential-pair routing constraint is violated.\",\n )\n\nexport type PcbBusRoutingConstraintErrorInput = z.input<\n typeof pcb_bus_routing_constraint_error\n>\nexpectTypesMatch<\n PcbBusRoutingConstraintError,\n z.infer<typeof pcb_bus_routing_constraint_error>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/** A declared bus or pair constraint could not be verified; this is not a pass. */\ninterface PcbBusRoutingConstraintWarningBase {\n type: \"pcb_bus_routing_constraint_warning\"\n pcb_bus_routing_constraint_warning_id: string\n warning_type: \"pcb_bus_routing_constraint_warning\"\n source_bus_id: string\n source_trace_ids: string[]\n pcb_trace_ids: string[]\n message: string\n subcircuit_id?: string\n}\n\nconst warning_base = z\n .object({\n type: z.literal(\"pcb_bus_routing_constraint_warning\"),\n pcb_bus_routing_constraint_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_bus_routing_constraint_warning\",\n ),\n warning_type: z\n .literal(\"pcb_bus_routing_constraint_warning\")\n .default(\"pcb_bus_routing_constraint_warning\"),\n source_bus_id: z.string(),\n source_trace_ids: z.array(z.string()).min(1),\n pcb_trace_ids: z.array(z.string()),\n message: z.string(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"A declared bus or pair constraint could not be verified; this is not a pass.\",\n )\n\ntype WarningRule =\n | \"route_geometry\"\n | \"reference_geometry\"\n | \"spacing_geometry\"\n | \"target_length\"\n | \"physical_impedance\"\ntype WithWarningContext<Rule> = Rule extends WarningRule\n ? {\n [Key in keyof (PcbBusRoutingConstraintWarningBase & {\n routing_rule: Rule\n })]: (PcbBusRoutingConstraintWarningBase & { routing_rule: Rule })[Key]\n }\n : never\nexport type PcbBusRoutingConstraintWarning = WithWarningContext<WarningRule>\n\nexport const pcb_bus_routing_constraint_warning = z.discriminatedUnion(\n \"routing_rule\",\n [\n warning_base.extend({ routing_rule: z.literal(\"route_geometry\") }),\n warning_base.extend({ routing_rule: z.literal(\"reference_geometry\") }),\n warning_base.extend({ routing_rule: z.literal(\"spacing_geometry\") }),\n warning_base.extend({ routing_rule: z.literal(\"target_length\") }),\n warning_base.extend({ routing_rule: z.literal(\"physical_impedance\") }),\n ],\n)\n\nexport type PcbBusRoutingConstraintWarningInput = z.input<\n typeof pcb_bus_routing_constraint_warning\n>\nexpectTypesMatch<\n PcbBusRoutingConstraintWarning,\n z.infer<typeof pcb_bus_routing_constraint_warning>\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_trace_error\"),\n pcb_trace_error_id: getZodPrefixedIdWithDefault(\"pcb_trace_error\"),\n error_type: z.literal(\"pcb_trace_error\").default(\"pcb_trace_error\"),\n center: point.optional(),\n pcb_trace_id: z.string(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a trace error on the PCB\")\n\nexport type PcbTraceErrorInput = z.input<typeof pcb_trace_error>\ntype InferredPcbTraceError = z.infer<typeof pcb_trace_error>\n\n/**\n * Defines a trace error on the PCB\n */\nexport interface PcbTraceError extends BaseCircuitJsonError {\n type: \"pcb_trace_error\"\n pcb_trace_error_id: string\n error_type: \"pcb_trace_error\"\n center?: Point\n pcb_trace_id: string\n source_trace_id: string\n pcb_component_ids: string[]\n pcb_port_ids: string[]\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbTraceError\n */\nexport type PCBTraceError = PcbTraceError\n\nexpectTypesMatch<PcbTraceError, InferredPcbTraceError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_trace_missing_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_trace_missing_error\"),\n pcb_trace_missing_error_id: getZodPrefixedIdWithDefault(\n \"pcb_trace_missing_error\",\n ),\n error_type: z\n .literal(\"pcb_trace_missing_error\")\n .default(\"pcb_trace_missing_error\"),\n center: point.optional(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Defines an error when a source trace has no corresponding PCB trace\",\n )\n\nexport type PcbTraceMissingErrorInput = z.input<typeof pcb_trace_missing_error>\ntype InferredPcbTraceMissingError = z.infer<typeof pcb_trace_missing_error>\n\n/**\n * Defines an error when a source trace has no corresponding PCB trace\n */\nexport interface PcbTraceMissingError extends BaseCircuitJsonError {\n type: \"pcb_trace_missing_error\"\n pcb_trace_missing_error_id: string\n error_type: \"pcb_trace_missing_error\"\n center?: Point\n source_trace_id: string\n pcb_component_ids: string[]\n pcb_port_ids: string[]\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbTraceMissingError\n */\nexport type PCBTraceMissingError = PcbTraceMissingError\n\nexpectTypesMatch<PcbTraceMissingError, InferredPcbTraceMissingError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port_not_matched_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_port_not_matched_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_port_not_matched_error\")\n .default(\"pcb_port_not_matched_error\"),\n pcb_component_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a trace error on the PCB where a port is not matched\")\n\nexport type PcbPortNotMatchedErrorInput = z.input<\n typeof pcb_port_not_matched_error\n>\ntype InferredPcbPortNotMatchedError = z.infer<typeof pcb_port_not_matched_error>\n\n/**\n * Defines a trace error on the PCB where a port is not matched\n */\nexport interface PcbPortNotMatchedError extends BaseCircuitJsonError {\n type: \"pcb_port_not_matched_error\"\n pcb_error_id: string\n error_type: \"pcb_port_not_matched_error\"\n pcb_component_ids: string[]\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPortNotMatchedError\n */\nexport type PCBPortNotMatchedError = PcbPortNotMatchedError\n\nexpectTypesMatch<PcbPortNotMatchedError, InferredPcbPortNotMatchedError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port_not_connected_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_port_not_connected_error\"),\n pcb_port_not_connected_error_id: getZodPrefixedIdWithDefault(\n \"pcb_port_not_connected_error\",\n ),\n error_type: z\n .literal(\"pcb_port_not_connected_error\")\n .default(\"pcb_port_not_connected_error\"),\n pcb_port_ids: z.array(z.string()),\n pcb_component_ids: z.array(z.string()),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines an error when a pcb port is not connected to any trace\")\n\nexport type PcbPortNotConnectedErrorInput = z.input<\n typeof pcb_port_not_connected_error\n>\ntype InferredPcbPortNotConnectedError = z.infer<\n typeof pcb_port_not_connected_error\n>\n\n/**\n * Defines an error when a pcb port is not connected to any trace\n */\nexport interface PcbPortNotConnectedError extends BaseCircuitJsonError {\n type: \"pcb_port_not_connected_error\"\n pcb_port_not_connected_error_id: string\n error_type: \"pcb_port_not_connected_error\"\n pcb_port_ids: string[]\n pcb_component_ids: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbPortNotConnectedError, InferredPcbPortNotConnectedError>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_net = z\n .object({\n type: z.literal(\"pcb_net\"),\n pcb_net_id: getZodPrefixedIdWithDefault(\"pcb_net\"),\n source_net_id: z.string().optional(),\n highlight_color: z.string().optional(),\n })\n .describe(\"Defines a net on the PCB\")\n\nexport type PcbNetInput = z.input<typeof pcb_net>\ntype InferredPcbNet = z.infer<typeof pcb_net>\n\n/**\n * Defines a net on the PCB\n */\nexport interface PcbNet {\n type: \"pcb_net\"\n pcb_net_id: string\n source_net_id?: string\n highlight_color?: string\n}\n\nexpectTypesMatch<PcbNet, InferredPcbNet>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_via = z\n .object({\n type: z.literal(\"pcb_via\"),\n pcb_via_id: getZodPrefixedIdWithDefault(\"pcb_via\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n x: distance,\n y: distance,\n outer_diameter: distance.default(\"0.6mm\"),\n hole_diameter: distance.default(\"0.25mm\"),\n topmost_drill_layer: layer_ref.optional(),\n bottommost_drill_layer: layer_ref.optional(),\n through_hole: z.boolean().optional(),\n /** @deprecated */\n from_layer: layer_ref.optional(),\n /** @deprecated */\n to_layer: layer_ref.optional(),\n layers: z.array(layer_ref),\n /** PCB ports belonging to this via, including layer ports and aliases. */\n pcb_port_ids: z.array(z.string()).optional(),\n pcb_trace_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n source_net_id: z.string().min(1).optional(),\n net_is_assignable: z.boolean().optional(),\n net_assigned: z.boolean().optional(),\n /** @deprecated Use tented_on_top and tented_on_bottom instead. */\n is_tented: z.boolean().optional(),\n tented_on_top: z.boolean().optional(),\n tented_on_bottom: z.boolean().optional(),\n })\n .transform(({ is_tented, ...via }) => {\n if (is_tented !== undefined) {\n via.tented_on_top ??= is_tented\n via.tented_on_bottom ??= is_tented\n }\n return via\n })\n .describe(\"Defines a via on the PCB\")\n\nexport type PcbViaInput = z.input<typeof pcb_via>\ntype InferredPcbVia = z.infer<typeof pcb_via>\n\n/**\n * Defines a via on the PCB\n */\nexport interface PcbVia {\n type: \"pcb_via\"\n pcb_via_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n subcircuit_connectivity_map_key?: string\n x: Distance\n y: Distance\n outer_diameter: Distance\n hole_diameter: Distance\n topmost_drill_layer?: LayerRef\n bottommost_drill_layer?: LayerRef\n through_hole?: boolean\n /** @deprecated */\n from_layer?: LayerRef\n /** @deprecated */\n to_layer?: LayerRef\n layers: LayerRef[]\n /** PCB ports belonging to this via, including layer ports and aliases. */\n pcb_port_ids?: string[]\n pcb_trace_id?: string\n source_trace_id?: string\n source_net_id?: string\n net_is_assignable?: boolean\n net_assigned?: boolean\n tented_on_top?: boolean\n tented_on_bottom?: boolean\n}\n\n/**\n * @deprecated use PcbVia\n */\nexport type PCBVia = PcbVia\n\nexpectTypesMatch<PcbVia, InferredPcbVia>(true)\n","import {\n type NinePointAnchor,\n type Point,\n getZodPrefixedIdWithDefault,\n ninePointAnchor,\n point,\n} from \"src/common\"\nimport {\n type ManufacturingDrcProperties,\n manufacturing_drc_properties,\n} from \"src/pcb/properties/manufacturing_drc_properties\"\nimport { type Length, length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport const pcb_board = z\n .object({\n type: z.literal(\"pcb_board\"),\n pcb_board_id: getZodPrefixedIdWithDefault(\"pcb_board\"),\n pcb_panel_id: z.string().optional(),\n carrier_pcb_board_id: z.string().optional(),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n is_mounted_to_carrier_board: z.boolean().optional(),\n is_via_in_pad_allowed: z.boolean().optional(),\n default_via_tented_on_top: z.boolean().optional(),\n default_via_tented_on_bottom: z.boolean().optional(),\n default_via_plugged: z.boolean().optional(),\n width: length.optional(),\n height: length.optional(),\n center: point,\n display_offset_x: z\n .string()\n .optional()\n .describe(\n \"How to display the x offset for this board, usually corresponding with how the user specified it\",\n ),\n display_offset_y: z\n .string()\n .optional()\n .describe(\n \"How to display the y offset for this board, usually corresponding with how the user specified it\",\n ),\n thickness: length.optional().default(1.4),\n num_layers: z.number().optional().default(4),\n allow_blind_and_buried_vias: z\n .boolean()\n .optional()\n .describe(\n \"Whether autorouters may generate blind and buried vias. False restricts newly generated vias to the full board stack.\",\n ),\n outline: z.array(point).optional(),\n shape: z.enum([\"rect\", \"polygon\"]).optional(),\n material: z.enum([\"fr4\", \"fr1\", \"flex\"]).default(\"fr4\"),\n solder_mask_color: z.string().optional(),\n silkscreen_color: z.string().optional(),\n anchor_position: point.optional(),\n anchor_alignment: ninePointAnchor.optional(),\n position_mode: z.enum([\"relative_to_panel_anchor\", \"none\"]).optional(),\n })\n .merge(manufacturing_drc_properties)\n .describe(\"Defines the board outline of the PCB\")\n\n/**\n * Defines the board outline of the PCB\n */\nexport interface PcbBoard extends ManufacturingDrcProperties {\n type: \"pcb_board\"\n pcb_board_id: string\n pcb_panel_id?: string\n carrier_pcb_board_id?: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n is_mounted_to_carrier_board?: boolean\n is_via_in_pad_allowed?: boolean\n default_via_tented_on_top?: boolean\n default_via_tented_on_bottom?: boolean\n default_via_plugged?: boolean\n width?: Length\n height?: Length\n display_offset_x?: string\n display_offset_y?: string\n thickness: Length\n num_layers: number\n /** Whether autorouters may generate blind and buried vias. */\n allow_blind_and_buried_vias?: boolean\n center: Point\n outline?: Point[]\n shape?: \"rect\" | \"polygon\"\n material: \"fr4\" | \"fr1\" | \"flex\"\n solder_mask_color?: string\n silkscreen_color?: string\n anchor_position?: Point\n anchor_alignment?: NinePointAnchor\n position_mode?: \"relative_to_panel_anchor\" | \"none\"\n}\n\nexport type PcbBoardInput = z.input<typeof pcb_board>\ntype InferredPcbBoard = z.infer<typeof pcb_board>\n\n/**\n * @deprecated use PcbBoard\n */\nexport type PCBBoard = PcbBoard\n\nexpectTypesMatch<PcbBoard, InferredPcbBoard>(true)\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nconst finite_point = point.extend({\n x: length.pipe(z.number().finite()),\n y: length.pipe(z.number().finite()),\n})\n\nexport const pcb_bend = z\n .object({\n type: z.literal(\"pcb_bend\"),\n pcb_bend_id: getZodPrefixedIdWithDefault(\"pcb_bend\"),\n pcb_board_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n start: finite_point,\n end: finite_point,\n bend_angle: rotation.pipe(z.number().finite()),\n bend_radius: length.pipe(z.number().finite().positive()),\n bend_side: z.enum([\"left\", \"right\"]),\n })\n .refine(({ start, end }) => start.x !== end.x || start.y !== end.y, {\n message: \"Bend centerline endpoints must be distinct\",\n path: [\"end\"],\n })\n .describe(\n \"Defines a finite-radius bend on a flat PCB for runtime CAD folding\",\n )\n\nexport type PcbBendInput = z.input<typeof pcb_bend>\ntype InferredPcbBend = z.infer<typeof pcb_bend>\n\n/** Defines a bend without changing the flat PCB layout or stored CAD poses. */\nexport interface PcbBend {\n type: \"pcb_bend\"\n pcb_bend_id: string\n pcb_board_id: string\n /** Ownership only; group transforms are already resolved into board coordinates. */\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n /** Bend-zone centerline endpoints, relative to the flat board center, in mm. */\n start: Point\n end: Point\n /** Target angle in signed degrees; positive folds the moving side toward local top. Zero is flat. */\n bend_angle: Rotation\n /** Positive radius at the neutral surface, in mm. Zone width is radius times absolute angle in radians. */\n bend_radius: Length\n /** Moving side looking from start toward end in the flat top view. */\n bend_side: \"left\" | \"right\"\n}\n\nexpectTypesMatch<PcbBend, InferredPcbBend>(true)\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nconst positive_length = length.pipe(z.number().finite().positive())\nconst finite_point = point.extend({\n x: length.pipe(z.number().finite()),\n y: length.pipe(z.number().finite()),\n})\n\nconst pcb_stiffener_base = z.object({\n type: z.literal(\"pcb_stiffener\"),\n pcb_stiffener_id: getZodPrefixedIdWithDefault(\"pcb_stiffener\"),\n pcb_board_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n layer: z.enum([\"top\", \"bottom\"]),\n material: z.enum([\"fr4\", \"polyimide\", \"stainless_steel\", \"aluminum\"]),\n thickness: positive_length,\n adhesive_thickness: length.pipe(z.number().finite().nonnegative()).optional(),\n})\n\n/** Common properties of bonded PCB reinforcement. */\nexport interface PcbStiffenerBase {\n type: \"pcb_stiffener\"\n pcb_stiffener_id: string\n pcb_board_id: string\n /** Ownership only; geometry is already resolved into board coordinates. */\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n /** Attachment face, not an additional copper layer. */\n layer: \"top\" | \"bottom\"\n material: \"fr4\" | \"polyimide\" | \"stainless_steel\" | \"aluminum\"\n /** Material thickness in mm, excluding the PCB and adhesive. */\n thickness: Length\n /** Adhesive thickness in mm; omission means unspecified, not zero. */\n adhesive_thickness?: Length\n}\n\nexport const pcb_stiffener_rect = pcb_stiffener_base.extend({\n shape: z.literal(\"rect\"),\n center: finite_point,\n rotation: rotation.pipe(z.number().finite()).optional(),\n width: positive_length,\n height: positive_length,\n outline: z.never().optional(),\n})\n\nexport type PcbStiffenerRectInput = z.input<typeof pcb_stiffener_rect>\n/** A rectangular reinforcement bonded to one face of the PCB. */\nexport interface PcbStiffenerRect extends PcbStiffenerBase {\n shape: \"rect\"\n /** Relative to the flat board center, in mm. */\n center: Point\n /** Degrees counterclockwise in the flat top view; omission means zero. */\n rotation?: Rotation\n width: Length\n height: Length\n outline?: never\n}\nexpectTypesMatch<PcbStiffenerRect, z.infer<typeof pcb_stiffener_rect>>(true)\n\nexport const pcb_stiffener_polygon = pcb_stiffener_base.extend({\n shape: z.literal(\"polygon\"),\n outline: z\n .array(finite_point)\n .min(3)\n .refine((points) => {\n const twice_area = points.reduce((sum, p, i) => {\n const next = points[(i + 1) % points.length]!\n return sum + p.x * next.y - next.x * p.y\n }, 0)\n return Number.isFinite(twice_area) && twice_area !== 0\n }, \"Stiffener outline must enclose a nonzero area\"),\n center: z.never().optional(),\n rotation: z.never().optional(),\n width: z.never().optional(),\n height: z.never().optional(),\n})\n\nexport type PcbStiffenerPolygonInput = z.input<typeof pcb_stiffener_polygon>\n/** A polygonal reinforcement with resolved flat-board geometry. */\nexport interface PcbStiffenerPolygon extends PcbStiffenerBase {\n shape: \"polygon\"\n /** Implicitly closed vertices relative to the flat board center, in mm. All placement/rotation is baked in. */\n outline: Point[]\n center?: never\n rotation?: never\n width?: never\n height?: never\n}\nexpectTypesMatch<PcbStiffenerPolygon, z.infer<typeof pcb_stiffener_polygon>>(\n true,\n)\n\nexport const pcb_stiffener = z\n .discriminatedUnion(\"shape\", [pcb_stiffener_rect, pcb_stiffener_polygon])\n .describe(\n \"Defines bonded mechanical PCB reinforcement without adding copper layers\",\n )\n\nexport type PcbStiffenerInput = z.input<typeof pcb_stiffener>\nexport type PcbStiffener = PcbStiffenerRect | PcbStiffenerPolygon\nexpectTypesMatch<PcbStiffener, z.infer<typeof pcb_stiffener>>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_panel = z\n .object({\n type: z.literal(\"pcb_panel\"),\n pcb_panel_id: getZodPrefixedIdWithDefault(\"pcb_panel\"),\n width: length,\n height: length,\n center: point,\n thickness: length.optional().default(1.4),\n covered_with_solder_mask: z.boolean().optional().default(true),\n })\n .describe(\"Defines a PCB panel that can contain multiple boards\")\n\n/**\n * Defines a PCB panel that can contain multiple boards\n */\nexport interface PcbPanel {\n type: \"pcb_panel\"\n pcb_panel_id: string\n width: Length\n height: Length\n center: Point\n thickness: Length\n covered_with_solder_mask: boolean\n}\n\nexport type PcbPanelInput = z.input<typeof pcb_panel>\ntype InferredPcbPanel = z.infer<typeof pcb_panel>\n\n/**\n * @deprecated use PcbPanel\n */\nexport type PCBPanel = PcbPanel\n\nexpectTypesMatch<PcbPanel, InferredPcbPanel>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_placement_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_placement_error\"),\n pcb_placement_error_id: getZodPrefixedIdWithDefault(\"pcb_placement_error\"),\n error_type: z.literal(\"pcb_placement_error\").default(\"pcb_placement_error\"),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a placement error on the PCB\")\n\nexport type PcbPlacementErrorInput = z.input<typeof pcb_placement_error>\ntype InferredPcbPlacementError = z.infer<typeof pcb_placement_error>\n\n/**\n * Defines a placement error on the PCB\n */\nexport interface PcbPlacementError extends BaseCircuitJsonError {\n type: \"pcb_placement_error\"\n pcb_placement_error_id: string\n error_type: \"pcb_placement_error\"\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPlacementError\n */\nexport type PCBPlacementError = PcbPlacementError\n\nexpectTypesMatch<PcbPlacementError, InferredPcbPlacementError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_packing_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_packing_error\"),\n pcb_packing_error_id: getZodPrefixedIdWithDefault(\"pcb_packing_error\"),\n error_type: z.literal(\"pcb_packing_error\").default(\"pcb_packing_error\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a failure to pack PCB components within layout bounds\")\n\nexport type PcbPackingErrorInput = z.input<typeof pcb_packing_error>\ntype InferredPcbPackingError = z.infer<typeof pcb_packing_error>\n\n/**\n * Defines a failure to pack PCB components within layout bounds\n */\nexport interface PcbPackingError extends BaseCircuitJsonError {\n type: \"pcb_packing_error\"\n pcb_packing_error_id: string\n error_type: \"pcb_packing_error\"\n pcb_group_id?: string\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPackingError\n */\nexport type PCBPackingError = PcbPackingError\n\nexpectTypesMatch<PcbPackingError, InferredPcbPackingError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_panelization_placement_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_panelization_placement_error\"),\n pcb_panelization_placement_error_id: getZodPrefixedIdWithDefault(\n \"pcb_panelization_placement_error\",\n ),\n error_type: z\n .literal(\"pcb_panelization_placement_error\")\n .default(\"pcb_panelization_placement_error\"),\n pcb_panel_id: z.string().optional(),\n pcb_board_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a panelization placement error on the PCB\")\n\nexport type PcbPanelizationPlacementErrorInput = z.input<\n typeof pcb_panelization_placement_error\n>\ntype InferredPcbPanelizationPlacementError = z.infer<\n typeof pcb_panelization_placement_error\n>\n\n/**\n * Defines a panelization placement error on the PCB\n */\nexport interface PcbPanelizationPlacementError extends BaseCircuitJsonError {\n type: \"pcb_panelization_placement_error\"\n pcb_panelization_placement_error_id: string\n error_type: \"pcb_panelization_placement_error\"\n pcb_panel_id?: string\n pcb_board_id?: string\n subcircuit_id?: string\n}\n\n/**\n * @deprecated use PcbPanelizationPlacementError\n */\nexport type PCBPanelizationPlacementError = PcbPanelizationPlacementError\n\nexpectTypesMatch<\n PcbPanelizationPlacementError,\n InferredPcbPanelizationPlacementError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { route_hint_point, type RouteHintPoint } from \"src/pcb\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/**\n * A hint that can be used during generation of a PCB trace.\n */\nexport interface PcbTraceHint {\n type: \"pcb_trace_hint\"\n pcb_trace_hint_id: string\n pcb_port_id: string\n pcb_component_id: string\n route: RouteHintPoint[]\n subcircuit_id?: string\n}\n\nexport const pcb_trace_hint = z\n .object({\n type: z.literal(\"pcb_trace_hint\"),\n pcb_trace_hint_id: getZodPrefixedIdWithDefault(\"pcb_trace_hint\"),\n pcb_port_id: z.string(),\n pcb_component_id: z.string(),\n route: z.array(route_hint_point),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"A hint that can be used during generation of a PCB trace\")\n\nexport type PcbTraceHintInput = z.input<typeof pcb_trace_hint>\ntype InferredPcbTraceHint = z.infer<typeof pcb_trace_hint>\n\n/**\n * @deprecated use PcbTraceHint\n */\nexport type PCBTraceHint = PcbTraceHint\n\nexpectTypesMatch<PcbTraceHint, InferredPcbTraceHint>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport {\n layer_ref,\n type LayerRef,\n type VisibleLayer,\n visible_layer,\n} from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_line = z\n .object({\n type: z.literal(\"pcb_silkscreen_line\"),\n pcb_silkscreen_line_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_line\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n stroke_width: distance.default(\"0.1mm\"),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n layer: visible_layer,\n })\n .describe(\"Defines a silkscreen line on the PCB\")\n\nexport type PcbSilkscreenLineInput = z.input<typeof pcb_silkscreen_line>\ntype InferredPcbSilkscreenLine = z.infer<typeof pcb_silkscreen_line>\n\n/**\n * Defines a silkscreen line on the PCB\n */\nexport interface PcbSilkscreenLine {\n type: \"pcb_silkscreen_line\"\n pcb_silkscreen_line_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n stroke_width: Distance\n x1: Distance\n y1: Distance\n x2: Distance\n y2: Distance\n layer: VisibleLayer\n}\n\n/**\n * @deprecated use PcbSilkscreenLine\n */\nexport type PCBSilkscreenLine = PcbSilkscreenLine\n\nexpectTypesMatch<PcbSilkscreenLine, InferredPcbSilkscreenLine>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n visible_layer,\n type VisibleLayerRef,\n} from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_path = z\n .object({\n type: z.literal(\"pcb_silkscreen_path\"),\n pcb_silkscreen_path_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_path\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n route: z.array(point),\n stroke_width: length,\n })\n .describe(\"Defines a silkscreen path on the PCB\")\n\nexport type PcbSilkscreenPathInput = z.input<typeof pcb_silkscreen_path>\ntype InferredPcbSilkscreenPath = z.infer<typeof pcb_silkscreen_path>\n\n/**\n * Defines a silkscreen path on the PCB\n */\nexport interface PcbSilkscreenPath {\n type: \"pcb_silkscreen_path\"\n pcb_silkscreen_path_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayerRef\n route: Point[]\n stroke_width: Length\n}\n\n/**\n * @deprecated use PcbSilkscreenPath\n */\nexport type PcbSilkscreenPathDeprecated = PcbSilkscreenPath\n\nexpectTypesMatch<PcbSilkscreenPath, InferredPcbSilkscreenPath>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { distance, length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common/NinePointAnchor\"\n\nexport const pcb_silkscreen_text = z\n .object({\n type: z.literal(\"pcb_silkscreen_text\"),\n pcb_silkscreen_text_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_text\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"0.2mm\"),\n pcb_component_id: z.string(),\n text: z.string(),\n is_knockout: z.boolean().default(false).optional(),\n knockout_padding: z\n .object({\n left: length,\n top: length,\n bottom: length,\n right: length,\n })\n .default({\n left: \"0.2mm\",\n top: \"0.2mm\",\n bottom: \"0.2mm\",\n right: \"0.2mm\",\n })\n .optional(),\n ccw_rotation: z.number().optional(),\n layer: layer_ref,\n is_mirrored: z.boolean().default(false).optional(),\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: ninePointAnchor.default(\"center\"),\n })\n .describe(\"Defines silkscreen text on the PCB\")\n\nexport type PcbSilkscreenTextInput = z.input<typeof pcb_silkscreen_text>\ntype InferredPcbSilkscreenText = z.infer<typeof pcb_silkscreen_text>\n\n/**\n * Defines silkscreen text on the PCB\n */\nexport interface PcbSilkscreenText {\n type: \"pcb_silkscreen_text\"\n pcb_silkscreen_text_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n font: \"tscircuit2024\"\n font_size: Length\n pcb_component_id: string\n text: string\n is_knockout?: boolean\n knockout_padding?: {\n left: Length\n top: Length\n bottom: Length\n right: Length\n }\n ccw_rotation?: number\n layer: LayerRef\n is_mirrored?: boolean\n anchor_position: Point\n anchor_alignment: NinePointAnchor\n}\n\n/**\n * @deprecated use PcbSilkscreenText\n */\nexport type PCBSilkscreenText = PcbSilkscreenText\n\nexpectTypesMatch<PcbSilkscreenText, InferredPcbSilkscreenText>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { distance, length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common/NinePointAnchor\"\n\nexport const pcb_copper_text = z\n .object({\n type: z.literal(\"pcb_copper_text\"),\n pcb_copper_text_id: getZodPrefixedIdWithDefault(\"pcb_copper_text\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"0.2mm\"),\n pcb_component_id: z.string(),\n text: z.string(),\n is_knockout: z.boolean().default(false).optional(),\n knockout_padding: z\n .object({\n left: length,\n top: length,\n bottom: length,\n right: length,\n })\n .default({\n left: \"0.2mm\",\n top: \"0.2mm\",\n bottom: \"0.2mm\",\n right: \"0.2mm\",\n })\n .optional(),\n ccw_rotation: z.number().optional(),\n layer: layer_ref,\n is_mirrored: z.boolean().default(false).optional(),\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: ninePointAnchor.default(\"center\"),\n })\n .describe(\"Defines copper text on the PCB\")\n\nexport type PcbCopperTextInput = z.input<typeof pcb_copper_text>\ntype InferredPcbCopperText = z.infer<typeof pcb_copper_text>\n\n/**\n * Defines copper text on the PCB\n */\nexport interface PcbCopperText {\n type: \"pcb_copper_text\"\n pcb_copper_text_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n font: \"tscircuit2024\"\n font_size: Length\n pcb_component_id: string\n text: string\n is_knockout?: boolean\n knockout_padding?: {\n left: Length\n top: Length\n bottom: Length\n right: Length\n }\n ccw_rotation?: number\n layer: LayerRef\n is_mirrored?: boolean\n anchor_position: Point\n anchor_alignment: NinePointAnchor\n}\n\n/**\n * @deprecated use PcbCopperText\n */\nexport type PCBCopperText = PcbCopperText\n\nexpectTypesMatch<PcbCopperText, InferredPcbCopperText>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_rect = z\n .object({\n type: z.literal(\"pcb_silkscreen_rect\"),\n pcb_silkscreen_rect_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_rect\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: layer_ref,\n stroke_width: length.default(\"1mm\"),\n corner_radius: length.optional(),\n is_filled: z.boolean().default(true).optional(),\n has_stroke: z.boolean().optional(),\n is_stroke_dashed: z.boolean().optional(),\n ccw_rotation: z.number().optional(),\n })\n .describe(\"Defines a silkscreen rect on the PCB\")\n\nexport type PcbSilkscreenRectInput = z.input<typeof pcb_silkscreen_rect>\ntype InferredPcbSilkscreenRect = z.infer<typeof pcb_silkscreen_rect>\n\n/**\n * Defines a silkscreen rect on the PCB\n */\nexport interface PcbSilkscreenRect {\n type: \"pcb_silkscreen_rect\"\n pcb_silkscreen_rect_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: LayerRef\n stroke_width: Length\n corner_radius?: Length\n is_filled?: boolean\n has_stroke?: boolean\n is_stroke_dashed?: boolean\n ccw_rotation?: number\n}\n\n/**\n * @deprecated use PcbSilkscreenRect\n */\nexport type PcbSilkscreenRectOld = PcbSilkscreenRect\n\nexpectTypesMatch<PcbSilkscreenRect, InferredPcbSilkscreenRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n layer_ref,\n visible_layer,\n type LayerRef,\n type VisibleLayer,\n} from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_circle = z\n .object({\n type: z.literal(\"pcb_silkscreen_circle\"),\n pcb_silkscreen_circle_id: getZodPrefixedIdWithDefault(\n \"pcb_silkscreen_circle\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius: length,\n layer: visible_layer,\n stroke_width: length.default(\"1mm\"),\n is_filled: z.boolean().optional(),\n })\n .describe(\"Defines a silkscreen circle on the PCB\")\n\nexport type PcbSilkscreenCircleInput = z.input<typeof pcb_silkscreen_circle>\ntype InferredPcbSilkscreenCircle = z.infer<typeof pcb_silkscreen_circle>\n\n/**\n * Defines a silkscreen circle on the PCB\n */\nexport interface PcbSilkscreenCircle {\n type: \"pcb_silkscreen_circle\"\n pcb_silkscreen_circle_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius: Length\n layer: VisibleLayer\n stroke_width: Length\n is_filled?: boolean\n}\n\nexpectTypesMatch<PcbSilkscreenCircle, InferredPcbSilkscreenCircle>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n layer_ref,\n type LayerRef,\n visible_layer,\n type VisibleLayer,\n} from \"src/pcb/properties/layer_ref\"\nimport { distance, rotation, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_oval = z\n .object({\n type: z.literal(\"pcb_silkscreen_oval\"),\n pcb_silkscreen_oval_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_oval\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius_x: distance,\n radius_y: distance,\n layer: visible_layer,\n ccw_rotation: rotation.optional(),\n })\n .describe(\"Defines a silkscreen oval on the PCB\")\n\nexport type PcbSilkscreenOvalInput = z.input<typeof pcb_silkscreen_oval>\ntype InferredPcbSilkscreenOval = z.infer<typeof pcb_silkscreen_oval>\n\n/**\n * Defines a silkscreen oval on the PCB\n */\nexport interface PcbSilkscreenOval {\n type: \"pcb_silkscreen_oval\"\n pcb_silkscreen_oval_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius_x: Distance\n radius_y: Distance\n layer: VisibleLayer\n ccw_rotation?: number\n}\n\n/**\n * @deprecated use PcbSilkscreenOval\n */\nexport type PcbSilkscreenOvalDeprecated = PcbSilkscreenOval\n\nexpectTypesMatch<PcbSilkscreenOval, InferredPcbSilkscreenOval>(true)\n","import { z } from \"zod\"\nimport { asset, type Asset, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { brep_shape, type BRepShape } from \"./properties/brep\"\n\nconst pcb_silkscreen_graphic_base = z.object({\n type: z.literal(\"pcb_silkscreen_graphic\"),\n pcb_silkscreen_graphic_id: getZodPrefixedIdWithDefault(\n \"pcb_silkscreen_graphic\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n image_asset: asset.optional(),\n})\n\nexport const pcb_silkscreen_graphic_brep = pcb_silkscreen_graphic_base\n .extend({\n shape: z.literal(\"brep\"),\n brep_shape: brep_shape,\n })\n .describe(\"Defines a BRep silkscreen graphic on the PCB\")\n\nexport type PcbSilkscreenGraphicBRepInput = z.input<\n typeof pcb_silkscreen_graphic_brep\n>\ntype InferredPcbSilkscreenGraphicBRep = z.infer<\n typeof pcb_silkscreen_graphic_brep\n>\n\n/**\n * Defines a BRep silkscreen graphic on the PCB\n */\nexport interface PcbSilkscreenGraphicBRep {\n type: \"pcb_silkscreen_graphic\"\n pcb_silkscreen_graphic_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n image_asset?: Asset\n shape: \"brep\"\n brep_shape: BRepShape\n}\nexpectTypesMatch<PcbSilkscreenGraphicBRep, InferredPcbSilkscreenGraphicBRep>(\n true,\n)\n\nexport const pcb_silkscreen_graphic = z\n .discriminatedUnion(\"shape\", [pcb_silkscreen_graphic_brep])\n .describe(\"Defines a silkscreen graphic on the PCB\")\n\nexport type PcbSilkscreenGraphicInput = z.input<typeof pcb_silkscreen_graphic>\nexport type PcbSilkscreenGraphic = PcbSilkscreenGraphicBRep\n\ntype InferredPcbSilkscreenGraphic = z.infer<typeof pcb_silkscreen_graphic>\nexpectTypesMatch<PcbSilkscreenGraphic, InferredPcbSilkscreenGraphic>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_silkscreen_pill = z\n .object({\n type: z.literal(\"pcb_silkscreen_pill\"),\n pcb_silkscreen_pill_id: getZodPrefixedIdWithDefault(\"pcb_silkscreen_pill\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: layer_ref,\n ccw_rotation: z.number().optional(),\n })\n .describe(\"Defines a silkscreen pill on the PCB\")\n\nexport type PcbSilkscreenPillInput = z.input<typeof pcb_silkscreen_pill>\ntype InferredPcbSilkscreenPill = z.infer<typeof pcb_silkscreen_pill>\n\n/**\n * Defines a silkscreen pill on the PCB\n */\nexport interface PcbSilkscreenPill {\n type: \"pcb_silkscreen_pill\"\n pcb_silkscreen_pill_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: LayerRef\n ccw_rotation?: number\n}\n\n/**\n * @deprecated use PcbSilkscreenPill\n */\nexport type PcbSilkscreenPillDeprecated = PcbSilkscreenPill\n\nexpectTypesMatch<PcbSilkscreenPill, InferredPcbSilkscreenPill>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { getZodPrefixedIdWithDefault } from \"src/common/getZodPrefixedIdWithDefault\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_text = z\n .object({\n type: z.literal(\"pcb_fabrication_note_text\"),\n pcb_fabrication_note_text_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_text\",\n ),\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"1mm\"),\n pcb_component_id: z.string(),\n text: z.string(),\n ccw_rotation: z.number().optional(),\n layer: visible_layer,\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: z\n .enum([\"center\", \"top_left\", \"top_right\", \"bottom_left\", \"bottom_right\"])\n .default(\"center\"),\n color: z.string().optional(),\n })\n .describe(\n \"Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators\",\n )\n\nexport type PcbFabricationNoteTextInput = z.input<\n typeof pcb_fabrication_note_text\n>\ntype InferredPcbFabricationNoteText = z.infer<typeof pcb_fabrication_note_text>\n\n/**\n * Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators\n */\nexport interface PcbFabricationNoteText {\n type: \"pcb_fabrication_note_text\"\n pcb_fabrication_note_text_id: string\n subcircuit_id?: string\n pcb_group_id?: string\n font: \"tscircuit2024\"\n font_size: Length\n pcb_component_id: string\n text: string\n ccw_rotation?: number\n layer: VisibleLayer\n anchor_position: Point\n anchor_alignment:\n | \"center\"\n | \"top_left\"\n | \"top_right\"\n | \"bottom_left\"\n | \"bottom_right\"\n color?: string\n}\n\n/**\n * @deprecated use PcbFabricationNoteText\n */\nexport type PCBFabricationNoteText = PcbFabricationNoteText\n\nexpectTypesMatch<PcbFabricationNoteText, InferredPcbFabricationNoteText>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n layer_ref,\n visible_layer,\n type LayerRef,\n} from \"src/pcb/properties/layer_ref\"\nimport { point, type Point } from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_path = z\n .object({\n type: z.literal(\"pcb_fabrication_note_path\"),\n pcb_fabrication_note_path_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_path\",\n ),\n pcb_component_id: z.string(),\n subcircuit_id: z.string().optional(),\n layer: layer_ref,\n route: z.array(point),\n stroke_width: length,\n color: z.string().optional(),\n is_filled: z.boolean().optional(),\n has_stroke: z.boolean().optional(),\n })\n .describe(\n \"Defines a fabrication path on the PCB for fabricators or assemblers\",\n )\n\nexport type PcbFabricationNotePathInput = z.input<\n typeof pcb_fabrication_note_path\n>\ntype InferredPcbFabricationNotePath = z.infer<typeof pcb_fabrication_note_path>\n\n/**\n * Defines a fabrication path on the PCB for fabricators or assemblers\n */\nexport interface PcbFabricationNotePath {\n type: \"pcb_fabrication_note_path\"\n pcb_fabrication_note_path_id: string\n pcb_component_id: string\n subcircuit_id?: string\n layer: LayerRef\n route: Point[]\n stroke_width: Length\n color?: string\n /** Fill the route as a closed polygon using color. Defaults to false. */\n is_filled?: boolean\n /** Draw the outline using stroke_width and color. Defaults to true. */\n has_stroke?: boolean\n}\n\n/**\n * @deprecated use PcbFabricationNotePath\n */\nexport type PCBFabricationNotePath = PcbFabricationNotePath\n\nexpectTypesMatch<PcbFabricationNotePath, InferredPcbFabricationNotePath>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_rect = z\n .object({\n type: z.literal(\"pcb_fabrication_note_rect\"),\n pcb_fabrication_note_rect_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_rect\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: visible_layer,\n stroke_width: length.default(\"0.1mm\"),\n corner_radius: length.optional(),\n is_filled: z.boolean().optional(),\n has_stroke: z.boolean().optional(),\n is_stroke_dashed: z.boolean().optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a fabrication note rectangle on the PCB\")\n\nexport type PcbFabricationNoteRectInput = z.input<\n typeof pcb_fabrication_note_rect\n>\ntype InferredPcbFabricationNoteRect = z.infer<typeof pcb_fabrication_note_rect>\n\n/**\n * Defines a fabrication note rectangle on the PCB\n */\nexport interface PcbFabricationNoteRect {\n type: \"pcb_fabrication_note_rect\"\n pcb_fabrication_note_rect_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: VisibleLayer\n stroke_width: Length\n corner_radius?: Length\n is_filled?: boolean\n has_stroke?: boolean\n is_stroke_dashed?: boolean\n color?: string\n}\n\n/**\n * @deprecated use PcbFabricationNoteRect\n */\nexport type PCBFabricationNoteRect = PcbFabricationNoteRect\n\nexpectTypesMatch<PcbFabricationNoteRect, InferredPcbFabricationNoteRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabrication_note_dimension = z\n .object({\n type: z.literal(\"pcb_fabrication_note_dimension\"),\n pcb_fabrication_note_dimension_id: getZodPrefixedIdWithDefault(\n \"pcb_fabrication_note_dimension\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n from: point,\n to: point,\n text: z.string().optional(),\n text_ccw_rotation: z.number().optional(),\n offset: length.optional(),\n offset_distance: length.optional(),\n offset_direction: z\n .object({\n x: z.number(),\n y: z.number(),\n })\n .optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: length.default(\"1mm\"),\n color: z.string().optional(),\n arrow_size: length.default(\"1mm\"),\n })\n .describe(\"Defines a measurement annotation within PCB fabrication notes\")\n\nexport type PcbFabricationNoteDimensionInput = z.input<\n typeof pcb_fabrication_note_dimension\n>\ntype InferredPcbFabricationNoteDimension = z.infer<\n typeof pcb_fabrication_note_dimension\n>\n\n/**\n * Defines a measurement annotation within PCB fabrication notes\n */\nexport interface PcbFabricationNoteDimension {\n type: \"pcb_fabrication_note_dimension\"\n pcb_fabrication_note_dimension_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n from: Point\n to: Point\n text?: string\n text_ccw_rotation?: number\n offset?: Length\n offset_distance?: Length\n offset_direction?: {\n x: number\n y: number\n }\n font: \"tscircuit2024\"\n font_size: Length\n color?: string\n arrow_size: Length\n}\n\n/**\n * @deprecated use PcbFabricationNoteDimension\n */\nexport type PCBFabricationNoteDimension = PcbFabricationNoteDimension\n\nexpectTypesMatch<\n PcbFabricationNoteDimension,\n InferredPcbFabricationNoteDimension\n>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { distance, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_text = z\n .object({\n type: z.literal(\"pcb_note_text\"),\n pcb_note_text_id: getZodPrefixedIdWithDefault(\"pcb_note_text\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: distance.default(\"1mm\"),\n text: z.string().optional(),\n anchor_position: point.default({ x: 0, y: 0 }),\n anchor_alignment: z\n .enum([\"center\", \"top_left\", \"top_right\", \"bottom_left\", \"bottom_right\"])\n .default(\"center\"),\n layer: visible_layer.default(\"top\"),\n is_mirrored_from_top_view: z.boolean().optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a documentation note in text on the PCB\")\n\nexport type PcbNoteTextInput = z.input<typeof pcb_note_text>\ntype InferredPcbNoteText = z.infer<typeof pcb_note_text>\n\n/**\n * Defines a documentation note in text on the PCB\n */\nexport interface PcbNoteText {\n type: \"pcb_note_text\"\n pcb_note_text_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n font: \"tscircuit2024\"\n font_size: Length\n text?: string\n anchor_position: Point\n anchor_alignment:\n | \"center\"\n | \"top_left\"\n | \"top_right\"\n | \"bottom_left\"\n | \"bottom_right\"\n layer: VisibleLayer\n is_mirrored_from_top_view?: boolean\n color?: string\n}\n\nexpectTypesMatch<PcbNoteText, InferredPcbNoteText>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_rect = z\n .object({\n type: z.literal(\"pcb_note_rect\"),\n pcb_note_rect_id: getZodPrefixedIdWithDefault(\"pcb_note_rect\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n text: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: visible_layer.default(\"top\"),\n stroke_width: length.default(\"0.1mm\"),\n corner_radius: length.optional(),\n is_filled: z.boolean().optional(),\n has_stroke: z.boolean().optional(),\n is_stroke_dashed: z.boolean().optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a rectangular documentation note on the PCB\")\n\nexport type PcbNoteRectInput = z.input<typeof pcb_note_rect>\ntype InferredPcbNoteRect = z.infer<typeof pcb_note_rect>\n\n/**\n * Defines a rectangular documentation note on the PCB\n */\nexport interface PcbNoteRect {\n type: \"pcb_note_rect\"\n pcb_note_rect_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n text?: string\n center: Point\n width: Length\n height: Length\n layer: VisibleLayer\n stroke_width: Length\n corner_radius?: Length\n is_filled?: boolean\n has_stroke?: boolean\n is_stroke_dashed?: boolean\n color?: string\n}\n\nexpectTypesMatch<PcbNoteRect, InferredPcbNoteRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_path = z\n .object({\n type: z.literal(\"pcb_note_path\"),\n pcb_note_path_id: getZodPrefixedIdWithDefault(\"pcb_note_path\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n text: z.string().optional(),\n route: z.array(point),\n layer: visible_layer.default(\"top\"),\n stroke_width: length.default(\"0.1mm\"),\n color: z.string().optional(),\n })\n .describe(\"Defines a polyline documentation note on the PCB\")\n\nexport type PcbNotePathInput = z.input<typeof pcb_note_path>\ntype InferredPcbNotePath = z.infer<typeof pcb_note_path>\n\n/**\n * Defines a polyline documentation note on the PCB\n */\nexport interface PcbNotePath {\n type: \"pcb_note_path\"\n pcb_note_path_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n text?: string\n route: Point[]\n layer: VisibleLayer\n stroke_width: Length\n color?: string\n}\n\nexpectTypesMatch<PcbNotePath, InferredPcbNotePath>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_line = z\n .object({\n type: z.literal(\"pcb_note_line\"),\n pcb_note_line_id: getZodPrefixedIdWithDefault(\"pcb_note_line\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n text: z.string().optional(),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n layer: visible_layer.default(\"top\"),\n stroke_width: distance.default(\"0.1mm\"),\n color: z.string().optional(),\n is_dashed: z.boolean().optional(),\n })\n .describe(\"Defines a straight documentation note line on the PCB\")\n\nexport type PcbNoteLineInput = z.input<typeof pcb_note_line>\ntype InferredPcbNoteLine = z.infer<typeof pcb_note_line>\n\n/**\n * Defines a straight documentation note line on the PCB\n */\nexport interface PcbNoteLine {\n type: \"pcb_note_line\"\n pcb_note_line_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n text?: string\n x1: Distance\n y1: Distance\n x2: Distance\n y2: Distance\n layer: VisibleLayer\n stroke_width: Distance\n color?: string\n is_dashed?: boolean\n}\n\nexpectTypesMatch<PcbNoteLine, InferredPcbNoteLine>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_note_dimension = z\n .object({\n type: z.literal(\"pcb_note_dimension\"),\n pcb_note_dimension_id: getZodPrefixedIdWithDefault(\"pcb_note_dimension\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n name: z.string().optional(),\n from: point,\n to: point,\n text: z.string().optional(),\n text_ccw_rotation: z.number().optional(),\n offset_distance: length.optional(),\n offset_direction: z\n .object({\n x: z.number(),\n y: z.number(),\n })\n .optional(),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n font_size: length.default(\"1mm\"),\n layer: visible_layer.default(\"top\"),\n color: z.string().optional(),\n arrow_size: length.default(\"1mm\"),\n })\n .describe(\"Defines a measurement annotation within PCB documentation notes\")\n\nexport type PcbNoteDimensionInput = z.input<typeof pcb_note_dimension>\ntype InferredPcbNoteDimension = z.infer<typeof pcb_note_dimension>\n\n/**\n * Defines a measurement annotation within PCB documentation notes\n */\nexport interface PcbNoteDimension {\n type: \"pcb_note_dimension\"\n pcb_note_dimension_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n name?: string\n from: Point\n to: Point\n text?: string\n text_ccw_rotation?: number\n offset_distance?: Length\n offset_direction?: {\n x: number\n y: number\n }\n font: \"tscircuit2024\"\n font_size: Length\n layer: VisibleLayer\n color?: string\n arrow_size: Length\n}\n\nexpectTypesMatch<PcbNoteDimension, InferredPcbNoteDimension>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_footprint_overlap_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_footprint_overlap_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_footprint_overlap_error\")\n .default(\"pcb_footprint_overlap_error\"),\n pcb_smtpad_ids: z.array(z.string()).optional(),\n pcb_plated_hole_ids: z.array(z.string()).optional(),\n pcb_hole_ids: z.array(z.string()).optional(),\n pcb_keepout_ids: z.array(z.string()).optional(),\n })\n .describe(\"Error emitted when a pcb footprint overlaps with another element\")\n\nexport type PcbFootprintOverlapErrorInput = z.input<\n typeof pcb_footprint_overlap_error\n>\ntype InferredPcbFootprintOverlapError = z.infer<\n typeof pcb_footprint_overlap_error\n>\n\n/** Error emitted when a pcb footprint overlaps with another element */\nexport interface PcbFootprintOverlapError extends BaseCircuitJsonError {\n type: \"pcb_footprint_overlap_error\"\n pcb_error_id: string\n error_type: \"pcb_footprint_overlap_error\"\n pcb_smtpad_ids?: string[]\n pcb_plated_hole_ids?: string[]\n pcb_hole_ids?: string[]\n pcb_keepout_ids?: string[]\n}\n\nexpectTypesMatch<PcbFootprintOverlapError, InferredPcbFootprintOverlapError>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_overlap_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_courtyard_overlap_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_courtyard_overlap_error\")\n .default(\"pcb_courtyard_overlap_error\"),\n pcb_component_ids: z.tuple([z.string(), z.string()]),\n })\n .describe(\n \"Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another\",\n )\n\nexport type PcbCourtyardOverlapErrorInput = z.input<\n typeof pcb_courtyard_overlap_error\n>\ntype InferredPcbCourtyardOverlapError = z.infer<\n typeof pcb_courtyard_overlap_error\n>\n\n/** Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another */\nexport interface PcbCourtyardOverlapError extends BaseCircuitJsonError {\n type: \"pcb_courtyard_overlap_error\"\n pcb_error_id: string\n error_type: \"pcb_courtyard_overlap_error\"\n pcb_component_ids: [string, string]\n}\n\nexpectTypesMatch<PcbCourtyardOverlapError, InferredPcbCourtyardOverlapError>(\n true,\n)\n","import { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { type Point, point } from \"../common\"\nimport { distance, type Length, length } from \"../units\"\n\nexport const pcb_keepout_outline = z.object({\n type: z.literal(\"pcb_keepout\"),\n shape: z.literal(\"outline\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n outline: z.array(point).min(2),\n stroke_width: length,\n pcb_keepout_id: z.string(),\n layers: z.array(z.string()),\n description: z.string().optional(),\n excluded_pcb_component_ids: z.array(z.string()).optional(),\n warning_only: z.boolean().optional(),\n allow_traces: z.boolean().optional(),\n allow_placements: z.boolean().optional(),\n})\n\nexport type PcbKeepoutOutlineInput = z.input<typeof pcb_keepout_outline>\ntype InferredPcbKeepoutOutline = z.infer<typeof pcb_keepout_outline>\n\nexport const pcb_keepout = z\n .object({\n type: z.literal(\"pcb_keepout\"),\n shape: z.literal(\"rect\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: distance,\n height: distance,\n pcb_keepout_id: z.string(),\n layers: z.array(z.string()), // Specify layers where the keepout applies\n description: z.string().optional(), // Optional description of the keepout\n excluded_pcb_component_ids: z.array(z.string()).optional(),\n warning_only: z.boolean().optional(),\n allow_traces: z.boolean().optional(),\n allow_placements: z.boolean().optional(),\n })\n .or(\n z.object({\n type: z.literal(\"pcb_keepout\"),\n shape: z.literal(\"circle\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius: distance,\n pcb_keepout_id: z.string(),\n layers: z.array(z.string()), // Specify layers where the keepout applies\n description: z.string().optional(), // Optional description of the keepout\n excluded_pcb_component_ids: z.array(z.string()).optional(),\n warning_only: z.boolean().optional(),\n allow_traces: z.boolean().optional(),\n allow_placements: z.boolean().optional(),\n }),\n )\n .or(pcb_keepout_outline)\n\nexport type PCBKeepoutInput = z.input<typeof pcb_keepout>\ntype InferredPCBKeepout = z.infer<typeof pcb_keepout>\n\nexport interface PCBKeepoutRect {\n type: \"pcb_keepout\"\n shape: \"rect\"\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: number\n height: number\n pcb_keepout_id: string\n layers: string[]\n description?: string\n /** PCB components excluded from keepout DRC enforcement. */\n excluded_pcb_component_ids?: string[]\n /**\n * When true, this keepout is advisory: it does not block routing or copper\n * placement, and DRC reports overlaps as pcb_keepout_overlap_warning records.\n * False or omitted preserves normal enforcement. Component exclusions still apply.\n */\n warning_only?: boolean\n /** Allow trace crossings without keepout diagnostics; copper pours remain excluded. */\n allow_traces?: boolean\n /** Allow components and their pads/plated holes without keepout diagnostics; copper pours remain excluded. */\n allow_placements?: boolean\n}\n\nexport interface PCBKeepoutCircle {\n type: \"pcb_keepout\"\n shape: \"circle\"\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius: number\n pcb_keepout_id: string\n layers: string[]\n description?: string\n /** PCB components excluded from keepout DRC enforcement. */\n excluded_pcb_component_ids?: string[]\n /**\n * When true, this keepout is advisory: it does not block routing or copper\n * placement, and DRC reports overlaps as pcb_keepout_overlap_warning records.\n * False or omitted preserves normal enforcement. Component exclusions still apply.\n */\n warning_only?: boolean\n /** Allow trace crossings without keepout diagnostics; copper pours remain excluded. */\n allow_traces?: boolean\n /** Allow components and their pads/plated holes without keepout diagnostics; copper pours remain excluded. */\n allow_placements?: boolean\n}\n\nexport interface PcbKeepoutOutline {\n type: \"pcb_keepout\"\n shape: \"outline\"\n pcb_group_id?: string\n subcircuit_id?: string\n outline: Point[]\n stroke_width: Length\n pcb_keepout_id: string\n layers: string[]\n description?: string\n /** PCB components excluded from keepout DRC enforcement. */\n excluded_pcb_component_ids?: string[]\n /**\n * When true, this keepout is advisory: it does not block routing or copper\n * placement, and DRC reports overlaps as pcb_keepout_overlap_warning records.\n * False or omitted preserves normal enforcement. Component exclusions still apply.\n */\n warning_only?: boolean\n /** Allow trace crossings without keepout diagnostics; copper pours remain excluded. */\n allow_traces?: boolean\n /** Allow components and their pads/plated holes without keepout diagnostics; copper pours remain excluded. */\n allow_placements?: boolean\n}\n\nexpectTypesMatch<PcbKeepoutOutline, InferredPcbKeepoutOutline>(true)\n\nexport type PCBKeepout = PCBKeepoutRect | PCBKeepoutCircle | PcbKeepoutOutline\n\nexpectTypesMatch<PCBKeepout, InferredPCBKeepout>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_keepout_overlap_warning = z\n .object({\n type: z.literal(\"pcb_keepout_overlap_warning\"),\n pcb_keepout_overlap_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_keepout_overlap_warning\",\n ),\n warning_type: z\n .literal(\"pcb_keepout_overlap_warning\")\n .default(\"pcb_keepout_overlap_warning\"),\n message: z.string(),\n pcb_keepout_id: z.string(),\n pcb_component_ids: z.array(z.string()).optional(),\n pcb_trace_ids: z.array(z.string()).optional(),\n pcb_smtpad_ids: z.array(z.string()).optional(),\n pcb_plated_hole_ids: z.array(z.string()).optional(),\n pcb_via_ids: z.array(z.string()).optional(),\n center: point.optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when copper overlaps a PCB keepout with warning_only enabled\",\n )\n\nexport type PcbKeepoutOverlapWarningInput = z.input<\n typeof pcb_keepout_overlap_warning\n>\ntype InferredPcbKeepoutOverlapWarning = z.infer<\n typeof pcb_keepout_overlap_warning\n>\n\n/** Warning emitted when copper overlaps a PCB keepout with warning_only enabled. */\nexport interface PcbKeepoutOverlapWarning {\n type: \"pcb_keepout_overlap_warning\"\n pcb_keepout_overlap_warning_id: string\n warning_type: \"pcb_keepout_overlap_warning\"\n message: string\n /** The advisory keepout that was overlapped. */\n pcb_keepout_id: string\n /** IDs of the components and copper primitives involved in the overlap. */\n pcb_component_ids?: string[]\n pcb_trace_ids?: string[]\n pcb_smtpad_ids?: string[]\n pcb_plated_hole_ids?: string[]\n pcb_via_ids?: string[]\n /** Optional overlap location in PCB coordinates, in millimeters. */\n center?: Point\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbKeepoutOverlapWarning, InferredPcbKeepoutOverlapWarning>(\n true,\n)\n","import { type Point, getZodPrefixedIdWithDefault, point } from \"src/common\"\nimport { type Length, type Rotation, length, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\n// Common properties base for all cutout shapes (internal)\nconst pcb_cutout_base = z.object({\n type: z.literal(\"pcb_cutout\"),\n pcb_cutout_id: getZodPrefixedIdWithDefault(\"pcb_cutout\"),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n pcb_board_id: z.string().optional(),\n pcb_panel_id: z.string().optional(),\n})\n\n// Rectangular Cutout\nexport const pcb_cutout_rect = pcb_cutout_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n width: length,\n height: length,\n rotation: rotation.optional(),\n corner_radius: length.optional(),\n})\nexport type PcbCutoutRectInput = z.input<typeof pcb_cutout_rect>\ntype InferredPcbCutoutRect = z.infer<typeof pcb_cutout_rect>\n/**\n * Defines a rectangular cutout on the PCB.\n */\nexport interface PcbCutoutRect {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"rect\"\n center: Point\n width: Length\n height: Length\n rotation?: Rotation\n corner_radius?: Length\n}\nexpectTypesMatch<PcbCutoutRect, InferredPcbCutoutRect>(true)\n\n// Circular Cutout\nexport const pcb_cutout_circle = pcb_cutout_base.extend({\n shape: z.literal(\"circle\"),\n center: point,\n radius: length,\n})\nexport type PcbCutoutCircleInput = z.input<typeof pcb_cutout_circle>\ntype InferredPcbCutoutCircle = z.infer<typeof pcb_cutout_circle>\n/**\n * Defines a circular cutout on the PCB.\n */\nexport interface PcbCutoutCircle {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"circle\"\n center: Point\n radius: Length\n}\nexpectTypesMatch<PcbCutoutCircle, InferredPcbCutoutCircle>(true)\n\n// Polygon Cutout\nexport const pcb_cutout_polygon = pcb_cutout_base.extend({\n shape: z.literal(\"polygon\"),\n points: z.array(point),\n})\nexport type PcbCutoutPolygonInput = z.input<typeof pcb_cutout_polygon>\ntype InferredPcbCutoutPolygon = z.infer<typeof pcb_cutout_polygon>\n/**\n * Defines a polygonal cutout on the PCB, specified by a list of points.\n * The polygon should be closed (the last point implicitly connects to the first).\n */\nexport interface PcbCutoutPolygon {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"polygon\"\n points: Point[]\n}\nexpectTypesMatch<PcbCutoutPolygon, InferredPcbCutoutPolygon>(true)\n\n// Path Cutout (for slots along a path)\nexport const pcb_cutout_path = pcb_cutout_base.extend({\n shape: z.literal(\"path\"),\n route: z.array(point),\n slot_width: length,\n slot_length: length.optional(),\n space_between_slots: length.optional(),\n slot_corner_radius: length.optional(),\n})\nexport type PcbCutoutPathInput = z.input<typeof pcb_cutout_path>\ntype InferredPcbCutoutPath = z.infer<typeof pcb_cutout_path>\n/**\n * Defines a path-based cutout on the PCB, creating slots along the specified path.\n * When slot_length and space_between_slots are specified, creates a dashed pattern of slots.\n * When they are omitted, creates a continuous slot along the entire path.\n * The slot_corner_radius controls the rounding of slot corners (0 = square, slot_width/2 = circle).\n */\nexport interface PcbCutoutPath {\n type: \"pcb_cutout\"\n pcb_cutout_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n pcb_board_id?: string\n pcb_panel_id?: string\n shape: \"path\"\n route: Point[]\n slot_width: Length\n slot_length?: Length\n space_between_slots?: Length\n slot_corner_radius?: Length\n}\nexpectTypesMatch<PcbCutoutPath, InferredPcbCutoutPath>(true)\n\n// Union of all cutout shapes\nexport const pcb_cutout = z\n .discriminatedUnion(\"shape\", [\n pcb_cutout_rect,\n pcb_cutout_circle,\n pcb_cutout_polygon,\n pcb_cutout_path,\n ])\n .describe(\"Defines a cutout on the PCB, removing board material.\")\n\nexport type PcbCutoutInput = z.input<typeof pcb_cutout>\nexport type PcbCutout =\n | PcbCutoutRect\n | PcbCutoutCircle\n | PcbCutoutPolygon\n | PcbCutoutPath\n\ntype InferredPcbCutout = z.infer<typeof pcb_cutout>\nexpectTypesMatch<PcbCutout, InferredPcbCutout>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_missing_footprint_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_missing_footprint_error\"),\n pcb_missing_footprint_error_id: getZodPrefixedIdWithDefault(\n \"pcb_missing_footprint_error\",\n ),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"pcb_missing_footprint_error\")\n .default(\"pcb_missing_footprint_error\"),\n source_component_id: z.string(),\n })\n .describe(\"Defines a missing footprint error on the PCB\")\n\nexport type PcbMissingFootprintErrorInput = z.input<\n typeof pcb_missing_footprint_error\n>\ntype InferredPcbMissingFootprintError = z.infer<\n typeof pcb_missing_footprint_error\n>\n\n/**\n * Defines a placement error on the PCB\n */\nexport interface PcbMissingFootprintError extends BaseCircuitJsonError {\n type: \"pcb_missing_footprint_error\"\n pcb_missing_footprint_error_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n error_type: \"pcb_missing_footprint_error\"\n source_component_id: string\n}\n\n/**\n * @deprecated use PcbMissingFootprintError\n */\nexport type PCBMissingFootprintError = PcbMissingFootprintError\n\nexpectTypesMatch<PcbMissingFootprintError, InferredPcbMissingFootprintError>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const external_footprint_load_error = base_circuit_json_error\n .extend({\n type: z.literal(\"external_footprint_load_error\"),\n external_footprint_load_error_id: getZodPrefixedIdWithDefault(\n \"external_footprint_load_error\",\n ),\n pcb_component_id: z.string(),\n source_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n footprinter_string: z.string().optional(),\n error_type: z\n .literal(\"external_footprint_load_error\")\n .default(\"external_footprint_load_error\"),\n })\n .describe(\"Defines an error when an external footprint fails to load\")\n\nexport type ExternalFootprintLoadErrorInput = z.input<\n typeof external_footprint_load_error\n>\ntype InferredExternalFootprintLoadError = z.infer<\n typeof external_footprint_load_error\n>\n\nexport interface ExternalFootprintLoadError extends BaseCircuitJsonError {\n type: \"external_footprint_load_error\"\n external_footprint_load_error_id: string\n pcb_component_id: string\n source_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n footprinter_string?: string\n error_type: \"external_footprint_load_error\"\n}\n\nexpectTypesMatch<\n ExternalFootprintLoadError,\n InferredExternalFootprintLoadError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const circuit_json_footprint_load_error = base_circuit_json_error\n .extend({\n type: z.literal(\"circuit_json_footprint_load_error\"),\n circuit_json_footprint_load_error_id: getZodPrefixedIdWithDefault(\n \"circuit_json_footprint_load_error\",\n ),\n pcb_component_id: z.string(),\n source_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n error_type: z\n .literal(\"circuit_json_footprint_load_error\")\n .default(\"circuit_json_footprint_load_error\"),\n circuit_json: z.array(z.any()).optional(),\n })\n .describe(\"Defines an error when a circuit JSON footprint fails to load\")\n\nexport type CircuitJsonFootprintLoadErrorInput = z.input<\n typeof circuit_json_footprint_load_error\n>\ntype InferredCircuitJsonFootprintLoadError = z.infer<\n typeof circuit_json_footprint_load_error\n>\n\nexport interface CircuitJsonFootprintLoadError extends BaseCircuitJsonError {\n type: \"circuit_json_footprint_load_error\"\n circuit_json_footprint_load_error_id: string\n pcb_component_id: string\n source_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n error_type: \"circuit_json_footprint_load_error\"\n circuit_json?: any[]\n}\n\nexpectTypesMatch<\n CircuitJsonFootprintLoadError,\n InferredCircuitJsonFootprintLoadError\n>(true)\n","import { z } from \"zod\"\nimport {\n point,\n type Point,\n getZodPrefixedIdWithDefault,\n ninePointAnchor,\n type NinePointAnchor,\n} from \"src/common\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_group = z\n .object({\n type: z.literal(\"pcb_group\"),\n pcb_group_id: getZodPrefixedIdWithDefault(\"pcb_group\"),\n source_group_id: z.string(),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n width: length.optional(),\n height: length.optional(),\n center: point,\n display_offset_x: z\n .string()\n .optional()\n .describe(\n \"How to display the x offset for this group, usually corresponding with how the user specified it\",\n ),\n display_offset_y: z\n .string()\n .optional()\n .describe(\n \"How to display the y offset for this group, usually corresponding with how the user specified it\",\n ),\n outline: z.array(point).optional(),\n anchor_position: point.optional(),\n anchor_alignment: ninePointAnchor.default(\"center\"),\n position_mode: z\n .enum([\"packed\", \"relative_to_group_anchor\", \"none\"])\n .optional(),\n positioned_relative_to_pcb_group_id: z.string().optional(),\n positioned_relative_to_pcb_board_id: z.string().optional(),\n pcb_component_ids: z.array(z.string()),\n child_layout_mode: z.enum([\"packed\", \"none\"]).optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n layout_mode: z.string().optional(),\n autorouter_configuration: z\n .object({\n trace_clearance: length,\n })\n .optional(),\n autorouter_used_string: z.string().optional(),\n })\n .describe(\"Defines a group of components on the PCB\")\n\nexport type PcbGroupInput = z.input<typeof pcb_group>\ntype InferredPcbGroup = z.infer<typeof pcb_group>\n\n/**\n * Defines a group of components on the PCB\n */\nexport interface PcbGroup {\n type: \"pcb_group\"\n pcb_group_id: string\n source_group_id: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n width?: Length\n height?: Length\n center: Point\n display_offset_x?: string\n display_offset_y?: string\n outline?: Point[]\n anchor_position?: Point\n anchor_alignment: NinePointAnchor\n position_mode?: \"packed\" | \"relative_to_group_anchor\" | \"none\"\n positioned_relative_to_pcb_group_id?: string\n positioned_relative_to_pcb_board_id?: string\n pcb_component_ids: string[]\n child_layout_mode?: \"packed\" | \"none\"\n name?: string\n description?: string\n layout_mode?: string\n autorouter_configuration?: {\n trace_clearance: Length\n }\n autorouter_used_string?: string\n}\n\nexpectTypesMatch<PcbGroup, InferredPcbGroup>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_autorouting_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_autorouting_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_autorouting_error\"),\n error_type: z\n .literal(\"pcb_autorouting_error\")\n .default(\"pcb_autorouting_error\"),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"The autorouting has failed to route a portion of the board\")\n\nexport type PcbAutoroutingErrorInput = z.input<typeof pcb_autorouting_error>\ntype PcbInferredAutoroutingError = z.infer<typeof pcb_autorouting_error>\n\nexport interface PcbAutoroutingErrorInterface extends BaseCircuitJsonError {\n type: \"pcb_autorouting_error\"\n pcb_error_id: string\n error_type: \"pcb_autorouting_error\"\n subcircuit_id?: string\n}\n\nexport type PcbAutoroutingError = PcbAutoroutingErrorInterface\n\nexpectTypesMatch<PcbAutoroutingError, PcbInferredAutoroutingError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_preflight_routing_error = base_circuit_json_error.extend({\n type: z.literal(\"pcb_preflight_routing_error\"),\n pcb_preflight_routing_error_id: getZodPrefixedIdWithDefault(\n \"pcb_preflight_routing_error\",\n ),\n error_type: z\n .literal(\"pcb_preflight_routing_error\")\n .default(\"pcb_preflight_routing_error\"),\n error_code: z.string(),\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n routing_phase_index: z.number().int().optional(),\n phase_name: z.string().optional(),\n source_trace_ids: z.array(z.string()).optional(),\n pcb_component_ids: z.array(z.string()).optional(),\n pcb_port_ids: z.array(z.string()).optional(),\n related_error_ids: z.array(z.string()).optional(),\n measurements: z.record(z.number().finite()).optional(),\n})\n\nexport type PcbPreflightRoutingErrorInput = z.input<\n typeof pcb_preflight_routing_error\n>\n\nexport interface PcbPreflightRoutingError extends BaseCircuitJsonError {\n type: \"pcb_preflight_routing_error\"\n pcb_preflight_routing_error_id: string\n error_type: \"pcb_preflight_routing_error\"\n error_code: string\n subcircuit_id?: string\n pcb_group_id?: string\n routing_phase_index?: number\n phase_name?: string\n source_trace_ids?: string[]\n pcb_component_ids?: string[]\n pcb_port_ids?: string[]\n related_error_ids?: string[]\n measurements?: Record<string, number>\n}\n\nexpectTypesMatch<\n PcbPreflightRoutingError,\n z.infer<typeof pcb_preflight_routing_error>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const pcb_manual_edit_conflict_warning = z\n .object({\n type: z.literal(\"pcb_manual_edit_conflict_warning\"),\n pcb_manual_edit_conflict_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_manual_edit_conflict_warning\",\n ),\n warning_type: z\n .literal(\"pcb_manual_edit_conflict_warning\")\n .default(\"pcb_manual_edit_conflict_warning\"),\n message: z.string(),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n source_component_id: z.string(),\n })\n .describe(\n \"Warning emitted when a component has both manual placement and explicit pcbX/pcbY coordinates\",\n )\n\nexport type PcbManualEditConflictWarningInput = z.input<\n typeof pcb_manual_edit_conflict_warning\n>\ntype InferredPcbManualEditConflictWarning = z.infer<\n typeof pcb_manual_edit_conflict_warning\n>\n\n/**\n * Warning emitted when a component has both manual placement (via manualEdits) and explicit pcbX/pcbY coordinates\n */\nexport interface PcbManualEditConflictWarning {\n type: \"pcb_manual_edit_conflict_warning\"\n pcb_manual_edit_conflict_warning_id: string\n warning_type: \"pcb_manual_edit_conflict_warning\"\n message: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n source_component_id: string\n}\n\nexpectTypesMatch<\n PcbManualEditConflictWarning,\n InferredPcbManualEditConflictWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst connectorOrientationDirection = z.enum([\"x-\", \"x+\", \"y+\", \"y-\"])\n\ntype ConnectorOrientationDirection = z.infer<\n typeof connectorOrientationDirection\n>\n\nexport const pcb_connector_not_in_accessible_orientation_warning = z\n .object({\n type: z.literal(\"pcb_connector_not_in_accessible_orientation_warning\"),\n pcb_connector_not_in_accessible_orientation_warning_id:\n getZodPrefixedIdWithDefault(\n \"pcb_connector_not_in_accessible_orientation_warning\",\n ),\n warning_type: z\n .literal(\"pcb_connector_not_in_accessible_orientation_warning\")\n .default(\"pcb_connector_not_in_accessible_orientation_warning\"),\n message: z.string(),\n pcb_component_id: z.string(),\n source_component_id: z.string().optional(),\n pcb_board_id: z.string().optional(),\n facing_direction: connectorOrientationDirection,\n recommended_facing_direction: connectorOrientationDirection,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented to an outward-facing direction\",\n )\n\nexport type PcbConnectorNotInAccessibleOrientationWarningInput = z.input<\n typeof pcb_connector_not_in_accessible_orientation_warning\n>\ntype InferredPcbConnectorNotInAccessibleOrientationWarning = z.infer<\n typeof pcb_connector_not_in_accessible_orientation_warning\n>\n\n/** Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented */\nexport interface PcbConnectorNotInAccessibleOrientationWarning {\n type: \"pcb_connector_not_in_accessible_orientation_warning\"\n pcb_connector_not_in_accessible_orientation_warning_id: string\n warning_type: \"pcb_connector_not_in_accessible_orientation_warning\"\n message: string\n pcb_component_id: string\n source_component_id?: string\n pcb_board_id?: string\n facing_direction: ConnectorOrientationDirection\n recommended_facing_direction: ConnectorOrientationDirection\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbConnectorNotInAccessibleOrientationWarning,\n InferredPcbConnectorNotInAccessibleOrientationWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_missing_courtyard_warning = z\n .object({\n type: z.literal(\"pcb_component_missing_courtyard_warning\"),\n pcb_component_missing_courtyard_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_component_missing_courtyard_warning\",\n ),\n warning_type: z\n .literal(\"pcb_component_missing_courtyard_warning\")\n .default(\"pcb_component_missing_courtyard_warning\"),\n message: z.string(),\n pcb_component_id: z.string(),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Warning emitted when a PCB component has no courtyard geometry\")\n\nexport type PcbComponentMissingCourtyardWarningInput = z.input<\n typeof pcb_component_missing_courtyard_warning\n>\n\ntype InferredPcbComponentMissingCourtyardWarning = z.infer<\n typeof pcb_component_missing_courtyard_warning\n>\n\n/** Warning emitted when a PCB component has no courtyard geometry */\nexport interface PcbComponentMissingCourtyardWarning {\n type: \"pcb_component_missing_courtyard_warning\"\n pcb_component_missing_courtyard_warning_id: string\n warning_type: \"pcb_component_missing_courtyard_warning\"\n message: string\n pcb_component_id: string\n source_component_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentMissingCourtyardWarning,\n InferredPcbComponentMissingCourtyardWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport {\n supplier_name,\n type SupplierName,\n} from \"src/pcb/properties/supplier_name\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const supplier_footprint_mismatch_warning = z\n .object({\n type: z.literal(\"supplier_footprint_mismatch_warning\"),\n supplier_footprint_mismatch_warning_id: getZodPrefixedIdWithDefault(\n \"supplier_footprint_mismatch_warning\",\n ),\n warning_type: z\n .literal(\"supplier_footprint_mismatch_warning\")\n .default(\"supplier_footprint_mismatch_warning\"),\n message: z.string(),\n source_component_id: z.string(),\n pcb_component_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n supplier_name: supplier_name.optional(),\n supplier_part_number: z.string().optional(),\n supplier_footprint_url: z.string().optional(),\n footprint_copper_intersection_over_union: z.number(),\n })\n .describe(\n \"Warning emitted when a supplier part footprint does not match the expected footprint\",\n )\n\nexport type SupplierFootprintMismatchWarningInput = z.input<\n typeof supplier_footprint_mismatch_warning\n>\ntype InferredSupplierFootprintMismatchWarning = z.infer<\n typeof supplier_footprint_mismatch_warning\n>\n\n/**\n * Warning emitted when a supplier part footprint does not match the expected footprint\n */\nexport interface SupplierFootprintMismatchWarning {\n type: \"supplier_footprint_mismatch_warning\"\n supplier_footprint_mismatch_warning_id: string\n warning_type: \"supplier_footprint_mismatch_warning\"\n message: string\n source_component_id: string\n pcb_component_id?: string\n pcb_group_id?: string\n subcircuit_id?: string\n supplier_name?: SupplierName\n supplier_part_number?: string\n supplier_footprint_url?: string\n footprint_copper_intersection_over_union: number\n}\n\nexpectTypesMatch<\n SupplierFootprintMismatchWarning,\n InferredSupplierFootprintMismatchWarning\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_fabricator_extra_charge_warning = z\n .object({\n type: z.literal(\"pcb_fabricator_extra_charge_warning\"),\n pcb_fabricator_extra_charge_warning_id: getZodPrefixedIdWithDefault(\n \"pcb_fabricator_extra_charge_warning\",\n ),\n warning_type: z\n .literal(\"pcb_fabricator_extra_charge_warning\")\n .default(\"pcb_fabricator_extra_charge_warning\"),\n message: z.string(),\n fabricator_preset: z.string(),\n pcb_board_id: z.string().optional(),\n pcb_via_ids: z.array(z.string()).optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Warning that a design feature incurs an extra charge for the selected fabricator preset, such as via hole diameters below 0.3 mm with JLCPCB economy or standard presets.\",\n )\n\nexport type PcbFabricatorExtraChargeWarningInput = z.input<\n typeof pcb_fabricator_extra_charge_warning\n>\ntype InferredPcbFabricatorExtraChargeWarning = z.infer<\n typeof pcb_fabricator_extra_charge_warning\n>\n\n/**\n * Warning that a design feature incurs an extra charge for the selected\n * fabricator preset. For JLCPCB economy or standard presets (including dated\n * variants), via hole diameters below 0.3 mm are an intended use case.\n * The producer detects the condition; this record describes the warning.\n */\nexport interface PcbFabricatorExtraChargeWarning {\n type: \"pcb_fabricator_extra_charge_warning\"\n pcb_fabricator_extra_charge_warning_id: string\n warning_type: \"pcb_fabricator_extra_charge_warning\"\n message: string\n /** Selected preset, for example jlcpcb_economy or jlcpcb_standard_20260912. */\n fabricator_preset: string\n pcb_board_id?: string\n /** Vias responsible for the extra charge, when the warning concerns vias. */\n pcb_via_ids?: string[]\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbFabricatorExtraChargeWarning,\n InferredPcbFabricatorExtraChargeWarning\n>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { type LayerRef, layer_ref } from \"src/pcb/properties/layer_ref\"\nimport { type Distance, distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport const pcb_breakout_point = z\n .object({\n type: z.literal(\"pcb_breakout_point\"),\n pcb_breakout_point_id: getZodPrefixedIdWithDefault(\"pcb_breakout_point\"),\n pcb_group_id: z.string(),\n subcircuit_id: z.string().optional(),\n source_trace_id: z.string().optional(),\n source_port_id: z.string().optional(),\n source_net_id: z.string().optional(),\n layer: layer_ref.optional(),\n x: distance,\n y: distance,\n })\n .describe(\n \"Defines a routing target within a pcb_group for a source_trace or source_net\",\n )\n\nexport type PcbBreakoutPointInput = z.input<typeof pcb_breakout_point>\ntype InferredPcbBreakoutPoint = z.infer<typeof pcb_breakout_point>\n\n/**\n * Defines a routing target within a pcb_group for a source_trace or source_net\n */\nexport interface PcbBreakoutPoint {\n type: \"pcb_breakout_point\"\n pcb_breakout_point_id: string\n pcb_group_id: string\n subcircuit_id?: string\n source_trace_id?: string\n source_port_id?: string\n source_net_id?: string\n layer?: LayerRef\n x: Distance\n y: Distance\n}\n\nexpectTypesMatch<PcbBreakoutPoint, InferredPcbBreakoutPoint>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_ground_plane = z\n .object({\n type: z.literal(\"pcb_ground_plane\"),\n pcb_ground_plane_id: getZodPrefixedIdWithDefault(\"pcb_ground_plane\"),\n source_pcb_ground_plane_id: z.string(),\n source_net_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Defines a ground plane on the PCB\")\n\nexport type PcbGroundPlaneInput = z.input<typeof pcb_ground_plane>\ntype InferredPcbGroundPlane = z.infer<typeof pcb_ground_plane>\n\n/**\n * Defines a ground plane on the PCB\n */\nexport interface PcbGroundPlane {\n type: \"pcb_ground_plane\"\n pcb_ground_plane_id: string\n source_pcb_ground_plane_id: string\n source_net_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbGroundPlane, InferredPcbGroundPlane>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_ground_plane_region = z\n .object({\n type: z.literal(\"pcb_ground_plane_region\"),\n pcb_ground_plane_region_id: getZodPrefixedIdWithDefault(\n \"pcb_ground_plane_region\",\n ),\n pcb_ground_plane_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: layer_ref,\n points: z.array(point),\n })\n .describe(\"Defines a polygon region of a ground plane\")\n\nexport type PcbGroundPlaneRegionInput = z.input<typeof pcb_ground_plane_region>\ntype InferredPcbGroundPlaneRegion = z.infer<typeof pcb_ground_plane_region>\n\n/**\n * Defines a polygon region of a ground plane\n */\nexport interface PcbGroundPlaneRegion {\n type: \"pcb_ground_plane_region\"\n pcb_ground_plane_region_id: string\n pcb_ground_plane_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n points: Point[]\n}\n\nexpectTypesMatch<PcbGroundPlaneRegion, InferredPcbGroundPlaneRegion>(true)\n","import { z } from \"zod\"\nimport { distance, type Distance } from \"src/units\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_thermal_spoke = z\n .object({\n type: z.literal(\"pcb_thermal_spoke\"),\n pcb_thermal_spoke_id: getZodPrefixedIdWithDefault(\"pcb_thermal_spoke\"),\n pcb_ground_plane_id: z.string(),\n shape: z.string(),\n spoke_count: z.number(),\n spoke_thickness: distance,\n spoke_inner_diameter: distance,\n spoke_outer_diameter: distance,\n pcb_plated_hole_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Pattern for connecting a ground plane to a plated hole\")\n\nexport type PcbThermalSpokeInput = z.input<typeof pcb_thermal_spoke>\ntype InferredPcbThermalSpoke = z.infer<typeof pcb_thermal_spoke>\n\n/**\n * Pattern for connecting a ground plane to a plated hole\n */\nexport interface PcbThermalSpoke {\n type: \"pcb_thermal_spoke\"\n pcb_thermal_spoke_id: string\n pcb_ground_plane_id: string\n shape: string\n spoke_count: number\n spoke_thickness: Distance\n spoke_inner_diameter: Distance\n spoke_outer_diameter: Distance\n pcb_plated_hole_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbThermalSpoke, InferredPcbThermalSpoke>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { length, type Length, rotation, type Rotation } from \"src/units\"\nimport { layer_ref, type LayerRef } from \"./properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { brep_shape, type BRepShape } from \"./properties/brep\"\n\n// Common properties base for all pour shapes (internal)\nconst pcb_copper_pour_base = z.object({\n type: z.literal(\"pcb_copper_pour\"),\n pcb_copper_pour_id: getZodPrefixedIdWithDefault(\"pcb_copper_pour\"),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: layer_ref,\n source_net_id: z.string().optional(),\n covered_with_solder_mask: z.boolean().optional().default(true),\n})\n\n// Rectangular Pour\nexport const pcb_copper_pour_rect = pcb_copper_pour_base.extend({\n shape: z.literal(\"rect\"),\n center: point,\n width: length,\n height: length,\n rotation: rotation.optional(),\n})\nexport type PcbCopperPourRectInput = z.input<typeof pcb_copper_pour_rect>\ntype InferredPcbCopperPourRect = z.infer<typeof pcb_copper_pour_rect>\n/**\n * Defines a rectangular copper pour on the PCB.\n */\nexport interface PcbCopperPourRect {\n type: \"pcb_copper_pour\"\n pcb_copper_pour_id: string\n covered_with_solder_mask: boolean\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n source_net_id?: string\n shape: \"rect\"\n center: Point\n width: Length\n height: Length\n rotation?: Rotation\n}\nexpectTypesMatch<PcbCopperPourRect, InferredPcbCopperPourRect>(true)\n\n// BRep Pour\nexport const pcb_copper_pour_brep = pcb_copper_pour_base.extend({\n shape: z.literal(\"brep\"),\n brep_shape: brep_shape,\n})\nexport type PcbCopperPourBRepInput = z.input<typeof pcb_copper_pour_brep>\ntype InferredPcbCopperPourBRep = z.infer<typeof pcb_copper_pour_brep>\n/**\n * Defines a BRep copper pour on the PCB.\n */\nexport interface PcbCopperPourBRep {\n type: \"pcb_copper_pour\"\n pcb_copper_pour_id: string\n covered_with_solder_mask: boolean\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n source_net_id?: string\n shape: \"brep\"\n brep_shape: BRepShape\n}\nexpectTypesMatch<PcbCopperPourBRep, InferredPcbCopperPourBRep>(true)\n\n// Polygon Pour\nexport const pcb_copper_pour_polygon = pcb_copper_pour_base.extend({\n shape: z.literal(\"polygon\"),\n points: z.array(point),\n})\nexport type PcbCopperPourPolygonInput = z.input<typeof pcb_copper_pour_polygon>\ntype InferredPcbCopperPourPolygon = z.infer<typeof pcb_copper_pour_polygon>\n/**\n * Defines a polygonal copper pour on the PCB, specified by a list of points.\n * The polygon should be closed (the last point implicitly connects to the first).\n */\nexport interface PcbCopperPourPolygon {\n type: \"pcb_copper_pour\"\n pcb_copper_pour_id: string\n covered_with_solder_mask: boolean\n pcb_group_id?: string\n subcircuit_id?: string\n layer: LayerRef\n source_net_id?: string\n shape: \"polygon\"\n points: Point[]\n}\nexpectTypesMatch<PcbCopperPourPolygon, InferredPcbCopperPourPolygon>(true)\n\n// Union of all pour shapes\nexport const pcb_copper_pour = z\n .discriminatedUnion(\"shape\", [\n pcb_copper_pour_rect,\n pcb_copper_pour_brep,\n pcb_copper_pour_polygon,\n ])\n .describe(\"Defines a copper pour on the PCB.\")\n\nexport type PcbCopperPourInput = z.input<typeof pcb_copper_pour>\nexport type PcbCopperPour =\n | PcbCopperPourRect\n | PcbCopperPourBRep\n | PcbCopperPourPolygon\n\ntype InferredPcbCopperPour = z.infer<typeof pcb_copper_pour>\nexpectTypesMatch<PcbCopperPour, InferredPcbCopperPour>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_outside_board_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_component_outside_board_error\"),\n pcb_component_outside_board_error_id: getZodPrefixedIdWithDefault(\n \"pcb_component_outside_board_error\",\n ),\n error_type: z\n .literal(\"pcb_component_outside_board_error\")\n .default(\"pcb_component_outside_board_error\"),\n pcb_component_id: z.string(),\n pcb_board_id: z.string(),\n component_center: point,\n component_bounds: z.object({\n min_x: z.number(),\n max_x: z.number(),\n min_y: z.number(),\n max_y: z.number(),\n }),\n subcircuit_id: z.string().optional(),\n source_component_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a PCB component is placed outside the board boundaries\",\n )\n\nexport type PcbComponentOutsideBoardErrorInput = z.input<\n typeof pcb_component_outside_board_error\n>\ntype InferredPcbComponentOutsideBoardError = z.infer<\n typeof pcb_component_outside_board_error\n>\n\n/** Error emitted when a PCB component is placed outside the board boundaries */\nexport interface PcbComponentOutsideBoardError extends BaseCircuitJsonError {\n type: \"pcb_component_outside_board_error\"\n pcb_component_outside_board_error_id: string\n error_type: \"pcb_component_outside_board_error\"\n pcb_component_id: string\n pcb_board_id: string\n component_center: Point\n component_bounds: {\n min_x: number\n max_x: number\n min_y: number\n max_y: number\n }\n subcircuit_id?: string\n source_component_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentOutsideBoardError,\n InferredPcbComponentOutsideBoardError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_not_on_board_edge_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_component_not_on_board_edge_error\"),\n pcb_component_not_on_board_edge_error_id: getZodPrefixedIdWithDefault(\n \"pcb_component_not_on_board_edge_error\",\n ),\n error_type: z\n .literal(\"pcb_component_not_on_board_edge_error\")\n .default(\"pcb_component_not_on_board_edge_error\"),\n pcb_component_id: z.string(),\n pcb_board_id: z.string(),\n component_center: point,\n pad_to_nearest_board_edge_distance: z.number(),\n source_component_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a component that must be placed on the board edge is centered away from the edge\",\n )\n\nexport type PcbComponentNotOnBoardEdgeErrorInput = z.input<\n typeof pcb_component_not_on_board_edge_error\n>\ntype InferredPcbComponentNotOnBoardEdgeError = z.infer<\n typeof pcb_component_not_on_board_edge_error\n>\n\n/** Error emitted when a component that must be placed on the board edge is centered away from the edge */\nexport interface PcbComponentNotOnBoardEdgeError extends BaseCircuitJsonError {\n type: \"pcb_component_not_on_board_edge_error\"\n pcb_component_not_on_board_edge_error_id: string\n error_type: \"pcb_component_not_on_board_edge_error\"\n pcb_component_id: string\n pcb_board_id: string\n component_center: Point\n pad_to_nearest_board_edge_distance: number\n source_component_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentNotOnBoardEdgeError,\n InferredPcbComponentNotOnBoardEdgeError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { layer_ref, type LayerRef } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_component_invalid_layer_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_component_invalid_layer_error\"),\n pcb_component_invalid_layer_error_id: getZodPrefixedIdWithDefault(\n \"pcb_component_invalid_layer_error\",\n ),\n error_type: z\n .literal(\"pcb_component_invalid_layer_error\")\n .default(\"pcb_component_invalid_layer_error\"),\n pcb_component_id: z.string().optional(),\n source_component_id: z.string(),\n layer: layer_ref,\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers)\",\n )\n\nexport type PcbComponentInvalidLayerErrorInput = z.input<\n typeof pcb_component_invalid_layer_error\n>\ntype InferredPcbComponentInvalidLayerError = z.infer<\n typeof pcb_component_invalid_layer_error\n>\n\n/** Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers) */\nexport interface PcbComponentInvalidLayerError extends BaseCircuitJsonError {\n type: \"pcb_component_invalid_layer_error\"\n pcb_component_invalid_layer_error_id: string\n error_type: \"pcb_component_invalid_layer_error\"\n pcb_component_id?: string\n source_component_id: string\n layer: LayerRef\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n PcbComponentInvalidLayerError,\n InferredPcbComponentInvalidLayerError\n>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_via_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_via_clearance_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n error_type: z\n .literal(\"pcb_via_clearance_error\")\n .default(\"pcb_via_clearance_error\"),\n pcb_via_ids: z.array(z.string()).min(2),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n pcb_center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Error emitted when vias are closer than the allowed clearance\")\n\nexport type PcbViaClearanceErrorInput = z.input<typeof pcb_via_clearance_error>\ntype InferredPcbViaClearanceError = z.infer<typeof pcb_via_clearance_error>\n\n/** Error emitted when vias are closer than the allowed clearance */\nexport interface PcbViaClearanceError extends BaseCircuitJsonError {\n type: \"pcb_via_clearance_error\"\n pcb_error_id: string\n error_type: \"pcb_via_clearance_error\"\n pcb_via_ids: string[]\n minimum_clearance?: Distance\n actual_clearance?: Distance\n pcb_center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbViaClearanceError, InferredPcbViaClearanceError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_via_trace_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_via_trace_clearance_error\"),\n pcb_via_trace_clearance_error_id: getZodPrefixedIdWithDefault(\n \"pcb_via_trace_clearance_error\",\n ),\n error_type: z\n .literal(\"pcb_via_trace_clearance_error\")\n .default(\"pcb_via_trace_clearance_error\"),\n pcb_via_id: z.string(),\n pcb_trace_id: z.string(),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a via and trace are closer than the allowed clearance\",\n )\n\nexport type PcbViaTraceClearanceErrorInput = z.input<\n typeof pcb_via_trace_clearance_error\n>\ntype InferredPcbViaTraceClearanceError = z.infer<\n typeof pcb_via_trace_clearance_error\n>\n\n/** Error emitted when a via and trace are closer than the allowed clearance */\nexport interface PcbViaTraceClearanceError extends BaseCircuitJsonError {\n type: \"pcb_via_trace_clearance_error\"\n pcb_via_trace_clearance_error_id: string\n error_type: \"pcb_via_trace_clearance_error\"\n pcb_via_id: string\n pcb_trace_id: string\n minimum_clearance?: Distance\n actual_clearance?: Distance\n center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbViaTraceClearanceError, InferredPcbViaTraceClearanceError>(\n true,\n)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_pad_pad_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_pad_pad_clearance_error\"),\n pcb_pad_pad_clearance_error_id: getZodPrefixedIdWithDefault(\n \"pcb_pad_pad_clearance_error\",\n ),\n error_type: z\n .literal(\"pcb_pad_pad_clearance_error\")\n .default(\"pcb_pad_pad_clearance_error\"),\n pcb_pad_ids: z.array(z.string()).min(2),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"Error emitted when pads are closer than the allowed clearance\")\n\nexport type PcbPadPadClearanceErrorInput = z.input<\n typeof pcb_pad_pad_clearance_error\n>\ntype InferredPcbPadPadClearanceError = z.infer<\n typeof pcb_pad_pad_clearance_error\n>\n\n/** Error emitted when pads are closer than the allowed clearance */\nexport interface PcbPadPadClearanceError extends BaseCircuitJsonError {\n type: \"pcb_pad_pad_clearance_error\"\n pcb_pad_pad_clearance_error_id: string\n error_type: \"pcb_pad_pad_clearance_error\"\n pcb_pad_ids: string[]\n minimum_clearance?: Distance\n actual_clearance?: Distance\n center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbPadPadClearanceError, InferredPcbPadPadClearanceError>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { distance, type Distance } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_pad_trace_clearance_error = base_circuit_json_error\n .extend({\n type: z.literal(\"pcb_pad_trace_clearance_error\"),\n pcb_pad_trace_clearance_error_id: getZodPrefixedIdWithDefault(\n \"pcb_pad_trace_clearance_error\",\n ),\n error_type: z\n .literal(\"pcb_pad_trace_clearance_error\")\n .default(\"pcb_pad_trace_clearance_error\"),\n pcb_pad_id: z.string(),\n pcb_trace_id: z.string(),\n minimum_clearance: distance.optional(),\n actual_clearance: distance.optional(),\n center: z\n .object({\n x: z.number().optional(),\n y: z.number().optional(),\n })\n .optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\n \"Error emitted when a pad and trace are closer than allowed clearance\",\n )\n\nexport type PcbPadTraceClearanceErrorInput = z.input<\n typeof pcb_pad_trace_clearance_error\n>\ntype InferredPcbPadTraceClearanceError = z.infer<\n typeof pcb_pad_trace_clearance_error\n>\n\n/** Error emitted when a pad and trace are closer than allowed clearance */\nexport interface PcbPadTraceClearanceError extends BaseCircuitJsonError {\n type: \"pcb_pad_trace_clearance_error\"\n pcb_pad_trace_clearance_error_id: string\n error_type: \"pcb_pad_trace_clearance_error\"\n pcb_pad_id: string\n pcb_trace_id: string\n minimum_clearance?: Distance\n actual_clearance?: Distance\n center?: {\n x?: number\n y?: number\n }\n subcircuit_id?: string\n}\n\nexpectTypesMatch<PcbPadTraceClearanceError, InferredPcbPadTraceClearanceError>(\n true,\n)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_rect = z\n .object({\n type: z.literal(\"pcb_courtyard_rect\"),\n pcb_courtyard_rect_id: getZodPrefixedIdWithDefault(\"pcb_courtyard_rect\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n layer: visible_layer,\n ccw_rotation: rotation.optional(),\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard rectangle on the PCB\")\n\nexport type PcbCourtyardRectInput = z.input<typeof pcb_courtyard_rect>\ntype InferredPcbCourtyardRect = z.infer<typeof pcb_courtyard_rect>\n\n/**\n * Defines a courtyard rectangle on the PCB\n */\nexport interface PcbCourtyardRect {\n type: \"pcb_courtyard_rect\"\n pcb_courtyard_rect_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n layer: VisibleLayer\n ccw_rotation?: Rotation\n color?: string\n}\n\n/**\n * @deprecated use PcbCourtyardRect\n */\nexport type PCBCourtyardRect = PcbCourtyardRect\n\nexpectTypesMatch<PcbCourtyardRect, InferredPcbCourtyardRect>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_outline = z\n .object({\n type: z.literal(\"pcb_courtyard_outline\"),\n pcb_courtyard_outline_id: getZodPrefixedIdWithDefault(\n \"pcb_courtyard_outline\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n outline: z.array(point).min(2),\n })\n .describe(\"Defines a courtyard outline on the PCB\")\n\nexport type PcbCourtyardOutlineInput = z.input<typeof pcb_courtyard_outline>\ntype InferredPcbCourtyardOutline = z.infer<typeof pcb_courtyard_outline>\n\n/**\n * Defines a courtyard outline on the PCB\n */\nexport interface PcbCourtyardOutline {\n type: \"pcb_courtyard_outline\"\n pcb_courtyard_outline_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n outline: Point[]\n}\n\n/**\n * @deprecated use PcbCourtyardOutline\n */\nexport type PCBCourtyardOutline = PcbCourtyardOutline\n\nexpectTypesMatch<PcbCourtyardOutline, InferredPcbCourtyardOutline>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_polygon = z\n .object({\n type: z.literal(\"pcb_courtyard_polygon\"),\n pcb_courtyard_polygon_id: getZodPrefixedIdWithDefault(\n \"pcb_courtyard_polygon\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n layer: visible_layer,\n points: z.array(point).min(3),\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard polygon on the PCB\")\n\nexport type PcbCourtyardPolygonInput = z.input<typeof pcb_courtyard_polygon>\ntype InferredPcbCourtyardPolygon = z.infer<typeof pcb_courtyard_polygon>\n\n/**\n * Defines a courtyard polygon on the PCB\n */\nexport interface PcbCourtyardPolygon {\n type: \"pcb_courtyard_polygon\"\n pcb_courtyard_polygon_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n layer: VisibleLayer\n points: Point[]\n color?: string\n}\n\n/**\n * @deprecated use PcbCourtyardPolygon\n */\nexport type PCBCourtyardPolygon = PcbCourtyardPolygon\n\nexpectTypesMatch<PcbCourtyardPolygon, InferredPcbCourtyardPolygon>(true)\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_circle = z\n .object({\n type: z.literal(\"pcb_courtyard_circle\"),\n pcb_courtyard_circle_id: getZodPrefixedIdWithDefault(\n \"pcb_courtyard_circle\",\n ),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n radius: length,\n layer: visible_layer,\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard circle on the PCB\")\n\nexport type PcbCourtyardCircleInput = z.input<typeof pcb_courtyard_circle>\ntype InferredPcbCourtyardCircle = z.infer<typeof pcb_courtyard_circle>\n\n/**\n * Defines a courtyard circle on the PCB\n */\nexport interface PcbCourtyardCircle {\n type: \"pcb_courtyard_circle\"\n pcb_courtyard_circle_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n radius: Length\n layer: VisibleLayer\n color?: string\n}\n\nexpectTypesMatch<PcbCourtyardCircle, InferredPcbCourtyardCircle>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault, point, type Point } from \"src/common\"\nimport { visible_layer, type VisibleLayer } from \"src/pcb/properties/layer_ref\"\nimport { length, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_courtyard_pill = z\n .object({\n type: z.literal(\"pcb_courtyard_pill\"),\n pcb_courtyard_pill_id: getZodPrefixedIdWithDefault(\"pcb_courtyard_pill\"),\n pcb_component_id: z.string(),\n pcb_group_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n center: point,\n width: length,\n height: length,\n radius: length,\n layer: visible_layer,\n color: z.string().optional(),\n })\n .describe(\"Defines a courtyard pill on the PCB\")\n\nexport type PcbCourtyardPillInput = z.input<typeof pcb_courtyard_pill>\ntype InferredPcbCourtyardPill = z.infer<typeof pcb_courtyard_pill>\n\n/**\n * Defines a courtyard pill on the PCB\n */\nexport interface PcbCourtyardPill {\n type: \"pcb_courtyard_pill\"\n pcb_courtyard_pill_id: string\n pcb_component_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n center: Point\n width: Length\n height: Length\n radius: Length\n layer: VisibleLayer\n color?: string\n}\n\nexpectTypesMatch<PcbCourtyardPill, InferredPcbCourtyardPill>(true)\n","import { type LayerRef, layer_ref } from \"src/pcb\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\nimport { type Asset, type Point3, asset, point3 } from \"../common\"\nimport { type Length, type Rotation, length, rotation } from \"../units\"\nimport {\n type CadModelAxisDirection,\n cad_model_axis_directions,\n} from \"./cad_model_conventions\"\n\nexport const cad_component = z\n .object({\n type: z.literal(\"cad_component\"),\n cad_component_id: z.string(),\n pcb_component_id: z\n .string()\n .optional()\n .describe(\n \"Optional PCB component reference; omit for CAD geometry without a PCB component\",\n ),\n source_component_id: z.string(),\n position: point3,\n rotation: point3.optional(),\n is_on_folded_board: z\n .boolean()\n .optional()\n .describe(\n \"True when position and rotation describe the assembled folded board pose. False or omitted means the flat board pose. PCB records remain flat; pcb_component_id identifies the flat mount and owning board for reversible transforms.\",\n ),\n size: point3.optional(),\n layer: layer_ref.optional(),\n subcircuit_id: z.string().optional(),\n\n // These are all ways to generate/load the 3d model\n footprinter_string: z.string().optional(),\n model_obj_url: z.string().optional(),\n model_stl_url: z.string().optional(),\n model_3mf_url: z.string().optional(),\n model_gltf_url: z.string().optional(),\n model_glb_url: z.string().optional(),\n model_step_url: z.string().optional(),\n model_wrl_url: z.string().optional(),\n model_asset: asset.optional(),\n model_unit_to_mm_scale_factor: z.number().optional(),\n model_board_normal_direction: z\n .enum(cad_model_axis_directions)\n .optional()\n .describe(\n 'The direction in the model\\'s coordinate space that is considered \"up\" or \"coming out of the board surface\"',\n ),\n model_origin_position: point3.optional(),\n model_origin_alignment: z\n .enum([\n \"unknown\",\n \"center\",\n \"center_of_component_on_board_surface\",\n \"bottom_center_of_component\",\n ] as const)\n .optional(),\n model_object_fit: z\n .enum([\"contain_within_bounds\", \"fill_bounds\"] as const)\n .optional()\n .default(\"contain_within_bounds\"),\n model_jscad: z.any().optional(),\n show_as_translucent_model: z.boolean().optional(),\n show_as_bounding_box: z.boolean().optional(),\n show_hidden_edges: z.boolean().optional(),\n anchor_alignment: z\n .enum([\"center\", \"center_of_component_on_board_surface\"] as const)\n .optional()\n .default(\"center\"),\n })\n .describe(\"Defines CAD geometry, optionally associated with a PCB component\")\n\nexport type CadComponentInput = z.input<typeof cad_component>\ntype InferredCadComponent = z.infer<typeof cad_component>\n\nexport type CadComponentAnchorAlignment = NonNullable<\n InferredCadComponent[\"anchor_alignment\"]\n>\n\n/** CAD geometry, optionally associated with a PCB component. */\nexport interface CadComponent {\n type: \"cad_component\"\n cad_component_id: string\n /** Omit for CAD geometry that has no corresponding PCB component. */\n pcb_component_id?: string\n source_component_id: string\n position: Point3\n rotation?: Point3\n /** True for assembled folded position/rotation; false or omitted for flat.\n * PCB records stay flat. pcb_component_id identifies the mount/owning board.\n */\n is_on_folded_board?: boolean\n size?: Point3\n layer?: LayerRef\n subcircuit_id?: string\n footprinter_string?: string\n model_obj_url?: string\n model_stl_url?: string\n model_3mf_url?: string\n model_gltf_url?: string\n model_glb_url?: string\n model_step_url?: string\n model_wrl_url?: string\n model_asset?: Asset\n model_unit_to_mm_scale_factor?: number\n model_board_normal_direction?: CadModelAxisDirection\n model_origin_position?: Point3\n model_origin_alignment?:\n | \"unknown\"\n | \"center\"\n | \"center_of_component_on_board_surface\"\n | \"bottom_center_of_component\"\n model_object_fit: \"contain_within_bounds\" | \"fill_bounds\"\n model_jscad?: any\n show_as_translucent_model?: boolean\n show_as_bounding_box?: boolean\n show_hidden_edges?: boolean\n anchor_alignment: CadComponentAnchorAlignment\n}\n\nexpectTypesMatch<CadComponent, InferredCadComponent>(true)\n","export const cad_model_formats = [\n \"obj\",\n \"stl\",\n \"3mf\",\n \"gltf\",\n \"glb\",\n \"step\",\n \"wrl\",\n] as const\n\nexport const cad_model_axis_directions = [\n \"x+\",\n \"x-\",\n \"y+\",\n \"y-\",\n \"z+\",\n \"z-\",\n] as const\n\nexport type CadModelFormat = (typeof cad_model_formats)[number]\nexport type CadModelAxisDirection = (typeof cad_model_axis_directions)[number]\n\nexport const cadModelDefaultDirectionMap = {\n obj: \"z+\",\n stl: \"z+\",\n \"3mf\": \"z+\",\n gltf: \"y+\",\n glb: \"y+\",\n step: \"z+\",\n wrl: \"y+\",\n} as const\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"../base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nexport const cad_collision_error = base_circuit_json_error\n .extend({\n type: z.literal(\"cad_collision_error\"),\n cad_collision_error_id: getZodPrefixedIdWithDefault(\"cad_collision_error\"),\n error_type: z.literal(\"cad_collision_error\").default(\"cad_collision_error\"),\n cad_component_ids: z.array(z.string()).min(1),\n pcb_component_ids: z.array(z.string()).optional(),\n source_component_ids: z.array(z.string()).min(1),\n intersection_area_mm2: z.number().finite().nonnegative(),\n threshold_area_mm2: z.number().finite().nonnegative(),\n })\n .describe(\n \"An aperture-bearing part intersects the finished enclosure. The intersection_area_mm2 is the union silhouette area of the solid intersection projected along the aperture face normal, in the right-handed Circuit JSON world frame (+X right, +Y top, +Z above). It is an area in square millimetres, not intersection volume or surface area. This indicates possible aperture misplacement, insufficient size/depth, or body clearance problems; it does not prove which cause applies.\",\n )\n\nexport type CadCollisionErrorInput = z.input<typeof cad_collision_error>\nexport interface CadCollisionError extends BaseCircuitJsonError {\n type: \"cad_collision_error\"\n cad_collision_error_id: string\n error_type: \"cad_collision_error\"\n cad_component_ids: string[]\n pcb_component_ids?: string[]\n source_component_ids: string[]\n /** Union silhouette of solid intersection, projected along face normal (mm²). */\n intersection_area_mm2: number\n threshold_area_mm2: number\n}\n\nexpectTypesMatch<CadCollisionError, z.infer<typeof cad_collision_error>>(true)\n","import { z } from \"zod\"\nimport { point3, type Point3 } from \"../common\"\nimport { expectTypesMatch } from \"../utils/expect-types-match\"\n\nconst connectorPin1Position = point3\n .refine(\n (point) => [point.x, point.y, point.z].every(Number.isFinite),\n \"Connector pin 1 positions must be finite\",\n )\n .describe(\n \"Resolved pin 1 position at the connector mating face, in right-handed circuit world, millimeters: +X right, +Y top, +Z above. An absolute point, not a direction. Computed by the circuit producer from endpoint geometry. Together with the endpoint path tangent, fixes connector roll and identifies its pin 1 side; renderers must not infer it from footprints.\",\n )\n\nexport const cad_cable = z\n .object({\n type: z.literal(\"cad_cable\"),\n cad_cable_id: z.string(),\n name: z.string().min(1),\n from_source_component_id: z.string(),\n to_source_component_id: z.string(),\n from_connector_pin1_position: connectorPin1Position.optional(),\n to_connector_pin1_position: connectorPin1Position.optional(),\n cableprinter_string: z\n .string()\n .min(1)\n .describe(\n 'Physical cable definition, e.g. \"usb_c\" or \"jst_ph_pins6\". Independent of the route.',\n ),\n path: z\n .array(point3)\n .min(2)\n .refine(\n (path) =>\n path.every(\n (point, i) =>\n [point.x, point.y, point.z].every(Number.isFinite) &&\n (i === 0 ||\n Math.hypot(\n point.x - path[i - 1]!.x,\n point.y - path[i - 1]!.y,\n point.z - path[i - 1]!.z,\n ) > 1e-8),\n ),\n \"Cable paths require finite, distinct consecutive points\",\n )\n .describe(\n \"Resolved cable centerline points in right-handed circuit world, millimeters: +X right, +Y top, +Z above. First/last samples are connector wire exits; their tangents point into/out of the cable. Includes routing/slack; renderers must not recompute the path.\",\n ),\n })\n .describe(\n \"A physical assembly cable with a resolved 3D route. Several cables are independent cad_cable records, each with its own endpoints, definition and path. Does not imply electrical pin mapping.\",\n )\n\nexport type CadCableInput = z.input<typeof cad_cable>\ntype InferredCadCable = z.infer<typeof cad_cable>\n\n/** Resolved cable geometry in circuit-world XYZ, mm, +Z up. Path samples are\n * points; first and last are wire exits. Optional pin 1 positions are absolute\n * points at the connector mating faces, resolved by the circuit producer.\n * Their transverse offsets from the endpoint centerlines fix connector roll.\n * Omitted positions preserve legacy parallel-transport orientation.\n * Rendering consumes this path without rerouting or adding sag.\n */\nexport interface CadCable {\n type: \"cad_cable\"\n cad_cable_id: string\n name: string\n from_source_component_id: string\n to_source_component_id: string\n from_connector_pin1_position?: Point3\n to_connector_pin1_position?: Point3\n cableprinter_string: string\n path: Point3[]\n}\n\nexpectTypesMatch<CadCable, InferredCadCable>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { frequency, ms, rotation, voltage } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const wave_shape = z.enum([\"sinewave\", \"square\", \"triangle\", \"sawtooth\"])\nexport type WaveShape = z.infer<typeof wave_shape>\n\nconst percentage = z\n .union([z.string(), z.number()])\n .transform((val) => {\n if (typeof val === \"string\") {\n if (val.endsWith(\"%\")) {\n return parseFloat(val.slice(0, -1)) / 100\n }\n return parseFloat(val)\n }\n return val\n })\n .pipe(\n z\n .number()\n .min(0, \"Duty cycle must be non-negative\")\n .max(1, \"Duty cycle cannot be greater than 100%\"),\n )\n\nexport const simulation_dc_voltage_source = z\n .object({\n type: z.literal(\"simulation_voltage_source\"),\n simulation_voltage_source_id: getZodPrefixedIdWithDefault(\n \"simulation_voltage_source\",\n ),\n is_dc_source: z.literal(true).optional().default(true),\n positive_source_port_id: z.string().optional(),\n negative_source_port_id: z.string().optional(),\n positive_source_net_id: z.string().optional(),\n negative_source_net_id: z.string().optional(),\n voltage: voltage,\n ac_magnitude: voltage.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines a DC voltage source for simulation\")\n\nexport const simulation_ac_voltage_source = z\n .object({\n type: z.literal(\"simulation_voltage_source\"),\n simulation_voltage_source_id: getZodPrefixedIdWithDefault(\n \"simulation_voltage_source\",\n ),\n is_dc_source: z.literal(false),\n terminal1_source_port_id: z.string().optional(),\n terminal2_source_port_id: z.string().optional(),\n terminal1_source_net_id: z.string().optional(),\n terminal2_source_net_id: z.string().optional(),\n voltage: voltage.optional(),\n frequency: frequency.optional(),\n peak_to_peak_voltage: voltage.optional(),\n wave_shape: wave_shape.optional(),\n phase: rotation.optional(),\n duty_cycle: percentage.optional(),\n pulse_delay: ms.optional(),\n rise_time: ms.optional(),\n fall_time: ms.optional(),\n pulse_width: ms.optional(),\n period: ms.optional(),\n ac_magnitude: voltage.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines an AC voltage source for simulation\")\n\nexport type SimulationAcVoltageSourceInput = z.input<\n typeof simulation_ac_voltage_source\n>\n\nexport const simulation_voltage_source = z\n .union([simulation_dc_voltage_source, simulation_ac_voltage_source])\n .describe(\"Defines a voltage source for simulation\")\n\nexport type SimulationVoltageSourceInput = z.input<\n typeof simulation_voltage_source\n>\ntype InferredSimulationVoltageSource = z.infer<typeof simulation_voltage_source>\n\n/**\n * Defines a DC voltage source for simulation purposes. It applies a voltage\n * difference between two source ports.\n */\nexport interface SimulationDcVoltageSource {\n type: \"simulation_voltage_source\"\n simulation_voltage_source_id: string\n is_dc_source: true\n positive_source_port_id?: string\n positive_source_net_id?: string\n negative_source_port_id?: string\n negative_source_net_id?: string\n voltage: number\n ac_magnitude?: number\n ac_phase?: number\n}\n\n/**\n * Defines an AC voltage source for simulation purposes.\n */\nexport interface SimulationAcVoltageSource {\n type: \"simulation_voltage_source\"\n simulation_voltage_source_id: string\n is_dc_source: false\n terminal1_source_port_id?: string\n terminal2_source_port_id?: string\n terminal1_source_net_id?: string\n terminal2_source_net_id?: string\n voltage?: number\n frequency?: number\n peak_to_peak_voltage?: number\n wave_shape?: WaveShape\n phase?: number\n duty_cycle?: number\n pulse_delay?: number // ms\n rise_time?: number // ms\n fall_time?: number // ms\n pulse_width?: number // ms\n period?: number // ms\n ac_magnitude?: number\n ac_phase?: number\n}\n\nexport type SimulationVoltageSource =\n | SimulationDcVoltageSource\n | SimulationAcVoltageSource\n\nexpectTypesMatch<\n SimulationDcVoltageSource,\n z.infer<typeof simulation_dc_voltage_source>\n>(true)\nexpectTypesMatch<\n SimulationAcVoltageSource,\n z.infer<typeof simulation_ac_voltage_source>\n>(true)\nexpectTypesMatch<SimulationVoltageSource, InferredSimulationVoltageSource>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { current, frequency, rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n wave_shape,\n type WaveShape,\n} from \"src/simulation/simulation_voltage_source\"\n\nconst percentage = z\n .union([z.string(), z.number()])\n .transform((val) => {\n if (typeof val === \"string\") {\n if (val.endsWith(\"%\")) {\n return parseFloat(val.slice(0, -1)) / 100\n }\n return parseFloat(val)\n }\n return val\n })\n .pipe(\n z\n .number()\n .min(0, \"Duty cycle must be non-negative\")\n .max(1, \"Duty cycle cannot be greater than 100%\"),\n )\n\nexport const simulation_dc_current_source = z\n .object({\n type: z.literal(\"simulation_current_source\"),\n simulation_current_source_id: getZodPrefixedIdWithDefault(\n \"simulation_current_source\",\n ),\n is_dc_source: z.literal(true).optional().default(true),\n positive_source_port_id: z.string().optional(),\n negative_source_port_id: z.string().optional(),\n positive_source_net_id: z.string().optional(),\n negative_source_net_id: z.string().optional(),\n current: current,\n ac_magnitude: current.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines a DC current source for simulation\")\n\nexport const simulation_ac_current_source = z\n .object({\n type: z.literal(\"simulation_current_source\"),\n simulation_current_source_id: getZodPrefixedIdWithDefault(\n \"simulation_current_source\",\n ),\n is_dc_source: z.literal(false),\n terminal1_source_port_id: z.string().optional(),\n terminal2_source_port_id: z.string().optional(),\n terminal1_source_net_id: z.string().optional(),\n terminal2_source_net_id: z.string().optional(),\n current: current.optional(),\n frequency: frequency.optional(),\n peak_to_peak_current: current.optional(),\n wave_shape: wave_shape.optional(),\n phase: rotation.optional(),\n duty_cycle: percentage.optional(),\n ac_magnitude: current.optional(),\n ac_phase: rotation.optional(),\n })\n .describe(\"Defines an AC current source for simulation\")\n\nexport type SimulationAcCurrentSourceInput = z.input<\n typeof simulation_ac_current_source\n>\n\nexport const simulation_current_source = z\n .union([simulation_dc_current_source, simulation_ac_current_source])\n .describe(\"Defines a current source for simulation\")\n\nexport type SimulationCurrentSourceInput = z.input<\n typeof simulation_current_source\n>\ntype InferredSimulationCurrentSource = z.infer<typeof simulation_current_source>\n\n/**\n * Defines a DC current source for simulation purposes. It forces a current\n * between two source ports.\n */\nexport interface SimulationDcCurrentSource {\n type: \"simulation_current_source\"\n simulation_current_source_id: string\n is_dc_source: true\n positive_source_port_id?: string\n positive_source_net_id?: string\n negative_source_port_id?: string\n negative_source_net_id?: string\n current: number\n ac_magnitude?: number\n ac_phase?: number\n}\n\n/**\n * Defines an AC current source for simulation purposes.\n */\nexport interface SimulationAcCurrentSource {\n type: \"simulation_current_source\"\n simulation_current_source_id: string\n is_dc_source: false\n terminal1_source_port_id?: string\n terminal2_source_port_id?: string\n terminal1_source_net_id?: string\n terminal2_source_net_id?: string\n current?: number\n frequency?: number\n peak_to_peak_current?: number\n wave_shape?: WaveShape\n phase?: number\n duty_cycle?: number\n ac_magnitude?: number\n ac_phase?: number\n}\n\nexport type SimulationCurrentSource =\n | SimulationDcCurrentSource\n | SimulationAcCurrentSource\n\nexpectTypesMatch<\n SimulationDcCurrentSource,\n z.infer<typeof simulation_dc_current_source>\n>(true)\nexpectTypesMatch<\n SimulationAcCurrentSource,\n z.infer<typeof simulation_ac_current_source>\n>(true)\nexpectTypesMatch<SimulationCurrentSource, InferredSimulationCurrentSource>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { duration_ms, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { simulation_dc_sweep_unit } from \"./simulation_units\"\n\nexport const experiment_type = z.union([\n z.literal(\"spice_dc_sweep\"),\n z.literal(\"spice_dc_operating_point\"),\n z.literal(\"spice_transient_analysis\"),\n z.literal(\"spice_ac_analysis\"),\n])\n\nexport type ExperimentType = z.infer<typeof experiment_type>\n\nexport const spice_simulation_options = z\n .object({\n method: z.enum([\"trap\", \"gear\"]).optional(),\n reltol: z.union([z.number(), z.string()]).optional(),\n abstol: z.union([z.number(), z.string()]).optional(),\n vntol: z.union([z.number(), z.string()]).optional(),\n })\n .describe(\"SPICE solver options for a simulation experiment\")\n\nexport interface SpiceSimulationOptions {\n method?: \"trap\" | \"gear\"\n reltol?: number | string\n abstol?: number | string\n vntol?: number | string\n}\n\nexport interface SimulationExperiment {\n type: \"simulation_experiment\"\n simulation_experiment_id: string\n name: string\n experiment_type: ExperimentType\n time_per_step?: number // ms\n start_time_ms?: number // ms\n end_time_ms?: number // ms\n spice_options?: SpiceSimulationOptions\n dc_sweep_voltage_source_id?: string\n dc_sweep_current_source_id?: string\n dc_sweep_start?: number\n dc_sweep_stop?: number\n dc_sweep_step?: number\n dc_sweep_unit?: \"V\" | \"A\"\n ac_sweep_type?: \"linear\" | \"decade\" | \"octave\"\n ac_samples_per_interval?: number\n ac_sample_count?: number\n ac_start_frequency_hz?: number\n ac_stop_frequency_hz?: number\n}\n\nexport const simulation_experiment = z\n .object({\n type: z.literal(\"simulation_experiment\"),\n simulation_experiment_id: getZodPrefixedIdWithDefault(\n \"simulation_experiment\",\n ),\n name: z.string(),\n experiment_type,\n time_per_step: duration_ms.optional(),\n start_time_ms: ms.optional(),\n end_time_ms: ms.optional(),\n spice_options: spice_simulation_options.optional(),\n dc_sweep_voltage_source_id: z.string().optional(),\n dc_sweep_current_source_id: z.string().optional(),\n dc_sweep_start: z.number().optional(),\n dc_sweep_stop: z.number().optional(),\n dc_sweep_step: z\n .number()\n .refine((dcSweepStep) => dcSweepStep !== 0)\n .optional(),\n dc_sweep_unit: simulation_dc_sweep_unit.optional(),\n ac_sweep_type: z.enum([\"linear\", \"decade\", \"octave\"]).optional(),\n ac_samples_per_interval: z.number().int().positive().optional(),\n ac_sample_count: z.number().int().positive().optional(),\n ac_start_frequency_hz: z.number().positive().optional(),\n ac_stop_frequency_hz: z.number().positive().optional(),\n })\n .superRefine((experiment, context) => {\n if (experiment.experiment_type === \"spice_dc_sweep\") {\n const requiredFields = [\n \"dc_sweep_start\",\n \"dc_sweep_stop\",\n \"dc_sweep_step\",\n \"dc_sweep_unit\",\n ] as const\n for (const field of requiredFields) {\n if (experiment[field] === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [field],\n message: `${field} is required for a DC sweep`,\n })\n }\n }\n\n const hasVoltageSource =\n experiment.dc_sweep_voltage_source_id !== undefined\n const hasCurrentSource =\n experiment.dc_sweep_current_source_id !== undefined\n if (hasVoltageSource === hasCurrentSource) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"dc_sweep_voltage_source_id\"],\n message:\n \"Exactly one DC sweep voltage or current source ID is required\",\n })\n }\n }\n\n if (experiment.experiment_type === \"spice_ac_analysis\") {\n if (experiment.ac_sweep_type === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_sweep_type\"],\n message: \"ac_sweep_type is required for an AC analysis\",\n })\n }\n if (experiment.ac_start_frequency_hz === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_start_frequency_hz\"],\n message: \"ac_start_frequency_hz is required for an AC analysis\",\n })\n }\n if (experiment.ac_stop_frequency_hz === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_stop_frequency_hz\"],\n message: \"ac_stop_frequency_hz is required for an AC analysis\",\n })\n }\n if (\n experiment.ac_sweep_type === \"linear\" &&\n experiment.ac_sample_count === undefined\n ) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_sample_count\"],\n message: \"ac_sample_count is required for a linear AC analysis\",\n })\n }\n if (\n (experiment.ac_sweep_type === \"decade\" ||\n experiment.ac_sweep_type === \"octave\") &&\n experiment.ac_samples_per_interval === undefined\n ) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"ac_samples_per_interval\"],\n message:\n \"ac_samples_per_interval is required for decade and octave AC analyses\",\n })\n }\n }\n })\n .describe(\"Defines a simulation experiment configuration\")\n\nexport type SimulationExperimentInput = z.input<typeof simulation_experiment>\ntype InferredSimulationExperiment = z.infer<typeof simulation_experiment>\n\nexpectTypesMatch<SimulationExperiment, InferredSimulationExperiment>(true)\n","import { z } from \"zod\"\n\nexport type SimulationDcSweepUnit = \"V\" | \"A\"\n\n// Units intentionally use their canonical symbols instead of enum-style names.\nexport const simulation_dc_sweep_unit = z.custom<SimulationDcSweepUnit>(\n (dcSweepUnit) => dcSweepUnit === \"V\" || dcSweepUnit === \"A\",\n)\n\nexport type SimulationParameterUnit = \"Ω\" | \"F\" | \"H\" | \"V\" | \"A\"\n\n// Units intentionally use their canonical symbols instead of enum-style names.\nexport const simulation_parameter_unit = z.custom<SimulationParameterUnit>(\n (parameterUnit) =>\n parameterUnit === \"Ω\" ||\n parameterUnit === \"F\" ||\n parameterUnit === \"H\" ||\n parameterUnit === \"V\" ||\n parameterUnit === \"A\",\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { duration_ms, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationTransientVoltageGraph {\n type: \"simulation_transient_voltage_graph\"\n simulation_transient_voltage_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n timestamps_ms?: number[]\n voltage_levels: number[]\n source_component_id?: string\n subcircuit_connectivity_map_key?: string\n time_per_step: number\n start_time_ms: number\n end_time_ms: number\n name?: string\n color?: string\n}\n\nexport const simulation_transient_voltage_graph = z\n .object({\n type: z.literal(\"simulation_transient_voltage_graph\"),\n simulation_transient_voltage_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_transient_voltage_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n timestamps_ms: z.array(z.number()).optional(),\n voltage_levels: z.array(z.number()),\n source_component_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n time_per_step: duration_ms,\n start_time_ms: ms,\n end_time_ms: ms,\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\"Stores voltage measurements over time for a simulation\")\n\nexport type SimulationTransientVoltageGraphInput = z.input<\n typeof simulation_transient_voltage_graph\n>\ntype InferredSimulationTransientVoltageGraph = z.infer<\n typeof simulation_transient_voltage_graph\n>\n\nexpectTypesMatch<\n SimulationTransientVoltageGraph,\n InferredSimulationTransientVoltageGraph\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_unit,\n type SimulationParameterUnit,\n} from \"./simulation_units\"\n\nexport interface SimulationParameterSweepCoordinate {\n simulation_parameter_sweep_id: string\n sweep_index: number\n parameter_value: number\n parameter_unit: SimulationParameterUnit\n}\n\nexport const simulation_parameter_sweep_coordinate = z.object({\n simulation_parameter_sweep_id: z.string(),\n sweep_index: z.number().int().nonnegative(),\n parameter_value: z.number(),\n parameter_unit: simulation_parameter_unit,\n})\n\nexpectTypesMatch<\n SimulationParameterSweepCoordinate,\n z.infer<typeof simulation_parameter_sweep_coordinate>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { duration_ms, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationTransientCurrentGraph {\n type: \"simulation_transient_current_graph\"\n simulation_transient_current_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n timestamps_ms?: number[]\n current_levels: number[]\n source_component_id?: string\n subcircuit_connectivity_map_key?: string\n time_per_step: number\n start_time_ms: number\n end_time_ms: number\n name?: string\n color?: string\n}\n\nexport const simulation_transient_current_graph = z\n .object({\n type: z.literal(\"simulation_transient_current_graph\"),\n simulation_transient_current_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_transient_current_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n timestamps_ms: z.array(z.number()).optional(),\n current_levels: z.array(z.number()),\n source_component_id: z.string().optional(),\n subcircuit_connectivity_map_key: z.string().optional(),\n time_per_step: duration_ms,\n start_time_ms: ms,\n end_time_ms: ms,\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\"Stores current measurements over time for a simulation\")\n\nexport type SimulationTransientCurrentGraphInput = z.input<\n typeof simulation_transient_current_graph\n>\ntype InferredSimulationTransientCurrentGraph = z.infer<\n typeof simulation_transient_current_graph\n>\n\nexpectTypesMatch<\n SimulationTransientCurrentGraph,\n InferredSimulationTransientCurrentGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { frequency, ms } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_switch = z\n .object({\n type: z.literal(\"simulation_switch\"),\n simulation_switch_id: getZodPrefixedIdWithDefault(\"simulation_switch\"),\n source_component_id: z.string().optional(),\n closes_at: ms.optional(),\n opens_at: ms.optional(),\n starts_closed: z.boolean().optional(),\n switching_frequency: frequency.optional(),\n })\n .describe(\"Defines a switch for simulation timing control\")\n\nexport type SimulationSwitchInput = z.input<typeof simulation_switch>\n\ntype InferredSimulationSwitch = z.infer<typeof simulation_switch>\n\nexport interface SimulationSwitch {\n type: \"simulation_switch\"\n simulation_switch_id: string\n source_component_id?: string\n closes_at?: number\n opens_at?: number\n starts_closed?: boolean\n switching_frequency?: number\n}\n\nexpectTypesMatch<SimulationSwitch, InferredSimulationSwitch>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_voltage_probe = z\n .object({\n type: z.literal(\"simulation_voltage_probe\"),\n simulation_voltage_probe_id: getZodPrefixedIdWithDefault(\n \"simulation_voltage_probe\",\n ),\n source_component_id: z.string().optional(),\n name: z.string().optional(),\n signal_input_source_port_id: z.string().optional(),\n signal_input_source_net_id: z.string().optional(),\n reference_input_source_port_id: z.string().optional(),\n reference_input_source_net_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\n \"Defines a voltage probe for simulation. If a reference input is not provided, it measures against ground. If a reference input is provided, it measures the differential voltage between two points.\",\n )\n .superRefine((data, ctx) => {\n const is_differential =\n data.reference_input_source_port_id || data.reference_input_source_net_id\n\n if (is_differential) {\n const has_ports =\n !!data.signal_input_source_port_id ||\n !!data.reference_input_source_port_id\n const has_nets =\n !!data.signal_input_source_net_id ||\n !!data.reference_input_source_net_id\n\n if (has_ports && has_nets) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Cannot mix port and net connections in a differential probe.\",\n })\n } else if (has_ports) {\n if (\n !data.signal_input_source_port_id ||\n !data.reference_input_source_port_id\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Differential port probe requires both signal_input_source_port_id and reference_input_source_port_id.\",\n })\n }\n } else if (has_nets) {\n if (\n !data.signal_input_source_net_id ||\n !data.reference_input_source_net_id\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Differential net probe requires both signal_input_source_net_id and reference_input_source_net_id.\",\n })\n }\n }\n } else {\n // Single-ended probe\n if (\n !!data.signal_input_source_port_id === !!data.signal_input_source_net_id\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"A voltage probe must have exactly one of signal_input_source_port_id or signal_input_source_net_id.\",\n })\n }\n }\n })\n\nexport type SimulationVoltageProbeInput = z.input<\n typeof simulation_voltage_probe\n>\ntype InferredSimulationVoltageProbe = z.infer<typeof simulation_voltage_probe>\n\n/**\n * Defines a voltage probe for simulation. If a reference input is not provided,\n * it measures against ground. If a reference input is provided, it measures\n * the differential voltage between two points.\n */\nexport interface SimulationVoltageProbe {\n type: \"simulation_voltage_probe\"\n simulation_voltage_probe_id: string\n source_component_id?: string\n name?: string\n signal_input_source_port_id?: string\n signal_input_source_net_id?: string\n reference_input_source_port_id?: string\n reference_input_source_net_id?: string\n subcircuit_id?: string\n color?: string\n}\n\nexpectTypesMatch<SimulationVoltageProbe, InferredSimulationVoltageProbe>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_current_probe = z\n .object({\n type: z.literal(\"simulation_current_probe\"),\n simulation_current_probe_id: getZodPrefixedIdWithDefault(\n \"simulation_current_probe\",\n ),\n source_component_id: z.string().optional(),\n name: z.string().optional(),\n positive_source_port_id: z.string().optional(),\n negative_source_port_id: z.string().optional(),\n positive_source_net_id: z.string().optional(),\n negative_source_net_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n color: z.string().optional(),\n })\n .describe(\n \"Defines a current probe for simulation. It measures current flowing from the positive endpoint to the negative endpoint.\",\n )\n .superRefine((data, ctx) => {\n const hasPositivePort = !!data.positive_source_port_id\n const hasNegativePort = !!data.negative_source_port_id\n const hasPositiveNet = !!data.positive_source_net_id\n const hasNegativeNet = !!data.negative_source_net_id\n const hasPorts = hasPositivePort || hasNegativePort\n const hasNets = hasPositiveNet || hasNegativeNet\n\n if (hasPorts && hasNets) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Cannot mix port and net connections in a current probe.\",\n })\n return\n }\n\n if (hasPorts) {\n if (!hasPositivePort || !hasNegativePort) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Current probe using source ports requires both positive_source_port_id and negative_source_port_id.\",\n })\n }\n return\n }\n\n if (hasNets) {\n if (!hasPositiveNet || !hasNegativeNet) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Current probe using source nets requires both positive_source_net_id and negative_source_net_id.\",\n })\n }\n return\n }\n\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"A current probe must have either positive/negative source port ids or positive/negative source net ids.\",\n })\n })\n\nexport type SimulationCurrentProbeInput = z.input<\n typeof simulation_current_probe\n>\ntype InferredSimulationCurrentProbe = z.infer<typeof simulation_current_probe>\n\n/**\n * Defines a current probe for simulation. It measures current flowing from the\n * positive endpoint to the negative endpoint.\n */\nexport interface SimulationCurrentProbe {\n type: \"simulation_current_probe\"\n simulation_current_probe_id: string\n source_component_id?: string\n name?: string\n positive_source_port_id?: string\n negative_source_port_id?: string\n positive_source_net_id?: string\n negative_source_net_id?: string\n subcircuit_id?: string\n color?: string\n}\n\nexpectTypesMatch<SimulationCurrentProbe, InferredSimulationCurrentProbe>(true)\n","import { z } from \"zod\"\nimport {\n base_circuit_json_error,\n type BaseCircuitJsonError,\n} from \"src/base_circuit_json_error\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_unknown_experiment_error = base_circuit_json_error\n .extend({\n type: z.literal(\"simulation_unknown_experiment_error\"),\n simulation_unknown_experiment_error_id: getZodPrefixedIdWithDefault(\n \"simulation_unknown_experiment_error\",\n ),\n error_type: z\n .literal(\"simulation_unknown_experiment_error\")\n .default(\"simulation_unknown_experiment_error\"),\n simulation_experiment_id: z.string().optional(),\n subcircuit_id: z.string().optional(),\n })\n .describe(\"An unknown error occurred during the simulation experiment.\")\n\nexport type SimulationUnknownExperimentErrorInput = z.input<\n typeof simulation_unknown_experiment_error\n>\ntype InferredSimulationUnknownExperimentError = z.infer<\n typeof simulation_unknown_experiment_error\n>\n\n/**\n * An unknown error occurred during the simulation experiment.\n */\nexport interface SimulationUnknownExperimentError extends BaseCircuitJsonError {\n type: \"simulation_unknown_experiment_error\"\n simulation_unknown_experiment_error_id: string\n error_type: \"simulation_unknown_experiment_error\"\n simulation_experiment_id?: string\n subcircuit_id?: string\n}\n\nexpectTypesMatch<\n SimulationUnknownExperimentError,\n InferredSimulationUnknownExperimentError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_unit,\n type SimulationParameterUnit,\n} from \"./simulation_units\"\n\nexport const simulation_parameter_type = z.enum([\n \"resistance\",\n \"capacitance\",\n \"inductance\",\n \"voltage\",\n \"current\",\n])\n\nexport type SimulationParameterType = z.infer<typeof simulation_parameter_type>\n\ninterface SimulationParameterSweepBase {\n type: \"simulation_parameter_sweep\"\n simulation_parameter_sweep_id: string\n simulation_experiment_id: string\n name?: string\n parameter_values: number[]\n parameter_unit: SimulationParameterUnit\n}\n\nexport interface SimulationResistanceParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"resistance\"\n resistor_source_component_id: string\n}\n\nexport interface SimulationCapacitanceParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"capacitance\"\n capacitor_source_component_id: string\n}\n\nexport interface SimulationInductanceParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"inductance\"\n inductor_source_component_id: string\n}\n\nexport interface SimulationVoltageParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"voltage\"\n source_net_id: string\n}\n\nexport interface SimulationCurrentParameterSweep\n extends SimulationParameterSweepBase {\n parameter_type: \"current\"\n current_source_component_id: string\n}\n\nexport type SimulationParameterSweep =\n | SimulationResistanceParameterSweep\n | SimulationCapacitanceParameterSweep\n | SimulationInductanceParameterSweep\n | SimulationVoltageParameterSweep\n | SimulationCurrentParameterSweep\n\nconst simulation_parameter_sweep_base = z.object({\n type: z.literal(\"simulation_parameter_sweep\"),\n simulation_parameter_sweep_id: getZodPrefixedIdWithDefault(\n \"simulation_parameter_sweep\",\n ),\n simulation_experiment_id: z.string(),\n name: z.string().optional(),\n parameter_values: z.array(z.number()).min(1),\n parameter_unit: simulation_parameter_unit,\n})\n\nexport const simulation_parameter_sweep = z\n .discriminatedUnion(\"parameter_type\", [\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"resistance\"),\n resistor_source_component_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"capacitance\"),\n capacitor_source_component_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"inductance\"),\n inductor_source_component_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"voltage\"),\n source_net_id: z.string(),\n }),\n simulation_parameter_sweep_base.extend({\n parameter_type: z.literal(\"current\"),\n current_source_component_id: z.string(),\n }),\n ])\n .describe(\"Repeats a simulation experiment over component parameter values\")\n\nexport type SimulationParameterSweepInput = z.input<\n typeof simulation_parameter_sweep\n>\ntype InferredSimulationParameterSweep = z.infer<\n typeof simulation_parameter_sweep\n>\n\nexpectTypesMatch<SimulationParameterSweep, InferredSimulationParameterSweep>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcOperatingPointVoltage {\n type: \"simulation_dc_operating_point_voltage\"\n simulation_dc_operating_point_voltage_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_voltage_probe_id: string\n voltage: number\n name?: string\n color?: string\n}\n\nexport const simulation_dc_operating_point_voltage = z.object({\n type: z.literal(\"simulation_dc_operating_point_voltage\"),\n simulation_dc_operating_point_voltage_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_operating_point_voltage\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_voltage_probe_id: z.string(),\n voltage: z.number(),\n name: z.string().optional(),\n color: z.string().optional(),\n})\n\nexport type SimulationDcOperatingPointVoltageInput = z.input<\n typeof simulation_dc_operating_point_voltage\n>\ntype InferredSimulationDcOperatingPointVoltage = z.infer<\n typeof simulation_dc_operating_point_voltage\n>\n\nexpectTypesMatch<\n SimulationDcOperatingPointVoltage,\n InferredSimulationDcOperatingPointVoltage\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcOperatingPointCurrent {\n type: \"simulation_dc_operating_point_current\"\n simulation_dc_operating_point_current_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_current_probe_id: string\n current: number\n name?: string\n color?: string\n}\n\nexport const simulation_dc_operating_point_current = z.object({\n type: z.literal(\"simulation_dc_operating_point_current\"),\n simulation_dc_operating_point_current_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_operating_point_current\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_current_probe_id: z.string(),\n current: z.number(),\n name: z.string().optional(),\n color: z.string().optional(),\n})\n\nexport type SimulationDcOperatingPointCurrentInput = z.input<\n typeof simulation_dc_operating_point_current\n>\ntype InferredSimulationDcOperatingPointCurrent = z.infer<\n typeof simulation_dc_operating_point_current\n>\n\nexpectTypesMatch<\n SimulationDcOperatingPointCurrent,\n InferredSimulationDcOperatingPointCurrent\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_dc_sweep_unit,\n type SimulationDcSweepUnit,\n} from \"./simulation_units\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcSweepVoltageGraph {\n type: \"simulation_dc_sweep_voltage_graph\"\n simulation_dc_sweep_voltage_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_voltage_probe_id: string\n sweep_values: number[]\n sweep_unit: SimulationDcSweepUnit\n voltage_levels: number[]\n name?: string\n color?: string\n}\n\nexport const simulation_dc_sweep_voltage_graph = z\n .object({\n type: z.literal(\"simulation_dc_sweep_voltage_graph\"),\n simulation_dc_sweep_voltage_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_sweep_voltage_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_voltage_probe_id: z.string(),\n sweep_values: z.array(z.number()),\n sweep_unit: simulation_dc_sweep_unit,\n voltage_levels: z.array(z.number()),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.sweep_values.length === graph.voltage_levels.length,\n {\n message: \"sweep_values and voltage_levels must have the same length\",\n },\n )\n\nexport type SimulationDcSweepVoltageGraphInput = z.input<\n typeof simulation_dc_sweep_voltage_graph\n>\ntype InferredSimulationDcSweepVoltageGraph = z.infer<\n typeof simulation_dc_sweep_voltage_graph\n>\n\nexpectTypesMatch<\n SimulationDcSweepVoltageGraph,\n InferredSimulationDcSweepVoltageGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_dc_sweep_unit,\n type SimulationDcSweepUnit,\n} from \"./simulation_units\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationDcSweepCurrentGraph {\n type: \"simulation_dc_sweep_current_graph\"\n simulation_dc_sweep_current_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_current_probe_id: string\n sweep_values: number[]\n sweep_unit: SimulationDcSweepUnit\n current_levels: number[]\n name?: string\n color?: string\n}\n\nexport const simulation_dc_sweep_current_graph = z\n .object({\n type: z.literal(\"simulation_dc_sweep_current_graph\"),\n simulation_dc_sweep_current_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_dc_sweep_current_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_current_probe_id: z.string(),\n sweep_values: z.array(z.number()),\n sweep_unit: simulation_dc_sweep_unit,\n current_levels: z.array(z.number()),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.sweep_values.length === graph.current_levels.length,\n {\n message: \"sweep_values and current_levels must have the same length\",\n },\n )\n\nexport type SimulationDcSweepCurrentGraphInput = z.input<\n typeof simulation_dc_sweep_current_graph\n>\ntype InferredSimulationDcSweepCurrentGraph = z.infer<\n typeof simulation_dc_sweep_current_graph\n>\n\nexpectTypesMatch<\n SimulationDcSweepCurrentGraph,\n InferredSimulationDcSweepCurrentGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_complex_sample,\n type SimulationComplexSample,\n} from \"./simulation_complex_sample\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationAcSweepVoltageGraph {\n type: \"simulation_ac_sweep_voltage_graph\"\n simulation_ac_sweep_voltage_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_voltage_probe_id: string\n frequencies_hz: number[]\n complex_voltages: SimulationComplexSample[]\n name?: string\n color?: string\n}\n\nexport const simulation_ac_sweep_voltage_graph = z\n .object({\n type: z.literal(\"simulation_ac_sweep_voltage_graph\"),\n simulation_ac_sweep_voltage_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_ac_sweep_voltage_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_voltage_probe_id: z.string(),\n frequencies_hz: z.array(z.number()),\n complex_voltages: z.array(simulation_complex_sample),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.frequencies_hz.length === graph.complex_voltages.length,\n {\n message: \"frequencies_hz and complex_voltages must have the same length\",\n },\n )\n\nexport type SimulationAcSweepVoltageGraphInput = z.input<\n typeof simulation_ac_sweep_voltage_graph\n>\ntype InferredSimulationAcSweepVoltageGraph = z.infer<\n typeof simulation_ac_sweep_voltage_graph\n>\n\nexpectTypesMatch<\n SimulationAcSweepVoltageGraph,\n InferredSimulationAcSweepVoltageGraph\n>(true)\n","import { z } from \"zod\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_complex_sample = z.object({\n re: z.number(),\n im: z.number(),\n})\n\nexport interface SimulationComplexSample {\n re: number\n im: number\n}\n\nexpectTypesMatch<\n SimulationComplexSample,\n z.infer<typeof simulation_complex_sample>\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport {\n simulation_complex_sample,\n type SimulationComplexSample,\n} from \"./simulation_complex_sample\"\nimport {\n simulation_parameter_sweep_coordinate,\n type SimulationParameterSweepCoordinate,\n} from \"./simulation_parameter_sweep_coordinate\"\n\nexport interface SimulationAcSweepCurrentGraph {\n type: \"simulation_ac_sweep_current_graph\"\n simulation_ac_sweep_current_graph_id: string\n simulation_experiment_id: string\n simulation_parameter_sweep_coordinate?: SimulationParameterSweepCoordinate\n simulation_current_probe_id: string\n frequencies_hz: number[]\n complex_currents: SimulationComplexSample[]\n name?: string\n color?: string\n}\n\nexport const simulation_ac_sweep_current_graph = z\n .object({\n type: z.literal(\"simulation_ac_sweep_current_graph\"),\n simulation_ac_sweep_current_graph_id: getZodPrefixedIdWithDefault(\n \"simulation_ac_sweep_current_graph\",\n ),\n simulation_experiment_id: z.string(),\n simulation_parameter_sweep_coordinate:\n simulation_parameter_sweep_coordinate.optional(),\n simulation_current_probe_id: z.string(),\n frequencies_hz: z.array(z.number()),\n complex_currents: z.array(simulation_complex_sample),\n name: z.string().optional(),\n color: z.string().optional(),\n })\n .refine(\n (graph) => graph.frequencies_hz.length === graph.complex_currents.length,\n {\n message: \"frequencies_hz and complex_currents must have the same length\",\n },\n )\n\nexport type SimulationAcSweepCurrentGraphInput = z.input<\n typeof simulation_ac_sweep_current_graph\n>\ntype InferredSimulationAcSweepCurrentGraph = z.infer<\n typeof simulation_ac_sweep_current_graph\n>\n\nexpectTypesMatch<\n SimulationAcSweepCurrentGraph,\n InferredSimulationAcSweepCurrentGraph\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const simulation_op_amp = z\n .object({\n type: z.literal(\"simulation_op_amp\"),\n simulation_op_amp_id: getZodPrefixedIdWithDefault(\"simulation_op_amp\"),\n source_component_id: z.string().optional(),\n inverting_input_source_port_id: z.string(),\n non_inverting_input_source_port_id: z.string(),\n output_source_port_id: z.string(),\n positive_supply_source_port_id: z.string(),\n negative_supply_source_port_id: z.string(),\n })\n .describe(\"Defines a simple ideal operational amplifier for simulation\")\n\nexport type SimulationOpAmpInput = z.input<typeof simulation_op_amp>\ntype InferredSimulationOpAmp = z.infer<typeof simulation_op_amp>\n\n/**\n * Defines a simple ideal operational amplifier for simulation.\n */\nexport interface SimulationOpAmp {\n type: \"simulation_op_amp\"\n simulation_op_amp_id: string\n source_component_id?: string\n inverting_input_source_port_id: string\n non_inverting_input_source_port_id: string\n output_source_port_id: string\n positive_supply_source_port_id: string\n negative_supply_source_port_id: string\n}\n\nexpectTypesMatch<SimulationOpAmp, InferredSimulationOpAmp>(true)\n","import { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport { z } from \"zod\"\n\nexport const simulation_spice_subcircuit = z\n .object({\n type: z.literal(\"simulation_spice_subcircuit\"),\n simulation_spice_subcircuit_id: getZodPrefixedIdWithDefault(\n \"simulation_spice_subcircuit\",\n ),\n source_component_id: z.string(),\n spice_pin_to_source_port_map: z.record(z.string(), z.string()),\n subcircuit_source: z.string(),\n })\n .describe(\"Defines a custom SPICE subcircuit model for simulation\")\n\nexport type SimulationSpiceSubcircuitInput = z.input<\n typeof simulation_spice_subcircuit\n>\ntype InferredSimulationSpiceSubcircuit = z.infer<\n typeof simulation_spice_subcircuit\n>\n\n/**\n * Defines a custom SPICE subcircuit model for simulation.\n */\nexport interface SimulationSpiceSubcircuit {\n type: \"simulation_spice_subcircuit\"\n simulation_spice_subcircuit_id: string\n /**\n * Source component this SPICE subcircuit models.\n */\n source_component_id: string\n /**\n * Maps SPICE subcircuit pin names to source port ids.\n */\n spice_pin_to_source_port_map: Record<string, string>\n /**\n * Full SPICE subcircuit source text.\n */\n subcircuit_source: string\n}\n\nexpectTypesMatch<SimulationSpiceSubcircuit, InferredSimulationSpiceSubcircuit>(\n true,\n)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nconst hasValue = (value: unknown) => value !== undefined\n\nexport const simulation_oscilloscope_trace = z\n .object({\n type: z.literal(\"simulation_oscilloscope_trace\"),\n simulation_oscilloscope_trace_id: getZodPrefixedIdWithDefault(\n \"simulation_oscilloscope_trace\",\n ),\n simulation_transient_voltage_graph_id: z.string().optional(),\n simulation_transient_current_graph_id: z.string().optional(),\n simulation_voltage_probe_id: z.string().optional(),\n simulation_current_probe_id: z.string().optional(),\n display_name: z.string().optional(),\n color: z.string().optional(),\n display_center_value: z.number().optional(),\n display_center_offset_divs: z.number().optional(),\n volts_per_div: z.number().positive().optional(),\n amps_per_div: z.number().positive().optional(),\n })\n .describe(\n \"Defines how a simulation measurement is rendered as an oscilloscope-style trace.\",\n )\n .superRefine((data, ctx) => {\n const voltageReferences = [\n data.simulation_transient_voltage_graph_id,\n data.simulation_voltage_probe_id,\n ].filter(hasValue).length\n const currentReferences = [\n data.simulation_transient_current_graph_id,\n data.simulation_current_probe_id,\n ].filter(hasValue).length\n\n if (voltageReferences + currentReferences !== 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"An oscilloscope trace must reference exactly one voltage graph, current graph, voltage probe, or current probe.\",\n })\n }\n\n if (voltageReferences > 0 && data.amps_per_div !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Voltage oscilloscope traces must use volts_per_div, not amps_per_div.\",\n })\n }\n\n if (currentReferences > 0 && data.volts_per_div !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Current oscilloscope traces must use amps_per_div, not volts_per_div.\",\n })\n }\n })\n\nexport type SimulationOscilloscopeTraceInput = z.input<\n typeof simulation_oscilloscope_trace\n>\ntype InferredSimulationOscilloscopeTrace = z.infer<\n typeof simulation_oscilloscope_trace\n>\n\n/**\n * Defines how a simulation measurement is rendered as an oscilloscope-style\n * trace. Display fields live here because they describe the relationship\n * between measurement data and a graph, not the probe itself.\n *\n * Scope display fields map measured values into display divisions using\n * display_div = display_center_offset_divs + (raw_value - display_center_value) / units_per_div.\n * Use volts_per_div for voltage traces and amps_per_div for current traces.\n */\nexport interface SimulationOscilloscopeTrace {\n type: \"simulation_oscilloscope_trace\"\n simulation_oscilloscope_trace_id: string\n simulation_transient_voltage_graph_id?: string\n simulation_transient_current_graph_id?: string\n simulation_voltage_probe_id?: string\n simulation_current_probe_id?: string\n display_name?: string\n color?: string\n display_center_value?: number\n display_center_offset_divs?: number\n volts_per_div?: number\n amps_per_div?: number\n}\n\nexpectTypesMatch<\n SimulationOscilloscopeTrace,\n InferredSimulationOscilloscopeTrace\n>(true)\n","import { z } from \"zod\"\nimport * as cad from \"./cad\"\nimport * as pcb from \"./pcb\"\nimport * as sch from \"./schematic\"\nimport * as sim from \"./simulation\"\nimport * as src from \"./source\"\nimport {\n expectStringUnionsMatch,\n expectTypesMatch,\n} from \"./utils/expect-types-match\"\n\nexport const any_circuit_element = z.union([\n src.source_runtime_error,\n // TODO source_config\n // TODO pcb_config\n // TODO schematic_config\n // TODO schematic_group\n src.source_trace,\n src.source_bus,\n src.source_port,\n src.source_component_internal_connection,\n src.any_source_component,\n src.source_net,\n src.source_group,\n src.source_simple_chip,\n src.source_simple_capacitor,\n src.source_simple_diode,\n src.source_simple_led,\n src.source_simple_resistor,\n src.source_simple_power_source,\n src.source_simple_battery,\n src.source_simple_inductor,\n src.source_simple_pin_header,\n src.source_simple_pinout,\n src.source_simple_resonator,\n src.source_simple_switch,\n src.source_simple_transistor,\n src.source_simple_test_point,\n src.source_simple_mosfet,\n src.source_simple_op_amp,\n src.source_simple_potentiometer,\n src.source_simple_push_button,\n src.source_pcb_ground_plane,\n src.source_manually_placed_via,\n src.source_board,\n src.source_project_metadata,\n src.source_invalid_component_property_error,\n src.source_trace_not_connected_error,\n src.source_pin_missing_trace_warning,\n src.source_unnamed_trace_warning,\n src.source_confusing_net_name_warning,\n src.source_missing_manufacturer_part_number_warning,\n src.source_component_availability_warning,\n src.source_refdes_convention_warning,\n src.source_no_power_pin_defined_warning,\n src.source_no_ground_pin_defined_warning,\n src.source_component_pins_underspecified_warning,\n src.source_pin_must_be_connected_error,\n src.unknown_error_finding_part,\n src.source_part_not_found_warning,\n src.source_i2c_misconfigured_error,\n src.source_component_misconfigured_error,\n src.source_ambiguous_port_reference,\n pcb.pcb_component,\n pcb.pcb_debug_object,\n pcb.pcb_hole,\n pcb.pcb_missing_footprint_error,\n pcb.external_footprint_load_error,\n pcb.circuit_json_footprint_load_error,\n pcb.pcb_manual_edit_conflict_warning,\n pcb.pcb_connector_not_in_accessible_orientation_warning,\n pcb.pcb_component_missing_courtyard_warning,\n pcb.supplier_footprint_mismatch_warning,\n pcb.pcb_fabricator_extra_charge_warning,\n pcb.pcb_plated_hole,\n pcb.pcb_keepout,\n pcb.pcb_keepout_overlap_warning,\n pcb.pcb_port,\n pcb.pcb_net,\n pcb.pcb_text,\n pcb.pcb_trace,\n pcb.pcb_trace_warning,\n pcb.pcb_trace_too_long_warning,\n pcb.pcb_trace_too_long_error,\n pcb.pcb_bus_length_skew_error,\n pcb.pcb_trace_too_many_vias_warning,\n pcb.pcb_via,\n pcb.pcb_smtpad,\n pcb.pcb_solder_paste,\n pcb.pcb_soldermask_opening,\n pcb.pcb_board,\n pcb.pcb_bend,\n pcb.pcb_stiffener,\n pcb.pcb_panel,\n pcb.pcb_group,\n pcb.pcb_trace_hint,\n pcb.pcb_silkscreen_line,\n pcb.pcb_silkscreen_path,\n pcb.pcb_silkscreen_text,\n pcb.pcb_silkscreen_pill,\n pcb.pcb_copper_text,\n pcb.pcb_silkscreen_rect,\n pcb.pcb_silkscreen_circle,\n pcb.pcb_silkscreen_oval,\n pcb.pcb_silkscreen_graphic,\n pcb.pcb_bus_routing_constraint_error,\n pcb.pcb_bus_routing_constraint_warning,\n pcb.pcb_trace_error,\n pcb.pcb_trace_missing_error,\n pcb.pcb_placement_error,\n pcb.pcb_packing_error,\n pcb.pcb_panelization_placement_error,\n pcb.pcb_port_not_matched_error,\n pcb.pcb_port_not_connected_error,\n pcb.pcb_via_clearance_error,\n pcb.pcb_via_trace_clearance_error,\n pcb.pcb_pad_pad_clearance_error,\n pcb.pcb_pad_trace_clearance_error,\n pcb.pcb_fabrication_note_path,\n pcb.pcb_fabrication_note_text,\n pcb.pcb_fabrication_note_rect,\n pcb.pcb_fabrication_note_dimension,\n pcb.pcb_note_text,\n pcb.pcb_note_rect,\n pcb.pcb_note_path,\n pcb.pcb_note_line,\n pcb.pcb_note_dimension,\n pcb.pcb_autorouting_error,\n pcb.pcb_preflight_routing_error,\n pcb.pcb_footprint_overlap_error,\n pcb.pcb_courtyard_overlap_error,\n pcb.pcb_breakout_point,\n pcb.pcb_cutout,\n pcb.pcb_ground_plane,\n pcb.pcb_ground_plane_region,\n pcb.pcb_thermal_spoke,\n pcb.pcb_copper_pour,\n pcb.pcb_component_outside_board_error,\n pcb.pcb_component_not_on_board_edge_error,\n pcb.pcb_component_invalid_layer_error,\n pcb.pcb_courtyard_rect,\n pcb.pcb_courtyard_outline,\n pcb.pcb_courtyard_polygon,\n pcb.pcb_courtyard_circle,\n pcb.pcb_courtyard_pill,\n sch.schematic_box,\n sch.schematic_text,\n sch.schematic_line,\n sch.schematic_rect,\n sch.schematic_circle,\n sch.schematic_arc,\n sch.schematic_component,\n sch.schematic_symbol,\n sch.schematic_port,\n sch.schematic_trace,\n sch.schematic_path,\n sch.schematic_error,\n sch.schematic_layout_error,\n sch.schematic_net_label,\n sch.schematic_debug_object,\n sch.schematic_voltage_probe,\n sch.schematic_manual_edit_conflict_warning,\n sch.schematic_component_overlap_warning,\n sch.schematic_component_styling_warning,\n sch.schematic_sheet_styling_warning,\n sch.schematic_missing_sheet_warning,\n sch.schematic_element_outside_sheet_warning,\n sch.schematic_graphic,\n sch.schematic_group,\n sch.schematic_sheet,\n sch.schematic_table,\n sch.schematic_table_cell,\n cad.cad_component,\n cad.cad_cable,\n cad.cad_collision_error,\n sim.simulation_voltage_source,\n sim.simulation_current_source,\n sim.simulation_experiment,\n sim.simulation_transient_voltage_graph,\n sim.simulation_transient_current_graph,\n sim.simulation_dc_operating_point_voltage,\n sim.simulation_dc_operating_point_current,\n sim.simulation_dc_sweep_voltage_graph,\n sim.simulation_dc_sweep_current_graph,\n sim.simulation_ac_sweep_voltage_graph,\n sim.simulation_ac_sweep_current_graph,\n sim.simulation_parameter_sweep,\n sim.simulation_switch,\n sim.simulation_voltage_probe,\n sim.simulation_current_probe,\n sim.simulation_oscilloscope_trace,\n sim.simulation_unknown_experiment_error,\n sim.simulation_op_amp,\n sim.simulation_spice_subcircuit,\n])\n\n/**\n * @deprecated use any_circuit_element instead\n */\nexport const any_soup_element = any_circuit_element\n\nexport type AnyCircuitElement = z.infer<typeof any_circuit_element>\nexport type AnyCircuitElementInput = z.input<typeof any_circuit_element>\n/**\n * @deprecated use AnyCircuitElement instead\n */\nexport type AnySoupElement = AnyCircuitElement\n\n/**\n * @deprecated use AnyCircuitElementInput instead\n */\nexport type AnySoupElementInput = AnyCircuitElementInput\n\n/**\n * Type representing a complete Circuit JSON document, which is an array of circuit elements.\n * This is the primary type used when working with circuit-json files or API responses.\n */\nexport type CircuitJson = AnyCircuitElement[]\n\n// ------------------- SAFETY CHECKS -------------------\n\n// SAFETY CHECK: Every element has a type\nexpectTypesMatch<\n AnyCircuitElement extends { type: string } ? AnyCircuitElement : never,\n AnyCircuitElement\n>(true)\n\n// SAFETY CHECK: Every element has an id with the key name `${type}_id`\ntype FindMissingId<T extends AnyCircuitElement> = T extends {\n type: infer U extends string\n}\n ? T extends { [K in `${U}_id`]: infer V }\n ? V extends string\n ? never\n : `${U} DOES NOT HAVE AN ${U}_id PROPERTY`\n : `${U} DOES NOT HAVE AN ${U}_id PROPERTY`\n : never\n\nexpectStringUnionsMatch<\n FindMissingId<AnyCircuitElement>,\n // EXCEPTIONS TO THE RULE\n // THIS IS FOR LEGACY REASONS, DO NOT ADD MORE EXCEPTIONS\n | \"source_project_metadata DOES NOT HAVE AN source_project_metadata_id PROPERTY\"\n | \"pcb_port_not_matched_error DOES NOT HAVE AN pcb_port_not_matched_error_id PROPERTY\"\n | \"pcb_autorouting_error DOES NOT HAVE AN pcb_autorouting_error_id PROPERTY\"\n | \"pcb_footprint_overlap_error DOES NOT HAVE AN pcb_footprint_overlap_error_id PROPERTY\"\n | \"pcb_courtyard_overlap_error DOES NOT HAVE AN pcb_courtyard_overlap_error_id PROPERTY\"\n | \"pcb_via_clearance_error DOES NOT HAVE AN pcb_via_clearance_error_id PROPERTY\"\n | \"schematic_debug_object DOES NOT HAVE AN schematic_debug_object_id PROPERTY\"\n | \"schematic_box DOES NOT HAVE AN schematic_box_id PROPERTY\"\n>(true)\n"],"mappings":"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,MACrB,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACF,CAAC;AAiCH,iBAGE,IAAI;;;AC/FN,SAAS,KAAAC,YAAS;AAWX,IAAM,sBAAsBC,KAAE,MAAM;AAAA,EACrC;AAAA,EAKA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACN,CAAC;AAKM,IAAM,mBAAmB;AAuBhC,iBAGE,IAAI;AAaN,wBAYE,IAAI;","names":["parseAndConvertSiUnit","z","z","z","z","z","z","z","z","point","z","length","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","asset","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","length","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","finite_point","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","point","z","z","z","z","percentage","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z"]}