@tscircuit/pcb-viewer 1.11.21 → 1.11.22

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/@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/apply-edit-events.ts","../src/lib/apply-edit-events/apply-edit-trace-hint-event.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/index.ts","../src/components/CanvasElementsRenderer.tsx","../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/lib/util/expand-stroke.ts","../src/lib/convert-element-to-primitive.ts","../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/DimensionOverlay.tsx","../src/components/ToolbarOverlay.tsx","../package.json","../src/hooks/useHotKey.ts","../src/components/ErrorOverlay.tsx","../src/components/EditPlacementOverlay.tsx","../src/components/EditTraceHintOverlay.tsx","../src/components/HotkeyActionMenu.tsx","../src/components/RatsNestOverlay.tsx","../src/lib/util/addInteractionMetadataToPrimitives.ts"],"sourcesContent":["import { useRenderedCircuit } from \"@tscircuit/core\"\nimport { findBoundsAndCenter } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { ContextProviders } from \"components/ContextProviders\"\nimport type { StateProps } from \"global-store\"\nimport { applyEditEvents } from \"lib/apply-edit-events\"\nimport type { EditEvent } from \"lib/edit-events\"\nimport { ToastContainer } from \"lib/toast\"\nimport { useEffect, useMemo, 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\"\n\nconst defaultTransform = compose(translate(400, 300), scale(40, -40))\n\ntype Props = {\n children?: any\n circuitJson?: AnyCircuitElement[]\n soup?: any // @deprecated Use circuitJson instead\n height?: number\n allowEditing?: boolean\n editEvents?: EditEvent[]\n initialState?: Partial<StateProps>\n onEditEventsChanged?: (editEvents: EditEvent[]) => void\n}\n\nexport const PCBViewer = ({\n children,\n soup,\n circuitJson,\n height = 600,\n initialState,\n allowEditing = true,\n editEvents: editEventsProp,\n onEditEventsChanged,\n}: Props) => {\n circuitJson ??= soup\n const {\n circuitJson: circuitJsonFromChildren,\n error: errorFromChildren,\n isLoading,\n } = useRenderedCircuit(children)\n circuitJson ??= circuitJsonFromChildren ?? []\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 })\n let [editEvents, setEditEvents] = useState<EditEvent[]>([])\n editEvents = editEventsProp ?? editEvents\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 setTransform(\n 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 }\n\n useEffect(() => {\n if (refDimensions && refDimensions.width !== 0 && (children || soup)) {\n resetTransform()\n }\n }, [children, refDimensions])\n\n const pcbElmsPreEdit: AnyCircuitElement[] = useMemo(\n () =>\n circuitJson.filter(\n (e: any) => e.type.startsWith(\"pcb_\") || e.type.startsWith(\"source_\"),\n ),\n [circuitJson],\n )\n\n const elements = useMemo(() => {\n return applyEditEvents(pcbElmsPreEdit, editEvents)\n }, [pcbElmsPreEdit, editEvents])\n\n const onCreateEditEvent = (event: EditEvent) => {\n setEditEvents([...editEvents, event])\n onEditEventsChanged?.([...editEvents, event])\n }\n const onModifyEditEvent = (modifiedEvent: Partial<EditEvent>) => {\n const newEditEvents: EditEvent[] = editEvents.map((e) =>\n e.edit_event_id === modifiedEvent.edit_event_id\n ? ({ ...e, ...modifiedEvent } as EditEvent)\n : e,\n )\n setEditEvents(newEditEvents)\n onEditEventsChanged?.(newEditEvents)\n }\n\n return (\n <div ref={transformRef as any}>\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 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}\n />\n <ToastContainer />\n </ContextProviders>\n </div>\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};\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 if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\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","import { 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","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\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 setIsShowingMultipleTracesLength: (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 ...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 }) 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 { transformPCBElement, transformPCBElements } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport type { EditEvent } from \"./edit-events\"\nimport { translate } from \"transformation-matrix\"\nimport { applyTraceHintEditEvent } from \"./apply-edit-events/apply-edit-trace-hint-event\"\n\nexport const applyEditEvents = (\n soup: AnyCircuitElement[],\n edit_events: EditEvent[],\n): AnyCircuitElement[] => {\n soup = JSON.parse(JSON.stringify(soup))\n\n for (const edit_event of edit_events) {\n if (edit_event.pcb_edit_event_type === \"edit_component_location\") {\n const mat = translate(\n edit_event.new_center.x - edit_event.original_center.x,\n edit_event.new_center.y - edit_event.original_center.y,\n )\n // TODO Future work: recurse here in case there's a nested component\n soup = soup.map((e: any) =>\n e.pcb_component_id !== edit_event.pcb_component_id\n ? e\n : transformPCBElement(e, mat),\n )\n } else if (edit_event.pcb_edit_event_type === \"edit_trace_hint\") {\n soup = applyTraceHintEditEvent(soup, edit_event)\n }\n }\n\n return soup\n}\n","import { AnyCircuitElement } from \"circuit-json\"\nimport { EditTraceHintEvent } from \"lib/edit-events\"\nimport { su } from \"@tscircuit/soup-util\"\n\nexport const applyTraceHintEditEvent = (\n soup: AnyCircuitElement[],\n edit_event: EditTraceHintEvent,\n): AnyCircuitElement[] => {\n const existing_trace_hint = soup.find(\n (th) =>\n th.type === \"pcb_trace_hint\" &&\n th.pcb_trace_hint_id === edit_event.pcb_trace_hint_id,\n )\n\n if (existing_trace_hint) {\n soup = soup.map((e: any) =>\n e.pcb_trace_hint_id === edit_event.pcb_trace_hint_id\n ? {\n ...e,\n route: edit_event.route,\n }\n : e,\n )\n } else {\n // create the trace hint\n const pcb_port = su(soup).pcb_port.get(edit_event.pcb_port_id!)\n\n // console.log(\"edit_event\", edit_event, pcb_port)\n\n soup = soup\n // TODO until builder supports multiple trace hints, replace any\n // old trace hints on this same port\n .filter(\n (e) =>\n !(\n e.type === \"pcb_trace_hint\" &&\n e.pcb_port_id === edit_event.pcb_port_id\n ),\n )\n .concat([\n {\n type: \"pcb_trace_hint\",\n pcb_trace_hint_id: edit_event.pcb_trace_hint_id!,\n route: edit_event.route,\n pcb_port_id: edit_event.pcb_port_id!,\n pcb_component_id: pcb_port?.pcb_component_id!,\n },\n ])\n }\n\n return soup\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 {\n Matrix,\n identity,\n scale,\n translate,\n compose,\n applyToPoint,\n} from \"transformation-matrix\"\nimport { useCallback, useEffect, useReducer, useRef, useState } from \"react\"\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) => 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 useEffect(() => {\n const canvasElm: HTMLCanvasElement | null =\n props.canvasElm ?? extRef.current\n if (canvasElm && !outerCanvasElm) {\n // Always re-render when the canvas element is known\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\n setTransform(compose(translate(m1.x - m0.x, m1.y - m0.y), init_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 the mouseout occurs in the bounding box of the canvasElm, it's\n // defocusing on internal elements, so we should ignore it\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\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 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 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 }, [outerCanvasElm, waitCounter, extChangeCounter, lastDragCancelTime, props.enabled, props.shouldDrag])\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 React, { useCallback, useState } from \"react\"\nimport { CanvasPrimitiveRenderer } from \"./CanvasPrimitiveRenderer\"\nimport { pcb_port, type AnyCircuitElement } from \"circuit-json\"\nimport { useMemo } from \"react\"\nimport { convertElementToPrimitives } from \"../lib/convert-element-to-primitive\"\nimport { Matrix } from \"transformation-matrix\"\nimport { GridConfig, Primitive } from \"lib/types\"\nimport { MouseElementTracker } from \"./MouseElementTracker\"\nimport { DimensionOverlay } from \"./DimensionOverlay\"\nimport { ToolbarOverlay } from \"./ToolbarOverlay\"\nimport { ErrorOverlay } from \"./ErrorOverlay\"\nimport { EditPlacementOverlay } from \"./EditPlacementOverlay\"\nimport { EditEvent } from \"lib/edit-events\"\nimport { EditTraceHintOverlay } from \"./EditTraceHintOverlay\"\nimport { RatsNestOverlay } from \"./RatsNestOverlay\"\nimport { getFullConnectivityMapFromCircuitJson } from \"circuit-json-to-connectivity-map\"\nimport { addInteractionMetadataToPrimitives } from \"lib/util/addInteractionMetadataToPrimitives\"\n\nexport interface CanvasElementsRendererProps {\n elements: AnyCircuitElement[]\n transform?: Matrix\n width?: number\n height?: number\n grid?: GridConfig\n allowEditing: boolean\n cancelPanDrag: Function\n onCreateEditEvent: (event: EditEvent) => void\n onModifyEditEvent: (event: Partial<EditEvent>) => 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 [primitives, setPrimitives] = useState<Primitive[]>(\n primitivesWithoutInteractionMetadata,\n )\n\n return (\n <MouseElementTracker\n elements={elements}\n transform={transform}\n primitives={primitivesWithoutInteractionMetadata}\n onMouseHoverOverPrimitives={(primitivesHoveredOver) => {\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 const newPrimitives = addInteractionMetadataToPrimitives({\n primitivesWithoutInteractionMetadata,\n drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet,\n })\n\n setPrimitives(newPrimitives)\n }}\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 transform={transform!}>\n <ToolbarOverlay elements={elements}>\n <ErrorOverlay transform={transform} elements={elements}>\n <RatsNestOverlay transform={transform} soup={elements}>\n <CanvasPrimitiveRenderer\n transform={transform}\n primitives={primitives}\n width={props.width}\n height={props.height}\n grid={props.grid}\n />\n </RatsNestOverlay>\n </ErrorOverlay>\n </ToolbarOverlay>\n </DimensionOverlay>\n </EditTraceHintOverlay>\n </EditPlacementOverlay>\n </MouseElementTracker>\n )\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\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 {all_layers\n .map((l) => l.replace(/-/g, \"\"))\n .concat([\"drill\", \"other\"])\n .map((layer, i) => (\n <canvas\n key={layer}\n ref={(el) => {\n canvasRefs.current ??= {}\n canvasRefs.current[layer] = el!\n }}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n }}\n width={width}\n height={height}\n ></canvas>\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,\n}\n\nexport type LayerNameForColor = keyof typeof LAYER_NAME_TO_COLOR\n\nexport const DEFAULT_DRAW_ORDER = [\n \"top\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n \"bottom\",\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([foregroundLayer, \"drill\", \"other\", \"board\"])\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 canvas.style.zIndex = `${zIndexMap.topLayer - i}`\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(232, 178, 167)\",\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 topLayer: 10, // each layer after this is 1 less than the previous\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 { 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 return (\n text.text.length * text.size * LETTER_HEIGHT_TO_WIDTH_RATIO +\n (text.text.length - 1) * text.size * LETTER_HEIGHT_TO_SPACE_RATIO\n )\n}\n\nexport const convertTextToLines = (text: Text): Line[] => {\n const strokeWidth = text.size / 8\n const letterWidth = text.size * LETTER_HEIGHT_TO_WIDTH_RATIO\n const letterSpace = text.size * LETTER_HEIGHT_TO_SPACE_RATIO\n\n const lines: Line[] = []\n for (let letterIndex = 0; letterIndex < text.text.length; letterIndex++) {\n const letter = text.text[letterIndex]\n const letterLines = lineAlphabet[letter.toUpperCase()]\n if (!letterLines) continue\n for (const { x1, y1, x2, y2 } of letterLines) {\n lines.push({\n pcb_drawing_type: \"line\",\n x1:\n text.x + (letterWidth + letterSpace) * letterIndex + letterWidth * x1,\n y1: text.y + text.size * y1,\n x2:\n text.x + (letterWidth + letterSpace) * letterIndex + letterWidth * x2,\n y2: text.y + text.size * y2,\n width: strokeWidth,\n layer: text.layer,\n unit: text.unit,\n })\n }\n }\n\n return lines\n}\n","import { Rotation } from \"circuit-json\"\nimport { Drawer, LAYER_NAME_TO_COLOR } from \"./Drawer\"\nimport { rotateText } from \"./util/rotate-text\"\nimport { convertTextToLines, getTextWidth } from \"./convert-text-to-lines\"\nimport {\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) {\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: 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 if (text.align === \"top_left\") {\n alignOffset.y = -textHeight\n } else if (text.align === \"bottom_right\") {\n alignOffset.x = -textWidth\n } else if (text.align === \"top_right\") {\n alignOffset.x = -textWidth\n alignOffset.y = -textHeight\n } else if (text.align === \"center\") {\n alignOffset.x = -textWidth / 2\n alignOffset.y = -textHeight / 2\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 if (primitive._element?.shape === \"rotated_rect\") {\n return drawRotatedRect(drawer, {\n ...primitive,\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 // sort primitives by draw order\n primitives.sort((a, b) => {\n const layerOrder = [\"bottom\", \"top\", \"drill\"]\n return layerOrder.indexOf(a.layer) - layerOrder.indexOf(b.layer)\n })\n primitives.forEach((primitive) => drawPrimitive(drawer, primitive))\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\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 {\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 { x, y, width, height } = 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: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n mesh_fill: true,\n },\n ]\n }\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 // 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: element.route[0].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 radius: r.outer_diameter / 2,\n fill: true,\n layer: element.route.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 case \"pcb_silkscreen_pill\": {\n return [\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"pill\",\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_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: `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\"\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 }\n\n // console.warn(`Unsupported element type: ${element.type}`)\n return []\n}\n","import React, { useState } from \"react\"\nimport { useMemo } from \"react\"\nimport { Matrix, applyToPoint, inverse } from \"transformation-matrix\"\nimport { Primitive } from \"lib/types\"\nimport { ElementOverlayBox } from \"./ElementOverlayBox\"\nimport { AnyCircuitElement } from \"circuit-json\"\nimport { ifSetsMatchExactly } from \"lib/util/if-sets-match-exactly\"\nimport { pointToSegmentDistance } from \"@tscircuit/math-utils\"\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 let 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 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 setMousePos({ x, y })\n const rwPoint = applyToPoint(inverse(transform), { x, y })\n const newMousedPrimitives: Primitive[] = []\n for (const primitive of primitives) {\n if (!primitive._element) continue\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 =\n Math.max(lineWidth * 25, 2) / transform!.a\n\n if (distance < detectionThreshold) {\n newMousedPrimitives.push(primitive)\n }\n continue\n }\n // Check if primitive has x,y coordinates\n if (!(\"x\" in primitive && \"y\" in primitive)) continue\n\n // Handle different primitive types\n let w = 0,\n 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 // Skip primitives without size\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 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 >\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 ma\n 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 { zIndexMap } from \"lib/util/z-index-map\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { Matrix, applyToPoint, identity, inverse } from \"transformation-matrix\"\n\ninterface Props {\n transform?: Matrix\n children: any\n}\n\nexport const DimensionOverlay = ({ children, transform }: 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 e.preventDefault()\n }\n if (e.key === \"Escape\") {\n setDimensionToolVisible(false)\n setDimensionToolStretching(false)\n }\n }\n\n const addKeyListener = () => {\n if (container) {\n container.addEventListener(\"keydown\", down)\n }\n }\n\n const removeKeyListener = () => {\n if (container) {\n container.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 tabIndex={0}\n style={{ position: \"relative\" }}\n onMouseEnter={() => {\n if (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 <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 Math.pow(dEnd.x - dStart.x, 2) + Math.pow(dEnd.y - dStart.y, 2),\n ).toFixed(2)}\n </div>\n </>\n )}\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 ] = 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 ])\n const setEditMode = useGlobalStore((s) => s.setEditMode)\n const setIsShowingRatsNest = useGlobalStore((s) => s.setIsShowingRatsNest)\n const setIsShowingMultipleTracesLength = useGlobalStore(\n (s) => s.setIsShowingMultipleTracesLength,\n )\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 </div>\n )}\n </div>\n </ToolbarButton>\n </div>\n </div>\n )\n}\n","{\n \"name\": \"@tscircuit/pcb-viewer\",\n \"version\": \"1.11.20\",\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/core\": \"0.0.261\",\n \"@tscircuit/eagle-xml-converter\": \"^1.0.0\",\n \"@tscircuit/props\": \"^0.0.129\",\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.128\",\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.0\",\n \"zod\": \"^3.23.5\"\n },\n \"peerDependencies\": {\n \"react\": \"*\",\n \"@tscircuit/core\": \"*\"\n },\n \"dependencies\": {\n \"@emotion/css\": \"^11.11.2\",\n \"circuit-json-to-connectivity-map\": \"^0.0.18\",\n \"@tscircuit/math-utils\": \"^0.0.10\",\n \"circuit-to-svg\": \"^0.0.36\",\n \"color\": \"^4.2.3\",\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","import { css } from \"@emotion/css\"\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\"\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\nexport const ErrorOverlay = ({ children, transform, elements }: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\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 } = el\n\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\n if (!port1 || !port2) return null\n\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 </div>\n )\n}\n","import type { AnyCircuitElement, PcbComponent } from \"circuit-json\"\nimport { useGlobalStore } from \"global-store\"\nimport { EditEvent } from \"lib/edit-events\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { Matrix, applyToPoint, identity, inverse } from \"transformation-matrix\"\n\ninterface Props {\n transform?: Matrix\n children: any\n soup: AnyCircuitElement[]\n disabled?: boolean\n cancelPanDrag: Function\n onCreateEditEvent: (event: EditEvent) => void\n onModifyEditEvent: (event: Partial<EditEvent>) => void\n}\n\nconst isInsideOf = (\n pcb_component: PcbComponent,\n point: { x: number; y: number },\n padding: number = 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 (isNaN(x) || 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 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 (isNaN(x) || 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 { type EditTraceHintEvent } from \"lib/edit-events\"\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\"\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 Math.pow(point.x - hole.x, 2) + Math.pow(point.y - hole.y, 2),\n )\n return distance <= hole.outer_diameter / 2 + padding\n } else {\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 { 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 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 Math.pow(sourcePoint.x - pos.x, 2) +\n Math.pow(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 portId = port.pcb_port_id\n const netId = idToNetMap[portId]\n\n let isInNet = false\n for (const trace of sourceTraces) {\n const sourceTrace = trace.connected_source_port_ids.includes(\n su(soup).source_port.getUsing({ pcb_port_id: portId })\n ?.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: `${portId}-${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 { 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"],"mappings":"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AC,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,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;AACxD;AA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","names":["util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","size","processed","ZodFirstPartyTypeKind","size","length","z","su","source_port","pcb_port","jsx","useEffect","useMemo","useState","useEffect","useEffect","useMemo","useMemo","_a","compose","scale","translate","translate","applyToPoint","useEffect","useState","useState","useEffect","useRef","applyToPoint","compose","identity","translate","identity","compose","translate","applyToPoint","angle","point","size","color","compose","translate","applyToPoint","jsx","useRef","useEffect","z","useMemo","point","length","current","scale","point","useState","useMemo","applyToPoint","inverse","useEffect","useState","current","jsx","useState","useEffect","color","rotation","jsx","jsxs","useState","useMemo","highlightedPrimitives","applyToPoint","inverse","distance","useEffect","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","container","Fragment","useState","useEffect","useEffect","jsx","jsxs","useState","Fragment","css","useRef","applyToPoint","identity","Fragment","jsx","jsxs","el","css","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","pcb_component","point","e","Fragment","useEffect","useRef","useState","applyToPoint","identity","inverse","css","useEffect","jsx","jsxs","jsx","jsxs","point","distance","identity","useRef","useState","applyToPoint","useEffect","inverse","e","Fragment","pcb_port","applyToPoint","identity","useMemo","jsx","jsxs","distance","identity","applyToPoint","getFullConnectivityMapFromCircuitJson","jsx","useMemo","primitivesWithoutInteractionMetadata","connectivityMap","getFullConnectivityMapFromCircuitJson","useState","jsx","jsxs","compose","translate","scale","useState","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/@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/apply-edit-events.ts","../src/lib/apply-edit-events/apply-edit-trace-hint-event.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/index.ts","../src/components/CanvasElementsRenderer.tsx","../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/lib/util/expand-stroke.ts","../src/lib/convert-element-to-primitive.ts","../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/DimensionOverlay.tsx","../src/components/ToolbarOverlay.tsx","../package.json","../src/hooks/useHotKey.ts","../src/components/ErrorOverlay.tsx","../src/components/EditPlacementOverlay.tsx","../src/components/EditTraceHintOverlay.tsx","../src/components/HotkeyActionMenu.tsx","../src/components/RatsNestOverlay.tsx","../src/lib/util/addInteractionMetadataToPrimitives.ts"],"sourcesContent":["import { useRenderedCircuit } from \"@tscircuit/core\"\nimport { findBoundsAndCenter } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { ContextProviders } from \"components/ContextProviders\"\nimport type { StateProps } from \"global-store\"\nimport { applyEditEvents } from \"lib/apply-edit-events\"\nimport type { EditEvent } from \"lib/edit-events\"\nimport { ToastContainer } from \"lib/toast\"\nimport { useEffect, useMemo, 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\"\n\nconst defaultTransform = compose(translate(400, 300), scale(40, -40))\n\ntype Props = {\n children?: any\n circuitJson?: AnyCircuitElement[]\n soup?: any // @deprecated Use circuitJson instead\n height?: number\n allowEditing?: boolean\n editEvents?: EditEvent[]\n initialState?: Partial<StateProps>\n onEditEventsChanged?: (editEvents: EditEvent[]) => void\n}\n\nexport const PCBViewer = ({\n children,\n soup,\n circuitJson,\n height = 600,\n initialState,\n allowEditing = true,\n editEvents: editEventsProp,\n onEditEventsChanged,\n}: Props) => {\n circuitJson ??= soup\n const {\n circuitJson: circuitJsonFromChildren,\n error: errorFromChildren,\n isLoading,\n } = useRenderedCircuit(children)\n circuitJson ??= circuitJsonFromChildren ?? []\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 })\n let [editEvents, setEditEvents] = useState<EditEvent[]>([])\n editEvents = editEventsProp ?? editEvents\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 setTransform(\n 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 }\n\n useEffect(() => {\n if (refDimensions && refDimensions.width !== 0 && (children || soup)) {\n resetTransform()\n }\n }, [children, refDimensions])\n\n const pcbElmsPreEdit: AnyCircuitElement[] = useMemo(\n () =>\n circuitJson.filter(\n (e: any) => e.type.startsWith(\"pcb_\") || e.type.startsWith(\"source_\"),\n ),\n [circuitJson],\n )\n\n const elements = useMemo(() => {\n return applyEditEvents(pcbElmsPreEdit, editEvents)\n }, [pcbElmsPreEdit, editEvents])\n\n const onCreateEditEvent = (event: EditEvent) => {\n setEditEvents([...editEvents, event])\n onEditEventsChanged?.([...editEvents, event])\n }\n const onModifyEditEvent = (modifiedEvent: Partial<EditEvent>) => {\n const newEditEvents: EditEvent[] = editEvents.map((e) =>\n e.edit_event_id === modifiedEvent.edit_event_id\n ? ({ ...e, ...modifiedEvent } as EditEvent)\n : e,\n )\n setEditEvents(newEditEvents)\n onEditEventsChanged?.(newEditEvents)\n }\n\n return (\n <div ref={transformRef as any}>\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 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}\n />\n <ToastContainer />\n </ContextProviders>\n </div>\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};\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 if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\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","import { 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","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\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 setIsShowingMultipleTracesLength: (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 ...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 }) 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 { transformPCBElement, transformPCBElements } from \"@tscircuit/soup-util\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport type { EditEvent } from \"./edit-events\"\nimport { translate } from \"transformation-matrix\"\nimport { applyTraceHintEditEvent } from \"./apply-edit-events/apply-edit-trace-hint-event\"\n\nexport const applyEditEvents = (\n soup: AnyCircuitElement[],\n edit_events: EditEvent[],\n): AnyCircuitElement[] => {\n soup = JSON.parse(JSON.stringify(soup))\n\n for (const edit_event of edit_events) {\n if (edit_event.pcb_edit_event_type === \"edit_component_location\") {\n const mat = translate(\n edit_event.new_center.x - edit_event.original_center.x,\n edit_event.new_center.y - edit_event.original_center.y,\n )\n // TODO Future work: recurse here in case there's a nested component\n soup = soup.map((e: any) =>\n e.pcb_component_id !== edit_event.pcb_component_id\n ? e\n : transformPCBElement(e, mat),\n )\n } else if (edit_event.pcb_edit_event_type === \"edit_trace_hint\") {\n soup = applyTraceHintEditEvent(soup, edit_event)\n }\n }\n\n return soup\n}\n","import { AnyCircuitElement } from \"circuit-json\"\nimport { EditTraceHintEvent } from \"lib/edit-events\"\nimport { su } from \"@tscircuit/soup-util\"\n\nexport const applyTraceHintEditEvent = (\n soup: AnyCircuitElement[],\n edit_event: EditTraceHintEvent,\n): AnyCircuitElement[] => {\n const existing_trace_hint = soup.find(\n (th) =>\n th.type === \"pcb_trace_hint\" &&\n th.pcb_trace_hint_id === edit_event.pcb_trace_hint_id,\n )\n\n if (existing_trace_hint) {\n soup = soup.map((e: any) =>\n e.pcb_trace_hint_id === edit_event.pcb_trace_hint_id\n ? {\n ...e,\n route: edit_event.route,\n }\n : e,\n )\n } else {\n // create the trace hint\n const pcb_port = su(soup).pcb_port.get(edit_event.pcb_port_id!)\n\n // console.log(\"edit_event\", edit_event, pcb_port)\n\n soup = soup\n // TODO until builder supports multiple trace hints, replace any\n // old trace hints on this same port\n .filter(\n (e) =>\n !(\n e.type === \"pcb_trace_hint\" &&\n e.pcb_port_id === edit_event.pcb_port_id\n ),\n )\n .concat([\n {\n type: \"pcb_trace_hint\",\n pcb_trace_hint_id: edit_event.pcb_trace_hint_id!,\n route: edit_event.route,\n pcb_port_id: edit_event.pcb_port_id!,\n pcb_component_id: pcb_port?.pcb_component_id!,\n },\n ])\n }\n\n return soup\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 {\n Matrix,\n identity,\n scale,\n translate,\n compose,\n applyToPoint,\n} from \"transformation-matrix\"\nimport { useCallback, useEffect, useReducer, useRef, useState } from \"react\"\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) => 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 useEffect(() => {\n const canvasElm: HTMLCanvasElement | null =\n props.canvasElm ?? extRef.current\n if (canvasElm && !outerCanvasElm) {\n // Always re-render when the canvas element is known\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\n setTransform(compose(translate(m1.x - m0.x, m1.y - m0.y), init_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 the mouseout occurs in the bounding box of the canvasElm, it's\n // defocusing on internal elements, so we should ignore it\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\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 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 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 }, [outerCanvasElm, waitCounter, extChangeCounter, lastDragCancelTime, props.enabled, props.shouldDrag])\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 React, { useCallback, useState } from \"react\"\nimport { CanvasPrimitiveRenderer } from \"./CanvasPrimitiveRenderer\"\nimport { pcb_port, type AnyCircuitElement } from \"circuit-json\"\nimport { useMemo } from \"react\"\nimport { convertElementToPrimitives } from \"../lib/convert-element-to-primitive\"\nimport { Matrix } from \"transformation-matrix\"\nimport { GridConfig, Primitive } from \"lib/types\"\nimport { MouseElementTracker } from \"./MouseElementTracker\"\nimport { DimensionOverlay } from \"./DimensionOverlay\"\nimport { ToolbarOverlay } from \"./ToolbarOverlay\"\nimport { ErrorOverlay } from \"./ErrorOverlay\"\nimport { EditPlacementOverlay } from \"./EditPlacementOverlay\"\nimport { EditEvent } from \"lib/edit-events\"\nimport { EditTraceHintOverlay } from \"./EditTraceHintOverlay\"\nimport { RatsNestOverlay } from \"./RatsNestOverlay\"\nimport { getFullConnectivityMapFromCircuitJson } from \"circuit-json-to-connectivity-map\"\nimport { addInteractionMetadataToPrimitives } from \"lib/util/addInteractionMetadataToPrimitives\"\n\nexport interface CanvasElementsRendererProps {\n elements: AnyCircuitElement[]\n transform?: Matrix\n width?: number\n height?: number\n grid?: GridConfig\n allowEditing: boolean\n cancelPanDrag: Function\n onCreateEditEvent: (event: EditEvent) => void\n onModifyEditEvent: (event: Partial<EditEvent>) => 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 [primitives, setPrimitives] = useState<Primitive[]>(\n primitivesWithoutInteractionMetadata,\n )\n\n return (\n <MouseElementTracker\n elements={elements}\n transform={transform}\n primitives={primitivesWithoutInteractionMetadata}\n onMouseHoverOverPrimitives={(primitivesHoveredOver) => {\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 const newPrimitives = addInteractionMetadataToPrimitives({\n primitivesWithoutInteractionMetadata,\n drawingObjectIdsWithMouseOver,\n primitiveIdsInMousedOverNet,\n })\n\n setPrimitives(newPrimitives)\n }}\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 transform={transform!}>\n <ToolbarOverlay elements={elements}>\n <ErrorOverlay transform={transform} elements={elements}>\n <RatsNestOverlay transform={transform} soup={elements}>\n <CanvasPrimitiveRenderer\n transform={transform}\n primitives={primitives}\n width={props.width}\n height={props.height}\n grid={props.grid}\n />\n </RatsNestOverlay>\n </ErrorOverlay>\n </ToolbarOverlay>\n </DimensionOverlay>\n </EditTraceHintOverlay>\n </EditPlacementOverlay>\n </MouseElementTracker>\n )\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\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 {all_layers\n .map((l) => l.replace(/-/g, \"\"))\n .concat([\"drill\", \"other\"])\n .map((layer, i) => (\n <canvas\n key={layer}\n ref={(el) => {\n canvasRefs.current ??= {}\n canvasRefs.current[layer] = el!\n }}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n pointerEvents: \"none\",\n }}\n width={width}\n height={height}\n ></canvas>\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,\n}\n\nexport type LayerNameForColor = keyof typeof LAYER_NAME_TO_COLOR\n\nexport const DEFAULT_DRAW_ORDER = [\n \"top\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n \"bottom\",\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([foregroundLayer, \"drill\", \"other\", \"board\"])\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 canvas.style.zIndex = `${zIndexMap.topLayer - i}`\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(232, 178, 167)\",\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 topLayer: 10, // each layer after this is 1 less than the previous\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 { 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 return (\n text.text.length * text.size * LETTER_HEIGHT_TO_WIDTH_RATIO +\n (text.text.length - 1) * text.size * LETTER_HEIGHT_TO_SPACE_RATIO\n )\n}\n\nexport const convertTextToLines = (text: Text): Line[] => {\n const strokeWidth = text.size / 8\n const letterWidth = text.size * LETTER_HEIGHT_TO_WIDTH_RATIO\n const letterSpace = text.size * LETTER_HEIGHT_TO_SPACE_RATIO\n\n const lines: Line[] = []\n for (let letterIndex = 0; letterIndex < text.text.length; letterIndex++) {\n const letter = text.text[letterIndex]\n const letterLines = lineAlphabet[letter.toUpperCase()]\n if (!letterLines) continue\n for (const { x1, y1, x2, y2 } of letterLines) {\n lines.push({\n pcb_drawing_type: \"line\",\n x1:\n text.x + (letterWidth + letterSpace) * letterIndex + letterWidth * x1,\n y1: text.y + text.size * y1,\n x2:\n text.x + (letterWidth + letterSpace) * letterIndex + letterWidth * x2,\n y2: text.y + text.size * y2,\n width: strokeWidth,\n layer: text.layer,\n unit: text.unit,\n })\n }\n }\n\n return lines\n}\n","import { Rotation } from \"circuit-json\"\nimport { Drawer, LAYER_NAME_TO_COLOR } from \"./Drawer\"\nimport { rotateText } from \"./util/rotate-text\"\nimport { convertTextToLines, getTextWidth } from \"./convert-text-to-lines\"\nimport {\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) {\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: 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 if (text.align === \"top_left\") {\n alignOffset.y = -textHeight\n } else if (text.align === \"bottom_right\") {\n alignOffset.x = -textWidth\n } else if (text.align === \"top_right\") {\n alignOffset.x = -textWidth\n alignOffset.y = -textHeight\n } else if (text.align === \"center\") {\n alignOffset.x = -textWidth / 2\n alignOffset.y = -textHeight / 2\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 if (primitive._element?.shape === \"rotated_rect\") {\n return drawRotatedRect(drawer, {\n ...primitive,\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 // sort primitives by draw order\n primitives.sort((a, b) => {\n const layerOrder = [\"bottom\", \"top\", \"drill\"]\n return layerOrder.indexOf(a.layer) - layerOrder.indexOf(b.layer)\n })\n primitives.forEach((primitive) => drawPrimitive(drawer, primitive))\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\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 {\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 { x, y, width, height } = 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: \"top\",\n _element: element,\n _parent_pcb_component,\n _parent_source_component,\n mesh_fill: true,\n },\n ]\n }\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 // 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: element.route[0].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 radius: r.outer_diameter / 2,\n fill: true,\n layer: element.route.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 case \"pcb_silkscreen_pill\": {\n return [\n {\n _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,\n pcb_drawing_type: \"pill\",\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_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: `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\"\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 }\n\n // console.warn(`Unsupported element type: ${element.type}`)\n return []\n}\n","import React, { useState } from \"react\"\nimport { useMemo } from \"react\"\nimport { Matrix, applyToPoint, inverse } from \"transformation-matrix\"\nimport { Primitive } from \"lib/types\"\nimport { ElementOverlayBox } from \"./ElementOverlayBox\"\nimport { AnyCircuitElement } from \"circuit-json\"\nimport { ifSetsMatchExactly } from \"lib/util/if-sets-match-exactly\"\nimport { pointToSegmentDistance } from \"@tscircuit/math-utils\"\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 let 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 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 setMousePos({ x, y })\n const rwPoint = applyToPoint(inverse(transform), { x, y })\n const newMousedPrimitives: Primitive[] = []\n for (const primitive of primitives) {\n if (!primitive._element) continue\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 =\n Math.max(lineWidth * 25, 2) / transform!.a\n\n if (distance < detectionThreshold) {\n newMousedPrimitives.push(primitive)\n }\n continue\n }\n // Check if primitive has x,y coordinates\n if (!(\"x\" in primitive && \"y\" in primitive)) continue\n\n // Handle different primitive types\n let w = 0,\n 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 // Skip primitives without size\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 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 >\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 ma\n 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 { zIndexMap } from \"lib/util/z-index-map\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { Matrix, applyToPoint, identity, inverse } from \"transformation-matrix\"\n\ninterface Props {\n transform?: Matrix\n children: any\n}\n\nexport const DimensionOverlay = ({ children, transform }: 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 e.preventDefault()\n }\n if (e.key === \"Escape\") {\n setDimensionToolVisible(false)\n setDimensionToolStretching(false)\n }\n }\n\n const addKeyListener = () => {\n if (container) {\n container.addEventListener(\"keydown\", down)\n }\n }\n\n const removeKeyListener = () => {\n if (container) {\n container.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 tabIndex={0}\n style={{ position: \"relative\" }}\n onMouseEnter={() => {\n if (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 <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 Math.pow(dEnd.x - dStart.x, 2) + Math.pow(dEnd.y - dStart.y, 2),\n ).toFixed(2)}\n </div>\n </>\n )}\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 ] = 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 ])\n const setEditMode = useGlobalStore((s) => s.setEditMode)\n const setIsShowingRatsNest = useGlobalStore((s) => s.setIsShowingRatsNest)\n const setIsShowingMultipleTracesLength = useGlobalStore(\n (s) => s.setIsShowingMultipleTracesLength,\n )\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 </div>\n )}\n </div>\n </ToolbarButton>\n </div>\n </div>\n )\n}\n","{\n \"name\": \"@tscircuit/pcb-viewer\",\n \"version\": \"1.11.21\",\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/core\": \"0.0.262\",\n \"@tscircuit/eagle-xml-converter\": \"^1.0.0\",\n \"@tscircuit/props\": \"^0.0.129\",\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.128\",\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.0\",\n \"zod\": \"^3.23.5\"\n },\n \"peerDependencies\": {\n \"react\": \"*\",\n \"@tscircuit/core\": \"*\"\n },\n \"dependencies\": {\n \"@emotion/css\": \"^11.11.2\",\n \"circuit-json-to-connectivity-map\": \"^0.0.18\",\n \"@tscircuit/math-utils\": \"^0.0.10\",\n \"circuit-to-svg\": \"^0.0.36\",\n \"color\": \"^4.2.3\",\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","import { css } from \"@emotion/css\"\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\"\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\nexport const ErrorOverlay = ({ children, transform, elements }: Props) => {\n if (!transform) transform = identity()\n const containerRef = useRef<HTMLDivElement | null>(null)\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 } = el\n\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\n if (!port1 || !port2) return null\n\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 </div>\n )\n}\n","import type { AnyCircuitElement, PcbComponent } from \"circuit-json\"\nimport { useGlobalStore } from \"global-store\"\nimport { EditEvent } from \"lib/edit-events\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { Matrix, applyToPoint, identity, inverse } from \"transformation-matrix\"\n\ninterface Props {\n transform?: Matrix\n children: any\n soup: AnyCircuitElement[]\n disabled?: boolean\n cancelPanDrag: Function\n onCreateEditEvent: (event: EditEvent) => void\n onModifyEditEvent: (event: Partial<EditEvent>) => void\n}\n\nconst isInsideOf = (\n pcb_component: PcbComponent,\n point: { x: number; y: number },\n padding: number = 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 (isNaN(x) || 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 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 (isNaN(x) || 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 { type EditTraceHintEvent } from \"lib/edit-events\"\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\"\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 Math.pow(point.x - hole.x, 2) + Math.pow(point.y - hole.y, 2),\n )\n return distance <= hole.outer_diameter / 2 + padding\n } else {\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 { 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 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 Math.pow(sourcePoint.x - pos.x, 2) +\n Math.pow(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 portId = port.pcb_port_id\n const netId = idToNetMap[portId]\n\n let isInNet = false\n for (const trace of sourceTraces) {\n const sourceTrace = trace.connected_source_port_ids.includes(\n su(soup).source_port.getUsing({ pcb_port_id: portId })\n ?.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: `${portId}-${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 { 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"],"mappings":"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AC,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,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;AACxD;AA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","names":["util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","size","processed","ZodFirstPartyTypeKind","size","length","z","su","source_port","pcb_port","jsx","useEffect","useMemo","useState","useEffect","useEffect","useMemo","useMemo","_a","compose","scale","translate","translate","applyToPoint","useEffect","useState","useState","useEffect","useRef","applyToPoint","compose","identity","translate","identity","compose","translate","applyToPoint","angle","point","size","color","compose","translate","applyToPoint","jsx","useRef","useEffect","z","useMemo","point","length","current","scale","point","useState","useMemo","applyToPoint","inverse","useEffect","useState","current","jsx","useState","useEffect","color","rotation","jsx","jsxs","useState","useMemo","highlightedPrimitives","applyToPoint","inverse","distance","useEffect","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","container","Fragment","useState","useEffect","useEffect","jsx","jsxs","useState","Fragment","css","useRef","applyToPoint","identity","Fragment","jsx","jsxs","el","css","useRef","useState","applyToPoint","identity","inverse","jsx","jsxs","pcb_component","point","e","Fragment","useEffect","useRef","useState","applyToPoint","identity","inverse","css","useEffect","jsx","jsxs","jsx","jsxs","point","distance","identity","useRef","useState","applyToPoint","useEffect","inverse","e","Fragment","pcb_port","applyToPoint","identity","useMemo","jsx","jsxs","distance","identity","applyToPoint","getFullConnectivityMapFromCircuitJson","jsx","useMemo","primitivesWithoutInteractionMetadata","connectivityMap","getFullConnectivityMapFromCircuitJson","useState","jsx","jsxs","compose","translate","scale","useState","height","useEffect","useMemo"]}