@tscircuit/runframe 0.0.132 → 0.0.134

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.
@@ -7537,7 +7537,7 @@ Check the render method of %s.`,u0(xd)||"Unknown"));var Fc=X9(zl,nc);Fc.payload=
7537
7537
  ${xa.stack}`),la.complete=!0,"root"in this&&this.root&&this.root.emit("asyncEffect:end",{effectName:ua,componentDisplayName:this.getString(),phase:la.phase,error:xa.toString()})})}_emitRenderLifecycleEvent(ua,J){debug$4(`${ua}:${J} ${this.getString()}`);const la=`renderable:renderLifecycle:${ua}:${J}`,xa={renderId:this._renderId,componentDisplayName:this.getString(),type:la};"root"in this&&this.root&&(this.root.emit(la,xa),this.root.emit("renderable:renderLifecycle:anyEvent",{...xa,type:la}))}getString(){return this.constructor.name}_hasIncompleteAsyncEffects(){return this._asyncEffects.some(ua=>!ua.complete)}getCurrentRenderPhase(){return this._currentRenderPhase}getRenderGraph(){return{id:this._renderId,currentPhase:this._currentRenderPhase,renderPhaseStates:this.renderPhaseStates,shouldBeRemoved:this.shouldBeRemoved,children:this.children.map(ua=>ua.getRenderGraph())}}runRenderCycle(){for(const ua of orderedRenderPhases)this.runRenderPhaseForChildren(ua),this.runRenderPhase(ua)}runRenderPhase(ua){var ba,Sa,Ma;this._currentRenderPhase=ua;const J=this.renderPhaseStates[ua],la=J.initialized,xa=J.dirty;if(!la&&this.shouldBeRemoved)return;if(this.shouldBeRemoved&&la){this._emitRenderLifecycleEvent(ua,"start"),(ba=this==null?void 0:this[`remove${ua}`])==null||ba.call(this),J.initialized=!1,J.dirty=!1,this._emitRenderLifecycleEvent(ua,"end");return}const Aa=orderedRenderPhases.indexOf(ua)-1;if(Aa>=0){const Ra=orderedRenderPhases[Aa];if(this._asyncEffects.filter(La=>La.phase===Ra).some(La=>!La.complete))return}if(this._emitRenderLifecycleEvent(ua,"start"),la){xa&&((Sa=this==null?void 0:this[`update${ua}`])==null||Sa.call(this),J.dirty=!1),this._emitRenderLifecycleEvent(ua,"end");return}J.dirty=!1,(Ma=this==null?void 0:this[`doInitial${ua}`])==null||Ma.call(this),J.initialized=!0,this._emitRenderLifecycleEvent(ua,"end")}runRenderPhaseForChildren(ua){for(const J of this.children)J.runRenderPhaseForChildren(ua),J.runRenderPhase(ua)}renderError(ua){throw typeof ua=="string"?new Error(ua):new Error(JSON.stringify(ua,null,2))}},catalogue$1={},extendCatalogue=ua=>{const J=Object.fromEntries(Object.entries(ua).map(([la,xa])=>[la.toLowerCase(),xa]));Object.assign(catalogue$1,ua),Object.assign(catalogue$1,J)};function prepare$1(ua,J){const la=ua;return la.__tsci={...J},ua}var hostConfig={supportsMutation:!0,createInstance(ua,J){const la=catalogue$1[ua];if(!la)throw Object.keys(catalogue$1).length===0?new Error("No components registered in catalogue, did you forget to import lib/register-catalogue in your test file?"):new Error(`Unsupported component type (not registered in @tscircuit/core catalogue): "${ua}" See CREATING_NEW_COMPONENTS.md`);return prepare$1(new la(J),{})},createTextInstance(){return{}},appendInitialChild(ua,J){ua.add(J)},appendChild(ua,J){ua.add(J)},appendChildToContainer(ua,J){ua.add(J)},finalizeInitialChildren(){return!1},prepareUpdate(){return null},shouldSetTextContent(){return!1},getRootHostContext(){return{}},getChildHostContext(){return{}},prepareForCommit(){return null},resetAfterCommit(){},commitMount(){},commitUpdate(){},removeChild(){},clearContainer(){},supportsPersistence:!1,getPublicInstance(ua){return ua},preparePortalMount(ua){throw new Error("Function not implemented.")},scheduleTimeout(ua,J){throw new Error("Function not implemented.")},cancelTimeout(ua){throw new Error("Function not implemented.")},noTimeout:void 0,isPrimaryRenderer:!1,getInstanceFromNode(ua){throw new Error("Function not implemented.")},beforeActiveInstanceBlur(){throw new Error("Function not implemented.")},afterActiveInstanceBlur(){throw new Error("Function not implemented.")},prepareScopeUpdate:(ua,J)=>{throw new Error("Function not implemented.")},getInstanceFromScope:ua=>{throw new Error("Function not implemented.")},detachDeletedInstance:ua=>{throw new Error("Function not implemented.")},getCurrentEventPriority:()=>constantsExports$1.DefaultEventPriority,getCurrentUpdatePriority:()=>constantsExports$1.DefaultEventPriority,resolveUpdatePriority:()=>constantsExports$1.DefaultEventPriority,setCurrentUpdatePriority:()=>{},maySuspendCommit:()=>!1,supportsHydration:!1},reconciler$1;React.version.startsWith("19.")?reconciler$1=ReactReconciler(hostConfig):reconciler$1=ReactReconciler18(hostConfig);var createInstanceFromReactElement=ua=>{const J={children:[],props:{name:"$root"},add(ba){ba.parent=this,this.children.push(ba)},computePcbGlobalTransform(){return identity$3()}},la=[],xa=reconciler$1.createContainer(J,0,null,!1,null,"tsci",ba=>{console.log("Error in createContainer"),console.error(ba),la.push(ba)},null);if(React.version.startsWith("19.")?(reconciler$1.updateContainerSync(ua,xa,null,()=>{}),reconciler$1.flushSyncWork()):reconciler$1.updateContainer(ua,xa,null,()=>{}),la.length>0)throw la[0];const Aa=reconciler$1.getPublicRootInstance(xa);return Aa||J.children[0]},parsePinNumberFromLabelsOrThrow=(ua,J)=>{if(typeof ua=="number")return ua;if(ua.startsWith("pin"))return Number(ua.slice(3));if(!J)throw new Error(`No pin labels provided and pin number or label is not a number: "${ua}"`);for(const la in J)if((Array.isArray(J[la])?J[la]:[J[la]]).includes(ua))return Number(la.replace("pin",""));throw new Error(`No pin labels provided and pin number or label is not a number: "${ua}"`)},underscorifyPinStyles=(ua,J)=>{if(!ua)return;const la={},xa={};for(const[Aa,ba]of Object.entries(ua)){const Sa=parsePinNumberFromLabelsOrThrow(Aa,J);xa[Sa]={...xa[Sa],...ba}}for(const[Aa,ba]of Object.entries(xa)){const Sa=`pin${Aa}`;la[Sa]={bottom_margin:ba.bottomMargin,left_margin:ba.leftMargin,right_margin:ba.rightMargin,top_margin:ba.topMargin}}return la},underscorifyPortArrangement=ua=>{if(ua){if("leftSide"in ua||"rightSide"in ua||"topSide"in ua||"bottomSide"in ua)return{left_side:ua.leftSide,right_side:ua.rightSide,top_side:ua.topSide,bottom_side:ua.bottomSide};if("leftPinCount"in ua||"rightPinCount"in ua||"topPinCount"in ua||"bottomPinCount"in ua)return{left_size:ua.leftPinCount,right_size:ua.rightPinCount,top_size:ua.topPinCount,bottom_size:ua.bottomPinCount};if("leftSize"in ua||"rightSize"in ua||"topSize"in ua||"bottomSize"in ua)return{left_size:ua.leftSize,right_size:ua.rightSize,top_size:ua.topSize,bottom_size:ua.bottomSize}}},InvalidProps=class extends Error{constructor(ua,J,la){let xa;const ba=Object.keys(la).filter(Sa=>Sa!=="_errors").map(Sa=>la[Sa]._errors[0]?`${Sa} (${la[Sa]._errors[0]})`:`${Sa} (${JSON.stringify(la[Sa])})`).join(", ");"name"in J?xa=`Invalid props for ${ua} "${J.name}": ${ba}`:"footprint"in J&&typeof J.footprint=="string"?xa=`Invalid props for ${ua} (unnamed ${J.footprint} component): ${ba}`:xa=`Invalid props for ${ua} (unnamed): ${ba}`,super(xa),this.componentName=ua,this.originalProps=J,this.formattedError=la}};function isMatchingSelector(ua,J){const la=J.match(/^#(\w+)/);if(la)return ua.props.id===la[1];const xa=J.match(/^\.(\w+)/);if(xa)return ua.isMatchingNameOrAlias(xa[1]);let[Aa,...ba]=J.split(/(?=[#.[])/);return Aa==="pin"&&(Aa="port"),Aa&&Aa!=="*"&&ua.lowercaseComponentName!==Aa.toLowerCase()?!1:ba.every(Sa=>{if(Sa.startsWith("#"))return ua.props.id===Sa.slice(1);if(Sa.startsWith("."))return ua.isMatchingNameOrAlias(Sa.slice(1));const Ma=Sa.match(/\[(\w+)=['"]?(.+?)['"]?\]/);if(!Ma)return!0;const[,Ra,Ia]=Ma;return ua.props[Ra].toString()===Ia})}var debugSelectAll=Debug$1("tscircuit:primitive-component:selectAll"),PrimitiveComponent=class extends Renderable{constructor(J){super(J);jp(this,"parent",null);jp(this,"children");jp(this,"childrenPendingRemoval");jp(this,"props");jp(this,"_parsedProps");jp(this,"externallyAddedAliases");jp(this,"isPrimitiveContainer",!1);jp(this,"source_group_id",null);jp(this,"source_component_id",null);jp(this,"schematic_component_id",null);jp(this,"pcb_component_id",null);jp(this,"cad_component_id",null);this.children=[],this.childrenPendingRemoval=[],this.props=J??{},this.externallyAddedAliases=[];const la=this.config.zodProps.safeParse(J??{});if(la.success)this._parsedProps=la.data;else throw new InvalidProps(this.lowercaseComponentName,this.props,la.error.format())}get config(){return{componentName:"",zodProps:z$3.object({}).passthrough()}}get componentName(){return this.config.componentName}getInheritedProperty(J){let la=this;for(;la;){if(la._parsedProps&&J in la._parsedProps)return la._parsedProps[J];la=la.parent}}get lowercaseComponentName(){return this.componentName.toLowerCase()}get isSubcircuit(){var J;return!!this.props.subcircuit||this.lowercaseComponentName==="group"&&((J=this==null?void 0:this.parent)==null?void 0:J.isRoot)}get isGroup(){return this.lowercaseComponentName==="group"}setProps(J){var Aa,ba;const la=this.config.zodProps.parse({...this.props,...J}),xa=this.props;this.props=la,this._parsedProps=this.config.zodProps.parse(J),this.onPropsChange({oldProps:xa,newProps:la,changedProps:Object.keys(J)}),(ba=(Aa=this.parent)==null?void 0:Aa.onChildChanged)==null||ba.call(Aa,this)}computePcbPropsTransform(){const{_parsedProps:J}=this;return compose(translate(J.pcbX??0,J.pcbY??0),rotate((J.pcbRotation??0)*Math.PI/180))}_computePcbGlobalTransformBeforeLayout(){var xa,Aa,ba;const{_parsedProps:J}=this,la=this.getSubcircuit()._getPcbManualPlacementForComponent(this);if(la&&this.props.pcbX===void 0&&this.props.pcbY===void 0)return compose(((xa=this.parent)==null?void 0:xa._computePcbGlobalTransformBeforeLayout())??identity$3(),compose(translate(la.x,la.y),rotate((J.pcbRotation??0)*Math.PI/180)));if(this.isPcbPrimitive){const Sa=this.getPrimitiveContainer();if(Sa){const Ma=Sa._parsedProps.layer==="bottom",Ra=Sa._getGlobalPcbPositionBeforeLayout();if(Ma)return compose(translate(Ra.x,Ra.y),flipY(),translate(-Ra.x,-Ra.y)),compose(((Aa=this.parent)==null?void 0:Aa._computePcbGlobalTransformBeforeLayout())??identity$3(),flipY(),this.computePcbPropsTransform())}}return compose(((ba=this.parent)==null?void 0:ba._computePcbGlobalTransformBeforeLayout())??identity$3(),this.computePcbPropsTransform())}getPrimitiveContainer(){var J,la;return this.isPrimitiveContainer?this:((la=(J=this.parent)==null?void 0:J.getPrimitiveContainer)==null?void 0:la.call(J))??null}_getPcbCircuitJsonBounds(){return{center:{x:0,y:0},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getPcbPrimitiveFlippedHelpers(){const J=this.getPrimitiveContainer(),la=J?J._parsedProps.layer==="bottom":!1;return{isFlipped:la,maybeFlipLayer:Aa=>la?Aa==="top"?"bottom":"top":Aa}}_setPositionFromLayout(J){throw new Error(`_setPositionFromLayout not implemented for ${this.componentName}`)}computeSchematicPropsTransform(){return compose(translate(this.props.schX??0,this.props.schY??0))}computeSchematicGlobalTransform(){var la,xa;const J=this._getSchematicGlobalManualPlacementTransform(this);return J||compose(((xa=(la=this.parent)==null?void 0:la.computeSchematicGlobalTransform)==null?void 0:xa.call(la))??identity$3(),this.computeSchematicPropsTransform())}_getSchematicSymbolName(){const{_parsedProps:J}=this,la=this.config.schematicSymbolName;let xa=J.schRotation;if(xa===void 0&&(xa=0),xa=xa%360,xa<0&&(xa+=360),J.schRotation!==void 0&&xa%90!==0)throw new Error(`Schematic rotation ${J.schRotation} is not supported for ${this.componentName}`);const Aa=`${la}_horz`,ba=`${la}_vert`,Sa=`${la}_up`,Ma=`${la}_down`,Ra=`${la}_left`,Ia=`${la}_right`;if(Ia in symbols_index_default$1&&xa===0)return Ia;if(Sa in symbols_index_default$1&&xa===90)return Sa;if(Ra in symbols_index_default$1&&xa===180)return Ra;if(Ma in symbols_index_default$1&&xa===270)return Ma;if(Aa in symbols_index_default$1&&(xa===0||xa===180))return Aa;if(ba in symbols_index_default$1&&(xa===90||xa===270))return ba;if(la in symbols_index_default$1)return la}_getSchematicSymbolNameOrThrow(){const J=this._getSchematicSymbolName();if(!J)throw new Error(`No schematic symbol found (given: "${this.config.schematicSymbolName}")`);return J}getSchematicSymbol(){const J=this._getSchematicSymbolName();return J?symbols_index_default$1[J]??null:null}_getPcbManualPlacementForComponent(J){var ba;if(!this.isSubcircuit)return null;const la=this.props.layout,xa=this.props.manualEdits;if(!la&&!xa)return null;const Aa=((ba=la==null?void 0:la.manual_pcb_placement_config)==null?void 0:ba.positions)||(xa==null?void 0:xa.pcb_placements);if(!Aa)return null;for(const Sa of Aa)if(la&&isMatchingSelector(J,Sa.selector)||J.props.name===Sa.selector)return applyToPoint(this._computePcbGlobalTransformBeforeLayout(),Sa.center);return null}_getSchematicGlobalManualPlacementTransform(J){var xa,Aa;const la=(xa=this.getSubcircuit())==null?void 0:xa._parsedProps.manualEdits;if(!la)return null;for(const ba of la.schematic_placements??[])if((isMatchingSelector(J,ba.selector)||J.props.name===ba.selector)&&ba.relative_to==="group_center")return compose(((Aa=this.parent)==null?void 0:Aa._computePcbGlobalTransformBeforeLayout())??identity$3(),translate(ba.center.x,ba.center.y));return null}_getGlobalPcbPositionBeforeLayout(){return applyToPoint(this._computePcbGlobalTransformBeforeLayout(),{x:0,y:0})}_getGlobalSchematicPositionBeforeLayout(){return applyToPoint(this.computeSchematicGlobalTransform(),{x:0,y:0})}get root(){var J;return((J=this.parent)==null?void 0:J.root)??null}onAddToParent(J){this.parent=J}onPropsChange(J){}onChildChanged(J){var la,xa;(xa=(la=this.parent)==null?void 0:la.onChildChanged)==null||xa.call(la,J)}add(J){J.onAddToParent(this),J.parent=this,this.children.push(J)}addAll(J){for(const la of J)this.add(la)}remove(J){this.children=this.children.filter(la=>la!==J),this.childrenPendingRemoval.push(J),J.shouldBeRemoved=!0}getSubcircuitSelector(){const J=this._parsedProps.name,la=J?`${this.lowercaseComponentName}.${J}`:this.lowercaseComponentName;return!this.parent||this.parent.isSubcircuit?la:`${this.parent.getSubcircuitSelector()} > ${la}`}getFullPathSelector(){var Aa,ba;const J=this._parsedProps.name,la=J?`${this.lowercaseComponentName}.${J}`:this.lowercaseComponentName,xa=(ba=(Aa=this.parent)==null?void 0:Aa.getFullPathSelector)==null?void 0:ba.call(Aa);return xa?`${xa} > ${la}`:la}getNameAndAliases(){return[this._parsedProps.name,...this._parsedProps.portHints??[]].filter(Boolean)}isMatchingNameOrAlias(J){return this.getNameAndAliases().includes(J)}isMatchingAnyOf(J){return this.getNameAndAliases().some(la=>J.map(xa=>xa.toString()).includes(la))}getPcbSize(){throw new Error(`getPcbSize not implemented for ${this.componentName}`)}doesSelectorMatch(J){const la=[this.componentName,this.lowercaseComponentName],xa=[this._parsedProps.name].filter(Boolean),Aa=J.trim().split(/\> /)[0],ba=Aa[0];return Aa.length>1?!1:!!(J==="*"||J[0]==="#"&&J.slice(1)===this.props.id||J[0]==="."&&xa.includes(J.slice(1))||/^[a-zA-Z0-9_]/.test(ba)&&la.includes(ba))}getSubcircuit(){var la,xa;if(this.isSubcircuit)return this;const J=(xa=(la=this.parent)==null?void 0:la.getSubcircuit)==null?void 0:xa.call(la);if(!J)throw new Error("Component is not inside an opaque group (no board?)");return J}getGroup(){var J,la;return this.isGroup?this:((la=(J=this.parent)==null?void 0:J.getGroup)==null?void 0:la.call(J))??null}selectAll(J){debugSelectAll(`selectAll: "${J}"`);const la=J.trim().split(/\s+/);let xa=la[0]===">"?this.children:this.getSelectableDescendants(),Aa=[],ba=!1,Sa=-1;for(const Ma of la)if(Sa++,debugSelectAll(`
7538
7538
 
7539
7539
  iteration: ${Sa}`),debugSelectAll(`part: "${la[Sa]}"`),debugSelectAll(`currentSearch: [${xa.map(Ra=>Ra.getString()).join(",")}]`),debugSelectAll(`currentResults: [${Aa.map(Ra=>Ra.getString()).join(",")}]`),Ma===">")ba=!0;else{const Ra=xa.filter(La=>isMatchingSelector(La,Ma));xa=Ra.flatMap(La=>ba?La.children:La.getSelectableDescendants()),Aa=Ra,ba=!1}return Aa}selectOne(J,la){var Aa;let xa=(Aa=la==null?void 0:la.type)==null?void 0:Aa.toLowerCase();return la!=null&&la.port&&(xa="port"),xa?this.selectAll(J).find(ba=>ba.lowercaseComponentName===xa)??null:la!=null&&la.pcbPrimitive?this.selectAll(J).find(ba=>ba.isPcbPrimitive)??null:la!=null&&la.schematicPrimitive?this.selectAll(J).find(ba=>ba.isSchematicPrimitive)??null:this.selectAll(J)[0]??null}getAvailablePcbLayers(){var J,la;if(this.isPcbPrimitive){const{maybeFlipLayer:xa}=this._getPcbPrimitiveFlippedHelpers();return"layer"in this._parsedProps||this.componentName==="SmtPad"?[xa(this._parsedProps.layer??"top")]:"layers"in this._parsedProps?this._parsedProps.layers:this.componentName==="PlatedHole"?((la=(J=this.root)==null?void 0:J._getBoard())==null?void 0:la.allLayers)??["top","bottom"]:[]}return[]}getDescendants(){const J=[];for(const la of this.children)J.push(la),J.push(...la.getDescendants());return J}getSelectableDescendants(){const J=[];for(const la of this.children)la.isSubcircuit?J.push(la):(J.push(la),J.push(...la.getSelectableDescendants()));return J}_getPinCount(){return 0}_getSchematicBoxDimensions(){return null}renderError(J){var la;if(typeof J=="string")return super.renderError(J);(la=this.root)==null||la.db.pcb_placement_error.insert(J)}getString(){var Aa,ba;const{lowercaseComponentName:J,_parsedProps:la,parent:xa}=this;return(la==null?void 0:la.pinNumber)!==void 0&&((Aa=xa==null?void 0:xa.props)!=null&&Aa.name)&&(la!=null&&la.name)?`<${J}#${this._renderId}(pin:${la.pinNumber} .${xa==null?void 0:xa.props.name}>.${la.name}) />`:(ba=xa==null?void 0:xa.props)!=null&&ba.name&&(la!=null&&la.name)?`<${J}#${this._renderId}(.${xa==null?void 0:xa.props.name}>.${la==null?void 0:la.name}) />`:la!=null&&la.from&&(la!=null&&la.to)?`<${J}#${this._renderId}(from:${la.from} to:${la==null?void 0:la.to}) />`:la!=null&&la.name?`<${J}#${this._renderId} name=".${la==null?void 0:la.name}" />`:la!=null&&la.portHints?`<${J}#${this._renderId}(${la.portHints.map(Sa=>`.${Sa}`).join(", ")}) />`:`<${J}#${this._renderId} />`}get[Symbol.toStringTag](){return this.getString()}[Symbol.for("nodejs.util.inspect.custom")](){return this.getString()}};function pairs$1(ua){const J=[];for(let la=0;la<ua.length-1;la++)J.push([ua[la],ua[la+1]]);return J}var netProps=z$3.object({name:z$3.string()}),Net=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"source_net_id")}get config(){return{componentName:"Net",zodProps:netProps}}getPortSelector(){return`net.${this.props.name}`}doInitialSourceRender(){const{db:J}=this.root,{_parsedProps:la}=this,xa=J.source_net.insert({name:la.name,member_source_group_ids:[]});this.source_net_id=xa.source_net_id}getAllConnectedPorts(){const J=this.getSubcircuit().selectAll("port"),la=[];for(const xa of J){const Aa=xa._getDirectlyConnectedTraces();for(const ba of Aa)if(ba._isExplicitlyConnectedToNet(this)){la.push(xa);break}}return la}_getAllDirectlyConnectedTraces(){const J=this.getSubcircuit().selectAll("trace"),la=[];for(const xa of J)xa._isExplicitlyConnectedToNet(this)&&la.push(xa);return la}doInitialPcbRouteNetIslands(){var ba;if((ba=this.root)!=null&&ba.pcbDisabled||this.getSubcircuit()._parsedProps.routingDisabled)return;const{db:J}=this.root,la=this._getAllDirectlyConnectedTraces().filter(Sa=>{var Ma;return(((Ma=Sa._portsRoutedOnPcb)==null?void 0:Ma.length)??0)>0}),xa=[];for(const Sa of la){const Ma=Sa._portsRoutedOnPcb,Ra=xa.find(Ia=>Ma.some(La=>Ia.ports.includes(La)));if(!Ra){xa.push({ports:[...Ma],traces:[Sa]});continue}Ra.traces.push(Sa),Ra.ports.push(...Ma)}if(xa.length===0)return;const Aa=pairs$1(xa);for(const[Sa,Ma]of Aa){const Ra=Sa.ports.map(nl=>nl._getGlobalPcbPositionBeforeLayout()),Ia=Ma.ports.map(nl=>nl._getGlobalPcbPositionBeforeLayout());let La=1/0,Fa=[-1,-1];for(let nl=0;nl<Ra.length;nl++){const sl=Ra[nl];for(let ll=0;ll<Ia.length;ll++){const dl=Ia[ll],gl=Math.sqrt((sl.x-dl.x)**2+(sl.y-dl.y)**2);gl<La&&(La=gl,Fa=[nl,ll])}}const ka=Sa.ports[Fa[0]],el=Ma.ports[Fa[1]],tl=J.toArray().filter(nl=>nl.type==="pcb_smtpad"||nl.type==="pcb_trace"||nl.type==="pcb_plated_hole"||nl.type==="pcb_hole"||nl.type==="source_port"||nl.type==="pcb_port"),{solution:rl}=autoroute2(tl.concat([{type:"source_trace",source_trace_id:"__net_trace_tmp",connected_source_port_ids:[ka.source_port_id,el.source_port_id]}])),il=rl[0];if(!il){this.renderError({pcb_trace_error_id:"",pcb_trace_id:"__net_trace_tmp",pcb_component_ids:[ka.pcb_component_id,el.pcb_component_id].filter(Boolean),pcb_port_ids:[ka.pcb_port_id,el.pcb_port_id].filter(Boolean),type:"pcb_trace_error",error_type:"pcb_trace_error",message:`Failed to route net islands for "${this.getString()}"`,source_trace_id:"__net_trace_tmp"});return}J.pcb_trace.insert(il)}}renderError(J){var la;if(typeof J=="string")return super.renderError(J);(la=this.root)==null||la.db.pcb_trace_error.insert(J)}},createNetsFromProps=(ua,J)=>{for(const la of J)typeof la=="string"&&la.startsWith("net.")&&(ua.getSubcircuit().selectOne(la)||ua.getSubcircuit().add(new Net({name:la.split("net.")[1]})))},SmtPad=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_smtpad_id",null);jp(this,"matchedPort",null);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SmtPad",zodProps:smtPadProps}}getPcbSize(){const{_parsedProps:J}=this;if(J.shape==="circle")return{width:J.radius*2,height:J.radius*2};if(J.shape==="rect")return{width:J.width,height:J.height};throw new Error(`getPcbSize for shape "${J.shape}" not implemented for ${this.componentName}`)}doInitialPortMatching(){var la;const J=(la=this.getPrimitiveContainer())==null?void 0:la.selectAll("port");if(this.props.portHints){for(const xa of J)if(xa.isMatchingAnyOf(this.props.portHints)){this.matchedPort=xa,xa.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var ka,el,tl,rl,il,nl,sl,ll,dl;if((ka=this.root)!=null&&ka.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this;if(!la.portHints)return;const xa=this.getPrimitiveContainer(),Aa=this.getSubcircuit(),ba=this._getGlobalPcbPositionBeforeLayout();xa==null||xa._getGlobalPcbPositionBeforeLayout();const Sa=decomposeTSR(this._computePcbGlobalTransformBeforeLayout()),Ma=Math.abs(Sa.rotation.angle*(180/Math.PI)-90)%180<.01,{maybeFlipLayer:Ra}=this._getPcbPrimitiveFlippedHelpers(),Ia=(xa==null?void 0:xa._parsedProps.pcbRotation)??0;let La=null;const Fa=((el=this.parent)==null?void 0:el.pcb_component_id)??((tl=this.getPrimitiveContainer())==null?void 0:tl.pcb_component_id);la.shape==="circle"?(La=J.pcb_smtpad.insert({pcb_component_id:Fa,pcb_port_id:(rl=this.matchedPort)==null?void 0:rl.pcb_port_id,layer:Ra(la.layer??"top"),shape:"circle",radius:la.radius,port_hints:la.portHints.map(gl=>gl.toString()),x:ba.x,y:ba.y,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0}),J.pcb_solder_paste.insert({layer:La.layer,shape:"circle",radius:La.radius*.7,x:La.x,y:La.y,pcb_component_id:La.pcb_component_id,pcb_smtpad_id:La.pcb_smtpad_id,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((il=this.getGroup())==null?void 0:il.pcb_group_id)??void 0})):la.shape==="rect"&&(La=Ia===0||Ma?J.pcb_smtpad.insert({pcb_component_id:Fa,pcb_port_id:(nl=this.matchedPort)==null?void 0:nl.pcb_port_id,layer:Ra(la.layer??"top"),shape:"rect",width:Ma?la.height:la.width,height:Ma?la.width:la.height,port_hints:la.portHints.map(gl=>gl.toString()),x:ba.x,y:ba.y,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((sl=this.getGroup())==null?void 0:sl.pcb_group_id)??void 0}):J.pcb_smtpad.insert({pcb_component_id:Fa,layer:la.layer??"top",shape:"rotated_rect",width:la.width,height:la.height,x:ba.x,y:ba.y,ccw_rotation:Ia,port_hints:la.portHints.map(gl=>gl.toString()),subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((ll=this.getGroup())==null?void 0:ll.pcb_group_id)??void 0}),La.shape==="rect"&&J.pcb_solder_paste.insert({layer:La.layer,shape:"rect",width:La.width*.7,height:La.height*.7,x:La.x,y:La.y,pcb_component_id:La.pcb_component_id,pcb_smtpad_id:La.pcb_smtpad_id,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((dl=this.getGroup())==null?void 0:dl.pcb_group_id)??void 0})),La&&(this.pcb_smtpad_id=La.pcb_smtpad_id)}doInitialPcbPortAttachment(){var la,xa;if((la=this.root)!=null&&la.pcbDisabled)return;const{db:J}=this.root;J.pcb_smtpad.update(this.pcb_smtpad_id,{pcb_port_id:(xa=this.matchedPort)==null?void 0:xa.pcb_port_id})}_getPcbCircuitJsonBounds(){const{db:J}=this.root,la=J.pcb_smtpad.get(this.pcb_smtpad_id);if(la.shape==="rect")return{center:{x:la.x,y:la.y},bounds:{left:la.x-la.width/2,top:la.y+la.height/2,right:la.x+la.width/2,bottom:la.y-la.height/2},width:la.width,height:la.height};if(la.shape==="rotated_rect"){const xa=la.ccw_rotation*Math.PI/180,Aa=Math.cos(xa),ba=Math.sin(xa),Sa=la.width/2,Ma=la.height/2,Ra=Math.abs(Sa*Aa)+Math.abs(Ma*ba),Ia=Math.abs(Sa*ba)+Math.abs(Ma*Aa);return{center:{x:la.x,y:la.y},bounds:{left:la.x-Ra,right:la.x+Ra,top:la.y-Ia,bottom:la.y+Ia},width:Ra*2,height:Ia*2}}if(la.shape==="circle")return{center:{x:la.x,y:la.y},bounds:{left:la.x-la.radius,top:la.y-la.radius,right:la.x+la.radius,bottom:la.y+la.radius},width:la.radius*2,height:la.radius*2};throw new Error(`circuitJson bounds calculation not implemented for shape "${la.shape}"`)}_setPositionFromLayout(J){var Aa;const{db:la}=this.root;la.pcb_smtpad.update(this.pcb_smtpad_id,{x:J.x,y:J.y});const xa=la.pcb_solder_paste.list().find(ba=>ba.pcb_smtpad_id===this.pcb_smtpad_id);la.pcb_solder_paste.update(xa==null?void 0:xa.pcb_solder_paste_id,{x:J.x,y:J.y}),(Aa=this.matchedPort)==null||Aa._setPositionFromLayout(J)}},SilkscreenPath=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_silkscreen_path_id",null)}get config(){return{componentName:"SilkscreenPath",zodProps:silkscreenPathProps}}doInitialPcbPrimitiveRender(){var Ma,Ra,Ia;if((Ma=this.root)!=null&&Ma.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=la.layer??"top";if(xa!=="top"&&xa!=="bottom")throw new Error(`Invalid layer "${xa}" for SilkscreenPath. Must be "top" or "bottom".`);const Aa=this._computePcbGlobalTransformBeforeLayout(),ba=this.getSubcircuit(),Sa=J.pcb_silkscreen_path.insert({pcb_component_id:(Ra=this.parent)==null?void 0:Ra.pcb_component_id,layer:xa,route:la.route.map(La=>{const Fa=applyToPoint(Aa,{x:La.x,y:La.y});return{...La,x:Fa.x,y:Fa.y}}),stroke_width:la.strokeWidth??.1,subcircuit_id:(ba==null?void 0:ba.subcircuit_id)??void 0,pcb_group_id:((Ia=this.getGroup())==null?void 0:Ia.pcb_group_id)??void 0});this.pcb_silkscreen_path_id=Sa.pcb_silkscreen_path_id}},PlatedHole=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_plated_hole_id",null);jp(this,"matchedPort",null);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"PlatedHole",zodProps:platedHoleProps}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:J}=this;if(J.shape==="circle")return{width:J.outerDiameter,height:J.outerDiameter};if(J.shape==="oval"||J.shape==="pill")return{width:J.outerWidth,height:J.outerHeight};throw new Error(`getPcbSize for shape "${J.shape}" not implemented for ${this.componentName}`)}_getPcbCircuitJsonBounds(){const{db:J}=this.root,la=J.pcb_plated_hole.get(this.pcb_plated_hole_id),xa=this.getPcbSize();return{center:{x:la.x,y:la.y},bounds:{left:la.x-xa.width/2,top:la.y+xa.height/2,right:la.x+xa.width/2,bottom:la.y-xa.height/2},width:xa.width,height:xa.height}}_setPositionFromLayout(J){var xa;const{db:la}=this.root;la.pcb_plated_hole.update(this.pcb_plated_hole_id,{x:J.x,y:J.y}),(xa=this.matchedPort)==null||xa._setPositionFromLayout(J)}doInitialPortMatching(){var la;const J=(la=this.getPrimitiveContainer())==null?void 0:la.selectAll("port");if(this.props.portHints){for(const xa of J)if(xa.isMatchingAnyOf(this.props.portHints)){this.matchedPort=xa,xa.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var Sa,Ma,Ra,Ia,La,Fa,ka;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this._getGlobalPcbPositionBeforeLayout(),Aa=((Ma=this.parent)==null?void 0:Ma.pcb_component_id)??((Ra=this.getPrimitiveContainer())==null?void 0:Ra.pcb_component_id),ba=this.getSubcircuit();if(la.shape==="circle"){const el=J.pcb_plated_hole.insert({pcb_component_id:Aa,pcb_port_id:(Ia=this.matchedPort)==null?void 0:Ia.pcb_port_id,outer_diameter:la.outerDiameter,hole_diameter:la.holeDiameter,shape:"circle",port_hints:this.getNameAndAliases(),x:xa.x,y:xa.y,layers:["top","bottom"],subcircuit_id:(ba==null?void 0:ba.subcircuit_id)??void 0,pcb_group_id:((La=this.getGroup())==null?void 0:La.pcb_group_id)??void 0});this.pcb_plated_hole_id=el.pcb_plated_hole_id}else if(la.shape==="pill"||la.shape==="oval"){const el=J.pcb_plated_hole.insert({pcb_component_id:Aa,pcb_port_id:(Fa=this.matchedPort)==null?void 0:Fa.pcb_port_id,outer_width:la.outerWidth,outer_height:la.outerHeight,hole_width:la.innerWidth,hole_height:la.innerHeight,shape:la.shape,port_hints:this.getNameAndAliases(),x:xa.x,y:xa.y,layers:["top","bottom"],subcircuit_id:(ba==null?void 0:ba.subcircuit_id)??void 0,pcb_group_id:((ka=this.getGroup())==null?void 0:ka.pcb_group_id)??void 0});this.pcb_plated_hole_id=el.pcb_plated_hole_id}}doInitialPcbPortAttachment(){var la,xa;if((la=this.root)!=null&&la.pcbDisabled)return;const{db:J}=this.root;J.pcb_plated_hole.update(this.pcb_plated_hole_id,{pcb_port_id:(xa=this.matchedPort)==null?void 0:xa.pcb_port_id})}},Keepout=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_keepout_id",null);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Keepout",zodProps:pcbKeepoutProps}}doInitialPcbPrimitiveRender(){var Ra,Ia,La;if((Ra=this.root)!=null&&Ra.pcbDisabled)return;const J=this.getSubcircuit(),{db:la}=this.root,{_parsedProps:xa}=this,Aa=this._getGlobalPcbPositionBeforeLayout(),ba=decomposeTSR(this._computePcbGlobalTransformBeforeLayout()),Sa=Math.abs(ba.rotation.angle*(180/Math.PI)-90)%180<.01;let Ma=null;xa.shape==="circle"?Ma=la.pcb_keepout.insert({layers:["top"],shape:"circle",radius:xa.radius,center:{x:Aa.x,y:Aa.y},subcircuit_id:(J==null?void 0:J.subcircuit_id)??void 0,pcb_group_id:((Ia=J==null?void 0:J.getGroup())==null?void 0:Ia.pcb_group_id)??void 0}):xa.shape==="rect"&&(Ma=la.pcb_keepout.insert({layers:["top"],shape:"rect",...Sa?{width:xa.height,height:xa.width}:{width:xa.width,height:xa.height},center:{x:Aa.x,y:Aa.y},subcircuit_id:(J==null?void 0:J.subcircuit_id)??void 0,pcb_group_id:((La=J==null?void 0:J.getGroup())==null?void 0:La.pcb_group_id)??void 0})),Ma&&(this.pcb_keepout_id=Ma.pcb_keepout_id)}},Hole=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_hole_id",null);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Hole",zodProps:holeProps}}getPcbSize(){const{_parsedProps:J}=this;return{width:J.diameter,height:J.diameter}}doInitialPcbPrimitiveRender(){var Sa,Ma;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this.getSubcircuit(),Aa=this._getGlobalPcbPositionBeforeLayout(),ba=J.pcb_hole.insert({hole_shape:"circle",hole_diameter:la.diameter,x:Aa.x,y:Aa.y,subcircuit_id:(xa==null?void 0:xa.subcircuit_id)??void 0,pcb_group_id:((Ma=xa==null?void 0:xa.getGroup())==null?void 0:Ma.pcb_group_id)??void 0});this.pcb_hole_id=ba.pcb_hole_id}_getPcbCircuitJsonBounds(){const{db:J}=this.root,la=J.pcb_hole.get(this.pcb_hole_id),xa=this.getPcbSize();return{center:{x:la.x,y:la.y},bounds:{left:la.x-xa.width/2,top:la.y-xa.height/2,right:la.x+xa.width/2,bottom:la.y+xa.height/2},width:xa.width,height:xa.height}}_setPositionFromLayout(J){const{db:la}=this.root;la.pcb_hole.update(this.pcb_hole_id,{x:J.x,y:J.y})}},createComponentsFromSoup=ua=>{const J=[];for(const la of ua)la.type==="pcb_smtpad"&&la.shape==="rect"?J.push(new SmtPad({pcbX:la.x,pcbY:la.y,layer:la.layer,shape:"rect",height:la.height,width:la.width,portHints:la.port_hints})):la.type==="pcb_smtpad"&&la.shape==="circle"?J.push(new SmtPad({pcbX:la.x,pcbY:la.y,layer:la.layer,shape:"circle",radius:la.radius,portHints:la.port_hints})):la.type==="pcb_silkscreen_path"?J.push(new SilkscreenPath({layer:la.layer,route:la.route,strokeWidth:la.stroke_width})):la.type==="pcb_plated_hole"&&la.shape==="circle"?la.shape==="circle"&&J.push(new PlatedHole({pcbX:la.x,pcbY:la.y,shape:"circle",holeDiameter:la.hole_diameter,outerDiameter:la.outer_diameter,portHints:la.port_hints})):la.type==="pcb_keepout"&&la.shape==="circle"?J.push(new Keepout({pcbX:la.center.x,pcbY:la.center.y,shape:"circle",radius:la.radius})):la.type==="pcb_keepout"&&la.shape==="rect"?J.push(new Keepout({pcbX:la.center.x,pcbY:la.center.y,shape:"rect",width:la.width,height:la.height})):la.type==="pcb_hole"&&la.hole_shape==="circle"&&J.push(new Hole({pcbX:la.x,pcbY:la.y,diameter:la.hole_diameter}));return J};function getBoundsOfPcbComponents(ua){let J=1/0,la=1/0,xa=-1/0,Aa=-1/0;for(const Ma of ua)if(Ma.isPcbPrimitive){const{x:Ra,y:Ia}=Ma._getGlobalPcbPositionBeforeLayout(),{width:La,height:Fa}=Ma.getPcbSize();J=Math.min(J,Ra-La/2),la=Math.min(la,Ia-Fa/2),xa=Math.max(xa,Ra+La/2),Aa=Math.max(Aa,Ia+Fa/2)}else if(Ma.componentName==="Footprint"){const Ra=getBoundsOfPcbComponents(Ma.children);J=Math.min(J,Ra.minX),la=Math.min(la,Ra.minY),xa=Math.max(xa,Ra.maxX),Aa=Math.max(Aa,Ra.maxY)}let ba=xa-J,Sa=Aa-la;return ba<0&&(ba=0),Sa<0&&(Sa=0),{minX:J,minY:la,maxX:xa,maxY:Aa,width:ba,height:Sa}}function getRelativeDirection(ua,J){const la=J.x-ua.x,xa=J.y-ua.y;return Math.abs(la)>Math.abs(xa)?la>=0?"right":"left":xa>=0?"up":"down"}var areAllPcbPrimitivesOverlapping=ua=>{if(ua.length<=1)return!0;const J=ua.map(ba=>{const Sa=ba._getPcbCircuitJsonBounds();return{left:Sa.bounds.left,right:Sa.bounds.right,top:Sa.bounds.top,bottom:Sa.bounds.bottom}}),la=Array(J.length).fill(!1).map(()=>Array(J.length).fill(!1));for(let ba=0;ba<J.length;ba++)for(let Sa=ba+1;Sa<J.length;Sa++){const Ma=J[ba],Ra=J[Sa];la[ba][Sa]=la[Sa][ba]=!(Ma.right<Ra.left||Ma.left>Ra.right||Ma.bottom>Ra.top||Ma.top<Ra.bottom)}const xa=new Set,Aa=ba=>{xa.add(ba);for(let Sa=0;Sa<J.length;Sa++)la[ba][Sa]&&!xa.has(Sa)&&Aa(Sa)};return Aa(0),xa.size===J.length},getCenterOfPcbPrimitives=ua=>{if(ua.length===0)throw new Error("Cannot get center of empty PCB primitives array");const J=ua.map(Aa=>Aa._getPcbCircuitJsonBounds().center).filter(Boolean),la=J.reduce((Aa,ba)=>Aa+ba.x,0),xa=J.reduce((Aa,ba)=>Aa+ba.y,0);return{x:la/J.length,y:xa/J.length}},portProps=z$3.object({name:z$3.string().optional(),pinNumber:z$3.number().optional(),aliases:z$3.array(z$3.string()).optional()}),Port=class extends PrimitiveComponent{constructor(J,la={}){if(!J.name&&J.pinNumber!==void 0&&(J.name=`pin${J.pinNumber}`),!J.name)throw new Error("Port must have a name or a pinNumber");super(J);jp(this,"source_port_id",null);jp(this,"pcb_port_id",null);jp(this,"schematic_port_id",null);jp(this,"schematicSymbolPortDef",null);jp(this,"matchedComponents");jp(this,"facingDirection",null);jp(this,"originDescription",null);la.originDescription&&(this.originDescription=la.originDescription),this.matchedComponents=[]}get config(){return{componentName:"Port",zodProps:portProps}}_getGlobalPcbPositionBeforeLayout(){const J=this.matchedComponents.find(la=>la.isPcbPrimitive);if(!J)throw new Error(`Port ${this} has no matched pcb component, can't get global pcb position`);return(J==null?void 0:J._getGlobalPcbPositionBeforeLayout())??{x:0,y:0}}_getPcbCircuitJsonBounds(){if(!this.pcb_port_id)return super._getPcbCircuitJsonBounds();const{db:J}=this.root,la=J.pcb_port.get(this.pcb_port_id);return{center:{x:la.x,y:la.y},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getGlobalPcbPositionAfterLayout(){return this._getPcbCircuitJsonBounds().center}_getPortsInternallyConnectedToThisPort(){const J=this.parent;if(!J||!J._getInternallyConnectedPins)return[];const la=J._getInternallyConnectedPins();for(const xa of la)if(xa.some(Aa=>Aa===this))return xa;return[]}_hasSchematicPort(){var xa,Aa;if((xa=this.parent)==null?void 0:xa.getSchematicSymbol())return!!(this.schematicSymbolPortDef||this._getPortsInternallyConnectedToThisPort().some(Sa=>Sa.schematicSymbolPortDef));const la=(Aa=this==null?void 0:this.parent)==null?void 0:Aa._getSchematicBoxDimensions();return!!(la&&this.props.pinNumber!==void 0&&la.getPortPositionByPinNumber(this.props.pinNumber))}_getGlobalSchematicPositionBeforeLayout(){var xa,Aa,ba;const J=(xa=this.parent)==null?void 0:xa.getSchematicSymbol();if(J){let Sa=this.schematicSymbolPortDef;if(!Sa&&(Sa=((Aa=this._getPortsInternallyConnectedToThisPort().find(Ra=>Ra.schematicSymbolPortDef))==null?void 0:Aa.schematicSymbolPortDef)??null,!Sa))throw new Error(`Couldn't find schematicSymbolPortDef for port ${this.getString()}, searched internally connected ports and none had a schematicSymbolPortDef. Why are we trying to get the schematic position of this port?`);const Ma=compose(this.parent.computeSchematicGlobalTransform(),translate(-J.center.x,-J.center.y));return applyToPoint(Ma,Sa)}const la=(ba=this==null?void 0:this.parent)==null?void 0:ba._getSchematicBoxDimensions();if(la&&this.props.pinNumber!==void 0){const Sa=la.getPortPositionByPinNumber(this.props.pinNumber);if(!Sa)throw new Error(`Couldn't find position for schematic_port for port ${this.getString()} inside of the schematic box`);return applyToPoint(this.parent.computeSchematicGlobalTransform(),Sa)}throw new Error(`Couldn't find position for schematic_port for port ${this.getString()}`)}_getGlobalSchematicPositionAfterLayout(){const{db:J}=this.root;if(!this.schematic_port_id)throw new Error("Can't get schematic port position after layout, no schematic_port_id");const la=J.schematic_port.get(this.schematic_port_id);if(!la)throw new Error(`Schematic port not found when trying to get post-layout position: ${this.schematic_port_id}`);return la.center}registerMatch(J){this.matchedComponents.push(J)}getNameAndAliases(){const{_parsedProps:J}=this;return Array.from(new Set([...J.aliases??[],...J.name?[J.name]:[],...typeof J.pinNumber=="number"?[`pin${J.pinNumber}`,J.pinNumber.toString()]:[],...this.externallyAddedAliases??[]]))}isMatchingPort(J){return this.isMatchingAnyOf(J.getNameAndAliases())}getPortSelector(){var J;return`.${(J=this.parent)==null?void 0:J.props.name} > port.${this.props.name}`}getAvailablePcbLayers(){return Array.from(new Set(this.matchedComponents.flatMap(J=>J.getAvailablePcbLayers())))}_getDirectlyConnectedTraces(){return this.getSubcircuit().selectAll("trace").filter(xa=>xa._isExplicitlyConnectedToPort(this))}doInitialSourceRender(){var ba;const{db:J}=this.root,{_parsedProps:la}=this,xa=this.getNameAndAliases(),Aa=J.source_port.insert({name:la.name,pin_number:la.pinNumber,port_hints:xa,source_component_id:(ba=this.parent)==null?void 0:ba.source_component_id});this.source_port_id=Aa.source_port_id}doInitialSourceParentAttachment(){var la,xa,Aa,ba;const{db:J}=this.root;if(!((la=this.parent)!=null&&la.source_component_id))throw new Error(`${this.getString()} has no parent source component (parent: ${(xa=this.parent)==null?void 0:xa.getString()})`);J.source_port.update(this.source_port_id,{source_component_id:(Aa=this.parent)==null?void 0:Aa.source_component_id}),this.source_component_id=(ba=this.parent)==null?void 0:ba.source_component_id}doInitialPcbPortRender(){var ba,Sa,Ma,Ra,Ia;if((ba=this.root)!=null&&ba.pcbDisabled)return;const{db:J}=this.root,{matchedComponents:la}=this;if(!((Sa=this.parent)!=null&&Sa.pcb_component_id))throw new Error(`${this.getString()} has no parent pcb component, cannot render pcb_port (parent: ${(Ma=this.parent)==null?void 0:Ma.getString()})`);const xa=la.filter(La=>La.isPcbPrimitive);if(xa.length===0)return;let Aa=null;if(xa.length===1&&(Aa=xa[0]._getPcbCircuitJsonBounds().center),xa.length>1){if(!areAllPcbPrimitivesOverlapping(xa))throw new Error(`${this.getString()} has multiple non-overlapping pcb matches, unclear how to place pcb_port: ${xa.map(La=>La.getString()).join(", ")}. (Note: tscircuit core does not currently allow you to specify internally connected pcb primitives with the same port hints, try giving them different port hints and specifying they are connected externally- or file an issue)`);Aa=getCenterOfPcbPrimitives(xa)}if(Aa){const La=this.getSubcircuit(),Fa=J.pcb_port.insert({pcb_component_id:(Ra=this.parent)==null?void 0:Ra.pcb_component_id,layers:this.getAvailablePcbLayers(),subcircuit_id:(La==null?void 0:La.subcircuit_id)??void 0,pcb_group_id:((Ia=this.getGroup())==null?void 0:Ia.pcb_group_id)??void 0,...Aa,source_port_id:this.source_port_id});this.pcb_port_id=Fa.pcb_port_id}else{const La=xa[0];throw new Error(`${La.getString()} does not have a center or _getGlobalPcbPositionBeforeLayout method (needed for pcb_port placement)`)}}doInitialSchematicPortRender(){var Fa;const{db:J}=this.root,{_parsedProps:la}=this,xa=this.getPrimitiveContainer();if(!xa||!this._hasSchematicPort())return;const Aa=xa._getGlobalSchematicPositionBeforeLayout(),ba=this._getGlobalSchematicPositionBeforeLayout();let Sa=null;const Ma=xa._getSchematicBoxDimensions();Ma&&la.pinNumber!==void 0&&(Sa=Ma.getPortPositionByPinNumber(la.pinNumber)),this.getSubcircuit().props._schDebugObjectsEnabled&&J.schematic_debug_object.insert({shape:"rect",center:ba,size:{width:.1,height:.1},label:"obstacle"}),Sa!=null&&Sa.side?this.facingDirection={left:"left",right:"right",top:"up",bottom:"down"}[Sa.side]:this.facingDirection=getRelativeDirection(Aa,ba);const Ra=J.source_port.get(this.source_port_id);let Ia;for(const ka of(Ra==null?void 0:Ra.port_hints)??[])ka.match(/^(pin)?\d+$/)||(Ia=ka);const La=J.schematic_port.insert({schematic_component_id:(Fa=this.parent)==null?void 0:Fa.schematic_component_id,center:ba,source_port_id:this.source_port_id,facing_direction:this.facingDirection,distance_from_component_edge:.4,side_of_component:Sa==null?void 0:Sa.side,pin_number:la.pinNumber,true_ccw_index:Sa==null?void 0:Sa.trueIndex,display_pin_label:Ia});this.schematic_port_id=La.schematic_port_id}_setPositionFromLayout(J){const{db:la}=this.root;this.pcb_port_id&&la.pcb_port.update(this.pcb_port_id,{x:J.x,y:J.y})}_hasMatchedPcbPrimitive(){return this.matchedComponents.some(J=>J.isPcbPrimitive)}},getPinNumberFromLabels=ua=>{const J=ua.find(la=>/^(pin)?\d+$/.test(la));return J?Number.parseInt(J.replace(/^pin/,"")):null};function getPortFromHints(ua,J){var ba;const la=getPinNumberFromLabels(ua);if(!la)return null;const Aa=[...ua.filter(Sa=>Sa.toString()!==la.toString()&&Sa!==`pin${la}`),...((ba=J==null?void 0:J.additionalAliases)==null?void 0:ba[`pin${la}`])??[]];return new Port({pinNumber:la,aliases:Aa})}var hasExplicitPinMapping=ua=>{for(const J of["leftSide","rightSide","topSide","bottomSide"])if(J in ua&&typeof ua[J]=="number")throw new Error(`A number was specified for "${J}", you probably meant to use "size" not "side"`);return"leftSide"in ua||"rightSide"in ua||"topSide"in ua||"bottomSide"in ua},getSizeOfSidesFromPortArrangement=ua=>{var ba,Sa,Ma,Ra;if(hasExplicitPinMapping(ua))return{leftSize:((ba=ua.leftSide)==null?void 0:ba.pins.length)??0,rightSize:((Sa=ua.rightSide)==null?void 0:Sa.pins.length)??0,topSize:((Ma=ua.topSide)==null?void 0:Ma.pins.length)??0,bottomSize:((Ra=ua.bottomSide)==null?void 0:Ra.pins.length)??0};const{leftSize:J=0,rightSize:la=0,topSize:xa=0,bottomSize:Aa=0}=ua;return{leftSize:J,rightSize:la,topSize:xa,bottomSize:Aa}};function isExplicitPinMappingArrangement(ua){return ua.leftSide!==void 0}var getAllDimensionsForSchematicBox=ua=>{var il,nl,sl,ll,dl,gl,_l,vl;const J=ua.portDistanceFromEdge??.4;let la=ua.schPortArrangement?getSizeOfSidesFromPortArrangement(ua.schPortArrangement):null;const xa={left:0,right:0,top:0,bottom:0};let Aa=ua.pinCount??null;if(Aa===null)if(la)Aa=la.leftSize+la.rightSize+la.topSize;else throw new Error("Could not determine pin count for the schematic box");if(Aa&&!la){const Cl=Math.floor(Aa/2);la={leftSize:Aa-Cl,rightSize:Cl,topSize:0,bottomSize:0}}la||(la={leftSize:0,rightSize:0,topSize:0,bottomSize:0});const ba=({side:Cl,sideIndex:Ll,truePinIndex:Il})=>{var sc,Kl,Gl,kl;if(!ua.schPortArrangement||!isExplicitPinMappingArrangement(ua.schPortArrangement))return Il+1;const Fl={left:"top-to-bottom",bottom:"left-to-right",right:"bottom-to-top",top:"right-to-left"}[Cl],Ol=((Kl=(sc=ua.schPortArrangement)==null?void 0:sc[`${Cl}Side`])==null?void 0:Kl.direction)??Fl,ql=(kl=(Gl=ua.schPortArrangement)==null?void 0:Gl[`${Cl}Side`])==null?void 0:kl.pins;let rc=Ll;return Ol!==Fl&&(rc=ql.length-Ll-1),parsePinNumberFromLabelsOrThrow(ql[rc],ua.pinLabels)},Sa=[];let Ma=0,Ra=0;for(let Cl=0;Cl<la.leftSize;Cl++){const Ll=ba({side:"left",sideIndex:Cl,truePinIndex:Ra}),Il=((il=ua.numericSchPinStyle)==null?void 0:il[`pin${Ll}`])??((nl=ua.numericSchPinStyle)==null?void 0:nl[Ll]);Il!=null&&Il.topMargin&&(Ma+=Il.topMargin),Sa.push({trueIndex:Ra,pinNumber:Ll,side:"left",distanceFromOrthogonalEdge:Ma}),Il!=null&&Il.bottomMargin&&(Ma+=Il.bottomMargin),Cl===la.leftSize-1?xa.left=Ma:Ma+=ua.schPinSpacing,Ra++}Ma=0;for(let Cl=0;Cl<la.bottomSize;Cl++){const Ll=ba({side:"bottom",sideIndex:Cl,truePinIndex:Ra}),Il=((sl=ua.numericSchPinStyle)==null?void 0:sl[`pin${Ll}`])??((ll=ua.numericSchPinStyle)==null?void 0:ll[Ll]);Il!=null&&Il.leftMargin&&(Ma+=Il.leftMargin),Sa.push({trueIndex:Ra,pinNumber:Ll,side:"bottom",distanceFromOrthogonalEdge:Ma}),Il!=null&&Il.rightMargin&&(Ma+=Il.rightMargin),Cl===la.bottomSize-1?xa.bottom=Ma:Ma+=ua.schPinSpacing,Ra++}Ma=0;for(let Cl=0;Cl<la.rightSize;Cl++){const Ll=ba({side:"right",sideIndex:Cl,truePinIndex:Ra}),Il=((dl=ua.numericSchPinStyle)==null?void 0:dl[`pin${Ll}`])??((gl=ua.numericSchPinStyle)==null?void 0:gl[Ll]);Il!=null&&Il.bottomMargin&&(Ma+=Il.bottomMargin),Sa.push({trueIndex:Ra,pinNumber:Ll,side:"right",distanceFromOrthogonalEdge:Ma}),Il!=null&&Il.topMargin&&(Ma+=Il.topMargin),Cl===la.rightSize-1?xa.right=Ma:Ma+=ua.schPinSpacing,Ra++}Ma=0;for(let Cl=0;Cl<la.topSize;Cl++){const Ll=ba({side:"top",sideIndex:Cl,truePinIndex:Ra}),Il=((_l=ua.numericSchPinStyle)==null?void 0:_l[`pin${Ll}`])??((vl=ua.numericSchPinStyle)==null?void 0:vl[Ll]);Il!=null&&Il.rightMargin&&(Ma+=Il.rightMargin),Sa.push({trueIndex:Ra,pinNumber:Ll,side:"top",distanceFromOrthogonalEdge:Ma}),Il!=null&&Il.leftMargin&&(Ma+=Il.leftMargin),Cl===la.topSize-1?xa.top=Ma:Ma+=ua.schPinSpacing,Ra++}let Ia=ua.schWidth;Ia||(Ia=Math.max(xa.top+ua.schPinSpacing*2,xa.bottom+ua.schPinSpacing*2));const La=ua.pinLabels?Math.max(...Object.values(ua.pinLabels).map(Cl=>Cl.length*.1)):0,Fa=La>0?1.1:0;Ia=Math.max(Ia,La+Fa);let ka=ua.schHeight;ka||(ka=Math.max(xa.left+ua.schPinSpacing*2,xa.right+ua.schPinSpacing*2));const el={left:{x:-Ia/2-J,y:xa.left/2},bottom:{x:-xa.bottom/2,y:-ka/2-J},right:{x:Ia/2+J,y:-xa.right/2},top:{x:xa.top/2,y:ka/2+J}},tl={left:{x:0,y:-1},right:{x:0,y:1},top:{x:-1,y:0},bottom:{x:1,y:0}},rl=Sa.map(Cl=>{const{distanceFromOrthogonalEdge:Ll,side:Il}=Cl,Fl=el[Il],Ol=tl[Il];return{x:Fl.x+Ll*Ol.x,y:Fl.y+Ll*Ol.y,...Cl}});return{getPortPositionByPinNumber(Cl){const Ll=rl.find(Il=>Il.pinNumber.toString()===Cl.toString());return Ll||null},getSize(){return{width:Ia,height:ka}},getSizeIncludingPins(){return{width:Ia+(la.leftSize||la.rightSize?.4:0),height:ka+(la.topSize||la.bottomSize?.4:0)}},pinCount:Aa}},debug2$1=Debug$1("tscircuit:core:footprint"),Footprint=class extends PrimitiveComponent{get config(){return{componentName:"Footprint",zodProps:footprintProps}}doInitialPcbFootprintLayout(){var Fa,ka,el,tl,rl;if((Fa=this.root)!=null&&Fa.pcbDisabled)return;const ua=this.children.filter(il=>il.componentName==="Constraint");if(ua.length===0)return;const{isFlipped:J}=this._getPcbPrimitiveFlippedHelpers(),la=il=>J&&"left"in il&&"right"in il?{...il,left:il.right,right:il.left}:il,xa=ua.flatMap(il=>il._getAllReferencedComponents().componentsWithSelectors).map(({component:il,selector:nl,componentSelector:sl,edge:ll})=>({component:il,selector:nl,componentSelector:sl,edge:ll,bounds:il._getPcbCircuitJsonBounds()}));if(xa.some(il=>il.edge))throw new Error("edge constraints not implemented yet for footprint layout, contributions welcome!");function Aa(il){return xa.find(({selector:nl})=>nl===il)}const ba=new Solver,Sa={};function Ma(il){return il in Sa||(Sa[il]=new Variable(il),ba.addEditVariable(Sa[il],Strength.weak)),Sa[il]}for(const{selector:il,bounds:nl}of xa){const sl=Ma(`${il}_x`),ll=Ma(`${il}_y`);ba.suggestValue(sl,nl.center.x),ba.suggestValue(ll,nl.center.y)}for(const il of ua){const nl=il._parsedProps;if("xDist"in nl){const{xDist:sl,left:ll,right:dl,edgeToEdge:gl,centerToCenter:_l}=la(nl),vl=Ma(`${ll}_x`),Cl=Ma(`${dl}_x`),Ll=(ka=Aa(ll))==null?void 0:ka.bounds,Il=(el=Aa(dl))==null?void 0:el.bounds;if(_l){const Fl=new Expression(Cl,[-1,vl]);ba.addConstraint(new Constraint(Fl,Operator.Eq,nl.xDist,Strength.required))}else if(gl){const Fl=new Expression(Cl,-Il.width/2,[-1,vl],-Ll.width/2);ba.addConstraint(new Constraint(Fl,Operator.Eq,nl.xDist,Strength.required))}}else if("yDist"in nl){const{yDist:sl,top:ll,bottom:dl,edgeToEdge:gl,centerToCenter:_l}=nl,vl=Ma(`${ll}_y`),Cl=Ma(`${dl}_y`),Ll=(tl=Aa(ll))==null?void 0:tl.bounds,Il=(rl=Aa(dl))==null?void 0:rl.bounds;if(_l){const Fl=new Expression(vl,[-1,Cl]);ba.addConstraint(new Constraint(Fl,Operator.Eq,nl.yDist,Strength.required))}else if(gl){const Fl=new Expression(vl,Ll.height/2,[-1,Cl],-Il.height/2);ba.addConstraint(new Constraint(Fl,Operator.Eq,nl.yDist,Strength.required))}}else if("sameY"in nl){const{for:sl}=nl;if(sl.length<2)continue;const ll=sl.map(gl=>Ma(`${gl}_y`)),dl=new Expression(...ll.slice(1));ba.addConstraint(new Constraint(dl,Operator.Eq,ll[0],Strength.required))}else if("sameX"in nl){const{for:sl}=nl;if(sl.length<2)continue;const ll=sl.map(gl=>Ma(`${gl}_x`)),dl=new Expression(...ll.slice(1));ba.addConstraint(new Constraint(dl,Operator.Eq,ll[0],Strength.required))}}ba.updateVariables(),debug2$1.enabled&&(console.log("Solution to layout constraints:"),console.table(Object.entries(Sa).map(([il,nl])=>({var:il,val:nl.value()}))));const Ra={left:1/0,right:-1/0,top:-1/0,bottom:1/0};for(const{selector:il,bounds:{width:nl,height:sl}}of xa){const ll=Ma(`${il}_x`),dl=Ma(`${il}_y`),gl=ll.value()-nl/2,_l=ll.value()+nl/2,vl=dl.value()+sl/2,Cl=dl.value()-sl/2;Ra.left=Math.min(Ra.left,gl),Ra.right=Math.max(Ra.right,_l),Ra.top=Math.max(Ra.top,vl),Ra.bottom=Math.min(Ra.bottom,Cl)}const Ia={x:-(Ra.right+Ra.left)/2,y:-(Ra.top+Ra.bottom)/2},La=this.getPrimitiveContainer()._getGlobalPcbPositionBeforeLayout();Ia.x+=La.x,Ia.y+=La.y;for(const{component:il,selector:nl}of xa){const sl=Ma(`${nl}_x`),ll=Ma(`${nl}_y`);il._setPositionFromLayout({x:sl.value()+Ia.x,y:ll.value()+Ia.y})}}},getNumericSchPinStyle=(ua,J)=>{if(!ua)return;const la={};for(const[xa,Aa]of Object.entries(ua)){const ba=parsePinNumberFromLabelsOrThrow(xa,J),Sa={leftMargin:Aa.marginLeft??Aa.leftMargin,rightMargin:Aa.marginRight??Aa.rightMargin,topMargin:Aa.marginTop??Aa.topMargin,bottomMargin:Aa.marginBottom??Aa.bottomMargin};la[`pin${ba}`]={...la[`pin${ba}`],...Sa}}return la},debug3=Debug$1("tscircuit:core"),rotation3=z$3.object({x:rotation$4,y:rotation$4,z:rotation$4}),NormalComponent=class extends PrimitiveComponent{constructor(J){super(J);jp(this,"reactSubtrees",[]);jp(this,"_impliedFootprint");jp(this,"isPrimitiveContainer",!0);jp(this,"_asyncSupplierPartNumbers");jp(this,"pcb_missing_footprint_error_id");this._addChildrenFromStringFootprint(),this.initPorts()}get defaultInternallyConnectedPinNames(){return[]}get internallyConnectedPinNames(){return this._parsedProps.internallyConnectedPins??this.defaultInternallyConnectedPinNames}initPorts(J={}){var Sa,Ma,Ra,Ia,La,Fa,ka,el,tl,rl;if((Sa=this.root)!=null&&Sa.schematicDisabled)return;const{config:la}=this,xa=[],Aa=this._getSchematicPortArrangement();if(Aa&&!this._parsedProps.pinLabels){for(const sl in Aa){const ll=Aa[sl].pins;if(Array.isArray(ll))for(const dl of ll){const gl=parsePinNumberFromLabelsOrThrow(dl,this._parsedProps.pinLabels);xa.push(new Port({pinNumber:gl,aliases:((Ma=J.additionalAliases)==null?void 0:Ma[`pin${gl}`])??[]},{originDescription:`schPortArrangement:${sl}`}))}}const il=["left","right","top","bottom"];let nl=1;for(const sl of il){const ll=Aa[`${sl}Size`];for(let dl=0;dl<ll;dl++)xa.push(new Port({pinNumber:nl++,aliases:((Ra=J.additionalAliases)==null?void 0:Ra[`pin${nl}`])??[]},{originDescription:`schPortArrangement:${sl}`}))}}const ba=this._parsedProps.pinLabels;if(ba)for(let[il,nl]of Object.entries(ba)){il=il.replace("pin","");let sl=xa.find(gl=>gl._parsedProps.pinNumber===Number(il));const ll=Array.isArray(nl)?nl[0]:nl,dl=Array.isArray(nl)?nl.slice(1):[];sl?(sl.externallyAddedAliases.push(ll,...dl),sl.props.name=ll):(sl=new Port({pinNumber:parseInt(il),name:ll,aliases:[...dl,...((Ia=J.additionalAliases)==null?void 0:Ia[`pin${parseInt(il)}`])??[]]},{originDescription:`pinLabels:pin${il}`}),xa.push(sl))}if(la.schematicSymbolName){const il=symbols_index_default$1[this._getSchematicSymbolNameOrThrow()];if(!il)return;for(const nl of il.ports){const sl=getPinNumberFromLabels(nl.labels);if(!sl)continue;const ll=getPortFromHints(nl.labels.concat(((La=J.additionalAliases)==null?void 0:La[`pin${sl}`])??[]));ll&&(ll.originDescription=`schematicSymbol:labels[0]:${nl.labels[0]}`,ll.schematicSymbolPortDef=nl,xa.push(ll))}this.addAll(xa)}if(!this._getSchematicPortArrangement()){const il=this.getPortsFromFootprint(J);for(const nl of il)xa.some(sl=>sl.isMatchingAnyOf(nl.getNameAndAliases()))||xa.push(nl)}for(let il=1;il<=(J.pinCount??this._getPinCount());il++){if(!Aa||xa.find(sl=>sl._parsedProps.pinNumber===il))continue;let nl=[...((Fa=Aa.leftSide)==null?void 0:Fa.pins)??[],...((ka=Aa.rightSide)==null?void 0:ka.pins)??[],...((el=Aa.topSide)==null?void 0:el.pins)??[],...((tl=Aa.bottomSide)==null?void 0:tl.pins)??[]].map(sl=>parsePinNumberFromLabelsOrThrow(sl,this._parsedProps.pinLabels));["leftSize","rightSize","topSize","bottomSize","leftPinCount","rightPinCount","topPinCount","bottomPinCount"].some(sl=>sl in Aa)&&(nl=Array.from({length:this._getPinCount()},(sl,ll)=>ll+1)),nl.includes(il)&&xa.push(new Port({pinNumber:il,aliases:((rl=J.additionalAliases)==null?void 0:rl[`pin${il}`])??[]},{originDescription:`notOtherwiseAddedButDeducedFromPinCount:${il}`}))}xa.length>0&&this.addAll(xa)}_getImpliedFootprintString(){return null}_addChildrenFromStringFootprint(){var la;let{footprint:J}=this.props;if(J??(J=(la=this._getImpliedFootprintString)==null?void 0:la.call(this)),!!J&&typeof J=="string"){const xa=fp$1.string(J).soup(),Aa=createComponentsFromSoup(xa);this.addAll(Aa)}}get portMap(){return new Proxy({},{get:(J,la)=>{const xa=this.children.find(Aa=>Aa.componentName==="Port"&&Aa.isMatchingNameOrAlias(la));if(!xa)throw new Error(`There was an issue finding the port "${la.toString()}" inside of a ${this.componentName} component with name: "${this.props.name}". This is a bug in @tscircuit/core`);return xa}})}getInstanceForReactElement(J){for(const la of this.reactSubtrees)if(la.element===J)return la.component;return null}doInitialSourceRender(){const J=this.config.sourceFtype;if(!J)return;const{db:la}=this.root,{_parsedProps:xa}=this,Aa=la.source_component.insert({ftype:J,name:xa.name,manufacturer_part_number:xa.manufacturerPartNumber??xa.mfn,supplier_part_numbers:xa.supplierPartNumbers});this.source_component_id=Aa.source_component_id}doInitialSchematicComponentRender(){var xa;if((xa=this.root)!=null&&xa.schematicDisabled)return;const{schematicSymbolName:J}=this.config;if(J)return this._doInitialSchematicComponentRenderWithSymbol();if(this._getSchematicBoxDimensions())return this._doInitialSchematicComponentRenderWithSchematicBoxDimensions()}_getSchematicSymbolDisplayValue(){}_getInternallyConnectedPins(){if(this.internallyConnectedPinNames.length===0)return[];const J=[];for(const la of this.internallyConnectedPinNames){const xa=[];for(const Aa of la)xa.push(this.portMap[Aa]);J.push(xa)}return J}_doInitialSchematicComponentRenderWithSymbol(){var Sa;if((Sa=this.root)!=null&&Sa.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this._getSchematicSymbolNameOrThrow(),Aa=symbols_index_default$1[xa],ba=this._getGlobalSchematicPositionBeforeLayout();if(Aa){const Ma=J.schematic_component.insert({center:ba,rotation:la.schRotation??0,size:Aa.size,source_component_id:this.source_component_id,symbol_name:xa,symbol_display_value:this._getSchematicSymbolDisplayValue()});this.schematic_component_id=Ma.schematic_component_id}}_doInitialSchematicComponentRenderWithSchematicBoxDimensions(){var Fa;if((Fa=this.root)!=null&&Fa.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this._getSchematicBoxDimensions(),Aa={};if(Array.isArray(la.pinLabels))la.pinLabels.forEach((ka,el)=>{Aa[String(el+1)]=ka});else for(const[ka,el]of Object.entries(la.pinLabels??{}))Aa[ka]=Array.isArray(el)?el[0]:el;const ba=this._getGlobalSchematicPositionBeforeLayout(),Sa=this._getSchematicPortArrangement(),Ma=J.schematic_component.insert({center:ba,rotation:la.schRotation??0,size:xa.getSize(),port_arrangement:underscorifyPortArrangement(Sa),pin_spacing:la.schPinSpacing??.2,pin_styles:underscorifyPinStyles(la.schPinStyle,la.pinLabels),port_labels:Aa,source_component_id:this.source_component_id}),Ra=(Sa==null?void 0:Sa.topSide)!==void 0||(Sa==null?void 0:Sa.bottomSide)!==void 0,Ia=xa==null?void 0:xa.getSize().width,La=xa==null?void 0:xa.getSize().height;J.schematic_text.insert({text:la.manufacturerPartNumber??"",schematic_component_id:Ma.schematic_component_id,anchor:"left",rotation:0,position:{x:Ra?ba.x+(Ia??0)/2+.1:ba.x-(Ia??0)/2,y:Ra?ba.y+(La??0)/2+.35:ba.y-(La??0)/2-.13},color:"#006464"}),J.schematic_text.insert({text:la.name??"",schematic_component_id:Ma.schematic_component_id,anchor:"left",rotation:0,position:{x:Ra?ba.x+(Ia??0)/2+.1:ba.x-(Ia??0)/2,y:Ra?ba.y+(La??0)/2+.55:ba.y+(La??0)/2+.13},color:"#006464"}),this.schematic_component_id=Ma.schematic_component_id}doInitialPcbComponentRender(){var Sa;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this.getSubcircuit(),Aa=J.pcb_component.insert({center:this._getGlobalPcbPositionBeforeLayout(),width:0,height:0,layer:la.layer??"top",rotation:la.pcbRotation??0,source_component_id:this.source_component_id,subcircuit_id:xa.subcircuit_id??void 0});if(!la.footprint&&!this.isGroup){const Ma=J.pcb_missing_footprint_error.insert({message:`No footprint found for component: ${this.getString()}`,source_component_id:`${this.source_component_id}`,error_type:"pcb_missing_footprint_error"});this.pcb_missing_footprint_error_id=Ma.pcb_missing_footprint_error_id}this.pcb_component_id=Aa.pcb_component_id;const ba=this.getSubcircuit()._getPcbManualPlacementForComponent(this);this.props.pcbX!==void 0&&this.props.pcbY!==void 0&&ba&&this.renderError({type:"pcb_manual_edit_conflict_error",message:`${this.getString()} has both manual placement and explicit coordinates. pcbX and pcbY will be used. Remove pcbX/pcbY or clear the manual placement.`,pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id})}doInitialPcbComponentSizeCalculation(){var Aa;if((Aa=this.root)!=null&&Aa.pcbDisabled||!this.pcb_component_id)return;const{db:J}=this.root,la=getBoundsOfPcbComponents(this.children);if(la.width===0||la.height===0)return;const xa={x:(la.minX+la.maxX)/2,y:(la.minY+la.maxY)/2};J.pcb_component.update(this.pcb_component_id,{center:xa,width:la.width,height:la.height})}_renderReactSubtree(J){return{element:J,component:createInstanceFromReactElement(J)}}doInitialInitializePortsFromChildren(){this.initPorts()}doInitialReactSubtreesRender(){if(reactExports.isValidElement(this.props.footprint)){if(this.reactSubtrees.some(la=>la.element===this.props.footprint))return;const J=this._renderReactSubtree(this.props.footprint);this.reactSubtrees.push(J),this.add(J.component)}}_hasExistingPortExactly(J){return this.children.filter(xa=>xa.componentName==="Port").some(xa=>{const Aa=J.getNameAndAliases(),ba=xa.getNameAndAliases();return Aa.length===ba.length&&Aa.every(Sa=>ba.includes(Sa))})}add(J){let la;if(reactExports.isValidElement(J)){const xa=this._renderReactSubtree(J);this.reactSubtrees.push(xa),la=xa.component}else la=J;if(la.componentName==="Port"){if(this._hasExistingPortExactly(la))return;const Aa=this.children.filter(ba=>ba.componentName==="Port").find(ba=>ba.isMatchingAnyOf(la.getNameAndAliases()));Aa&&debug3(`Similar ports added. Port 1: ${Aa}, Port 2: ${la}`)}super.add(la)}getPortsFromFootprint(J){let{footprint:la}=this.props;if((!la||reactExports.isValidElement(la))&&(la=this.children.find(Aa=>Aa.componentName==="Footprint")),typeof la=="string"){const Aa=fp$1.string(la).soup(),ba=[];for(const Sa of Aa)if("port_hints"in Sa&&Sa.port_hints){const Ma=getPortFromHints(Sa.port_hints,J);if(!Ma)continue;Ma.originDescription=`footprint:string:${la}:port_hints[0]:${Sa.port_hints[0]}`,ba.push(Ma)}return ba}if(!reactExports.isValidElement(la)&&la&&la.componentName==="Footprint"){const Aa=la;let ba=1;const Sa=[];for(const Ma of Aa.children){if(!Ma.props.portHints)continue;let Ra=Ma.props.portHints;Ra.some(Fa=>Fa.startsWith("pin"))||(Ra=[...Ra,`pin${ba}`]),ba++;const La=getPortFromHints(Ra);La&&(La.originDescription=`footprint:${la}`,Sa.push(La))}return Sa}const xa=[];if(!la){for(const Aa of this.children)if(Aa.props.portHints&&Aa.isPcbPrimitive){const ba=getPortFromHints(Aa.props.portHints);ba&&xa.push(ba)}}return xa}getPortsFromSchematicSymbol(){var Aa;if((Aa=this.root)!=null&&Aa.schematicDisabled)return[];const{config:J}=this;if(!J.schematicSymbolName)return[];const la=symbols_index_default$1[J.schematicSymbolName];if(!la)return[];const xa=[];for(const ba of la.ports){const Sa=getPortFromHints(ba.labels);Sa&&(Sa.schematicSymbolPortDef=ba,xa.push(Sa))}return xa}_createNetsFromProps(J){createNetsFromProps(this,J)}_getPcbCircuitJsonBounds(){const{db:J}=this.root;if(!this.pcb_component_id)return super._getPcbCircuitJsonBounds();const la=J.pcb_component.get(this.pcb_component_id);return{center:{x:la.center.x,y:la.center.y},bounds:{left:la.center.x-la.width/2,top:la.center.y-la.height/2,right:la.center.x+la.width/2,bottom:la.center.y+la.height/2},width:la.width,height:la.height}}_getPinCountFromSchematicPortArrangement(){const J=this._getSchematicPortArrangement();if(!J)return 0;if(!isExplicitPinMappingArrangement(J))return(J.leftSize??J.leftPinCount??0)+(J.rightSize??J.rightPinCount??0)+(J.topSize??J.topPinCount??0)+(J.bottomSize??J.bottomPinCount??0);const{leftSide:xa,rightSide:Aa,topSide:ba,bottomSide:Sa}=J;return Math.max(...(xa==null?void 0:xa.pins)??[],...(Aa==null?void 0:Aa.pins)??[],...(ba==null?void 0:ba.pins)??[],...(Sa==null?void 0:Sa.pins)??[])}_getPinCount(){return this._getSchematicPortArrangement()?this._getPinCountFromSchematicPortArrangement():this.getPortsFromFootprint().length}_getSchematicPortArrangement(){return this._parsedProps.schPinArrangement??this._parsedProps.schPortArrangement}_getSchematicBoxDimensions(){if(this.getSchematicSymbol()||!this.config.shouldRenderAsSchematicBox)return null;const{_parsedProps:J}=this,la=this._getPinCount(),xa=J.schPinSpacing??.2;return getAllDimensionsForSchematicBox({schWidth:J.schWidth,schHeight:J.schHeight,schPinSpacing:xa,numericSchPinStyle:getNumericSchPinStyle(J.schPinStyle,J.pinLabels),pinCount:la,schPortArrangement:this._getSchematicPortArrangement(),pinLabels:J.pinLabels})}doInitialCadModelRender(){var Ia;const{db:J}=this.root,{boardThickness:la=0}=((Ia=this.root)==null?void 0:Ia._getBoard())??{},xa=this._parsedProps.cadModel;if(!this.pcb_component_id||!xa&&!this.props.footprint)return;const Aa=this._getPcbCircuitJsonBounds(),ba=J.pcb_component.get(this.pcb_component_id);if(typeof xa=="string")throw new Error("String cadModel not yet implemented");const Sa=rotation3.parse({x:0,y:0,z:typeof(xa==null?void 0:xa.rotationOffset)=="number"?xa.rotationOffset:0,...typeof(xa==null?void 0:xa.rotationOffset)=="object"?xa.rotationOffset??{}:{}}),Ma=point3$3.parse({x:0,y:0,z:0,...typeof(xa==null?void 0:xa.positionOffset)=="object"?xa.positionOffset:{}}),Ra=this.props.layer==="bottom"?"bottom":"top";J.cad_component.insert({position:{x:Aa.center.x+Ma.x,y:Aa.center.y+Ma.y,z:(Ra==="bottom"?-la/2:la/2)+Ma.z},rotation:{x:Sa.x,y:(Ra==="top"?0:180)+Sa.y,z:((ba==null?void 0:ba.rotation)??0)+(Ra==="bottom"?180:0)+Sa.z},pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,model_stl_url:"stlUrl"in(xa??{})?this._addCachebustToModelUrl(xa.stlUrl):void 0,model_obj_url:"objUrl"in(xa??{})?this._addCachebustToModelUrl(xa.objUrl):void 0,model_jscad:"jscad"in(xa??{})?xa.jscad:void 0,footprinter_string:typeof this.props.footprint=="string"&&!xa?this.props.footprint:void 0})}_addCachebustToModelUrl(J){var xa;if(!J||!J.includes("modelcdn.tscircuit.com"))return J;const la=((xa=this.root)==null?void 0:xa.getClientOrigin())??"";return`${J}${J.includes("?")?"&":"?"}cachebust_origin=${encodeURIComponent(la)}`}doInitialPartsEngineRender(){const J=this.getInheritedProperty("partsEngine");if(!J)return;const{db:la}=this.root,xa=la.source_component.get(this.source_component_id);if(!xa||xa.supplier_part_numbers)return;let Aa;this.props.footprint&&typeof this.props.footprint=="string"&&(Aa=this.props.footprint);const ba=J.findPart({sourceComponent:xa,footprinterString:Aa});if(!(ba instanceof Promise)){la.source_component.update(this.source_component_id,{supplier_part_numbers:ba});return}this._queueAsyncEffect("get-supplier-part-numbers",async()=>{this._asyncSupplierPartNumbers=await ba,this._markDirty("PartsEngineRender")})}updatePartsEngineRender(){const{db:J}=this.root,la=J.source_component.get(this.source_component_id);if(la&&!la.supplier_part_numbers&&this._asyncSupplierPartNumbers){J.source_component.update(this.source_component_id,{supplier_part_numbers:this._asyncSupplierPartNumbers});return}}},getSimpleRouteJsonFromTracesAndDb=({db:ua,traces:J,minTraceWidth:la=.1})=>{const Aa=getObstaclesFromSoup([...ua.pcb_component.list(),...ua.pcb_smtpad.list(),...ua.pcb_plated_hole.list()]).flatMap(Ma=>[{x:Ma.center.x-Ma.width/2,y:Ma.center.y-Ma.height/2},{x:Ma.center.x+Ma.width/2,y:Ma.center.y+Ma.height/2}]),ba={minX:Math.min(...Aa.map(Ma=>Ma.x))-1,maxX:Math.max(...Aa.map(Ma=>Ma.x))+1,minY:Math.min(...Aa.map(Ma=>Ma.y))-1,maxY:Math.max(...Aa.map(Ma=>Ma.y))+1},Sa=J.map(Ma=>{const Ra=Ma._findConnectedPorts();return!Ra.allPortsFound||Ra.ports.length<2?null:{name:Ma.source_trace_id??"",pointsToConnect:Ra.ports.map(Ia=>{const La=Ia._getGlobalPcbPositionBeforeLayout();return{x:La.x,y:La.y,layer:Ia.getAvailablePcbLayers()[0]??"top"}})}}).filter(Ma=>Ma!==null);return{bounds:ba,obstacles:[],connections:Sa,layerCount:2,minTraceWidth:la}},TraceHint=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"matchedPort",null)}get config(){return{componentName:"TraceHint",zodProps:traceHintProps}}doInitialPortMatching(){this.root;const{_parsedProps:J,parent:la}=this;if(!la)return;if(la.componentName==="Trace"){this.renderError(`Port inference inside trace is not yet supported (${this})`);return}if(!la)throw new Error("TraceHint has no parent");if(!J.for){this.renderError(`TraceHint has no for property (${this})`);return}const xa=la.selectOne(J.for,{type:"port"});xa||this.renderError(`${this} could not find port for selector "${J.for}"`),this.matchedPort=xa,xa.registerMatch(this)}getPcbRouteHints(){const{_parsedProps:J}=this,la=J.offset?[J.offset]:J.offsets;if(!la)return[];const xa=this._computePcbGlobalTransformBeforeLayout();return la.map(Aa=>({...applyToPoint(xa,Aa),via:Aa.via,to_layer:Aa.to_layer,trace_width:Aa.trace_width}))}doInitialPcbTraceHintRender(){var la,xa,Aa;if((la=this.root)!=null&&la.pcbDisabled)return;const{db:J}=this.root;J.pcb_trace_hint.insert({pcb_component_id:(xa=this.matchedPort)==null?void 0:xa.pcb_component_id,pcb_port_id:(Aa=this.matchedPort)==null?void 0:Aa.pcb_port_id,route:this.getPcbRouteHints()})}},Group$2=class extends NormalComponent{constructor(){super(...arguments);jp(this,"pcb_group_id",null);jp(this,"subcircuit_id",null);jp(this,"_hasStartedAsyncAutorouting",!1);jp(this,"_asyncAutoroutingResult",null)}get config(){return{zodProps:groupProps,componentName:"Group"}}doInitialSourceRender(){const{db:la}=this.root,xa=la.source_group.insert({name:this._parsedProps.name,is_subcircuit:this.isSubcircuit});this.subcircuit_id=`subcircuit_${xa.source_group_id}`,this.source_group_id=xa.source_group_id,la.source_group.update(xa.source_group_id,{subcircuit_id:this.subcircuit_id})}doInitialSourceParentAttachment(){var Aa,ba,Sa;const{db:la}=this.root;if(!this.isSubcircuit)return;const xa=(Sa=(ba=(Aa=this.parent)==null?void 0:Aa.getSubcircuit)==null?void 0:ba.call(Aa))==null?void 0:Sa.subcircuit_id;xa&&la.source_group.update(this.source_group_id,{parent_subcircuit_id:xa})}doInitialPcbComponentRender(){var Aa;if((Aa=this.root)!=null&&Aa.pcbDisabled)return;const{db:la}=this.root,xa=la.pcb_group.insert({is_subcircuit:this.isSubcircuit,subcircuit_id:this.subcircuit_id,name:this._parsedProps.name,center:this._getGlobalPcbPositionBeforeLayout(),width:0,height:0,pcb_component_ids:[],source_group_id:this.source_group_id});this.pcb_group_id=xa.pcb_group_id}doInitialCreateTraceHintsFromProps(){var ba;const{_parsedProps:la}=this;this.root;const xa=la;if(!this.isSubcircuit)return;const Aa=(ba=xa.layout)==null?void 0:ba.manual_trace_hints;if(Aa)for(const Sa of Aa)this.add(new TraceHint({for:Sa.pcb_port_selector,offsets:Sa.offsets}))}_getSimpleRouteJsonFromPcbTraces(){const la=this.selectAll("trace"),{db:xa}=this.root;return getSimpleRouteJsonFromTracesAndDb({db:xa,traces:la,minTraceWidth:this._parsedProps.minTraceWidth??.1})}doInitialSourceAddConnectivityMapKey(){if(!this.isSubcircuit)return;const{db:la}=this.root,xa=this.selectAll("trace"),Aa=new ConnectivityMap$1({});Aa.addConnections(xa.map(ba=>{const Sa=la.source_trace.get(ba.source_trace_id);return Sa?[Sa.source_trace_id,...Sa.connected_source_port_ids,...Sa.connected_source_net_ids]:null}).filter(ba=>ba!==null));for(const ba of xa){if(!ba.source_trace_id)continue;const Sa=Aa.getNetConnectedToId(ba.source_trace_id);if(!Sa)continue;const{name:Ma}=this._parsedProps;ba.subcircuit_connectivity_map_key=`${Ma??`unnamedsubcircuit${this._renderId}`}_${Sa}`,la.source_trace.update(ba.source_trace_id,{subcircuit_connectivity_map_key:ba.subcircuit_connectivity_map_key})}}_areChildSubcircuitsRouted(){const la=this.selectAll("group").filter(xa=>xa.isSubcircuit);for(const xa of la)if(xa._shouldRouteAsync()&&!xa._asyncAutoroutingResult)return!1;return!0}_shouldRouteAsync(){const la=this._parsedProps;return la.autorouter==="auto-local"||la.autorouter==="auto-cloud"?!0:la.autorouter==="sequential-trace"?!1:typeof la.autorouter=="object"}async _runEffectMakeHttpAutoroutingRequest(){var Ia,La,Fa,ka;const la=Debug$1("tscircuit:core:_runEffectMakeHttpAutoroutingRequest"),xa=this._parsedProps,Aa=((Ia=xa.autorouter)==null?void 0:Ia.serverUrl)??"https://registry-api.tscircuit.com",ba=((La=xa.autorouter)==null?void 0:La.serverMode)??"job",Sa=(el,tl)=>(la("fetching",el),fetch(el,tl)),Ma=this.root.db.toArray().filter(el=>el.type.startsWith("source_")||el.type.startsWith("pcb_"));if(ba==="solve-endpoint"){if(((Fa=this.props.autorouter)==null?void 0:Fa.inputFormat)==="simplified"){const{autorouting_result:tl}=await Sa(`${Aa}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_simple_route_json:this._getSimpleRouteJsonFromPcbTraces(),subcircuit_id:this.subcircuit_id}),headers:{"Content-Type":"application/json"}}).then(rl=>rl.json());this._asyncAutoroutingResult=tl,this._markDirty("PcbTraceRender");return}const{autorouting_result:el}=await Sa(`${Aa}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_circuit_json:Ma,subcircuit_id:this.subcircuit_id}),headers:{"Content-Type":"application/json"}}).then(tl=>tl.json());this._asyncAutoroutingResult=el,this._markDirty("PcbTraceRender");return}const{autorouting_job:Ra}=await Sa(`${Aa}/autorouting/jobs/create`,{method:"POST",body:JSON.stringify({input_circuit_json:Ma,provider:"freerouting",autostart:!0,display_name:(ka=this.root)==null?void 0:ka.name,subcircuit_id:this.subcircuit_id}),headers:{"Content-Type":"application/json"}}).then(el=>el.json());for(;;){const{autorouting_job:el}=await Sa(`${Aa}/autorouting/jobs/get`,{method:"POST",body:JSON.stringify({autorouting_job_id:Ra.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(tl=>tl.json());if(el.is_finished){const{autorouting_job_output:tl}=await Sa(`${Aa}/autorouting/jobs/get_output`,{method:"POST",body:JSON.stringify({autorouting_job_id:Ra.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(rl=>rl.json());this._asyncAutoroutingResult={output_pcb_traces:tl.output_pcb_traces},this._markDirty("PcbTraceRender");break}if(el.has_error)throw new Error(`Autorouting job failed: ${JSON.stringify(el.error)}`);await new Promise(tl=>setTimeout(tl,100))}}_startAsyncAutorouting(){this._hasStartedAsyncAutorouting=!0,this._queueAsyncEffect("make-http-autorouting-request",async()=>this._runEffectMakeHttpAutoroutingRequest())}doInitialPcbTraceRender(){var xa;const la=Debug$1("tscircuit:core:doInitialPcbTraceRender");if(!((xa=this.root)!=null&&xa.pcbDisabled)&&!this._shouldUseTraceByTraceRouting()){if(!this._areChildSubcircuitsRouted()){la(`[${this.getString()}] child subcircuits are not routed, skipping async autorouting until subcircuits routed`);return}la(`[${this.getString()}] no child subcircuits to wait for, initiating async routing`),this._startAsyncAutorouting()}}updatePcbTraceRender(){const la=Debug$1("tscircuit:core:updatePcbTraceRender");if(this._shouldRouteAsync()&&!this._hasStartedAsyncAutorouting){this._areChildSubcircuitsRouted()&&(la(`[${this.getString()}] child subcircuits are now routed, starting async autorouting`),this._startAsyncAutorouting());return}if(this._asyncAutoroutingResult&&!this._shouldUseTraceByTraceRouting()){if(this.root,this._asyncAutoroutingResult.output_simple_route_json){this._updatePcbTraceRenderFromSimpleRouteJson();return}if(this._asyncAutoroutingResult.output_pcb_traces){this._updatePcbTraceRenderFromPcbTraces();return}}}_updatePcbTraceRenderFromSimpleRouteJson(){const{db:la}=this.root,{traces:xa}=this._asyncAutoroutingResult.output_simple_route_json;if(xa){this.selectAll("trace");for(const Aa of xa)la.pcb_trace.insert({route:Aa.route})}}_updatePcbTraceRenderFromPcbTraces(){const{output_pcb_traces:la}=this._asyncAutoroutingResult;if(!la)return;const{db:xa}=this.root;for(const Aa of la)xa.pcb_trace.insert(Aa)}doInitialSchematicLayout(){if(!this.isSubcircuit||!this._parsedProps.schAutoLayoutEnabled)return;const{db:xa}=this.root,Aa=this.getDescendants(),ba=[];for(const Ra of Aa)if("schematic_component_id"in Ra){const Ia=xa.schematic_component.get(Ra.schematic_component_id);if(Ia){const La=xa.schematic_port.list().filter(Fa=>Fa.schematic_component_id===Ia.schematic_component_id);ba.push(...La)}}const Sa=convertSoupToScene(xa.toArray()),Ma=ascendingCentralLrBug1(Sa);mutateSoupForScene(xa.toArray(),Ma)}_shouldUseTraceByTraceRouting(){const la=this._parsedProps;return la.autorouter==="auto-local"||la.autorouter==="sequential-trace"?!0:!la.autorouter}},Board=class extends Group$2{constructor(){super(...arguments);jp(this,"pcb_board_id",null)}get isSubcircuit(){return!0}get config(){return{componentName:"Board",zodProps:boardProps}}get boardThickness(){return 1.4}get allLayers(){return["top","bottom","inner1","inner2"]}doInitialPcbComponentRender(){var Sa,Ma;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this;if(!la.outline&&(!la.width||!la.height))throw new Error("Board width and height or an outline are required");let xa=la.width,Aa=la.height;if(la.outline){const Ra=la.outline.map(tl=>tl.x),Ia=la.outline.map(tl=>tl.y),La=Math.min(...Ra),Fa=Math.max(...Ra),ka=Math.min(...Ia),el=Math.max(...Ia);xa=Fa-La,Aa=el-ka}const ba=J.pcb_board.insert({center:{x:(la.pcbX??0)+(la.outlineOffsetX??0),y:(la.pcbY??0)+(la.outlineOffsetY??0)},thickness:this.boardThickness,num_layers:this.allLayers.length,width:xa,height:Aa,outline:(Ma=la.outline)==null?void 0:Ma.map(Ra=>({x:Ra.x+(la.outlineOffsetX??0),y:Ra.y+(la.outlineOffsetY??0)}))});this.pcb_board_id=ba.pcb_board_id}removePcbComponentRender(){const{db:J}=this.root;this.pcb_board_id&&(J.pcb_board.delete(this.pcb_board_id),this.pcb_board_id=null)}_computePcbGlobalTransformBeforeLayout(){return identity$3()}},stringProxy=new Proxy({},{get:(ua,J)=>J}),FTYPE=stringProxy,DirectLineRouter=class{constructor({input:ua}){jp(this,"input");this.input=ua}solveAndMapToTraces(){const ua=[];for(const J of this.input.connections){if(J.pointsToConnect.length!==2)continue;const[la,xa]=J.pointsToConnect,Aa={type:"pcb_trace",pcb_trace_id:"",route:[{route_type:"wire",x:la.x,y:la.y,layer:"top",width:.1},{route_type:"wire",x:xa.x,y:xa.y,layer:"top",width:.1}]};ua.push(Aa)}return ua}},computeObstacleBounds=ua=>{const J=Math.min(...ua.map(ba=>ba.center.x)),la=Math.max(...ua.map(ba=>ba.center.x)),xa=Math.min(...ua.map(ba=>ba.center.y)),Aa=Math.max(...ua.map(ba=>ba.center.y));return{minX:J,maxX:la,minY:xa,maxY:Aa}},LAYER_SELECTION_PREFERENCE=["top","bottom","inner1","inner2"],findPossibleTraceLayerCombinations=(ua,J=[])=>{var Ma;const la=[];if(J.length===0){const Ra=ua[0].layers;for(const Ia of Ra)la.push(...findPossibleTraceLayerCombinations(ua.slice(1),[Ia]));return la}if(ua.length===0)return[];const xa=ua[0],Aa=xa.via||xa.optional_via,ba=J[J.length-1];if(ua.length===1){const Ra=xa;return Ra.layers&&Aa?Ra.layers.map(Ia=>({layer_path:[...J,Ia]})):(Ma=Ra.layers)!=null&&Ma.includes(ba)?[{layer_path:[...J,ba]}]:[]}if(!Aa)return xa.layers&&!xa.layers.includes(ba)?[]:findPossibleTraceLayerCombinations(ua.slice(1),J.concat([ba]));const Sa=(xa.optional_via?LAYER_SELECTION_PREFERENCE:LAYER_SELECTION_PREFERENCE.filter(Ra=>Ra!==ba)).filter(Ra=>{var Ia;return!xa.layers||((Ia=xa.layers)==null?void 0:Ia.includes(Ra))});for(const Ra of Sa)la.push(...findPossibleTraceLayerCombinations(ua.slice(1),J.concat(Ra)));return la};function getDominantDirection(ua){const J={x:ua.to.x-ua.from.x,y:ua.to.y-ua.from.y},la=Math.abs(J.x),xa=Math.abs(J.y);return la>xa?J.x>0?"right":"left":J.y>0?"down":"up"}function pdist(ua,J){return Math.hypot(ua.x-J.x,ua.y-J.y)}var mergeRoutes=ua=>{if(ua.length===1)return ua[0];if(ua.some(Ra=>Ra.length===0))throw new Error("Cannot merge routes with zero length");const J=[],la=ua[0][0],xa=ua[0][ua[0].length-1],Aa=ua[1][0],ba=ua[1][ua[1].length-1],Sa=Math.min(pdist(la,Aa),pdist(la,ba)),Ma=Math.min(pdist(xa,Aa),pdist(xa,ba));Sa<Ma?J.push(...ua[0].reverse()):J.push(...ua[0]);for(let Ra=1;Ra<ua.length;Ra++){const Ia=J[J.length-1],La=ua[Ra],Fa=La[0],ka=La[La.length-1],el=pdist(Ia,Fa),tl=pdist(Ia,ka);el<tl?J.push(...La):J.push(...La.reverse())}for(let Ra=1;Ra<J.length-1;Ra++){const Ia=J[Ra-1],La=J[Ra];Ia.route_type==="wire"&&La.route_type==="wire"&&Ia.layer!==La.layer&&J.splice(Ra,0,{x:Ia.x,y:Ia.y,from_layer:Ia.layer,to_layer:La.layer,route_type:"via"})}return J};function getTraceLength(ua){let J=0;for(let la=0;la<ua.length;la++){const xa=ua[la];if(xa.route_type==="wire"){const Aa=ua[la+1];if(Aa){const ba=Aa.x-xa.x,Sa=Aa.y-xa.y;J+=Math.sqrt(ba*ba+Sa*Sa)}}else xa.route_type==="via"&&(J+=1.6)}return J}var getDistance=(ua,J)=>{const la="_getGlobalPcbPositionBeforeLayout"in ua?ua._getGlobalPcbPositionBeforeLayout():ua,xa="_getGlobalPcbPositionBeforeLayout"in J?J._getGlobalPcbPositionBeforeLayout():J;return Math.sqrt((la.x-xa.x)**2+(la.y-xa.y)**2)};function getClosest(ua,J){if(J.length===0)throw new Error("No candidates given to getClosest method");let la=J[0],xa=1/0;for(const Aa of J){const ba=getDistance(ua,Aa);ba<xa&&(la=Aa,xa=ba)}return la}var getEnteringEdgeFromDirection=ua=>({up:"bottom",down:"top",left:"right",right:"left"})[ua]??null,getStubEdges=({firstEdge:ua,firstEdgePort:J,firstDominantDirection:la,lastEdge:xa,lastEdgePort:Aa,lastDominantDirection:ba})=>{if(ua&&J)return getStubEdges({lastEdge:{from:ua.to,to:ua.from},lastEdgePort:J,lastDominantDirection:la}).reverse().map(Ma=>({from:Ma.to,to:Ma.from}));let Sa=[];if(xa&&Aa){const Ma={x:xa.to.x,y:xa.to.y};ba==="left"||ba==="right"?(Ma.x=Aa.position.x,Sa.push({from:xa.to,to:{...Ma}}),Sa.push({from:Ma,to:{...Aa.position}})):(Ma.y=Aa.position.y,Sa.push({from:xa.to,to:{...Ma}}),Sa.push({from:Ma,to:{...Aa.position}}))}return Sa=Sa.filter(Ma=>distance$3(Ma.from,Ma.to)>.01),Sa};function tryNow(ua){try{return[ua(),null]}catch(J){return[null,J]}}var getOtherSchematicTraces=({db:ua,source_trace_id:J,sameNetOnly:la,differentNetOnly:xa})=>{!la&&!xa&&(xa=!0);const Aa=ua.source_trace.get(J),ba=[];for(const Sa of ua.schematic_trace.list()){if(Sa.source_trace_id===J)continue;const Ma=ua.source_trace.get(Sa.source_trace_id),Ra=(Ma==null?void 0:Ma.subcircuit_connectivity_map_key)===Aa.subcircuit_connectivity_map_key;xa&&Ra||la&&!Ra||ba.push(Sa)}return ba},createSchematicTraceCrossingSegments=({edges:ua,otherEdges:J})=>{const la=[...ua];for(let xa=0;xa<la.length;xa++){if(xa>2e3)throw new Error("Over 2000 iterations spent inside createSchematicTraceCrossingSegments, you have triggered an infinite loop, please report this!");const Aa=la[xa],ba=Math.abs(Aa.from.x-Aa.to.x)<.01?"vertical":Aa.from.y===Aa.to.y?"horizontal":"not-orthogonal";if(ba==="not-orthogonal")continue;const Sa=[];for(const rl of J){const il=rl.from.x===rl.to.x?"vertical":rl.from.y===rl.to.y?"horizontal":"not-orthogonal";if(il==="not-orthogonal"||ba===il)continue;if(doesLineIntersectLine([Aa.from,Aa.to],[rl.from,rl.to],{lineThickness:.01})){const sl=ba==="vertical"?Aa.from.x:rl.from.x,ll=ba==="vertical"?rl.from.y:Aa.from.y,dl={x:sl,y:ll};Sa.push({otherEdge:rl,crossingPoint:dl,distanceFromEdgeFrom:distance$3(Aa.from,dl)})}}if(Sa.length===0)continue;let Ma=Sa[0];for(const rl of Sa)rl.distanceFromEdgeFrom<Ma.distanceFromEdgeFrom&&(Ma=rl);const Ra=Ma.crossingPoint,Ia=.075;if(Ra.x===Aa.from.x&&Ra.y===Aa.from.y)continue;const La=getUnitVectorFromPointAToB(Aa.from,Ra),Fa={x:Ra.x-La.x*Ia/2,y:Ra.y-La.y*Ia/2},ka={x:Ra.x+La.x*Ia/2,y:Ra.y+La.y*Ia/2},el=distance$3(ka,Aa.to)<Ia,tl=[{from:Aa.from,to:Fa},{from:Fa,to:ka,is_crossing:!0},{from:ka,to:Aa.to}];la.splice(xa,1,...tl),xa+=tl.length-2,el&&xa++}return la},getIntersectionPoint=(ua,J)=>{if(ua.from.x===ua.to.x&&J.from.x===J.to.x)return null;if(ua.from.x===ua.to.x){const La=ua.from.x,Fa=(J.to.y-J.from.y)/(J.to.x-J.from.x),ka=J.from.y-Fa*J.from.x,el=Fa*La+ka;return La>=Math.min(J.from.x,J.to.x)&&La<=Math.max(J.from.x,J.to.x)&&el>=Math.min(J.from.y,J.to.y)&&el<=Math.max(J.from.y,J.to.y)?{x:La,y:el}:null}if(J.from.x===J.to.x){const La=J.from.x,Fa=(ua.to.y-ua.from.y)/(ua.to.x-ua.from.x),ka=ua.from.y-Fa*ua.from.x,el=Fa*La+ka;return La>=Math.min(ua.from.x,ua.to.x)&&La<=Math.max(ua.from.x,ua.to.x)&&el>=Math.min(ua.from.y,ua.to.y)&&el<=Math.max(ua.from.y,ua.to.y)?{x:La,y:el}:null}const la=(ua.to.y-ua.from.y)/(ua.to.x-ua.from.x),xa=ua.from.y-la*ua.from.x,Aa=(J.to.y-J.from.y)/(J.to.x-J.from.x),ba=J.from.y-Aa*J.from.x;if(la===Aa)return null;const Sa=(ba-xa)/(la-Aa),Ma=la*Sa+xa,Ra=Sa>=Math.min(ua.from.x,ua.to.x)&&Sa<=Math.max(ua.from.x,ua.to.x)&&Ma>=Math.min(ua.from.y,ua.to.y)&&Ma<=Math.max(ua.from.y,ua.to.y),Ia=Sa>=Math.min(J.from.x,J.to.x)&&Sa<=Math.max(J.from.x,J.to.x)&&Ma>=Math.min(J.from.y,J.to.y)&&Ma<=Math.max(J.from.y,J.to.y);return Ra&&Ia?{x:Sa,y:Ma}:null},createSchematicTraceJunctions=({edges:ua,db:J,source_trace_id:la})=>{const xa=getOtherSchematicTraces({db:J,source_trace_id:la,sameNetOnly:!0}).flatMap(Aa=>Aa.edges);for(const Aa of ua)for(const ba of xa){const Sa=getIntersectionPoint(Aa,ba);if(Sa)return`${Sa.x}${Sa.y}`,[{x:Sa.x,y:Sa.y}]}return[]},pushEdgesOfSchematicTraceToPreventOverlap=({edges:ua,db:J,source_trace_id:la})=>{J.source_trace.get(la);const xa=getOtherSchematicTraces({db:J,source_trace_id:la,differentNetOnly:!0}).flatMap(ba=>ba.edges),Aa=ba=>{const{from:Sa,to:Ma}=ba;return Sa.x===Ma.x?"vertical":"horizontal"};for(const ba of ua){const Sa=Aa(ba),Ma=()=>xa.find(Ia=>Aa(Ia)===Sa&&doesLineIntersectLine([ba.from,ba.to],[Ia.from,Ia.to],{lineThickness:.05}));let Ra=Ma();for(;Ra;)Sa==="horizontal"?(ba.from.y+=.1,ba.to.y+=.1):(ba.from.x+=.1,ba.to.x+=.1),Ra=Ma()}},countComplexElements=(ua,J)=>{let la=0;la+=ua.length??0,la+=J.filter(xa=>xa.is_crossing).length;for(let xa=1;xa<J.length;xa++){const Aa=J[xa-1],ba=J[xa],Sa=Math.abs(Aa.from.x-Aa.to.x)<.01,Ma=Math.abs(ba.from.x-ba.to.x)<.01;Sa!==Ma&&la++}return la},calculateOffsets=ua=>{var Ma,Ra;const J={left:{x:-.5,y:0},up:{x:.5,y:.5},right:{x:.5,y:0},down:{x:0,y:-.5}}[ua.facingDirection],la=(Ma=ua.parent)!=null&&Ma.config.shouldRenderAsSchematicBox?3:1,xa=(Ra=ua.parent)!=null&&Ra.config.shouldRenderAsSchematicBox&&(ua.facingDirection==="left"||ua.facingDirection==="right")?3:1,Aa=J.x,ba=J.y,Sa=ua.facingDirection==="up"?.5:0;return{schBoxVertOffset:la,schBoxHorzOffset:xa,horzPortDirection:Aa,vertPortDirectionOffset:ba,handleUp:Sa}},createDownwardNetLabelGroundSymbol=({fromPort:ua,toPort:J,fromAnchorPos:la,toAnchorPos:xa,schDisplayLabel:Aa,source_trace_id:ba},{db:Sa})=>{const Ma=calculateOffsets(ua);Sa.schematic_net_label.insert({anchor_side:"top",center:{x:la.x+Ma.horzPortDirection*Ma.schBoxHorzOffset,y:la.y+Ma.vertPortDirectionOffset*Ma.schBoxVertOffset},source_net_id:ua.source_port_id,text:Aa,anchor_position:{x:la.x+Ma.horzPortDirection*Ma.schBoxHorzOffset,y:la.y+Ma.vertPortDirectionOffset*Ma.schBoxVertOffset},symbol_name:"ground_horz"}),Sa.schematic_trace.insert({edges:[{from:{x:la.x,y:la.y},to:{x:la.x,y:la.y+Ma.handleUp*Ma.schBoxVertOffset}},{from:{x:la.x,y:la.y},to:{x:la.x+Ma.horzPortDirection*Ma.schBoxHorzOffset,y:la.y+Ma.vertPortDirectionOffset*Ma.schBoxVertOffset}}],junctions:[{x:la.x+Ma.horzPortDirection*Ma.schBoxHorzOffset,y:la.y+Ma.vertPortDirectionOffset*Ma.schBoxVertOffset}],source_trace_id:ba});const Ra=calculateOffsets(J);Sa.schematic_net_label.insert({anchor_side:"top",center:{x:xa.x+Ra.horzPortDirection*Ra.schBoxHorzOffset,y:xa.y+Ra.vertPortDirectionOffset*Ra.schBoxVertOffset},source_net_id:J.source_port_id,text:Aa,anchor_position:{x:xa.x+Ra.horzPortDirection*Ra.schBoxHorzOffset,y:xa.y+Ra.vertPortDirectionOffset*Ra.schBoxVertOffset},symbol_name:"ground_horz"});const Ia=J.facingDirection==="up"?.5:0;Sa.schematic_trace.insert({edges:[{from:{x:xa.x,y:xa.y},to:{x:xa.x,y:xa.y+Ia*Ra.schBoxVertOffset}},{from:{x:xa.x,y:xa.y},to:{x:xa.x+Ra.horzPortDirection*Ra.schBoxHorzOffset,y:xa.y+Ra.vertPortDirectionOffset*Ra.schBoxVertOffset}}],junctions:[{x:xa.x+Ra.horzPortDirection*Ra.schBoxHorzOffset,y:xa.y+Ra.vertPortDirectionOffset*Ra.schBoxVertOffset}],source_trace_id:ba})},getMaxLengthFromConnectedCapacitors=(ua,{db:J})=>{const la=ua.map(xa=>{const Aa=J.source_port.get(xa.source_port_id);if(!(Aa!=null&&Aa.source_component_id))return null;const ba=J.source_component.get(Aa.source_component_id);return(ba==null?void 0:ba.ftype)==="simple_capacitor"?ba.max_decoupling_trace_length:null}).filter(xa=>xa!==null);if(la.length!==0)return Math.min(...la)};function getTraceDisplayName({ports:ua,nets:J}){var la,xa,Aa;if(ua.length>=2)return`${(la=ua[0])==null?void 0:la.selector} to ${(xa=ua[1])==null?void 0:xa.selector}`;if(ua.length===1&&J.length===1)return`${(Aa=ua[0])==null?void 0:Aa.selector} to net.${J[0]._parsedProps.name}`}var getSchematicObstaclesForTrace=ua=>{var ba;const J=ua.root.db,la=ua._findConnectedPorts().ports??[],xa=new Set(la.map(Sa=>Sa.schematic_port_id)),Aa=[];for(const Sa of J.toArray()){if(Sa.type==="schematic_component"){const Ma=!!Sa.symbol_name,Ra=Sa.size.width>Sa.size.height?"horz":"vert";Aa.push({type:"rect",layers:["top"],center:Sa.center,width:Sa.size.width+(Ma&&Ra==="horz"?-.5:0),height:Sa.size.height+(Ma&&Ra==="vert"?-.5:0),connectedTo:[]})}if(Sa.type==="schematic_port"){if(xa.has(Sa.schematic_port_id))continue;const Ma=Sa.facing_direction?getUnitVectorFromDirection(Sa.facing_direction):{x:0,y:0};Aa.push({type:"rect",layers:["top"],center:{x:Sa.center.x-Ma.x*.1,y:Sa.center.y-Ma.y*.1},width:.1+Math.abs(Ma.x)*.3,height:.1+Math.abs(Ma.y)*.3,connectedTo:[]})}Sa.type==="schematic_text"&&Aa.push({type:"rect",layers:["top"],center:Sa.position,width:(((ba=Sa.text)==null?void 0:ba.length)??0)*.1,height:.2,connectedTo:[]}),Sa.type==="schematic_box"&&Aa.push({type:"rect",layers:["top"],center:{x:Sa.x,y:Sa.y},width:Sa.width,height:Sa.height,connectedTo:[]})}return Aa},portToObjective=ua=>({...ua._getGlobalPcbPositionAfterLayout(),layers:ua.getAvailablePcbLayers()}),Trace2=class extends PrimitiveComponent{constructor(J){super(J);jp(this,"source_trace_id",null);jp(this,"pcb_trace_id",null);jp(this,"schematic_trace_id",null);jp(this,"_portsRoutedOnPcb");jp(this,"subcircuit_connectivity_map_key",null);this._portsRoutedOnPcb=[]}get config(){return{zodProps:traceProps,componentName:"Trace"}}_getTracePortOrNetSelectorListFromProps(){return"from"in this.props&&"to"in this.props?[typeof this.props.from=="string"?this.props.from:this.props.from.getPortSelector(),typeof this.props.to=="string"?this.props.to:this.props.to.getPortSelector()]:"path"in this.props?this.props.path.map(J=>typeof J=="string"?J:J.getPortSelector()):[]}getTracePortPathSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter(J=>!J.includes("net."))}getTracePathNetSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter(J=>J.includes("net."))}_findConnectedPorts(){this.root;const{_parsedProps:J,parent:la}=this;if(!la)throw new Error("Trace has no parent");const Aa=this.getTracePortPathSelectors().map(ba=>({selector:ba,port:this.getSubcircuit().selectOne(ba,{type:"port"})??null}));for(const{selector:ba,port:Sa}of Aa)if(!Sa){const Ma=ba.replace(/\>.*$/,""),Ra=this.getSubcircuit().selectOne(Ma);Ra?this.renderError(`Could not find port for selector "${ba}" (did you forget to include the pin name?)
7540
- searched component ${Ra.getString()}, which has ports: ${Ra.children.filter(Ia=>Ia.componentName==="Port").map(Ia=>`${Ia.getString()}(${Ia.getNameAndAliases().join(",")})`).join(" & ")}`):this.renderError(`Could not find port for selector "${ba}"`)}return Aa.some(ba=>!ba.port)?{allPortsFound:!1}:{allPortsFound:!0,portsWithSelectors:Aa,ports:Aa.map(({port:ba})=>ba)}}_findConnectedNets(){const J=this.getTracePathNetSelectors().map(xa=>({selector:xa,net:this.getSubcircuit().selectOne(xa,{type:"net"})})),la=J.filter(xa=>!xa.net);return la.length>0&&this.renderError(`Could not find net for selector "${la[0].selector}" inside ${this}`),{netsWithSelectors:J,nets:J.map(xa=>xa.net)}}_getAllTracesConnectedToSameNet(){const J=this.getSubcircuit().selectAll("trace"),la=this._findConnectedNets().nets,xa=this._findConnectedPorts().ports??[];return J.filter(Aa=>{if(Aa===this)return!1;const ba=Aa._findConnectedNets().nets,Sa=Aa._findConnectedPorts().ports??[];return ba.some(Ma=>la.includes(Ma))||Sa.some(Ma=>xa.includes(Ma))})}_isExplicitlyConnectedToPort(J){const{allPortsFound:la,portsWithSelectors:xa}=this._findConnectedPorts();return la?xa.map(ba=>ba.port).includes(J):!1}_isExplicitlyConnectedToNet(J){return this._findConnectedNets().nets.includes(J)}doInitialCreateNetsFromProps(){createNetsFromProps(this,this.getTracePathNetSelectors())}doInitialSourceTraceRender(){const{db:J}=this.root,{_parsedProps:la,parent:xa}=this;if(!xa){this.renderError("Trace has no parent");return}const{allPortsFound:Aa,portsWithSelectors:ba}=this._findConnectedPorts();if(!Aa)return;const Sa=this._findConnectedNets().nets,Ma=getTraceDisplayName({ports:ba,nets:Sa}),Ra=J.source_trace.insert({connected_source_port_ids:ba.map(Ia=>Ia.port.source_port_id),connected_source_net_ids:Sa.map(Ia=>Ia.source_net_id),max_length:getMaxLengthFromConnectedCapacitors(ba.map(Ia=>Ia.port),{db:J})??la.maxLength,display_name:Ma});this.source_trace_id=Ra.source_trace_id}doInitialPcbTraceRender(){var Cl,Ll,Il;if((Cl=this.root)!=null&&Cl.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la,parent:xa}=this,Aa=this.getSubcircuit();if(!xa)throw new Error("Trace has no parent");if(Aa._parsedProps.routingDisabled)return;const ba=(Ll=Aa._parsedProps.pcbRouteCache)==null?void 0:Ll.pcbTraces;if(ba){const Fl=J.pcb_trace.insert({route:ba.flatMap(Ol=>Ol.route),source_trace_id:this.source_trace_id,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Il=this.getGroup())==null?void 0:Il.pcb_group_id)??void 0});this.pcb_trace_id=Fl.pcb_trace_id;return}if(!Aa._shouldUseTraceByTraceRouting())return;const{allPortsFound:Sa,ports:Ma}=this._findConnectedPorts();if(!Sa)return;const Ra=[];for(const Fl of Ma)Fl._hasMatchedPcbPrimitive()||Ra.push(Fl);if(Ra.length>0){J.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:this.source_trace_id,message:`Some ports did not have a matching PCB primitive (e.g. a pad or plated hole), this can happen if a footprint is missing. As a result, ${this} wasn't routed. Missing ports: ${Ra.map(Fl=>Fl.getString()).join(", ")}`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:Ra.map(Fl=>Fl.pcb_port_id).filter(Boolean)});return}const Ia=this._findConnectedNets().netsWithSelectors;if(Ma.length===0&&Ia.length===2){this.renderError("Trace connects two nets, we haven't implemented a way to route this yet");return}else if(Ma.length===1&&Ia.length===1){const Fl=Ma[0],ql=Ia[0].net.getAllConnectedPorts().filter(sc=>sc!==Fl);if(ql.length===0){console.log("Nothing to connect this port to, the net is empty. TODO should emit a warning!");return}const rc=getClosest(Fl,ql);Ma.push(rc)}else if(Ma.length>1&&Ia.length>=1){this.renderError("Trace has more than one port and one or more nets, we don't currently support this type of complex trace routing");return}const La=Ma.flatMap(Fl=>Fl.matchedComponents.filter(Ol=>Ol.componentName==="TraceHint")),Fa=(this._parsedProps.pcbRouteHints??[]).concat(La.flatMap(Fl=>Fl.getPcbRouteHints()));if(Ma.length>2){this.renderError(`Trace has more than two ports (${Ma.map(Fl=>Fl.getString()).join(", ")}), routing between more than two ports for a single trace is not implemented`);return}if(this.getSubcircuit().selectAll("trace").filter(Fl=>Fl.renderPhaseStates.PcbTraceRender.initialized).some(Fl=>Fl._portsRoutedOnPcb.length===Ma.length&&Fl._portsRoutedOnPcb.every(Ol=>Ma.includes(Ol))))return;let tl=[];Fa.length===0?tl=[portToObjective(Ma[0]),portToObjective(Ma[1])]:tl=[portToObjective(Ma[0]),...Fa,portToObjective(Ma[1])];const rl=findPossibleTraceLayerCombinations(tl),il=getFullConnectivityMapFromCircuitJson$1(this.root.db.toArray()),[nl,sl]=tryNow(()=>getObstaclesFromSoup(this.root.db.toArray()));if(sl){this.renderError({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:this.pcb_trace_id,message:`Error getting obstacles for autorouting: ${sl.message}`,source_trace_id:this.source_trace_id,center:{x:0,y:0},pcb_port_ids:Ma.map(Fl=>Fl.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[]});return}for(const Fl of nl)if(Fl.connectedTo.length>0){const ql=il.getNetConnectedToId(Fl.connectedTo[0]);ql&&Fl.connectedTo.push(ql)}let ll=[];if(rl.length===0)ll=tl;else{const Fl=rl[0].layer_path;ll=tl.map((Ol,ql)=>Ol.via?{...Ol,via_to_layer:Fl[ql]}:{...Ol,layers:[Fl[ql]]})}ll[0].pcb_port_id=Ma[0].pcb_port_id,ll[ll.length-1].pcb_port_id=Ma[1].pcb_port_id;const dl=[];for(const[Fl,Ol]of pairs$1(ll)){const ql="via_to_layer"in Fl?Fl.via_to_layer:null,rc=2,sc="layers"in Fl&&Fl.layers.length===1?Fl.layers[0]:ql??"top",Kl="layers"in Ol&&Ol.layers.length===1?Ol.layers[0]:ql??"top",Gl="pcb_port_id"in Fl?Fl.pcb_port_id:null,kl="pcb_port_id"in Ol?Ol.pcb_port_id:null,Wl=this.getSubcircuit()._parsedProps.minTraceWidth??.16,tc=new MultilayerIjump({OBSTACLE_MARGIN:Wl*2,isRemovePathLoopsEnabled:!0,optimizeWithGoalBoxes:!!(Gl&&kl),connMap:il,input:{obstacles:nl,minTraceWidth:Wl,connections:[{name:this.source_trace_id,pointsToConnect:[{...Fl,layer:sc,pcb_port_id:Gl},{...Ol,layer:Kl,pcb_port_id:kl}]}],layerCount:2,bounds:{minX:Math.min(Fl.x,Ol.x)-rc,maxX:Math.max(Fl.x,Ol.x)+rc,minY:Math.min(Fl.y,Ol.y)-rc,maxY:Math.max(Fl.y,Ol.y)+rc}}});let Zl=null;try{Zl=tc.solveAndMapToTraces()}catch(_c){this.renderError({type:"pcb_trace_error",pcb_trace_error_id:this.source_trace_id,error_type:"pcb_trace_error",message:`error solving route: ${_c.message}`,source_trace_id:this.pcb_trace_id,center:{x:(Fl.x+Ol.x)/2,y:(Fl.y+Ol.y)/2},pcb_port_ids:Ma.map(Dc=>Dc.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:Ma.map(Dc=>Dc.pcb_component_id)})}if(!Zl)return;if(Zl.length===0){this.renderError({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:this.pcb_trace_id,message:`Could not find a route for ${this}`,source_trace_id:this.source_trace_id,center:{x:(Fl.x+Ol.x)/2,y:(Fl.y+Ol.y)/2},pcb_port_ids:Ma.map(_c=>_c.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:Ma.map(_c=>_c.pcb_component_id)});return}const[ac]=Zl;ql&&(ac.route=ac.route.map(_c=>(_c.route_type==="wire"&&!_c.layer&&(_c.layer=ql),_c))),Gl&&ac.route[0].route_type==="wire"&&(ac.route[0].start_pcb_port_id=Gl);const Cc=ac.route[ac.route.length-1];kl&&Cc.route_type==="wire"&&(Cc.end_pcb_port_id=kl),dl.push(ac.route)}const gl=mergeRoutes(dl),_l=getTraceLength(gl),vl=J.pcb_trace.insert({route:gl,source_trace_id:this.source_trace_id,trace_length:_l});this._portsRoutedOnPcb=Ma,this.pcb_trace_id=vl.pcb_trace_id;for(const Fl of gl)Fl.route_type==="via"&&J.pcb_via.insert({pcb_trace_id:vl.pcb_trace_id,x:Fl.x,y:Fl.y,hole_diameter:.3,outer_diameter:.6,layers:[Fl.from_layer,Fl.to_layer],from_layer:Fl.from_layer,to_layer:Fl.to_layer})}_doInitialSchematicTraceRenderWithDisplayLabel(){var dl,gl,_l,vl;if((dl=this.root)!=null&&dl.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la,parent:xa}=this;if(!xa)throw new Error("Trace has no parent");const{allPortsFound:Aa,portsWithSelectors:ba}=this._findConnectedPorts();if(!Aa)return;const Sa=ba.map(({port:Cl})=>({port:Cl,position:Cl._getGlobalSchematicPositionAfterLayout(),schematic_port_id:Cl.schematic_port_id,facingDirection:Cl.facingDirection}));if(Sa.length<2)throw new Error("Expected at least two ports in portsWithPosition.");let Ma,Ra;const Ia=Sa[0].position,La=Sa[0].port;if("path"in this.props){if(this.props.path.length!==2)throw new Error("Invalid 'path': Must contain exactly two elements.");[Ma,Ra]=this.props.path}else{if(!("from"in this.props&&"to"in this.props))throw new Error("Missing 'from' or 'to' properties in props.");Ma=this.props.from,Ra=this.props.to}if(!La.source_port_id)throw new Error(`Missing source_port_id for the 'from' port (${Ma}).`);const Fa=Sa[1].position,ka=Sa[1].port;if(!ka.source_port_id)throw new Error(`Missing source_port_id for the 'to' port (${Ra}).`);const el=J.schematic_net_label.list().find(Cl=>Cl.source_net_id===La.source_port_id),tl=J.schematic_net_label.list().find(Cl=>Cl.source_net_id===ka.source_port_id),[rl,il]=ba.map(({port:Cl})=>Cl),sl=((gl=rl.parent)==null?void 0:gl.config.shouldRenderAsSchematicBox)?`${(_l=rl==null?void 0:rl.parent)==null?void 0:_l.props.name}_${rl==null?void 0:rl.props.name}`:`${(vl=il==null?void 0:il.parent)==null?void 0:vl.props.name}_${il==null?void 0:il.props.name}`,ll=this.props.schDisplayLabel??sl;if(el&&el.text!==ll&&(el.text=`${ll} / ${el.text}`),tl&&(tl==null?void 0:tl.text)!==ll&&(tl.text=`${ll} / ${tl.text}`),!el&&!tl&&(ll!=null&&ll.toLocaleLowerCase().includes("gnd")||ll!=null&&ll.toLocaleLowerCase().includes("ground"))){createDownwardNetLabelGroundSymbol({fromPort:La,toPort:ka,fromAnchorPos:Ia,toAnchorPos:Fa,schDisplayLabel:this.props.schDisplayLabel,source_trace_id:this.source_trace_id},{db:J});return}tl||J.schematic_net_label.insert({text:this.props.schDisplayLabel??sl,source_net_id:ka.source_port_id,anchor_position:Fa,center:Fa,anchor_side:getEnteringEdgeFromDirection(ka.facingDirection)??"bottom"}),el||J.schematic_net_label.insert({text:this.props.schDisplayLabel??sl,source_net_id:La.source_port_id,anchor_position:Ia,center:Ia,anchor_side:getEnteringEdgeFromDirection(La.facingDirection)??"bottom"})}_isSymbolToChipConnection(){const{allPortsFound:J,ports:la}=this._findConnectedPorts();if(!J||la.length!==2)return!1;const[xa,Aa]=la;if(!(xa!=null&&xa.parent)||!(Aa!=null&&Aa.parent))return!1;const ba=xa.parent.config.shouldRenderAsSchematicBox,Sa=Aa.parent.config.shouldRenderAsSchematicBox;return ba&&!Sa||!ba&&Sa}_isSymbolToSymbolConnection(){const{allPortsFound:J,ports:la}=this._findConnectedPorts();if(!J||la.length!==2)return!1;const[xa,Aa]=la;if(!(xa!=null&&xa.parent)||!(Aa!=null&&Aa.parent))return!1;const ba=!xa.parent.config.shouldRenderAsSchematicBox,Sa=!Aa.parent.config.shouldRenderAsSchematicBox;return ba&&Sa}_isChipToChipConnection(){const{allPortsFound:J,ports:la}=this._findConnectedPorts();if(!J||la.length!==2)return!1;const[xa,Aa]=la;if(!(xa!=null&&xa.parent)||!(Aa!=null&&Aa.parent))return!1;const ba=xa.parent.config.shouldRenderAsSchematicBox,Sa=Aa.parent.config.shouldRenderAsSchematicBox;return ba&&Sa}doInitialSchematicTraceRender(){var ql;if((ql=this.root)!=null&&ql.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la,parent:xa}=this;if(!xa)throw new Error("Trace has no parent");const{allPortsFound:Aa,portsWithSelectors:ba}=this._findConnectedPorts(),{netsWithSelectors:Sa}=this._findConnectedNets();if(!Aa)return;if(this.props.schDisplayLabel&&("from"in this.props&&"to"in this.props||"path"in this.props)){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const Ma={name:this.source_trace_id,pointsToConnect:[]},Ra=getSchematicObstaclesForTrace(this),Ia=ba.map(({port:rc})=>({port:rc,position:rc._getGlobalSchematicPositionAfterLayout(),schematic_port_id:rc.schematic_port_id??void 0,facingDirection:rc.facingDirection}));if(Ia.length===1&&Sa.length===1){const rc=Sa[0].net,{port:sc,position:Kl}=Ia[0];J.schematic_net_label.insert({text:rc._parsedProps.name,source_net_id:rc.source_net_id,anchor_position:Kl,center:Kl,anchor_side:getEnteringEdgeFromDirection(sc.facingDirection)??"bottom"});return}if(Ia.length<2)return;Ma.pointsToConnect=Ia.map(({position:rc})=>({...rc,layer:"top"}));const Fa=computeObstacleBounds(Ra),ka=2,el={minTraceWidth:.1,obstacles:Ra,connections:[Ma],bounds:{minX:Fa.minX-ka,maxX:Fa.maxX+ka,minY:Fa.minY-ka,maxY:Fa.maxY+ka},layerCount:1};let tl=MultilayerIjump,rl=!1;this.getSubcircuit().props._schDirectLineRoutingEnabled&&(tl=DirectLineRouter,rl=!0);let nl=new tl({input:el,MAX_ITERATIONS:100,OBSTACLE_MARGIN:.1,isRemovePathLoopsEnabled:!0,isShortenPathWithShortcutsEnabled:!0,marginsWithCosts:[{margin:1,enterCost:0,travelCostFactor:1},{margin:.3,enterCost:0,travelCostFactor:1},{margin:.2,enterCost:0,travelCostFactor:2},{margin:.1,enterCost:0,travelCostFactor:3}]}).solveAndMapToTraces();if(nl.length===0){if(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection()||this._isChipToChipConnection()){this._doInitialSchematicTraceRenderWithDisplayLabel();return}nl=new DirectLineRouter({input:el}).solveAndMapToTraces(),rl=!0}const[{route:sl}]=nl;let ll=[];for(let rc=0;rc<sl.length-1;rc++)ll.push({from:sl[rc],to:sl[rc+1]});const dl=this.source_trace_id;let gl=[];if(!rl){pushEdgesOfSchematicTraceToPreventOverlap({edges:ll,db:J,source_trace_id:dl});const rc=getOtherSchematicTraces({db:J,source_trace_id:dl,differentNetOnly:!0}).flatMap(sc=>sc.edges);ll=createSchematicTraceCrossingSegments({edges:ll,otherEdges:rc}),gl=createSchematicTraceJunctions({edges:ll,db:J,source_trace_id:this.source_trace_id})}const _l=ll[ll.length-1],vl=Ia[Ia.length-1],Cl=getDominantDirection(_l);ll.push(...getStubEdges({lastEdge:_l,lastEdgePort:vl,lastDominantDirection:Cl}));const Ll=ll[0],Il=Ia[0],Fl=getDominantDirection(Ll);if(ll.unshift(...getStubEdges({firstEdge:Ll,firstEdgePort:Il,firstDominantDirection:Fl})),!this.source_trace_id)throw new Error("Missing source_trace_id for schematic trace insertion.");if(this.getSubcircuit()._parsedProps.schTraceAutoLabelEnabled&&countComplexElements(gl,ll)>=5&&(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection()||this._isChipToChipConnection())){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const Ol=J.schematic_trace.insert({source_trace_id:this.source_trace_id,edges:ll,junctions:gl});this.schematic_trace_id=Ol.schematic_trace_id}},Capacitor=class extends NormalComponent{get config(){return{componentName:"Capacitor",schematicSymbolName:this.props.symbolName??"capacitor",zodProps:capacitorProps,sourceFtype:FTYPE.simple_capacitor}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.capacitance)}F`}doInitialCreateNetsFromProps(){this._createNetsFromProps([this.props.decouplingFor,this.props.decouplingTo])}doInitialCreateTracesFromProps(){this.props.decouplingFor&&this.props.decouplingTo&&(this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.decouplingFor})),this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.decouplingTo})))}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_capacitor",name:J.name,manufacturer_part_number:J.manufacturerPartNumber??J.mfn,supplier_part_numbers:J.supplierPartNumbers,capacitance:J.capacitance,max_decoupling_trace_length:J.maxDecouplingTraceLength,display_capacitance:this._getSchematicSymbolDisplayValue()});this.source_component_id=la.source_component_id}},Chip=class extends NormalComponent{constructor(){super(...arguments);jp(this,"schematicBoxDimensions",null)}get config(){return{componentName:"Chip",zodProps:chipProps,shouldRenderAsSchematicBox:!0}}doInitialSchematicComponentRender(){const{_parsedProps:J}=this;(J==null?void 0:J.noSchematicRepresentation)!==!0&&super.doInitialSchematicComponentRender()}doInitialSourceRender(){const{db:J}=this.root,{_parsedProps:la}=this,xa=J.source_component.insert({ftype:"simple_chip",name:la.name,manufacturer_part_number:la.manufacturerPartNumber,supplier_part_numbers:la.supplierPartNumbers});this.source_component_id=xa.source_component_id}doInitialPcbComponentRender(){var Aa;if((Aa=this.root)!=null&&Aa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=J.pcb_component.insert({center:{x:la.pcbX??0,y:la.pcbY??0},width:2,height:3,layer:la.layer??"top",rotation:la.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=xa.pcb_component_id}doInitialCreateTracesFromProps(){const{_parsedProps:J}=this;if(J.externallyConnectedPins)for(const[la,xa]of J.externallyConnectedPins)this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.${la}`,to:`${this.getSubcircuitSelector()} > port.${xa}`}))}},Diode=class extends NormalComponent{constructor(){super(...arguments);jp(this,"pos",this.portMap.pin1);jp(this,"anode",this.portMap.pin1);jp(this,"neg",this.portMap.pin2);jp(this,"cathode",this.portMap.pin2)}get config(){return{schematicSymbolName:this.props.symbolName??"diode",componentName:"Diode",zodProps:diodeProps,sourceFtype:"simple_diode"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}},Jumper=class extends NormalComponent{constructor(){super(...arguments);jp(this,"schematicDimensions",null)}get config(){return{componentName:"Jumper",zodProps:jumperProps,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){const{db:J}=this.root,{_parsedProps:la}=this,xa=J.source_component.insert({ftype:"simple_chip",name:la.name,manufacturer_part_number:la.manufacturerPartNumber,supplier_part_numbers:la.supplierPartNumbers});this.source_component_id=xa.source_component_id}doInitialPcbComponentRender(){var Aa;if((Aa=this.root)!=null&&Aa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=J.pcb_component.insert({center:{x:la.pcbX??0,y:la.pcbY??0},width:2,height:3,layer:la.layer??"top",rotation:la.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=xa.pcb_component_id}},Led=class extends NormalComponent{constructor(){super(...arguments);jp(this,"pos",this.portMap.pin1);jp(this,"anode",this.portMap.pin1);jp(this,"neg",this.portMap.pin2);jp(this,"cathode",this.portMap.pin2)}get config(){return{componentName:"Led",schematicSymbolName:this.props.symbolName??"led",zodProps:ledProps,sourceFtype:"simple_diode"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}},PowerSource=class extends NormalComponent{constructor(){super(...arguments);jp(this,"pos",this.portMap.pin1);jp(this,"positive",this.portMap.pin1);jp(this,"neg",this.portMap.pin2);jp(this,"negative",this.portMap.pin2)}get config(){return{schematicSymbolName:this.props.symbolName??"power_factor_meter_horz",componentName:"PowerSource",zodProps:powerSourceProps,sourceFtype:"simple_power_source"}}initPorts(){this.add(new Port({name:"pin1",pinNumber:1,aliases:["positive","pos"]})),this.add(new Port({name:"pin2",pinNumber:2,aliases:["negative","neg"]}))}},Resistor=class extends NormalComponent{get config(){return{componentName:"Resistor",schematicSymbolName:this.props.symbolName??"boxresistor",zodProps:resistorProps,sourceFtype:"simple_resistor"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.resistance)}Ω`}doInitialCreateNetsFromProps(){this._createNetsFromProps([this.props.pullupFor,this.props.pullupTo])}doInitialCreateTracesFromProps(){this.props.pullupFor&&this.props.pullupTo&&(this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.pullupFor})),this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.pullupTo})))}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_resistor",name:J.name,manufacturer_part_number:J.manufacturerPartNumber??J.mfn,supplier_part_numbers:J.supplierPartNumbers,resistance:J.resistance,display_resistance:this._getSchematicSymbolDisplayValue()});this.source_component_id=la.source_component_id}},edgeSpecifiers=["leftedge","rightedge","topedge","bottomedge","center"],Constraint2=class extends PrimitiveComponent{get config(){return{componentName:"Constraint",zodProps:constraintProps}}constructor(ua){if(super(ua),("xdist"in ua||"ydist"in ua)&&!("edgeToEdge"in ua)&&!("centerToCenter"in ua))throw new Error(`edgeToEdge, centerToCenter must be set for xDist or yDist for ${this}`);if("for"in ua&&ua.for.length<2)throw new Error(`"for" must have at least two selectors for ${this}`)}_getAllReferencedComponents(){const ua=[],J=this.getPrimitiveContainer();function la(xa){const Aa=xa.split(" ").pop(),ba=edgeSpecifiers.includes(Aa)?Aa:void 0,Sa=ba?xa.replace(` ${ba}`,""):xa,Ma=J.selectOne(Sa,{pcbPrimitive:!0});Ma&&ua.push({selector:xa,component:Ma,componentSelector:Sa,edge:ba})}for(const xa of["left","right","top","bottom"])xa in this._parsedProps&&la(this._parsedProps[xa]);if("for"in this._parsedProps)for(const xa of this._parsedProps.for)la(xa);return{componentsWithSelectors:ua}}},FabricationNotePath=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"fabrication_note_path_id",null)}get config(){return{componentName:"FabricationNotePath",zodProps:fabricationNotePathProps}}doInitialPcbPrimitiveRender(){var Ma,Ra;if((Ma=this.root)!=null&&Ma.pcbDisabled)return;const{db:J}=this.root,la=this.getSubcircuit(),{_parsedProps:xa}=this,Aa=xa.layer??"top";if(Aa!=="top"&&Aa!=="bottom")throw new Error(`Invalid layer "${Aa}" for SilkscreenPath. Must be "top" or "bottom".`);const ba=this._computePcbGlobalTransformBeforeLayout(),Sa=J.pcb_fabrication_note_path.insert({pcb_component_id:(Ra=this.parent)==null?void 0:Ra.pcb_component_id,layer:Aa,color:xa.color,route:xa.route.map(Ia=>{const La=applyToPoint(ba,{x:Ia.x,y:Ia.y});return{...Ia,x:La.x,y:La.y}}),stroke_width:xa.strokeWidth??.1,subcircuit_id:(la==null?void 0:la.subcircuit_id)??void 0});this.fabrication_note_path_id=Sa.pcb_fabrication_note_path_id}},FabricationNoteText=class extends PrimitiveComponent{get config(){return{componentName:"FabricationNoteText",zodProps:fabricationNoteTextProps}}doInitialPcbPrimitiveRender(){var Aa,ba;if((Aa=this.root)!=null&&Aa.pcbDisabled)return;const{db:ua}=this.root,{_parsedProps:J}=this,la=this.getPrimitiveContainer(),xa=this.getSubcircuit();ua.pcb_fabrication_note_text.insert({anchor_alignment:J.anchorAlignment,anchor_position:{x:J.pcbX??0,y:J.pcbY??0},font:J.font??"tscircuit2024",font_size:J.fontSize??1,layer:"top",color:J.color,text:J.text??"",pcb_component_id:la.pcb_component_id,subcircuit_id:(xa==null?void 0:xa.subcircuit_id)??void 0,pcb_group_id:((ba=this.getGroup())==null?void 0:ba.pcb_group_id)??void 0})}},Subcircuit=class extends Group$2{constructor(ua){super({...ua,subcircuit:!0})}},NetAlias=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"source_net_alias_id")}get config(){return{componentName:"NetAlias",zodProps:netAliasProps}}doInitialSchematicComponentRender(){var ba;if((ba=this.root)!=null&&ba.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa={x:la.schX??0,y:la.schY??0},Aa=J.schematic_net_label.insert({text:la.net,source_net_id:la.net,anchor_position:xa,center:xa,anchor_side:"bottom"});this.source_net_alias_id=Aa.source_net_id}},SilkscreenCircle=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_silkscreen_circle_id",null)}get config(){return{componentName:"SilkscreenCircle",zodProps:silkscreenCircleProps}}doInitialPcbPrimitiveRender(){var Sa,Ma,Ra;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=la.layer??"top";if(xa!=="top"&&xa!=="bottom")throw new Error(`Invalid layer "${xa}" for SilkscreenCircle. Must be "top" or "bottom".`);this._computePcbGlobalTransformBeforeLayout();const Aa=this.getSubcircuit(),ba=J.pcb_silkscreen_circle.insert({pcb_component_id:(Ma=this.parent)==null?void 0:Ma.pcb_component_id,layer:xa,center:{x:la.pcbX??0,y:la.pcbY??0},radius:la.radius,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ra=this.getGroup())==null?void 0:Ra.pcb_group_id)??void 0});this.pcb_silkscreen_circle_id=ba.pcb_silkscreen_circle_id}},SilkscreenRect=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_silkscreen_rect_id",null)}get config(){return{componentName:"SilkscreenRect",zodProps:silkscreenRectProps}}doInitialPcbPrimitiveRender(){var Sa,Ma,Ra;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=la.layer??"top";if(xa!=="top"&&xa!=="bottom")throw new Error(`Invalid layer "${xa}" for SilkscreenRect. Must be "top" or "bottom".`);const Aa=this.getSubcircuit(),ba=J.pcb_silkscreen_rect.insert({pcb_component_id:(Ma=this.parent)==null?void 0:Ma.pcb_component_id,layer:xa,center:{x:la.pcbX??0,y:la.pcbY??0},width:la.width,height:la.height,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ra=this==null?void 0:this.getGroup())==null?void 0:Ra.pcb_group_id)??void 0});this.pcb_silkscreen_rect_id=ba.pcb_silkscreen_rect_id}},SilkscreenText=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenText",zodProps:silkscreenTextProps}}doInitialPcbPrimitiveRender(){var Ma,Ra;if((Ma=this.root)!=null&&Ma.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this.getPrimitiveContainer(),Aa=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:ba}=this._getPcbPrimitiveFlippedHelpers(),Sa=this.getSubcircuit();J.pcb_silkscreen_text.insert({anchor_alignment:la.anchorAlignment,anchor_position:{x:Aa.x,y:Aa.y},font:la.font??"tscircuit2024",font_size:la.fontSize??1,layer:ba(la.layer??"top"),text:la.text??"",ccw_rotation:la.pcbRotation,pcb_component_id:xa.pcb_component_id,subcircuit_id:(Sa==null?void 0:Sa.subcircuit_id)??void 0,pcb_group_id:((Ra=this.getGroup())==null?void 0:Ra.pcb_group_id)??void 0})}getPcbSize(){const{_parsedProps:J}=this,la=J.fontSize??1,Aa=(J.text??"").length*la,ba=la;return{width:Aa*la,height:ba*la}}},SilkscreenLine=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_silkscreen_line_id",null)}get config(){return{componentName:"SilkscreenLine",zodProps:silkscreenLineProps}}doInitialPcbPrimitiveRender(){var Sa,Ma,Ra;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=la.layer??"top";if(xa!=="top"&&xa!=="bottom")throw new Error(`Invalid layer "${xa}" for SilkscreenLine. Must be "top" or "bottom".`);const Aa=this.getSubcircuit(),ba=J.pcb_silkscreen_line.insert({pcb_component_id:(Ma=this.parent)==null?void 0:Ma.pcb_component_id,layer:xa,x1:la.x1,y1:la.y1,x2:la.x2,y2:la.y2,stroke_width:la.strokeWidth??.1,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ra=Aa==null?void 0:Aa.getGroup())==null?void 0:Ra.pcb_group_id)??void 0});this.pcb_silkscreen_line_id=ba.pcb_silkscreen_line_id}},Via=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_via_id",null);jp(this,"matchedPort",null);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Via",zodProps:viaProps}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:J}=this;return{width:J.outerDiameter,height:J.outerDiameter}}_getPcbCircuitJsonBounds(){const{db:J}=this.root,la=J.pcb_via.get(this.pcb_via_id),xa=this.getPcbSize();return{center:{x:la.x,y:la.y},bounds:{left:la.x-xa.width/2,top:la.y-xa.height/2,right:la.x+xa.width/2,bottom:la.y+xa.height/2},width:xa.width,height:xa.height}}_setPositionFromLayout(J){const{db:la}=this.root;la.pcb_via.update(this.pcb_via_id,{x:J.x,y:J.y})}doInitialPcbPrimitiveRender(){var Sa,Ma;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this._getGlobalPcbPositionBeforeLayout(),Aa=this.getSubcircuit(),ba=J.pcb_via.insert({x:xa.x,y:xa.y,hole_diameter:la.holeDiameter,outer_diameter:la.outerDiameter,layers:["bottom","top"],from_layer:la.fromLayer||"bottom",to_layer:la.toLayer||"top",subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ma=this.getGroup())==null?void 0:Ma.pcb_group_id)??void 0});this.pcb_via_id=ba.pcb_via_id}},Battery=class extends NormalComponent{get config(){return{componentName:"Battery",schematicSymbolName:this.props.symbolName??"battery",zodProps:batteryProps,sourceFtype:"simple_power_source"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:"simple_power_source",capacity:J.capacity,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=la.source_component_id}},PinHeader=class extends NormalComponent{get config(){return{componentName:"PinHeader",zodProps:pinHeaderProps,shouldRenderAsSchematicBox:!0}}_getImpliedFootprintString(){var Aa;const ua=this._parsedProps.pinCount??((Aa=this._parsedProps.pinLabels)==null?void 0:Aa.length)??0,J=this._parsedProps.holeDiameter,la=this._parsedProps.platedDiameter,xa=this._parsedProps.pitch;return ua>0&&xa?!J&&!la?`pinrow${ua}_p${xa}`:`pinrow${ua}_p${xa}_id${J}_od${la}`:null}initPorts(){var J;const ua=this._parsedProps.pinCount??((J=this._parsedProps.pinLabels)==null?void 0:J.length)??1;for(let la=1;la<=ua;la++)this.add(new Port({name:`pin${la}`,pinNumber:la,aliases:[]}))}_getSchematicPortArrangement(){const ua=this._parsedProps.pinCount??1,J=this._parsedProps.facingDirection??"right";return{leftSize:J==="left"?ua:0,rightSize:J==="right"?ua:0}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_pin_header",name:J.name,supplier_part_numbers:J.supplierPartNumbers,pin_count:J.pinCount,gender:J.gender});this.source_component_id=la.source_component_id}};function getResonatorSymbolName(ua){switch(ua){case"two_ground_pins":return"crystal_4pin";case"ground_pin":return"resonator";case"no_ground":return"crystal";default:return"crystal"}}var Resonator=class extends NormalComponent{get config(){return{componentName:"Resonator",schematicSymbolName:this.props.symbolName??getResonatorSymbolName(this.props.pinVariant),zodProps:resonatorProps,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_resonator",name:J.name,frequency:J.frequency,load_capacitance:J.loadCapacitance,supplier_part_numbers:J.supplierPartNumbers,pin_variant:J.pinVariant||"no_ground"});this.source_component_id=la.source_component_id}},Inductor=class extends NormalComponent{get config(){return{componentName:"Inductor",schematicSymbolName:this.props.symbolName??"inductor",zodProps:inductorProps,sourceFtype:FTYPE.simple_inductor}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:FTYPE.simple_inductor,inductance:J.inductance,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=la.source_component_id}},Potentiometer=class extends NormalComponent{get config(){return{schematicSymbolName:this.props.symbolName??"potentiometer2",componentName:"Potentiometer",zodProps:potentiometerProps,sourceFtype:"simple_potentiometer"}}initPorts(){super.initPorts({additionalAliases:{pin1:["pos","left"],pin2:["neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.maxResistance)}Ω`}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:"simple_potentiometer",max_resistance:J.maxResistance});this.source_component_id=la.source_component_id}},PushButton=class extends NormalComponent{get config(){return{componentName:"PushButton",schematicSymbolName:this.props.symbolName??"push_button_normally_open_momentary",zodProps:pushButtonProps,sourceFtype:FTYPE.simple_push_button}}get defaultInternallyConnectedPinNames(){return[["pin1","pin4"],["pin2","pin3"]]}initPorts(){super.initPorts({pinCount:4,additionalAliases:{pin1:["side1"],pin3:["side2"]}})}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:FTYPE.simple_push_button,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=la.source_component_id}},Crystal=class extends NormalComponent{get config(){return{schematicSymbolName:this.props.symbolName??"crystal",componentName:"Crystal",zodProps:crystalProps,sourceFtype:"simple_crystal"}}initPorts(){super.initPorts({additionalAliases:{pin1:["pos","left"],pin2:["neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.frequency)}Hz`}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:"simple_crystal",frequency:J.frequency,load_capacitance:J.loadCapacitance});this.source_component_id=la.source_component_id}},Transistor=class extends NormalComponent{get config(){return{componentName:"Transistor",schematicSymbolName:this.props.transistorType==="npn"?"npn_bipolar_transistor":"pnp_bipolar_transistor",zodProps:transistorProps,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_transistor",name:J.name,transistor_type:J.transistorType});this.source_component_id=la.source_component_id}},Mosfet=class extends NormalComponent{get config(){const ua=this.props.mosfetMode==="depletion"?"d":"e";return{componentName:"Mosfet",schematicSymbolName:`${this.props.channelType}_channel_${ua}_mosfet_transistor`,zodProps:mosfetProps,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_mosfet",name:J.name,mosfet_mode:J.mosfetMode,channel_type:J.channelType});this.source_component_id=la.source_component_id}},RootCircuit=class{constructor(){jp(this,"firstChild",null);jp(this,"children");jp(this,"db");jp(this,"root",null);jp(this,"isRoot",!0);jp(this,"schematicDisabled",!1);jp(this,"pcbDisabled",!1);jp(this,"pcbRoutingDisabled",!1);jp(this,"name");jp(this,"_hasRenderedAtleastOnce",!1);jp(this,"_eventListeners",{});this.children=[],this.db=su_default$2([]),this.root=this}add(ua){let J;reactExports.isValidElement(ua)?J=createInstanceFromReactElement(ua):J=ua,this.children.push(J)}_getBoard(){return this.children.find(ua=>ua.componentName==="Board")}_guessRootComponent(){if(!this.firstChild){if(this.children.length===1){this.firstChild=this.children[0];return}if(this.children.length===0)throw new Error("Not able to guess root component: RootCircuit has no children (use circuit.add(...))");if(this.children.length>0){const ua=this.children.find(J=>J.componentName==="Board")??null;if(ua){this.firstChild=ua;return}}throw new Error("Not able to guess root component: RootCircuit has multiple children and no board")}}render(){this.firstChild||this._guessRootComponent();const{firstChild:ua,db:J}=this;if(!ua)throw new Error("RootCircuit has no root component");ua.parent=this,ua.runRenderCycle(),this._hasRenderedAtleastOnce=!0}async renderUntilSettled(){for(this.render();this._hasIncompleteAsyncEffects();)await new Promise(ua=>setTimeout(ua,100)),this.render()}_hasIncompleteAsyncEffects(){return this.children.some(ua=>ua._hasIncompleteAsyncEffects()?!0:ua.children.some(J=>J._hasIncompleteAsyncEffects()))}getSoup(){return this._hasRenderedAtleastOnce||this.render(),this.db.toArray()}getCircuitJson(){return this.getSoup()}toJson(){return this.getSoup()}async getSvg(ua){return(await Promise.resolve().then(()=>index$1).catch(la=>{throw new Error(`To use project.getSvg, you must install the "circuit-to-svg" package.
7540
+ searched component ${Ra.getString()}, which has ports: ${Ra.children.filter(Ia=>Ia.componentName==="Port").map(Ia=>`${Ia.getString()}(${Ia.getNameAndAliases().join(",")})`).join(" & ")}`):this.renderError(`Could not find port for selector "${ba}"`)}return Aa.some(ba=>!ba.port)?{allPortsFound:!1}:{allPortsFound:!0,portsWithSelectors:Aa,ports:Aa.map(({port:ba})=>ba)}}_findConnectedNets(){const J=this.getTracePathNetSelectors().map(xa=>({selector:xa,net:this.getSubcircuit().selectOne(xa,{type:"net"})})),la=J.filter(xa=>!xa.net);return la.length>0&&this.renderError(`Could not find net for selector "${la[0].selector}" inside ${this}`),{netsWithSelectors:J,nets:J.map(xa=>xa.net)}}_getAllTracesConnectedToSameNet(){const J=this.getSubcircuit().selectAll("trace"),la=this._findConnectedNets().nets,xa=this._findConnectedPorts().ports??[];return J.filter(Aa=>{if(Aa===this)return!1;const ba=Aa._findConnectedNets().nets,Sa=Aa._findConnectedPorts().ports??[];return ba.some(Ma=>la.includes(Ma))||Sa.some(Ma=>xa.includes(Ma))})}_isExplicitlyConnectedToPort(J){const{allPortsFound:la,portsWithSelectors:xa}=this._findConnectedPorts();return la?xa.map(ba=>ba.port).includes(J):!1}_isExplicitlyConnectedToNet(J){return this._findConnectedNets().nets.includes(J)}doInitialCreateNetsFromProps(){createNetsFromProps(this,this.getTracePathNetSelectors())}doInitialSourceTraceRender(){const{db:J}=this.root,{_parsedProps:la,parent:xa}=this;if(!xa){this.renderError("Trace has no parent");return}const{allPortsFound:Aa,portsWithSelectors:ba}=this._findConnectedPorts();if(!Aa)return;const Sa=this._findConnectedNets().nets,Ma=getTraceDisplayName({ports:ba,nets:Sa}),Ra=J.source_trace.insert({connected_source_port_ids:ba.map(Ia=>Ia.port.source_port_id),connected_source_net_ids:Sa.map(Ia=>Ia.source_net_id),max_length:getMaxLengthFromConnectedCapacitors(ba.map(Ia=>Ia.port),{db:J})??la.maxLength,display_name:Ma});this.source_trace_id=Ra.source_trace_id}doInitialPcbTraceRender(){var Cl,Ll,Il;if((Cl=this.root)!=null&&Cl.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la,parent:xa}=this,Aa=this.getSubcircuit();if(!xa)throw new Error("Trace has no parent");if(Aa._parsedProps.routingDisabled)return;const ba=(Ll=Aa._parsedProps.pcbRouteCache)==null?void 0:Ll.pcbTraces;if(ba){const Fl=J.pcb_trace.insert({route:ba.flatMap(Ol=>Ol.route),source_trace_id:this.source_trace_id,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Il=this.getGroup())==null?void 0:Il.pcb_group_id)??void 0});this.pcb_trace_id=Fl.pcb_trace_id;return}if(!Aa._shouldUseTraceByTraceRouting())return;const{allPortsFound:Sa,ports:Ma}=this._findConnectedPorts();if(!Sa)return;const Ra=[];for(const Fl of Ma)Fl._hasMatchedPcbPrimitive()||Ra.push(Fl);if(Ra.length>0){J.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:this.source_trace_id,message:`Some ports did not have a matching PCB primitive (e.g. a pad or plated hole), this can happen if a footprint is missing. As a result, ${this} wasn't routed. Missing ports: ${Ra.map(Fl=>Fl.getString()).join(", ")}`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:Ra.map(Fl=>Fl.pcb_port_id).filter(Boolean)});return}const Ia=this._findConnectedNets().netsWithSelectors;if(Ma.length===0&&Ia.length===2){this.renderError("Trace connects two nets, we haven't implemented a way to route this yet");return}else if(Ma.length===1&&Ia.length===1){const Fl=Ma[0],ql=Ia[0].net.getAllConnectedPorts().filter(sc=>sc!==Fl);if(ql.length===0){console.log("Nothing to connect this port to, the net is empty. TODO should emit a warning!");return}const rc=getClosest(Fl,ql);Ma.push(rc)}else if(Ma.length>1&&Ia.length>=1){this.renderError("Trace has more than one port and one or more nets, we don't currently support this type of complex trace routing");return}const La=Ma.flatMap(Fl=>Fl.matchedComponents.filter(Ol=>Ol.componentName==="TraceHint")),Fa=(this._parsedProps.pcbRouteHints??[]).concat(La.flatMap(Fl=>Fl.getPcbRouteHints()));if(Ma.length>2){this.renderError(`Trace has more than two ports (${Ma.map(Fl=>Fl.getString()).join(", ")}), routing between more than two ports for a single trace is not implemented`);return}if(this.getSubcircuit().selectAll("trace").filter(Fl=>Fl.renderPhaseStates.PcbTraceRender.initialized).some(Fl=>Fl._portsRoutedOnPcb.length===Ma.length&&Fl._portsRoutedOnPcb.every(Ol=>Ma.includes(Ol))))return;let tl=[];Fa.length===0?tl=[portToObjective(Ma[0]),portToObjective(Ma[1])]:tl=[portToObjective(Ma[0]),...Fa,portToObjective(Ma[1])];const rl=findPossibleTraceLayerCombinations(tl),il=getFullConnectivityMapFromCircuitJson$1(this.root.db.toArray()),[nl,sl]=tryNow(()=>getObstaclesFromSoup(this.root.db.toArray()));if(sl){this.renderError({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:this.pcb_trace_id,message:`Error getting obstacles for autorouting: ${sl.message}`,source_trace_id:this.source_trace_id,center:{x:0,y:0},pcb_port_ids:Ma.map(Fl=>Fl.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[]});return}for(const Fl of nl)if(Fl.connectedTo.length>0){const ql=il.getNetConnectedToId(Fl.connectedTo[0]);ql&&Fl.connectedTo.push(ql)}let ll=[];if(rl.length===0)ll=tl;else{const Fl=rl[0].layer_path;ll=tl.map((Ol,ql)=>Ol.via?{...Ol,via_to_layer:Fl[ql]}:{...Ol,layers:[Fl[ql]]})}ll[0].pcb_port_id=Ma[0].pcb_port_id,ll[ll.length-1].pcb_port_id=Ma[1].pcb_port_id;const dl=[];for(const[Fl,Ol]of pairs$1(ll)){const ql="via_to_layer"in Fl?Fl.via_to_layer:null,rc=2,sc="layers"in Fl&&Fl.layers.length===1?Fl.layers[0]:ql??"top",Kl="layers"in Ol&&Ol.layers.length===1?Ol.layers[0]:ql??"top",Gl="pcb_port_id"in Fl?Fl.pcb_port_id:null,kl="pcb_port_id"in Ol?Ol.pcb_port_id:null,Wl=this.getSubcircuit()._parsedProps.minTraceWidth??.16,tc=new MultilayerIjump({OBSTACLE_MARGIN:Wl*2,isRemovePathLoopsEnabled:!0,optimizeWithGoalBoxes:!!(Gl&&kl),connMap:il,input:{obstacles:nl,minTraceWidth:Wl,connections:[{name:this.source_trace_id,pointsToConnect:[{...Fl,layer:sc,pcb_port_id:Gl},{...Ol,layer:Kl,pcb_port_id:kl}]}],layerCount:2,bounds:{minX:Math.min(Fl.x,Ol.x)-rc,maxX:Math.max(Fl.x,Ol.x)+rc,minY:Math.min(Fl.y,Ol.y)-rc,maxY:Math.max(Fl.y,Ol.y)+rc}}});let Zl=null;try{Zl=tc.solveAndMapToTraces()}catch(_c){this.renderError({type:"pcb_trace_error",pcb_trace_error_id:this.source_trace_id,error_type:"pcb_trace_error",message:`error solving route: ${_c.message}`,source_trace_id:this.pcb_trace_id,center:{x:(Fl.x+Ol.x)/2,y:(Fl.y+Ol.y)/2},pcb_port_ids:Ma.map(Dc=>Dc.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:Ma.map(Dc=>Dc.pcb_component_id)})}if(!Zl)return;if(Zl.length===0){this.renderError({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:this.pcb_trace_id,message:`Could not find a route for ${this}`,source_trace_id:this.source_trace_id,center:{x:(Fl.x+Ol.x)/2,y:(Fl.y+Ol.y)/2},pcb_port_ids:Ma.map(_c=>_c.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:Ma.map(_c=>_c.pcb_component_id)});return}const[ac]=Zl;ql&&(ac.route=ac.route.map(_c=>(_c.route_type==="wire"&&!_c.layer&&(_c.layer=ql),_c))),Gl&&ac.route[0].route_type==="wire"&&(ac.route[0].start_pcb_port_id=Gl);const Cc=ac.route[ac.route.length-1];kl&&Cc.route_type==="wire"&&(Cc.end_pcb_port_id=kl),dl.push(ac.route)}const gl=mergeRoutes(dl),_l=getTraceLength(gl),vl=J.pcb_trace.insert({route:gl,source_trace_id:this.source_trace_id,trace_length:_l});this._portsRoutedOnPcb=Ma,this.pcb_trace_id=vl.pcb_trace_id;for(const Fl of gl)Fl.route_type==="via"&&J.pcb_via.insert({pcb_trace_id:vl.pcb_trace_id,x:Fl.x,y:Fl.y,hole_diameter:.3,outer_diameter:.6,layers:[Fl.from_layer,Fl.to_layer],from_layer:Fl.from_layer,to_layer:Fl.to_layer})}_doInitialSchematicTraceRenderWithDisplayLabel(){var dl,gl,_l,vl;if((dl=this.root)!=null&&dl.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la,parent:xa}=this;if(!xa)throw new Error("Trace has no parent");const{allPortsFound:Aa,portsWithSelectors:ba}=this._findConnectedPorts();if(!Aa)return;const Sa=ba.map(({port:Cl})=>({port:Cl,position:Cl._getGlobalSchematicPositionAfterLayout(),schematic_port_id:Cl.schematic_port_id,facingDirection:Cl.facingDirection}));if(Sa.length<2)throw new Error("Expected at least two ports in portsWithPosition.");let Ma,Ra;const Ia=Sa[0].position,La=Sa[0].port;if("path"in this.props){if(this.props.path.length!==2)throw new Error("Invalid 'path': Must contain exactly two elements.");[Ma,Ra]=this.props.path}else{if(!("from"in this.props&&"to"in this.props))throw new Error("Missing 'from' or 'to' properties in props.");Ma=this.props.from,Ra=this.props.to}if(!La.source_port_id)throw new Error(`Missing source_port_id for the 'from' port (${Ma}).`);const Fa=Sa[1].position,ka=Sa[1].port;if(!ka.source_port_id)throw new Error(`Missing source_port_id for the 'to' port (${Ra}).`);const el=J.schematic_net_label.list().find(Cl=>Cl.source_net_id===La.source_port_id),tl=J.schematic_net_label.list().find(Cl=>Cl.source_net_id===ka.source_port_id),[rl,il]=ba.map(({port:Cl})=>Cl),sl=((gl=rl.parent)==null?void 0:gl.config.shouldRenderAsSchematicBox)?`${(_l=rl==null?void 0:rl.parent)==null?void 0:_l.props.name}_${rl==null?void 0:rl.props.name}`:`${(vl=il==null?void 0:il.parent)==null?void 0:vl.props.name}_${il==null?void 0:il.props.name}`,ll=this.props.schDisplayLabel??sl;if(el&&el.text!==ll&&(el.text=`${ll} / ${el.text}`),tl&&(tl==null?void 0:tl.text)!==ll&&(tl.text=`${ll} / ${tl.text}`),!el&&!tl&&(ll!=null&&ll.toLocaleLowerCase().includes("gnd")||ll!=null&&ll.toLocaleLowerCase().includes("ground"))){createDownwardNetLabelGroundSymbol({fromPort:La,toPort:ka,fromAnchorPos:Ia,toAnchorPos:Fa,schDisplayLabel:this.props.schDisplayLabel,source_trace_id:this.source_trace_id},{db:J});return}tl||J.schematic_net_label.insert({text:this.props.schDisplayLabel??sl,source_net_id:ka.source_port_id,anchor_position:Fa,center:Fa,anchor_side:getEnteringEdgeFromDirection(ka.facingDirection)??"bottom"}),el||J.schematic_net_label.insert({text:this.props.schDisplayLabel??sl,source_net_id:La.source_port_id,anchor_position:Ia,center:Ia,anchor_side:getEnteringEdgeFromDirection(La.facingDirection)??"bottom"})}_isSymbolToChipConnection(){const{allPortsFound:J,ports:la}=this._findConnectedPorts();if(!J||la.length!==2)return!1;const[xa,Aa]=la;if(!(xa!=null&&xa.parent)||!(Aa!=null&&Aa.parent))return!1;const ba=xa.parent.config.shouldRenderAsSchematicBox,Sa=Aa.parent.config.shouldRenderAsSchematicBox;return ba&&!Sa||!ba&&Sa}_isSymbolToSymbolConnection(){const{allPortsFound:J,ports:la}=this._findConnectedPorts();if(!J||la.length!==2)return!1;const[xa,Aa]=la;if(!(xa!=null&&xa.parent)||!(Aa!=null&&Aa.parent))return!1;const ba=!xa.parent.config.shouldRenderAsSchematicBox,Sa=!Aa.parent.config.shouldRenderAsSchematicBox;return ba&&Sa}_isChipToChipConnection(){const{allPortsFound:J,ports:la}=this._findConnectedPorts();if(!J||la.length!==2)return!1;const[xa,Aa]=la;if(!(xa!=null&&xa.parent)||!(Aa!=null&&Aa.parent))return!1;const ba=xa.parent.config.shouldRenderAsSchematicBox,Sa=Aa.parent.config.shouldRenderAsSchematicBox;return ba&&Sa}doInitialSchematicTraceRender(){var ql;if((ql=this.root)!=null&&ql.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la,parent:xa}=this;if(!xa)throw new Error("Trace has no parent");const{allPortsFound:Aa,portsWithSelectors:ba}=this._findConnectedPorts(),{netsWithSelectors:Sa}=this._findConnectedNets();if(!Aa)return;if(this.props.schDisplayLabel&&("from"in this.props&&"to"in this.props||"path"in this.props)){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const Ma={name:this.source_trace_id,pointsToConnect:[]},Ra=getSchematicObstaclesForTrace(this),Ia=ba.map(({port:rc})=>({port:rc,position:rc._getGlobalSchematicPositionAfterLayout(),schematic_port_id:rc.schematic_port_id??void 0,facingDirection:rc.facingDirection}));if(Ia.length===1&&Sa.length===1){const rc=Sa[0].net,{port:sc,position:Kl}=Ia[0];J.schematic_net_label.insert({text:rc._parsedProps.name,source_net_id:rc.source_net_id,anchor_position:Kl,center:Kl,anchor_side:getEnteringEdgeFromDirection(sc.facingDirection)??"bottom"});return}if(Ia.length<2)return;Ma.pointsToConnect=Ia.map(({position:rc})=>({...rc,layer:"top"}));const Fa=computeObstacleBounds(Ra),ka=2,el={minTraceWidth:.1,obstacles:Ra,connections:[Ma],bounds:{minX:Fa.minX-ka,maxX:Fa.maxX+ka,minY:Fa.minY-ka,maxY:Fa.maxY+ka},layerCount:1};let tl=MultilayerIjump,rl=!1;this.getSubcircuit().props._schDirectLineRoutingEnabled&&(tl=DirectLineRouter,rl=!0);let nl=new tl({input:el,MAX_ITERATIONS:100,OBSTACLE_MARGIN:.1,isRemovePathLoopsEnabled:!0,isShortenPathWithShortcutsEnabled:!0,marginsWithCosts:[{margin:1,enterCost:0,travelCostFactor:1},{margin:.3,enterCost:0,travelCostFactor:1},{margin:.2,enterCost:0,travelCostFactor:2},{margin:.1,enterCost:0,travelCostFactor:3}]}).solveAndMapToTraces();if(nl.length===0){if(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection()||this._isChipToChipConnection()){this._doInitialSchematicTraceRenderWithDisplayLabel();return}nl=new DirectLineRouter({input:el}).solveAndMapToTraces(),rl=!0}const[{route:sl}]=nl;let ll=[];for(let rc=0;rc<sl.length-1;rc++)ll.push({from:sl[rc],to:sl[rc+1]});const dl=this.source_trace_id;let gl=[];if(!rl){pushEdgesOfSchematicTraceToPreventOverlap({edges:ll,db:J,source_trace_id:dl});const rc=getOtherSchematicTraces({db:J,source_trace_id:dl,differentNetOnly:!0}).flatMap(sc=>sc.edges);ll=createSchematicTraceCrossingSegments({edges:ll,otherEdges:rc}),gl=createSchematicTraceJunctions({edges:ll,db:J,source_trace_id:this.source_trace_id})}const _l=ll[ll.length-1],vl=Ia[Ia.length-1],Cl=getDominantDirection(_l);ll.push(...getStubEdges({lastEdge:_l,lastEdgePort:vl,lastDominantDirection:Cl}));const Ll=ll[0],Il=Ia[0],Fl=getDominantDirection(Ll);if(ll.unshift(...getStubEdges({firstEdge:Ll,firstEdgePort:Il,firstDominantDirection:Fl})),!this.source_trace_id)throw new Error("Missing source_trace_id for schematic trace insertion.");if(this.getSubcircuit()._parsedProps.schTraceAutoLabelEnabled&&countComplexElements(gl,ll)>=5&&(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection()||this._isChipToChipConnection())){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const Ol=J.schematic_trace.insert({source_trace_id:this.source_trace_id,edges:ll,junctions:gl});this.schematic_trace_id=Ol.schematic_trace_id}},Capacitor=class extends NormalComponent{get config(){return{componentName:"Capacitor",schematicSymbolName:this.props.polarized?"capacitor_polarized":this.props.symbolName??"capacitor",zodProps:capacitorProps,sourceFtype:FTYPE.simple_capacitor}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.capacitance)}F`}doInitialCreateNetsFromProps(){this._createNetsFromProps([this.props.decouplingFor,this.props.decouplingTo])}doInitialCreateTracesFromProps(){this.props.decouplingFor&&this.props.decouplingTo&&(this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.decouplingFor})),this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.decouplingTo})))}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_capacitor",name:J.name,manufacturer_part_number:J.manufacturerPartNumber??J.mfn,supplier_part_numbers:J.supplierPartNumbers,capacitance:J.capacitance,max_decoupling_trace_length:J.maxDecouplingTraceLength,display_capacitance:this._getSchematicSymbolDisplayValue()});this.source_component_id=la.source_component_id}},Chip=class extends NormalComponent{constructor(){super(...arguments);jp(this,"schematicBoxDimensions",null)}get config(){return{componentName:"Chip",zodProps:chipProps,shouldRenderAsSchematicBox:!0}}doInitialSchematicComponentRender(){const{_parsedProps:J}=this;(J==null?void 0:J.noSchematicRepresentation)!==!0&&super.doInitialSchematicComponentRender()}doInitialSourceRender(){const{db:J}=this.root,{_parsedProps:la}=this,xa=J.source_component.insert({ftype:"simple_chip",name:la.name,manufacturer_part_number:la.manufacturerPartNumber,supplier_part_numbers:la.supplierPartNumbers});this.source_component_id=xa.source_component_id}doInitialPcbComponentRender(){var Aa;if((Aa=this.root)!=null&&Aa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=J.pcb_component.insert({center:{x:la.pcbX??0,y:la.pcbY??0},width:2,height:3,layer:la.layer??"top",rotation:la.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=xa.pcb_component_id}doInitialCreateTracesFromProps(){const{_parsedProps:J}=this;if(J.externallyConnectedPins)for(const[la,xa]of J.externallyConnectedPins)this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.${la}`,to:`${this.getSubcircuitSelector()} > port.${xa}`}))}},Diode=class extends NormalComponent{constructor(){super(...arguments);jp(this,"pos",this.portMap.pin1);jp(this,"anode",this.portMap.pin1);jp(this,"neg",this.portMap.pin2);jp(this,"cathode",this.portMap.pin2)}get config(){return{schematicSymbolName:this.props.symbolName??"diode",componentName:"Diode",zodProps:diodeProps,sourceFtype:"simple_diode"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}},Jumper=class extends NormalComponent{constructor(){super(...arguments);jp(this,"schematicDimensions",null)}get config(){return{componentName:"Jumper",zodProps:jumperProps,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){const{db:J}=this.root,{_parsedProps:la}=this,xa=J.source_component.insert({ftype:"simple_chip",name:la.name,manufacturer_part_number:la.manufacturerPartNumber,supplier_part_numbers:la.supplierPartNumbers});this.source_component_id=xa.source_component_id}doInitialPcbComponentRender(){var Aa;if((Aa=this.root)!=null&&Aa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=J.pcb_component.insert({center:{x:la.pcbX??0,y:la.pcbY??0},width:2,height:3,layer:la.layer??"top",rotation:la.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=xa.pcb_component_id}},Led=class extends NormalComponent{constructor(){super(...arguments);jp(this,"pos",this.portMap.pin1);jp(this,"anode",this.portMap.pin1);jp(this,"neg",this.portMap.pin2);jp(this,"cathode",this.portMap.pin2)}get config(){return{componentName:"Led",schematicSymbolName:this.props.symbolName??"led",zodProps:ledProps,sourceFtype:"simple_diode"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}},PowerSource=class extends NormalComponent{constructor(){super(...arguments);jp(this,"pos",this.portMap.pin1);jp(this,"positive",this.portMap.pin1);jp(this,"neg",this.portMap.pin2);jp(this,"negative",this.portMap.pin2)}get config(){return{schematicSymbolName:this.props.symbolName??"power_factor_meter_horz",componentName:"PowerSource",zodProps:powerSourceProps,sourceFtype:"simple_power_source"}}initPorts(){this.add(new Port({name:"pin1",pinNumber:1,aliases:["positive","pos"]})),this.add(new Port({name:"pin2",pinNumber:2,aliases:["negative","neg"]}))}},Resistor=class extends NormalComponent{get config(){return{componentName:"Resistor",schematicSymbolName:this.props.symbolName??"boxresistor",zodProps:resistorProps,sourceFtype:"simple_resistor"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.resistance)}Ω`}doInitialCreateNetsFromProps(){this._createNetsFromProps([this.props.pullupFor,this.props.pullupTo])}doInitialCreateTracesFromProps(){this.props.pullupFor&&this.props.pullupTo&&(this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.pullupFor})),this.add(new Trace2({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.pullupTo})))}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_resistor",name:J.name,manufacturer_part_number:J.manufacturerPartNumber??J.mfn,supplier_part_numbers:J.supplierPartNumbers,resistance:J.resistance,display_resistance:this._getSchematicSymbolDisplayValue()});this.source_component_id=la.source_component_id}},edgeSpecifiers=["leftedge","rightedge","topedge","bottomedge","center"],Constraint2=class extends PrimitiveComponent{get config(){return{componentName:"Constraint",zodProps:constraintProps}}constructor(ua){if(super(ua),("xdist"in ua||"ydist"in ua)&&!("edgeToEdge"in ua)&&!("centerToCenter"in ua))throw new Error(`edgeToEdge, centerToCenter must be set for xDist or yDist for ${this}`);if("for"in ua&&ua.for.length<2)throw new Error(`"for" must have at least two selectors for ${this}`)}_getAllReferencedComponents(){const ua=[],J=this.getPrimitiveContainer();function la(xa){const Aa=xa.split(" ").pop(),ba=edgeSpecifiers.includes(Aa)?Aa:void 0,Sa=ba?xa.replace(` ${ba}`,""):xa,Ma=J.selectOne(Sa,{pcbPrimitive:!0});Ma&&ua.push({selector:xa,component:Ma,componentSelector:Sa,edge:ba})}for(const xa of["left","right","top","bottom"])xa in this._parsedProps&&la(this._parsedProps[xa]);if("for"in this._parsedProps)for(const xa of this._parsedProps.for)la(xa);return{componentsWithSelectors:ua}}},FabricationNotePath=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"fabrication_note_path_id",null)}get config(){return{componentName:"FabricationNotePath",zodProps:fabricationNotePathProps}}doInitialPcbPrimitiveRender(){var Ma,Ra;if((Ma=this.root)!=null&&Ma.pcbDisabled)return;const{db:J}=this.root,la=this.getSubcircuit(),{_parsedProps:xa}=this,Aa=xa.layer??"top";if(Aa!=="top"&&Aa!=="bottom")throw new Error(`Invalid layer "${Aa}" for SilkscreenPath. Must be "top" or "bottom".`);const ba=this._computePcbGlobalTransformBeforeLayout(),Sa=J.pcb_fabrication_note_path.insert({pcb_component_id:(Ra=this.parent)==null?void 0:Ra.pcb_component_id,layer:Aa,color:xa.color,route:xa.route.map(Ia=>{const La=applyToPoint(ba,{x:Ia.x,y:Ia.y});return{...Ia,x:La.x,y:La.y}}),stroke_width:xa.strokeWidth??.1,subcircuit_id:(la==null?void 0:la.subcircuit_id)??void 0});this.fabrication_note_path_id=Sa.pcb_fabrication_note_path_id}},FabricationNoteText=class extends PrimitiveComponent{get config(){return{componentName:"FabricationNoteText",zodProps:fabricationNoteTextProps}}doInitialPcbPrimitiveRender(){var Aa,ba;if((Aa=this.root)!=null&&Aa.pcbDisabled)return;const{db:ua}=this.root,{_parsedProps:J}=this,la=this.getPrimitiveContainer(),xa=this.getSubcircuit();ua.pcb_fabrication_note_text.insert({anchor_alignment:J.anchorAlignment,anchor_position:{x:J.pcbX??0,y:J.pcbY??0},font:J.font??"tscircuit2024",font_size:J.fontSize??1,layer:"top",color:J.color,text:J.text??"",pcb_component_id:la.pcb_component_id,subcircuit_id:(xa==null?void 0:xa.subcircuit_id)??void 0,pcb_group_id:((ba=this.getGroup())==null?void 0:ba.pcb_group_id)??void 0})}},Subcircuit=class extends Group$2{constructor(ua){super({...ua,subcircuit:!0})}},NetAlias=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"source_net_alias_id")}get config(){return{componentName:"NetAlias",zodProps:netAliasProps}}doInitialSchematicComponentRender(){var ba;if((ba=this.root)!=null&&ba.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa={x:la.schX??0,y:la.schY??0},Aa=J.schematic_net_label.insert({text:la.net,source_net_id:la.net,anchor_position:xa,center:xa,anchor_side:"bottom"});this.source_net_alias_id=Aa.source_net_id}},SilkscreenCircle=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_silkscreen_circle_id",null)}get config(){return{componentName:"SilkscreenCircle",zodProps:silkscreenCircleProps}}doInitialPcbPrimitiveRender(){var Sa,Ma,Ra;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=la.layer??"top";if(xa!=="top"&&xa!=="bottom")throw new Error(`Invalid layer "${xa}" for SilkscreenCircle. Must be "top" or "bottom".`);this._computePcbGlobalTransformBeforeLayout();const Aa=this.getSubcircuit(),ba=J.pcb_silkscreen_circle.insert({pcb_component_id:(Ma=this.parent)==null?void 0:Ma.pcb_component_id,layer:xa,center:{x:la.pcbX??0,y:la.pcbY??0},radius:la.radius,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ra=this.getGroup())==null?void 0:Ra.pcb_group_id)??void 0});this.pcb_silkscreen_circle_id=ba.pcb_silkscreen_circle_id}},SilkscreenRect=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_silkscreen_rect_id",null)}get config(){return{componentName:"SilkscreenRect",zodProps:silkscreenRectProps}}doInitialPcbPrimitiveRender(){var Sa,Ma,Ra;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=la.layer??"top";if(xa!=="top"&&xa!=="bottom")throw new Error(`Invalid layer "${xa}" for SilkscreenRect. Must be "top" or "bottom".`);const Aa=this.getSubcircuit(),ba=J.pcb_silkscreen_rect.insert({pcb_component_id:(Ma=this.parent)==null?void 0:Ma.pcb_component_id,layer:xa,center:{x:la.pcbX??0,y:la.pcbY??0},width:la.width,height:la.height,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ra=this==null?void 0:this.getGroup())==null?void 0:Ra.pcb_group_id)??void 0});this.pcb_silkscreen_rect_id=ba.pcb_silkscreen_rect_id}},SilkscreenText=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenText",zodProps:silkscreenTextProps}}doInitialPcbPrimitiveRender(){var Ma,Ra;if((Ma=this.root)!=null&&Ma.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this.getPrimitiveContainer(),Aa=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:ba}=this._getPcbPrimitiveFlippedHelpers(),Sa=this.getSubcircuit();J.pcb_silkscreen_text.insert({anchor_alignment:la.anchorAlignment,anchor_position:{x:Aa.x,y:Aa.y},font:la.font??"tscircuit2024",font_size:la.fontSize??1,layer:ba(la.layer??"top"),text:la.text??"",ccw_rotation:la.pcbRotation,pcb_component_id:xa.pcb_component_id,subcircuit_id:(Sa==null?void 0:Sa.subcircuit_id)??void 0,pcb_group_id:((Ra=this.getGroup())==null?void 0:Ra.pcb_group_id)??void 0})}getPcbSize(){const{_parsedProps:J}=this,la=J.fontSize??1,Aa=(J.text??"").length*la,ba=la;return{width:Aa*la,height:ba*la}}},SilkscreenLine=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_silkscreen_line_id",null)}get config(){return{componentName:"SilkscreenLine",zodProps:silkscreenLineProps}}doInitialPcbPrimitiveRender(){var Sa,Ma,Ra;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=la.layer??"top";if(xa!=="top"&&xa!=="bottom")throw new Error(`Invalid layer "${xa}" for SilkscreenLine. Must be "top" or "bottom".`);const Aa=this.getSubcircuit(),ba=J.pcb_silkscreen_line.insert({pcb_component_id:(Ma=this.parent)==null?void 0:Ma.pcb_component_id,layer:xa,x1:la.x1,y1:la.y1,x2:la.x2,y2:la.y2,stroke_width:la.strokeWidth??.1,subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ra=Aa==null?void 0:Aa.getGroup())==null?void 0:Ra.pcb_group_id)??void 0});this.pcb_silkscreen_line_id=ba.pcb_silkscreen_line_id}},Via=class extends PrimitiveComponent{constructor(){super(...arguments);jp(this,"pcb_via_id",null);jp(this,"matchedPort",null);jp(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Via",zodProps:viaProps}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:J}=this;return{width:J.outerDiameter,height:J.outerDiameter}}_getPcbCircuitJsonBounds(){const{db:J}=this.root,la=J.pcb_via.get(this.pcb_via_id),xa=this.getPcbSize();return{center:{x:la.x,y:la.y},bounds:{left:la.x-xa.width/2,top:la.y-xa.height/2,right:la.x+xa.width/2,bottom:la.y+xa.height/2},width:xa.width,height:xa.height}}_setPositionFromLayout(J){const{db:la}=this.root;la.pcb_via.update(this.pcb_via_id,{x:J.x,y:J.y})}doInitialPcbPrimitiveRender(){var Sa,Ma;if((Sa=this.root)!=null&&Sa.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:la}=this,xa=this._getGlobalPcbPositionBeforeLayout(),Aa=this.getSubcircuit(),ba=J.pcb_via.insert({x:xa.x,y:xa.y,hole_diameter:la.holeDiameter,outer_diameter:la.outerDiameter,layers:["bottom","top"],from_layer:la.fromLayer||"bottom",to_layer:la.toLayer||"top",subcircuit_id:(Aa==null?void 0:Aa.subcircuit_id)??void 0,pcb_group_id:((Ma=this.getGroup())==null?void 0:Ma.pcb_group_id)??void 0});this.pcb_via_id=ba.pcb_via_id}},Battery=class extends NormalComponent{get config(){return{componentName:"Battery",schematicSymbolName:this.props.symbolName??"battery",zodProps:batteryProps,sourceFtype:"simple_power_source"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:"simple_power_source",capacity:J.capacity,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=la.source_component_id}},PinHeader=class extends NormalComponent{get config(){return{componentName:"PinHeader",zodProps:pinHeaderProps,shouldRenderAsSchematicBox:!0}}_getImpliedFootprintString(){var Aa;const ua=this._parsedProps.pinCount??((Aa=this._parsedProps.pinLabels)==null?void 0:Aa.length)??0,J=this._parsedProps.holeDiameter,la=this._parsedProps.platedDiameter,xa=this._parsedProps.pitch;return ua>0&&xa?!J&&!la?`pinrow${ua}_p${xa}`:`pinrow${ua}_p${xa}_id${J}_od${la}`:null}initPorts(){var J;const ua=this._parsedProps.pinCount??((J=this._parsedProps.pinLabels)==null?void 0:J.length)??1;for(let la=1;la<=ua;la++)this.add(new Port({name:`pin${la}`,pinNumber:la,aliases:[]}))}_getSchematicPortArrangement(){const ua=this._parsedProps.pinCount??1,J=this._parsedProps.facingDirection??"right";return{leftSize:J==="left"?ua:0,rightSize:J==="right"?ua:0}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_pin_header",name:J.name,supplier_part_numbers:J.supplierPartNumbers,pin_count:J.pinCount,gender:J.gender});this.source_component_id=la.source_component_id}};function getResonatorSymbolName(ua){switch(ua){case"two_ground_pins":return"crystal_4pin";case"ground_pin":return"resonator";case"no_ground":return"crystal";default:return"crystal"}}var Resonator=class extends NormalComponent{get config(){return{componentName:"Resonator",schematicSymbolName:this.props.symbolName??getResonatorSymbolName(this.props.pinVariant),zodProps:resonatorProps,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_resonator",name:J.name,frequency:J.frequency,load_capacitance:J.loadCapacitance,supplier_part_numbers:J.supplierPartNumbers,pin_variant:J.pinVariant||"no_ground"});this.source_component_id=la.source_component_id}},Inductor=class extends NormalComponent{get config(){return{componentName:"Inductor",schematicSymbolName:this.props.symbolName??"inductor",zodProps:inductorProps,sourceFtype:FTYPE.simple_inductor}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:FTYPE.simple_inductor,inductance:J.inductance,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=la.source_component_id}},Potentiometer=class extends NormalComponent{get config(){return{schematicSymbolName:this.props.symbolName??"potentiometer2",componentName:"Potentiometer",zodProps:potentiometerProps,sourceFtype:"simple_potentiometer"}}initPorts(){super.initPorts({additionalAliases:{pin1:["pos","left"],pin2:["neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.maxResistance)}Ω`}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:"simple_potentiometer",max_resistance:J.maxResistance});this.source_component_id=la.source_component_id}},PushButton=class extends NormalComponent{get config(){return{componentName:"PushButton",schematicSymbolName:this.props.symbolName??"push_button_normally_open_momentary",zodProps:pushButtonProps,sourceFtype:FTYPE.simple_push_button}}get defaultInternallyConnectedPinNames(){return[["pin1","pin4"],["pin2","pin3"]]}initPorts(){super.initPorts({pinCount:4,additionalAliases:{pin1:["side1"],pin3:["side2"]}})}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:FTYPE.simple_push_button,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=la.source_component_id}},Crystal=class extends NormalComponent{get config(){return{schematicSymbolName:this.props.symbolName??"crystal",componentName:"Crystal",zodProps:crystalProps,sourceFtype:"simple_crystal"}}initPorts(){super.initPorts({additionalAliases:{pin1:["pos","left"],pin2:["neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${formatSiUnit(this._parsedProps.frequency)}Hz`}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({name:J.name,ftype:"simple_crystal",frequency:J.frequency,load_capacitance:J.loadCapacitance});this.source_component_id=la.source_component_id}},Transistor=class extends NormalComponent{get config(){return{componentName:"Transistor",schematicSymbolName:this.props.transistorType==="npn"?"npn_bipolar_transistor":"pnp_bipolar_transistor",zodProps:transistorProps,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_transistor",name:J.name,transistor_type:J.transistorType});this.source_component_id=la.source_component_id}},Mosfet=class extends NormalComponent{get config(){const ua=this.props.mosfetMode==="depletion"?"d":"e";return{componentName:"Mosfet",schematicSymbolName:`${this.props.channelType}_channel_${ua}_mosfet_transistor`,zodProps:mosfetProps,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:ua}=this.root,{_parsedProps:J}=this,la=ua.source_component.insert({ftype:"simple_mosfet",name:J.name,mosfet_mode:J.mosfetMode,channel_type:J.channelType});this.source_component_id=la.source_component_id}},RootCircuit=class{constructor(){jp(this,"firstChild",null);jp(this,"children");jp(this,"db");jp(this,"root",null);jp(this,"isRoot",!0);jp(this,"schematicDisabled",!1);jp(this,"pcbDisabled",!1);jp(this,"pcbRoutingDisabled",!1);jp(this,"name");jp(this,"_hasRenderedAtleastOnce",!1);jp(this,"_eventListeners",{});this.children=[],this.db=su_default$2([]),this.root=this}add(ua){let J;reactExports.isValidElement(ua)?J=createInstanceFromReactElement(ua):J=ua,this.children.push(J)}_getBoard(){return this.children.find(ua=>ua.componentName==="Board")}_guessRootComponent(){if(!this.firstChild){if(this.children.length===1){this.firstChild=this.children[0];return}if(this.children.length===0)throw new Error("Not able to guess root component: RootCircuit has no children (use circuit.add(...))");if(this.children.length>0){const ua=this.children.find(J=>J.componentName==="Board")??null;if(ua){this.firstChild=ua;return}}throw new Error("Not able to guess root component: RootCircuit has multiple children and no board")}}render(){this.firstChild||this._guessRootComponent();const{firstChild:ua,db:J}=this;if(!ua)throw new Error("RootCircuit has no root component");ua.parent=this,ua.runRenderCycle(),this._hasRenderedAtleastOnce=!0}async renderUntilSettled(){for(this.render();this._hasIncompleteAsyncEffects();)await new Promise(ua=>setTimeout(ua,100)),this.render()}_hasIncompleteAsyncEffects(){return this.children.some(ua=>ua._hasIncompleteAsyncEffects()?!0:ua.children.some(J=>J._hasIncompleteAsyncEffects()))}getSoup(){return this._hasRenderedAtleastOnce||this.render(),this.db.toArray()}getCircuitJson(){return this.getSoup()}toJson(){return this.getSoup()}async getSvg(ua){return(await Promise.resolve().then(()=>index$1).catch(la=>{throw new Error(`To use project.getSvg, you must install the "circuit-to-svg" package.
7541
7541
 
7542
7542
  "${la.message}"`)})).convertCircuitJsonToPcbSvg(this.getCircuitJson())}async preview(ua){throw new Error("project.preview is not yet implemented")}computeSchematicGlobalTransform(){return identity$3()}_computePcbGlobalTransformBeforeLayout(){return identity$3()}selectAll(ua){var J;return this._guessRootComponent(),((J=this.firstChild)==null?void 0:J.selectAll(ua))??[]}selectOne(ua,J){var la;return this._guessRootComponent(),((la=this.firstChild)==null?void 0:la.selectOne(ua,J))??null}emit(ua,...J){if(this._eventListeners[ua])for(const la of this._eventListeners[ua])la(...J)}on(ua,J){this._eventListeners[ua]||(this._eventListeners[ua]=[]),this._eventListeners[ua].push(J)}getClientOrigin(){return typeof window<"u"?window.location.origin:typeof self<"u"?self.origin:""}},Project=RootCircuit,Circuit=RootCircuit,useRenderedCircuit=ua=>{const[J,la]=React.useState(!0),[xa,Aa]=React.useState(null),[ba,Sa]=React.useState(),[Ma,Ra]=React.useState();return React.useEffect(()=>{la(!0),Aa(null),ua&&setTimeout(()=>{try{const Ia=new RootCircuit;Ia.add(ua),Sa(Ia),Ra(Ia.toJson())}catch(Ia){Aa(Ia)}la(!1)},1)},[ua]),{isLoading:J,error:xa,circuit:ba,circuitJson:Ma}},createUseComponent=(ua,J)=>(la,xa)=>{const Aa=[];Array.isArray(J)?Aa.push(...J.flat()):typeof J=="object"&&Aa.push(...Object.values(J).flat(),...Object.keys(J));const ba=Sa=>{if(Sa!=null&&Sa.name&&Sa.name!==la)throw new Error(`Component name mismatch. Hook name: ${la}, Component prop name: ${Sa.name}`);const Ma={...xa,...Sa,name:la},Ra=[];for(const Ia of Aa)if(Ma[Ia]){const La=`.${la} > .${Ia}`,Fa=Ma[Ia];Ra.push({from:La,to:Fa}),delete Ma[Ia]}return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(ua,{...Ma}),Ra.map((Ia,La)=>jsxRuntimeExports.jsx("trace",{...Ia},La))]})};for(const Sa of Aa)ba[Sa]=`.${la} > .${Sa}`;return ba},useCapacitor=createUseComponent(ua=>jsxRuntimeExports.jsx("capacitor",{...ua}),capacitorPins),useChip=ua=>createUseComponent(J=>jsxRuntimeExports.jsx("chip",{pinLabels:ua,...J}),ua),useDiode=createUseComponent(ua=>jsxRuntimeExports.jsx("diode",{...ua}),diodePins),useLed=createUseComponent(ua=>jsxRuntimeExports.jsx("led",{...ua}),ledPins),useResistor=createUseComponent(ua=>jsxRuntimeExports.jsx("resistor",{...ua}),resistorPins),applyEditEventsToManualEditsFile=({circuitJson:ua,editEvents:J,manualEditsFile:la})=>{var Aa;const xa={...la,schematic_placements:[...la.schematic_placements??[]]};for(const ba of J)if(ba.edit_event_type==="edit_schematic_component_location"){const{schematic_component_id:Sa,new_center:Ma}=ba,Ra=su_default$2(ua).schematic_component.get(Sa);if(!Ra)continue;const Ia=su_default$2(ua).source_component.get(Ra.source_component_id);if(!Ia)continue;const La=(Aa=xa.schematic_placements)==null?void 0:Aa.findIndex(ka=>ka.selector===Ia.name),Fa={selector:Ia.name,center:Ma,relative_to:"group_center"};La>=0?xa.schematic_placements[La]=Fa:xa.schematic_placements.push(Fa)}return xa},getSimpleRouteJsonFromCircuitJson=({circuitJson:ua,minTraceWidth:J=.1})=>{const la=su_default$2(ua),xa=getFullConnectivityMapFromCircuitJson$1(ua),Aa=getObstaclesFromSoup([...la.pcb_component.list(),...la.pcb_smtpad.list(),...la.pcb_plated_hole.list()],xa),ba=Aa.flatMap(Ra=>[{x:Ra.center.x-Ra.width/2,y:Ra.center.y-Ra.height/2},{x:Ra.center.x+Ra.width/2,y:Ra.center.y+Ra.height/2}]),Sa={minX:Math.min(...ba.map(Ra=>Ra.x))-1,maxX:Math.max(...ba.map(Ra=>Ra.x))+1,minY:Math.min(...ba.map(Ra=>Ra.y))-1,maxY:Math.max(...ba.map(Ra=>Ra.y))+1},Ma=la.source_trace.list().map(Ra=>{const Ia=Ra.connected_source_port_ids.map(La=>{const Fa=la.source_port.get(La),ka=la.pcb_port.getWhere({source_port_id:La});return{...Fa,...ka}});return Ia.length<2?null:{name:xa.getNetConnectedToId(Ra.source_trace_id)??Ra.source_trace_id??"",source_trace_id:Ra.source_trace_id,pointsToConnect:Ia.map(La=>{var Fa;return{x:La.x,y:La.y,layer:((Fa=La.layers)==null?void 0:Fa[0])??"top"}})}}).filter(Ra=>Ra!==null);return{bounds:Sa,obstacles:Aa,connections:Ma,layerCount:2,minTraceWidth:J}},getPhaseTimingsFromRenderEvents$1=ua=>{const J={};if(!ua)return J;for(const xa of orderedRenderPhases)J[xa]=0;const la=new Map;for(const xa of ua){const[,,Aa,ba]=xa.type.split(":");if(ba==="start"){la.set(`${Aa}:${xa.renderId}`,xa);continue}if(ba==="end"){const Sa=la.get(`${Aa}:${xa.renderId}`);if(Sa){const Ma=xa.createdAt-Sa.createdAt;J[Aa]=(J[Aa]||0)+Ma}}}return J},sel=new Proxy({},{get:(ua,J)=>new Proxy({},{get:(la,xa)=>J==="net"?`net.${xa}`:`.${J} > .${xa}`})});extendCatalogue(components_exports),extendCatalogue({Bug:Chip});const dist$6=Object.freeze(Object.defineProperty({__proto__:null,Battery,Board,Capacitor,Chip,Circuit,Constraint:Constraint2,Crystal,Diode,FabricationNotePath,FabricationNoteText,Footprint,Group:Group$2,Hole,Inductor,Jumper,Keepout,Led,Mosfet,Net,NetAlias,NormalComponent,PinHeader,PlatedHole,Port,Potentiometer,PowerSource,PrimitiveComponent,Project,PushButton,Renderable,Resistor,Resonator,RootCircuit,SilkscreenCircle,SilkscreenLine,SilkscreenPath,SilkscreenRect,SilkscreenText,SmtPad,Subcircuit,Trace:Trace2,TraceHint,Transistor,Via,applyEditEventsToManualEditsFile,createElement:reactExports.createElement,createUseComponent,getPhaseTimingsFromRenderEvents:getPhaseTimingsFromRenderEvents$1,getSimpleRouteJsonFromCircuitJson,orderedRenderPhases,sel,useCapacitor,useChip,useDiode,useLed,useRenderedCircuit,useResistor},Symbol.toStringTag,{value:"Module"})),require$$2=getAugmentedNamespace(dist$6);var flatten_1$1,hasRequiredFlatten$1;function requireFlatten$1(){if(hasRequiredFlatten$1)return flatten_1$1;hasRequiredFlatten$1=1;const ua=J=>J.reduce((la,xa)=>Array.isArray(xa)?la.concat(ua(xa)):la.concat(xa),[]);return flatten_1$1=ua,flatten_1$1}var padArrayToLength_1,hasRequiredPadArrayToLength;function requirePadArrayToLength(){return hasRequiredPadArrayToLength||(hasRequiredPadArrayToLength=1,padArrayToLength_1=(J,la,xa)=>{for(J=J.slice();J.length<xa;)J.push(la);return J}),padArrayToLength_1}var min_1$1,hasRequiredMin$1;function requireMin$1(){return hasRequiredMin$1||(hasRequiredMin$1=1,min_1$1=(J,la,xa)=>(J[0]=Math.min(la[0],xa[0]),J[1]=Math.min(la[1],xa[1]),J[2]=Math.min(la[2],xa[2]),J)),min_1$1}var max_1$1,hasRequiredMax$1;function requireMax$1(){return hasRequiredMax$1||(hasRequiredMax$1=1,max_1$1=(J,la,xa)=>(J[0]=Math.max(la[0],xa[0]),J[1]=Math.max(la[1],xa[1]),J[2]=Math.max(la[2],xa[2]),J)),max_1$1}var abs_1$1,hasRequiredAbs$1;function requireAbs$1(){return hasRequiredAbs$1||(hasRequiredAbs$1=1,abs_1$1=(J,la)=>(J[0]=Math.abs(la[0]),J[1]=Math.abs(la[1]),J)),abs_1$1}var add_1$2,hasRequiredAdd$2;function requireAdd$2(){return hasRequiredAdd$2||(hasRequiredAdd$2=1,add_1$2=(J,la,xa)=>(J[0]=la[0]+xa[0],J[1]=la[1]+xa[1],J)),add_1$2}var angleRadians_1,hasRequiredAngleRadians;function requireAngleRadians(){return hasRequiredAngleRadians||(hasRequiredAngleRadians=1,angleRadians_1=J=>Math.atan2(J[1],J[0])),angleRadians_1}var angle,hasRequiredAngle$1;function requireAngle$1(){return hasRequiredAngle$1||(hasRequiredAngle$1=1,angle=requireAngleRadians()),angle}var angleDegrees_1,hasRequiredAngleDegrees;function requireAngleDegrees(){if(hasRequiredAngleDegrees)return angleDegrees_1;hasRequiredAngleDegrees=1;const ua=requireAngleRadians();return angleDegrees_1=la=>ua(la)*57.29577951308232,angleDegrees_1}var create_1$c,hasRequiredCreate$c;function requireCreate$c(){return hasRequiredCreate$c||(hasRequiredCreate$c=1,create_1$c=()=>[0,0]),create_1$c}var clone_1$a,hasRequiredClone$a;function requireClone$a(){if(hasRequiredClone$a)return clone_1$a;hasRequiredClone$a=1;const ua=requireCreate$c();return clone_1$a=la=>{const xa=ua();return xa[0]=la[0],xa[1]=la[1],xa},clone_1$a}var copy_1$5,hasRequiredCopy$5;function requireCopy$5(){return hasRequiredCopy$5||(hasRequiredCopy$5=1,copy_1$5=(J,la)=>(J[0]=la[0],J[1]=la[1],J)),copy_1$5}var cross_1$1,hasRequiredCross$1;function requireCross$1(){return hasRequiredCross$1||(hasRequiredCross$1=1,cross_1$1=(J,la,xa)=>(J[0]=0,J[1]=0,J[2]=la[0]*xa[1]-la[1]*xa[0],J)),cross_1$1}var distance_1$1,hasRequiredDistance$1;function requireDistance$1(){return hasRequiredDistance$1||(hasRequiredDistance$1=1,distance_1$1=(J,la)=>{const xa=la[0]-J[0],Aa=la[1]-J[1];return Math.sqrt(xa*xa+Aa*Aa)}),distance_1$1}var divide_1$1,hasRequiredDivide$1;function requireDivide$1(){return hasRequiredDivide$1||(hasRequiredDivide$1=1,divide_1$1=(J,la,xa)=>(J[0]=la[0]/xa[0],J[1]=la[1]/xa[1],J)),divide_1$1}var dot_1$2,hasRequiredDot$2;function requireDot$2(){return hasRequiredDot$2||(hasRequiredDot$2=1,dot_1$2=(J,la)=>J[0]*la[0]+J[1]*la[1]),dot_1$2}var equals_1$7,hasRequiredEquals$7;function requireEquals$7(){return hasRequiredEquals$7||(hasRequiredEquals$7=1,equals_1$7=(J,la)=>J[0]===la[0]&&J[1]===la[1]),equals_1$7}var constants$1,hasRequiredConstants$1;function requireConstants$1(){if(hasRequiredConstants$1)return constants$1;hasRequiredConstants$1=1;const ua=1e5,J=1e-5,la=1e-13,xa=Math.PI*2;return constants$1={EPS:J,NEPS:la,TAU:xa,spatialResolution:ua},constants$1}var trigonometry,hasRequiredTrigonometry;function requireTrigonometry(){if(hasRequiredTrigonometry)return trigonometry;hasRequiredTrigonometry=1;const{NEPS:ua}=requireConstants$1(),J=Aa=>Math.abs(Aa)<ua?0:Aa;return trigonometry={sin:Aa=>J(Math.sin(Aa)),cos:Aa=>J(Math.cos(Aa))},trigonometry}var fromAngleRadians_1,hasRequiredFromAngleRadians;function requireFromAngleRadians(){if(hasRequiredFromAngleRadians)return fromAngleRadians_1;hasRequiredFromAngleRadians=1;const{sin:ua,cos:J}=requireTrigonometry();return fromAngleRadians_1=(xa,Aa)=>(xa[0]=J(Aa),xa[1]=ua(Aa),xa),fromAngleRadians_1}var fromAngleDegrees_1,hasRequiredFromAngleDegrees;function requireFromAngleDegrees(){if(hasRequiredFromAngleDegrees)return fromAngleDegrees_1;hasRequiredFromAngleDegrees=1;const ua=requireFromAngleRadians();return fromAngleDegrees_1=(la,xa)=>ua(la,xa*.017453292519943295),fromAngleDegrees_1}var fromScalar_1$2,hasRequiredFromScalar$2;function requireFromScalar$2(){return hasRequiredFromScalar$2||(hasRequiredFromScalar$2=1,fromScalar_1$2=(J,la)=>(J[0]=la,J[1]=la,J)),fromScalar_1$2}var fromValues_1$4,hasRequiredFromValues$4;function requireFromValues$4(){if(hasRequiredFromValues$4)return fromValues_1$4;hasRequiredFromValues$4=1;const ua=requireCreate$c();return fromValues_1$4=(la,xa)=>{const Aa=ua();return Aa[0]=la,Aa[1]=xa,Aa},fromValues_1$4}var length_1$2,hasRequiredLength$2;function requireLength$2(){return hasRequiredLength$2||(hasRequiredLength$2=1,length_1$2=J=>Math.sqrt(J[0]*J[0]+J[1]*J[1])),length_1$2}var lerp_1$1,hasRequiredLerp$1;function requireLerp$1(){return hasRequiredLerp$1||(hasRequiredLerp$1=1,lerp_1$1=(J,la,xa,Aa)=>{const ba=la[0],Sa=la[1];return J[0]=ba+Aa*(xa[0]-ba),J[1]=Sa+Aa*(xa[1]-Sa),J}),lerp_1$1}var max_1,hasRequiredMax;function requireMax(){return hasRequiredMax||(hasRequiredMax=1,max_1=(J,la,xa)=>(J[0]=Math.max(la[0],xa[0]),J[1]=Math.max(la[1],xa[1]),J)),max_1}var min_1,hasRequiredMin;function requireMin(){return hasRequiredMin||(hasRequiredMin=1,min_1=(J,la,xa)=>(J[0]=Math.min(la[0],xa[0]),J[1]=Math.min(la[1],xa[1]),J)),min_1}var multiply_1$2,hasRequiredMultiply$2;function requireMultiply$2(){return hasRequiredMultiply$2||(hasRequiredMultiply$2=1,multiply_1$2=(J,la,xa)=>(J[0]=la[0]*xa[0],J[1]=la[1]*xa[1],J)),multiply_1$2}var negate_1$1,hasRequiredNegate$1;function requireNegate$1(){return hasRequiredNegate$1||(hasRequiredNegate$1=1,negate_1$1=(J,la)=>(J[0]=-la[0],J[1]=-la[1],J)),negate_1$1}var rotate_1$2,hasRequiredRotate$2;function requireRotate$2(){return hasRequiredRotate$2||(hasRequiredRotate$2=1,rotate_1$2=(J,la,xa,Aa)=>{const ba=la[0]-xa[0],Sa=la[1]-xa[1],Ma=Math.cos(Aa),Ra=Math.sin(Aa);return J[0]=ba*Ma-Sa*Ra+xa[0],J[1]=ba*Ra+Sa*Ma+xa[1],J}),rotate_1$2}var normal_1,hasRequiredNormal;function requireNormal(){if(hasRequiredNormal)return normal_1;hasRequiredNormal=1;const{TAU:ua}=requireConstants$1(),J=requireCreate$c(),la=requireRotate$2();return normal_1=(Aa,ba)=>la(Aa,ba,J(),ua/4),normal_1}var normalize_1$1,hasRequiredNormalize$1;function requireNormalize$1(){return hasRequiredNormalize$1||(hasRequiredNormalize$1=1,normalize_1$1=(J,la)=>{const xa=la[0],Aa=la[1];let ba=xa*xa+Aa*Aa;return ba>0&&(ba=1/Math.sqrt(ba)),J[0]=xa*ba,J[1]=Aa*ba,J}),normalize_1$1}var scale_1$3,hasRequiredScale$3;function requireScale$3(){return hasRequiredScale$3||(hasRequiredScale$3=1,scale_1$3=(J,la,xa)=>(J[0]=la[0]*xa,J[1]=la[1]*xa,J)),scale_1$3}var snap_1$2,hasRequiredSnap$2;function requireSnap$2(){return hasRequiredSnap$2||(hasRequiredSnap$2=1,snap_1$2=(J,la,xa)=>(J[0]=Math.round(la[0]/xa)*xa+0,J[1]=Math.round(la[1]/xa)*xa+0,J)),snap_1$2}var squaredDistance_1$1,hasRequiredSquaredDistance$1;function requireSquaredDistance$1(){return hasRequiredSquaredDistance$1||(hasRequiredSquaredDistance$1=1,squaredDistance_1$1=(J,la)=>{const xa=la[0]-J[0],Aa=la[1]-J[1];return xa*xa+Aa*Aa}),squaredDistance_1$1}var squaredLength_1$1,hasRequiredSquaredLength$1;function requireSquaredLength$1(){return hasRequiredSquaredLength$1||(hasRequiredSquaredLength$1=1,squaredLength_1$1=J=>{const la=J[0],xa=J[1];return la*la+xa*xa}),squaredLength_1$1}var subtract_1$3,hasRequiredSubtract$3;function requireSubtract$3(){return hasRequiredSubtract$3||(hasRequiredSubtract$3=1,subtract_1$3=(J,la,xa)=>(J[0]=la[0]-xa[0],J[1]=la[1]-xa[1],J)),subtract_1$3}var toString_1$a,hasRequiredToString$a;function requireToString$a(){return hasRequiredToString$a||(hasRequiredToString$a=1,toString_1$a=J=>`[${J[0].toFixed(7)}, ${J[1].toFixed(7)}]`),toString_1$a}var transform_1$b,hasRequiredTransform$b;function requireTransform$b(){return hasRequiredTransform$b||(hasRequiredTransform$b=1,transform_1$b=(J,la,xa)=>{const Aa=la[0],ba=la[1];return J[0]=xa[0]*Aa+xa[4]*ba+xa[12],J[1]=xa[1]*Aa+xa[5]*ba+xa[13],J}),transform_1$b}var vec2$2,hasRequiredVec2;function requireVec2(){return hasRequiredVec2||(hasRequiredVec2=1,vec2$2={abs:requireAbs$1(),add:requireAdd$2(),angle:requireAngle$1(),angleDegrees:requireAngleDegrees(),angleRadians:requireAngleRadians(),clone:requireClone$a(),copy:requireCopy$5(),create:requireCreate$c(),cross:requireCross$1(),distance:requireDistance$1(),divide:requireDivide$1(),dot:requireDot$2(),equals:requireEquals$7(),fromAngleDegrees:requireFromAngleDegrees(),fromAngleRadians:requireFromAngleRadians(),fromScalar:requireFromScalar$2(),fromValues:requireFromValues$4(),length:requireLength$2(),lerp:requireLerp$1(),max:requireMax(),min:requireMin(),multiply:requireMultiply$2(),negate:requireNegate$1(),normal:requireNormal(),normalize:requireNormalize$1(),rotate:requireRotate$2(),scale:requireScale$3(),snap:requireSnap$2(),squaredDistance:requireSquaredDistance$1(),squaredLength:requireSquaredLength$1(),subtract:requireSubtract$3(),toString:requireToString$a(),transform:requireTransform$b()}),vec2$2}var abs_1,hasRequiredAbs;function requireAbs(){return hasRequiredAbs||(hasRequiredAbs=1,abs_1=(J,la)=>(J[0]=Math.abs(la[0]),J[1]=Math.abs(la[1]),J[2]=Math.abs(la[2]),J)),abs_1}var add_1$1,hasRequiredAdd$1;function requireAdd$1(){return hasRequiredAdd$1||(hasRequiredAdd$1=1,add_1$1=(J,la,xa)=>(J[0]=la[0]+xa[0],J[1]=la[1]+xa[1],J[2]=la[2]+xa[2],J)),add_1$1}var dot_1$1,hasRequiredDot$1;function requireDot$1(){return hasRequiredDot$1||(hasRequiredDot$1=1,dot_1$1=(J,la)=>J[0]*la[0]+J[1]*la[1]+J[2]*la[2]),dot_1$1}var angle_1,hasRequiredAngle;function requireAngle(){if(hasRequiredAngle)return angle_1;hasRequiredAngle=1;const ua=requireDot$1();return angle_1=(la,xa)=>{const Aa=la[0],ba=la[1],Sa=la[2],Ma=xa[0],Ra=xa[1],Ia=xa[2],La=Math.sqrt(Aa*Aa+ba*ba+Sa*Sa),Fa=Math.sqrt(Ma*Ma+Ra*Ra+Ia*Ia),ka=La*Fa,el=ka&&ua(la,xa)/ka;return Math.acos(Math.min(Math.max(el,-1),1))},angle_1}var create_1$b,hasRequiredCreate$b;function requireCreate$b(){return hasRequiredCreate$b||(hasRequiredCreate$b=1,create_1$b=()=>[0,0,0]),create_1$b}var clone_1$9,hasRequiredClone$9;function requireClone$9(){if(hasRequiredClone$9)return clone_1$9;hasRequiredClone$9=1;const ua=requireCreate$b();return clone_1$9=la=>{const xa=ua();return xa[0]=la[0],xa[1]=la[1],xa[2]=la[2],xa},clone_1$9}var copy_1$4,hasRequiredCopy$4;function requireCopy$4(){return hasRequiredCopy$4||(hasRequiredCopy$4=1,copy_1$4=(J,la)=>(J[0]=la[0],J[1]=la[1],J[2]=la[2],J)),copy_1$4}var cross_1,hasRequiredCross;function requireCross(){return hasRequiredCross||(hasRequiredCross=1,cross_1=(J,la,xa)=>{const Aa=la[0],ba=la[1],Sa=la[2],Ma=xa[0],Ra=xa[1],Ia=xa[2];return J[0]=ba*Ia-Sa*Ra,J[1]=Sa*Ma-Aa*Ia,J[2]=Aa*Ra-ba*Ma,J}),cross_1}var distance_1,hasRequiredDistance;function requireDistance(){return hasRequiredDistance||(hasRequiredDistance=1,distance_1=(J,la)=>{const xa=la[0]-J[0],Aa=la[1]-J[1],ba=la[2]-J[2];return Math.sqrt(xa*xa+Aa*Aa+ba*ba)}),distance_1}var divide_1,hasRequiredDivide;function requireDivide(){return hasRequiredDivide||(hasRequiredDivide=1,divide_1=(J,la,xa)=>(J[0]=la[0]/xa[0],J[1]=la[1]/xa[1],J[2]=la[2]/xa[2],J)),divide_1}var equals_1$6,hasRequiredEquals$6;function requireEquals$6(){return hasRequiredEquals$6||(hasRequiredEquals$6=1,equals_1$6=(J,la)=>J[0]===la[0]&&J[1]===la[1]&&J[2]===la[2]),equals_1$6}var fromScalar_1$1,hasRequiredFromScalar$1;function requireFromScalar$1(){return hasRequiredFromScalar$1||(hasRequiredFromScalar$1=1,fromScalar_1$1=(J,la)=>(J[0]=la,J[1]=la,J[2]=la,J)),fromScalar_1$1}var fromValues_1$3,hasRequiredFromValues$3;function requireFromValues$3(){if(hasRequiredFromValues$3)return fromValues_1$3;hasRequiredFromValues$3=1;const ua=requireCreate$b();return fromValues_1$3=(la,xa,Aa)=>{const ba=ua();return ba[0]=la,ba[1]=xa,ba[2]=Aa,ba},fromValues_1$3}var fromVec2,hasRequiredFromVec2;function requireFromVec2(){return hasRequiredFromVec2||(hasRequiredFromVec2=1,fromVec2=(J,la,xa=0)=>(J[0]=la[0],J[1]=la[1],J[2]=xa,J)),fromVec2}var length_1$1,hasRequiredLength$1;function requireLength$1(){return hasRequiredLength$1||(hasRequiredLength$1=1,length_1$1=J=>{const la=J[0],xa=J[1],Aa=J[2];return Math.sqrt(la*la+xa*xa+Aa*Aa)}),length_1$1}var lerp_1,hasRequiredLerp;function requireLerp(){return hasRequiredLerp||(hasRequiredLerp=1,lerp_1=(J,la,xa,Aa)=>(J[0]=la[0]+Aa*(xa[0]-la[0]),J[1]=la[1]+Aa*(xa[1]-la[1]),J[2]=la[2]+Aa*(xa[2]-la[2]),J)),lerp_1}var multiply_1$1,hasRequiredMultiply$1;function requireMultiply$1(){return hasRequiredMultiply$1||(hasRequiredMultiply$1=1,multiply_1$1=(J,la,xa)=>(J[0]=la[0]*xa[0],J[1]=la[1]*xa[1],J[2]=la[2]*xa[2],J)),multiply_1$1}var negate_1,hasRequiredNegate;function requireNegate(){return hasRequiredNegate||(hasRequiredNegate=1,negate_1=(J,la)=>(J[0]=-la[0],J[1]=-la[1],J[2]=-la[2],J)),negate_1}var normalize_1,hasRequiredNormalize;function requireNormalize(){return hasRequiredNormalize||(hasRequiredNormalize=1,normalize_1=(J,la)=>{const xa=la[0],Aa=la[1],ba=la[2];let Sa=xa*xa+Aa*Aa+ba*ba;return Sa>0&&(Sa=1/Math.sqrt(Sa)),J[0]=xa*Sa,J[1]=Aa*Sa,J[2]=ba*Sa,J}),normalize_1}var orthogonal_1,hasRequiredOrthogonal;function requireOrthogonal(){if(hasRequiredOrthogonal)return orthogonal_1;hasRequiredOrthogonal=1;const ua=requireAbs(),J=requireCreate$b(),la=requireCross();return orthogonal_1=(Aa,ba)=>{const Sa=ua(J(),ba),Ma=0+(Sa[0]<Sa[1]&&Sa[0]<Sa[2]),Ra=0+(Sa[1]<=Sa[0]&&Sa[1]<Sa[2]),Ia=0+(Sa[2]<=Sa[0]&&Sa[2]<=Sa[1]);return la(Aa,ba,[Ma,Ra,Ia])},orthogonal_1}var rotateX_1$1,hasRequiredRotateX$1;function requireRotateX$1(){return hasRequiredRotateX$1||(hasRequiredRotateX$1=1,rotateX_1$1=(J,la,xa,Aa)=>{const ba=[],Sa=[];return ba[0]=la[0]-xa[0],ba[1]=la[1]-xa[1],ba[2]=la[2]-xa[2],Sa[0]=ba[0],Sa[1]=ba[1]*Math.cos(Aa)-ba[2]*Math.sin(Aa),Sa[2]=ba[1]*Math.sin(Aa)+ba[2]*Math.cos(Aa),J[0]=Sa[0]+xa[0],J[1]=Sa[1]+xa[1],J[2]=Sa[2]+xa[2],J}),rotateX_1$1}var rotateY_1$1,hasRequiredRotateY$1;function requireRotateY$1(){return hasRequiredRotateY$1||(hasRequiredRotateY$1=1,rotateY_1$1=(J,la,xa,Aa)=>{const ba=[],Sa=[];return ba[0]=la[0]-xa[0],ba[1]=la[1]-xa[1],ba[2]=la[2]-xa[2],Sa[0]=ba[2]*Math.sin(Aa)+ba[0]*Math.cos(Aa),Sa[1]=ba[1],Sa[2]=ba[2]*Math.cos(Aa)-ba[0]*Math.sin(Aa),J[0]=Sa[0]+xa[0],J[1]=Sa[1]+xa[1],J[2]=Sa[2]+xa[2],J}),rotateY_1$1}var rotateZ_1$1,hasRequiredRotateZ$1;function requireRotateZ$1(){return hasRequiredRotateZ$1||(hasRequiredRotateZ$1=1,rotateZ_1$1=(J,la,xa,Aa)=>{const ba=[],Sa=[];return ba[0]=la[0]-xa[0],ba[1]=la[1]-xa[1],Sa[0]=ba[0]*Math.cos(Aa)-ba[1]*Math.sin(Aa),Sa[1]=ba[0]*Math.sin(Aa)+ba[1]*Math.cos(Aa),J[0]=Sa[0]+xa[0],J[1]=Sa[1]+xa[1],J[2]=la[2],J}),rotateZ_1$1}var scale_1$2,hasRequiredScale$2;function requireScale$2(){return hasRequiredScale$2||(hasRequiredScale$2=1,scale_1$2=(J,la,xa)=>(J[0]=la[0]*xa,J[1]=la[1]*xa,J[2]=la[2]*xa,J)),scale_1$2}var snap_1$1,hasRequiredSnap$1;function requireSnap$1(){return hasRequiredSnap$1||(hasRequiredSnap$1=1,snap_1$1=(J,la,xa)=>(J[0]=Math.round(la[0]/xa)*xa+0,J[1]=Math.round(la[1]/xa)*xa+0,J[2]=Math.round(la[2]/xa)*xa+0,J)),snap_1$1}var squaredDistance_1,hasRequiredSquaredDistance;function requireSquaredDistance(){return hasRequiredSquaredDistance||(hasRequiredSquaredDistance=1,squaredDistance_1=(J,la)=>{const xa=la[0]-J[0],Aa=la[1]-J[1],ba=la[2]-J[2];return xa*xa+Aa*Aa+ba*ba}),squaredDistance_1}var squaredLength_1,hasRequiredSquaredLength;function requireSquaredLength(){return hasRequiredSquaredLength||(hasRequiredSquaredLength=1,squaredLength_1=J=>{const la=J[0],xa=J[1],Aa=J[2];return la*la+xa*xa+Aa*Aa}),squaredLength_1}var subtract_1$2,hasRequiredSubtract$2;function requireSubtract$2(){return hasRequiredSubtract$2||(hasRequiredSubtract$2=1,subtract_1$2=(J,la,xa)=>(J[0]=la[0]-xa[0],J[1]=la[1]-xa[1],J[2]=la[2]-xa[2],J)),subtract_1$2}var toString_1$9,hasRequiredToString$9;function requireToString$9(){return hasRequiredToString$9||(hasRequiredToString$9=1,toString_1$9=J=>`[${J[0].toFixed(7)}, ${J[1].toFixed(7)}, ${J[2].toFixed(7)}]`),toString_1$9}var transform_1$a,hasRequiredTransform$a;function requireTransform$a(){return hasRequiredTransform$a||(hasRequiredTransform$a=1,transform_1$a=(J,la,xa)=>{const Aa=la[0],ba=la[1],Sa=la[2];let Ma=xa[3]*Aa+xa[7]*ba+xa[11]*Sa+xa[15];return Ma=Ma||1,J[0]=(xa[0]*Aa+xa[4]*ba+xa[8]*Sa+xa[12])/Ma,J[1]=(xa[1]*Aa+xa[5]*ba+xa[9]*Sa+xa[13])/Ma,J[2]=(xa[2]*Aa+xa[6]*ba+xa[10]*Sa+xa[14])/Ma,J}),transform_1$a}var vec3,hasRequiredVec3;function requireVec3(){return hasRequiredVec3||(hasRequiredVec3=1,vec3={abs:requireAbs(),add:requireAdd$1(),angle:requireAngle(),clone:requireClone$9(),copy:requireCopy$4(),create:requireCreate$b(),cross:requireCross(),distance:requireDistance(),divide:requireDivide(),dot:requireDot$1(),equals:requireEquals$6(),fromScalar:requireFromScalar$1(),fromValues:requireFromValues$3(),fromVec2:requireFromVec2(),length:requireLength$1(),lerp:requireLerp(),max:requireMax$1(),min:requireMin$1(),multiply:requireMultiply$1(),negate:requireNegate(),normalize:requireNormalize(),orthogonal:requireOrthogonal(),rotateX:requireRotateX$1(),rotateY:requireRotateY$1(),rotateZ:requireRotateZ$1(),scale:requireScale$2(),snap:requireSnap$1(),squaredDistance:requireSquaredDistance(),squaredLength:requireSquaredLength(),subtract:requireSubtract$2(),toString:requireToString$9(),transform:requireTransform$a()}),vec3}var clone_1$8,hasRequiredClone$8;function requireClone$8(){return hasRequiredClone$8||(hasRequiredClone$8=1,clone_1$8=J=>Object.assign({},J)),clone_1$8}var add_1,hasRequiredAdd;function requireAdd(){return hasRequiredAdd||(hasRequiredAdd=1,add_1=(J,la,xa)=>(J[0]=la[0]+xa[0],J[1]=la[1]+xa[1],J[2]=la[2]+xa[2],J[3]=la[3]+xa[3],J[4]=la[4]+xa[4],J[5]=la[5]+xa[5],J[6]=la[6]+xa[6],J[7]=la[7]+xa[7],J[8]=la[8]+xa[8],J[9]=la[9]+xa[9],J[10]=la[10]+xa[10],J[11]=la[11]+xa[11],J[12]=la[12]+xa[12],J[13]=la[13]+xa[13],J[14]=la[14]+xa[14],J[15]=la[15]+xa[15],J)),add_1}var create_1$a,hasRequiredCreate$a;function requireCreate$a(){return hasRequiredCreate$a||(hasRequiredCreate$a=1,create_1$a=()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),create_1$a}var clone_1$7,hasRequiredClone$7;function requireClone$7(){if(hasRequiredClone$7)return clone_1$7;hasRequiredClone$7=1;const ua=requireCreate$a();return clone_1$7=la=>{const xa=ua();return xa[0]=la[0],xa[1]=la[1],xa[2]=la[2],xa[3]=la[3],xa[4]=la[4],xa[5]=la[5],xa[6]=la[6],xa[7]=la[7],xa[8]=la[8],xa[9]=la[9],xa[10]=la[10],xa[11]=la[11],xa[12]=la[12],xa[13]=la[13],xa[14]=la[14],xa[15]=la[15],xa},clone_1$7}var copy_1$3,hasRequiredCopy$3;function requireCopy$3(){return hasRequiredCopy$3||(hasRequiredCopy$3=1,copy_1$3=(J,la)=>(J[0]=la[0],J[1]=la[1],J[2]=la[2],J[3]=la[3],J[4]=la[4],J[5]=la[5],J[6]=la[6],J[7]=la[7],J[8]=la[8],J[9]=la[9],J[10]=la[10],J[11]=la[11],J[12]=la[12],J[13]=la[13],J[14]=la[14],J[15]=la[15],J)),copy_1$3}var invert_1$2,hasRequiredInvert$2;function requireInvert$2(){return hasRequiredInvert$2||(hasRequiredInvert$2=1,invert_1$2=(J,la)=>{const xa=la[0],Aa=la[1],ba=la[2],Sa=la[3],Ma=la[4],Ra=la[5],Ia=la[6],La=la[7],Fa=la[8],ka=la[9],el=la[10],tl=la[11],rl=la[12],il=la[13],nl=la[14],sl=la[15],ll=xa*Ra-Aa*Ma,dl=xa*Ia-ba*Ma,gl=xa*La-Sa*Ma,_l=Aa*Ia-ba*Ra,vl=Aa*La-Sa*Ra,Cl=ba*La-Sa*Ia,Ll=Fa*il-ka*rl,Il=Fa*nl-el*rl,Fl=Fa*sl-tl*rl,Ol=ka*nl-el*il,ql=ka*sl-tl*il,rc=el*sl-tl*nl;let sc=ll*rc-dl*ql+gl*Ol+_l*Fl-vl*Il+Cl*Ll;return sc?(sc=1/sc,J[0]=(Ra*rc-Ia*ql+La*Ol)*sc,J[1]=(ba*ql-Aa*rc-Sa*Ol)*sc,J[2]=(il*Cl-nl*vl+sl*_l)*sc,J[3]=(el*vl-ka*Cl-tl*_l)*sc,J[4]=(Ia*Fl-Ma*rc-La*Il)*sc,J[5]=(xa*rc-ba*Fl+Sa*Il)*sc,J[6]=(nl*gl-rl*Cl-sl*dl)*sc,J[7]=(Fa*Cl-el*gl+tl*dl)*sc,J[8]=(Ma*ql-Ra*Fl+La*Ll)*sc,J[9]=(Aa*Fl-xa*ql-Sa*Ll)*sc,J[10]=(rl*vl-il*gl+sl*ll)*sc,J[11]=(ka*gl-Fa*vl-tl*ll)*sc,J[12]=(Ra*Il-Ma*Ol-Ia*Ll)*sc,J[13]=(xa*Ol-Aa*Il+ba*Ll)*sc,J[14]=(il*dl-rl*_l-nl*ll)*sc,J[15]=(Fa*_l-ka*dl+el*ll)*sc,J):null}),invert_1$2}var equals_1$5,hasRequiredEquals$5;function requireEquals$5(){return hasRequiredEquals$5||(hasRequiredEquals$5=1,equals_1$5=(J,la)=>J[0]===la[0]&&J[1]===la[1]&&J[2]===la[2]&&J[3]===la[3]&&J[4]===la[4]&&J[5]===la[5]&&J[6]===la[6]&&J[7]===la[7]&&J[8]===la[8]&&J[9]===la[9]&&J[10]===la[10]&&J[11]===la[11]&&J[12]===la[12]&&J[13]===la[13]&&J[14]===la[14]&&J[15]===la[15]),equals_1$5}var identity_1,hasRequiredIdentity;function requireIdentity(){return hasRequiredIdentity||(hasRequiredIdentity=1,identity_1=J=>(J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J)),identity_1}var fromRotation_1,hasRequiredFromRotation;function requireFromRotation(){if(hasRequiredFromRotation)return fromRotation_1;hasRequiredFromRotation=1;const{EPS:ua}=requireConstants$1(),{sin:J,cos:la}=requireTrigonometry(),xa=requireIdentity();return fromRotation_1=(ba,Sa,Ma)=>{let[Ra,Ia,La]=Ma;const Fa=Ra*Ra+Ia*Ia+La*La;if(Math.abs(Fa)<ua)return xa(ba);const ka=1/Math.sqrt(Fa);Ra*=ka,Ia*=ka,La*=ka;const el=J(Sa),tl=la(Sa),rl=1-tl;return ba[0]=Ra*Ra*rl+tl,ba[1]=Ia*Ra*rl+La*el,ba[2]=La*Ra*rl-Ia*el,ba[3]=0,ba[4]=Ra*Ia*rl-La*el,ba[5]=Ia*Ia*rl+tl,ba[6]=La*Ia*rl+Ra*el,ba[7]=0,ba[8]=Ra*La*rl+Ia*el,ba[9]=Ia*La*rl-Ra*el,ba[10]=La*La*rl+tl,ba[11]=0,ba[12]=0,ba[13]=0,ba[14]=0,ba[15]=1,ba},fromRotation_1}var fromScaling_1,hasRequiredFromScaling;function requireFromScaling(){return hasRequiredFromScaling||(hasRequiredFromScaling=1,fromScaling_1=(J,la)=>(J[0]=la[0],J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=la[1],J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=la[2],J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J)),fromScaling_1}var fromTaitBryanRotation_1,hasRequiredFromTaitBryanRotation;function requireFromTaitBryanRotation(){if(hasRequiredFromTaitBryanRotation)return fromTaitBryanRotation_1;hasRequiredFromTaitBryanRotation=1;const{sin:ua,cos:J}=requireTrigonometry();return fromTaitBryanRotation_1=(xa,Aa,ba,Sa)=>{const Ma=ua(Aa),Ra=J(Aa),Ia=ua(ba),La=J(ba),Fa=ua(Sa),ka=J(Sa);return xa[0]=La*Ra,xa[1]=La*Ma,xa[2]=-Ia,xa[3]=0,xa[4]=Fa*Ia*Ra-ka*Ma,xa[5]=ka*Ra+Fa*Ia*Ma,xa[6]=Fa*La,xa[7]=0,xa[8]=Fa*Ma+ka*Ia*Ra,xa[9]=ka*Ia*Ma-Fa*Ra,xa[10]=ka*La,xa[11]=0,xa[12]=0,xa[13]=0,xa[14]=0,xa[15]=1,xa},fromTaitBryanRotation_1}var fromTranslation_1,hasRequiredFromTranslation;function requireFromTranslation(){return hasRequiredFromTranslation||(hasRequiredFromTranslation=1,fromTranslation_1=(J,la)=>(J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=la[0],J[13]=la[1],J[14]=la[2],J[15]=1,J)),fromTranslation_1}var fromValues_1$2,hasRequiredFromValues$2;function requireFromValues$2(){if(hasRequiredFromValues$2)return fromValues_1$2;hasRequiredFromValues$2=1;const ua=requireCreate$a();return fromValues_1$2=(la,xa,Aa,ba,Sa,Ma,Ra,Ia,La,Fa,ka,el,tl,rl,il,nl)=>{const sl=ua();return sl[0]=la,sl[1]=xa,sl[2]=Aa,sl[3]=ba,sl[4]=Sa,sl[5]=Ma,sl[6]=Ra,sl[7]=Ia,sl[8]=La,sl[9]=Fa,sl[10]=ka,sl[11]=el,sl[12]=tl,sl[13]=rl,sl[14]=il,sl[15]=nl,sl},fromValues_1$2}var fromVectorRotation_1,hasRequiredFromVectorRotation;function requireFromVectorRotation(){if(hasRequiredFromVectorRotation)return fromVectorRotation_1;hasRequiredFromVectorRotation=1;const ua=requireVec3(),J=requireFromRotation();return fromVectorRotation_1=(xa,Aa,ba)=>{const Sa=ua.normalize(ua.create(),Aa),Ma=ua.normalize(ua.create(),ba),Ra=ua.cross(ua.create(),Ma,Sa),Ia=ua.dot(Ma,Sa);if(Ia===-1)return J(xa,Math.PI,ua.orthogonal(Ra,Sa));const La=1/(1+Ia);return xa[0]=Ra[0]*Ra[0]*La+Ia,xa[1]=Ra[1]*Ra[0]*La-Ra[2],xa[2]=Ra[2]*Ra[0]*La+Ra[1],xa[3]=0,xa[4]=Ra[0]*Ra[1]*La+Ra[2],xa[5]=Ra[1]*Ra[1]*La+Ia,xa[6]=Ra[2]*Ra[1]*La-Ra[0],xa[7]=0,xa[8]=Ra[0]*Ra[2]*La-Ra[1],xa[9]=Ra[1]*Ra[2]*La+Ra[0],xa[10]=Ra[2]*Ra[2]*La+Ia,xa[11]=0,xa[12]=0,xa[13]=0,xa[14]=0,xa[15]=1,xa},fromVectorRotation_1}var fromXRotation_1,hasRequiredFromXRotation;function requireFromXRotation(){if(hasRequiredFromXRotation)return fromXRotation_1;hasRequiredFromXRotation=1;const{sin:ua,cos:J}=requireTrigonometry();return fromXRotation_1=(xa,Aa)=>{const ba=ua(Aa),Sa=J(Aa);return xa[0]=1,xa[1]=0,xa[2]=0,xa[3]=0,xa[4]=0,xa[5]=Sa,xa[6]=ba,xa[7]=0,xa[8]=0,xa[9]=-ba,xa[10]=Sa,xa[11]=0,xa[12]=0,xa[13]=0,xa[14]=0,xa[15]=1,xa},fromXRotation_1}var fromYRotation_1,hasRequiredFromYRotation;function requireFromYRotation(){if(hasRequiredFromYRotation)return fromYRotation_1;hasRequiredFromYRotation=1;const{sin:ua,cos:J}=requireTrigonometry();return fromYRotation_1=(xa,Aa)=>{const ba=ua(Aa),Sa=J(Aa);return xa[0]=Sa,xa[1]=0,xa[2]=-ba,xa[3]=0,xa[4]=0,xa[5]=1,xa[6]=0,xa[7]=0,xa[8]=ba,xa[9]=0,xa[10]=Sa,xa[11]=0,xa[12]=0,xa[13]=0,xa[14]=0,xa[15]=1,xa},fromYRotation_1}var fromZRotation_1,hasRequiredFromZRotation;function requireFromZRotation(){if(hasRequiredFromZRotation)return fromZRotation_1;hasRequiredFromZRotation=1;const{sin:ua,cos:J}=requireTrigonometry();return fromZRotation_1=(xa,Aa)=>{const ba=ua(Aa),Sa=J(Aa);return xa[0]=Sa,xa[1]=ba,xa[2]=0,xa[3]=0,xa[4]=-ba,xa[5]=Sa,xa[6]=0,xa[7]=0,xa[8]=0,xa[9]=0,xa[10]=1,xa[11]=0,xa[12]=0,xa[13]=0,xa[14]=0,xa[15]=1,xa},fromZRotation_1}var isIdentity_1,hasRequiredIsIdentity;function requireIsIdentity(){return hasRequiredIsIdentity||(hasRequiredIsIdentity=1,isIdentity_1=J=>J[0]===1&&J[1]===0&&J[2]===0&&J[3]===0&&J[4]===0&&J[5]===1&&J[6]===0&&J[7]===0&&J[8]===0&&J[9]===0&&J[10]===1&&J[11]===0&&J[12]===0&&J[13]===0&&J[14]===0&&J[15]===1),isIdentity_1}var isOnlyTransformScale_1,hasRequiredIsOnlyTransformScale;function requireIsOnlyTransformScale(){if(hasRequiredIsOnlyTransformScale)return isOnlyTransformScale_1;hasRequiredIsOnlyTransformScale=1;const ua=la=>J(la[1])&&J(la[2])&&J(la[3])&&J(la[4])&&J(la[6])&&J(la[7])&&J(la[8])&&J(la[9])&&J(la[11])&&la[15]===1,J=la=>Math.abs(la)<Number.EPSILON;return isOnlyTransformScale_1=ua,isOnlyTransformScale_1}var isMirroring_1,hasRequiredIsMirroring;function requireIsMirroring(){return hasRequiredIsMirroring||(hasRequiredIsMirroring=1,isMirroring_1=J=>{const la=J[4]*J[9]-J[8]*J[5],xa=J[8]*J[1]-J[0]*J[9],Aa=J[0]*J[5]-J[4]*J[1];return la*J[2]+xa*J[6]+Aa*J[10]<0}),isMirroring_1}var mirrorByPlane_1,hasRequiredMirrorByPlane;function requireMirrorByPlane(){return hasRequiredMirrorByPlane||(hasRequiredMirrorByPlane=1,mirrorByPlane_1=(J,la)=>{const[xa,Aa,ba,Sa]=la;return J[0]=1-2*xa*xa,J[1]=-2*Aa*xa,J[2]=-2*ba*xa,J[3]=0,J[4]=-2*xa*Aa,J[5]=1-2*Aa*Aa,J[6]=-2*ba*Aa,J[7]=0,J[8]=-2*xa*ba,J[9]=-2*Aa*ba,J[10]=1-2*ba*ba,J[11]=0,J[12]=2*xa*Sa,J[13]=2*Aa*Sa,J[14]=2*ba*Sa,J[15]=1,J}),mirrorByPlane_1}var multiply_1,hasRequiredMultiply;function requireMultiply(){return hasRequiredMultiply||(hasRequiredMultiply=1,multiply_1=(J,la,xa)=>{const Aa=la[0],ba=la[1],Sa=la[2],Ma=la[3],Ra=la[4],Ia=la[5],La=la[6],Fa=la[7],ka=la[8],el=la[9],tl=la[10],rl=la[11],il=la[12],nl=la[13],sl=la[14],ll=la[15];let dl=xa[0],gl=xa[1],_l=xa[2],vl=xa[3];return J[0]=dl*Aa+gl*Ra+_l*ka+vl*il,J[1]=dl*ba+gl*Ia+_l*el+vl*nl,J[2]=dl*Sa+gl*La+_l*tl+vl*sl,J[3]=dl*Ma+gl*Fa+_l*rl+vl*ll,dl=xa[4],gl=xa[5],_l=xa[6],vl=xa[7],J[4]=dl*Aa+gl*Ra+_l*ka+vl*il,J[5]=dl*ba+gl*Ia+_l*el+vl*nl,J[6]=dl*Sa+gl*La+_l*tl+vl*sl,J[7]=dl*Ma+gl*Fa+_l*rl+vl*ll,dl=xa[8],gl=xa[9],_l=xa[10],vl=xa[11],J[8]=dl*Aa+gl*Ra+_l*ka+vl*il,J[9]=dl*ba+gl*Ia+_l*el+vl*nl,J[10]=dl*Sa+gl*La+_l*tl+vl*sl,J[11]=dl*Ma+gl*Fa+_l*rl+vl*ll,dl=xa[12],gl=xa[13],_l=xa[14],vl=xa[15],J[12]=dl*Aa+gl*Ra+_l*ka+vl*il,J[13]=dl*ba+gl*Ia+_l*el+vl*nl,J[14]=dl*Sa+gl*La+_l*tl+vl*sl,J[15]=dl*Ma+gl*Fa+_l*rl+vl*ll,J}),multiply_1}var rotate_1$1,hasRequiredRotate$1;function requireRotate$1(){if(hasRequiredRotate$1)return rotate_1$1;hasRequiredRotate$1=1;const{EPS:ua}=requireConstants$1(),{sin:J,cos:la}=requireTrigonometry(),xa=requireCopy$3();return rotate_1$1=(ba,Sa,Ma,Ra)=>{let[Ia,La,Fa]=Ra;const ka=Ia*Ia+La*La+Fa*Fa;if(Math.abs(ka)<ua)return xa(ba,Sa);const el=1/Math.sqrt(ka);Ia*=el,La*=el,Fa*=el;const tl=J(Ma),rl=la(Ma),il=1-rl,nl=Sa[0],sl=Sa[1],ll=Sa[2],dl=Sa[3],gl=Sa[4],_l=Sa[5],vl=Sa[6],Cl=Sa[7],Ll=Sa[8],Il=Sa[9],Fl=Sa[10],Ol=Sa[11],ql=Ia*Ia*il+rl,rc=La*Ia*il+Fa*tl,sc=Fa*Ia*il-La*tl,Kl=Ia*La*il-Fa*tl,Gl=La*La*il+rl,kl=Fa*La*il+Ia*tl,Wl=Ia*Fa*il+La*tl,tc=La*Fa*il-Ia*tl,Zl=Fa*Fa*il+rl;return ba[0]=nl*ql+gl*rc+Ll*sc,ba[1]=sl*ql+_l*rc+Il*sc,ba[2]=ll*ql+vl*rc+Fl*sc,ba[3]=dl*ql+Cl*rc+Ol*sc,ba[4]=nl*Kl+gl*Gl+Ll*kl,ba[5]=sl*Kl+_l*Gl+Il*kl,ba[6]=ll*Kl+vl*Gl+Fl*kl,ba[7]=dl*Kl+Cl*Gl+Ol*kl,ba[8]=nl*Wl+gl*tc+Ll*Zl,ba[9]=sl*Wl+_l*tc+Il*Zl,ba[10]=ll*Wl+vl*tc+Fl*Zl,ba[11]=dl*Wl+Cl*tc+Ol*Zl,Sa!==ba&&(ba[12]=Sa[12],ba[13]=Sa[13],ba[14]=Sa[14],ba[15]=Sa[15]),ba},rotate_1$1}var rotateX_1,hasRequiredRotateX;function requireRotateX(){if(hasRequiredRotateX)return rotateX_1;hasRequiredRotateX=1;const{sin:ua,cos:J}=requireTrigonometry();return rotateX_1=(xa,Aa,ba)=>{const Sa=ua(ba),Ma=J(ba),Ra=Aa[4],Ia=Aa[5],La=Aa[6],Fa=Aa[7],ka=Aa[8],el=Aa[9],tl=Aa[10],rl=Aa[11];return Aa!==xa&&(xa[0]=Aa[0],xa[1]=Aa[1],xa[2]=Aa[2],xa[3]=Aa[3],xa[12]=Aa[12],xa[13]=Aa[13],xa[14]=Aa[14],xa[15]=Aa[15]),xa[4]=Ra*Ma+ka*Sa,xa[5]=Ia*Ma+el*Sa,xa[6]=La*Ma+tl*Sa,xa[7]=Fa*Ma+rl*Sa,xa[8]=ka*Ma-Ra*Sa,xa[9]=el*Ma-Ia*Sa,xa[10]=tl*Ma-La*Sa,xa[11]=rl*Ma-Fa*Sa,xa},rotateX_1}var rotateY_1,hasRequiredRotateY;function requireRotateY(){if(hasRequiredRotateY)return rotateY_1;hasRequiredRotateY=1;const{sin:ua,cos:J}=requireTrigonometry();return rotateY_1=(xa,Aa,ba)=>{const Sa=ua(ba),Ma=J(ba),Ra=Aa[0],Ia=Aa[1],La=Aa[2],Fa=Aa[3],ka=Aa[8],el=Aa[9],tl=Aa[10],rl=Aa[11];return Aa!==xa&&(xa[4]=Aa[4],xa[5]=Aa[5],xa[6]=Aa[6],xa[7]=Aa[7],xa[12]=Aa[12],xa[13]=Aa[13],xa[14]=Aa[14],xa[15]=Aa[15]),xa[0]=Ra*Ma-ka*Sa,xa[1]=Ia*Ma-el*Sa,xa[2]=La*Ma-tl*Sa,xa[3]=Fa*Ma-rl*Sa,xa[8]=Ra*Sa+ka*Ma,xa[9]=Ia*Sa+el*Ma,xa[10]=La*Sa+tl*Ma,xa[11]=Fa*Sa+rl*Ma,xa},rotateY_1}var rotateZ_1,hasRequiredRotateZ;function requireRotateZ(){if(hasRequiredRotateZ)return rotateZ_1;hasRequiredRotateZ=1;const{sin:ua,cos:J}=requireTrigonometry();return rotateZ_1=(xa,Aa,ba)=>{const Sa=ua(ba),Ma=J(ba),Ra=Aa[0],Ia=Aa[1],La=Aa[2],Fa=Aa[3],ka=Aa[4],el=Aa[5],tl=Aa[6],rl=Aa[7];return Aa!==xa&&(xa[8]=Aa[8],xa[9]=Aa[9],xa[10]=Aa[10],xa[11]=Aa[11],xa[12]=Aa[12],xa[13]=Aa[13],xa[14]=Aa[14],xa[15]=Aa[15]),xa[0]=Ra*Ma+ka*Sa,xa[1]=Ia*Ma+el*Sa,xa[2]=La*Ma+tl*Sa,xa[3]=Fa*Ma+rl*Sa,xa[4]=ka*Ma-Ra*Sa,xa[5]=el*Ma-Ia*Sa,xa[6]=tl*Ma-La*Sa,xa[7]=rl*Ma-Fa*Sa,xa},rotateZ_1}var scale_1$1,hasRequiredScale$1;function requireScale$1(){return hasRequiredScale$1||(hasRequiredScale$1=1,scale_1$1=(J,la,xa)=>{const Aa=xa[0],ba=xa[1],Sa=xa[2];return J[0]=la[0]*Aa,J[1]=la[1]*Aa,J[2]=la[2]*Aa,J[3]=la[3]*Aa,J[4]=la[4]*ba,J[5]=la[5]*ba,J[6]=la[6]*ba,J[7]=la[7]*ba,J[8]=la[8]*Sa,J[9]=la[9]*Sa,J[10]=la[10]*Sa,J[11]=la[11]*Sa,J[12]=la[12],J[13]=la[13],J[14]=la[14],J[15]=la[15],J}),scale_1$1}var subtract_1$1,hasRequiredSubtract$1;function requireSubtract$1(){return hasRequiredSubtract$1||(hasRequiredSubtract$1=1,subtract_1$1=(J,la,xa)=>(J[0]=la[0]-xa[0],J[1]=la[1]-xa[1],J[2]=la[2]-xa[2],J[3]=la[3]-xa[3],J[4]=la[4]-xa[4],J[5]=la[5]-xa[5],J[6]=la[6]-xa[6],J[7]=la[7]-xa[7],J[8]=la[8]-xa[8],J[9]=la[9]-xa[9],J[10]=la[10]-xa[10],J[11]=la[11]-xa[11],J[12]=la[12]-xa[12],J[13]=la[13]-xa[13],J[14]=la[14]-xa[14],J[15]=la[15]-xa[15],J)),subtract_1$1}var toString_1$8,hasRequiredToString$8;function requireToString$8(){return hasRequiredToString$8||(hasRequiredToString$8=1,toString_1$8=J=>J.map(la=>la.toFixed(7)).toString()),toString_1$8}var translate_1$1,hasRequiredTranslate$1;function requireTranslate$1(){return hasRequiredTranslate$1||(hasRequiredTranslate$1=1,translate_1$1=(J,la,xa)=>{const Aa=xa[0],ba=xa[1],Sa=xa[2];let Ma,Ra,Ia,La,Fa,ka,el,tl,rl,il,nl,sl;return la===J?(J[12]=la[0]*Aa+la[4]*ba+la[8]*Sa+la[12],J[13]=la[1]*Aa+la[5]*ba+la[9]*Sa+la[13],J[14]=la[2]*Aa+la[6]*ba+la[10]*Sa+la[14],J[15]=la[3]*Aa+la[7]*ba+la[11]*Sa+la[15]):(Ma=la[0],Ra=la[1],Ia=la[2],La=la[3],Fa=la[4],ka=la[5],el=la[6],tl=la[7],rl=la[8],il=la[9],nl=la[10],sl=la[11],J[0]=Ma,J[1]=Ra,J[2]=Ia,J[3]=La,J[4]=Fa,J[5]=ka,J[6]=el,J[7]=tl,J[8]=rl,J[9]=il,J[10]=nl,J[11]=sl,J[12]=Ma*Aa+Fa*ba+rl*Sa+la[12],J[13]=Ra*Aa+ka*ba+il*Sa+la[13],J[14]=Ia*Aa+el*ba+nl*Sa+la[14],J[15]=La*Aa+tl*ba+sl*Sa+la[15]),J}),translate_1$1}var mat4,hasRequiredMat4;function requireMat4(){return hasRequiredMat4||(hasRequiredMat4=1,mat4={add:requireAdd(),clone:requireClone$7(),copy:requireCopy$3(),create:requireCreate$a(),invert:requireInvert$2(),equals:requireEquals$5(),fromRotation:requireFromRotation(),fromScaling:requireFromScaling(),fromTaitBryanRotation:requireFromTaitBryanRotation(),fromTranslation:requireFromTranslation(),fromValues:requireFromValues$2(),fromVectorRotation:requireFromVectorRotation(),fromXRotation:requireFromXRotation(),fromYRotation:requireFromYRotation(),fromZRotation:requireFromZRotation(),identity:requireIdentity(),isIdentity:requireIsIdentity(),isOnlyTransformScale:requireIsOnlyTransformScale(),isMirroring:requireIsMirroring(),mirrorByPlane:requireMirrorByPlane(),multiply:requireMultiply(),rotate:requireRotate$1(),rotateX:requireRotateX(),rotateY:requireRotateY(),rotateZ:requireRotateZ(),scale:requireScale$1(),subtract:requireSubtract$1(),toString:requireToString$8(),translate:requireTranslate$1()}),mat4}var create_1$9,hasRequiredCreate$9;function requireCreate$9(){if(hasRequiredCreate$9)return create_1$9;hasRequiredCreate$9=1;const ua=requireMat4();return create_1$9=la=>(la===void 0&&(la=[]),{sides:la,transforms:ua.create()}),create_1$9}var fromPoints_1$7,hasRequiredFromPoints$7;function requireFromPoints$7(){if(hasRequiredFromPoints$7)return fromPoints_1$7;hasRequiredFromPoints$7=1;const ua=requireVec2(),J=requireCreate$9();return fromPoints_1$7=xa=>{if(!Array.isArray(xa))throw new Error("the given points must be an array");let Aa=xa.length;if(Aa<3)throw new Error("the given points must define a closed geometry with three or more points");ua.equals(xa[0],xa[Aa-1])&&--Aa;const ba=[];let Sa=xa[Aa-1];for(let Ma=0;Ma<Aa;Ma++){const Ra=xa[Ma];ba.push([ua.clone(Sa),ua.clone(Ra)]),Sa=Ra}return J(ba)},fromPoints_1$7}var fromCompactBinary_1$2,hasRequiredFromCompactBinary$2;function requireFromCompactBinary$2(){if(hasRequiredFromCompactBinary$2)return fromCompactBinary_1$2;hasRequiredFromCompactBinary$2=1;const ua=requireMat4(),J=requireVec2(),la=requireCreate$9();return fromCompactBinary_1$2=Aa=>{if(Aa[0]!==0)throw new Error("invalid compact binary data");const ba=la();ba.transforms=ua.clone(Aa.slice(1,17));for(let Sa=21;Sa<Aa.length;Sa+=4){const Ma=J.fromValues(Aa[Sa+0],Aa[Sa+1]),Ra=J.fromValues(Aa[Sa+2],Aa[Sa+3]);ba.sides.push([Ma,Ra])}return Aa[17]>=0&&(ba.color=[Aa[17],Aa[18],Aa[19],Aa[20]]),ba},fromCompactBinary_1$2}var isA_1$4,hasRequiredIsA$4;function requireIsA$4(){return hasRequiredIsA$4||(hasRequiredIsA$4=1,isA_1$4=J=>!!(J&&typeof J=="object"&&"sides"in J&&"transforms"in J&&Array.isArray(J.sides)&&"length"in J.transforms)),isA_1$4}var applyTransforms_1$2,hasRequiredApplyTransforms$2;function requireApplyTransforms$2(){if(hasRequiredApplyTransforms$2)return applyTransforms_1$2;hasRequiredApplyTransforms$2=1;const ua=requireMat4(),J=requireVec2();return applyTransforms_1$2=xa=>(ua.isIdentity(xa.transforms)||(xa.sides=xa.sides.map(Aa=>{const ba=J.transform(J.create(),Aa[0],xa.transforms),Sa=J.transform(J.create(),Aa[1],xa.transforms);return[ba,Sa]}),xa.transforms=ua.create()),xa),applyTransforms_1$2}var toSides_1,hasRequiredToSides;function requireToSides(){if(hasRequiredToSides)return toSides_1;hasRequiredToSides=1;const ua=requireApplyTransforms$2();return toSides_1=la=>ua(la).sides,toSides_1}var reverse_1$4,hasRequiredReverse$4;function requireReverse$4(){if(hasRequiredReverse$4)return reverse_1$4;hasRequiredReverse$4=1;const ua=requireCreate$9(),J=requireToSides();return reverse_1$4=xa=>{const ba=J(xa).map(Sa=>[Sa[1],Sa[0]]);return ba.reverse(),ua(ba)},reverse_1$4}var toOutlines_1,hasRequiredToOutlines;function requireToOutlines(){if(hasRequiredToOutlines)return toOutlines_1;hasRequiredToOutlines=1;const ua=requireVec2(),J=requireToSides(),la=Sa=>{const Ma=new Map,Ra=Ia=>{const La=Ia.toString();return Ma.has(La)?Ma.get(La):(Ma.set(La,Ia),Ia)};return Sa.map(Ia=>Ia.map(Ra))},xa=Sa=>{const Ma=new Map;return la(Sa).forEach(Ia=>{Ma.has(Ia[0])?Ma.get(Ia[0]).push(Ia):Ma.set(Ia[0],[Ia])}),Ma},Aa=Sa=>{const Ma=xa(J(Sa)),Ra=[];for(;;){let Ia;for(const[ka,el]of Ma){if(Ia=el.shift(),!Ia){Ma.delete(ka);continue}break}if(Ia===void 0)break;const La=[],Fa=Ia[0];for(;;){La.push(Ia[0]);const ka=Ia[1];if(ka===Fa)break;const el=Ma.get(ka);if(!el)throw new Error(`geometry is not closed at vertex ${ka}`);const tl=ba(Ia,el);el.length===0&&Ma.delete(ka),Ia=tl}La.length>0&&La.push(La.shift()),Ra.push(La)}return Ma.clear(),Ra},ba=(Sa,Ma)=>{if(Ma.length===1)return Ma.pop();const Ra=ua.create(),Ia=ua.angleDegrees(ua.subtract(Ra,Sa[1],Sa[0]));let La,Fa;Ma.forEach((el,tl)=>{let il=ua.angleDegrees(ua.subtract(Ra,el[1],el[0]))-Ia;il<-180&&(il+=360),il>=180&&(il-=360),(Fa===void 0||il>La)&&(Fa=tl,La=il)});const ka=Ma[Fa];return Ma.splice(Fa,1),ka};return toOutlines_1=Aa,toOutlines_1}var toPoints_1$3,hasRequiredToPoints$3;function requireToPoints$3(){if(hasRequiredToPoints$3)return toPoints_1$3;hasRequiredToPoints$3=1;const ua=requireToSides();return toPoints_1$3=la=>{const Aa=ua(la).map(ba=>ba[0]);return Aa.length>0&&Aa.push(Aa.shift()),Aa},toPoints_1$3}var toString_1$7,hasRequiredToString$7;function requireToString$7(){if(hasRequiredToString$7)return toString_1$7;hasRequiredToString$7=1;const ua=requireVec2(),J=requireToSides();return toString_1$7=xa=>{const Aa=J(xa);let ba="geom2 ("+Aa.length+` sides):
7543
7543
  [
@@ -22434,7 +22434,7 @@ void main() {
22434
22434
  * Copyright 2010-2024 Three.js Authors
22435
22435
  * SPDX-License-Identifier: MIT
22436
22436
  *)
22437
- */const dist$2=Object.freeze(Object.defineProperty({__proto__:null,A0402,A0603,A0805,BGA,ChipBody,ExtrudedPads,FootprintPad,FootprintPlatedHole,Footprinter3d,PinRow,QFN,QFP,SOD123,SOT233P,SOT563,SOT723,SmdChipLead,Tssop},Symbol.toStringTag,{value:"Module"})),require$$19=getAugmentedNamespace(dist$2);var dist$1,hasRequiredDist$1;function requireDist$1(){if(hasRequiredDist$1)return dist$1;hasRequiredDist$1=1;var ua=Object.create,J=Object.defineProperty,la=Object.getOwnPropertyDescriptor,xa=Object.getOwnPropertyNames,Aa=Object.getPrototypeOf,ba=Object.prototype.hasOwnProperty,Sa=(Rc,Gc)=>{for(var Iu in Gc)J(Rc,Iu,{get:Gc[Iu],enumerable:!0})},Ma=(Rc,Gc,Iu,Xu)=>{if(Gc&&typeof Gc=="object"||typeof Gc=="function")for(let _0 of xa(Gc))!ba.call(Rc,_0)&&_0!==Iu&&J(Rc,_0,{get:()=>Gc[_0],enumerable:!(Xu=la(Gc,_0))||Xu.enumerable});return Rc},Ra=(Rc,Gc,Iu)=>(Iu=Rc!=null?ua(Aa(Rc)):{},Ma(!Rc||!Rc.__esModule?J(Iu,"default",{value:Rc,enumerable:!0}):Iu,Rc)),Ia=Rc=>Ma(J({},"__esModule",{value:!0}),Rc),La={};Sa(La,{CadViewer:()=>qh,useExportGltfUrl:()=>tl,useSaveGltfAs:()=>el}),dist$1=Ia(La);var Fa=requireThreeStdlib(),ka=requireReact();function el(Rc={}){const Gc=rl(Rc),Iu=(0,ka.useMemo)(()=>document.createElement("a"),[]),Xu=async G0=>{const wd=G0??Rc.filename??"";Rc.binary==null&&(Rc.binary=wd.endsWith(".glb"));const _d=await Gc(_0);Iu.download=wd,Iu.href=_d,Iu.dispatchEvent(new MouseEvent("click")),URL.revokeObjectURL(_d)};(0,ka.useEffect)(()=>()=>{Iu.remove(),_0=null},[]);let _0;return[(0,ka.useCallback)(G0=>{_0=G0},[]),Xu]}function tl(Rc={}){const Gc=rl(Rc),[Iu,Xu]=(0,ka.useState)(),[_0,B0]=(0,ka.useState)(),G0=(0,ka.useCallback)(wd=>Gc(wd).then(Xu).catch(B0),[]);return(0,ka.useEffect)(()=>()=>URL.revokeObjectURL(Iu),[Iu]),[G0,Iu,_0]}function rl(Rc={}){const Gc=(0,ka.useMemo)(()=>new Fa.GLTFExporter,[]);return Iu=>{const{promise:Xu,resolve:_0,reject:B0}=Promise.withResolvers();return Gc.parse(Iu,G0=>{const wd=Rc.binary?"gltf-binary":"gltf+json",_d=new Blob([G0 instanceof ArrayBuffer?G0:JSON.stringify(G0)],{type:`model/${wd}`});_0(URL.createObjectURL(_d))},B0,Rc),Xu}}var il=require$$2,nl=requireReact(),sl=(Rc,Gc)=>(0,nl.useMemo)(()=>{if(!Rc)return;const Iu=new il.Circuit;return Iu.add(Rc),Iu.render(),Iu.getCircuitJson()},[Rc]),ll=requireDist$5(),dl=requireReact(),gl=requireDist$5(),_l=requireTransforms(),vl=requirePrimitives(),Cl=requireColors(),Ll=requireBooleans(),Il=requirePrimitives(),Fl=requireColors(),Ol=requireBooleans(),ql=.01,rc={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255]},sc=(Rc,Gc)=>{if(Rc.shape||(Rc.shape="circle"),Rc.shape==="circle")return(0,Fl.colorize)(rc.copper,(0,Ol.subtract)((0,Ol.union)((0,Il.cylinder)({center:[Rc.x,Rc.y,0],radius:Rc.hole_diameter/2,height:1.2}),(0,Il.cylinder)({center:[Rc.x,Rc.y,1.2/2],radius:Rc.outer_diameter/2,height:ql}),(0,Il.cylinder)({center:[Rc.x,Rc.y,-1.2/2],radius:Rc.outer_diameter/2,height:ql})),(0,Il.cylinder)({center:[Rc.x,Rc.y,0],radius:Rc.hole_diameter/2-ql,height:1.5})));if(Rc.shape==="pill"){const Iu=Rc.hole_height>Rc.hole_width,Xu=Iu?Rc.hole_height:Rc.hole_width,_0=Iu?Rc.hole_width:Rc.hole_height,B0=Iu?Rc.outer_width||Xu+.2:Rc.outer_height||_0+.2,G0=_0/2,wd=Math.abs(Xu-_0),_d=(0,Il.cuboid)({center:Iu?[Rc.x,Rc.y,0]:[Rc.x,Rc.y,0],size:Iu?[_0,wd,1.2]:[wd,_0,1.2]}),Cd=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,0]:[Rc.x-wd/2,Rc.y,0],radius:G0,height:1.2}),Jd=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,0]:[Rc.x+wd/2,Rc.y,0],radius:G0,height:1.2}),pf=(0,Il.cuboid)({center:Iu?[Rc.x,Rc.y,1.2/2]:[Rc.x,Rc.y,1.2/2],size:Iu?[B0,wd,ql]:[wd,B0,ql]}),nd=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,1.2/2]:[Rc.x-wd/2,Rc.y,1.2/2],radius:B0/2,height:ql}),Su=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,1.2/2]:[Rc.x+wd/2,Rc.y,1.2/2],radius:B0/2,height:ql}),Ju=(0,Il.cuboid)({center:Iu?[Rc.x,Rc.y,-1.2/2]:[Rc.x,Rc.y,-1.2/2],size:Iu?[B0,wd,ql]:[wd,B0,ql]}),y0=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,-1.2/2]:[Rc.x-wd/2,Rc.y,-1.2/2],radius:B0/2,height:ql}),j0=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,-1.2/2]:[Rc.x+wd/2,Rc.y,-1.2/2],radius:B0/2,height:ql});return(0,Fl.colorize)(rc.copper,(0,Ol.subtract)((0,Ol.union)(_d,Cd,Jd,pf,nd,Su,Ju,y0,j0),(0,Ol.union)((0,Il.cuboid)({center:[Rc.x,Rc.y,0],size:Iu?[_0-ql,wd,1.5]:[wd,_0-ql,1.5]}),(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,0]:[Rc.x-wd/2,Rc.y,0],radius:G0-ql,height:1.5}),(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,0]:[Rc.x+wd/2,Rc.y,0],radius:G0-ql,height:1.5}))))}else throw new Error(`Unsupported plated hole shape: ${Rc.shape}`)},Kl=requireExtrusions(),Gl=requireExpansions(),kl=requireExtrusions(),Wl=requirePrimitives(),tc=requireTransforms(),Zl=Rc=>{let Gc=0;for(let Xu=0;Xu<Rc.length;Xu++){const _0=(Xu+1)%Rc.length;Gc+=Rc[Xu][0]*Rc[_0][1],Gc-=Rc[_0][0]*Rc[Xu][1]}return Gc/2<=0},ac=(Rc,Gc=1.2)=>{let Iu=Rc.map(B0=>[B0.x,B0.y]);Zl(Iu)&&(Iu=Iu.reverse());const Xu=(0,Wl.polygon)({points:Iu});let _0=(0,kl.extrudeLinear)({height:Gc},Xu);return _0=(0,tc.translate)([0,0,-Gc/2],_0),_0},Cc=requireText();function _c(Rc){var _d,Cd,Jd,pf;const Gc=(0,Cc.vectorText)({height:Rc.font_size,input:Rc.text});Gc.forEach(nd=>{nd.length===29?(Gc.splice(Gc.indexOf(nd),1,nd.slice(0,15)),Gc.splice(Gc.indexOf(nd),0,nd.slice(14,29))):nd.length===17&&(Gc.splice(Gc.indexOf(nd),1,nd.slice(0,10)),Gc.splice(Gc.indexOf(nd),0,nd.slice(9,17)))});const Iu=Gc.flatMap(nd=>nd),Xu={minX:Math.min(...Iu.map(nd=>nd[0])),maxX:Math.max(...Iu.map(nd=>nd[0])),minY:Math.min(...Iu.map(nd=>nd[1])),maxY:Math.max(...Iu.map(nd=>nd[1]))},_0=(Xu.minX+Xu.maxX)/2,B0=(Xu.minY+Xu.maxY)/2;let G0=-_0,wd=-B0;return(_d=Rc.anchor_alignment)!=null&&_d.includes("right")?G0=-Xu.maxX:(Cd=Rc.anchor_alignment)!=null&&Cd.includes("left")&&(G0=-Xu.minX),(Jd=Rc.anchor_alignment)!=null&&Jd.includes("top")?wd=-Xu.maxY:(pf=Rc.anchor_alignment)!=null&&pf.includes("bottom")&&(wd=-Xu.minY),{textOutlines:Gc,xOffset:G0,yOffset:wd}}var Dc=Rc=>{const Gc=(0,gl.su)(Rc).pcb_board.list()[0];if(!Gc)throw new Error("No pcb_board found");const Iu=(0,gl.su)(Rc).pcb_plated_hole.list(),Xu=(0,gl.su)(Rc).pcb_hole.list(),_0=(0,gl.su)(Rc).pcb_smtpad.list(),B0=(0,gl.su)(Rc).pcb_trace.list(),G0=(0,gl.su)(Rc).pcb_via.list(),wd=(0,gl.su)(Rc).pcb_silkscreen_text.list();let _d;Gc.outline&&Gc.outline.length>0?_d=ac(Gc.outline,1.2):_d=(0,vl.cuboid)({size:[Gc.width,Gc.height,1.2]});const Cd=[],Jd=[],pf=[],nd=Ju=>{if(Ju.shape==="circle"){const y0=(0,vl.cylinder)({center:[Ju.x,Ju.y,0],radius:Ju.hole_diameter/2+ql});_d=(0,Ll.subtract)(_d,y0);const j0=sc(Ju);Cd.push(j0)}else if(Ju.shape==="pill"){const y0=Ju.hole_height>Ju.hole_width,j0=y0?Ju.hole_height:Ju.hole_width,hd=y0?Ju.hole_width:Ju.hole_height,qd=hd/2,df=Math.abs(j0-hd),Ad=(0,Ll.union)((0,vl.cuboid)({center:[Ju.x,Ju.y,0],size:y0?[hd,df,1.5]:[df,hd,1.5]}),(0,vl.cylinder)({center:y0?[Ju.x,Ju.y-df/2,0]:[Ju.x-df/2,Ju.y,0],radius:qd,height:1.5}),(0,vl.cylinder)({center:y0?[Ju.x,Ju.y+df/2,0]:[Ju.x+df/2,Ju.y,0],radius:qd,height:1.5}));_d=(0,Ll.subtract)(_d,Ad);const q0=sc(Ju);Cd.push(q0)}};for(const Ju of Iu)nd(Ju);for(const Ju of Xu)if(Ju.hole_shape==="round"||Ju.hole_shape==="circle"){const y0=(0,vl.cylinder)({center:[Ju.x,Ju.y,0],radius:Ju.hole_diameter/2+ql});_d=(0,Ll.subtract)(_d,y0)}for(const Ju of _0){const y0=Ju.layer==="bottom"?-1:1;if(Ju.shape==="rect"){const j0=(0,Cl.colorize)(rc.copper,(0,vl.cuboid)({center:[Ju.x,Ju.y,y0*1.2/2+y0*ql],size:[Ju.width,Ju.height,ql]}));Jd.push(j0)}else if(Ju.shape==="circle"){const j0=(0,Cl.colorize)(rc.copper,(0,vl.cylinder)({center:[Ju.x,Ju.y,y0*1.2/2+y0*ql],radius:Ju.radius,height:ql}));Jd.push(j0)}}for(const{route:Ju}of B0){if(Ju.length<2)continue;const y0=[];let j0=[Ju[0]],hd=Ju[0].route_type==="wire"?Ju[0].layer:"top";for(let qd=1;qd<Ju.length;qd++){const df=Ju[qd];df.route_type==="via"?(y0.push(j0),j0=[df]):df.route_type==="wire"&&df.layer!==hd?(y0.push(j0),hd=df.layer,j0=[df]):j0.push(df)}y0.push(j0);for(const qd of y0){if(qd.length<2)continue;const df=(0,vl.line)(qd.map(Gd=>[Gd.x,Gd.y])),Ad=qd[0].route_type==="via"?qd[0].to_layer==="top"?1:-1:qd[0].layer==="top"?1:-1;let q0=(0,_l.translate)([0,0,Ad*1.2/2],(0,Kl.extrudeLinear)({height:ql*Ad},(0,Gl.expand)({delta:.1,corners:"edge"},df)));const Bd=G0.map(Gd=>(0,vl.cylinder)({center:[Gd.x,Gd.y,0],radius:Gd.outer_diameter/2,height:5})),af=Iu.filter(Gd=>Gd.shape==="circle").map(Gd=>(0,vl.cylinder)({center:[Gd.x,Gd.y,0],radius:Gd.outer_diameter/2,height:5}));q0=(0,Ll.subtract)(q0,...Bd,...af),q0=(0,Cl.colorize)(rc.fr4GreenSolderWithMask,q0),pf.push(q0)}}for(const Ju of G0)nd({x:Ju.x,y:Ju.y,hole_diameter:Ju.hole_diameter,outer_diameter:Ju.outer_diameter,shape:"circle",layers:["top","bottom"],type:"pcb_plated_hole",pcb_plated_hole_id:""});const Su=[];for(const Ju of wd){const{textOutlines:y0,xOffset:j0,yOffset:hd}=_c(Ju);for(let qd of y0){const df=qd.map(bf=>[bf[0]+j0+Ju.anchor_position.x,bf[1]+hd+Ju.anchor_position.y]),Ad=(0,vl.line)(df),q0=Ju.font_size||.25,Bd=Math.min(Math.max(.01,q0*.1),q0*.2),af=(0,Gl.expand)({delta:Bd,corners:"round"},Ad);let Gd=(0,_l.translate)([0,0,.6],(0,Kl.extrudeLinear)({height:.012},af));Gd=(0,Cl.colorize)([256,256,256],Gd),Su.push(Gd)}}return _d=(0,Cl.colorize)(rc.fr4Green,_d),[_d,...Cd,...Jd,...pf,...Su]},Uc=requireReact(),Oc=Ra(requireStlSerializer());function jc(Rc){return new Promise((Gc,Iu)=>{const Xu=new FileReader;Xu.onload=()=>{Gc(Xu.result)},Xu.onerror=Iu,Xu.readAsDataURL(Rc)})}var Bc=Rc=>{const[Gc,Iu]=(0,Uc.useState)([]),[Xu,_0]=(0,Uc.useState)(!0);return(0,Uc.useEffect)(()=>{if(!Rc)return;(async()=>{_0(!0);const wd=(Array.isArray(Rc)?Rc:[Rc]).map(async _d=>{const Cd=Oc.default.serialize({binary:!0},[_d]),Jd=new Blob(Cd);return{stlUrl:await jc(Jd),color:_d.color}});try{const _d=await Promise.all(wd);Iu(_d)}catch(_d){console.error("Error generating STLs:",_d),Iu([])}finally{_0(!1)}})()},[Rc]),{stls:Gc,loading:Xu}},vc=require$$12,Mc=requireReact(),kc=requireThreeStdlib(),Jc=requireJsxRuntime();function fu({stlUrl:Rc,mtlUrl:Gc,color:Iu,opacity:Xu=1}){const _0=(0,vc.useLoader)(kc.STLLoader,Rc),B0=(0,Mc.useRef)();return(0,Jc.jsxs)("mesh",{ref:B0,children:[(0,Jc.jsx)("primitive",{object:_0,attach:"geometry"}),(0,Jc.jsx)("meshStandardMaterial",{color:Iu,transparent:Xu!==1,opacity:Xu})]})}var hu=require$$14,wu=require$$12,pu={name:"@tscircuit/3d-viewer",version:"0.0.109",main:"./dist/index.js",files:["dist"],scripts:{start:"bun run storybook","dev:old":"bunx --bun vite",build:"tsup ./src/index.tsx --dts --sourcemap",prepublish:"npm run build",preview:"vite preview",storybook:"storybook dev -p 6006","build-storybook":"storybook build","vercel-build":"bun run build-storybook",format:"biome format . --write","format:check":"biome format ."},dependencies:{"@jscad/modeling":"^2.12.2","@jscad/regl-renderer":"^2.6.9","@jscad/stl-serializer":"^2.1.17","@react-three/drei":"^9.115.0","@react-three/fiber":"^8.16.8","@tscircuit/core":"^0.0.292","@tscircuit/props":"^0.0.138","@tscircuit/react-fiber":"^1.1.29","@tscircuit/soup":"^0.0.69","@tscircuit/soup-util":"^0.0.26","@types/three":"^0.165.0","jscad-electronics":"^0.0.23","jscad-fiber":"^0.0.76","jscad-planner":"^0.0.11",react:"^18.3.1","react-dom":"^18.3.1","react-use-gesture":"^9.1.3",three:"^0.165.0","three-stdlib":"^2.30.3"},devDependencies:{"@biomejs/biome":"^1.8.3","@chromatic-com/storybook":"^1.5.0","@storybook/addon-essentials":"^8.4.7","@storybook/addon-interactions":"^8.4.7","@storybook/addon-links":"^8.4.7","@storybook/addon-onboarding":"^8.4.7","@storybook/blocks":"^8.4.7","@storybook/builder-vite":"^8.4.7","@storybook/react":"^8.4.7","@storybook/react-vite":"^8.4.7","@storybook/test":"^8.4.7","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.4","circuit-json":"^0.0.116","circuit-to-svg":"^0.0.91",storybook:"^8.4.7","strip-ansi":"^7.1.0",tsup:"^8.1.0",typescript:"^5.7.2",vite:"^5.4.11","vite-tsconfig-paths":"^4.3.2"}},Eu=require$$14,Tu=require$$12,mu=requireReact(),gu=Ra(requireThree()),Gu=requireJsxRuntime();typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new gu.Euler(0,0,0));function Ou(Rc,Gc){const Iu=new gu.Quaternion().setFromEuler(new gu.Euler(Rc.x,Rc.y,Rc.z)),Xu=new gu.Vector3(0,0,1);return Xu.applyQuaternion(Iu),Xu.multiplyScalar(Gc)}var x0=({})=>{const Rc=(0,mu.useRef)();return(0,mu.useRef)({lastRotation:new gu.Euler}),(0,Tu.useFrame)((Gc,Iu)=>{if(!Rc.current)return;const Xu=window.TSCI_MAIN_CAMERA_ROTATION,_0=Ou(Xu,2);Gc.camera.position.copy(_0),Gc.camera.lookAt(0,0,0)}),(0,Gu.jsxs)("mesh",{ref:Rc,rotation:[Math.PI/2,0,0],children:[(0,Gu.jsx)("boxGeometry",{args:[1,1,1]}),(0,Gu.jsx)("meshStandardMaterial",{color:"white"}),(0,Gu.jsx)(Eu.Text,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),(0,Gu.jsx)(Eu.Text,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),(0,Gu.jsx)(Eu.Text,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),(0,Gu.jsx)(Eu.Text,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),(0,Gu.jsx)(Eu.Text,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),(0,Gu.jsx)(Eu.Text,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),(0,Gu.jsx)("lineSegments",{args:[new gu.EdgesGeometry(new gu.BoxGeometry(1,1,1))],material:new gu.LineBasicMaterial({color:0,linewidth:2})})]})},I0=requireReact(),k0=require$$14,ku=requireJsxRuntime(),Du=()=>((0,wu.useFrame)(({camera:Rc})=>{window.TSCI_MAIN_CAMERA_ROTATION=Rc.rotation}),(0,ku.jsx)(ku.Fragment,{})),f0=(0,I0.forwardRef)(({children:Rc,hoveredComponent:Gc},Iu)=>(0,ku.jsxs)("div",{style:{position:"relative",width:"100%",height:"100%"},children:[(0,ku.jsx)("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:(0,ku.jsxs)(wu.Canvas,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[(0,ku.jsx)("ambientLight",{intensity:Math.PI/2}),(0,ku.jsx)(x0,{})]})}),(0,ku.jsxs)(wu.Canvas,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:[5,5,5]},children:[(0,ku.jsx)(Du,{}),(0,ku.jsx)(hu.OrbitControls,{autoRotate:!0,autoRotateSpeed:1}),(0,ku.jsx)("ambientLight",{intensity:Math.PI/2}),(0,ku.jsx)("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),(0,ku.jsx)(hu.Grid,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:10}),(0,ku.jsx)("object3D",{ref:Iu,children:Rc}),Gc&&(0,ku.jsx)(k0.Html,{position:Gc.mousePosition,style:{fontFamily:"sans-serif",transform:"translate3d(50%, 50%, 0)",backgroundColor:"white",padding:"5px",borderRadius:"3px",pointerEvents:"none",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none"},children:Gc.name})]}),(0,ku.jsxs)("div",{style:{position:"absolute",right:24,bottom:24,fontFamily:"sans-serif",color:"white",WebkitTextStroke:"0.5px rgba(0, 0, 0, 0.5)",fontSize:11},children:["@",pu.version]})]})),Ru=requireReact(),Wc=Ra(requireThree()),bu=requireJsxRuntime(),Mu=Rc=>(0,bu.jsx)("group",{...Rc}),vu=({children:Rc,isHovered:Gc,onHover:Iu,position:Xu})=>{const _0=(0,Ru.useRef)(null),B0=(0,Ru.useCallback)(wd=>{wd.stopPropagation();try{const _d=wd.point||(wd.intersections&&wd.intersections.length>0?wd.intersections[0].point:null)||(Xu?new Wc.Vector3(...Xu):null);_d?(_0.current=_d,Iu({mousePosition:[_d.x,_d.y,_d.z]})):Iu({})}catch(_d){console.warn("Hover event error:",_d),Iu({})}},[Xu]),G0=(0,Ru.useCallback)(wd=>{wd.stopPropagation(),_0.current=null,Iu(null)},[Iu]);return(0,bu.jsx)(Mu,{onPointerEnter:B0,onPointerMove:B0,onPointerLeave:G0,children:Rc})},n0=vu,Yu=requireReact(),u0=requireThreeStdlib();typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function ou(Rc){const[Gc,Iu]=(0,Yu.useState)(null);return(0,Yu.useEffect)(()=>{if(!Rc)return;const Xu=window.TSCIRCUIT_OBJ_LOADER_CACHE;let _0=!1;async function B0(){var wd;try{const Cd=await(await fetch(Rc)).text(),Jd=(wd=Cd.match(/newmtl[\s\S]*?endmtl/g))==null?void 0:wd.join(`
22437
+ */const dist$2=Object.freeze(Object.defineProperty({__proto__:null,A0402,A0603,A0805,BGA,ChipBody,ExtrudedPads,FootprintPad,FootprintPlatedHole,Footprinter3d,PinRow,QFN,QFP,SOD123,SOT233P,SOT563,SOT723,SmdChipLead,Tssop},Symbol.toStringTag,{value:"Module"})),require$$19=getAugmentedNamespace(dist$2);var dist$1,hasRequiredDist$1;function requireDist$1(){if(hasRequiredDist$1)return dist$1;hasRequiredDist$1=1;var ua=Object.create,J=Object.defineProperty,la=Object.getOwnPropertyDescriptor,xa=Object.getOwnPropertyNames,Aa=Object.getPrototypeOf,ba=Object.prototype.hasOwnProperty,Sa=(Rc,Gc)=>{for(var Iu in Gc)J(Rc,Iu,{get:Gc[Iu],enumerable:!0})},Ma=(Rc,Gc,Iu,Xu)=>{if(Gc&&typeof Gc=="object"||typeof Gc=="function")for(let _0 of xa(Gc))!ba.call(Rc,_0)&&_0!==Iu&&J(Rc,_0,{get:()=>Gc[_0],enumerable:!(Xu=la(Gc,_0))||Xu.enumerable});return Rc},Ra=(Rc,Gc,Iu)=>(Iu=Rc!=null?ua(Aa(Rc)):{},Ma(!Rc||!Rc.__esModule?J(Iu,"default",{value:Rc,enumerable:!0}):Iu,Rc)),Ia=Rc=>Ma(J({},"__esModule",{value:!0}),Rc),La={};Sa(La,{CadViewer:()=>qh,useExportGltfUrl:()=>tl,useSaveGltfAs:()=>el}),dist$1=Ia(La);var Fa=requireThreeStdlib(),ka=requireReact();function el(Rc={}){const Gc=rl(Rc),Iu=(0,ka.useMemo)(()=>document.createElement("a"),[]),Xu=async G0=>{const wd=G0??Rc.filename??"";Rc.binary==null&&(Rc.binary=wd.endsWith(".glb"));const _d=await Gc(_0);Iu.download=wd,Iu.href=_d,Iu.dispatchEvent(new MouseEvent("click")),URL.revokeObjectURL(_d)};(0,ka.useEffect)(()=>()=>{Iu.remove(),_0=null},[]);let _0;return[(0,ka.useCallback)(G0=>{_0=G0},[]),Xu]}function tl(Rc={}){const Gc=rl(Rc),[Iu,Xu]=(0,ka.useState)(),[_0,B0]=(0,ka.useState)(),G0=(0,ka.useCallback)(wd=>Gc(wd).then(Xu).catch(B0),[]);return(0,ka.useEffect)(()=>()=>URL.revokeObjectURL(Iu),[Iu]),[G0,Iu,_0]}function rl(Rc={}){const Gc=(0,ka.useMemo)(()=>new Fa.GLTFExporter,[]);return Iu=>{const{promise:Xu,resolve:_0,reject:B0}=Promise.withResolvers();return Gc.parse(Iu,G0=>{const wd=Rc.binary?"gltf-binary":"gltf+json",_d=new Blob([G0 instanceof ArrayBuffer?G0:JSON.stringify(G0)],{type:`model/${wd}`});_0(URL.createObjectURL(_d))},B0,Rc),Xu}}var il=require$$2,nl=requireReact(),sl=(Rc,Gc)=>(0,nl.useMemo)(()=>{if(!Rc)return;const Iu=new il.Circuit;return Iu.add(Rc),Iu.render(),Iu.getCircuitJson()},[Rc]),ll=requireDist$5(),dl=requireReact(),gl=requireDist$5(),_l=requireTransforms(),vl=requirePrimitives(),Cl=requireColors(),Ll=requireBooleans(),Il=requirePrimitives(),Fl=requireColors(),Ol=requireBooleans(),ql=.01,rc={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255]},sc=(Rc,Gc)=>{if(Rc.shape||(Rc.shape="circle"),Rc.shape==="circle")return(0,Fl.colorize)(rc.copper,(0,Ol.subtract)((0,Ol.union)((0,Il.cylinder)({center:[Rc.x,Rc.y,0],radius:Rc.hole_diameter/2,height:1.2}),(0,Il.cylinder)({center:[Rc.x,Rc.y,1.2/2],radius:Rc.outer_diameter/2,height:ql}),(0,Il.cylinder)({center:[Rc.x,Rc.y,-1.2/2],radius:Rc.outer_diameter/2,height:ql})),(0,Il.cylinder)({center:[Rc.x,Rc.y,0],radius:Rc.hole_diameter/2-ql,height:1.5})));if(Rc.shape==="pill"){const Iu=Rc.hole_height>Rc.hole_width,Xu=Iu?Rc.hole_height:Rc.hole_width,_0=Iu?Rc.hole_width:Rc.hole_height,B0=Iu?Rc.outer_width||Xu+.2:Rc.outer_height||_0+.2,G0=_0/2,wd=Math.abs(Xu-_0),_d=(0,Il.cuboid)({center:Iu?[Rc.x,Rc.y,0]:[Rc.x,Rc.y,0],size:Iu?[_0,wd,1.2]:[wd,_0,1.2]}),Cd=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,0]:[Rc.x-wd/2,Rc.y,0],radius:G0,height:1.2}),Jd=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,0]:[Rc.x+wd/2,Rc.y,0],radius:G0,height:1.2}),pf=(0,Il.cuboid)({center:Iu?[Rc.x,Rc.y,1.2/2]:[Rc.x,Rc.y,1.2/2],size:Iu?[B0,wd,ql]:[wd,B0,ql]}),nd=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,1.2/2]:[Rc.x-wd/2,Rc.y,1.2/2],radius:B0/2,height:ql}),Su=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,1.2/2]:[Rc.x+wd/2,Rc.y,1.2/2],radius:B0/2,height:ql}),Ju=(0,Il.cuboid)({center:Iu?[Rc.x,Rc.y,-1.2/2]:[Rc.x,Rc.y,-1.2/2],size:Iu?[B0,wd,ql]:[wd,B0,ql]}),y0=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,-1.2/2]:[Rc.x-wd/2,Rc.y,-1.2/2],radius:B0/2,height:ql}),j0=(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,-1.2/2]:[Rc.x+wd/2,Rc.y,-1.2/2],radius:B0/2,height:ql});return(0,Fl.colorize)(rc.copper,(0,Ol.subtract)((0,Ol.union)(_d,Cd,Jd,pf,nd,Su,Ju,y0,j0),(0,Ol.union)((0,Il.cuboid)({center:[Rc.x,Rc.y,0],size:Iu?[_0-ql,wd,1.5]:[wd,_0-ql,1.5]}),(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y-wd/2,0]:[Rc.x-wd/2,Rc.y,0],radius:G0-ql,height:1.5}),(0,Il.cylinder)({center:Iu?[Rc.x,Rc.y+wd/2,0]:[Rc.x+wd/2,Rc.y,0],radius:G0-ql,height:1.5}))))}else throw new Error(`Unsupported plated hole shape: ${Rc.shape}`)},Kl=requireExtrusions(),Gl=requireExpansions(),kl=requireExtrusions(),Wl=requirePrimitives(),tc=requireTransforms(),Zl=Rc=>{let Gc=0;for(let Xu=0;Xu<Rc.length;Xu++){const _0=(Xu+1)%Rc.length;Gc+=Rc[Xu][0]*Rc[_0][1],Gc-=Rc[_0][0]*Rc[Xu][1]}return Gc/2<=0},ac=(Rc,Gc=1.2)=>{let Iu=Rc.map(B0=>[B0.x,B0.y]);Zl(Iu)&&(Iu=Iu.reverse());const Xu=(0,Wl.polygon)({points:Iu});let _0=(0,kl.extrudeLinear)({height:Gc},Xu);return _0=(0,tc.translate)([0,0,-Gc/2],_0),_0},Cc=requireText();function _c(Rc){var _d,Cd,Jd,pf;const Gc=(0,Cc.vectorText)({height:Rc.font_size,input:Rc.text});Gc.forEach(nd=>{nd.length===29?(Gc.splice(Gc.indexOf(nd),1,nd.slice(0,15)),Gc.splice(Gc.indexOf(nd),0,nd.slice(14,29))):nd.length===17&&(Gc.splice(Gc.indexOf(nd),1,nd.slice(0,10)),Gc.splice(Gc.indexOf(nd),0,nd.slice(9,17)))});const Iu=Gc.flatMap(nd=>nd),Xu={minX:Math.min(...Iu.map(nd=>nd[0])),maxX:Math.max(...Iu.map(nd=>nd[0])),minY:Math.min(...Iu.map(nd=>nd[1])),maxY:Math.max(...Iu.map(nd=>nd[1]))},_0=(Xu.minX+Xu.maxX)/2,B0=(Xu.minY+Xu.maxY)/2;let G0=-_0,wd=-B0;return(_d=Rc.anchor_alignment)!=null&&_d.includes("right")?G0=-Xu.maxX:(Cd=Rc.anchor_alignment)!=null&&Cd.includes("left")&&(G0=-Xu.minX),(Jd=Rc.anchor_alignment)!=null&&Jd.includes("top")?wd=-Xu.maxY:(pf=Rc.anchor_alignment)!=null&&pf.includes("bottom")&&(wd=-Xu.minY),{textOutlines:Gc,xOffset:G0,yOffset:wd}}var Dc=Rc=>{const Gc=(0,gl.su)(Rc).pcb_board.list()[0];if(!Gc)throw new Error("No pcb_board found");const Iu=(0,gl.su)(Rc).pcb_plated_hole.list(),Xu=(0,gl.su)(Rc).pcb_hole.list(),_0=(0,gl.su)(Rc).pcb_smtpad.list(),B0=(0,gl.su)(Rc).pcb_trace.list(),G0=(0,gl.su)(Rc).pcb_via.list(),wd=(0,gl.su)(Rc).pcb_silkscreen_text.list();let _d;Gc.outline&&Gc.outline.length>0?_d=ac(Gc.outline,1.2):_d=(0,vl.cuboid)({size:[Gc.width,Gc.height,1.2]});const Cd=[],Jd=[],pf=[],nd=Ju=>{if(Ju.shape==="circle"){const y0=(0,vl.cylinder)({center:[Ju.x,Ju.y,0],radius:Ju.hole_diameter/2+ql});_d=(0,Ll.subtract)(_d,y0);const j0=sc(Ju);Cd.push(j0)}else if(Ju.shape==="pill"){const y0=Ju.hole_height>Ju.hole_width,j0=y0?Ju.hole_height:Ju.hole_width,hd=y0?Ju.hole_width:Ju.hole_height,qd=hd/2,df=Math.abs(j0-hd),Ad=(0,Ll.union)((0,vl.cuboid)({center:[Ju.x,Ju.y,0],size:y0?[hd,df,1.5]:[df,hd,1.5]}),(0,vl.cylinder)({center:y0?[Ju.x,Ju.y-df/2,0]:[Ju.x-df/2,Ju.y,0],radius:qd,height:1.5}),(0,vl.cylinder)({center:y0?[Ju.x,Ju.y+df/2,0]:[Ju.x+df/2,Ju.y,0],radius:qd,height:1.5}));_d=(0,Ll.subtract)(_d,Ad);const q0=sc(Ju);Cd.push(q0)}};for(const Ju of Iu)nd(Ju);for(const Ju of Xu)if(Ju.hole_shape==="round"||Ju.hole_shape==="circle"){const y0=(0,vl.cylinder)({center:[Ju.x,Ju.y,0],radius:Ju.hole_diameter/2+ql});_d=(0,Ll.subtract)(_d,y0)}for(const Ju of _0){const y0=Ju.layer==="bottom"?-1:1;if(Ju.shape==="rect"){const j0=(0,Cl.colorize)(rc.copper,(0,vl.cuboid)({center:[Ju.x,Ju.y,y0*1.2/2+y0*ql],size:[Ju.width,Ju.height,ql]}));Jd.push(j0)}else if(Ju.shape==="circle"){const j0=(0,Cl.colorize)(rc.copper,(0,vl.cylinder)({center:[Ju.x,Ju.y,y0*1.2/2+y0*ql],radius:Ju.radius,height:ql}));Jd.push(j0)}}for(const{route:Ju}of B0){if(Ju.length<2)continue;const y0=[];let j0=[Ju[0]],hd=Ju[0].route_type==="wire"?Ju[0].layer:"top";for(let qd=1;qd<Ju.length;qd++){const df=Ju[qd];df.route_type==="via"?(y0.push(j0),j0=[df]):df.route_type==="wire"&&df.layer!==hd?(y0.push(j0),hd=df.layer,j0=[df]):j0.push(df)}y0.push(j0);for(const qd of y0){if(qd.length<2)continue;const df=(0,vl.line)(qd.map(Gd=>[Gd.x,Gd.y])),Ad=qd[0].route_type==="via"?qd[0].to_layer==="top"?1:-1:qd[0].layer==="top"?1:-1;let q0=(0,_l.translate)([0,0,Ad*1.2/2],(0,Kl.extrudeLinear)({height:ql*Ad},(0,Gl.expand)({delta:.1,corners:"edge"},df)));const Bd=G0.map(Gd=>(0,vl.cylinder)({center:[Gd.x,Gd.y,0],radius:Gd.outer_diameter/2,height:5})),af=Iu.filter(Gd=>Gd.shape==="circle").map(Gd=>(0,vl.cylinder)({center:[Gd.x,Gd.y,0],radius:Gd.outer_diameter/2,height:5}));q0=(0,Ll.subtract)(q0,...Bd,...af),q0=(0,Cl.colorize)(rc.fr4GreenSolderWithMask,q0),pf.push(q0)}}for(const Ju of G0)nd({x:Ju.x,y:Ju.y,hole_diameter:Ju.hole_diameter,outer_diameter:Ju.outer_diameter,shape:"circle",layers:["top","bottom"],type:"pcb_plated_hole",pcb_plated_hole_id:""});const Su=[];for(const Ju of wd){const{textOutlines:y0,xOffset:j0,yOffset:hd}=_c(Ju);for(let qd of y0){const df=qd.map(bf=>[bf[0]+j0+Ju.anchor_position.x,bf[1]+hd+Ju.anchor_position.y]),Ad=(0,vl.line)(df),q0=Ju.font_size||.25,Bd=Math.min(Math.max(.01,q0*.1),q0*.2),af=(0,Gl.expand)({delta:Bd,corners:"round"},Ad);let Gd=(0,_l.translate)([0,0,.6],(0,Kl.extrudeLinear)({height:.012},af));Gd=(0,Cl.colorize)([256,256,256],Gd),Su.push(Gd)}}return _d=(0,Cl.colorize)(rc.fr4Green,_d),[_d,...Cd,...Jd,...pf,...Su]},Uc=requireReact(),Oc=Ra(requireStlSerializer());function jc(Rc){return new Promise((Gc,Iu)=>{const Xu=new FileReader;Xu.onload=()=>{Gc(Xu.result)},Xu.onerror=Iu,Xu.readAsDataURL(Rc)})}var Bc=Rc=>{const[Gc,Iu]=(0,Uc.useState)([]),[Xu,_0]=(0,Uc.useState)(!0);return(0,Uc.useEffect)(()=>{if(!Rc)return;(async()=>{_0(!0);const wd=(Array.isArray(Rc)?Rc:[Rc]).map(async _d=>{const Cd=Oc.default.serialize({binary:!0},[_d]),Jd=new Blob(Cd);return{stlUrl:await jc(Jd),color:_d.color}});try{const _d=await Promise.all(wd);Iu(_d)}catch(_d){console.error("Error generating STLs:",_d),Iu([])}finally{_0(!1)}})()},[Rc]),{stls:Gc,loading:Xu}},vc=require$$12,Mc=requireReact(),kc=requireThreeStdlib(),Jc=requireJsxRuntime();function fu({stlUrl:Rc,mtlUrl:Gc,color:Iu,opacity:Xu=1}){const _0=(0,vc.useLoader)(kc.STLLoader,Rc),B0=(0,Mc.useRef)();return(0,Jc.jsxs)("mesh",{ref:B0,children:[(0,Jc.jsx)("primitive",{object:_0,attach:"geometry"}),(0,Jc.jsx)("meshStandardMaterial",{color:Iu,transparent:Xu!==1,opacity:Xu})]})}var hu=require$$14,wu=require$$12,pu={name:"@tscircuit/3d-viewer",version:"0.0.110",main:"./dist/index.js",files:["dist"],scripts:{start:"bun run storybook","dev:old":"bunx --bun vite",build:"tsup ./src/index.tsx --dts --sourcemap",prepublish:"npm run build",preview:"vite preview",storybook:"storybook dev -p 6006","build-storybook":"storybook build","vercel-build":"bun run build-storybook",format:"biome format . --write","format:check":"biome format ."},dependencies:{"@jscad/modeling":"^2.12.2","@jscad/regl-renderer":"^2.6.9","@jscad/stl-serializer":"^2.1.17","@react-three/drei":"^9.115.0","@react-three/fiber":"^8.16.8","@tscircuit/core":"^0.0.293","@tscircuit/props":"^0.0.138","@tscircuit/react-fiber":"^1.1.29","@tscircuit/soup":"^0.0.69","@tscircuit/soup-util":"^0.0.26","@types/three":"^0.165.0","jscad-electronics":"^0.0.23","jscad-fiber":"^0.0.76","jscad-planner":"^0.0.11",react:"^18.3.1","react-dom":"^18.3.1","react-use-gesture":"^9.1.3",three:"^0.165.0","three-stdlib":"^2.30.3"},devDependencies:{"@biomejs/biome":"^1.8.3","@chromatic-com/storybook":"^1.5.0","@storybook/addon-essentials":"^8.4.7","@storybook/addon-interactions":"^8.4.7","@storybook/addon-links":"^8.4.7","@storybook/addon-onboarding":"^8.4.7","@storybook/blocks":"^8.4.7","@storybook/builder-vite":"^8.4.7","@storybook/react":"^8.4.7","@storybook/react-vite":"^8.4.7","@storybook/test":"^8.4.7","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.4","circuit-json":"^0.0.116","circuit-to-svg":"^0.0.91",storybook:"^8.4.7","strip-ansi":"^7.1.0",tsup:"^8.1.0",typescript:"^5.7.2",vite:"^5.4.11","vite-tsconfig-paths":"^4.3.2"}},Eu=require$$14,Tu=require$$12,mu=requireReact(),gu=Ra(requireThree()),Gu=requireJsxRuntime();typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new gu.Euler(0,0,0));function Ou(Rc,Gc){const Iu=new gu.Quaternion().setFromEuler(new gu.Euler(Rc.x,Rc.y,Rc.z)),Xu=new gu.Vector3(0,0,1);return Xu.applyQuaternion(Iu),Xu.multiplyScalar(Gc)}var x0=({})=>{const Rc=(0,mu.useRef)();return(0,mu.useRef)({lastRotation:new gu.Euler}),(0,Tu.useFrame)((Gc,Iu)=>{if(!Rc.current)return;const Xu=window.TSCI_MAIN_CAMERA_ROTATION,_0=Ou(Xu,2);Gc.camera.position.copy(_0),Gc.camera.lookAt(0,0,0)}),(0,Gu.jsxs)("mesh",{ref:Rc,rotation:[Math.PI/2,0,0],children:[(0,Gu.jsx)("boxGeometry",{args:[1,1,1]}),(0,Gu.jsx)("meshStandardMaterial",{color:"white"}),(0,Gu.jsx)(Eu.Text,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),(0,Gu.jsx)(Eu.Text,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),(0,Gu.jsx)(Eu.Text,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),(0,Gu.jsx)(Eu.Text,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),(0,Gu.jsx)(Eu.Text,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),(0,Gu.jsx)(Eu.Text,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),(0,Gu.jsx)("lineSegments",{args:[new gu.EdgesGeometry(new gu.BoxGeometry(1,1,1))],material:new gu.LineBasicMaterial({color:0,linewidth:2})})]})},I0=requireReact(),k0=require$$14,ku=requireJsxRuntime(),Du=()=>((0,wu.useFrame)(({camera:Rc})=>{window.TSCI_MAIN_CAMERA_ROTATION=Rc.rotation}),(0,ku.jsx)(ku.Fragment,{})),f0=(0,I0.forwardRef)(({children:Rc,hoveredComponent:Gc},Iu)=>(0,ku.jsxs)("div",{style:{position:"relative",width:"100%",height:"100%"},children:[(0,ku.jsx)("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:(0,ku.jsxs)(wu.Canvas,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[(0,ku.jsx)("ambientLight",{intensity:Math.PI/2}),(0,ku.jsx)(x0,{})]})}),(0,ku.jsxs)(wu.Canvas,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:[5,5,5]},children:[(0,ku.jsx)(Du,{}),(0,ku.jsx)(hu.OrbitControls,{autoRotate:!0,autoRotateSpeed:1}),(0,ku.jsx)("ambientLight",{intensity:Math.PI/2}),(0,ku.jsx)("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),(0,ku.jsx)(hu.Grid,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:10}),(0,ku.jsx)("object3D",{ref:Iu,children:Rc}),Gc&&(0,ku.jsx)(k0.Html,{position:Gc.mousePosition,style:{fontFamily:"sans-serif",transform:"translate3d(50%, 50%, 0)",backgroundColor:"white",padding:"5px",borderRadius:"3px",pointerEvents:"none",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none"},children:Gc.name})]}),(0,ku.jsxs)("div",{style:{position:"absolute",right:24,bottom:24,fontFamily:"sans-serif",color:"white",WebkitTextStroke:"0.5px rgba(0, 0, 0, 0.5)",fontSize:11},children:["@",pu.version]})]})),Ru=requireReact(),Wc=Ra(requireThree()),bu=requireJsxRuntime(),Mu=Rc=>(0,bu.jsx)("group",{...Rc}),vu=({children:Rc,isHovered:Gc,onHover:Iu,position:Xu})=>{const _0=(0,Ru.useRef)(null),B0=(0,Ru.useCallback)(wd=>{wd.stopPropagation();try{const _d=wd.point||(wd.intersections&&wd.intersections.length>0?wd.intersections[0].point:null)||(Xu?new Wc.Vector3(...Xu):null);_d?(_0.current=_d,Iu({mousePosition:[_d.x,_d.y,_d.z]})):Iu({})}catch(_d){console.warn("Hover event error:",_d),Iu({})}},[Xu]),G0=(0,Ru.useCallback)(wd=>{wd.stopPropagation(),_0.current=null,Iu(null)},[Iu]);return(0,bu.jsx)(Mu,{onPointerEnter:B0,onPointerMove:B0,onPointerLeave:G0,children:Rc})},n0=vu,Yu=requireReact(),u0=requireThreeStdlib();typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function ou(Rc){const[Gc,Iu]=(0,Yu.useState)(null);return(0,Yu.useEffect)(()=>{if(!Rc)return;const Xu=window.TSCIRCUIT_OBJ_LOADER_CACHE;let _0=!1;async function B0(){var wd;try{const Cd=await(await fetch(Rc)).text(),Jd=(wd=Cd.match(/newmtl[\s\S]*?endmtl/g))==null?void 0:wd.join(`
22438
22438
  `).replace(/d 0\./g,"d 1."),pf=Cd.replace(/newmtl[\s\S]*?endmtl/g,""),nd=new u0.MTLLoader;nd.setMaterialOptions({invertTrProperty:!0});const Su=nd.parse(Jd.replace(/Kd\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/g,"Kd $2 $2 $2"),"test.mtl"),Ju=new u0.OBJLoader;return Ju.setMaterials(Su),Ju.parse(pf)}catch(_d){return _d}}function G0(){if(Xu.has(Rc)){const _d=Xu.get(Rc);return _d.result?Promise.resolve(_d.result.clone()):_d.promise.then(Cd=>Cd.clone())}const wd=B0().then(_d=>(_d instanceof Error||Xu.set(Rc,{...Xu.get(Rc),result:_d}),_d));return Xu.set(Rc,{promise:wd,result:null}),wd}return G0().then(wd=>{_0||Iu(wd)}).catch(wd=>{console.error(wd)}),()=>{_0=!0}},[Rc]),Gc}var t0=requireJsxRuntime();function a0({url:Rc,position:Gc,rotation:Iu,onHover:Xu,isHovered:_0}){const B0=ou(Rc);return B0?B0 instanceof Error?(0,t0.jsx)(n0,{isHovered:_0,onHover:Xu,children:(0,t0.jsxs)("mesh",{position:Gc,children:[(0,t0.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,t0.jsx)("meshStandardMaterial",{transparent:!0,color:"red",opacity:.5}),(0,t0.jsx)("meshBasicMaterial",{color:"red"})]})}):(0,t0.jsx)(n0,{isHovered:_0,onHover:Xu,children:(0,t0.jsx)("primitive",{rotation:Iu,position:Gc,object:B0})}):(0,t0.jsx)(n0,{isHovered:_0,onHover:Xu,children:(0,t0.jsxs)("mesh",{position:Gc,children:[(0,t0.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,t0.jsx)("meshStandardMaterial",{transparent:!0,color:"red",opacity:.25})]})})}var $0=requireDist$4(),yd=Ra(requireSrc$1()),Dd=requireDist$3(),gf=Ra(requireThree()),Rd=requireReact(),Pf=requireJsxRuntime(),Q0=({jscadPlan:Rc,positionOffset:Gc,rotationOffset:Iu,onHover:Xu,isHovered:_0})=>{const{threeGeom:B0,material:G0}=(0,Rd.useMemo)(()=>{const wd=(0,$0.executeJscadOperations)(yd.default,Rc),_d=(0,Dd.convertCSGToThreeGeom)(wd),Cd=new gf.MeshStandardMaterial({vertexColors:!0,side:gf.DoubleSide});return{threeGeom:_d,material:Cd}},[Rc]);return(0,Rd.useMemo)(()=>{if(_0){const wd=new gf.Color(G0.color.getHex());G0.emissive.copy(wd),G0.emissive.setRGB(0,0,1),G0.emissiveIntensity=.2}else G0.emissiveIntensity=0},[_0,G0]),B0?(0,Pf.jsx)(n0,{isHovered:_0,onHover:Xu,position:Gc,children:(0,Pf.jsx)("mesh",{geometry:B0,material:G0,position:Gc,rotation:Iu})}):null},ff=require$$19,Ef=requireDist$3(),Bf=requireDist$4(),zf=requireReact(),Ff=requireJsxRuntime(),{createJSCADRoot:ld}=(0,Ef.createJSCADRenderer)(Bf.jscadPlanner),nf=({positionOffset:Rc,footprint:Gc,rotationOffset:Iu,onHover:Xu,isHovered:_0})=>{const B0=(0,zf.useMemo)(()=>{if(!Gc)return null;const G0=[];return ld(G0).render((0,Ff.jsx)(ff.Footprinter3d,{footprint:Gc})),G0},[Gc]);return B0?(0,Ff.jsx)(Ff.Fragment,{children:B0.map((G0,wd)=>(0,Ff.jsx)(Q0,{positionOffset:Rc,rotationOffset:Iu,jscadPlan:G0,onHover:Xu,isHovered:_0},wd))}):null},lf=(...Rc)=>Rc,uf=requireJsxRuntime(),Mf=({cad_component:Rc,onHover:Gc=()=>{},isHovered:Iu=!1})=>{const Xu=Rc.model_obj_url??Rc.model_stl_url,_0=Rc.rotation?lf(Rc.rotation.x*Math.PI/180,Rc.rotation.y*Math.PI/180,Rc.rotation.z*Math.PI/180):void 0;if(Xu)return(0,uf.jsx)(a0,{url:Xu,position:Rc.position?[Rc.position.x,Rc.position.y,Rc.position.z]:void 0,rotation:_0,onHover:Gc,isHovered:Iu},Rc.cad_component_id);if(Rc.model_jscad)return(0,uf.jsx)(Q0,{jscadPlan:Rc.model_jscad,rotationOffset:_0,onHover:Gc,isHovered:Iu},Rc.cad_component_id);if(Rc.footprinter_string)return(0,uf.jsx)(nf,{positionOffset:Rc.position?[Rc.position.x,Rc.position.y,Rc.position.z]:void 0,rotationOffset:_0,footprint:Rc.footprinter_string,onHover:Gc,isHovered:Iu})},Qh=Ra(requireReact()),P0=class extends Qh.default.Component{constructor(Rc){super(Rc),this.state={hasError:!1,error:null}}static getDerivedStateFromError(Rc){return{hasError:!0,error:Rc}}render(){return this.state.hasError&&this.state.error?this.props.fallback({error:this.state.error}):this.props.children}},$u=require$$14,A0=requireJsxRuntime(),Vu=({error:Rc,cad_component:Gc})=>{let Iu=[0,0,0];return Gc!=null&&Gc.position&&(Iu=[Gc.position.x,Gc.position.y,Gc.position.z],Iu=Iu.map(Xu=>Number.isNaN(Xu)?0:Xu)),(0,A0.jsxs)("group",{position:Iu,children:[(0,A0.jsxs)("mesh",{renderOrder:-99999,rotation:[Math.PI/4,Math.PI/4,0],ref:Xu=>{Xu&&(Xu.renderOrder=999999)},children:[(0,A0.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,A0.jsx)("meshStandardMaterial",{depthTest:!1,transparent:!0,color:"red",opacity:.5})]}),(0,A0.jsxs)($u.Text,{scale:[.1,.1,.1],color:"red",anchorX:"center",anchorY:"middle",depthOffset:-99999,children:[Rc.toString().slice(0,50),"..."]})]})},z0=requireJsxRuntime(),qh=(0,dl.forwardRef)(({soup:Rc,children:Gc},Iu)=>{const[Xu,_0]=(0,dl.useState)(null);if(Rc??(Rc=sl(Gc)),!Rc)return null;const B0=(0,dl.useMemo)(()=>Rc.some(Cd=>Cd.type==="pcb_board")?Dc(Rc):null,[Rc]),{stls:G0,loading:wd}=Bc(B0),_d=(0,ll.su)(Rc).cad_component.list();return(0,z0.jsxs)(f0,{ref:Iu,hoveredComponent:Xu,children:[G0.map(({stlUrl:Cd,color:Jd},pf)=>(0,z0.jsx)(fu,{stlUrl:Cd,color:Jd,opacity:pf===0?.95:1},Cd)),_d.map(Cd=>(0,z0.jsx)(P0,{fallback:({error:Jd})=>(0,z0.jsx)(Vu,{cad_component:Cd,error:Jd}),children:(0,z0.jsx)(Mf,{onHover:Jd=>{var nd;if(Jd||_0(null),!Jd.mousePosition)return;const pf=(nd=(0,ll.su)(Rc).source_component.getUsing({source_component_id:Cd.source_component_id}))==null?void 0:nd.name;_0({cad_component_id:Cd.cad_component_id,name:pf??"<unknown>",mousePosition:Jd.mousePosition})},cad_component:Cd,isHovered:(Xu==null?void 0:Xu.cad_component_id)===Cd.cad_component_id},Cd.cad_component_id)},Cd.cad_component_id))]})});return dist$1}var distExports$1=requireDist$1();const c$1=ua=>typeof ua=="number"&&!isNaN(ua),d$1=ua=>typeof ua=="string",u$1=ua=>typeof ua=="function",p$1=ua=>d$1(ua)||u$1(ua)?ua:null,m$1=ua=>reactExports.isValidElement(ua)||d$1(ua)||u$1(ua)||c$1(ua);function f$1(ua,J,la){la===void 0&&(la=300);const{scrollHeight:xa,style:Aa}=ua;requestAnimationFrame(()=>{Aa.minHeight="initial",Aa.height=xa+"px",Aa.transition=`all ${la}ms`,requestAnimationFrame(()=>{Aa.height="0",Aa.padding="0",Aa.margin="0",setTimeout(J,la)})})}function g$1(ua){let{enter:J,exit:la,appendPosition:xa=!1,collapse:Aa=!0,collapseDuration:ba=300}=ua;return function(Sa){let{children:Ma,position:Ra,preventExitTransition:Ia,done:La,nodeRef:Fa,isIn:ka,playToast:el}=Sa;const tl=xa?`${J}--${Ra}`:J,rl=xa?`${la}--${Ra}`:la,il=reactExports.useRef(0);return reactExports.useLayoutEffect(()=>{const nl=Fa.current,sl=tl.split(" "),ll=dl=>{dl.target===Fa.current&&(el(),nl.removeEventListener("animationend",ll),nl.removeEventListener("animationcancel",ll),il.current===0&&dl.type!=="animationcancel"&&nl.classList.remove(...sl))};nl.classList.add(...sl),nl.addEventListener("animationend",ll),nl.addEventListener("animationcancel",ll)},[]),reactExports.useEffect(()=>{const nl=Fa.current,sl=()=>{nl.removeEventListener("animationend",sl),Aa?f$1(nl,La,ba):La()};ka||(Ia?sl():(il.current=1,nl.className+=` ${rl}`,nl.addEventListener("animationend",sl)))},[ka]),React.createElement(React.Fragment,null,Ma)}}function y$1(ua,J){return ua!=null?{content:ua.content,containerId:ua.props.containerId,id:ua.props.toastId,theme:ua.props.theme,type:ua.props.type,data:ua.props.data||{},isLoading:ua.props.isLoading,icon:ua.props.icon,status:J}:{}}const v$1=new Map;let h$1=[];const T$1=new Set,E$1=ua=>T$1.forEach(J=>J(ua)),b$1=()=>v$1.size>0;function I$1(ua,J){var la;if(J)return!((la=v$1.get(J))==null||!la.isToastActive(ua));let xa=!1;return v$1.forEach(Aa=>{Aa.isToastActive(ua)&&(xa=!0)}),xa}function _$1(ua,J){m$1(ua)&&(b$1()||h$1.push({content:ua,options:J}),v$1.forEach(la=>{la.buildToast(ua,J)}))}function C$1(ua,J){v$1.forEach(la=>{J!=null&&J!=null&&J.containerId?(J==null?void 0:J.containerId)===la.id&&la.toggle(ua,J==null?void 0:J.id):la.toggle(ua,J==null?void 0:J.id)})}function L$1(ua){const{subscribe:J,getSnapshot:la,setProps:xa}=reactExports.useRef(function(ba){const Sa=ba.containerId||1;return{subscribe(Ma){const Ra=function(La,Fa,ka){let el=1,tl=0,rl=[],il=[],nl=[],sl=Fa;const ll=new Map,dl=new Set,gl=()=>{nl=Array.from(ll.values()),dl.forEach(Cl=>Cl())},_l=Cl=>{il=Cl==null?[]:il.filter(Ll=>Ll!==Cl),gl()},vl=Cl=>{const{toastId:Ll,onOpen:Il,updateId:Fl,children:Ol}=Cl.props,ql=Fl==null;Cl.staleId&&ll.delete(Cl.staleId),ll.set(Ll,Cl),il=[...il,Cl.props.toastId].filter(rc=>rc!==Cl.staleId),gl(),ka(y$1(Cl,ql?"added":"updated")),ql&&u$1(Il)&&Il(reactExports.isValidElement(Ol)&&Ol.props)};return{id:La,props:sl,observe:Cl=>(dl.add(Cl),()=>dl.delete(Cl)),toggle:(Cl,Ll)=>{ll.forEach(Il=>{Ll!=null&&Ll!==Il.props.toastId||u$1(Il.toggle)&&Il.toggle(Cl)})},removeToast:_l,toasts:ll,clearQueue:()=>{tl-=rl.length,rl=[]},buildToast:(Cl,Ll)=>{if((ac=>{let{containerId:Cc,toastId:_c,updateId:Dc}=ac;const Uc=Cc?Cc!==La:La!==1,Oc=ll.has(_c)&&Dc==null;return Uc||Oc})(Ll))return;const{toastId:Il,updateId:Fl,data:Ol,staleId:ql,delay:rc}=Ll,sc=()=>{_l(Il)},Kl=Fl==null;Kl&&tl++;const Gl={...sl,style:sl.toastStyle,key:el++,...Object.fromEntries(Object.entries(Ll).filter(ac=>{let[Cc,_c]=ac;return _c!=null})),toastId:Il,updateId:Fl,data:Ol,closeToast:sc,isIn:!1,className:p$1(Ll.className||sl.toastClassName),bodyClassName:p$1(Ll.bodyClassName||sl.bodyClassName),progressClassName:p$1(Ll.progressClassName||sl.progressClassName),autoClose:!Ll.isLoading&&(kl=Ll.autoClose,Wl=sl.autoClose,kl===!1||c$1(kl)&&kl>0?kl:Wl),deleteToast(){const ac=ll.get(Il),{onClose:Cc,children:_c}=ac.props;u$1(Cc)&&Cc(reactExports.isValidElement(_c)&&_c.props),ka(y$1(ac,"removed")),ll.delete(Il),tl--,tl<0&&(tl=0),rl.length>0?vl(rl.shift()):gl()}};var kl,Wl;Gl.closeButton=sl.closeButton,Ll.closeButton===!1||m$1(Ll.closeButton)?Gl.closeButton=Ll.closeButton:Ll.closeButton===!0&&(Gl.closeButton=!m$1(sl.closeButton)||sl.closeButton);let tc=Cl;reactExports.isValidElement(Cl)&&!d$1(Cl.type)?tc=reactExports.cloneElement(Cl,{closeToast:sc,toastProps:Gl,data:Ol}):u$1(Cl)&&(tc=Cl({closeToast:sc,toastProps:Gl,data:Ol}));const Zl={content:tc,props:Gl,staleId:ql};sl.limit&&sl.limit>0&&tl>sl.limit&&Kl?rl.push(Zl):c$1(rc)?setTimeout(()=>{vl(Zl)},rc):vl(Zl)},setProps(Cl){sl=Cl},setToggle:(Cl,Ll)=>{ll.get(Cl).toggle=Ll},isToastActive:Cl=>il.some(Ll=>Ll===Cl),getSnapshot:()=>nl}}(Sa,ba,E$1);v$1.set(Sa,Ra);const Ia=Ra.observe(Ma);return h$1.forEach(La=>_$1(La.content,La.options)),h$1=[],()=>{Ia(),v$1.delete(Sa)}},setProps(Ma){var Ra;(Ra=v$1.get(Sa))==null||Ra.setProps(Ma)},getSnapshot(){var Ma;return(Ma=v$1.get(Sa))==null?void 0:Ma.getSnapshot()}}}(ua)).current;xa(ua);const Aa=reactExports.useSyncExternalStore(J,la,la);return{getToastToRender:function(ba){if(!Aa)return[];const Sa=new Map;return ua.newestOnTop&&Aa.reverse(),Aa.forEach(Ma=>{const{position:Ra}=Ma.props;Sa.has(Ra)||Sa.set(Ra,[]),Sa.get(Ra).push(Ma)}),Array.from(Sa,Ma=>ba(Ma[0],Ma[1]))},isToastActive:I$1,count:Aa==null?void 0:Aa.length}}function N$1(ua){const[J,la]=reactExports.useState(!1),[xa,Aa]=reactExports.useState(!1),ba=reactExports.useRef(null),Sa=reactExports.useRef({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:Ma,pauseOnHover:Ra,closeToast:Ia,onClick:La,closeOnClick:Fa}=ua;var ka,el;function tl(){la(!0)}function rl(){la(!1)}function il(ll){const dl=ba.current;Sa.canDrag&&dl&&(Sa.didMove=!0,J&&rl(),Sa.delta=ua.draggableDirection==="x"?ll.clientX-Sa.start:ll.clientY-Sa.start,Sa.start!==ll.clientX&&(Sa.canCloseOnClick=!1),dl.style.transform=`translate3d(${ua.draggableDirection==="x"?`${Sa.delta}px, var(--y)`:`0, calc(${Sa.delta}px + var(--y))`},0)`,dl.style.opacity=""+(1-Math.abs(Sa.delta/Sa.removalDistance)))}function nl(){document.removeEventListener("pointermove",il),document.removeEventListener("pointerup",nl);const ll=ba.current;if(Sa.canDrag&&Sa.didMove&&ll){if(Sa.canDrag=!1,Math.abs(Sa.delta)>Sa.removalDistance)return Aa(!0),ua.closeToast(),void ua.collapseAll();ll.style.transition="transform 0.2s, opacity 0.2s",ll.style.removeProperty("transform"),ll.style.removeProperty("opacity")}}(el=v$1.get((ka={id:ua.toastId,containerId:ua.containerId,fn:la}).containerId||1))==null||el.setToggle(ka.id,ka.fn),reactExports.useEffect(()=>{if(ua.pauseOnFocusLoss)return document.hasFocus()||rl(),window.addEventListener("focus",tl),window.addEventListener("blur",rl),()=>{window.removeEventListener("focus",tl),window.removeEventListener("blur",rl)}},[ua.pauseOnFocusLoss]);const sl={onPointerDown:function(ll){if(ua.draggable===!0||ua.draggable===ll.pointerType){Sa.didMove=!1,document.addEventListener("pointermove",il),document.addEventListener("pointerup",nl);const dl=ba.current;Sa.canCloseOnClick=!0,Sa.canDrag=!0,dl.style.transition="none",ua.draggableDirection==="x"?(Sa.start=ll.clientX,Sa.removalDistance=dl.offsetWidth*(ua.draggablePercent/100)):(Sa.start=ll.clientY,Sa.removalDistance=dl.offsetHeight*(ua.draggablePercent===80?1.5*ua.draggablePercent:ua.draggablePercent)/100)}},onPointerUp:function(ll){const{top:dl,bottom:gl,left:_l,right:vl}=ba.current.getBoundingClientRect();ll.nativeEvent.type!=="touchend"&&ua.pauseOnHover&&ll.clientX>=_l&&ll.clientX<=vl&&ll.clientY>=dl&&ll.clientY<=gl?rl():tl()}};return Ma&&Ra&&(sl.onMouseEnter=rl,ua.stacked||(sl.onMouseLeave=tl)),Fa&&(sl.onClick=ll=>{La&&La(ll),Sa.canCloseOnClick&&Ia()}),{playToast:tl,pauseToast:rl,isRunning:J,preventExitTransition:xa,toastRef:ba,eventHandlers:sl}}function $$1(ua){let{delay:J,isRunning:la,closeToast:xa,type:Aa="default",hide:ba,className:Sa,style:Ma,controlledProgress:Ra,progress:Ia,rtl:La,isIn:Fa,theme:ka}=ua;const el=ba||Ra&&Ia===0,tl={...Ma,animationDuration:`${J}ms`,animationPlayState:la?"running":"paused"};Ra&&(tl.transform=`scaleX(${Ia})`);const rl=clsx("Toastify__progress-bar",Ra?"Toastify__progress-bar--controlled":"Toastify__progress-bar--animated",`Toastify__progress-bar-theme--${ka}`,`Toastify__progress-bar--${Aa}`,{"Toastify__progress-bar--rtl":La}),il=u$1(Sa)?Sa({rtl:La,type:Aa,defaultClassName:rl}):clsx(rl,Sa),nl={[Ra&&Ia>=1?"onTransitionEnd":"onAnimationEnd"]:Ra&&Ia<1?null:()=>{Fa&&xa()}};return React.createElement("div",{className:"Toastify__progress-bar--wrp","data-hidden":el},React.createElement("div",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${ka} Toastify__progress-bar--${Aa}`}),React.createElement("div",{role:"progressbar","aria-hidden":el?"true":"false","aria-label":"notification timer",className:il,style:tl,...nl}))}let w$1=1;const k$1=()=>""+w$1++;function P$1(ua){return ua&&(d$1(ua.toastId)||c$1(ua.toastId))?ua.toastId:k$1()}function M$1(ua,J){return _$1(ua,J),J.toastId}function x$1(ua,J){return{...J,type:J&&J.type||ua,toastId:P$1(J)}}function A$1(ua){return(J,la)=>M$1(J,x$1(ua,la))}function B$1(ua,J){return M$1(ua,x$1("default",J))}B$1.loading=(ua,J)=>M$1(ua,x$1("default",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...J})),B$1.promise=function(ua,J,la){let xa,{pending:Aa,error:ba,success:Sa}=J;Aa&&(xa=d$1(Aa)?B$1.loading(Aa,la):B$1.loading(Aa.render,{...la,...Aa}));const Ma={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},Ra=(La,Fa,ka)=>{if(Fa==null)return void B$1.dismiss(xa);const el={type:La,...Ma,...la,data:ka},tl=d$1(Fa)?{render:Fa}:Fa;return xa?B$1.update(xa,{...el,...tl}):B$1(tl.render,{...el,...tl}),ka},Ia=u$1(ua)?ua():ua;return Ia.then(La=>Ra("success",Sa,La)).catch(La=>Ra("error",ba,La)),Ia},B$1.success=A$1("success"),B$1.info=A$1("info"),B$1.error=A$1("error"),B$1.warning=A$1("warning"),B$1.warn=B$1.warning,B$1.dark=(ua,J)=>M$1(ua,x$1("default",{theme:"dark",...J})),B$1.dismiss=function(ua){(function(J){var la;if(b$1()){if(J==null||d$1(la=J)||c$1(la))v$1.forEach(xa=>{xa.removeToast(J)});else if(J&&("containerId"in J||"id"in J)){const xa=v$1.get(J.containerId);xa?xa.removeToast(J.id):v$1.forEach(Aa=>{Aa.removeToast(J.id)})}}else h$1=h$1.filter(xa=>J!=null&&xa.options.toastId!==J)})(ua)},B$1.clearWaitingQueue=function(ua){ua===void 0&&(ua={}),v$1.forEach(J=>{!J.props.limit||ua.containerId&&J.id!==ua.containerId||J.clearQueue()})},B$1.isActive=I$1,B$1.update=function(ua,J){J===void 0&&(J={});const la=((xa,Aa)=>{var ba;let{containerId:Sa}=Aa;return(ba=v$1.get(Sa||1))==null?void 0:ba.toasts.get(xa)})(ua,J);if(la){const{props:xa,content:Aa}=la,ba={delay:100,...xa,...J,toastId:J.toastId||ua,updateId:k$1()};ba.toastId!==ua&&(ba.staleId=ua);const Sa=ba.render||Aa;delete ba.render,M$1(Sa,ba)}},B$1.done=ua=>{B$1.update(ua,{progress:1})},B$1.onChange=function(ua){return T$1.add(ua),()=>{T$1.delete(ua)}},B$1.play=ua=>C$1(!0,ua),B$1.pause=ua=>C$1(!1,ua);const O$1=typeof window<"u"?reactExports.useLayoutEffect:reactExports.useEffect,D$1=ua=>{let{theme:J,type:la,isLoading:xa,...Aa}=ua;return React.createElement("svg",{viewBox:"0 0 24 24",width:"100%",height:"100%",fill:J==="colored"?"currentColor":`var(--toastify-icon-color-${la})`,...Aa})},z$2={info:function(ua){return React.createElement(D$1,{...ua},React.createElement("path",{d:"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z"}))},warning:function(ua){return React.createElement(D$1,{...ua},React.createElement("path",{d:"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 000 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z"}))},success:function(ua){return React.createElement(D$1,{...ua},React.createElement("path",{d:"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z"}))},error:function(ua){return React.createElement(D$1,{...ua},React.createElement("path",{d:"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 000 12.207 11.779 11.779 0 0011.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 0011.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 011.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z"}))},spinner:function(){return React.createElement("div",{className:"Toastify__spinner"})}},R$1=ua=>{const{isRunning:J,preventExitTransition:la,toastRef:xa,eventHandlers:Aa,playToast:ba}=N$1(ua),{closeButton:Sa,children:Ma,autoClose:Ra,onClick:Ia,type:La,hideProgressBar:Fa,closeToast:ka,transition:el,position:tl,className:rl,style:il,bodyClassName:nl,bodyStyle:sl,progressClassName:ll,progressStyle:dl,updateId:gl,role:_l,progress:vl,rtl:Cl,toastId:Ll,deleteToast:Il,isIn:Fl,isLoading:Ol,closeOnClick:ql,theme:rc}=ua,sc=clsx("Toastify__toast",`Toastify__toast-theme--${rc}`,`Toastify__toast--${La}`,{"Toastify__toast--rtl":Cl},{"Toastify__toast--close-on-click":ql}),Kl=u$1(rl)?rl({rtl:Cl,position:tl,type:La,defaultClassName:sc}):clsx(sc,rl),Gl=function(Zl){let{theme:ac,type:Cc,isLoading:_c,icon:Dc}=Zl,Uc=null;const Oc={theme:ac,type:Cc};return Dc===!1||(u$1(Dc)?Uc=Dc({...Oc,isLoading:_c}):reactExports.isValidElement(Dc)?Uc=reactExports.cloneElement(Dc,Oc):_c?Uc=z$2.spinner():(jc=>jc in z$2)(Cc)&&(Uc=z$2[Cc](Oc))),Uc}(ua),kl=!!vl||!Ra,Wl={closeToast:ka,type:La,theme:rc};let tc=null;return Sa===!1||(tc=u$1(Sa)?Sa(Wl):reactExports.isValidElement(Sa)?reactExports.cloneElement(Sa,Wl):function(Zl){let{closeToast:ac,theme:Cc,ariaLabel:_c="close"}=Zl;return React.createElement("button",{className:`Toastify__close-button Toastify__close-button--${Cc}`,type:"button",onClick:Dc=>{Dc.stopPropagation(),ac(Dc)},"aria-label":_c},React.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 14 16"},React.createElement("path",{fillRule:"evenodd",d:"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z"})))}(Wl)),React.createElement(el,{isIn:Fl,done:Il,position:tl,preventExitTransition:la,nodeRef:xa,playToast:ba},React.createElement("div",{id:Ll,onClick:Ia,"data-in":Fl,className:Kl,...Aa,style:il,ref:xa},React.createElement("div",{...Fl&&{role:_l},className:u$1(nl)?nl({type:La}):clsx("Toastify__toast-body",nl),style:sl},Gl!=null&&React.createElement("div",{className:clsx("Toastify__toast-icon",{"Toastify--animate-icon Toastify__zoom-enter":!Ol})},Gl),React.createElement("div",null,Ma)),tc,React.createElement($$1,{...gl&&!kl?{key:`pb-${gl}`}:{},rtl:Cl,theme:rc,delay:Ra,isRunning:J,isIn:Fl,closeToast:ka,hide:Fa,type:La,style:dl,className:ll,controlledProgress:kl,progress:vl||0})))},S$1=function(ua,J){return J===void 0&&(J=!1),{enter:`Toastify--animate Toastify__${ua}-enter`,exit:`Toastify--animate Toastify__${ua}-exit`,appendPosition:J}},H$1=g$1(S$1("bounce",!0));g$1(S$1("slide",!0)),g$1(S$1("zoom")),g$1(S$1("flip"));const q$1={position:"top-right",transition:H$1,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:"touch",draggablePercent:80,draggableDirection:"x",role:"alert",theme:"light"};function Q$1(ua){let J={...q$1,...ua};const la=ua.stacked,[xa,Aa]=reactExports.useState(!0),ba=reactExports.useRef(null),{getToastToRender:Sa,isToastActive:Ma,count:Ra}=L$1(J),{className:Ia,style:La,rtl:Fa,containerId:ka}=J;function el(rl){const il=clsx("Toastify__toast-container",`Toastify__toast-container--${rl}`,{"Toastify__toast-container--rtl":Fa});return u$1(Ia)?Ia({position:rl,rtl:Fa,defaultClassName:il}):clsx(il,p$1(Ia))}function tl(){la&&(Aa(!0),B$1.play())}return O$1(()=>{if(la){var rl;const il=ba.current.querySelectorAll('[data-in="true"]'),nl=12,sl=(rl=J.position)==null?void 0:rl.includes("top");let ll=0,dl=0;Array.from(il).reverse().forEach((gl,_l)=>{const vl=gl;vl.classList.add("Toastify__toast--stacked"),_l>0&&(vl.dataset.collapsed=`${xa}`),vl.dataset.pos||(vl.dataset.pos=sl?"top":"bot");const Cl=ll*(xa?.2:1)+(xa?0:nl*_l);vl.style.setProperty("--y",`${sl?Cl:-1*Cl}px`),vl.style.setProperty("--g",`${nl}`),vl.style.setProperty("--s",""+(1-(xa?dl:0))),ll+=vl.offsetHeight,dl+=.025})}},[xa,Ra,la]),React.createElement("div",{ref:ba,className:"Toastify",id:ka,onMouseEnter:()=>{la&&(Aa(!1),B$1.pause())},onMouseLeave:tl},Sa((rl,il)=>{const nl=il.length?{...La}:{...La,pointerEvents:"none"};return React.createElement("div",{className:el(rl),style:nl,key:`container-${rl}`},il.map(sl=>{let{content:ll,props:dl}=sl;return React.createElement(R$1,{...dl,stacked:la,collapseAll:tl,isIn:Ma(dl.toastId,dl.containerId),style:dl.style,key:`toast-${dl.key}`},ll)}))}))}function injectStyle(){var ua=':root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-offset:16px;--toastify-toast-top:max(var(--toastify-toast-offset),env(safe-area-inset-top));--toastify-toast-right:max(var(--toastify-toast-offset),env(safe-area-inset-right));--toastify-toast-left:max(var(--toastify-toast-offset),env(safe-area-inset-left));--toastify-toast-bottom:max(var(--toastify-toast-offset),env(safe-area-inset-bottom));--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-toast-bd-radius:6px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-color-progress-bgo:0.2}.Toastify__toast-container{z-index:var(--toastify-z-index);-webkit-transform:translateZ(var(--toastify-z-index));position:fixed;padding:4px;width:var(--toastify-toast-width);box-sizing:border-box;color:#fff}.Toastify__toast-container--top-left{top:var(--toastify-toast-top);left:var(--toastify-toast-left)}.Toastify__toast-container--top-center{top:var(--toastify-toast-top);left:50%;transform:translateX(-50%)}.Toastify__toast-container--top-right{top:var(--toastify-toast-top);right:var(--toastify-toast-right)}.Toastify__toast-container--bottom-left{bottom:var(--toastify-toast-bottom);left:var(--toastify-toast-left)}.Toastify__toast-container--bottom-center{bottom:var(--toastify-toast-bottom);left:50%;transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:var(--toastify-toast-bottom);right:var(--toastify-toast-right)}@media only screen and (max-width:480px){.Toastify__toast-container{width:100vw;padding:0;left:env(safe-area-inset-left);margin:0}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:env(safe-area-inset-top);transform:translateX(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:env(safe-area-inset-bottom);transform:translateX(0)}.Toastify__toast-container--rtl{right:env(safe-area-inset-right);left:auto}}.Toastify__toast{--y:0;position:relative;-ms-touch-action:none;touch-action:none;min-height:var(--toastify-toast-min-height);box-sizing:border-box;margin-bottom:1rem;padding:8px;border-radius:var(--toastify-toast-bd-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-height:var(--toastify-toast-max-height);font-family:var(--toastify-font-family);cursor:default;direction:ltr;z-index:0;overflow:hidden}.Toastify__toast--stacked{position:absolute;width:100%;transform:translate3d(0,var(--y),0) scale(var(--s));transition:transform .3s}.Toastify__toast--stacked[data-collapsed] .Toastify__close-button,.Toastify__toast--stacked[data-collapsed] .Toastify__toast-body{transition:opacity .1s}.Toastify__toast--stacked[data-collapsed=false]{overflow:visible}.Toastify__toast--stacked[data-collapsed=true]:not(:last-child)>*{opacity:0}.Toastify__toast--stacked:after{content:"";position:absolute;left:0;right:0;height:calc(var(--g) * 1px);bottom:100%}.Toastify__toast--stacked[data-pos=top]{top:0}.Toastify__toast--stacked[data-pos=bot]{bottom:0}.Toastify__toast--stacked[data-pos=bot].Toastify__toast--stacked:before{transform-origin:top}.Toastify__toast--stacked[data-pos=top].Toastify__toast--stacked:before{transform-origin:bottom}.Toastify__toast--stacked:before{content:"";position:absolute;left:0;right:0;bottom:0;height:100%;transform:scaleY(3);z-index:-1}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-body{margin:auto 0;-ms-flex:1 1 auto;flex:1 1 auto;padding:6px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.Toastify__toast-body>div:last-child{word-break:break-word;-ms-flex:1;flex:1}.Toastify__toast-icon{-webkit-margin-end:10px;margin-inline-end:10px;width:20px;-ms-flex-negative:0;flex-shrink:0;display:-ms-flexbox;display:flex}.Toastify--animate{animation-fill-mode:both;animation-duration:.5s}.Toastify--animate-icon{animation-fill-mode:both;animation-duration:.3s}@media only screen and (max-width:480px){.Toastify__toast{margin-bottom:0;border-radius:0}}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{color:var(--toastify-text-color-info);background:var(--toastify-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{color:var(--toastify-text-color-success);background:var(--toastify-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{color:var(--toastify-text-color-warning);background:var(--toastify-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{color:var(--toastify-text-color-error);background:var(--toastify-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:var(--toastify-color-transparent)}.Toastify__close-button{color:#fff;background:transparent;outline:none;border:none;padding:0;cursor:pointer;opacity:.7;transition:.3s ease;-ms-flex-item-align:start;align-self:flex-start;z-index:1}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Toastify__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:100%;z-index:var(--toastify-z-index);opacity:.7;transform-origin:left;border-bottom-left-radius:var(--toastify-toast-bd-radius)}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:transform .2s}.Toastify__progress-bar--rtl{right:0;left:auto;transform-origin:right;border-bottom-left-radius:0;border-bottom-right-radius:var(--toastify-toast-bd-radius)}.Toastify__progress-bar--wrp{position:absolute;bottom:0;left:0;width:100%;height:5px;border-bottom-left-radius:var(--toastify-toast-bd-radius)}.Toastify__progress-bar--wrp[data-hidden=true]{opacity:0}.Toastify__progress-bar--bg{opacity:var(--toastify-color-progress-bgo);width:100%;height:100%}.Toastify__spinner{width:20px;height:20px;box-sizing:border-box;border:2px solid;border-radius:100%;border-color:var(--toastify-spinner-color-empty-area);border-right-color:var(--toastify-spinner-color);animation:Toastify__spin .65s linear infinite}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px,var(--y),0)}to{opacity:0;transform:translate3d(2000px,var(--y),0)}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px,var(--y),0)}to{opacity:0;transform:translate3d(-2000px,var(--y),0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;transform:translate3d(0,var(--y),0) scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{0%{transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{0%{transform:translate3d(0,var(--y),0) perspective(400px)}30%{transform:translate3d(0,var(--y),0) perspective(400px) rotateX(-20deg);opacity:1}to{transform:translate3d(0,var(--y),0) perspective(400px) rotateX(90deg);opacity:0}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{0%{transform:translate3d(110%,0,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInLeft{0%{transform:translate3d(-110%,0,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInUp{0%{transform:translate3d(0,110%,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInDown{0%{transform:translate3d(0,-110%,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideOutRight{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(110%,var(--y),0)}}@keyframes Toastify__slideOutLeft{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(-110%,var(--y),0)}}@keyframes Toastify__slideOutDown{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(0,500px,0)}}@keyframes Toastify__slideOutUp{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(0,-500px,0)}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{animation-name:Toastify__slideOutLeft;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{animation-name:Toastify__slideOutRight;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--top-center{animation-name:Toastify__slideOutUp;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--bottom-center{animation-name:Toastify__slideOutDown;animation-timing-function:ease-in;animation-duration:.3s}@keyframes Toastify__spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}',J=document.createElement("style");J.innerText=ua,document.head.appendChild(J)}var SuperGrid_1,hasRequiredSuperGrid;function requireSuperGrid(){if(hasRequiredSuperGrid)return SuperGrid_1;hasRequiredSuperGrid=1;var ua=Object.defineProperty,J=Object.getOwnPropertyDescriptor,la=Object.getOwnPropertyNames,xa=Object.prototype.hasOwnProperty,Aa=(il,nl)=>{for(var sl in nl)ua(il,sl,{get:nl[sl],enumerable:!0})},ba=(il,nl,sl,ll)=>{if(nl&&typeof nl=="object"||typeof nl=="function")for(let dl of la(nl))!xa.call(il,dl)&&dl!==sl&&ua(il,dl,{get:()=>nl[dl],enumerable:!(ll=J(nl,dl))||ll.enumerable});return il},Sa=il=>ba(ua({},"__esModule",{value:!0}),il),Ma={};Aa(Ma,{SuperGrid:()=>rl,toMMSI:()=>tl,toMeterSI:()=>el}),SuperGrid_1=Sa(Ma);var Ra=requireReact(),Ia=require$$0,La=requireJsxRuntime(),Fa=(il,nl,sl)=>{const ll=[];if(nl<il)for(let dl=il;dl>=nl;dl-=Math.abs(sl))ll.push(dl);else for(let dl=il;dl<=nl;dl+=Math.abs(sl))ll.push(dl);return ll};function ka(il,nl){return{x:Math.round(nl.x/il)*il,y:Math.round(nl.y/il)*il}}function el(il,nl=1){return il<0?"-"+el(-il):il<1e-6?"0m":il>1e3?Math.floor(il/1e3)+"km":il>1&&nl>1?Math.round(il)+"m":il>1&&nl<=1?il.toFixed(Math.ceil(-Math.log10(nl)))+"m":il<1&&nl>=1/1e3?Math.round(il*1e3)+"mm":il<1&&nl<1/1e3?(il*1e3).toFixed(Math.ceil(-Math.log10(nl*1e3)))+"mm":""}function tl(il,nl=1){return el(il/1e3,nl/1e3)}var rl=il=>{var nl;const sl=(0,Ra.useRef)(null),[ll,dl]=(0,Ra.useState)({x:0,y:0}),{majorColor:gl="rgba(0,0,0,0.2)",minorColor:_l="rgba(0,0,0,0.1)",textColor:vl=(nl=il.majorColor)!=null?nl:"rgba(0,0,0,0.5)",width:Cl,height:Ll,screenSpaceCellSize:Il=200,stringifyCoord:Fl=(sc,Kl,Gl)=>`${el(sc,Gl)}, ${el(Kl,Gl)}`}=il,Ol=Math.ceil(Cl/Il)+2,ql=Math.ceil(Ll/Il)+2;(0,Ra.useEffect)(()=>{if(!sl.current)return;const sc=sl.current.getContext("2d");if(!sc)return;const Kl=Il/10**Math.floor(Math.log10(il.transform.a)),Gl=il.transform.d<0?-1:1,Wl=Il/10**Math.log10(il.transform.a)/Kl;function tc(vc,Mc,kc){const Jc=vc;let fu,hu,wu;for(fu=Mc.x;fu<=kc.x;fu+=Jc)hu=(0,Ia.applyToPoint)(il.transform,{x:fu,y:Mc.y}),wu=(0,Ia.applyToPoint)(il.transform,{x:fu,y:kc.y}),sc.beginPath(),sc.moveTo(hu.x,hu.y),sc.lineTo(wu.x,wu.y),sc.stroke();const pu=Fa(Mc.y,kc.y,Jc*Gl);for(const Eu of pu)hu=(0,Ia.applyToPoint)(il.transform,{x:Mc.x,y:Eu}),wu=(0,Ia.applyToPoint)(il.transform,{x:kc.x,y:Eu}),sc.beginPath(),sc.moveTo(hu.x,hu.y),sc.lineTo(wu.x,wu.y),sc.stroke()}function Zl(vc,Mc,kc){const Jc=vc;let fu;for(fu=Mc.x;fu<=kc.x;fu+=Jc)for(const hu of Fa(Mc.y,kc.y,Jc*Gl)){const wu=(0,Ia.applyToPoint)(il.transform,{x:fu,y:hu});sc.fillStyle=vl,sc.font="12px sans-serif",sc.fillText(Fl(fu,hu,vc),wu.x+2,wu.y-2)}}sc.clearRect(0,0,Cl,Ll);const ac=(0,Ia.applyToPoint)((0,Ia.inverse)(il.transform),{x:0,y:0}),Cc={x:Math.floor((ac.x-Kl)/Kl)*Kl,y:Math.floor((ac.y-Kl)/Kl+(Gl==-1?2:0))*Kl},_c={x:Cc.x+Kl*Ol,y:Cc.y+Kl*ql*Gl},Uc=Kl*5,Oc={x:Math.floor((ac.x-Uc)/Uc)*Uc,y:Math.floor((ac.y-Uc)/Uc+(Gl==-1?2:0))*Uc},jc={x:Oc.x+Uc*Ol,y:Oc.y+Uc*ql*Gl};sc.globalAlpha=1,sc.strokeStyle=gl,tc(Kl,Cc,_c),Zl(Uc,Oc,jc),sc.globalAlpha=1-Wl,tc(Uc/10,Oc,jc),sc.globalAlpha=1-Wl,sc.strokeStyle=_l,tc(Kl/10,Cc,_c),sc.globalAlpha=Math.max(((1-Wl)*10-5)/5,0),Zl(Uc/10,Oc,jc),sc.globalAlpha=1;const Bc=(0,Ia.applyToPoint)(il.transform,ll);sc.font="12px sans-serif",sc.fillStyle=vl,sc.fillText(Fl(ll.x,ll.y,Kl),Bc.x+2,Bc.y-2),sc.strokeStyle=gl,sc.strokeRect(Bc.x-5,Bc.y-5,10,10)},[sl,il.transform,ll,Cl,Ll]);const rc=sc=>{if(!sl.current)return;const Kl=Il/10/10**Math.floor(Math.log10(il.transform.a)),Gl=sl.current.getBoundingClientRect(),kl=(0,Ia.applyToPoint)((0,Ia.inverse)(il.transform),{x:sc.clientX-Gl.left,y:sc.clientY-Gl.top}),Wl=ka(Kl,kl);dl(Wl)};return(0,La.jsx)("canvas",{onMouseUp:sc=>{sc.button===1&&rc(sc)},onDoubleClick:rc,ref:sl,width:il.width,height:il.height})};return SuperGrid_1}var SuperGridExports=requireSuperGrid(),colorExports=requireColor();const color=getDefaultExportFromCjs$1(colorExports);function pointToSegmentDistance(ua,J,la){const xa=(la.x-J.x)**2+(la.y-J.y)**2;if(xa===0)return distance$1(ua,J);let Aa=((ua.x-J.x)*(la.x-J.x)+(ua.y-J.y)*(la.y-J.y))/xa;Aa=Math.max(0,Math.min(1,Aa));const ba={x:J.x+Aa*(la.x-J.x),y:J.y+Aa*(la.y-J.y)};return distance$1(ua,ba)}function distance$1(ua,J){const la=ua.x-J.x,xa=ua.y-J.y;return Math.sqrt(la*la+xa*xa)}var isDevelopment$1=!1;function sheetForTag(ua){if(ua.sheet)return ua.sheet;for(var J=0;J<document.styleSheets.length;J++)if(document.styleSheets[J].ownerNode===ua)return document.styleSheets[J]}function createStyleElement(ua){var J=document.createElement("style");return J.setAttribute("data-emotion",ua.key),ua.nonce!==void 0&&J.setAttribute("nonce",ua.nonce),J.appendChild(document.createTextNode("")),J.setAttribute("data-s",""),J}var StyleSheet=function(){function ua(la){var xa=this;this._insertTag=function(Aa){var ba;xa.tags.length===0?xa.insertionPoint?ba=xa.insertionPoint.nextSibling:xa.prepend?ba=xa.container.firstChild:ba=xa.before:ba=xa.tags[xa.tags.length-1].nextSibling,xa.container.insertBefore(Aa,ba),xa.tags.push(Aa)},this.isSpeedy=la.speedy===void 0?!isDevelopment$1:la.speedy,this.tags=[],this.ctr=0,this.nonce=la.nonce,this.key=la.key,this.container=la.container,this.prepend=la.prepend,this.insertionPoint=la.insertionPoint,this.before=null}var J=ua.prototype;return J.hydrate=function(xa){xa.forEach(this._insertTag)},J.insert=function(xa){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(createStyleElement(this));var Aa=this.tags[this.tags.length-1];if(this.isSpeedy){var ba=sheetForTag(Aa);try{ba.insertRule(xa,ba.cssRules.length)}catch{}}else Aa.appendChild(document.createTextNode(xa));this.ctr++},J.flush=function(){this.tags.forEach(function(xa){var Aa;return(Aa=xa.parentNode)==null?void 0:Aa.removeChild(xa)}),this.tags=[],this.ctr=0},ua}(),MS="-ms-",MOZ="-moz-",WEBKIT="-webkit-",COMMENT="comm",RULESET="rule",DECLARATION="decl",IMPORT="@import",KEYFRAMES="@keyframes",LAYER="@layer",abs=Math.abs,from=String.fromCharCode,assign=Object.assign;function hash(ua,J){return charat(ua,0)^45?(((J<<2^charat(ua,0))<<2^charat(ua,1))<<2^charat(ua,2))<<2^charat(ua,3):0}function trim(ua){return ua.trim()}function match(ua,J){return(ua=J.exec(ua))?ua[0]:ua}function replace(ua,J,la){return ua.replace(J,la)}function indexof(ua,J){return ua.indexOf(J)}function charat(ua,J){return ua.charCodeAt(J)|0}function substr(ua,J,la){return ua.slice(J,la)}function strlen(ua){return ua.length}function sizeof$1(ua){return ua.length}function append(ua,J){return J.push(ua),ua}function combine(ua,J){return ua.map(J).join("")}var line=1,column=1,length=0,position$1=0,character=0,characters="";function node(ua,J,la,xa,Aa,ba,Sa){return{value:ua,root:J,parent:la,type:xa,props:Aa,children:ba,line,column,length:Sa,return:""}}function copy(ua,J){return assign(node("",null,null,"",null,null,0),ua,{length:-ua.length},J)}function char(){return character}function prev(){return character=position$1>0?charat(characters,--position$1):0,column--,character===10&&(column=1,line--),character}function next(){return character=position$1<length?charat(characters,position$1++):0,column++,character===10&&(column=1,line++),character}function peek(){return charat(characters,position$1)}function caret(){return position$1}function slice(ua,J){return substr(characters,ua,J)}function token(ua){switch(ua){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function alloc(ua){return line=column=1,length=strlen(characters=ua),position$1=0,[]}function dealloc(ua){return characters="",ua}function delimit(ua){return trim(slice(position$1-1,delimiter(ua===91?ua+2:ua===40?ua+1:ua)))}function whitespace(ua){for(;(character=peek())&&character<33;)next();return token(ua)>2||token(character)>3?"":" "}function escaping(ua,J){for(;--J&&next()&&!(character<48||character>102||character>57&&character<65||character>70&&character<97););return slice(ua,caret()+(J<6&&peek()==32&&next()==32))}function delimiter(ua){for(;next();)switch(character){case ua:return position$1;case 34:case 39:ua!==34&&ua!==39&&delimiter(character);break;case 40:ua===41&&delimiter(ua);break;case 92:next();break}return position$1}function commenter(ua,J){for(;next()&&ua+character!==57;)if(ua+character===84&&peek()===47)break;return"/*"+slice(J,position$1-1)+"*"+from(ua===47?ua:next())}function identifier(ua){for(;!token(peek());)next();return slice(ua,position$1)}function compile(ua){return dealloc(parse$1("",null,null,null,[""],ua=alloc(ua),0,[0],ua))}function parse$1(ua,J,la,xa,Aa,ba,Sa,Ma,Ra){for(var Ia=0,La=0,Fa=Sa,ka=0,el=0,tl=0,rl=1,il=1,nl=1,sl=0,ll="",dl=Aa,gl=ba,_l=xa,vl=ll;il;)switch(tl=sl,sl=next()){case 40:if(tl!=108&&charat(vl,Fa-1)==58){indexof(vl+=replace(delimit(sl),"&","&\f"),"&\f")!=-1&&(nl=-1);break}case 34:case 39:case 91:vl+=delimit(sl);break;case 9:case 10:case 13:case 32:vl+=whitespace(tl);break;case 92:vl+=escaping(caret()-1,7);continue;case 47:switch(peek()){case 42:case 47:append(comment(commenter(next(),caret()),J,la),Ra);break;default:vl+="/"}break;case 123*rl:Ma[Ia++]=strlen(vl)*nl;case 125*rl:case 59:case 0:switch(sl){case 0:case 125:il=0;case 59+La:nl==-1&&(vl=replace(vl,/\f/g,"")),el>0&&strlen(vl)-Fa&&append(el>32?declaration(vl+";",xa,la,Fa-1):declaration(replace(vl," ","")+";",xa,la,Fa-2),Ra);break;case 59:vl+=";";default:if(append(_l=ruleset(vl,J,la,Ia,La,Aa,Ma,ll,dl=[],gl=[],Fa),ba),sl===123)if(La===0)parse$1(vl,J,_l,_l,dl,ba,Fa,Ma,gl);else switch(ka===99&&charat(vl,3)===110?100:ka){case 100:case 108:case 109:case 115:parse$1(ua,_l,_l,xa&&append(ruleset(ua,_l,_l,0,0,Aa,Ma,ll,Aa,dl=[],Fa),gl),Aa,gl,Fa,Ma,xa?dl:gl);break;default:parse$1(vl,_l,_l,_l,[""],gl,0,Ma,gl)}}Ia=La=el=0,rl=nl=1,ll=vl="",Fa=Sa;break;case 58:Fa=1+strlen(vl),el=tl;default:if(rl<1){if(sl==123)--rl;else if(sl==125&&rl++==0&&prev()==125)continue}switch(vl+=from(sl),sl*rl){case 38:nl=La>0?1:(vl+="\f",-1);break;case 44:Ma[Ia++]=(strlen(vl)-1)*nl,nl=1;break;case 64:peek()===45&&(vl+=delimit(next())),ka=peek(),La=Fa=strlen(ll=vl+=identifier(caret())),sl++;break;case 45:tl===45&&strlen(vl)==2&&(rl=0)}}return ba}function ruleset(ua,J,la,xa,Aa,ba,Sa,Ma,Ra,Ia,La){for(var Fa=Aa-1,ka=Aa===0?ba:[""],el=sizeof$1(ka),tl=0,rl=0,il=0;tl<xa;++tl)for(var nl=0,sl=substr(ua,Fa+1,Fa=abs(rl=Sa[tl])),ll=ua;nl<el;++nl)(ll=trim(rl>0?ka[nl]+" "+sl:replace(sl,/&\f/g,ka[nl])))&&(Ra[il++]=ll);return node(ua,J,la,Aa===0?RULESET:Ma,Ra,Ia,La)}function comment(ua,J,la){return node(ua,J,la,COMMENT,from(char()),substr(ua,2,-2),0)}function declaration(ua,J,la,xa){return node(ua,J,la,DECLARATION,substr(ua,0,xa),substr(ua,xa+1,-1),xa)}function serialize(ua,J){for(var la="",xa=sizeof$1(ua),Aa=0;Aa<xa;Aa++)la+=J(ua[Aa],Aa,ua,J)||"";return la}function stringify$1(ua,J,la,xa){switch(ua.type){case LAYER:if(ua.children.length)break;case IMPORT:case DECLARATION:return ua.return=ua.return||ua.value;case COMMENT:return"";case KEYFRAMES:return ua.return=ua.value+"{"+serialize(ua.children,xa)+"}";case RULESET:ua.value=ua.props.join(",")}return strlen(la=serialize(ua.children,xa))?ua.return=ua.value+"{"+la+"}":""}function middleware(ua){var J=sizeof$1(ua);return function(la,xa,Aa,ba){for(var Sa="",Ma=0;Ma<J;Ma++)Sa+=ua[Ma](la,xa,Aa,ba)||"";return Sa}}function rulesheet(ua){return function(J){J.root||(J=J.return)&&ua(J)}}function memoize(ua){var J=Object.create(null);return function(la){return J[la]===void 0&&(J[la]=ua(la)),J[la]}}var identifierWithPointTracking=function ua(J,la,xa){for(var Aa=0,ba=0;Aa=ba,ba=peek(),Aa===38&&ba===12&&(la[xa]=1),!token(ba);)next();return slice(J,position$1)},toRules=function ua(J,la){var xa=-1,Aa=44;do switch(token(Aa)){case 0:Aa===38&&peek()===12&&(la[xa]=1),J[xa]+=identifierWithPointTracking(position$1-1,la,xa);break;case 2:J[xa]+=delimit(Aa);break;case 4:if(Aa===44){J[++xa]=peek()===58?"&\f":"",la[xa]=J[xa].length;break}default:J[xa]+=from(Aa)}while(Aa=next());return J},getRules=function ua(J,la){return dealloc(toRules(alloc(J),la))},fixedElements=new WeakMap,compat=function ua(J){if(!(J.type!=="rule"||!J.parent||J.length<1)){for(var la=J.value,xa=J.parent,Aa=J.column===xa.column&&J.line===xa.line;xa.type!=="rule";)if(xa=xa.parent,!xa)return;if(!(J.props.length===1&&la.charCodeAt(0)!==58&&!fixedElements.get(xa))&&!Aa){fixedElements.set(J,!0);for(var ba=[],Sa=getRules(la,ba),Ma=xa.props,Ra=0,Ia=0;Ra<Sa.length;Ra++)for(var La=0;La<Ma.length;La++,Ia++)J.props[Ia]=ba[Ra]?Sa[Ra].replace(/&\f/g,Ma[La]):Ma[La]+" "+Sa[Ra]}}},removeLabel=function ua(J){if(J.type==="decl"){var la=J.value;la.charCodeAt(0)===108&&la.charCodeAt(2)===98&&(J.return="",J.value="")}};function prefix(ua,J){switch(hash(ua,J)){case 5103:return WEBKIT+"print-"+ua+ua;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return WEBKIT+ua+ua;case 5349:case 4246:case 4810:case 6968:case 2756:return WEBKIT+ua+MOZ+ua+MS+ua+ua;case 6828:case 4268:return WEBKIT+ua+MS+ua+ua;case 6165:return WEBKIT+ua+MS+"flex-"+ua+ua;case 5187:return WEBKIT+ua+replace(ua,/(\w+).+(:[^]+)/,WEBKIT+"box-$1$2"+MS+"flex-$1$2")+ua;case 5443:return WEBKIT+ua+MS+"flex-item-"+replace(ua,/flex-|-self/,"")+ua;case 4675:return WEBKIT+ua+MS+"flex-line-pack"+replace(ua,/align-content|flex-|-self/,"")+ua;case 5548:return WEBKIT+ua+MS+replace(ua,"shrink","negative")+ua;case 5292:return WEBKIT+ua+MS+replace(ua,"basis","preferred-size")+ua;case 6060:return WEBKIT+"box-"+replace(ua,"-grow","")+WEBKIT+ua+MS+replace(ua,"grow","positive")+ua;case 4554:return WEBKIT+replace(ua,/([^-])(transform)/g,"$1"+WEBKIT+"$2")+ua;case 6187:return replace(replace(replace(ua,/(zoom-|grab)/,WEBKIT+"$1"),/(image-set)/,WEBKIT+"$1"),ua,"")+ua;case 5495:case 3959:return replace(ua,/(image-set\([^]*)/,WEBKIT+"$1$`$1");case 4968:return replace(replace(ua,/(.+:)(flex-)?(.*)/,WEBKIT+"box-pack:$3"+MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+WEBKIT+ua+ua;case 4095:case 3583:case 4068:case 2532:return replace(ua,/(.+)-inline(.+)/,WEBKIT+"$1$2")+ua;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(strlen(ua)-1-J>6)switch(charat(ua,J+1)){case 109:if(charat(ua,J+4)!==45)break;case 102:return replace(ua,/(.+:)(.+)-([^]+)/,"$1"+WEBKIT+"$2-$3$1"+MOZ+(charat(ua,J+3)==108?"$3":"$2-$3"))+ua;case 115:return~indexof(ua,"stretch")?prefix(replace(ua,"stretch","fill-available"),J)+ua:ua}break;case 4949:if(charat(ua,J+1)!==115)break;case 6444:switch(charat(ua,strlen(ua)-3-(~indexof(ua,"!important")&&10))){case 107:return replace(ua,":",":"+WEBKIT)+ua;case 101:return replace(ua,/(.+:)([^;!]+)(;|!.+)?/,"$1"+WEBKIT+(charat(ua,14)===45?"inline-":"")+"box$3$1"+WEBKIT+"$2$3$1"+MS+"$2box$3")+ua}break;case 5936:switch(charat(ua,J+11)){case 114:return WEBKIT+ua+MS+replace(ua,/[svh]\w+-[tblr]{2}/,"tb")+ua;case 108:return WEBKIT+ua+MS+replace(ua,/[svh]\w+-[tblr]{2}/,"tb-rl")+ua;case 45:return WEBKIT+ua+MS+replace(ua,/[svh]\w+-[tblr]{2}/,"lr")+ua}return WEBKIT+ua+MS+ua+ua}return ua}var prefixer=function ua(J,la,xa,Aa){if(J.length>-1&&!J.return)switch(J.type){case DECLARATION:J.return=prefix(J.value,J.length);break;case KEYFRAMES:return serialize([copy(J,{value:replace(J.value,"@","@"+WEBKIT)})],Aa);case RULESET:if(J.length)return combine(J.props,function(ba){switch(match(ba,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return serialize([copy(J,{props:[replace(ba,/:(read-\w+)/,":"+MOZ+"$1")]})],Aa);case"::placeholder":return serialize([copy(J,{props:[replace(ba,/:(plac\w+)/,":"+WEBKIT+"input-$1")]}),copy(J,{props:[replace(ba,/:(plac\w+)/,":"+MOZ+"$1")]}),copy(J,{props:[replace(ba,/:(plac\w+)/,MS+"input-$1")]})],Aa)}return""})}},defaultStylisPlugins=[prefixer],createCache=function ua(J){var la=J.key;if(la==="css"){var xa=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(xa,function(rl){var il=rl.getAttribute("data-emotion");il.indexOf(" ")!==-1&&(document.head.appendChild(rl),rl.setAttribute("data-s",""))})}var Aa=J.stylisPlugins||defaultStylisPlugins,ba={},Sa,Ma=[];Sa=J.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+la+' "]'),function(rl){for(var il=rl.getAttribute("data-emotion").split(" "),nl=1;nl<il.length;nl++)ba[il[nl]]=!0;Ma.push(rl)});var Ra,Ia=[compat,removeLabel];{var La,Fa=[stringify$1,rulesheet(function(rl){La.insert(rl)})],ka=middleware(Ia.concat(Aa,Fa)),el=function(il){return serialize(compile(il),ka)};Ra=function(il,nl,sl,ll){La=sl,el(il?il+"{"+nl.styles+"}":nl.styles),ll&&(tl.inserted[nl.name]=!0)}}var tl={key:la,sheet:new StyleSheet({key:la,container:Sa,nonce:J.nonce,speedy:J.speedy,prepend:J.prepend,insertionPoint:J.insertionPoint}),nonce:J.nonce,inserted:ba,registered:{},insert:Ra};return tl.sheet.hydrate(Ma),tl};function murmur2(ua){for(var J=0,la,xa=0,Aa=ua.length;Aa>=4;++xa,Aa-=4)la=ua.charCodeAt(xa)&255|(ua.charCodeAt(++xa)&255)<<8|(ua.charCodeAt(++xa)&255)<<16|(ua.charCodeAt(++xa)&255)<<24,la=(la&65535)*1540483477+((la>>>16)*59797<<16),la^=la>>>24,J=(la&65535)*1540483477+((la>>>16)*59797<<16)^(J&65535)*1540483477+((J>>>16)*59797<<16);switch(Aa){case 3:J^=(ua.charCodeAt(xa+2)&255)<<16;case 2:J^=(ua.charCodeAt(xa+1)&255)<<8;case 1:J^=ua.charCodeAt(xa)&255,J=(J&65535)*1540483477+((J>>>16)*59797<<16)}return J^=J>>>13,J=(J&65535)*1540483477+((J>>>16)*59797<<16),((J^J>>>15)>>>0).toString(36)}var unitlessKeys={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},isDevelopment=!1,hyphenateRegex=/[A-Z]|^ms/g,animationRegex=/_EMO_([^_]+?)_([^]*?)_EMO_/g,isCustomProperty=function ua(J){return J.charCodeAt(1)===45},isProcessableValue=function ua(J){return J!=null&&typeof J!="boolean"},processStyleName=memoize(function(ua){return isCustomProperty(ua)?ua:ua.replace(hyphenateRegex,"-$&").toLowerCase()}),processStyleValue=function ua(J,la){switch(J){case"animation":case"animationName":if(typeof la=="string")return la.replace(animationRegex,function(xa,Aa,ba){return cursor={name:Aa,styles:ba,next:cursor},Aa})}return unitlessKeys[J]!==1&&!isCustomProperty(J)&&typeof la=="number"&&la!==0?la+"px":la},noComponentSelectorMessage="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function handleInterpolation(ua,J,la){if(la==null)return"";var xa=la;if(xa.__emotion_styles!==void 0)return xa;switch(typeof la){case"boolean":return"";case"object":{var Aa=la;if(Aa.anim===1)return cursor={name:Aa.name,styles:Aa.styles,next:cursor},Aa.name;var ba=la;if(ba.styles!==void 0){var Sa=ba.next;if(Sa!==void 0)for(;Sa!==void 0;)cursor={name:Sa.name,styles:Sa.styles,next:cursor},Sa=Sa.next;var Ma=ba.styles+";";return Ma}return createStringFromObject(ua,J,la)}}var Ra=la;if(J==null)return Ra;var Ia=J[Ra];return Ia!==void 0?Ia:Ra}function createStringFromObject(ua,J,la){var xa="";if(Array.isArray(la))for(var Aa=0;Aa<la.length;Aa++)xa+=handleInterpolation(ua,J,la[Aa])+";";else for(var ba in la){var Sa=la[ba];if(typeof Sa!="object"){var Ma=Sa;J!=null&&J[Ma]!==void 0?xa+=ba+"{"+J[Ma]+"}":isProcessableValue(Ma)&&(xa+=processStyleName(ba)+":"+processStyleValue(ba,Ma)+";")}else{if(ba==="NO_COMPONENT_SELECTOR"&&isDevelopment)throw new Error(noComponentSelectorMessage);if(Array.isArray(Sa)&&typeof Sa[0]=="string"&&(J==null||J[Sa[0]]===void 0))for(var Ra=0;Ra<Sa.length;Ra++)isProcessableValue(Sa[Ra])&&(xa+=processStyleName(ba)+":"+processStyleValue(ba,Sa[Ra])+";");else{var Ia=handleInterpolation(ua,J,Sa);switch(ba){case"animation":case"animationName":{xa+=processStyleName(ba)+":"+Ia+";";break}default:xa+=ba+"{"+Ia+"}"}}}}return xa}var labelPattern=/label:\s*([^\s;{]+)\s*(;|$)/g,cursor;function serializeStyles(ua,J,la){if(ua.length===1&&typeof ua[0]=="object"&&ua[0]!==null&&ua[0].styles!==void 0)return ua[0];var xa=!0,Aa="";cursor=void 0;var ba=ua[0];if(ba==null||ba.raw===void 0)xa=!1,Aa+=handleInterpolation(la,J,ba);else{var Sa=ba;Aa+=Sa[0]}for(var Ma=1;Ma<ua.length;Ma++)if(Aa+=handleInterpolation(la,J,ua[Ma]),xa){var Ra=ba;Aa+=Ra[Ma]}labelPattern.lastIndex=0;for(var Ia="",La;(La=labelPattern.exec(Aa))!==null;)Ia+="-"+La[1];var Fa=murmur2(Aa)+Ia;return{name:Fa,styles:Aa,next:cursor}}function getRegisteredStyles(ua,J,la){var xa="";return la.split(" ").forEach(function(Aa){ua[Aa]!==void 0?J.push(ua[Aa]+";"):Aa&&(xa+=Aa+" ")}),xa}var registerStyles=function ua(J,la,xa){var Aa=J.key+"-"+la.name;J.registered[Aa]===void 0&&(J.registered[Aa]=la.styles)},insertStyles=function ua(J,la,xa){registerStyles(J,la);var Aa=J.key+"-"+la.name;if(J.inserted[la.name]===void 0){var ba=la;do J.insert(la===ba?"."+Aa:"",ba,J.sheet,!0),ba=ba.next;while(ba!==void 0)}};function insertWithoutScoping(ua,J){if(ua.inserted[J.name]===void 0)return ua.insert("",J,ua.sheet,!0)}function merge(ua,J,la){var xa=[],Aa=getRegisteredStyles(ua,xa,la);return xa.length<2?la:Aa+J(xa)}var createEmotion=function ua(J){var la=createCache(J);la.sheet.speedy=function(Ma){this.isSpeedy=Ma},la.compat=!0;var xa=function(){for(var Ra=arguments.length,Ia=new Array(Ra),La=0;La<Ra;La++)Ia[La]=arguments[La];var Fa=serializeStyles(Ia,la.registered,void 0);return insertStyles(la,Fa),la.key+"-"+Fa.name},Aa=function(){for(var Ra=arguments.length,Ia=new Array(Ra),La=0;La<Ra;La++)Ia[La]=arguments[La];var Fa=serializeStyles(Ia,la.registered),ka="animation-"+Fa.name;return insertWithoutScoping(la,{name:Fa.name,styles:"@keyframes "+ka+"{"+Fa.styles+"}"}),ka},ba=function(){for(var Ra=arguments.length,Ia=new Array(Ra),La=0;La<Ra;La++)Ia[La]=arguments[La];var Fa=serializeStyles(Ia,la.registered);insertWithoutScoping(la,Fa)},Sa=function(){for(var Ra=arguments.length,Ia=new Array(Ra),La=0;La<Ra;La++)Ia[La]=arguments[La];return merge(la.registered,xa,classnames(Ia))};return{css:xa,cx:Sa,injectGlobal:ba,keyframes:Aa,hydrate:function(Ra){Ra.forEach(function(Ia){la.inserted[Ia]=!0})},flush:function(){la.registered={},la.inserted={},la.sheet.flush()},sheet:la.sheet,cache:la,getRegisteredStyles:getRegisteredStyles.bind(null,la.registered),merge:merge.bind(null,la.registered,xa)}},classnames=function ua(J){for(var la="",xa=0;xa<J.length;xa++){var Aa=J[xa];if(Aa!=null){var ba=void 0;switch(typeof Aa){case"boolean":break;case"object":{if(Array.isArray(Aa))ba=ua(Aa);else{ba="";for(var Sa in Aa)Aa[Sa]&&Sa&&(ba&&(ba+=" "),ba+=Sa)}break}default:ba=Aa}ba&&(la&&(la+=" "),la+=ba)}}return la},_createEmotion=createEmotion({key:"css"}),css=_createEmotion.css;function findConnectedNetworks(ua){const J=new Map;let la=0;function xa(Aa){for(const[,Sa]of J)if(Sa.has(Aa))return Sa;const ba=new Set;return J.set(`connectivity_net${la++}`,ba),ba}for(const Aa of ua){let ba=null;for(const Sa of Aa){if(!ba)ba=xa(Sa);else if(!ba.has(Sa)){const Ma=xa(Sa);if(Ma!==ba){for(const Ra of Ma)ba.add(Ra);J.delete(Array.from(J.entries()).find(([,Ra])=>Ra===Ma)[0])}}ba.add(Sa)}}return Object.fromEntries(Array.from(J.entries()).map(([Aa,ba])=>[Aa,Array.from(ba)]))}var ConnectivityMap=class{constructor(ua){jp(this,"netMap");jp(this,"idToNetMap");this.netMap=ua,this.idToNetMap={};for(const[J,la]of Object.entries(ua))for(const xa of la)this.idToNetMap[xa]=J}addConnections(ua){for(const J of ua){const la=new Set;for(const Aa of J){const ba=this.idToNetMap[Aa];ba&&la.add(ba)}let xa;if(la.size===0)xa=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[xa]=[];else if(la.size===1)xa=la.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{xa=la.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(const Aa of la)if(Aa!==xa){this.netMap[xa].push(...this.netMap[Aa]),this.netMap[Aa]=this.netMap[xa];for(const ba of this.netMap[xa])this.idToNetMap[ba]=xa}}for(const Aa of J)this.netMap[xa].includes(Aa)||this.netMap[xa].push(Aa),this.idToNetMap[Aa]=xa}}getIdsConnectedToNet(ua){return this.netMap[ua]||[]}getNetConnectedToId(ua){return this.idToNetMap[ua]}areIdsConnected(ua,J){const la=this.getNetConnectedToId(ua),xa=this.getNetConnectedToId(J);return la===xa||xa===ua||xa===ua}areAllIdsConnected(ua){const J=this.getNetConnectedToId(ua[0]);for(const la of ua){const xa=this.getNetConnectedToId(la);if(xa===void 0||xa!==J)return!1}return!0}},getFullConnectivityMapFromCircuitJson=ua=>{const J=[];for(const xa of ua)if(xa.type==="source_trace")J.push([xa.source_trace_id,...xa.connected_source_port_ids??[],...xa.connected_source_net_ids??[]].filter(Boolean));else if(xa.type==="pcb_port"){const{pcb_port_id:Aa,source_port_id:ba}=xa;ba&&Aa&&J.push([ba,Aa])}else if(xa.type==="pcb_smtpad"){const{pcb_smtpad_id:Aa,pcb_port_id:ba}=xa;ba&&Aa&&J.push([Aa,ba])}else if(xa.type==="pcb_plated_hole"){const{pcb_plated_hole_id:Aa,pcb_port_id:ba}=xa;ba&&Aa&&J.push([Aa,ba])}else if(xa.type==="pcb_trace"){const{pcb_trace_id:Aa,source_trace_id:ba}=xa;ba&&Aa&&J.push([Aa,ba])}const la=findConnectedNetworks(J);return new ConnectivityMap(la)},__defProp=Object.defineProperty,__export=(ua,J)=>{for(var la in J)__defProp(ua,la,{get:J[la],enumerable:!0})},dist_exports={};__export(dist_exports,{all_layers:()=>all_layers,any_circuit_element:()=>any_circuit_element,any_soup_element:()=>any_soup_element,any_source_component:()=>any_source_component,battery_capacity:()=>battery_capacity,cad_component:()=>cad_component,capacitance:()=>capacitance,current:()=>current,distance:()=>distance,frequency:()=>frequency,getZodPrefixedIdWithDefault:()=>getZodPrefixedIdWithDefault,inductance:()=>inductance,layer_ref:()=>layer_ref,layer_string:()=>layer_string,length:()=>length2,pcb_board:()=>pcb_board,pcb_component:()=>pcb_component,pcb_fabrication_note_path:()=>pcb_fabrication_note_path,pcb_fabrication_note_text:()=>pcb_fabrication_note_text,pcb_group:()=>pcb_group,pcb_hole:()=>pcb_hole,pcb_hole_circle_or_square_shape:()=>pcb_hole_circle_or_square_shape,pcb_hole_oval_shape:()=>pcb_hole_oval_shape,pcb_keepout:()=>pcb_keepout,pcb_manual_edit_conflict_error:()=>pcb_manual_edit_conflict_error,pcb_missing_footprint_error:()=>pcb_missing_footprint_error,pcb_placement_error:()=>pcb_placement_error,pcb_plated_hole:()=>pcb_plated_hole,pcb_port:()=>pcb_port,pcb_port_not_matched_error:()=>pcb_port_not_matched_error,pcb_route_hint:()=>pcb_route_hint,pcb_route_hints:()=>pcb_route_hints,pcb_silkscreen_circle:()=>pcb_silkscreen_circle,pcb_silkscreen_line:()=>pcb_silkscreen_line,pcb_silkscreen_oval:()=>pcb_silkscreen_oval,pcb_silkscreen_path:()=>pcb_silkscreen_path,pcb_silkscreen_rect:()=>pcb_silkscreen_rect,pcb_silkscreen_text:()=>pcb_silkscreen_text,pcb_smtpad:()=>pcb_smtpad,pcb_solder_paste:()=>pcb_solder_paste,pcb_text:()=>pcb_text,pcb_trace:()=>pcb_trace,pcb_trace_error:()=>pcb_trace_error,pcb_trace_hint:()=>pcb_trace_hint,pcb_trace_route_point:()=>pcb_trace_route_point,pcb_trace_route_point_via:()=>pcb_trace_route_point_via,pcb_trace_route_point_wire:()=>pcb_trace_route_point_wire,pcb_via:()=>pcb_via,point:()=>point,point3:()=>point3,port_arrangement:()=>port_arrangement,position:()=>position,position3:()=>position3,resistance:()=>resistance,rotation:()=>rotation,route_hint_point:()=>route_hint_point,schematic_box:()=>schematic_box,schematic_component:()=>schematic_component,schematic_component_port_arrangement_by_sides:()=>schematic_component_port_arrangement_by_sides,schematic_component_port_arrangement_by_size:()=>schematic_component_port_arrangement_by_size,schematic_debug_line:()=>schematic_debug_line,schematic_debug_object:()=>schematic_debug_object,schematic_debug_object_base:()=>schematic_debug_object_base,schematic_debug_point:()=>schematic_debug_point,schematic_debug_rect:()=>schematic_debug_rect,schematic_error:()=>schematic_error,schematic_line:()=>schematic_line,schematic_net_label:()=>schematic_net_label,schematic_path:()=>schematic_path,schematic_pin_styles:()=>schematic_pin_styles,schematic_port:()=>schematic_port,schematic_text:()=>schematic_text,schematic_trace:()=>schematic_trace,schematic_voltage_probe:()=>schematic_voltage_probe,size:()=>size$3,source_component_base:()=>source_component_base,source_group:()=>source_group,source_led:()=>source_led,source_net:()=>source_net,source_port:()=>source_port,source_simple_battery:()=>source_simple_battery,source_simple_bug:()=>source_simple_bug,source_simple_capacitor:()=>source_simple_capacitor,source_simple_chip:()=>source_simple_chip,source_simple_crystal:()=>source_simple_crystal,source_simple_diode:()=>source_simple_diode,source_simple_ground:()=>source_simple_ground,source_simple_inductor:()=>source_simple_inductor,source_simple_mosfet:()=>source_simple_mosfet,source_simple_pin_header:()=>source_simple_pin_header,source_simple_potentiometer:()=>source_simple_potentiometer,source_simple_power_source:()=>source_simple_power_source,source_simple_push_button:()=>source_simple_push_button,source_simple_resistor:()=>source_simple_resistor,source_simple_resonator:()=>source_simple_resonator,source_simple_transistor:()=>source_simple_transistor,source_trace:()=>source_trace,supplier_name:()=>supplier_name,time:()=>time,visible_layer:()=>visible_layer,voltage:()=>voltage});var util;(function(ua){ua.assertEqual=Aa=>Aa;function J(Aa){}ua.assertIs=J;function la(Aa){throw new Error}ua.assertNever=la,ua.arrayToEnum=Aa=>{const ba={};for(const Sa of Aa)ba[Sa]=Sa;return ba},ua.getValidEnumValues=Aa=>{const ba=ua.objectKeys(Aa).filter(Ma=>typeof Aa[Aa[Ma]]!="number"),Sa={};for(const Ma of ba)Sa[Ma]=Aa[Ma];return ua.objectValues(Sa)},ua.objectValues=Aa=>ua.objectKeys(Aa).map(function(ba){return Aa[ba]}),ua.objectKeys=typeof Object.keys=="function"?Aa=>Object.keys(Aa):Aa=>{const ba=[];for(const Sa in Aa)Object.prototype.hasOwnProperty.call(Aa,Sa)&&ba.push(Sa);return ba},ua.find=(Aa,ba)=>{for(const Sa of Aa)if(ba(Sa))return Sa},ua.isInteger=typeof Number.isInteger=="function"?Aa=>Number.isInteger(Aa):Aa=>typeof Aa=="number"&&isFinite(Aa)&&Math.floor(Aa)===Aa;function xa(Aa,ba=" | "){return Aa.map(Sa=>typeof Sa=="string"?`'${Sa}'`:Sa).join(ba)}ua.joinValues=xa,ua.jsonStringifyReplacer=(Aa,ba)=>typeof ba=="bigint"?ba.toString():ba})(util||(util={}));var objectUtil;(function(ua){ua.mergeShapes=(J,la)=>({...J,...la})})(objectUtil||(objectUtil={}));var ZodParsedType=util.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),getParsedType=ua=>{switch(typeof ua){case"undefined":return ZodParsedType.undefined;case"string":return ZodParsedType.string;case"number":return isNaN(ua)?ZodParsedType.nan:ZodParsedType.number;case"boolean":return ZodParsedType.boolean;case"function":return ZodParsedType.function;case"bigint":return ZodParsedType.bigint;case"symbol":return ZodParsedType.symbol;case"object":return Array.isArray(ua)?ZodParsedType.array:ua===null?ZodParsedType.null:ua.then&&typeof ua.then=="function"&&ua.catch&&typeof ua.catch=="function"?ZodParsedType.promise:typeof Map<"u"&&ua instanceof Map?ZodParsedType.map:typeof Set<"u"&&ua instanceof Set?ZodParsedType.set:typeof Date<"u"&&ua instanceof Date?ZodParsedType.date:ZodParsedType.object;default:return ZodParsedType.unknown}},ZodIssueCode=util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),quotelessJson=ua=>JSON.stringify(ua,null,2).replace(/"([^"]+)":/g,"$1:"),ZodError=class zw extends Error{get errors(){return this.issues}constructor(J){super(),this.issues=[],this.addIssue=xa=>{this.issues=[...this.issues,xa]},this.addIssues=(xa=[])=>{this.issues=[...this.issues,...xa]};const la=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,la):this.__proto__=la,this.name="ZodError",this.issues=J}format(J){const la=J||function(ba){return ba.message},xa={_errors:[]},Aa=ba=>{for(const Sa of ba.issues)if(Sa.code==="invalid_union")Sa.unionErrors.map(Aa);else if(Sa.code==="invalid_return_type")Aa(Sa.returnTypeError);else if(Sa.code==="invalid_arguments")Aa(Sa.argumentsError);else if(Sa.path.length===0)xa._errors.push(la(Sa));else{let Ma=xa,Ra=0;for(;Ra<Sa.path.length;){const Ia=Sa.path[Ra];Ra===Sa.path.length-1?(Ma[Ia]=Ma[Ia]||{_errors:[]},Ma[Ia]._errors.push(la(Sa))):Ma[Ia]=Ma[Ia]||{_errors:[]},Ma=Ma[Ia],Ra++}}};return Aa(this),xa}static assert(J){if(!(J instanceof zw))throw new Error(`Not a ZodError: ${J}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(J=la=>la.message){const la={},xa=[];for(const Aa of this.issues)Aa.path.length>0?(la[Aa.path[0]]=la[Aa.path[0]]||[],la[Aa.path[0]].push(J(Aa))):xa.push(J(Aa));return{formErrors:xa,fieldErrors:la}}get formErrors(){return this.flatten()}};ZodError.create=ua=>new ZodError(ua);var errorMap=(ua,J)=>{let la;switch(ua.code){case ZodIssueCode.invalid_type:ua.received===ZodParsedType.undefined?la="Required":la=`Expected ${ua.expected}, received ${ua.received}`;break;case ZodIssueCode.invalid_literal:la=`Invalid literal value, expected ${JSON.stringify(ua.expected,util.jsonStringifyReplacer)}`;break;case ZodIssueCode.unrecognized_keys:la=`Unrecognized key(s) in object: ${util.joinValues(ua.keys,", ")}`;break;case ZodIssueCode.invalid_union:la="Invalid input";break;case ZodIssueCode.invalid_union_discriminator:la=`Invalid discriminator value. Expected ${util.joinValues(ua.options)}`;break;case ZodIssueCode.invalid_enum_value:la=`Invalid enum value. Expected ${util.joinValues(ua.options)}, received '${ua.received}'`;break;case ZodIssueCode.invalid_arguments:la="Invalid function arguments";break;case ZodIssueCode.invalid_return_type:la="Invalid function return type";break;case ZodIssueCode.invalid_date:la="Invalid date";break;case ZodIssueCode.invalid_string:typeof ua.validation=="object"?"includes"in ua.validation?(la=`Invalid input: must include "${ua.validation.includes}"`,typeof ua.validation.position=="number"&&(la=`${la} at one or more positions greater than or equal to ${ua.validation.position}`)):"startsWith"in ua.validation?la=`Invalid input: must start with "${ua.validation.startsWith}"`:"endsWith"in ua.validation?la=`Invalid input: must end with "${ua.validation.endsWith}"`:util.assertNever(ua.validation):ua.validation!=="regex"?la=`Invalid ${ua.validation}`:la="Invalid";break;case ZodIssueCode.too_small:ua.type==="array"?la=`Array must contain ${ua.exact?"exactly":ua.inclusive?"at least":"more than"} ${ua.minimum} element(s)`:ua.type==="string"?la=`String must contain ${ua.exact?"exactly":ua.inclusive?"at least":"over"} ${ua.minimum} character(s)`:ua.type==="number"?la=`Number must be ${ua.exact?"exactly equal to ":ua.inclusive?"greater than or equal to ":"greater than "}${ua.minimum}`:ua.type==="date"?la=`Date must be ${ua.exact?"exactly equal to ":ua.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(ua.minimum))}`:la="Invalid input";break;case ZodIssueCode.too_big:ua.type==="array"?la=`Array must contain ${ua.exact?"exactly":ua.inclusive?"at most":"less than"} ${ua.maximum} element(s)`:ua.type==="string"?la=`String must contain ${ua.exact?"exactly":ua.inclusive?"at most":"under"} ${ua.maximum} character(s)`:ua.type==="number"?la=`Number must be ${ua.exact?"exactly":ua.inclusive?"less than or equal to":"less than"} ${ua.maximum}`:ua.type==="bigint"?la=`BigInt must be ${ua.exact?"exactly":ua.inclusive?"less than or equal to":"less than"} ${ua.maximum}`:ua.type==="date"?la=`Date must be ${ua.exact?"exactly":ua.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(ua.maximum))}`:la="Invalid input";break;case ZodIssueCode.custom:la="Invalid input";break;case ZodIssueCode.invalid_intersection_types:la="Intersection results could not be merged";break;case ZodIssueCode.not_multiple_of:la=`Number must be a multiple of ${ua.multipleOf}`;break;case ZodIssueCode.not_finite:la="Number must be finite";break;default:la=J.defaultError,util.assertNever(ua)}return{message:la}},overrideErrorMap=errorMap;function setErrorMap(ua){overrideErrorMap=ua}function getErrorMap(){return overrideErrorMap}var makeIssue=ua=>{const{data:J,path:la,errorMaps:xa,issueData:Aa}=ua,ba=[...la,...Aa.path||[]],Sa={...Aa,path:ba};if(Aa.message!==void 0)return{...Aa,path:ba,message:Aa.message};let Ma="";const Ra=xa.filter(Ia=>!!Ia).slice().reverse();for(const Ia of Ra)Ma=Ia(Sa,{data:J,defaultError:Ma}).message;return{...Aa,path:ba,message:Ma}},EMPTY_PATH=[];function addIssueToContext(ua,J){const la=getErrorMap(),xa=makeIssue({issueData:J,data:ua.data,path:ua.path,errorMaps:[ua.common.contextualErrorMap,ua.schemaErrorMap,la,la===errorMap?void 0:errorMap].filter(Aa=>!!Aa)});ua.common.issues.push(xa)}var ParseStatus=class $w{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(J,la){const xa=[];for(const Aa of la){if(Aa.status==="aborted")return INVALID;Aa.status==="dirty"&&J.dirty(),xa.push(Aa.value)}return{status:J.value,value:xa}}static async mergeObjectAsync(J,la){const xa=[];for(const Aa of la){const ba=await Aa.key,Sa=await Aa.value;xa.push({key:ba,value:Sa})}return $w.mergeObjectSync(J,xa)}static mergeObjectSync(J,la){const xa={};for(const Aa of la){const{key:ba,value:Sa}=Aa;if(ba.status==="aborted"||Sa.status==="aborted")return INVALID;ba.status==="dirty"&&J.dirty(),Sa.status==="dirty"&&J.dirty(),ba.value!=="__proto__"&&(typeof Sa.value<"u"||Aa.alwaysSet)&&(xa[ba.value]=Sa.value)}return{status:J.value,value:xa}}},INVALID=Object.freeze({status:"aborted"}),DIRTY=ua=>({status:"dirty",value:ua}),OK=ua=>({status:"valid",value:ua}),isAborted=ua=>ua.status==="aborted",isDirty=ua=>ua.status==="dirty",isValid=ua=>ua.status==="valid",isAsync=ua=>typeof Promise<"u"&&ua instanceof Promise;function __classPrivateFieldGet(ua,J,la,xa){if(typeof J=="function"?ua!==J||!xa:!J.has(ua))throw new TypeError("Cannot read private member from an object whose class did not declare it");return J.get(ua)}function __classPrivateFieldSet(ua,J,la,xa,Aa){if(typeof J=="function"?ua!==J||!Aa:!J.has(ua))throw new TypeError("Cannot write private member to an object whose class did not declare it");return J.set(ua,la),la}var errorUtil;(function(ua){ua.errToObj=J=>typeof J=="string"?{message:J}:J||{},ua.toString=J=>typeof J=="string"?J:J==null?void 0:J.message})(errorUtil||(errorUtil={}));var _ZodEnum_cache,_ZodNativeEnum_cache,ParseInputLazyPath=class{constructor(ua,J,la,xa){this._cachedPath=[],this.parent=ua,this.data=J,this._path=la,this._key=xa}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},handleResult=(ua,J)=>{if(isValid(J))return{success:!0,data:J.value};if(!ua.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const la=new ZodError(ua.common.issues);return this._error=la,this._error}}};function processCreateParams(ua){if(!ua)return{};const{errorMap:J,invalid_type_error:la,required_error:xa,description:Aa}=ua;if(J&&(la||xa))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return J?{errorMap:J,description:Aa}:{errorMap:(Sa,Ma)=>{var Ra,Ia;const{message:La}=ua;return Sa.code==="invalid_enum_value"?{message:La??Ma.defaultError}:typeof Ma.data>"u"?{message:(Ra=La??xa)!==null&&Ra!==void 0?Ra:Ma.defaultError}:Sa.code!=="invalid_type"?{message:Ma.defaultError}:{message:(Ia=La??la)!==null&&Ia!==void 0?Ia:Ma.defaultError}},description:Aa}}var ZodType=class{get description(){return this._def.description}_getType(ua){return getParsedType(ua.data)}_getOrReturnCtx(ua,J){return J||{common:ua.parent.common,data:ua.data,parsedType:getParsedType(ua.data),schemaErrorMap:this._def.errorMap,path:ua.path,parent:ua.parent}}_processInputParams(ua){return{status:new ParseStatus,ctx:{common:ua.parent.common,data:ua.data,parsedType:getParsedType(ua.data),schemaErrorMap:this._def.errorMap,path:ua.path,parent:ua.parent}}}_parseSync(ua){const J=this._parse(ua);if(isAsync(J))throw new Error("Synchronous parse encountered promise.");return J}_parseAsync(ua){const J=this._parse(ua);return Promise.resolve(J)}parse(ua,J){const la=this.safeParse(ua,J);if(la.success)return la.data;throw la.error}safeParse(ua,J){var la;const xa={common:{issues:[],async:(la=J==null?void 0:J.async)!==null&&la!==void 0?la:!1,contextualErrorMap:J==null?void 0:J.errorMap},path:(J==null?void 0:J.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:ua,parsedType:getParsedType(ua)},Aa=this._parseSync({data:ua,path:xa.path,parent:xa});return handleResult(xa,Aa)}"~validate"(ua){var J,la;const xa={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:ua,parsedType:getParsedType(ua)};if(!this["~standard"].async)try{const Aa=this._parseSync({data:ua,path:[],parent:xa});return isValid(Aa)?{value:Aa.value}:{issues:xa.common.issues}}catch(Aa){!((la=(J=Aa==null?void 0:Aa.message)===null||J===void 0?void 0:J.toLowerCase())===null||la===void 0)&&la.includes("encountered")&&(this["~standard"].async=!0),xa.common={issues:[],async:!0}}return this._parseAsync({data:ua,path:[],parent:xa}).then(Aa=>isValid(Aa)?{value:Aa.value}:{issues:xa.common.issues})}async parseAsync(ua,J){const la=await this.safeParseAsync(ua,J);if(la.success)return la.data;throw la.error}async safeParseAsync(ua,J){const la={common:{issues:[],contextualErrorMap:J==null?void 0:J.errorMap,async:!0},path:(J==null?void 0:J.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:ua,parsedType:getParsedType(ua)},xa=this._parse({data:ua,path:la.path,parent:la}),Aa=await(isAsync(xa)?xa:Promise.resolve(xa));return handleResult(la,Aa)}refine(ua,J){const la=xa=>typeof J=="string"||typeof J>"u"?{message:J}:typeof J=="function"?J(xa):J;return this._refinement((xa,Aa)=>{const ba=ua(xa),Sa=()=>Aa.addIssue({code:ZodIssueCode.custom,...la(xa)});return typeof Promise<"u"&&ba instanceof Promise?ba.then(Ma=>Ma?!0:(Sa(),!1)):ba?!0:(Sa(),!1)})}refinement(ua,J){return this._refinement((la,xa)=>ua(la)?!0:(xa.addIssue(typeof J=="function"?J(la,xa):J),!1))}_refinement(ua){return new ZodEffects({schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:"refinement",refinement:ua}})}superRefine(ua){return this._refinement(ua)}constructor(ua){this.spa=this.safeParseAsync,this._def=ua,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:J=>this["~validate"](J)}}optional(){return ZodOptional.create(this,this._def)}nullable(){return ZodNullable.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ZodArray.create(this)}promise(){return ZodPromise.create(this,this._def)}or(ua){return ZodUnion.create([this,ua],this._def)}and(ua){return ZodIntersection.create(this,ua,this._def)}transform(ua){return new ZodEffects({...processCreateParams(this._def),schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:"transform",transform:ua}})}default(ua){const J=typeof ua=="function"?ua:()=>ua;return new ZodDefault({...processCreateParams(this._def),innerType:this,defaultValue:J,typeName:ZodFirstPartyTypeKind.ZodDefault})}brand(){return new ZodBranded({typeName:ZodFirstPartyTypeKind.ZodBranded,type:this,...processCreateParams(this._def)})}catch(ua){const J=typeof ua=="function"?ua:()=>ua;return new ZodCatch({...processCreateParams(this._def),innerType:this,catchValue:J,typeName:ZodFirstPartyTypeKind.ZodCatch})}describe(ua){const J=this.constructor;return new J({...this._def,description:ua})}pipe(ua){return ZodPipeline.create(this,ua)}readonly(){return ZodReadonly.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},cuidRegex=/^c[^\s-]{8,}$/i,cuid2Regex=/^[0-9a-z]+$/,ulidRegex=/^[0-9A-HJKMNP-TV-Z]{26}$/i,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,nanoidRegex=/^[a-z0-9_-]{21}$/i,jwtRegex=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,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)?)??$/,emailRegex=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,_emojiRegex="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",emojiRegex,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])$/,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])$/,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]))$/,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])$/,base64Regex=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64urlRegex=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,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])))",dateRegex=new RegExp(`^${dateRegexSource}$`);function timeRegexSource(ua){let J="([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";return ua.precision?J=`${J}\\.\\d{${ua.precision}}`:ua.precision==null&&(J=`${J}(\\.\\d+)?`),J}function timeRegex(ua){return new RegExp(`^${timeRegexSource(ua)}$`)}function datetimeRegex(ua){let J=`${dateRegexSource}T${timeRegexSource(ua)}`;const la=[];return la.push(ua.local?"Z?":"Z"),ua.offset&&la.push("([+-]\\d{2}:?\\d{2})"),J=`${J}(${la.join("|")})`,new RegExp(`^${J}$`)}function isValidIP(ua,J){return!!((J==="v4"||!J)&&ipv4Regex.test(ua)||(J==="v6"||!J)&&ipv6Regex.test(ua))}function isValidJWT(ua,J){if(!jwtRegex.test(ua))return!1;try{const[la]=ua.split("."),xa=la.replace(/-/g,"+").replace(/_/g,"/").padEnd(la.length+(4-la.length%4)%4,"="),Aa=JSON.parse(atob(xa));return!(typeof Aa!="object"||Aa===null||!Aa.typ||!Aa.alg||J&&Aa.alg!==J)}catch{return!1}}function isValidCidr(ua,J){return!!((J==="v4"||!J)&&ipv4CidrRegex.test(ua)||(J==="v6"||!J)&&ipv6CidrRegex.test(ua))}var ZodString=class sE extends ZodType{_parse(J){if(this._def.coerce&&(J.data=String(J.data)),this._getType(J)!==ZodParsedType.string){const ba=this._getOrReturnCtx(J);return addIssueToContext(ba,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.string,received:ba.parsedType}),INVALID}const xa=new ParseStatus;let Aa;for(const ba of this._def.checks)if(ba.kind==="min")J.data.length<ba.value&&(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.too_small,minimum:ba.value,type:"string",inclusive:!0,exact:!1,message:ba.message}),xa.dirty());else if(ba.kind==="max")J.data.length>ba.value&&(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.too_big,maximum:ba.value,type:"string",inclusive:!0,exact:!1,message:ba.message}),xa.dirty());else if(ba.kind==="length"){const Sa=J.data.length>ba.value,Ma=J.data.length<ba.value;(Sa||Ma)&&(Aa=this._getOrReturnCtx(J,Aa),Sa?addIssueToContext(Aa,{code:ZodIssueCode.too_big,maximum:ba.value,type:"string",inclusive:!0,exact:!0,message:ba.message}):Ma&&addIssueToContext(Aa,{code:ZodIssueCode.too_small,minimum:ba.value,type:"string",inclusive:!0,exact:!0,message:ba.message}),xa.dirty())}else if(ba.kind==="email")emailRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"email",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty());else if(ba.kind==="emoji")emojiRegex||(emojiRegex=new RegExp(_emojiRegex,"u")),emojiRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"emoji",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty());else if(ba.kind==="uuid")uuidRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"uuid",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty());else if(ba.kind==="nanoid")nanoidRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"nanoid",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty());else if(ba.kind==="cuid")cuidRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"cuid",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty());else if(ba.kind==="cuid2")cuid2Regex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"cuid2",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty());else if(ba.kind==="ulid")ulidRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"ulid",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty());else if(ba.kind==="url")try{new URL(J.data)}catch{Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"url",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty()}else ba.kind==="regex"?(ba.regex.lastIndex=0,ba.regex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"regex",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty())):ba.kind==="trim"?J.data=J.data.trim():ba.kind==="includes"?J.data.includes(ba.value,ba.position)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.invalid_string,validation:{includes:ba.value,position:ba.position},message:ba.message}),xa.dirty()):ba.kind==="toLowerCase"?J.data=J.data.toLowerCase():ba.kind==="toUpperCase"?J.data=J.data.toUpperCase():ba.kind==="startsWith"?J.data.startsWith(ba.value)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.invalid_string,validation:{startsWith:ba.value},message:ba.message}),xa.dirty()):ba.kind==="endsWith"?J.data.endsWith(ba.value)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.invalid_string,validation:{endsWith:ba.value},message:ba.message}),xa.dirty()):ba.kind==="datetime"?datetimeRegex(ba).test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.invalid_string,validation:"datetime",message:ba.message}),xa.dirty()):ba.kind==="date"?dateRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.invalid_string,validation:"date",message:ba.message}),xa.dirty()):ba.kind==="time"?timeRegex(ba).test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.invalid_string,validation:"time",message:ba.message}),xa.dirty()):ba.kind==="duration"?durationRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"duration",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty()):ba.kind==="ip"?isValidIP(J.data,ba.version)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"ip",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty()):ba.kind==="jwt"?isValidJWT(J.data,ba.alg)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"jwt",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty()):ba.kind==="cidr"?isValidCidr(J.data,ba.version)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"cidr",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty()):ba.kind==="base64"?base64Regex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"base64",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty()):ba.kind==="base64url"?base64urlRegex.test(J.data)||(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{validation:"base64url",code:ZodIssueCode.invalid_string,message:ba.message}),xa.dirty()):util.assertNever(ba);return{status:xa.value,value:J.data}}_regex(J,la,xa){return this.refinement(Aa=>J.test(Aa),{validation:la,code:ZodIssueCode.invalid_string,...errorUtil.errToObj(xa)})}_addCheck(J){return new sE({...this._def,checks:[...this._def.checks,J]})}email(J){return this._addCheck({kind:"email",...errorUtil.errToObj(J)})}url(J){return this._addCheck({kind:"url",...errorUtil.errToObj(J)})}emoji(J){return this._addCheck({kind:"emoji",...errorUtil.errToObj(J)})}uuid(J){return this._addCheck({kind:"uuid",...errorUtil.errToObj(J)})}nanoid(J){return this._addCheck({kind:"nanoid",...errorUtil.errToObj(J)})}cuid(J){return this._addCheck({kind:"cuid",...errorUtil.errToObj(J)})}cuid2(J){return this._addCheck({kind:"cuid2",...errorUtil.errToObj(J)})}ulid(J){return this._addCheck({kind:"ulid",...errorUtil.errToObj(J)})}base64(J){return this._addCheck({kind:"base64",...errorUtil.errToObj(J)})}base64url(J){return this._addCheck({kind:"base64url",...errorUtil.errToObj(J)})}jwt(J){return this._addCheck({kind:"jwt",...errorUtil.errToObj(J)})}ip(J){return this._addCheck({kind:"ip",...errorUtil.errToObj(J)})}cidr(J){return this._addCheck({kind:"cidr",...errorUtil.errToObj(J)})}datetime(J){var la,xa;return typeof J=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:J}):this._addCheck({kind:"datetime",precision:typeof(J==null?void 0:J.precision)>"u"?null:J==null?void 0:J.precision,offset:(la=J==null?void 0:J.offset)!==null&&la!==void 0?la:!1,local:(xa=J==null?void 0:J.local)!==null&&xa!==void 0?xa:!1,...errorUtil.errToObj(J==null?void 0:J.message)})}date(J){return this._addCheck({kind:"date",message:J})}time(J){return typeof J=="string"?this._addCheck({kind:"time",precision:null,message:J}):this._addCheck({kind:"time",precision:typeof(J==null?void 0:J.precision)>"u"?null:J==null?void 0:J.precision,...errorUtil.errToObj(J==null?void 0:J.message)})}duration(J){return this._addCheck({kind:"duration",...errorUtil.errToObj(J)})}regex(J,la){return this._addCheck({kind:"regex",regex:J,...errorUtil.errToObj(la)})}includes(J,la){return this._addCheck({kind:"includes",value:J,position:la==null?void 0:la.position,...errorUtil.errToObj(la==null?void 0:la.message)})}startsWith(J,la){return this._addCheck({kind:"startsWith",value:J,...errorUtil.errToObj(la)})}endsWith(J,la){return this._addCheck({kind:"endsWith",value:J,...errorUtil.errToObj(la)})}min(J,la){return this._addCheck({kind:"min",value:J,...errorUtil.errToObj(la)})}max(J,la){return this._addCheck({kind:"max",value:J,...errorUtil.errToObj(la)})}length(J,la){return this._addCheck({kind:"length",value:J,...errorUtil.errToObj(la)})}nonempty(J){return this.min(1,errorUtil.errToObj(J))}trim(){return new sE({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new sE({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new sE({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(J=>J.kind==="datetime")}get isDate(){return!!this._def.checks.find(J=>J.kind==="date")}get isTime(){return!!this._def.checks.find(J=>J.kind==="time")}get isDuration(){return!!this._def.checks.find(J=>J.kind==="duration")}get isEmail(){return!!this._def.checks.find(J=>J.kind==="email")}get isURL(){return!!this._def.checks.find(J=>J.kind==="url")}get isEmoji(){return!!this._def.checks.find(J=>J.kind==="emoji")}get isUUID(){return!!this._def.checks.find(J=>J.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(J=>J.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(J=>J.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(J=>J.kind==="cuid2")}get isULID(){return!!this._def.checks.find(J=>J.kind==="ulid")}get isIP(){return!!this._def.checks.find(J=>J.kind==="ip")}get isCIDR(){return!!this._def.checks.find(J=>J.kind==="cidr")}get isBase64(){return!!this._def.checks.find(J=>J.kind==="base64")}get isBase64url(){return!!this._def.checks.find(J=>J.kind==="base64url")}get minLength(){let J=null;for(const la of this._def.checks)la.kind==="min"&&(J===null||la.value>J)&&(J=la.value);return J}get maxLength(){let J=null;for(const la of this._def.checks)la.kind==="max"&&(J===null||la.value<J)&&(J=la.value);return J}};ZodString.create=ua=>{var J;return new ZodString({checks:[],typeName:ZodFirstPartyTypeKind.ZodString,coerce:(J=ua==null?void 0:ua.coerce)!==null&&J!==void 0?J:!1,...processCreateParams(ua)})};function floatSafeRemainder(ua,J){const la=(ua.toString().split(".")[1]||"").length,xa=(J.toString().split(".")[1]||"").length,Aa=la>xa?la:xa,ba=parseInt(ua.toFixed(Aa).replace(".","")),Sa=parseInt(J.toFixed(Aa).replace(".",""));return ba%Sa/Math.pow(10,Aa)}var ZodNumber=class jT extends ZodType{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(J){if(this._def.coerce&&(J.data=Number(J.data)),this._getType(J)!==ZodParsedType.number){const ba=this._getOrReturnCtx(J);return addIssueToContext(ba,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.number,received:ba.parsedType}),INVALID}let xa;const Aa=new ParseStatus;for(const ba of this._def.checks)ba.kind==="int"?util.isInteger(J.data)||(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.invalid_type,expected:"integer",received:"float",message:ba.message}),Aa.dirty()):ba.kind==="min"?(ba.inclusive?J.data<ba.value:J.data<=ba.value)&&(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.too_small,minimum:ba.value,type:"number",inclusive:ba.inclusive,exact:!1,message:ba.message}),Aa.dirty()):ba.kind==="max"?(ba.inclusive?J.data>ba.value:J.data>=ba.value)&&(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.too_big,maximum:ba.value,type:"number",inclusive:ba.inclusive,exact:!1,message:ba.message}),Aa.dirty()):ba.kind==="multipleOf"?floatSafeRemainder(J.data,ba.value)!==0&&(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.not_multiple_of,multipleOf:ba.value,message:ba.message}),Aa.dirty()):ba.kind==="finite"?Number.isFinite(J.data)||(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.not_finite,message:ba.message}),Aa.dirty()):util.assertNever(ba);return{status:Aa.value,value:J.data}}gte(J,la){return this.setLimit("min",J,!0,errorUtil.toString(la))}gt(J,la){return this.setLimit("min",J,!1,errorUtil.toString(la))}lte(J,la){return this.setLimit("max",J,!0,errorUtil.toString(la))}lt(J,la){return this.setLimit("max",J,!1,errorUtil.toString(la))}setLimit(J,la,xa,Aa){return new jT({...this._def,checks:[...this._def.checks,{kind:J,value:la,inclusive:xa,message:errorUtil.toString(Aa)}]})}_addCheck(J){return new jT({...this._def,checks:[...this._def.checks,J]})}int(J){return this._addCheck({kind:"int",message:errorUtil.toString(J)})}positive(J){return this._addCheck({kind:"min",value:0,inclusive:!1,message:errorUtil.toString(J)})}negative(J){return this._addCheck({kind:"max",value:0,inclusive:!1,message:errorUtil.toString(J)})}nonpositive(J){return this._addCheck({kind:"max",value:0,inclusive:!0,message:errorUtil.toString(J)})}nonnegative(J){return this._addCheck({kind:"min",value:0,inclusive:!0,message:errorUtil.toString(J)})}multipleOf(J,la){return this._addCheck({kind:"multipleOf",value:J,message:errorUtil.toString(la)})}finite(J){return this._addCheck({kind:"finite",message:errorUtil.toString(J)})}safe(J){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:errorUtil.toString(J)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:errorUtil.toString(J)})}get minValue(){let J=null;for(const la of this._def.checks)la.kind==="min"&&(J===null||la.value>J)&&(J=la.value);return J}get maxValue(){let J=null;for(const la of this._def.checks)la.kind==="max"&&(J===null||la.value<J)&&(J=la.value);return J}get isInt(){return!!this._def.checks.find(J=>J.kind==="int"||J.kind==="multipleOf"&&util.isInteger(J.value))}get isFinite(){let J=null,la=null;for(const xa of this._def.checks){if(xa.kind==="finite"||xa.kind==="int"||xa.kind==="multipleOf")return!0;xa.kind==="min"?(la===null||xa.value>la)&&(la=xa.value):xa.kind==="max"&&(J===null||xa.value<J)&&(J=xa.value)}return Number.isFinite(la)&&Number.isFinite(J)}};ZodNumber.create=ua=>new ZodNumber({checks:[],typeName:ZodFirstPartyTypeKind.ZodNumber,coerce:(ua==null?void 0:ua.coerce)||!1,...processCreateParams(ua)});var ZodBigInt=class QT extends ZodType{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(J){if(this._def.coerce)try{J.data=BigInt(J.data)}catch{return this._getInvalidInput(J)}if(this._getType(J)!==ZodParsedType.bigint)return this._getInvalidInput(J);let xa;const Aa=new ParseStatus;for(const ba of this._def.checks)ba.kind==="min"?(ba.inclusive?J.data<ba.value:J.data<=ba.value)&&(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.too_small,type:"bigint",minimum:ba.value,inclusive:ba.inclusive,message:ba.message}),Aa.dirty()):ba.kind==="max"?(ba.inclusive?J.data>ba.value:J.data>=ba.value)&&(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.too_big,type:"bigint",maximum:ba.value,inclusive:ba.inclusive,message:ba.message}),Aa.dirty()):ba.kind==="multipleOf"?J.data%ba.value!==BigInt(0)&&(xa=this._getOrReturnCtx(J,xa),addIssueToContext(xa,{code:ZodIssueCode.not_multiple_of,multipleOf:ba.value,message:ba.message}),Aa.dirty()):util.assertNever(ba);return{status:Aa.value,value:J.data}}_getInvalidInput(J){const la=this._getOrReturnCtx(J);return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.bigint,received:la.parsedType}),INVALID}gte(J,la){return this.setLimit("min",J,!0,errorUtil.toString(la))}gt(J,la){return this.setLimit("min",J,!1,errorUtil.toString(la))}lte(J,la){return this.setLimit("max",J,!0,errorUtil.toString(la))}lt(J,la){return this.setLimit("max",J,!1,errorUtil.toString(la))}setLimit(J,la,xa,Aa){return new QT({...this._def,checks:[...this._def.checks,{kind:J,value:la,inclusive:xa,message:errorUtil.toString(Aa)}]})}_addCheck(J){return new QT({...this._def,checks:[...this._def.checks,J]})}positive(J){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:errorUtil.toString(J)})}negative(J){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:errorUtil.toString(J)})}nonpositive(J){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:errorUtil.toString(J)})}nonnegative(J){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:errorUtil.toString(J)})}multipleOf(J,la){return this._addCheck({kind:"multipleOf",value:J,message:errorUtil.toString(la)})}get minValue(){let J=null;for(const la of this._def.checks)la.kind==="min"&&(J===null||la.value>J)&&(J=la.value);return J}get maxValue(){let J=null;for(const la of this._def.checks)la.kind==="max"&&(J===null||la.value<J)&&(J=la.value);return J}};ZodBigInt.create=ua=>{var J;return new ZodBigInt({checks:[],typeName:ZodFirstPartyTypeKind.ZodBigInt,coerce:(J=ua==null?void 0:ua.coerce)!==null&&J!==void 0?J:!1,...processCreateParams(ua)})};var ZodBoolean=class extends ZodType{_parse(ua){if(this._def.coerce&&(ua.data=!!ua.data),this._getType(ua)!==ZodParsedType.boolean){const la=this._getOrReturnCtx(ua);return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.boolean,received:la.parsedType}),INVALID}return OK(ua.data)}};ZodBoolean.create=ua=>new ZodBoolean({typeName:ZodFirstPartyTypeKind.ZodBoolean,coerce:(ua==null?void 0:ua.coerce)||!1,...processCreateParams(ua)});var ZodDate=class Vw extends ZodType{_parse(J){if(this._def.coerce&&(J.data=new Date(J.data)),this._getType(J)!==ZodParsedType.date){const ba=this._getOrReturnCtx(J);return addIssueToContext(ba,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.date,received:ba.parsedType}),INVALID}if(isNaN(J.data.getTime())){const ba=this._getOrReturnCtx(J);return addIssueToContext(ba,{code:ZodIssueCode.invalid_date}),INVALID}const xa=new ParseStatus;let Aa;for(const ba of this._def.checks)ba.kind==="min"?J.data.getTime()<ba.value&&(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.too_small,message:ba.message,inclusive:!0,exact:!1,minimum:ba.value,type:"date"}),xa.dirty()):ba.kind==="max"?J.data.getTime()>ba.value&&(Aa=this._getOrReturnCtx(J,Aa),addIssueToContext(Aa,{code:ZodIssueCode.too_big,message:ba.message,inclusive:!0,exact:!1,maximum:ba.value,type:"date"}),xa.dirty()):util.assertNever(ba);return{status:xa.value,value:new Date(J.data.getTime())}}_addCheck(J){return new Vw({...this._def,checks:[...this._def.checks,J]})}min(J,la){return this._addCheck({kind:"min",value:J.getTime(),message:errorUtil.toString(la)})}max(J,la){return this._addCheck({kind:"max",value:J.getTime(),message:errorUtil.toString(la)})}get minDate(){let J=null;for(const la of this._def.checks)la.kind==="min"&&(J===null||la.value>J)&&(J=la.value);return J!=null?new Date(J):null}get maxDate(){let J=null;for(const la of this._def.checks)la.kind==="max"&&(J===null||la.value<J)&&(J=la.value);return J!=null?new Date(J):null}};ZodDate.create=ua=>new ZodDate({checks:[],coerce:(ua==null?void 0:ua.coerce)||!1,typeName:ZodFirstPartyTypeKind.ZodDate,...processCreateParams(ua)});var ZodSymbol=class extends ZodType{_parse(ua){if(this._getType(ua)!==ZodParsedType.symbol){const la=this._getOrReturnCtx(ua);return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.symbol,received:la.parsedType}),INVALID}return OK(ua.data)}};ZodSymbol.create=ua=>new ZodSymbol({typeName:ZodFirstPartyTypeKind.ZodSymbol,...processCreateParams(ua)});var ZodUndefined=class extends ZodType{_parse(ua){if(this._getType(ua)!==ZodParsedType.undefined){const la=this._getOrReturnCtx(ua);return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.undefined,received:la.parsedType}),INVALID}return OK(ua.data)}};ZodUndefined.create=ua=>new ZodUndefined({typeName:ZodFirstPartyTypeKind.ZodUndefined,...processCreateParams(ua)});var ZodNull=class extends ZodType{_parse(ua){if(this._getType(ua)!==ZodParsedType.null){const la=this._getOrReturnCtx(ua);return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.null,received:la.parsedType}),INVALID}return OK(ua.data)}};ZodNull.create=ua=>new ZodNull({typeName:ZodFirstPartyTypeKind.ZodNull,...processCreateParams(ua)});var ZodAny=class extends ZodType{constructor(){super(...arguments),this._any=!0}_parse(ua){return OK(ua.data)}};ZodAny.create=ua=>new ZodAny({typeName:ZodFirstPartyTypeKind.ZodAny,...processCreateParams(ua)});var ZodUnknown=class extends ZodType{constructor(){super(...arguments),this._unknown=!0}_parse(ua){return OK(ua.data)}};ZodUnknown.create=ua=>new ZodUnknown({typeName:ZodFirstPartyTypeKind.ZodUnknown,...processCreateParams(ua)});var ZodNever=class extends ZodType{_parse(ua){const J=this._getOrReturnCtx(ua);return addIssueToContext(J,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.never,received:J.parsedType}),INVALID}};ZodNever.create=ua=>new ZodNever({typeName:ZodFirstPartyTypeKind.ZodNever,...processCreateParams(ua)});var ZodVoid=class extends ZodType{_parse(ua){if(this._getType(ua)!==ZodParsedType.undefined){const la=this._getOrReturnCtx(ua);return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.void,received:la.parsedType}),INVALID}return OK(ua.data)}};ZodVoid.create=ua=>new ZodVoid({typeName:ZodFirstPartyTypeKind.ZodVoid,...processCreateParams(ua)});var ZodArray=class UE extends ZodType{_parse(J){const{ctx:la,status:xa}=this._processInputParams(J),Aa=this._def;if(la.parsedType!==ZodParsedType.array)return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:la.parsedType}),INVALID;if(Aa.exactLength!==null){const Sa=la.data.length>Aa.exactLength.value,Ma=la.data.length<Aa.exactLength.value;(Sa||Ma)&&(addIssueToContext(la,{code:Sa?ZodIssueCode.too_big:ZodIssueCode.too_small,minimum:Ma?Aa.exactLength.value:void 0,maximum:Sa?Aa.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:Aa.exactLength.message}),xa.dirty())}if(Aa.minLength!==null&&la.data.length<Aa.minLength.value&&(addIssueToContext(la,{code:ZodIssueCode.too_small,minimum:Aa.minLength.value,type:"array",inclusive:!0,exact:!1,message:Aa.minLength.message}),xa.dirty()),Aa.maxLength!==null&&la.data.length>Aa.maxLength.value&&(addIssueToContext(la,{code:ZodIssueCode.too_big,maximum:Aa.maxLength.value,type:"array",inclusive:!0,exact:!1,message:Aa.maxLength.message}),xa.dirty()),la.common.async)return Promise.all([...la.data].map((Sa,Ma)=>Aa.type._parseAsync(new ParseInputLazyPath(la,Sa,la.path,Ma)))).then(Sa=>ParseStatus.mergeArray(xa,Sa));const ba=[...la.data].map((Sa,Ma)=>Aa.type._parseSync(new ParseInputLazyPath(la,Sa,la.path,Ma)));return ParseStatus.mergeArray(xa,ba)}get element(){return this._def.type}min(J,la){return new UE({...this._def,minLength:{value:J,message:errorUtil.toString(la)}})}max(J,la){return new UE({...this._def,maxLength:{value:J,message:errorUtil.toString(la)}})}length(J,la){return new UE({...this._def,exactLength:{value:J,message:errorUtil.toString(la)}})}nonempty(J){return this.min(1,J)}};ZodArray.create=(ua,J)=>new ZodArray({type:ua,minLength:null,maxLength:null,exactLength:null,typeName:ZodFirstPartyTypeKind.ZodArray,...processCreateParams(J)});function deepPartialify(ua){if(ua instanceof ZodObject){const J={};for(const la in ua.shape){const xa=ua.shape[la];J[la]=ZodOptional.create(deepPartialify(xa))}return new ZodObject({...ua._def,shape:()=>J})}else return ua instanceof ZodArray?new ZodArray({...ua._def,type:deepPartialify(ua.element)}):ua instanceof ZodOptional?ZodOptional.create(deepPartialify(ua.unwrap())):ua instanceof ZodNullable?ZodNullable.create(deepPartialify(ua.unwrap())):ua instanceof ZodTuple?ZodTuple.create(ua.items.map(J=>deepPartialify(J))):ua}var ZodObject=class r7 extends ZodType{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const J=this._def.shape(),la=util.objectKeys(J);return this._cached={shape:J,keys:la}}_parse(J){if(this._getType(J)!==ZodParsedType.object){const Ia=this._getOrReturnCtx(J);return addIssueToContext(Ia,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:Ia.parsedType}),INVALID}const{status:xa,ctx:Aa}=this._processInputParams(J),{shape:ba,keys:Sa}=this._getCached(),Ma=[];if(!(this._def.catchall instanceof ZodNever&&this._def.unknownKeys==="strip"))for(const Ia in Aa.data)Sa.includes(Ia)||Ma.push(Ia);const Ra=[];for(const Ia of Sa){const La=ba[Ia],Fa=Aa.data[Ia];Ra.push({key:{status:"valid",value:Ia},value:La._parse(new ParseInputLazyPath(Aa,Fa,Aa.path,Ia)),alwaysSet:Ia in Aa.data})}if(this._def.catchall instanceof ZodNever){const Ia=this._def.unknownKeys;if(Ia==="passthrough")for(const La of Ma)Ra.push({key:{status:"valid",value:La},value:{status:"valid",value:Aa.data[La]}});else if(Ia==="strict")Ma.length>0&&(addIssueToContext(Aa,{code:ZodIssueCode.unrecognized_keys,keys:Ma}),xa.dirty());else if(Ia!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const Ia=this._def.catchall;for(const La of Ma){const Fa=Aa.data[La];Ra.push({key:{status:"valid",value:La},value:Ia._parse(new ParseInputLazyPath(Aa,Fa,Aa.path,La)),alwaysSet:La in Aa.data})}}return Aa.common.async?Promise.resolve().then(async()=>{const Ia=[];for(const La of Ra){const Fa=await La.key,ka=await La.value;Ia.push({key:Fa,value:ka,alwaysSet:La.alwaysSet})}return Ia}).then(Ia=>ParseStatus.mergeObjectSync(xa,Ia)):ParseStatus.mergeObjectSync(xa,Ra)}get shape(){return this._def.shape()}strict(J){return errorUtil.errToObj,new r7({...this._def,unknownKeys:"strict",...J!==void 0?{errorMap:(la,xa)=>{var Aa,ba,Sa,Ma;const Ra=(Sa=(ba=(Aa=this._def).errorMap)===null||ba===void 0?void 0:ba.call(Aa,la,xa).message)!==null&&Sa!==void 0?Sa:xa.defaultError;return la.code==="unrecognized_keys"?{message:(Ma=errorUtil.errToObj(J).message)!==null&&Ma!==void 0?Ma:Ra}:{message:Ra}}}:{}})}strip(){return new r7({...this._def,unknownKeys:"strip"})}passthrough(){return new r7({...this._def,unknownKeys:"passthrough"})}extend(J){return new r7({...this._def,shape:()=>({...this._def.shape(),...J})})}merge(J){return new r7({unknownKeys:J._def.unknownKeys,catchall:J._def.catchall,shape:()=>({...this._def.shape(),...J._def.shape()}),typeName:ZodFirstPartyTypeKind.ZodObject})}setKey(J,la){return this.augment({[J]:la})}catchall(J){return new r7({...this._def,catchall:J})}pick(J){const la={};return util.objectKeys(J).forEach(xa=>{J[xa]&&this.shape[xa]&&(la[xa]=this.shape[xa])}),new r7({...this._def,shape:()=>la})}omit(J){const la={};return util.objectKeys(this.shape).forEach(xa=>{J[xa]||(la[xa]=this.shape[xa])}),new r7({...this._def,shape:()=>la})}deepPartial(){return deepPartialify(this)}partial(J){const la={};return util.objectKeys(this.shape).forEach(xa=>{const Aa=this.shape[xa];J&&!J[xa]?la[xa]=Aa:la[xa]=Aa.optional()}),new r7({...this._def,shape:()=>la})}required(J){const la={};return util.objectKeys(this.shape).forEach(xa=>{if(J&&!J[xa])la[xa]=this.shape[xa];else{let ba=this.shape[xa];for(;ba instanceof ZodOptional;)ba=ba._def.innerType;la[xa]=ba}}),new r7({...this._def,shape:()=>la})}keyof(){return createZodEnum(util.objectKeys(this.shape))}};ZodObject.create=(ua,J)=>new ZodObject({shape:()=>ua,unknownKeys:"strip",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(J)}),ZodObject.strictCreate=(ua,J)=>new ZodObject({shape:()=>ua,unknownKeys:"strict",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(J)}),ZodObject.lazycreate=(ua,J)=>new ZodObject({shape:ua,unknownKeys:"strip",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(J)});var ZodUnion=class extends ZodType{_parse(ua){const{ctx:J}=this._processInputParams(ua),la=this._def.options;function xa(Aa){for(const Sa of Aa)if(Sa.result.status==="valid")return Sa.result;for(const Sa of Aa)if(Sa.result.status==="dirty")return J.common.issues.push(...Sa.ctx.common.issues),Sa.result;const ba=Aa.map(Sa=>new ZodError(Sa.ctx.common.issues));return addIssueToContext(J,{code:ZodIssueCode.invalid_union,unionErrors:ba}),INVALID}if(J.common.async)return Promise.all(la.map(async Aa=>{const ba={...J,common:{...J.common,issues:[]},parent:null};return{result:await Aa._parseAsync({data:J.data,path:J.path,parent:ba}),ctx:ba}})).then(xa);{let Aa;const ba=[];for(const Ma of la){const Ra={...J,common:{...J.common,issues:[]},parent:null},Ia=Ma._parseSync({data:J.data,path:J.path,parent:Ra});if(Ia.status==="valid")return Ia;Ia.status==="dirty"&&!Aa&&(Aa={result:Ia,ctx:Ra}),Ra.common.issues.length&&ba.push(Ra.common.issues)}if(Aa)return J.common.issues.push(...Aa.ctx.common.issues),Aa.result;const Sa=ba.map(Ma=>new ZodError(Ma));return addIssueToContext(J,{code:ZodIssueCode.invalid_union,unionErrors:Sa}),INVALID}}get options(){return this._def.options}};ZodUnion.create=(ua,J)=>new ZodUnion({options:ua,typeName:ZodFirstPartyTypeKind.ZodUnion,...processCreateParams(J)});var getDiscriminator=ua=>ua instanceof ZodLazy?getDiscriminator(ua.schema):ua instanceof ZodEffects?getDiscriminator(ua.innerType()):ua instanceof ZodLiteral?[ua.value]:ua instanceof ZodEnum?ua.options:ua instanceof ZodNativeEnum?util.objectValues(ua.enum):ua instanceof ZodDefault?getDiscriminator(ua._def.innerType):ua instanceof ZodUndefined?[void 0]:ua instanceof ZodNull?[null]:ua instanceof ZodOptional?[void 0,...getDiscriminator(ua.unwrap())]:ua instanceof ZodNullable?[null,...getDiscriminator(ua.unwrap())]:ua instanceof ZodBranded||ua instanceof ZodReadonly?getDiscriminator(ua.unwrap()):ua instanceof ZodCatch?getDiscriminator(ua._def.innerType):[],ZodDiscriminatedUnion=class Gw extends ZodType{_parse(J){const{ctx:la}=this._processInputParams(J);if(la.parsedType!==ZodParsedType.object)return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:la.parsedType}),INVALID;const xa=this.discriminator,Aa=la.data[xa],ba=this.optionsMap.get(Aa);return ba?la.common.async?ba._parseAsync({data:la.data,path:la.path,parent:la}):ba._parseSync({data:la.data,path:la.path,parent:la}):(addIssueToContext(la,{code:ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[xa]}),INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(J,la,xa){const Aa=new Map;for(const ba of la){const Sa=getDiscriminator(ba.shape[J]);if(!Sa.length)throw new Error(`A discriminator value for key \`${J}\` could not be extracted from all schema options`);for(const Ma of Sa){if(Aa.has(Ma))throw new Error(`Discriminator property ${String(J)} has duplicate value ${String(Ma)}`);Aa.set(Ma,ba)}}return new Gw({typeName:ZodFirstPartyTypeKind.ZodDiscriminatedUnion,discriminator:J,options:la,optionsMap:Aa,...processCreateParams(xa)})}};function mergeValues(ua,J){const la=getParsedType(ua),xa=getParsedType(J);if(ua===J)return{valid:!0,data:ua};if(la===ZodParsedType.object&&xa===ZodParsedType.object){const Aa=util.objectKeys(J),ba=util.objectKeys(ua).filter(Ma=>Aa.indexOf(Ma)!==-1),Sa={...ua,...J};for(const Ma of ba){const Ra=mergeValues(ua[Ma],J[Ma]);if(!Ra.valid)return{valid:!1};Sa[Ma]=Ra.data}return{valid:!0,data:Sa}}else if(la===ZodParsedType.array&&xa===ZodParsedType.array){if(ua.length!==J.length)return{valid:!1};const Aa=[];for(let ba=0;ba<ua.length;ba++){const Sa=ua[ba],Ma=J[ba],Ra=mergeValues(Sa,Ma);if(!Ra.valid)return{valid:!1};Aa.push(Ra.data)}return{valid:!0,data:Aa}}else return la===ZodParsedType.date&&xa===ZodParsedType.date&&+ua==+J?{valid:!0,data:ua}:{valid:!1}}var ZodIntersection=class extends ZodType{_parse(ua){const{status:J,ctx:la}=this._processInputParams(ua),xa=(Aa,ba)=>{if(isAborted(Aa)||isAborted(ba))return INVALID;const Sa=mergeValues(Aa.value,ba.value);return Sa.valid?((isDirty(Aa)||isDirty(ba))&&J.dirty(),{status:J.value,value:Sa.data}):(addIssueToContext(la,{code:ZodIssueCode.invalid_intersection_types}),INVALID)};return la.common.async?Promise.all([this._def.left._parseAsync({data:la.data,path:la.path,parent:la}),this._def.right._parseAsync({data:la.data,path:la.path,parent:la})]).then(([Aa,ba])=>xa(Aa,ba)):xa(this._def.left._parseSync({data:la.data,path:la.path,parent:la}),this._def.right._parseSync({data:la.data,path:la.path,parent:la}))}};ZodIntersection.create=(ua,J,la)=>new ZodIntersection({left:ua,right:J,typeName:ZodFirstPartyTypeKind.ZodIntersection,...processCreateParams(la)});var ZodTuple=class Hw extends ZodType{_parse(J){const{status:la,ctx:xa}=this._processInputParams(J);if(xa.parsedType!==ZodParsedType.array)return addIssueToContext(xa,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:xa.parsedType}),INVALID;if(xa.data.length<this._def.items.length)return addIssueToContext(xa,{code:ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),INVALID;!this._def.rest&&xa.data.length>this._def.items.length&&(addIssueToContext(xa,{code:ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),la.dirty());const ba=[...xa.data].map((Sa,Ma)=>{const Ra=this._def.items[Ma]||this._def.rest;return Ra?Ra._parse(new ParseInputLazyPath(xa,Sa,xa.path,Ma)):null}).filter(Sa=>!!Sa);return xa.common.async?Promise.all(ba).then(Sa=>ParseStatus.mergeArray(la,Sa)):ParseStatus.mergeArray(la,ba)}get items(){return this._def.items}rest(J){return new Hw({...this._def,rest:J})}};ZodTuple.create=(ua,J)=>{if(!Array.isArray(ua))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ZodTuple({items:ua,typeName:ZodFirstPartyTypeKind.ZodTuple,rest:null,...processCreateParams(J)})};var ZodRecord=class WT extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(J){const{status:la,ctx:xa}=this._processInputParams(J);if(xa.parsedType!==ZodParsedType.object)return addIssueToContext(xa,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:xa.parsedType}),INVALID;const Aa=[],ba=this._def.keyType,Sa=this._def.valueType;for(const Ma in xa.data)Aa.push({key:ba._parse(new ParseInputLazyPath(xa,Ma,xa.path,Ma)),value:Sa._parse(new ParseInputLazyPath(xa,xa.data[Ma],xa.path,Ma)),alwaysSet:Ma in xa.data});return xa.common.async?ParseStatus.mergeObjectAsync(la,Aa):ParseStatus.mergeObjectSync(la,Aa)}get element(){return this._def.valueType}static create(J,la,xa){return la instanceof ZodType?new WT({keyType:J,valueType:la,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(xa)}):new WT({keyType:ZodString.create(),valueType:J,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(la)})}},ZodMap=class extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(ua){const{status:J,ctx:la}=this._processInputParams(ua);if(la.parsedType!==ZodParsedType.map)return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.map,received:la.parsedType}),INVALID;const xa=this._def.keyType,Aa=this._def.valueType,ba=[...la.data.entries()].map(([Sa,Ma],Ra)=>({key:xa._parse(new ParseInputLazyPath(la,Sa,la.path,[Ra,"key"])),value:Aa._parse(new ParseInputLazyPath(la,Ma,la.path,[Ra,"value"]))}));if(la.common.async){const Sa=new Map;return Promise.resolve().then(async()=>{for(const Ma of ba){const Ra=await Ma.key,Ia=await Ma.value;if(Ra.status==="aborted"||Ia.status==="aborted")return INVALID;(Ra.status==="dirty"||Ia.status==="dirty")&&J.dirty(),Sa.set(Ra.value,Ia.value)}return{status:J.value,value:Sa}})}else{const Sa=new Map;for(const Ma of ba){const Ra=Ma.key,Ia=Ma.value;if(Ra.status==="aborted"||Ia.status==="aborted")return INVALID;(Ra.status==="dirty"||Ia.status==="dirty")&&J.dirty(),Sa.set(Ra.value,Ia.value)}return{status:J.value,value:Sa}}}};ZodMap.create=(ua,J,la)=>new ZodMap({valueType:J,keyType:ua,typeName:ZodFirstPartyTypeKind.ZodMap,...processCreateParams(la)});var ZodSet=class XT extends ZodType{_parse(J){const{status:la,ctx:xa}=this._processInputParams(J);if(xa.parsedType!==ZodParsedType.set)return addIssueToContext(xa,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.set,received:xa.parsedType}),INVALID;const Aa=this._def;Aa.minSize!==null&&xa.data.size<Aa.minSize.value&&(addIssueToContext(xa,{code:ZodIssueCode.too_small,minimum:Aa.minSize.value,type:"set",inclusive:!0,exact:!1,message:Aa.minSize.message}),la.dirty()),Aa.maxSize!==null&&xa.data.size>Aa.maxSize.value&&(addIssueToContext(xa,{code:ZodIssueCode.too_big,maximum:Aa.maxSize.value,type:"set",inclusive:!0,exact:!1,message:Aa.maxSize.message}),la.dirty());const ba=this._def.valueType;function Sa(Ra){const Ia=new Set;for(const La of Ra){if(La.status==="aborted")return INVALID;La.status==="dirty"&&la.dirty(),Ia.add(La.value)}return{status:la.value,value:Ia}}const Ma=[...xa.data.values()].map((Ra,Ia)=>ba._parse(new ParseInputLazyPath(xa,Ra,xa.path,Ia)));return xa.common.async?Promise.all(Ma).then(Ra=>Sa(Ra)):Sa(Ma)}min(J,la){return new XT({...this._def,minSize:{value:J,message:errorUtil.toString(la)}})}max(J,la){return new XT({...this._def,maxSize:{value:J,message:errorUtil.toString(la)}})}size(J,la){return this.min(J,la).max(J,la)}nonempty(J){return this.min(1,J)}};ZodSet.create=(ua,J)=>new ZodSet({valueType:ua,minSize:null,maxSize:null,typeName:ZodFirstPartyTypeKind.ZodSet,...processCreateParams(J)});var ZodFunction=class kE extends ZodType{constructor(){super(...arguments),this.validate=this.implement}_parse(J){const{ctx:la}=this._processInputParams(J);if(la.parsedType!==ZodParsedType.function)return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.function,received:la.parsedType}),INVALID;function xa(Ma,Ra){return makeIssue({data:Ma,path:la.path,errorMaps:[la.common.contextualErrorMap,la.schemaErrorMap,getErrorMap(),errorMap].filter(Ia=>!!Ia),issueData:{code:ZodIssueCode.invalid_arguments,argumentsError:Ra}})}function Aa(Ma,Ra){return makeIssue({data:Ma,path:la.path,errorMaps:[la.common.contextualErrorMap,la.schemaErrorMap,getErrorMap(),errorMap].filter(Ia=>!!Ia),issueData:{code:ZodIssueCode.invalid_return_type,returnTypeError:Ra}})}const ba={errorMap:la.common.contextualErrorMap},Sa=la.data;if(this._def.returns instanceof ZodPromise){const Ma=this;return OK(async function(...Ra){const Ia=new ZodError([]),La=await Ma._def.args.parseAsync(Ra,ba).catch(el=>{throw Ia.addIssue(xa(Ra,el)),Ia}),Fa=await Reflect.apply(Sa,this,La);return await Ma._def.returns._def.type.parseAsync(Fa,ba).catch(el=>{throw Ia.addIssue(Aa(Fa,el)),Ia})})}else{const Ma=this;return OK(function(...Ra){const Ia=Ma._def.args.safeParse(Ra,ba);if(!Ia.success)throw new ZodError([xa(Ra,Ia.error)]);const La=Reflect.apply(Sa,this,Ia.data),Fa=Ma._def.returns.safeParse(La,ba);if(!Fa.success)throw new ZodError([Aa(La,Fa.error)]);return Fa.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...J){return new kE({...this._def,args:ZodTuple.create(J).rest(ZodUnknown.create())})}returns(J){return new kE({...this._def,returns:J})}implement(J){return this.parse(J)}strictImplement(J){return this.parse(J)}static create(J,la,xa){return new kE({args:J||ZodTuple.create([]).rest(ZodUnknown.create()),returns:la||ZodUnknown.create(),typeName:ZodFirstPartyTypeKind.ZodFunction,...processCreateParams(xa)})}},ZodLazy=class extends ZodType{get schema(){return this._def.getter()}_parse(ua){const{ctx:J}=this._processInputParams(ua);return this._def.getter()._parse({data:J.data,path:J.path,parent:J})}};ZodLazy.create=(ua,J)=>new ZodLazy({getter:ua,typeName:ZodFirstPartyTypeKind.ZodLazy,...processCreateParams(J)});var ZodLiteral=class extends ZodType{_parse(ua){if(ua.data!==this._def.value){const J=this._getOrReturnCtx(ua);return addIssueToContext(J,{received:J.data,code:ZodIssueCode.invalid_literal,expected:this._def.value}),INVALID}return{status:"valid",value:ua.data}}get value(){return this._def.value}};ZodLiteral.create=(ua,J)=>new ZodLiteral({value:ua,typeName:ZodFirstPartyTypeKind.ZodLiteral,...processCreateParams(J)});function createZodEnum(ua,J){return new ZodEnum({values:ua,typeName:ZodFirstPartyTypeKind.ZodEnum,...processCreateParams(J)})}var ZodEnum=class YT extends ZodType{constructor(){super(...arguments),_ZodEnum_cache.set(this,void 0)}_parse(J){if(typeof J.data!="string"){const la=this._getOrReturnCtx(J),xa=this._def.values;return addIssueToContext(la,{expected:util.joinValues(xa),received:la.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(__classPrivateFieldGet(this,_ZodEnum_cache)||__classPrivateFieldSet(this,_ZodEnum_cache,new Set(this._def.values)),!__classPrivateFieldGet(this,_ZodEnum_cache).has(J.data)){const la=this._getOrReturnCtx(J),xa=this._def.values;return addIssueToContext(la,{received:la.data,code:ZodIssueCode.invalid_enum_value,options:xa}),INVALID}return OK(J.data)}get options(){return this._def.values}get enum(){const J={};for(const la of this._def.values)J[la]=la;return J}get Values(){const J={};for(const la of this._def.values)J[la]=la;return J}get Enum(){const J={};for(const la of this._def.values)J[la]=la;return J}extract(J,la=this._def){return YT.create(J,{...this._def,...la})}exclude(J,la=this._def){return YT.create(this.options.filter(xa=>!J.includes(xa)),{...this._def,...la})}};_ZodEnum_cache=new WeakMap,ZodEnum.create=createZodEnum;var ZodNativeEnum=class extends ZodType{constructor(){super(...arguments),_ZodNativeEnum_cache.set(this,void 0)}_parse(ua){const J=util.getValidEnumValues(this._def.values),la=this._getOrReturnCtx(ua);if(la.parsedType!==ZodParsedType.string&&la.parsedType!==ZodParsedType.number){const xa=util.objectValues(J);return addIssueToContext(la,{expected:util.joinValues(xa),received:la.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(__classPrivateFieldGet(this,_ZodNativeEnum_cache)||__classPrivateFieldSet(this,_ZodNativeEnum_cache,new Set(util.getValidEnumValues(this._def.values))),!__classPrivateFieldGet(this,_ZodNativeEnum_cache).has(ua.data)){const xa=util.objectValues(J);return addIssueToContext(la,{received:la.data,code:ZodIssueCode.invalid_enum_value,options:xa}),INVALID}return OK(ua.data)}get enum(){return this._def.values}};_ZodNativeEnum_cache=new WeakMap,ZodNativeEnum.create=(ua,J)=>new ZodNativeEnum({values:ua,typeName:ZodFirstPartyTypeKind.ZodNativeEnum,...processCreateParams(J)});var ZodPromise=class extends ZodType{unwrap(){return this._def.type}_parse(ua){const{ctx:J}=this._processInputParams(ua);if(J.parsedType!==ZodParsedType.promise&&J.common.async===!1)return addIssueToContext(J,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.promise,received:J.parsedType}),INVALID;const la=J.parsedType===ZodParsedType.promise?J.data:Promise.resolve(J.data);return OK(la.then(xa=>this._def.type.parseAsync(xa,{path:J.path,errorMap:J.common.contextualErrorMap})))}};ZodPromise.create=(ua,J)=>new ZodPromise({type:ua,typeName:ZodFirstPartyTypeKind.ZodPromise,...processCreateParams(J)});var ZodEffects=class extends ZodType{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ZodFirstPartyTypeKind.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(ua){const{status:J,ctx:la}=this._processInputParams(ua),xa=this._def.effect||null,Aa={addIssue:ba=>{addIssueToContext(la,ba),ba.fatal?J.abort():J.dirty()},get path(){return la.path}};if(Aa.addIssue=Aa.addIssue.bind(Aa),xa.type==="preprocess"){const ba=xa.transform(la.data,Aa);if(la.common.async)return Promise.resolve(ba).then(async Sa=>{if(J.value==="aborted")return INVALID;const Ma=await this._def.schema._parseAsync({data:Sa,path:la.path,parent:la});return Ma.status==="aborted"?INVALID:Ma.status==="dirty"||J.value==="dirty"?DIRTY(Ma.value):Ma});{if(J.value==="aborted")return INVALID;const Sa=this._def.schema._parseSync({data:ba,path:la.path,parent:la});return Sa.status==="aborted"?INVALID:Sa.status==="dirty"||J.value==="dirty"?DIRTY(Sa.value):Sa}}if(xa.type==="refinement"){const ba=Sa=>{const Ma=xa.refinement(Sa,Aa);if(la.common.async)return Promise.resolve(Ma);if(Ma instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return Sa};if(la.common.async===!1){const Sa=this._def.schema._parseSync({data:la.data,path:la.path,parent:la});return Sa.status==="aborted"?INVALID:(Sa.status==="dirty"&&J.dirty(),ba(Sa.value),{status:J.value,value:Sa.value})}else return this._def.schema._parseAsync({data:la.data,path:la.path,parent:la}).then(Sa=>Sa.status==="aborted"?INVALID:(Sa.status==="dirty"&&J.dirty(),ba(Sa.value).then(()=>({status:J.value,value:Sa.value}))))}if(xa.type==="transform")if(la.common.async===!1){const ba=this._def.schema._parseSync({data:la.data,path:la.path,parent:la});if(!isValid(ba))return ba;const Sa=xa.transform(ba.value,Aa);if(Sa instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:J.value,value:Sa}}else return this._def.schema._parseAsync({data:la.data,path:la.path,parent:la}).then(ba=>isValid(ba)?Promise.resolve(xa.transform(ba.value,Aa)).then(Sa=>({status:J.value,value:Sa})):ba);util.assertNever(xa)}};ZodEffects.create=(ua,J,la)=>new ZodEffects({schema:ua,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:J,...processCreateParams(la)}),ZodEffects.createWithPreprocess=(ua,J,la)=>new ZodEffects({schema:J,effect:{type:"preprocess",transform:ua},typeName:ZodFirstPartyTypeKind.ZodEffects,...processCreateParams(la)});var ZodOptional=class extends ZodType{_parse(ua){return this._getType(ua)===ZodParsedType.undefined?OK(void 0):this._def.innerType._parse(ua)}unwrap(){return this._def.innerType}};ZodOptional.create=(ua,J)=>new ZodOptional({innerType:ua,typeName:ZodFirstPartyTypeKind.ZodOptional,...processCreateParams(J)});var ZodNullable=class extends ZodType{_parse(ua){return this._getType(ua)===ZodParsedType.null?OK(null):this._def.innerType._parse(ua)}unwrap(){return this._def.innerType}};ZodNullable.create=(ua,J)=>new ZodNullable({innerType:ua,typeName:ZodFirstPartyTypeKind.ZodNullable,...processCreateParams(J)});var ZodDefault=class extends ZodType{_parse(ua){const{ctx:J}=this._processInputParams(ua);let la=J.data;return J.parsedType===ZodParsedType.undefined&&(la=this._def.defaultValue()),this._def.innerType._parse({data:la,path:J.path,parent:J})}removeDefault(){return this._def.innerType}};ZodDefault.create=(ua,J)=>new ZodDefault({innerType:ua,typeName:ZodFirstPartyTypeKind.ZodDefault,defaultValue:typeof J.default=="function"?J.default:()=>J.default,...processCreateParams(J)});var ZodCatch=class extends ZodType{_parse(ua){const{ctx:J}=this._processInputParams(ua),la={...J,common:{...J.common,issues:[]}},xa=this._def.innerType._parse({data:la.data,path:la.path,parent:{...la}});return isAsync(xa)?xa.then(Aa=>({status:"valid",value:Aa.status==="valid"?Aa.value:this._def.catchValue({get error(){return new ZodError(la.common.issues)},input:la.data})})):{status:"valid",value:xa.status==="valid"?xa.value:this._def.catchValue({get error(){return new ZodError(la.common.issues)},input:la.data})}}removeCatch(){return this._def.innerType}};ZodCatch.create=(ua,J)=>new ZodCatch({innerType:ua,typeName:ZodFirstPartyTypeKind.ZodCatch,catchValue:typeof J.catch=="function"?J.catch:()=>J.catch,...processCreateParams(J)});var ZodNaN=class extends ZodType{_parse(ua){if(this._getType(ua)!==ZodParsedType.nan){const la=this._getOrReturnCtx(ua);return addIssueToContext(la,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.nan,received:la.parsedType}),INVALID}return{status:"valid",value:ua.data}}};ZodNaN.create=ua=>new ZodNaN({typeName:ZodFirstPartyTypeKind.ZodNaN,...processCreateParams(ua)});var BRAND=Symbol("zod_brand"),ZodBranded=class extends ZodType{_parse(ua){const{ctx:J}=this._processInputParams(ua),la=J.data;return this._def.type._parse({data:la,path:J.path,parent:J})}unwrap(){return this._def.type}},ZodPipeline=class qw extends ZodType{_parse(J){const{status:la,ctx:xa}=this._processInputParams(J);if(xa.common.async)return(async()=>{const ba=await this._def.in._parseAsync({data:xa.data,path:xa.path,parent:xa});return ba.status==="aborted"?INVALID:ba.status==="dirty"?(la.dirty(),DIRTY(ba.value)):this._def.out._parseAsync({data:ba.value,path:xa.path,parent:xa})})();{const Aa=this._def.in._parseSync({data:xa.data,path:xa.path,parent:xa});return Aa.status==="aborted"?INVALID:Aa.status==="dirty"?(la.dirty(),{status:"dirty",value:Aa.value}):this._def.out._parseSync({data:Aa.value,path:xa.path,parent:xa})}}static create(J,la){return new qw({in:J,out:la,typeName:ZodFirstPartyTypeKind.ZodPipeline})}},ZodReadonly=class extends ZodType{_parse(ua){const J=this._def.innerType._parse(ua),la=xa=>(isValid(xa)&&(xa.value=Object.freeze(xa.value)),xa);return isAsync(J)?J.then(xa=>la(xa)):la(J)}unwrap(){return this._def.innerType}};ZodReadonly.create=(ua,J)=>new ZodReadonly({innerType:ua,typeName:ZodFirstPartyTypeKind.ZodReadonly,...processCreateParams(J)});function custom(ua,J={},la){return ua?ZodAny.create().superRefine((xa,Aa)=>{var ba,Sa;if(!ua(xa)){const Ma=typeof J=="function"?J(xa):typeof J=="string"?{message:J}:J,Ra=(Sa=(ba=Ma.fatal)!==null&&ba!==void 0?ba:la)!==null&&Sa!==void 0?Sa:!0,Ia=typeof Ma=="string"?{message:Ma}:Ma;Aa.addIssue({code:"custom",...Ia,fatal:Ra})}}):ZodAny.create()}var late={object:ZodObject.lazycreate},ZodFirstPartyTypeKind;(function(ua){ua.ZodString="ZodString",ua.ZodNumber="ZodNumber",ua.ZodNaN="ZodNaN",ua.ZodBigInt="ZodBigInt",ua.ZodBoolean="ZodBoolean",ua.ZodDate="ZodDate",ua.ZodSymbol="ZodSymbol",ua.ZodUndefined="ZodUndefined",ua.ZodNull="ZodNull",ua.ZodAny="ZodAny",ua.ZodUnknown="ZodUnknown",ua.ZodNever="ZodNever",ua.ZodVoid="ZodVoid",ua.ZodArray="ZodArray",ua.ZodObject="ZodObject",ua.ZodUnion="ZodUnion",ua.ZodDiscriminatedUnion="ZodDiscriminatedUnion",ua.ZodIntersection="ZodIntersection",ua.ZodTuple="ZodTuple",ua.ZodRecord="ZodRecord",ua.ZodMap="ZodMap",ua.ZodSet="ZodSet",ua.ZodFunction="ZodFunction",ua.ZodLazy="ZodLazy",ua.ZodLiteral="ZodLiteral",ua.ZodEnum="ZodEnum",ua.ZodEffects="ZodEffects",ua.ZodNativeEnum="ZodNativeEnum",ua.ZodOptional="ZodOptional",ua.ZodNullable="ZodNullable",ua.ZodDefault="ZodDefault",ua.ZodCatch="ZodCatch",ua.ZodPromise="ZodPromise",ua.ZodBranded="ZodBranded",ua.ZodPipeline="ZodPipeline",ua.ZodReadonly="ZodReadonly"})(ZodFirstPartyTypeKind||(ZodFirstPartyTypeKind={}));var instanceOfType=(ua,J={message:`Input not instance of ${ua.name}`})=>custom(la=>la instanceof ua,J),stringType=ZodString.create,numberType=ZodNumber.create,nanType=ZodNaN.create,bigIntType=ZodBigInt.create,booleanType=ZodBoolean.create,dateType=ZodDate.create,symbolType=ZodSymbol.create,undefinedType=ZodUndefined.create,nullType=ZodNull.create,anyType=ZodAny.create,unknownType=ZodUnknown.create,neverType=ZodNever.create,voidType=ZodVoid.create,arrayType=ZodArray.create,objectType=ZodObject.create,strictObjectType=ZodObject.strictCreate,unionType=ZodUnion.create,discriminatedUnionType=ZodDiscriminatedUnion.create,intersectionType=ZodIntersection.create,tupleType=ZodTuple.create,recordType=ZodRecord.create,mapType=ZodMap.create,setType=ZodSet.create,functionType=ZodFunction.create,lazyType=ZodLazy.create,literalType=ZodLiteral.create,enumType=ZodEnum.create,nativeEnumType=ZodNativeEnum.create,promiseType=ZodPromise.create,effectsType=ZodEffects.create,optionalType=ZodOptional.create,nullableType=ZodNullable.create,preprocessType=ZodEffects.createWithPreprocess,pipelineType=ZodPipeline.create,ostring=()=>stringType().optional(),onumber=()=>numberType().optional(),oboolean=()=>booleanType().optional(),coerce={string:ua=>ZodString.create({...ua,coerce:!0}),number:ua=>ZodNumber.create({...ua,coerce:!0}),boolean:ua=>ZodBoolean.create({...ua,coerce:!0}),bigint:ua=>ZodBigInt.create({...ua,coerce:!0}),date:ua=>ZodDate.create({...ua,coerce:!0})},NEVER=INVALID,z$1=Object.freeze({__proto__:null,defaultErrorMap:errorMap,setErrorMap,getErrorMap,makeIssue,EMPTY_PATH,addIssueToContext,ParseStatus,INVALID,DIRTY,OK,isAborted,isDirty,isValid,isAsync,get util(){return util},get objectUtil(){return objectUtil},ZodParsedType,getParsedType,ZodType,datetimeRegex,ZodString,ZodNumber,ZodBigInt,ZodBoolean,ZodDate,ZodSymbol,ZodUndefined,ZodNull,ZodAny,ZodUnknown,ZodNever,ZodVoid,ZodArray,ZodObject,ZodUnion,ZodDiscriminatedUnion,ZodIntersection,ZodTuple,ZodRecord,ZodMap,ZodSet,ZodFunction,ZodLazy,ZodLiteral,ZodEnum,ZodNativeEnum,ZodPromise,ZodEffects,ZodTransformer:ZodEffects,ZodOptional,ZodNullable,ZodDefault,ZodCatch,ZodNaN,BRAND,ZodBranded,ZodPipeline,ZodReadonly,custom,Schema:ZodType,ZodSchema:ZodType,late,get ZodFirstPartyTypeKind(){return ZodFirstPartyTypeKind},coerce,any:anyType,array:arrayType,bigint:bigIntType,boolean:booleanType,date:dateType,discriminatedUnion:discriminatedUnionType,effect:effectsType,enum:enumType,function:functionType,instanceof:instanceOfType,intersection:intersectionType,lazy:lazyType,literal:literalType,map:mapType,nan:nanType,nativeEnum:nativeEnumType,never:neverType,null:nullType,nullable:nullableType,number:numberType,object:objectType,oboolean,onumber,optional:optionalType,ostring,pipeline:pipelineType,preprocess:preprocessType,promise:promiseType,record:recordType,set:setType,strictObject:strictObjectType,string:stringType,symbol:symbolType,transformer:effectsType,tuple:tupleType,undefined:undefinedType,union:unionType,unknown:unknownType,void:voidType,NEVER,ZodIssueCode,quotelessJson,ZodError}),urlAlphabet="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",nanoid=(ua=21)=>{let J="",la=crypto.getRandomValues(new Uint8Array(ua|=0));for(;ua--;)J+=urlAlphabet[la[ua]&63];return J},unitMappings={Hz:{baseUnit:"Hz",variants:{MHz:1e6,kHz:1e3,Hz:1}},g:{baseUnit:"g",variants:{kg:1e3,g:1}},Ω:{baseUnit:"Ω",variants:{mΩ:.001,Ω:1,kΩ:1e3,KΩ:1e3,MΩ:1e6,GΩ:1e9,TΩ:1e12}},V:{baseUnit:"V",variants:{mV:.001,V:1,kV:1e3,KV:1e3,MV:1e6,GV:1e9,TV:1e12}},A:{baseUnit:"A",variants:{µA:1e-6,mA:.001,ma:.001,A:1,kA:1e3,MA:1e6}},F:{baseUnit:"F",variants:{pF:1e-12,nF:1e-9,µF:1e-6,uF:1e-6,mF:.001,F:1}},ml:{baseUnit:"ml",variants:{ml:1,mL:1,l:1e3,L:1e3}},deg:{baseUnit:"deg",variants:{rad:180/Math.PI}},ms:{baseUnit:"ms",variants:{s:1e3}},mm:{baseUnit:"mm",variants:{nm:1e-6,µm:.001,um:.001,mm:1,cm:10,dm:100,m:1e3,km:1e6,in:25.4,ft:304.8,IN:25.4,FT:304.8,yd:914.4,mi:1609344,mil:.0254}}},unitMappingAndVariantSuffixes=new Set;for(const[ua,J]of Object.entries(unitMappings)){unitMappingAndVariantSuffixes.add(ua);for(const la of Object.keys(J.variants))unitMappingAndVariantSuffixes.add(la)}function getBaseTscircuitUnit(ua){for(const[J,la]of Object.entries(unitMappings))if(ua in la.variants)return{baseUnit:la.baseUnit,conversionFactor:la.variants[ua]};return{baseUnit:ua,conversionFactor:1}}var si_prefix_multiplier={tera:1e12,T:1e12,giga:1e9,G:1e9,mega:1e6,M:1e6,kilo:1e3,k:1e3,deci:.1,d:.1,centi:.01,c:.01,milli:.001,m:.001,micro:1e-6,u:1e-6,µ:1e-6,nano:1e-9,n:1e-9,pico:1e-12,p:1e-12},parseAndConvertSiUnit=ua=>{var Ma;if(typeof ua>"u")return{parsedUnit:null,unitOfValue:null,value:null};if(typeof ua=="string"&&ua.match(/^[\d\.]+$/))return{value:Number.parseFloat(ua),parsedUnit:null,unitOfValue:null};if(typeof ua=="number")return{value:ua,parsedUnit:null,unitOfValue:null};if(typeof ua=="object"&&"x"in ua&&"y"in ua){const{parsedUnit:Ra,unitOfValue:Ia}=parseAndConvertSiUnit(ua.x);return{parsedUnit:Ra,unitOfValue:Ia,value:{x:parseAndConvertSiUnit(ua.x).value,y:parseAndConvertSiUnit(ua.y).value}}}const la=(Ma=ua.toString().split("").reverse().join("").match(/[^\d\s]+/))==null?void 0:Ma[0];if(!la)throw new Error(`Could not determine unit: "${ua}"`);const xa=la.split("").reverse().join(""),Aa=ua.slice(0,-xa.length);if(xa in si_prefix_multiplier&&!unitMappingAndVariantSuffixes.has(xa)){const Ra=si_prefix_multiplier[xa];return{parsedUnit:null,unitOfValue:null,value:Number.parseFloat(Aa)*Ra}}const{baseUnit:ba,conversionFactor:Sa}=getBaseTscircuitUnit(xa);return{parsedUnit:xa,unitOfValue:ba,value:Sa*Number.parseFloat(Aa)}},resistance=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),capacitance=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),inductance=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),voltage=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),length2=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),frequency=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),distance=length2,current=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),time=z$1.string().or(z$1.number()).transform(ua=>parseAndConvertSiUnit(ua).value),rotation=z$1.string().or(z$1.number()).transform(ua=>typeof ua=="number"?ua:ua.endsWith("deg")?Number.parseFloat(ua.split("deg")[0]):ua.endsWith("rad")?Number.parseFloat(ua.split("rad")[0])*180/Math.PI:Number.parseFloat(ua)),battery_capacity=z$1.number().or(z$1.string().endsWith("mAh")).transform(ua=>{if(typeof ua=="string"){const J=ua.replace("mAh",""),la=Number.parseFloat(J);if(Number.isNaN(la))throw new Error("Invalid capacity");return la}return ua}).describe("Battery capacity in mAh"),point=z$1.object({x:distance,y:distance}),position=point,point3=z$1.object({x:distance,y:distance,z:distance}),position3=point3,size$3=z$1.object({width:z$1.number(),height:z$1.number()}),getZodPrefixedIdWithDefault=ua=>z$1.string().optional().default(()=>`${ua}_${nanoid(10)}`),supplier_name=z$1.enum(["jlcpcb","macrofab","pcbway","digikey","mouser","lcsc"]),source_component_base=z$1.object({type:z$1.literal("source_component"),ftype:z$1.string().optional(),source_component_id:z$1.string(),name:z$1.string(),manufacturer_part_number:z$1.string().optional(),supplier_part_numbers:z$1.record(supplier_name,z$1.array(z$1.string())).optional(),display_value:z$1.string().optional()}),source_simple_capacitor=source_component_base.extend({ftype:z$1.literal("simple_capacitor"),capacitance,display_capacitance:z$1.string().optional(),max_decoupling_trace_length:distance.optional()}),source_simple_resistor=source_component_base.extend({ftype:z$1.literal("simple_resistor"),resistance,display_resistance:z$1.string().optional()}),source_simple_diode=source_component_base.extend({ftype:z$1.literal("simple_diode")}),source_simple_ground=source_component_base.extend({ftype:z$1.literal("simple_ground")}),source_simple_bug=source_component_base.extend({ftype:z$1.literal("simple_bug")}).describe("@deprecated"),source_simple_chip=source_component_base.extend({ftype:z$1.literal("simple_chip")}),source_led=source_simple_diode.extend({ftype:z$1.literal("led")}),source_simple_power_source=source_component_base.extend({ftype:z$1.literal("simple_power_source"),voltage}),source_simple_battery=source_component_base.extend({ftype:z$1.literal("simple_battery"),capacity:battery_capacity}),source_simple_inductor=source_component_base.extend({ftype:z$1.literal("simple_inductor"),inductance}),source_simple_push_button=source_component_base.extend({ftype:z$1.literal("simple_push_button")}),source_simple_potentiometer=source_component_base.extend({ftype:z$1.literal("simple_potentiometer"),max_resistance:resistance}),source_simple_crystal=source_component_base.extend({ftype:z$1.literal("simple_crystal"),frequency:z$1.number().describe("Frequency in Hz"),load_capacitance:z$1.number().optional().describe("Load capacitance in pF")}),source_simple_pin_header=source_component_base.extend({ftype:z$1.literal("simple_pin_header"),pin_count:z$1.number(),gender:z$1.enum(["male","female"]).optional().default("male")}),source_simple_resonator=source_component_base.extend({ftype:z$1.literal("simple_resonator"),load_capacitance:capacitance,equivalent_series_resistance:resistance.optional(),frequency}),source_simple_transistor=source_component_base.extend({ftype:z$1.literal("simple_transistor"),transistor_type:z$1.enum(["npn","pnp"])}),source_simple_mosfet=source_component_base.extend({ftype:z$1.literal("simple_mosfet"),channel_type:z$1.enum(["n","p"]),mosfet_mode:z$1.enum(["enhancement","depletion"])}),any_source_component=z$1.union([source_simple_resistor,source_simple_capacitor,source_simple_diode,source_simple_ground,source_simple_chip,source_simple_bug,source_led,source_simple_power_source,source_simple_battery,source_simple_inductor,source_simple_push_button,source_simple_potentiometer,source_simple_crystal,source_simple_pin_header,source_simple_resonator,source_simple_transistor,source_simple_mosfet]),source_port=z$1.object({type:z$1.literal("source_port"),pin_number:z$1.number().optional(),port_hints:z$1.array(z$1.string()).optional(),name:z$1.string(),source_port_id:z$1.string(),source_component_id:z$1.string()}),source_trace=z$1.object({type:z$1.literal("source_trace"),source_trace_id:z$1.string(),connected_source_port_ids:z$1.array(z$1.string()),connected_source_net_ids:z$1.array(z$1.string()),subcircuit_connectivity_map_key:z$1.string().optional(),max_length:z$1.number().optional(),display_name:z$1.string().optional()}),source_group=z$1.object({type:z$1.literal("source_group"),source_group_id:z$1.string(),name:z$1.string().optional()}),source_net=z$1.object({type:z$1.literal("source_net"),source_net_id:z$1.string(),name:z$1.string(),member_source_group_ids:z$1.array(z$1.string()),is_power:z$1.boolean().optional(),is_ground:z$1.boolean().optional(),is_digital_signal:z$1.boolean().optional(),is_analog_signal:z$1.boolean().optional(),trace_width:z$1.number().optional()}),schematic_box=z$1.object({type:z$1.literal("schematic_box"),schematic_component_id:z$1.string(),width:distance,height:distance,x:distance,y:distance}).describe("Draws a box on the schematic"),schematic_path=z$1.object({type:z$1.literal("schematic_path"),schematic_component_id:z$1.string(),fill_color:z$1.enum(["red","blue"]).optional(),is_filled:z$1.boolean().optional(),points:z$1.array(point)}),schematic_pin_styles=z$1.record(z$1.object({left_margin:length2.optional(),right_margin:length2.optional(),top_margin:length2.optional(),bottom_margin:length2.optional()})),schematic_component_port_arrangement_by_size=z$1.object({left_size:z$1.number(),right_size:z$1.number(),top_size:z$1.number().optional(),bottom_size:z$1.number().optional()}),schematic_component_port_arrangement_by_sides=z$1.object({left_side:z$1.object({pins:z$1.array(z$1.number()),direction:z$1.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),right_side:z$1.object({pins:z$1.array(z$1.number()),direction:z$1.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),top_side:z$1.object({pins:z$1.array(z$1.number()),direction:z$1.enum(["left-to-right","right-to-left"]).optional()}).optional(),bottom_side:z$1.object({pins:z$1.array(z$1.number()),direction:z$1.enum(["left-to-right","right-to-left"]).optional()}).optional()}),port_arrangement=z$1.union([schematic_component_port_arrangement_by_size,schematic_component_port_arrangement_by_sides]),schematic_component=z$1.object({type:z$1.literal("schematic_component"),rotation:rotation.default(0),size:size$3,center:point,source_component_id:z$1.string(),schematic_component_id:z$1.string(),pin_spacing:length2.optional(),pin_styles:schematic_pin_styles.optional(),box_width:length2.optional(),symbol_name:z$1.string().optional(),port_arrangement:port_arrangement.optional(),port_labels:z$1.record(z$1.string()).optional(),symbol_display_value:z$1.string().optional()}),schematic_line=z$1.object({type:z$1.literal("schematic_line"),schematic_component_id:z$1.string(),x1:distance,x2:distance,y1:distance,y2:distance}),schematic_trace=z$1.object({type:z$1.literal("schematic_trace"),schematic_trace_id:z$1.string(),source_trace_id:z$1.string(),junctions:z$1.array(z$1.object({x:z$1.number(),y:z$1.number()})),edges:z$1.array(z$1.object({from:z$1.object({x:z$1.number(),y:z$1.number()}),to:z$1.object({x:z$1.number(),y:z$1.number()}),is_crossing:z$1.boolean().optional(),from_schematic_port_id:z$1.string().optional(),to_schematic_port_id:z$1.string().optional()}))}),schematic_text=z$1.object({type:z$1.literal("schematic_text"),schematic_component_id:z$1.string(),schematic_text_id:z$1.string(),text:z$1.string(),position:z$1.object({x:distance,y:distance}),rotation:z$1.number().default(0),anchor:z$1.enum(["center","left","right","top","bottom"]).default("center"),color:z$1.string().default("#000000")}),schematic_port=z$1.object({type:z$1.literal("schematic_port"),schematic_port_id:z$1.string(),source_port_id:z$1.string(),schematic_component_id:z$1.string().optional(),center:point,facing_direction:z$1.enum(["up","down","left","right"]).optional(),distance_from_component_edge:z$1.number().optional(),side_of_component:z$1.enum(["top","bottom","left","right"]).optional(),true_ccw_index:z$1.number().optional(),pin_number:z$1.number().optional(),display_pin_label:z$1.string().optional()}).describe("Defines a port on a schematic component"),schematic_net_label=z$1.object({type:z$1.literal("schematic_net_label"),source_net_id:z$1.string(),center:point,anchor_position:point.optional(),anchor_side:z$1.enum(["top","bottom","left","right"]),text:z$1.string(),symbol_name:z$1.string().optional()}),schematic_error=z$1.object({type:z$1.literal("schematic_error"),schematic_error_id:z$1.string(),error_type:z$1.literal("schematic_port_not_found"),message:z$1.string()}).describe("Defines a schematic error on the schematic"),schematic_debug_object_base=z$1.object({type:z$1.literal("schematic_debug_object"),label:z$1.string().optional()}),schematic_debug_rect=schematic_debug_object_base.extend({shape:z$1.literal("rect"),center:point,size:size$3}),schematic_debug_line=schematic_debug_object_base.extend({shape:z$1.literal("line"),start:point,end:point}),schematic_debug_point=schematic_debug_object_base.extend({shape:z$1.literal("point"),center:point}),schematic_debug_object=z$1.discriminatedUnion("shape",[schematic_debug_rect,schematic_debug_line,schematic_debug_point]),schematic_voltage_probe=z$1.object({type:z$1.literal("schematic_voltage_probe"),schematic_voltage_probe_id:z$1.string(),position:point,schematic_trace_id:z$1.string(),voltage:voltage.optional()}).describe("Defines a voltage probe measurement point on a schematic trace"),all_layers=["top","bottom","inner1","inner2","inner3","inner4","inner5","inner6"],layer_string=z$1.enum(all_layers),layer_ref=layer_string.or(z$1.object({name:layer_string})).transform(ua=>typeof ua=="string"?ua:ua.name),visible_layer=z$1.enum(["top","bottom"]),pcb_route_hint=z$1.object({x:distance,y:distance,via:z$1.boolean().optional(),via_to_layer:layer_ref.optional()}),pcb_route_hints=z$1.array(pcb_route_hint),route_hint_point=z$1.object({x:distance,y:distance,via:z$1.boolean().optional(),to_layer:layer_ref.optional(),trace_width:distance.optional()}),pcb_component=z$1.object({type:z$1.literal("pcb_component"),pcb_component_id:getZodPrefixedIdWithDefault("pcb_component"),source_component_id:z$1.string(),center:point,layer:layer_ref,rotation,width:length2,height:length2}).describe("Defines a component on the PCB"),pcb_hole_circle_or_square=z$1.object({type:z$1.literal("pcb_hole"),pcb_hole_id:getZodPrefixedIdWithDefault("pcb_hole"),hole_shape:z$1.enum(["circle","square"]),hole_diameter:z$1.number(),x:distance,y:distance}),pcb_hole_circle_or_square_shape=pcb_hole_circle_or_square.describe("Defines a circular or square hole on the PCB"),pcb_hole_oval=z$1.object({type:z$1.literal("pcb_hole"),pcb_hole_id:getZodPrefixedIdWithDefault("pcb_hole"),hole_shape:z$1.literal("oval"),hole_width:z$1.number(),hole_height:z$1.number(),x:distance,y:distance}),pcb_hole_oval_shape=pcb_hole_oval.describe("Defines an oval hole on the PCB"),pcb_hole=pcb_hole_circle_or_square.or(pcb_hole_oval),pcb_plated_hole_circle=z$1.object({type:z$1.literal("pcb_plated_hole"),shape:z$1.literal("circle"),outer_diameter:z$1.number(),hole_diameter:z$1.number(),x:distance,y:distance,layers:z$1.array(layer_ref),port_hints:z$1.array(z$1.string()).optional(),pcb_component_id:z$1.string().optional(),pcb_port_id:z$1.string().optional(),pcb_plated_hole_id:getZodPrefixedIdWithDefault("pcb_plated_hole")}),pcb_plated_hole_oval=z$1.object({type:z$1.literal("pcb_plated_hole"),shape:z$1.enum(["oval","pill"]),outer_width:z$1.number(),outer_height:z$1.number(),hole_width:z$1.number(),hole_height:z$1.number(),x:distance,y:distance,layers:z$1.array(layer_ref),port_hints:z$1.array(z$1.string()).optional(),pcb_component_id:z$1.string().optional(),pcb_port_id:z$1.string().optional(),pcb_plated_hole_id:getZodPrefixedIdWithDefault("pcb_plated_hole")}),pcb_circular_hole_with_rect_pad=z$1.object({type:z$1.literal("pcb_plated_hole"),shape:z$1.literal("circular_hole_with_rect_pad"),hole_shape:z$1.literal("circle"),pad_shape:z$1.literal("rect"),hole_diameter:z$1.number(),rect_pad_width:z$1.number(),rect_pad_height:z$1.number(),x:distance,y:distance,layers:z$1.array(layer_ref),port_hints:z$1.array(z$1.string()).optional(),pcb_component_id:z$1.string().optional(),pcb_port_id:z$1.string().optional(),pcb_plated_hole_id:getZodPrefixedIdWithDefault("pcb_plated_hole")}),pcb_plated_hole=z$1.union([pcb_plated_hole_circle,pcb_plated_hole_oval,pcb_circular_hole_with_rect_pad]),pcb_port=z$1.object({type:z$1.literal("pcb_port"),pcb_port_id:getZodPrefixedIdWithDefault("pcb_port"),source_port_id:z$1.string(),pcb_component_id:z$1.string(),x:distance,y:distance,layers:z$1.array(layer_ref)}).describe("Defines a port on the PCB"),pcb_smtpad_circle=z$1.object({type:z$1.literal("pcb_smtpad"),shape:z$1.literal("circle"),pcb_smtpad_id:getZodPrefixedIdWithDefault("pcb_smtpad"),x:distance,y:distance,radius:z$1.number(),layer:layer_ref,port_hints:z$1.array(z$1.string()).optional(),pcb_component_id:z$1.string().optional(),pcb_port_id:z$1.string().optional()}),pcb_smtpad_rect=z$1.object({type:z$1.literal("pcb_smtpad"),shape:z$1.literal("rect"),pcb_smtpad_id:getZodPrefixedIdWithDefault("pcb_smtpad"),x:distance,y:distance,width:z$1.number(),height:z$1.number(),layer:layer_ref,port_hints:z$1.array(z$1.string()).optional(),pcb_component_id:z$1.string().optional(),pcb_port_id:z$1.string().optional()}),pcb_smtpad_rotated_rect=z$1.object({type:z$1.literal("pcb_smtpad"),shape:z$1.literal("rotated_rect"),pcb_smtpad_id:getZodPrefixedIdWithDefault("pcb_smtpad"),x:distance,y:distance,width:z$1.number(),height:z$1.number(),ccw_rotation:rotation,layer:layer_ref,port_hints:z$1.array(z$1.string()).optional(),pcb_component_id:z$1.string().optional(),pcb_port_id:z$1.string().optional()}),pcb_smtpad=z$1.union([pcb_smtpad_circle,pcb_smtpad_rect,pcb_smtpad_rotated_rect]).describe("Defines an SMT pad on the PCB"),pcb_solder_paste_circle=z$1.object({type:z$1.literal("pcb_solder_paste"),shape:z$1.literal("circle"),pcb_solder_paste_id:getZodPrefixedIdWithDefault("pcb_solder_paste"),x:distance,y:distance,radius:z$1.number(),layer:layer_ref,pcb_component_id:z$1.string().optional(),pcb_smtpad_id:z$1.string().optional()}),pcb_solder_paste_rect=z$1.object({type:z$1.literal("pcb_solder_paste"),shape:z$1.literal("rect"),pcb_solder_paste_id:getZodPrefixedIdWithDefault("pcb_solder_paste"),x:distance,y:distance,width:z$1.number(),height:z$1.number(),layer:layer_ref,pcb_component_id:z$1.string().optional(),pcb_smtpad_id:z$1.string().optional()}),pcb_solder_paste=z$1.union([pcb_solder_paste_circle,pcb_solder_paste_rect]).describe("Defines solderpaste on the PCB"),pcb_text=z$1.object({type:z$1.literal("pcb_text"),pcb_text_id:getZodPrefixedIdWithDefault("pcb_text"),text:z$1.string(),center:point,layer:layer_ref,width:length2,height:length2,lines:z$1.number(),align:z$1.enum(["bottom-left"])}).describe("Defines text on the PCB"),pcb_trace_route_point_wire=z$1.object({route_type:z$1.literal("wire"),x:distance,y:distance,width:distance,start_pcb_port_id:z$1.string().optional(),end_pcb_port_id:z$1.string().optional(),layer:layer_ref}),pcb_trace_route_point_via=z$1.object({route_type:z$1.literal("via"),x:distance,y:distance,from_layer:z$1.string(),to_layer:z$1.string()}),pcb_trace_route_point=z$1.union([pcb_trace_route_point_wire,pcb_trace_route_point_via]),pcb_trace=z$1.object({type:z$1.literal("pcb_trace"),source_trace_id:z$1.string().optional(),pcb_component_id:z$1.string().optional(),pcb_trace_id:getZodPrefixedIdWithDefault("pcb_trace"),route_thickness_mode:z$1.enum(["constant","interpolated"]).default("constant").optional(),route_order_index:z$1.number().optional(),should_round_corners:z$1.boolean().optional(),trace_length:z$1.number().optional(),route:z$1.array(z$1.union([z$1.object({route_type:z$1.literal("wire"),x:distance,y:distance,width:distance,start_pcb_port_id:z$1.string().optional(),end_pcb_port_id:z$1.string().optional(),layer:layer_ref}),z$1.object({route_type:z$1.literal("via"),x:distance,y:distance,from_layer:z$1.string(),to_layer:z$1.string()})]))}).describe("Defines a trace on the PCB"),pcb_trace_error=z$1.object({type:z$1.literal("pcb_trace_error"),pcb_trace_error_id:getZodPrefixedIdWithDefault("pcb_trace_error"),error_type:z$1.literal("pcb_trace_error"),message:z$1.string(),center:point.optional(),pcb_trace_id:z$1.string(),source_trace_id:z$1.string(),pcb_component_ids:z$1.array(z$1.string()),pcb_port_ids:z$1.array(z$1.string())}).describe("Defines a trace error on the PCB"),pcb_port_not_matched_error=z$1.object({type:z$1.literal("pcb_port_not_matched_error"),pcb_error_id:getZodPrefixedIdWithDefault("pcb_error"),message:z$1.string(),pcb_component_ids:z$1.array(z$1.string())}).describe("Defines a trace error on the PCB where a port is not matched"),pcb_via=z$1.object({type:z$1.literal("pcb_via"),pcb_via_id:getZodPrefixedIdWithDefault("pcb_via"),x:distance,y:distance,outer_diameter:distance.default("0.6mm"),hole_diameter:distance.default("0.25mm"),from_layer:layer_ref.optional(),to_layer:layer_ref.optional(),layers:z$1.array(layer_ref),pcb_trace_id:z$1.string().optional()}).describe("Defines a via on the PCB"),pcb_board=z$1.object({type:z$1.literal("pcb_board"),pcb_board_id:getZodPrefixedIdWithDefault("pcb_board"),width:length2,height:length2,center:point,thickness:length2.optional().default(1.4),num_layers:z$1.number().optional().default(4),outline:z$1.array(point).optional()}).describe("Defines the board outline of the PCB"),pcb_placement_error=z$1.object({type:z$1.literal("pcb_placement_error"),pcb_placement_error_id:getZodPrefixedIdWithDefault("pcb_placement_error"),message:z$1.string()}).describe("Defines a placement error on the PCB"),pcb_trace_hint=z$1.object({type:z$1.literal("pcb_trace_hint"),pcb_trace_hint_id:getZodPrefixedIdWithDefault("pcb_trace_hint"),pcb_port_id:z$1.string(),pcb_component_id:z$1.string(),route:z$1.array(route_hint_point)}).describe("A hint that can be used during generation of a PCB trace"),pcb_silkscreen_line=z$1.object({type:z$1.literal("pcb_silkscreen_line"),pcb_silkscreen_line_id:getZodPrefixedIdWithDefault("pcb_silkscreen_line"),pcb_component_id:z$1.string(),stroke_width:distance.default("0.1mm"),x1:distance,y1:distance,x2:distance,y2:distance,layer:visible_layer}).describe("Defines a silkscreen line on the PCB"),pcb_silkscreen_path=z$1.object({type:z$1.literal("pcb_silkscreen_path"),pcb_silkscreen_path_id:getZodPrefixedIdWithDefault("pcb_silkscreen_path"),pcb_component_id:z$1.string(),layer:visible_layer,route:z$1.array(point),stroke_width:length2}).describe("Defines a silkscreen path on the PCB"),pcb_silkscreen_text=z$1.object({type:z$1.literal("pcb_silkscreen_text"),pcb_silkscreen_text_id:getZodPrefixedIdWithDefault("pcb_silkscreen_text"),font:z$1.literal("tscircuit2024").default("tscircuit2024"),font_size:distance.default("0.2mm"),pcb_component_id:z$1.string(),text:z$1.string(),ccw_rotation:z$1.number().optional(),layer:layer_ref,is_mirrored:z$1.boolean().default(!1).optional(),anchor_position:point.default({x:0,y:0}),anchor_alignment:z$1.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center")}).describe("Defines silkscreen text on the PCB"),pcb_silkscreen_rect=z$1.object({type:z$1.literal("pcb_silkscreen_rect"),pcb_silkscreen_rect_id:getZodPrefixedIdWithDefault("pcb_silkscreen_rect"),pcb_component_id:z$1.string(),center:point,width:length2,height:length2,layer:layer_ref}).describe("Defines a silkscreen rect on the PCB"),pcb_silkscreen_circle=z$1.object({type:z$1.literal("pcb_silkscreen_circle"),pcb_silkscreen_circle_id:getZodPrefixedIdWithDefault("pcb_silkscreen_circle"),pcb_component_id:z$1.string(),center:point,radius:length2,layer:visible_layer}).describe("Defines a silkscreen circle on the PCB"),pcb_silkscreen_oval=z$1.object({type:z$1.literal("pcb_silkscreen_oval"),pcb_silkscreen_oval_id:getZodPrefixedIdWithDefault("pcb_silkscreen_oval"),pcb_component_id:z$1.string(),center:point,radius_x:distance,radius_y:distance,layer:visible_layer}).describe("Defines a silkscreen oval on the PCB"),pcb_fabrication_note_text=z$1.object({type:z$1.literal("pcb_fabrication_note_text"),pcb_fabrication_note_text_id:getZodPrefixedIdWithDefault("pcb_fabrication_note_text"),font:z$1.literal("tscircuit2024").default("tscircuit2024"),font_size:distance.default("1mm"),pcb_component_id:z$1.string(),text:z$1.string(),layer:visible_layer,anchor_position:point.default({x:0,y:0}),anchor_alignment:z$1.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),color:z$1.string().optional()}).describe("Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators"),pcb_fabrication_note_path=z$1.object({type:z$1.literal("pcb_fabrication_note_path"),pcb_fabrication_note_path_id:getZodPrefixedIdWithDefault("pcb_fabrication_note_path"),pcb_component_id:z$1.string(),layer:layer_ref,route:z$1.array(point),stroke_width:length2,color:z$1.string().optional()}).describe("Defines a fabrication path on the PCB for fabricators or assemblers"),pcb_keepout=z$1.object({type:z$1.literal("pcb_keepout"),shape:z$1.literal("rect"),center:point,width:distance,height:distance,pcb_keepout_id:z$1.string(),layers:z$1.array(z$1.string()),description:z$1.string().optional()}).or(z$1.object({type:z$1.literal("pcb_keepout"),shape:z$1.literal("circle"),center:point,radius:distance,pcb_keepout_id:z$1.string(),layers:z$1.array(z$1.string()),description:z$1.string().optional()})),pcb_missing_footprint_error=z$1.object({type:z$1.literal("pcb_missing_footprint_error"),pcb_missing_footprint_error_id:getZodPrefixedIdWithDefault("pcb_missing_footprint_error"),error_type:z$1.literal("pcb_missing_footprint_error"),source_component_id:z$1.string(),message:z$1.string()}).describe("Defines a missing footprint error on the PCB"),pcb_manual_edit_conflict_error=z$1.object({type:z$1.literal("pcb_manual_edit_conflict_error"),pcb_error_id:getZodPrefixedIdWithDefault("pcb_manual_edit_conflict_error"),message:z$1.string(),pcb_component_id:z$1.string(),source_component_id:z$1.string()}).describe("Error emitted when a component has both manual placement and explicit pcbX/pcbY coordinates"),pcb_group=z$1.object({type:z$1.literal("pcb_group"),pcb_group_id:getZodPrefixedIdWithDefault("pcb_group"),width:length2,height:length2,center:point,pcb_component_ids:z$1.array(z$1.string()),name:z$1.string().optional(),description:z$1.string().optional()}).describe("Defines a group of components on the PCB"),cad_component=z$1.object({type:z$1.literal("cad_component"),cad_component_id:z$1.string(),pcb_component_id:z$1.string(),source_component_id:z$1.string(),position:point3,rotation:point3.optional(),size:point3.optional(),layer:layer_ref.optional(),footprinter_string:z$1.string().optional(),model_obj_url:z$1.string().optional(),model_stl_url:z$1.string().optional(),model_3mf_url:z$1.string().optional(),model_jscad:z$1.any().optional()}).describe("Defines a component on the PCB"),any_circuit_element=z$1.union([source_trace,source_port,any_source_component,source_led,source_net,source_group,source_simple_bug,source_simple_chip,source_simple_capacitor,source_simple_diode,source_simple_resistor,source_simple_power_source,source_simple_battery,source_simple_inductor,source_simple_pin_header,source_simple_resonator,source_simple_transistor,source_simple_mosfet,source_simple_potentiometer,source_simple_push_button,pcb_component,pcb_hole,pcb_missing_footprint_error,pcb_manual_edit_conflict_error,pcb_plated_hole,pcb_keepout,pcb_port,pcb_text,pcb_trace,pcb_via,pcb_smtpad,pcb_solder_paste,pcb_board,pcb_group,pcb_trace_hint,pcb_silkscreen_line,pcb_silkscreen_path,pcb_silkscreen_text,pcb_silkscreen_rect,pcb_silkscreen_circle,pcb_silkscreen_oval,pcb_trace_error,pcb_placement_error,pcb_port_not_matched_error,pcb_fabrication_note_path,pcb_fabrication_note_text,schematic_box,schematic_text,schematic_line,schematic_component,schematic_port,schematic_trace,schematic_path,schematic_error,schematic_net_label,schematic_debug_object,schematic_voltage_probe,cad_component]),any_soup_element=any_circuit_element,su$1=(ua,J={})=>{let la=ua._internal_store;if(!la){la={counts:{}},ua._internal_store=la;for(const Aa of ua){const ba=Aa.type,Sa=Aa[`${ba}_id`];if(!Sa)continue;const Ma=Number.parseInt(Sa.split("_").pop());Number.isNaN(Ma)||(la.counts[ba]=Math.max(la.counts[ba]??0,Ma))}}return new Proxy({},{get:(Aa,ba)=>ba==="toArray"?()=>ua:{get:Sa=>ua.find(Ma=>Ma.type===ba&&Ma[`${ba}_id`]===Sa),getUsing:Sa=>{const Ma=Object.keys(Sa);if(Ma.length!==1)throw new Error("getUsing requires exactly one key, e.g. { pcb_component_id }");const Ra=Ma[0],Ia=Ra.replace("_id",""),La=ua.find(Fa=>Fa.type===Ia&&Fa[Ra]===Sa[Ra]);return La?ua.find(Fa=>Fa.type===ba&&Fa[`${ba}_id`]===La[`${ba}_id`]):null},getWhere:Sa=>{const Ma=Object.keys(Sa);return ua.find(Ra=>Ra.type===ba&&Ma.every(Ia=>Ra[Ia]===Sa[Ia]))},list:Sa=>{const Ma=Sa?Object.keys(Sa):[];return ua.filter(Ra=>Ra.type===ba&&Ma.every(Ia=>Ra[Ia]===Sa[Ia]))},insert:Sa=>{var Ia;(Ia=la.counts)[ba]??(Ia[ba]=-1),la.counts[ba]++;const Ma=la.counts[ba],Ra={type:ba,[`${ba}_id`]:`${ba}_${Ma}`,...Sa};return J.validateInserts&&(dist_exports[ba]??any_soup_element).parse(Ra),ua.push(Ra),Ra},delete:Sa=>{const Ma=ua.find(Ra=>Ra[`${ba}_id`]===Sa);Ma&&ua.splice(ua.indexOf(Ma),1)},update:(Sa,Ma)=>{const Ra=ua.find(Ia=>Ia.type===ba&&Ia[`${ba}_id`]===Sa);if(Ra)return Object.assign(Ra,Ma),Ra},select:Sa=>{if(ba==="source_component")return ua.find(Ma=>Ma.type==="source_component"&&Ma.name===Sa.replace(/\./g,""));if(ba==="pcb_port"||ba==="source_port"||ba==="schematic_port"){const[Ma,Ra]=Sa.replace(/\./g,"").split(/[\s\>]+/),Ia=ua.find(Fa=>Fa.type==="source_component"&&Fa.name===Ma);if(!Ia)return null;const La=ua.find(Fa=>Fa.type==="source_port"&&Fa.source_component_id===Ia.source_component_id&&(Fa.name===Ra||(Fa.port_hints??[]).includes(Ra)));if(!La)return null;if(ba==="source_port")return La;if(ba==="pcb_port")return ua.find(Fa=>Fa.type==="pcb_port"&&Fa.source_port_id===La.source_port_id);if(ba==="schematic_port")return ua.find(Fa=>Fa.type==="schematic_port"&&Fa.source_port_id===La.source_port_id)}}}})};su$1.unparsed=su$1;var su_default$1=su$1,transformPCBElement=(ua,J)=>{if(ua.type==="pcb_plated_hole"||ua.type==="pcb_hole"||ua.type==="pcb_via"||ua.type==="pcb_smtpad"||ua.type==="pcb_port"){const{x:la,y:xa}=applyToPoint(J,{x:ua.x,y:ua.y});ua.x=la,ua.y=xa}else if(ua.type==="pcb_keepout"||ua.type==="pcb_board")ua.center=applyToPoint(J,ua.center);else if(ua.type==="pcb_silkscreen_text"||ua.type==="pcb_fabrication_note_text")ua.anchor_position=applyToPoint(J,ua.anchor_position);else if(ua.type==="pcb_silkscreen_circle"||ua.type==="pcb_silkscreen_rect"||ua.type==="pcb_component")ua.center=applyToPoint(J,ua.center);else if(ua.type==="pcb_silkscreen_path"||ua.type==="pcb_trace"||ua.type==="pcb_fabrication_note_path")ua.route=ua.route.map(la=>{const xa=applyToPoint(J,la);return la.x=xa.x,la.y=xa.y,la});else if(ua.type==="pcb_silkscreen_line"){const la={x:ua.x1,y:ua.y1},xa={x:ua.x2,y:ua.y2},Aa=applyToPoint(J,la),ba=applyToPoint(J,xa);ua.x1=Aa.x,ua.y1=Aa.y,ua.x2=ba.x,ua.y2=ba.y}else if(ua.type==="cad_component"){const la=applyToPoint(J,{x:ua.position.x,y:ua.position.y});ua.position.x=la.x,ua.position.y=la.y}return ua};function stringHash(ua){let J=0;if(ua.length==0)return J;for(var la=0;la<ua.length;la++){var xa=ua.charCodeAt(la);J=(J<<5)-J+xa,J=J&J}return Math.abs(J)}var nice_color_palettes=[["#69d2e7","#a7dbd8","#e0e4cc","#f38630","#fa6900"],["#fe4365","#fc9d9a","#f9cdad","#c8c8a9","#83af9b"],["#ecd078","#d95b43","#c02942","#542437","#53777a"],["#556270","#4ecdc4","#c7f464","#ff6b6b","#c44d58"],["#774f38","#e08e79","#f1d4af","#ece5ce","#c5e0dc"],["#e8ddcb","#cdb380","#036564","#033649","#031634"],["#490a3d","#bd1550","#e97f02","#f8ca00","#8a9b0f"],["#594f4f","#547980","#45ada8","#9de0ad","#e5fcc2"],["#00a0b0","#6a4a3c","#cc333f","#eb6841","#edc951"],["#e94e77","#d68189","#c6a49a","#c6e5d9","#f4ead5"],["#3fb8af","#7fc7af","#dad8a7","#ff9e9d","#ff3d7f"],["#d9ceb2","#948c75","#d5ded9","#7a6a53","#99b2b7"],["#ffffff","#cbe86b","#f2e9e1","#1c140d","#cbe86b"],["#efffcd","#dce9be","#555152","#2e2633","#99173c"],["#343838","#005f6b","#008c9e","#00b4cc","#00dffc"],["#413e4a","#73626e","#b38184","#f0b49e","#f7e4be"],["#ff4e50","#fc913a","#f9d423","#ede574","#e1f5c4"],["#99b898","#fecea8","#ff847c","#e84a5f","#2a363b"],["#655643","#80bca3","#f6f7bd","#e6ac27","#bf4d28"],["#00a8c6","#40c0cb","#f9f2e7","#aee239","#8fbe00"],["#351330","#424254","#64908a","#e8caa4","#cc2a41"],["#554236","#f77825","#d3ce3d","#f1efa5","#60b99a"],["#5d4157","#838689","#a8caba","#cad7b2","#ebe3aa"],["#8c2318","#5e8c6a","#88a65e","#bfb35a","#f2c45a"],["#fad089","#ff9c5b","#f5634a","#ed303c","#3b8183"],["#ff4242","#f4fad2","#d4ee5e","#e1edb9","#f0f2eb"],["#f8b195","#f67280","#c06c84","#6c5b7b","#355c7d"],["#d1e751","#ffffff","#000000","#4dbce9","#26ade4"],["#1b676b","#519548","#88c425","#bef202","#eafde6"],["#5e412f","#fcebb6","#78c0a8","#f07818","#f0a830"],["#bcbdac","#cfbe27","#f27435","#f02475","#3b2d38"],["#452632","#91204d","#e4844a","#e8bf56","#e2f7ce"],["#eee6ab","#c5bc8e","#696758","#45484b","#36393b"],["#f0d8a8","#3d1c00","#86b8b1","#f2d694","#fa2a00"],["#2a044a","#0b2e59","#0d6759","#7ab317","#a0c55f"],["#f04155","#ff823a","#f2f26f","#fff7bd","#95cfb7"],["#b9d7d9","#668284","#2a2829","#493736","#7b3b3b"],["#bbbb88","#ccc68d","#eedd99","#eec290","#eeaa88"],["#b3cc57","#ecf081","#ffbe40","#ef746f","#ab3e5b"],["#a3a948","#edb92e","#f85931","#ce1836","#009989"],["#300030","#480048","#601848","#c04848","#f07241"],["#67917a","#170409","#b8af03","#ccbf82","#e33258"],["#aab3ab","#c4cbb7","#ebefc9","#eee0b7","#e8caaf"],["#e8d5b7","#0e2430","#fc3a51","#f5b349","#e8d5b9"],["#ab526b","#bca297","#c5ceae","#f0e2a4","#f4ebc3"],["#607848","#789048","#c0d860","#f0f0d8","#604848"],["#b6d8c0","#c8d9bf","#dadabd","#ecdbbc","#fedcba"],["#a8e6ce","#dcedc2","#ffd3b5","#ffaaa6","#ff8c94"],["#3e4147","#fffedf","#dfba69","#5a2e2e","#2a2c31"],["#fc354c","#29221f","#13747d","#0abfbc","#fcf7c5"],["#cc0c39","#e6781e","#c8cf02","#f8fcc1","#1693a7"],["#1c2130","#028f76","#b3e099","#ffeaad","#d14334"],["#a7c5bd","#e5ddcb","#eb7b59","#cf4647","#524656"],["#dad6ca","#1bb0ce","#4f8699","#6a5e72","#563444"],["#5c323e","#a82743","#e15e32","#c0d23e","#e5f04c"],["#edebe6","#d6e1c7","#94c7b6","#403b33","#d3643b"],["#fdf1cc","#c6d6b8","#987f69","#e3ad40","#fcd036"],["#230f2b","#f21d41","#ebebbc","#bce3c5","#82b3ae"],["#b9d3b0","#81bda4","#b28774","#f88f79","#f6aa93"],["#3a111c","#574951","#83988e","#bcdea5","#e6f9bc"],["#5e3929","#cd8c52","#b7d1a3","#dee8be","#fcf7d3"],["#1c0113","#6b0103","#a30006","#c21a01","#f03c02"],["#000000","#9f111b","#b11623","#292c37","#cccccc"],["#382f32","#ffeaf2","#fcd9e5","#fbc5d8","#f1396d"],["#e3dfba","#c8d6bf","#93ccc6","#6cbdb5","#1a1f1e"],["#f6f6f6","#e8e8e8","#333333","#990100","#b90504"],["#1b325f","#9cc4e4","#e9f2f9","#3a89c9","#f26c4f"],["#a1dbb2","#fee5ad","#faca66","#f7a541","#f45d4c"],["#c1b398","#605951","#fbeec2","#61a6ab","#accec0"],["#5e9fa3","#dcd1b4","#fab87f","#f87e7b","#b05574"],["#951f2b","#f5f4d7","#e0dfb1","#a5a36c","#535233"],["#8dccad","#988864","#fea6a2","#f9d6ac","#ffe9af"],["#2d2d29","#215a6d","#3ca2a2","#92c7a3","#dfece6"],["#413d3d","#040004","#c8ff00","#fa023c","#4b000f"],["#eff3cd","#b2d5ba","#61ada0","#248f8d","#605063"],["#ffefd3","#fffee4","#d0ecea","#9fd6d2","#8b7a5e"],["#cfffdd","#b4dec1","#5c5863","#a85163","#ff1f4c"],["#9dc9ac","#fffec7","#f56218","#ff9d2e","#919167"],["#4e395d","#827085","#8ebe94","#ccfc8e","#dc5b3e"],["#a8a7a7","#cc527a","#e8175d","#474747","#363636"],["#f8edd1","#d88a8a","#474843","#9d9d93","#c5cfc6"],["#046d8b","#309292","#2fb8ac","#93a42a","#ecbe13"],["#f38a8a","#55443d","#a0cab5","#cde9ca","#f1edd0"],["#a70267","#f10c49","#fb6b41","#f6d86b","#339194"],["#ff003c","#ff8a00","#fabe28","#88c100","#00c176"],["#ffedbf","#f7803c","#f54828","#2e0d23","#f8e4c1"],["#4e4d4a","#353432","#94ba65","#2790b0","#2b4e72"],["#0ca5b0","#4e3f30","#fefeeb","#f8f4e4","#a5b3aa"],["#4d3b3b","#de6262","#ffb88c","#ffd0b3","#f5e0d3"],["#fffbb7","#a6f6af","#66b6ab","#5b7c8d","#4f2958"],["#edf6ee","#d1c089","#b3204d","#412e28","#151101"],["#9d7e79","#ccac95","#9a947c","#748b83","#5b756c"],["#fcfef5","#e9ffe1","#cdcfb7","#d6e6c3","#fafbe3"],["#9cddc8","#bfd8ad","#ddd9ab","#f7af63","#633d2e"],["#30261c","#403831","#36544f","#1f5f61","#0b8185"],["#aaff00","#ffaa00","#ff00aa","#aa00ff","#00aaff"],["#d1313d","#e5625c","#f9bf76","#8eb2c5","#615375"],["#ffe181","#eee9e5","#fad3b2","#ffba7f","#ff9c97"],["#73c8a9","#dee1b6","#e1b866","#bd5532","#373b44"],["#805841","#dcf7f3","#fffcdd","#ffd8d8","#f5a2a2"]],getDebugLayoutObject=ua=>{var Ma,Ra,Ia;let{x:J,y:la,width:xa,height:Aa}={...ua,...ua.size,...ua.center,...ua.position};ua.x1!==void 0&&ua.x2!==void 0&&ua.y1!==void 0&&ua.y2!==void 0&&(J=(ua.x1+ua.x2)/2,la=(ua.y1+ua.y2)/2,xa=Math.abs(ua.x1-ua.x2),Aa=Math.abs(ua.y1-ua.y2));const ba=ua.text||ua.name||((Ma=ua.source)==null?void 0:Ma.text)||((Ra=ua.source)==null?void 0:Ra.name)||"?",Sa=ua;return J===void 0||la===void 0?null:(xa===void 0&&"outer_diameter"in ua&&(xa=ua.outer_diameter,Aa=ua.outer_diameter),(xa===void 0||Aa===void 0)&&(xa=.1,Aa=.1),{x:J,y:la,width:xa,height:Aa,title:ba,content:Sa,bg_color:((Ia=nice_color_palettes[stringHash(ua.type||ba)%nice_color_palettes.length])==null?void 0:Ia[4])??"#f00"})},isTruthy=ua=>!!ua,findBoundsAndCenter=ua=>{const J=ua.filter(Ia=>Ia.type.startsWith("pcb_")).concat(ua.filter(Ia=>Ia.type==="pcb_trace").flatMap(Ia=>Ia.route)).map(Ia=>getDebugLayoutObject(Ia)).filter(isTruthy);if(J.length===0)return{center:{x:0,y:0},width:0,height:0};let la=J[0].x-J[0].width/2,xa=J[0].x+J[0].width/2,Aa=J[0].y-J[0].height/2,ba=J[0].y+J[0].height/2;for(const Ia of J.slice(1))la=Math.min(la,Ia.x-Ia.width/2),xa=Math.max(xa,Ia.x+Ia.width/2),Aa=Math.min(Aa,Ia.y-Ia.height/2),ba=Math.max(ba,Ia.y+Ia.height/2);const Sa=xa-la,Ma=ba-Aa;return{center:{x:la+Sa/2,y:Aa+Ma/2},width:Sa,height:Ma}},createStore=(ua={})=>createStore$1(J=>({selected_layer:"top",pcb_viewer_id:`pcb_viewer_${Math.random().toString().slice(2,10)}`,in_edit_mode:!1,in_move_footprint_mode:!1,in_draw_trace_mode:!1,is_moving_component:!1,is_drawing_trace:!1,is_mouse_over_container:!1,is_showing_multiple_traces_length:!1,is_showing_rats_nest:!1,...ua,selectLayer:la=>J({selected_layer:la}),setEditMode:la=>J({in_edit_mode:la!=="off",in_move_footprint_mode:la==="move_footprint",in_draw_trace_mode:la==="draw_trace",is_moving_component:!1,is_drawing_trace:!1}),setIsShowingRatsNest:la=>J({is_showing_rats_nest:la}),setIsMovingComponent:la=>J({is_moving_component:la}),setIsDrawingTrace:la=>J({is_drawing_trace:la}),setIsMouseOverContainer:la=>J({is_mouse_over_container:la}),setIsShowingMultipleTracesLength:la=>J({is_showing_multiple_traces_length:la})})),useGlobalStore=ua=>{const J=reactExports.useContext(StoreContext);return useStore(J,ua)},StoreContext=reactExports.createContext(null),ContextProviders=({children:ua,initialState:J})=>{const la=reactExports.useMemo(()=>createStore(J),[]);return jsxRuntimeExports.jsx(StoreContext.Provider,{value:la,children:ua})},applyTraceHintEditEvent=(ua,J)=>{if(ua.find(xa=>xa.type==="pcb_trace_hint"&&xa.pcb_trace_hint_id===J.pcb_trace_hint_id))ua=ua.map(xa=>xa.pcb_trace_hint_id===J.pcb_trace_hint_id?{...xa,route:J.route}:xa);else{const xa=su_default$1(ua).pcb_port.get(J.pcb_port_id);ua=ua.filter(Aa=>!(Aa.type==="pcb_trace_hint"&&Aa.pcb_port_id===J.pcb_port_id)).concat([{type:"pcb_trace_hint",pcb_trace_hint_id:J.pcb_trace_hint_id,route:J.route,pcb_port_id:J.pcb_port_id,pcb_component_id:xa==null?void 0:xa.pcb_component_id}])}return ua},applyEditEvents=(ua,J)=>{ua=JSON.parse(JSON.stringify(ua));for(const la of J)if(la.pcb_edit_event_type==="edit_component_location"){const xa=translate(la.new_center.x-la.original_center.x,la.new_center.y-la.original_center.y);ua=ua.map(Aa=>Aa.pcb_component_id!==la.pcb_component_id?Aa:transformPCBElement(Aa,xa))}else la.pcb_edit_event_type==="edit_trace_hint"&&(ua=applyTraceHintEditEvent(ua,la));return ua},useToast=()=>{const ua=useGlobalStore(la=>la.pcb_viewer_id),J=(la,xa)=>B$1(la,{containerId:ua,...xa});return J.error=(la,xa)=>B$1.error(la,{containerId:ua,...xa}),J.promise=B$1.promise,J},ToastContainer=()=>{reactExports.useEffect(()=>{injectStyle()},[]);const ua=useGlobalStore(J=>J.pcb_viewer_id);return jsxRuntimeExports.jsx(Q$1,{position:"top-center",containerId:ua})},noop=function(){},isBrowser=typeof window<"u",useIsomorphicLayoutEffect$1=isBrowser?reactExports.useLayoutEffect:reactExports.useEffect,useIsomorphicLayoutEffect_default=useIsomorphicLayoutEffect$1,defaultState={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0};function useMeasure(){var ua=reactExports.useState(null),J=ua[0],la=ua[1],xa=reactExports.useState(defaultState),Aa=xa[0],ba=xa[1],Sa=reactExports.useMemo(function(){return new window.ResizeObserver(function(Ma){if(Ma[0]){var Ra=Ma[0].contentRect,Ia=Ra.x,La=Ra.y,Fa=Ra.width,ka=Ra.height,el=Ra.top,tl=Ra.left,rl=Ra.bottom,il=Ra.right;ba({x:Ia,y:La,width:Fa,height:ka,top:el,left:tl,bottom:rl,right:il})}})},[]);return useIsomorphicLayoutEffect_default(function(){if(J)return Sa.observe(J),function(){Sa.disconnect()}},[J]),[la,Aa]}var useMeasure_default=isBrowser&&typeof window.ResizeObserver<"u"?useMeasure:function(){return[noop,defaultState]},useMouseMatrixTransform=(ua={})=>{const J=reactExports.useRef(null),[la,xa]=reactExports.useState(0),Aa=ua.canvasElm??J.current,[ba,Sa]=reactExports.useState(ua.initialTransform??identity$3()),[Ma,Ra]=reactExports.useState(0),[Ia,La]=reactExports.useReducer(il=>il+1,0),Fa=reactExports.useCallback(il=>{ua.onSetTransform&&ua.onSetTransform(il),ua.transform||Sa(il)},[ua.onSetTransform,Sa]),ka=reactExports.useCallback(il=>{Fa(il),La()},[Fa]),el=ua.transform??ba,tl=reactExports.useCallback(()=>{xa(Date.now())},[]);reactExports.useEffect(()=>{const il=ua.canvasElm??J.current;if(il&&!Aa){Ra(Ma+1);return}if(!il){const Fl=setTimeout(()=>{Ra(Ma+1)},100);return()=>clearTimeout(Fl)}let nl=ua.transform??ba,sl={x:0,y:0},ll={x:0,y:0},dl=!1;const gl=Fl=>({x:Fl.pageX-il.getBoundingClientRect().left-window.scrollX,y:Fl.pageY-il.getBoundingClientRect().top-window.scrollY});function _l(Fl){ua.enabled!==!1&&(ua.shouldDrag&&!ua.shouldDrag(Fl)||(sl=gl(Fl),!(Date.now()-la<100)&&(dl=!0,Fl.preventDefault())))}function vl(Fl){if(!dl||ua.enabled===!1||ua.shouldDrag&&!ua.shouldDrag(Fl))return;ll=gl(Fl);const Ol=compose(translate(ll.x-sl.x,ll.y-sl.y),nl);Fa(Ol),nl=Ol,dl=!1}function Cl(Fl){gl(Fl),!(!dl||ua.enabled===!1)&&(ua.shouldDrag&&!ua.shouldDrag(Fl)||(ll=gl(Fl),Fa(compose(translate(ll.x-sl.x,ll.y-sl.y),nl))))}function Ll(Fl){if(ua.enabled===!1||ua.shouldDrag&&!ua.shouldDrag(Fl))return;const Ol=gl(Fl),ql=compose(translate(Ol.x,Ol.y),scale$2(1-Fl.deltaY/1e3,1-Fl.deltaY/1e3),translate(-Ol.x,-Ol.y),nl);Fa(ql),nl=ql,Fl.preventDefault()}function Il(Fl){if(!dl||ua.shouldDrag&&!ua.shouldDrag(Fl))return;if(il){const ql=il.getBoundingClientRect();if(Fl.clientX>=ql.left+10&&Fl.clientX<=ql.right-10&&Fl.clientY>=ql.top+10&&Fl.clientY<=ql.bottom-10)return}dl=!1,ll=gl(Fl);const Ol=compose(translate(ll.x-sl.x,ll.y-sl.y),nl);Fa(Ol),nl=Ol}return il.addEventListener("mousedown",_l),il.addEventListener("mouseup",vl),window.addEventListener("mousemove",Cl),il.addEventListener("mouseout",Il),il.addEventListener("wheel",Ll),()=>{il.removeEventListener("mousedown",_l),il.removeEventListener("mouseup",vl),window.removeEventListener("mousemove",Cl),il.removeEventListener("mouseout",Il),il.removeEventListener("wheel",Ll)}},[Aa,Ma,Ia,la,ua.enabled,ua.shouldDrag]);const rl=reactExports.useCallback(il=>applyToPoint(el,il),[el]);return{ref:J,transform:el,applyTransformToPoint:rl,setTransform:ka,cancelDrag:tl}},src_default=useMouseMatrixTransform,colors_default={"3d_viewer":{background_bottom:"rgb(102, 102, 128)",background_top:"rgb(204, 204, 230)",board:"rgb(51, 43, 23)",copper:"rgb(179, 156, 0)",silkscreen_bottom:"rgb(230, 230, 230)",silkscreen_top:"rgb(230, 230, 230)",soldermask:"rgb(20, 51, 36)",solderpaste:"rgb(128, 128, 128)"},board:{anchor:"rgb(255, 38, 226)",aux_items:"rgb(255, 255, 255)",b_adhes:"rgb(0, 0, 132)",b_crtyd:"rgb(255, 38, 226)",b_fab:"rgb(88, 93, 132)",b_mask:"rgba(2, 255, 238, 0.400)",b_paste:"rgb(0, 194, 194)",b_silks:"rgb(232, 178, 167)",background:"rgb(0, 16, 35)",cmts_user:"rgb(89, 148, 220)",copper:{b:"rgb(77, 127, 196)",f:"rgb(200, 52, 52)",in1:"rgb(127, 200, 127)",in10:"rgb(237, 124, 51)",in11:"rgb(91, 195, 235)",in12:"rgb(247, 111, 142)",in13:"rgb(167, 165, 198)",in14:"rgb(40, 204, 217)",in15:"rgb(232, 178, 167)",in16:"rgb(242, 237, 161)",in17:"rgb(237, 124, 51)",in18:"rgb(91, 195, 235)",in19:"rgb(247, 111, 142)",in2:"rgb(206, 125, 44)",in20:"rgb(167, 165, 198)",in21:"rgb(40, 204, 217)",in22:"rgb(232, 178, 167)",in23:"rgb(242, 237, 161)",in24:"rgb(237, 124, 51)",in25:"rgb(91, 195, 235)",in26:"rgb(247, 111, 142)",in27:"rgb(167, 165, 198)",in28:"rgb(40, 204, 217)",in29:"rgb(232, 178, 167)",in3:"rgb(79, 203, 203)",in30:"rgb(242, 237, 161)",in4:"rgb(219, 98, 139)",in5:"rgb(167, 165, 198)",in6:"rgb(40, 204, 217)",in7:"rgb(232, 178, 167)",in8:"rgb(242, 237, 161)",in9:"rgb(141, 203, 129)"},cursor:"rgb(255, 255, 255)",drc:"rgb(194, 194, 194)",drc_error:"rgba(215, 91, 107, 0.800)",drc_exclusion:"rgb(255, 255, 255)",drc_warning:"rgba(255, 208, 66, 0.902)",dwgs_user:"rgb(194, 194, 194)",eco1_user:"rgb(180, 219, 210)",eco2_user:"rgb(216, 200, 82)",edge_cuts:"rgb(208, 210, 205)",f_adhes:"rgb(132, 0, 132)",f_crtyd:"rgb(255, 0, 245)",f_fab:"rgb(175, 175, 175)",f_mask:"rgba(216, 100, 255, 0.400)",f_paste:"rgba(180, 160, 154, 0.902)",f_silks:"rgb(242, 237, 161)",footprint_text_back:"rgb(0, 0, 132)",footprint_text_front:"rgb(194, 194, 194)",footprint_text_invisible:"rgb(132, 132, 132)",grid:"rgb(132, 132, 132)",grid_axes:"rgb(194, 194, 194)",margin:"rgb(255, 38, 226)",microvia:"rgb(0, 132, 132)",no_connect:"rgb(0, 0, 132)",pad_back:"rgb(77, 127, 196)",pad_front:"rgb(200, 52, 52)",pad_plated_hole:"rgb(194, 194, 0)",pad_through_hole:"rgb(227, 183, 46)",plated_hole:"rgb(26, 196, 210)",ratsnest:"rgba(245, 255, 213, 0.702)",select_overlay:"rgb(4, 255, 67)",through_via:"rgb(236, 236, 236)",user_1:"rgb(194, 194, 194)",user_2:"rgb(89, 148, 220)",user_3:"rgb(180, 219, 210)",user_4:"rgb(216, 200, 82)",user_5:"rgb(194, 194, 194)",user_6:"rgb(89, 148, 220)",user_7:"rgb(180, 219, 210)",user_8:"rgb(216, 200, 82)",user_9:"rgb(232, 178, 167)",via_blind_buried:"rgb(187, 151, 38)",via_hole:"rgb(227, 183, 46)",via_micro:"rgb(0, 132, 132)",via_through:"rgb(236, 236, 236)",worksheet:"rgb(200, 114, 171)"},gerbview:{axes:"rgb(0, 0, 132)",background:"rgb(0, 0, 0)",dcodes:"rgb(255, 255, 255)",grid:"rgb(132, 132, 132)",layers:["rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)","rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)","rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)","rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)"],negative_objects:"rgb(132, 132, 132)",worksheet:"rgb(0, 0, 132)"},palette:["rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)"],schematic:{anchor:"rgb(0, 0, 255)",aux_items:"rgb(0, 0, 0)",background:"rgb(33, 33, 33)",brightened:"rgb(204, 204, 204)",bus:"rgb(0, 96, 192)",bus_junction:"rgb(0, 96, 192)",component_body:"rgb(44, 44, 44)",component_outline:"rgb(192, 0, 0)",cursor:"rgb(224, 224, 224)",erc_error:"rgba(192, 48, 48, 0.800)",erc_warning:"rgba(192, 140, 0, 0.800)",fields:"rgb(128, 0, 160)",grid:"rgb(60, 60, 60)",grid_axes:"rgb(60, 60, 60)",hidden:"rgb(194, 194, 194)",junction:"rgb(0, 160, 0)",label_global:"rgb(0, 160, 224)",label_hier:"rgb(160, 160, 0)",label_local:"rgb(192, 192, 192)",net_name:"rgb(224, 224, 224)",no_connect:"rgb(97, 43, 224)",note:"rgb(192, 192, 0)",override_item_colors:!1,pin:"rgb(192, 0, 0)",pin_name:"rgb(192, 192, 192)",pin_number:"rgb(192, 0, 0)",reference:"rgb(192, 192, 192)",shadow:"rgba(102, 179, 255, 0.800)",sheet:"rgb(128, 0, 160)",sheet_background:"rgba(255, 255, 255, 0.000)",sheet_fields:"rgb(160, 160, 0)",sheet_filename:"rgb(160, 160, 0)",sheet_label:"rgb(160, 160, 0)",sheet_name:"rgb(0, 160, 204)",value:"rgb(192, 192, 192)",wire:"rgb(0, 160, 0)",worksheet:"rgb(192, 0, 0)"}},scaleOnly=(ua,J=1)=>{if(Math.abs(ua.a)!==Math.abs(ua.d))throw new Error("Cannot scale non-uniformly");return J*Math.abs(ua.a)},zIndexMap={elementOverlay:30,dimensionOverlay:30,editTraceHintOverlay:30,errorOverlay:30,ratsNestOverlay:20,toolbarOverlay:20,topLayer:10},LAYER_NAME_TO_COLOR$1={red:"red",black:"black",green:"green",board:"rgb(255, 255, 255)",other:"#eee",top:colors_default.board.copper.f,inner1:colors_default.board.copper.in1,inner2:colors_default.board.copper.in2,inner4:colors_default.board.copper.in4,inner5:colors_default.board.copper.in5,inner6:colors_default.board.copper.in6,inner7:colors_default.board.copper.in7,inner8:colors_default.board.copper.in8,bottom:colors_default.board.copper.b,drill:colors_default.board.anchor,keepout:colors_default.board.background,tkeepout:colors_default.board.b_crtyd,tplace:colors_default.board.b_silks,top_silkscreen:colors_default.board.f_silks,bottom_silkscreen:colors_default.board.b_silks,top_fabrication:colors_default.board.f_fab,bottom_fabrication:colors_default.board.b_fab,...colors_default.board},DEFAULT_DRAW_ORDER=["top","inner1","inner2","inner3","inner4","inner5","inner6","bottom"],Drawer=class{constructor(ua){jp(this,"canvasLayerMap");jp(this,"ctxLayerMap");jp(this,"aperture");jp(this,"transform");jp(this,"foregroundLayer","top");jp(this,"lastPoint");this.canvasLayerMap=ua,this.ctxLayerMap=Object.fromEntries(Object.entries(ua).map(([J,la])=>[J,la.getContext("2d")])),this.transform=identity$3(),this.transform.d*=-1,this.transform=compose(this.transform,translate(0,-500)),this.lastPoint={x:0,y:0},this.equip({})}clear(){for(const ua of Object.values(this.ctxLayerMap))ua.clearRect(0,0,ua.canvas.width,ua.canvas.height)}equip(ua){this.aperture={fontSize:0,shape:"circle",mode:"add",size:0,color:"red",layer:"top",opacity:this.foregroundLayer===ua.color?1:.5,...ua}}drawMeshPattern(ua,J,la,xa,Aa,ba=45){const Sa=this.getLayerCtx(),[Ma,Ra]=applyToPoint(this.transform,[ua,J]),[Ia,La]=applyToPoint(this.transform,[ua+la,J+xa]),Fa=scaleOnly(this.transform,Aa);Sa.lineWidth=1,Sa.strokeStyle=this.aperture.color;const ka=el=>{const tl=Math.sin(el),rl=Math.cos(el),il=Math.sqrt(Math.pow(Ia-Ma,2)+Math.pow(La-Ra,2));for(let nl=-il;nl<=il;nl+=Fa)Sa.beginPath(),Sa.moveTo(Ma+nl*rl-il*tl,Ra+nl*tl+il*rl),Sa.lineTo(Ma+nl*rl+il*tl,Ra+nl*tl-il*rl),Sa.stroke()};ka(ba*Math.PI/180),ka((ba+90)*Math.PI/180)}rect(ua,J,la,xa,Aa){const[ba,Sa]=applyToPoint(this.transform,[ua-la/2,J-xa/2]),[Ma,Ra]=applyToPoint(this.transform,[ua+la/2,J+xa/2]);this.applyAperture();const Ia=this.getLayerCtx();Aa?(Ia.save(),Ia.beginPath(),Ia.rect(ba,Sa,Ma-ba,Ra-Sa),Ia.clip(),this.drawMeshPattern(ua-la/2,J-xa/2,la,xa,.15),Ia.restore(),Ia.strokeRect(ba,Sa,Ma-ba,Ra-Sa)):Ia.fillRect(ba,Sa,Ma-ba,Ra-Sa)}rotatedRect(ua,J,la,xa,Aa,ba){const Sa=this.getLayerCtx();this.applyAperture();const[Ma,Ra]=applyToPoint(this.transform,[ua-la/2,J-xa/2]),[Ia,La]=applyToPoint(this.transform,[ua+la/2,J+xa/2]);Sa.save();const[Fa,ka]=applyToPoint(this.transform,[ua,J]);Sa.translate(Fa,ka);const el=360-Aa;Aa&&Sa.rotate(el*Math.PI/180),Sa.translate(-Fa,-ka),ba?(Sa.beginPath(),Sa.rect(Ma,Ra,Ia-Ma,La-Ra),Sa.clip(),this.drawMeshPattern(ua-la/2,J-xa/2,la,xa,.15),Sa.strokeRect(Ma,Ra,Ia-Ma,La-Ra)):Sa.fillRect(Ma,Ra,Ia-Ma,La-Ra),Sa.restore()}circle(ua,J,la,xa){const Aa=scaleOnly(this.transform,la),[ba,Sa]=applyToPoint(this.transform,[ua,J]);this.applyAperture();const Ma=this.getLayerCtx();xa?(Ma.save(),Ma.beginPath(),Ma.arc(ba,Sa,Aa,0,2*Math.PI),Ma.clip(),this.drawMeshPattern(ua-la,J-la,la*2,la*2,.15),Ma.restore(),Ma.beginPath(),Ma.arc(ba,Sa,Aa,0,2*Math.PI),Ma.stroke()):(Ma.beginPath(),Ma.arc(ba,Sa,Aa,0,2*Math.PI),Ma.fill())}oval(ua,J,la,xa){const Aa=scaleOnly(this.transform,la),ba=scaleOnly(this.transform,xa),[Sa,Ma]=applyToPoint(this.transform,[ua,J]);this.applyAperture();const Ra=this.getLayerCtx();Ra.beginPath(),Ra.ellipse(Sa,Ma,Aa,ba,0,0,2*Math.PI),Ra.fill(),Ra.closePath()}pill(ua,J,la,xa){const[Aa,ba]=applyToPoint(this.transform,[ua-la/2,J+xa/2]),Sa=scaleOnly(this.transform,la),Ma=scaleOnly(this.transform,xa),Ra=Math.min(Sa,Ma)/2;this.applyAperture();const Ia=this.getLayerCtx();Ia.beginPath(),Ia.arc(Aa+Ra,ba+Ra,Ra,Math.PI,Math.PI*1.5),Ia.arc(Aa+Sa-Ra,ba+Ra,Ra,Math.PI*1.5,0),Ia.arc(Aa+Sa-Ra,ba+Ma-Ra,Ra,0,Math.PI*.5),Ia.arc(Aa+Ra,ba+Ma-Ra,Ra,Math.PI*.5,Math.PI),Ia.fill(),Ia.closePath()}polygon(ua){if(ua.length<3)return;this.applyAperture();const J=this.getLayerCtx(),la=ua.map(Aa=>applyToPoint(this.transform,[Aa.x,Aa.y]));J.beginPath(),J.moveTo(la[0][0],la[0][1]);for(let Aa=1;Aa<la.length;Aa++)J.lineTo(la[Aa][0],la[Aa][1]);J.closePath(),J.fill();const xa=scaleOnly(this.transform,this.aperture.size);J.lineWidth=xa,J.stroke()}debugText(ua,J,la){const[xa,Aa]=applyToPoint(this.transform,[J,la]);this.applyAperture();const ba=this.getLayerCtx();ba.font="10px sans-serif",ba.fillText(ua,xa,Aa)}getLayerCtx(){const ua=this.ctxLayerMap[this.aperture.layer];if(!ua)throw new Error(`No context for layer "${this.aperture.layer}"`);return ua}orderAndFadeLayers(){const{canvasLayerMap:ua,foregroundLayer:J}=this,la=new Set([J,"drill","other","board"]);["drill","board",J,...DEFAULT_DRAW_ORDER.filter(Aa=>Aa!==J)].forEach((Aa,ba)=>{const Sa=ua[Aa];Sa&&(Sa.style.zIndex=`${zIndexMap.topLayer-ba}`,Sa.style.opacity=la.has(Aa)?"1":"0.5")})}applyAperture(){const{transform:ua,aperture:J}=this;let{size:la,mode:xa,color:Aa,fontSize:ba,layer:Sa}=J;Sa in this.ctxLayerMap||(this.aperture.layer="other");const Ma=this.getLayerCtx();if(!Ma)throw new Error(`No context for layer "${this.foregroundLayer}"`);if(Aa||(Aa="undefined"),Ma.lineWidth=scaleOnly(ua,la),Ma.lineCap="round",xa==="add"){let Ra=(Aa==null?void 0:Aa[0])==="#"||Aa!=null&&Aa.startsWith("rgb")?Aa:LAYER_NAME_TO_COLOR$1[Aa==null?void 0:Aa.toLowerCase()]?LAYER_NAME_TO_COLOR$1[Aa==null?void 0:Aa.toLowerCase()]:null;Ra===null&&(console.warn(`Color mapping for "${Aa}" not found`),Ra="white"),Ma.fillStyle=Ra,Ma.strokeStyle=Ra}else Ma.globalCompositeOperation="destination-out",Ma.fillStyle="rgba(0,0,0,1)",Ma.strokeStyle="rgba(0,0,0,1)";Ma.font=`${scaleOnly(inverse(ua),ba)}px sans-serif`}moveTo(ua,J){this.lastPoint={x:ua,y:J}}lineTo(ua,J){const[la,xa]=applyToPoint(this.transform,[ua,J]),{size:Aa,shape:ba,mode:Sa}=this.aperture,Ma=scaleOnly(this.transform,Aa);let{lastPoint:Ra}=this;const Ia=applyToPoint(this.transform,Ra);this.applyAperture();const La=this.getLayerCtx();ba==="square"&&La.fillRect(Ia.x-Ma/2,Ia.y-Ma/2,Ma,Ma),La.beginPath(),La.moveTo(Ia.x,Ia.y),La.lineTo(la,xa),La.stroke(),La.closePath(),ba==="square"&&La.fillRect(la-Ma/2,xa-Ma/2,Ma,Ma),this.lastPoint={x:ua,y:J}}};function rotateText(ua){const{lines:J,anchorPoint:la,ccwRotation:xa}=ua;if(!xa)return J;const Aa=xa*Math.PI/180,ba=rotate(Aa),Sa=compose(translate(la.x,la.y),ba,translate(-la.x,-la.y));return applyToPoint(Sa,la),J.map(Ma=>({...Ma,x1:applyToPoint(Sa,{x:Ma.x1,y:Ma.y1}).x,y1:applyToPoint(Sa,{x:Ma.x1,y:Ma.y1}).y,x2:applyToPoint(Sa,{x:Ma.x2,y:Ma.y2}).x,y2:applyToPoint(Sa,{x:Ma.x2,y:Ma.y2}).y}))}var svgAlphabet={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",1:"M 0.198 0.272 L 0.537 0 L 0.54 1",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",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",4:"M0.7328897338403042 0L0 0.6684672518568535L1 0.6684672518568535M0.7243346007604563 0.4530722484807562L0.7243346007604563 1",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",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",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",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",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",A:"M0 1L0.4808333333333333 0L1 1M0.24250000000000002 0.6099439775910365L0.7341666666666666 0.6099439775910365",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",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",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",E:"M0 0L0 1M0 0L1 0M0 0.5L0.7 0.5M0 1L1 1",F:"M0 0L0 1M0.011363636363636364 0.006802721088435374L1 0.006802721088435374M0.011363636363636364 0.4965986394557823L0.8409090909090909 0.4965986394557823",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",H:"M0 0L0 1M0 0.4788732394366197L0.989010989010989 0.4788732394366197M1 0L1 1",I:"M0.5 0L0.5 1",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",K:"M0 0L0 1M0.8787878787878788 0.06666666666666667L0 0.6148148148148148M0.3333333333333333 0.45925925925925926L1 0.9777777777777777",L:"M0 0L0 1L1 1",M:"M0 1L0 0L0.5 0.6512L1 0L1 1",N:"M0 1L0 0L1 1L0.9803729146221786 0",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",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",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",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",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",T:"M0 0L1 0M0.5148514851485149 0L0.5148514851485149 1",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",V:"M0 0L0.5348837209302325 1L1 0",W:"M0 0L0.23300090661831369 0.9873417721518988L0.49954669084315495 0.30081906180193585L0.7851314596554849 1L1 0.0215934475055845",X:"M0 0L0.9893617021276596 1M1 0L0.010638297872340425 1",Y:"M0 0L0.4860515021459227 0.44712562100780695M1 0.0014194464158977947L0.48927038626609437 0.44996451383960256L0.5075107296137339 1",Z:"M0 0L1 0L0 1L1 1",".":"M 0.49 1 L 0.41 1","*":"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","(":"M0.75 0L0.25 0.5L0.25 0.5L0.75 1",")":"M0.25 0L0.75 0.5L0.75 0.5L0.25 1","-":"M0 0.5L1 0.5","+":"M 0 0.5 L 1 0.5 M 0.5 0.125 L 0.5 0.875","=":"M0 0.25L1 0.25M0 0.75L1 0.75",_:"M0 1 L1 1","[":"M0.75 0L0.25 0L0.25 1L0.75 1","]":"M0.25 0L0.75 0L0.75 1L0.25 1","<":"M0.75 0L0.25 0.5L0.25 0.5L0.75 1",">":"M0.25 0L0.75 0.5L0.75 0.5L0.25 1","'":"M 0.5 0 L 0.5 0.5",'"':"M 0.25 0 L 0.25 0.5 M 0.75 0 L 0.75 0.5"},lineAlphabet={};for(const ua in svgAlphabet){lineAlphabet[ua]=[];const J=svgAlphabet[ua].split("M").slice(1).map(la=>la.split("L").map(xa=>xa.trim().split(" ").map(parseFloat)));for(const la of J)for(let xa=0;xa<la.length-1;xa++)lineAlphabet[ua].push({x1:la[xa][0],y1:1-la[xa][1],x2:la[xa+1][0],y2:1-la[xa+1][1]})}var LETTER_HEIGHT_TO_WIDTH_RATIO=.6,LETTER_HEIGHT_TO_SPACE_RATIO=.2,getTextWidth=ua=>ua.text.length*ua.size*LETTER_HEIGHT_TO_WIDTH_RATIO+(ua.text.length-1)*ua.size*LETTER_HEIGHT_TO_SPACE_RATIO,convertTextToLines=ua=>{const J=ua.size/8,la=ua.size*LETTER_HEIGHT_TO_WIDTH_RATIO,xa=ua.size*LETTER_HEIGHT_TO_SPACE_RATIO,Aa=[];for(let ba=0;ba<ua.text.length;ba++){const Sa=ua.text[ba],Ma=lineAlphabet[Sa.toUpperCase()];if(Ma)for(const{x1:Ra,y1:Ia,x2:La,y2:Fa}of Ma)Aa.push({pcb_drawing_type:"line",x1:ua.x+(la+xa)*ba+la*Ra,y1:ua.y+ua.size*Ia,x2:ua.x+(la+xa)*ba+la*La,y2:ua.y+ua.size*Fa,width:J,layer:ua.layer,unit:ua.unit})}return Aa};function getColor(ua){return ua.is_mouse_over||ua.is_in_highlighted_net?color(LAYER_NAME_TO_COLOR$1[ua.layer]).lighten(.5).rgb().toString():LAYER_NAME_TO_COLOR$1[ua.layer]}var drawLine=(ua,J)=>{ua.equip({size:J.zoomIndependent?J.width/ua.transform.a:J.width,shape:J.squareCap?"square":"circle",color:getColor(J),layer:J.layer}),ua.moveTo(J.x1,J.y1),ua.lineTo(J.x2,J.y2)},drawText=(ua,J)=>{ua.equip({fontSize:J.size,color:J.layer});let la={x:0,y:0};const xa=getTextWidth(J),Aa=J.size;J.align==="top_left"?la.y=-Aa:J.align==="bottom_right"?la.x=-xa:J.align==="top_right"?(la.x=-xa,la.y=-Aa):J.align==="center"&&(la.x=-xa/2,la.y=-Aa/2),J.x??(J.x=0),J.y??(J.y=0);const ba={x:J.x,y:J.y};let Sa=convertTextToLines({...J,x:J.x+la.x,y:J.y+la.y});if(J.ccw_rotation){const Ma={lines:Sa,anchorPoint:ba,ccwRotation:J.ccw_rotation};Sa=rotateText(Ma)}for(const Ma of Sa)drawLine(ua,Ma)},drawRect=(ua,J)=>{ua.equip({color:getColor(J),layer:J.layer}),ua.rect(J.x,J.y,J.w,J.h,J.mesh_fill)},drawRotatedRect=(ua,J)=>{ua.equip({color:getColor(J),layer:J.layer}),ua.rotatedRect(J.x,J.y,J.w,J.h,J.ccw_rotation)},drawCircle=(ua,J)=>{ua.equip({color:getColor(J),layer:J.layer}),ua.circle(J.x,J.y,J.r,J.mesh_fill)},drawOval=(ua,J)=>{ua.equip({color:getColor(J),layer:J.layer}),ua.oval(J.x,J.y,J.rX,J.rY)},drawPill=(ua,J)=>{ua.equip({color:getColor(J),layer:J.layer}),ua.pill(J.x,J.y,J.w,J.h)},drawPolygon=(ua,J)=>{ua.equip({color:getColor(J),layer:J.layer}),ua.polygon(J.points)},drawPrimitive=(ua,J)=>{var la;switch(J.pcb_drawing_type){case"line":return drawLine(ua,J);case"text":return drawText(ua,J);case"rect":return((la=J._element)==null?void 0:la.shape)==="rotated_rect"?drawRotatedRect(ua,{...J,ccw_rotation:J._element.ccw_rotation,mesh_fill:J.mesh_fill}):drawRect(ua,J);case"circle":return drawCircle(ua,J);case"oval":return drawOval(ua,J);case"pill":return drawPill(ua,J);case"polygon":return drawPolygon(ua,J)}},drawPrimitives=(ua,J)=>{J.sort((la,xa)=>{const Aa=["bottom","top","drill"];return Aa.indexOf(la.layer)-Aa.indexOf(xa.layer)}),J.forEach(la=>drawPrimitive(ua,la))},CanvasPrimitiveRenderer=({primitives:ua,transform:J,grid:la,width:xa=500,height:Aa=500})=>{const ba=reactExports.useRef(),Sa=useGlobalStore(Ma=>Ma.selected_layer);return reactExports.useEffect(()=>{if(!ba.current||Object.keys(ba.current).length===0)return;const Ma=new Drawer(ba.current);J&&(Ma.transform=J),Ma.clear(),Ma.foregroundLayer=Sa,drawPrimitives(Ma,ua),Ma.orderAndFadeLayers()},[ua,J,Sa]),jsxRuntimeExports.jsxs("div",{style:{backgroundColor:"black",width:xa,height:Aa,position:"relative"},children:[jsxRuntimeExports.jsx(SuperGridExports.SuperGrid,{textColor:"rgba(0,255,0,0.8)",majorColor:"rgba(0,255,0,0.4)",minorColor:"rgba(0,255,0,0.2)",screenSpaceCellSize:200,width:xa,height:Aa,transform:J,stringifyCoord:(Ma,Ra,Ia)=>`${SuperGridExports.toMMSI(Ma,Ia)}, ${SuperGridExports.toMMSI(Ra,Ia)}`}),all_layers.map(Ma=>Ma.replace(/-/g,"")).concat(["drill","other"]).map((Ma,Ra)=>jsxRuntimeExports.jsx("canvas",{ref:Ia=>{ba.current??(ba.current={}),ba.current[Ma]=Ia},style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:xa,height:Aa},Ma))]})};function getExpandedStroke(ua,J){if(ua.length<2)throw new Error("Stroke must have at least two points");const la=ua.map(Fa=>Array.isArray(Fa)?{x:Fa[0],y:Fa[1]}:Fa),xa=[],Aa=[];function ba(Fa,ka){const el=ka.x-Fa.x,tl=ka.y-Fa.y,rl=Math.sqrt(el*el+tl*tl);return{x:-tl/rl,y:el/rl}}function Sa(Fa,ka,el,tl){const rl=tl/2,il={x:Fa.x+ka.x*rl*el,y:Fa.y+ka.y*rl*el};el>0?xa.push(il):Aa.unshift(il)}const Ma=ba(la[0],la[1]),Ra=la[0].trace_width??J;Sa(la[0],Ma,1,Ra),Sa(la[0],Ma,-1,Ra);for(let Fa=1;Fa<la.length-1;Fa++){const ka=la[Fa-1],el=la[Fa],tl=la[Fa+1],rl=ba(ka,el),il=ba(el,tl),nl=rl.x+il.x,sl=rl.y+il.y,ll=Math.sqrt(nl*nl+sl*sl),dl=el.trace_width??J;if(ll/2>2*(dl/2))Sa(el,rl,1,dl),Sa(el,il,1,dl),Sa(el,rl,-1,dl),Sa(el,il,-1,dl);else{const _l=1/ll;Sa(el,{x:nl*_l,y:sl*_l},1,dl),Sa(el,{x:nl*_l,y:sl*_l},-1,dl)}}const Ia=ba(la[la.length-2],la[la.length-1]),La=la[la.length-1].trace_width??J;return Sa(la[la.length-1],Ia,1,La),Sa(la[la.length-1],Ia,-1,La),[...xa,...Aa]}var globalPcbDrawingObjectCount=0,convertElementToPrimitives=(ua,J)=>{var Sa;const la="pcb_component_id"in ua?J.find(Ma=>Ma.type==="pcb_component"&&Ma.pcb_component_id===ua.pcb_component_id):void 0,xa=la&&"source_component_id"in la?J.find(Ma=>Ma.type==="source_component"&&Ma.source_component_id===la.source_component_id):void 0,Aa="source_port_id"in ua?ua.source_port_id:"pcb_port_id"in ua?(Sa=su_default$1(J).pcb_port.get(ua.pcb_port_id))==null?void 0:Sa.source_port_id:void 0,ba=Aa?J.find(Ma=>Ma.type==="source_port"&&Ma.source_port_id===Aa):void 0;switch(ua.type){case"pcb_board":{const{width:Ma,height:Ra,center:Ia,outline:La}=ua;return La&&La.length>2?La.map((Fa,ka,el)=>({_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"line",x1:Fa.x,y1:Fa.y,x2:ka===el.length-1?el[0].x:el[ka+1].x,y2:ka===el.length-1?el[0].y:el[ka+1].y,width:1,zoomIndependent:!0,layer:"board",_element:ua})):[{_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"line",x1:Ia.x-Ma/2,y1:Ia.y-Ra/2,x2:Ia.x+Ma/2,y2:Ia.y-Ra/2,width:1,zoomIndependent:!0,layer:"board",_element:ua},{_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"line",x1:Ia.x-Ma/2,y1:Ia.y+Ra/2,x2:Ia.x+Ma/2,y2:Ia.y+Ra/2,width:1,zoomIndependent:!0,layer:"board",_element:ua},{_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"line",x1:Ia.x-Ma/2,y1:Ia.y-Ra/2,x2:Ia.x-Ma/2,y2:Ia.y+Ra/2,width:1,zoomIndependent:!0,layer:"board",_element:ua},{_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"line",x1:Ia.x+Ma/2,y1:Ia.y-Ra/2,x2:Ia.x+Ma/2,y2:Ia.y+Ra/2,width:1,zoomIndependent:!0,layer:"board",_element:ua}]}case"pcb_smtpad":{if(ua.shape==="rect"||ua.shape==="rotated_rect"){const{shape:Ma,x:Ra,y:Ia,width:La,height:Fa,layer:ka}=ua;return[{_pcb_drawing_object_id:`rect_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"rect",x:Ra,y:Ia,w:La,h:Fa,layer:ka||"top",_element:ua,_parent_pcb_component:la,_parent_source_component:xa,_source_port:ba}]}else if(ua.shape==="circle"){const{x:Ma,y:Ra,radius:Ia,layer:La}=ua;return[{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:Ma,y:Ra,r:Ia,layer:La||"top",_element:ua,_parent_pcb_component:la,_parent_source_component:xa,_source_port:ba}]}return[]}case"pcb_hole":{if(ua.hole_shape==="circle"||!ua.hole_shape){const{x:Ma,y:Ra,hole_diameter:Ia}=ua;return[{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:Ma,y:Ra,r:Ia/2,layer:"drill",_element:ua,_parent_pcb_component:la,_parent_source_component:xa}]}return[]}case"pcb_plated_hole":if(ua.shape==="circle"){const{x:Ma,y:Ra,hole_diameter:Ia,outer_diameter:La}=ua;return[{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:Ma,y:Ra,r:La/2,layer:"top",_element:ua,_parent_pcb_component:la,_parent_source_component:xa,_source_port:ba},{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:Ma,y:Ra,r:Ia/2,layer:"drill",_element:ua}]}else if(ua.shape==="oval"){const{x:Ma,y:Ra,outer_height:Ia,outer_width:La,hole_height:Fa,hole_width:ka}=ua;return[{_pcb_drawing_object_id:`oval_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"oval",x:Ma,y:Ra,rX:La/2,rY:Ia/2,layer:"top",_element:ua,_parent_pcb_component:la,_parent_source_component:xa,_source_port:ba},{_pcb_drawing_object_id:`oval_${globalPcbDrawingObjectCount++}`,_element:ua,pcb_drawing_type:"oval",x:Ma,y:Ra,rX:ka/2,rY:Fa/2,layer:"drill"}]}else if(ua.shape==="pill"){const{x:Ma,y:Ra,outer_height:Ia,outer_width:La,hole_height:Fa,hole_width:ka}=ua;return[{_pcb_drawing_object_id:`pill_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"pill",x:Ma,y:Ra,w:La,h:Ia,layer:"top",_element:ua,_parent_pcb_component:la,_parent_source_component:xa,_source_port:ba},{_pcb_drawing_object_id:`pill_${globalPcbDrawingObjectCount++}`,_element:ua,pcb_drawing_type:"pill",x:Ma,y:Ra,w:ka,h:Fa,layer:"drill"}]}else return[];case"pcb_keepout":if(ua.shape==="circle"){const{center:Ma,radius:Ra}=ua;return[{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:Ma.x,y:Ma.y,r:Ra,layer:"top",_element:ua,_parent_pcb_component:la,_parent_source_component:xa,mesh_fill:!0}]}else if(ua.shape==="rect"){const{x:Ma,y:Ra,width:Ia,height:La}=ua;return[{_pcb_drawing_object_id:`rect_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"rect",x:Ma,y:Ra,w:Ia,h:La,layer:"top",_element:ua,_parent_pcb_component:la,_parent_source_component:xa,mesh_fill:!0}]}case"pcb_trace":{const Ma=[];if(ua.route_thickness_mode==="interpolated"){const La=ua.route.map(ka=>({x:ka.x,y:ka.y,trace_width:ka.route_type==="wire"?ka.width:.5})),Fa=getExpandedStroke(La,.5);return Ma.push({_pcb_drawing_object_id:`polygon_${globalPcbDrawingObjectCount++}`,_element:ua,pcb_drawing_type:"polygon",points:Fa,layer:ua.route[0].layer}),ua.route.forEach(ka=>{ka.route_type==="via"&&Ma.push({_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,_element:ua,pcb_drawing_type:"circle",x:ka.x,y:ka.y,radius:ka.outer_diameter/2,fill:!0,layer:ua.route.layer})}),Ma}let Ra=null,Ia=null;for(const La of ua.route)La.route_type==="wire"&&(Ra!==null&&Ia!==null&&Ma.push({_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,_element:ua,pcb_drawing_type:"line",x1:Ra,y1:Ia,x2:La.x,y2:La.y,width:La.width,squareCap:!1,layer:La.layer}),Ra=La.x,Ia=La.y);return Ma}case"pcb_via":{const{x:Ma,y:Ra,outer_diameter:Ia,hole_diameter:La,from_layer:Fa,to_layer:ka}=ua;return[{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:Ma,y:Ra,r:Ia/2,layer:Fa,_element:ua,_parent_pcb_component:la,_parent_source_component:xa},{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,_element:ua,pcb_drawing_type:"circle",x:Ma,y:Ra,r:La/2,layer:"drill",_parent_pcb_component:la,_parent_source_component:xa},{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:Ma,y:Ra,r:Ia/2,layer:ka,_element:ua,_parent_pcb_component:la,_parent_source_component:xa}]}case"pcb_silkscreen_rect":return[{_pcb_drawing_object_id:`rect_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"rect",x:ua.center.x,y:ua.center.y,w:ua.width,h:ua.height,layer:ua.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_circle":return[{_pcb_drawing_object_id:`circle_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"circle",x:ua.center.x,y:ua.center.y,r:ua.radius,layer:ua.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_oval":return[{_pcb_drawing_object_id:`oval_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"oval",x:ua.center.x,y:ua.center.y,rX:ua.radius_x/2,rY:ua.radius_y/2,layer:ua.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_pill":return[{_pcb_drawing_object_id:`pill_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"pill",x:ua.center.x,y:ua.center.y,w:ua.width,h:ua.height,layer:ua.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_line":return[{_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"line",x1:ua.x1,y1:ua.y1,x2:ua.x2,y2:ua.y2,width:.1,squareCap:!1,layer:ua.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_fabrication_note_path":case"pcb_silkscreen_path":{const{pcb_component_id:Ma,route:Ra,type:Ia}=ua;let La;return Ia==="pcb_silkscreen_path"?La=ua.layer==="bottom"?"bottom_silkscreen":"top_silkscreen":Ia==="pcb_fabrication_note_path"&&(La="top_fabrication"),Ra.slice(0,-1).map((Fa,ka)=>{const el=Ra[ka+1];return{_pcb_drawing_object_id:`line_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"line",x1:Fa.x,y1:Fa.y,x2:el.x,y2:el.y,width:ua.stroke_width??.1,squareCap:!1,layer:La,_element:ua,_parent_pcb_component:la,_parent_source_component:xa,_source_port:ba}}).filter(Boolean)}case"pcb_silkscreen_text":return[{_pcb_drawing_object_id:`text_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"text",x:ua.anchor_position.x,y:ua.anchor_position.y,layer:ua.layer==="bottom"?"bottom_silkscreen":"top_silkscreen",align:ua.anchor_alignment??"center",text:ua.text,size:ua.font_size,ccw_rotation:ua.ccw_rotation}];case"pcb_fabrication_note_text":return[{_pcb_drawing_object_id:`text_${globalPcbDrawingObjectCount++}`,pcb_drawing_type:"text",x:ua.anchor_position.x,y:ua.anchor_position.y,layer:ua.layer==="bottom"?"bottom_fabrication":"top_fabrication",size:ua.font_size,align:ua.anchor_alignment??"center",text:ua.text}]}return[]};function getTraceOverlayInfo({primitiveElement:ua,elements:J}){let la=ua.trace_length?`${ua.trace_length.toFixed(3)}`:"";const xa=su_default$1(J).source_trace.get(ua==null?void 0:ua.source_trace_id);if(xa!=null&&xa.display_name&&(xa!=null&&xa.max_length?la+=` / ${xa.max_length}mm `:la+=" mm ",la+=`(${xa.display_name})`),!la)return null;const Aa=ua.trace_length&&(xa==null?void 0:xa.max_length)&&ua.trace_length>xa.max_length;return{text:la,isOverLength:Aa}}function filterTracesIfMultiple(ua){const{primitives:J,is_showing_multiple_traces_length:la,elements:xa}=ua,Aa=J.filter(Ra=>Ra._element.type==="pcb_trace"),ba=xa.filter(Ra=>Ra.type==="source_trace"),Sa=J.filter(Ra=>Ra._element.type!=="pcb_trace"),Ma=Aa.filter(Ra=>ba.some(Ia=>Ra._element.type==="pcb_trace"&&Ra._element.source_trace_id===Ia.source_trace_id&&Ia.max_length!==void 0));if(!la)return[...Sa,...Ma];if(Aa.length>1){const Ra=Aa.reduce((Ia,La)=>{const Fa=Ia._element.trace_length;return La._element.trace_length<Fa?La:Ia},Aa[0]);return[...Sa,Ra]}return J}var containerStyle={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},getTextForHighlightedPrimitive=ua=>{const{_element:J,_parent_pcb_component:la,_parent_source_component:xa,_source_port:Aa}=ua;switch(J.type){case"pcb_trace":return J.trace_length?`${J.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{let ba="";xa&&"name"in xa&&xa.name&&(ba+=`.${xa.name} > `);const Sa=Array.from(new Set((J.port_hints??[]).concat((Aa==null?void 0:Aa.port_hints)??[]))).sort((Ma,Ra)=>Ra.localeCompare(Ma));return ba+=Sa.map(Ma=>Ma.match(/^[0-9]+$/)?`port.${Ma}`:`.${Ma}`).join(", "),ba}default:return""}},layerColorHightlightMap={top:"red",bottom:"aqua"},HighlightedPrimitiveBoxWithText=({primitive:ua,mousePos:J,elements:la})=>{var tl;const[xa,Aa]=reactExports.useState(!1),ba=ua._element;reactExports.useEffect(()=>{setTimeout(()=>{Aa(!0)},100)},[]);let[Sa,Ma,Ra,Ia]=[ua.screen_x,ua.screen_y,ua.screen_w,ua.screen_h];const La=ua.same_space_index??0,Fa=26,ka=layerColorHightlightMap[(tl=ua==null?void 0:ua._element)==null?void 0:tl.layer]??"red";let el=0;if(ba.type==="pcb_smtpad"&&(ba==null?void 0:ba.shape)==="rotated_rect"&&(el=ba==null?void 0:ba.ccw_rotation),ba.type==="pcb_trace"){const il=getTraceOverlayInfo({primitiveElement:ba,elements:la});if(!il)return null;const nl=J.y-35;return jsxRuntimeExports.jsx("div",{style:{zIndex:zIndexMap.elementOverlay,position:"absolute",left:J.x,top:nl,color:ka,pointerEvents:"none",transform:"translateX(-50%)"},children:jsxRuntimeExports.jsx("div",{style:{backgroundColor:"#f2efcc",color:il.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",minWidth:"45px",textAlign:"center",whiteSpace:"nowrap"},children:il.text})})}return jsxRuntimeExports.jsx("div",{style:{zIndex:zIndexMap.elementOverlay,position:"absolute",left:Sa-Ra/2-8,top:Ma-Ia/2-8,width:Ra+16,height:Ia+16,color:ka,transform:`rotate(${-el}deg)`,transformOrigin:"center center"},children:jsxRuntimeExports.jsx("div",{style:{width:xa?`calc(100% + ${Fa*2*La}px)`:"100%",height:xa?`calc(100% + ${Fa*2*La}px)`:"100%",marginLeft:xa?`${-Fa*La}px`:0,marginTop:xa?`${-Fa*La}px`:0,border:`1px solid ${ka}`,opacity:xa||La===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:jsxRuntimeExports.jsx("div",{style:{position:"absolute",bottom:Ia+20+Fa*La,marginRight:xa?`${-Fa*La}px`:0,marginBottom:xa?0:-Fa*La,transition:"margin-right 0.2s, margin-bottom 0.2s",backgroundColor:"#f2efcc",color:"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",transform:`rotate(${el}deg)`,minWidth:"45px",textAlign:"center"},children:getTextForHighlightedPrimitive(ua)})})})},ElementOverlayBox=({highlightedPrimitives:ua,mousePos:J,elements:la})=>{const[xa,Aa]=useGlobalStore(Ma=>[Ma.is_moving_component,Ma.is_showing_multiple_traces_length]),ba=ua.some(Ma=>Ma._element.type==="pcb_smtpad")&&ua.some(Ma=>Ma._element.type==="pcb_trace");let Sa=ua;return ba&&(Sa=Sa.filter(Ma=>Ma._element.type==="pcb_smtpad")),Sa=filterTracesIfMultiple({primitives:Sa,is_showing_multiple_traces_length:Aa,elements:la}),jsxRuntimeExports.jsx("div",{style:containerStyle,children:!xa&&Sa.map((Ma,Ra)=>jsxRuntimeExports.jsx(HighlightedPrimitiveBoxWithText,{primitive:Ma,mousePos:J,elements:la},Ra))})};function ifSetsMatchExactly(ua,J){return ua.size!==J.size?!1:Array.from(ua).every(la=>J.has(la))}var MouseElementTracker=({elements:ua,children:J,transform:la,primitives:xa,onMouseHoverOverPrimitives:Aa})=>{const[ba,Sa]=reactExports.useState([]),[Ma,Ra]=reactExports.useState({x:0,y:0}),Ia=reactExports.useMemo(()=>{var Fa,ka;const La=[];for(const el of ba){if(((Fa=el._element)==null?void 0:Fa.type)==="pcb_via"||((ka=el._element)==null?void 0:ka.type)==="pcb_component"||(el==null?void 0:el.layer)==="drill")continue;const tl=applyToPoint(la,el),rl="w"in el?el.w:"r"in el?el.r*2:0,il="h"in el?el.h:"r"in el?el.r*2:0,nl={w:rl*la.a,h:il*la.a};let sl=La.filter(ll=>tl.x===ll.screen_x&&tl.y===ll.screen_y&&nl.w===ll.screen_w&&nl.h===ll.screen_h).length;La.push({...el,screen_x:tl.x,screen_y:tl.y,screen_w:nl.w,screen_h:nl.h,same_space_index:sl})}return La},[ba,la]);return jsxRuntimeExports.jsxs("div",{style:{position:"relative"},onMouseMove:La=>{var Fa;if(la){const ka=La.currentTarget.getBoundingClientRect(),el=La.clientX-ka.left,tl=La.clientY-ka.top;Ra({x:el,y:tl});const rl=applyToPoint(inverse(la),{x:el,y:tl}),il=[];for(const nl of xa){if(!nl._element)continue;if("x1"in nl&&((Fa=nl._element)==null?void 0:Fa.type)==="pcb_trace"){const dl=pointToSegmentDistance({x:rl.x,y:rl.y},{x:nl.x1,y:nl.y1},{x:nl.x2,y:nl.y2}),gl=nl.width||.5,_l=Math.max(gl*25,2)/la.a;dl<_l&&il.push(nl);continue}if(!("x"in nl&&"y"in nl))continue;let sl=0,ll=0;if("w"in nl&&"h"in nl)sl=nl.w,ll=nl.h;else if("r"in nl)sl=nl.r*2,ll=nl.r*2;else continue;Math.abs(nl.x-rl.x)<sl/2&&Math.abs(nl.y-rl.y)<ll/2&&il.push(nl)}if(ifSetsMatchExactly(new Set(il.map(nl=>nl._pcb_drawing_object_id)),new Set(ba.map(nl=>nl._pcb_drawing_object_id))))return;Sa(il),Aa(il)}},children:[J,jsxRuntimeExports.jsx(ElementOverlayBox,{elements:ua,mousePos:Ma,highlightedPrimitives:Ia})]})},DimensionOverlay=({children:ua,transform:J})=>{J||(J=identity$3());const[la,xa]=reactExports.useState(!1),[Aa,ba]=reactExports.useState(!1),[Sa,Ma]=reactExports.useState({x:0,y:0}),[Ra,Ia]=reactExports.useState({x:0,y:0}),La=reactExports.useRef({x:0,y:0}),Fa=reactExports.useRef(null),ka=Fa.current,el=ka==null?void 0:ka.getBoundingClientRect();reactExports.useEffect(()=>{const nl=Fa.current,sl=gl=>{gl.key==="d"&&(Ma({x:La.current.x,y:La.current.y}),Ia({x:La.current.x,y:La.current.y}),xa(_l=>!_l),ba(!0),gl.preventDefault()),gl.key==="Escape"&&(xa(!1),ba(!1))},ll=()=>{nl&&nl.addEventListener("keydown",sl)},dl=()=>{nl&&nl.removeEventListener("keydown",sl)};return nl&&(nl.addEventListener("focus",ll),nl.addEventListener("blur",dl),nl.addEventListener("mouseenter",ll),nl.addEventListener("mouseleave",dl)),()=>{nl&&(nl.removeEventListener("focus",ll),nl.removeEventListener("blur",dl),nl.removeEventListener("mouseenter",ll),nl.removeEventListener("mouseleave",dl))}},[Fa]);const tl=applyToPoint(J,Sa),rl=applyToPoint(J,Ra),il={left:Math.min(tl.x,rl.x),right:Math.max(tl.x,rl.x),top:Math.min(tl.y,rl.y),bottom:Math.max(tl.y,rl.y),flipX:tl.x>rl.x,flipY:tl.y>rl.y,width:0,height:0};return il.width=il.right-il.left,il.height=il.bottom-il.top,jsxRuntimeExports.jsxs("div",{ref:Fa,tabIndex:0,style:{position:"relative"},onMouseEnter:()=>{Fa.current&&Fa.current.focus()},onMouseLeave:()=>{Fa.current&&Fa.current.blur()},onMouseMove:nl=>{const sl=nl.currentTarget.getBoundingClientRect(),ll=nl.clientX-sl.left,dl=nl.clientY-sl.top,gl=applyToPoint(inverse(J),{x:ll,y:dl});La.current.x=gl.x,La.current.y=gl.y,Aa&&Ia({x:gl.x,y:gl.y})},onMouseDown:()=>{Aa?ba(!1):la&&xa(!1)},children:[ua,la&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{style:{position:"absolute",left:il.left,width:il.width,textAlign:"center",top:tl.y+2,color:"red",mixBlendMode:"difference",pointerEvents:"none",marginTop:il.flipY?0:-20,fontSize:12,fontFamily:"sans-serif",zIndex:zIndexMap.dimensionOverlay},children:Math.abs(Sa.x-Ra.x).toFixed(2)}),jsxRuntimeExports.jsx("div",{style:{position:"absolute",left:rl.x,height:il.height,display:"flex",flexDirection:"column",justifyContent:"center",top:il.top,color:"red",pointerEvents:"none",mixBlendMode:"difference",fontSize:12,fontFamily:"sans-serif",zIndex:zIndexMap.dimensionOverlay},children:jsxRuntimeExports.jsx("div",{style:{marginLeft:il.flipX?"-100%":4,paddingRight:4},children:Math.abs(Sa.y-Ra.y).toFixed(2)})}),jsxRuntimeExports.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:zIndexMap.dimensionOverlay},width:el.width,height:el.height,children:[jsxRuntimeExports.jsx("defs",{children:jsxRuntimeExports.jsx("marker",{id:"head",orient:"auto",markerWidth:"3",markerHeight:"4",refX:"2",refY:"2",children:jsxRuntimeExports.jsx("path",{d:"M0,0 V4 L2,2 Z",fill:"red"})})}),jsxRuntimeExports.jsx("line",{x1:tl.x,y1:tl.y,x2:rl.x,y2:rl.y,markerEnd:"url(#head)",strokeWidth:1.5,fill:"none",stroke:"red"}),jsxRuntimeExports.jsx("line",{x1:tl.x,y1:tl.y,x2:rl.x,y2:tl.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"}),jsxRuntimeExports.jsx("line",{x1:rl.x,y1:tl.y,x2:rl.x,y2:rl.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"})]}),jsxRuntimeExports.jsxs("div",{style:{right:0,bottom:0,position:"absolute",color:"red",fontFamily:"sans-serif",fontSize:12,margin:4},children:["(",Sa.x.toFixed(2),",",Sa.y.toFixed(2),")",jsxRuntimeExports.jsx("br",{}),"(",Ra.x.toFixed(2),",",Ra.y.toFixed(2),")",jsxRuntimeExports.jsx("br",{}),"dist:"," ",Math.sqrt(Math.pow(Ra.x-Sa.x,2)+Math.pow(Ra.y-Sa.y,2)).toFixed(2)]})]})]})},package_default={name:"@tscircuit/pcb-viewer",version:"1.11.28",main:"dist/index.js",type:"module",repository:"tscircuit/pcb-viewer",license:"MIT",scripts:{start:"storybook dev -p 6006",build:"tsup ./src/index.tsx --platform browser --dts --sourcemap --format esm --outDir dist",yalc:"npm run build && yalc push",storybook:"storybook dev -p 6006","build-storybook":"storybook build",format:"biome format . --write","format:check":"biome format ."},files:["dist"],devDependencies:{"@biomejs/biome":"^1.9.4","@semantic-release/commit-analyzer":"^9.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^9.0.1","@semantic-release/release-notes-generator":"^10.0.3","@storybook/nextjs":"^8.0.6","@storybook/react":"^8.0.6","@swc/core":"^1.4.12","@tscircuit/core":"0.0.272","@tscircuit/eagle-xml-converter":"^1.0.0","@tscircuit/props":"^0.0.130","@tscircuit/soup-util":"^0.0.41","@types/color":"^3.0.6","@types/node":"18.7.23","@types/react":"^18.3.3","circuit-json":"^0.0.128",next:"^14.1.4","pixi.js":"^8.6.6",react:"^18.2.0","react-dom":"^18.2.0","react-use":"^17.4.0",storybook:"^8.0.6",tsup:"^8.0.2","type-fest":"^3.0.0",typescript:"^5.4.4","use-mouse-matrix-transform":"^1.3.0",zod:"^3.23.5"},peerDependencies:{react:"*","@tscircuit/core":"*"},dependencies:{"@emotion/css":"^11.11.2","circuit-json-to-connectivity-map":"^0.0.18","@tscircuit/math-utils":"^0.0.10","circuit-to-svg":"^0.0.36",color:"^4.2.3","react-supergrid":"^1.0.10","react-toastify":"^10.0.5","transformation-matrix":"^2.13.0",zustand:"^4.5.2"}},useHotKey=(ua,J)=>{const la=useGlobalStore(xa=>xa.is_mouse_over_container);reactExports.useEffect(()=>{if(!ua||typeof J!="function")return;const xa=Aa=>{const ba=ua.split("+"),Sa=ba.includes("ctrl"),Ma=ba.includes("shift"),Ra=ba.includes("alt"),Ia=ba.includes("meta"),La=ba[ba.length-1];la&&(!Sa||Aa.ctrlKey)&&(!Ma||Aa.shiftKey)&&(!Ra||Aa.altKey)&&(!Ia||Aa.metaKey)&&Aa.key.toLowerCase()===La.toLowerCase()&&(Aa.preventDefault(),J())};return window.addEventListener("keydown",xa),()=>{window.removeEventListener("keydown",xa)}},[ua,J])},LayerButton=({name:ua,selected:J,onClick:la})=>jsxRuntimeExports.jsxs("div",{className:css`
22439
22439
  margin-top: 2px;
22440
22440
  padding: 4px;