@tscircuit/pcb-viewer 1.11.152 → 1.11.154

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/PCBViewer.tsx","../node_modules/zod/lib/index.mjs","../node_modules/nanoid/url-alphabet/index.js","../node_modules/nanoid/index.browser.js","../node_modules/circuit-json/src/utils/convert-si-unit-to-number.ts","../node_modules/circuit-json/src/units/index.ts","../node_modules/circuit-json/src/common/point.ts","../node_modules/circuit-json/src/common/point3.ts","../node_modules/circuit-json/src/common/size.ts","../node_modules/circuit-json/src/common/getZodPrefixedIdWithDefault.ts","../node_modules/circuit-json/src/source/source_simple_capacitor.ts","../node_modules/circuit-json/src/pcb/properties/supplier_name.ts","../node_modules/circuit-json/src/utils/expect-types-match.ts","../node_modules/circuit-json/src/source/base/source_component_base.ts","../node_modules/circuit-json/src/source/source_simple_resistor.ts","../node_modules/circuit-json/src/source/source_simple_diode.ts","../node_modules/circuit-json/src/source/source_simple_led.ts","../node_modules/circuit-json/src/source/source_simple_ground.ts","../node_modules/circuit-json/src/source/source_simple_bug.ts","../node_modules/circuit-json/src/source/source_simple_chip.ts","../node_modules/circuit-json/src/source/source_led.ts","../node_modules/circuit-json/src/source/source_simple_power_source.ts","../node_modules/circuit-json/src/source/any_source_component.ts","../node_modules/circuit-json/src/source/source_simple_fuse.ts","../node_modules/circuit-json/src/source/source_simple_battery.ts","../node_modules/circuit-json/src/source/source_simple_inductor.ts","../node_modules/circuit-json/src/source/source_simple_push_button.ts","../node_modules/circuit-json/src/source/source_simple_potentiometer.ts","../node_modules/circuit-json/src/source/source_simple_crystal.ts","../node_modules/circuit-json/src/source/source_simple_pin_header.ts","../node_modules/circuit-json/src/source/source_simple_resonator.ts","../node_modules/circuit-json/src/source/source_simple_transistor.ts","../node_modules/circuit-json/src/source/source_simple_mosfet.ts","../node_modules/circuit-json/src/source/source_simple_switch.ts","../node_modules/circuit-json/src/source/source_project_metadata.ts","../node_modules/circuit-json/src/source/source_missing_property_error.ts","../node_modules/circuit-json/src/source/source_failed_to_create_component_error.ts","../node_modules/circuit-json/src/source/source_port.ts","../node_modules/circuit-json/src/source/source_trace.ts","../node_modules/circuit-json/src/source/source_group.ts","../node_modules/circuit-json/src/source/source_net.ts","../node_modules/circuit-json/src/schematic/schematic_box.ts","../node_modules/circuit-json/src/schematic/schematic_path.ts","../node_modules/circuit-json/src/schematic/schematic_component.ts","../node_modules/circuit-json/src/schematic/schematic_line.ts","../node_modules/circuit-json/src/schematic/schematic_trace.ts","../node_modules/circuit-json/src/schematic/schematic_text.ts","../node_modules/circuit-json/src/common/NinePointAnchor.ts","../node_modules/circuit-json/src/common/FivePointAnchor.ts","../node_modules/circuit-json/src/schematic/schematic_port.ts","../node_modules/circuit-json/src/schematic/schematic_net_label.ts","../node_modules/circuit-json/src/schematic/schematic_error.ts","../node_modules/circuit-json/src/schematic/schematic_debug_object.ts","../node_modules/circuit-json/src/schematic/schematic_voltage_probe.ts","../node_modules/circuit-json/src/schematic/schematic_manual_edit_conflict_warning.ts","../node_modules/circuit-json/src/schematic/schematic_group.ts","../node_modules/circuit-json/src/pcb/properties/layer_ref.ts","../node_modules/circuit-json/src/pcb/properties/pcb_route_hints.ts","../node_modules/circuit-json/src/pcb/properties/route_hint_point.ts","../node_modules/circuit-json/src/pcb/pcb_component.ts","../node_modules/circuit-json/src/pcb/pcb_hole.ts","../node_modules/circuit-json/src/pcb/pcb_plated_hole.ts","../node_modules/circuit-json/src/pcb/pcb_port.ts","../node_modules/circuit-json/src/pcb/pcb_smtpad.ts","../node_modules/circuit-json/src/pcb/pcb_solder_paste.ts","../node_modules/circuit-json/src/pcb/pcb_text.ts","../node_modules/circuit-json/src/pcb/pcb_trace.ts","../node_modules/circuit-json/src/pcb/pcb_trace_error.ts","../node_modules/circuit-json/src/pcb/pcb_port_not_matched_error.ts","../node_modules/circuit-json/src/pcb/pcb_via.ts","../node_modules/circuit-json/src/pcb/pcb_board.ts","../node_modules/circuit-json/src/pcb/pcb_placement_error.ts","../node_modules/circuit-json/src/pcb/pcb_trace_hint.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_line.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_path.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_text.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_rect.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_circle.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_oval.ts","../node_modules/circuit-json/src/pcb/pcb_fabrication_note_text.ts","../node_modules/circuit-json/src/pcb/pcb_fabrication_note_path.ts","../node_modules/circuit-json/src/pcb/pcb_keepout.ts","../node_modules/circuit-json/src/pcb/pcb_cutout.ts","../node_modules/circuit-json/src/pcb/pcb_missing_footprint_error.ts","../node_modules/circuit-json/src/pcb/pcb_group.ts","../node_modules/circuit-json/src/pcb/pcb_autorouting_error.ts","../node_modules/circuit-json/src/pcb/pcb_manual_edit_conflict_warning.ts","../node_modules/circuit-json/src/cad/cad_component.ts","../node_modules/circuit-json/src/any_circuit_element.ts","../node_modules/@tscircuit/soup-util/lib/su.ts","../node_modules/@tscircuit/soup-util/lib/transform-soup-elements.ts","../node_modules/@tscircuit/soup-util/lib/direction-to-vec.ts","../node_modules/@tscircuit/soup-util/lib/apply-selector.ts","../node_modules/@tscircuit/soup-util/lib/convert-abbreviation-to-soup-element-type.ts","../node_modules/@tscircuit/soup-util/lib/get-element-id.ts","../node_modules/@tscircuit/soup-util/lib/get-element-by-id.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-pcb-trace.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-pcb-port.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-pcb-smtpad.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-element.ts","../node_modules/@tscircuit/soup-util/lib/get-bounds-of-pcb-elements.ts","../node_modules/@tscircuit/soup-util/lib/utils/string-hash.ts","../node_modules/@tscircuit/soup-util/lib/utils/get-layout-debug-object.ts","../node_modules/@tscircuit/soup-util/lib/utils/is-truthy.ts","../node_modules/@tscircuit/soup-util/lib/find-bounds-and-center.ts","../src/components/ContextProviders.tsx","../src/global-store.ts","../src/lib/toast.tsx","../node_modules/react-use/esm/misc/util.js","../node_modules/react-use/esm/useIsomorphicLayoutEffect.js","../node_modules/react-use/esm/useMeasure.js","../node_modules/use-mouse-matrix-transform/src/computePinchTransform.ts","../node_modules/use-mouse-matrix-transform/src/index.ts","../src/components/CanvasElementsRenderer.tsx","../src/lib/util/addInteractionMetadataToPrimitives.ts","../src/lib/util/expand-stroke.ts","../src/lib/convert-element-to-primitive.ts","../src/components/CanvasPrimitiveRenderer.tsx","../src/lib/Drawer.ts","../src/lib/colors.ts","../src/lib/util/scale-only.ts","../src/lib/util/z-index-map.ts","../src/lib/util/rotate-text.ts","../src/assets/alphabet.ts","../src/lib/convert-text-to-lines.ts","../src/lib/draw-primitives.ts","../src/components/DebugGraphicsOverlay.tsx","../src/components/WarningGraphicsOverlay.tsx","../src/components/DimensionOverlay.tsx","../src/components/EditPlacementOverlay.tsx","../src/components/EditTraceHintOverlay.tsx","../src/components/HotkeyActionMenu.tsx","../src/components/ErrorOverlay.tsx","../src/components/MouseElementTracker.tsx","../src/components/ElementOverlayBox.tsx","../src/lib/get-trace-overlay-text.ts","../src/lib/filter-traces-if-multiple.ts","../src/lib/util/if-sets-match-exactly.ts","../src/components/RatsNestOverlay.tsx","../src/components/ToolbarOverlay.tsx","../package.json","../src/hooks/useHotKey.ts"],"sourcesContent":["import { applyEditEvents } from \"@tscircuit/core\"\nimport { findBoundsAndCenter } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement, SourceTrace } from \"circuit-json\"\nimport { ContextProviders } from \"components/ContextProviders\"\nimport type { StateProps } from \"global-store\"\nimport type { GraphicsObject } from \"graphics-debug\"\nimport { ToastContainer } from \"lib/toast\"\nimport { useEffect, useMemo, useRef, useState } from \"react\"\nimport { useMeasure } from \"react-use\"\nimport { compose, scale, translate } from \"transformation-matrix\"\nimport useMouseMatrixTransform from \"use-mouse-matrix-transform\"\nimport { CanvasElementsRenderer } from \"./components/CanvasElementsRenderer\"\nimport type { ManualEditEvent } from \"@tscircuit/props\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\n\nconst defaultTransform = compose(translate(400, 300), scale(40, -40))\n\ntype Props = {\n circuitJson?: AnyCircuitElement[]\n height?: number\n allowEditing?: boolean\n editEvents?: ManualEditEvent[]\n initialState?: Partial<StateProps>\n onEditEventsChanged?: (editEvents: ManualEditEvent[]) => void\n focusOnHover?: boolean\n clickToInteractEnabled?: boolean\n debugGraphics?: GraphicsObject | null\n}\n\nexport const PCBViewer = ({\n circuitJson,\n debugGraphics,\n height = 600,\n initialState,\n allowEditing = true,\n editEvents: editEventsProp,\n onEditEventsChanged,\n focusOnHover = false,\n clickToInteractEnabled = false,\n}: Props) => {\n const [isInteractionEnabled, setIsInteractionEnabled] = useState(\n !clickToInteractEnabled,\n )\n const [ref, refDimensions] = useMeasure()\n const [transform, setTransformInternal] = useState(defaultTransform)\n const {\n ref: transformRef,\n setTransform,\n cancelDrag: cancelPanDrag,\n } = useMouseMatrixTransform({\n transform,\n onSetTransform: setTransformInternal,\n enabled: isInteractionEnabled,\n })\n\n let [editEvents, setEditEvents] = useState<ManualEditEvent[]>([])\n editEvents = editEventsProp ?? editEvents\n\n const initialRenderCompleted = useRef(false)\n const touchStartRef = useRef<{ x: number; y: number } | null>(null)\n const circuitJsonKey = `${circuitJson?.length || 0}_${(circuitJson as any)?.editCount || 0}`\n\n const resetTransform = () => {\n const elmBounds =\n refDimensions?.width > 0 ? refDimensions : { width: 500, height: 500 }\n const { center, width, height } = elements.some((e) =>\n e.type.startsWith(\"pcb_\"),\n )\n ? findBoundsAndCenter(\n elements.filter((e) => e.type.startsWith(\"pcb_\")) as any,\n )\n : { center: { x: 0, y: 0 }, width: 0.001, height: 0.001 }\n const scaleFactor =\n Math.min(\n (elmBounds.width ?? 0) / width,\n (elmBounds.height ?? 0) / height,\n 100,\n ) * 0.75\n\n const targetTransform = compose(\n translate((elmBounds.width ?? 0) / 2, (elmBounds.height ?? 0) / 2),\n scale(scaleFactor, -scaleFactor, 0, 0),\n translate(-center.x, -center.y),\n )\n\n setTransform(targetTransform)\n return\n }\n\n useEffect(() => {\n if (!refDimensions?.width) return\n if (!circuitJson) return\n if (circuitJson.length === 0) return\n\n if (!initialRenderCompleted.current) {\n resetTransform()\n initialRenderCompleted.current = true\n }\n }, [circuitJson, refDimensions])\n\n const pcbElmsPreEdit = useMemo(() => {\n return (\n circuitJson?.filter(\n (e: any) => e.type.startsWith(\"pcb_\") || e.type.startsWith(\"source_\"),\n ) ?? []\n )\n }, [circuitJsonKey])\n\n const elements = useMemo(() => {\n return applyEditEvents({\n circuitJson: pcbElmsPreEdit as any,\n editEvents,\n })\n }, [pcbElmsPreEdit, editEvents])\n\n const onCreateEditEvent = (event: ManualEditEvent) => {\n setEditEvents([...editEvents, event])\n onEditEventsChanged?.([...editEvents, event])\n }\n const onModifyEditEvent = (modifiedEvent: Partial<ManualEditEvent>) => {\n const newEditEvents: ManualEditEvent[] = editEvents.map((e) =>\n e.edit_event_id === modifiedEvent.edit_event_id\n ? ({ ...e, ...modifiedEvent } as ManualEditEvent)\n : e,\n )\n setEditEvents(newEditEvents)\n onEditEventsChanged?.(newEditEvents)\n }\n\n return (\n <div ref={transformRef as any} style={{ position: \"relative\" }}>\n <div ref={ref as any}>\n <ContextProviders initialState={initialState}>\n <CanvasElementsRenderer\n key={refDimensions.width}\n transform={transform}\n height={height}\n width={refDimensions.width}\n allowEditing={allowEditing}\n focusOnHover={focusOnHover}\n cancelPanDrag={cancelPanDrag}\n onCreateEditEvent={onCreateEditEvent}\n onModifyEditEvent={onModifyEditEvent}\n grid={{\n spacing: 1,\n view_window: {\n left: 0,\n right: refDimensions.width || 500,\n top: height,\n bottom: 0,\n },\n }}\n elements={elements as SourceTrace[]}\n debugGraphics={debugGraphics}\n />\n <ToastContainer />\n </ContextProviders>\n </div>\n {clickToInteractEnabled && !isInteractionEnabled && (\n <div\n onClick={() => {\n setIsInteractionEnabled(true)\n resetTransform()\n }}\n onTouchStart={(e) => {\n const touch = e.touches[0]\n touchStartRef.current = {\n x: touch.clientX,\n y: touch.clientY,\n }\n }}\n onTouchEnd={(e) => {\n const touch = e.changedTouches[0]\n const start = touchStartRef.current\n if (!start) return\n\n const deltaX = Math.abs(touch.clientX - start.x)\n const deltaY = Math.abs(touch.clientY - start.y)\n\n if (deltaX < 10 && deltaY < 10) {\n e.preventDefault()\n setIsInteractionEnabled(true)\n resetTransform()\n }\n\n touchStartRef.current = null\n }}\n style={{\n position: \"absolute\",\n inset: 0,\n cursor: \"pointer\",\n zIndex: zIndexMap.clickToInteractOverlay,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n touchAction: \"pan-x pan-y pinch-zoom\",\n }}\n >\n <div\n style={{\n backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n color: \"white\",\n padding: \"12px 24px\",\n borderRadius: \"8px\",\n fontSize: \"16px\",\n pointerEvents: \"none\",\n }}\n >\n {typeof window !== \"undefined\" &&\n (\"ontouchstart\" in window || navigator.maxTouchPoints > 0)\n ? \"Touch to Interact\"\n : \"Click to Interact\"}\n </div>\n </div>\n )}\n </div>\n )\n}\n","var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === errorMap ? undefined : errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n var _a, _b;\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if ((_b = (_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (!decoded.typ || !decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a, _b;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch (_a) {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result)\n ? result.then((data) => freeze(data))\n : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nfunction custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n var _a, _b;\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","type UnitInfo = {\n baseUnit: BaseTscircuitUnit\n conversionFactor: number\n}\n\nconst unitMappings: Record<\n string,\n { baseUnit: BaseTscircuitUnit; variants: Record<string, number> }\n> = {\n Hz: {\n baseUnit: \"Hz\",\n variants: {\n MHz: 1e6,\n kHz: 1e3,\n Hz: 1,\n },\n },\n g: {\n baseUnit: \"g\",\n variants: {\n kg: 1e3,\n g: 1,\n },\n },\n Ω: {\n baseUnit: \"Ω\",\n variants: {\n mΩ: 1e-3,\n Ω: 1,\n kΩ: 1e3,\n KΩ: 1e3,\n kohm: 1e3,\n MΩ: 1e6,\n GΩ: 1e9,\n TΩ: 1e12,\n },\n },\n V: {\n baseUnit: \"V\",\n variants: {\n mV: 1e-3,\n V: 1,\n kV: 1e3,\n KV: 1e3,\n MV: 1e6,\n GV: 1e9,\n TV: 1e12,\n },\n },\n A: {\n baseUnit: \"A\",\n variants: {\n µA: 1e-6,\n mA: 1e-3,\n ma: 1e-3,\n A: 1,\n kA: 1e3,\n MA: 1e6,\n },\n },\n F: {\n baseUnit: \"F\",\n variants: {\n pF: 1e-12,\n nF: 1e-9,\n µF: 1e-6,\n uF: 1e-6,\n mF: 1e-3,\n F: 1,\n },\n },\n ml: {\n baseUnit: \"ml\",\n variants: {\n ml: 1,\n mL: 1,\n l: 1e3,\n L: 1e3,\n },\n },\n deg: {\n baseUnit: \"deg\",\n variants: {\n rad: 180 / Math.PI,\n },\n },\n ms: {\n baseUnit: \"ms\",\n variants: {\n s: 1000,\n },\n },\n mm: {\n baseUnit: \"mm\",\n variants: {\n nm: 1e-6,\n µm: 1e-3,\n um: 1e-3,\n mm: 1,\n cm: 10,\n dm: 100,\n m: 1000,\n km: 1e6,\n in: 25.4,\n ft: 304.8,\n IN: 25.4,\n FT: 304.8,\n yd: 914.4,\n mi: 1.609344e6,\n mil: 0.0254,\n },\n },\n}\n\nconst unitMappingAndVariantSuffixes = new Set()\nfor (const [baseUnit, info] of Object.entries(unitMappings)) {\n unitMappingAndVariantSuffixes.add(baseUnit)\n for (const variant of Object.keys(info.variants)) {\n unitMappingAndVariantSuffixes.add(variant)\n }\n}\n\nfunction getBaseTscircuitUnit(unit: string): UnitInfo {\n for (const [baseUnit, info] of Object.entries(unitMappings)) {\n if (unit in info.variants) {\n return {\n baseUnit: info.baseUnit,\n conversionFactor: info.variants[unit]!,\n }\n }\n }\n return {\n baseUnit: unit as BaseTscircuitUnit,\n conversionFactor: 1,\n }\n}\n\nconst si_prefix_multiplier = {\n tera: 1e12,\n T: 1e12,\n giga: 1e9,\n G: 1e9,\n mega: 1e6,\n M: 1e6,\n kilo: 1e3,\n k: 1e3,\n deci: 1e-1,\n d: 1e-1,\n centi: 1e-2,\n c: 1e-2,\n milli: 1e-3,\n m: 1e-3,\n micro: 1e-6,\n u: 1e-6,\n µ: 1e-6,\n nano: 1e-9,\n n: 1e-9,\n pico: 1e-12,\n p: 1e-12,\n}\ntype BaseTscircuitUnit =\n | \"ms\"\n | \"mm\"\n | \"g\"\n | \"deg\"\n | \"Hz\"\n | \"ml\"\n | \"V\"\n | \"A\"\n | \"Ω\"\n | \"F\"\n | \"H\"\n\nexport const parseAndConvertSiUnit = <\n T extends\n | string\n | number\n | undefined\n | { x: string | number; y: string | number },\n>(\n v: T,\n): {\n parsedUnit: string | null\n unitOfValue: BaseTscircuitUnit | null\n value: T extends { x: string | number; y: string | number }\n ? null | { x: number; y: number }\n : null | number\n} => {\n if (typeof v === \"undefined\")\n return { parsedUnit: null, unitOfValue: null, value: null }\n if (typeof v === \"string\" && v.match(/^-?[\\d\\.]+$/))\n return {\n value: Number.parseFloat(v) as any,\n parsedUnit: null,\n unitOfValue: null,\n }\n if (typeof v === \"number\")\n return { value: v as any, parsedUnit: null, unitOfValue: null }\n if (typeof v === \"object\" && \"x\" in v && \"y\" in v) {\n const { parsedUnit, unitOfValue } = parseAndConvertSiUnit(v.x)\n return {\n parsedUnit: parsedUnit,\n unitOfValue: unitOfValue,\n value: {\n x: parseAndConvertSiUnit(v.x as any).value as number,\n y: parseAndConvertSiUnit(v.y as any).value as number,\n } as any,\n }\n }\n const reversed_input_string = v.toString().split(\"\").reverse().join(\"\")\n const unit_reversed = reversed_input_string.match(/[^\\d\\s]+/)?.[0]\n if (!unit_reversed) {\n throw new Error(`Could not determine unit: \"${v}\"`)\n }\n const unit = unit_reversed.split(\"\").reverse().join(\"\")\n\n const numberPart = v.slice(0, -unit.length)\n if (\n unit in si_prefix_multiplier &&\n !unitMappingAndVariantSuffixes.has(unit)\n ) {\n const siMultiplier =\n si_prefix_multiplier[unit as keyof typeof si_prefix_multiplier]\n return {\n parsedUnit: null,\n unitOfValue: null,\n value: (Number.parseFloat(numberPart) * siMultiplier) as any,\n }\n }\n\n const { baseUnit, conversionFactor } = getBaseTscircuitUnit(unit)\n\n return {\n parsedUnit: unit,\n unitOfValue: baseUnit,\n value: (conversionFactor * Number.parseFloat(numberPart)) as any,\n }\n}\n","import { parseAndConvertSiUnit } from \"src/utils/convert-si-unit-to-number\"\nimport { z } from \"zod\"\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).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).value!)\n\nexport const voltage = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(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).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).value!)\n\nexport const time = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\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\"\n\nexport const point = z.object({\n x: distance,\n y: distance,\n})\n\nexport const position = point\n\nexport type Point = z.infer<typeof point>\nexport type InputPoint = z.input<typeof point>\nexport type InputPosition = z.input<typeof position>\nexport type Position = z.infer<typeof position>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const point3 = z.object({\n x: distance,\n y: distance,\n z: distance,\n})\n\nexport const position3 = point3\n\nexport type Point3 = z.infer<typeof point3>\n","import { z } from \"zod\"\n\nexport const size = z.object({\n width: z.number(),\n height: z.number(),\n})\n\nexport type Size = z.infer<typeof size>\n","import { z } from \"zod\"\nimport { nanoid } from \"nanoid\"\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}_${nanoid(10)}`)\n}\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\"\n\nexport const supplier_name = z.enum([\n \"jlcpcb\",\n \"macrofab\",\n \"pcbway\",\n \"digikey\",\n \"mouser\",\n \"lcsc\",\n])\n\nexport type SupplierName = z.infer<typeof supplier_name>\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 {\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 are_pins_interchangeable?: boolean\n internally_connected_source_port_ids?: string[][]\n source_group_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 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})\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 {\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 { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\n/**\n * @deprecated Use source_simple_chip instead. This will be removed in a future version.\n */\nexport const source_simple_bug = source_component_base\n .extend({\n ftype: z.literal(\"simple_bug\"),\n })\n .describe(\"@deprecated\")\n\nexport type source_simple_bug = z.infer<typeof source_simple_bug>\nexport type SourceSimpleBugInput = z.input<typeof source_simple_bug>\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 { source_simple_diode } from \"./source_simple_diode\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport type { SourceComponentBase } from \"./base/source_component_base\"\n\nexport const source_led = source_simple_diode.extend({\n ftype: z.literal(\"led\"),\n})\n\nexport type SourceLedInput = z.input<typeof source_led>\ntype InferredSourceLed = z.infer<typeof source_led>\n\n/**\n * Defines an LED component that extends the simple diode\n */\nexport interface SourceLed extends SourceComponentBase {\n ftype: \"led\"\n}\n\nexpectTypesMatch<SourceLed, InferredSourceLed>(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_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 { 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_bug } from \"./source_simple_bug\"\nimport { source_simple_chip, type SourceSimpleChip } from \"./source_simple_chip\"\nimport { source_led, type SourceLed } from \"./source_led\"\nimport {\n source_simple_power_source,\n type SourceSimplePowerSource,\n} from \"./source_simple_power_source\"\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_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_mosfet,\n type SourceSimpleMosfet,\n} from \"./source_simple_mosfet\"\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\"\n\nexport const any_source_component = z.union([\n source_simple_resistor,\n source_simple_capacitor,\n source_simple_diode,\n source_simple_led,\n source_simple_ground,\n source_simple_chip,\n source_simple_bug,\n source_led,\n source_simple_power_source,\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_resonator,\n source_simple_switch,\n source_simple_transistor,\n source_simple_mosfet,\n source_simple_fuse,\n source_project_metadata,\n source_missing_property_error,\n source_failed_to_create_component_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 | SourceSimpleLed\n | SourceSimpleGround\n | SourceSimpleChip\n | SourceLed\n | SourceSimplePowerSource\n | SourceSimpleBattery\n | SourceSimpleInductor\n | SourceSimplePushButton\n | SourceSimplePotentiometer\n | SourceSimpleCrystal\n | SourceSimplePinHeader\n | SourceSimpleResonator\n | SourceSimpleSwitch\n | SourceSimpleTransistor\n | SourceSimpleMosfet\n | SourceSimpleFuse\n | SourceProjectMetadata\n | SourceMissingPropertyError\n | SourceFailedToCreateComponentError\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 { 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})\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}\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 { source_component_base } from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\n\nexport const source_simple_potentiometer = source_component_base.extend({\n ftype: z.literal(\"simple_potentiometer\"),\n max_resistance: resistance,\n})\n\nexport type SourceSimplePotentiometer = z.infer<\n typeof source_simple_potentiometer\n>\nexport type SourceSimplePotentiometerInput = z.input<\n typeof source_simple_potentiometer\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})\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}\n\nexpectTypesMatch<SourceSimpleCrystal, InferredSourceSimpleCrystal>(true)\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\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 SourceSimplePinHeader = z.infer<typeof source_simple_pin_header>\nexport type SourceSimplePinHeaderInput = z.input<\n typeof source_simple_pin_header\n>\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_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_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\"\n\nexport interface SourceProjectMetadata {\n type: \"source_project_metadata\"\n name?: string\n software_used_string?: 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 created_at: z.string().datetime().optional(),\n})\n\nexport type InferredProjectMetadata = z.infer<typeof source_project_metadata>\nexpectTypesMatch<SourceProjectMetadata, InferredProjectMetadata>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_missing_property_error = z\n .object({\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 error_type: z.literal(\"source_missing_property_error\"),\n message: z.string(),\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 {\n type: \"source_missing_property_error\"\n source_missing_property_error_id: string\n source_component_id: string\n property_name: string\n error_type: \"source_missing_property_error\"\n message: string\n}\n\nexpectTypesMatch<\n SourceMissingPropertyError,\n InferredSourceMissingPropertyError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_failed_to_create_component_error = z\n .object({\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 component_name: z.string().optional(),\n subcircuit_id: z.string().optional(),\n parent_source_component_id: z.string().optional(),\n message: z.string(),\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 type: \"source_failed_to_create_component_error\"\n source_failed_to_create_component_error_id: string\n message: string\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 { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_port = z.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(),\n subcircuit_id: z.string().optional(),\n})\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 {\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 subcircuit_id?: string\n}\n\nexpectTypesMatch<SourcePort, InferredSourcePort>(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 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 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\"\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 is_subcircuit: z.boolean().optional(),\n name: z.string().optional(),\n})\n\nexport type SourceGroup = z.infer<typeof source_group>\nexport type SourceGroupInput = z.input<typeof source_group>\n","import { z } from \"zod\"\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 trace_width: z.number().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SourceNet = z.infer<typeof source_net>\nexport type SourceNetInput = z.input<typeof source_net>\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_component_id: string\n width: number\n height: number\n is_dashed: boolean\n x: number\n y: number\n}\n\nexport const schematic_box = z\n .object({\n type: z.literal(\"schematic_box\"),\n schematic_component_id: z.string(),\n width: distance,\n height: distance,\n is_dashed: z.boolean().default(false),\n x: distance,\n y: distance,\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 { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicPath {\n type: \"schematic_path\"\n schematic_component_id: string\n fill_color?: \"red\" | \"blue\"\n is_filled?: boolean\n points: Point[]\n}\n\nexport const schematic_path = z.object({\n type: z.literal(\"schematic_path\"),\n schematic_component_id: z.string(),\n fill_color: z.enum([\"red\", \"blue\"]).optional(),\n is_filled: z.boolean().optional(),\n points: z.array(point),\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 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}\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(),\n schematic_component_id: z.string(),\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})\n\nexport type SchematicComponentInput = z.input<typeof schematic_component>\ntype InferredSchematicComponent = z.infer<typeof schematic_component>\n\nexpectTypesMatch<SchematicComponent, InferredSchematicComponent>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/**\n * Defines a line on the schematic, this can be used for adding arbitrary lines\n * to a schematic, but don't use it for drawing traces, schematic boxes or where\n * other schematic elements are more appropriate.\n */\nexport interface SchematicLine {\n type: \"schematic_line\"\n schematic_component_id: string\n x1: number\n x2: number\n y1: number\n y2: number\n}\n\nexport const schematic_line = z.object({\n type: z.literal(\"schematic_line\"),\n schematic_component_id: z.string(),\n x1: distance,\n x2: distance,\n y1: distance,\n y2: distance,\n})\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 { 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 source_trace_id: string\n junctions: {\n x: number\n y: number\n }[]\n edges: SchematicTraceEdge[]\n}\n\nexport const schematic_trace = z.object({\n type: z.literal(\"schematic_trace\"),\n schematic_trace_id: z.string(),\n source_trace_id: z.string(),\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})\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\"\n\nexport interface SchematicText {\n type: \"schematic_text\"\n schematic_component_id?: string\n schematic_text_id: string\n text: 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}\n\nexport const schematic_text = z.object({\n type: z.literal(\"schematic_text\"),\n schematic_component_id: z.string().optional(),\n schematic_text_id: z.string(),\n text: z.string(),\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})\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\"\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","import { z } from \"zod\"\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","import { z } from \"zod\"\nimport { point, type Point } from \"../common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicPort {\n type: \"schematic_port\"\n schematic_port_id: string\n source_port_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\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_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 })\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_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 symbol_name?: string | undefined\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_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 symbol_name: 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 { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicError {\n type: \"schematic_error\"\n schematic_error_id: string\n error_type: \"schematic_port_not_found\"\n message: string\n}\n\nexport const schematic_error = z\n .object({\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.literal(\"schematic_port_not_found\"),\n message: z.string(),\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 { 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})\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}\n\nexport interface SchematicDebugLine {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"line\"\n start: Point\n end: Point\n}\n\nexport interface SchematicDebugPoint {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"point\"\n center: Point\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\"\n\nexport interface SchematicVoltageProbe {\n type: \"schematic_voltage_probe\"\n schematic_voltage_probe_id: string\n position: Point\n schematic_trace_id: string\n voltage?: number\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 position: point,\n schematic_trace_id: z.string(),\n voltage: voltage.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 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 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 { 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 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 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 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 name?: string\n description?: string\n}\n\nexpectTypesMatch<SchematicGroup, InferredSchematicGroup>(true)\n","import { z } from \"zod\"\n\nexport const all_layers = [\n \"top\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\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>\nexport type LayerRef = z.output<typeof layer_ref>\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 { distance } from \"src/units\"\nimport { layer_ref } from \"./layer_ref\"\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>\nexport type PcbRouteHint = z.output<typeof pcb_route_hint>\nexport type PcbRouteHints = z.output<typeof pcb_route_hints>\n","import { z } from \"zod\"\nimport { distance } from \"../../units\"\nimport { layer_ref } from \"./layer_ref\"\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 RouteHintPoint = z.infer<typeof route_hint_point>\nexport type RouteHintPointInput = z.input<typeof route_hint_point>\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 { rotation, length, type Rotation, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\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 width: length,\n height: length,\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\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 width: Length\n height: Length\n pcb_group_id?: string\n}\n\n/**\n * @deprecated use PcbComponent\n */\nexport type PCBComponent = PcbComponent\n\nexpectTypesMatch<PcbComponent, InferredPcbComponent>(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\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 hole_shape: z.enum([\"circle\", \"square\"]),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\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 */\nexport interface PcbHoleCircleOrSquare {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"circle\" | \"square\"\n hole_diameter: number\n x: Distance\n y: Distance\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 hole_shape: z.literal(\"oval\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\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 hole_shape: \"oval\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n}\n\nexpectTypesMatch<PcbHoleOval, InferredPcbHoleOval>(true)\n\nexport const pcb_hole = pcb_hole_circle_or_square.or(pcb_hole_oval)\n\n/**\n * @deprecated Use PcbHoleCircleOrSquare or PcbHoleOval\n */\nexport type PCBHoleInput = z.input<typeof pcb_hole>\n/**\n * @deprecated Use PcbHoleCircleOrSquare or PcbHoleOval\n */\nexport type PCBHole = z.infer<typeof pcb_hole>\n\nexport type PcbHole = PcbHoleCircleOrSquare | PcbHoleOval\n","import { z } from \"zod\"\nimport { distance, type Distance } 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 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})\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 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}\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 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})\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 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}\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 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})\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 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})\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 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}\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 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}\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])\nexport type PcbPlatedHole =\n | PcbPlatedHoleCircle\n | PcbPlatedHoleOval\n | PcbHoleCircularWithRectPad\n | PcbHolePillWithRectPad\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)\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(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\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}\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 } 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})\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 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})\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 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})\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})\n\nexport const pcb_smtpad = z\n .union([\n pcb_smtpad_circle,\n pcb_smtpad_rect,\n pcb_smtpad_rotated_rect,\n pcb_smtpad_pill,\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 PCBSMTPadPill = z.infer<typeof pcb_smtpad_pill>\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}\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 layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\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 ccw_rotation: Rotation\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\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}\n\nexport type PcbSmtPad =\n | PcbSmtPadCircle\n | PcbSmtPadRect\n | PcbSmtPadRotatedRect\n | PcbSmtPadPill\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<PcbSmtPadPill, PCBSMTPadPill>(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 { getZodPrefixedIdWithDefault } 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_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\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_oval,\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 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 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\nexport type PcbSolderPaste =\n | PcbSolderPasteCircle\n | PcbSolderPasteRect\n | PcbSolderPastePill\n | PcbSolderPasteRotatedRect\n | PcbSolderPasteOval\n\nexpectTypesMatch<PcbSolderPasteCircle, InferredPcbSolderPasteCircle>(true)\nexpectTypesMatch<PcbSolderPasteRect, InferredPcbSolderPasteRect>(true)\nexpectTypesMatch<PcbSolderPastePill, InferredPcbSolderPastePill>(true)\nexpectTypesMatch<PcbSolderPasteRotatedRect, InferredPcbSolderPasteRotatedRect>(\n true,\n)\nexpectTypesMatch<PcbSolderPasteOval, InferredPcbSolderPasteOval>(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_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 } 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_trace_route_point_wire = z.object({\n route_type: z.literal(\"wire\"),\n x: distance,\n y: distance,\n width: distance,\n start_pcb_port_id: z.string().optional(),\n end_pcb_port_id: z.string().optional(),\n layer: layer_ref,\n})\n\nexport const pcb_trace_route_point_via = z.object({\n route_type: z.literal(\"via\"),\n x: distance,\n y: distance,\n hole_diameter: distance.optional(),\n outer_diameter: distance.optional(),\n from_layer: z.string(),\n to_layer: z.string(),\n})\n\nexport const pcb_trace_route_point = z.union([\n pcb_trace_route_point_wire,\n pcb_trace_route_point_via,\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 route: z.array(pcb_trace_route_point),\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 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 hole_diameter?: Distance\n outer_diameter?: Distance\n from_layer: string\n to_layer: string\n}\n\nexport type PcbTraceRoutePoint = PcbTraceRoutePointWire | PcbTraceRoutePointVia\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 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_error = z\n .object({\n type: z.literal(\"pcb_trace_error\"),\n pcb_trace_error_id: getZodPrefixedIdWithDefault(\"pcb_trace_error\"),\n error_type: z.literal(\"pcb_trace_error\"),\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 })\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 {\n type: \"pcb_trace_error\"\n pcb_trace_error_id: string\n error_type: \"pcb_trace_error\"\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}\n\n/**\n * @deprecated use PcbTraceError\n */\nexport type PCBTraceError = PcbTraceError\n\nexpectTypesMatch<PcbTraceError, InferredPcbTraceError>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port_not_matched_error = z\n .object({\n type: z.literal(\"pcb_port_not_matched_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n message: z.string(),\n pcb_component_ids: z.array(z.string()),\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 {\n type: \"pcb_port_not_matched_error\"\n pcb_error_id: string\n message: string\n pcb_component_ids: string[]\n}\n\n/**\n * @deprecated use PcbPortNotMatchedError\n */\nexport type PCBPortNotMatchedError = PcbPortNotMatchedError\n\nexpectTypesMatch<PcbPortNotMatchedError, InferredPcbPortNotMatchedError>(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 x: distance,\n y: distance,\n outer_diameter: distance.default(\"0.6mm\"),\n hole_diameter: distance.default(\"0.25mm\"),\n /** @deprecated */\n from_layer: layer_ref.optional(),\n /** @deprecated */\n to_layer: layer_ref.optional(),\n layers: z.array(layer_ref),\n pcb_trace_id: z.string().optional(),\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 x: Distance\n y: Distance\n outer_diameter: Distance\n hole_diameter: Distance\n /** @deprecated */\n from_layer?: LayerRef\n /** @deprecated */\n to_layer?: LayerRef\n layers: LayerRef[]\n pcb_trace_id?: string\n}\n\n/**\n * @deprecated use PcbVia\n */\nexport type PCBVia = PcbVia\n\nexpectTypesMatch<PcbVia, InferredPcbVia>(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 pcb_board = z\n .object({\n type: z.literal(\"pcb_board\"),\n pcb_board_id: getZodPrefixedIdWithDefault(\"pcb_board\"),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n width: length,\n height: length,\n center: point,\n thickness: length.optional().default(1.4),\n num_layers: z.number().optional().default(4),\n outline: z.array(point).optional(),\n material: z.enum([\"fr4\", \"fr1\"]).default(\"fr4\"),\n })\n .describe(\"Defines the board outline of the PCB\")\n\n/**\n * Defines the board outline of the PCB\n */\nexport interface PcbBoard {\n type: \"pcb_board\"\n pcb_board_id: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n width: Length\n height: Length\n thickness: Length\n num_layers: number\n center: Point\n outline?: Point[]\n material: \"fr4\" | \"fr1\"\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 { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_placement_error = z\n .object({\n type: z.literal(\"pcb_placement_error\"),\n pcb_placement_error_id: getZodPrefixedIdWithDefault(\"pcb_placement_error\"),\n message: z.string(),\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 {\n type: \"pcb_placement_error\"\n pcb_placement_error_id: string\n message: string\n}\n\n/**\n * @deprecated use PcbPlacementError\n */\nexport type PCBPlacementError = PcbPlacementError\n\nexpectTypesMatch<PcbPlacementError, InferredPcbPlacementError>(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}\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 })\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 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 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 { 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 })\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}\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 })\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}\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, 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 })\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}\n\n/**\n * @deprecated use PcbSilkscreenOval\n */\nexport type PcbSilkscreenOvalDeprecated = PcbSilkscreenOval\n\nexpectTypesMatch<PcbSilkscreenOval, InferredPcbSilkscreenOval>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport {\n visible_layer,\n type LayerRef,\n type VisibleLayer,\n} 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 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 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 })\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}\n\n/**\n * @deprecated use PcbFabricationNotePath\n */\nexport type PCBFabricationNotePath = PcbFabricationNotePath\n\nexpectTypesMatch<PcbFabricationNotePath, InferredPcbFabricationNotePath>(true)\n","import { z } from \"zod\"\nimport { point } from \"../common\"\nimport { distance } from \"../units\"\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 })\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 }),\n )\n\nexport type PCBKeepoutInput = z.input<typeof pcb_keepout>\nexport type PCBKeepout = z.infer<typeof pcb_keepout>\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { length, type Length, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\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_group_id: z.string().optional(),\n subcircuit_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})\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_group_id?: string\n subcircuit_id?: string\n shape: \"rect\"\n center: Point\n width: Length\n height: Length\n rotation?: Rotation\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_group_id?: string\n subcircuit_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_group_id?: string\n subcircuit_id?: string\n shape: \"polygon\"\n points: Point[]\n}\nexpectTypesMatch<PcbCutoutPolygon, InferredPcbCutoutPolygon>(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 ])\n .describe(\"Defines a cutout on the PCB, removing board material.\")\n\nexport type PcbCutoutInput = z.input<typeof pcb_cutout>\nexport type PcbCutout = PcbCutoutRect | PcbCutoutCircle | PcbCutoutPolygon\n\ntype InferredPcbCutout = z.infer<typeof pcb_cutout>\nexpectTypesMatch<PcbCutout, InferredPcbCutout>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_missing_footprint_error = z\n .object({\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.literal(\"pcb_missing_footprint_error\"),\n source_component_id: z.string(),\n message: 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 {\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 message: 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 { 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 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,\n height: length,\n center: point,\n pcb_component_ids: z.array(z.string()),\n name: z.string().optional(),\n description: 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 pcb_component_ids: string[]\n name?: string\n description?: string\n}\n\nexpectTypesMatch<PcbGroup, InferredPcbGroup>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_autorouting_error = z\n .object({\n type: z.literal(\"pcb_autorouting_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_autorouting_error\"),\n message: z.string(),\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 {\n type: \"pcb_autorouting_error\"\n pcb_error_id: string\n message: string\n}\n\nexport type PcbAutoroutingError = PcbAutoroutingErrorInterface\n\nexpectTypesMatch<PcbAutoroutingError, PcbInferredAutoroutingError>(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 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 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 { point3 } from \"../common\"\nimport { rotation, length } from \"../units\"\nimport { layer_ref } from \"src/pcb\"\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.string(),\n source_component_id: z.string(),\n position: point3,\n rotation: point3.optional(),\n size: point3.optional(),\n layer: layer_ref.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_jscad: z.any().optional(),\n })\n .describe(\"Defines a component on the PCB\")\n\nexport type CadComponentInput = z.input<typeof cad_component>\nexport type CadComponent = z.infer<typeof cad_component>\n","import { z } from \"zod\"\nimport * as pcb from \"./pcb\"\nimport * as sch from \"./schematic\"\nimport * as src from \"./source\"\nimport * as cad from \"./cad\"\nimport {\n expectStringUnionsMatch,\n expectTypesMatch,\n} from \"./utils/expect-types-match\"\n\nexport const any_circuit_element = z.union([\n // TODO source_config\n // TODO pcb_config\n // TODO schematic_config\n // TODO schematic_group\n src.source_trace,\n src.source_port,\n src.any_source_component,\n src.source_led,\n src.source_net,\n src.source_group,\n src.source_simple_bug,\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_resonator,\n src.source_simple_switch,\n src.source_simple_transistor,\n src.source_simple_mosfet,\n src.source_simple_potentiometer,\n src.source_simple_push_button,\n src.source_project_metadata,\n pcb.pcb_component,\n pcb.pcb_hole,\n pcb.pcb_missing_footprint_error,\n pcb.pcb_manual_edit_conflict_warning,\n pcb.pcb_plated_hole,\n pcb.pcb_keepout,\n pcb.pcb_port,\n pcb.pcb_text,\n pcb.pcb_trace,\n pcb.pcb_via,\n pcb.pcb_smtpad,\n pcb.pcb_solder_paste,\n pcb.pcb_board,\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_rect,\n pcb.pcb_silkscreen_circle,\n pcb.pcb_silkscreen_oval,\n pcb.pcb_trace_error,\n pcb.pcb_placement_error,\n pcb.pcb_port_not_matched_error,\n pcb.pcb_fabrication_note_path,\n pcb.pcb_fabrication_note_text,\n pcb.pcb_autorouting_error,\n pcb.pcb_cutout,\n sch.schematic_box,\n sch.schematic_text,\n sch.schematic_line,\n sch.schematic_component,\n sch.schematic_port,\n sch.schematic_trace,\n sch.schematic_path,\n sch.schematic_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_group,\n cad.cad_component,\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 | \"schematic_debug_object DOES NOT HAVE AN schematic_debug_object_id PROPERTY\"\n | \"schematic_box DOES NOT HAVE AN schematic_box_id PROPERTY\"\n | \"schematic_line DOES NOT HAVE AN schematic_line_id PROPERTY\"\n | \"schematic_path DOES NOT HAVE AN schematic_path_id PROPERTY\"\n>(true)\n","import type {\n AnyCircuitElement,\n AnyCircuitElementInput,\n SourceComponentBase,\n SourcePort,\n} from \"circuit-json\"\nimport * as Soup from \"circuit-json\"\n\ntype SoupOps<\n K extends AnyCircuitElement[\"type\"],\n T extends AnyCircuitElement | AnyCircuitElementInput,\n> = {\n get: (id: string) => Extract<T, { type: K }> | null\n select: (selector: string) => Extract<T, { type: K }> | null\n getWhere: (where: any) => Extract<T, { type: K }> | null\n getUsing: (using: {\n [key: `${string}_id`]: string\n }) => Extract<T, { type: K }> | null\n insert: (\n elm: Omit<Extract<T, { type: K }>, \"type\" | `${K}_id`>,\n ) => Extract<T, { type: K }>\n update: (\n id: string,\n newProps: Partial<Extract<T, { type: K }>>,\n ) => Extract<T, { type: K }>\n delete: (id: string) => void\n list: (where?: any) => Extract<T, { type: K }>[]\n}\n\nexport type SoupUtilObjects = {\n [K in AnyCircuitElement[\"type\"]]: SoupOps<K, AnyCircuitElement>\n} & {\n toArray: () => AnyCircuitElement[]\n}\nexport type SoupInputUtilObjects = {\n [K in AnyCircuitElementInput[\"type\"]]: SoupOps<K, AnyCircuitElementInput>\n}\n\nexport type SoupUtilOptions = {\n validateInserts?: boolean\n}\n\nexport type GetSoupUtilFn = ((\n soup: AnyCircuitElement[],\n options?: SoupUtilOptions,\n) => SoupUtilObjects) & {\n unparsed: (soup: AnyCircuitElementInput[]) => SoupInputUtilObjects\n}\n\ninterface InternalStore {\n counts: Record<string, number>\n}\n\nexport const su: GetSoupUtilFn = ((\n soup: AnyCircuitElement[],\n options: SoupUtilOptions = {},\n) => {\n let internalStore: InternalStore = (soup as any)._internal_store\n if (!internalStore) {\n internalStore = {\n counts: {},\n } as InternalStore\n ;(soup as any)._internal_store = internalStore\n\n // Initialize counts\n for (const elm of soup) {\n const type = elm.type\n const idVal = (elm as any)[`${type}_id`]\n if (!idVal) continue\n const idNum = Number.parseInt(idVal.split(\"_\").pop())\n if (!Number.isNaN(idNum)) {\n internalStore.counts[type] = Math.max(\n internalStore.counts[type] ?? 0,\n idNum,\n )\n }\n }\n }\n const su = new Proxy(\n {},\n {\n get: (proxy_target: any, component_type: string) => {\n if (component_type === \"toArray\") {\n return () => soup\n }\n\n return {\n get: (id: string) =>\n soup.find(\n (e: any) =>\n e.type === component_type && e[`${component_type}_id`] === id,\n ),\n getUsing: (using: any) => {\n const keys = Object.keys(using)\n if (keys.length !== 1) {\n throw new Error(\n \"getUsing requires exactly one key, e.g. { pcb_component_id }\",\n )\n }\n const join_key = keys[0] as string\n const join_type = join_key.replace(\"_id\", \"\")\n const joiner: any = soup.find(\n (e: any) =>\n e.type === join_type && e[join_key] === using[join_key],\n )\n if (!joiner) return null\n return soup.find(\n (e: any) =>\n e.type === component_type &&\n e[`${component_type}_id`] === joiner[`${component_type}_id`],\n )\n },\n getWhere: (where: any) => {\n const keys = Object.keys(where)\n return soup.find(\n (e: any) =>\n e.type === component_type &&\n keys.every((key) => e[key] === where[key]),\n )\n },\n list: (where?: any) => {\n const keys = !where ? [] : Object.keys(where)\n return soup.filter(\n (e: any) =>\n e.type === component_type &&\n keys.every((key) => e[key] === where[key]),\n )\n },\n insert: (elm: any) => {\n internalStore.counts[component_type] ??= -1\n internalStore.counts[component_type]++\n const index = internalStore.counts[component_type]\n const newElm = {\n type: component_type,\n [`${component_type}_id`]: `${component_type}_${index}`,\n ...elm,\n }\n\n if (options.validateInserts) {\n const parser =\n (Soup as any)[component_type] ?? Soup.any_soup_element\n parser.parse(newElm)\n }\n\n soup.push(newElm)\n return newElm\n },\n delete: (id: string) => {\n const elm = soup.find(\n (e) => (e as any)[`${component_type}_id`] === id,\n )\n if (!elm) return\n soup.splice(soup.indexOf(elm), 1)\n },\n update: (id: string, newProps: any) => {\n const elm = soup.find(\n (e) =>\n e.type === component_type &&\n (e as any)[`${component_type}_id`] === id,\n )\n if (!elm) return\n Object.assign(elm, newProps)\n return elm\n },\n select: (selector: string) => {\n // TODO when applySelector is isolated we can use it, until then we\n // do a poor man's selector implementation for two common cases\n if (component_type === \"source_component\") {\n return soup.find(\n (e) =>\n e.type === \"source_component\" &&\n e.name === selector.replace(/\\./g, \"\"),\n )\n } else if (\n component_type === \"pcb_port\" ||\n component_type === \"source_port\" ||\n component_type === \"schematic_port\"\n ) {\n const [component_name, port_selector] = selector\n .replace(/\\./g, \"\")\n .split(/[\\s\\>]+/)\n const source_component = soup.find(\n (e) =>\n e.type === \"source_component\" && e.name === component_name,\n ) as SourceComponentBase\n if (!source_component) return null\n const source_port = soup.find(\n (e) =>\n e.type === \"source_port\" &&\n e.source_component_id ===\n source_component.source_component_id &&\n (e.name === port_selector ||\n (e.port_hints ?? []).includes(port_selector!)),\n ) as SourcePort\n if (!source_port) return null\n if (component_type === \"source_port\") return source_port\n\n if (component_type === \"pcb_port\") {\n return soup.find(\n (e) =>\n e.type === \"pcb_port\" &&\n e.source_port_id === source_port.source_port_id,\n )\n } else if (component_type === \"schematic_port\") {\n return soup.find(\n (e) =>\n e.type === \"schematic_port\" &&\n e.source_port_id === source_port.source_port_id,\n )\n }\n }\n },\n }\n },\n },\n )\n\n return su\n}) as any\nsu.unparsed = su as any\n\nexport default su\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { type Matrix, applyToPoint, decomposeTSR } from \"transformation-matrix\"\nimport {\n directionToVec,\n rotateDirection,\n vecToDirection,\n} from \"./direction-to-vec\"\n\nexport const transformSchematicElement = (\n elm: AnyCircuitElement,\n matrix: Matrix,\n) => {\n if (elm.type === \"schematic_component\") {\n // TODO handle rotation\n elm.center = applyToPoint(matrix, elm.center)\n } else if (elm.type === \"schematic_port\") {\n elm.center = applyToPoint(matrix, elm.center)\n\n if (elm.facing_direction) {\n elm.facing_direction = rotateDirection(\n elm.facing_direction,\n -(Math.atan2(matrix.b, matrix.a) / Math.PI) * 2,\n )\n }\n } else if (elm.type === \"schematic_text\") {\n elm.position = applyToPoint(matrix, elm.position)\n // } else if (elm.type === \"schematic_group\") {\n // elm.center = applyToPoint(matrix, elm.center)\n } else if (elm.type === \"schematic_trace\") {\n } else if (elm.type === \"schematic_box\") {\n const { x, y } = applyToPoint(matrix, { x: elm.x, y: elm.y })\n elm.x = x\n elm.y = y\n } else if (elm.type === \"schematic_line\") {\n const { x: x1, y: y1 } = applyToPoint(matrix, { x: elm.x1, y: elm.y1 })\n const { x: x2, y: y2 } = applyToPoint(matrix, { x: elm.x2, y: elm.y2 })\n elm.x1 = x1\n elm.y1 = y1\n elm.x2 = x2\n elm.y2 = y2\n }\n return elm\n}\n\nexport const transformSchematicElements = (\n elms: AnyCircuitElement[],\n matrix: Matrix,\n) => {\n return elms.map((elm) => transformSchematicElement(elm, matrix))\n}\n\nexport const transformPCBElement = (elm: AnyCircuitElement, matrix: Matrix) => {\n if (\n elm.type === \"pcb_plated_hole\" ||\n elm.type === \"pcb_hole\" ||\n elm.type === \"pcb_via\" ||\n elm.type === \"pcb_smtpad\" ||\n elm.type === \"pcb_port\"\n ) {\n const { x, y } = applyToPoint(matrix, { x: elm.x, y: elm.y })\n elm.x = x\n elm.y = y\n } else if (elm.type === \"pcb_keepout\" || elm.type === \"pcb_board\") {\n // TODO adjust size/rotation\n elm.center = applyToPoint(matrix, elm.center)\n } else if (\n elm.type === \"pcb_silkscreen_text\" ||\n elm.type === \"pcb_fabrication_note_text\"\n ) {\n elm.anchor_position = applyToPoint(matrix, elm.anchor_position)\n } else if (\n elm.type === \"pcb_silkscreen_circle\" ||\n elm.type === \"pcb_silkscreen_rect\" ||\n elm.type === \"pcb_component\"\n ) {\n elm.center = applyToPoint(matrix, elm.center)\n } else if (\n elm.type === \"pcb_silkscreen_path\" ||\n elm.type === \"pcb_trace\" ||\n elm.type === \"pcb_fabrication_note_path\"\n ) {\n elm.route = elm.route.map((rp) => {\n const tp = applyToPoint(matrix, rp) as { x: number; y: number }\n rp.x = tp.x\n rp.y = tp.y\n return rp\n })\n } else if (elm.type === \"pcb_silkscreen_line\") {\n const p1 = { x: elm.x1, y: elm.y1 }\n const p2 = { x: elm.x2, y: elm.y2 }\n const p1t = applyToPoint(matrix, p1)\n const p2t = applyToPoint(matrix, p2)\n elm.x1 = p1t.x\n elm.y1 = p1t.y\n elm.x2 = p2t.x\n elm.y2 = p2t.y\n } else if (elm.type === \"cad_component\") {\n const newPos = applyToPoint(matrix, {\n x: elm.position.x,\n y: elm.position.y,\n })\n elm.position.x = newPos.x\n elm.position.y = newPos.y\n }\n return elm\n}\n\nexport const transformPCBElements = (\n elms: AnyCircuitElement[],\n matrix: Matrix,\n) => {\n const tsr = decomposeTSR(matrix)\n const flipPadWidthHeight =\n Math.round(tsr.rotation.angle / (Math.PI / 2)) % 2 === 1\n let transformedElms = elms.map((elm) => transformPCBElement(elm, matrix))\n if (flipPadWidthHeight) {\n transformedElms = transformedElms.map((elm) => {\n if (elm.type === \"pcb_smtpad\" && elm.shape === \"rect\") {\n ;[elm.width, elm.height] = [elm.height, elm.width]\n }\n return elm\n })\n }\n return transformedElms\n}\n","export const directionToVec = (direction: \"up\" | \"down\" | \"left\" | \"right\") => {\n if (direction === \"up\") return { x: 0, y: 1 }\n else if (direction === \"down\") return { x: 0, y: -1 }\n else if (direction === \"left\") return { x: -1, y: 0 }\n else if (direction === \"right\") return { x: 1, y: 0 }\n else throw new Error(\"Invalid direction\")\n}\n\nexport const vecToDirection = ({ x, y }: { x: number; y: number }) => {\n if (x > y) y = 0\n if (y > x) x = 0\n if (x > 0 && y === 0) return \"right\"\n else if (x < 0 && y === 0) return \"left\"\n else if (x === 0 && y > 0) return \"up\"\n else if (x === 0 && y < 0) return \"down\"\n else throw new Error(`Invalid vector for direction conversion (${x}, ${y})`)\n}\n\nexport const rotateClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"right\"\n else if (direction === \"right\") return \"down\"\n else if (direction === \"down\") return \"left\"\n else if (direction === \"left\") return \"up\"\n throw new Error(`Invalid direction: ${direction}`)\n}\n\nexport const rotateCounterClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"left\"\n else if (direction === \"left\") return \"down\"\n else if (direction === \"down\") return \"right\"\n else if (direction === \"right\") return \"up\"\n throw new Error(`Invalid direction: ${direction}`)\n}\n\nexport const rotateDirection = (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n num90DegreeClockwiseTurns: number\n) => {\n while (num90DegreeClockwiseTurns > 0) {\n direction = rotateClockwise(direction)\n num90DegreeClockwiseTurns--\n }\n while (num90DegreeClockwiseTurns < 0) {\n direction = rotateCounterClockwise(direction)\n num90DegreeClockwiseTurns++\n }\n return direction\n}\n\nexport const oppositeDirection = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"down\"\n else if (direction === \"down\") return \"up\"\n else if (direction === \"left\") return \"right\"\n else if (direction === \"right\") return \"left\"\n throw new Error(`Invalid direction: ${direction}`)\n}\n\nexport const oppositeSide = (\n sideOrDir: \"up\" | \"down\" | \"top\" | \"bottom\" | \"left\" | \"right\"\n) => {\n if (sideOrDir === \"top\" || sideOrDir === \"up\") return \"bottom\"\n else if (sideOrDir === \"bottom\" || sideOrDir === \"down\") return \"top\"\n else if (sideOrDir === \"left\") return \"right\"\n else if (sideOrDir === \"right\") return \"left\"\n throw new Error(`Invalid sideOrDir: ${sideOrDir}`)\n}\n","import * as parsel from \"parsel-js\"\nimport { convertAbbrToType } from \"./convert-abbreviation-to-soup-element-type\"\nimport type { AnyCircuitElement } from \"circuit-json\"\n\nconst filterByType = (\n elements: AnyCircuitElement[],\n type: string\n): AnyCircuitElement[] => {\n type = convertAbbrToType(type)\n return elements.filter(\n (elm) => (\"ftype\" in elm && elm.ftype === type) || elm.type === type\n )\n}\n\n/**\n * Filter elements to match the selector, e.g. to access the left port of a\n * resistor you can do \".R1 > port.left\"\n */\nexport const applySelector = (\n elements: AnyCircuitElement[],\n selectorRaw: string\n): AnyCircuitElement[] => {\n const selectorAST = parsel.parse(selectorRaw)\n return applySelectorAST(elements, selectorAST!)\n}\n\nconst doesElmMatchClassName = (elm: AnyCircuitElement, className: string) =>\n (\"name\" in elm && elm.name === className) ||\n (\"port_hints\" in elm && elm.port_hints?.includes(className))\n\nexport const applySelectorAST = (\n elements: AnyCircuitElement[],\n selectorAST: parsel.AST\n): AnyCircuitElement[] => {\n switch (selectorAST.type) {\n case \"complex\": {\n switch (selectorAST.combinator) {\n case \" \": // TODO technically should do a deep search\n case \">\": {\n const { left, right } = selectorAST\n if (left.type === \"class\" || left.type === \"type\") {\n // TODO should also check if content matches any element tags\n let matchElms: AnyCircuitElement[]\n if (left.type === \"class\") {\n matchElms = elements.filter((elm) =>\n doesElmMatchClassName(elm, left.name)\n )\n } else if (left.type === \"type\") {\n matchElms = filterByType(elements, left.name)\n } else {\n matchElms = []\n }\n\n const childrenOfMatchingElms = matchElms.flatMap((matchElm) =>\n elements.filter(\n (elm: any) =>\n elm[`${matchElm.type}_id`] ===\n (matchElm as any)[`${matchElm.type}_id`] && elm !== matchElm\n )\n )\n return applySelectorAST(childrenOfMatchingElms, right)\n } else {\n throw new Error(`unsupported selector type \"${left.type}\" `)\n }\n }\n default: {\n throw new Error(\n `Couldn't apply selector AST for complex combinator \"${selectorAST.combinator}\"`\n )\n }\n }\n return []\n }\n case \"compound\": {\n const conditionsToMatch = selectorAST.list.map((part) => {\n switch (part.type) {\n case \"class\": {\n return (elm: any) => doesElmMatchClassName(elm, part.name)\n }\n case \"type\": {\n const name = convertAbbrToType(part.name)\n return (elm: any) => elm.type === name\n }\n }\n })\n\n return elements.filter((elm) =>\n conditionsToMatch.every((condFn) => condFn?.(elm))\n )\n }\n case \"type\": {\n return filterByType(elements, selectorAST.name) as AnyCircuitElement[]\n }\n case \"class\": {\n return elements.filter((elm) =>\n doesElmMatchClassName(elm, selectorAST.name)\n )\n }\n default: {\n throw new Error(\n `Couldn't apply selector AST for type: \"${\n selectorAST.type\n }\" ${JSON.stringify(selectorAST, null, \" \")}`\n )\n }\n }\n}\n","export const convertAbbrToType = (abbr: string): string => {\n switch (abbr) {\n case \"port\":\n return \"source_port\"\n case \"net\":\n return \"source_net\"\n case \"power\":\n return \"simple_power_source\"\n }\n return abbr\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\n\nexport const getElementId = (elm: AnyCircuitElement): string => {\n const type = elm.type\n const id = (elm as any)[`${type}_id`]\n return id\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getElementId } from \"./get-element-id\"\n\nexport const getElementById = (\n soup: AnyCircuitElement[],\n id: string,\n): AnyCircuitElement | null => {\n return soup.find((elm) => getElementId(elm) === id) ?? null\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"../su\"\n\nexport function getReadableNameForPcbTrace(\n soup: AnyCircuitElement[],\n pcb_trace_id: string,\n) {\n // Find the pcb_trace object\n const pcbTrace = su(soup).pcb_trace.get(pcb_trace_id)\n\n if (!pcbTrace) {\n return `trace[${pcb_trace_id}]`\n }\n\n // Get the connected ports\n const connectedPcbPortIds: string[] = pcbTrace.route\n .flatMap((point: any) => [point.start_pcb_port_id, point.end_pcb_port_id])\n .filter(Boolean)\n\n if (connectedPcbPortIds.length === 0) {\n return `trace[${pcb_trace_id}]`\n }\n\n // Function to get component name and port hint\n function getComponentAndPortInfo(pcb_port_id: string) {\n const pcbPort = su(soup).pcb_port.get(pcb_port_id)\n if (!pcbPort) return null\n\n const pcbComponent = su(soup).pcb_component.get(pcbPort.pcb_component_id)\n if (!pcbComponent) return null\n const sourceComponent = su(soup).source_component.get(\n pcbComponent.source_component_id,\n )\n if (!sourceComponent) return null\n\n const sourcePort = su(soup).source_port.get(pcbPort.source_port_id)\n const portHint = sourcePort?.port_hints ? sourcePort.port_hints[1] : \"\"\n\n return {\n componentName: sourceComponent.name,\n portHint: portHint,\n }\n }\n\n // Generate the readable selector\n const selectorParts = connectedPcbPortIds.map((portId) => {\n const info = getComponentAndPortInfo(portId)\n if (info) {\n return `.${info.componentName} > port.${info.portHint}`\n }\n return `port[${portId}]`\n })\n\n return `trace[${selectorParts.join(\", \")}]`\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"../su\"\n\nexport const getReadableNameForPcbPort = (\n soup: AnyCircuitElement[],\n pcb_port_id: string,\n): string => {\n const pcbPort = su(soup).pcb_port.get(pcb_port_id)\n if (!pcbPort) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Get the component information\n const pcbComponent = su(soup).pcb_component.get(pcbPort?.pcb_component_id)\n\n if (!pcbComponent) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Get the source component information\n const sourceComponent = su(soup).source_component.get(\n pcbComponent.source_component_id,\n )\n\n if (!sourceComponent) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Get the source port information\n const sourcePort = su(soup).source_port.get(pcbPort.source_port_id)\n\n if (!sourcePort) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Determine the pad number or hint\n let padIdentifier: string\n if (sourcePort?.port_hints && sourcePort.port_hints.length > 0) {\n padIdentifier = sourcePort.port_hints[0]!\n } else if (sourcePort.port_hints && sourcePort.port_hints.length > 0) {\n padIdentifier = sourcePort.port_hints[0]!\n } else {\n padIdentifier = pcb_port_id\n }\n\n return `pcb_port[.${sourceComponent.name} > .${padIdentifier}]`\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"../su\"\nimport { getReadableNameForPcbPort } from \"./get-readable-name-for-pcb-port\"\n\nexport function getReadableNameForPcbSmtpad(\n soup: AnyCircuitElement[],\n pcb_smtpad_id: string,\n): string {\n // Find the pcb_smtpad object\n const pcbSmtpad = su(soup).pcb_smtpad.get(pcb_smtpad_id)\n\n if (!pcbSmtpad || !pcbSmtpad.pcb_port_id) {\n return `smtpad[${pcb_smtpad_id}]`\n }\n\n return getReadableNameForPcbPort(soup, pcbSmtpad.pcb_port_id)\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getReadableNameForPcbTrace } from \"./get-readable-name-for-pcb-trace\"\nimport { getReadableNameForPcbSmtpad } from \"./get-readable-name-for-pcb-smtpad\"\nimport { getReadableNameForPcbPort } from \"./get-readable-name-for-pcb-port\"\nimport { getElementById } from \"lib/get-element-by-id\"\nimport { getElementId } from \"lib/get-element-id\"\n\nexport const getReadableNameForElement = (\n soup: AnyCircuitElement[],\n elm: AnyCircuitElement | string,\n): string => {\n if (typeof elm === \"string\") {\n const elmObj = getElementById(soup, elm)\n if (!elmObj) `unknown (could not find element with id ${elm})`\n return getReadableNameForElement(soup, elmObj as any)\n }\n switch (elm.type) {\n case \"pcb_port\":\n return getReadableNameForPcbPort(soup, elm.pcb_port_id)\n case \"pcb_smtpad\":\n return getReadableNameForPcbSmtpad(soup, elm.pcb_smtpad_id)\n case \"pcb_trace\":\n return getReadableNameForPcbTrace(soup, elm.pcb_trace_id)\n case \"source_component\":\n return `source_component[${elm.name}]`\n default:\n return `${elm.type}[#${getElementId(elm)}]`\n }\n}\n\nexport {\n getReadableNameForPcbPort,\n getReadableNameForPcbSmtpad,\n getReadableNameForPcbTrace,\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\n\nexport const getBoundsOfPcbElements = (\n elements: AnyCircuitElement[],\n): { minX: number; minY: number; maxX: number; maxY: number } => {\n let minX = Number.POSITIVE_INFINITY\n let minY = Number.POSITIVE_INFINITY\n let maxX = Number.NEGATIVE_INFINITY\n let maxY = Number.NEGATIVE_INFINITY\n\n for (const elm of elements) {\n if (!elm.type.startsWith(\"pcb_\")) continue\n if (\"x\" in elm && \"y\" in elm) {\n minX = Math.min(minX, elm.x)\n minY = Math.min(minY, elm.y)\n maxX = Math.max(maxX, elm.x)\n maxY = Math.max(maxY, elm.y)\n\n if (\"width\" in elm) {\n maxX = Math.max(maxX, elm.x + elm.width)\n }\n if (\"height\" in elm) {\n maxY = Math.max(maxY, elm.y + elm.height)\n }\n if (\"radius\" in elm) {\n minX = Math.min(minX, elm.x - elm.radius)\n minY = Math.min(minY, elm.y - elm.radius)\n maxX = Math.max(maxX, elm.x + elm.radius)\n maxY = Math.max(maxY, elm.y + elm.radius)\n }\n } else if (elm.type === \"pcb_trace\") {\n for (const point of elm.route) {\n minX = Math.min(minX, point.x)\n minY = Math.min(minY, point.y)\n maxX = Math.max(maxX, point.x)\n maxY = Math.max(maxY, point.y)\n }\n }\n }\n\n return { minX, minY, maxX, maxY }\n}\n","export function stringHash(str: string) {\n let hash = 0\n if (str.length == 0) return hash\n for (var i = 0; i < str.length; i++) {\n var char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n return Math.abs(hash)\n}\n","import { stringHash } from \"./string-hash\"\n\nexport type LayoutDebugObject = {\n x: number\n y: number\n width: number\n height: number\n bg_color: string\n title: string\n content: Object\n secondary?: boolean\n}\n\n/**\n * Vendored from \"nice-color-palettes\" package\n */\nconst nice_color_palettes = [\n [\"#69d2e7\", \"#a7dbd8\", \"#e0e4cc\", \"#f38630\", \"#fa6900\"],\n [\"#fe4365\", \"#fc9d9a\", \"#f9cdad\", \"#c8c8a9\", \"#83af9b\"],\n [\"#ecd078\", \"#d95b43\", \"#c02942\", \"#542437\", \"#53777a\"],\n [\"#556270\", \"#4ecdc4\", \"#c7f464\", \"#ff6b6b\", \"#c44d58\"],\n [\"#774f38\", \"#e08e79\", \"#f1d4af\", \"#ece5ce\", \"#c5e0dc\"],\n [\"#e8ddcb\", \"#cdb380\", \"#036564\", \"#033649\", \"#031634\"],\n [\"#490a3d\", \"#bd1550\", \"#e97f02\", \"#f8ca00\", \"#8a9b0f\"],\n [\"#594f4f\", \"#547980\", \"#45ada8\", \"#9de0ad\", \"#e5fcc2\"],\n [\"#00a0b0\", \"#6a4a3c\", \"#cc333f\", \"#eb6841\", \"#edc951\"],\n [\"#e94e77\", \"#d68189\", \"#c6a49a\", \"#c6e5d9\", \"#f4ead5\"],\n [\"#3fb8af\", \"#7fc7af\", \"#dad8a7\", \"#ff9e9d\", \"#ff3d7f\"],\n [\"#d9ceb2\", \"#948c75\", \"#d5ded9\", \"#7a6a53\", \"#99b2b7\"],\n [\"#ffffff\", \"#cbe86b\", \"#f2e9e1\", \"#1c140d\", \"#cbe86b\"],\n [\"#efffcd\", \"#dce9be\", \"#555152\", \"#2e2633\", \"#99173c\"],\n [\"#343838\", \"#005f6b\", \"#008c9e\", \"#00b4cc\", \"#00dffc\"],\n [\"#413e4a\", \"#73626e\", \"#b38184\", \"#f0b49e\", \"#f7e4be\"],\n [\"#ff4e50\", \"#fc913a\", \"#f9d423\", \"#ede574\", \"#e1f5c4\"],\n [\"#99b898\", \"#fecea8\", \"#ff847c\", \"#e84a5f\", \"#2a363b\"],\n [\"#655643\", \"#80bca3\", \"#f6f7bd\", \"#e6ac27\", \"#bf4d28\"],\n [\"#00a8c6\", \"#40c0cb\", \"#f9f2e7\", \"#aee239\", \"#8fbe00\"],\n [\"#351330\", \"#424254\", \"#64908a\", \"#e8caa4\", \"#cc2a41\"],\n [\"#554236\", \"#f77825\", \"#d3ce3d\", \"#f1efa5\", \"#60b99a\"],\n [\"#5d4157\", \"#838689\", \"#a8caba\", \"#cad7b2\", \"#ebe3aa\"],\n [\"#8c2318\", \"#5e8c6a\", \"#88a65e\", \"#bfb35a\", \"#f2c45a\"],\n [\"#fad089\", \"#ff9c5b\", \"#f5634a\", \"#ed303c\", \"#3b8183\"],\n [\"#ff4242\", \"#f4fad2\", \"#d4ee5e\", \"#e1edb9\", \"#f0f2eb\"],\n [\"#f8b195\", \"#f67280\", \"#c06c84\", \"#6c5b7b\", \"#355c7d\"],\n [\"#d1e751\", \"#ffffff\", \"#000000\", \"#4dbce9\", \"#26ade4\"],\n [\"#1b676b\", \"#519548\", \"#88c425\", \"#bef202\", \"#eafde6\"],\n [\"#5e412f\", \"#fcebb6\", \"#78c0a8\", \"#f07818\", \"#f0a830\"],\n [\"#bcbdac\", \"#cfbe27\", \"#f27435\", \"#f02475\", \"#3b2d38\"],\n [\"#452632\", \"#91204d\", \"#e4844a\", \"#e8bf56\", \"#e2f7ce\"],\n [\"#eee6ab\", \"#c5bc8e\", \"#696758\", \"#45484b\", \"#36393b\"],\n [\"#f0d8a8\", \"#3d1c00\", \"#86b8b1\", \"#f2d694\", \"#fa2a00\"],\n [\"#2a044a\", \"#0b2e59\", \"#0d6759\", \"#7ab317\", \"#a0c55f\"],\n [\"#f04155\", \"#ff823a\", \"#f2f26f\", \"#fff7bd\", \"#95cfb7\"],\n [\"#b9d7d9\", \"#668284\", \"#2a2829\", \"#493736\", \"#7b3b3b\"],\n [\"#bbbb88\", \"#ccc68d\", \"#eedd99\", \"#eec290\", \"#eeaa88\"],\n [\"#b3cc57\", \"#ecf081\", \"#ffbe40\", \"#ef746f\", \"#ab3e5b\"],\n [\"#a3a948\", \"#edb92e\", \"#f85931\", \"#ce1836\", \"#009989\"],\n [\"#300030\", \"#480048\", \"#601848\", \"#c04848\", \"#f07241\"],\n [\"#67917a\", \"#170409\", \"#b8af03\", \"#ccbf82\", \"#e33258\"],\n [\"#aab3ab\", \"#c4cbb7\", \"#ebefc9\", \"#eee0b7\", \"#e8caaf\"],\n [\"#e8d5b7\", \"#0e2430\", \"#fc3a51\", \"#f5b349\", \"#e8d5b9\"],\n [\"#ab526b\", \"#bca297\", \"#c5ceae\", \"#f0e2a4\", \"#f4ebc3\"],\n [\"#607848\", \"#789048\", \"#c0d860\", \"#f0f0d8\", \"#604848\"],\n [\"#b6d8c0\", \"#c8d9bf\", \"#dadabd\", \"#ecdbbc\", \"#fedcba\"],\n [\"#a8e6ce\", \"#dcedc2\", \"#ffd3b5\", \"#ffaaa6\", \"#ff8c94\"],\n [\"#3e4147\", \"#fffedf\", \"#dfba69\", \"#5a2e2e\", \"#2a2c31\"],\n [\"#fc354c\", \"#29221f\", \"#13747d\", \"#0abfbc\", \"#fcf7c5\"],\n [\"#cc0c39\", \"#e6781e\", \"#c8cf02\", \"#f8fcc1\", \"#1693a7\"],\n [\"#1c2130\", \"#028f76\", \"#b3e099\", \"#ffeaad\", \"#d14334\"],\n [\"#a7c5bd\", \"#e5ddcb\", \"#eb7b59\", \"#cf4647\", \"#524656\"],\n [\"#dad6ca\", \"#1bb0ce\", \"#4f8699\", \"#6a5e72\", \"#563444\"],\n [\"#5c323e\", \"#a82743\", \"#e15e32\", \"#c0d23e\", \"#e5f04c\"],\n [\"#edebe6\", \"#d6e1c7\", \"#94c7b6\", \"#403b33\", \"#d3643b\"],\n [\"#fdf1cc\", \"#c6d6b8\", \"#987f69\", \"#e3ad40\", \"#fcd036\"],\n [\"#230f2b\", \"#f21d41\", \"#ebebbc\", \"#bce3c5\", \"#82b3ae\"],\n [\"#b9d3b0\", \"#81bda4\", \"#b28774\", \"#f88f79\", \"#f6aa93\"],\n [\"#3a111c\", \"#574951\", \"#83988e\", \"#bcdea5\", \"#e6f9bc\"],\n [\"#5e3929\", \"#cd8c52\", \"#b7d1a3\", \"#dee8be\", \"#fcf7d3\"],\n [\"#1c0113\", \"#6b0103\", \"#a30006\", \"#c21a01\", \"#f03c02\"],\n [\"#000000\", \"#9f111b\", \"#b11623\", \"#292c37\", \"#cccccc\"],\n [\"#382f32\", \"#ffeaf2\", \"#fcd9e5\", \"#fbc5d8\", \"#f1396d\"],\n [\"#e3dfba\", \"#c8d6bf\", \"#93ccc6\", \"#6cbdb5\", \"#1a1f1e\"],\n [\"#f6f6f6\", \"#e8e8e8\", \"#333333\", \"#990100\", \"#b90504\"],\n [\"#1b325f\", \"#9cc4e4\", \"#e9f2f9\", \"#3a89c9\", \"#f26c4f\"],\n [\"#a1dbb2\", \"#fee5ad\", \"#faca66\", \"#f7a541\", \"#f45d4c\"],\n [\"#c1b398\", \"#605951\", \"#fbeec2\", \"#61a6ab\", \"#accec0\"],\n [\"#5e9fa3\", \"#dcd1b4\", \"#fab87f\", \"#f87e7b\", \"#b05574\"],\n [\"#951f2b\", \"#f5f4d7\", \"#e0dfb1\", \"#a5a36c\", \"#535233\"],\n [\"#8dccad\", \"#988864\", \"#fea6a2\", \"#f9d6ac\", \"#ffe9af\"],\n [\"#2d2d29\", \"#215a6d\", \"#3ca2a2\", \"#92c7a3\", \"#dfece6\"],\n [\"#413d3d\", \"#040004\", \"#c8ff00\", \"#fa023c\", \"#4b000f\"],\n [\"#eff3cd\", \"#b2d5ba\", \"#61ada0\", \"#248f8d\", \"#605063\"],\n [\"#ffefd3\", \"#fffee4\", \"#d0ecea\", \"#9fd6d2\", \"#8b7a5e\"],\n [\"#cfffdd\", \"#b4dec1\", \"#5c5863\", \"#a85163\", \"#ff1f4c\"],\n [\"#9dc9ac\", \"#fffec7\", \"#f56218\", \"#ff9d2e\", \"#919167\"],\n [\"#4e395d\", \"#827085\", \"#8ebe94\", \"#ccfc8e\", \"#dc5b3e\"],\n [\"#a8a7a7\", \"#cc527a\", \"#e8175d\", \"#474747\", \"#363636\"],\n [\"#f8edd1\", \"#d88a8a\", \"#474843\", \"#9d9d93\", \"#c5cfc6\"],\n [\"#046d8b\", \"#309292\", \"#2fb8ac\", \"#93a42a\", \"#ecbe13\"],\n [\"#f38a8a\", \"#55443d\", \"#a0cab5\", \"#cde9ca\", \"#f1edd0\"],\n [\"#a70267\", \"#f10c49\", \"#fb6b41\", \"#f6d86b\", \"#339194\"],\n [\"#ff003c\", \"#ff8a00\", \"#fabe28\", \"#88c100\", \"#00c176\"],\n [\"#ffedbf\", \"#f7803c\", \"#f54828\", \"#2e0d23\", \"#f8e4c1\"],\n [\"#4e4d4a\", \"#353432\", \"#94ba65\", \"#2790b0\", \"#2b4e72\"],\n [\"#0ca5b0\", \"#4e3f30\", \"#fefeeb\", \"#f8f4e4\", \"#a5b3aa\"],\n [\"#4d3b3b\", \"#de6262\", \"#ffb88c\", \"#ffd0b3\", \"#f5e0d3\"],\n [\"#fffbb7\", \"#a6f6af\", \"#66b6ab\", \"#5b7c8d\", \"#4f2958\"],\n [\"#edf6ee\", \"#d1c089\", \"#b3204d\", \"#412e28\", \"#151101\"],\n [\"#9d7e79\", \"#ccac95\", \"#9a947c\", \"#748b83\", \"#5b756c\"],\n [\"#fcfef5\", \"#e9ffe1\", \"#cdcfb7\", \"#d6e6c3\", \"#fafbe3\"],\n [\"#9cddc8\", \"#bfd8ad\", \"#ddd9ab\", \"#f7af63\", \"#633d2e\"],\n [\"#30261c\", \"#403831\", \"#36544f\", \"#1f5f61\", \"#0b8185\"],\n [\"#aaff00\", \"#ffaa00\", \"#ff00aa\", \"#aa00ff\", \"#00aaff\"],\n [\"#d1313d\", \"#e5625c\", \"#f9bf76\", \"#8eb2c5\", \"#615375\"],\n [\"#ffe181\", \"#eee9e5\", \"#fad3b2\", \"#ffba7f\", \"#ff9c97\"],\n [\"#73c8a9\", \"#dee1b6\", \"#e1b866\", \"#bd5532\", \"#373b44\"],\n [\"#805841\", \"#dcf7f3\", \"#fffcdd\", \"#ffd8d8\", \"#f5a2a2\"],\n]\n\nexport const getDebugLayoutObject = (lo: any): LayoutDebugObject | null => {\n let {\n x,\n y,\n width,\n height,\n }: { x: number; y: number; width?: number; height?: number } = {\n ...lo,\n ...(lo as any).size,\n ...(lo as any).center,\n ...(lo as any).position,\n }\n\n if (\n lo.x1 !== undefined &&\n lo.x2 !== undefined &&\n lo.y1 !== undefined &&\n lo.y2 !== undefined\n ) {\n x = (lo.x1 + lo.x2) / 2\n y = (lo.y1 + lo.y2) / 2\n width = Math.abs(lo.x1 - lo.x2)\n height = Math.abs(lo.y1 - lo.y2)\n }\n\n const title = lo.text || lo.name || lo.source?.text || lo.source?.name || \"?\"\n const content = lo\n\n if (x === undefined || y === undefined) return null\n\n if (width === undefined) {\n if (\"outer_diameter\" in lo) {\n width = lo.outer_diameter\n height = lo.outer_diameter\n }\n }\n\n if (width === undefined || height === undefined) {\n width = 0.1\n height = 0.1\n }\n\n return {\n x,\n y,\n width,\n height,\n title,\n content,\n bg_color:\n nice_color_palettes[\n stringHash((lo as any).type || title) % nice_color_palettes.length\n ]?.[4] ?? \"#f00\",\n }\n}\n","export const isTruthy = <T>(value: T): value is NonNullable<T> => Boolean(value)\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getDebugLayoutObject } from \"./utils/get-layout-debug-object\"\nimport { isTruthy } from \"./utils/is-truthy\"\n\nexport const findBoundsAndCenter = (\n elements: AnyCircuitElement[],\n): { center: { x: number; y: number }; width: number; height: number } => {\n const debugObjects = elements\n .filter((elm) => elm.type.startsWith(\"pcb_\"))\n .concat(\n elements\n .filter((elm) => elm.type === \"pcb_trace\")\n // @ts-ignore\n .flatMap((elm: PcbTrace) => elm.route),\n )\n .map((elm) => getDebugLayoutObject(elm))\n .filter(isTruthy)\n\n if (debugObjects.length === 0)\n return { center: { x: 0, y: 0 }, width: 0, height: 0 }\n\n let minX = debugObjects[0]!.x - debugObjects[0]!.width / 2\n let maxX = debugObjects[0]!.x + debugObjects[0]!.width / 2\n let minY = debugObjects[0]!.y - debugObjects[0]!.height / 2\n let maxY = debugObjects[0]!.y + debugObjects[0]!.height / 2\n\n for (const obj of debugObjects.slice(1)) {\n minX = Math.min(minX, obj.x - obj.width / 2)\n maxX = Math.max(maxX, obj.x + obj.width / 2)\n minY = Math.min(minY, obj.y - obj.height / 2)\n maxY = Math.max(maxY, obj.y + obj.height / 2)\n }\n\n const width = maxX - minX\n const height = maxY - minY\n const center = { x: minX + width / 2, y: minY + height / 2 }\n\n return { center, width, height }\n}\n","import { useMemo } from \"react\"\nimport { createContext, useContext } from \"react\"\nimport { createStore, type StateProps } from \"../global-store\"\n\nexport const StoreContext = createContext(null)\n\nexport const ContextProviders = ({\n children,\n initialState,\n}: { children?: any; initialState?: Partial<StateProps> }) => {\n const store = useMemo(() => createStore(initialState), [])\n\n return (\n <StoreContext.Provider value={store as any}>\n {children}\n </StoreContext.Provider>\n )\n}\n","import {\n createStore as createZustandStore,\n useStore as useZustandStore,\n UseBoundStore,\n} from \"zustand\"\nimport { StoreContext } from \"./components/ContextProviders\"\nimport type { LayerRef } from \"circuit-json\"\nimport { useContext } from \"react\"\n\nexport interface State {\n selected_layer: LayerRef\n\n pcb_viewer_id: string\n\n in_edit_mode: boolean\n in_move_footprint_mode: boolean\n in_draw_trace_mode: boolean\n is_mouse_over_container: boolean\n is_moving_component: boolean\n is_drawing_trace: boolean\n is_showing_autorouting: boolean\n is_showing_drc_errors: boolean\n\n is_showing_multiple_traces_length: boolean\n is_showing_rats_nest: boolean\n\n selectLayer: (layer: LayerRef) => void\n setEditMode: (mode: \"off\" | \"move_footprint\" | \"draw_trace\") => void\n setIsMovingComponent: (is_moving: boolean) => void\n setIsDrawingTrace: (is_drawing: boolean) => void\n setIsShowingRatsNest: (is_showing: boolean) => void\n setIsMouseOverContainer: (is_focused: boolean) => void\n setIsShowingAutorouting: (is_showing: boolean) => void\n setIsShowingMultipleTracesLength: (is_showing: boolean) => void\n setIsShowingDrcErrors: (is_showing: boolean) => void\n}\n\nexport type StateProps = {\n [key in keyof State]: State[key] extends boolean ? boolean : never\n}\n\nexport const createStore = (initialState: Partial<StateProps> = {}) =>\n createZustandStore<State>(\n (set) =>\n ({\n selected_layer: \"top\",\n\n pcb_viewer_id: `pcb_viewer_${Math.random().toString().slice(2, 10)}`,\n\n in_edit_mode: false,\n in_move_footprint_mode: false,\n in_draw_trace_mode: false,\n\n is_moving_component: false,\n is_drawing_trace: false,\n is_mouse_over_container: false,\n\n is_showing_multiple_traces_length: false,\n is_showing_rats_nest: false,\n is_showing_autorouting: true,\n is_showing_drc_errors: true,\n ...initialState,\n\n selectLayer: (layer) => set({ selected_layer: layer }),\n setEditMode: (mode) =>\n set({\n in_edit_mode: mode !== \"off\",\n in_move_footprint_mode: mode === \"move_footprint\",\n in_draw_trace_mode: mode === \"draw_trace\",\n is_moving_component: false,\n is_drawing_trace: false,\n }),\n setIsShowingRatsNest: (is_showing) =>\n set({ is_showing_rats_nest: is_showing }),\n setIsMovingComponent: (is_moving) =>\n set({ is_moving_component: is_moving }),\n setIsDrawingTrace: (is_drawing) =>\n set({ is_drawing_trace: is_drawing }),\n setIsMouseOverContainer: (is_focused) =>\n set({ is_mouse_over_container: is_focused }),\n setIsShowingMultipleTracesLength: (is_showing) =>\n set({ is_showing_multiple_traces_length: is_showing }),\n setIsShowingAutorouting: (is_showing) =>\n set({ is_showing_autorouting: is_showing }),\n setIsShowingDrcErrors: (is_showing) =>\n set({ is_showing_drc_errors: is_showing }),\n }) as const,\n )\n\nexport const useGlobalStore = <T = State>(s?: (state: State) => T): T => {\n const store = useContext(StoreContext)\n\n return useZustandStore(store as any, s as any)\n}\n","import { useGlobalStore } from \"global-store\"\nimport { useEffect } from \"react\"\nimport {\n toast as ogToast,\n ToastContainer as OgToastContainer,\n} from \"react-toastify\"\nimport { injectStyle } from \"react-toastify/dist/inject-style\"\n\nexport const useToast = () => {\n const pcb_viewer_id = useGlobalStore((s) => s.pcb_viewer_id)\n const toast = (message: string, opts?: Parameters<typeof ogToast>[1]) =>\n ogToast(message, {\n containerId: pcb_viewer_id,\n ...opts,\n })\n\n toast.error = (message: string, opts?: Parameters<typeof ogToast.error>[1]) =>\n ogToast.error(message, {\n containerId: pcb_viewer_id,\n ...opts,\n })\n\n // TODO add container id to this\n toast.promise = ogToast.promise\n\n return toast as typeof ogToast\n}\n\nexport const ToastContainer = () => {\n useEffect(() => {\n injectStyle()\n }, [])\n const pcb_viewer_id = useGlobalStore((s) => s.pcb_viewer_id)\n return <OgToastContainer position=\"top-center\" containerId={pcb_viewer_id} />\n}\n","export var noop = function () { };\nexport function on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexport function off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexport var isBrowser = typeof window !== 'undefined';\nexport var isNavigator = typeof navigator !== 'undefined';\n","import { useEffect, useLayoutEffect } from 'react';\nimport { isBrowser } from './misc/util';\nvar useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;\n","import { useMemo, useState } from 'react';\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';\nimport { isBrowser, noop } from './misc/util';\nvar defaultState = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n};\nfunction useMeasure() {\n var _a = useState(null), element = _a[0], ref = _a[1];\n var _b = useState(defaultState), rect = _b[0], setRect = _b[1];\n var observer = useMemo(function () {\n return new window.ResizeObserver(function (entries) {\n if (entries[0]) {\n var _a = entries[0].contentRect, x = _a.x, y = _a.y, width = _a.width, height = _a.height, top_1 = _a.top, left = _a.left, bottom = _a.bottom, right = _a.right;\n setRect({ x: x, y: y, width: width, height: height, top: top_1, left: left, bottom: bottom, right: right });\n }\n });\n }, []);\n useIsomorphicLayoutEffect(function () {\n if (!element)\n return;\n observer.observe(element);\n return function () {\n observer.disconnect();\n };\n }, [element]);\n return [ref, rect];\n}\nexport default isBrowser && typeof window.ResizeObserver !== 'undefined'\n ? useMeasure\n : (function () { return [noop, defaultState]; });\n","import { Matrix, compose, translate, scale } from \"transformation-matrix\"\n\ntype Point = { x: number; y: number }\n\ninterface PinchInput {\n initialTransform: Matrix\n initialTouch1: Point\n initialTouch2: Point\n finalTouch1: Point | null\n finalTouch2: Point | null\n}\n\nexport const computePinchTransform = ({\n initialTransform,\n initialTouch1,\n initialTouch2,\n finalTouch1,\n finalTouch2,\n}: PinchInput): Matrix => {\n if (!finalTouch1 || !finalTouch2) {\n return initialTransform\n }\n // Calculate initial and current centers\n const initialCenter = {\n x: (initialTouch1.x + initialTouch2.x) / 2,\n y: (initialTouch1.y + initialTouch2.y) / 2,\n }\n const currentCenter = {\n x: (finalTouch1.x + finalTouch2.x) / 2,\n y: (finalTouch1.y + finalTouch2.y) / 2,\n }\n\n // Calculate initial and current distances between touch points\n const initialDist = Math.hypot(\n initialTouch2.x - initialTouch1.x,\n initialTouch2.y - initialTouch1.y,\n )\n const currentDist = Math.hypot(\n finalTouch2.x - finalTouch1.x,\n finalTouch2.y - finalTouch1.y,\n )\n\n // Calculate the scaling factor, prevent division by zero\n const s = initialDist === 0 ? 1 : currentDist / initialDist\n\n // Calculate the translation delta\n const deltaX = currentCenter.x - initialCenter.x\n const deltaY = currentCenter.y - initialCenter.y\n\n // Compose the transformation matrix\n // 1. Translate by the delta movement of the center\n // 2. Translate to the initial center\n // 3. Scale around the initial center\n // 4. Translate back from the initial center\n // 5. Apply the initial transform before the pinch started\n const pinchTransform = compose(\n translate(deltaX, deltaY),\n translate(initialCenter.x, initialCenter.y),\n scale(s, s),\n translate(-initialCenter.x, -initialCenter.y),\n initialTransform,\n )\n\n return pinchTransform\n}\n","import {\n Matrix,\n identity,\n translate,\n compose,\n applyToPoint,\n scale,\n} from \"transformation-matrix\"\n// import { fromTwoMovingPoints } from \"transformation-matrix\" // Not used currently\nimport { useCallback, useEffect, useReducer, useRef, useState } from \"react\"\nimport { computePinchTransform } from \"./computePinchTransform\"\n\ntype Point = { x: number; y: number }\n\ninterface Props {\n canvasElm?: HTMLElement\n transform?: Matrix\n initialTransform?: Matrix\n onSetTransform?: (transform: Matrix) => any\n enabled?: boolean\n shouldDrag?: (e: MouseEvent | TouchEvent | WheelEvent) => boolean\n}\n\nexport const useMouseMatrixTransform = (props: Props = {}) => {\n const extRef = useRef<any>(null)\n const [lastDragCancelTime, setLastDragCancelTime] = useState(0)\n const outerCanvasElm = props.canvasElm ?? extRef.current\n const [internalTransform, setInternalTransform] = useState<Matrix>(\n props.initialTransform ?? identity(),\n )\n const [waitCounter, setWaitCounter] = useState(0)\n const [extChangeCounter, incExtChangeCounter] = useReducer((s) => s + 1, 0)\n\n const setTransform = useCallback(\n (newTransform: Matrix) => {\n if (props.onSetTransform) {\n props.onSetTransform(newTransform)\n }\n if (!props.transform) {\n setInternalTransform(newTransform)\n }\n },\n [props.onSetTransform, setInternalTransform],\n )\n\n const setTransformExt = useCallback(\n (newTransform: Matrix) => {\n setTransform(newTransform)\n incExtChangeCounter()\n },\n [setTransform],\n )\n\n const transform = props.transform ?? internalTransform\n\n const cancelDrag = useCallback(() => {\n setLastDragCancelTime(Date.now())\n }, [])\n\n const gestureModeRef = useRef<\"none\" | \"drag\" | \"pinch\">(\"none\")\n // const lastTouchRef = useRef<{ x: number; y: number } | null>(null) // No longer needed for delta calculation\n const dragDataRef = useRef<{\n initialTransform: Matrix\n initialTouch: Point\n } | null>(null)\n const pinchDataRef = useRef<{\n initialTransform: Matrix\n initialTouch1: Point\n initialTouch2: Point\n finalTouch1: Point | null\n finalTouch2: Point | null\n } | null>(null)\n\n useEffect(() => {\n const canvasElm: HTMLCanvasElement | null =\n props.canvasElm ?? extRef.current\n if (canvasElm && !outerCanvasElm) {\n setWaitCounter(waitCounter + 1)\n return\n }\n if (!canvasElm) {\n const timeout = setTimeout(() => {\n setWaitCounter(waitCounter + 1)\n }, 100)\n return () => clearTimeout(timeout)\n }\n let init_tf = props.transform ?? internalTransform\n\n let m0: Point = { x: 0, y: 0 },\n m1: Point = { x: 0, y: 0 },\n md = false,\n mlastrel: Point = { x: 0, y: 0 }\n\n const getMousePos = (e: MouseEvent) => {\n return {\n x: e.pageX - canvasElm.getBoundingClientRect().left - window.scrollX,\n y: e.pageY - canvasElm.getBoundingClientRect().top - window.scrollY,\n }\n }\n\n function handleMouseDown(e: MouseEvent) {\n if (props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n m0 = getMousePos(e)\n if (Date.now() - lastDragCancelTime < 100) return\n md = true\n e.preventDefault()\n }\n function handleMouseUp(e: MouseEvent) {\n if (!md || props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n m1 = getMousePos(e)\n\n const new_tf = compose(translate(m1.x - m0.x, m1.y - m0.y), init_tf)\n setTransform(new_tf)\n init_tf = new_tf\n\n md = false\n }\n function handleMouseMove(e: MouseEvent) {\n mlastrel = getMousePos(e)\n if (!md || props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n m1 = getMousePos(e)\n const new_tf = compose(translate(m1.x - m0.x, m1.y - m0.y), init_tf)\n setTransform(new_tf)\n }\n function handleMouseWheel(e: WheelEvent) {\n if (props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n const center = getMousePos(e)\n const new_tf = compose(\n translate(center.x, center.y),\n scale(1 - e.deltaY / 1000, 1 - e.deltaY / 1000),\n translate(-center.x, -center.y),\n init_tf,\n )\n setTransform(new_tf)\n init_tf = new_tf\n e.preventDefault()\n }\n function handleMouseOut(e: MouseEvent) {\n if (!md) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n\n if (canvasElm) {\n const boundingBox = canvasElm.getBoundingClientRect()\n if (\n e.clientX >= boundingBox.left + 10 &&\n e.clientX <= boundingBox.right - 10 &&\n e.clientY >= boundingBox.top + 10 &&\n e.clientY <= boundingBox.bottom - 10\n ) {\n return\n }\n }\n\n md = false\n m1 = getMousePos(e)\n const new_tf = compose(translate(m1.x - m0.x, m1.y - m0.y), init_tf)\n setTransform(new_tf)\n init_tf = new_tf\n }\n\n function handleTouchStart(e: TouchEvent) {\n e.preventDefault()\n if (props.enabled === false) return\n if (e.touches.length === 1) {\n // Start Drag\n gestureModeRef.current = \"drag\"\n const touch = e.touches[0]\n dragDataRef.current = {\n initialTransform: init_tf, // Capture transform before drag starts\n initialTouch: { x: touch.clientX, y: touch.clientY },\n }\n } else if (e.touches.length === 2) {\n // Start Pinch\n gestureModeRef.current = \"pinch\"\n const touch1 = e.touches[0]\n const touch2 = e.touches[1]\n pinchDataRef.current = {\n initialTransform: init_tf, // Store the transform at the start of the pinch\n initialTouch1: { x: touch1.clientX, y: touch1.clientY },\n initialTouch2: { x: touch2.clientX, y: touch2.clientY },\n finalTouch1: null,\n finalTouch2: null,\n }\n }\n }\n\n function handleTouchMove(e: TouchEvent) {\n e.preventDefault()\n if (props.enabled === false) return\n if (\n gestureModeRef.current === \"drag\" &&\n e.touches.length === 1 &&\n dragDataRef.current // Check if drag has started\n ) {\n // Handle Drag Move\n const touch = e.touches[0]\n const currentTouch = { x: touch.clientX, y: touch.clientY }\n const deltaX = currentTouch.x - dragDataRef.current.initialTouch.x\n const deltaY = currentTouch.y - dragDataRef.current.initialTouch.y\n\n // Apply delta to the transform that existed *before* the drag started\n const new_tf = compose(\n translate(deltaX, deltaY),\n dragDataRef.current.initialTransform,\n )\n setTransform(new_tf)\n // Do not update init_tf here\n } else if (\n gestureModeRef.current === \"pinch\" &&\n e.touches.length === 2 &&\n pinchDataRef.current\n ) {\n const touch1 = e.touches[0]\n const touch2 = e.touches[1]\n\n pinchDataRef.current.finalTouch1 = {\n x: touch1.clientX,\n y: touch1.clientY,\n }\n pinchDataRef.current.finalTouch2 = {\n x: touch2.clientX,\n y: touch2.clientY,\n }\n\n const new_tf = computePinchTransform(pinchDataRef.current)\n setTransform(new_tf)\n // Don't update init_tf here, only on touch end\n }\n }\n\n function handleTouchEnd(e: TouchEvent) {\n e.preventDefault()\n\n // Use changedTouches to get the final position of the lifted finger(s)\n const finalTouch = e.changedTouches[0]\n\n if (\n gestureModeRef.current === \"drag\" &&\n dragDataRef.current && // Check if drag was active\n finalTouch // Ensure we have the final touch info\n ) {\n // Drag End\n const finalTouchPos = { x: finalTouch.clientX, y: finalTouch.clientY }\n const deltaX = finalTouchPos.x - dragDataRef.current.initialTouch.x\n const deltaY = finalTouchPos.y - dragDataRef.current.initialTouch.y\n\n // Calculate the final transform based on the total delta\n const new_tf = compose(\n translate(deltaX, deltaY),\n dragDataRef.current.initialTransform,\n )\n setTransform(new_tf) // Update the visual state\n init_tf = new_tf // Lock in the transform for the next gesture\n } else if (gestureModeRef.current === \"pinch\" && pinchDataRef.current) {\n const new_tf = computePinchTransform(pinchDataRef.current)\n setTransform(new_tf) // Ensure the final state is set\n init_tf = new_tf // Update init_tf\n }\n\n // Reset gesture state and data refs\n gestureModeRef.current = \"none\"\n // lastTouchRef.current = null // No longer used\n dragDataRef.current = null\n pinchDataRef.current = null\n }\n\n canvasElm.addEventListener(\"mousedown\", handleMouseDown)\n canvasElm.addEventListener(\"mouseup\", handleMouseUp)\n window.addEventListener(\"mousemove\", handleMouseMove)\n canvasElm.addEventListener(\"mouseout\", handleMouseOut)\n canvasElm.addEventListener(\"wheel\", handleMouseWheel)\n\n canvasElm.addEventListener(\"touchstart\", handleTouchStart, {\n passive: false,\n })\n canvasElm.addEventListener(\"touchmove\", handleTouchMove, {\n passive: false,\n })\n canvasElm.addEventListener(\"touchend\", handleTouchEnd, { passive: false })\n canvasElm.addEventListener(\"touchcancel\", handleTouchEnd, {\n passive: false,\n })\n\n return () => {\n canvasElm.removeEventListener(\"mousedown\", handleMouseDown)\n canvasElm.removeEventListener(\"mouseup\", handleMouseUp)\n window.removeEventListener(\"mousemove\", handleMouseMove)\n canvasElm.removeEventListener(\"mouseout\", handleMouseOut)\n canvasElm.removeEventListener(\"wheel\", handleMouseWheel)\n\n canvasElm.removeEventListener(\"touchstart\", handleTouchStart)\n canvasElm.removeEventListener(\"touchmove\", handleTouchMove)\n canvasElm.removeEventListener(\"touchend\", handleTouchEnd)\n canvasElm.removeEventListener(\"touchcancel\", handleTouchEnd)\n }\n }, [\n outerCanvasElm,\n waitCounter,\n extChangeCounter,\n lastDragCancelTime,\n props.enabled,\n props.shouldDrag,\n ])\n\n const applyTransformToPoint = useCallback(\n (obj: Point | [number, number]) => applyToPoint(transform, obj),\n [transform],\n )\n\n return {\n ref: extRef,\n transform,\n applyTransformToPoint,\n setTransform: setTransformExt,\n cancelDrag,\n }\n}\n\nexport default useMouseMatrixTransform\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getFullConnectivityMapFromCircuitJson } from \"circuit-json-to-connectivity-map\"\nimport type { GraphicsObject } from \"graphics-debug\"\nimport type { GridConfig, Primitive } from \"lib/types\"\nimport { addInteractionMetadataToPrimitives } from \"lib/util/addInteractionMetadataToPrimitives\"\nimport { useCallback, useMemo, useState } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { convertElementToPrimitives } from \"../lib/convert-element-to-primitive\"\nimport { CanvasPrimitiveRenderer } from \"./CanvasPrimitiveRenderer\"\nimport { DebugGraphicsOverlay } from \"./DebugGraphicsOverlay\"\nimport { WarningGraphicsOverlay } from \"./WarningGraphicsOverlay\"\nimport { DimensionOverlay } from \"./DimensionOverlay\"\nimport { EditPlacementOverlay } from \"./EditPlacementOverlay\"\nimport { EditTraceHintOverlay } from \"./EditTraceHintOverlay\"\nimport { ErrorOverlay } from \"./ErrorOverlay\"\nimport { MouseElementTracker } from \"./MouseElementTracker\"\nimport { RatsNestOverlay } from \"./RatsNestOverlay\"\nimport { ToolbarOverlay } from \"./ToolbarOverlay\"\nimport type { ManualEditEvent } from \"@tscircuit/props\"\n\nexport interface CanvasElementsRendererProps {\n elements: AnyCircuitElement[]\n debugGraphics?: GraphicsObject | null\n transform?: Matrix\n width?: number\n height?: number\n grid?: GridConfig\n allowEditing: boolean\n focusOnHover?: boolean\n cancelPanDrag: () => void\n onCreateEditEvent: (event: ManualEditEvent) => void\n onModifyEditEvent: (event: Partial<ManualEditEvent>) => void\n}\n\nexport const CanvasElementsRenderer = (props: CanvasElementsRendererProps) => {\n const { transform, elements } = props\n const [primitivesWithoutInteractionMetadata, connectivityMap] =\n useMemo(() => {\n const primitivesWithoutInteractionMetadata = props.elements.flatMap(\n (elm) => convertElementToPrimitives(elm, props.elements),\n )\n const connectivityMap = getFullConnectivityMapFromCircuitJson(\n props.elements as any,\n )\n return [primitivesWithoutInteractionMetadata, connectivityMap]\n }, [props.elements])\n\n const [hoverState, setHoverState] = useState({\n drawingObjectIdsWithMouseOver: new Set<string>(),\n primitiveIdsInMousedOverNet: [] as string[],\n })\n\n const primitives = useMemo(() => {\n return addInteractionMetadataToPrimitives({\n primitivesWithoutInteractionMetadata,\n drawingObjectIdsWithMouseOver: hoverState.drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet: hoverState.primitiveIdsInMousedOverNet,\n })\n }, [primitivesWithoutInteractionMetadata, hoverState])\n\n const onMouseOverPrimitives = useCallback(\n (primitivesHoveredOver: Primitive[]) => {\n const primitiveIdsInMousedOverNet: string[] = []\n for (const primitive of primitivesHoveredOver) {\n if (primitive._element) {\n const connectedPrimitivesList = connectivityMap.getNetConnectedToId(\n \"pcb_port_id\" in primitive._element\n ? primitive._element?.pcb_port_id!\n : \"pcb_trace_id\" in primitive._element\n ? primitive._element?.pcb_trace_id!\n : \"\",\n )\n primitiveIdsInMousedOverNet.push(\n ...connectivityMap.getIdsConnectedToNet(connectedPrimitivesList!),\n )\n }\n }\n\n const drawingObjectIdsWithMouseOver = new Set(\n primitivesHoveredOver.map((p) => p._pcb_drawing_object_id),\n )\n\n setHoverState({\n drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet,\n })\n },\n [connectivityMap],\n )\n\n return (\n <MouseElementTracker\n elements={elements}\n transform={transform}\n primitives={primitivesWithoutInteractionMetadata}\n onMouseHoverOverPrimitives={onMouseOverPrimitives}\n >\n <EditPlacementOverlay\n disabled={!props.allowEditing}\n transform={transform}\n soup={elements}\n cancelPanDrag={props.cancelPanDrag}\n onCreateEditEvent={props.onCreateEditEvent}\n onModifyEditEvent={props.onModifyEditEvent}\n >\n <EditTraceHintOverlay\n disabled={!props.allowEditing}\n transform={transform}\n soup={elements}\n cancelPanDrag={props.cancelPanDrag}\n onCreateEditEvent={props.onCreateEditEvent as any}\n onModifyEditEvent={props.onModifyEditEvent as any}\n >\n <DimensionOverlay\n transform={transform!}\n focusOnHover={props.focusOnHover}\n >\n <ToolbarOverlay elements={elements}>\n <ErrorOverlay transform={transform} elements={elements}>\n <RatsNestOverlay transform={transform} soup={elements}>\n <DebugGraphicsOverlay\n transform={transform}\n debugGraphics={props.debugGraphics}\n >\n <WarningGraphicsOverlay\n transform={transform}\n elements={elements}\n >\n <CanvasPrimitiveRenderer\n transform={transform}\n primitives={primitives}\n width={props.width}\n height={props.height}\n grid={props.grid}\n />\n </WarningGraphicsOverlay>\n </DebugGraphicsOverlay>\n </RatsNestOverlay>\n </ErrorOverlay>\n </ToolbarOverlay>\n </DimensionOverlay>\n </EditTraceHintOverlay>\n </EditPlacementOverlay>\n </MouseElementTracker>\n )\n}\n","import { Primitive } from \"lib/types\"\n\nexport function addInteractionMetadataToPrimitives({\n primitivesWithoutInteractionMetadata,\n drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet,\n}: {\n primitivesWithoutInteractionMetadata: Primitive[]\n drawingObjectIdsWithMouseOver: Set<string>\n primitiveIdsInMousedOverNet: string[]\n}): Primitive[] {\n const newPrimitives = []\n for (const primitive of primitivesWithoutInteractionMetadata) {\n const newPrimitive = { ...primitive }\n if (primitive?.layer === \"drill\") {\n newPrimitive.is_in_highlighted_net = false\n newPrimitive.is_mouse_over = false\n } else if (\n drawingObjectIdsWithMouseOver.has(primitive._pcb_drawing_object_id)\n ) {\n newPrimitive.is_mouse_over = true\n } else if (\n primitive._element &&\n ((\"pcb_trace_id\" in primitive._element &&\n primitiveIdsInMousedOverNet.includes(\n primitive._element.pcb_trace_id!,\n )) ||\n (\"pcb_port_id\" in primitive._element &&\n primitiveIdsInMousedOverNet.includes(\n primitive._element.pcb_port_id!,\n )))\n ) {\n newPrimitive.is_in_highlighted_net = true\n } else {\n newPrimitive.is_in_highlighted_net = false\n newPrimitive.is_mouse_over = false\n }\n newPrimitives.push(newPrimitive)\n }\n return newPrimitives\n}\n","export interface Point {\n x: number\n y: number\n trace_width?: number\n}\n\nexport function getExpandedStroke(\n strokeInput: (Point | [number, number] | number[])[],\n defaultWidth: number,\n): Point[] {\n if (strokeInput.length < 2) {\n throw new Error(\"Stroke must have at least two points\")\n }\n\n const stroke: Point[] = strokeInput.map((point) => {\n if (Array.isArray(point)) {\n return { x: point[0], y: point[1] }\n }\n return point as Point\n })\n\n const leftSide: Point[] = []\n const rightSide: Point[] = []\n\n function getNormal(p1: Point, p2: Point): Point {\n const dx = p2.x - p1.x\n const dy = p2.y - p1.y\n const length = Math.sqrt(dx * dx + dy * dy)\n return { x: -dy / length, y: dx / length }\n }\n\n function addPoint(\n point: Point,\n normal: Point,\n factor: number,\n width: number,\n ) {\n const halfWidth = width / 2\n const newPoint = {\n x: point.x + normal.x * halfWidth * factor,\n y: point.y + normal.y * halfWidth * factor,\n }\n if (factor > 0) {\n leftSide.push(newPoint)\n } else {\n rightSide.unshift(newPoint)\n }\n }\n\n // Handle the first point\n const firstNormal = getNormal(stroke[0]!, stroke[1]!)\n const firstWidth = stroke[0]!.trace_width ?? defaultWidth\n addPoint(stroke[0]!, firstNormal, 1, firstWidth)\n addPoint(stroke[0]!, firstNormal, -1, firstWidth)\n\n // Handle middle points\n for (let i = 1; i < stroke.length - 1; i++) {\n const prev = stroke[i - 1]!\n const current = stroke[i]!\n const next = stroke[i + 1]!\n\n const normalPrev = getNormal(prev, current)\n const normalNext = getNormal(current, next)\n\n // Calculate miter line\n const miterX = normalPrev.x + normalNext.x\n const miterY = normalPrev.y + normalNext.y\n const miterLength = Math.sqrt(miterX * miterX + miterY * miterY)\n\n const currentWidth = current.trace_width ?? defaultWidth\n\n // Check if miter is too long (sharp corner)\n const miterLimit = 2 // Adjust this value to control when to bevel\n if (miterLength / 2 > miterLimit * (currentWidth / 2)) {\n // Use bevel join\n addPoint(current, normalPrev, 1, currentWidth)\n addPoint(current, normalNext, 1, currentWidth)\n addPoint(current, normalPrev, -1, currentWidth)\n addPoint(current, normalNext, -1, currentWidth)\n } else {\n // Use miter join\n const scale = 1 / miterLength\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n 1,\n currentWidth,\n )\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n -1,\n currentWidth,\n )\n }\n }\n\n // Handle the last point\n const lastNormal = getNormal(\n stroke[stroke.length - 2]!,\n stroke[stroke.length - 1]!,\n )\n const lastWidth = stroke[stroke.length - 1]!.trace_width ?? defaultWidth\n addPoint(stroke[stroke.length - 1]!, lastNormal, 1, lastWidth)\n addPoint(stroke[stroke.length - 1]!, lastNormal, -1, lastWidth)\n\n // Combine left and right sides to form a closed polygon\n return [...leftSide, ...rightSide]\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\nimport type { Primitive } from \"./types\"\nimport { type Point, getExpandedStroke } from \"./util/expand-stroke\"\n\ntype MetaData = {\n _parent_pcb_component?: any\n _parent_source_component?: any\n _source_port?: any\n}\n\nlet globalPcbDrawingObjectCount = 0\n\nexport const getNewPcbDrawingObjectId = (prefix: string) =>\n `${prefix}_${globalPcbDrawingObjectCount++}`\n\nexport const convertElementToPrimitives = (\n element: AnyCircuitElement,\n allElements: AnyCircuitElement[],\n): (Primitive & MetaData)[] => {\n const _parent_pcb_component =\n \"pcb_component_id\" in element\n ? allElements.find(\n (elm) =>\n elm.type === \"pcb_component\" &&\n elm.pcb_component_id === element.pcb_component_id,\n )\n : undefined\n const _parent_source_component =\n _parent_pcb_component && \"source_component_id\" in _parent_pcb_component\n ? allElements.find(\n (elm) =>\n elm.type === \"source_component\" &&\n elm.source_component_id ===\n _parent_pcb_component.source_component_id,\n )\n : undefined\n\n const _source_port_id =\n \"source_port_id\" in element\n ? element.source_port_id\n : \"pcb_port_id\" in element\n ? su(allElements as any).pcb_port.get(element.pcb_port_id!)\n ?.source_port_id\n : undefined\n\n const _source_port = _source_port_id\n ? allElements.find(\n (e) => e.type === \"source_port\" && e.source_port_id === _source_port_id,\n )\n : undefined\n\n switch (element.type) {\n case \"pcb_board\": {\n const { width, height, center, outline } = element\n\n if (outline && outline.length > 2) {\n return outline.map((point, index, array) => {\n return {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: point.x,\n y1: point.y,\n x2: index === array.length - 1 ? array[0].x : array[index + 1].x,\n y2: index === array.length - 1 ? array[0].y : array[index + 1].y,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n }\n })\n }\n return [\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x - width / 2,\n y1: center.y - height / 2,\n x2: center.x + width / 2,\n y2: center.y - height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x - width / 2,\n y1: center.y + height / 2,\n x2: center.x + width / 2,\n y2: center.y + height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x - width / 2,\n y1: center.y - height / 2,\n x2: center.x - width / 2,\n y2: center.y + height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x + width / 2,\n y1: center.y - height / 2,\n x2: center.x + width / 2,\n y2: center.y + height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n ]\n }\n case \"pcb_smtpad\": {\n if (element.shape === \"rect\" || element.shape === \"rotated_rect\") {\n const { shape, x, y, width, height, layer } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x,\n y,\n w: width,\n h: height,\n layer: layer || \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n ]\n } else if (element.shape === \"circle\") {\n const { x, y, radius, layer } = element\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: radius,\n layer: layer || \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n ]\n }\n return []\n }\n case \"pcb_hole\": {\n if (element.hole_shape === \"circle\" || !element.hole_shape) {\n const { x, y, hole_diameter } = element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n // TODO square hole\n // TODO oval hole\n return []\n }\n case \"pcb_plated_hole\": {\n if (element.shape === \"circle\") {\n const { x, y, hole_diameter, outer_diameter } = element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: outer_diameter / 2,\n // TODO support layer on pcb_plated_hole\n layer: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n // TODO support layer on pcb_plated_hole\n layer: \"drill\",\n _element: element,\n\n // double highlights are annoying\n // _element: element,\n },\n ]\n } else if (element.shape === \"oval\") {\n const { x, y, outer_height, outer_width, hole_height, hole_width } =\n element\n\n return [\n {\n _pcb_drawing_object_id: `oval_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"oval\",\n x,\n y,\n rX: outer_width / 2,\n rY: outer_height / 2,\n layer: \"top\", // TODO: Confirm layer handling for oval plated holes\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `oval_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"oval\",\n x,\n y,\n rX: hole_width / 2,\n rY: hole_height / 2,\n layer: \"drill\",\n },\n ]\n } else if (element.shape === \"pill\") {\n const { x, y, outer_height, outer_width, hole_height, hole_width } =\n element\n\n return [\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"pill\",\n x,\n y,\n w: outer_width,\n h: outer_height,\n layer: \"top\", // TODO: Confirm layer handling for oval plated holes\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"pill\",\n x,\n y,\n w: hole_width,\n h: hole_height,\n layer: \"drill\",\n },\n ]\n } else if (element.shape === \"circular_hole_with_rect_pad\") {\n const { x, y, hole_diameter, rect_pad_width, rect_pad_height } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x,\n y,\n w: rect_pad_width,\n h: rect_pad_height,\n layer: \"top\", // Rectangular pad on top layer\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n layer: \"drill\", // Circular hole in drill layer\n },\n ]\n } else if (element.shape === \"pill_hole_with_rect_pad\") {\n const {\n x,\n y,\n hole_width,\n hole_height,\n rect_pad_width,\n rect_pad_height,\n } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x,\n y,\n w: rect_pad_width,\n h: rect_pad_height,\n layer: \"top\", // Rectangular pad on top layer\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"pill\",\n x,\n y,\n w: hole_width,\n h: hole_height,\n layer: \"drill\", // Pill-shaped hole in drill layer\n },\n ]\n } else {\n return []\n }\n }\n case \"pcb_keepout\": {\n if (element.shape === \"circle\") {\n const { center, radius } = element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x: center.x,\n y: center.y,\n r: radius,\n layer: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n mesh_fill: true,\n },\n ]\n } else if (element.shape === \"rect\") {\n const { center, width, height } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x: center.x,\n y: center.y,\n w: width,\n h: height,\n layer: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n mesh_fill: true,\n },\n ]\n }\n break\n }\n case \"pcb_trace\": {\n const primitives: Primitive[] = []\n\n if (element.route_thickness_mode === \"interpolated\") {\n // Prepare the stroke input\n const strokeInput: Point[] = element.route.map((r) => ({\n x: r.x,\n y: r.y,\n trace_width: r.route_type === \"wire\" ? r.width : 0.5,\n }))\n\n // Use getExpandedStroke to generate the polygon points\n const expandedStroke = getExpandedStroke(strokeInput, 0.5) // Use 0.5 as default width\n\n const layer = (element.route[0] as any).layer\n\n // Generate a single polygon primitive from the expanded stroke\n primitives.push({\n _pcb_drawing_object_id: `polygon_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"polygon\",\n points: expandedStroke,\n layer, // same layer for all points\n })\n\n // Add circles for vias\n element.route.forEach((r) => {\n if (r.route_type === \"via\") {\n primitives.push({\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"circle\",\n x: r.x,\n y: r.y,\n r: (r as any).outer_diameter / 2,\n layer: (r as any).from_layer,\n })\n }\n })\n\n return primitives\n }\n let prevX: number | null = null\n let prevY: number | null = null\n\n for (const route of element.route) {\n if (route.route_type === \"wire\") {\n if (prevX !== null && prevY !== null) {\n primitives.push({\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"line\",\n x1: prevX,\n y1: prevY,\n x2: route.x,\n y2: route.y,\n width: route.width,\n squareCap: false,\n layer: route.layer,\n })\n }\n\n prevX = route.x\n prevY = route.y\n }\n }\n\n return primitives\n }\n // The builder currently outputs these as smtpads and holes, so pcb_via isn't\n // used, but that maybe should be changed\n case \"pcb_via\": {\n const { x, y, outer_diameter, hole_diameter, from_layer, to_layer } =\n element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: outer_diameter / 2,\n layer: from_layer!,\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n layer: \"drill\",\n _parent_pcb_component,\n _parent_source_component,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: outer_diameter / 2,\n layer: to_layer!,\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n\n case \"pcb_silkscreen_rect\": {\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x: element.center.x,\n y: element.center.y,\n w: element.width,\n h: element.height,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_silkscreen_circle\": {\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x: element.center.x,\n y: element.center.y,\n r: element.radius,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_silkscreen_oval\": {\n return [\n {\n _pcb_drawing_object_id: `oval_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"oval\",\n x: element.center.x,\n y: element.center.y,\n rX: element.radius_x / 2,\n rY: element.radius_y / 2,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n // @ts-ignore\n case \"pcb_silkscreen_pill\": {\n return [\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"pill\",\n // @ts-ignore\n x: element.center.x,\n // @ts-ignore\n y: element.center.y,\n // @ts-ignore\n w: element.width,\n // @ts-ignore\n h: element.height,\n layer:\n // @ts-ignore\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_silkscreen_line\": {\n return [\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: element.x1,\n y1: element.y1,\n x2: element.x2,\n y2: element.y2,\n width: 0.1, // TODO add strokewidth\n squareCap: false,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_fabrication_note_path\":\n case \"pcb_silkscreen_path\": {\n const {\n pcb_component_id,\n route, // Array<{ x: number, y: number }>\n type,\n } = element\n\n let layer:\n | \"bottom_silkscreen\"\n | \"top_silkscreen\"\n | \"bottom_fabrication\"\n | \"top_fabrication\"\n | null\n\n if (type === \"pcb_silkscreen_path\") {\n layer =\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\"\n } else if (type === \"pcb_fabrication_note_path\") {\n layer = \"top_fabrication\"\n }\n\n return route\n .slice(0, -1)\n .map((point, index) => {\n const nextPoint = route[index + 1]\n return {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: point.x,\n y1: point.y,\n x2: nextPoint.x,\n y2: nextPoint.y,\n width: element.stroke_width ?? 0.1,\n squareCap: false,\n layer: layer!,\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n } as Primitive & MetaData\n })\n .filter(Boolean)\n }\n\n case \"pcb_silkscreen_text\": {\n return [\n {\n _pcb_drawing_object_id: `text_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"text\",\n x: element.anchor_position.x,\n y: element.anchor_position.y,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n align: element.anchor_alignment ?? \"center\",\n text: element.text,\n size: element.font_size, // Add the required 'size' property\n ccw_rotation: element.ccw_rotation,\n },\n ]\n }\n\n case \"pcb_fabrication_note_text\": {\n return [\n {\n _pcb_drawing_object_id: getNewPcbDrawingObjectId(\"text\"),\n pcb_drawing_type: \"text\",\n x: element.anchor_position.x,\n y: element.anchor_position.y,\n layer:\n element.layer === \"bottom\"\n ? \"bottom_fabrication\"\n : \"top_fabrication\",\n size: element.font_size,\n align: element.anchor_alignment ?? \"center\",\n text: element.text,\n },\n ]\n }\n case \"pcb_cutout\": {\n const cutoutElement = element as any\n switch (cutoutElement.shape) {\n case \"rect\": {\n return [\n {\n _pcb_drawing_object_id:\n getNewPcbDrawingObjectId(\"pcb_cutout_rect\"),\n pcb_drawing_type: \"rect\",\n x: cutoutElement.center.x,\n y: cutoutElement.center.y,\n w: cutoutElement.width,\n h: cutoutElement.height,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n case \"circle\": {\n return [\n {\n _pcb_drawing_object_id:\n getNewPcbDrawingObjectId(\"pcb_cutout_circle\"),\n pcb_drawing_type: \"circle\",\n x: cutoutElement.center.x,\n y: cutoutElement.center.y,\n r: cutoutElement.radius,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n case \"polygon\": {\n return [\n {\n _pcb_drawing_object_id:\n getNewPcbDrawingObjectId(\"pcb_cutout_polygon\"),\n pcb_drawing_type: \"polygon\",\n points: cutoutElement.points,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n default:\n console.warn(`Unsupported pcb_cutout shape: ${cutoutElement.shape}`)\n return []\n }\n }\n }\n\n // console.warn(`Unsupported element type: ${element.type}`)\n return []\n}\n","import { drawGrid } from \"lib/draw-grid\"\nimport { SuperGrid, toMMSI } from \"react-supergrid\"\nimport React, { useEffect, useRef } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { drawPrimitives } from \"../lib/draw-primitives\"\nimport { Drawer } from \"../lib/Drawer\"\nimport type { GridConfig, Primitive } from \"../lib/types\"\nimport { useGlobalStore } from \"global-store\"\nimport { all_layers } from \"circuit-json\"\n\ninterface Props {\n primitives: Primitive[]\n defaultUnit?: string\n transform?: Matrix\n grid?: GridConfig\n width?: number\n height?: number\n}\n\nconst orderedLayers = [\n \"board\",\n \"bottom_silkscreen\",\n \"bottom\",\n \"top\",\n \"top_silkscreen\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n \"drill\",\n \"other\",\n]\n\nexport const CanvasPrimitiveRenderer = ({\n primitives,\n transform,\n grid,\n width = 500,\n height = 500,\n}: Props) => {\n const canvasRefs = useRef<Record<string, HTMLCanvasElement>>()\n const selectedLayer = useGlobalStore((s) => s.selected_layer)\n\n useEffect(() => {\n if (!canvasRefs.current) return\n if (Object.keys(canvasRefs.current).length === 0) return\n const drawer = new Drawer(canvasRefs.current)\n if (transform) drawer.transform = transform\n drawer.clear()\n drawer.foregroundLayer = selectedLayer\n drawPrimitives(drawer, primitives)\n drawer.orderAndFadeLayers()\n }, [primitives, transform, selectedLayer])\n\n return (\n <div\n style={{\n backgroundColor: \"black\",\n width,\n height,\n position: \"relative\",\n }}\n >\n <SuperGrid\n textColor=\"rgba(0,255,0,0.8)\"\n majorColor=\"rgba(0,255,0,0.4)\"\n minorColor=\"rgba(0,255,0,0.2)\"\n screenSpaceCellSize={200}\n width={width}\n height={height}\n transform={transform!}\n stringifyCoord={(x, y, z) => `${toMMSI(x, z)}, ${toMMSI(y, z)}`}\n />\n {orderedLayers\n .map((l) => l.replace(/-/g, \"\"))\n .map((layer, i) => (\n <canvas\n key={layer}\n className={`pcb-layer-${layer}`}\n ref={(el) => {\n canvasRefs.current ??= {}\n canvasRefs.current[layer] = el!\n }}\n style={{\n position: \"absolute\",\n zIndex: i,\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n }}\n width={width}\n height={height}\n />\n ))}\n </div>\n )\n}\n","import {\n type Matrix,\n applyToPoint,\n compose,\n identity,\n inverse,\n translate,\n} from \"transformation-matrix\"\nimport colors from \"./colors\"\nimport { scaleOnly } from \"./util/scale-only\"\nimport { zIndexMap } from \"./util/z-index-map\"\nimport { Rotation } from \"circuit-json\"\n\nexport interface Aperture {\n shape: \"circle\" | \"square\"\n size: number\n opacity: number\n mode: \"add\" | \"subtract\"\n fontSize: number\n color: string\n layer: string\n}\n\nexport const LAYER_NAME_TO_COLOR = {\n // Standard colors, you shouldn't use these except for testing\n red: \"red\",\n black: \"black\",\n green: \"green\",\n board: \"rgb(255, 255, 255)\",\n other: \"#eee\",\n // TODO more builtin html colors\n\n // Common eagle names\n top: colors.board.copper.f,\n inner1: colors.board.copper.in1,\n inner2: colors.board.copper.in2,\n\n inner4: colors.board.copper.in4,\n inner5: colors.board.copper.in5,\n inner6: colors.board.copper.in6,\n inner7: colors.board.copper.in7,\n inner8: colors.board.copper.in8,\n\n bottom: colors.board.copper.b,\n drill: colors.board.anchor,\n keepout: colors.board.background,\n tkeepout: colors.board.b_crtyd,\n tplace: colors.board.b_silks,\n\n top_silkscreen: colors.board.f_silks,\n bottom_silkscreen: colors.board.b_silks,\n\n top_fabrication: colors.board.f_fab,\n bottom_fabrication: colors.board.b_fab,\n\n ...(colors.board as any),\n}\n\nexport type LayerNameForColor = keyof typeof LAYER_NAME_TO_COLOR\n\nexport const DEFAULT_DRAW_ORDER = [\n \"board\",\n \"top\",\n \"top_silkscreen\",\n \"bottom_silkscreen\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n] as const\n\nexport const FILL_TYPES = {\n 0: \"Empty\",\n 1: \"Solid\",\n 2: \"Line\",\n 3: \"LtSlash\",\n 4: \"Slash\",\n 5: \"BkSlash\",\n 6: \"LtBkSlash\",\n 7: \"Hatch\",\n 8: \"XHatch\",\n 9: \"Interleave\",\n 10: \"WideDot\",\n 11: \"CloseDot\",\n 12: \"Stipple1\",\n 13: \"Stipple2\",\n 14: \"Stipple3\",\n 15: \"Stipple4\",\n}\n\nexport class Drawer {\n canvasLayerMap: Record<string, HTMLCanvasElement>\n ctxLayerMap: Record<string, CanvasRenderingContext2D>\n // @ts-ignore this.equip({}) handles constructor assignment\n aperture: Aperture\n transform: Matrix\n foregroundLayer: string = \"top\"\n lastPoint: { x: number; y: number }\n\n constructor(canvasLayerMap: Record<string, HTMLCanvasElement>) {\n this.canvasLayerMap = canvasLayerMap\n this.ctxLayerMap = Object.fromEntries(\n Object.entries(canvasLayerMap).map(([name, canvas]) => [\n name,\n canvas.getContext(\"2d\")!,\n ]),\n )\n this.transform = identity()\n // positive is up (cartesian)\n this.transform.d *= -1\n this.transform = compose(this.transform, translate(0, -500))\n this.lastPoint = { x: 0, y: 0 }\n this.equip({})\n }\n\n clear() {\n for (const ctx of Object.values(this.ctxLayerMap)) {\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n }\n }\n\n equip(aperture: Partial<Aperture>) {\n this.aperture = {\n fontSize: 0,\n shape: \"circle\",\n mode: \"add\",\n size: 0,\n color: \"red\",\n layer: \"top\",\n opacity: this.foregroundLayer === aperture.color ? 1 : 0.5,\n ...aperture,\n }\n }\n\n drawMeshPattern(\n x: number,\n y: number,\n width: number,\n height: number,\n spacing: number,\n angle: number = 45,\n ) {\n const ctx = this.getLayerCtx()\n const [x1, y1] = applyToPoint(this.transform, [x, y])\n const [x2, y2] = applyToPoint(this.transform, [x + width, y + height])\n const spacing$ = scaleOnly(this.transform, spacing)\n\n // Set line properties for the mesh\n ctx.lineWidth = 1\n ctx.strokeStyle = this.aperture.color\n\n const drawLines = (angle: number) => {\n const sin = Math.sin(angle)\n const cos = Math.cos(angle)\n const diag = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))\n\n for (let i = -diag; i <= diag; i += spacing$) {\n ctx.beginPath()\n ctx.moveTo(x1 + i * cos - diag * sin, y1 + i * sin + diag * cos)\n ctx.lineTo(x1 + i * cos + diag * sin, y1 + i * sin - diag * cos)\n ctx.stroke()\n }\n }\n\n // Draw first set of parallel lines\n drawLines((angle * Math.PI) / 180)\n // Draw second set of parallel lines (perpendicular to the first set)\n drawLines(((angle + 90) * Math.PI) / 180)\n }\n\n rect(x: number, y: number, w: number, h: number, mesh_fill?: boolean) {\n const [x1$, y1$] = applyToPoint(this.transform, [x - w / 2, y - h / 2])\n const [x2$, y2$] = applyToPoint(this.transform, [x + w / 2, y + h / 2])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n if (mesh_fill) {\n ctx.save()\n ctx.beginPath()\n ctx.rect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n ctx.clip()\n\n // Draw the mesh pattern\n this.drawMeshPattern(x - w / 2, y - h / 2, w, h, 0.15) // Adjust spacing as needed\n\n ctx.restore()\n\n // Draw the outline\n ctx.strokeRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n } else {\n ctx.fillRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n }\n }\n\n rotatedRect(\n x: number,\n y: number,\n w: number,\n h: number,\n ccw_rotation: Rotation,\n mesh_fill?: boolean,\n ) {\n const ctx = this.getLayerCtx()\n this.applyAperture()\n\n const [x1$, y1$] = applyToPoint(this.transform, [x - w / 2, y - h / 2])\n const [x2$, y2$] = applyToPoint(this.transform, [x + w / 2, y + h / 2])\n\n ctx.save()\n\n const [centerX, centerY] = applyToPoint(this.transform, [x, y])\n ctx.translate(centerX, centerY)\n const cw_rotation = 360 - ccw_rotation\n if (ccw_rotation) ctx.rotate((cw_rotation * Math.PI) / 180)\n ctx.translate(-centerX, -centerY)\n\n if (mesh_fill) {\n ctx.beginPath()\n ctx.rect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n ctx.clip()\n\n this.drawMeshPattern(x - w / 2, y - h / 2, w, h, 0.15)\n\n ctx.strokeRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n } else {\n ctx.fillRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n }\n\n ctx.restore()\n }\n\n circle(x: number, y: number, r: number, mesh_fill?: boolean) {\n const r$ = scaleOnly(this.transform, r)\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n if (mesh_fill) {\n ctx.save()\n ctx.beginPath()\n ctx.arc(x$, y$, r$, 0, 2 * Math.PI)\n ctx.clip()\n\n // Draw the mesh pattern\n // We need to cover the entire circular area, so we use a square that fully encloses the circle\n this.drawMeshPattern(x - r, y - r, r * 2, r * 2, 0.15) // Adjust spacing as needed\n\n ctx.restore()\n\n // Draw the outline\n ctx.beginPath()\n ctx.arc(x$, y$, r$, 0, 2 * Math.PI)\n ctx.stroke()\n } else {\n ctx.beginPath()\n ctx.arc(x$, y$, r$, 0, 2 * Math.PI)\n ctx.fill()\n }\n }\n\n oval(x: number, y: number, rx: number, ry: number) {\n const rx$ = scaleOnly(this.transform, rx)\n const ry$ = scaleOnly(this.transform, ry)\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n ctx.beginPath()\n ctx.ellipse(x$, y$, rx$, ry$, 0, 0, 2 * Math.PI)\n ctx.fill()\n ctx.closePath()\n }\n\n pill(x: number, y: number, w: number, h: number) {\n const [x$, y$] = applyToPoint(this.transform, [x - w / 2, y + h / 2])\n const width$ = scaleOnly(this.transform, w)\n const height$ = scaleOnly(this.transform, h)\n const radius = Math.min(width$, height$) / 2\n this.applyAperture()\n const ctx = this.getLayerCtx()\n ctx.beginPath()\n ctx.arc(x$ + radius, y$ + radius, radius, Math.PI, Math.PI * 1.5)\n ctx.arc(x$ + width$ - radius, y$ + radius, radius, Math.PI * 1.5, 0)\n ctx.arc(\n x$ + width$ - radius,\n y$ + height$ - radius,\n radius,\n 0,\n Math.PI * 0.5,\n )\n ctx.arc(x$ + radius, y$ + height$ - radius, radius, Math.PI * 0.5, Math.PI)\n ctx.fill()\n ctx.closePath()\n }\n\n polygon(points: { x: number; y: number }[]) {\n if (points.length < 3) {\n return\n }\n\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n // Transform all points\n const transformedPoints = points.map((point) =>\n applyToPoint(this.transform, [point.x, point.y]),\n )\n\n // Draw the filled polygon\n ctx.beginPath()\n ctx.moveTo(transformedPoints[0][0], transformedPoints[0][1])\n for (let i = 1; i < transformedPoints.length; i++) {\n ctx.lineTo(transformedPoints[i][0], transformedPoints[i][1])\n }\n ctx.closePath()\n ctx.fill()\n\n // Draw the outline\n const lineWidth = scaleOnly(this.transform, this.aperture.size)\n ctx.lineWidth = lineWidth\n ctx.stroke()\n }\n\n /* NOTE: This is not gerber compatible */\n debugText(text: string, x: number, y: number) {\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n ctx.font = `10px sans-serif`\n ctx.fillText(text, x$, y$)\n }\n\n getLayerCtx() {\n const ctx = this.ctxLayerMap[this.aperture.layer]\n if (!ctx) {\n throw new Error(`No context for layer \"${this.aperture.layer}\"`)\n }\n return ctx\n }\n\n /**\n * Iterate over each canvas and set the z index based on the layer order, but\n * always render the foreground layer on top.\n *\n * Also: Set the opacity of every non-foreground layer to 0.5\n */\n orderAndFadeLayers() {\n const { canvasLayerMap, foregroundLayer } = this\n const opaqueLayers = new Set([\n foregroundLayer,\n \"drill\",\n \"other\",\n \"board\",\n foregroundLayer === \"top\"\n ? \"top_silkscreen\"\n : foregroundLayer === \"bottom\"\n ? \"bottom_silkscreen\"\n : \"\",\n ])\n const order = [\n \"drill\",\n \"board\",\n foregroundLayer,\n ...DEFAULT_DRAW_ORDER.filter((l) => l !== foregroundLayer),\n ]\n order.forEach((layer, i) => {\n const canvas = canvasLayerMap[layer]\n if (!canvas) return\n if (\n (layer === \"bottom_silkscreen\" && foregroundLayer === \"bottom\") ||\n (layer === \"top_silkscreen\" && foregroundLayer === \"top\")\n ) {\n canvas.style.zIndex = `${zIndexMap.topLayer}` // zIndexMap.topLayer\n } else {\n canvas.style.zIndex = `${zIndexMap.topLayer - i}`\n }\n canvas.style.opacity = opaqueLayers.has(layer) ? \"1\" : \"0.5\"\n })\n }\n\n applyAperture() {\n const { transform, aperture } = this\n let { size, mode, color, fontSize, layer } = aperture\n if (!(layer in this.ctxLayerMap)) this.aperture.layer = \"other\"\n\n const ctx = this.getLayerCtx()\n if (!ctx) {\n throw new Error(`No context for layer \"${this.foregroundLayer}\"`)\n }\n if (!color) color = \"undefined\"\n ctx.lineWidth = scaleOnly(transform, size)\n ctx.lineCap = \"round\"\n if (mode === \"add\") {\n let colorString =\n color?.[0] === \"#\" || color?.startsWith(\"rgb\")\n ? color\n : (LAYER_NAME_TO_COLOR as any)[color?.toLowerCase()]\n ? (LAYER_NAME_TO_COLOR as any)[color?.toLowerCase()]\n : null\n if (colorString === null) {\n console.warn(`Color mapping for \"${color}\" not found`)\n colorString = \"white\"\n }\n ctx.fillStyle = colorString\n ctx.strokeStyle = colorString\n } else {\n ctx.globalCompositeOperation = \"destination-out\"\n ctx.fillStyle = \"rgba(0,0,0,1)\"\n ctx.strokeStyle = \"rgba(0,0,0,1)\"\n }\n ctx.font = `${scaleOnly(inverse(transform), fontSize)}px sans-serif`\n }\n\n moveTo(x: number, y: number) {\n this.lastPoint = { x, y }\n }\n lineTo(x: number, y: number) {\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n const { size, shape, mode } = this.aperture\n const size$ = scaleOnly(this.transform, size)\n let { lastPoint } = this\n const lastPoint$ = applyToPoint(this.transform, lastPoint)\n\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n if (shape === \"square\")\n ctx.fillRect(\n lastPoint$.x - size$ / 2,\n lastPoint$.y - size$ / 2,\n size$,\n size$,\n )\n ctx.beginPath()\n ctx.moveTo(lastPoint$.x, lastPoint$.y)\n ctx.lineTo(x$, y$)\n\n ctx.stroke()\n ctx.closePath()\n\n if (shape === \"square\")\n ctx.fillRect(x$ - size$ / 2, y$ - size$ / 2, size$, size$)\n\n this.lastPoint = { x, y }\n }\n}\n","// Mix of Eagle Dark for schematics and KiCAD 2020 for PCBs\n// https://github.com/pointhi/kicad-color-schemes/blob/master/eagle-dark/eagle-dark.jsonO\n// https://github.com/pointhi/kicad-color-schemes/blob/master/kicad-2020/kicad_2020.json\nexport default {\n \"3d_viewer\": {\n background_bottom: \"rgb(102, 102, 128)\",\n background_top: \"rgb(204, 204, 230)\",\n board: \"rgb(51, 43, 23)\",\n copper: \"rgb(179, 156, 0)\",\n silkscreen_bottom: \"rgb(230, 230, 230)\",\n silkscreen_top: \"rgb(230, 230, 230)\",\n soldermask: \"rgb(20, 51, 36)\",\n solderpaste: \"rgb(128, 128, 128)\",\n },\n board: {\n anchor: \"rgb(255, 38, 226)\",\n aux_items: \"rgb(255, 255, 255)\",\n b_adhes: \"rgb(0, 0, 132)\",\n b_crtyd: \"rgb(255, 38, 226)\",\n b_fab: \"rgb(88, 93, 132)\",\n b_mask: \"rgba(2, 255, 238, 0.400)\",\n b_paste: \"rgb(0, 194, 194)\",\n b_silks: \"rgb(242, 237, 161)\",\n background: \"rgb(0, 16, 35)\",\n cmts_user: \"rgb(89, 148, 220)\",\n copper: {\n b: \"rgb(77, 127, 196)\",\n f: \"rgb(200, 52, 52)\",\n in1: \"rgb(127, 200, 127)\",\n in10: \"rgb(237, 124, 51)\",\n in11: \"rgb(91, 195, 235)\",\n in12: \"rgb(247, 111, 142)\",\n in13: \"rgb(167, 165, 198)\",\n in14: \"rgb(40, 204, 217)\",\n in15: \"rgb(232, 178, 167)\",\n in16: \"rgb(242, 237, 161)\",\n in17: \"rgb(237, 124, 51)\",\n in18: \"rgb(91, 195, 235)\",\n in19: \"rgb(247, 111, 142)\",\n in2: \"rgb(206, 125, 44)\",\n in20: \"rgb(167, 165, 198)\",\n in21: \"rgb(40, 204, 217)\",\n in22: \"rgb(232, 178, 167)\",\n in23: \"rgb(242, 237, 161)\",\n in24: \"rgb(237, 124, 51)\",\n in25: \"rgb(91, 195, 235)\",\n in26: \"rgb(247, 111, 142)\",\n in27: \"rgb(167, 165, 198)\",\n in28: \"rgb(40, 204, 217)\",\n in29: \"rgb(232, 178, 167)\",\n in3: \"rgb(79, 203, 203)\",\n in30: \"rgb(242, 237, 161)\",\n in4: \"rgb(219, 98, 139)\",\n in5: \"rgb(167, 165, 198)\",\n in6: \"rgb(40, 204, 217)\",\n in7: \"rgb(232, 178, 167)\",\n in8: \"rgb(242, 237, 161)\",\n in9: \"rgb(141, 203, 129)\",\n },\n cursor: \"rgb(255, 255, 255)\",\n drc: \"rgb(194, 194, 194)\",\n drc_error: \"rgba(215, 91, 107, 0.800)\",\n drc_exclusion: \"rgb(255, 255, 255)\",\n drc_warning: \"rgba(255, 208, 66, 0.902)\",\n dwgs_user: \"rgb(194, 194, 194)\",\n eco1_user: \"rgb(180, 219, 210)\",\n eco2_user: \"rgb(216, 200, 82)\",\n edge_cuts: \"rgb(208, 210, 205)\",\n f_adhes: \"rgb(132, 0, 132)\",\n f_crtyd: \"rgb(255, 0, 245)\",\n f_fab: \"rgb(175, 175, 175)\",\n f_mask: \"rgba(216, 100, 255, 0.400)\",\n f_paste: \"rgba(180, 160, 154, 0.902)\",\n f_silks: \"rgb(242, 237, 161)\",\n footprint_text_back: \"rgb(0, 0, 132)\",\n footprint_text_front: \"rgb(194, 194, 194)\",\n footprint_text_invisible: \"rgb(132, 132, 132)\",\n grid: \"rgb(132, 132, 132)\",\n grid_axes: \"rgb(194, 194, 194)\",\n margin: \"rgb(255, 38, 226)\",\n microvia: \"rgb(0, 132, 132)\",\n no_connect: \"rgb(0, 0, 132)\",\n pad_back: \"rgb(77, 127, 196)\",\n pad_front: \"rgb(200, 52, 52)\",\n pad_plated_hole: \"rgb(194, 194, 0)\",\n pad_through_hole: \"rgb(227, 183, 46)\",\n plated_hole: \"rgb(26, 196, 210)\",\n ratsnest: \"rgba(245, 255, 213, 0.702)\",\n select_overlay: \"rgb(4, 255, 67)\",\n through_via: \"rgb(236, 236, 236)\",\n user_1: \"rgb(194, 194, 194)\",\n user_2: \"rgb(89, 148, 220)\",\n user_3: \"rgb(180, 219, 210)\",\n user_4: \"rgb(216, 200, 82)\",\n user_5: \"rgb(194, 194, 194)\",\n user_6: \"rgb(89, 148, 220)\",\n user_7: \"rgb(180, 219, 210)\",\n user_8: \"rgb(216, 200, 82)\",\n user_9: \"rgb(232, 178, 167)\",\n via_blind_buried: \"rgb(187, 151, 38)\",\n via_hole: \"rgb(227, 183, 46)\",\n via_micro: \"rgb(0, 132, 132)\",\n via_through: \"rgb(236, 236, 236)\",\n worksheet: \"rgb(200, 114, 171)\",\n },\n gerbview: {\n axes: \"rgb(0, 0, 132)\",\n background: \"rgb(0, 0, 0)\",\n dcodes: \"rgb(255, 255, 255)\",\n grid: \"rgb(132, 132, 132)\",\n layers: [\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n ],\n negative_objects: \"rgb(132, 132, 132)\",\n worksheet: \"rgb(0, 0, 132)\",\n },\n palette: [\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n ],\n schematic: {\n anchor: \"rgb(0, 0, 255)\",\n aux_items: \"rgb(0, 0, 0)\",\n background: \"rgb(33, 33, 33)\",\n brightened: \"rgb(204, 204, 204)\",\n bus: \"rgb(0, 96, 192)\",\n bus_junction: \"rgb(0, 96, 192)\",\n component_body: \"rgb(44, 44, 44)\",\n component_outline: \"rgb(192, 0, 0)\",\n cursor: \"rgb(224, 224, 224)\",\n erc_error: \"rgba(192, 48, 48, 0.800)\",\n erc_warning: \"rgba(192, 140, 0, 0.800)\",\n fields: \"rgb(128, 0, 160)\",\n grid: \"rgb(60, 60, 60)\",\n grid_axes: \"rgb(60, 60, 60)\",\n hidden: \"rgb(194, 194, 194)\",\n junction: \"rgb(0, 160, 0)\",\n label_global: \"rgb(0, 160, 224)\",\n label_hier: \"rgb(160, 160, 0)\",\n label_local: \"rgb(192, 192, 192)\",\n net_name: \"rgb(224, 224, 224)\",\n no_connect: \"rgb(97, 43, 224)\",\n note: \"rgb(192, 192, 0)\",\n override_item_colors: false,\n pin: \"rgb(192, 0, 0)\",\n pin_name: \"rgb(192, 192, 192)\",\n pin_number: \"rgb(192, 0, 0)\",\n reference: \"rgb(192, 192, 192)\",\n shadow: \"rgba(102, 179, 255, 0.800)\",\n sheet: \"rgb(128, 0, 160)\",\n sheet_background: \"rgba(255, 255, 255, 0.000)\",\n sheet_fields: \"rgb(160, 160, 0)\",\n sheet_filename: \"rgb(160, 160, 0)\",\n sheet_label: \"rgb(160, 160, 0)\",\n sheet_name: \"rgb(0, 160, 204)\",\n value: \"rgb(192, 192, 192)\",\n wire: \"rgb(0, 160, 0)\",\n worksheet: \"rgb(192, 0, 0)\",\n },\n}\n","import { Matrix } from \"transformation-matrix\"\n\nexport const scaleOnly = (mat: Matrix, value: number = 1) => {\n if (Math.abs(mat.a) !== Math.abs(mat.d))\n throw new Error(\"Cannot scale non-uniformly\")\n return value * Math.abs(mat.a)\n}\n","export const zIndexMap = {\n elementOverlay: 30,\n dimensionOverlay: 30,\n editTraceHintOverlay: 30,\n errorOverlay: 30,\n ratsNestOverlay: 20,\n toolbarOverlay: 20,\n warnings: 20,\n topLayer: 10, // each layer after this is 1 less than the previous\n clickToInteractOverlay: 100,\n}\n","import { compose, translate, rotate, applyToPoint } from \"transformation-matrix\"\nimport { Line } from \"../types\"\n\nexport function rotateText(rotateTextParams: {\n lines: Line[]\n anchorPoint: { x: number; y: number }\n ccwRotation: number\n}) {\n const { lines, anchorPoint, ccwRotation } = rotateTextParams\n if (!ccwRotation) return lines\n const rad = (ccwRotation * Math.PI) / 180\n const rotationMatrix = rotate(rad)\n\n // Create rotation transform around anchor point\n const transform = compose(\n translate(anchorPoint.x, anchorPoint.y),\n rotationMatrix,\n translate(-anchorPoint.x, -anchorPoint.y),\n )\n applyToPoint(transform, anchorPoint)\n return lines.map((line) => ({\n ...line,\n x1: applyToPoint(transform, { x: line.x1, y: line.y1 }).x,\n y1: applyToPoint(transform, { x: line.x1, y: line.y1 }).y,\n x2: applyToPoint(transform, { x: line.x2, y: line.y2 }).x,\n y2: applyToPoint(transform, { x: line.x2, y: line.y2 }).y,\n }))\n}\n","/*\n * Maps letters/numbers to an SVG path\n * You must normalize the path prior to putting it here! That means it needs to\n * be entirely in the bounds [0,1] for both x and y.\n * You can use this svg editor tool to add characters: https://yqnn.github.io/svg-path-editor/\n */\nexport const svgAlphabet = {\n \"0\": \"M0.4544564813877358 0L0.2723441540828736 0.03592830447352719L0.1086847233315459 0.14528754990019965L0.020630545837255005 0.3040632652221331L0 0.5395277421960205L0.049259221760993496 0.7369487828466779L0.18080513776237842 0.9005494166306564L0.37036887043974215 0.9872116270037247L0.5864663759301132 1L0.8148695622827444 0.9332890276148733L0.9326583645506394 0.8113052246023419L1 0.4031281830668562L0.833288960385582 0.09886798567812842L0.6801767918233781 0.02483708485091681L0.4544564813877358 0\",\n \"1\": \"M 0.198 0.272 L 0.537 0 L 0.54 1\",\n \"2\": \"M0.069593147751606 0.19461498231706575L0.1039380353319058 0.1224291500164194L0.20543361884368308 0.05510832064153169L0.3717712794432549 0.009452970962689482L0.4785344452623127 0L0.663238590738758 0.008714098643339864L0.8017933618843684 0.04769189395915288L0.8775637379550322 0.10746757678258442L0.9047778372591005 0.17693069668193287L0.9029710920770878 0.2231347105796246L0.8704496788008566 0.30047744598157516L0.7292906538577354 0.4508486051631194L0.3737955032119913 0.7369006417749693L0 1L1 1\",\n \"3\": \"M0.03917438899874637 0.19855364635107545L0.15510940508963084 0.06745632622133718L0.37598645522339846 0L0.8486391893813088 0.0652271323161611L0.9782182415054349 0.21747394183735683L0.9213133780517754 0.3547560290117714L0.6504271515903481 0.4543436297681271L0.22975249764129613 0.48476611625264143L0.7659038682744629 0.5411919558122493L0.9258712987734741 0.6203185665660985L1 0.7458360609169667L0.8938813281118737 0.9059190913045964L0.6166890258875837 1L0.261528440153542 0.9874861530507921L0 0.8837289530851273\",\n \"4\": \"M0.7328897338403042 0L0 0.6684672518568535L1 0.6684672518568535M0.7243346007604563 0.4530722484807562L0.7243346007604563 1\",\n \"5\": \"M 0 0 L 0 0.4973 L 0.4262 0.4319 L 0.7305 0.4565 L 0.8516 0.5009 L 0.9357 0.5639 L 1 0.7356 L 0.9696 0.8248 L 0.8898 0.895 L 0.733 0.9602 L 0.5518 0.9945 L 0.3814 1 L 0.2379 0.9821 L 0.1219 0.947 L 0 0.8748 M 0 0 L 1 0\",\n \"6\": \"M0.6964601700926856 0L0.3639239026215478 0.0743562375769351L0.1415931962925719 0.21735490179786915L0.009977939399608712 0.46336322325406004L0.00029622007592593224 0.7083131475173043L0.09408885043224748 0.8746809149767036L0.3379247445101846 0.9876686500961888L0.7109203869569624 1L0.9260852957913362 0.9103558029693921L1 0.7716571969091733L0.9824294723385016 0.6390635485705886L0.7446504992867332 0.4733643097729175L0.31028858071607296 0.47578021640899115L0.1208702146816024 0.5481452483973847L0 0.6616669755788906\",\n \"7\": \"M0 0L1 0L0.9246479649697582 0.030539772727272752L0.8850302419354837 0.05075757575757579L0.7922946068548385 0.11079545454545457L0.7419268208165322 0.15213068181818185L0.6907258064516127 0.20202020202020204L0.6400666267641127 0.26122159090909086L0.5913243447580644 0.33049242424242414L0.5458740234374998 0.4105902777777778L0.5050907258064514 0.5022727272727272L0.4703495148689514 0.6062973484848484L0.43257456133442534 0.787133049242424L0.41612903225806447 1\",\n \"8\": \"M0.5143001078924863 0L0.16007477667923162 0.10731570786949331L0.14924628550868277 0.3146018498698755L0.2939585848842112 0.41617921794558677L0.8648302624811545 0.5385163833653317L1 0.7775820770511038L0.8180842915260376 0.9505845566922285L0.41968938540525413 1L0.08062381919779889 0.882831681184498L0 0.6936376947135333L0.17150171673893433 0.5188652309607817L0.6529263782780712 0.4242818653203618L0.8650205888491803 0.29644027376796367L0.8702067371119496 0.09910067291661573L0.5143001078924863 0\",\n \"9\": \"M1 0.25379591792994305L0.9514789771111742 0.11679361536614272L0.8702482473521467 0.05711741614054847L0.7327445265851579 0.015213872471965633L0.525248180711544 0L0.3292056884418538 0.012928195113745608L0.15997632037247655 0.058762870026191856L0.05266940041228321 0.12882439350476L0 0.2562067822770946L0.11316462894512366 0.4121335905917837L0.2403060136479954 0.4603365890068938L0.4097241967586011 0.4745978388276783L0.8642414300184816 0.420815170259988L0.9732054796346318 0.34537434075898393L1 0.25379591792994305M0.9647426784191072 0.35488595400360495L0.4756895081034974 1\",\n A: \"M0 1L0.4808333333333333 0L1 1M0.24250000000000002 0.6099439775910365L0.7341666666666666 0.6099439775910365\",\n B: \"M0 1L0 0.0117369978777208L0.30665717153513444 0L0.5874522807082946 0.03451403469442413L0.7766202217193218 0.15033936404895643L0.7471969743588041 0.31967962568332936L0.5246013359741988 0.4102978954282461L0.04378745314885416 0.44918617613783574L0.5112949594180156 0.469692928091109L0.8540266515643348 0.5552749498651879L1 0.6868463175009967L0.9880091196159324 0.8570018204672155L0.922301719975498 0.9321708046604659L0.7584266951758925 0.9932594737131338L0 1\",\n C: \"M1 0.23038928858890784L0.9328355511865092 0.12426412616785204L0.8096380839483327 0.04912601676267708L0.5763225801788256 0L0.4039037709527492 0.015028068281399815L0.2519579390951737 0.06533979308999706L0.10359458463139784 0.18146243506591617L0 0.4862728453971315L0.08129580872733055 0.792689266886982L0.20257034847159672 0.9160822255736587L0.3286572892798542 0.9738230826074175L0.5742878414421707 1L0.7883510303801312 0.9665431511195721L0.946851033994232 0.8689071500976585L1 0.7311049027121912\",\n D: \"M0 1L0.015604366822624637 0.020770988281483303L0.22564758265176144 0L0.3865476147957666 0.0024153386496795644L0.6479126635475078 0.051745644338731314L0.841191887805517 0.15827717679529366L0.9517008345536152 0.30172260586872185L0.9957536578687336 0.4504541551987709L1 0.5624359222498485L0.9798483279164735 0.6584121775234548L0.9386273319285215 0.7395945263504481L0.806292129480815 0.8624239259880274L0.6296239151398265 0.9406169638094516L0.3397492767598845 0.9954164354263132L0 1\",\n E: \"M0 0L0 1M0 0L1 0M0 0.5L0.7 0.5M0 1L1 1\",\n F: \"M0 0L0 1M0.011363636363636364 0.006802721088435374L1 0.006802721088435374M0.011363636363636364 0.4965986394557823L0.8409090909090909 0.4965986394557823\",\n G: \"M0.902666857540557 0.03860785012651126L0.6504261864675637 0L0.3838947267237336 0.015442305268228053L0.21293332876776194 0.07706794377239819L0.07799659974941617 0.1994951236187481L0 0.46380381528937314L0.04159964421546915 0.7502491408002389L0.13176692977834842 0.8535497868383203L0.2709176262273927 0.936767572377719L0.4386472596876406 0.9891638569283179L0.6145513562841309 1L0.7782254421419019 0.9585373611026471L0.9092650433859927 0.8540372997461425L1 0.5556012645283437L0.5583959277303046 0.55491741080559\",\n H: \"M0 0L0 1M0 0.4788732394366197L0.989010989010989 0.4788732394366197M1 0L1 1\",\n I: \"M0.5 0L0.5 1\",\n J: \"M0.9976457238788704 0L1 0.7396412315872798L0.9773931362096968 0.8322033314977973L0.9345115952458736 0.882296255506608L0.8743862896259549 0.9221331222466961L0.8024024079884948 0.9526431718061675L0.6443996712151668 0.9893997797356828L0.5035848940343224 1L0.3127211130319937 0.9877004749449337L0.17201910858386513 0.9539509911894274L0.10357419806379677 0.9212555066079295L0.053656568662899015 0.8816079295154184L0.020759483663648916 0.8360407488986785L0.003376206348523566 0.7855864537444934L0 0.7312775330396476\",\n K: \"M0 0L0 1M0.8787878787878788 0.06666666666666667L0 0.6148148148148148M0.3333333333333333 0.45925925925925926L1 0.9777777777777777\",\n L: \"M0 0L0 1L1 1\",\n M: \"M0 1L0 0L0.5 0.6512L1 0L1 1\",\n N: \"M0 1L0 0L1 1L0.9803729146221786 0\",\n O: \"M0.4718499217948183 1L0.2896765846490613 0.9606979309189402L0.12315162147934663 0.8411184486080473L0 0.4352399966492615L0.11730398524516283 0.13145645436014852L0.2612197451988078 0.04493357858878059L0.5104071592772554 0L0.7450113425917159 0.05393013710105273L0.882367950645524 0.15242300282020502L1 0.5224527406249126L0.9414597290654386 0.7560662329321755L0.8371289514446183 0.8910800547287298L0.6518259868433511 0.9830452628933628L0.4718499217948183 1\",\n P: \"M0 1L0 0.018871774228013626L0.29609603495819875 0L0.5609840637427541 0.011794858892508529L0.7332142696692472 0.04353904702296349L0.8102258645858864 0.0691965055027166L0.9330504315465442 0.14445061754775845L0.9876391714147118 0.22527816445836535L1 0.3434414070631638L0.9510549958116356 0.41772808046663146L0.8746646891596713 0.45879131862541683L0.7528523813396283 0.49171525113425024L0.5766919939969619 0.5153253033973054L0.33725744877712827 0.5284469008187558L0.025622667325582785 0.529905468802775\",\n Q: \"M0.4618887943546369 0.9755918167206952L0.28356128136544534 0.9372490397450218L0.12055179272160406 0.8205882753548176L0 0.4246165790405623L0.1148276047430244 0.12824784112887844L0.25570518844754375 0.043836831567190586L0.49963205786237674 0L0.7292835601228574 0.0526138004304122L0.8637404608452104 0.14870263423138746L0.9788892040030622 0.5097006183769648L0.9215847647858059 0.7376120297474734L0.8194564929275405 0.869330409436378L0.6380654214095985 0.9590509139448092L0.4618887943546369 0.9755918167206952M0.5824181120212351 0.6861805006946525L1 1\",\n R: \"M0 0.9928375167236815L0 0.02590227442068435L0.3611517274211098 0L0.6146286724700761 0.008660554424468435L0.7675462459194776 0.035269459580494614L0.831839975516866 0.056961676692569484L0.8847592491838954 0.08519560521497332L0.9238557535364527 0.120683646438422L0.9583303225312839 0.21691797435320384L0.955092470586235 0.3022616904894429L0.9198097669001631 0.3640573439322699L0.8564862239866702 0.40639258627024005L0.7691258543593579 0.43335506909190874L0.601775027203482 0.4539166070813109L0.023939064200217658 0.46997623755243123M0.5038084874863982 0.5108023922274467L1 1\",\n S: \"M0.8886929689221953 0.15146982162688968L0.7276173683050475 0.013780286031594946L0.34582323121005076 0L0.1318235250900008 0.09920162734298861L0.0444543935052531 0.2811287071349243L0.08064065829108809 0.3709571405906485L0.21603115127470426 0.4485505768228281L0.7525409135992945 0.5111160926769565L0.9330263665417677 0.5850732219351329L1 0.7129938124702524L0.9117772389978691 0.9130572743138187L0.6423187128058188 1L0.29586019579751677 0.9935291584506244L0.10638454191462794 0.9229845198431584L0 0.7570771288048773\",\n T: \"M0 0L1 0M0.5148514851485149 0L0.5148514851485149 1\",\n U: \"M0 0L0.0023103778751369115 0.5467447428390111L0.01823032542100219 0.6954785891481812L0.05895528135268338 0.8056480226151669L0.13703402031421133 0.8894445726483398L0.23918400876232196 0.9448524533417946L0.3917887458926616 0.9848674531975652L0.584341627875137 1L0.7194816196604602 0.9848501456716763L0.8303268115073934 0.9449411544119768L0.8966613970084885 0.898186315516197L0.9251437568455642 0.867453197565408L0.9687114937020809 0.7890904895145239L0.9890470974808324 0.6852857184065537L1 0.0014769088758762145\",\n V: \"M0 0L0.5348837209302325 1L1 0\",\n W: \"M0 0L0.23300090661831369 0.9873417721518988L0.49954669084315495 0.30081906180193585L0.7851314596554849 1L1 0.0215934475055845\",\n X: \"M0 0L0.9893617021276596 1M1 0L0.010638297872340425 1\",\n Y: \"M0 0L0.4860515021459227 0.44712562100780695M1 0.0014194464158977947L0.48927038626609437 0.44996451383960256L0.5075107296137339 1\",\n Z: \"M0 0L1 0L0 1L1 1\",\n \".\": \"M 0.49 1 L 0.41 1\",\n \"*\": \"M 0.5 0.25 L 0.8 0.25 M 0.5 0.25 L 0.5927 0.4402 M 0.5 0.25 L 0.2573 0.3676 M 0.5 0.25 L 0.2573 0.1324 M 0.5 0.25 L 0.599 0.055\",\n \"(\": \"M0.75 0L0.25 0.5L0.25 0.5L0.75 1\",\n \")\": \"M0.25 0L0.75 0.5L0.75 0.5L0.25 1\",\n \"-\": \"M0 0.5L1 0.5\",\n \"+\": \"M 0 0.5 L 1 0.5 M 0.5 0.125 L 0.5 0.875\",\n \"=\": \"M0 0.25L1 0.25M0 0.75L1 0.75\",\n _: \"M0 1 L1 1\",\n \"[\": \"M0.75 0L0.25 0L0.25 1L0.75 1\",\n \"]\": \"M0.25 0L0.75 0L0.75 1L0.25 1\",\n \"<\": \"M0.75 0L0.25 0.5L0.25 0.5L0.75 1\",\n \">\": \"M0.25 0L0.75 0.5L0.75 0.5L0.25 1\",\n \"'\": \"M 0.5 0 L 0.5 0.5\",\n '\"': \"M 0.25 0 L 0.25 0.5 M 0.75 0 L 0.75 0.5\",\n}\n\nexport const lineAlphabet: Record<\n string,\n Array<{ x1: number; y1: number; x2: number; y2: number }>\n> = {}\nfor (const letter in svgAlphabet) {\n lineAlphabet[letter] = []\n const segs = (svgAlphabet as any)[letter]\n .split(\"M\")\n .slice(1)\n .map((seg: any) =>\n seg.split(\"L\").map((pr: any) => pr.trim().split(\" \").map(parseFloat)),\n )\n for (const seg of segs) {\n for (let i = 0; i < seg.length - 1; i++) {\n // We also flip the y axis to make it cartesian here\n lineAlphabet[letter].push({\n x1: seg[i][0],\n y1: 1 - seg[i][1],\n x2: seg[i + 1][0],\n y2: 1 - seg[i + 1][1],\n })\n }\n }\n}\n","import { lineAlphabet } from \"../assets/alphabet\"\nimport { getNewPcbDrawingObjectId } from \"./convert-element-to-primitive\"\nimport type { Line, Text } from \"./types\"\n\nexport const LETTER_HEIGHT_TO_WIDTH_RATIO = 0.6\nexport const LETTER_HEIGHT_TO_SPACE_RATIO = 0.2\n\nexport const getTextWidth = (text: Text): number => {\n if (text.text.length === 0) return 0\n const target_height = text.size * 0.7 // Apply 70% scaling\n const target_width_char = target_height * LETTER_HEIGHT_TO_WIDTH_RATIO\n const space_between_chars = target_height * LETTER_HEIGHT_TO_SPACE_RATIO\n return (\n text.text.length * target_width_char +\n (text.text.length - 1) * space_between_chars\n )\n}\n\nexport const convertTextToLines = (text: Text): Line[] => {\n const target_height = text.size * 0.7 // Apply 70% scaling\n if (target_height <= 0 || text.text.length === 0) return []\n\n const strokeWidth = target_height / 12\n\n // Effective span for scaling the normalized 0-1 character centerlines\n const centerline_span_y = Math.max(0, target_height - strokeWidth)\n const y_baseline_offset = strokeWidth / 2\n\n const target_width_char = target_height * LETTER_HEIGHT_TO_WIDTH_RATIO\n const centerline_span_x = Math.max(0, target_width_char - strokeWidth)\n const x_char_start_offset = strokeWidth / 2\n\n const space_between_chars = target_height * LETTER_HEIGHT_TO_SPACE_RATIO\n\n const lines: Line[] = []\n let current_x_origin_for_char_box = text.x\n\n for (let letterIndex = 0; letterIndex < text.text.length; letterIndex++) {\n const letter = text.text[letterIndex]\n const letterLines = lineAlphabet[letter.toUpperCase()]\n\n if (!letterLines) {\n current_x_origin_for_char_box += target_width_char + space_between_chars\n continue\n }\n\n for (const {\n x1: norm_x1,\n y1: norm_y1,\n x2: norm_x2,\n y2: norm_y2,\n } of letterLines) {\n lines.push({\n _pcb_drawing_object_id: getNewPcbDrawingObjectId(\"line\"),\n pcb_drawing_type: \"line\",\n x1:\n current_x_origin_for_char_box +\n x_char_start_offset +\n centerline_span_x * norm_x1,\n y1: text.y + y_baseline_offset + centerline_span_y * norm_y1,\n x2:\n current_x_origin_for_char_box +\n x_char_start_offset +\n centerline_span_x * norm_x2,\n y2: text.y + y_baseline_offset + centerline_span_y * norm_y2,\n width: strokeWidth,\n layer: text.layer,\n unit: text.unit,\n })\n }\n current_x_origin_for_char_box += target_width_char + space_between_chars\n }\n\n return lines\n}\n","import type { Rotation } from \"circuit-json\"\nimport { type Drawer, LAYER_NAME_TO_COLOR } from \"./Drawer\"\nimport { rotateText } from \"./util/rotate-text\"\nimport { convertTextToLines, getTextWidth } from \"./convert-text-to-lines\"\nimport type {\n Circle,\n Line,\n Oval,\n Pill,\n Polygon,\n Primitive,\n Rect,\n Text,\n} from \"./types\"\nimport color from \"color\"\n\nfunction getColor(primitive: Primitive): string {\n if (primitive.is_mouse_over || primitive.is_in_highlighted_net) {\n return color(\n LAYER_NAME_TO_COLOR[primitive.layer as keyof typeof LAYER_NAME_TO_COLOR],\n )\n .lighten(0.5)\n .rgb()\n .toString()\n }\n return LAYER_NAME_TO_COLOR[\n primitive.layer as keyof typeof LAYER_NAME_TO_COLOR\n ]\n}\n\nexport const drawLine = (drawer: Drawer, line: Line) => {\n drawer.equip({\n size: line.zoomIndependent ? line.width / drawer.transform.a : line.width,\n shape: line.squareCap ? \"square\" : \"circle\",\n color: getColor(line),\n layer: line.layer,\n })\n drawer.moveTo(line.x1, line.y1)\n drawer.lineTo(line.x2, line.y2)\n}\n\nexport const drawText = (drawer: Drawer, text: Text) => {\n drawer.equip({\n fontSize: text.size,\n color: getColor(text),\n layer: text.layer,\n })\n\n // Alignment offset calculation\n let alignOffset = { x: 0, y: 0 }\n const textWidth = getTextWidth(text)\n const textHeight = text.size\n\n switch (text.align) {\n case \"top_left\":\n alignOffset.x = 0\n alignOffset.y = -textHeight\n break\n case \"top_center\":\n alignOffset.x = -textWidth / 2\n alignOffset.y = -textHeight\n break\n case \"top_right\":\n alignOffset.x = -textWidth\n alignOffset.y = -textHeight\n break\n case \"center_left\":\n alignOffset.x = 0\n alignOffset.y = -textHeight / 2\n break\n case \"center\":\n alignOffset.x = -textWidth / 2\n alignOffset.y = -textHeight / 2\n break\n case \"center_right\":\n alignOffset.x = -textWidth\n alignOffset.y = -textHeight / 2\n break\n case \"bottom_left\":\n alignOffset.x = 0\n alignOffset.y = 0\n break\n case \"bottom_center\":\n alignOffset.x = -textWidth / 2\n alignOffset.y = 0\n break\n case \"bottom_right\":\n alignOffset.x = -textWidth\n alignOffset.y = 0\n break\n default: // Default to bottom_left if align is not specified or invalid\n alignOffset.x = 0\n alignOffset.y = 0\n break\n }\n\n // Non-gerber compatible\n // drawer.text(text.text, text.x, text.y)\n text.x ??= 0\n text.y ??= 0\n\n // Get rotation anchor point based on alignment\n const rotationAnchor = {\n x: text.x,\n y: text.y,\n }\n\n // Generate the text lines with alignment offset\n let text_lines = convertTextToLines({\n ...text,\n x: text.x + alignOffset.x,\n y: text.y + alignOffset.y,\n })\n // Apply rotation if needed\n if (text.ccw_rotation) {\n const rotateTextParams = {\n lines: text_lines,\n anchorPoint: rotationAnchor,\n ccwRotation: text.ccw_rotation,\n }\n text_lines = rotateText(rotateTextParams)\n }\n\n // Draw all lines with transformed context\n for (const line of text_lines) {\n drawLine(drawer, line)\n }\n}\n\nexport const drawRect = (drawer: Drawer, rect: Rect) => {\n drawer.equip({\n color: getColor(rect),\n layer: rect.layer,\n })\n drawer.rect(rect.x, rect.y, rect.w, rect.h, rect.mesh_fill)\n}\n\nexport const drawRotatedRect = (\n drawer: Drawer,\n rect: Rect & { ccw_rotation: Rotation },\n) => {\n drawer.equip({\n color: getColor(rect),\n layer: rect.layer,\n })\n\n drawer.rotatedRect(rect.x, rect.y, rect.w, rect.h, rect.ccw_rotation)\n}\n\nexport const drawCircle = (drawer: Drawer, circle: Circle) => {\n drawer.equip({\n color: getColor(circle),\n layer: circle.layer,\n })\n drawer.circle(circle.x, circle.y, circle.r, circle.mesh_fill)\n}\n\nexport const drawOval = (drawer: Drawer, oval: Oval) => {\n drawer.equip({\n color: getColor(oval),\n layer: oval.layer,\n })\n drawer.oval(oval.x, oval.y, oval.rX, oval.rY)\n}\n\nexport const drawPill = (drawer: Drawer, pill: Pill) => {\n drawer.equip({\n color: getColor(pill),\n layer: pill.layer,\n })\n drawer.pill(pill.x, pill.y, pill.w, pill.h)\n}\n\nexport const drawPolygon = (drawer: Drawer, polygon: Polygon) => {\n drawer.equip({\n color: getColor(polygon),\n layer: polygon.layer,\n })\n drawer.polygon(polygon.points)\n}\n\nexport const drawPrimitive = (drawer: Drawer, primitive: Primitive) => {\n switch (primitive.pcb_drawing_type) {\n case \"line\":\n return drawLine(drawer, primitive)\n case \"text\":\n return drawText(drawer, primitive)\n case \"rect\":\n // @ts-ignore\n if (primitive._element?.shape === \"rotated_rect\") {\n return drawRotatedRect(drawer, {\n ...primitive,\n // @ts-ignore\n ccw_rotation: primitive._element.ccw_rotation,\n mesh_fill: primitive.mesh_fill,\n })\n }\n return drawRect(drawer, primitive)\n case \"circle\":\n return drawCircle(drawer, primitive)\n case \"oval\":\n return drawOval(drawer, primitive)\n case \"pill\":\n return drawPill(drawer, primitive)\n case \"polygon\":\n return drawPolygon(drawer, primitive)\n }\n}\n\nexport const drawPrimitives = (drawer: Drawer, primitives: Primitive[]) => {\n for (const primitive of primitives) {\n drawPrimitive(drawer, primitive)\n }\n}\n","import type { GraphicsObject } from \"graphics-debug\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { drawGraphicsToCanvas } from \"graphics-debug\"\nimport { useEffect, useRef } from \"react\"\nimport { useMeasure } from \"react-use\"\nimport { useGlobalStore } from \"global-store\"\n\ninterface Props {\n transform?: Matrix\n debugGraphics?: GraphicsObject | null\n children?: any\n}\n\nexport const DebugGraphicsOverlay = ({\n children,\n transform,\n debugGraphics,\n}: Props) => {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const [containerRef, { width, height }] = useMeasure<HTMLDivElement>()\n const is_showing_autorouting = useGlobalStore((s) => s.is_showing_autorouting)\n\n useEffect(() => {\n if (!is_showing_autorouting) return\n if (canvasRef.current && debugGraphics && width && height) {\n canvasRef.current.width = width\n canvasRef.current.height = height\n drawGraphicsToCanvas(debugGraphics, canvasRef.current, {\n transform,\n disableLabels: true,\n })\n }\n }, [debugGraphics, transform, width, height, is_showing_autorouting])\n\n if (!is_showing_autorouting) return children\n\n return (\n <div\n ref={containerRef}\n style={{ position: \"relative\", width: \"100%\", height: \"100%\" }}\n >\n {children}\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n opacity: 0.5,\n zIndex: 100,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n }}\n />\n </div>\n )\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { useEffect, useRef } from \"react\"\nimport { useMeasure } from \"react-use\"\nimport { type Matrix, applyToPoint, identity } from \"transformation-matrix\"\nimport colors from \"lib/colors\"\n\ninterface BaseCircuitElement {\n type: string\n}\n\ninterface PcbComponent extends BaseCircuitElement {\n type: \"pcb_component\"\n pcb_component_id: string\n width: number\n height: number\n source_component_id: string\n center: { x: number; y: number }\n rotation: number\n layer:\n | \"top\"\n | \"bottom\"\n | \"inner1\"\n | \"inner2\"\n | \"inner3\"\n | \"inner4\"\n | \"inner5\"\n | \"inner6\"\n}\n\ninterface PcbManualEditConflictWarning extends BaseCircuitElement {\n type: \"pcb_manual_edit_conflict_warning\"\n pcb_manual_edit_conflict_warning_id: string\n message: string\n pcb_component_id: string\n subcircuit_id: string\n source_component_id: string\n}\n\ninterface Props {\n transform?: Matrix\n elements?: AnyCircuitElement[]\n children: any\n}\n\nexport const WarningGraphicsOverlay = ({\n children,\n transform = identity(),\n elements = [],\n}: Props) => {\n const [containerRef, { width, height }] = useMeasure<HTMLDivElement>()\n const canvasRef = useRef<HTMLCanvasElement>(null)\n\n useEffect(() => {\n const canvas = canvasRef.current\n if (!canvas || !width || !height) return\n\n canvas.width = width\n canvas.height = height\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n ctx.clearRect(0, 0, width, height)\n\n const pcbComponents = elements.filter(\n (el): el is PcbComponent => el.type === \"pcb_component\",\n ) as PcbComponent[]\n\n const warnings = elements.filter(\n (el): el is PcbManualEditConflictWarning =>\n el.type === \"pcb_manual_edit_conflict_warning\",\n ) as PcbManualEditConflictWarning[]\n\n ctx.strokeStyle = colors.board.drc_warning\n ctx.lineWidth = 2\n\n warnings.forEach((warning) => {\n const component = pcbComponents.find(\n (comp) => comp.pcb_component_id === warning.pcb_component_id,\n )\n\n if (!component) return\n\n const { width, height, center } = component\n\n const transformedCenter = applyToPoint(transform, center)\n\n const scaledWidth = width * Math.abs(transform.a)\n const scaledHeight = height * Math.abs(transform.d)\n\n const boxPadding = 0.1 * Math.abs(transform.a)\n\n const boxWidth = scaledWidth + boxPadding * 2\n const boxHeight = scaledHeight + boxPadding * 2\n const x = transformedCenter.x - boxWidth / 2\n const y = transformedCenter.y - boxHeight / 2\n\n ctx.beginPath()\n ctx.rect(x, y, boxWidth, boxHeight)\n ctx.stroke()\n\n const labelText = \"Manual Edit Conflict\"\n const labelPadding = 4\n const fontSize = Math.max(8, Math.min(12, 10 * Math.abs(transform.a)))\n ctx.font = `${fontSize}px sans-serif`\n const labelMetrics = ctx.measureText(labelText)\n const labelWidth = labelMetrics.width + labelPadding * 2\n const labelHeight = fontSize + labelPadding * 2\n const labelX = x + (boxWidth - labelWidth) / 2\n const labelY = y + boxHeight + 5\n\n ctx.fillStyle = \"rgba(0, 0, 0, 0.7)\"\n ctx.beginPath()\n ctx.roundRect(labelX, labelY, labelWidth, labelHeight, 3)\n ctx.fill()\n\n ctx.fillStyle = colors.board.drc_warning\n ctx.textAlign = \"center\"\n ctx.textBaseline = \"middle\"\n ctx.fillText(labelText, labelX + labelWidth / 2, labelY + labelHeight / 2)\n })\n }, [elements, transform, width, height])\n\n return (\n <div\n ref={containerRef}\n style={{ position: \"relative\", width: \"100%\", height: \"100%\" }}\n >\n {children}\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n zIndex: zIndexMap.warnings,\n }}\n />\n </div>\n )\n}\n","import { zIndexMap } from \"lib/util/z-index-map\"\nimport { useEffect, useRef, useState } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { applyToPoint, identity, inverse } from \"transformation-matrix\"\n\ninterface Props {\n transform?: Matrix\n children: any\n focusOnHover?: boolean\n}\n\nexport const DimensionOverlay = ({\n children,\n transform,\n focusOnHover = false,\n}: Props) => {\n if (!transform) transform = identity()\n const [dimensionToolVisible, setDimensionToolVisible] = useState(false)\n const [dimensionToolStretching, setDimensionToolStretching] = useState(false)\n // Start of dimension tool line in real-world coordinates (not screen)\n const [dStart, setDStart] = useState({ x: 0, y: 0 })\n // End of dimension tool line in real-world coordinates (not screen)\n const [dEnd, setDEnd] = useState({ x: 0, y: 0 })\n const mousePosRef = useRef({ x: 0, y: 0 })\n const containerRef = useRef<HTMLDivElement | null>(null)\n const container = containerRef.current!\n const containerBounds = container?.getBoundingClientRect()\n useEffect(() => {\n const container = containerRef.current\n\n const down = (e: KeyboardEvent) => {\n if (e.key === \"d\") {\n setDStart({ x: mousePosRef.current.x, y: mousePosRef.current.y })\n setDEnd({ x: mousePosRef.current.x, y: mousePosRef.current.y })\n setDimensionToolVisible((visible: boolean) => !visible)\n setDimensionToolStretching(true)\n }\n if (e.key === \"Escape\") {\n setDimensionToolVisible(false)\n setDimensionToolStretching(false)\n }\n }\n\n const addKeyListener = () => {\n if (container) {\n window.addEventListener(\"keydown\", down)\n }\n }\n\n const removeKeyListener = () => {\n if (container) {\n window.removeEventListener(\"keydown\", down)\n }\n }\n\n if (container) {\n container.addEventListener(\"focus\", addKeyListener)\n container.addEventListener(\"blur\", removeKeyListener)\n container.addEventListener(\"mouseenter\", addKeyListener)\n container.addEventListener(\"mouseleave\", removeKeyListener)\n }\n return () => {\n if (container) {\n container.removeEventListener(\"focus\", addKeyListener)\n container.removeEventListener(\"blur\", removeKeyListener)\n container.removeEventListener(\"mouseenter\", addKeyListener)\n container.removeEventListener(\"mouseleave\", removeKeyListener)\n }\n }\n }, [containerRef])\n\n const screenDStart = applyToPoint(transform, dStart)\n const screenDEnd = applyToPoint(transform, dEnd)\n\n const arrowScreenBounds = {\n left: Math.min(screenDStart.x, screenDEnd.x),\n right: Math.max(screenDStart.x, screenDEnd.x),\n top: Math.min(screenDStart.y, screenDEnd.y),\n bottom: Math.max(screenDStart.y, screenDEnd.y),\n flipX: screenDStart.x > screenDEnd.x,\n flipY: screenDStart.y > screenDEnd.y,\n width: 0,\n height: 0,\n }\n arrowScreenBounds.width = arrowScreenBounds.right - arrowScreenBounds.left\n arrowScreenBounds.height = arrowScreenBounds.bottom - arrowScreenBounds.top\n\n return (\n <div\n ref={containerRef}\n // biome-ignore lint/a11y/noNoninteractiveTabindex: <explanation>\n tabIndex={0}\n style={{ position: \"relative\" }}\n onMouseEnter={() => {\n if (focusOnHover && containerRef.current) {\n containerRef.current.focus()\n }\n }}\n onMouseLeave={() => {\n if (containerRef.current) {\n containerRef.current.blur()\n }\n }}\n onMouseMove={(e: React.MouseEvent<HTMLDivElement>) => {\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n const rwPoint = applyToPoint(inverse(transform!), { x, y })\n mousePosRef.current.x = rwPoint.x\n mousePosRef.current.y = rwPoint.y\n\n if (dimensionToolStretching) {\n setDEnd({ x: rwPoint.x, y: rwPoint.y })\n }\n }}\n onMouseDown={() => {\n if (dimensionToolStretching) {\n setDimensionToolStretching(false)\n } else if (dimensionToolVisible) {\n setDimensionToolVisible(false)\n }\n }}\n >\n {children}\n {dimensionToolVisible && (\n <>\n <div\n style={{\n position: \"absolute\",\n left: arrowScreenBounds.left,\n width: arrowScreenBounds.width,\n textAlign: \"center\",\n top: screenDStart.y + 2,\n color: \"red\",\n mixBlendMode: \"difference\",\n pointerEvents: \"none\",\n marginTop: arrowScreenBounds.flipY ? 0 : -20,\n fontSize: 12,\n fontFamily: \"sans-serif\",\n zIndex: zIndexMap.dimensionOverlay,\n }}\n >\n {Math.abs(dStart.x - dEnd.x).toFixed(2)}\n </div>\n <div\n style={{\n position: \"absolute\",\n left: screenDEnd.x,\n height: arrowScreenBounds.height,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n top: arrowScreenBounds.top,\n color: \"red\",\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n fontSize: 12,\n fontFamily: \"sans-serif\",\n zIndex: zIndexMap.dimensionOverlay,\n }}\n >\n <div\n style={{\n marginLeft: arrowScreenBounds.flipX ? \"-100%\" : 4,\n paddingRight: 4,\n }}\n >\n {Math.abs(dStart.y - dEnd.y).toFixed(2)}\n </div>\n </div>\n {/* biome-ignore lint/a11y/noSvgWithoutTitle: <explanation> */}\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.dimensionOverlay,\n }}\n width={containerBounds.width}\n height={containerBounds.height}\n >\n <defs>\n <marker\n id=\"head\"\n orient=\"auto\"\n markerWidth=\"3\"\n markerHeight=\"4\"\n refX=\"2\"\n refY=\"2\"\n >\n <path d=\"M0,0 V4 L2,2 Z\" fill=\"red\" />\n </marker>\n </defs>\n <line\n x1={screenDStart.x}\n y1={screenDStart.y}\n x2={screenDEnd.x}\n y2={screenDEnd.y}\n markerEnd=\"url(#head)\"\n strokeWidth={1.5}\n fill=\"none\"\n stroke=\"red\"\n />\n <line\n x1={screenDStart.x}\n y1={screenDStart.y}\n x2={screenDEnd.x}\n y2={screenDStart.y}\n strokeWidth={1.5}\n fill=\"none\"\n strokeDasharray={\"2,2\"}\n stroke=\"red\"\n />\n <line\n x1={screenDEnd.x}\n y1={screenDStart.y}\n x2={screenDEnd.x}\n y2={screenDEnd.y}\n strokeWidth={1.5}\n fill=\"none\"\n strokeDasharray={\"2,2\"}\n stroke=\"red\"\n />\n </svg>\n <div\n style={{\n right: 0,\n bottom: 0,\n position: \"absolute\",\n color: \"red\",\n fontFamily: \"sans-serif\",\n fontSize: 12,\n margin: 4,\n }}\n >\n ({dStart.x.toFixed(2)},{dStart.y.toFixed(2)})<br />(\n {dEnd.x.toFixed(2)},{dEnd.y.toFixed(2)})<br />\n dist:{\" \"}\n {Math.sqrt(\n (dEnd.x - dStart.x) ** 2 + (dEnd.y - dStart.y) ** 2,\n ).toFixed(2)}\n </div>\n </>\n )}\n </div>\n )\n}\n","import type { AnyCircuitElement, PcbComponent } from \"circuit-json\"\nimport { useGlobalStore } from \"global-store\"\nimport { useEffect, useRef, useState } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { applyToPoint, identity, inverse } from \"transformation-matrix\"\nimport type { ManualEditEvent } from \"@tscircuit/props\"\n\ninterface Props {\n transform?: Matrix\n children: any\n soup: AnyCircuitElement[]\n disabled?: boolean\n cancelPanDrag: () => void\n onCreateEditEvent: (event: ManualEditEvent) => void\n onModifyEditEvent: (event: Partial<ManualEditEvent>) => void\n}\n\nconst isInsideOf = (\n pcb_component: PcbComponent,\n point: { x: number; y: number },\n padding = 0,\n) => {\n const halfWidth = pcb_component.width / 2\n const halfHeight = pcb_component.height / 2\n\n const left = pcb_component.center.x - halfWidth - padding\n const right = pcb_component.center.x + halfWidth + padding\n const top = pcb_component.center.y - halfHeight - padding\n const bottom = pcb_component.center.y + halfHeight + padding\n\n return point.x > left && point.x < right && point.y > top && point.y < bottom\n}\n\nexport const EditPlacementOverlay = ({\n children,\n disabled: disabledProp,\n transform,\n soup,\n cancelPanDrag,\n onCreateEditEvent,\n onModifyEditEvent,\n}: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\n const [activePcbComponentId, setActivePcbComponent] = useState<null | string>(\n null,\n )\n const [dragState, setDragState] = useState<{\n dragStart: { x: number; y: number }\n originalCenter: { x: number; y: number }\n dragEnd: { x: number; y: number }\n edit_event_id: string\n } | null>(null)\n const isPcbComponentActive = activePcbComponentId !== null\n const in_edit_mode = useGlobalStore((s) => s.in_edit_mode)\n const in_move_footprint_mode = useGlobalStore((s) => s.in_move_footprint_mode)\n const setIsMovingComponent = useGlobalStore((s) => s.setIsMovingComponent)\n\n const disabled = disabledProp || !in_move_footprint_mode\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n }}\n onMouseDown={(e) => {\n if (disabled) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (Number.isNaN(x) || Number.isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n\n let foundActiveComponent = false\n for (const e of soup) {\n if (\n e.type === \"pcb_component\" &&\n isInsideOf(e, rwMousePoint, 10 / transform.a)\n ) {\n cancelPanDrag()\n setActivePcbComponent(e.pcb_component_id)\n foundActiveComponent = true\n const edit_event_id = Math.random().toString()\n setDragState({\n dragStart: rwMousePoint,\n originalCenter: e.center,\n dragEnd: rwMousePoint,\n edit_event_id,\n })\n\n onCreateEditEvent({\n edit_event_id,\n edit_event_type: \"edit_pcb_component_location\",\n pcb_edit_event_type: \"edit_component_location\",\n pcb_component_id: e.pcb_component_id,\n original_center: e.center,\n new_center: e.center,\n in_progress: true,\n created_at: Date.now(),\n })\n\n setIsMovingComponent(true)\n break\n }\n }\n if (!foundActiveComponent) {\n setActivePcbComponent(null)\n }\n\n if (foundActiveComponent) {\n e.preventDefault()\n return false\n }\n }}\n onMouseMove={(e) => {\n if (!activePcbComponentId || !dragState) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (Number.isNaN(x) || Number.isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n setDragState({\n ...dragState,\n dragEnd: rwMousePoint,\n })\n onModifyEditEvent({\n edit_event_id: dragState.edit_event_id,\n new_center: {\n x:\n dragState.originalCenter.x +\n rwMousePoint.x -\n dragState.dragStart.x,\n y:\n dragState.originalCenter.y +\n rwMousePoint.y -\n dragState.dragStart.y,\n },\n })\n }}\n onMouseUp={(e) => {\n if (!activePcbComponentId) return\n setActivePcbComponent(null)\n setIsMovingComponent(false)\n if (dragState) {\n onModifyEditEvent({\n edit_event_id: dragState.edit_event_id,\n in_progress: false,\n })\n setDragState(null)\n }\n }}\n >\n {children}\n {!disabled &&\n soup\n .filter((e): e is PcbComponent => e.type === \"pcb_component\")\n .map((e) => {\n if (!e?.center) return null\n const projectedCenter = applyToPoint(transform, e.center)\n\n return (\n <div\n key={e.pcb_component_id}\n style={{\n position: \"absolute\",\n pointerEvents: \"none\",\n // b/c of transform, this is actually center not left/top\n left: projectedCenter.x,\n top: projectedCenter.y,\n width: e.width * transform.a + 20,\n height: e.height * transform.a + 20,\n transform: \"translate(-50%, -50%)\",\n background:\n isPcbComponentActive &&\n activePcbComponentId === e.pcb_component_id\n ? \"rgba(255, 0, 0, 0.2)\"\n : \"\",\n }}\n />\n )\n })}\n </div>\n )\n}\n","import type {\n AnyCircuitElement,\n PcbSmtPad,\n PcbTraceHint,\n PcbPlatedHole,\n} from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\nimport { useGlobalStore } from \"global-store\"\nimport { Fragment, useEffect, useRef, useState } from \"react\"\nimport {\n type Matrix,\n applyToPoint,\n identity,\n inverse,\n} from \"transformation-matrix\"\nimport { HotkeyActionMenu } from \"./HotkeyActionMenu\"\nimport { useToast } from \"lib/toast\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { EditTraceHintEvent } from \"@tscircuit/props\"\n\ninterface Props {\n transform?: Matrix\n children: any\n soup: AnyCircuitElement[]\n disabled?: boolean\n cancelPanDrag: Function\n onCreateEditEvent: (event: EditTraceHintEvent) => void\n onModifyEditEvent: (event: Partial<EditTraceHintEvent>) => void\n}\n\ninterface Point {\n x: number\n y: number\n trace_width?: number\n}\n\nconst isInsideOfSmtpad = (\n elm: PcbSmtPad,\n point: { x: number; y: number },\n padding = 0,\n) => {\n if (elm.shape === \"circle\") {\n // Not implemented\n return false\n }\n const halfWidth = elm.width / 2\n const halfHeight = elm.height / 2\n\n const left = elm.x - halfWidth - padding\n const right = elm.x + halfWidth + padding\n const top = elm.y - halfHeight - padding\n const bottom = elm.y + halfHeight + padding\n\n return point.x > left && point.x < right && point.y > top && point.y < bottom\n}\n\nconst isInsideOfPlatedHole = (\n hole: PcbPlatedHole,\n point: { x: number; y: number },\n padding = 0,\n) => {\n if (hole.shape === \"circle\") {\n const distance = Math.sqrt(\n (point.x - hole.x) ** 2 + (point.y - hole.y) ** 2,\n )\n return distance <= hole.outer_diameter / 2 + padding\n } else if (hole.shape === \"circular_hole_with_rect_pad\") {\n const dx = Math.abs(point.x - hole.x)\n const dy = Math.abs(point.y - hole.y)\n if (\n dx < hole.rect_pad_width / 2 + padding &&\n dy < hole.rect_pad_height / 2 + padding\n ) {\n return true\n }\n return false\n } else if (hole.shape === \"oval\" || hole.shape === \"pill\") {\n const halfWidth = hole.hole_width / 2\n const halfHeight = hole.hole_height / 2\n\n const left = hole.x - halfWidth - padding\n const right = hole.x + halfWidth + padding\n const top = hole.y - halfHeight - padding\n const bottom = hole.y + halfHeight + padding\n\n return (\n point.x > left && point.x < right && point.y > top && point.y < bottom\n )\n }\n}\n\n/**\n * The trace hit overlay allows you to click a pad, after\n * clicking a pad you'll start dragging out a trace.\n *\n * Each time you click, you'll add to the trace hint path.\n *\n * If you click inside any existing hint, you'll stop adding\n * to the trace hint path.\n *\n * If you select an existing hint, you'll start dragging the\n * route hint. Mouse up stops dragging.\n *\n * If you right click on a hint, you'll delete it.\n *\n * If you right click when creating a trace hint, it will\n * place a hint you'll exit adding the trace hint.\n *\n */\nexport const EditTraceHintOverlay = ({\n children,\n disabled: disabledProp,\n transform,\n soup,\n cancelPanDrag,\n onCreateEditEvent,\n onModifyEditEvent,\n}: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\n const containerBounds = containerRef.current?.getBoundingClientRect()\n const [selectedElement, setSelectedElement] = useState<\n null | PcbSmtPad | PcbPlatedHole\n >(null)\n const toast = useToast()\n const [dragState, setDragState] = useState<{\n dragStart: { x: number; y: number }\n originalCenter: { x: number; y: number }\n dragEnd: { x: number; y: number }\n editEvent: EditTraceHintEvent\n shouldDrawRouteHint?: boolean\n } | null>(null)\n const [shouldCreateAsVia, setShouldCreateAsVia] = useState(false)\n const isElementSelected = selectedElement !== null\n const in_edit_trace_mode = useGlobalStore((s) => s.in_draw_trace_mode)\n\n const disabled = disabledProp || !in_edit_trace_mode\n\n let ogCenterScreen, dragEndScreen\n if (dragState?.originalCenter && dragState?.dragEnd) {\n ogCenterScreen = applyToPoint(transform, dragState?.originalCenter!)\n dragEndScreen = applyToPoint(transform, dragState?.dragEnd!)\n }\n\n useEffect(() => {\n if (!isElementSelected) return\n\n function keyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setSelectedElement(null)\n setDragState(null)\n }\n }\n\n window.addEventListener(\"keydown\", keyDown)\n return () => window.removeEventListener(\"keydown\", keyDown)\n }, [isElementSelected])\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n }}\n onMouseDown={(e) => {\n if (disabled) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (isNaN(x) || isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n\n if (!isElementSelected) {\n for (const e of soup) {\n if (\n (e.type === \"pcb_smtpad\" &&\n isInsideOfSmtpad(e, rwMousePoint, 10 / transform.a)) ||\n (e.type === \"pcb_plated_hole\" &&\n isInsideOfPlatedHole(e, rwMousePoint, 10 / transform.a))\n ) {\n if (!e.pcb_port_id) {\n toast.error(`pcb_port_id is null on the selected \"${e.type}\"`)\n return\n }\n setSelectedElement(e)\n setShouldCreateAsVia(false)\n setDragState({\n dragStart: rwMousePoint,\n originalCenter: { x: e.x, y: e.y },\n dragEnd: rwMousePoint,\n editEvent: {\n pcb_edit_event_type: \"edit_trace_hint\",\n pcb_port_id: e.pcb_port_id!,\n pcb_trace_hint_id: Math.random().toString(),\n route: [],\n created_at: Date.now(),\n edit_event_id: Math.random().toString(),\n in_progress: true,\n },\n shouldDrawRouteHint: false,\n })\n\n cancelPanDrag()\n break\n }\n }\n } else {\n setDragState({\n ...(dragState as any),\n dragStart: rwMousePoint,\n shouldDrawRouteHint: true,\n })\n }\n }}\n onMouseMove={(e) => {\n if (!isElementSelected || !dragState) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (isNaN(x) || isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n setDragState({\n ...dragState,\n dragEnd: rwMousePoint,\n })\n }}\n onMouseUp={(e) => {\n if (!isElementSelected) return\n if (!dragState?.shouldDrawRouteHint) return\n\n // Compute distance that has been dragged\n const { dragStart, dragEnd } = dragState\n const rwDist = Math.sqrt(\n (dragEnd.x - dragStart.x) ** 2 + (dragEnd.y - dragStart.y) ** 2,\n )\n const screenDist = rwDist * transform.a\n\n // If the user dragged, don't create a point\n if (screenDist > 20) return\n\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (isNaN(x) || isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n\n if (dragState) {\n cancelPanDrag()\n const lastPointScreen = applyToPoint(\n transform,\n dragState.editEvent.route.slice(-1)[0] ?? dragState.originalCenter,\n )\n const distanceFromLastPoint = Math.sqrt(\n (x - lastPointScreen.x) ** 2 + (y - lastPointScreen.y) ** 2,\n )\n if (distanceFromLastPoint < 20) {\n // Close the trace hint\n onCreateEditEvent({\n ...dragState.editEvent,\n in_progress: false,\n })\n setDragState(null)\n setSelectedElement(null)\n return\n }\n // Edit existing edit event by adding a new point at the rwMousePoint\n setDragState({\n ...dragState,\n editEvent: {\n ...dragState.editEvent,\n route: [\n ...dragState.editEvent.route,\n { ...rwMousePoint, via: shouldCreateAsVia },\n ],\n },\n })\n }\n }}\n >\n {children}\n {in_edit_trace_mode &&\n dragState?.editEvent &&\n ogCenterScreen &&\n dragEndScreen && (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.editTraceHintOverlay,\n }}\n width={containerBounds?.width}\n height={containerBounds?.height}\n >\n <path\n stroke=\"red\"\n d={`M ${ogCenterScreen.x} ${\n ogCenterScreen.y\n } ${dragState?.editEvent.route\n .map((p) => applyToPoint(transform!, p))\n .map((p) => `L ${p.x} ${p.y}`)\n .join(\" \")} L ${dragEndScreen.x} ${dragEndScreen.y}`}\n />\n {dragState?.editEvent.route.map((r, i) => {\n const rScreen = applyToPoint(transform!, r)\n return (\n <Fragment key={`r-${i}`}>\n {r.via && (\n <circle cx={rScreen.x} cy={rScreen.y} r={16} stroke=\"red\" />\n )}\n <circle cx={rScreen.x} cy={rScreen.y} r={8} stroke=\"red\" />\n </Fragment>\n )\n })}\n {shouldCreateAsVia && (\n <circle\n key=\"via-outer-circle\"\n cx={dragEndScreen.x}\n cy={dragEndScreen.y}\n r={16}\n stroke=\"red\"\n />\n )}\n <circle\n cx={dragEndScreen.x}\n cy={dragEndScreen.y}\n r={8}\n stroke=\"red\"\n />\n </svg>\n )}\n {!disabled && (\n <svg\n key={\"pcb-trace-hints\"}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.editTraceHintOverlay,\n }}\n width={containerBounds?.width}\n height={containerBounds?.height}\n >\n {soup\n .filter((e): e is PcbTraceHint => e.type === \"pcb_trace_hint\")\n .map((e) => {\n const { route } = e\n const pcb_port = su(soup as any).pcb_port.get(e.pcb_port_id)!\n const pcb_port_screen = applyToPoint(transform!, pcb_port)\n return (\n <Fragment key={e.pcb_trace_hint_id}>\n <rect\n key={`rect-${e.pcb_port_id}`}\n x={pcb_port_screen.x - 10}\n y={pcb_port_screen.y - 10}\n width={20}\n height={20}\n stroke=\"red\"\n />\n <path\n key={`path-${e.pcb_port_id}`}\n stroke=\"red\"\n d={`M ${pcb_port_screen.x} ${pcb_port_screen.y} ${route\n .map((r) => applyToPoint(transform!, r!))\n .map((r) => `L ${r.x} ${r.y}`)\n .join(\" \")}`}\n />\n {route\n .map((r) => ({ ...r, ...applyToPoint(transform, r!) }))\n .map((r, i) => (\n <Fragment key={i}>\n <circle cx={r.x} cy={r.y} r={8} stroke=\"red\" />\n {r.via && (\n <circle\n cx={r.x}\n cy={r.y}\n r={16}\n stroke=\"red\"\n fill=\"transparent\"\n />\n )}\n </Fragment>\n ))}\n </Fragment>\n )\n })}\n </svg>\n )}\n <div\n style={{\n position: \"absolute\",\n right: 0,\n bottom: 0,\n }}\n >\n {isElementSelected && (\n <HotkeyActionMenu\n hotkeys={[\n {\n key: \"v\",\n name: \"Toggle Via\",\n onUse: () => {\n setShouldCreateAsVia(!shouldCreateAsVia)\n },\n },\n // {\n // key: \"del\",\n // name: \"Delete Node\",\n // onUse: () => {},\n // },\n // {\n // key: \"r\",\n // name: \"Delete Route\",\n // onUse: () => {},\n // },\n ]}\n />\n )}\n </div>\n </div>\n )\n}\n\nfunction getExpandedStroke(\n strokeInput: (Point | [number, number] | number[])[],\n defaultWidth: number,\n): Point[] {\n if (strokeInput.length < 2) {\n throw new Error(\"Stroke must have at least two points\")\n }\n\n const stroke: Point[] = strokeInput.map((point) => {\n if (Array.isArray(point)) {\n return { x: point[0], y: point[1] }\n }\n return point as Point\n })\n\n const leftSide: Point[] = []\n const rightSide: Point[] = []\n\n function getNormal(p1: Point, p2: Point): Point {\n const dx = p2.x - p1.x\n const dy = p2.y - p1.y\n const length = Math.sqrt(dx * dx + dy * dy)\n return { x: -dy / length, y: dx / length }\n }\n\n function addPoint(\n point: Point,\n normal: Point,\n factor: number,\n width: number,\n ) {\n const halfWidth = width / 2\n const newPoint = {\n x: point.x + normal.x * halfWidth * factor,\n y: point.y + normal.y * halfWidth * factor,\n }\n if (factor > 0) {\n leftSide.push(newPoint)\n } else {\n rightSide.unshift(newPoint)\n }\n }\n\n // Handle the first point\n const firstNormal = getNormal(stroke[0]!, stroke[1]!)\n const firstWidth = stroke[0]!.trace_width ?? defaultWidth\n addPoint(stroke[0]!, firstNormal, 1, firstWidth)\n addPoint(stroke[0]!, firstNormal, -1, firstWidth)\n\n // Handle middle points\n for (let i = 1; i < stroke.length - 1; i++) {\n const prev = stroke[i - 1]!\n const current = stroke[i]!\n const next = stroke[i + 1]!\n\n const normalPrev = getNormal(prev, current)\n const normalNext = getNormal(current, next)\n\n // Calculate miter line\n const miterX = normalPrev.x + normalNext.x\n const miterY = normalPrev.y + normalNext.y\n const miterLength = Math.sqrt(miterX * miterX + miterY * miterY)\n\n const currentWidth = current.trace_width ?? defaultWidth\n\n // Check if miter is too long (sharp corner)\n const miterLimit = 2 // Adjust this value to control when to bevel\n if (miterLength / 2 > miterLimit * (currentWidth / 2)) {\n // Use bevel join\n addPoint(current, normalPrev, 1, currentWidth)\n addPoint(current, normalNext, 1, currentWidth)\n addPoint(current, normalPrev, -1, currentWidth)\n addPoint(current, normalNext, -1, currentWidth)\n } else {\n // Use miter join\n const scale = 1 / miterLength\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n 1,\n currentWidth,\n )\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n -1,\n currentWidth,\n )\n }\n }\n\n // Handle the last point\n const lastNormal = getNormal(\n stroke[stroke.length - 2]!,\n stroke[stroke.length - 1]!,\n )\n const lastWidth = stroke[stroke.length - 1]!.trace_width ?? defaultWidth\n addPoint(stroke[stroke.length - 1]!, lastNormal, 1, lastWidth)\n addPoint(stroke[stroke.length - 1]!, lastNormal, -1, lastWidth)\n\n // Combine left and right sides to form a closed polygon\n return [...leftSide, ...rightSide]\n}\n","import { css } from \"@emotion/css\"\nimport { useEffect } from \"react\"\n\nexport const HotkeyActionMenu = ({\n hotkeys,\n}: {\n hotkeys: Array<{\n key: string\n name: string\n onUse: Function\n }>\n}) => {\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n hotkeys.forEach((hotkey) => {\n if (event.key === hotkey.key) {\n hotkey.onUse()\n }\n })\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [hotkeys])\n\n return (\n <div\n className={css`\n display: flex;\n flex-direction: column;\n font-family: sans-serif;\n font-size: 12px;\n margin: 8px;\n `}\n >\n {hotkeys.map((hotkey) => {\n return (\n <div\n key={hotkey.name}\n className={css`\n display: flex;\n align-items: center;\n margin: 2px;\n\n & .key {\n padding: 1px;\n margin: 2px;\n color: rgba(255, 255, 255, 0.8);\n font-size: 9px;\n border-radius: 3px;\n text-align: center;\n width: 20px;\n background-color: #444;\n }\n\n & .name {\n margin-left: 4px;\n color: rgba(255, 255, 255, 0.8);\n }\n `}\n >\n <div className=\"key\">{hotkey.key}</div>{\" \"}\n <div className=\"name\">{hotkey.name}</div>\n </div>\n )\n })}\n </div>\n )\n}\n","import { css } from \"@emotion/css\"\nimport { su } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement, PcbPort, PcbTraceError } from \"circuit-json\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { useRef } from \"react\"\nimport { type Matrix, applyToPoint, identity } from \"transformation-matrix\"\nimport { useGlobalStore } from \"global-store\" // adjust the import path as needed\n\ninterface Props {\n transform?: Matrix\n elements?: AnyCircuitElement[]\n children: any\n}\n\nconst ErrorSVG = ({\n screenPort1,\n screenPort2,\n errorCenter,\n canLineBeDrawn,\n}: any) => (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.errorOverlay,\n }}\n width=\"100%\"\n height=\"100%\"\n >\n {canLineBeDrawn && (\n <>\n <line\n x1={screenPort1.x}\n y1={screenPort1.y}\n x2={errorCenter.x}\n y2={errorCenter.y}\n strokeWidth={1.5}\n strokeDasharray=\"2,2\"\n stroke=\"red\"\n />\n <line\n x1={errorCenter.x}\n y1={errorCenter.y}\n x2={screenPort2.x}\n y2={screenPort2.y}\n strokeWidth={1.5}\n strokeDasharray=\"2,2\"\n stroke=\"red\"\n />\n <rect\n x={errorCenter.x - 5}\n y={errorCenter.y - 5}\n width={10}\n height={10}\n transform={`rotate(45 ${errorCenter.x} ${errorCenter.y})`}\n fill=\"red\"\n />\n </>\n )}\n </svg>\n)\n\nconst RouteSVG = ({\n points,\n errorCenter,\n}: {\n points: { x: number; y: number }[]\n errorCenter: { x: number; y: number }\n}) => (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.errorOverlay,\n }}\n width=\"100%\"\n height=\"100%\"\n >\n {points.length > 1 && (\n <polyline\n points={points.map((pt) => `${pt.x},${pt.y}`).join(\" \")}\n fill=\"none\"\n stroke=\"red\"\n strokeWidth={1.5}\n strokeDasharray=\"2,2\"\n />\n )}\n <rect\n x={errorCenter.x - 5}\n y={errorCenter.y - 5}\n width={10}\n height={10}\n transform={`rotate(45 ${errorCenter.x} ${errorCenter.y})`}\n fill=\"red\"\n />\n </svg>\n)\n\nexport const ErrorOverlay = ({ children, transform, elements }: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\n const isShowingDRCErrors = useGlobalStore(\n (state) => state.is_showing_drc_errors,\n )\n\n return (\n <div style={{ position: \"relative\" }} ref={containerRef}>\n {children}\n {elements\n ?.filter((el): el is PcbTraceError => el.type === \"pcb_trace_error\")\n .map((el: PcbTraceError) => {\n const { pcb_port_ids, pcb_trace_id } = el\n const port1 = elements.find(\n (el): el is PcbPort =>\n el.type === \"pcb_port\" && el.pcb_port_id === pcb_port_ids?.[0],\n )\n const port2 = elements.find(\n (el): el is PcbPort =>\n el.type === \"pcb_port\" && el.pcb_port_id === pcb_port_ids?.[1],\n )\n const trace = su(elements).pcb_trace.get(pcb_trace_id)\n\n // port-based errors always show\n if (port1 && port2) {\n const screenPort1 = applyToPoint(transform, {\n x: port1.x,\n y: port1.y,\n })\n const screenPort2 = applyToPoint(transform, {\n x: port2.x,\n y: port2.y,\n })\n\n const canLineBeDrawn = !(\n isNaN(screenPort1.x) ||\n isNaN(screenPort1.y) ||\n isNaN(screenPort2.x) ||\n isNaN(screenPort2.y)\n )\n\n const errorCenter = {\n x: (screenPort1.x + screenPort2.x) / 2,\n y: (screenPort1.y + screenPort2.y) / 2,\n }\n\n if (isNaN(errorCenter.x) || isNaN(errorCenter.y)) {\n return null\n }\n\n return (\n <>\n <ErrorSVG\n screenPort1={screenPort1}\n screenPort2={screenPort2}\n errorCenter={errorCenter}\n canLineBeDrawn={canLineBeDrawn}\n />\n <div\n className={css`\n position: absolute;\n z-index: 100;\n left: ${errorCenter.x}px;\n top: ${errorCenter.y}px;\n color: red;\n text-align: center;\n font-family: sans-serif;\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n transform: translate(-50%, -100%);\n\n & .error-message {\n opacity: 0;\n pointer-events: none;\n\n width: 200px;\n transition: opacity 0.2s;\n margin-bottom: 10px;\n }\n\n &:hover .error-message {\n opacity: 1;\n display: flex;\n }\n `}\n >\n <div className=\"error-message\">{el.message}</div>\n <div\n className={css`\n width: 10px;\n height: 10px;\n transform: translate(0, 5px) rotate(45deg);\n background-color: red;\n `}\n />\n </div>\n </>\n )\n }\n // fallback: only show if global DRC errors enabled and route exists\n if (trace?.route && isShowingDRCErrors) {\n const screenPoints = trace.route.map((pt) =>\n applyToPoint(transform!, { x: pt.x, y: pt.y }),\n )\n if (screenPoints.some((pt) => isNaN(pt.x) || isNaN(pt.y)))\n return null\n const mid = Math.floor(screenPoints.length / 2)\n const errorCenter = screenPoints[mid]\n return (\n <>\n <RouteSVG points={screenPoints} errorCenter={errorCenter} />\n <div\n className={css`\n position: absolute;\n z-index: ${zIndexMap.errorOverlay + 1};\n left: ${errorCenter.x}px;\n top: ${errorCenter.y}px;\n color: red;\n text-align: center;\n font-family: sans-serif;\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n transform: translate(-50%, -100%);\n\n & .error-message { opacity: 0; pointer-events: none; width: 200px; transition: opacity 0.2s; margin-bottom: 10px; }\n &:hover .error-message { opacity: 1; display: flex; }\n `}\n >\n <div className=\"error-message\">{el.message}</div>\n <div\n className={css`\n width: 10px;\n height: 10px;\n transform: translate(0, 5px) rotate(45deg);\n background-color: red;\n `}\n />\n </div>\n </>\n )\n }\n\n return null\n })}\n </div>\n )\n}\n","import React, { useState, useMemo } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { applyToPoint, inverse } from \"transformation-matrix\"\nimport type { Primitive } from \"lib/types\"\nimport { ElementOverlayBox } from \"./ElementOverlayBox\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { ifSetsMatchExactly } from \"lib/util/if-sets-match-exactly\"\nimport { pointToSegmentDistance } from \"@tscircuit/math-utils\"\n\nconst getPrimitivesUnderPoint = (\n primitives: Primitive[],\n rwPoint: { x: number; y: number },\n transform: Matrix,\n): Primitive[] => {\n const newMousedPrimitives: Primitive[] = []\n\n for (const primitive of primitives) {\n if (!primitive._element) continue\n\n // Handle PCB traces\n if (\"x1\" in primitive && primitive._element?.type === \"pcb_trace\") {\n const distance = pointToSegmentDistance(\n { x: rwPoint.x, y: rwPoint.y },\n { x: primitive.x1, y: primitive.y1 },\n { x: primitive.x2, y: primitive.y2 },\n )\n\n const lineWidth = primitive.width || 0.5\n const detectionThreshold = Math.max(lineWidth * 25, 2) / transform!.a\n\n if (distance < detectionThreshold) {\n newMousedPrimitives.push(primitive)\n }\n continue\n }\n\n // Handle primitives with x, y coordinates\n if (!(\"x\" in primitive && \"y\" in primitive)) continue\n\n let w = 0\n let h = 0\n\n if (\"w\" in primitive && \"h\" in primitive) {\n w = primitive.w\n h = primitive.h\n } else if (\"r\" in primitive) {\n w = (primitive as any).r * 2\n h = (primitive as any).r * 2\n } else {\n continue\n }\n\n if (\n Math.abs((primitive as any).x - rwPoint.x) < w / 2 &&\n Math.abs((primitive as any).y - rwPoint.y) < h / 2\n ) {\n newMousedPrimitives.push(primitive)\n }\n }\n\n return newMousedPrimitives\n}\n\nexport const MouseElementTracker = ({\n elements,\n children,\n transform,\n primitives,\n onMouseHoverOverPrimitives,\n}: {\n elements: AnyCircuitElement[]\n children: any\n transform?: Matrix\n primitives: Primitive[]\n onMouseHoverOverPrimitives: (primitivesHoveredOver: Primitive[]) => void\n}) => {\n const [mousedPrimitives, setMousedPrimitives] = useState<Primitive[]>([])\n const [mousePos, setMousePos] = useState({ x: 0, y: 0 })\n const highlightedPrimitives = useMemo(() => {\n const highlightedPrimitives: HighlightedPrimitive[] = []\n for (const primitive of mousedPrimitives) {\n if (primitive._element?.type === \"pcb_via\") continue\n if (primitive._element?.type === \"pcb_component\") continue\n if (primitive?.layer === \"drill\") continue\n const screenPos = applyToPoint(\n transform!,\n primitive as { x: number; y: number },\n )\n const w =\n \"w\" in primitive ? primitive.w : \"r\" in primitive ? primitive.r * 2 : 0\n const h =\n \"h\" in primitive ? primitive.h : \"r\" in primitive ? primitive.r * 2 : 0\n const screenSize = {\n w: w * transform!.a,\n h: h * transform!.a,\n }\n\n // FANCY: If 2+ highlighted primitives inhabit the same space, give\n // them an incrementing same_space_index\n const same_space_index = highlightedPrimitives.filter(\n (hp) =>\n screenPos.x === hp.screen_x &&\n screenPos.y === hp.screen_y &&\n screenSize.w === hp.screen_w &&\n screenSize.h === hp.screen_h,\n ).length\n\n highlightedPrimitives.push({\n ...(primitive as any),\n screen_x: screenPos.x,\n screen_y: screenPos.y,\n screen_w: screenSize.w,\n screen_h: screenSize.h,\n same_space_index,\n })\n }\n\n return highlightedPrimitives\n }, [mousedPrimitives, transform])\n\n const handleInteraction = (\n x: number,\n y: number,\n transform: Matrix,\n primitives: Primitive[],\n ) => {\n setMousePos({ x, y })\n const rwPoint = applyToPoint(inverse(transform), { x, y })\n const newMousedPrimitives = getPrimitivesUnderPoint(\n primitives,\n rwPoint,\n transform,\n )\n\n if (\n ifSetsMatchExactly(\n new Set(newMousedPrimitives.map((p) => p._pcb_drawing_object_id)),\n new Set(mousedPrimitives.map((p) => p._pcb_drawing_object_id)),\n )\n ) {\n return\n }\n\n setMousedPrimitives(newMousedPrimitives)\n onMouseHoverOverPrimitives(newMousedPrimitives)\n }\n\n return (\n <div\n style={{ position: \"relative\" }}\n onMouseMove={(e) => {\n if (transform) {\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n handleInteraction(x, y, transform, primitives)\n }\n }}\n onTouchStart={(e) => {\n if (transform) {\n const touch = e.touches[0]\n const rect = e.currentTarget.getBoundingClientRect()\n const x = touch.clientX - rect.left\n const y = touch.clientY - rect.top\n handleInteraction(x, y, transform, primitives)\n }\n }}\n >\n {children}\n <ElementOverlayBox\n elements={elements}\n mousePos={mousePos}\n highlightedPrimitives={highlightedPrimitives}\n />\n </div>\n )\n}\n\nexport type HighlightedPrimitive = {\n x: number\n y: number\n w: number\n h: number\n same_space_index?: number\n _element: AnyCircuitElement\n _parent_pcb_component?: AnyCircuitElement\n _parent_source_component?: AnyCircuitElement\n _source_port?: AnyCircuitElement\n screen_x: number\n screen_y: number\n screen_w: number\n screen_h: number\n}\n","import React, { useEffect, useState } from \"react\"\nimport { HighlightedPrimitive } from \"./MouseElementTracker\"\nimport colors from \"lib/colors\"\nimport { useGlobalStore } from \"global-store\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { AnyCircuitElement } from \"circuit-json\"\nimport { getTraceOverlayInfo } from \"lib/get-trace-overlay-text\"\nimport { filterTracesIfMultiple } from \"lib/filter-traces-if-multiple\"\n\nconst containerStyle = {\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n color: \"red\",\n fontFamily: \"sans-serif\",\n fontSize: 12,\n textShadow: \"0 0 2px black\",\n} as const\n\nexport const getTextForHighlightedPrimitive = (\n prim: HighlightedPrimitive,\n): string => {\n const {\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n } = prim\n switch (element.type) {\n case \"pcb_trace\": {\n if (element.trace_length) {\n return `${element.trace_length.toFixed(3)}`\n }\n return \"\"\n }\n case \"pcb_smtpad\":\n case \"pcb_plated_hole\": {\n let s = \"\"\n\n if (\n _parent_source_component &&\n \"name\" in _parent_source_component &&\n _parent_source_component.name\n ) {\n s += `.${_parent_source_component.name} > `\n }\n\n const port_hints = Array.from(\n new Set(\n (element.port_hints ?? []).concat(\n (_source_port as any)?.port_hints ?? [],\n ),\n ),\n )\n // reverse alphabetical order\n .sort((a, b) => b.localeCompare(a))\n\n s += port_hints\n .map((ph: string) => (ph.match(/^[0-9]+$/) ? `port.${ph}` : `.${ph}`))\n .join(\", \")\n\n return s\n }\n default: {\n return \"\"\n }\n }\n}\n\nconst layerColorHightlightMap = {\n top: \"red\",\n bottom: \"aqua\",\n}\n\nexport const HighlightedPrimitiveBoxWithText = ({\n primitive,\n mousePos,\n elements,\n}: {\n elements: AnyCircuitElement[]\n primitive: HighlightedPrimitive\n mousePos: { x: number; y: number }\n}) => {\n const [finalState, setFinalState] = useState(false)\n const primitiveElement = primitive._element\n\n useEffect(() => {\n setTimeout(() => {\n setFinalState(true)\n }, 100)\n }, [])\n\n let [x, y, w, h] = [\n primitive.screen_x,\n primitive.screen_y,\n primitive.screen_w,\n primitive.screen_h,\n ]\n\n const si = primitive.same_space_index ?? 0\n const sip = 26\n\n const color: string =\n layerColorHightlightMap[\n (primitive as any)?._element\n ?.layer as keyof typeof layerColorHightlightMap\n ] ?? \"red\"\n\n // Check for rotation on the parent PCB component\n let rotation = 0\n if (\n primitiveElement.type === \"pcb_smtpad\" &&\n primitiveElement?.shape === \"rotated_rect\"\n ) {\n rotation = primitiveElement?.ccw_rotation\n }\n // In HighlightedPrimitiveBoxWithText component\n if (primitiveElement.type === \"pcb_trace\") {\n const traceTextContext = { primitiveElement, elements }\n const overlayInfo = getTraceOverlayInfo(traceTextContext)\n if (!overlayInfo) return null\n\n const yOffset = mousePos.y - 35\n\n return (\n <div\n style={{\n zIndex: zIndexMap.elementOverlay,\n position: \"absolute\",\n left: mousePos.x,\n top: yOffset,\n color,\n pointerEvents: \"none\",\n transform: \"translateX(-50%)\",\n }}\n >\n <div\n style={{\n backgroundColor: \"#f2efcc\",\n color: overlayInfo.isOverLength ? \"red\" : \"black\",\n textShadow: \"none\",\n WebkitFontSmoothing: \"antialiased\",\n MozOsxFontSmoothing: \"grayscale\",\n padding: \"6px 6px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n minWidth: \"45px\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n }}\n >\n {overlayInfo.text}\n </div>\n </div>\n )\n }\n\n return (\n <div\n style={{\n zIndex: zIndexMap.elementOverlay,\n position: \"absolute\",\n left: x - w / 2 - 8,\n top: y - h / 2 - 8,\n width: w + 16,\n height: h + 16,\n color,\n transform: `rotate(${-rotation}deg)`,\n transformOrigin: \"center center\",\n }}\n >\n <div\n style={{\n // width: finalState ? `${100 + 20 * si}%` : \"100%\",\n // height: finalState ? `${100 + 20 * si}%` : \"100%\",\n // marginLeft: finalState ? `${-10 * si}%` : 0,\n // marginTop: finalState ? `${-10 * si}%` : 0,\n width: finalState ? `calc(100% + ${sip * 2 * si}px)` : \"100%\",\n height: finalState ? `calc(100% + ${sip * 2 * si}px)` : \"100%\",\n marginLeft: finalState ? `${-sip * si}px` : 0,\n marginTop: finalState ? `${-sip * si}px` : 0,\n border: `1px solid ${color}`,\n opacity: finalState ? 1 : si === 0 ? 1 : 0,\n transition:\n \"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n bottom: h + 20 + sip * si,\n marginRight: finalState ? `${-sip * si}px` : 0,\n marginBottom: finalState ? 0 : -sip * si,\n transition: \"margin-right 0.2s, margin-bottom 0.2s\",\n backgroundColor: \"#f2efcc\",\n color: \"black\",\n textShadow: \"none\",\n WebkitFontSmoothing: \"antialiased\",\n MozOsxFontSmoothing: \"grayscale\",\n padding: \"6px 6px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n transform: `rotate(${rotation}deg)`,\n minWidth: \"45px\",\n textAlign: \"center\",\n }}\n >\n {getTextForHighlightedPrimitive(primitive)}\n </div>\n </div>\n </div>\n )\n}\n\nexport const ElementOverlayBox = ({\n highlightedPrimitives,\n mousePos,\n elements,\n}: {\n elements: AnyCircuitElement[]\n highlightedPrimitives: HighlightedPrimitive[]\n mousePos: { x: number; y: number }\n}) => {\n const [is_moving_component, is_showing_multiple_traces_length] =\n useGlobalStore((s) => [\n s.is_moving_component,\n s.is_showing_multiple_traces_length,\n ])\n const hasSmtPadAndTrace =\n highlightedPrimitives.some((p) => p._element.type === \"pcb_smtpad\") &&\n highlightedPrimitives.some((p) => p._element.type === \"pcb_trace\")\n\n let primitives = highlightedPrimitives\n // If both smtpad and trace are present, only return smtpads\n if (hasSmtPadAndTrace) {\n primitives = primitives.filter((p) => p._element.type === \"pcb_smtpad\")\n }\n // When having multiple traces filter traces to get only the shortest one\n primitives = filterTracesIfMultiple({\n primitives,\n is_showing_multiple_traces_length,\n elements,\n })\n\n return (\n <div style={containerStyle}>\n {!is_moving_component &&\n primitives.map((primitive, i) => (\n <HighlightedPrimitiveBoxWithText\n key={i}\n primitive={primitive}\n mousePos={mousePos}\n elements={elements}\n />\n ))}\n </div>\n )\n}\n","import { su } from \"@tscircuit/soup-util\"\nimport { AnyCircuitElement } from \"circuit-json\"\n\ninterface TraceTextContext {\n primitiveElement: any\n elements: AnyCircuitElement[]\n}\n\ninterface TraceOverlayInfo {\n text: string\n isOverLength: boolean\n}\n\nexport function getTraceOverlayInfo({\n primitiveElement,\n elements,\n}: TraceTextContext): TraceOverlayInfo | null {\n let text = primitiveElement.trace_length\n ? `${primitiveElement.trace_length.toFixed(3)}`\n : \"\"\n\n const trace = su(elements).source_trace.get(\n primitiveElement?.source_trace_id!,\n )\n // Get connection information\n if (trace?.display_name) {\n // Add max length info\n if (trace?.max_length) {\n text += ` / ${trace.max_length}mm `\n } else {\n text += \" mm \"\n }\n text += `(${trace.display_name})`\n }\n\n if (!text) return null\n\n const isOverLength =\n primitiveElement.trace_length &&\n trace?.max_length &&\n primitiveElement.trace_length > trace.max_length\n\n return {\n text,\n isOverLength,\n }\n}\n","import { AnyCircuitElement } from \"circuit-json\"\nimport { HighlightedPrimitive } from \"../components/MouseElementTracker\"\n\nexport function filterTracesIfMultiple(filterTraces: {\n primitives: HighlightedPrimitive[]\n is_showing_multiple_traces_length: boolean\n elements: AnyCircuitElement[]\n}): HighlightedPrimitive[] {\n const { primitives, is_showing_multiple_traces_length, elements } =\n filterTraces\n\n // Filter traces to get only PCB traces\n const traces = primitives.filter(\n (\n p,\n ): p is HighlightedPrimitive & {\n _element: {\n type: \"pcb_trace\"\n trace_length?: number\n }\n } => p._element.type === \"pcb_trace\",\n )\n\n // Find all source traces\n const sourceTraces = elements.filter((e) => e.type === \"source_trace\")\n\n // Get non-trace primitives\n const nonTraces = primitives.filter((p) => p._element.type !== \"pcb_trace\")\n\n // Find traces that have corresponding source traces with max_length\n const tracesWithMaxLength = traces.filter((trace) =>\n sourceTraces.some(\n (sourceTrace) =>\n trace._element.type === \"pcb_trace\" &&\n trace._element.source_trace_id === sourceTrace.source_trace_id &&\n sourceTrace.max_length !== undefined,\n ),\n )\n\n // If not showing multiple traces length, return non-traces and traces with\n // max length\n if (!is_showing_multiple_traces_length) {\n return [...nonTraces, ...tracesWithMaxLength]\n }\n\n // If multiple traces exist, return only the shortest one\n if (traces.length > 1) {\n const shortestTrace = traces.reduce((shortest, current) => {\n const shortestLength = shortest._element.trace_length\n const currentLength = current._element.trace_length\n return currentLength! < shortestLength! ? current : shortest\n }, traces[0])\n\n return [...nonTraces, shortestTrace]\n }\n\n return primitives\n}\n","export function ifSetsMatchExactly(set1: Set<any>, set2: Set<any>) {\n if (set1.size !== set2.size) return false\n return Array.from(set1).every((item) => set2.has(item))\n}\n","import { type Matrix, applyToPoint, identity } from \"transformation-matrix\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\nimport { useGlobalStore } from \"global-store\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { getFullConnectivityMapFromCircuitJson } from \"circuit-json-to-connectivity-map\"\nimport { useMemo } from \"react\"\n\ninterface Props {\n transform?: Matrix\n soup?: AnyCircuitElement[]\n children: any\n}\n\ntype Point = { x: number; y: number }\ntype RatsNestLine = {\n key: string\n startPoint: Point\n endPoint: Point\n isInNet: boolean\n}\n\nexport const RatsNestOverlay = ({ transform, soup, children }: Props) => {\n const isShowingRatsNest = useGlobalStore((s) => s.is_showing_rats_nest)\n\n const { netMap, idToNetMap } = useMemo(\n () => getFullConnectivityMapFromCircuitJson(soup || []),\n [soup],\n )\n\n const ratsNestLines = useMemo(() => {\n if (!soup || !isShowingRatsNest) return []\n\n const getElementPosition = (id: string): Point | null => {\n // @ts-ignore\n const element = su(soup)[id.replace(/_\\d+$/, \"\")].get(id)\n if (element && \"x\" in element && \"y\" in element) {\n return { x: element.x, y: element.y }\n }\n return null\n }\n\n const findNearestPointInNet = (\n sourcePoint: Point,\n netId: string,\n ): Point | null => {\n const connectedIds = netMap[netId] || []\n let nearestPoint: Point | null = null\n let minDistance = Infinity\n\n connectedIds.forEach((id) => {\n const pos = getElementPosition(id)\n if (pos) {\n const distance = Math.sqrt(\n (sourcePoint.x - pos.x) ** 2 + (sourcePoint.y - pos.y) ** 2,\n )\n if (distance < minDistance && distance > 0) {\n minDistance = distance\n nearestPoint = pos\n }\n }\n })\n\n return nearestPoint\n }\n\n const pcbPorts = su(soup).pcb_port.list()\n const sourceTraces = su(soup).source_trace.list()\n const lines: RatsNestLine[] = []\n\n pcbPorts.forEach((port, index) => {\n const netId = idToNetMap[port.pcb_port_id]\n\n let isInNet = false\n\n for (const trace of sourceTraces) {\n const sourceTrace = trace.connected_source_port_ids.includes(\n port.source_port_id,\n )\n if (sourceTrace && trace.connected_source_net_ids.length > 0) {\n isInNet = true\n }\n }\n\n if (!netId) return\n\n const startPoint = { x: port.x, y: port.y }\n const nearestPoint = findNearestPointInNet(startPoint, netId)\n\n if (!nearestPoint) return\n\n lines.push({\n key: `${port.pcb_port_id}-${index}`,\n startPoint,\n endPoint: nearestPoint,\n isInNet,\n })\n })\n\n return lines\n }, [soup, netMap, idToNetMap, isShowingRatsNest])\n\n if (!soup || !isShowingRatsNest) return children\n if (!transform) transform = identity()\n\n return (\n <div style={{ position: \"relative\" }}>\n {children}\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n opacity: 0.5,\n zIndex: zIndexMap.ratsNestOverlay,\n }}\n >\n {ratsNestLines.map(({ key, startPoint, endPoint, isInNet }) => {\n const transformedStart = applyToPoint(transform, startPoint)\n const transformedEnd = applyToPoint(transform, endPoint)\n\n return (\n <line\n key={key}\n x1={transformedStart.x}\n y1={transformedStart.y}\n x2={transformedEnd.x}\n y2={transformedEnd.y}\n stroke=\"white\"\n strokeWidth=\"1\"\n strokeDasharray={isInNet ? \"6,6\" : undefined}\n />\n )\n })}\n </svg>\n </div>\n )\n}\n","import { Fragment, useEffect, useState } from \"react\"\nimport { css } from \"@emotion/css\"\nimport { type LayerRef, type PcbTraceError, all_layers } from \"circuit-json\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { LAYER_NAME_TO_COLOR } from \"lib/Drawer\"\nimport { useGlobalStore } from \"global-store\"\nimport packageJson from \"../../package.json\"\nimport { useHotKey } from \"hooks/useHotKey\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\ninterface Props {\n children?: any\n elements?: AnyCircuitElement[]\n}\n\nexport const LayerButton = ({\n name,\n selected,\n onClick,\n}: {\n name: string\n selected?: boolean\n onClick: (e: any) => any\n}) => {\n return (\n <div\n className={css`\n margin-top: 2px;\n padding: 4px;\n padding-left: 8px;\n padding-right: 18px;\n cursor: pointer;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n `}\n onClick={onClick}\n >\n <span style={{ marginRight: 2, opacity: selected ? 1 : 0 }}>•</span>\n <span\n style={{\n marginLeft: 2,\n fontWeight: 500,\n color: (LAYER_NAME_TO_COLOR as any)[name.replace(/-/, \"\")],\n }}\n >\n {name}\n </span>\n </div>\n )\n}\n\nexport const ToolbarButton = ({ children, ...props }: any) => (\n <div\n {...props}\n style={{\n backgroundColor: \"#1F1F1F\",\n border: \"1px solid #666\",\n margin: 4,\n padding: 4,\n paddingLeft: 6,\n paddingRight: 6,\n borderRadius: 2,\n alignSelf: \"start\",\n color: \"#eee\",\n cursor: \"pointer\",\n ...props.style,\n }}\n >\n {children}\n </div>\n)\nconst CheckboxMenuItem = ({\n label,\n checked,\n onClick,\n}: {\n label: string\n checked: boolean\n onClick: () => void\n}) => {\n return (\n <div\n className={css`\n margin-top: 2px;\n padding: 4px;\n padding-left: 8px;\n padding-right: 18px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n `}\n onClick={(e) => {\n e.stopPropagation()\n onClick()\n }}\n >\n <input type=\"checkbox\" checked={checked} />\n <span style={{ color: \"#eee\" }}>{label}</span>\n </div>\n )\n}\n\nexport const ToolbarOverlay = ({ children, elements }: Props) => {\n const [isMouseOverContainer, setIsMouseOverContainer] = useGlobalStore(\n (s) => [s.is_mouse_over_container, s.setIsMouseOverContainer],\n ) as [boolean, (isFocused: boolean) => void]\n const [isViewMenuOpen, setViewMenuOpen] = useState(false)\n const [isLayerMenuOpen, setLayerMenuOpen] = useState(false)\n const [isErrorsOpen, setErrorsOpen] = useState(false)\n const [selectedLayer, selectLayer] = useGlobalStore(\n (s) => [s.selected_layer, s.selectLayer] as const,\n )\n const [\n in_move_footprint_mode,\n in_draw_trace_mode,\n is_showing_rats_nest,\n is_showing_multiple_traces_length,\n is_showing_autorouting,\n is_showing_drc_errors,\n ] = useGlobalStore((s) => [\n s.in_move_footprint_mode,\n s.in_draw_trace_mode,\n s.is_showing_rats_nest,\n s.is_showing_multiple_traces_length,\n s.is_showing_autorouting,\n s.is_showing_drc_errors,\n ])\n const setEditMode = useGlobalStore((s) => s.setEditMode)\n const setIsShowingRatsNest = useGlobalStore((s) => s.setIsShowingRatsNest)\n const setIsShowingMultipleTracesLength = useGlobalStore(\n (s) => s.setIsShowingMultipleTracesLength,\n )\n const setIsShowingAutorouting = useGlobalStore(\n (s) => s.setIsShowingAutorouting,\n )\n const setIsShowingDrcErrors = useGlobalStore((s) => s.setIsShowingDrcErrors)\n\n useHotKey(\"1\", () => selectLayer(\"top\"))\n useHotKey(\"2\", () => selectLayer(\"bottom\"))\n useHotKey(\"3\", () => selectLayer(\"inner1\"))\n useHotKey(\"4\", () => selectLayer(\"inner2\"))\n useHotKey(\"5\", () => selectLayer(\"inner3\"))\n useHotKey(\"6\", () => selectLayer(\"inner4\"))\n useHotKey(\"7\", () => selectLayer(\"inner5\"))\n useHotKey(\"8\", () => selectLayer(\"inner6\"))\n\n const errorCount =\n elements?.filter((e) => e.type.includes(\"error\")).length ?? 0\n return (\n <div\n style={{ position: \"relative\" }}\n onMouseEnter={() => {\n setIsMouseOverContainer(true)\n }}\n onMouseLeave={(e) => {\n setIsMouseOverContainer(false)\n setLayerMenuOpen(false)\n }}\n >\n {children}\n <div\n style={{\n position: \"absolute\",\n bottom: 4,\n right: 8,\n pointerEvents: \"none\",\n color: \"white\",\n fontSize: 11,\n opacity: isMouseOverContainer ? 0.5 : 0,\n transition: \"opacity 1s\",\n transitionDelay: \"2s\",\n fontFamily: \"sans-serif\",\n }}\n >\n @tscircuit/pcb-viewer@{packageJson.version}\n </div>\n <div\n style={{\n position: \"absolute\",\n opacity: isMouseOverContainer ? 1 : 0,\n top: 16,\n left: 16,\n transition: isMouseOverContainer\n ? \"opacity 100ms linear\"\n : \"opacity 1s linear\",\n zIndex: zIndexMap.toolbarOverlay,\n color: \"red\",\n display: \"flex\",\n fontSize: 12,\n height: 100,\n fontFamily: \"sans-serif\",\n }}\n >\n <ToolbarButton\n onClick={() => {\n setLayerMenuOpen(!isLayerMenuOpen)\n }}\n onMouseLeave={() => {\n if (isLayerMenuOpen) {\n setLayerMenuOpen(false)\n }\n }}\n >\n <div>\n layer:{\" \"}\n <span\n style={{\n marginLeft: 2,\n fontWeight: 500,\n color: (LAYER_NAME_TO_COLOR as any)[selectedLayer as string],\n }}\n >\n {selectedLayer as string}\n </span>\n </div>\n {isLayerMenuOpen && (\n <div style={{ marginTop: 4, minWidth: 120 }}>\n {all_layers\n .map((l) => l.replace(/-/g, \"\")) // TODO remove when inner-1 becomes inner1\n .map((layer) => (\n <LayerButton\n key={layer}\n name={layer}\n selected={layer === selectedLayer}\n onClick={() => {\n selectLayer(layer.replace(/-/, \"\") as LayerRef)\n }}\n />\n ))}\n </div>\n )}\n </ToolbarButton>\n <ToolbarButton\n style={errorCount > 0 ? { color: \"red\" } : {}}\n onClick={() => setErrorsOpen(!isErrorsOpen)}\n onMouseLeave={() => setErrorsOpen(false)}\n >\n <div>{errorCount} errors</div>\n {isErrorsOpen && (\n <div\n style={{ display: \"grid\", gridTemplateColumns: \"100px 300px\" }}\n >\n {elements\n ?.filter((e): e is PcbTraceError => e.type.includes(\"error\"))\n .map((e, i) => (\n <Fragment key={i}>\n <div>{e.error_type}</div>\n <div>{e.message}</div>\n </Fragment>\n ))}\n </div>\n )}\n </ToolbarButton>\n <ToolbarButton\n style={{}}\n onClick={() => {\n setEditMode(in_draw_trace_mode ? \"off\" : \"draw_trace\")\n }}\n >\n <div>\n {in_draw_trace_mode ? \"✖ \" : \"\"}\n Edit Traces\n </div>\n </ToolbarButton>\n <ToolbarButton\n style={{}}\n onClick={() => {\n setEditMode(in_move_footprint_mode ? \"off\" : \"move_footprint\")\n }}\n >\n <div>\n {in_move_footprint_mode ? \"✖ \" : \"\"}\n Move Components\n </div>\n </ToolbarButton>\n <ToolbarButton\n style={{}}\n onClick={() => {\n setIsShowingRatsNest(!is_showing_rats_nest)\n }}\n >\n <div>\n {is_showing_rats_nest ? \"✖ \" : \"\"}\n Rats Nest\n </div>\n </ToolbarButton>\n\n <ToolbarButton\n onClick={() => {\n setViewMenuOpen(!isViewMenuOpen)\n }}\n >\n <div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n View{\" \"}\n <span\n style={{\n fontSize: \"8px\",\n transform: isViewMenuOpen ? \"rotate(180deg)\" : \"rotate(0)\",\n transition: \"transform 0.1s ease\",\n display: \"inline-block\",\n }}\n >\n ▼\n </span>\n </div>\n {isViewMenuOpen && (\n <div style={{ marginTop: 4, minWidth: 120 }}>\n <CheckboxMenuItem\n label=\"Show All Trace Lengths\"\n checked={is_showing_multiple_traces_length}\n onClick={() => {\n setIsShowingMultipleTracesLength(\n !is_showing_multiple_traces_length,\n )\n }}\n />\n <CheckboxMenuItem\n label=\"Show Autorouting Animation\"\n checked={is_showing_autorouting}\n onClick={() => {\n setIsShowingAutorouting(!is_showing_autorouting)\n }}\n />\n <CheckboxMenuItem\n label=\"Show DRC Errors\"\n checked={is_showing_drc_errors}\n onClick={() => {\n setIsShowingDrcErrors(!is_showing_drc_errors)\n }}\n />\n </div>\n )}\n </div>\n </ToolbarButton>\n </div>\n </div>\n )\n}\n","{\n \"name\": \"@tscircuit/pcb-viewer\",\n \"version\": \"1.11.151\",\n \"main\": \"dist/index.js\",\n \"type\": \"module\",\n \"repository\": \"tscircuit/pcb-viewer\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"start\": \"storybook dev -p 6006\",\n \"build\": \"tsup ./src/index.tsx --platform browser --dts --sourcemap --format esm --outDir dist\",\n \"yalc\": \"npm run build && yalc push\",\n \"storybook\": \"storybook dev -p 6006\",\n \"build-storybook\": \"storybook build\",\n \"format\": \"biome format . --write\",\n \"format:check\": \"biome format .\"\n },\n \"files\": [\n \"dist\"\n ],\n \"devDependencies\": {\n \"@biomejs/biome\": \"^1.9.4\",\n \"@semantic-release/commit-analyzer\": \"^9.0.2\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/npm\": \"^9.0.1\",\n \"@semantic-release/release-notes-generator\": \"^10.0.3\",\n \"@storybook/nextjs\": \"^8.0.6\",\n \"@storybook/react\": \"^8.0.6\",\n \"@swc/core\": \"^1.4.12\",\n \"@tscircuit/eagle-xml-converter\": \"^1.0.0\",\n \"@tscircuit/props\": \"^0.0.192\",\n \"@tscircuit/soup-util\": \"^0.0.41\",\n \"@types/color\": \"^3.0.6\",\n \"@types/node\": \"18.7.23\",\n \"@types/react\": \"^18.3.3\",\n \"circuit-json\": \"^0.0.190\",\n \"next\": \"^14.1.4\",\n \"pixi.js\": \"^8.6.6\",\n \"react\": \"^18.2.0\",\n \"react-dom\": \"^18.2.0\",\n \"react-use\": \"^17.4.0\",\n \"storybook\": \"^8.0.6\",\n \"tsup\": \"^8.0.2\",\n \"type-fest\": \"^3.0.0\",\n \"typescript\": \"^5.4.4\",\n \"use-mouse-matrix-transform\": \"^1.3.4\",\n \"zod\": \"^3.23.5\"\n },\n \"peerDependencies\": {\n \"react\": \"*\"\n },\n \"dependencies\": {\n \"@emotion/css\": \"^11.11.2\",\n \"@tscircuit/core\": \"^0.0.422\",\n \"@tscircuit/math-utils\": \"^0.0.18\",\n \"circuit-json-to-connectivity-map\": \"^0.0.22\",\n \"circuit-to-svg\": \"^0.0.130\",\n \"color\": \"^4.2.3\",\n \"graphics-debug\": \"^0.0.24\",\n \"react-supergrid\": \"^1.0.10\",\n \"react-toastify\": \"^10.0.5\",\n \"transformation-matrix\": \"^2.13.0\",\n \"zustand\": \"^4.5.2\"\n }\n}\n","import { useEffect } from \"react\"\nimport { useGlobalStore } from \"global-store\"\n\nexport const useHotKey = (key: string, onUse: () => void) => {\n const isMouseOverContainer = useGlobalStore(\n (s) => s.is_mouse_over_container,\n ) as boolean\n\n useEffect(() => {\n if (!key || typeof onUse !== \"function\") return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const keyParts = key.split(\"+\")\n\n const ctrlRequired = keyParts.includes(\"ctrl\")\n const shiftRequired = keyParts.includes(\"shift\")\n const altRequired = keyParts.includes(\"alt\")\n const metaRequired = keyParts.includes(\"meta\")\n const mainKey = keyParts[keyParts.length - 1]\n\n if (\n isMouseOverContainer &&\n (!ctrlRequired || event.ctrlKey) &&\n (!shiftRequired || event.shiftKey) &&\n (!altRequired || event.altKey) &&\n (!metaRequired || event.metaKey) &&\n event.key.toLowerCase() === mainKey.toLowerCase()\n ) {\n event.preventDefault()\n onUse()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [key, onUse])\n}\n"],"mappings":"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CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW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","names":["util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","size","processed","r","_a","_b","ZodFirstPartyTypeKind","size","z","su","source_port","jsx","useEffect","useMemo","useRef","useState","useEffect","useEffect","useMemo","useMemo","_a","compose","scale","translate","translate","compose","applyToPoint","scale","useEffect","useState","getFullConnectivityMapFromCircuitJson","useCallback","useMemo","useState","point","length","current","scale","point","useEffect","useRef","applyToPoint","compose","identity","translate","identity","compose","translate","applyToPoint","angle","point","size","color","compose","translate","applyToPoint","jsx","useRef","useEffect","z","useEffect","useRef","jsx","jsxs","useRef","useEffect","useEffect","useRef","applyToPoint","identity","jsx","jsxs","identity","useRef","useEffect","width","height","applyToPoint","useEffect","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","container","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","pcb_component","point","e","Fragment","useEffect","useRef","useState","applyToPoint","identity","inverse","useEffect","jsx","jsxs","jsx","jsxs","point","distance","identity","useRef","useState","applyToPoint","useEffect","inverse","e","Fragment","pcb_port","css","useRef","applyToPoint","identity","Fragment","jsx","jsxs","identity","useRef","el","applyToPoint","css","useState","useMemo","applyToPoint","inverse","useEffect","useState","current","jsx","useState","useEffect","color","rotation","jsx","jsxs","distance","useState","useMemo","highlightedPrimitives","applyToPoint","transform","primitives","inverse","applyToPoint","identity","useMemo","jsx","jsxs","distance","identity","applyToPoint","Fragment","useState","css","useEffect","useEffect","jsx","jsxs","css","useState","Fragment","jsx","useMemo","primitivesWithoutInteractionMetadata","connectivityMap","getFullConnectivityMapFromCircuitJson","useState","useCallback","jsx","jsxs","compose","translate","scale","useState","useRef","height","useEffect","useMemo"]}
1
+ {"version":3,"sources":["../src/PCBViewer.tsx","../node_modules/zod/lib/index.mjs","../node_modules/nanoid/url-alphabet/index.js","../node_modules/nanoid/index.browser.js","../node_modules/circuit-json/src/utils/convert-si-unit-to-number.ts","../node_modules/circuit-json/src/units/index.ts","../node_modules/circuit-json/src/common/point.ts","../node_modules/circuit-json/src/common/point3.ts","../node_modules/circuit-json/src/common/size.ts","../node_modules/circuit-json/src/common/getZodPrefixedIdWithDefault.ts","../node_modules/circuit-json/src/source/source_simple_capacitor.ts","../node_modules/circuit-json/src/pcb/properties/supplier_name.ts","../node_modules/circuit-json/src/utils/expect-types-match.ts","../node_modules/circuit-json/src/source/base/source_component_base.ts","../node_modules/circuit-json/src/source/source_simple_resistor.ts","../node_modules/circuit-json/src/source/source_simple_diode.ts","../node_modules/circuit-json/src/source/source_simple_led.ts","../node_modules/circuit-json/src/source/source_simple_ground.ts","../node_modules/circuit-json/src/source/source_simple_bug.ts","../node_modules/circuit-json/src/source/source_simple_chip.ts","../node_modules/circuit-json/src/source/source_led.ts","../node_modules/circuit-json/src/source/source_simple_power_source.ts","../node_modules/circuit-json/src/source/any_source_component.ts","../node_modules/circuit-json/src/source/source_simple_fuse.ts","../node_modules/circuit-json/src/source/source_simple_battery.ts","../node_modules/circuit-json/src/source/source_simple_inductor.ts","../node_modules/circuit-json/src/source/source_simple_push_button.ts","../node_modules/circuit-json/src/source/source_simple_potentiometer.ts","../node_modules/circuit-json/src/source/source_simple_crystal.ts","../node_modules/circuit-json/src/source/source_simple_pin_header.ts","../node_modules/circuit-json/src/source/source_simple_resonator.ts","../node_modules/circuit-json/src/source/source_simple_transistor.ts","../node_modules/circuit-json/src/source/source_simple_mosfet.ts","../node_modules/circuit-json/src/source/source_simple_switch.ts","../node_modules/circuit-json/src/source/source_project_metadata.ts","../node_modules/circuit-json/src/source/source_missing_property_error.ts","../node_modules/circuit-json/src/source/source_failed_to_create_component_error.ts","../node_modules/circuit-json/src/source/source_port.ts","../node_modules/circuit-json/src/source/source_trace.ts","../node_modules/circuit-json/src/source/source_group.ts","../node_modules/circuit-json/src/source/source_net.ts","../node_modules/circuit-json/src/schematic/schematic_box.ts","../node_modules/circuit-json/src/schematic/schematic_path.ts","../node_modules/circuit-json/src/schematic/schematic_component.ts","../node_modules/circuit-json/src/schematic/schematic_line.ts","../node_modules/circuit-json/src/schematic/schematic_trace.ts","../node_modules/circuit-json/src/schematic/schematic_text.ts","../node_modules/circuit-json/src/common/NinePointAnchor.ts","../node_modules/circuit-json/src/common/FivePointAnchor.ts","../node_modules/circuit-json/src/schematic/schematic_port.ts","../node_modules/circuit-json/src/schematic/schematic_net_label.ts","../node_modules/circuit-json/src/schematic/schematic_error.ts","../node_modules/circuit-json/src/schematic/schematic_debug_object.ts","../node_modules/circuit-json/src/schematic/schematic_voltage_probe.ts","../node_modules/circuit-json/src/schematic/schematic_manual_edit_conflict_warning.ts","../node_modules/circuit-json/src/schematic/schematic_group.ts","../node_modules/circuit-json/src/pcb/properties/layer_ref.ts","../node_modules/circuit-json/src/pcb/properties/pcb_route_hints.ts","../node_modules/circuit-json/src/pcb/properties/route_hint_point.ts","../node_modules/circuit-json/src/pcb/pcb_component.ts","../node_modules/circuit-json/src/pcb/pcb_hole.ts","../node_modules/circuit-json/src/pcb/pcb_plated_hole.ts","../node_modules/circuit-json/src/pcb/pcb_port.ts","../node_modules/circuit-json/src/pcb/pcb_smtpad.ts","../node_modules/circuit-json/src/pcb/pcb_solder_paste.ts","../node_modules/circuit-json/src/pcb/pcb_text.ts","../node_modules/circuit-json/src/pcb/pcb_trace.ts","../node_modules/circuit-json/src/pcb/pcb_trace_error.ts","../node_modules/circuit-json/src/pcb/pcb_port_not_matched_error.ts","../node_modules/circuit-json/src/pcb/pcb_via.ts","../node_modules/circuit-json/src/pcb/pcb_board.ts","../node_modules/circuit-json/src/pcb/pcb_placement_error.ts","../node_modules/circuit-json/src/pcb/pcb_trace_hint.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_line.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_path.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_text.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_rect.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_circle.ts","../node_modules/circuit-json/src/pcb/pcb_silkscreen_oval.ts","../node_modules/circuit-json/src/pcb/pcb_fabrication_note_text.ts","../node_modules/circuit-json/src/pcb/pcb_fabrication_note_path.ts","../node_modules/circuit-json/src/pcb/pcb_keepout.ts","../node_modules/circuit-json/src/pcb/pcb_cutout.ts","../node_modules/circuit-json/src/pcb/pcb_missing_footprint_error.ts","../node_modules/circuit-json/src/pcb/pcb_group.ts","../node_modules/circuit-json/src/pcb/pcb_autorouting_error.ts","../node_modules/circuit-json/src/pcb/pcb_manual_edit_conflict_warning.ts","../node_modules/circuit-json/src/cad/cad_component.ts","../node_modules/circuit-json/src/any_circuit_element.ts","../node_modules/@tscircuit/soup-util/lib/su.ts","../node_modules/@tscircuit/soup-util/lib/transform-soup-elements.ts","../node_modules/@tscircuit/soup-util/lib/direction-to-vec.ts","../node_modules/@tscircuit/soup-util/lib/apply-selector.ts","../node_modules/@tscircuit/soup-util/lib/convert-abbreviation-to-soup-element-type.ts","../node_modules/@tscircuit/soup-util/lib/get-element-id.ts","../node_modules/@tscircuit/soup-util/lib/get-element-by-id.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-pcb-trace.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-pcb-port.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-pcb-smtpad.ts","../node_modules/@tscircuit/soup-util/lib/readable-name-functions/get-readable-name-for-element.ts","../node_modules/@tscircuit/soup-util/lib/get-bounds-of-pcb-elements.ts","../node_modules/@tscircuit/soup-util/lib/utils/string-hash.ts","../node_modules/@tscircuit/soup-util/lib/utils/get-layout-debug-object.ts","../node_modules/@tscircuit/soup-util/lib/utils/is-truthy.ts","../node_modules/@tscircuit/soup-util/lib/find-bounds-and-center.ts","../src/components/ContextProviders.tsx","../src/global-store.ts","../src/lib/toast.tsx","../node_modules/react-use/esm/misc/util.js","../node_modules/react-use/esm/useIsomorphicLayoutEffect.js","../node_modules/react-use/esm/useMeasure.js","../node_modules/use-mouse-matrix-transform/src/computePinchTransform.ts","../node_modules/use-mouse-matrix-transform/src/index.ts","../src/components/CanvasElementsRenderer.tsx","../src/lib/util/addInteractionMetadataToPrimitives.ts","../src/lib/util/expand-stroke.ts","../src/lib/convert-element-to-primitive.ts","../src/components/CanvasPrimitiveRenderer.tsx","../src/lib/Drawer.ts","../src/lib/colors.ts","../src/lib/util/scale-only.ts","../src/lib/util/z-index-map.ts","../src/lib/util/rotate-text.ts","../src/assets/alphabet.ts","../src/lib/convert-text-to-lines.ts","../src/lib/draw-primitives.ts","../src/components/DebugGraphicsOverlay.tsx","../src/components/WarningGraphicsOverlay.tsx","../src/components/DimensionOverlay.tsx","../src/components/EditPlacementOverlay.tsx","../src/components/EditTraceHintOverlay.tsx","../src/components/HotkeyActionMenu.tsx","../src/components/ErrorOverlay.tsx","../src/components/MouseElementTracker.tsx","../src/components/ElementOverlayBox.tsx","../src/lib/get-trace-overlay-text.ts","../src/lib/filter-traces-if-multiple.ts","../src/lib/util/if-sets-match-exactly.ts","../src/components/RatsNestOverlay.tsx","../src/components/ToolbarOverlay.tsx","../package.json","../src/hooks/useHotKey.ts"],"sourcesContent":["import { applyEditEvents } from \"@tscircuit/core\"\nimport { findBoundsAndCenter } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement, SourceTrace } from \"circuit-json\"\nimport { ContextProviders } from \"components/ContextProviders\"\nimport type { StateProps } from \"global-store\"\nimport type { GraphicsObject } from \"graphics-debug\"\nimport { ToastContainer } from \"lib/toast\"\nimport { useEffect, useMemo, useRef, useState } from \"react\"\nimport { useMeasure } from \"react-use\"\nimport { compose, scale, translate } from \"transformation-matrix\"\nimport useMouseMatrixTransform from \"use-mouse-matrix-transform\"\nimport { CanvasElementsRenderer } from \"./components/CanvasElementsRenderer\"\nimport type { ManualEditEvent } from \"@tscircuit/props\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\n\nconst defaultTransform = compose(translate(400, 300), scale(40, -40))\n\ntype Props = {\n circuitJson?: AnyCircuitElement[]\n height?: number\n allowEditing?: boolean\n editEvents?: ManualEditEvent[]\n initialState?: Partial<StateProps>\n onEditEventsChanged?: (editEvents: ManualEditEvent[]) => void\n focusOnHover?: boolean\n clickToInteractEnabled?: boolean\n debugGraphics?: GraphicsObject | null\n}\n\nexport const PCBViewer = ({\n circuitJson,\n debugGraphics,\n height = 600,\n initialState,\n allowEditing = true,\n editEvents: editEventsProp,\n onEditEventsChanged,\n focusOnHover = false,\n clickToInteractEnabled = false,\n}: Props) => {\n const [isInteractionEnabled, setIsInteractionEnabled] = useState(\n !clickToInteractEnabled,\n )\n const [ref, refDimensions] = useMeasure()\n const [transform, setTransformInternal] = useState(defaultTransform)\n const {\n ref: transformRef,\n setTransform,\n cancelDrag: cancelPanDrag,\n } = useMouseMatrixTransform({\n transform,\n onSetTransform: setTransformInternal,\n enabled: isInteractionEnabled,\n })\n\n let [editEvents, setEditEvents] = useState<ManualEditEvent[]>([])\n editEvents = editEventsProp ?? editEvents\n\n const initialRenderCompleted = useRef(false)\n const touchStartRef = useRef<{ x: number; y: number } | null>(null)\n const circuitJsonKey = `${circuitJson?.length || 0}_${(circuitJson as any)?.editCount || 0}`\n\n const resetTransform = () => {\n const elmBounds =\n refDimensions?.width > 0 ? refDimensions : { width: 500, height: 500 }\n const { center, width, height } = elements.some((e) =>\n e.type.startsWith(\"pcb_\"),\n )\n ? findBoundsAndCenter(\n elements.filter((e) => e.type.startsWith(\"pcb_\")) as any,\n )\n : { center: { x: 0, y: 0 }, width: 0.001, height: 0.001 }\n const scaleFactor =\n Math.min(\n (elmBounds.width ?? 0) / width,\n (elmBounds.height ?? 0) / height,\n 100,\n ) * 0.75\n\n const targetTransform = compose(\n translate((elmBounds.width ?? 0) / 2, (elmBounds.height ?? 0) / 2),\n scale(scaleFactor, -scaleFactor, 0, 0),\n translate(-center.x, -center.y),\n )\n\n setTransform(targetTransform)\n return\n }\n\n useEffect(() => {\n if (!refDimensions?.width) return\n if (!circuitJson) return\n if (circuitJson.length === 0) return\n\n if (!initialRenderCompleted.current) {\n resetTransform()\n initialRenderCompleted.current = true\n }\n }, [circuitJson, refDimensions])\n\n const pcbElmsPreEdit = useMemo(() => {\n return (\n circuitJson?.filter(\n (e: any) => e.type.startsWith(\"pcb_\") || e.type.startsWith(\"source_\"),\n ) ?? []\n )\n }, [circuitJsonKey])\n\n const elements = useMemo(() => {\n return applyEditEvents({\n circuitJson: pcbElmsPreEdit as any,\n editEvents,\n })\n }, [pcbElmsPreEdit, editEvents])\n\n const onCreateEditEvent = (event: ManualEditEvent) => {\n setEditEvents([...editEvents, event])\n onEditEventsChanged?.([...editEvents, event])\n }\n const onModifyEditEvent = (modifiedEvent: Partial<ManualEditEvent>) => {\n const newEditEvents: ManualEditEvent[] = editEvents.map((e) =>\n e.edit_event_id === modifiedEvent.edit_event_id\n ? ({ ...e, ...modifiedEvent } as ManualEditEvent)\n : e,\n )\n setEditEvents(newEditEvents)\n onEditEventsChanged?.(newEditEvents)\n }\n\n return (\n <div ref={transformRef as any} style={{ position: \"relative\" }}>\n <div ref={ref as any}>\n <ContextProviders initialState={initialState}>\n <CanvasElementsRenderer\n key={refDimensions.width}\n transform={transform}\n height={height}\n width={refDimensions.width}\n allowEditing={allowEditing}\n focusOnHover={focusOnHover}\n cancelPanDrag={cancelPanDrag}\n onCreateEditEvent={onCreateEditEvent}\n onModifyEditEvent={onModifyEditEvent}\n grid={{\n spacing: 1,\n view_window: {\n left: 0,\n right: refDimensions.width || 500,\n top: height,\n bottom: 0,\n },\n }}\n elements={elements as SourceTrace[]}\n debugGraphics={debugGraphics}\n />\n <ToastContainer />\n </ContextProviders>\n </div>\n {clickToInteractEnabled && !isInteractionEnabled && (\n <div\n onClick={() => {\n setIsInteractionEnabled(true)\n resetTransform()\n }}\n onTouchStart={(e) => {\n const touch = e.touches[0]\n touchStartRef.current = {\n x: touch.clientX,\n y: touch.clientY,\n }\n }}\n onTouchEnd={(e) => {\n const touch = e.changedTouches[0]\n const start = touchStartRef.current\n if (!start) return\n\n const deltaX = Math.abs(touch.clientX - start.x)\n const deltaY = Math.abs(touch.clientY - start.y)\n\n if (deltaX < 10 && deltaY < 10) {\n e.preventDefault()\n setIsInteractionEnabled(true)\n resetTransform()\n }\n\n touchStartRef.current = null\n }}\n style={{\n position: \"absolute\",\n inset: 0,\n cursor: \"pointer\",\n zIndex: zIndexMap.clickToInteractOverlay,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n touchAction: \"pan-x pan-y pinch-zoom\",\n }}\n >\n <div\n style={{\n backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n color: \"white\",\n padding: \"12px 24px\",\n borderRadius: \"8px\",\n fontSize: \"16px\",\n pointerEvents: \"none\",\n }}\n >\n {typeof window !== \"undefined\" &&\n (\"ontouchstart\" in window || navigator.maxTouchPoints > 0)\n ? \"Touch to Interact\"\n : \"Click to Interact\"}\n </div>\n </div>\n )}\n </div>\n )\n}\n","var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === errorMap ? undefined : errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n var _a, _b;\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if ((_b = (_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (!decoded.typ || !decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a, _b;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch (_a) {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result)\n ? result.then((data) => freeze(data))\n : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nfunction custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n var _a, _b;\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","type UnitInfo = {\n baseUnit: BaseTscircuitUnit\n conversionFactor: number\n}\n\nconst unitMappings: Record<\n string,\n { baseUnit: BaseTscircuitUnit; variants: Record<string, number> }\n> = {\n Hz: {\n baseUnit: \"Hz\",\n variants: {\n MHz: 1e6,\n kHz: 1e3,\n Hz: 1,\n },\n },\n g: {\n baseUnit: \"g\",\n variants: {\n kg: 1e3,\n g: 1,\n },\n },\n Ω: {\n baseUnit: \"Ω\",\n variants: {\n mΩ: 1e-3,\n Ω: 1,\n kΩ: 1e3,\n KΩ: 1e3,\n kohm: 1e3,\n MΩ: 1e6,\n GΩ: 1e9,\n TΩ: 1e12,\n },\n },\n V: {\n baseUnit: \"V\",\n variants: {\n mV: 1e-3,\n V: 1,\n kV: 1e3,\n KV: 1e3,\n MV: 1e6,\n GV: 1e9,\n TV: 1e12,\n },\n },\n A: {\n baseUnit: \"A\",\n variants: {\n µA: 1e-6,\n mA: 1e-3,\n ma: 1e-3,\n A: 1,\n kA: 1e3,\n MA: 1e6,\n },\n },\n F: {\n baseUnit: \"F\",\n variants: {\n pF: 1e-12,\n nF: 1e-9,\n µF: 1e-6,\n uF: 1e-6,\n mF: 1e-3,\n F: 1,\n },\n },\n ml: {\n baseUnit: \"ml\",\n variants: {\n ml: 1,\n mL: 1,\n l: 1e3,\n L: 1e3,\n },\n },\n deg: {\n baseUnit: \"deg\",\n variants: {\n rad: 180 / Math.PI,\n },\n },\n ms: {\n baseUnit: \"ms\",\n variants: {\n s: 1000,\n },\n },\n mm: {\n baseUnit: \"mm\",\n variants: {\n nm: 1e-6,\n µm: 1e-3,\n um: 1e-3,\n mm: 1,\n cm: 10,\n dm: 100,\n m: 1000,\n km: 1e6,\n in: 25.4,\n ft: 304.8,\n IN: 25.4,\n FT: 304.8,\n yd: 914.4,\n mi: 1.609344e6,\n mil: 0.0254,\n },\n },\n}\n\nconst unitMappingAndVariantSuffixes = new Set()\nfor (const [baseUnit, info] of Object.entries(unitMappings)) {\n unitMappingAndVariantSuffixes.add(baseUnit)\n for (const variant of Object.keys(info.variants)) {\n unitMappingAndVariantSuffixes.add(variant)\n }\n}\n\nfunction getBaseTscircuitUnit(unit: string): UnitInfo {\n for (const [baseUnit, info] of Object.entries(unitMappings)) {\n if (unit in info.variants) {\n return {\n baseUnit: info.baseUnit,\n conversionFactor: info.variants[unit]!,\n }\n }\n }\n return {\n baseUnit: unit as BaseTscircuitUnit,\n conversionFactor: 1,\n }\n}\n\nconst si_prefix_multiplier = {\n tera: 1e12,\n T: 1e12,\n giga: 1e9,\n G: 1e9,\n mega: 1e6,\n M: 1e6,\n kilo: 1e3,\n k: 1e3,\n deci: 1e-1,\n d: 1e-1,\n centi: 1e-2,\n c: 1e-2,\n milli: 1e-3,\n m: 1e-3,\n micro: 1e-6,\n u: 1e-6,\n µ: 1e-6,\n nano: 1e-9,\n n: 1e-9,\n pico: 1e-12,\n p: 1e-12,\n}\ntype BaseTscircuitUnit =\n | \"ms\"\n | \"mm\"\n | \"g\"\n | \"deg\"\n | \"Hz\"\n | \"ml\"\n | \"V\"\n | \"A\"\n | \"Ω\"\n | \"F\"\n | \"H\"\n\nexport const parseAndConvertSiUnit = <\n T extends\n | string\n | number\n | undefined\n | { x: string | number; y: string | number },\n>(\n v: T,\n): {\n parsedUnit: string | null\n unitOfValue: BaseTscircuitUnit | null\n value: T extends { x: string | number; y: string | number }\n ? null | { x: number; y: number }\n : null | number\n} => {\n if (typeof v === \"undefined\")\n return { parsedUnit: null, unitOfValue: null, value: null }\n if (typeof v === \"string\" && v.match(/^-?[\\d\\.]+$/))\n return {\n value: Number.parseFloat(v) as any,\n parsedUnit: null,\n unitOfValue: null,\n }\n if (typeof v === \"number\")\n return { value: v as any, parsedUnit: null, unitOfValue: null }\n if (typeof v === \"object\" && \"x\" in v && \"y\" in v) {\n const { parsedUnit, unitOfValue } = parseAndConvertSiUnit(v.x)\n return {\n parsedUnit: parsedUnit,\n unitOfValue: unitOfValue,\n value: {\n x: parseAndConvertSiUnit(v.x as any).value as number,\n y: parseAndConvertSiUnit(v.y as any).value as number,\n } as any,\n }\n }\n const reversed_input_string = v.toString().split(\"\").reverse().join(\"\")\n const unit_reversed = reversed_input_string.match(/[^\\d\\s]+/)?.[0]\n if (!unit_reversed) {\n throw new Error(`Could not determine unit: \"${v}\"`)\n }\n const unit = unit_reversed.split(\"\").reverse().join(\"\")\n\n const numberPart = v.slice(0, -unit.length)\n if (\n unit in si_prefix_multiplier &&\n !unitMappingAndVariantSuffixes.has(unit)\n ) {\n const siMultiplier =\n si_prefix_multiplier[unit as keyof typeof si_prefix_multiplier]\n return {\n parsedUnit: null,\n unitOfValue: null,\n value: (Number.parseFloat(numberPart) * siMultiplier) as any,\n }\n }\n\n const { baseUnit, conversionFactor } = getBaseTscircuitUnit(unit)\n\n return {\n parsedUnit: unit,\n unitOfValue: baseUnit,\n value: (conversionFactor * Number.parseFloat(numberPart)) as any,\n }\n}\n","import { parseAndConvertSiUnit } from \"src/utils/convert-si-unit-to-number\"\nimport { z } from \"zod\"\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).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).value!)\n\nexport const voltage = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(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).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).value!)\n\nexport const time = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\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\"\n\nexport const point = z.object({\n x: distance,\n y: distance,\n})\n\nexport const position = point\n\nexport type Point = z.infer<typeof point>\nexport type InputPoint = z.input<typeof point>\nexport type InputPosition = z.input<typeof position>\nexport type Position = z.infer<typeof position>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const point3 = z.object({\n x: distance,\n y: distance,\n z: distance,\n})\n\nexport const position3 = point3\n\nexport type Point3 = z.infer<typeof point3>\n","import { z } from \"zod\"\n\nexport const size = z.object({\n width: z.number(),\n height: z.number(),\n})\n\nexport type Size = z.infer<typeof size>\n","import { z } from \"zod\"\nimport { nanoid } from \"nanoid\"\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}_${nanoid(10)}`)\n}\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\"\n\nexport const supplier_name = z.enum([\n \"jlcpcb\",\n \"macrofab\",\n \"pcbway\",\n \"digikey\",\n \"mouser\",\n \"lcsc\",\n])\n\nexport type SupplierName = z.infer<typeof supplier_name>\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 {\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 are_pins_interchangeable?: boolean\n internally_connected_source_port_ids?: string[][]\n source_group_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 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})\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 {\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 { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\n/**\n * @deprecated Use source_simple_chip instead. This will be removed in a future version.\n */\nexport const source_simple_bug = source_component_base\n .extend({\n ftype: z.literal(\"simple_bug\"),\n })\n .describe(\"@deprecated\")\n\nexport type source_simple_bug = z.infer<typeof source_simple_bug>\nexport type SourceSimpleBugInput = z.input<typeof source_simple_bug>\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 { source_simple_diode } from \"./source_simple_diode\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\nimport type { SourceComponentBase } from \"./base/source_component_base\"\n\nexport const source_led = source_simple_diode.extend({\n ftype: z.literal(\"led\"),\n})\n\nexport type SourceLedInput = z.input<typeof source_led>\ntype InferredSourceLed = z.infer<typeof source_led>\n\n/**\n * Defines an LED component that extends the simple diode\n */\nexport interface SourceLed extends SourceComponentBase {\n ftype: \"led\"\n}\n\nexpectTypesMatch<SourceLed, InferredSourceLed>(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_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 { 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_bug } from \"./source_simple_bug\"\nimport { source_simple_chip, type SourceSimpleChip } from \"./source_simple_chip\"\nimport { source_led, type SourceLed } from \"./source_led\"\nimport {\n source_simple_power_source,\n type SourceSimplePowerSource,\n} from \"./source_simple_power_source\"\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_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_mosfet,\n type SourceSimpleMosfet,\n} from \"./source_simple_mosfet\"\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\"\n\nexport const any_source_component = z.union([\n source_simple_resistor,\n source_simple_capacitor,\n source_simple_diode,\n source_simple_led,\n source_simple_ground,\n source_simple_chip,\n source_simple_bug,\n source_led,\n source_simple_power_source,\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_resonator,\n source_simple_switch,\n source_simple_transistor,\n source_simple_mosfet,\n source_simple_fuse,\n source_project_metadata,\n source_missing_property_error,\n source_failed_to_create_component_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 | SourceSimpleLed\n | SourceSimpleGround\n | SourceSimpleChip\n | SourceLed\n | SourceSimplePowerSource\n | SourceSimpleBattery\n | SourceSimpleInductor\n | SourceSimplePushButton\n | SourceSimplePotentiometer\n | SourceSimpleCrystal\n | SourceSimplePinHeader\n | SourceSimpleResonator\n | SourceSimpleSwitch\n | SourceSimpleTransistor\n | SourceSimpleMosfet\n | SourceSimpleFuse\n | SourceProjectMetadata\n | SourceMissingPropertyError\n | SourceFailedToCreateComponentError\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 { 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})\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}\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 { source_component_base } from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\n\nexport const source_simple_potentiometer = source_component_base.extend({\n ftype: z.literal(\"simple_potentiometer\"),\n max_resistance: resistance,\n})\n\nexport type SourceSimplePotentiometer = z.infer<\n typeof source_simple_potentiometer\n>\nexport type SourceSimplePotentiometerInput = z.input<\n typeof source_simple_potentiometer\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})\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}\n\nexpectTypesMatch<SourceSimpleCrystal, InferredSourceSimpleCrystal>(true)\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\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 SourceSimplePinHeader = z.infer<typeof source_simple_pin_header>\nexport type SourceSimplePinHeaderInput = z.input<\n typeof source_simple_pin_header\n>\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_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_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\"\n\nexport interface SourceProjectMetadata {\n type: \"source_project_metadata\"\n name?: string\n software_used_string?: 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 created_at: z.string().datetime().optional(),\n})\n\nexport type InferredProjectMetadata = z.infer<typeof source_project_metadata>\nexpectTypesMatch<SourceProjectMetadata, InferredProjectMetadata>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_missing_property_error = z\n .object({\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 error_type: z.literal(\"source_missing_property_error\"),\n message: z.string(),\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 {\n type: \"source_missing_property_error\"\n source_missing_property_error_id: string\n source_component_id: string\n property_name: string\n error_type: \"source_missing_property_error\"\n message: string\n}\n\nexpectTypesMatch<\n SourceMissingPropertyError,\n InferredSourceMissingPropertyError\n>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_failed_to_create_component_error = z\n .object({\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 component_name: z.string().optional(),\n subcircuit_id: z.string().optional(),\n parent_source_component_id: z.string().optional(),\n message: z.string(),\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 type: \"source_failed_to_create_component_error\"\n source_failed_to_create_component_error_id: string\n message: string\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 { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const source_port = z.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(),\n subcircuit_id: z.string().optional(),\n})\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 {\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 subcircuit_id?: string\n}\n\nexpectTypesMatch<SourcePort, InferredSourcePort>(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 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 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\"\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 is_subcircuit: z.boolean().optional(),\n name: z.string().optional(),\n})\n\nexport type SourceGroup = z.infer<typeof source_group>\nexport type SourceGroupInput = z.input<typeof source_group>\n","import { z } from \"zod\"\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 trace_width: z.number().optional(),\n subcircuit_id: z.string().optional(),\n})\n\nexport type SourceNet = z.infer<typeof source_net>\nexport type SourceNetInput = z.input<typeof source_net>\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_component_id: string\n width: number\n height: number\n is_dashed: boolean\n x: number\n y: number\n}\n\nexport const schematic_box = z\n .object({\n type: z.literal(\"schematic_box\"),\n schematic_component_id: z.string(),\n width: distance,\n height: distance,\n is_dashed: z.boolean().default(false),\n x: distance,\n y: distance,\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 { z } from \"zod\"\nimport { point, type Point } from \"../common/point\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicPath {\n type: \"schematic_path\"\n schematic_component_id: string\n fill_color?: \"red\" | \"blue\"\n is_filled?: boolean\n points: Point[]\n}\n\nexport const schematic_path = z.object({\n type: z.literal(\"schematic_path\"),\n schematic_component_id: z.string(),\n fill_color: z.enum([\"red\", \"blue\"]).optional(),\n is_filled: z.boolean().optional(),\n points: z.array(point),\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 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}\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(),\n schematic_component_id: z.string(),\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})\n\nexport type SchematicComponentInput = z.input<typeof schematic_component>\ntype InferredSchematicComponent = z.infer<typeof schematic_component>\n\nexpectTypesMatch<SchematicComponent, InferredSchematicComponent>(true)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\n/**\n * Defines a line on the schematic, this can be used for adding arbitrary lines\n * to a schematic, but don't use it for drawing traces, schematic boxes or where\n * other schematic elements are more appropriate.\n */\nexport interface SchematicLine {\n type: \"schematic_line\"\n schematic_component_id: string\n x1: number\n x2: number\n y1: number\n y2: number\n}\n\nexport const schematic_line = z.object({\n type: z.literal(\"schematic_line\"),\n schematic_component_id: z.string(),\n x1: distance,\n x2: distance,\n y1: distance,\n y2: distance,\n})\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 { 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 source_trace_id: string\n junctions: {\n x: number\n y: number\n }[]\n edges: SchematicTraceEdge[]\n}\n\nexport const schematic_trace = z.object({\n type: z.literal(\"schematic_trace\"),\n schematic_trace_id: z.string(),\n source_trace_id: z.string(),\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})\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\"\n\nexport interface SchematicText {\n type: \"schematic_text\"\n schematic_component_id?: string\n schematic_text_id: string\n text: 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}\n\nexport const schematic_text = z.object({\n type: z.literal(\"schematic_text\"),\n schematic_component_id: z.string().optional(),\n schematic_text_id: z.string(),\n text: z.string(),\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})\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\"\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","import { z } from \"zod\"\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","import { z } from \"zod\"\nimport { point, type Point } from \"../common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicPort {\n type: \"schematic_port\"\n schematic_port_id: string\n source_port_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\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_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 })\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_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 symbol_name?: string | undefined\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_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 symbol_name: 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 { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport interface SchematicError {\n type: \"schematic_error\"\n schematic_error_id: string\n error_type: \"schematic_port_not_found\"\n message: string\n}\n\nexport const schematic_error = z\n .object({\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.literal(\"schematic_port_not_found\"),\n message: z.string(),\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 { 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})\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}\n\nexport interface SchematicDebugLine {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"line\"\n start: Point\n end: Point\n}\n\nexport interface SchematicDebugPoint {\n type: \"schematic_debug_object\"\n label?: string\n shape: \"point\"\n center: Point\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\"\n\nexport interface SchematicVoltageProbe {\n type: \"schematic_voltage_probe\"\n schematic_voltage_probe_id: string\n position: Point\n schematic_trace_id: string\n voltage?: number\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 position: point,\n schematic_trace_id: z.string(),\n voltage: voltage.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 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 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 { 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 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 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 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 name?: string\n description?: string\n}\n\nexpectTypesMatch<SchematicGroup, InferredSchematicGroup>(true)\n","import { z } from \"zod\"\n\nexport const all_layers = [\n \"top\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\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>\nexport type LayerRef = z.output<typeof layer_ref>\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 { distance } from \"src/units\"\nimport { layer_ref } from \"./layer_ref\"\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>\nexport type PcbRouteHint = z.output<typeof pcb_route_hint>\nexport type PcbRouteHints = z.output<typeof pcb_route_hints>\n","import { z } from \"zod\"\nimport { distance } from \"../../units\"\nimport { layer_ref } from \"./layer_ref\"\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 RouteHintPoint = z.infer<typeof route_hint_point>\nexport type RouteHintPointInput = z.input<typeof route_hint_point>\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 { rotation, length, type Rotation, type Length } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\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 width: length,\n height: length,\n subcircuit_id: z.string().optional(),\n pcb_group_id: z.string().optional(),\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 width: Length\n height: Length\n pcb_group_id?: string\n}\n\n/**\n * @deprecated use PcbComponent\n */\nexport type PCBComponent = PcbComponent\n\nexpectTypesMatch<PcbComponent, InferredPcbComponent>(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\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 hole_shape: z.enum([\"circle\", \"square\"]),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\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 */\nexport interface PcbHoleCircleOrSquare {\n type: \"pcb_hole\"\n pcb_hole_id: string\n pcb_group_id?: string\n subcircuit_id?: string\n hole_shape: \"circle\" | \"square\"\n hole_diameter: number\n x: Distance\n y: Distance\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 hole_shape: z.literal(\"oval\"),\n hole_width: z.number(),\n hole_height: z.number(),\n x: distance,\n y: distance,\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 hole_shape: \"oval\"\n hole_width: number\n hole_height: number\n x: Distance\n y: Distance\n}\n\nexpectTypesMatch<PcbHoleOval, InferredPcbHoleOval>(true)\n\nexport const pcb_hole = pcb_hole_circle_or_square.or(pcb_hole_oval)\n\n/**\n * @deprecated Use PcbHoleCircleOrSquare or PcbHoleOval\n */\nexport type PCBHoleInput = z.input<typeof pcb_hole>\n/**\n * @deprecated Use PcbHoleCircleOrSquare or PcbHoleOval\n */\nexport type PCBHole = z.infer<typeof pcb_hole>\n\nexport type PcbHole = PcbHoleCircleOrSquare | PcbHoleOval\n","import { z } from \"zod\"\nimport { distance, type Distance } 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 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})\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 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}\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 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})\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 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}\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 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})\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 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})\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 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}\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 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}\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])\nexport type PcbPlatedHole =\n | PcbPlatedHoleCircle\n | PcbPlatedHoleOval\n | PcbHoleCircularWithRectPad\n | PcbHolePillWithRectPad\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)\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(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\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}\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 } 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})\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 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})\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 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})\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})\n\nexport const pcb_smtpad = z\n .union([\n pcb_smtpad_circle,\n pcb_smtpad_rect,\n pcb_smtpad_rotated_rect,\n pcb_smtpad_pill,\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 PCBSMTPadPill = z.infer<typeof pcb_smtpad_pill>\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}\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 layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\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 ccw_rotation: Rotation\n layer: LayerRef\n port_hints?: string[]\n pcb_component_id?: string\n pcb_port_id?: string\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}\n\nexport type PcbSmtPad =\n | PcbSmtPadCircle\n | PcbSmtPadRect\n | PcbSmtPadRotatedRect\n | PcbSmtPadPill\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<PcbSmtPadPill, PCBSMTPadPill>(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 { getZodPrefixedIdWithDefault } 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_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\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_oval,\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 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 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\nexport type PcbSolderPaste =\n | PcbSolderPasteCircle\n | PcbSolderPasteRect\n | PcbSolderPastePill\n | PcbSolderPasteRotatedRect\n | PcbSolderPasteOval\n\nexpectTypesMatch<PcbSolderPasteCircle, InferredPcbSolderPasteCircle>(true)\nexpectTypesMatch<PcbSolderPasteRect, InferredPcbSolderPasteRect>(true)\nexpectTypesMatch<PcbSolderPastePill, InferredPcbSolderPastePill>(true)\nexpectTypesMatch<PcbSolderPasteRotatedRect, InferredPcbSolderPasteRotatedRect>(\n true,\n)\nexpectTypesMatch<PcbSolderPasteOval, InferredPcbSolderPasteOval>(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_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 } 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_trace_route_point_wire = z.object({\n route_type: z.literal(\"wire\"),\n x: distance,\n y: distance,\n width: distance,\n start_pcb_port_id: z.string().optional(),\n end_pcb_port_id: z.string().optional(),\n layer: layer_ref,\n})\n\nexport const pcb_trace_route_point_via = z.object({\n route_type: z.literal(\"via\"),\n x: distance,\n y: distance,\n hole_diameter: distance.optional(),\n outer_diameter: distance.optional(),\n from_layer: z.string(),\n to_layer: z.string(),\n})\n\nexport const pcb_trace_route_point = z.union([\n pcb_trace_route_point_wire,\n pcb_trace_route_point_via,\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 route: z.array(pcb_trace_route_point),\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 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 hole_diameter?: Distance\n outer_diameter?: Distance\n from_layer: string\n to_layer: string\n}\n\nexport type PcbTraceRoutePoint = PcbTraceRoutePointWire | PcbTraceRoutePointVia\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 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_error = z\n .object({\n type: z.literal(\"pcb_trace_error\"),\n pcb_trace_error_id: getZodPrefixedIdWithDefault(\"pcb_trace_error\"),\n error_type: z.literal(\"pcb_trace_error\"),\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 })\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 {\n type: \"pcb_trace_error\"\n pcb_trace_error_id: string\n error_type: \"pcb_trace_error\"\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}\n\n/**\n * @deprecated use PcbTraceError\n */\nexport type PCBTraceError = PcbTraceError\n\nexpectTypesMatch<PcbTraceError, InferredPcbTraceError>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_port_not_matched_error = z\n .object({\n type: z.literal(\"pcb_port_not_matched_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_error\"),\n message: z.string(),\n pcb_component_ids: z.array(z.string()),\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 {\n type: \"pcb_port_not_matched_error\"\n pcb_error_id: string\n message: string\n pcb_component_ids: string[]\n}\n\n/**\n * @deprecated use PcbPortNotMatchedError\n */\nexport type PCBPortNotMatchedError = PcbPortNotMatchedError\n\nexpectTypesMatch<PcbPortNotMatchedError, InferredPcbPortNotMatchedError>(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 x: distance,\n y: distance,\n outer_diameter: distance.default(\"0.6mm\"),\n hole_diameter: distance.default(\"0.25mm\"),\n /** @deprecated */\n from_layer: layer_ref.optional(),\n /** @deprecated */\n to_layer: layer_ref.optional(),\n layers: z.array(layer_ref),\n pcb_trace_id: z.string().optional(),\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 x: Distance\n y: Distance\n outer_diameter: Distance\n hole_diameter: Distance\n /** @deprecated */\n from_layer?: LayerRef\n /** @deprecated */\n to_layer?: LayerRef\n layers: LayerRef[]\n pcb_trace_id?: string\n}\n\n/**\n * @deprecated use PcbVia\n */\nexport type PCBVia = PcbVia\n\nexpectTypesMatch<PcbVia, InferredPcbVia>(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 pcb_board = z\n .object({\n type: z.literal(\"pcb_board\"),\n pcb_board_id: getZodPrefixedIdWithDefault(\"pcb_board\"),\n is_subcircuit: z.boolean().optional(),\n subcircuit_id: z.string().optional(),\n width: length,\n height: length,\n center: point,\n thickness: length.optional().default(1.4),\n num_layers: z.number().optional().default(4),\n outline: z.array(point).optional(),\n material: z.enum([\"fr4\", \"fr1\"]).default(\"fr4\"),\n })\n .describe(\"Defines the board outline of the PCB\")\n\n/**\n * Defines the board outline of the PCB\n */\nexport interface PcbBoard {\n type: \"pcb_board\"\n pcb_board_id: string\n is_subcircuit?: boolean\n subcircuit_id?: string\n width: Length\n height: Length\n thickness: Length\n num_layers: number\n center: Point\n outline?: Point[]\n material: \"fr4\" | \"fr1\"\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 { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_placement_error = z\n .object({\n type: z.literal(\"pcb_placement_error\"),\n pcb_placement_error_id: getZodPrefixedIdWithDefault(\"pcb_placement_error\"),\n message: z.string(),\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 {\n type: \"pcb_placement_error\"\n pcb_placement_error_id: string\n message: string\n}\n\n/**\n * @deprecated use PcbPlacementError\n */\nexport type PCBPlacementError = PcbPlacementError\n\nexpectTypesMatch<PcbPlacementError, InferredPcbPlacementError>(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}\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 })\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 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 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 { 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 })\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}\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 })\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}\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, 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 })\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}\n\n/**\n * @deprecated use PcbSilkscreenOval\n */\nexport type PcbSilkscreenOvalDeprecated = PcbSilkscreenOval\n\nexpectTypesMatch<PcbSilkscreenOval, InferredPcbSilkscreenOval>(true)\n","import { z } from \"zod\"\nimport { point, type Point } from \"src/common\"\nimport { distance, type Length } from \"src/units\"\nimport {\n visible_layer,\n type LayerRef,\n type VisibleLayer,\n} 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 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 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 })\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}\n\n/**\n * @deprecated use PcbFabricationNotePath\n */\nexport type PCBFabricationNotePath = PcbFabricationNotePath\n\nexpectTypesMatch<PcbFabricationNotePath, InferredPcbFabricationNotePath>(true)\n","import { z } from \"zod\"\nimport { point } from \"../common\"\nimport { distance } from \"../units\"\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 })\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 }),\n )\n\nexport type PCBKeepoutInput = z.input<typeof pcb_keepout>\nexport type PCBKeepout = z.infer<typeof pcb_keepout>\n","import { z } from \"zod\"\nimport { point, type Point, getZodPrefixedIdWithDefault } from \"src/common\"\nimport { length, type Length, rotation, type Rotation } from \"src/units\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\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_group_id: z.string().optional(),\n subcircuit_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})\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_group_id?: string\n subcircuit_id?: string\n shape: \"rect\"\n center: Point\n width: Length\n height: Length\n rotation?: Rotation\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_group_id?: string\n subcircuit_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_group_id?: string\n subcircuit_id?: string\n shape: \"polygon\"\n points: Point[]\n}\nexpectTypesMatch<PcbCutoutPolygon, InferredPcbCutoutPolygon>(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 ])\n .describe(\"Defines a cutout on the PCB, removing board material.\")\n\nexport type PcbCutoutInput = z.input<typeof pcb_cutout>\nexport type PcbCutout = PcbCutoutRect | PcbCutoutCircle | PcbCutoutPolygon\n\ntype InferredPcbCutout = z.infer<typeof pcb_cutout>\nexpectTypesMatch<PcbCutout, InferredPcbCutout>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_missing_footprint_error = z\n .object({\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.literal(\"pcb_missing_footprint_error\"),\n source_component_id: z.string(),\n message: 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 {\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 message: 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 { 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 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,\n height: length,\n center: point,\n pcb_component_ids: z.array(z.string()),\n name: z.string().optional(),\n description: 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 pcb_component_ids: string[]\n name?: string\n description?: string\n}\n\nexpectTypesMatch<PcbGroup, InferredPcbGroup>(true)\n","import { z } from \"zod\"\nimport { getZodPrefixedIdWithDefault } from \"src/common\"\nimport { expectTypesMatch } from \"src/utils/expect-types-match\"\n\nexport const pcb_autorouting_error = z\n .object({\n type: z.literal(\"pcb_autorouting_error\"),\n pcb_error_id: getZodPrefixedIdWithDefault(\"pcb_autorouting_error\"),\n message: z.string(),\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 {\n type: \"pcb_autorouting_error\"\n pcb_error_id: string\n message: string\n}\n\nexport type PcbAutoroutingError = PcbAutoroutingErrorInterface\n\nexpectTypesMatch<PcbAutoroutingError, PcbInferredAutoroutingError>(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 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 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 { point3 } from \"../common\"\nimport { rotation, length } from \"../units\"\nimport { layer_ref } from \"src/pcb\"\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.string(),\n source_component_id: z.string(),\n position: point3,\n rotation: point3.optional(),\n size: point3.optional(),\n layer: layer_ref.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_jscad: z.any().optional(),\n })\n .describe(\"Defines a component on the PCB\")\n\nexport type CadComponentInput = z.input<typeof cad_component>\nexport type CadComponent = z.infer<typeof cad_component>\n","import { z } from \"zod\"\nimport * as pcb from \"./pcb\"\nimport * as sch from \"./schematic\"\nimport * as src from \"./source\"\nimport * as cad from \"./cad\"\nimport {\n expectStringUnionsMatch,\n expectTypesMatch,\n} from \"./utils/expect-types-match\"\n\nexport const any_circuit_element = z.union([\n // TODO source_config\n // TODO pcb_config\n // TODO schematic_config\n // TODO schematic_group\n src.source_trace,\n src.source_port,\n src.any_source_component,\n src.source_led,\n src.source_net,\n src.source_group,\n src.source_simple_bug,\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_resonator,\n src.source_simple_switch,\n src.source_simple_transistor,\n src.source_simple_mosfet,\n src.source_simple_potentiometer,\n src.source_simple_push_button,\n src.source_project_metadata,\n pcb.pcb_component,\n pcb.pcb_hole,\n pcb.pcb_missing_footprint_error,\n pcb.pcb_manual_edit_conflict_warning,\n pcb.pcb_plated_hole,\n pcb.pcb_keepout,\n pcb.pcb_port,\n pcb.pcb_text,\n pcb.pcb_trace,\n pcb.pcb_via,\n pcb.pcb_smtpad,\n pcb.pcb_solder_paste,\n pcb.pcb_board,\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_rect,\n pcb.pcb_silkscreen_circle,\n pcb.pcb_silkscreen_oval,\n pcb.pcb_trace_error,\n pcb.pcb_placement_error,\n pcb.pcb_port_not_matched_error,\n pcb.pcb_fabrication_note_path,\n pcb.pcb_fabrication_note_text,\n pcb.pcb_autorouting_error,\n pcb.pcb_cutout,\n sch.schematic_box,\n sch.schematic_text,\n sch.schematic_line,\n sch.schematic_component,\n sch.schematic_port,\n sch.schematic_trace,\n sch.schematic_path,\n sch.schematic_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_group,\n cad.cad_component,\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 | \"schematic_debug_object DOES NOT HAVE AN schematic_debug_object_id PROPERTY\"\n | \"schematic_box DOES NOT HAVE AN schematic_box_id PROPERTY\"\n | \"schematic_line DOES NOT HAVE AN schematic_line_id PROPERTY\"\n | \"schematic_path DOES NOT HAVE AN schematic_path_id PROPERTY\"\n>(true)\n","import type {\n AnyCircuitElement,\n AnyCircuitElementInput,\n SourceComponentBase,\n SourcePort,\n} from \"circuit-json\"\nimport * as Soup from \"circuit-json\"\n\ntype SoupOps<\n K extends AnyCircuitElement[\"type\"],\n T extends AnyCircuitElement | AnyCircuitElementInput,\n> = {\n get: (id: string) => Extract<T, { type: K }> | null\n select: (selector: string) => Extract<T, { type: K }> | null\n getWhere: (where: any) => Extract<T, { type: K }> | null\n getUsing: (using: {\n [key: `${string}_id`]: string\n }) => Extract<T, { type: K }> | null\n insert: (\n elm: Omit<Extract<T, { type: K }>, \"type\" | `${K}_id`>,\n ) => Extract<T, { type: K }>\n update: (\n id: string,\n newProps: Partial<Extract<T, { type: K }>>,\n ) => Extract<T, { type: K }>\n delete: (id: string) => void\n list: (where?: any) => Extract<T, { type: K }>[]\n}\n\nexport type SoupUtilObjects = {\n [K in AnyCircuitElement[\"type\"]]: SoupOps<K, AnyCircuitElement>\n} & {\n toArray: () => AnyCircuitElement[]\n}\nexport type SoupInputUtilObjects = {\n [K in AnyCircuitElementInput[\"type\"]]: SoupOps<K, AnyCircuitElementInput>\n}\n\nexport type SoupUtilOptions = {\n validateInserts?: boolean\n}\n\nexport type GetSoupUtilFn = ((\n soup: AnyCircuitElement[],\n options?: SoupUtilOptions,\n) => SoupUtilObjects) & {\n unparsed: (soup: AnyCircuitElementInput[]) => SoupInputUtilObjects\n}\n\ninterface InternalStore {\n counts: Record<string, number>\n}\n\nexport const su: GetSoupUtilFn = ((\n soup: AnyCircuitElement[],\n options: SoupUtilOptions = {},\n) => {\n let internalStore: InternalStore = (soup as any)._internal_store\n if (!internalStore) {\n internalStore = {\n counts: {},\n } as InternalStore\n ;(soup as any)._internal_store = internalStore\n\n // Initialize counts\n for (const elm of soup) {\n const type = elm.type\n const idVal = (elm as any)[`${type}_id`]\n if (!idVal) continue\n const idNum = Number.parseInt(idVal.split(\"_\").pop())\n if (!Number.isNaN(idNum)) {\n internalStore.counts[type] = Math.max(\n internalStore.counts[type] ?? 0,\n idNum,\n )\n }\n }\n }\n const su = new Proxy(\n {},\n {\n get: (proxy_target: any, component_type: string) => {\n if (component_type === \"toArray\") {\n return () => soup\n }\n\n return {\n get: (id: string) =>\n soup.find(\n (e: any) =>\n e.type === component_type && e[`${component_type}_id`] === id,\n ),\n getUsing: (using: any) => {\n const keys = Object.keys(using)\n if (keys.length !== 1) {\n throw new Error(\n \"getUsing requires exactly one key, e.g. { pcb_component_id }\",\n )\n }\n const join_key = keys[0] as string\n const join_type = join_key.replace(\"_id\", \"\")\n const joiner: any = soup.find(\n (e: any) =>\n e.type === join_type && e[join_key] === using[join_key],\n )\n if (!joiner) return null\n return soup.find(\n (e: any) =>\n e.type === component_type &&\n e[`${component_type}_id`] === joiner[`${component_type}_id`],\n )\n },\n getWhere: (where: any) => {\n const keys = Object.keys(where)\n return soup.find(\n (e: any) =>\n e.type === component_type &&\n keys.every((key) => e[key] === where[key]),\n )\n },\n list: (where?: any) => {\n const keys = !where ? [] : Object.keys(where)\n return soup.filter(\n (e: any) =>\n e.type === component_type &&\n keys.every((key) => e[key] === where[key]),\n )\n },\n insert: (elm: any) => {\n internalStore.counts[component_type] ??= -1\n internalStore.counts[component_type]++\n const index = internalStore.counts[component_type]\n const newElm = {\n type: component_type,\n [`${component_type}_id`]: `${component_type}_${index}`,\n ...elm,\n }\n\n if (options.validateInserts) {\n const parser =\n (Soup as any)[component_type] ?? Soup.any_soup_element\n parser.parse(newElm)\n }\n\n soup.push(newElm)\n return newElm\n },\n delete: (id: string) => {\n const elm = soup.find(\n (e) => (e as any)[`${component_type}_id`] === id,\n )\n if (!elm) return\n soup.splice(soup.indexOf(elm), 1)\n },\n update: (id: string, newProps: any) => {\n const elm = soup.find(\n (e) =>\n e.type === component_type &&\n (e as any)[`${component_type}_id`] === id,\n )\n if (!elm) return\n Object.assign(elm, newProps)\n return elm\n },\n select: (selector: string) => {\n // TODO when applySelector is isolated we can use it, until then we\n // do a poor man's selector implementation for two common cases\n if (component_type === \"source_component\") {\n return soup.find(\n (e) =>\n e.type === \"source_component\" &&\n e.name === selector.replace(/\\./g, \"\"),\n )\n } else if (\n component_type === \"pcb_port\" ||\n component_type === \"source_port\" ||\n component_type === \"schematic_port\"\n ) {\n const [component_name, port_selector] = selector\n .replace(/\\./g, \"\")\n .split(/[\\s\\>]+/)\n const source_component = soup.find(\n (e) =>\n e.type === \"source_component\" && e.name === component_name,\n ) as SourceComponentBase\n if (!source_component) return null\n const source_port = soup.find(\n (e) =>\n e.type === \"source_port\" &&\n e.source_component_id ===\n source_component.source_component_id &&\n (e.name === port_selector ||\n (e.port_hints ?? []).includes(port_selector!)),\n ) as SourcePort\n if (!source_port) return null\n if (component_type === \"source_port\") return source_port\n\n if (component_type === \"pcb_port\") {\n return soup.find(\n (e) =>\n e.type === \"pcb_port\" &&\n e.source_port_id === source_port.source_port_id,\n )\n } else if (component_type === \"schematic_port\") {\n return soup.find(\n (e) =>\n e.type === \"schematic_port\" &&\n e.source_port_id === source_port.source_port_id,\n )\n }\n }\n },\n }\n },\n },\n )\n\n return su\n}) as any\nsu.unparsed = su as any\n\nexport default su\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { type Matrix, applyToPoint, decomposeTSR } from \"transformation-matrix\"\nimport {\n directionToVec,\n rotateDirection,\n vecToDirection,\n} from \"./direction-to-vec\"\n\nexport const transformSchematicElement = (\n elm: AnyCircuitElement,\n matrix: Matrix,\n) => {\n if (elm.type === \"schematic_component\") {\n // TODO handle rotation\n elm.center = applyToPoint(matrix, elm.center)\n } else if (elm.type === \"schematic_port\") {\n elm.center = applyToPoint(matrix, elm.center)\n\n if (elm.facing_direction) {\n elm.facing_direction = rotateDirection(\n elm.facing_direction,\n -(Math.atan2(matrix.b, matrix.a) / Math.PI) * 2,\n )\n }\n } else if (elm.type === \"schematic_text\") {\n elm.position = applyToPoint(matrix, elm.position)\n // } else if (elm.type === \"schematic_group\") {\n // elm.center = applyToPoint(matrix, elm.center)\n } else if (elm.type === \"schematic_trace\") {\n } else if (elm.type === \"schematic_box\") {\n const { x, y } = applyToPoint(matrix, { x: elm.x, y: elm.y })\n elm.x = x\n elm.y = y\n } else if (elm.type === \"schematic_line\") {\n const { x: x1, y: y1 } = applyToPoint(matrix, { x: elm.x1, y: elm.y1 })\n const { x: x2, y: y2 } = applyToPoint(matrix, { x: elm.x2, y: elm.y2 })\n elm.x1 = x1\n elm.y1 = y1\n elm.x2 = x2\n elm.y2 = y2\n }\n return elm\n}\n\nexport const transformSchematicElements = (\n elms: AnyCircuitElement[],\n matrix: Matrix,\n) => {\n return elms.map((elm) => transformSchematicElement(elm, matrix))\n}\n\nexport const transformPCBElement = (elm: AnyCircuitElement, matrix: Matrix) => {\n if (\n elm.type === \"pcb_plated_hole\" ||\n elm.type === \"pcb_hole\" ||\n elm.type === \"pcb_via\" ||\n elm.type === \"pcb_smtpad\" ||\n elm.type === \"pcb_port\"\n ) {\n const { x, y } = applyToPoint(matrix, { x: elm.x, y: elm.y })\n elm.x = x\n elm.y = y\n } else if (elm.type === \"pcb_keepout\" || elm.type === \"pcb_board\") {\n // TODO adjust size/rotation\n elm.center = applyToPoint(matrix, elm.center)\n } else if (\n elm.type === \"pcb_silkscreen_text\" ||\n elm.type === \"pcb_fabrication_note_text\"\n ) {\n elm.anchor_position = applyToPoint(matrix, elm.anchor_position)\n } else if (\n elm.type === \"pcb_silkscreen_circle\" ||\n elm.type === \"pcb_silkscreen_rect\" ||\n elm.type === \"pcb_component\"\n ) {\n elm.center = applyToPoint(matrix, elm.center)\n } else if (\n elm.type === \"pcb_silkscreen_path\" ||\n elm.type === \"pcb_trace\" ||\n elm.type === \"pcb_fabrication_note_path\"\n ) {\n elm.route = elm.route.map((rp) => {\n const tp = applyToPoint(matrix, rp) as { x: number; y: number }\n rp.x = tp.x\n rp.y = tp.y\n return rp\n })\n } else if (elm.type === \"pcb_silkscreen_line\") {\n const p1 = { x: elm.x1, y: elm.y1 }\n const p2 = { x: elm.x2, y: elm.y2 }\n const p1t = applyToPoint(matrix, p1)\n const p2t = applyToPoint(matrix, p2)\n elm.x1 = p1t.x\n elm.y1 = p1t.y\n elm.x2 = p2t.x\n elm.y2 = p2t.y\n } else if (elm.type === \"cad_component\") {\n const newPos = applyToPoint(matrix, {\n x: elm.position.x,\n y: elm.position.y,\n })\n elm.position.x = newPos.x\n elm.position.y = newPos.y\n }\n return elm\n}\n\nexport const transformPCBElements = (\n elms: AnyCircuitElement[],\n matrix: Matrix,\n) => {\n const tsr = decomposeTSR(matrix)\n const flipPadWidthHeight =\n Math.round(tsr.rotation.angle / (Math.PI / 2)) % 2 === 1\n let transformedElms = elms.map((elm) => transformPCBElement(elm, matrix))\n if (flipPadWidthHeight) {\n transformedElms = transformedElms.map((elm) => {\n if (elm.type === \"pcb_smtpad\" && elm.shape === \"rect\") {\n ;[elm.width, elm.height] = [elm.height, elm.width]\n }\n return elm\n })\n }\n return transformedElms\n}\n","export const directionToVec = (direction: \"up\" | \"down\" | \"left\" | \"right\") => {\n if (direction === \"up\") return { x: 0, y: 1 }\n else if (direction === \"down\") return { x: 0, y: -1 }\n else if (direction === \"left\") return { x: -1, y: 0 }\n else if (direction === \"right\") return { x: 1, y: 0 }\n else throw new Error(\"Invalid direction\")\n}\n\nexport const vecToDirection = ({ x, y }: { x: number; y: number }) => {\n if (x > y) y = 0\n if (y > x) x = 0\n if (x > 0 && y === 0) return \"right\"\n else if (x < 0 && y === 0) return \"left\"\n else if (x === 0 && y > 0) return \"up\"\n else if (x === 0 && y < 0) return \"down\"\n else throw new Error(`Invalid vector for direction conversion (${x}, ${y})`)\n}\n\nexport const rotateClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"right\"\n else if (direction === \"right\") return \"down\"\n else if (direction === \"down\") return \"left\"\n else if (direction === \"left\") return \"up\"\n throw new Error(`Invalid direction: ${direction}`)\n}\n\nexport const rotateCounterClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"left\"\n else if (direction === \"left\") return \"down\"\n else if (direction === \"down\") return \"right\"\n else if (direction === \"right\") return \"up\"\n throw new Error(`Invalid direction: ${direction}`)\n}\n\nexport const rotateDirection = (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n num90DegreeClockwiseTurns: number\n) => {\n while (num90DegreeClockwiseTurns > 0) {\n direction = rotateClockwise(direction)\n num90DegreeClockwiseTurns--\n }\n while (num90DegreeClockwiseTurns < 0) {\n direction = rotateCounterClockwise(direction)\n num90DegreeClockwiseTurns++\n }\n return direction\n}\n\nexport const oppositeDirection = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"down\"\n else if (direction === \"down\") return \"up\"\n else if (direction === \"left\") return \"right\"\n else if (direction === \"right\") return \"left\"\n throw new Error(`Invalid direction: ${direction}`)\n}\n\nexport const oppositeSide = (\n sideOrDir: \"up\" | \"down\" | \"top\" | \"bottom\" | \"left\" | \"right\"\n) => {\n if (sideOrDir === \"top\" || sideOrDir === \"up\") return \"bottom\"\n else if (sideOrDir === \"bottom\" || sideOrDir === \"down\") return \"top\"\n else if (sideOrDir === \"left\") return \"right\"\n else if (sideOrDir === \"right\") return \"left\"\n throw new Error(`Invalid sideOrDir: ${sideOrDir}`)\n}\n","import * as parsel from \"parsel-js\"\nimport { convertAbbrToType } from \"./convert-abbreviation-to-soup-element-type\"\nimport type { AnyCircuitElement } from \"circuit-json\"\n\nconst filterByType = (\n elements: AnyCircuitElement[],\n type: string\n): AnyCircuitElement[] => {\n type = convertAbbrToType(type)\n return elements.filter(\n (elm) => (\"ftype\" in elm && elm.ftype === type) || elm.type === type\n )\n}\n\n/**\n * Filter elements to match the selector, e.g. to access the left port of a\n * resistor you can do \".R1 > port.left\"\n */\nexport const applySelector = (\n elements: AnyCircuitElement[],\n selectorRaw: string\n): AnyCircuitElement[] => {\n const selectorAST = parsel.parse(selectorRaw)\n return applySelectorAST(elements, selectorAST!)\n}\n\nconst doesElmMatchClassName = (elm: AnyCircuitElement, className: string) =>\n (\"name\" in elm && elm.name === className) ||\n (\"port_hints\" in elm && elm.port_hints?.includes(className))\n\nexport const applySelectorAST = (\n elements: AnyCircuitElement[],\n selectorAST: parsel.AST\n): AnyCircuitElement[] => {\n switch (selectorAST.type) {\n case \"complex\": {\n switch (selectorAST.combinator) {\n case \" \": // TODO technically should do a deep search\n case \">\": {\n const { left, right } = selectorAST\n if (left.type === \"class\" || left.type === \"type\") {\n // TODO should also check if content matches any element tags\n let matchElms: AnyCircuitElement[]\n if (left.type === \"class\") {\n matchElms = elements.filter((elm) =>\n doesElmMatchClassName(elm, left.name)\n )\n } else if (left.type === \"type\") {\n matchElms = filterByType(elements, left.name)\n } else {\n matchElms = []\n }\n\n const childrenOfMatchingElms = matchElms.flatMap((matchElm) =>\n elements.filter(\n (elm: any) =>\n elm[`${matchElm.type}_id`] ===\n (matchElm as any)[`${matchElm.type}_id`] && elm !== matchElm\n )\n )\n return applySelectorAST(childrenOfMatchingElms, right)\n } else {\n throw new Error(`unsupported selector type \"${left.type}\" `)\n }\n }\n default: {\n throw new Error(\n `Couldn't apply selector AST for complex combinator \"${selectorAST.combinator}\"`\n )\n }\n }\n return []\n }\n case \"compound\": {\n const conditionsToMatch = selectorAST.list.map((part) => {\n switch (part.type) {\n case \"class\": {\n return (elm: any) => doesElmMatchClassName(elm, part.name)\n }\n case \"type\": {\n const name = convertAbbrToType(part.name)\n return (elm: any) => elm.type === name\n }\n }\n })\n\n return elements.filter((elm) =>\n conditionsToMatch.every((condFn) => condFn?.(elm))\n )\n }\n case \"type\": {\n return filterByType(elements, selectorAST.name) as AnyCircuitElement[]\n }\n case \"class\": {\n return elements.filter((elm) =>\n doesElmMatchClassName(elm, selectorAST.name)\n )\n }\n default: {\n throw new Error(\n `Couldn't apply selector AST for type: \"${\n selectorAST.type\n }\" ${JSON.stringify(selectorAST, null, \" \")}`\n )\n }\n }\n}\n","export const convertAbbrToType = (abbr: string): string => {\n switch (abbr) {\n case \"port\":\n return \"source_port\"\n case \"net\":\n return \"source_net\"\n case \"power\":\n return \"simple_power_source\"\n }\n return abbr\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\n\nexport const getElementId = (elm: AnyCircuitElement): string => {\n const type = elm.type\n const id = (elm as any)[`${type}_id`]\n return id\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getElementId } from \"./get-element-id\"\n\nexport const getElementById = (\n soup: AnyCircuitElement[],\n id: string,\n): AnyCircuitElement | null => {\n return soup.find((elm) => getElementId(elm) === id) ?? null\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"../su\"\n\nexport function getReadableNameForPcbTrace(\n soup: AnyCircuitElement[],\n pcb_trace_id: string,\n) {\n // Find the pcb_trace object\n const pcbTrace = su(soup).pcb_trace.get(pcb_trace_id)\n\n if (!pcbTrace) {\n return `trace[${pcb_trace_id}]`\n }\n\n // Get the connected ports\n const connectedPcbPortIds: string[] = pcbTrace.route\n .flatMap((point: any) => [point.start_pcb_port_id, point.end_pcb_port_id])\n .filter(Boolean)\n\n if (connectedPcbPortIds.length === 0) {\n return `trace[${pcb_trace_id}]`\n }\n\n // Function to get component name and port hint\n function getComponentAndPortInfo(pcb_port_id: string) {\n const pcbPort = su(soup).pcb_port.get(pcb_port_id)\n if (!pcbPort) return null\n\n const pcbComponent = su(soup).pcb_component.get(pcbPort.pcb_component_id)\n if (!pcbComponent) return null\n const sourceComponent = su(soup).source_component.get(\n pcbComponent.source_component_id,\n )\n if (!sourceComponent) return null\n\n const sourcePort = su(soup).source_port.get(pcbPort.source_port_id)\n const portHint = sourcePort?.port_hints ? sourcePort.port_hints[1] : \"\"\n\n return {\n componentName: sourceComponent.name,\n portHint: portHint,\n }\n }\n\n // Generate the readable selector\n const selectorParts = connectedPcbPortIds.map((portId) => {\n const info = getComponentAndPortInfo(portId)\n if (info) {\n return `.${info.componentName} > port.${info.portHint}`\n }\n return `port[${portId}]`\n })\n\n return `trace[${selectorParts.join(\", \")}]`\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"../su\"\n\nexport const getReadableNameForPcbPort = (\n soup: AnyCircuitElement[],\n pcb_port_id: string,\n): string => {\n const pcbPort = su(soup).pcb_port.get(pcb_port_id)\n if (!pcbPort) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Get the component information\n const pcbComponent = su(soup).pcb_component.get(pcbPort?.pcb_component_id)\n\n if (!pcbComponent) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Get the source component information\n const sourceComponent = su(soup).source_component.get(\n pcbComponent.source_component_id,\n )\n\n if (!sourceComponent) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Get the source port information\n const sourcePort = su(soup).source_port.get(pcbPort.source_port_id)\n\n if (!sourcePort) {\n return `pcb_port[#${pcb_port_id}]`\n }\n\n // Determine the pad number or hint\n let padIdentifier: string\n if (sourcePort?.port_hints && sourcePort.port_hints.length > 0) {\n padIdentifier = sourcePort.port_hints[0]!\n } else if (sourcePort.port_hints && sourcePort.port_hints.length > 0) {\n padIdentifier = sourcePort.port_hints[0]!\n } else {\n padIdentifier = pcb_port_id\n }\n\n return `pcb_port[.${sourceComponent.name} > .${padIdentifier}]`\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"../su\"\nimport { getReadableNameForPcbPort } from \"./get-readable-name-for-pcb-port\"\n\nexport function getReadableNameForPcbSmtpad(\n soup: AnyCircuitElement[],\n pcb_smtpad_id: string,\n): string {\n // Find the pcb_smtpad object\n const pcbSmtpad = su(soup).pcb_smtpad.get(pcb_smtpad_id)\n\n if (!pcbSmtpad || !pcbSmtpad.pcb_port_id) {\n return `smtpad[${pcb_smtpad_id}]`\n }\n\n return getReadableNameForPcbPort(soup, pcbSmtpad.pcb_port_id)\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getReadableNameForPcbTrace } from \"./get-readable-name-for-pcb-trace\"\nimport { getReadableNameForPcbSmtpad } from \"./get-readable-name-for-pcb-smtpad\"\nimport { getReadableNameForPcbPort } from \"./get-readable-name-for-pcb-port\"\nimport { getElementById } from \"lib/get-element-by-id\"\nimport { getElementId } from \"lib/get-element-id\"\n\nexport const getReadableNameForElement = (\n soup: AnyCircuitElement[],\n elm: AnyCircuitElement | string,\n): string => {\n if (typeof elm === \"string\") {\n const elmObj = getElementById(soup, elm)\n if (!elmObj) `unknown (could not find element with id ${elm})`\n return getReadableNameForElement(soup, elmObj as any)\n }\n switch (elm.type) {\n case \"pcb_port\":\n return getReadableNameForPcbPort(soup, elm.pcb_port_id)\n case \"pcb_smtpad\":\n return getReadableNameForPcbSmtpad(soup, elm.pcb_smtpad_id)\n case \"pcb_trace\":\n return getReadableNameForPcbTrace(soup, elm.pcb_trace_id)\n case \"source_component\":\n return `source_component[${elm.name}]`\n default:\n return `${elm.type}[#${getElementId(elm)}]`\n }\n}\n\nexport {\n getReadableNameForPcbPort,\n getReadableNameForPcbSmtpad,\n getReadableNameForPcbTrace,\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\n\nexport const getBoundsOfPcbElements = (\n elements: AnyCircuitElement[],\n): { minX: number; minY: number; maxX: number; maxY: number } => {\n let minX = Number.POSITIVE_INFINITY\n let minY = Number.POSITIVE_INFINITY\n let maxX = Number.NEGATIVE_INFINITY\n let maxY = Number.NEGATIVE_INFINITY\n\n for (const elm of elements) {\n if (!elm.type.startsWith(\"pcb_\")) continue\n if (\"x\" in elm && \"y\" in elm) {\n minX = Math.min(minX, elm.x)\n minY = Math.min(minY, elm.y)\n maxX = Math.max(maxX, elm.x)\n maxY = Math.max(maxY, elm.y)\n\n if (\"width\" in elm) {\n maxX = Math.max(maxX, elm.x + elm.width)\n }\n if (\"height\" in elm) {\n maxY = Math.max(maxY, elm.y + elm.height)\n }\n if (\"radius\" in elm) {\n minX = Math.min(minX, elm.x - elm.radius)\n minY = Math.min(minY, elm.y - elm.radius)\n maxX = Math.max(maxX, elm.x + elm.radius)\n maxY = Math.max(maxY, elm.y + elm.radius)\n }\n } else if (elm.type === \"pcb_trace\") {\n for (const point of elm.route) {\n minX = Math.min(minX, point.x)\n minY = Math.min(minY, point.y)\n maxX = Math.max(maxX, point.x)\n maxY = Math.max(maxY, point.y)\n }\n }\n }\n\n return { minX, minY, maxX, maxY }\n}\n","export function stringHash(str: string) {\n let hash = 0\n if (str.length == 0) return hash\n for (var i = 0; i < str.length; i++) {\n var char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n return Math.abs(hash)\n}\n","import { stringHash } from \"./string-hash\"\n\nexport type LayoutDebugObject = {\n x: number\n y: number\n width: number\n height: number\n bg_color: string\n title: string\n content: Object\n secondary?: boolean\n}\n\n/**\n * Vendored from \"nice-color-palettes\" package\n */\nconst nice_color_palettes = [\n [\"#69d2e7\", \"#a7dbd8\", \"#e0e4cc\", \"#f38630\", \"#fa6900\"],\n [\"#fe4365\", \"#fc9d9a\", \"#f9cdad\", \"#c8c8a9\", \"#83af9b\"],\n [\"#ecd078\", \"#d95b43\", \"#c02942\", \"#542437\", \"#53777a\"],\n [\"#556270\", \"#4ecdc4\", \"#c7f464\", \"#ff6b6b\", \"#c44d58\"],\n [\"#774f38\", \"#e08e79\", \"#f1d4af\", \"#ece5ce\", \"#c5e0dc\"],\n [\"#e8ddcb\", \"#cdb380\", \"#036564\", \"#033649\", \"#031634\"],\n [\"#490a3d\", \"#bd1550\", \"#e97f02\", \"#f8ca00\", \"#8a9b0f\"],\n [\"#594f4f\", \"#547980\", \"#45ada8\", \"#9de0ad\", \"#e5fcc2\"],\n [\"#00a0b0\", \"#6a4a3c\", \"#cc333f\", \"#eb6841\", \"#edc951\"],\n [\"#e94e77\", \"#d68189\", \"#c6a49a\", \"#c6e5d9\", \"#f4ead5\"],\n [\"#3fb8af\", \"#7fc7af\", \"#dad8a7\", \"#ff9e9d\", \"#ff3d7f\"],\n [\"#d9ceb2\", \"#948c75\", \"#d5ded9\", \"#7a6a53\", \"#99b2b7\"],\n [\"#ffffff\", \"#cbe86b\", \"#f2e9e1\", \"#1c140d\", \"#cbe86b\"],\n [\"#efffcd\", \"#dce9be\", \"#555152\", \"#2e2633\", \"#99173c\"],\n [\"#343838\", \"#005f6b\", \"#008c9e\", \"#00b4cc\", \"#00dffc\"],\n [\"#413e4a\", \"#73626e\", \"#b38184\", \"#f0b49e\", \"#f7e4be\"],\n [\"#ff4e50\", \"#fc913a\", \"#f9d423\", \"#ede574\", \"#e1f5c4\"],\n [\"#99b898\", \"#fecea8\", \"#ff847c\", \"#e84a5f\", \"#2a363b\"],\n [\"#655643\", \"#80bca3\", \"#f6f7bd\", \"#e6ac27\", \"#bf4d28\"],\n [\"#00a8c6\", \"#40c0cb\", \"#f9f2e7\", \"#aee239\", \"#8fbe00\"],\n [\"#351330\", \"#424254\", \"#64908a\", \"#e8caa4\", \"#cc2a41\"],\n [\"#554236\", \"#f77825\", \"#d3ce3d\", \"#f1efa5\", \"#60b99a\"],\n [\"#5d4157\", \"#838689\", \"#a8caba\", \"#cad7b2\", \"#ebe3aa\"],\n [\"#8c2318\", \"#5e8c6a\", \"#88a65e\", \"#bfb35a\", \"#f2c45a\"],\n [\"#fad089\", \"#ff9c5b\", \"#f5634a\", \"#ed303c\", \"#3b8183\"],\n [\"#ff4242\", \"#f4fad2\", \"#d4ee5e\", \"#e1edb9\", \"#f0f2eb\"],\n [\"#f8b195\", \"#f67280\", \"#c06c84\", \"#6c5b7b\", \"#355c7d\"],\n [\"#d1e751\", \"#ffffff\", \"#000000\", \"#4dbce9\", \"#26ade4\"],\n [\"#1b676b\", \"#519548\", \"#88c425\", \"#bef202\", \"#eafde6\"],\n [\"#5e412f\", \"#fcebb6\", \"#78c0a8\", \"#f07818\", \"#f0a830\"],\n [\"#bcbdac\", \"#cfbe27\", \"#f27435\", \"#f02475\", \"#3b2d38\"],\n [\"#452632\", \"#91204d\", \"#e4844a\", \"#e8bf56\", \"#e2f7ce\"],\n [\"#eee6ab\", \"#c5bc8e\", \"#696758\", \"#45484b\", \"#36393b\"],\n [\"#f0d8a8\", \"#3d1c00\", \"#86b8b1\", \"#f2d694\", \"#fa2a00\"],\n [\"#2a044a\", \"#0b2e59\", \"#0d6759\", \"#7ab317\", \"#a0c55f\"],\n [\"#f04155\", \"#ff823a\", \"#f2f26f\", \"#fff7bd\", \"#95cfb7\"],\n [\"#b9d7d9\", \"#668284\", \"#2a2829\", \"#493736\", \"#7b3b3b\"],\n [\"#bbbb88\", \"#ccc68d\", \"#eedd99\", \"#eec290\", \"#eeaa88\"],\n [\"#b3cc57\", \"#ecf081\", \"#ffbe40\", \"#ef746f\", \"#ab3e5b\"],\n [\"#a3a948\", \"#edb92e\", \"#f85931\", \"#ce1836\", \"#009989\"],\n [\"#300030\", \"#480048\", \"#601848\", \"#c04848\", \"#f07241\"],\n [\"#67917a\", \"#170409\", \"#b8af03\", \"#ccbf82\", \"#e33258\"],\n [\"#aab3ab\", \"#c4cbb7\", \"#ebefc9\", \"#eee0b7\", \"#e8caaf\"],\n [\"#e8d5b7\", \"#0e2430\", \"#fc3a51\", \"#f5b349\", \"#e8d5b9\"],\n [\"#ab526b\", \"#bca297\", \"#c5ceae\", \"#f0e2a4\", \"#f4ebc3\"],\n [\"#607848\", \"#789048\", \"#c0d860\", \"#f0f0d8\", \"#604848\"],\n [\"#b6d8c0\", \"#c8d9bf\", \"#dadabd\", \"#ecdbbc\", \"#fedcba\"],\n [\"#a8e6ce\", \"#dcedc2\", \"#ffd3b5\", \"#ffaaa6\", \"#ff8c94\"],\n [\"#3e4147\", \"#fffedf\", \"#dfba69\", \"#5a2e2e\", \"#2a2c31\"],\n [\"#fc354c\", \"#29221f\", \"#13747d\", \"#0abfbc\", \"#fcf7c5\"],\n [\"#cc0c39\", \"#e6781e\", \"#c8cf02\", \"#f8fcc1\", \"#1693a7\"],\n [\"#1c2130\", \"#028f76\", \"#b3e099\", \"#ffeaad\", \"#d14334\"],\n [\"#a7c5bd\", \"#e5ddcb\", \"#eb7b59\", \"#cf4647\", \"#524656\"],\n [\"#dad6ca\", \"#1bb0ce\", \"#4f8699\", \"#6a5e72\", \"#563444\"],\n [\"#5c323e\", \"#a82743\", \"#e15e32\", \"#c0d23e\", \"#e5f04c\"],\n [\"#edebe6\", \"#d6e1c7\", \"#94c7b6\", \"#403b33\", \"#d3643b\"],\n [\"#fdf1cc\", \"#c6d6b8\", \"#987f69\", \"#e3ad40\", \"#fcd036\"],\n [\"#230f2b\", \"#f21d41\", \"#ebebbc\", \"#bce3c5\", \"#82b3ae\"],\n [\"#b9d3b0\", \"#81bda4\", \"#b28774\", \"#f88f79\", \"#f6aa93\"],\n [\"#3a111c\", \"#574951\", \"#83988e\", \"#bcdea5\", \"#e6f9bc\"],\n [\"#5e3929\", \"#cd8c52\", \"#b7d1a3\", \"#dee8be\", \"#fcf7d3\"],\n [\"#1c0113\", \"#6b0103\", \"#a30006\", \"#c21a01\", \"#f03c02\"],\n [\"#000000\", \"#9f111b\", \"#b11623\", \"#292c37\", \"#cccccc\"],\n [\"#382f32\", \"#ffeaf2\", \"#fcd9e5\", \"#fbc5d8\", \"#f1396d\"],\n [\"#e3dfba\", \"#c8d6bf\", \"#93ccc6\", \"#6cbdb5\", \"#1a1f1e\"],\n [\"#f6f6f6\", \"#e8e8e8\", \"#333333\", \"#990100\", \"#b90504\"],\n [\"#1b325f\", \"#9cc4e4\", \"#e9f2f9\", \"#3a89c9\", \"#f26c4f\"],\n [\"#a1dbb2\", \"#fee5ad\", \"#faca66\", \"#f7a541\", \"#f45d4c\"],\n [\"#c1b398\", \"#605951\", \"#fbeec2\", \"#61a6ab\", \"#accec0\"],\n [\"#5e9fa3\", \"#dcd1b4\", \"#fab87f\", \"#f87e7b\", \"#b05574\"],\n [\"#951f2b\", \"#f5f4d7\", \"#e0dfb1\", \"#a5a36c\", \"#535233\"],\n [\"#8dccad\", \"#988864\", \"#fea6a2\", \"#f9d6ac\", \"#ffe9af\"],\n [\"#2d2d29\", \"#215a6d\", \"#3ca2a2\", \"#92c7a3\", \"#dfece6\"],\n [\"#413d3d\", \"#040004\", \"#c8ff00\", \"#fa023c\", \"#4b000f\"],\n [\"#eff3cd\", \"#b2d5ba\", \"#61ada0\", \"#248f8d\", \"#605063\"],\n [\"#ffefd3\", \"#fffee4\", \"#d0ecea\", \"#9fd6d2\", \"#8b7a5e\"],\n [\"#cfffdd\", \"#b4dec1\", \"#5c5863\", \"#a85163\", \"#ff1f4c\"],\n [\"#9dc9ac\", \"#fffec7\", \"#f56218\", \"#ff9d2e\", \"#919167\"],\n [\"#4e395d\", \"#827085\", \"#8ebe94\", \"#ccfc8e\", \"#dc5b3e\"],\n [\"#a8a7a7\", \"#cc527a\", \"#e8175d\", \"#474747\", \"#363636\"],\n [\"#f8edd1\", \"#d88a8a\", \"#474843\", \"#9d9d93\", \"#c5cfc6\"],\n [\"#046d8b\", \"#309292\", \"#2fb8ac\", \"#93a42a\", \"#ecbe13\"],\n [\"#f38a8a\", \"#55443d\", \"#a0cab5\", \"#cde9ca\", \"#f1edd0\"],\n [\"#a70267\", \"#f10c49\", \"#fb6b41\", \"#f6d86b\", \"#339194\"],\n [\"#ff003c\", \"#ff8a00\", \"#fabe28\", \"#88c100\", \"#00c176\"],\n [\"#ffedbf\", \"#f7803c\", \"#f54828\", \"#2e0d23\", \"#f8e4c1\"],\n [\"#4e4d4a\", \"#353432\", \"#94ba65\", \"#2790b0\", \"#2b4e72\"],\n [\"#0ca5b0\", \"#4e3f30\", \"#fefeeb\", \"#f8f4e4\", \"#a5b3aa\"],\n [\"#4d3b3b\", \"#de6262\", \"#ffb88c\", \"#ffd0b3\", \"#f5e0d3\"],\n [\"#fffbb7\", \"#a6f6af\", \"#66b6ab\", \"#5b7c8d\", \"#4f2958\"],\n [\"#edf6ee\", \"#d1c089\", \"#b3204d\", \"#412e28\", \"#151101\"],\n [\"#9d7e79\", \"#ccac95\", \"#9a947c\", \"#748b83\", \"#5b756c\"],\n [\"#fcfef5\", \"#e9ffe1\", \"#cdcfb7\", \"#d6e6c3\", \"#fafbe3\"],\n [\"#9cddc8\", \"#bfd8ad\", \"#ddd9ab\", \"#f7af63\", \"#633d2e\"],\n [\"#30261c\", \"#403831\", \"#36544f\", \"#1f5f61\", \"#0b8185\"],\n [\"#aaff00\", \"#ffaa00\", \"#ff00aa\", \"#aa00ff\", \"#00aaff\"],\n [\"#d1313d\", \"#e5625c\", \"#f9bf76\", \"#8eb2c5\", \"#615375\"],\n [\"#ffe181\", \"#eee9e5\", \"#fad3b2\", \"#ffba7f\", \"#ff9c97\"],\n [\"#73c8a9\", \"#dee1b6\", \"#e1b866\", \"#bd5532\", \"#373b44\"],\n [\"#805841\", \"#dcf7f3\", \"#fffcdd\", \"#ffd8d8\", \"#f5a2a2\"],\n]\n\nexport const getDebugLayoutObject = (lo: any): LayoutDebugObject | null => {\n let {\n x,\n y,\n width,\n height,\n }: { x: number; y: number; width?: number; height?: number } = {\n ...lo,\n ...(lo as any).size,\n ...(lo as any).center,\n ...(lo as any).position,\n }\n\n if (\n lo.x1 !== undefined &&\n lo.x2 !== undefined &&\n lo.y1 !== undefined &&\n lo.y2 !== undefined\n ) {\n x = (lo.x1 + lo.x2) / 2\n y = (lo.y1 + lo.y2) / 2\n width = Math.abs(lo.x1 - lo.x2)\n height = Math.abs(lo.y1 - lo.y2)\n }\n\n const title = lo.text || lo.name || lo.source?.text || lo.source?.name || \"?\"\n const content = lo\n\n if (x === undefined || y === undefined) return null\n\n if (width === undefined) {\n if (\"outer_diameter\" in lo) {\n width = lo.outer_diameter\n height = lo.outer_diameter\n }\n }\n\n if (width === undefined || height === undefined) {\n width = 0.1\n height = 0.1\n }\n\n return {\n x,\n y,\n width,\n height,\n title,\n content,\n bg_color:\n nice_color_palettes[\n stringHash((lo as any).type || title) % nice_color_palettes.length\n ]?.[4] ?? \"#f00\",\n }\n}\n","export const isTruthy = <T>(value: T): value is NonNullable<T> => Boolean(value)\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getDebugLayoutObject } from \"./utils/get-layout-debug-object\"\nimport { isTruthy } from \"./utils/is-truthy\"\n\nexport const findBoundsAndCenter = (\n elements: AnyCircuitElement[],\n): { center: { x: number; y: number }; width: number; height: number } => {\n const debugObjects = elements\n .filter((elm) => elm.type.startsWith(\"pcb_\"))\n .concat(\n elements\n .filter((elm) => elm.type === \"pcb_trace\")\n // @ts-ignore\n .flatMap((elm: PcbTrace) => elm.route),\n )\n .map((elm) => getDebugLayoutObject(elm))\n .filter(isTruthy)\n\n if (debugObjects.length === 0)\n return { center: { x: 0, y: 0 }, width: 0, height: 0 }\n\n let minX = debugObjects[0]!.x - debugObjects[0]!.width / 2\n let maxX = debugObjects[0]!.x + debugObjects[0]!.width / 2\n let minY = debugObjects[0]!.y - debugObjects[0]!.height / 2\n let maxY = debugObjects[0]!.y + debugObjects[0]!.height / 2\n\n for (const obj of debugObjects.slice(1)) {\n minX = Math.min(minX, obj.x - obj.width / 2)\n maxX = Math.max(maxX, obj.x + obj.width / 2)\n minY = Math.min(minY, obj.y - obj.height / 2)\n maxY = Math.max(maxY, obj.y + obj.height / 2)\n }\n\n const width = maxX - minX\n const height = maxY - minY\n const center = { x: minX + width / 2, y: minY + height / 2 }\n\n return { center, width, height }\n}\n","import { useMemo } from \"react\"\nimport { createContext, useContext } from \"react\"\nimport { createStore, type StateProps } from \"../global-store\"\n\nexport const StoreContext = createContext(null)\n\nexport const ContextProviders = ({\n children,\n initialState,\n}: { children?: any; initialState?: Partial<StateProps> }) => {\n const store = useMemo(() => createStore(initialState), [])\n\n return (\n <StoreContext.Provider value={store as any}>\n {children}\n </StoreContext.Provider>\n )\n}\n","import {\n createStore as createZustandStore,\n useStore as useZustandStore,\n UseBoundStore,\n} from \"zustand\"\nimport { StoreContext } from \"./components/ContextProviders\"\nimport type { LayerRef } from \"circuit-json\"\nimport { useContext } from \"react\"\n\nexport interface State {\n selected_layer: LayerRef\n\n pcb_viewer_id: string\n\n in_edit_mode: boolean\n in_move_footprint_mode: boolean\n in_draw_trace_mode: boolean\n is_mouse_over_container: boolean\n is_moving_component: boolean\n is_drawing_trace: boolean\n is_showing_autorouting: boolean\n is_showing_drc_errors: boolean\n\n is_showing_multiple_traces_length: boolean\n is_showing_rats_nest: boolean\n\n selectLayer: (layer: LayerRef) => void\n setEditMode: (mode: \"off\" | \"move_footprint\" | \"draw_trace\") => void\n setIsMovingComponent: (is_moving: boolean) => void\n setIsDrawingTrace: (is_drawing: boolean) => void\n setIsShowingRatsNest: (is_showing: boolean) => void\n setIsMouseOverContainer: (is_focused: boolean) => void\n setIsShowingAutorouting: (is_showing: boolean) => void\n setIsShowingMultipleTracesLength: (is_showing: boolean) => void\n setIsShowingDrcErrors: (is_showing: boolean) => void\n}\n\nexport type StateProps = {\n [key in keyof State]: State[key] extends boolean ? boolean : never\n}\n\nexport const createStore = (initialState: Partial<StateProps> = {}) =>\n createZustandStore<State>(\n (set) =>\n ({\n selected_layer: \"top\",\n\n pcb_viewer_id: `pcb_viewer_${Math.random().toString().slice(2, 10)}`,\n\n in_edit_mode: false,\n in_move_footprint_mode: false,\n in_draw_trace_mode: false,\n\n is_moving_component: false,\n is_drawing_trace: false,\n is_mouse_over_container: false,\n\n is_showing_multiple_traces_length: false,\n is_showing_rats_nest: false,\n is_showing_autorouting: true,\n is_showing_drc_errors: true,\n ...initialState,\n\n selectLayer: (layer) => set({ selected_layer: layer }),\n setEditMode: (mode) =>\n set({\n in_edit_mode: mode !== \"off\",\n in_move_footprint_mode: mode === \"move_footprint\",\n in_draw_trace_mode: mode === \"draw_trace\",\n is_moving_component: false,\n is_drawing_trace: false,\n }),\n setIsShowingRatsNest: (is_showing) =>\n set({ is_showing_rats_nest: is_showing }),\n setIsMovingComponent: (is_moving) =>\n set({ is_moving_component: is_moving }),\n setIsDrawingTrace: (is_drawing) =>\n set({ is_drawing_trace: is_drawing }),\n setIsMouseOverContainer: (is_focused) =>\n set({ is_mouse_over_container: is_focused }),\n setIsShowingMultipleTracesLength: (is_showing) =>\n set({ is_showing_multiple_traces_length: is_showing }),\n setIsShowingAutorouting: (is_showing) =>\n set({ is_showing_autorouting: is_showing }),\n setIsShowingDrcErrors: (is_showing) =>\n set({ is_showing_drc_errors: is_showing }),\n }) as const,\n )\n\nexport const useGlobalStore = <T = State>(s?: (state: State) => T): T => {\n const store = useContext(StoreContext)\n\n return useZustandStore(store as any, s as any)\n}\n","import { useGlobalStore } from \"global-store\"\nimport { useEffect } from \"react\"\nimport {\n toast as ogToast,\n ToastContainer as OgToastContainer,\n} from \"react-toastify\"\nimport { injectStyle } from \"react-toastify/dist/inject-style\"\n\nexport const useToast = () => {\n const pcb_viewer_id = useGlobalStore((s) => s.pcb_viewer_id)\n const toast = (message: string, opts?: Parameters<typeof ogToast>[1]) =>\n ogToast(message, {\n containerId: pcb_viewer_id,\n ...opts,\n })\n\n toast.error = (message: string, opts?: Parameters<typeof ogToast.error>[1]) =>\n ogToast.error(message, {\n containerId: pcb_viewer_id,\n ...opts,\n })\n\n // TODO add container id to this\n toast.promise = ogToast.promise\n\n return toast as typeof ogToast\n}\n\nexport const ToastContainer = () => {\n useEffect(() => {\n injectStyle()\n }, [])\n const pcb_viewer_id = useGlobalStore((s) => s.pcb_viewer_id)\n return <OgToastContainer position=\"top-center\" containerId={pcb_viewer_id} />\n}\n","export var noop = function () { };\nexport function on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexport function off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexport var isBrowser = typeof window !== 'undefined';\nexport var isNavigator = typeof navigator !== 'undefined';\n","import { useEffect, useLayoutEffect } from 'react';\nimport { isBrowser } from './misc/util';\nvar useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;\n","import { useMemo, useState } from 'react';\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';\nimport { isBrowser, noop } from './misc/util';\nvar defaultState = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n};\nfunction useMeasure() {\n var _a = useState(null), element = _a[0], ref = _a[1];\n var _b = useState(defaultState), rect = _b[0], setRect = _b[1];\n var observer = useMemo(function () {\n return new window.ResizeObserver(function (entries) {\n if (entries[0]) {\n var _a = entries[0].contentRect, x = _a.x, y = _a.y, width = _a.width, height = _a.height, top_1 = _a.top, left = _a.left, bottom = _a.bottom, right = _a.right;\n setRect({ x: x, y: y, width: width, height: height, top: top_1, left: left, bottom: bottom, right: right });\n }\n });\n }, []);\n useIsomorphicLayoutEffect(function () {\n if (!element)\n return;\n observer.observe(element);\n return function () {\n observer.disconnect();\n };\n }, [element]);\n return [ref, rect];\n}\nexport default isBrowser && typeof window.ResizeObserver !== 'undefined'\n ? useMeasure\n : (function () { return [noop, defaultState]; });\n","import { Matrix, compose, translate, scale } from \"transformation-matrix\"\n\ntype Point = { x: number; y: number }\n\ninterface PinchInput {\n initialTransform: Matrix\n initialTouch1: Point\n initialTouch2: Point\n finalTouch1: Point | null\n finalTouch2: Point | null\n}\n\nexport const computePinchTransform = ({\n initialTransform,\n initialTouch1,\n initialTouch2,\n finalTouch1,\n finalTouch2,\n}: PinchInput): Matrix => {\n if (!finalTouch1 || !finalTouch2) {\n return initialTransform\n }\n // Calculate initial and current centers\n const initialCenter = {\n x: (initialTouch1.x + initialTouch2.x) / 2,\n y: (initialTouch1.y + initialTouch2.y) / 2,\n }\n const currentCenter = {\n x: (finalTouch1.x + finalTouch2.x) / 2,\n y: (finalTouch1.y + finalTouch2.y) / 2,\n }\n\n // Calculate initial and current distances between touch points\n const initialDist = Math.hypot(\n initialTouch2.x - initialTouch1.x,\n initialTouch2.y - initialTouch1.y,\n )\n const currentDist = Math.hypot(\n finalTouch2.x - finalTouch1.x,\n finalTouch2.y - finalTouch1.y,\n )\n\n // Calculate the scaling factor, prevent division by zero\n const s = initialDist === 0 ? 1 : currentDist / initialDist\n\n // Calculate the translation delta\n const deltaX = currentCenter.x - initialCenter.x\n const deltaY = currentCenter.y - initialCenter.y\n\n // Compose the transformation matrix\n // 1. Translate by the delta movement of the center\n // 2. Translate to the initial center\n // 3. Scale around the initial center\n // 4. Translate back from the initial center\n // 5. Apply the initial transform before the pinch started\n const pinchTransform = compose(\n translate(deltaX, deltaY),\n translate(initialCenter.x, initialCenter.y),\n scale(s, s),\n translate(-initialCenter.x, -initialCenter.y),\n initialTransform,\n )\n\n return pinchTransform\n}\n","import {\n Matrix,\n identity,\n translate,\n compose,\n applyToPoint,\n scale,\n} from \"transformation-matrix\"\n// import { fromTwoMovingPoints } from \"transformation-matrix\" // Not used currently\nimport { useCallback, useEffect, useReducer, useRef, useState } from \"react\"\nimport { computePinchTransform } from \"./computePinchTransform\"\n\ntype Point = { x: number; y: number }\n\ninterface Props {\n canvasElm?: HTMLElement\n transform?: Matrix\n initialTransform?: Matrix\n onSetTransform?: (transform: Matrix) => any\n enabled?: boolean\n shouldDrag?: (e: MouseEvent | TouchEvent | WheelEvent) => boolean\n}\n\nexport const useMouseMatrixTransform = (props: Props = {}) => {\n const extRef = useRef<any>(null)\n const [lastDragCancelTime, setLastDragCancelTime] = useState(0)\n const outerCanvasElm = props.canvasElm ?? extRef.current\n const [internalTransform, setInternalTransform] = useState<Matrix>(\n props.initialTransform ?? identity(),\n )\n const [waitCounter, setWaitCounter] = useState(0)\n const [extChangeCounter, incExtChangeCounter] = useReducer((s) => s + 1, 0)\n\n const setTransform = useCallback(\n (newTransform: Matrix) => {\n if (props.onSetTransform) {\n props.onSetTransform(newTransform)\n }\n if (!props.transform) {\n setInternalTransform(newTransform)\n }\n },\n [props.onSetTransform, setInternalTransform],\n )\n\n const setTransformExt = useCallback(\n (newTransform: Matrix) => {\n setTransform(newTransform)\n incExtChangeCounter()\n },\n [setTransform],\n )\n\n const transform = props.transform ?? internalTransform\n\n const cancelDrag = useCallback(() => {\n setLastDragCancelTime(Date.now())\n }, [])\n\n const gestureModeRef = useRef<\"none\" | \"drag\" | \"pinch\">(\"none\")\n // const lastTouchRef = useRef<{ x: number; y: number } | null>(null) // No longer needed for delta calculation\n const dragDataRef = useRef<{\n initialTransform: Matrix\n initialTouch: Point\n } | null>(null)\n const pinchDataRef = useRef<{\n initialTransform: Matrix\n initialTouch1: Point\n initialTouch2: Point\n finalTouch1: Point | null\n finalTouch2: Point | null\n } | null>(null)\n\n useEffect(() => {\n const canvasElm: HTMLCanvasElement | null =\n props.canvasElm ?? extRef.current\n if (canvasElm && !outerCanvasElm) {\n setWaitCounter(waitCounter + 1)\n return\n }\n if (!canvasElm) {\n const timeout = setTimeout(() => {\n setWaitCounter(waitCounter + 1)\n }, 100)\n return () => clearTimeout(timeout)\n }\n let init_tf = props.transform ?? internalTransform\n\n let m0: Point = { x: 0, y: 0 },\n m1: Point = { x: 0, y: 0 },\n md = false,\n mlastrel: Point = { x: 0, y: 0 }\n\n const getMousePos = (e: MouseEvent) => {\n return {\n x: e.pageX - canvasElm.getBoundingClientRect().left - window.scrollX,\n y: e.pageY - canvasElm.getBoundingClientRect().top - window.scrollY,\n }\n }\n\n function handleMouseDown(e: MouseEvent) {\n if (props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n m0 = getMousePos(e)\n if (Date.now() - lastDragCancelTime < 100) return\n md = true\n e.preventDefault()\n }\n function handleMouseUp(e: MouseEvent) {\n if (!md || props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n m1 = getMousePos(e)\n\n const new_tf = compose(translate(m1.x - m0.x, m1.y - m0.y), init_tf)\n setTransform(new_tf)\n init_tf = new_tf\n\n md = false\n }\n function handleMouseMove(e: MouseEvent) {\n mlastrel = getMousePos(e)\n if (!md || props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n m1 = getMousePos(e)\n const new_tf = compose(translate(m1.x - m0.x, m1.y - m0.y), init_tf)\n setTransform(new_tf)\n }\n function handleMouseWheel(e: WheelEvent) {\n if (props.enabled === false) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n const center = getMousePos(e)\n const new_tf = compose(\n translate(center.x, center.y),\n scale(1 - e.deltaY / 1000, 1 - e.deltaY / 1000),\n translate(-center.x, -center.y),\n init_tf,\n )\n setTransform(new_tf)\n init_tf = new_tf\n e.preventDefault()\n }\n function handleMouseOut(e: MouseEvent) {\n if (!md) return\n if (props.shouldDrag && !props.shouldDrag(e)) return\n\n if (canvasElm) {\n const boundingBox = canvasElm.getBoundingClientRect()\n if (\n e.clientX >= boundingBox.left + 10 &&\n e.clientX <= boundingBox.right - 10 &&\n e.clientY >= boundingBox.top + 10 &&\n e.clientY <= boundingBox.bottom - 10\n ) {\n return\n }\n }\n\n md = false\n m1 = getMousePos(e)\n const new_tf = compose(translate(m1.x - m0.x, m1.y - m0.y), init_tf)\n setTransform(new_tf)\n init_tf = new_tf\n }\n\n function handleTouchStart(e: TouchEvent) {\n e.preventDefault()\n if (props.enabled === false) return\n if (e.touches.length === 1) {\n // Start Drag\n gestureModeRef.current = \"drag\"\n const touch = e.touches[0]\n dragDataRef.current = {\n initialTransform: init_tf, // Capture transform before drag starts\n initialTouch: { x: touch.clientX, y: touch.clientY },\n }\n } else if (e.touches.length === 2) {\n // Start Pinch\n gestureModeRef.current = \"pinch\"\n const touch1 = e.touches[0]\n const touch2 = e.touches[1]\n pinchDataRef.current = {\n initialTransform: init_tf, // Store the transform at the start of the pinch\n initialTouch1: { x: touch1.clientX, y: touch1.clientY },\n initialTouch2: { x: touch2.clientX, y: touch2.clientY },\n finalTouch1: null,\n finalTouch2: null,\n }\n }\n }\n\n function handleTouchMove(e: TouchEvent) {\n e.preventDefault()\n if (props.enabled === false) return\n if (\n gestureModeRef.current === \"drag\" &&\n e.touches.length === 1 &&\n dragDataRef.current // Check if drag has started\n ) {\n // Handle Drag Move\n const touch = e.touches[0]\n const currentTouch = { x: touch.clientX, y: touch.clientY }\n const deltaX = currentTouch.x - dragDataRef.current.initialTouch.x\n const deltaY = currentTouch.y - dragDataRef.current.initialTouch.y\n\n // Apply delta to the transform that existed *before* the drag started\n const new_tf = compose(\n translate(deltaX, deltaY),\n dragDataRef.current.initialTransform,\n )\n setTransform(new_tf)\n // Do not update init_tf here\n } else if (\n gestureModeRef.current === \"pinch\" &&\n e.touches.length === 2 &&\n pinchDataRef.current\n ) {\n const touch1 = e.touches[0]\n const touch2 = e.touches[1]\n\n pinchDataRef.current.finalTouch1 = {\n x: touch1.clientX,\n y: touch1.clientY,\n }\n pinchDataRef.current.finalTouch2 = {\n x: touch2.clientX,\n y: touch2.clientY,\n }\n\n const new_tf = computePinchTransform(pinchDataRef.current)\n setTransform(new_tf)\n // Don't update init_tf here, only on touch end\n }\n }\n\n function handleTouchEnd(e: TouchEvent) {\n e.preventDefault()\n\n // Use changedTouches to get the final position of the lifted finger(s)\n const finalTouch = e.changedTouches[0]\n\n if (\n gestureModeRef.current === \"drag\" &&\n dragDataRef.current && // Check if drag was active\n finalTouch // Ensure we have the final touch info\n ) {\n // Drag End\n const finalTouchPos = { x: finalTouch.clientX, y: finalTouch.clientY }\n const deltaX = finalTouchPos.x - dragDataRef.current.initialTouch.x\n const deltaY = finalTouchPos.y - dragDataRef.current.initialTouch.y\n\n // Calculate the final transform based on the total delta\n const new_tf = compose(\n translate(deltaX, deltaY),\n dragDataRef.current.initialTransform,\n )\n setTransform(new_tf) // Update the visual state\n init_tf = new_tf // Lock in the transform for the next gesture\n } else if (gestureModeRef.current === \"pinch\" && pinchDataRef.current) {\n const new_tf = computePinchTransform(pinchDataRef.current)\n setTransform(new_tf) // Ensure the final state is set\n init_tf = new_tf // Update init_tf\n }\n\n // Reset gesture state and data refs\n gestureModeRef.current = \"none\"\n // lastTouchRef.current = null // No longer used\n dragDataRef.current = null\n pinchDataRef.current = null\n }\n\n canvasElm.addEventListener(\"mousedown\", handleMouseDown)\n canvasElm.addEventListener(\"mouseup\", handleMouseUp)\n window.addEventListener(\"mousemove\", handleMouseMove)\n canvasElm.addEventListener(\"mouseout\", handleMouseOut)\n canvasElm.addEventListener(\"wheel\", handleMouseWheel)\n\n canvasElm.addEventListener(\"touchstart\", handleTouchStart, {\n passive: false,\n })\n canvasElm.addEventListener(\"touchmove\", handleTouchMove, {\n passive: false,\n })\n canvasElm.addEventListener(\"touchend\", handleTouchEnd, { passive: false })\n canvasElm.addEventListener(\"touchcancel\", handleTouchEnd, {\n passive: false,\n })\n\n return () => {\n canvasElm.removeEventListener(\"mousedown\", handleMouseDown)\n canvasElm.removeEventListener(\"mouseup\", handleMouseUp)\n window.removeEventListener(\"mousemove\", handleMouseMove)\n canvasElm.removeEventListener(\"mouseout\", handleMouseOut)\n canvasElm.removeEventListener(\"wheel\", handleMouseWheel)\n\n canvasElm.removeEventListener(\"touchstart\", handleTouchStart)\n canvasElm.removeEventListener(\"touchmove\", handleTouchMove)\n canvasElm.removeEventListener(\"touchend\", handleTouchEnd)\n canvasElm.removeEventListener(\"touchcancel\", handleTouchEnd)\n }\n }, [\n outerCanvasElm,\n waitCounter,\n extChangeCounter,\n lastDragCancelTime,\n props.enabled,\n props.shouldDrag,\n ])\n\n const applyTransformToPoint = useCallback(\n (obj: Point | [number, number]) => applyToPoint(transform, obj),\n [transform],\n )\n\n return {\n ref: extRef,\n transform,\n applyTransformToPoint,\n setTransform: setTransformExt,\n cancelDrag,\n }\n}\n\nexport default useMouseMatrixTransform\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { getFullConnectivityMapFromCircuitJson } from \"circuit-json-to-connectivity-map\"\nimport type { GraphicsObject } from \"graphics-debug\"\nimport type { GridConfig, Primitive } from \"lib/types\"\nimport { addInteractionMetadataToPrimitives } from \"lib/util/addInteractionMetadataToPrimitives\"\nimport { useCallback, useMemo, useState } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { convertElementToPrimitives } from \"../lib/convert-element-to-primitive\"\nimport { CanvasPrimitiveRenderer } from \"./CanvasPrimitiveRenderer\"\nimport { DebugGraphicsOverlay } from \"./DebugGraphicsOverlay\"\nimport { WarningGraphicsOverlay } from \"./WarningGraphicsOverlay\"\nimport { DimensionOverlay } from \"./DimensionOverlay\"\nimport { EditPlacementOverlay } from \"./EditPlacementOverlay\"\nimport { EditTraceHintOverlay } from \"./EditTraceHintOverlay\"\nimport { ErrorOverlay } from \"./ErrorOverlay\"\nimport { MouseElementTracker } from \"./MouseElementTracker\"\nimport { RatsNestOverlay } from \"./RatsNestOverlay\"\nimport { ToolbarOverlay } from \"./ToolbarOverlay\"\nimport type { ManualEditEvent } from \"@tscircuit/props\"\n\nexport interface CanvasElementsRendererProps {\n elements: AnyCircuitElement[]\n debugGraphics?: GraphicsObject | null\n transform?: Matrix\n width?: number\n height?: number\n grid?: GridConfig\n allowEditing: boolean\n focusOnHover?: boolean\n cancelPanDrag: () => void\n onCreateEditEvent: (event: ManualEditEvent) => void\n onModifyEditEvent: (event: Partial<ManualEditEvent>) => void\n}\n\nexport const CanvasElementsRenderer = (props: CanvasElementsRendererProps) => {\n const { transform, elements } = props\n const [primitivesWithoutInteractionMetadata, connectivityMap] =\n useMemo(() => {\n const primitivesWithoutInteractionMetadata = props.elements.flatMap(\n (elm) => convertElementToPrimitives(elm, props.elements),\n )\n const connectivityMap = getFullConnectivityMapFromCircuitJson(\n props.elements as any,\n )\n return [primitivesWithoutInteractionMetadata, connectivityMap]\n }, [props.elements])\n\n const [hoverState, setHoverState] = useState({\n drawingObjectIdsWithMouseOver: new Set<string>(),\n primitiveIdsInMousedOverNet: [] as string[],\n })\n\n const primitives = useMemo(() => {\n return addInteractionMetadataToPrimitives({\n primitivesWithoutInteractionMetadata,\n drawingObjectIdsWithMouseOver: hoverState.drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet: hoverState.primitiveIdsInMousedOverNet,\n })\n }, [primitivesWithoutInteractionMetadata, hoverState])\n\n const onMouseOverPrimitives = useCallback(\n (primitivesHoveredOver: Primitive[]) => {\n const primitiveIdsInMousedOverNet: string[] = []\n for (const primitive of primitivesHoveredOver) {\n if (primitive._element) {\n const connectedPrimitivesList = connectivityMap.getNetConnectedToId(\n \"pcb_port_id\" in primitive._element\n ? primitive._element?.pcb_port_id!\n : \"pcb_trace_id\" in primitive._element\n ? primitive._element?.pcb_trace_id!\n : \"\",\n )\n primitiveIdsInMousedOverNet.push(\n ...connectivityMap.getIdsConnectedToNet(connectedPrimitivesList!),\n )\n }\n }\n\n const drawingObjectIdsWithMouseOver = new Set(\n primitivesHoveredOver.map((p) => p._pcb_drawing_object_id),\n )\n\n setHoverState({\n drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet,\n })\n },\n [connectivityMap],\n )\n\n return (\n <MouseElementTracker\n elements={elements}\n transform={transform}\n primitives={primitivesWithoutInteractionMetadata}\n onMouseHoverOverPrimitives={onMouseOverPrimitives}\n >\n <EditPlacementOverlay\n disabled={!props.allowEditing}\n transform={transform}\n soup={elements}\n cancelPanDrag={props.cancelPanDrag}\n onCreateEditEvent={props.onCreateEditEvent}\n onModifyEditEvent={props.onModifyEditEvent}\n >\n <EditTraceHintOverlay\n disabled={!props.allowEditing}\n transform={transform}\n soup={elements}\n cancelPanDrag={props.cancelPanDrag}\n onCreateEditEvent={props.onCreateEditEvent as any}\n onModifyEditEvent={props.onModifyEditEvent as any}\n >\n <DimensionOverlay\n transform={transform!}\n focusOnHover={props.focusOnHover}\n >\n <ToolbarOverlay elements={elements}>\n <ErrorOverlay transform={transform} elements={elements}>\n <RatsNestOverlay transform={transform} soup={elements}>\n <DebugGraphicsOverlay\n transform={transform}\n debugGraphics={props.debugGraphics}\n >\n <WarningGraphicsOverlay\n transform={transform}\n elements={elements}\n >\n <CanvasPrimitiveRenderer\n transform={transform}\n primitives={primitives}\n width={props.width}\n height={props.height}\n grid={props.grid}\n />\n </WarningGraphicsOverlay>\n </DebugGraphicsOverlay>\n </RatsNestOverlay>\n </ErrorOverlay>\n </ToolbarOverlay>\n </DimensionOverlay>\n </EditTraceHintOverlay>\n </EditPlacementOverlay>\n </MouseElementTracker>\n )\n}\n","import { Primitive } from \"lib/types\"\n\nexport function addInteractionMetadataToPrimitives({\n primitivesWithoutInteractionMetadata,\n drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet,\n}: {\n primitivesWithoutInteractionMetadata: Primitive[]\n drawingObjectIdsWithMouseOver: Set<string>\n primitiveIdsInMousedOverNet: string[]\n}): Primitive[] {\n const newPrimitives = []\n for (const primitive of primitivesWithoutInteractionMetadata) {\n const newPrimitive = { ...primitive }\n if (primitive?.layer === \"drill\") {\n newPrimitive.is_in_highlighted_net = false\n newPrimitive.is_mouse_over = false\n } else if (\n drawingObjectIdsWithMouseOver.has(primitive._pcb_drawing_object_id)\n ) {\n newPrimitive.is_mouse_over = true\n } else if (\n primitive._element &&\n ((\"pcb_trace_id\" in primitive._element &&\n primitiveIdsInMousedOverNet.includes(\n primitive._element.pcb_trace_id!,\n )) ||\n (\"pcb_port_id\" in primitive._element &&\n primitiveIdsInMousedOverNet.includes(\n primitive._element.pcb_port_id!,\n )))\n ) {\n newPrimitive.is_in_highlighted_net = true\n } else {\n newPrimitive.is_in_highlighted_net = false\n newPrimitive.is_mouse_over = false\n }\n newPrimitives.push(newPrimitive)\n }\n return newPrimitives\n}\n","export interface Point {\n x: number\n y: number\n trace_width?: number\n}\n\nexport function getExpandedStroke(\n strokeInput: (Point | [number, number] | number[])[],\n defaultWidth: number,\n): Point[] {\n if (strokeInput.length < 2) {\n throw new Error(\"Stroke must have at least two points\")\n }\n\n const stroke: Point[] = strokeInput.map((point) => {\n if (Array.isArray(point)) {\n return { x: point[0], y: point[1] }\n }\n return point as Point\n })\n\n const leftSide: Point[] = []\n const rightSide: Point[] = []\n\n function getNormal(p1: Point, p2: Point): Point {\n const dx = p2.x - p1.x\n const dy = p2.y - p1.y\n const length = Math.sqrt(dx * dx + dy * dy)\n return { x: -dy / length, y: dx / length }\n }\n\n function addPoint(\n point: Point,\n normal: Point,\n factor: number,\n width: number,\n ) {\n const halfWidth = width / 2\n const newPoint = {\n x: point.x + normal.x * halfWidth * factor,\n y: point.y + normal.y * halfWidth * factor,\n }\n if (factor > 0) {\n leftSide.push(newPoint)\n } else {\n rightSide.unshift(newPoint)\n }\n }\n\n // Handle the first point\n const firstNormal = getNormal(stroke[0]!, stroke[1]!)\n const firstWidth = stroke[0]!.trace_width ?? defaultWidth\n addPoint(stroke[0]!, firstNormal, 1, firstWidth)\n addPoint(stroke[0]!, firstNormal, -1, firstWidth)\n\n // Handle middle points\n for (let i = 1; i < stroke.length - 1; i++) {\n const prev = stroke[i - 1]!\n const current = stroke[i]!\n const next = stroke[i + 1]!\n\n const normalPrev = getNormal(prev, current)\n const normalNext = getNormal(current, next)\n\n // Calculate miter line\n const miterX = normalPrev.x + normalNext.x\n const miterY = normalPrev.y + normalNext.y\n const miterLength = Math.sqrt(miterX * miterX + miterY * miterY)\n\n const currentWidth = current.trace_width ?? defaultWidth\n\n // Check if miter is too long (sharp corner)\n const miterLimit = 2 // Adjust this value to control when to bevel\n if (miterLength / 2 > miterLimit * (currentWidth / 2)) {\n // Use bevel join\n addPoint(current, normalPrev, 1, currentWidth)\n addPoint(current, normalNext, 1, currentWidth)\n addPoint(current, normalPrev, -1, currentWidth)\n addPoint(current, normalNext, -1, currentWidth)\n } else {\n // Use miter join\n const scale = 1 / miterLength\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n 1,\n currentWidth,\n )\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n -1,\n currentWidth,\n )\n }\n }\n\n // Handle the last point\n const lastNormal = getNormal(\n stroke[stroke.length - 2]!,\n stroke[stroke.length - 1]!,\n )\n const lastWidth = stroke[stroke.length - 1]!.trace_width ?? defaultWidth\n addPoint(stroke[stroke.length - 1]!, lastNormal, 1, lastWidth)\n addPoint(stroke[stroke.length - 1]!, lastNormal, -1, lastWidth)\n\n // Combine left and right sides to form a closed polygon\n return [...leftSide, ...rightSide]\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\nimport type { Primitive } from \"./types\"\nimport { type Point, getExpandedStroke } from \"./util/expand-stroke\"\n\ntype MetaData = {\n _parent_pcb_component?: any\n _parent_source_component?: any\n _source_port?: any\n}\n\nlet globalPcbDrawingObjectCount = 0\n\nexport const getNewPcbDrawingObjectId = (prefix: string) =>\n `${prefix}_${globalPcbDrawingObjectCount++}`\n\nexport const convertElementToPrimitives = (\n element: AnyCircuitElement,\n allElements: AnyCircuitElement[],\n): (Primitive & MetaData)[] => {\n const _parent_pcb_component =\n \"pcb_component_id\" in element\n ? allElements.find(\n (elm) =>\n elm.type === \"pcb_component\" &&\n elm.pcb_component_id === element.pcb_component_id,\n )\n : undefined\n const _parent_source_component =\n _parent_pcb_component && \"source_component_id\" in _parent_pcb_component\n ? allElements.find(\n (elm) =>\n elm.type === \"source_component\" &&\n elm.source_component_id ===\n _parent_pcb_component.source_component_id,\n )\n : undefined\n\n const _source_port_id =\n \"source_port_id\" in element\n ? element.source_port_id\n : \"pcb_port_id\" in element\n ? su(allElements as any).pcb_port.get(element.pcb_port_id!)\n ?.source_port_id\n : undefined\n\n const _source_port = _source_port_id\n ? allElements.find(\n (e) => e.type === \"source_port\" && e.source_port_id === _source_port_id,\n )\n : undefined\n\n switch (element.type) {\n case \"pcb_board\": {\n const { width, height, center, outline } = element\n\n if (outline && outline.length > 2) {\n return outline.map((point, index, array) => {\n return {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: point.x,\n y1: point.y,\n x2: index === array.length - 1 ? array[0].x : array[index + 1].x,\n y2: index === array.length - 1 ? array[0].y : array[index + 1].y,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n }\n })\n }\n return [\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x - width / 2,\n y1: center.y - height / 2,\n x2: center.x + width / 2,\n y2: center.y - height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x - width / 2,\n y1: center.y + height / 2,\n x2: center.x + width / 2,\n y2: center.y + height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x - width / 2,\n y1: center.y - height / 2,\n x2: center.x - width / 2,\n y2: center.y + height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: center.x + width / 2,\n y1: center.y - height / 2,\n x2: center.x + width / 2,\n y2: center.y + height / 2,\n width: 1, // Add the required width property\n zoomIndependent: true,\n layer: \"board\",\n _element: element,\n },\n ]\n }\n case \"pcb_smtpad\": {\n if (element.shape === \"rect\" || element.shape === \"rotated_rect\") {\n const { shape, x, y, width, height, layer } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x,\n y,\n w: width,\n h: height,\n layer: layer || \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n ]\n } else if (element.shape === \"circle\") {\n const { x, y, radius, layer } = element\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: radius,\n layer: layer || \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n ]\n }\n return []\n }\n case \"pcb_hole\": {\n if (element.hole_shape === \"circle\" || !element.hole_shape) {\n const { x, y, hole_diameter } = element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n // TODO square hole\n // TODO oval hole\n return []\n }\n case \"pcb_plated_hole\": {\n if (element.shape === \"circle\") {\n const { x, y, hole_diameter, outer_diameter } = element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: outer_diameter / 2,\n // TODO support layer on pcb_plated_hole\n layer: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n // TODO support layer on pcb_plated_hole\n layer: \"drill\",\n _element: element,\n\n // double highlights are annoying\n // _element: element,\n },\n ]\n } else if (element.shape === \"oval\") {\n const { x, y, outer_height, outer_width, hole_height, hole_width } =\n element\n\n return [\n {\n _pcb_drawing_object_id: `oval_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"oval\",\n x,\n y,\n rX: outer_width / 2,\n rY: outer_height / 2,\n layer: \"top\", // TODO: Confirm layer handling for oval plated holes\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `oval_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"oval\",\n x,\n y,\n rX: hole_width / 2,\n rY: hole_height / 2,\n layer: \"drill\",\n },\n ]\n } else if (element.shape === \"pill\") {\n const { x, y, outer_height, outer_width, hole_height, hole_width } =\n element\n\n return [\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"pill\",\n x,\n y,\n w: outer_width,\n h: outer_height,\n layer: \"top\", // TODO: Confirm layer handling for oval plated holes\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"pill\",\n x,\n y,\n w: hole_width,\n h: hole_height,\n layer: \"drill\",\n },\n ]\n } else if (element.shape === \"circular_hole_with_rect_pad\") {\n const { x, y, hole_diameter, rect_pad_width, rect_pad_height } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x,\n y,\n w: rect_pad_width,\n h: rect_pad_height,\n layer: \"top\", // Rectangular pad on top layer\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n layer: \"drill\", // Circular hole in drill layer\n },\n ]\n } else if (element.shape === \"pill_hole_with_rect_pad\") {\n const {\n x,\n y,\n hole_width,\n hole_height,\n rect_pad_width,\n rect_pad_height,\n } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x,\n y,\n w: rect_pad_width,\n h: rect_pad_height,\n layer: \"top\", // Rectangular pad on top layer\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n },\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"pill\",\n x,\n y,\n w: hole_width,\n h: hole_height,\n layer: \"drill\", // Pill-shaped hole in drill layer\n },\n ]\n } else {\n return []\n }\n }\n case \"pcb_keepout\": {\n if (element.shape === \"circle\") {\n const { center, radius } = element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x: center.x,\n y: center.y,\n r: radius,\n layer: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n mesh_fill: true,\n },\n ]\n } else if (element.shape === \"rect\") {\n const { center, width, height } = element\n\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x: center.x,\n y: center.y,\n w: width,\n h: height,\n layer: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n mesh_fill: true,\n },\n ]\n }\n break\n }\n case \"pcb_trace\": {\n const primitives: Primitive[] = []\n\n if (element.route_thickness_mode === \"interpolated\") {\n // Prepare the stroke input\n const strokeInput: Point[] = element.route.map((r) => ({\n x: r.x,\n y: r.y,\n trace_width: r.route_type === \"wire\" ? r.width : 0.5,\n }))\n\n // Use getExpandedStroke to generate the polygon points\n const expandedStroke = getExpandedStroke(strokeInput, 0.5) // Use 0.5 as default width\n\n const layer = (element.route[0] as any).layer\n\n // Generate a single polygon primitive from the expanded stroke\n primitives.push({\n _pcb_drawing_object_id: `polygon_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"polygon\",\n points: expandedStroke,\n layer, // same layer for all points\n })\n\n // Add circles for vias\n element.route.forEach((r) => {\n if (r.route_type === \"via\") {\n primitives.push({\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"circle\",\n x: r.x,\n y: r.y,\n r: (r as any).outer_diameter / 2,\n layer: (r as any).from_layer,\n })\n }\n })\n\n return primitives\n }\n let prevX: number | null = null\n let prevY: number | null = null\n\n for (const route of element.route) {\n if (route.route_type === \"wire\") {\n if (prevX !== null && prevY !== null) {\n primitives.push({\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"line\",\n x1: prevX,\n y1: prevY,\n x2: route.x,\n y2: route.y,\n width: route.width,\n squareCap: false,\n layer: route.layer,\n })\n }\n\n prevX = route.x\n prevY = route.y\n }\n }\n\n return primitives\n }\n // The builder currently outputs these as smtpads and holes, so pcb_via isn't\n // used, but that maybe should be changed\n case \"pcb_via\": {\n const { x, y, outer_diameter, hole_diameter, from_layer, to_layer } =\n element\n\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: outer_diameter / 2,\n layer: from_layer!,\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n _element: element,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: hole_diameter / 2,\n layer: \"drill\",\n _parent_pcb_component,\n _parent_source_component,\n },\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x,\n y,\n r: outer_diameter / 2,\n layer: to_layer!,\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n\n case \"pcb_silkscreen_rect\": {\n return [\n {\n _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"rect\",\n x: element.center.x,\n y: element.center.y,\n w: element.width,\n h: element.height,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_silkscreen_circle\": {\n return [\n {\n _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"circle\",\n x: element.center.x,\n y: element.center.y,\n r: element.radius,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_silkscreen_oval\": {\n return [\n {\n _pcb_drawing_object_id: `oval_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"oval\",\n x: element.center.x,\n y: element.center.y,\n rX: element.radius_x / 2,\n rY: element.radius_y / 2,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n // @ts-ignore\n case \"pcb_silkscreen_pill\": {\n return [\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"pill\",\n // @ts-ignore\n x: element.center.x,\n // @ts-ignore\n y: element.center.y,\n // @ts-ignore\n w: element.width,\n // @ts-ignore\n h: element.height,\n layer:\n // @ts-ignore\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_silkscreen_line\": {\n return [\n {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: element.x1,\n y1: element.y1,\n x2: element.x2,\n y2: element.y2,\n width: 0.1, // TODO add strokewidth\n squareCap: false,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n },\n ]\n }\n\n case \"pcb_fabrication_note_path\":\n case \"pcb_silkscreen_path\": {\n const {\n pcb_component_id,\n route, // Array<{ x: number, y: number }>\n type,\n } = element\n\n let layer:\n | \"bottom_silkscreen\"\n | \"top_silkscreen\"\n | \"bottom_fabrication\"\n | \"top_fabrication\"\n | null\n\n if (type === \"pcb_silkscreen_path\") {\n layer =\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\"\n } else if (type === \"pcb_fabrication_note_path\") {\n layer = \"top_fabrication\"\n }\n\n return route\n .slice(0, -1)\n .map((point, index) => {\n const nextPoint = route[index + 1]\n return {\n _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"line\",\n x1: point.x,\n y1: point.y,\n x2: nextPoint.x,\n y2: nextPoint.y,\n width: element.stroke_width ?? 0.1,\n squareCap: false,\n layer: layer!,\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n } as Primitive & MetaData\n })\n .filter(Boolean)\n }\n\n case \"pcb_silkscreen_text\": {\n return [\n {\n _pcb_drawing_object_id: `text_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"text\",\n x: element.anchor_position.x,\n y: element.anchor_position.y,\n layer:\n element.layer === \"bottom\" ? \"bottom_silkscreen\" : \"top_silkscreen\",\n align: element.anchor_alignment ?? \"center\",\n text: element.text,\n size: element.font_size, // Add the required 'size' property\n ccw_rotation: element.ccw_rotation,\n },\n ]\n }\n\n case \"pcb_fabrication_note_text\": {\n return [\n {\n _pcb_drawing_object_id: getNewPcbDrawingObjectId(\"text\"),\n pcb_drawing_type: \"text\",\n x: element.anchor_position.x,\n y: element.anchor_position.y,\n layer:\n element.layer === \"bottom\"\n ? \"bottom_fabrication\"\n : \"top_fabrication\",\n size: element.font_size,\n align: element.anchor_alignment ?? \"center\",\n text: element.text,\n },\n ]\n }\n case \"pcb_cutout\": {\n const cutoutElement = element as any\n switch (cutoutElement.shape) {\n case \"rect\": {\n return [\n {\n _pcb_drawing_object_id:\n getNewPcbDrawingObjectId(\"pcb_cutout_rect\"),\n pcb_drawing_type: \"rect\",\n x: cutoutElement.center.x,\n y: cutoutElement.center.y,\n w: cutoutElement.width,\n h: cutoutElement.height,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n case \"circle\": {\n return [\n {\n _pcb_drawing_object_id:\n getNewPcbDrawingObjectId(\"pcb_cutout_circle\"),\n pcb_drawing_type: \"circle\",\n x: cutoutElement.center.x,\n y: cutoutElement.center.y,\n r: cutoutElement.radius,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n case \"polygon\": {\n return [\n {\n _pcb_drawing_object_id:\n getNewPcbDrawingObjectId(\"pcb_cutout_polygon\"),\n pcb_drawing_type: \"polygon\",\n points: cutoutElement.points,\n layer: \"drill\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n },\n ]\n }\n default:\n console.warn(`Unsupported pcb_cutout shape: ${cutoutElement.shape}`)\n return []\n }\n }\n }\n\n // console.warn(`Unsupported element type: ${element.type}`)\n return []\n}\n","import { drawGrid } from \"lib/draw-grid\"\nimport { SuperGrid, toMMSI } from \"react-supergrid\"\nimport React, { useEffect, useRef } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { drawPrimitives } from \"../lib/draw-primitives\"\nimport { Drawer } from \"../lib/Drawer\"\nimport type { GridConfig, Primitive } from \"../lib/types\"\nimport { useGlobalStore } from \"global-store\"\nimport { all_layers } from \"circuit-json\"\n\ninterface Props {\n primitives: Primitive[]\n defaultUnit?: string\n transform?: Matrix\n grid?: GridConfig\n width?: number\n height?: number\n}\n\nconst orderedLayers = [\n \"board\",\n \"bottom_silkscreen\",\n \"bottom\",\n \"top\",\n \"top_silkscreen\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n \"drill\",\n \"other\",\n]\n\nexport const CanvasPrimitiveRenderer = ({\n primitives,\n transform,\n grid,\n width = 500,\n height = 500,\n}: Props) => {\n const canvasRefs = useRef<Record<string, HTMLCanvasElement>>()\n const selectedLayer = useGlobalStore((s) => s.selected_layer)\n\n useEffect(() => {\n if (!canvasRefs.current) return\n if (Object.keys(canvasRefs.current).length === 0) return\n const drawer = new Drawer(canvasRefs.current)\n if (transform) drawer.transform = transform\n drawer.clear()\n drawer.foregroundLayer = selectedLayer\n drawPrimitives(drawer, primitives)\n drawer.orderAndFadeLayers()\n }, [primitives, transform, selectedLayer])\n\n return (\n <div\n style={{\n backgroundColor: \"black\",\n width,\n height,\n position: \"relative\",\n }}\n >\n <SuperGrid\n textColor=\"rgba(0,255,0,0.8)\"\n majorColor=\"rgba(0,255,0,0.4)\"\n minorColor=\"rgba(0,255,0,0.2)\"\n screenSpaceCellSize={200}\n width={width}\n height={height}\n transform={transform!}\n stringifyCoord={(x, y, z) => `${toMMSI(x, z)}, ${toMMSI(y, z)}`}\n />\n {orderedLayers\n .map((l) => l.replace(/-/g, \"\"))\n .map((layer, i) => (\n <canvas\n key={layer}\n className={`pcb-layer-${layer}`}\n ref={(el) => {\n canvasRefs.current ??= {}\n canvasRefs.current[layer] = el!\n }}\n style={{\n position: \"absolute\",\n zIndex: i,\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n }}\n width={width}\n height={height}\n />\n ))}\n </div>\n )\n}\n","import {\n type Matrix,\n applyToPoint,\n compose,\n identity,\n inverse,\n translate,\n} from \"transformation-matrix\"\nimport colors from \"./colors\"\nimport { scaleOnly } from \"./util/scale-only\"\nimport { zIndexMap } from \"./util/z-index-map\"\nimport { Rotation } from \"circuit-json\"\n\nexport interface Aperture {\n shape: \"circle\" | \"square\"\n size: number\n opacity: number\n mode: \"add\" | \"subtract\"\n fontSize: number\n color: string\n layer: string\n}\n\nexport const LAYER_NAME_TO_COLOR = {\n // Standard colors, you shouldn't use these except for testing\n red: \"red\",\n black: \"black\",\n green: \"green\",\n board: \"rgb(255, 255, 255)\",\n other: \"#eee\",\n // TODO more builtin html colors\n\n // Common eagle names\n top: colors.board.copper.f,\n inner1: colors.board.copper.in1,\n inner2: colors.board.copper.in2,\n\n inner4: colors.board.copper.in4,\n inner5: colors.board.copper.in5,\n inner6: colors.board.copper.in6,\n inner7: colors.board.copper.in7,\n inner8: colors.board.copper.in8,\n\n bottom: colors.board.copper.b,\n drill: colors.board.anchor,\n keepout: colors.board.background,\n tkeepout: colors.board.b_crtyd,\n tplace: colors.board.b_silks,\n\n top_silkscreen: colors.board.f_silks,\n bottom_silkscreen: colors.board.b_silks,\n\n top_fabrication: colors.board.f_fab,\n bottom_fabrication: colors.board.b_fab,\n\n ...(colors.board as any),\n}\n\nexport type LayerNameForColor = keyof typeof LAYER_NAME_TO_COLOR\n\nexport const DEFAULT_DRAW_ORDER = [\n \"board\",\n \"top\",\n \"top_silkscreen\",\n \"bottom_silkscreen\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n] as const\n\nexport const FILL_TYPES = {\n 0: \"Empty\",\n 1: \"Solid\",\n 2: \"Line\",\n 3: \"LtSlash\",\n 4: \"Slash\",\n 5: \"BkSlash\",\n 6: \"LtBkSlash\",\n 7: \"Hatch\",\n 8: \"XHatch\",\n 9: \"Interleave\",\n 10: \"WideDot\",\n 11: \"CloseDot\",\n 12: \"Stipple1\",\n 13: \"Stipple2\",\n 14: \"Stipple3\",\n 15: \"Stipple4\",\n}\n\nexport class Drawer {\n canvasLayerMap: Record<string, HTMLCanvasElement>\n ctxLayerMap: Record<string, CanvasRenderingContext2D>\n // @ts-ignore this.equip({}) handles constructor assignment\n aperture: Aperture\n transform: Matrix\n foregroundLayer: string = \"top\"\n lastPoint: { x: number; y: number }\n\n constructor(canvasLayerMap: Record<string, HTMLCanvasElement>) {\n this.canvasLayerMap = canvasLayerMap\n this.ctxLayerMap = Object.fromEntries(\n Object.entries(canvasLayerMap).map(([name, canvas]) => [\n name,\n canvas.getContext(\"2d\")!,\n ]),\n )\n this.transform = identity()\n // positive is up (cartesian)\n this.transform.d *= -1\n this.transform = compose(this.transform, translate(0, -500))\n this.lastPoint = { x: 0, y: 0 }\n this.equip({})\n }\n\n clear() {\n for (const ctx of Object.values(this.ctxLayerMap)) {\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n }\n }\n\n equip(aperture: Partial<Aperture>) {\n this.aperture = {\n fontSize: 0,\n shape: \"circle\",\n mode: \"add\",\n size: 0,\n color: \"red\",\n layer: \"top\",\n opacity: this.foregroundLayer === aperture.color ? 1 : 0.5,\n ...aperture,\n }\n }\n\n drawMeshPattern(\n x: number,\n y: number,\n width: number,\n height: number,\n spacing: number,\n angle: number = 45,\n ) {\n const ctx = this.getLayerCtx()\n const [x1, y1] = applyToPoint(this.transform, [x, y])\n const [x2, y2] = applyToPoint(this.transform, [x + width, y + height])\n const spacing$ = scaleOnly(this.transform, spacing)\n\n // Set line properties for the mesh\n ctx.lineWidth = 1\n ctx.strokeStyle = this.aperture.color\n\n const drawLines = (angle: number) => {\n const sin = Math.sin(angle)\n const cos = Math.cos(angle)\n const diag = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))\n\n for (let i = -diag; i <= diag; i += spacing$) {\n ctx.beginPath()\n ctx.moveTo(x1 + i * cos - diag * sin, y1 + i * sin + diag * cos)\n ctx.lineTo(x1 + i * cos + diag * sin, y1 + i * sin - diag * cos)\n ctx.stroke()\n }\n }\n\n // Draw first set of parallel lines\n drawLines((angle * Math.PI) / 180)\n // Draw second set of parallel lines (perpendicular to the first set)\n drawLines(((angle + 90) * Math.PI) / 180)\n }\n\n rect(x: number, y: number, w: number, h: number, mesh_fill?: boolean) {\n const [x1$, y1$] = applyToPoint(this.transform, [x - w / 2, y - h / 2])\n const [x2$, y2$] = applyToPoint(this.transform, [x + w / 2, y + h / 2])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n if (mesh_fill) {\n ctx.save()\n ctx.beginPath()\n ctx.rect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n ctx.clip()\n\n // Draw the mesh pattern\n this.drawMeshPattern(x - w / 2, y - h / 2, w, h, 0.15) // Adjust spacing as needed\n\n ctx.restore()\n\n // Draw the outline\n ctx.strokeRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n } else {\n ctx.fillRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n }\n }\n\n rotatedRect(\n x: number,\n y: number,\n w: number,\n h: number,\n ccw_rotation: Rotation,\n mesh_fill?: boolean,\n ) {\n const ctx = this.getLayerCtx()\n this.applyAperture()\n\n const [x1$, y1$] = applyToPoint(this.transform, [x - w / 2, y - h / 2])\n const [x2$, y2$] = applyToPoint(this.transform, [x + w / 2, y + h / 2])\n\n ctx.save()\n\n const [centerX, centerY] = applyToPoint(this.transform, [x, y])\n ctx.translate(centerX, centerY)\n const cw_rotation = 360 - ccw_rotation\n if (ccw_rotation) ctx.rotate((cw_rotation * Math.PI) / 180)\n ctx.translate(-centerX, -centerY)\n\n if (mesh_fill) {\n ctx.beginPath()\n ctx.rect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n ctx.clip()\n\n this.drawMeshPattern(x - w / 2, y - h / 2, w, h, 0.15)\n\n ctx.strokeRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n } else {\n ctx.fillRect(x1$, y1$, x2$ - x1$, y2$ - y1$)\n }\n\n ctx.restore()\n }\n\n circle(x: number, y: number, r: number, mesh_fill?: boolean) {\n const r$ = scaleOnly(this.transform, r)\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n if (mesh_fill) {\n ctx.save()\n ctx.beginPath()\n ctx.arc(x$, y$, r$, 0, 2 * Math.PI)\n ctx.clip()\n\n // Draw the mesh pattern\n // We need to cover the entire circular area, so we use a square that fully encloses the circle\n this.drawMeshPattern(x - r, y - r, r * 2, r * 2, 0.15) // Adjust spacing as needed\n\n ctx.restore()\n\n // Draw the outline\n ctx.beginPath()\n ctx.arc(x$, y$, r$, 0, 2 * Math.PI)\n ctx.stroke()\n } else {\n ctx.beginPath()\n ctx.arc(x$, y$, r$, 0, 2 * Math.PI)\n ctx.fill()\n }\n }\n\n oval(x: number, y: number, rx: number, ry: number) {\n const rx$ = scaleOnly(this.transform, rx)\n const ry$ = scaleOnly(this.transform, ry)\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n ctx.beginPath()\n ctx.ellipse(x$, y$, rx$, ry$, 0, 0, 2 * Math.PI)\n ctx.fill()\n ctx.closePath()\n }\n\n pill(x: number, y: number, w: number, h: number) {\n const [x$, y$] = applyToPoint(this.transform, [x - w / 2, y + h / 2])\n const width$ = scaleOnly(this.transform, w)\n const height$ = scaleOnly(this.transform, h)\n const radius = Math.min(width$, height$) / 2\n this.applyAperture()\n const ctx = this.getLayerCtx()\n ctx.beginPath()\n ctx.arc(x$ + radius, y$ + radius, radius, Math.PI, Math.PI * 1.5)\n ctx.arc(x$ + width$ - radius, y$ + radius, radius, Math.PI * 1.5, 0)\n ctx.arc(\n x$ + width$ - radius,\n y$ + height$ - radius,\n radius,\n 0,\n Math.PI * 0.5,\n )\n ctx.arc(x$ + radius, y$ + height$ - radius, radius, Math.PI * 0.5, Math.PI)\n ctx.fill()\n ctx.closePath()\n }\n\n polygon(points: { x: number; y: number }[]) {\n if (points.length < 3) {\n return\n }\n\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n // Transform all points\n const transformedPoints = points.map((point) =>\n applyToPoint(this.transform, [point.x, point.y]),\n )\n\n // Draw the filled polygon\n ctx.beginPath()\n ctx.moveTo(transformedPoints[0][0], transformedPoints[0][1])\n for (let i = 1; i < transformedPoints.length; i++) {\n ctx.lineTo(transformedPoints[i][0], transformedPoints[i][1])\n }\n ctx.closePath()\n ctx.fill()\n\n // Draw the outline\n const lineWidth = scaleOnly(this.transform, this.aperture.size)\n ctx.lineWidth = lineWidth\n ctx.stroke()\n }\n\n /* NOTE: This is not gerber compatible */\n debugText(text: string, x: number, y: number) {\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n ctx.font = `10px sans-serif`\n ctx.fillText(text, x$, y$)\n }\n\n getLayerCtx() {\n const ctx = this.ctxLayerMap[this.aperture.layer]\n if (!ctx) {\n throw new Error(`No context for layer \"${this.aperture.layer}\"`)\n }\n return ctx\n }\n\n /**\n * Iterate over each canvas and set the z index based on the layer order, but\n * always render the foreground layer on top.\n *\n * Also: Set the opacity of every non-foreground layer to 0.5\n */\n orderAndFadeLayers() {\n const { canvasLayerMap, foregroundLayer } = this\n const opaqueLayers = new Set([\n foregroundLayer,\n \"drill\",\n \"other\",\n \"board\",\n foregroundLayer === \"top\"\n ? \"top_silkscreen\"\n : foregroundLayer === \"bottom\"\n ? \"bottom_silkscreen\"\n : \"\",\n ])\n const order = [\n \"drill\",\n \"board\",\n foregroundLayer,\n ...DEFAULT_DRAW_ORDER.filter((l) => l !== foregroundLayer),\n ]\n order.forEach((layer, i) => {\n const canvas = canvasLayerMap[layer]\n if (!canvas) return\n if (\n (layer === \"bottom_silkscreen\" && foregroundLayer === \"bottom\") ||\n (layer === \"top_silkscreen\" && foregroundLayer === \"top\")\n ) {\n canvas.style.zIndex = `${zIndexMap.topLayer}` // zIndexMap.topLayer\n } else {\n canvas.style.zIndex = `${zIndexMap.topLayer - i}`\n }\n canvas.style.opacity = opaqueLayers.has(layer) ? \"1\" : \"0.5\"\n })\n }\n\n applyAperture() {\n const { transform, aperture } = this\n let { size, mode, color, fontSize, layer } = aperture\n if (!(layer in this.ctxLayerMap)) this.aperture.layer = \"other\"\n\n const ctx = this.getLayerCtx()\n if (!ctx) {\n throw new Error(`No context for layer \"${this.foregroundLayer}\"`)\n }\n if (!color) color = \"undefined\"\n ctx.lineWidth = scaleOnly(transform, size)\n ctx.lineCap = \"round\"\n if (mode === \"add\") {\n let colorString =\n color?.[0] === \"#\" || color?.startsWith(\"rgb\")\n ? color\n : (LAYER_NAME_TO_COLOR as any)[color?.toLowerCase()]\n ? (LAYER_NAME_TO_COLOR as any)[color?.toLowerCase()]\n : null\n if (colorString === null) {\n console.warn(`Color mapping for \"${color}\" not found`)\n colorString = \"white\"\n }\n ctx.fillStyle = colorString\n ctx.strokeStyle = colorString\n } else {\n ctx.globalCompositeOperation = \"destination-out\"\n ctx.fillStyle = \"rgba(0,0,0,1)\"\n ctx.strokeStyle = \"rgba(0,0,0,1)\"\n }\n ctx.font = `${scaleOnly(inverse(transform), fontSize)}px sans-serif`\n }\n\n moveTo(x: number, y: number) {\n this.lastPoint = { x, y }\n }\n lineTo(x: number, y: number) {\n const [x$, y$] = applyToPoint(this.transform, [x, y])\n const { size, shape, mode } = this.aperture\n const size$ = scaleOnly(this.transform, size)\n let { lastPoint } = this\n const lastPoint$ = applyToPoint(this.transform, lastPoint)\n\n this.applyAperture()\n const ctx = this.getLayerCtx()\n\n if (shape === \"square\")\n ctx.fillRect(\n lastPoint$.x - size$ / 2,\n lastPoint$.y - size$ / 2,\n size$,\n size$,\n )\n ctx.beginPath()\n ctx.moveTo(lastPoint$.x, lastPoint$.y)\n ctx.lineTo(x$, y$)\n\n ctx.stroke()\n ctx.closePath()\n\n if (shape === \"square\")\n ctx.fillRect(x$ - size$ / 2, y$ - size$ / 2, size$, size$)\n\n this.lastPoint = { x, y }\n }\n}\n","// Mix of Eagle Dark for schematics and KiCAD 2020 for PCBs\n// https://github.com/pointhi/kicad-color-schemes/blob/master/eagle-dark/eagle-dark.jsonO\n// https://github.com/pointhi/kicad-color-schemes/blob/master/kicad-2020/kicad_2020.json\nexport default {\n \"3d_viewer\": {\n background_bottom: \"rgb(102, 102, 128)\",\n background_top: \"rgb(204, 204, 230)\",\n board: \"rgb(51, 43, 23)\",\n copper: \"rgb(179, 156, 0)\",\n silkscreen_bottom: \"rgb(230, 230, 230)\",\n silkscreen_top: \"rgb(230, 230, 230)\",\n soldermask: \"rgb(20, 51, 36)\",\n solderpaste: \"rgb(128, 128, 128)\",\n },\n board: {\n anchor: \"rgb(255, 38, 226)\",\n aux_items: \"rgb(255, 255, 255)\",\n b_adhes: \"rgb(0, 0, 132)\",\n b_crtyd: \"rgb(255, 38, 226)\",\n b_fab: \"rgb(88, 93, 132)\",\n b_mask: \"rgba(2, 255, 238, 0.400)\",\n b_paste: \"rgb(0, 194, 194)\",\n b_silks: \"rgb(242, 237, 161)\",\n background: \"rgb(0, 16, 35)\",\n cmts_user: \"rgb(89, 148, 220)\",\n copper: {\n b: \"rgb(77, 127, 196)\",\n f: \"rgb(200, 52, 52)\",\n in1: \"rgb(127, 200, 127)\",\n in10: \"rgb(237, 124, 51)\",\n in11: \"rgb(91, 195, 235)\",\n in12: \"rgb(247, 111, 142)\",\n in13: \"rgb(167, 165, 198)\",\n in14: \"rgb(40, 204, 217)\",\n in15: \"rgb(232, 178, 167)\",\n in16: \"rgb(242, 237, 161)\",\n in17: \"rgb(237, 124, 51)\",\n in18: \"rgb(91, 195, 235)\",\n in19: \"rgb(247, 111, 142)\",\n in2: \"rgb(206, 125, 44)\",\n in20: \"rgb(167, 165, 198)\",\n in21: \"rgb(40, 204, 217)\",\n in22: \"rgb(232, 178, 167)\",\n in23: \"rgb(242, 237, 161)\",\n in24: \"rgb(237, 124, 51)\",\n in25: \"rgb(91, 195, 235)\",\n in26: \"rgb(247, 111, 142)\",\n in27: \"rgb(167, 165, 198)\",\n in28: \"rgb(40, 204, 217)\",\n in29: \"rgb(232, 178, 167)\",\n in3: \"rgb(79, 203, 203)\",\n in30: \"rgb(242, 237, 161)\",\n in4: \"rgb(219, 98, 139)\",\n in5: \"rgb(167, 165, 198)\",\n in6: \"rgb(40, 204, 217)\",\n in7: \"rgb(232, 178, 167)\",\n in8: \"rgb(242, 237, 161)\",\n in9: \"rgb(141, 203, 129)\",\n },\n cursor: \"rgb(255, 255, 255)\",\n drc: \"rgb(194, 194, 194)\",\n drc_error: \"rgba(215, 91, 107, 0.800)\",\n drc_exclusion: \"rgb(255, 255, 255)\",\n drc_warning: \"rgba(255, 208, 66, 0.902)\",\n dwgs_user: \"rgb(194, 194, 194)\",\n eco1_user: \"rgb(180, 219, 210)\",\n eco2_user: \"rgb(216, 200, 82)\",\n edge_cuts: \"rgb(208, 210, 205)\",\n f_adhes: \"rgb(132, 0, 132)\",\n f_crtyd: \"rgb(255, 0, 245)\",\n f_fab: \"rgb(175, 175, 175)\",\n f_mask: \"rgba(216, 100, 255, 0.400)\",\n f_paste: \"rgba(180, 160, 154, 0.902)\",\n f_silks: \"rgb(242, 237, 161)\",\n footprint_text_back: \"rgb(0, 0, 132)\",\n footprint_text_front: \"rgb(194, 194, 194)\",\n footprint_text_invisible: \"rgb(132, 132, 132)\",\n grid: \"rgb(132, 132, 132)\",\n grid_axes: \"rgb(194, 194, 194)\",\n margin: \"rgb(255, 38, 226)\",\n microvia: \"rgb(0, 132, 132)\",\n no_connect: \"rgb(0, 0, 132)\",\n pad_back: \"rgb(77, 127, 196)\",\n pad_front: \"rgb(200, 52, 52)\",\n pad_plated_hole: \"rgb(194, 194, 0)\",\n pad_through_hole: \"rgb(227, 183, 46)\",\n plated_hole: \"rgb(26, 196, 210)\",\n ratsnest: \"rgba(245, 255, 213, 0.702)\",\n select_overlay: \"rgb(4, 255, 67)\",\n through_via: \"rgb(236, 236, 236)\",\n user_1: \"rgb(194, 194, 194)\",\n user_2: \"rgb(89, 148, 220)\",\n user_3: \"rgb(180, 219, 210)\",\n user_4: \"rgb(216, 200, 82)\",\n user_5: \"rgb(194, 194, 194)\",\n user_6: \"rgb(89, 148, 220)\",\n user_7: \"rgb(180, 219, 210)\",\n user_8: \"rgb(216, 200, 82)\",\n user_9: \"rgb(232, 178, 167)\",\n via_blind_buried: \"rgb(187, 151, 38)\",\n via_hole: \"rgb(227, 183, 46)\",\n via_micro: \"rgb(0, 132, 132)\",\n via_through: \"rgb(236, 236, 236)\",\n worksheet: \"rgb(200, 114, 171)\",\n },\n gerbview: {\n axes: \"rgb(0, 0, 132)\",\n background: \"rgb(0, 0, 0)\",\n dcodes: \"rgb(255, 255, 255)\",\n grid: \"rgb(132, 132, 132)\",\n layers: [\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n ],\n negative_objects: \"rgb(132, 132, 132)\",\n worksheet: \"rgb(0, 0, 132)\",\n },\n palette: [\n \"rgb(132, 0, 0)\",\n \"rgb(194, 194, 0)\",\n \"rgb(194, 0, 194)\",\n \"rgb(194, 0, 0)\",\n \"rgb(0, 132, 132)\",\n \"rgb(0, 132, 0)\",\n \"rgb(0, 0, 132)\",\n \"rgb(132, 132, 132)\",\n \"rgb(132, 0, 132)\",\n \"rgb(194, 194, 194)\",\n \"rgb(132, 0, 132)\",\n \"rgb(132, 0, 0)\",\n \"rgb(132, 132, 0)\",\n \"rgb(194, 194, 194)\",\n \"rgb(0, 0, 132)\",\n \"rgb(0, 132, 0)\",\n ],\n schematic: {\n anchor: \"rgb(0, 0, 255)\",\n aux_items: \"rgb(0, 0, 0)\",\n background: \"rgb(33, 33, 33)\",\n brightened: \"rgb(204, 204, 204)\",\n bus: \"rgb(0, 96, 192)\",\n bus_junction: \"rgb(0, 96, 192)\",\n component_body: \"rgb(44, 44, 44)\",\n component_outline: \"rgb(192, 0, 0)\",\n cursor: \"rgb(224, 224, 224)\",\n erc_error: \"rgba(192, 48, 48, 0.800)\",\n erc_warning: \"rgba(192, 140, 0, 0.800)\",\n fields: \"rgb(128, 0, 160)\",\n grid: \"rgb(60, 60, 60)\",\n grid_axes: \"rgb(60, 60, 60)\",\n hidden: \"rgb(194, 194, 194)\",\n junction: \"rgb(0, 160, 0)\",\n label_global: \"rgb(0, 160, 224)\",\n label_hier: \"rgb(160, 160, 0)\",\n label_local: \"rgb(192, 192, 192)\",\n net_name: \"rgb(224, 224, 224)\",\n no_connect: \"rgb(97, 43, 224)\",\n note: \"rgb(192, 192, 0)\",\n override_item_colors: false,\n pin: \"rgb(192, 0, 0)\",\n pin_name: \"rgb(192, 192, 192)\",\n pin_number: \"rgb(192, 0, 0)\",\n reference: \"rgb(192, 192, 192)\",\n shadow: \"rgba(102, 179, 255, 0.800)\",\n sheet: \"rgb(128, 0, 160)\",\n sheet_background: \"rgba(255, 255, 255, 0.000)\",\n sheet_fields: \"rgb(160, 160, 0)\",\n sheet_filename: \"rgb(160, 160, 0)\",\n sheet_label: \"rgb(160, 160, 0)\",\n sheet_name: \"rgb(0, 160, 204)\",\n value: \"rgb(192, 192, 192)\",\n wire: \"rgb(0, 160, 0)\",\n worksheet: \"rgb(192, 0, 0)\",\n },\n}\n","import { Matrix } from \"transformation-matrix\"\n\nexport const scaleOnly = (mat: Matrix, value: number = 1) => {\n if (Math.abs(mat.a) !== Math.abs(mat.d))\n throw new Error(\"Cannot scale non-uniformly\")\n return value * Math.abs(mat.a)\n}\n","export const zIndexMap = {\n elementOverlay: 30,\n dimensionOverlay: 30,\n editTraceHintOverlay: 30,\n errorOverlay: 30,\n ratsNestOverlay: 20,\n toolbarOverlay: 20,\n warnings: 20,\n topLayer: 10, // each layer after this is 1 less than the previous\n clickToInteractOverlay: 100,\n}\n","import { compose, translate, rotate, applyToPoint } from \"transformation-matrix\"\nimport { Line } from \"../types\"\n\nexport function rotateText(rotateTextParams: {\n lines: Line[]\n anchorPoint: { x: number; y: number }\n ccwRotation: number\n}) {\n const { lines, anchorPoint, ccwRotation } = rotateTextParams\n if (!ccwRotation) return lines\n const rad = (ccwRotation * Math.PI) / 180\n const rotationMatrix = rotate(rad)\n\n // Create rotation transform around anchor point\n const transform = compose(\n translate(anchorPoint.x, anchorPoint.y),\n rotationMatrix,\n translate(-anchorPoint.x, -anchorPoint.y),\n )\n applyToPoint(transform, anchorPoint)\n return lines.map((line) => ({\n ...line,\n x1: applyToPoint(transform, { x: line.x1, y: line.y1 }).x,\n y1: applyToPoint(transform, { x: line.x1, y: line.y1 }).y,\n x2: applyToPoint(transform, { x: line.x2, y: line.y2 }).x,\n y2: applyToPoint(transform, { x: line.x2, y: line.y2 }).y,\n }))\n}\n","/*\n * Maps letters/numbers to an SVG path\n * You must normalize the path prior to putting it here! That means it needs to\n * be entirely in the bounds [0,1] for both x and y.\n * You can use this svg editor tool to add characters: https://yqnn.github.io/svg-path-editor/\n */\nexport const svgAlphabet = {\n \"0\": \"M0.4544564813877358 0L0.2723441540828736 0.03592830447352719L0.1086847233315459 0.14528754990019965L0.020630545837255005 0.3040632652221331L0 0.5395277421960205L0.049259221760993496 0.7369487828466779L0.18080513776237842 0.9005494166306564L0.37036887043974215 0.9872116270037247L0.5864663759301132 1L0.8148695622827444 0.9332890276148733L0.9326583645506394 0.8113052246023419L1 0.4031281830668562L0.833288960385582 0.09886798567812842L0.6801767918233781 0.02483708485091681L0.4544564813877358 0\",\n \"1\": \"M 0.198 0.272 L 0.537 0 L 0.54 1\",\n \"2\": \"M0.069593147751606 0.19461498231706575L0.1039380353319058 0.1224291500164194L0.20543361884368308 0.05510832064153169L0.3717712794432549 0.009452970962689482L0.4785344452623127 0L0.663238590738758 0.008714098643339864L0.8017933618843684 0.04769189395915288L0.8775637379550322 0.10746757678258442L0.9047778372591005 0.17693069668193287L0.9029710920770878 0.2231347105796246L0.8704496788008566 0.30047744598157516L0.7292906538577354 0.4508486051631194L0.3737955032119913 0.7369006417749693L0 1L1 1\",\n \"3\": \"M0.03917438899874637 0.19855364635107545L0.15510940508963084 0.06745632622133718L0.37598645522339846 0L0.8486391893813088 0.0652271323161611L0.9782182415054349 0.21747394183735683L0.9213133780517754 0.3547560290117714L0.6504271515903481 0.4543436297681271L0.22975249764129613 0.48476611625264143L0.7659038682744629 0.5411919558122493L0.9258712987734741 0.6203185665660985L1 0.7458360609169667L0.8938813281118737 0.9059190913045964L0.6166890258875837 1L0.261528440153542 0.9874861530507921L0 0.8837289530851273\",\n \"4\": \"M0.7328897338403042 0L0 0.6684672518568535L1 0.6684672518568535M0.7243346007604563 0.4530722484807562L0.7243346007604563 1\",\n \"5\": \"M 0 0 L 0 0.4973 L 0.4262 0.4319 L 0.7305 0.4565 L 0.8516 0.5009 L 0.9357 0.5639 L 1 0.7356 L 0.9696 0.8248 L 0.8898 0.895 L 0.733 0.9602 L 0.5518 0.9945 L 0.3814 1 L 0.2379 0.9821 L 0.1219 0.947 L 0 0.8748 M 0 0 L 1 0\",\n \"6\": \"M0.6964601700926856 0L0.3639239026215478 0.0743562375769351L0.1415931962925719 0.21735490179786915L0.009977939399608712 0.46336322325406004L0.00029622007592593224 0.7083131475173043L0.09408885043224748 0.8746809149767036L0.3379247445101846 0.9876686500961888L0.7109203869569624 1L0.9260852957913362 0.9103558029693921L1 0.7716571969091733L0.9824294723385016 0.6390635485705886L0.7446504992867332 0.4733643097729175L0.31028858071607296 0.47578021640899115L0.1208702146816024 0.5481452483973847L0 0.6616669755788906\",\n \"7\": \"M0 0L1 0L0.9246479649697582 0.030539772727272752L0.8850302419354837 0.05075757575757579L0.7922946068548385 0.11079545454545457L0.7419268208165322 0.15213068181818185L0.6907258064516127 0.20202020202020204L0.6400666267641127 0.26122159090909086L0.5913243447580644 0.33049242424242414L0.5458740234374998 0.4105902777777778L0.5050907258064514 0.5022727272727272L0.4703495148689514 0.6062973484848484L0.43257456133442534 0.787133049242424L0.41612903225806447 1\",\n \"8\": \"M0.5143001078924863 0L0.16007477667923162 0.10731570786949331L0.14924628550868277 0.3146018498698755L0.2939585848842112 0.41617921794558677L0.8648302624811545 0.5385163833653317L1 0.7775820770511038L0.8180842915260376 0.9505845566922285L0.41968938540525413 1L0.08062381919779889 0.882831681184498L0 0.6936376947135333L0.17150171673893433 0.5188652309607817L0.6529263782780712 0.4242818653203618L0.8650205888491803 0.29644027376796367L0.8702067371119496 0.09910067291661573L0.5143001078924863 0\",\n \"9\": \"M1 0.25379591792994305L0.9514789771111742 0.11679361536614272L0.8702482473521467 0.05711741614054847L0.7327445265851579 0.015213872471965633L0.525248180711544 0L0.3292056884418538 0.012928195113745608L0.15997632037247655 0.058762870026191856L0.05266940041228321 0.12882439350476L0 0.2562067822770946L0.11316462894512366 0.4121335905917837L0.2403060136479954 0.4603365890068938L0.4097241967586011 0.4745978388276783L0.8642414300184816 0.420815170259988L0.9732054796346318 0.34537434075898393L1 0.25379591792994305M0.9647426784191072 0.35488595400360495L0.4756895081034974 1\",\n A: \"M0 1L0.4808333333333333 0L1 1M0.24250000000000002 0.6099439775910365L0.7341666666666666 0.6099439775910365\",\n B: \"M0 1L0 0.0117369978777208L0.30665717153513444 0L0.5874522807082946 0.03451403469442413L0.7766202217193218 0.15033936404895643L0.7471969743588041 0.31967962568332936L0.5246013359741988 0.4102978954282461L0.04378745314885416 0.44918617613783574L0.5112949594180156 0.469692928091109L0.8540266515643348 0.5552749498651879L1 0.6868463175009967L0.9880091196159324 0.8570018204672155L0.922301719975498 0.9321708046604659L0.7584266951758925 0.9932594737131338L0 1\",\n C: \"M1 0.23038928858890784L0.9328355511865092 0.12426412616785204L0.8096380839483327 0.04912601676267708L0.5763225801788256 0L0.4039037709527492 0.015028068281399815L0.2519579390951737 0.06533979308999706L0.10359458463139784 0.18146243506591617L0 0.4862728453971315L0.08129580872733055 0.792689266886982L0.20257034847159672 0.9160822255736587L0.3286572892798542 0.9738230826074175L0.5742878414421707 1L0.7883510303801312 0.9665431511195721L0.946851033994232 0.8689071500976585L1 0.7311049027121912\",\n D: \"M0 1L0.015604366822624637 0.020770988281483303L0.22564758265176144 0L0.3865476147957666 0.0024153386496795644L0.6479126635475078 0.051745644338731314L0.841191887805517 0.15827717679529366L0.9517008345536152 0.30172260586872185L0.9957536578687336 0.4504541551987709L1 0.5624359222498485L0.9798483279164735 0.6584121775234548L0.9386273319285215 0.7395945263504481L0.806292129480815 0.8624239259880274L0.6296239151398265 0.9406169638094516L0.3397492767598845 0.9954164354263132L0 1\",\n E: \"M0 0L0 1M0 0L1 0M0 0.5L0.7 0.5M0 1L1 1\",\n F: \"M0 0L0 1M0.011363636363636364 0.006802721088435374L1 0.006802721088435374M0.011363636363636364 0.4965986394557823L0.8409090909090909 0.4965986394557823\",\n G: \"M0.902666857540557 0.03860785012651126L0.6504261864675637 0L0.3838947267237336 0.015442305268228053L0.21293332876776194 0.07706794377239819L0.07799659974941617 0.1994951236187481L0 0.46380381528937314L0.04159964421546915 0.7502491408002389L0.13176692977834842 0.8535497868383203L0.2709176262273927 0.936767572377719L0.4386472596876406 0.9891638569283179L0.6145513562841309 1L0.7782254421419019 0.9585373611026471L0.9092650433859927 0.8540372997461425L1 0.5556012645283437L0.5583959277303046 0.55491741080559\",\n H: \"M0 0L0 1M0 0.4788732394366197L0.989010989010989 0.4788732394366197M1 0L1 1\",\n I: \"M0.5 0L0.5 1\",\n J: \"M0.9976457238788704 0L1 0.7396412315872798L0.9773931362096968 0.8322033314977973L0.9345115952458736 0.882296255506608L0.8743862896259549 0.9221331222466961L0.8024024079884948 0.9526431718061675L0.6443996712151668 0.9893997797356828L0.5035848940343224 1L0.3127211130319937 0.9877004749449337L0.17201910858386513 0.9539509911894274L0.10357419806379677 0.9212555066079295L0.053656568662899015 0.8816079295154184L0.020759483663648916 0.8360407488986785L0.003376206348523566 0.7855864537444934L0 0.7312775330396476\",\n K: \"M0 0L0 1M0.8787878787878788 0.06666666666666667L0 0.6148148148148148M0.3333333333333333 0.45925925925925926L1 0.9777777777777777\",\n L: \"M0 0L0 1L1 1\",\n M: \"M0 1L0 0L0.5 0.6512L1 0L1 1\",\n N: \"M0 1L0 0L1 1L0.9803729146221786 0\",\n O: \"M0.4718499217948183 1L0.2896765846490613 0.9606979309189402L0.12315162147934663 0.8411184486080473L0 0.4352399966492615L0.11730398524516283 0.13145645436014852L0.2612197451988078 0.04493357858878059L0.5104071592772554 0L0.7450113425917159 0.05393013710105273L0.882367950645524 0.15242300282020502L1 0.5224527406249126L0.9414597290654386 0.7560662329321755L0.8371289514446183 0.8910800547287298L0.6518259868433511 0.9830452628933628L0.4718499217948183 1\",\n P: \"M0 1L0 0.018871774228013626L0.29609603495819875 0L0.5609840637427541 0.011794858892508529L0.7332142696692472 0.04353904702296349L0.8102258645858864 0.0691965055027166L0.9330504315465442 0.14445061754775845L0.9876391714147118 0.22527816445836535L1 0.3434414070631638L0.9510549958116356 0.41772808046663146L0.8746646891596713 0.45879131862541683L0.7528523813396283 0.49171525113425024L0.5766919939969619 0.5153253033973054L0.33725744877712827 0.5284469008187558L0.025622667325582785 0.529905468802775\",\n Q: \"M0.4618887943546369 0.9755918167206952L0.28356128136544534 0.9372490397450218L0.12055179272160406 0.8205882753548176L0 0.4246165790405623L0.1148276047430244 0.12824784112887844L0.25570518844754375 0.043836831567190586L0.49963205786237674 0L0.7292835601228574 0.0526138004304122L0.8637404608452104 0.14870263423138746L0.9788892040030622 0.5097006183769648L0.9215847647858059 0.7376120297474734L0.8194564929275405 0.869330409436378L0.6380654214095985 0.9590509139448092L0.4618887943546369 0.9755918167206952M0.5824181120212351 0.6861805006946525L1 1\",\n R: \"M0 0.9928375167236815L0 0.02590227442068435L0.3611517274211098 0L0.6146286724700761 0.008660554424468435L0.7675462459194776 0.035269459580494614L0.831839975516866 0.056961676692569484L0.8847592491838954 0.08519560521497332L0.9238557535364527 0.120683646438422L0.9583303225312839 0.21691797435320384L0.955092470586235 0.3022616904894429L0.9198097669001631 0.3640573439322699L0.8564862239866702 0.40639258627024005L0.7691258543593579 0.43335506909190874L0.601775027203482 0.4539166070813109L0.023939064200217658 0.46997623755243123M0.5038084874863982 0.5108023922274467L1 1\",\n S: \"M0.8886929689221953 0.15146982162688968L0.7276173683050475 0.013780286031594946L0.34582323121005076 0L0.1318235250900008 0.09920162734298861L0.0444543935052531 0.2811287071349243L0.08064065829108809 0.3709571405906485L0.21603115127470426 0.4485505768228281L0.7525409135992945 0.5111160926769565L0.9330263665417677 0.5850732219351329L1 0.7129938124702524L0.9117772389978691 0.9130572743138187L0.6423187128058188 1L0.29586019579751677 0.9935291584506244L0.10638454191462794 0.9229845198431584L0 0.7570771288048773\",\n T: \"M0 0L1 0M0.5148514851485149 0L0.5148514851485149 1\",\n U: \"M0 0L0.0023103778751369115 0.5467447428390111L0.01823032542100219 0.6954785891481812L0.05895528135268338 0.8056480226151669L0.13703402031421133 0.8894445726483398L0.23918400876232196 0.9448524533417946L0.3917887458926616 0.9848674531975652L0.584341627875137 1L0.7194816196604602 0.9848501456716763L0.8303268115073934 0.9449411544119768L0.8966613970084885 0.898186315516197L0.9251437568455642 0.867453197565408L0.9687114937020809 0.7890904895145239L0.9890470974808324 0.6852857184065537L1 0.0014769088758762145\",\n V: \"M0 0L0.5348837209302325 1L1 0\",\n W: \"M0 0L0.23300090661831369 0.9873417721518988L0.49954669084315495 0.30081906180193585L0.7851314596554849 1L1 0.0215934475055845\",\n X: \"M0 0L0.9893617021276596 1M1 0L0.010638297872340425 1\",\n Y: \"M0 0L0.4860515021459227 0.44712562100780695M1 0.0014194464158977947L0.48927038626609437 0.44996451383960256L0.5075107296137339 1\",\n Z: \"M0 0L1 0L0 1L1 1\",\n \".\": \"M 0.49 1 L 0.41 1\",\n \"*\": \"M 0.5 0.25 L 0.8 0.25 M 0.5 0.25 L 0.5927 0.4402 M 0.5 0.25 L 0.2573 0.3676 M 0.5 0.25 L 0.2573 0.1324 M 0.5 0.25 L 0.599 0.055\",\n \"(\": \"M0.75 0L0.25 0.5L0.25 0.5L0.75 1\",\n \")\": \"M0.25 0L0.75 0.5L0.75 0.5L0.25 1\",\n \"-\": \"M0 0.5L1 0.5\",\n \"+\": \"M 0 0.5 L 1 0.5 M 0.5 0.125 L 0.5 0.875\",\n \"=\": \"M0 0.25L1 0.25M0 0.75L1 0.75\",\n _: \"M0 1 L1 1\",\n \"[\": \"M0.75 0L0.25 0L0.25 1L0.75 1\",\n \"]\": \"M0.25 0L0.75 0L0.75 1L0.25 1\",\n \"<\": \"M0.75 0L0.25 0.5L0.25 0.5L0.75 1\",\n \">\": \"M0.25 0L0.75 0.5L0.75 0.5L0.25 1\",\n \"'\": \"M 0.5 0 L 0.5 0.5\",\n '\"': \"M 0.25 0 L 0.25 0.5 M 0.75 0 L 0.75 0.5\",\n}\n\nexport const lineAlphabet: Record<\n string,\n Array<{ x1: number; y1: number; x2: number; y2: number }>\n> = {}\nfor (const letter in svgAlphabet) {\n lineAlphabet[letter] = []\n const segs = (svgAlphabet as any)[letter]\n .split(\"M\")\n .slice(1)\n .map((seg: any) =>\n seg.split(\"L\").map((pr: any) => pr.trim().split(\" \").map(parseFloat)),\n )\n for (const seg of segs) {\n for (let i = 0; i < seg.length - 1; i++) {\n // We also flip the y axis to make it cartesian here\n lineAlphabet[letter].push({\n x1: seg[i][0],\n y1: 1 - seg[i][1],\n x2: seg[i + 1][0],\n y2: 1 - seg[i + 1][1],\n })\n }\n }\n}\n","import { lineAlphabet } from \"../assets/alphabet\"\nimport { getNewPcbDrawingObjectId } from \"./convert-element-to-primitive\"\nimport type { Line, Text } from \"./types\"\n\nexport const LETTER_HEIGHT_TO_WIDTH_RATIO = 0.6\nexport const LETTER_HEIGHT_TO_SPACE_RATIO = 0.2\n\nexport const getTextWidth = (text: Text): number => {\n if (text.text.length === 0) return 0\n const target_height = text.size * 0.7 // Apply 70% scaling\n const target_width_char = target_height * LETTER_HEIGHT_TO_WIDTH_RATIO\n const space_between_chars = target_height * LETTER_HEIGHT_TO_SPACE_RATIO\n return (\n text.text.length * target_width_char +\n (text.text.length - 1) * space_between_chars\n )\n}\n\nexport const convertTextToLines = (text: Text): Line[] => {\n const target_height = text.size * 0.7 // Apply 70% scaling\n if (target_height <= 0 || text.text.length === 0) return []\n\n const strokeWidth = target_height / 12\n\n // Effective span for scaling the normalized 0-1 character centerlines\n const centerline_span_y = Math.max(0, target_height - strokeWidth)\n const y_baseline_offset = strokeWidth / 2\n\n const target_width_char = target_height * LETTER_HEIGHT_TO_WIDTH_RATIO\n const centerline_span_x = Math.max(0, target_width_char - strokeWidth)\n const x_char_start_offset = strokeWidth / 2\n\n const space_between_chars = target_height * LETTER_HEIGHT_TO_SPACE_RATIO\n\n const lines: Line[] = []\n let current_x_origin_for_char_box = text.x\n\n for (let letterIndex = 0; letterIndex < text.text.length; letterIndex++) {\n const letter = text.text[letterIndex]\n const letterLines = lineAlphabet[letter.toUpperCase()]\n\n if (!letterLines) {\n current_x_origin_for_char_box += target_width_char + space_between_chars\n continue\n }\n\n for (const {\n x1: norm_x1,\n y1: norm_y1,\n x2: norm_x2,\n y2: norm_y2,\n } of letterLines) {\n lines.push({\n _pcb_drawing_object_id: getNewPcbDrawingObjectId(\"line\"),\n pcb_drawing_type: \"line\",\n x1:\n current_x_origin_for_char_box +\n x_char_start_offset +\n centerline_span_x * norm_x1,\n y1: text.y + y_baseline_offset + centerline_span_y * norm_y1,\n x2:\n current_x_origin_for_char_box +\n x_char_start_offset +\n centerline_span_x * norm_x2,\n y2: text.y + y_baseline_offset + centerline_span_y * norm_y2,\n width: strokeWidth,\n layer: text.layer,\n unit: text.unit,\n })\n }\n current_x_origin_for_char_box += target_width_char + space_between_chars\n }\n\n return lines\n}\n","import type { Rotation } from \"circuit-json\"\nimport { type Drawer, LAYER_NAME_TO_COLOR } from \"./Drawer\"\nimport { rotateText } from \"./util/rotate-text\"\nimport { convertTextToLines, getTextWidth } from \"./convert-text-to-lines\"\nimport type {\n Circle,\n Line,\n Oval,\n Pill,\n Polygon,\n Primitive,\n Rect,\n Text,\n} from \"./types\"\nimport color from \"color\"\n\nfunction getColor(primitive: Primitive): string {\n if (primitive.is_mouse_over || primitive.is_in_highlighted_net) {\n return color(\n LAYER_NAME_TO_COLOR[primitive.layer as keyof typeof LAYER_NAME_TO_COLOR],\n )\n .lighten(0.5)\n .rgb()\n .toString()\n }\n return LAYER_NAME_TO_COLOR[\n primitive.layer as keyof typeof LAYER_NAME_TO_COLOR\n ]\n}\n\nexport const drawLine = (drawer: Drawer, line: Line) => {\n drawer.equip({\n size: line.zoomIndependent ? line.width / drawer.transform.a : line.width,\n shape: line.squareCap ? \"square\" : \"circle\",\n color: getColor(line),\n layer: line.layer,\n })\n drawer.moveTo(line.x1, line.y1)\n drawer.lineTo(line.x2, line.y2)\n}\n\nexport const drawText = (drawer: Drawer, text: Text) => {\n drawer.equip({\n fontSize: text.size,\n color: getColor(text),\n layer: text.layer,\n })\n\n // Alignment offset calculation\n let alignOffset = { x: 0, y: 0 }\n const textWidth = getTextWidth(text)\n const textHeight = text.size\n\n switch (text.align) {\n case \"top_left\":\n alignOffset.x = 0\n alignOffset.y = -textHeight\n break\n case \"top_center\":\n alignOffset.x = -textWidth / 2\n alignOffset.y = -textHeight\n break\n case \"top_right\":\n alignOffset.x = -textWidth\n alignOffset.y = -textHeight\n break\n case \"center_left\":\n alignOffset.x = 0\n alignOffset.y = -textHeight / 2\n break\n case \"center\":\n alignOffset.x = -textWidth / 2\n alignOffset.y = -textHeight / 2\n break\n case \"center_right\":\n alignOffset.x = -textWidth\n alignOffset.y = -textHeight / 2\n break\n case \"bottom_left\":\n alignOffset.x = 0\n alignOffset.y = 0\n break\n case \"bottom_center\":\n alignOffset.x = -textWidth / 2\n alignOffset.y = 0\n break\n case \"bottom_right\":\n alignOffset.x = -textWidth\n alignOffset.y = 0\n break\n default: // Default to bottom_left if align is not specified or invalid\n alignOffset.x = 0\n alignOffset.y = 0\n break\n }\n\n // Non-gerber compatible\n // drawer.text(text.text, text.x, text.y)\n text.x ??= 0\n text.y ??= 0\n\n // Get rotation anchor point based on alignment\n const rotationAnchor = {\n x: text.x,\n y: text.y,\n }\n\n // Generate the text lines with alignment offset\n let text_lines = convertTextToLines({\n ...text,\n x: text.x + alignOffset.x,\n y: text.y + alignOffset.y,\n })\n // Apply rotation if needed\n if (text.ccw_rotation) {\n const rotateTextParams = {\n lines: text_lines,\n anchorPoint: rotationAnchor,\n ccwRotation: text.ccw_rotation,\n }\n text_lines = rotateText(rotateTextParams)\n }\n\n // Draw all lines with transformed context\n for (const line of text_lines) {\n drawLine(drawer, line)\n }\n}\n\nexport const drawRect = (drawer: Drawer, rect: Rect) => {\n drawer.equip({\n color: getColor(rect),\n layer: rect.layer,\n })\n drawer.rect(rect.x, rect.y, rect.w, rect.h, rect.mesh_fill)\n}\n\nexport const drawRotatedRect = (\n drawer: Drawer,\n rect: Rect & { ccw_rotation: Rotation },\n) => {\n drawer.equip({\n color: getColor(rect),\n layer: rect.layer,\n })\n\n drawer.rotatedRect(rect.x, rect.y, rect.w, rect.h, rect.ccw_rotation)\n}\n\nexport const drawCircle = (drawer: Drawer, circle: Circle) => {\n drawer.equip({\n color: getColor(circle),\n layer: circle.layer,\n })\n drawer.circle(circle.x, circle.y, circle.r, circle.mesh_fill)\n}\n\nexport const drawOval = (drawer: Drawer, oval: Oval) => {\n drawer.equip({\n color: getColor(oval),\n layer: oval.layer,\n })\n drawer.oval(oval.x, oval.y, oval.rX, oval.rY)\n}\n\nexport const drawPill = (drawer: Drawer, pill: Pill) => {\n drawer.equip({\n color: getColor(pill),\n layer: pill.layer,\n })\n drawer.pill(pill.x, pill.y, pill.w, pill.h)\n}\n\nexport const drawPolygon = (drawer: Drawer, polygon: Polygon) => {\n drawer.equip({\n color: getColor(polygon),\n layer: polygon.layer,\n })\n drawer.polygon(polygon.points)\n}\n\nexport const drawPrimitive = (drawer: Drawer, primitive: Primitive) => {\n switch (primitive.pcb_drawing_type) {\n case \"line\":\n return drawLine(drawer, primitive)\n case \"text\":\n return drawText(drawer, primitive)\n case \"rect\":\n // @ts-ignore\n if (primitive._element?.shape === \"rotated_rect\") {\n return drawRotatedRect(drawer, {\n ...primitive,\n // @ts-ignore\n ccw_rotation: primitive._element.ccw_rotation,\n mesh_fill: primitive.mesh_fill,\n })\n }\n return drawRect(drawer, primitive)\n case \"circle\":\n return drawCircle(drawer, primitive)\n case \"oval\":\n return drawOval(drawer, primitive)\n case \"pill\":\n return drawPill(drawer, primitive)\n case \"polygon\":\n return drawPolygon(drawer, primitive)\n }\n}\n\nexport const drawPrimitives = (drawer: Drawer, primitives: Primitive[]) => {\n for (const primitive of primitives) {\n drawPrimitive(drawer, primitive)\n }\n}\n","import type { GraphicsObject } from \"graphics-debug\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { drawGraphicsToCanvas } from \"graphics-debug\"\nimport { useEffect, useRef } from \"react\"\nimport { useMeasure } from \"react-use\"\nimport { useGlobalStore } from \"global-store\"\n\ninterface Props {\n transform?: Matrix\n debugGraphics?: GraphicsObject | null\n children?: any\n}\n\nexport const DebugGraphicsOverlay = ({\n children,\n transform,\n debugGraphics,\n}: Props) => {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const [containerRef, { width, height }] = useMeasure<HTMLDivElement>()\n const is_showing_autorouting = useGlobalStore((s) => s.is_showing_autorouting)\n\n useEffect(() => {\n if (!is_showing_autorouting) return\n if (canvasRef.current && debugGraphics && width && height) {\n canvasRef.current.width = width\n canvasRef.current.height = height\n drawGraphicsToCanvas(debugGraphics, canvasRef.current, {\n transform,\n disableLabels: true,\n })\n }\n }, [debugGraphics, transform, width, height, is_showing_autorouting])\n\n if (!is_showing_autorouting) return children\n\n return (\n <div\n ref={containerRef}\n style={{ position: \"relative\", width: \"100%\", height: \"100%\" }}\n >\n {children}\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n opacity: 0.5,\n zIndex: 100,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n }}\n />\n </div>\n )\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { useEffect, useRef } from \"react\"\nimport { useMeasure } from \"react-use\"\nimport { type Matrix, applyToPoint, identity } from \"transformation-matrix\"\nimport colors from \"lib/colors\"\n\ninterface BaseCircuitElement {\n type: string\n}\n\ninterface PcbComponent extends BaseCircuitElement {\n type: \"pcb_component\"\n pcb_component_id: string\n width: number\n height: number\n source_component_id: string\n center: { x: number; y: number }\n rotation: number\n layer:\n | \"top\"\n | \"bottom\"\n | \"inner1\"\n | \"inner2\"\n | \"inner3\"\n | \"inner4\"\n | \"inner5\"\n | \"inner6\"\n}\n\ninterface PcbManualEditConflictWarning extends BaseCircuitElement {\n type: \"pcb_manual_edit_conflict_warning\"\n pcb_manual_edit_conflict_warning_id: string\n message: string\n pcb_component_id: string\n subcircuit_id: string\n source_component_id: string\n}\n\ninterface Props {\n transform?: Matrix\n elements?: AnyCircuitElement[]\n children: any\n}\n\nexport const WarningGraphicsOverlay = ({\n children,\n transform = identity(),\n elements = [],\n}: Props) => {\n const [containerRef, { width, height }] = useMeasure<HTMLDivElement>()\n const canvasRef = useRef<HTMLCanvasElement>(null)\n\n useEffect(() => {\n const canvas = canvasRef.current\n if (!canvas || !width || !height) return\n\n canvas.width = width\n canvas.height = height\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n ctx.clearRect(0, 0, width, height)\n\n const pcbComponents = elements.filter(\n (el): el is PcbComponent => el.type === \"pcb_component\",\n ) as PcbComponent[]\n\n const warnings = elements.filter(\n (el): el is PcbManualEditConflictWarning =>\n el.type === \"pcb_manual_edit_conflict_warning\",\n ) as PcbManualEditConflictWarning[]\n\n ctx.strokeStyle = colors.board.drc_warning\n ctx.lineWidth = 2\n\n warnings.forEach((warning) => {\n const component = pcbComponents.find(\n (comp) => comp.pcb_component_id === warning.pcb_component_id,\n )\n\n if (!component) return\n\n const { width, height, center } = component\n\n const transformedCenter = applyToPoint(transform, center)\n\n const scaledWidth = width * Math.abs(transform.a)\n const scaledHeight = height * Math.abs(transform.d)\n\n const boxPadding = 0.1 * Math.abs(transform.a)\n\n const boxWidth = scaledWidth + boxPadding * 2\n const boxHeight = scaledHeight + boxPadding * 2\n const x = transformedCenter.x - boxWidth / 2\n const y = transformedCenter.y - boxHeight / 2\n\n ctx.beginPath()\n ctx.rect(x, y, boxWidth, boxHeight)\n ctx.stroke()\n\n const labelText = \"Manual Edit Conflict\"\n const labelPadding = 4\n const fontSize = Math.max(8, Math.min(12, 10 * Math.abs(transform.a)))\n ctx.font = `${fontSize}px sans-serif`\n const labelMetrics = ctx.measureText(labelText)\n const labelWidth = labelMetrics.width + labelPadding * 2\n const labelHeight = fontSize + labelPadding * 2\n const labelX = x + (boxWidth - labelWidth) / 2\n const labelY = y + boxHeight + 5\n\n ctx.fillStyle = \"rgba(0, 0, 0, 0.7)\"\n ctx.beginPath()\n ctx.roundRect(labelX, labelY, labelWidth, labelHeight, 3)\n ctx.fill()\n\n ctx.fillStyle = colors.board.drc_warning\n ctx.textAlign = \"center\"\n ctx.textBaseline = \"middle\"\n ctx.fillText(labelText, labelX + labelWidth / 2, labelY + labelHeight / 2)\n })\n }, [elements, transform, width, height])\n\n return (\n <div\n ref={containerRef}\n style={{ position: \"relative\", width: \"100%\", height: \"100%\" }}\n >\n {children}\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n zIndex: zIndexMap.warnings,\n }}\n />\n </div>\n )\n}\n","import { zIndexMap } from \"lib/util/z-index-map\"\nimport { useEffect, useRef, useState } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { applyToPoint, identity, inverse } from \"transformation-matrix\"\n\ninterface Props {\n transform?: Matrix\n children: any\n focusOnHover?: boolean\n}\n\nexport const DimensionOverlay = ({\n children,\n transform,\n focusOnHover = false,\n}: Props) => {\n if (!transform) transform = identity()\n const [dimensionToolVisible, setDimensionToolVisible] = useState(false)\n const [dimensionToolStretching, setDimensionToolStretching] = useState(false)\n // Start of dimension tool line in real-world coordinates (not screen)\n const [dStart, setDStart] = useState({ x: 0, y: 0 })\n // End of dimension tool line in real-world coordinates (not screen)\n const [dEnd, setDEnd] = useState({ x: 0, y: 0 })\n const mousePosRef = useRef({ x: 0, y: 0 })\n const containerRef = useRef<HTMLDivElement | null>(null)\n const container = containerRef.current!\n const containerBounds = container?.getBoundingClientRect()\n useEffect(() => {\n const container = containerRef.current\n\n const down = (e: KeyboardEvent) => {\n if (e.key === \"d\") {\n setDStart({ x: mousePosRef.current.x, y: mousePosRef.current.y })\n setDEnd({ x: mousePosRef.current.x, y: mousePosRef.current.y })\n setDimensionToolVisible((visible: boolean) => !visible)\n setDimensionToolStretching(true)\n }\n if (e.key === \"Escape\") {\n setDimensionToolVisible(false)\n setDimensionToolStretching(false)\n }\n }\n\n const addKeyListener = () => {\n if (container) {\n window.addEventListener(\"keydown\", down)\n }\n }\n\n const removeKeyListener = () => {\n if (container) {\n window.removeEventListener(\"keydown\", down)\n }\n }\n\n if (container) {\n container.addEventListener(\"focus\", addKeyListener)\n container.addEventListener(\"blur\", removeKeyListener)\n container.addEventListener(\"mouseenter\", addKeyListener)\n container.addEventListener(\"mouseleave\", removeKeyListener)\n }\n return () => {\n if (container) {\n container.removeEventListener(\"focus\", addKeyListener)\n container.removeEventListener(\"blur\", removeKeyListener)\n container.removeEventListener(\"mouseenter\", addKeyListener)\n container.removeEventListener(\"mouseleave\", removeKeyListener)\n }\n }\n }, [containerRef])\n\n const screenDStart = applyToPoint(transform, dStart)\n const screenDEnd = applyToPoint(transform, dEnd)\n\n const arrowScreenBounds = {\n left: Math.min(screenDStart.x, screenDEnd.x),\n right: Math.max(screenDStart.x, screenDEnd.x),\n top: Math.min(screenDStart.y, screenDEnd.y),\n bottom: Math.max(screenDStart.y, screenDEnd.y),\n flipX: screenDStart.x > screenDEnd.x,\n flipY: screenDStart.y > screenDEnd.y,\n width: 0,\n height: 0,\n }\n arrowScreenBounds.width = arrowScreenBounds.right - arrowScreenBounds.left\n arrowScreenBounds.height = arrowScreenBounds.bottom - arrowScreenBounds.top\n\n return (\n <div\n ref={containerRef}\n // biome-ignore lint/a11y/noNoninteractiveTabindex: <explanation>\n tabIndex={0}\n style={{ position: \"relative\" }}\n onMouseEnter={() => {\n if (focusOnHover && containerRef.current) {\n containerRef.current.focus()\n }\n }}\n onMouseLeave={() => {\n if (containerRef.current) {\n containerRef.current.blur()\n }\n }}\n onMouseMove={(e: React.MouseEvent<HTMLDivElement>) => {\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n const rwPoint = applyToPoint(inverse(transform!), { x, y })\n mousePosRef.current.x = rwPoint.x\n mousePosRef.current.y = rwPoint.y\n\n if (dimensionToolStretching) {\n setDEnd({ x: rwPoint.x, y: rwPoint.y })\n }\n }}\n onMouseDown={() => {\n if (dimensionToolStretching) {\n setDimensionToolStretching(false)\n } else if (dimensionToolVisible) {\n setDimensionToolVisible(false)\n }\n }}\n >\n {children}\n {dimensionToolVisible && (\n <>\n <div\n style={{\n position: \"absolute\",\n left: arrowScreenBounds.left,\n width: arrowScreenBounds.width,\n textAlign: \"center\",\n top: screenDStart.y + 2,\n color: \"red\",\n mixBlendMode: \"difference\",\n pointerEvents: \"none\",\n marginTop: arrowScreenBounds.flipY ? 0 : -20,\n fontSize: 12,\n fontFamily: \"sans-serif\",\n zIndex: zIndexMap.dimensionOverlay,\n }}\n >\n {Math.abs(dStart.x - dEnd.x).toFixed(2)}\n </div>\n <div\n style={{\n position: \"absolute\",\n left: screenDEnd.x,\n height: arrowScreenBounds.height,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n top: arrowScreenBounds.top,\n color: \"red\",\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n fontSize: 12,\n fontFamily: \"sans-serif\",\n zIndex: zIndexMap.dimensionOverlay,\n }}\n >\n <div\n style={{\n marginLeft: arrowScreenBounds.flipX ? \"-100%\" : 4,\n paddingRight: 4,\n }}\n >\n {Math.abs(dStart.y - dEnd.y).toFixed(2)}\n </div>\n </div>\n {/* biome-ignore lint/a11y/noSvgWithoutTitle: <explanation> */}\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.dimensionOverlay,\n }}\n width={containerBounds.width}\n height={containerBounds.height}\n >\n <defs>\n <marker\n id=\"head\"\n orient=\"auto\"\n markerWidth=\"3\"\n markerHeight=\"4\"\n refX=\"2\"\n refY=\"2\"\n >\n <path d=\"M0,0 V4 L2,2 Z\" fill=\"red\" />\n </marker>\n </defs>\n <line\n x1={screenDStart.x}\n y1={screenDStart.y}\n x2={screenDEnd.x}\n y2={screenDEnd.y}\n markerEnd=\"url(#head)\"\n strokeWidth={1.5}\n fill=\"none\"\n stroke=\"red\"\n />\n <line\n x1={screenDStart.x}\n y1={screenDStart.y}\n x2={screenDEnd.x}\n y2={screenDStart.y}\n strokeWidth={1.5}\n fill=\"none\"\n strokeDasharray={\"2,2\"}\n stroke=\"red\"\n />\n <line\n x1={screenDEnd.x}\n y1={screenDStart.y}\n x2={screenDEnd.x}\n y2={screenDEnd.y}\n strokeWidth={1.5}\n fill=\"none\"\n strokeDasharray={\"2,2\"}\n stroke=\"red\"\n />\n </svg>\n <div\n style={{\n right: 0,\n bottom: 0,\n position: \"absolute\",\n color: \"red\",\n fontFamily: \"sans-serif\",\n fontSize: 12,\n margin: 4,\n }}\n >\n ({dStart.x.toFixed(2)},{dStart.y.toFixed(2)})<br />(\n {dEnd.x.toFixed(2)},{dEnd.y.toFixed(2)})<br />\n dist:{\" \"}\n {Math.sqrt(\n (dEnd.x - dStart.x) ** 2 + (dEnd.y - dStart.y) ** 2,\n ).toFixed(2)}\n </div>\n </>\n )}\n </div>\n )\n}\n","import type { AnyCircuitElement, PcbComponent } from \"circuit-json\"\nimport { useGlobalStore } from \"global-store\"\nimport { useEffect, useRef, useState } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { applyToPoint, identity, inverse } from \"transformation-matrix\"\nimport type { ManualEditEvent } from \"@tscircuit/props\"\n\ninterface Props {\n transform?: Matrix\n children: any\n soup: AnyCircuitElement[]\n disabled?: boolean\n cancelPanDrag: () => void\n onCreateEditEvent: (event: ManualEditEvent) => void\n onModifyEditEvent: (event: Partial<ManualEditEvent>) => void\n}\n\nconst isInsideOf = (\n pcb_component: PcbComponent,\n point: { x: number; y: number },\n padding = 0,\n) => {\n const halfWidth = pcb_component.width / 2\n const halfHeight = pcb_component.height / 2\n\n const left = pcb_component.center.x - halfWidth - padding\n const right = pcb_component.center.x + halfWidth + padding\n const top = pcb_component.center.y - halfHeight - padding\n const bottom = pcb_component.center.y + halfHeight + padding\n\n return point.x > left && point.x < right && point.y > top && point.y < bottom\n}\n\nexport const EditPlacementOverlay = ({\n children,\n disabled: disabledProp,\n transform,\n soup,\n cancelPanDrag,\n onCreateEditEvent,\n onModifyEditEvent,\n}: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\n const [activePcbComponentId, setActivePcbComponent] = useState<null | string>(\n null,\n )\n const [dragState, setDragState] = useState<{\n dragStart: { x: number; y: number }\n originalCenter: { x: number; y: number }\n dragEnd: { x: number; y: number }\n edit_event_id: string\n } | null>(null)\n const isPcbComponentActive = activePcbComponentId !== null\n const in_edit_mode = useGlobalStore((s) => s.in_edit_mode)\n const in_move_footprint_mode = useGlobalStore((s) => s.in_move_footprint_mode)\n const setIsMovingComponent = useGlobalStore((s) => s.setIsMovingComponent)\n\n const disabled = disabledProp || !in_move_footprint_mode\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n }}\n onMouseDown={(e) => {\n if (disabled) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (Number.isNaN(x) || Number.isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n\n let foundActiveComponent = false\n for (const e of soup) {\n if (\n e.type === \"pcb_component\" &&\n isInsideOf(e, rwMousePoint, 10 / transform.a)\n ) {\n cancelPanDrag()\n setActivePcbComponent(e.pcb_component_id)\n foundActiveComponent = true\n const edit_event_id = Math.random().toString()\n setDragState({\n dragStart: rwMousePoint,\n originalCenter: e.center,\n dragEnd: rwMousePoint,\n edit_event_id,\n })\n\n onCreateEditEvent({\n edit_event_id,\n edit_event_type: \"edit_pcb_component_location\",\n pcb_edit_event_type: \"edit_component_location\",\n pcb_component_id: e.pcb_component_id,\n original_center: e.center,\n new_center: e.center,\n in_progress: true,\n created_at: Date.now(),\n })\n\n setIsMovingComponent(true)\n break\n }\n }\n if (!foundActiveComponent) {\n setActivePcbComponent(null)\n }\n\n if (foundActiveComponent) {\n e.preventDefault()\n return false\n }\n }}\n onMouseMove={(e) => {\n if (!activePcbComponentId || !dragState) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (Number.isNaN(x) || Number.isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n setDragState({\n ...dragState,\n dragEnd: rwMousePoint,\n })\n onModifyEditEvent({\n edit_event_id: dragState.edit_event_id,\n new_center: {\n x:\n dragState.originalCenter.x +\n rwMousePoint.x -\n dragState.dragStart.x,\n y:\n dragState.originalCenter.y +\n rwMousePoint.y -\n dragState.dragStart.y,\n },\n })\n }}\n onMouseUp={(e) => {\n if (!activePcbComponentId) return\n setActivePcbComponent(null)\n setIsMovingComponent(false)\n if (dragState) {\n onModifyEditEvent({\n edit_event_id: dragState.edit_event_id,\n in_progress: false,\n })\n setDragState(null)\n }\n }}\n >\n {children}\n {!disabled &&\n soup\n .filter((e): e is PcbComponent => e.type === \"pcb_component\")\n .map((e) => {\n if (!e?.center) return null\n const projectedCenter = applyToPoint(transform, e.center)\n\n return (\n <div\n key={e.pcb_component_id}\n style={{\n position: \"absolute\",\n pointerEvents: \"none\",\n // b/c of transform, this is actually center not left/top\n left: projectedCenter.x,\n top: projectedCenter.y,\n width: e.width * transform.a + 20,\n height: e.height * transform.a + 20,\n transform: \"translate(-50%, -50%)\",\n background:\n isPcbComponentActive &&\n activePcbComponentId === e.pcb_component_id\n ? \"rgba(255, 0, 0, 0.2)\"\n : \"\",\n }}\n />\n )\n })}\n </div>\n )\n}\n","import type {\n AnyCircuitElement,\n PcbSmtPad,\n PcbTraceHint,\n PcbPlatedHole,\n} from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\nimport { useGlobalStore } from \"global-store\"\nimport { Fragment, useEffect, useRef, useState } from \"react\"\nimport {\n type Matrix,\n applyToPoint,\n identity,\n inverse,\n} from \"transformation-matrix\"\nimport { HotkeyActionMenu } from \"./HotkeyActionMenu\"\nimport { useToast } from \"lib/toast\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { EditTraceHintEvent } from \"@tscircuit/props\"\n\ninterface Props {\n transform?: Matrix\n children: any\n soup: AnyCircuitElement[]\n disabled?: boolean\n cancelPanDrag: Function\n onCreateEditEvent: (event: EditTraceHintEvent) => void\n onModifyEditEvent: (event: Partial<EditTraceHintEvent>) => void\n}\n\ninterface Point {\n x: number\n y: number\n trace_width?: number\n}\n\nconst isInsideOfSmtpad = (\n elm: PcbSmtPad,\n point: { x: number; y: number },\n padding = 0,\n) => {\n if (elm.shape === \"circle\") {\n // Not implemented\n return false\n }\n const halfWidth = elm.width / 2\n const halfHeight = elm.height / 2\n\n const left = elm.x - halfWidth - padding\n const right = elm.x + halfWidth + padding\n const top = elm.y - halfHeight - padding\n const bottom = elm.y + halfHeight + padding\n\n return point.x > left && point.x < right && point.y > top && point.y < bottom\n}\n\nconst isInsideOfPlatedHole = (\n hole: PcbPlatedHole,\n point: { x: number; y: number },\n padding = 0,\n) => {\n if (hole.shape === \"circle\") {\n const distance = Math.sqrt(\n (point.x - hole.x) ** 2 + (point.y - hole.y) ** 2,\n )\n return distance <= hole.outer_diameter / 2 + padding\n } else if (hole.shape === \"circular_hole_with_rect_pad\") {\n const dx = Math.abs(point.x - hole.x)\n const dy = Math.abs(point.y - hole.y)\n if (\n dx < hole.rect_pad_width / 2 + padding &&\n dy < hole.rect_pad_height / 2 + padding\n ) {\n return true\n }\n return false\n } else if (hole.shape === \"oval\" || hole.shape === \"pill\") {\n const halfWidth = hole.hole_width / 2\n const halfHeight = hole.hole_height / 2\n\n const left = hole.x - halfWidth - padding\n const right = hole.x + halfWidth + padding\n const top = hole.y - halfHeight - padding\n const bottom = hole.y + halfHeight + padding\n\n return (\n point.x > left && point.x < right && point.y > top && point.y < bottom\n )\n }\n}\n\n/**\n * The trace hit overlay allows you to click a pad, after\n * clicking a pad you'll start dragging out a trace.\n *\n * Each time you click, you'll add to the trace hint path.\n *\n * If you click inside any existing hint, you'll stop adding\n * to the trace hint path.\n *\n * If you select an existing hint, you'll start dragging the\n * route hint. Mouse up stops dragging.\n *\n * If you right click on a hint, you'll delete it.\n *\n * If you right click when creating a trace hint, it will\n * place a hint you'll exit adding the trace hint.\n *\n */\nexport const EditTraceHintOverlay = ({\n children,\n disabled: disabledProp,\n transform,\n soup,\n cancelPanDrag,\n onCreateEditEvent,\n onModifyEditEvent,\n}: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\n const containerBounds = containerRef.current?.getBoundingClientRect()\n const [selectedElement, setSelectedElement] = useState<\n null | PcbSmtPad | PcbPlatedHole\n >(null)\n const toast = useToast()\n const [dragState, setDragState] = useState<{\n dragStart: { x: number; y: number }\n originalCenter: { x: number; y: number }\n dragEnd: { x: number; y: number }\n editEvent: EditTraceHintEvent\n shouldDrawRouteHint?: boolean\n } | null>(null)\n const [shouldCreateAsVia, setShouldCreateAsVia] = useState(false)\n const isElementSelected = selectedElement !== null\n const in_edit_trace_mode = useGlobalStore((s) => s.in_draw_trace_mode)\n\n const disabled = disabledProp || !in_edit_trace_mode\n\n let ogCenterScreen, dragEndScreen\n if (dragState?.originalCenter && dragState?.dragEnd) {\n ogCenterScreen = applyToPoint(transform, dragState?.originalCenter!)\n dragEndScreen = applyToPoint(transform, dragState?.dragEnd!)\n }\n\n useEffect(() => {\n if (!isElementSelected) return\n\n function keyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setSelectedElement(null)\n setDragState(null)\n }\n }\n\n window.addEventListener(\"keydown\", keyDown)\n return () => window.removeEventListener(\"keydown\", keyDown)\n }, [isElementSelected])\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n }}\n onMouseDown={(e) => {\n if (disabled) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (isNaN(x) || isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n\n if (!isElementSelected) {\n for (const e of soup) {\n if (\n (e.type === \"pcb_smtpad\" &&\n isInsideOfSmtpad(e, rwMousePoint, 10 / transform.a)) ||\n (e.type === \"pcb_plated_hole\" &&\n isInsideOfPlatedHole(e, rwMousePoint, 10 / transform.a))\n ) {\n if (!e.pcb_port_id) {\n toast.error(`pcb_port_id is null on the selected \"${e.type}\"`)\n return\n }\n setSelectedElement(e)\n setShouldCreateAsVia(false)\n setDragState({\n dragStart: rwMousePoint,\n originalCenter: { x: e.x, y: e.y },\n dragEnd: rwMousePoint,\n editEvent: {\n pcb_edit_event_type: \"edit_trace_hint\",\n pcb_port_id: e.pcb_port_id!,\n pcb_trace_hint_id: Math.random().toString(),\n route: [],\n created_at: Date.now(),\n edit_event_id: Math.random().toString(),\n in_progress: true,\n },\n shouldDrawRouteHint: false,\n })\n\n cancelPanDrag()\n break\n }\n }\n } else {\n setDragState({\n ...(dragState as any),\n dragStart: rwMousePoint,\n shouldDrawRouteHint: true,\n })\n }\n }}\n onMouseMove={(e) => {\n if (!isElementSelected || !dragState) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (isNaN(x) || isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n setDragState({\n ...dragState,\n dragEnd: rwMousePoint,\n })\n }}\n onMouseUp={(e) => {\n if (!isElementSelected) return\n if (!dragState?.shouldDrawRouteHint) return\n\n // Compute distance that has been dragged\n const { dragStart, dragEnd } = dragState\n const rwDist = Math.sqrt(\n (dragEnd.x - dragStart.x) ** 2 + (dragEnd.y - dragStart.y) ** 2,\n )\n const screenDist = rwDist * transform.a\n\n // If the user dragged, don't create a point\n if (screenDist > 20) return\n\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n if (isNaN(x) || isNaN(y)) return\n const rwMousePoint = applyToPoint(inverse(transform!), { x, y })\n\n if (dragState) {\n cancelPanDrag()\n const lastPointScreen = applyToPoint(\n transform,\n dragState.editEvent.route.slice(-1)[0] ?? dragState.originalCenter,\n )\n const distanceFromLastPoint = Math.sqrt(\n (x - lastPointScreen.x) ** 2 + (y - lastPointScreen.y) ** 2,\n )\n if (distanceFromLastPoint < 20) {\n // Close the trace hint\n onCreateEditEvent({\n ...dragState.editEvent,\n in_progress: false,\n })\n setDragState(null)\n setSelectedElement(null)\n return\n }\n // Edit existing edit event by adding a new point at the rwMousePoint\n setDragState({\n ...dragState,\n editEvent: {\n ...dragState.editEvent,\n route: [\n ...dragState.editEvent.route,\n { ...rwMousePoint, via: shouldCreateAsVia },\n ],\n },\n })\n }\n }}\n >\n {children}\n {in_edit_trace_mode &&\n dragState?.editEvent &&\n ogCenterScreen &&\n dragEndScreen && (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.editTraceHintOverlay,\n }}\n width={containerBounds?.width}\n height={containerBounds?.height}\n >\n <path\n stroke=\"red\"\n d={`M ${ogCenterScreen.x} ${\n ogCenterScreen.y\n } ${dragState?.editEvent.route\n .map((p) => applyToPoint(transform!, p))\n .map((p) => `L ${p.x} ${p.y}`)\n .join(\" \")} L ${dragEndScreen.x} ${dragEndScreen.y}`}\n />\n {dragState?.editEvent.route.map((r, i) => {\n const rScreen = applyToPoint(transform!, r)\n return (\n <Fragment key={`r-${i}`}>\n {r.via && (\n <circle cx={rScreen.x} cy={rScreen.y} r={16} stroke=\"red\" />\n )}\n <circle cx={rScreen.x} cy={rScreen.y} r={8} stroke=\"red\" />\n </Fragment>\n )\n })}\n {shouldCreateAsVia && (\n <circle\n key=\"via-outer-circle\"\n cx={dragEndScreen.x}\n cy={dragEndScreen.y}\n r={16}\n stroke=\"red\"\n />\n )}\n <circle\n cx={dragEndScreen.x}\n cy={dragEndScreen.y}\n r={8}\n stroke=\"red\"\n />\n </svg>\n )}\n {!disabled && (\n <svg\n key={\"pcb-trace-hints\"}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.editTraceHintOverlay,\n }}\n width={containerBounds?.width}\n height={containerBounds?.height}\n >\n {soup\n .filter((e): e is PcbTraceHint => e.type === \"pcb_trace_hint\")\n .map((e) => {\n const { route } = e\n const pcb_port = su(soup as any).pcb_port.get(e.pcb_port_id)!\n const pcb_port_screen = applyToPoint(transform!, pcb_port)\n return (\n <Fragment key={e.pcb_trace_hint_id}>\n <rect\n key={`rect-${e.pcb_port_id}`}\n x={pcb_port_screen.x - 10}\n y={pcb_port_screen.y - 10}\n width={20}\n height={20}\n stroke=\"red\"\n />\n <path\n key={`path-${e.pcb_port_id}`}\n stroke=\"red\"\n d={`M ${pcb_port_screen.x} ${pcb_port_screen.y} ${route\n .map((r) => applyToPoint(transform!, r!))\n .map((r) => `L ${r.x} ${r.y}`)\n .join(\" \")}`}\n />\n {route\n .map((r) => ({ ...r, ...applyToPoint(transform, r!) }))\n .map((r, i) => (\n <Fragment key={i}>\n <circle cx={r.x} cy={r.y} r={8} stroke=\"red\" />\n {r.via && (\n <circle\n cx={r.x}\n cy={r.y}\n r={16}\n stroke=\"red\"\n fill=\"transparent\"\n />\n )}\n </Fragment>\n ))}\n </Fragment>\n )\n })}\n </svg>\n )}\n <div\n style={{\n position: \"absolute\",\n right: 0,\n bottom: 0,\n }}\n >\n {isElementSelected && (\n <HotkeyActionMenu\n hotkeys={[\n {\n key: \"v\",\n name: \"Toggle Via\",\n onUse: () => {\n setShouldCreateAsVia(!shouldCreateAsVia)\n },\n },\n // {\n // key: \"del\",\n // name: \"Delete Node\",\n // onUse: () => {},\n // },\n // {\n // key: \"r\",\n // name: \"Delete Route\",\n // onUse: () => {},\n // },\n ]}\n />\n )}\n </div>\n </div>\n )\n}\n\nfunction getExpandedStroke(\n strokeInput: (Point | [number, number] | number[])[],\n defaultWidth: number,\n): Point[] {\n if (strokeInput.length < 2) {\n throw new Error(\"Stroke must have at least two points\")\n }\n\n const stroke: Point[] = strokeInput.map((point) => {\n if (Array.isArray(point)) {\n return { x: point[0], y: point[1] }\n }\n return point as Point\n })\n\n const leftSide: Point[] = []\n const rightSide: Point[] = []\n\n function getNormal(p1: Point, p2: Point): Point {\n const dx = p2.x - p1.x\n const dy = p2.y - p1.y\n const length = Math.sqrt(dx * dx + dy * dy)\n return { x: -dy / length, y: dx / length }\n }\n\n function addPoint(\n point: Point,\n normal: Point,\n factor: number,\n width: number,\n ) {\n const halfWidth = width / 2\n const newPoint = {\n x: point.x + normal.x * halfWidth * factor,\n y: point.y + normal.y * halfWidth * factor,\n }\n if (factor > 0) {\n leftSide.push(newPoint)\n } else {\n rightSide.unshift(newPoint)\n }\n }\n\n // Handle the first point\n const firstNormal = getNormal(stroke[0]!, stroke[1]!)\n const firstWidth = stroke[0]!.trace_width ?? defaultWidth\n addPoint(stroke[0]!, firstNormal, 1, firstWidth)\n addPoint(stroke[0]!, firstNormal, -1, firstWidth)\n\n // Handle middle points\n for (let i = 1; i < stroke.length - 1; i++) {\n const prev = stroke[i - 1]!\n const current = stroke[i]!\n const next = stroke[i + 1]!\n\n const normalPrev = getNormal(prev, current)\n const normalNext = getNormal(current, next)\n\n // Calculate miter line\n const miterX = normalPrev.x + normalNext.x\n const miterY = normalPrev.y + normalNext.y\n const miterLength = Math.sqrt(miterX * miterX + miterY * miterY)\n\n const currentWidth = current.trace_width ?? defaultWidth\n\n // Check if miter is too long (sharp corner)\n const miterLimit = 2 // Adjust this value to control when to bevel\n if (miterLength / 2 > miterLimit * (currentWidth / 2)) {\n // Use bevel join\n addPoint(current, normalPrev, 1, currentWidth)\n addPoint(current, normalNext, 1, currentWidth)\n addPoint(current, normalPrev, -1, currentWidth)\n addPoint(current, normalNext, -1, currentWidth)\n } else {\n // Use miter join\n const scale = 1 / miterLength\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n 1,\n currentWidth,\n )\n addPoint(\n current,\n { x: miterX * scale, y: miterY * scale },\n -1,\n currentWidth,\n )\n }\n }\n\n // Handle the last point\n const lastNormal = getNormal(\n stroke[stroke.length - 2]!,\n stroke[stroke.length - 1]!,\n )\n const lastWidth = stroke[stroke.length - 1]!.trace_width ?? defaultWidth\n addPoint(stroke[stroke.length - 1]!, lastNormal, 1, lastWidth)\n addPoint(stroke[stroke.length - 1]!, lastNormal, -1, lastWidth)\n\n // Combine left and right sides to form a closed polygon\n return [...leftSide, ...rightSide]\n}\n","import { css } from \"@emotion/css\"\nimport { useEffect } from \"react\"\n\nexport const HotkeyActionMenu = ({\n hotkeys,\n}: {\n hotkeys: Array<{\n key: string\n name: string\n onUse: Function\n }>\n}) => {\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n hotkeys.forEach((hotkey) => {\n if (event.key === hotkey.key) {\n hotkey.onUse()\n }\n })\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [hotkeys])\n\n return (\n <div\n className={css`\n display: flex;\n flex-direction: column;\n font-family: sans-serif;\n font-size: 12px;\n margin: 8px;\n `}\n >\n {hotkeys.map((hotkey) => {\n return (\n <div\n key={hotkey.name}\n className={css`\n display: flex;\n align-items: center;\n margin: 2px;\n\n & .key {\n padding: 1px;\n margin: 2px;\n color: rgba(255, 255, 255, 0.8);\n font-size: 9px;\n border-radius: 3px;\n text-align: center;\n width: 20px;\n background-color: #444;\n }\n\n & .name {\n margin-left: 4px;\n color: rgba(255, 255, 255, 0.8);\n }\n `}\n >\n <div className=\"key\">{hotkey.key}</div>{\" \"}\n <div className=\"name\">{hotkey.name}</div>\n </div>\n )\n })}\n </div>\n )\n}\n","import { css } from \"@emotion/css\"\nimport { su } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement, PcbPort, PcbTraceError } from \"circuit-json\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { useRef } from \"react\"\nimport { type Matrix, applyToPoint, identity } from \"transformation-matrix\"\nimport { useGlobalStore } from \"global-store\" // adjust the import path as needed\n\ninterface Props {\n transform?: Matrix\n elements?: AnyCircuitElement[]\n children: any\n}\n\nconst ErrorSVG = ({\n screenPort1,\n screenPort2,\n errorCenter,\n canLineBeDrawn,\n}: any) => (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.errorOverlay,\n }}\n width=\"100%\"\n height=\"100%\"\n >\n {canLineBeDrawn && (\n <>\n <line\n x1={screenPort1.x}\n y1={screenPort1.y}\n x2={errorCenter.x}\n y2={errorCenter.y}\n strokeWidth={1.5}\n strokeDasharray=\"2,2\"\n stroke=\"red\"\n />\n <line\n x1={errorCenter.x}\n y1={errorCenter.y}\n x2={screenPort2.x}\n y2={screenPort2.y}\n strokeWidth={1.5}\n strokeDasharray=\"2,2\"\n stroke=\"red\"\n />\n <rect\n x={errorCenter.x - 5}\n y={errorCenter.y - 5}\n width={10}\n height={10}\n transform={`rotate(45 ${errorCenter.x} ${errorCenter.y})`}\n fill=\"red\"\n />\n </>\n )}\n </svg>\n)\n\nconst RouteSVG = ({\n points,\n errorCenter,\n}: {\n points: { x: number; y: number }[]\n errorCenter: { x: number; y: number }\n}) => (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n mixBlendMode: \"difference\",\n zIndex: zIndexMap.errorOverlay,\n }}\n width=\"100%\"\n height=\"100%\"\n >\n {points.length > 1 && (\n <polyline\n points={points.map((pt) => `${pt.x},${pt.y}`).join(\" \")}\n fill=\"none\"\n stroke=\"red\"\n strokeWidth={1.5}\n strokeDasharray=\"2,2\"\n />\n )}\n <rect\n x={errorCenter.x - 5}\n y={errorCenter.y - 5}\n width={10}\n height={10}\n transform={`rotate(45 ${errorCenter.x} ${errorCenter.y})`}\n fill=\"red\"\n />\n </svg>\n)\n\nexport const ErrorOverlay = ({ children, transform, elements }: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\n const isShowingDRCErrors = useGlobalStore(\n (state) => state.is_showing_drc_errors,\n )\n\n return (\n <div style={{ position: \"relative\" }} ref={containerRef}>\n {children}\n {elements\n ?.filter((el): el is PcbTraceError => el.type === \"pcb_trace_error\")\n .map((el: PcbTraceError) => {\n const { pcb_port_ids, pcb_trace_id } = el\n const port1 = elements.find(\n (el): el is PcbPort =>\n el.type === \"pcb_port\" && el.pcb_port_id === pcb_port_ids?.[0],\n )\n const port2 = elements.find(\n (el): el is PcbPort =>\n el.type === \"pcb_port\" && el.pcb_port_id === pcb_port_ids?.[1],\n )\n const trace = su(elements).pcb_trace.get(pcb_trace_id)\n\n // port-based errors always show\n if (port1 && port2) {\n const screenPort1 = applyToPoint(transform, {\n x: port1.x,\n y: port1.y,\n })\n const screenPort2 = applyToPoint(transform, {\n x: port2.x,\n y: port2.y,\n })\n\n const canLineBeDrawn = !(\n isNaN(screenPort1.x) ||\n isNaN(screenPort1.y) ||\n isNaN(screenPort2.x) ||\n isNaN(screenPort2.y)\n )\n\n const errorCenter = {\n x: (screenPort1.x + screenPort2.x) / 2,\n y: (screenPort1.y + screenPort2.y) / 2,\n }\n\n if (isNaN(errorCenter.x) || isNaN(errorCenter.y)) {\n return null\n }\n\n return (\n <>\n <ErrorSVG\n screenPort1={screenPort1}\n screenPort2={screenPort2}\n errorCenter={errorCenter}\n canLineBeDrawn={canLineBeDrawn}\n />\n <div\n className={css`\n position: absolute;\n z-index: 100;\n left: ${errorCenter.x}px;\n top: ${errorCenter.y}px;\n color: red;\n text-align: center;\n font-family: sans-serif;\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n transform: translate(-50%, -100%);\n\n & .error-message {\n opacity: 0;\n pointer-events: none;\n\n width: 200px;\n transition: opacity 0.2s;\n margin-bottom: 10px;\n }\n\n &:hover .error-message {\n opacity: 1;\n display: flex;\n }\n `}\n >\n <div className=\"error-message\">{el.message}</div>\n <div\n className={css`\n width: 10px;\n height: 10px;\n transform: translate(0, 5px) rotate(45deg);\n background-color: red;\n `}\n />\n </div>\n </>\n )\n }\n // fallback: only show if global DRC errors enabled and route exists\n if (trace?.route && isShowingDRCErrors) {\n const screenPoints = trace.route.map((pt) =>\n applyToPoint(transform!, { x: pt.x, y: pt.y }),\n )\n if (screenPoints.some((pt) => isNaN(pt.x) || isNaN(pt.y)))\n return null\n const mid = Math.floor(screenPoints.length / 2)\n const errorCenter = screenPoints[mid]\n return (\n <>\n <RouteSVG points={screenPoints} errorCenter={errorCenter} />\n <div\n className={css`\n position: absolute;\n z-index: ${zIndexMap.errorOverlay + 1};\n left: ${errorCenter.x}px;\n top: ${errorCenter.y}px;\n color: red;\n text-align: center;\n font-family: sans-serif;\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n transform: translate(-50%, -100%);\n\n & .error-message { opacity: 0; pointer-events: none; width: 200px; transition: opacity 0.2s; margin-bottom: 10px; }\n &:hover .error-message { opacity: 1; display: flex; }\n `}\n >\n <div className=\"error-message\">{el.message}</div>\n <div\n className={css`\n width: 10px;\n height: 10px;\n transform: translate(0, 5px) rotate(45deg);\n background-color: red;\n `}\n />\n </div>\n </>\n )\n }\n\n return null\n })}\n </div>\n )\n}\n","import React, { useState, useMemo } from \"react\"\nimport type { Matrix } from \"transformation-matrix\"\nimport { applyToPoint, inverse } from \"transformation-matrix\"\nimport type { Primitive } from \"lib/types\"\nimport { ElementOverlayBox } from \"./ElementOverlayBox\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { ifSetsMatchExactly } from \"lib/util/if-sets-match-exactly\"\nimport { pointToSegmentDistance } from \"@tscircuit/math-utils\"\n\nconst getPrimitivesUnderPoint = (\n primitives: Primitive[],\n rwPoint: { x: number; y: number },\n transform: Matrix,\n): Primitive[] => {\n const newMousedPrimitives: Primitive[] = []\n\n for (const primitive of primitives) {\n if (!primitive._element) continue\n\n // Handle PCB traces\n if (\"x1\" in primitive && primitive._element?.type === \"pcb_trace\") {\n const distance = pointToSegmentDistance(\n { x: rwPoint.x, y: rwPoint.y },\n { x: primitive.x1, y: primitive.y1 },\n { x: primitive.x2, y: primitive.y2 },\n )\n\n const lineWidth = primitive.width || 0.5\n const detectionThreshold = Math.max(lineWidth * 25, 2) / transform!.a\n\n if (distance < detectionThreshold) {\n newMousedPrimitives.push(primitive)\n }\n continue\n }\n\n // Handle primitives with x, y coordinates\n if (!(\"x\" in primitive && \"y\" in primitive)) continue\n\n let w = 0\n let h = 0\n\n if (\"w\" in primitive && \"h\" in primitive) {\n w = primitive.w\n h = primitive.h\n } else if (\"r\" in primitive) {\n w = (primitive as any).r * 2\n h = (primitive as any).r * 2\n } else {\n continue\n }\n\n if (\n Math.abs((primitive as any).x - rwPoint.x) < w / 2 &&\n Math.abs((primitive as any).y - rwPoint.y) < h / 2\n ) {\n newMousedPrimitives.push(primitive)\n }\n }\n\n return newMousedPrimitives\n}\n\nexport const MouseElementTracker = ({\n elements,\n children,\n transform,\n primitives,\n onMouseHoverOverPrimitives,\n}: {\n elements: AnyCircuitElement[]\n children: any\n transform?: Matrix\n primitives: Primitive[]\n onMouseHoverOverPrimitives: (primitivesHoveredOver: Primitive[]) => void\n}) => {\n const [mousedPrimitives, setMousedPrimitives] = useState<Primitive[]>([])\n const [mousePos, setMousePos] = useState({ x: 0, y: 0 })\n const highlightedPrimitives = useMemo(() => {\n const highlightedPrimitives: HighlightedPrimitive[] = []\n for (const primitive of mousedPrimitives) {\n if (primitive._element?.type === \"pcb_via\") continue\n if (primitive._element?.type === \"pcb_component\") continue\n if (primitive?.layer === \"drill\") continue\n const screenPos = applyToPoint(\n transform!,\n primitive as { x: number; y: number },\n )\n const w =\n \"w\" in primitive ? primitive.w : \"r\" in primitive ? primitive.r * 2 : 0\n const h =\n \"h\" in primitive ? primitive.h : \"r\" in primitive ? primitive.r * 2 : 0\n const screenSize = {\n w: w * transform!.a,\n h: h * transform!.a,\n }\n\n // FANCY: If 2+ highlighted primitives inhabit the same space, give\n // them an incrementing same_space_index\n const same_space_index = highlightedPrimitives.filter(\n (hp) =>\n screenPos.x === hp.screen_x &&\n screenPos.y === hp.screen_y &&\n screenSize.w === hp.screen_w &&\n screenSize.h === hp.screen_h,\n ).length\n\n highlightedPrimitives.push({\n ...(primitive as any),\n screen_x: screenPos.x,\n screen_y: screenPos.y,\n screen_w: screenSize.w,\n screen_h: screenSize.h,\n same_space_index,\n })\n }\n\n return highlightedPrimitives\n }, [mousedPrimitives, transform])\n\n const handleInteraction = (\n x: number,\n y: number,\n transform: Matrix,\n primitives: Primitive[],\n ) => {\n setMousePos({ x, y })\n const rwPoint = applyToPoint(inverse(transform), { x, y })\n const newMousedPrimitives = getPrimitivesUnderPoint(\n primitives,\n rwPoint,\n transform,\n )\n\n if (\n ifSetsMatchExactly(\n new Set(newMousedPrimitives.map((p) => p._pcb_drawing_object_id)),\n new Set(mousedPrimitives.map((p) => p._pcb_drawing_object_id)),\n )\n ) {\n return\n }\n\n setMousedPrimitives(newMousedPrimitives)\n onMouseHoverOverPrimitives(newMousedPrimitives)\n }\n\n return (\n <div\n style={{ position: \"relative\" }}\n onMouseMove={(e) => {\n if (transform) {\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n handleInteraction(x, y, transform, primitives)\n }\n }}\n onTouchStart={(e) => {\n if (transform) {\n const touch = e.touches[0]\n const rect = e.currentTarget.getBoundingClientRect()\n const x = touch.clientX - rect.left\n const y = touch.clientY - rect.top\n handleInteraction(x, y, transform, primitives)\n }\n }}\n >\n {children}\n <ElementOverlayBox\n elements={elements}\n mousePos={mousePos}\n highlightedPrimitives={highlightedPrimitives}\n />\n </div>\n )\n}\n\nexport type HighlightedPrimitive = {\n x: number\n y: number\n w: number\n h: number\n same_space_index?: number\n _element: AnyCircuitElement\n _parent_pcb_component?: AnyCircuitElement\n _parent_source_component?: AnyCircuitElement\n _source_port?: AnyCircuitElement\n screen_x: number\n screen_y: number\n screen_w: number\n screen_h: number\n}\n","import React, { useEffect, useState } from \"react\"\nimport { HighlightedPrimitive } from \"./MouseElementTracker\"\nimport colors from \"lib/colors\"\nimport { useGlobalStore } from \"global-store\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { AnyCircuitElement } from \"circuit-json\"\nimport { getTraceOverlayInfo } from \"lib/get-trace-overlay-text\"\nimport { filterTracesIfMultiple } from \"lib/filter-traces-if-multiple\"\n\nconst containerStyle = {\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n color: \"red\",\n fontFamily: \"sans-serif\",\n fontSize: 12,\n textShadow: \"0 0 2px black\",\n} as const\n\nexport const getTextForHighlightedPrimitive = (\n prim: HighlightedPrimitive,\n): string => {\n const {\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n _source_port,\n } = prim\n switch (element.type) {\n case \"pcb_trace\": {\n if (element.trace_length) {\n return `${element.trace_length.toFixed(3)}`\n }\n return \"\"\n }\n case \"pcb_smtpad\":\n case \"pcb_plated_hole\": {\n let s = \"\"\n\n if (\n _parent_source_component &&\n \"name\" in _parent_source_component &&\n _parent_source_component.name\n ) {\n s += `.${_parent_source_component.name} > `\n }\n\n const port_hints = Array.from(\n new Set(\n (element.port_hints ?? []).concat(\n (_source_port as any)?.port_hints ?? [],\n ),\n ),\n )\n // reverse alphabetical order\n .sort((a, b) => b.localeCompare(a))\n\n s += port_hints\n .map((ph: string) => (ph.match(/^[0-9]+$/) ? `port.${ph}` : `.${ph}`))\n .join(\", \")\n\n return s\n }\n default: {\n return \"\"\n }\n }\n}\n\nconst layerColorHightlightMap = {\n top: \"red\",\n bottom: \"aqua\",\n}\n\nexport const HighlightedPrimitiveBoxWithText = ({\n primitive,\n mousePos,\n elements,\n}: {\n elements: AnyCircuitElement[]\n primitive: HighlightedPrimitive\n mousePos: { x: number; y: number }\n}) => {\n const [finalState, setFinalState] = useState(false)\n const primitiveElement = primitive._element\n\n useEffect(() => {\n setTimeout(() => {\n setFinalState(true)\n }, 100)\n }, [])\n\n let [x, y, w, h] = [\n primitive.screen_x,\n primitive.screen_y,\n primitive.screen_w,\n primitive.screen_h,\n ]\n\n const si = primitive.same_space_index ?? 0\n const sip = 26\n\n const color: string =\n layerColorHightlightMap[\n (primitive as any)?._element\n ?.layer as keyof typeof layerColorHightlightMap\n ] ?? \"red\"\n\n // Check for rotation on the parent PCB component\n let rotation = 0\n if (\n primitiveElement.type === \"pcb_smtpad\" &&\n primitiveElement?.shape === \"rotated_rect\"\n ) {\n rotation = primitiveElement?.ccw_rotation\n }\n // In HighlightedPrimitiveBoxWithText component\n if (primitiveElement.type === \"pcb_trace\") {\n const traceTextContext = { primitiveElement, elements }\n const overlayInfo = getTraceOverlayInfo(traceTextContext)\n if (!overlayInfo) return null\n\n const yOffset = mousePos.y - 35\n\n return (\n <div\n style={{\n zIndex: zIndexMap.elementOverlay,\n position: \"absolute\",\n left: mousePos.x,\n top: yOffset,\n color,\n pointerEvents: \"none\",\n transform: \"translateX(-50%)\",\n }}\n >\n <div\n style={{\n backgroundColor: \"#f2efcc\",\n color: overlayInfo.isOverLength ? \"red\" : \"black\",\n textShadow: \"none\",\n WebkitFontSmoothing: \"antialiased\",\n MozOsxFontSmoothing: \"grayscale\",\n padding: \"6px 6px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n minWidth: \"45px\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n }}\n >\n {overlayInfo.text}\n </div>\n </div>\n )\n }\n\n return (\n <div\n style={{\n zIndex: zIndexMap.elementOverlay,\n position: \"absolute\",\n left: x - w / 2 - 8,\n top: y - h / 2 - 8,\n width: w + 16,\n height: h + 16,\n color,\n transform: `rotate(${-rotation}deg)`,\n transformOrigin: \"center center\",\n }}\n >\n <div\n style={{\n // width: finalState ? `${100 + 20 * si}%` : \"100%\",\n // height: finalState ? `${100 + 20 * si}%` : \"100%\",\n // marginLeft: finalState ? `${-10 * si}%` : 0,\n // marginTop: finalState ? `${-10 * si}%` : 0,\n width: finalState ? `calc(100% + ${sip * 2 * si}px)` : \"100%\",\n height: finalState ? `calc(100% + ${sip * 2 * si}px)` : \"100%\",\n marginLeft: finalState ? `${-sip * si}px` : 0,\n marginTop: finalState ? `${-sip * si}px` : 0,\n border: `1px solid ${color}`,\n opacity: finalState ? 1 : si === 0 ? 1 : 0,\n transition:\n \"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n bottom: h + 20 + sip * si,\n marginRight: finalState ? `${-sip * si}px` : 0,\n marginBottom: finalState ? 0 : -sip * si,\n transition: \"margin-right 0.2s, margin-bottom 0.2s\",\n backgroundColor: \"#f2efcc\",\n color: \"black\",\n textShadow: \"none\",\n WebkitFontSmoothing: \"antialiased\",\n MozOsxFontSmoothing: \"grayscale\",\n padding: \"6px 6px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n transform: `rotate(${rotation}deg)`,\n minWidth: \"45px\",\n textAlign: \"center\",\n }}\n >\n {getTextForHighlightedPrimitive(primitive)}\n </div>\n </div>\n </div>\n )\n}\n\nexport const ElementOverlayBox = ({\n highlightedPrimitives,\n mousePos,\n elements,\n}: {\n elements: AnyCircuitElement[]\n highlightedPrimitives: HighlightedPrimitive[]\n mousePos: { x: number; y: number }\n}) => {\n const [is_moving_component, is_showing_multiple_traces_length] =\n useGlobalStore((s) => [\n s.is_moving_component,\n s.is_showing_multiple_traces_length,\n ])\n const hasSmtPadAndTrace =\n highlightedPrimitives.some((p) => p._element.type === \"pcb_smtpad\") &&\n highlightedPrimitives.some((p) => p._element.type === \"pcb_trace\")\n\n let primitives = highlightedPrimitives\n // If both smtpad and trace are present, only return smtpads\n if (hasSmtPadAndTrace) {\n primitives = primitives.filter((p) => p._element.type === \"pcb_smtpad\")\n }\n // When having multiple traces filter traces to get only the shortest one\n primitives = filterTracesIfMultiple({\n primitives,\n is_showing_multiple_traces_length,\n elements,\n })\n\n return (\n <div style={containerStyle}>\n {!is_moving_component &&\n primitives.map((primitive, i) => (\n <HighlightedPrimitiveBoxWithText\n key={i}\n primitive={primitive}\n mousePos={mousePos}\n elements={elements}\n />\n ))}\n </div>\n )\n}\n","import { su } from \"@tscircuit/soup-util\"\nimport { AnyCircuitElement } from \"circuit-json\"\n\ninterface TraceTextContext {\n primitiveElement: any\n elements: AnyCircuitElement[]\n}\n\ninterface TraceOverlayInfo {\n text: string\n isOverLength: boolean\n}\n\nexport function getTraceOverlayInfo({\n primitiveElement,\n elements,\n}: TraceTextContext): TraceOverlayInfo | null {\n let text = primitiveElement.trace_length\n ? `${primitiveElement.trace_length.toFixed(3)}`\n : \"\"\n\n const trace = su(elements).source_trace.get(\n primitiveElement?.source_trace_id!,\n )\n // Get connection information\n if (trace?.display_name) {\n // Add max length info\n if (trace?.max_length) {\n text += ` / ${trace.max_length}mm `\n } else {\n text += \" mm \"\n }\n text += `(${trace.display_name})`\n }\n\n if (!text) return null\n\n const isOverLength =\n primitiveElement.trace_length &&\n trace?.max_length &&\n primitiveElement.trace_length > trace.max_length\n\n return {\n text,\n isOverLength,\n }\n}\n","import { AnyCircuitElement } from \"circuit-json\"\nimport { HighlightedPrimitive } from \"../components/MouseElementTracker\"\n\nexport function filterTracesIfMultiple(filterTraces: {\n primitives: HighlightedPrimitive[]\n is_showing_multiple_traces_length: boolean\n elements: AnyCircuitElement[]\n}): HighlightedPrimitive[] {\n const { primitives, is_showing_multiple_traces_length, elements } =\n filterTraces\n\n // Filter traces to get only PCB traces\n const traces = primitives.filter(\n (\n p,\n ): p is HighlightedPrimitive & {\n _element: {\n type: \"pcb_trace\"\n trace_length?: number\n }\n } => p._element.type === \"pcb_trace\",\n )\n\n // Find all source traces\n const sourceTraces = elements.filter((e) => e.type === \"source_trace\")\n\n // Get non-trace primitives\n const nonTraces = primitives.filter((p) => p._element.type !== \"pcb_trace\")\n\n // Find traces that have corresponding source traces with max_length\n const tracesWithMaxLength = traces.filter((trace) =>\n sourceTraces.some(\n (sourceTrace) =>\n trace._element.type === \"pcb_trace\" &&\n trace._element.source_trace_id === sourceTrace.source_trace_id &&\n sourceTrace.max_length !== undefined,\n ),\n )\n\n // If not showing multiple traces length, return non-traces and traces with\n // max length\n if (!is_showing_multiple_traces_length) {\n return [...nonTraces, ...tracesWithMaxLength]\n }\n\n // If multiple traces exist, return only the shortest one\n if (traces.length > 1) {\n const shortestTrace = traces.reduce((shortest, current) => {\n const shortestLength = shortest._element.trace_length\n const currentLength = current._element.trace_length\n return currentLength! < shortestLength! ? current : shortest\n }, traces[0])\n\n return [...nonTraces, shortestTrace]\n }\n\n return primitives\n}\n","export function ifSetsMatchExactly(set1: Set<any>, set2: Set<any>) {\n if (set1.size !== set2.size) return false\n return Array.from(set1).every((item) => set2.has(item))\n}\n","import { type Matrix, applyToPoint, identity } from \"transformation-matrix\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\nimport { useGlobalStore } from \"global-store\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\nimport { getFullConnectivityMapFromCircuitJson } from \"circuit-json-to-connectivity-map\"\nimport { useMemo } from \"react\"\n\ninterface Props {\n transform?: Matrix\n soup?: AnyCircuitElement[]\n children: any\n}\n\ntype Point = { x: number; y: number }\ntype RatsNestLine = {\n key: string\n startPoint: Point\n endPoint: Point\n isInNet: boolean\n}\n\nexport const RatsNestOverlay = ({ transform, soup, children }: Props) => {\n const isShowingRatsNest = useGlobalStore((s) => s.is_showing_rats_nest)\n\n const { netMap, idToNetMap } = useMemo(\n () => getFullConnectivityMapFromCircuitJson(soup || []),\n [soup],\n )\n\n const ratsNestLines = useMemo(() => {\n if (!soup || !isShowingRatsNest) return []\n\n const getElementPosition = (id: string): Point | null => {\n // @ts-ignore\n const element = su(soup)[id.replace(/_\\d+$/, \"\")].get(id)\n if (element && \"x\" in element && \"y\" in element) {\n return { x: element.x, y: element.y }\n }\n return null\n }\n\n const findNearestPointInNet = (\n sourcePoint: Point,\n netId: string,\n ): Point | null => {\n const connectedIds = netMap[netId] || []\n let nearestPoint: Point | null = null\n let minDistance = Infinity\n\n connectedIds.forEach((id) => {\n const pos = getElementPosition(id)\n if (pos) {\n const distance = Math.sqrt(\n (sourcePoint.x - pos.x) ** 2 + (sourcePoint.y - pos.y) ** 2,\n )\n if (distance < minDistance && distance > 0) {\n minDistance = distance\n nearestPoint = pos\n }\n }\n })\n\n return nearestPoint\n }\n\n const pcbPorts = su(soup).pcb_port.list()\n const sourceTraces = su(soup).source_trace.list()\n const lines: RatsNestLine[] = []\n\n pcbPorts.forEach((port, index) => {\n const netId = idToNetMap[port.pcb_port_id]\n\n let isInNet = false\n\n for (const trace of sourceTraces) {\n const sourceTrace = trace.connected_source_port_ids.includes(\n port.source_port_id,\n )\n if (sourceTrace && trace.connected_source_net_ids.length > 0) {\n isInNet = true\n }\n }\n\n if (!netId) return\n\n const startPoint = { x: port.x, y: port.y }\n const nearestPoint = findNearestPointInNet(startPoint, netId)\n\n if (!nearestPoint) return\n\n lines.push({\n key: `${port.pcb_port_id}-${index}`,\n startPoint,\n endPoint: nearestPoint,\n isInNet,\n })\n })\n\n return lines\n }, [soup, netMap, idToNetMap, isShowingRatsNest])\n\n if (!soup || !isShowingRatsNest) return children\n if (!transform) transform = identity()\n\n return (\n <div style={{ position: \"relative\" }}>\n {children}\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n opacity: 0.5,\n zIndex: zIndexMap.ratsNestOverlay,\n }}\n >\n {ratsNestLines.map(({ key, startPoint, endPoint, isInNet }) => {\n const transformedStart = applyToPoint(transform, startPoint)\n const transformedEnd = applyToPoint(transform, endPoint)\n\n return (\n <line\n key={key}\n x1={transformedStart.x}\n y1={transformedStart.y}\n x2={transformedEnd.x}\n y2={transformedEnd.y}\n stroke=\"white\"\n strokeWidth=\"1\"\n strokeDasharray={isInNet ? \"6,6\" : undefined}\n />\n )\n })}\n </svg>\n </div>\n )\n}\n","import { Fragment, useEffect, useState } from \"react\"\nimport { css } from \"@emotion/css\"\nimport { type LayerRef, type PcbTraceError, all_layers } from \"circuit-json\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { LAYER_NAME_TO_COLOR } from \"lib/Drawer\"\nimport { useGlobalStore } from \"global-store\"\nimport packageJson from \"../../package.json\"\nimport { useHotKey } from \"hooks/useHotKey\"\nimport { zIndexMap } from \"lib/util/z-index-map\"\ninterface Props {\n children?: any\n elements?: AnyCircuitElement[]\n}\n\nexport const LayerButton = ({\n name,\n selected,\n onClick,\n}: {\n name: string\n selected?: boolean\n onClick: (e: any) => any\n}) => {\n return (\n <div\n className={css`\n margin-top: 2px;\n padding: 4px;\n padding-left: 8px;\n padding-right: 18px;\n cursor: pointer;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n `}\n onClick={onClick}\n >\n <span style={{ marginRight: 2, opacity: selected ? 1 : 0 }}>•</span>\n <span\n style={{\n marginLeft: 2,\n fontWeight: 500,\n color: (LAYER_NAME_TO_COLOR as any)[name.replace(/-/, \"\")],\n }}\n >\n {name}\n </span>\n </div>\n )\n}\n\nexport const ToolbarButton = ({ children, ...props }: any) => (\n <div\n {...props}\n style={{\n backgroundColor: \"#1F1F1F\",\n border: \"1px solid #666\",\n margin: 4,\n padding: 4,\n paddingLeft: 6,\n paddingRight: 6,\n borderRadius: 2,\n alignSelf: \"start\",\n color: \"#eee\",\n cursor: \"pointer\",\n ...props.style,\n }}\n >\n {children}\n </div>\n)\nconst CheckboxMenuItem = ({\n label,\n checked,\n onClick,\n}: {\n label: string\n checked: boolean\n onClick: () => void\n}) => {\n return (\n <div\n className={css`\n margin-top: 2px;\n padding: 4px;\n padding-left: 8px;\n padding-right: 18px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n `}\n onClick={(e) => {\n e.stopPropagation()\n onClick()\n }}\n >\n <input type=\"checkbox\" checked={checked} />\n <span style={{ color: \"#eee\" }}>{label}</span>\n </div>\n )\n}\n\nexport const ToolbarOverlay = ({ children, elements }: Props) => {\n const [isMouseOverContainer, setIsMouseOverContainer] = useGlobalStore(\n (s) => [s.is_mouse_over_container, s.setIsMouseOverContainer],\n ) as [boolean, (isFocused: boolean) => void]\n const [isViewMenuOpen, setViewMenuOpen] = useState(false)\n const [isLayerMenuOpen, setLayerMenuOpen] = useState(false)\n const [isErrorsOpen, setErrorsOpen] = useState(false)\n const [selectedLayer, selectLayer] = useGlobalStore(\n (s) => [s.selected_layer, s.selectLayer] as const,\n )\n const [\n in_move_footprint_mode,\n in_draw_trace_mode,\n is_showing_rats_nest,\n is_showing_multiple_traces_length,\n is_showing_autorouting,\n is_showing_drc_errors,\n ] = useGlobalStore((s) => [\n s.in_move_footprint_mode,\n s.in_draw_trace_mode,\n s.is_showing_rats_nest,\n s.is_showing_multiple_traces_length,\n s.is_showing_autorouting,\n s.is_showing_drc_errors,\n ])\n const setEditMode = useGlobalStore((s) => s.setEditMode)\n const setIsShowingRatsNest = useGlobalStore((s) => s.setIsShowingRatsNest)\n const setIsShowingMultipleTracesLength = useGlobalStore(\n (s) => s.setIsShowingMultipleTracesLength,\n )\n const setIsShowingAutorouting = useGlobalStore(\n (s) => s.setIsShowingAutorouting,\n )\n const setIsShowingDrcErrors = useGlobalStore((s) => s.setIsShowingDrcErrors)\n\n useHotKey(\"1\", () => selectLayer(\"top\"))\n useHotKey(\"2\", () => selectLayer(\"bottom\"))\n useHotKey(\"3\", () => selectLayer(\"inner1\"))\n useHotKey(\"4\", () => selectLayer(\"inner2\"))\n useHotKey(\"5\", () => selectLayer(\"inner3\"))\n useHotKey(\"6\", () => selectLayer(\"inner4\"))\n useHotKey(\"7\", () => selectLayer(\"inner5\"))\n useHotKey(\"8\", () => selectLayer(\"inner6\"))\n\n const errorCount =\n elements?.filter((e) => e.type.includes(\"error\")).length ?? 0\n return (\n <div\n style={{ position: \"relative\" }}\n onMouseEnter={() => {\n setIsMouseOverContainer(true)\n }}\n onMouseLeave={(e) => {\n setIsMouseOverContainer(false)\n setLayerMenuOpen(false)\n }}\n >\n {children}\n <div\n style={{\n position: \"absolute\",\n bottom: 4,\n right: 8,\n pointerEvents: \"none\",\n color: \"white\",\n fontSize: 11,\n opacity: isMouseOverContainer ? 0.5 : 0,\n transition: \"opacity 1s\",\n transitionDelay: \"2s\",\n fontFamily: \"sans-serif\",\n }}\n >\n @tscircuit/pcb-viewer@{packageJson.version}\n </div>\n <div\n style={{\n position: \"absolute\",\n opacity: isMouseOverContainer ? 1 : 0,\n top: 16,\n left: 16,\n transition: isMouseOverContainer\n ? \"opacity 100ms linear\"\n : \"opacity 1s linear\",\n zIndex: zIndexMap.toolbarOverlay,\n color: \"red\",\n display: \"flex\",\n fontSize: 12,\n height: 100,\n fontFamily: \"sans-serif\",\n }}\n >\n <ToolbarButton\n onClick={() => {\n setLayerMenuOpen(!isLayerMenuOpen)\n }}\n onMouseLeave={() => {\n if (isLayerMenuOpen) {\n setLayerMenuOpen(false)\n }\n }}\n >\n <div>\n layer:{\" \"}\n <span\n style={{\n marginLeft: 2,\n fontWeight: 500,\n color: (LAYER_NAME_TO_COLOR as any)[selectedLayer as string],\n }}\n >\n {selectedLayer as string}\n </span>\n </div>\n {isLayerMenuOpen && (\n <div style={{ marginTop: 4, minWidth: 120 }}>\n {all_layers\n .map((l) => l.replace(/-/g, \"\")) // TODO remove when inner-1 becomes inner1\n .map((layer) => (\n <LayerButton\n key={layer}\n name={layer}\n selected={layer === selectedLayer}\n onClick={() => {\n selectLayer(layer.replace(/-/, \"\") as LayerRef)\n }}\n />\n ))}\n </div>\n )}\n </ToolbarButton>\n <ToolbarButton\n style={errorCount > 0 ? { color: \"red\" } : {}}\n onClick={() => setErrorsOpen(!isErrorsOpen)}\n onMouseLeave={() => setErrorsOpen(false)}\n >\n <div>{errorCount} errors</div>\n {isErrorsOpen && (\n <div\n style={{ display: \"grid\", gridTemplateColumns: \"100px 300px\" }}\n >\n {elements\n ?.filter((e): e is PcbTraceError => e.type.includes(\"error\"))\n .map((e, i) => (\n <Fragment key={i}>\n <div>{e.error_type}</div>\n <div>{e.message}</div>\n </Fragment>\n ))}\n </div>\n )}\n </ToolbarButton>\n <ToolbarButton\n style={{}}\n onClick={() => {\n setEditMode(in_draw_trace_mode ? \"off\" : \"draw_trace\")\n }}\n >\n <div>\n {in_draw_trace_mode ? \"✖ \" : \"\"}\n Edit Traces\n </div>\n </ToolbarButton>\n <ToolbarButton\n style={{}}\n onClick={() => {\n setEditMode(in_move_footprint_mode ? \"off\" : \"move_footprint\")\n }}\n >\n <div>\n {in_move_footprint_mode ? \"✖ \" : \"\"}\n Move Components\n </div>\n </ToolbarButton>\n <ToolbarButton\n style={{}}\n onClick={() => {\n setIsShowingRatsNest(!is_showing_rats_nest)\n }}\n >\n <div>\n {is_showing_rats_nest ? \"✖ \" : \"\"}\n Rats Nest\n </div>\n </ToolbarButton>\n\n <ToolbarButton\n onClick={() => {\n setViewMenuOpen(!isViewMenuOpen)\n }}\n >\n <div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n View{\" \"}\n <span\n style={{\n fontSize: \"8px\",\n transform: isViewMenuOpen ? \"rotate(180deg)\" : \"rotate(0)\",\n transition: \"transform 0.1s ease\",\n display: \"inline-block\",\n }}\n >\n ▼\n </span>\n </div>\n {isViewMenuOpen && (\n <div style={{ marginTop: 4, minWidth: 120 }}>\n <CheckboxMenuItem\n label=\"Show All Trace Lengths\"\n checked={is_showing_multiple_traces_length}\n onClick={() => {\n setIsShowingMultipleTracesLength(\n !is_showing_multiple_traces_length,\n )\n }}\n />\n <CheckboxMenuItem\n label=\"Show Autorouting Animation\"\n checked={is_showing_autorouting}\n onClick={() => {\n setIsShowingAutorouting(!is_showing_autorouting)\n }}\n />\n <CheckboxMenuItem\n label=\"Show DRC Errors\"\n checked={is_showing_drc_errors}\n onClick={() => {\n setIsShowingDrcErrors(!is_showing_drc_errors)\n }}\n />\n </div>\n )}\n </div>\n </ToolbarButton>\n </div>\n </div>\n )\n}\n","{\n \"name\": \"@tscircuit/pcb-viewer\",\n \"version\": \"1.11.153\",\n \"main\": \"dist/index.js\",\n \"type\": \"module\",\n \"repository\": \"tscircuit/pcb-viewer\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"start\": \"storybook dev -p 6006\",\n \"build\": \"tsup ./src/index.tsx --platform browser --dts --sourcemap --format esm --outDir dist\",\n \"yalc\": \"npm run build && yalc push\",\n \"storybook\": \"storybook dev -p 6006\",\n \"build-storybook\": \"storybook build\",\n \"format\": \"biome format . --write\",\n \"format:check\": \"biome format .\"\n },\n \"files\": [\n \"dist\"\n ],\n \"devDependencies\": {\n \"@biomejs/biome\": \"^1.9.4\",\n \"@semantic-release/commit-analyzer\": \"^9.0.2\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/npm\": \"^9.0.1\",\n \"@semantic-release/release-notes-generator\": \"^10.0.3\",\n \"@storybook/nextjs\": \"^8.0.6\",\n \"@storybook/react\": \"^8.0.6\",\n \"@swc/core\": \"^1.4.12\",\n \"@tscircuit/eagle-xml-converter\": \"^1.0.0\",\n \"@tscircuit/props\": \"^0.0.193\",\n \"@tscircuit/soup-util\": \"^0.0.41\",\n \"@types/color\": \"^3.0.6\",\n \"@types/node\": \"18.7.23\",\n \"@types/react\": \"^18.3.3\",\n \"circuit-json\": \"^0.0.190\",\n \"next\": \"^14.1.4\",\n \"pixi.js\": \"^8.6.6\",\n \"react\": \"^18.2.0\",\n \"react-dom\": \"^18.2.0\",\n \"react-use\": \"^17.4.0\",\n \"storybook\": \"^8.0.6\",\n \"tsup\": \"^8.0.2\",\n \"type-fest\": \"^3.0.0\",\n \"typescript\": \"^5.4.4\",\n \"use-mouse-matrix-transform\": \"^1.3.4\",\n \"zod\": \"^3.23.5\"\n },\n \"peerDependencies\": {\n \"react\": \"*\"\n },\n \"dependencies\": {\n \"@emotion/css\": \"^11.11.2\",\n \"@tscircuit/core\": \"^0.0.424\",\n \"@tscircuit/math-utils\": \"^0.0.18\",\n \"circuit-json-to-connectivity-map\": \"^0.0.22\",\n \"circuit-to-svg\": \"^0.0.130\",\n \"color\": \"^4.2.3\",\n \"graphics-debug\": \"^0.0.24\",\n \"react-supergrid\": \"^1.0.10\",\n \"react-toastify\": \"^10.0.5\",\n \"transformation-matrix\": \"^2.13.0\",\n \"zustand\": \"^4.5.2\"\n }\n}\n","import { useEffect } from \"react\"\nimport { useGlobalStore } from \"global-store\"\n\nexport const useHotKey = (key: string, onUse: () => void) => {\n const isMouseOverContainer = useGlobalStore(\n (s) => s.is_mouse_over_container,\n ) as boolean\n\n useEffect(() => {\n if (!key || typeof onUse !== \"function\") return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const keyParts = key.split(\"+\")\n\n const ctrlRequired = keyParts.includes(\"ctrl\")\n const shiftRequired = keyParts.includes(\"shift\")\n const altRequired = keyParts.includes(\"alt\")\n const metaRequired = keyParts.includes(\"meta\")\n const mainKey = keyParts[keyParts.length - 1]\n\n if (\n isMouseOverContainer &&\n (!ctrlRequired || event.ctrlKey) &&\n (!shiftRequired || event.shiftKey) &&\n (!altRequired || event.altKey) &&\n (!metaRequired || event.metaKey) &&\n event.key.toLowerCase() === mainKey.toLowerCase()\n ) {\n event.preventDefault()\n onUse()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [key, onUse])\n}\n"],"mappings":"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CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;EACtD,CAAC,WAAW,WAAW,WAAW,WAAW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","names":["util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","size","processed","r","_a","_b","ZodFirstPartyTypeKind","size","z","su","source_port","jsx","useEffect","useMemo","useRef","useState","useEffect","useEffect","useMemo","useMemo","_a","compose","scale","translate","translate","compose","applyToPoint","scale","useEffect","useState","getFullConnectivityMapFromCircuitJson","useCallback","useMemo","useState","point","length","current","scale","point","useEffect","useRef","applyToPoint","compose","identity","translate","identity","compose","translate","applyToPoint","angle","point","size","color","compose","translate","applyToPoint","jsx","useRef","useEffect","z","useEffect","useRef","jsx","jsxs","useRef","useEffect","useEffect","useRef","applyToPoint","identity","jsx","jsxs","identity","useRef","useEffect","width","height","applyToPoint","useEffect","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","container","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","pcb_component","point","e","Fragment","useEffect","useRef","useState","applyToPoint","identity","inverse","useEffect","jsx","jsxs","jsx","jsxs","point","distance","identity","useRef","useState","applyToPoint","useEffect","inverse","e","Fragment","pcb_port","css","useRef","applyToPoint","identity","Fragment","jsx","jsxs","identity","useRef","el","applyToPoint","css","useState","useMemo","applyToPoint","inverse","useEffect","useState","current","jsx","useState","useEffect","color","rotation","jsx","jsxs","distance","useState","useMemo","highlightedPrimitives","applyToPoint","transform","primitives","inverse","applyToPoint","identity","useMemo","jsx","jsxs","distance","identity","applyToPoint","Fragment","useState","css","useEffect","useEffect","jsx","jsxs","css","useState","Fragment","jsx","useMemo","primitivesWithoutInteractionMetadata","connectivityMap","getFullConnectivityMapFromCircuitJson","useState","useCallback","jsx","jsxs","compose","translate","scale","useState","useRef","height","useEffect","useMemo"]}