@tscircuit/runframe 0.0.92 → 0.0.94

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.
@@ -7295,7 +7295,7 @@ ${RV.stack}`),VV.complete=!0,"root"in this&&this.root&&this.root.emit("asyncEffe
7295
7295
  iteration: ${WV}`),debugSelectAll(`part: "${VV[WV]}"`),debugSelectAll(`currentSearch: [${RV.map(dV=>dV.getString()).join(",")}]`),debugSelectAll(`currentResults: [${UV.map(dV=>dV.getString()).join(",")}]`),IV===">")ZV=!0;else{const dV=RV.filter(FV=>isMatchingSelector(FV,IV));RV=dV.flatMap(FV=>ZV?FV.children:FV.getSelectableDescendants()),UV=dV,ZV=!1}return UV}selectOne(J,VV){var UV;let RV=(UV=VV==null?void 0:VV.type)==null?void 0:UV.toLowerCase();return VV!=null&&VV.port&&(RV="port"),RV?this.selectAll(J).find(ZV=>ZV.lowercaseComponentName===RV)??null:VV!=null&&VV.pcbPrimitive?this.selectAll(J).find(ZV=>ZV.isPcbPrimitive)??null:VV!=null&&VV.schematicPrimitive?this.selectAll(J).find(ZV=>ZV.isSchematicPrimitive)??null:this.selectAll(J)[0]??null}getAvailablePcbLayers(){var J,VV;if(this.isPcbPrimitive){const{maybeFlipLayer:RV}=this._getPcbPrimitiveFlippedHelpers();return"layer"in this._parsedProps||this.componentName==="SmtPad"?[RV(this._parsedProps.layer??"top")]:"layers"in this._parsedProps?this._parsedProps.layers:this.componentName==="PlatedHole"?((VV=(J=this.root)==null?void 0:J._getBoard())==null?void 0:VV.allLayers)??["top","bottom"]:[]}return[]}getDescendants(){const J=[];for(const VV of this.children)J.push(VV),J.push(...VV.getDescendants());return J}getSelectableDescendants(){const J=[];for(const VV of this.children)VV.isSubcircuit?J.push(VV):(J.push(VV),J.push(...VV.getSelectableDescendants()));return J}_getPinCount(){return 0}_getSchematicBoxDimensions(){return null}renderError(J){var VV;if(typeof J=="string")return super.renderError(J);(VV=this.root)==null||VV.db.pcb_placement_error.insert(J)}getString(){var UV,ZV;const{lowercaseComponentName:J,_parsedProps:VV,parent:RV}=this;return(VV==null?void 0:VV.pinNumber)!==void 0&&((UV=RV==null?void 0:RV.props)!=null&&UV.name)&&(VV!=null&&VV.name)?`<${J}#${this._renderId}(pin:${VV.pinNumber} .${RV==null?void 0:RV.props.name}>.${VV.name}) />`:(ZV=RV==null?void 0:RV.props)!=null&&ZV.name&&(VV!=null&&VV.name)?`<${J}#${this._renderId}(.${RV==null?void 0:RV.props.name}>.${VV==null?void 0:VV.name}) />`:VV!=null&&VV.from&&(VV!=null&&VV.to)?`<${J}#${this._renderId}(from:${VV.from} to:${VV==null?void 0:VV.to}) />`:VV!=null&&VV.name?`<${J}#${this._renderId} name=".${VV==null?void 0:VV.name}" />`:VV!=null&&VV.portHints?`<${J}#${this._renderId}(${VV.portHints.map(WV=>`.${WV}`).join(", ")}) />`:`<${J}#${this._renderId} />`}get[Symbol.toStringTag](){return this.getString()}[Symbol.for("nodejs.util.inspect.custom")](){return this.getString()}};function pairs$1(lV){const J=[];for(let VV=0;VV<lV.length-1;VV++)J.push([lV[VV],lV[VV+1]]);return J}var netProps=z$1.object({name:z$1.string()}),Net=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"source_net_id")}get config(){return{componentName:"Net",zodProps:netProps}}getPortSelector(){return`net.${this.props.name}`}doInitialSourceRender(){const{db:J}=this.root,{_parsedProps:VV}=this,RV=J.source_net.insert({name:VV.name,member_source_group_ids:[]});this.source_net_id=RV.source_net_id}getAllConnectedPorts(){const J=this.getSubcircuit().selectAll("port"),VV=[];for(const RV of J){const UV=RV._getDirectlyConnectedTraces();for(const ZV of UV)if(ZV._isExplicitlyConnectedToNet(this)){VV.push(RV);break}}return VV}_getAllDirectlyConnectedTraces(){const J=this.getSubcircuit().selectAll("trace"),VV=[];for(const RV of J)RV._isExplicitlyConnectedToNet(this)&&VV.push(RV);return VV}doInitialPcbRouteNetIslands(){var ZV;if((ZV=this.root)!=null&&ZV.pcbDisabled||this.getSubcircuit()._parsedProps.routingDisabled)return;const{db:J}=this.root,VV=this._getAllDirectlyConnectedTraces().filter(WV=>{var IV;return(((IV=WV._portsRoutedOnPcb)==null?void 0:IV.length)??0)>0}),RV=[];for(const WV of VV){const IV=WV._portsRoutedOnPcb,dV=RV.find(CV=>IV.some(FV=>CV.ports.includes(FV)));if(!dV){RV.push({ports:[...IV],traces:[WV]});continue}dV.traces.push(WV),dV.ports.push(...IV)}if(RV.length===0)return;const UV=pairs$1(RV);for(const[WV,IV]of UV){const dV=WV.ports.map(GV=>GV._getGlobalPcbPositionBeforeLayout()),CV=IV.ports.map(GV=>GV._getGlobalPcbPositionBeforeLayout());let FV=1/0,NV=[-1,-1];for(let GV=0;GV<dV.length;GV++){const cV=dV[GV];for(let TV=0;TV<CV.length;TV++){const iV=CV[TV],EV=Math.sqrt((cV.x-iV.x)**2+(cV.y-iV.y)**2);EV<FV&&(FV=EV,NV=[GV,TV])}}const eV=WV.ports[NV[0]],gV=IV.ports[NV[1]],JV=J.toArray().filter(GV=>GV.type==="pcb_smtpad"||GV.type==="pcb_trace"||GV.type==="pcb_plated_hole"||GV.type==="pcb_hole"||GV.type==="source_port"||GV.type==="pcb_port"),{solution:nV}=autoroute2(JV.concat([{type:"source_trace",source_trace_id:"__net_trace_tmp",connected_source_port_ids:[eV.source_port_id,gV.source_port_id]}])),aV=nV[0];if(!aV){this.renderError({pcb_trace_error_id:"",pcb_trace_id:"__net_trace_tmp",pcb_component_ids:[eV.pcb_component_id,gV.pcb_component_id].filter(Boolean),pcb_port_ids:[eV.pcb_port_id,gV.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(aV)}}renderError(J){var VV;if(typeof J=="string")return super.renderError(J);(VV=this.root)==null||VV.db.pcb_trace_error.insert(J)}},createNetsFromProps=(lV,J)=>{for(const VV of J)typeof VV=="string"&&VV.startsWith("net.")&&(lV.getSubcircuit().selectOne(VV)||lV.getSubcircuit().add(new Net({name:VV.split("net.")[1]})))},SmtPad=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_smtpad_id",null);SI(this,"matchedPort",null);SI(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 VV;const J=(VV=this.getPrimitiveContainer())==null?void 0:VV.selectAll("port");if(this.props.portHints){for(const RV of J)if(RV.isMatchingAnyOf(this.props.portHints)){this.matchedPort=RV,RV.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var NV,eV,gV,JV,nV;if((NV=this.root)!=null&&NV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this;if(!VV.portHints)return;const RV=this.getPrimitiveContainer(),UV=this._getGlobalPcbPositionBeforeLayout();RV==null||RV._getGlobalPcbPositionBeforeLayout();const ZV=decomposeTSR(this._computePcbGlobalTransformBeforeLayout()),WV=Math.abs(ZV.rotation.angle*(180/Math.PI)-90)%180<.01,{maybeFlipLayer:IV}=this._getPcbPrimitiveFlippedHelpers(),dV=(RV==null?void 0:RV._parsedProps.pcbRotation)??0;let CV=null;const FV=((eV=this.parent)==null?void 0:eV.pcb_component_id)??((gV=this.getPrimitiveContainer())==null?void 0:gV.pcb_component_id);VV.shape==="circle"?(CV=J.pcb_smtpad.insert({pcb_component_id:FV,pcb_port_id:(JV=this.matchedPort)==null?void 0:JV.pcb_port_id,layer:IV(VV.layer??"top"),shape:"circle",radius:VV.radius,port_hints:VV.portHints.map(aV=>aV.toString()),x:UV.x,y:UV.y}),J.pcb_solder_paste.insert({layer:CV.layer,shape:"circle",radius:CV.radius*.7,x:CV.x,y:CV.y,pcb_component_id:CV.pcb_component_id,pcb_smtpad_id:CV.pcb_smtpad_id})):VV.shape==="rect"&&(CV=dV===0||WV?J.pcb_smtpad.insert({pcb_component_id:FV,pcb_port_id:(nV=this.matchedPort)==null?void 0:nV.pcb_port_id,layer:IV(VV.layer??"top"),shape:"rect",width:WV?VV.height:VV.width,height:WV?VV.width:VV.height,port_hints:VV.portHints.map(aV=>aV.toString()),x:UV.x,y:UV.y}):J.pcb_smtpad.insert({pcb_component_id:FV,layer:VV.layer??"top",shape:"rotated_rect",width:VV.width,height:VV.height,x:UV.x,y:UV.y,ccw_rotation:dV,port_hints:VV.portHints.map(aV=>aV.toString())}),CV.shape==="rect"&&J.pcb_solder_paste.insert({layer:CV.layer,shape:"rect",width:CV.width*.7,height:CV.height*.7,x:CV.x,y:CV.y,pcb_component_id:CV.pcb_component_id,pcb_smtpad_id:CV.pcb_smtpad_id})),CV&&(this.pcb_smtpad_id=CV.pcb_smtpad_id)}doInitialPcbPortAttachment(){var VV,RV;if((VV=this.root)!=null&&VV.pcbDisabled)return;const{db:J}=this.root;J.pcb_smtpad.update(this.pcb_smtpad_id,{pcb_port_id:(RV=this.matchedPort)==null?void 0:RV.pcb_port_id})}_getPcbCircuitJsonBounds(){const{db:J}=this.root,VV=J.pcb_smtpad.get(this.pcb_smtpad_id);if(VV.shape==="rect")return{center:{x:VV.x,y:VV.y},bounds:{left:VV.x-VV.width/2,top:VV.y+VV.height/2,right:VV.x+VV.width/2,bottom:VV.y-VV.height/2},width:VV.width,height:VV.height};if(VV.shape==="rotated_rect"){const RV=VV.ccw_rotation*Math.PI/180,UV=Math.cos(RV),ZV=Math.sin(RV),WV=VV.width/2,IV=VV.height/2,dV=Math.abs(WV*UV)+Math.abs(IV*ZV),CV=Math.abs(WV*ZV)+Math.abs(IV*UV);return{center:{x:VV.x,y:VV.y},bounds:{left:VV.x-dV,right:VV.x+dV,top:VV.y-CV,bottom:VV.y+CV},width:dV*2,height:CV*2}}if(VV.shape==="circle")return{center:{x:VV.x,y:VV.y},bounds:{left:VV.x-VV.radius,top:VV.y-VV.radius,right:VV.x+VV.radius,bottom:VV.y+VV.radius},width:VV.radius*2,height:VV.radius*2};throw new Error(`circuitJson bounds calculation not implemented for shape "${VV.shape}"`)}_setPositionFromLayout(J){var UV;const{db:VV}=this.root;VV.pcb_smtpad.update(this.pcb_smtpad_id,{x:J.x,y:J.y});const RV=VV.pcb_solder_paste.list().find(ZV=>ZV.pcb_smtpad_id===this.pcb_smtpad_id);VV.pcb_solder_paste.update(RV==null?void 0:RV.pcb_solder_paste_id,{x:J.x,y:J.y}),(UV=this.matchedPort)==null||UV._setPositionFromLayout(J)}},SilkscreenPath=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_silkscreen_path_id",null)}get config(){return{componentName:"SilkscreenPath",zodProps:silkscreenPathProps}}doInitialPcbPrimitiveRender(){var WV,IV;if((WV=this.root)!=null&&WV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=VV.layer??"top";if(RV!=="top"&&RV!=="bottom")throw new Error(`Invalid layer "${RV}" for SilkscreenPath. Must be "top" or "bottom".`);const UV=this._computePcbGlobalTransformBeforeLayout(),ZV=J.pcb_silkscreen_path.insert({pcb_component_id:(IV=this.parent)==null?void 0:IV.pcb_component_id,layer:RV,route:VV.route.map(dV=>{const CV=applyToPoint(UV,{x:dV.x,y:dV.y});return{...dV,x:CV.x,y:CV.y}}),stroke_width:VV.strokeWidth??.1});this.pcb_silkscreen_path_id=ZV.pcb_silkscreen_path_id}},PlatedHole=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_plated_hole_id",null);SI(this,"matchedPort",null);SI(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,VV=J.pcb_plated_hole.get(this.pcb_plated_hole_id),RV=this.getPcbSize();return{center:{x:VV.x,y:VV.y},bounds:{left:VV.x-RV.width/2,top:VV.y+RV.height/2,right:VV.x+RV.width/2,bottom:VV.y-RV.height/2},width:RV.width,height:RV.height}}_setPositionFromLayout(J){var RV;const{db:VV}=this.root;VV.pcb_plated_hole.update(this.pcb_plated_hole_id,{x:J.x,y:J.y}),(RV=this.matchedPort)==null||RV._setPositionFromLayout(J)}doInitialPortMatching(){var VV;const J=(VV=this.getPrimitiveContainer())==null?void 0:VV.selectAll("port");if(this.props.portHints){for(const RV of J)if(RV.isMatchingAnyOf(this.props.portHints)){this.matchedPort=RV,RV.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var ZV,WV,IV,dV,CV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this._getGlobalPcbPositionBeforeLayout(),UV=((WV=this.parent)==null?void 0:WV.pcb_component_id)??((IV=this.getPrimitiveContainer())==null?void 0:IV.pcb_component_id);if(VV.shape==="circle"){const FV=J.pcb_plated_hole.insert({pcb_component_id:UV,pcb_port_id:(dV=this.matchedPort)==null?void 0:dV.pcb_port_id,outer_diameter:VV.outerDiameter,hole_diameter:VV.holeDiameter,shape:"circle",port_hints:this.getNameAndAliases(),x:RV.x,y:RV.y,layers:["top","bottom"]});this.pcb_plated_hole_id=FV.pcb_plated_hole_id}else if(VV.shape==="pill"||VV.shape==="oval"){const FV=J.pcb_plated_hole.insert({pcb_component_id:UV,pcb_port_id:(CV=this.matchedPort)==null?void 0:CV.pcb_port_id,outer_width:VV.outerWidth,outer_height:VV.outerHeight,hole_width:VV.innerWidth,hole_height:VV.innerHeight,shape:VV.shape,port_hints:this.getNameAndAliases(),x:RV.x,y:RV.y,layers:["top","bottom"]});this.pcb_plated_hole_id=FV.pcb_plated_hole_id}}doInitialPcbPortAttachment(){var VV,RV;if((VV=this.root)!=null&&VV.pcbDisabled)return;const{db:J}=this.root;J.pcb_plated_hole.update(this.pcb_plated_hole_id,{pcb_port_id:(RV=this.matchedPort)==null?void 0:RV.pcb_port_id})}},Keepout=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_keepout_id",null);SI(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Keepout",zodProps:pcbKeepoutProps}}doInitialPcbPrimitiveRender(){var IV;if((IV=this.root)!=null&&IV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this._getGlobalPcbPositionBeforeLayout(),UV=decomposeTSR(this._computePcbGlobalTransformBeforeLayout()),ZV=Math.abs(UV.rotation.angle*(180/Math.PI)-90)%180<.01;let WV=null;VV.shape==="circle"?WV=J.pcb_keepout.insert({layers:["top"],shape:"circle",radius:VV.radius,center:{x:RV.x,y:RV.y}}):VV.shape==="rect"&&(WV=J.pcb_keepout.insert({layers:["top"],shape:"rect",...ZV?{width:VV.height,height:VV.width}:{width:VV.width,height:VV.height},center:{x:RV.x,y:RV.y}})),WV&&(this.pcb_keepout_id=WV.pcb_keepout_id)}},Hole=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_hole_id",null);SI(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Hole",zodProps:holeProps}}getPcbSize(){const{_parsedProps:J}=this;return{width:J.diameter,height:J.diameter}}doInitialPcbPrimitiveRender(){var ZV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this._getGlobalPcbPositionBeforeLayout(),UV=J.pcb_hole.insert({hole_shape:"circle",hole_diameter:VV.diameter,x:RV.x,y:RV.y});this.pcb_hole_id=UV.pcb_hole_id}_getPcbCircuitJsonBounds(){const{db:J}=this.root,VV=J.pcb_hole.get(this.pcb_hole_id),RV=this.getPcbSize();return{center:{x:VV.x,y:VV.y},bounds:{left:VV.x-RV.width/2,top:VV.y-RV.height/2,right:VV.x+RV.width/2,bottom:VV.y+RV.height/2},width:RV.width,height:RV.height}}_setPositionFromLayout(J){const{db:VV}=this.root;VV.pcb_hole.update(this.pcb_hole_id,{x:J.x,y:J.y})}},createComponentsFromSoup=lV=>{const J=[];for(const VV of lV)VV.type==="pcb_smtpad"&&VV.shape==="rect"?J.push(new SmtPad({pcbX:VV.x,pcbY:VV.y,layer:VV.layer,shape:"rect",height:VV.height,width:VV.width,portHints:VV.port_hints})):VV.type==="pcb_smtpad"&&VV.shape==="circle"?J.push(new SmtPad({pcbX:VV.x,pcbY:VV.y,layer:VV.layer,shape:"circle",radius:VV.radius,portHints:VV.port_hints})):VV.type==="pcb_silkscreen_path"?J.push(new SilkscreenPath({layer:VV.layer,route:VV.route,strokeWidth:VV.stroke_width})):VV.type==="pcb_plated_hole"&&VV.shape==="circle"?VV.shape==="circle"&&J.push(new PlatedHole({pcbX:VV.x,pcbY:VV.y,shape:"circle",holeDiameter:VV.hole_diameter,outerDiameter:VV.outer_diameter,portHints:VV.port_hints})):VV.type==="pcb_keepout"&&VV.shape==="circle"?J.push(new Keepout({pcbX:VV.center.x,pcbY:VV.center.y,shape:"circle",radius:VV.radius})):VV.type==="pcb_keepout"&&VV.shape==="rect"?J.push(new Keepout({pcbX:VV.center.x,pcbY:VV.center.y,shape:"rect",width:VV.width,height:VV.height})):VV.type==="pcb_hole"&&VV.hole_shape==="circle"&&J.push(new Hole({pcbX:VV.x,pcbY:VV.y,diameter:VV.hole_diameter}));return J};function getBoundsOfPcbComponents(lV){let J=1/0,VV=1/0,RV=-1/0,UV=-1/0;for(const IV of lV)if(IV.isPcbPrimitive){const{x:dV,y:CV}=IV._getGlobalPcbPositionBeforeLayout(),{width:FV,height:NV}=IV.getPcbSize();J=Math.min(J,dV-FV/2),VV=Math.min(VV,CV-NV/2),RV=Math.max(RV,dV+FV/2),UV=Math.max(UV,CV+NV/2)}else if(IV.componentName==="Footprint"){const dV=getBoundsOfPcbComponents(IV.children);J=Math.min(J,dV.minX),VV=Math.min(VV,dV.minY),RV=Math.max(RV,dV.maxX),UV=Math.max(UV,dV.maxY)}let ZV=RV-J,WV=UV-VV;return ZV<0&&(ZV=0),WV<0&&(WV=0),{minX:J,minY:VV,maxX:RV,maxY:UV,width:ZV,height:WV}}function getRelativeDirection(lV,J){const VV=J.x-lV.x,RV=J.y-lV.y;return Math.abs(VV)>Math.abs(RV)?VV>=0?"right":"left":RV>=0?"up":"down"}var areAllPcbPrimitivesOverlapping=lV=>{if(lV.length<=1)return!0;const J=lV.map(ZV=>{const WV=ZV._getPcbCircuitJsonBounds();return{left:WV.bounds.left,right:WV.bounds.right,top:WV.bounds.top,bottom:WV.bounds.bottom}}),VV=Array(J.length).fill(!1).map(()=>Array(J.length).fill(!1));for(let ZV=0;ZV<J.length;ZV++)for(let WV=ZV+1;WV<J.length;WV++){const IV=J[ZV],dV=J[WV];VV[ZV][WV]=VV[WV][ZV]=!(IV.right<dV.left||IV.left>dV.right||IV.bottom>dV.top||IV.top<dV.bottom)}const RV=new Set,UV=ZV=>{RV.add(ZV);for(let WV=0;WV<J.length;WV++)VV[ZV][WV]&&!RV.has(WV)&&UV(WV)};return UV(0),RV.size===J.length},getCenterOfPcbPrimitives=lV=>{if(lV.length===0)throw new Error("Cannot get center of empty PCB primitives array");const J=lV.map(UV=>UV._getPcbCircuitJsonBounds().center).filter(Boolean),VV=J.reduce((UV,ZV)=>UV+ZV.x,0),RV=J.reduce((UV,ZV)=>UV+ZV.y,0);return{x:VV/J.length,y:RV/J.length}},portProps=z$1.object({name:z$1.string().optional(),pinNumber:z$1.number().optional(),aliases:z$1.array(z$1.string()).optional()}),Port=class extends PrimitiveComponent{constructor(J,VV={}){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);SI(this,"source_port_id",null);SI(this,"pcb_port_id",null);SI(this,"schematic_port_id",null);SI(this,"schematicSymbolPortDef",null);SI(this,"matchedComponents");SI(this,"facingDirection",null);SI(this,"originDescription",null);VV.originDescription&&(this.originDescription=VV.originDescription),this.matchedComponents=[]}get config(){return{componentName:"Port",zodProps:portProps}}_getGlobalPcbPositionBeforeLayout(){const J=this.matchedComponents.find(VV=>VV.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,VV=J.pcb_port.get(this.pcb_port_id);return{center:{x:VV.x,y:VV.y},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getGlobalPcbPositionAfterLayout(){return this._getPcbCircuitJsonBounds().center}_getGlobalSchematicPositionBeforeLayout(){var RV,UV;const J=(RV=this.parent)==null?void 0:RV.getSchematicSymbol();if(J&&this.schematicSymbolPortDef){const ZV=compose(this.parent.computeSchematicGlobalTransform(),translate(-J.center.x,-J.center.y));return applyToPoint(ZV,this.schematicSymbolPortDef)}const VV=(UV=this==null?void 0:this.parent)==null?void 0:UV._getSchematicBoxDimensions();if(VV&&this.props.pinNumber!==void 0){const ZV=VV.getPortPositionByPinNumber(this.props.pinNumber);return ZV?applyToPoint(this.parent.computeSchematicGlobalTransform(),ZV):{x:0,y:0}}return{x:0,y:0}}_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 VV=J.schematic_port.get(this.schematic_port_id);if(!VV)throw new Error(`Schematic port not found when trying to get post-layout position: ${this.schematic_port_id}`);return VV.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(RV=>RV._isExplicitlyConnectedToPort(this))}doInitialSourceRender(){var ZV;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this.getNameAndAliases(),UV=J.source_port.insert({name:VV.name,pin_number:VV.pinNumber,port_hints:RV,source_component_id:(ZV=this.parent)==null?void 0:ZV.source_component_id});this.source_port_id=UV.source_port_id}doInitialSourceParentAttachment(){var VV,RV,UV,ZV;const{db:J}=this.root;if(!((VV=this.parent)!=null&&VV.source_component_id))throw new Error(`${this.getString()} has no parent source component (parent: ${(RV=this.parent)==null?void 0:RV.getString()})`);J.source_port.update(this.source_port_id,{source_component_id:(UV=this.parent)==null?void 0:UV.source_component_id}),this.source_component_id=(ZV=this.parent)==null?void 0:ZV.source_component_id}doInitialPcbPortRender(){var ZV,WV,IV,dV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{matchedComponents:VV}=this;if(!((WV=this.parent)!=null&&WV.pcb_component_id))throw new Error(`${this.getString()} has no parent pcb component, cannot render pcb_port (parent: ${(IV=this.parent)==null?void 0:IV.getString()})`);const RV=VV.filter(CV=>CV.isPcbPrimitive);if(RV.length===0)return;let UV=null;if(RV.length===1&&(UV=RV[0]._getPcbCircuitJsonBounds().center),RV.length>1){if(!areAllPcbPrimitivesOverlapping(RV))throw new Error(`${this.getString()} has multiple non-overlapping pcb matches, unclear how to place pcb_port: ${RV.map(CV=>CV.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)`);UV=getCenterOfPcbPrimitives(RV)}if(UV){const CV=J.pcb_port.insert({pcb_component_id:(dV=this.parent)==null?void 0:dV.pcb_component_id,layers:this.getAvailablePcbLayers(),...UV,source_port_id:this.source_port_id});this.pcb_port_id=CV.pcb_port_id}else{const CV=RV[0];throw new Error(`${CV.getString()} does not have a center or _getGlobalPcbPositionBeforeLayout method (needed for pcb_port placement)`)}}doInitialSchematicPortRender(){var NV;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this.getPrimitiveContainer();if(!RV)return;const UV=RV._getGlobalSchematicPositionBeforeLayout(),ZV=this._getGlobalSchematicPositionBeforeLayout();let WV=null;const IV=RV._getSchematicBoxDimensions();IV&&VV.pinNumber!==void 0&&(WV=IV.getPortPositionByPinNumber(VV.pinNumber)),this.getSubcircuit().props._schDebugObjectsEnabled&&J.schematic_debug_object.insert({shape:"rect",center:ZV,size:{width:.1,height:.1},label:"obstacle"}),WV!=null&&WV.side?this.facingDirection={left:"left",right:"right",top:"up",bottom:"down"}[WV.side]:this.facingDirection=getRelativeDirection(UV,ZV);const dV=J.source_port.get(this.source_port_id);let CV;for(const eV of(dV==null?void 0:dV.port_hints)??[])eV.match(/^(pin)?\d+$/)||(CV=eV);const FV=J.schematic_port.insert({schematic_component_id:(NV=this.parent)==null?void 0:NV.schematic_component_id,center:ZV,source_port_id:this.source_port_id,facing_direction:this.facingDirection,distance_from_component_edge:.4,side_of_component:WV==null?void 0:WV.side,pin_number:VV.pinNumber,true_ccw_index:WV==null?void 0:WV.trueIndex,display_pin_label:CV});this.schematic_port_id=FV.schematic_port_id}_setPositionFromLayout(J){const{db:VV}=this.root;this.pcb_port_id&&VV.pcb_port.update(this.pcb_port_id,{x:J.x,y:J.y})}_hasMatchedPcbPrimitive(){return this.matchedComponents.some(J=>J.isPcbPrimitive)}},getPinNumberFromLabels=lV=>{const J=lV.find(VV=>/^(pin)?\d+$/.test(VV));return J?Number.parseInt(J.replace(/^pin/,"")):null};function getPortFromHints(lV){const J=getPinNumberFromLabels(lV);return J?new Port({pinNumber:J,aliases:lV.filter(VV=>VV.toString()!==J.toString()&&VV!==`pin${J}`)}):null}var hasExplicitPinMapping=lV=>{for(const J of["leftSide","rightSide","topSide","bottomSide"])if(J in lV&&typeof lV[J]=="number")throw new Error(`A number was specified for "${J}", you probably meant to use "size" not "side"`);return"leftSide"in lV||"rightSide"in lV||"topSide"in lV||"bottomSide"in lV},getSizeOfSidesFromPortArrangement=lV=>{var ZV,WV,IV,dV;if(hasExplicitPinMapping(lV))return{leftSize:((ZV=lV.leftSide)==null?void 0:ZV.pins.length)??0,rightSize:((WV=lV.rightSide)==null?void 0:WV.pins.length)??0,topSize:((IV=lV.topSide)==null?void 0:IV.pins.length)??0,bottomSize:((dV=lV.bottomSide)==null?void 0:dV.pins.length)??0};const{leftSize:J=0,rightSize:VV=0,topSize:RV=0,bottomSize:UV=0}=lV;return{leftSize:J,rightSize:VV,topSize:RV,bottomSize:UV}};function isExplicitPinMappingArrangement(lV){return lV.leftSide!==void 0}var getAllDimensionsForSchematicBox=lV=>{var aV,GV,cV,TV,iV,EV,MV,AV;const J=lV.portDistanceFromEdge??.4;let VV=lV.schPortArrangement?getSizeOfSidesFromPortArrangement(lV.schPortArrangement):null;const RV={left:0,right:0,top:0,bottom:0};let UV=lV.pinCount??null;if(UV===null)if(VV)UV=VV.leftSize+VV.rightSize+VV.topSize;else throw new Error("Could not determine pin count for the schematic box");if(UV&&!VV){const pV=Math.floor(UV/2);VV={leftSize:UV-pV,rightSize:pV,topSize:0,bottomSize:0}}VV||(VV={leftSize:0,rightSize:0,topSize:0,bottomSize:0});const ZV=({side:pV,sideIndex:HV,truePinIndex:oV})=>{var nl,dl,LV,OV;if(!lV.schPortArrangement||!isExplicitPinMappingArrangement(lV.schPortArrangement))return oV+1;const DV={left:"top-to-bottom",bottom:"left-to-right",right:"bottom-to-top",top:"right-to-left"}[pV],wV=((dl=(nl=lV.schPortArrangement)==null?void 0:nl[`${pV}Side`])==null?void 0:dl.direction)??DV,qV=(OV=(LV=lV.schPortArrangement)==null?void 0:LV[`${pV}Side`])==null?void 0:OV.pins;let Il=HV;return wV!==DV&&(Il=qV.length-HV-1),parsePinNumberFromLabelsOrThrow(qV[Il],lV.pinLabels)},WV=[];let IV=0,dV=0;for(let pV=0;pV<VV.leftSize;pV++){const HV=ZV({side:"left",sideIndex:pV,truePinIndex:dV}),oV=((aV=lV.numericSchPinStyle)==null?void 0:aV[`pin${HV}`])??((GV=lV.numericSchPinStyle)==null?void 0:GV[HV]);oV!=null&&oV.topMargin&&(IV+=oV.topMargin),WV.push({trueIndex:dV,pinNumber:HV,side:"left",distanceFromOrthogonalEdge:IV}),oV!=null&&oV.bottomMargin&&(IV+=oV.bottomMargin),pV===VV.leftSize-1?RV.left=IV:IV+=lV.schPinSpacing,dV++}IV=0;for(let pV=0;pV<VV.bottomSize;pV++){const HV=ZV({side:"bottom",sideIndex:pV,truePinIndex:dV}),oV=((cV=lV.numericSchPinStyle)==null?void 0:cV[`pin${HV}`])??((TV=lV.numericSchPinStyle)==null?void 0:TV[HV]);oV!=null&&oV.leftMargin&&(IV+=oV.leftMargin),WV.push({trueIndex:dV,pinNumber:HV,side:"bottom",distanceFromOrthogonalEdge:IV}),oV!=null&&oV.rightMargin&&(IV+=oV.rightMargin),pV===VV.bottomSize-1?RV.bottom=IV:IV+=lV.schPinSpacing,dV++}IV=0;for(let pV=0;pV<VV.rightSize;pV++){const HV=ZV({side:"right",sideIndex:pV,truePinIndex:dV}),oV=((iV=lV.numericSchPinStyle)==null?void 0:iV[`pin${HV}`])??((EV=lV.numericSchPinStyle)==null?void 0:EV[HV]);oV!=null&&oV.bottomMargin&&(IV+=oV.bottomMargin),WV.push({trueIndex:dV,pinNumber:HV,side:"right",distanceFromOrthogonalEdge:IV}),oV!=null&&oV.topMargin&&(IV+=oV.topMargin),pV===VV.rightSize-1?RV.right=IV:IV+=lV.schPinSpacing,dV++}IV=0;for(let pV=0;pV<VV.topSize;pV++){const HV=ZV({side:"top",sideIndex:pV,truePinIndex:dV}),oV=((MV=lV.numericSchPinStyle)==null?void 0:MV[`pin${HV}`])??((AV=lV.numericSchPinStyle)==null?void 0:AV[HV]);oV!=null&&oV.rightMargin&&(IV+=oV.rightMargin),WV.push({trueIndex:dV,pinNumber:HV,side:"top",distanceFromOrthogonalEdge:IV}),oV!=null&&oV.leftMargin&&(IV+=oV.leftMargin),pV===VV.topSize-1?RV.top=IV:IV+=lV.schPinSpacing,dV++}let CV=lV.schWidth;CV||(CV=Math.max(RV.top+lV.schPinSpacing*2,RV.bottom+lV.schPinSpacing*2));const FV=lV.pinLabels?Math.max(...Object.values(lV.pinLabels).map(pV=>pV.length*.1)):0,NV=FV>0?1.1:0;CV=Math.max(CV,FV+NV);let eV=lV.schHeight;eV||(eV=Math.max(RV.left+lV.schPinSpacing*2,RV.right+lV.schPinSpacing*2));const gV={left:{x:-CV/2-J,y:RV.left/2},bottom:{x:-RV.bottom/2,y:-eV/2-J},right:{x:CV/2+J,y:-RV.right/2},top:{x:RV.top/2,y:eV/2+J}},JV={left:{x:0,y:-1},right:{x:0,y:1},top:{x:-1,y:0},bottom:{x:1,y:0}},nV=WV.map(pV=>{const{distanceFromOrthogonalEdge:HV,side:oV}=pV,DV=gV[oV],wV=JV[oV];return{x:DV.x+HV*wV.x,y:DV.y+HV*wV.y,...pV}});return{getPortPositionByPinNumber(pV){const HV=nV.find(oV=>oV.pinNumber.toString()===pV.toString());return HV||null},getSize(){return{width:CV,height:eV}},getSizeIncludingPins(){return{width:CV+(VV.leftSize||VV.rightSize?.4:0),height:eV+(VV.topSize||VV.bottomSize?.4:0)}},pinCount:UV}},debug2$1=Debug$1("tscircuit:core:footprint"),Footprint=class extends PrimitiveComponent{get config(){return{componentName:"Footprint",zodProps:footprintProps}}doInitialPcbFootprintLayout(){var NV,eV,gV,JV,nV;if((NV=this.root)!=null&&NV.pcbDisabled)return;const lV=this.children.filter(aV=>aV.componentName==="Constraint");if(lV.length===0)return;const{isFlipped:J}=this._getPcbPrimitiveFlippedHelpers(),VV=aV=>J&&"left"in aV&&"right"in aV?{...aV,left:aV.right,right:aV.left}:aV,RV=lV.flatMap(aV=>aV._getAllReferencedComponents().componentsWithSelectors).map(({component:aV,selector:GV,componentSelector:cV,edge:TV})=>({component:aV,selector:GV,componentSelector:cV,edge:TV,bounds:aV._getPcbCircuitJsonBounds()}));if(RV.some(aV=>aV.edge))throw new Error("edge constraints not implemented yet for footprint layout, contributions welcome!");function UV(aV){return RV.find(({selector:GV})=>GV===aV)}const ZV=new Solver,WV={};function IV(aV){return aV in WV||(WV[aV]=new Variable(aV),ZV.addEditVariable(WV[aV],Strength.weak)),WV[aV]}for(const{selector:aV,bounds:GV}of RV){const cV=IV(`${aV}_x`),TV=IV(`${aV}_y`);ZV.suggestValue(cV,GV.center.x),ZV.suggestValue(TV,GV.center.y)}for(const aV of lV){const GV=aV._parsedProps;if("xDist"in GV){const{xDist:cV,left:TV,right:iV,edgeToEdge:EV,centerToCenter:MV}=VV(GV),AV=IV(`${TV}_x`),pV=IV(`${iV}_x`),HV=(eV=UV(TV))==null?void 0:eV.bounds,oV=(gV=UV(iV))==null?void 0:gV.bounds;if(MV){const DV=new Expression(pV,[-1,AV]);ZV.addConstraint(new Constraint(DV,Operator.Eq,GV.xDist,Strength.required))}else if(EV){const DV=new Expression(pV,-oV.width/2,[-1,AV],-HV.width/2);ZV.addConstraint(new Constraint(DV,Operator.Eq,GV.xDist,Strength.required))}}else if("yDist"in GV){const{yDist:cV,top:TV,bottom:iV,edgeToEdge:EV,centerToCenter:MV}=GV,AV=IV(`${TV}_y`),pV=IV(`${iV}_y`),HV=(JV=UV(TV))==null?void 0:JV.bounds,oV=(nV=UV(iV))==null?void 0:nV.bounds;if(MV){const DV=new Expression(AV,[-1,pV]);ZV.addConstraint(new Constraint(DV,Operator.Eq,GV.yDist,Strength.required))}else if(EV){const DV=new Expression(AV,HV.height/2,[-1,pV],-oV.height/2);ZV.addConstraint(new Constraint(DV,Operator.Eq,GV.yDist,Strength.required))}}else if("sameY"in GV){const{for:cV}=GV;if(cV.length<2)continue;const TV=cV.map(EV=>IV(`${EV}_y`)),iV=new Expression(...TV.slice(1));ZV.addConstraint(new Constraint(iV,Operator.Eq,TV[0],Strength.required))}else if("sameX"in GV){const{for:cV}=GV;if(cV.length<2)continue;const TV=cV.map(EV=>IV(`${EV}_x`)),iV=new Expression(...TV.slice(1));ZV.addConstraint(new Constraint(iV,Operator.Eq,TV[0],Strength.required))}}ZV.updateVariables(),debug2$1.enabled&&(console.log("Solution to layout constraints:"),console.table(Object.entries(WV).map(([aV,GV])=>({var:aV,val:GV.value()}))));const dV={left:1/0,right:-1/0,top:-1/0,bottom:1/0};for(const{selector:aV,bounds:{width:GV,height:cV}}of RV){const TV=IV(`${aV}_x`),iV=IV(`${aV}_y`),EV=TV.value()-GV/2,MV=TV.value()+GV/2,AV=iV.value()+cV/2,pV=iV.value()-cV/2;dV.left=Math.min(dV.left,EV),dV.right=Math.max(dV.right,MV),dV.top=Math.max(dV.top,AV),dV.bottom=Math.min(dV.bottom,pV)}const CV={x:-(dV.right+dV.left)/2,y:-(dV.top+dV.bottom)/2},FV=this.getPrimitiveContainer()._getGlobalPcbPositionBeforeLayout();CV.x+=FV.x,CV.y+=FV.y;for(const{component:aV,selector:GV}of RV){const cV=IV(`${GV}_x`),TV=IV(`${GV}_y`);aV._setPositionFromLayout({x:cV.value()+CV.x,y:TV.value()+CV.y})}}},getNumericSchPinStyle=(lV,J)=>{if(!lV)return;const VV={};for(const[RV,UV]of Object.entries(lV)){const ZV=parsePinNumberFromLabelsOrThrow(RV,J);VV[`pin${ZV}`]={...VV[`pin${ZV}`],...UV}}return VV},debug3=Debug$1("tscircuit:core"),rotation3=z$1.object({x:rotation$3,y:rotation$3,z:rotation$3}),NormalComponent=class extends PrimitiveComponent{constructor(J){super(J);SI(this,"reactSubtrees",[]);SI(this,"_impliedFootprint");SI(this,"isPrimitiveContainer",!0);SI(this,"_asyncSupplierPartNumbers");SI(this,"pcb_missing_footprint_error_id");this._addChildrenFromStringFootprint(),this.initPorts()}initPorts(J={}){var WV,IV,dV,CV,FV,NV,eV,gV,JV,nV,aV,GV,cV,TV;if((WV=this.root)!=null&&WV.schematicDisabled)return;const{config:VV}=this,RV=[],UV=this._parsedProps.schPortArrangement;if(UV&&!this._parsedProps.pinLabels){for(const MV in UV){const AV=UV[MV].pins;if(Array.isArray(AV))for(const pV of AV){const HV=parsePinNumberFromLabelsOrThrow(pV,this._parsedProps.pinLabels);RV.push(new Port({pinNumber:HV,aliases:((IV=J.additionalAliases)==null?void 0:IV[`pin${HV}`])??[]},{originDescription:`schPortArrangement:${MV}`}))}}const iV=["left","right","top","bottom"];let EV=1;for(const MV of iV){const AV=UV[`${MV}Size`];for(let pV=0;pV<AV;pV++)RV.push(new Port({pinNumber:EV++,aliases:((dV=J.additionalAliases)==null?void 0:dV[`pin${EV}`])??[]},{originDescription:`schPortArrangement:${MV}`}))}}const ZV=this._parsedProps.pinLabels;if(ZV)for(let[iV,EV]of Object.entries(ZV)){iV=iV.replace("pin","");let MV=RV.find(HV=>HV._parsedProps.pinNumber===Number(iV));const AV=Array.isArray(EV)?EV[0]:EV,pV=Array.isArray(EV)?EV.slice(1):[];MV?(MV.externallyAddedAliases.push(AV,...pV),MV.props.name=AV):(MV=new Port({pinNumber:parseInt(iV),name:AV,aliases:[...pV,...((CV=J.additionalAliases)==null?void 0:CV[`pin${parseInt(iV)}`])??[]]},{originDescription:`pinLabels:pin${iV}`}),RV.push(MV))}if(VV.schematicSymbolName){const iV=symbols_index_default$1[this._getSchematicSymbolNameOrThrow()];if(!iV)return;for(const EV of iV.ports){const MV=getPinNumberFromLabels(EV.labels);if(!MV)continue;const AV=getPortFromHints(EV.labels.concat(((FV=J.additionalAliases)==null?void 0:FV[`pin${MV}`])??[]));AV&&(AV.originDescription=`schematicSymbol:labels[0]:${EV.labels[0]}`,AV.schematicSymbolPortDef=EV,RV.push(AV))}this.addAll(RV);return}if(!this._parsedProps.schPortArrangement){const iV=this.getPortsFromFootprint();for(const EV of iV)RV.some(MV=>MV.isMatchingAnyOf(EV.getNameAndAliases()))||RV.push(EV)}for(let iV=1;iV<=this._getPinCount();iV++){if(!this._parsedProps.schPortArrangement||RV.find(MV=>MV._parsedProps.pinNumber===iV))continue;let EV=[...((eV=(NV=this._parsedProps.schPortArrangement)==null?void 0:NV.leftSide)==null?void 0:eV.pins)??[],...((JV=(gV=this._parsedProps.schPortArrangement)==null?void 0:gV.rightSide)==null?void 0:JV.pins)??[],...((aV=(nV=this._parsedProps.schPortArrangement)==null?void 0:nV.topSide)==null?void 0:aV.pins)??[],...((cV=(GV=this._parsedProps.schPortArrangement)==null?void 0:GV.bottomSide)==null?void 0:cV.pins)??[]].map(MV=>parsePinNumberFromLabelsOrThrow(MV,this._parsedProps.pinLabels));["leftSize","rightSize","topSize","bottomSize","leftPinCount","rightPinCount","topPinCount","bottomPinCount"].some(MV=>MV in this._parsedProps.schPortArrangement)&&(EV=Array.from({length:this._getPinCount()},(MV,AV)=>AV+1)),EV.includes(iV)&&RV.push(new Port({pinNumber:iV,aliases:((TV=J.additionalAliases)==null?void 0:TV[`pin${iV}`])??[]},{originDescription:`notOtherwiseAddedButDeducedFromPinCount:${iV}`}))}RV.length>0&&this.addAll(RV)}_getImpliedFootprintString(){return null}_addChildrenFromStringFootprint(){var VV;let{footprint:J}=this.props;if(J??(J=(VV=this._getImpliedFootprintString)==null?void 0:VV.call(this)),!!J&&typeof J=="string"){const RV=fp$1.string(J).soup(),UV=createComponentsFromSoup(RV);this.addAll(UV)}}get portMap(){return new Proxy({},{get:(J,VV)=>{const RV=this.children.find(UV=>UV.componentName==="Port"&&UV.isMatchingNameOrAlias(VV));if(!RV)throw new Error(`There was an issue finding the port "${VV.toString()}" inside of a ${this.componentName} component with name: "${this.props.name}". This is a bug in @tscircuit/core`);return RV}})}getInstanceForReactElement(J){for(const VV of this.reactSubtrees)if(VV.element===J)return VV.component;return null}doInitialSourceRender(){const J=this.config.sourceFtype;if(!J)return;const{db:VV}=this.root,{_parsedProps:RV}=this,UV=VV.source_component.insert({ftype:J,name:RV.name,manufacturer_part_number:RV.manufacturerPartNumber??RV.mfn,supplier_part_numbers:RV.supplierPartNumbers});this.source_component_id=UV.source_component_id}doInitialSchematicComponentRender(){var RV;if((RV=this.root)!=null&&RV.schematicDisabled)return;const{schematicSymbolName:J}=this.config;if(J)return this._doInitialSchematicComponentRenderWithSymbol();if(this._getSchematicBoxDimensions())return this._doInitialSchematicComponentRenderWithSchematicBoxDimensions()}_getSchematicSymbolDisplayValue(){}_doInitialSchematicComponentRenderWithSymbol(){var WV;if((WV=this.root)!=null&&WV.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this._getSchematicSymbolNameOrThrow(),UV=symbols_index_default$1[RV],ZV=this._getGlobalSchematicPositionBeforeLayout();if(UV){const IV=J.schematic_component.insert({center:ZV,rotation:VV.schRotation??0,size:UV.size,source_component_id:this.source_component_id,symbol_name:RV,symbol_display_value:this._getSchematicSymbolDisplayValue()});this.schematic_component_id=IV.schematic_component_id}}_doInitialSchematicComponentRenderWithSchematicBoxDimensions(){var FV,NV,eV;if((FV=this.root)!=null&&FV.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this._getSchematicBoxDimensions(),UV={};if(Array.isArray(VV.pinLabels))VV.pinLabels.forEach((gV,JV)=>{UV[String(JV+1)]=gV});else for(const[gV,JV]of Object.entries(VV.pinLabels??{}))UV[gV]=Array.isArray(JV)?JV[0]:JV;const ZV=this._getGlobalSchematicPositionBeforeLayout(),WV=J.schematic_component.insert({center:ZV,rotation:VV.schRotation??0,size:RV.getSize(),port_arrangement:underscorifyPortArrangement(VV.schPortArrangement),pin_spacing:VV.schPinSpacing??.2,pin_styles:underscorifyPinStyles(VV.schPinStyle,VV.pinLabels),port_labels:UV,source_component_id:this.source_component_id}),IV=((NV=VV.schPortArrangement)==null?void 0:NV.topSide)!==void 0||((eV=VV.schPortArrangement)==null?void 0:eV.bottomSide)!==void 0,dV=RV==null?void 0:RV.getSize().width,CV=RV==null?void 0:RV.getSize().height;J.schematic_text.insert({text:VV.manufacturerPartNumber??"",schematic_component_id:WV.schematic_component_id,anchor:"left",rotation:0,position:{x:IV?ZV.x+(dV??0)/2+.1:ZV.x-(dV??0)/2,y:IV?ZV.y+(CV??0)/2+.35:ZV.y-(CV??0)/2-.13},color:"#006464"}),J.schematic_text.insert({text:VV.name??"",schematic_component_id:WV.schematic_component_id,anchor:"left",rotation:0,position:{x:IV?ZV.x+(dV??0)/2+.1:ZV.x-(dV??0)/2,y:IV?ZV.y+(CV??0)/2+.55:ZV.y+(CV??0)/2+.13},color:"#006464"}),this.schematic_component_id=WV.schematic_component_id}doInitialPcbComponentRender(){var ZV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=J.pcb_component.insert({center:this._getGlobalPcbPositionBeforeLayout(),width:0,height:0,layer:VV.layer??"top",rotation:VV.pcbRotation??0,source_component_id:this.source_component_id});if(!VV.footprint&&!this.isGroup){const WV=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=WV.pcb_missing_footprint_error_id}this.pcb_component_id=RV.pcb_component_id;const UV=this.getSubcircuit()._getPcbManualPlacementForComponent(this);this.props.pcbX!==void 0&&this.props.pcbY!==void 0&&UV&&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 UV;if((UV=this.root)!=null&&UV.pcbDisabled||!this.pcb_component_id)return;const{db:J}=this.root,VV=getBoundsOfPcbComponents(this.children);if(VV.width===0||VV.height===0)return;const RV={x:(VV.minX+VV.maxX)/2,y:(VV.minY+VV.maxY)/2};J.pcb_component.update(this.pcb_component_id,{center:RV,width:VV.width,height:VV.height})}_renderReactSubtree(J){return{element:J,component:createInstanceFromReactElement(J)}}doInitialInitializePortsFromChildren(){this.initPorts()}doInitialReactSubtreesRender(){if(reactExports.isValidElement(this.props.footprint)){if(this.reactSubtrees.some(VV=>VV.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(RV=>RV.componentName==="Port").some(RV=>{const UV=J.getNameAndAliases(),ZV=RV.getNameAndAliases();return UV.length===ZV.length&&UV.every(WV=>ZV.includes(WV))})}add(J){let VV;if(reactExports.isValidElement(J)){const RV=this._renderReactSubtree(J);this.reactSubtrees.push(RV),VV=RV.component}else VV=J;if(VV.componentName==="Port"){if(this._hasExistingPortExactly(VV))return;const UV=this.children.filter(ZV=>ZV.componentName==="Port").find(ZV=>ZV.isMatchingAnyOf(VV.getNameAndAliases()));UV&&debug3(`Similar ports added. Port 1: ${UV}, Port 2: ${VV}`)}super.add(VV)}getPortsFromFootprint(){let{footprint:J}=this.props;if((!J||reactExports.isValidElement(J))&&(J=this.children.find(RV=>RV.componentName==="Footprint")),typeof J=="string"){const RV=fp$1.string(J).soup(),UV=[];for(const ZV of RV)if("port_hints"in ZV&&ZV.port_hints){const WV=getPortFromHints(ZV.port_hints);if(!WV)continue;WV.originDescription=`footprint:string:${J}:port_hints[0]:${ZV.port_hints[0]}`,UV.push(WV)}return UV}if(!reactExports.isValidElement(J)&&J&&J.componentName==="Footprint"){const RV=J;let UV=1;const ZV=[];for(const WV of RV.children){if(!WV.props.portHints)continue;let IV=WV.props.portHints;IV.some(FV=>FV.startsWith("pin"))||(IV=[...IV,`pin${UV}`]),UV++;const CV=getPortFromHints(IV);CV&&(CV.originDescription=`footprint:${J}`,ZV.push(CV))}return ZV}const VV=[];if(!J){for(const RV of this.children)if(RV.props.portHints&&RV.isPcbPrimitive){const UV=getPortFromHints(RV.props.portHints);UV&&VV.push(UV)}}return VV}getPortsFromSchematicSymbol(){var UV;if((UV=this.root)!=null&&UV.schematicDisabled)return[];const{config:J}=this;if(!J.schematicSymbolName)return[];const VV=symbols_index_default$1[J.schematicSymbolName];if(!VV)return[];const RV=[];for(const ZV of VV.ports){const WV=getPortFromHints(ZV.labels);WV&&(WV.schematicSymbolPortDef=ZV,RV.push(WV))}return RV}_createNetsFromProps(J){createNetsFromProps(this,J)}doInitialPortDiscovery(){const{_parsedProps:J}=this;let VV=[];J.schPortArrangement||(VV=[...this.getPortsFromFootprint(),...this.getPortsFromSchematicSymbol()]);const RV=this.children.filter(UV=>UV.componentName==="Port");for(const UV of VV){const ZV=RV.find(WV=>WV.isMatchingAnyOf(UV.getNameAndAliases()));if(ZV){!ZV.schematicSymbolPortDef&&UV.schematicSymbolPortDef&&(ZV.schematicSymbolPortDef=UV.schematicSymbolPortDef);continue}RV.push(UV),this.add(UV)}}_getPcbCircuitJsonBounds(){const{db:J}=this.root;if(!this.pcb_component_id)return super._getPcbCircuitJsonBounds();const VV=J.pcb_component.get(this.pcb_component_id);return{center:{x:VV.center.x,y:VV.center.y},bounds:{left:VV.center.x-VV.width/2,top:VV.center.y-VV.height/2,right:VV.center.x+VV.width/2,bottom:VV.center.y+VV.height/2},width:VV.width,height:VV.height}}_getPinCount(){const J=this._getSchematicPortArrangement();if(J){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:RV,rightSide:UV,topSide:ZV,bottomSide:WV}=J;return Math.max(...(RV==null?void 0:RV.pins)??[],...(UV==null?void 0:UV.pins)??[],...(ZV==null?void 0:ZV.pins)??[],...(WV==null?void 0:WV.pins)??[])}return this.getPortsFromFootprint().length}_getSchematicPortArrangement(){return this._parsedProps.schPortArrangement}_getSchematicBoxDimensions(){if(this.getSchematicSymbol()||!this.config.shouldRenderAsSchematicBox)return null;const{_parsedProps:J}=this,VV=this._getPinCount(),RV=J.schPinSpacing??.2;return getAllDimensionsForSchematicBox({schWidth:J.schWidth,schHeight:J.schHeight,schPinSpacing:RV,numericSchPinStyle:getNumericSchPinStyle(J.schPinStyle,J.pinLabels),pinCount:VV,schPortArrangement:this._getSchematicPortArrangement(),pinLabels:J.pinLabels})}doInitialCadModelRender(){var CV;const{db:J}=this.root,{boardThickness:VV=0}=((CV=this.root)==null?void 0:CV._getBoard())??{},RV=this._parsedProps.cadModel;if(!this.pcb_component_id||!RV&&!this.props.footprint)return;const UV=this._getPcbCircuitJsonBounds(),ZV=J.pcb_component.get(this.pcb_component_id);if(typeof RV=="string")throw new Error("String cadModel not yet implemented");const WV=rotation3.parse({x:0,y:0,z:typeof(RV==null?void 0:RV.rotationOffset)=="number"?RV.rotationOffset:0,...typeof(RV==null?void 0:RV.rotationOffset)=="object"?RV.rotationOffset??{}:{}}),IV=point3$2.parse({x:0,y:0,z:0,...typeof(RV==null?void 0:RV.positionOffset)=="object"?RV.positionOffset:{}}),dV=this.props.layer==="bottom"?"bottom":"top";J.cad_component.insert({position:{x:UV.center.x+IV.x,y:UV.center.y+IV.y,z:(dV==="bottom"?-VV/2:VV/2)+IV.z},rotation:{x:WV.x,y:(dV==="top"?0:180)+WV.y,z:((ZV==null?void 0:ZV.rotation)??0)+(dV==="bottom"?180:0)+WV.z},pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,model_stl_url:"stlUrl"in(RV??{})?this._addCachebustToModelUrl(RV.stlUrl):void 0,model_obj_url:"objUrl"in(RV??{})?this._addCachebustToModelUrl(RV.objUrl):void 0,model_jscad:"jscad"in(RV??{})?RV.jscad:void 0,footprinter_string:typeof this.props.footprint=="string"&&!RV?this.props.footprint:void 0})}_addCachebustToModelUrl(J){var RV;if(!J||!J.includes("modelcdn.tscircuit.com"))return J;const VV=((RV=this.root)==null?void 0:RV.getClientOrigin())??"";return`${J}${J.includes("?")?"&":"?"}cachebust_origin=${encodeURIComponent(VV)}`}doInitialPartsEngineRender(){const{partsEngine:J}=this.getSubcircuit()._parsedProps;if(!J)return;const{db:VV}=this.root,RV=VV.source_component.get(this.source_component_id);if(!RV||RV.supplier_part_numbers)return;let UV;this.props.footprint&&typeof this.props.footprint=="string"&&(UV=this.props.footprint);const ZV=J.findPart({sourceComponent:RV,footprinterString:UV});if(!(ZV instanceof Promise)){VV.source_component.update(this.source_component_id,{supplier_part_numbers:ZV});return}this._queueAsyncEffect("get-supplier-part-numbers",async()=>{this._asyncSupplierPartNumbers=await ZV,this._markDirty("PartsEngineRender")})}updatePartsEngineRender(){const{db:J}=this.root,VV=J.source_component.get(this.source_component_id);if(VV&&!VV.supplier_part_numbers&&this._asyncSupplierPartNumbers){J.source_component.update(this.source_component_id,{supplier_part_numbers:this._asyncSupplierPartNumbers});return}}},TraceHint=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"matchedPort",null)}get config(){return{componentName:"TraceHint",zodProps:traceHintProps}}doInitialPortMatching(){this.root;const{_parsedProps:J,parent:VV}=this;if(!VV)return;if(VV.componentName==="Trace"){this.renderError(`Port inference inside trace is not yet supported (${this})`);return}if(!VV)throw new Error("TraceHint has no parent");if(!J.for){this.renderError(`TraceHint has no for property (${this})`);return}const RV=VV.selectOne(J.for,{type:"port"});RV||this.renderError(`${this} could not find port for selector "${J.for}"`),this.matchedPort=RV,RV.registerMatch(this)}getPcbRouteHints(){const{_parsedProps:J}=this,VV=J.offset?[J.offset]:J.offsets;if(!VV)return[];const RV=this._computePcbGlobalTransformBeforeLayout();return VV.map(UV=>({...applyToPoint(RV,UV),via:UV.via,to_layer:UV.to_layer,trace_width:UV.trace_width}))}doInitialPcbTraceHintRender(){var VV,RV,UV;if((VV=this.root)!=null&&VV.pcbDisabled)return;const{db:J}=this.root;J.pcb_trace_hint.insert({pcb_component_id:(RV=this.matchedPort)==null?void 0:RV.pcb_component_id,pcb_port_id:(UV=this.matchedPort)==null?void 0:UV.pcb_port_id,route:this.getPcbRouteHints()})}},getSimpleRouteJsonFromTracesAndDb=({db:lV,traces:J,minTraceWidth:VV=.1})=>{const UV=getObstaclesFromSoup([...lV.pcb_component.list(),...lV.pcb_smtpad.list(),...lV.pcb_plated_hole.list()]).flatMap(IV=>[{x:IV.center.x-IV.width/2,y:IV.center.y-IV.height/2},{x:IV.center.x+IV.width/2,y:IV.center.y+IV.height/2}]),ZV={minX:Math.min(...UV.map(IV=>IV.x))-1,maxX:Math.max(...UV.map(IV=>IV.x))+1,minY:Math.min(...UV.map(IV=>IV.y))-1,maxY:Math.max(...UV.map(IV=>IV.y))+1},WV=J.map(IV=>{const dV=IV._findConnectedPorts();return!dV.allPortsFound||dV.ports.length<2?null:{name:IV.source_trace_id??"",pointsToConnect:dV.ports.map(CV=>{const FV=CV._getGlobalPcbPositionBeforeLayout();return{x:FV.x,y:FV.y,layer:CV.getAvailablePcbLayers()[0]??"top"}})}}).filter(IV=>IV!==null);return{bounds:ZV,obstacles:[],connections:WV,layerCount:2,minTraceWidth:VV}},Group$2=class extends NormalComponent{constructor(){super(...arguments);SI(this,"_asyncAutoroutingResult",null)}get config(){return{zodProps:groupProps,componentName:"Group"}}doInitialCreateTraceHintsFromProps(){var ZV;const{_parsedProps:VV}=this;this.root;const RV=VV;if(!this.isSubcircuit)return;const UV=(ZV=RV.layout)==null?void 0:ZV.manual_trace_hints;if(UV)for(const WV of UV)this.add(new TraceHint({for:WV.pcb_port_selector,offsets:WV.offsets}))}_getSimpleRouteJsonFromPcbTraces(){const VV=this.selectAll("trace"),{db:RV}=this.root;return getSimpleRouteJsonFromTracesAndDb({db:RV,traces:VV,minTraceWidth:this._parsedProps.minTraceWidth??.1})}doInitialSourceAddConnectivityMapKey(){if(!this.isSubcircuit)return;const{db:VV}=this.root,RV=this.selectAll("trace"),UV=new ConnectivityMap$1({});UV.addConnections(RV.map(ZV=>{const WV=VV.source_trace.get(ZV.source_trace_id);return WV?[WV.source_trace_id,...WV.connected_source_port_ids,...WV.connected_source_net_ids]:null}).filter(ZV=>ZV!==null));for(const ZV of RV){if(!ZV.source_trace_id)continue;const WV=UV.getNetConnectedToId(ZV.source_trace_id);if(!WV)continue;const{name:IV}=this._parsedProps;ZV.subcircuit_connectivity_map_key=`${IV??`unnamedsubcircuit${this._renderId}`}_${WV}`,VV.source_trace.update(ZV.source_trace_id,{subcircuit_connectivity_map_key:ZV.subcircuit_connectivity_map_key})}}doInitialPcbTraceRender(){var WV,IV,dV;if((WV=this.root)!=null&&WV.pcbDisabled||this._shouldUseTraceByTraceRouting())return;const VV=((IV=this.props.autorouter)==null?void 0:IV.serverUrl)??"https://registry-api.tscircuit.com",RV=((dV=this.props.autorouter)==null?void 0:dV.serverMode)??"job",UV=Debug$1("tscircuit:core:autorouting"),ZV=(CV,FV)=>(UV("fetching",CV),fetch(CV,FV));this._queueAsyncEffect("make-http-autorouting-request",async()=>{var FV,NV;if(RV==="solve-endpoint"){if(((FV=this.props.autorouter)==null?void 0:FV.inputFormat)==="simplified"){const{autorouting_result:gV}=await ZV(`${VV}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_simple_route_json:this._getSimpleRouteJsonFromPcbTraces()}),headers:{"Content-Type":"application/json"}}).then(JV=>JV.json());this._asyncAutoroutingResult=gV,this._markDirty("PcbTraceRender");return}const{autorouting_result:eV}=await ZV(`${VV}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_circuit_json:this.root.db.toArray()}),headers:{"Content-Type":"application/json"}}).then(gV=>gV.json());this._asyncAutoroutingResult=eV,this._markDirty("PcbTraceRender");return}const{autorouting_job:CV}=await ZV(`${VV}/autorouting/jobs/create`,{method:"POST",body:JSON.stringify({input_circuit_json:this.root.db.toArray(),provider:"freerouting",autostart:!0,display_name:(NV=this.root)==null?void 0:NV.name}),headers:{"Content-Type":"application/json"}}).then(eV=>eV.json());for(;;){const{autorouting_job:eV}=await ZV(`${VV}/autorouting/jobs/get`,{method:"POST",body:JSON.stringify({autorouting_job_id:CV.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(gV=>gV.json());if(eV.is_finished){const{autorouting_job_output:gV}=await ZV(`${VV}/autorouting/jobs/get_output`,{method:"POST",body:JSON.stringify({autorouting_job_id:CV.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(JV=>JV.json());this._asyncAutoroutingResult={output_pcb_traces:gV.output_pcb_traces},this._markDirty("PcbTraceRender");break}if(eV.has_error)throw new Error(`Autorouting job failed: ${JSON.stringify(eV.error)}`);await new Promise(gV=>setTimeout(gV,100))}})}updatePcbTraceRender(){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:VV}=this.root,{traces:RV}=this._asyncAutoroutingResult.output_simple_route_json;if(RV){this.selectAll("trace");for(const UV of RV)VV.pcb_trace.insert({route:UV.route})}}_updatePcbTraceRenderFromPcbTraces(){const{output_pcb_traces:VV}=this._asyncAutoroutingResult;if(!VV)return;const{db:RV}=this.root;for(const UV of VV)RV.pcb_trace.insert(UV)}doInitialSchematicLayout(){if(!this.isSubcircuit||!this._parsedProps.schAutoLayoutEnabled)return;const{db:RV}=this.root,UV=this.getDescendants(),ZV=[];for(const dV of UV)if("schematic_component_id"in dV){const CV=RV.schematic_component.get(dV.schematic_component_id);if(CV){const FV=RV.schematic_port.list().filter(NV=>NV.schematic_component_id===CV.schematic_component_id);ZV.push(...FV)}}const WV=convertSoupToScene(RV.toArray()),IV=ascendingCentralLrBug1(WV);mutateSoupForScene(RV.toArray(),IV)}_shouldUseTraceByTraceRouting(){const VV=this._parsedProps;return VV.autorouter==="auto-local"||VV.autorouter==="sequential-trace"?!0:!VV.autorouter}},Board=class extends Group$2{constructor(){super(...arguments);SI(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 UV,ZV;if((UV=this.root)!=null&&UV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this;if(!VV.width||!VV.height)throw new Error("Board width and height or an outline are required");const RV=J.pcb_board.insert({center:{x:(VV.pcbX??0)+(VV.outlineOffsetX??0),y:(VV.pcbY??0)+(VV.outlineOffsetY??0)},thickness:this.boardThickness,num_layers:this.allLayers.length,width:VV.width,height:VV.height,outline:(ZV=VV.outline)==null?void 0:ZV.map(WV=>({x:WV.x+(VV.outlineOffsetX??0),y:WV.y+(VV.outlineOffsetY??0)}))});this.pcb_board_id=RV.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$4()}},stringProxy=new Proxy({},{get:(lV,J)=>J}),FTYPE=stringProxy,DirectLineRouter=class{constructor({input:lV}){SI(this,"input");this.input=lV}solveAndMapToTraces(){const lV=[];for(const J of this.input.connections){if(J.pointsToConnect.length!==2)continue;const[VV,RV]=J.pointsToConnect,UV={type:"pcb_trace",pcb_trace_id:"",route:[{route_type:"wire",x:VV.x,y:VV.y,layer:"top",width:.1},{route_type:"wire",x:RV.x,y:RV.y,layer:"top",width:.1}]};lV.push(UV)}return lV}},computeObstacleBounds=lV=>{const J=Math.min(...lV.map(ZV=>ZV.center.x)),VV=Math.max(...lV.map(ZV=>ZV.center.x)),RV=Math.min(...lV.map(ZV=>ZV.center.y)),UV=Math.max(...lV.map(ZV=>ZV.center.y));return{minX:J,maxX:VV,minY:RV,maxY:UV}},LAYER_SELECTION_PREFERENCE=["top","bottom","inner1","inner2"],findPossibleTraceLayerCombinations=(lV,J=[])=>{var IV;const VV=[];if(J.length===0){const dV=lV[0].layers;for(const CV of dV)VV.push(...findPossibleTraceLayerCombinations(lV.slice(1),[CV]));return VV}if(lV.length===0)return[];const RV=lV[0],UV=RV.via||RV.optional_via,ZV=J[J.length-1];if(lV.length===1){const dV=RV;return dV.layers&&UV?dV.layers.map(CV=>({layer_path:[...J,CV]})):(IV=dV.layers)!=null&&IV.includes(ZV)?[{layer_path:[...J,ZV]}]:[]}if(!UV)return RV.layers&&!RV.layers.includes(ZV)?[]:findPossibleTraceLayerCombinations(lV.slice(1),J.concat([ZV]));const WV=(RV.optional_via?LAYER_SELECTION_PREFERENCE:LAYER_SELECTION_PREFERENCE.filter(dV=>dV!==ZV)).filter(dV=>{var CV;return!RV.layers||((CV=RV.layers)==null?void 0:CV.includes(dV))});for(const dV of WV)VV.push(...findPossibleTraceLayerCombinations(lV.slice(1),J.concat(dV)));return VV};function getDominantDirection(lV){const J={x:lV.to.x-lV.from.x,y:lV.to.y-lV.from.y},VV=Math.abs(J.x),RV=Math.abs(J.y);return VV>RV?J.x>0?"right":"left":J.y>0?"down":"up"}function pdist(lV,J){return Math.hypot(lV.x-J.x,lV.y-J.y)}var mergeRoutes=lV=>{if(lV.length===1)return lV[0];if(lV.some(dV=>dV.length===0))throw new Error("Cannot merge routes with zero length");const J=[],VV=lV[0][0],RV=lV[0][lV[0].length-1],UV=lV[1][0],ZV=lV[1][lV[1].length-1],WV=Math.min(pdist(VV,UV),pdist(VV,ZV)),IV=Math.min(pdist(RV,UV),pdist(RV,ZV));WV<IV?J.push(...lV[0].reverse()):J.push(...lV[0]);for(let dV=1;dV<lV.length;dV++){const CV=J[J.length-1],FV=lV[dV],NV=FV[0],eV=FV[FV.length-1],gV=pdist(CV,NV),JV=pdist(CV,eV);gV<JV?J.push(...FV):J.push(...FV.reverse())}for(let dV=1;dV<J.length-1;dV++){const CV=J[dV-1],FV=J[dV];CV.route_type==="wire"&&FV.route_type==="wire"&&CV.layer!==FV.layer&&J.splice(dV,0,{x:CV.x,y:CV.y,from_layer:CV.layer,to_layer:FV.layer,route_type:"via"})}return J};function getTraceLength(lV){let J=0;for(let VV=0;VV<lV.length;VV++){const RV=lV[VV];if(RV.route_type==="wire"){const UV=lV[VV+1];if(UV){const ZV=UV.x-RV.x,WV=UV.y-RV.y;J+=Math.sqrt(ZV*ZV+WV*WV)}}else RV.route_type==="via"&&(J+=1.6)}return J}var getDistance=(lV,J)=>{const VV="_getGlobalPcbPositionBeforeLayout"in lV?lV._getGlobalPcbPositionBeforeLayout():lV,RV="_getGlobalPcbPositionBeforeLayout"in J?J._getGlobalPcbPositionBeforeLayout():J;return Math.sqrt((VV.x-RV.x)**2+(VV.y-RV.y)**2)};function getClosest(lV,J){if(J.length===0)throw new Error("No candidates given to getClosest method");let VV=J[0],RV=1/0;for(const UV of J){const ZV=getDistance(lV,UV);ZV<RV&&(VV=UV,RV=ZV)}return VV}var getEnteringEdgeFromDirection=lV=>({up:"bottom",down:"top",left:"right",right:"left"})[lV]??null,getStubEdges=({firstEdge:lV,firstEdgePort:J,firstDominantDirection:VV,lastEdge:RV,lastEdgePort:UV,lastDominantDirection:ZV})=>{if(lV&&J)return getStubEdges({lastEdge:{from:lV.to,to:lV.from},lastEdgePort:J,lastDominantDirection:VV}).reverse().map(IV=>({from:IV.to,to:IV.from}));let WV=[];if(RV&&UV){const IV={x:RV.to.x,y:RV.to.y};ZV==="left"||ZV==="right"?(IV.x=UV.position.x,WV.push({from:RV.to,to:{...IV}}),WV.push({from:IV,to:{...UV.position}})):(IV.y=UV.position.y,WV.push({from:RV.to,to:{...IV}}),WV.push({from:IV,to:{...UV.position}}))}return WV=WV.filter(IV=>distance$2(IV.from,IV.to)>.01),WV};function tryNow(lV){try{return[lV(),null]}catch(J){return[null,J]}}var getOtherSchematicTraces=({db:lV,source_trace_id:J,sameNetOnly:VV,differentNetOnly:RV})=>{!VV&&!RV&&(RV=!0);const UV=lV.source_trace.get(J),ZV=[];for(const WV of lV.schematic_trace.list()){if(WV.source_trace_id===J)continue;const IV=lV.source_trace.get(WV.source_trace_id),dV=(IV==null?void 0:IV.subcircuit_connectivity_map_key)===UV.subcircuit_connectivity_map_key;RV&&dV||VV&&!dV||ZV.push(WV)}return ZV},createSchematicTraceCrossingSegments=({edges:lV,otherEdges:J})=>{lV=[...lV];for(let VV=0;VV<lV.length;VV++){if(VV>2e3)throw new Error("Over 2000 iterations spent inside createSchematicTraceCrossingSegments, you have triggered an infinite loop, please report this!");const RV=lV[VV],UV=Math.abs(RV.from.x-RV.to.x)<.01?"vertical":"horizontal",ZV=[];for(const JV of J){const nV=JV.from.x===JV.to.x?"vertical":"horizontal";if(UV===nV)continue;if(doesLineIntersectLine$1([RV.from,RV.to],[JV.from,JV.to],{lineThickness:.01})){const GV=UV==="vertical"?RV.from.x:JV.from.x,cV=UV==="vertical"?JV.from.y:RV.from.y,TV={x:GV,y:cV};ZV.push({otherEdge:JV,crossingPoint:TV,distanceFromEdgeFrom:distance$2(RV.from,TV)})}}if(ZV.length===0)continue;let WV=ZV[0];for(const JV of ZV)JV.distanceFromEdgeFrom<WV.distanceFromEdgeFrom&&(WV=JV);const IV=WV.crossingPoint,dV=.075;if(IV.x===RV.from.x&&IV.y===RV.from.y)continue;const CV=getUnitVectorFromPointAToB(RV.from,IV),FV={x:IV.x-CV.x*dV/2,y:IV.y-CV.y*dV/2},NV={x:IV.x+CV.x*dV/2,y:IV.y+CV.y*dV/2},eV=distance$2(NV,RV.to)<dV,gV=[{from:RV.from,to:FV},{from:FV,to:NV,is_crossing:!0},{from:NV,to:RV.to}];lV.splice(VV,1,...gV),VV+=gV.length-2,eV&&VV++}return lV},getIntersectionPoint=(lV,J)=>{if(lV.from.x===lV.to.x&&J.from.x===J.to.x)return null;if(lV.from.x===lV.to.x){const FV=lV.from.x,NV=(J.to.y-J.from.y)/(J.to.x-J.from.x),eV=J.from.y-NV*J.from.x,gV=NV*FV+eV;return FV>=Math.min(J.from.x,J.to.x)&&FV<=Math.max(J.from.x,J.to.x)&&gV>=Math.min(J.from.y,J.to.y)&&gV<=Math.max(J.from.y,J.to.y)?{x:FV,y:gV}:null}if(J.from.x===J.to.x){const FV=J.from.x,NV=(lV.to.y-lV.from.y)/(lV.to.x-lV.from.x),eV=lV.from.y-NV*lV.from.x,gV=NV*FV+eV;return FV>=Math.min(lV.from.x,lV.to.x)&&FV<=Math.max(lV.from.x,lV.to.x)&&gV>=Math.min(lV.from.y,lV.to.y)&&gV<=Math.max(lV.from.y,lV.to.y)?{x:FV,y:gV}:null}const VV=(lV.to.y-lV.from.y)/(lV.to.x-lV.from.x),RV=lV.from.y-VV*lV.from.x,UV=(J.to.y-J.from.y)/(J.to.x-J.from.x),ZV=J.from.y-UV*J.from.x;if(VV===UV)return null;const WV=(ZV-RV)/(VV-UV),IV=VV*WV+RV,dV=WV>=Math.min(lV.from.x,lV.to.x)&&WV<=Math.max(lV.from.x,lV.to.x)&&IV>=Math.min(lV.from.y,lV.to.y)&&IV<=Math.max(lV.from.y,lV.to.y),CV=WV>=Math.min(J.from.x,J.to.x)&&WV<=Math.max(J.from.x,J.to.x)&&IV>=Math.min(J.from.y,J.to.y)&&IV<=Math.max(J.from.y,J.to.y);return dV&&CV?{x:WV,y:IV}:null},createSchematicTraceJunctions=({edges:lV,db:J,source_trace_id:VV})=>{const RV=getOtherSchematicTraces({db:J,source_trace_id:VV,sameNetOnly:!0}).flatMap(UV=>UV.edges);for(const UV of lV)for(const ZV of RV){const WV=getIntersectionPoint(UV,ZV);if(WV)return`${WV.x}${WV.y}`,[{x:WV.x,y:WV.y}]}return[]},pushEdgesOfSchematicTraceToPreventOverlap=({edges:lV,db:J,source_trace_id:VV})=>{J.source_trace.get(VV);const RV=getOtherSchematicTraces({db:J,source_trace_id:VV,differentNetOnly:!0}).flatMap(ZV=>ZV.edges),UV=ZV=>{const{from:WV,to:IV}=ZV;return WV.x===IV.x?"vertical":"horizontal"};for(const ZV of lV){const WV=UV(ZV),IV=()=>RV.find(CV=>UV(CV)===WV&&doesLineIntersectLine$1([ZV.from,ZV.to],[CV.from,CV.to],{lineThickness:.05}));let dV=IV();for(;dV;)WV==="horizontal"?(ZV.from.y+=.1,ZV.to.y+=.1):(ZV.from.x+=.1,ZV.to.x+=.1),dV=IV()}},countComplexElements=(lV,J)=>{let VV=0;VV+=lV.length??0,VV+=J.filter(RV=>RV.is_crossing).length;for(let RV=1;RV<J.length;RV++){const UV=J[RV-1],ZV=J[RV],WV=Math.abs(UV.from.x-UV.to.x)<.01,IV=Math.abs(ZV.from.x-ZV.to.x)<.01;WV!==IV&&VV++}return VV},calculateOffsets=lV=>{var IV,dV;const J={left:{x:-.5,y:0},up:{x:.5,y:.5},right:{x:.5,y:0},down:{x:0,y:-.5}}[lV.facingDirection],VV=(IV=lV.parent)!=null&&IV.config.shouldRenderAsSchematicBox?3:1,RV=(dV=lV.parent)!=null&&dV.config.shouldRenderAsSchematicBox&&(lV.facingDirection==="left"||lV.facingDirection==="right")?3:1,UV=J.x,ZV=J.y,WV=lV.facingDirection==="up"?.5:0;return{schBoxVertOffset:VV,schBoxHorzOffset:RV,horzPortDirection:UV,vertPortDirectionOffset:ZV,handleUp:WV}},createDownwardNetLabelGroundSymbol=({fromPort:lV,toPort:J,fromAnchorPos:VV,toAnchorPos:RV,schDisplayLabel:UV,source_trace_id:ZV},{db:WV})=>{const IV=calculateOffsets(lV);WV.schematic_net_label.insert({anchor_side:"top",center:{x:VV.x+IV.horzPortDirection*IV.schBoxHorzOffset,y:VV.y+IV.vertPortDirectionOffset*IV.schBoxVertOffset},source_net_id:lV.source_port_id,text:UV,anchor_position:{x:VV.x+IV.horzPortDirection*IV.schBoxHorzOffset,y:VV.y+IV.vertPortDirectionOffset*IV.schBoxVertOffset},symbol_name:"ground_horz"}),WV.schematic_trace.insert({edges:[{from:{x:VV.x,y:VV.y},to:{x:VV.x,y:VV.y+IV.handleUp*IV.schBoxVertOffset}},{from:{x:VV.x,y:VV.y},to:{x:VV.x+IV.horzPortDirection*IV.schBoxHorzOffset,y:VV.y+IV.vertPortDirectionOffset*IV.schBoxVertOffset}}],junctions:[{x:VV.x+IV.horzPortDirection*IV.schBoxHorzOffset,y:VV.y+IV.vertPortDirectionOffset*IV.schBoxVertOffset}],source_trace_id:ZV});const dV=calculateOffsets(J);WV.schematic_net_label.insert({anchor_side:"top",center:{x:RV.x+dV.horzPortDirection*dV.schBoxHorzOffset,y:RV.y+dV.vertPortDirectionOffset*dV.schBoxVertOffset},source_net_id:J.source_port_id,text:UV,anchor_position:{x:RV.x+dV.horzPortDirection*dV.schBoxHorzOffset,y:RV.y+dV.vertPortDirectionOffset*dV.schBoxVertOffset},symbol_name:"ground_horz"});const CV=J.facingDirection==="up"?.5:0;WV.schematic_trace.insert({edges:[{from:{x:RV.x,y:RV.y},to:{x:RV.x,y:RV.y+CV*dV.schBoxVertOffset}},{from:{x:RV.x,y:RV.y},to:{x:RV.x+dV.horzPortDirection*dV.schBoxHorzOffset,y:RV.y+dV.vertPortDirectionOffset*dV.schBoxVertOffset}}],junctions:[{x:RV.x+dV.horzPortDirection*dV.schBoxHorzOffset,y:RV.y+dV.vertPortDirectionOffset*dV.schBoxVertOffset}],source_trace_id:ZV})},getMaxLengthFromConnectedCapacitors=(lV,{db:J})=>{const VV=lV.map(RV=>{const UV=J.source_port.get(RV.source_port_id);if(!(UV!=null&&UV.source_component_id))return null;const ZV=J.source_component.get(UV.source_component_id);return(ZV==null?void 0:ZV.ftype)==="simple_capacitor"?ZV.max_decoupling_trace_length:null}).filter(RV=>RV!==null);if(VV.length!==0)return Math.min(...VV)};function getTraceDisplayName({ports:lV,nets:J}){var VV,RV,UV;if(lV.length>=2)return`${(VV=lV[0])==null?void 0:VV.selector} to ${(RV=lV[1])==null?void 0:RV.selector}`;if(lV.length===1&&J.length===1)return`${(UV=lV[0])==null?void 0:UV.selector} to net.${J[0]._parsedProps.name}`}var getSchematicObstaclesForTrace=lV=>{var ZV;const J=lV.root.db,VV=lV._findConnectedPorts().ports??[],RV=new Set(VV.map(WV=>WV.schematic_port_id)),UV=[];for(const WV of J.toArray()){if(WV.type==="schematic_component"){const IV=!!WV.symbol_name,dV=WV.size.width>WV.size.height?"horz":"vert";UV.push({type:"rect",layers:["top"],center:WV.center,width:WV.size.width+(IV&&dV==="horz"?-.5:0),height:WV.size.height+(IV&&dV==="vert"?-.5:0),connectedTo:[]})}if(WV.type==="schematic_port"){if(RV.has(WV.schematic_port_id))continue;const IV=WV.facing_direction?getUnitVectorFromDirection(WV.facing_direction):{x:0,y:0};UV.push({type:"rect",layers:["top"],center:{x:WV.center.x-IV.x*.1,y:WV.center.y-IV.y*.1},width:.1+Math.abs(IV.x)*.3,height:.1+Math.abs(IV.y)*.3,connectedTo:[]})}WV.type==="schematic_text"&&UV.push({type:"rect",layers:["top"],center:WV.position,width:(((ZV=WV.text)==null?void 0:ZV.length)??0)*.1,height:.2,connectedTo:[]}),WV.type==="schematic_box"&&UV.push({type:"rect",layers:["top"],center:{x:WV.x,y:WV.y},width:WV.width,height:WV.height,connectedTo:[]})}return UV},portToObjective=lV=>({...lV._getGlobalPcbPositionAfterLayout(),layers:lV.getAvailablePcbLayers()}),Trace2=class extends PrimitiveComponent{constructor(J){super(J);SI(this,"source_trace_id",null);SI(this,"pcb_trace_id",null);SI(this,"schematic_trace_id",null);SI(this,"_portsRoutedOnPcb");SI(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:VV}=this;if(!VV)throw new Error("Trace has no parent");const UV=this.getTracePortPathSelectors().map(ZV=>({selector:ZV,port:this.getSubcircuit().selectOne(ZV,{type:"port"})??null}));for(const{selector:ZV,port:WV}of UV)if(!WV){const IV=ZV.replace(/\>.*$/,""),dV=this.getSubcircuit().selectOne(IV);dV?this.renderError(`Could not find port for selector "${ZV}" (did you forget to include the pin name?)
7296
7296
  searched component ${dV.getString()}, which has ports: ${dV.children.filter(CV=>CV.componentName==="Port").map(CV=>`${CV.getString()}(${CV.getNameAndAliases().join(",")})`).join(" & ")}`):this.renderError(`Could not find port for selector "${ZV}"`)}return UV.some(ZV=>!ZV.port)?{allPortsFound:!1}:{allPortsFound:!0,portsWithSelectors:UV,ports:UV.map(({port:ZV})=>ZV)}}_findConnectedNets(){const J=this.getTracePathNetSelectors().map(RV=>({selector:RV,net:this.getSubcircuit().selectOne(RV,{type:"net"})})),VV=J.filter(RV=>!RV.net);return VV.length>0&&this.renderError(`Could not find net for selector "${VV[0].selector}" inside ${this}`),{netsWithSelectors:J,nets:J.map(RV=>RV.net)}}_getAllTracesConnectedToSameNet(){const J=this.getSubcircuit().selectAll("trace"),VV=this._findConnectedNets().nets,RV=this._findConnectedPorts().ports??[];return J.filter(UV=>{if(UV===this)return!1;const ZV=UV._findConnectedNets().nets,WV=UV._findConnectedPorts().ports??[];return ZV.some(IV=>VV.includes(IV))||WV.some(IV=>RV.includes(IV))})}_isExplicitlyConnectedToPort(J){const{allPortsFound:VV,portsWithSelectors:RV}=this._findConnectedPorts();return VV?RV.map(ZV=>ZV.port).includes(J):!1}_isExplicitlyConnectedToNet(J){return this._findConnectedNets().nets.includes(J)}doInitialCreateNetsFromProps(){createNetsFromProps(this,this.getTracePathNetSelectors())}doInitialSourceTraceRender(){const{db:J}=this.root,{_parsedProps:VV,parent:RV}=this;if(!RV){this.renderError("Trace has no parent");return}const{allPortsFound:UV,portsWithSelectors:ZV}=this._findConnectedPorts();if(!UV)return;const WV=this._findConnectedNets().nets,IV=getTraceDisplayName({ports:ZV,nets:WV}),dV=J.source_trace.insert({connected_source_port_ids:ZV.map(CV=>CV.port.source_port_id),connected_source_net_ids:WV.map(CV=>CV.source_net_id),max_length:getMaxLengthFromConnectedCapacitors(ZV.map(CV=>CV.port),{db:J})??VV.maxLength,display_name:IV});this.source_trace_id=dV.source_trace_id}doInitialPcbTraceRender(){var pV,HV;if((pV=this.root)!=null&&pV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV,parent:RV}=this,UV=this.getSubcircuit();if(!RV)throw new Error("Trace has no parent");if(UV._parsedProps.routingDisabled)return;const ZV=(HV=UV._parsedProps.pcbRouteCache)==null?void 0:HV.pcbTraces;if(ZV){const oV=J.pcb_trace.insert({route:ZV.flatMap(DV=>DV.route),source_trace_id:this.source_trace_id});this.pcb_trace_id=oV.pcb_trace_id;return}if(!UV._shouldUseTraceByTraceRouting())return;const{allPortsFound:WV,ports:IV}=this._findConnectedPorts();if(!WV)return;const dV=[];for(const oV of IV)oV._hasMatchedPcbPrimitive()||dV.push(oV);if(dV.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: ${dV.map(oV=>oV.getString()).join(", ")}`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:dV.map(oV=>oV.pcb_port_id).filter(Boolean)});return}const CV=this._findConnectedNets().netsWithSelectors;if(IV.length===0&&CV.length===2){this.renderError("Trace connects two nets, we haven't implemented a way to route this yet");return}else if(IV.length===1&&CV.length===1){const oV=IV[0],wV=CV[0].net.getAllConnectedPorts().filter(Il=>Il!==oV);if(wV.length===0){console.log("Nothing to connect this port to, the net is empty. TODO should emit a warning!");return}const qV=getClosest(oV,wV);IV.push(qV)}else if(IV.length>1&&CV.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 FV=IV.flatMap(oV=>oV.matchedComponents.filter(DV=>DV.componentName==="TraceHint")),NV=(this._parsedProps.pcbRouteHints??[]).concat(FV.flatMap(oV=>oV.getPcbRouteHints()));if(IV.length>2){this.renderError(`Trace has more than two ports (${IV.map(oV=>oV.getString()).join(", ")}), routing between more than two ports for a single trace is not implemented`);return}if(this.getSubcircuit().selectAll("trace").filter(oV=>oV.renderPhaseStates.PcbTraceRender.initialized).some(oV=>oV._portsRoutedOnPcb.length===IV.length&&oV._portsRoutedOnPcb.every(DV=>IV.includes(DV))))return;let JV=[];NV.length===0?JV=[portToObjective(IV[0]),portToObjective(IV[1])]:JV=[portToObjective(IV[0]),...NV,portToObjective(IV[1])];const nV=findPossibleTraceLayerCombinations(JV),aV=getFullConnectivityMapFromCircuitJson$1(this.root.db.toArray()),[GV,cV]=tryNow(()=>getObstaclesFromSoup(this.root.db.toArray()));if(cV){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: ${cV.message}`,source_trace_id:this.source_trace_id,center:{x:0,y:0},pcb_port_ids:IV.map(oV=>oV.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[]});return}for(const oV of GV)if(oV.connectedTo.length>0){const wV=aV.getNetConnectedToId(oV.connectedTo[0]);wV&&oV.connectedTo.push(wV)}let TV=[];if(nV.length===0)TV=JV;else{const oV=nV[0].layer_path;TV=JV.map((DV,wV)=>DV.via?{...DV,via_to_layer:oV[wV]}:{...DV,layers:[oV[wV]]})}TV[0].pcb_port_id=IV[0].pcb_port_id,TV[TV.length-1].pcb_port_id=IV[1].pcb_port_id;const iV=[];for(const[oV,DV]of pairs$1(TV)){const wV="via_to_layer"in oV?oV.via_to_layer:null,qV=2,Il="layers"in oV&&oV.layers.length===1?oV.layers[0]:wV??"top",nl="layers"in DV&&DV.layers.length===1?DV.layers[0]:wV??"top",dl="pcb_port_id"in oV?oV.pcb_port_id:null,LV="pcb_port_id"in DV?DV.pcb_port_id:null,OV=this.getSubcircuit()._parsedProps.minTraceWidth??.16,$V=new MultilayerIjump({OBSTACLE_MARGIN:OV*2,isRemovePathLoopsEnabled:!0,optimizeWithGoalBoxes:!!(dl&&LV),connMap:aV,input:{obstacles:GV,minTraceWidth:OV,connections:[{name:this.source_trace_id,pointsToConnect:[{...oV,layer:Il,pcb_port_id:dl},{...DV,layer:nl,pcb_port_id:LV}]}],layerCount:2,bounds:{minX:Math.min(oV.x,DV.x)-qV,maxX:Math.max(oV.x,DV.x)+qV,minY:Math.min(oV.y,DV.y)-qV,maxY:Math.max(oV.y,DV.y)+qV}}});let Cl=null;try{Cl=$V.solveAndMapToTraces()}catch(pl){this.renderError({type:"pcb_trace_error",pcb_trace_error_id:this.source_trace_id,error_type:"pcb_trace_error",message:`error solving route: ${pl.message}`,source_trace_id:this.pcb_trace_id,center:{x:(oV.x+DV.x)/2,y:(oV.y+DV.y)/2},pcb_port_ids:IV.map(ml=>ml.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:IV.map(ml=>ml.pcb_component_id)})}if(!Cl)return;if(Cl.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:(oV.x+DV.x)/2,y:(oV.y+DV.y)/2},pcb_port_ids:IV.map(pl=>pl.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:IV.map(pl=>pl.pcb_component_id)});return}const[Zl]=Cl;wV&&(Zl.route=Zl.route.map(pl=>(pl.route_type==="wire"&&!pl.layer&&(pl.layer=wV),pl))),dl&&Zl.route[0].route_type==="wire"&&(Zl.route[0].start_pcb_port_id=dl);const gl=Zl.route[Zl.route.length-1];LV&&gl.route_type==="wire"&&(gl.end_pcb_port_id=LV),iV.push(Zl.route)}const EV=mergeRoutes(iV),MV=getTraceLength(EV),AV=J.pcb_trace.insert({route:EV,source_trace_id:this.source_trace_id,trace_length:MV});this._portsRoutedOnPcb=IV,this.pcb_trace_id=AV.pcb_trace_id;for(const oV of EV)oV.route_type==="via"&&J.pcb_via.insert({pcb_trace_id:AV.pcb_trace_id,x:oV.x,y:oV.y,hole_diameter:.3,outer_diameter:.6,layers:[oV.from_layer,oV.to_layer],from_layer:oV.from_layer,to_layer:oV.to_layer})}_doInitialSchematicTraceRenderWithDisplayLabel(){var iV,EV,MV,AV;if((iV=this.root)!=null&&iV.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:VV,parent:RV}=this;if(!RV)throw new Error("Trace has no parent");const{allPortsFound:UV,portsWithSelectors:ZV}=this._findConnectedPorts();if(!UV)return;const WV=ZV.map(({port:pV})=>({port:pV,position:pV._getGlobalSchematicPositionAfterLayout(),schematic_port_id:pV.schematic_port_id,facingDirection:pV.facingDirection}));if(WV.length<2)throw new Error("Expected at least two ports in portsWithPosition.");let IV,dV;const CV=WV[0].position,FV=WV[0].port;if("path"in this.props){if(this.props.path.length!==2)throw new Error("Invalid 'path': Must contain exactly two elements.");[IV,dV]=this.props.path}else{if(!("from"in this.props&&"to"in this.props))throw new Error("Missing 'from' or 'to' properties in props.");IV=this.props.from,dV=this.props.to}if(!FV.source_port_id)throw new Error(`Missing source_port_id for the 'from' port (${IV}).`);const NV=WV[1].position,eV=WV[1].port;if(!eV.source_port_id)throw new Error(`Missing source_port_id for the 'to' port (${dV}).`);const gV=J.schematic_net_label.list().find(pV=>pV.source_net_id===FV.source_port_id),JV=J.schematic_net_label.list().find(pV=>pV.source_net_id===eV.source_port_id),[nV,aV]=ZV.map(({port:pV})=>pV),cV=((EV=nV.parent)==null?void 0:EV.config.shouldRenderAsSchematicBox)?`${(MV=nV==null?void 0:nV.parent)==null?void 0:MV.props.name}_${nV==null?void 0:nV.props.name}`:`${(AV=aV==null?void 0:aV.parent)==null?void 0:AV.props.name}_${aV==null?void 0:aV.props.name}`,TV=this.props.schDisplayLabel??cV;if(gV&&gV.text!==TV&&(gV.text=`${TV} / ${gV.text}`),JV&&(JV==null?void 0:JV.text)!==TV&&(JV.text=`${TV} / ${JV.text}`),!gV&&!JV&&(TV!=null&&TV.toLocaleLowerCase().includes("gnd")||TV!=null&&TV.toLocaleLowerCase().includes("ground"))){createDownwardNetLabelGroundSymbol({fromPort:FV,toPort:eV,fromAnchorPos:CV,toAnchorPos:NV,schDisplayLabel:this.props.schDisplayLabel,source_trace_id:this.source_trace_id},{db:J});return}JV||J.schematic_net_label.insert({text:this.props.schDisplayLabel??cV,source_net_id:eV.source_port_id,anchor_position:NV,center:NV,anchor_side:getEnteringEdgeFromDirection(eV.facingDirection)??"bottom"}),gV||J.schematic_net_label.insert({text:this.props.schDisplayLabel??cV,source_net_id:FV.source_port_id,anchor_position:CV,center:CV,anchor_side:getEnteringEdgeFromDirection(FV.facingDirection)??"bottom"})}_isSymbolToChipConnection(){const{allPortsFound:J,ports:VV}=this._findConnectedPorts();if(!J||VV.length!==2)return!1;const[RV,UV]=VV;if(!(RV!=null&&RV.parent)||!(UV!=null&&UV.parent))return!1;const ZV=RV.parent.config.shouldRenderAsSchematicBox,WV=UV.parent.config.shouldRenderAsSchematicBox;return ZV&&!WV||!ZV&&WV}_isSymbolToSymbolConnection(){const{allPortsFound:J,ports:VV}=this._findConnectedPorts();if(!J||VV.length!==2)return!1;const[RV,UV]=VV;if(!(RV!=null&&RV.parent)||!(UV!=null&&UV.parent))return!1;const ZV=!RV.parent.config.shouldRenderAsSchematicBox,WV=!UV.parent.config.shouldRenderAsSchematicBox;return ZV&&WV}doInitialSchematicTraceRender(){var qV;if((qV=this.root)!=null&&qV.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:VV,parent:RV}=this;if(!RV)throw new Error("Trace has no parent");const{allPortsFound:UV,portsWithSelectors:ZV}=this._findConnectedPorts(),{netsWithSelectors:WV}=this._findConnectedNets();if(!UV)return;if(this.props.schDisplayLabel&&("from"in this.props&&"to"in this.props||"path"in this.props)){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const IV={name:this.source_trace_id,pointsToConnect:[]},dV=getSchematicObstaclesForTrace(this),CV=ZV.map(({port:Il})=>({port:Il,position:Il._getGlobalSchematicPositionAfterLayout(),schematic_port_id:Il.schematic_port_id??void 0,facingDirection:Il.facingDirection}));if(CV.length===1&&WV.length===1){const Il=WV[0].net,{port:nl,position:dl}=CV[0];J.schematic_net_label.insert({text:Il._parsedProps.name,source_net_id:Il.source_net_id,anchor_position:dl,center:dl,anchor_side:getEnteringEdgeFromDirection(nl.facingDirection)??"bottom"});return}if(CV.length<2)return;IV.pointsToConnect=CV.map(({position:Il})=>({...Il,layer:"top"}));const NV=computeObstacleBounds(dV),eV=2,gV={minTraceWidth:.1,obstacles:dV,connections:[IV],bounds:{minX:NV.minX-eV,maxX:NV.maxX+eV,minY:NV.minY-eV,maxY:NV.maxY+eV},layerCount:1};let JV=MultilayerIjump,nV=!1;this.getSubcircuit().props._schDirectLineRoutingEnabled&&(JV=DirectLineRouter,nV=!0);let GV=new JV({input:gV,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(GV.length===0){if(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection()){this._doInitialSchematicTraceRenderWithDisplayLabel();return}GV=new DirectLineRouter({input:gV}).solveAndMapToTraces(),nV=!0}const[{route:cV}]=GV;let TV=[];for(let Il=0;Il<cV.length-1;Il++)TV.push({from:cV[Il],to:cV[Il+1]});const iV=this.source_trace_id;let EV=[];if(!nV){pushEdgesOfSchematicTraceToPreventOverlap({edges:TV,db:J,source_trace_id:iV});const Il=getOtherSchematicTraces({db:J,source_trace_id:iV,differentNetOnly:!0}).flatMap(nl=>nl.edges);TV=createSchematicTraceCrossingSegments({edges:TV,otherEdges:Il}),EV=createSchematicTraceJunctions({edges:TV,db:J,source_trace_id:this.source_trace_id})}const MV=TV[TV.length-1],AV=CV[CV.length-1],pV=getDominantDirection(MV);TV.push(...getStubEdges({lastEdge:MV,lastEdgePort:AV,lastDominantDirection:pV}));const HV=TV[0],oV=CV[0],DV=getDominantDirection(HV);if(TV.unshift(...getStubEdges({firstEdge:HV,firstEdgePort:oV,firstDominantDirection:DV})),!this.source_trace_id)throw new Error("Missing source_trace_id for schematic trace insertion.");if(this.getSubcircuit()._parsedProps.schTraceAutoLabelEnabled&&countComplexElements(EV,TV)>=5&&(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection())){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const wV=J.schematic_trace.insert({source_trace_id:this.source_trace_id,edges:TV,junctions:EV});this.schematic_trace_id=wV.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:lV}=this.root,{_parsedProps:J}=this,VV=lV.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=VV.source_component_id}},Chip=class extends NormalComponent{constructor(){super(...arguments);SI(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:VV}=this,RV=J.source_component.insert({ftype:"simple_chip",name:VV.name,manufacturer_part_number:VV.manufacturerPartNumber,supplier_part_numbers:VV.supplierPartNumbers});this.source_component_id=RV.source_component_id}doInitialPcbComponentRender(){var UV;if((UV=this.root)!=null&&UV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=J.pcb_component.insert({center:{x:VV.pcbX??0,y:VV.pcbY??0},width:2,height:3,layer:VV.layer??"top",rotation:VV.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=RV.pcb_component_id}},Diode=class extends NormalComponent{constructor(){super(...arguments);SI(this,"pos",this.portMap.pin1);SI(this,"anode",this.portMap.pin1);SI(this,"neg",this.portMap.pin2);SI(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);SI(this,"schematicDimensions",null)}get config(){return{componentName:"Jumper",zodProps:jumperProps,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){const{db:J}=this.root,{_parsedProps:VV}=this,RV=J.source_component.insert({ftype:"simple_chip",name:VV.name,manufacturer_part_number:VV.manufacturerPartNumber,supplier_part_numbers:VV.supplierPartNumbers});this.source_component_id=RV.source_component_id}doInitialPcbComponentRender(){var UV;if((UV=this.root)!=null&&UV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=J.pcb_component.insert({center:{x:VV.pcbX??0,y:VV.pcbY??0},width:2,height:3,layer:VV.layer??"top",rotation:VV.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=RV.pcb_component_id}},Led=class extends NormalComponent{constructor(){super(...arguments);SI(this,"pos",this.portMap.pin1);SI(this,"anode",this.portMap.pin1);SI(this,"neg",this.portMap.pin2);SI(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);SI(this,"pos",this.portMap.pin1);SI(this,"positive",this.portMap.pin1);SI(this,"neg",this.portMap.pin2);SI(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:lV}=this.root,{_parsedProps:J}=this,VV=lV.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=VV.source_component_id}},edgeSpecifiers=["leftedge","rightedge","topedge","bottomedge","center"],Constraint2=class extends PrimitiveComponent{get config(){return{componentName:"Constraint",zodProps:constraintProps}}constructor(lV){if(super(lV),("xdist"in lV||"ydist"in lV)&&!("edgeToEdge"in lV)&&!("centerToCenter"in lV))throw new Error(`edgeToEdge, centerToCenter must be set for xDist or yDist for ${this}`);if("for"in lV&&lV.for.length<2)throw new Error(`"for" must have at least two selectors for ${this}`)}_getAllReferencedComponents(){const lV=[],J=this.getPrimitiveContainer();function VV(RV){const UV=RV.split(" ").pop(),ZV=edgeSpecifiers.includes(UV)?UV:void 0,WV=ZV?RV.replace(` ${ZV}`,""):RV,IV=J.selectOne(WV,{pcbPrimitive:!0});IV&&lV.push({selector:RV,component:IV,componentSelector:WV,edge:ZV})}for(const RV of["left","right","top","bottom"])RV in this._parsedProps&&VV(this._parsedProps[RV]);if("for"in this._parsedProps)for(const RV of this._parsedProps.for)VV(RV);return{componentsWithSelectors:lV}}},FabricationNotePath=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"fabrication_note_path_id",null)}get config(){return{componentName:"FabricationNotePath",zodProps:fabricationNotePathProps}}doInitialPcbPrimitiveRender(){var WV,IV;if((WV=this.root)!=null&&WV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=VV.layer??"top";if(RV!=="top"&&RV!=="bottom")throw new Error(`Invalid layer "${RV}" for SilkscreenPath. Must be "top" or "bottom".`);const UV=this._computePcbGlobalTransformBeforeLayout(),ZV=J.pcb_fabrication_note_path.insert({pcb_component_id:(IV=this.parent)==null?void 0:IV.pcb_component_id,layer:RV,color:VV.color,route:VV.route.map(dV=>{const CV=applyToPoint(UV,{x:dV.x,y:dV.y});return{...dV,x:CV.x,y:CV.y}}),stroke_width:VV.strokeWidth??.1});this.fabrication_note_path_id=ZV.pcb_fabrication_note_path_id}},FabricationNoteText=class extends PrimitiveComponent{get config(){return{componentName:"FabricationNoteText",zodProps:fabricationNoteTextProps}}doInitialPcbPrimitiveRender(){var RV;if((RV=this.root)!=null&&RV.pcbDisabled)return;const{db:lV}=this.root,{_parsedProps:J}=this,VV=this.getPrimitiveContainer();lV.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:VV.pcb_component_id})}},Subcircuit=class extends Group$2{constructor(lV){super({...lV,subcircuit:!0})}},NetAlias=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"source_net_alias_id")}get config(){return{componentName:"NetAlias",zodProps:netAliasProps}}doInitialSchematicComponentRender(){var ZV;if((ZV=this.root)!=null&&ZV.schematicDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV={x:VV.schX??0,y:VV.schY??0},UV=J.schematic_net_label.insert({text:VV.net,source_net_id:VV.net,anchor_position:RV,center:RV,anchor_side:"bottom"});this.source_net_alias_id=UV.source_net_id}},SilkscreenCircle=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_silkscreen_circle_id",null)}get config(){return{componentName:"SilkscreenCircle",zodProps:silkscreenCircleProps}}doInitialPcbPrimitiveRender(){var ZV,WV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=VV.layer??"top";if(RV!=="top"&&RV!=="bottom")throw new Error(`Invalid layer "${RV}" for SilkscreenCircle. Must be "top" or "bottom".`);this._computePcbGlobalTransformBeforeLayout();const UV=J.pcb_silkscreen_circle.insert({pcb_component_id:(WV=this.parent)==null?void 0:WV.pcb_component_id,layer:RV,center:{x:VV.pcbX??0,y:VV.pcbY??0},radius:VV.radius});this.pcb_silkscreen_circle_id=UV.pcb_silkscreen_circle_id}},SilkscreenRect=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_silkscreen_rect_id",null)}get config(){return{componentName:"SilkscreenRect",zodProps:silkscreenRectProps}}doInitialPcbPrimitiveRender(){var ZV,WV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=VV.layer??"top";if(RV!=="top"&&RV!=="bottom")throw new Error(`Invalid layer "${RV}" for SilkscreenRect. Must be "top" or "bottom".`);const UV=J.pcb_silkscreen_rect.insert({pcb_component_id:(WV=this.parent)==null?void 0:WV.pcb_component_id,layer:RV,center:{x:VV.pcbX??0,y:VV.pcbY??0},width:VV.width,height:VV.height});this.pcb_silkscreen_rect_id=UV.pcb_silkscreen_rect_id}},SilkscreenText=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenText",zodProps:silkscreenTextProps}}doInitialPcbPrimitiveRender(){var WV;if((WV=this.root)!=null&&WV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this.getPrimitiveContainer(),UV=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:ZV}=this._getPcbPrimitiveFlippedHelpers();J.pcb_silkscreen_text.insert({anchor_alignment:VV.anchorAlignment,anchor_position:{x:UV.x,y:UV.y},font:VV.font??"tscircuit2024",font_size:VV.fontSize??1,layer:ZV(VV.layer??"top"),text:VV.text??"",ccw_rotation:VV.pcbRotation,pcb_component_id:RV.pcb_component_id})}getPcbSize(){const{_parsedProps:J}=this,VV=J.fontSize??1,UV=(J.text??"").length*VV,ZV=VV;return{width:UV*VV,height:ZV*VV}}},SilkscreenLine=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_silkscreen_line_id",null)}get config(){return{componentName:"SilkscreenLine",zodProps:silkscreenLineProps}}doInitialPcbPrimitiveRender(){var ZV,WV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=VV.layer??"top";if(RV!=="top"&&RV!=="bottom")throw new Error(`Invalid layer "${RV}" for SilkscreenLine. Must be "top" or "bottom".`);const UV=J.pcb_silkscreen_line.insert({pcb_component_id:(WV=this.parent)==null?void 0:WV.pcb_component_id,layer:RV,x1:VV.x1,y1:VV.y1,x2:VV.x2,y2:VV.y2,stroke_width:VV.strokeWidth??.1});this.pcb_silkscreen_line_id=UV.pcb_silkscreen_line_id}},Via=class extends PrimitiveComponent{constructor(){super(...arguments);SI(this,"pcb_via_id",null);SI(this,"matchedPort",null);SI(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,VV=J.pcb_via.get(this.pcb_via_id),RV=this.getPcbSize();return{center:{x:VV.x,y:VV.y},bounds:{left:VV.x-RV.width/2,top:VV.y-RV.height/2,right:VV.x+RV.width/2,bottom:VV.y+RV.height/2},width:RV.width,height:RV.height}}_setPositionFromLayout(J){const{db:VV}=this.root;VV.pcb_via.update(this.pcb_via_id,{x:J.x,y:J.y})}doInitialPcbPrimitiveRender(){var ZV;if((ZV=this.root)!=null&&ZV.pcbDisabled)return;const{db:J}=this.root,{_parsedProps:VV}=this,RV=this._getGlobalPcbPositionBeforeLayout(),UV=J.pcb_via.insert({x:RV.x,y:RV.y,hole_diameter:VV.holeDiameter,outer_diameter:VV.outerDiameter,layers:["bottom","top"],from_layer:VV.fromLayer||"bottom",to_layer:VV.toLayer||"top"});this.pcb_via_id=UV.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:lV}=this.root,{_parsedProps:J}=this,VV=lV.source_component.insert({name:J.name,ftype:"simple_power_source",capacity:J.capacity,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=VV.source_component_id}},PinHeader=class extends NormalComponent{get config(){return{componentName:"PinHeader",zodProps:pinHeaderProps,shouldRenderAsSchematicBox:!0}}_getImpliedFootprintString(){var UV;const lV=this._parsedProps.pinCount??((UV=this._parsedProps.pinLabels)==null?void 0:UV.length)??0,J=this._parsedProps.holeDiameter,VV=this._parsedProps.platedDiameter,RV=this._parsedProps.pitch;return lV>0&&RV?!J&&!VV?`pinrow${lV}_p${RV}`:`pinrow${lV}_p${RV}_id${J}_od${VV}`:null}initPorts(){var J;const lV=this._parsedProps.pinCount??((J=this._parsedProps.pinLabels)==null?void 0:J.length)??1;for(let VV=1;VV<=lV;VV++)this.add(new Port({name:`pin${VV}`,pinNumber:VV,aliases:[]}))}_getSchematicPortArrangement(){const lV=this._parsedProps.pinCount??1,J=this._parsedProps.facingDirection??"right";return{leftSize:J==="left"?lV:0,rightSize:J==="right"?lV:0}}doInitialSourceRender(){const{db:lV}=this.root,{_parsedProps:J}=this,VV=lV.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=VV.source_component_id}};function getResonatorSymbolName(lV){switch(lV){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:lV}=this.root,{_parsedProps:J}=this,VV=lV.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=VV.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:lV}=this.root,{_parsedProps:J}=this,VV=lV.source_component.insert({name:J.name,ftype:FTYPE.simple_inductor,inductance:J.inductance,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=VV.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:lV}=this.root,{_parsedProps:J}=this,VV=lV.source_component.insert({name:J.name,ftype:"simple_potentiometer",max_resistance:J.maxResistance});this.source_component_id=VV.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}}initPorts(){super.initPorts({additionalAliases:{pin1:["side1"],pin3:["side2"]}})}doInitialSourceRender(){const{db:lV}=this.root,{_parsedProps:J}=this,VV=lV.source_component.insert({name:J.name,ftype:FTYPE.simple_push_button,supplier_part_numbers:J.supplierPartNumbers});this.source_component_id=VV.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:lV}=this.root,{_parsedProps:J}=this,VV=lV.source_component.insert({name:J.name,ftype:"simple_crystal",frequency:J.frequency,load_capacitance:J.loadCapacitance});this.source_component_id=VV.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:lV}=this.root,{_parsedProps:J}=this,VV=lV.source_component.insert({ftype:"simple_transistor",name:J.name,transistor_type:J.transistorType});this.source_component_id=VV.source_component_id}},Mosfet=class extends NormalComponent{get config(){const lV=this.props.mosfetMode==="depletion"?"d":"e";return{componentName:"Mosfet",schematicSymbolName:`${this.props.channelType}_channel_${lV}_mosfet_transistor`,zodProps:mosfetProps,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:lV}=this.root,{_parsedProps:J}=this,VV=lV.source_component.insert({ftype:"simple_mosfet",name:J.name,mosfet_mode:J.mosfetMode,channel_type:J.channelType});this.source_component_id=VV.source_component_id}},RootCircuit=class{constructor(){SI(this,"firstChild",null);SI(this,"children");SI(this,"db");SI(this,"root",null);SI(this,"isRoot",!0);SI(this,"schematicDisabled",!1);SI(this,"pcbDisabled",!1);SI(this,"pcbRoutingDisabled",!1);SI(this,"name");SI(this,"_hasRenderedAtleastOnce",!1);SI(this,"_eventListeners",{});this.children=[],this.db=su_default$1([]),this.root=this}add(lV){let J;reactExports.isValidElement(lV)?J=createInstanceFromReactElement(lV):J=lV,this.children.push(J)}_getBoard(){return this.children.find(lV=>lV.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 lV=this.children.find(J=>J.componentName==="Board")??null;if(lV){this.firstChild=lV;return}}throw new Error("Not able to guess root component: RootCircuit has multiple children and no board")}}render(){this.firstChild||this._guessRootComponent();const{firstChild:lV,db:J}=this;if(!lV)throw new Error("RootCircuit has no root component");lV.parent=this,lV.runRenderCycle(),this._hasRenderedAtleastOnce=!0}async renderUntilSettled(){for(this.render();this._hasIncompleteAsyncEffects();)await new Promise(lV=>setTimeout(lV,100)),this.render()}_hasIncompleteAsyncEffects(){return this.children.some(lV=>lV._hasIncompleteAsyncEffects()?!0:lV.children.some(J=>J._hasIncompleteAsyncEffects()))}getSoup(){return this._hasRenderedAtleastOnce||this.render(),this.db.toArray()}getCircuitJson(){return this.getSoup()}toJson(){return this.getSoup()}async getSvg(lV){return(await Promise.resolve().then(()=>index$1).catch(VV=>{throw new Error(`To use project.getSvg, you must install the "circuit-to-svg" package.
7297
7297
 
7298
- "${VV.message}"`)})).convertCircuitJsonToPcbSvg(this.getCircuitJson())}async preview(lV){throw new Error("project.preview is not yet implemented")}computeSchematicGlobalTransform(){return identity$4()}_computePcbGlobalTransformBeforeLayout(){return identity$4()}selectAll(lV){var J;return this._guessRootComponent(),((J=this.firstChild)==null?void 0:J.selectAll(lV))??[]}selectOne(lV,J){var VV;return this._guessRootComponent(),((VV=this.firstChild)==null?void 0:VV.selectOne(lV,J))??null}emit(lV,...J){if(this._eventListeners[lV])for(const VV of this._eventListeners[lV])VV(...J)}on(lV,J){this._eventListeners[lV]||(this._eventListeners[lV]=[]),this._eventListeners[lV].push(J)}getClientOrigin(){return typeof window<"u"?window.location.origin:typeof self<"u"?self.origin:""}},Project=RootCircuit,Circuit=RootCircuit,useRenderedCircuit=lV=>{const[J,VV]=React.useState(!0),[RV,UV]=React.useState(null),[ZV,WV]=React.useState(),[IV,dV]=React.useState();return React.useEffect(()=>{VV(!0),UV(null),lV&&setTimeout(()=>{try{const CV=new RootCircuit;CV.add(lV),WV(CV),dV(CV.toJson())}catch(CV){UV(CV)}VV(!1)},1)},[lV]),{isLoading:J,error:RV,circuit:ZV,circuitJson:IV}},createUseComponent=(lV,J)=>(VV,RV)=>{const UV=[];Array.isArray(J)?UV.push(...J.flat()):typeof J=="object"&&UV.push(...Object.values(J).flat(),...Object.keys(J));const ZV=WV=>{if(WV!=null&&WV.name&&WV.name!==VV)throw new Error(`Component name mismatch. Hook name: ${VV}, Component prop name: ${WV.name}`);const IV={...RV,...WV,name:VV},dV=[];for(const CV of UV)if(IV[CV]){const FV=`.${VV} > .${CV}`,NV=IV[CV];dV.push({from:FV,to:NV}),delete IV[CV]}return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(lV,{...IV}),dV.map((CV,FV)=>jsxRuntimeExports.jsx("trace",{...CV},FV))]})};for(const WV of UV)ZV[WV]=`.${VV} > .${WV}`;return ZV},useCapacitor=createUseComponent(lV=>jsxRuntimeExports.jsx("capacitor",{...lV}),capacitorPins),useChip=lV=>createUseComponent(J=>jsxRuntimeExports.jsx("chip",{pinLabels:lV,...J}),lV),useDiode=createUseComponent(lV=>jsxRuntimeExports.jsx("diode",{...lV}),diodePins),useLed=createUseComponent(lV=>jsxRuntimeExports.jsx("led",{...lV}),ledPins),useResistor=createUseComponent(lV=>jsxRuntimeExports.jsx("resistor",{...lV}),resistorPins),applyEditEventsToManualEditsFile=({circuitJson:lV,editEvents:J,manualEditsFile:VV})=>{var UV;const RV={...VV,schematic_placements:[...VV.schematic_placements??[]]};for(const ZV of J)if(ZV.edit_event_type==="edit_schematic_component_location"){const{schematic_component_id:WV,new_center:IV}=ZV,dV=su_default$1(lV).schematic_component.get(WV);if(!dV)continue;const CV=su_default$1(lV).source_component.get(dV.source_component_id);if(!CV)continue;const FV=(UV=RV.schematic_placements)==null?void 0:UV.findIndex(eV=>eV.selector===CV.name),NV={selector:CV.name,center:IV,relative_to:"group_center"};FV>=0?RV.schematic_placements[FV]=NV:RV.schematic_placements.push(NV)}return RV};extendCatalogue(components_exports),extendCatalogue({Bug:Chip});const dist$8=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,orderedRenderPhases,useCapacitor,useChip,useDiode,useLed,useRenderedCircuit,useResistor},Symbol.toStringTag,{value:"Module"})),require$$2=getAugmentedNamespace(dist$8);var flatten_1$1,hasRequiredFlatten$1;function requireFlatten$1(){if(hasRequiredFlatten$1)return flatten_1$1;hasRequiredFlatten$1=1;const lV=J=>J.reduce((VV,RV)=>Array.isArray(RV)?VV.concat(lV(RV)):VV.concat(RV),[]);return flatten_1$1=lV,flatten_1$1}var padArrayToLength_1,hasRequiredPadArrayToLength;function requirePadArrayToLength(){return hasRequiredPadArrayToLength||(hasRequiredPadArrayToLength=1,padArrayToLength_1=(J,VV,RV)=>{for(J=J.slice();J.length<RV;)J.push(VV);return J}),padArrayToLength_1}var min_1$1,hasRequiredMin$1;function requireMin$1(){return hasRequiredMin$1||(hasRequiredMin$1=1,min_1$1=(J,VV,RV)=>(J[0]=Math.min(VV[0],RV[0]),J[1]=Math.min(VV[1],RV[1]),J[2]=Math.min(VV[2],RV[2]),J)),min_1$1}var max_1$1,hasRequiredMax$1;function requireMax$1(){return hasRequiredMax$1||(hasRequiredMax$1=1,max_1$1=(J,VV,RV)=>(J[0]=Math.max(VV[0],RV[0]),J[1]=Math.max(VV[1],RV[1]),J[2]=Math.max(VV[2],RV[2]),J)),max_1$1}var abs_1$1,hasRequiredAbs$1;function requireAbs$1(){return hasRequiredAbs$1||(hasRequiredAbs$1=1,abs_1$1=(J,VV)=>(J[0]=Math.abs(VV[0]),J[1]=Math.abs(VV[1]),J)),abs_1$1}var add_1$2,hasRequiredAdd$2;function requireAdd$2(){return hasRequiredAdd$2||(hasRequiredAdd$2=1,add_1$2=(J,VV,RV)=>(J[0]=VV[0]+RV[0],J[1]=VV[1]+RV[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 lV=requireAngleRadians();return angleDegrees_1=VV=>lV(VV)*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 lV=requireCreate$c();return clone_1$a=VV=>{const RV=lV();return RV[0]=VV[0],RV[1]=VV[1],RV},clone_1$a}var copy_1$5,hasRequiredCopy$5;function requireCopy$5(){return hasRequiredCopy$5||(hasRequiredCopy$5=1,copy_1$5=(J,VV)=>(J[0]=VV[0],J[1]=VV[1],J)),copy_1$5}var cross_1$1,hasRequiredCross$1;function requireCross$1(){return hasRequiredCross$1||(hasRequiredCross$1=1,cross_1$1=(J,VV,RV)=>(J[0]=0,J[1]=0,J[2]=VV[0]*RV[1]-VV[1]*RV[0],J)),cross_1$1}var distance_1$1,hasRequiredDistance$1;function requireDistance$1(){return hasRequiredDistance$1||(hasRequiredDistance$1=1,distance_1$1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1];return Math.sqrt(RV*RV+UV*UV)}),distance_1$1}var divide_1$1,hasRequiredDivide$1;function requireDivide$1(){return hasRequiredDivide$1||(hasRequiredDivide$1=1,divide_1$1=(J,VV,RV)=>(J[0]=VV[0]/RV[0],J[1]=VV[1]/RV[1],J)),divide_1$1}var dot_1$2,hasRequiredDot$2;function requireDot$2(){return hasRequiredDot$2||(hasRequiredDot$2=1,dot_1$2=(J,VV)=>J[0]*VV[0]+J[1]*VV[1]),dot_1$2}var equals_1$7,hasRequiredEquals$7;function requireEquals$7(){return hasRequiredEquals$7||(hasRequiredEquals$7=1,equals_1$7=(J,VV)=>J[0]===VV[0]&&J[1]===VV[1]),equals_1$7}var constants$1,hasRequiredConstants$1;function requireConstants$1(){if(hasRequiredConstants$1)return constants$1;hasRequiredConstants$1=1;const lV=1e5,J=1e-5,VV=1e-13,RV=Math.PI*2;return constants$1={EPS:J,NEPS:VV,TAU:RV,spatialResolution:lV},constants$1}var trigonometry,hasRequiredTrigonometry;function requireTrigonometry(){if(hasRequiredTrigonometry)return trigonometry;hasRequiredTrigonometry=1;const{NEPS:lV}=requireConstants$1(),J=UV=>Math.abs(UV)<lV?0:UV;return trigonometry={sin:UV=>J(Math.sin(UV)),cos:UV=>J(Math.cos(UV))},trigonometry}var fromAngleRadians_1,hasRequiredFromAngleRadians;function requireFromAngleRadians(){if(hasRequiredFromAngleRadians)return fromAngleRadians_1;hasRequiredFromAngleRadians=1;const{sin:lV,cos:J}=requireTrigonometry();return fromAngleRadians_1=(RV,UV)=>(RV[0]=J(UV),RV[1]=lV(UV),RV),fromAngleRadians_1}var fromAngleDegrees_1,hasRequiredFromAngleDegrees;function requireFromAngleDegrees(){if(hasRequiredFromAngleDegrees)return fromAngleDegrees_1;hasRequiredFromAngleDegrees=1;const lV=requireFromAngleRadians();return fromAngleDegrees_1=(VV,RV)=>lV(VV,RV*.017453292519943295),fromAngleDegrees_1}var fromScalar_1$2,hasRequiredFromScalar$2;function requireFromScalar$2(){return hasRequiredFromScalar$2||(hasRequiredFromScalar$2=1,fromScalar_1$2=(J,VV)=>(J[0]=VV,J[1]=VV,J)),fromScalar_1$2}var fromValues_1$4,hasRequiredFromValues$4;function requireFromValues$4(){if(hasRequiredFromValues$4)return fromValues_1$4;hasRequiredFromValues$4=1;const lV=requireCreate$c();return fromValues_1$4=(VV,RV)=>{const UV=lV();return UV[0]=VV,UV[1]=RV,UV},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,VV,RV,UV)=>{const ZV=VV[0],WV=VV[1];return J[0]=ZV+UV*(RV[0]-ZV),J[1]=WV+UV*(RV[1]-WV),J}),lerp_1$1}var max_1,hasRequiredMax;function requireMax(){return hasRequiredMax||(hasRequiredMax=1,max_1=(J,VV,RV)=>(J[0]=Math.max(VV[0],RV[0]),J[1]=Math.max(VV[1],RV[1]),J)),max_1}var min_1,hasRequiredMin;function requireMin(){return hasRequiredMin||(hasRequiredMin=1,min_1=(J,VV,RV)=>(J[0]=Math.min(VV[0],RV[0]),J[1]=Math.min(VV[1],RV[1]),J)),min_1}var multiply_1$2,hasRequiredMultiply$2;function requireMultiply$2(){return hasRequiredMultiply$2||(hasRequiredMultiply$2=1,multiply_1$2=(J,VV,RV)=>(J[0]=VV[0]*RV[0],J[1]=VV[1]*RV[1],J)),multiply_1$2}var negate_1$1,hasRequiredNegate$1;function requireNegate$1(){return hasRequiredNegate$1||(hasRequiredNegate$1=1,negate_1$1=(J,VV)=>(J[0]=-VV[0],J[1]=-VV[1],J)),negate_1$1}var rotate_1$2,hasRequiredRotate$2;function requireRotate$2(){return hasRequiredRotate$2||(hasRequiredRotate$2=1,rotate_1$2=(J,VV,RV,UV)=>{const ZV=VV[0]-RV[0],WV=VV[1]-RV[1],IV=Math.cos(UV),dV=Math.sin(UV);return J[0]=ZV*IV-WV*dV+RV[0],J[1]=ZV*dV+WV*IV+RV[1],J}),rotate_1$2}var normal_1,hasRequiredNormal;function requireNormal(){if(hasRequiredNormal)return normal_1;hasRequiredNormal=1;const{TAU:lV}=requireConstants$1(),J=requireCreate$c(),VV=requireRotate$2();return normal_1=(UV,ZV)=>VV(UV,ZV,J(),lV/4),normal_1}var normalize_1$1,hasRequiredNormalize$1;function requireNormalize$1(){return hasRequiredNormalize$1||(hasRequiredNormalize$1=1,normalize_1$1=(J,VV)=>{const RV=VV[0],UV=VV[1];let ZV=RV*RV+UV*UV;return ZV>0&&(ZV=1/Math.sqrt(ZV)),J[0]=RV*ZV,J[1]=UV*ZV,J}),normalize_1$1}var scale_1$3,hasRequiredScale$3;function requireScale$3(){return hasRequiredScale$3||(hasRequiredScale$3=1,scale_1$3=(J,VV,RV)=>(J[0]=VV[0]*RV,J[1]=VV[1]*RV,J)),scale_1$3}var snap_1$2,hasRequiredSnap$2;function requireSnap$2(){return hasRequiredSnap$2||(hasRequiredSnap$2=1,snap_1$2=(J,VV,RV)=>(J[0]=Math.round(VV[0]/RV)*RV+0,J[1]=Math.round(VV[1]/RV)*RV+0,J)),snap_1$2}var squaredDistance_1$1,hasRequiredSquaredDistance$1;function requireSquaredDistance$1(){return hasRequiredSquaredDistance$1||(hasRequiredSquaredDistance$1=1,squaredDistance_1$1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1];return RV*RV+UV*UV}),squaredDistance_1$1}var squaredLength_1$1,hasRequiredSquaredLength$1;function requireSquaredLength$1(){return hasRequiredSquaredLength$1||(hasRequiredSquaredLength$1=1,squaredLength_1$1=J=>{const VV=J[0],RV=J[1];return VV*VV+RV*RV}),squaredLength_1$1}var subtract_1$3,hasRequiredSubtract$3;function requireSubtract$3(){return hasRequiredSubtract$3||(hasRequiredSubtract$3=1,subtract_1$3=(J,VV,RV)=>(J[0]=VV[0]-RV[0],J[1]=VV[1]-RV[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,VV,RV)=>{const UV=VV[0],ZV=VV[1];return J[0]=RV[0]*UV+RV[4]*ZV+RV[12],J[1]=RV[1]*UV+RV[5]*ZV+RV[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,VV)=>(J[0]=Math.abs(VV[0]),J[1]=Math.abs(VV[1]),J[2]=Math.abs(VV[2]),J)),abs_1}var add_1$1,hasRequiredAdd$1;function requireAdd$1(){return hasRequiredAdd$1||(hasRequiredAdd$1=1,add_1$1=(J,VV,RV)=>(J[0]=VV[0]+RV[0],J[1]=VV[1]+RV[1],J[2]=VV[2]+RV[2],J)),add_1$1}var dot_1$1,hasRequiredDot$1;function requireDot$1(){return hasRequiredDot$1||(hasRequiredDot$1=1,dot_1$1=(J,VV)=>J[0]*VV[0]+J[1]*VV[1]+J[2]*VV[2]),dot_1$1}var angle_1,hasRequiredAngle;function requireAngle(){if(hasRequiredAngle)return angle_1;hasRequiredAngle=1;const lV=requireDot$1();return angle_1=(VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2],IV=RV[0],dV=RV[1],CV=RV[2],FV=Math.sqrt(UV*UV+ZV*ZV+WV*WV),NV=Math.sqrt(IV*IV+dV*dV+CV*CV),eV=FV*NV,gV=eV&&lV(VV,RV)/eV;return Math.acos(Math.min(Math.max(gV,-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 lV=requireCreate$b();return clone_1$9=VV=>{const RV=lV();return RV[0]=VV[0],RV[1]=VV[1],RV[2]=VV[2],RV},clone_1$9}var copy_1$4,hasRequiredCopy$4;function requireCopy$4(){return hasRequiredCopy$4||(hasRequiredCopy$4=1,copy_1$4=(J,VV)=>(J[0]=VV[0],J[1]=VV[1],J[2]=VV[2],J)),copy_1$4}var cross_1,hasRequiredCross;function requireCross(){return hasRequiredCross||(hasRequiredCross=1,cross_1=(J,VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2],IV=RV[0],dV=RV[1],CV=RV[2];return J[0]=ZV*CV-WV*dV,J[1]=WV*IV-UV*CV,J[2]=UV*dV-ZV*IV,J}),cross_1}var distance_1,hasRequiredDistance;function requireDistance(){return hasRequiredDistance||(hasRequiredDistance=1,distance_1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1],ZV=VV[2]-J[2];return Math.sqrt(RV*RV+UV*UV+ZV*ZV)}),distance_1}var divide_1,hasRequiredDivide;function requireDivide(){return hasRequiredDivide||(hasRequiredDivide=1,divide_1=(J,VV,RV)=>(J[0]=VV[0]/RV[0],J[1]=VV[1]/RV[1],J[2]=VV[2]/RV[2],J)),divide_1}var equals_1$6,hasRequiredEquals$6;function requireEquals$6(){return hasRequiredEquals$6||(hasRequiredEquals$6=1,equals_1$6=(J,VV)=>J[0]===VV[0]&&J[1]===VV[1]&&J[2]===VV[2]),equals_1$6}var fromScalar_1$1,hasRequiredFromScalar$1;function requireFromScalar$1(){return hasRequiredFromScalar$1||(hasRequiredFromScalar$1=1,fromScalar_1$1=(J,VV)=>(J[0]=VV,J[1]=VV,J[2]=VV,J)),fromScalar_1$1}var fromValues_1$3,hasRequiredFromValues$3;function requireFromValues$3(){if(hasRequiredFromValues$3)return fromValues_1$3;hasRequiredFromValues$3=1;const lV=requireCreate$b();return fromValues_1$3=(VV,RV,UV)=>{const ZV=lV();return ZV[0]=VV,ZV[1]=RV,ZV[2]=UV,ZV},fromValues_1$3}var fromVec2,hasRequiredFromVec2;function requireFromVec2(){return hasRequiredFromVec2||(hasRequiredFromVec2=1,fromVec2=(J,VV,RV=0)=>(J[0]=VV[0],J[1]=VV[1],J[2]=RV,J)),fromVec2}var length_1$1,hasRequiredLength$1;function requireLength$1(){return hasRequiredLength$1||(hasRequiredLength$1=1,length_1$1=J=>{const VV=J[0],RV=J[1],UV=J[2];return Math.sqrt(VV*VV+RV*RV+UV*UV)}),length_1$1}var lerp_1,hasRequiredLerp;function requireLerp(){return hasRequiredLerp||(hasRequiredLerp=1,lerp_1=(J,VV,RV,UV)=>(J[0]=VV[0]+UV*(RV[0]-VV[0]),J[1]=VV[1]+UV*(RV[1]-VV[1]),J[2]=VV[2]+UV*(RV[2]-VV[2]),J)),lerp_1}var multiply_1$1,hasRequiredMultiply$1;function requireMultiply$1(){return hasRequiredMultiply$1||(hasRequiredMultiply$1=1,multiply_1$1=(J,VV,RV)=>(J[0]=VV[0]*RV[0],J[1]=VV[1]*RV[1],J[2]=VV[2]*RV[2],J)),multiply_1$1}var negate_1,hasRequiredNegate;function requireNegate(){return hasRequiredNegate||(hasRequiredNegate=1,negate_1=(J,VV)=>(J[0]=-VV[0],J[1]=-VV[1],J[2]=-VV[2],J)),negate_1}var normalize_1,hasRequiredNormalize;function requireNormalize(){return hasRequiredNormalize||(hasRequiredNormalize=1,normalize_1=(J,VV)=>{const RV=VV[0],UV=VV[1],ZV=VV[2];let WV=RV*RV+UV*UV+ZV*ZV;return WV>0&&(WV=1/Math.sqrt(WV)),J[0]=RV*WV,J[1]=UV*WV,J[2]=ZV*WV,J}),normalize_1}var orthogonal_1,hasRequiredOrthogonal;function requireOrthogonal(){if(hasRequiredOrthogonal)return orthogonal_1;hasRequiredOrthogonal=1;const lV=requireAbs(),J=requireCreate$b(),VV=requireCross();return orthogonal_1=(UV,ZV)=>{const WV=lV(J(),ZV),IV=0+(WV[0]<WV[1]&&WV[0]<WV[2]),dV=0+(WV[1]<=WV[0]&&WV[1]<WV[2]),CV=0+(WV[2]<=WV[0]&&WV[2]<=WV[1]);return VV(UV,ZV,[IV,dV,CV])},orthogonal_1}var rotateX_1$1,hasRequiredRotateX$1;function requireRotateX$1(){return hasRequiredRotateX$1||(hasRequiredRotateX$1=1,rotateX_1$1=(J,VV,RV,UV)=>{const ZV=[],WV=[];return ZV[0]=VV[0]-RV[0],ZV[1]=VV[1]-RV[1],ZV[2]=VV[2]-RV[2],WV[0]=ZV[0],WV[1]=ZV[1]*Math.cos(UV)-ZV[2]*Math.sin(UV),WV[2]=ZV[1]*Math.sin(UV)+ZV[2]*Math.cos(UV),J[0]=WV[0]+RV[0],J[1]=WV[1]+RV[1],J[2]=WV[2]+RV[2],J}),rotateX_1$1}var rotateY_1$1,hasRequiredRotateY$1;function requireRotateY$1(){return hasRequiredRotateY$1||(hasRequiredRotateY$1=1,rotateY_1$1=(J,VV,RV,UV)=>{const ZV=[],WV=[];return ZV[0]=VV[0]-RV[0],ZV[1]=VV[1]-RV[1],ZV[2]=VV[2]-RV[2],WV[0]=ZV[2]*Math.sin(UV)+ZV[0]*Math.cos(UV),WV[1]=ZV[1],WV[2]=ZV[2]*Math.cos(UV)-ZV[0]*Math.sin(UV),J[0]=WV[0]+RV[0],J[1]=WV[1]+RV[1],J[2]=WV[2]+RV[2],J}),rotateY_1$1}var rotateZ_1$1,hasRequiredRotateZ$1;function requireRotateZ$1(){return hasRequiredRotateZ$1||(hasRequiredRotateZ$1=1,rotateZ_1$1=(J,VV,RV,UV)=>{const ZV=[],WV=[];return ZV[0]=VV[0]-RV[0],ZV[1]=VV[1]-RV[1],WV[0]=ZV[0]*Math.cos(UV)-ZV[1]*Math.sin(UV),WV[1]=ZV[0]*Math.sin(UV)+ZV[1]*Math.cos(UV),J[0]=WV[0]+RV[0],J[1]=WV[1]+RV[1],J[2]=VV[2],J}),rotateZ_1$1}var scale_1$2,hasRequiredScale$2;function requireScale$2(){return hasRequiredScale$2||(hasRequiredScale$2=1,scale_1$2=(J,VV,RV)=>(J[0]=VV[0]*RV,J[1]=VV[1]*RV,J[2]=VV[2]*RV,J)),scale_1$2}var snap_1$1,hasRequiredSnap$1;function requireSnap$1(){return hasRequiredSnap$1||(hasRequiredSnap$1=1,snap_1$1=(J,VV,RV)=>(J[0]=Math.round(VV[0]/RV)*RV+0,J[1]=Math.round(VV[1]/RV)*RV+0,J[2]=Math.round(VV[2]/RV)*RV+0,J)),snap_1$1}var squaredDistance_1,hasRequiredSquaredDistance;function requireSquaredDistance(){return hasRequiredSquaredDistance||(hasRequiredSquaredDistance=1,squaredDistance_1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1],ZV=VV[2]-J[2];return RV*RV+UV*UV+ZV*ZV}),squaredDistance_1}var squaredLength_1,hasRequiredSquaredLength;function requireSquaredLength(){return hasRequiredSquaredLength||(hasRequiredSquaredLength=1,squaredLength_1=J=>{const VV=J[0],RV=J[1],UV=J[2];return VV*VV+RV*RV+UV*UV}),squaredLength_1}var subtract_1$2,hasRequiredSubtract$2;function requireSubtract$2(){return hasRequiredSubtract$2||(hasRequiredSubtract$2=1,subtract_1$2=(J,VV,RV)=>(J[0]=VV[0]-RV[0],J[1]=VV[1]-RV[1],J[2]=VV[2]-RV[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,VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2];let IV=RV[3]*UV+RV[7]*ZV+RV[11]*WV+RV[15];return IV=IV||1,J[0]=(RV[0]*UV+RV[4]*ZV+RV[8]*WV+RV[12])/IV,J[1]=(RV[1]*UV+RV[5]*ZV+RV[9]*WV+RV[13])/IV,J[2]=(RV[2]*UV+RV[6]*ZV+RV[10]*WV+RV[14])/IV,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,VV,RV)=>(J[0]=VV[0]+RV[0],J[1]=VV[1]+RV[1],J[2]=VV[2]+RV[2],J[3]=VV[3]+RV[3],J[4]=VV[4]+RV[4],J[5]=VV[5]+RV[5],J[6]=VV[6]+RV[6],J[7]=VV[7]+RV[7],J[8]=VV[8]+RV[8],J[9]=VV[9]+RV[9],J[10]=VV[10]+RV[10],J[11]=VV[11]+RV[11],J[12]=VV[12]+RV[12],J[13]=VV[13]+RV[13],J[14]=VV[14]+RV[14],J[15]=VV[15]+RV[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 lV=requireCreate$a();return clone_1$7=VV=>{const RV=lV();return RV[0]=VV[0],RV[1]=VV[1],RV[2]=VV[2],RV[3]=VV[3],RV[4]=VV[4],RV[5]=VV[5],RV[6]=VV[6],RV[7]=VV[7],RV[8]=VV[8],RV[9]=VV[9],RV[10]=VV[10],RV[11]=VV[11],RV[12]=VV[12],RV[13]=VV[13],RV[14]=VV[14],RV[15]=VV[15],RV},clone_1$7}var copy_1$3,hasRequiredCopy$3;function requireCopy$3(){return hasRequiredCopy$3||(hasRequiredCopy$3=1,copy_1$3=(J,VV)=>(J[0]=VV[0],J[1]=VV[1],J[2]=VV[2],J[3]=VV[3],J[4]=VV[4],J[5]=VV[5],J[6]=VV[6],J[7]=VV[7],J[8]=VV[8],J[9]=VV[9],J[10]=VV[10],J[11]=VV[11],J[12]=VV[12],J[13]=VV[13],J[14]=VV[14],J[15]=VV[15],J)),copy_1$3}var invert_1$2,hasRequiredInvert$2;function requireInvert$2(){return hasRequiredInvert$2||(hasRequiredInvert$2=1,invert_1$2=(J,VV)=>{const RV=VV[0],UV=VV[1],ZV=VV[2],WV=VV[3],IV=VV[4],dV=VV[5],CV=VV[6],FV=VV[7],NV=VV[8],eV=VV[9],gV=VV[10],JV=VV[11],nV=VV[12],aV=VV[13],GV=VV[14],cV=VV[15],TV=RV*dV-UV*IV,iV=RV*CV-ZV*IV,EV=RV*FV-WV*IV,MV=UV*CV-ZV*dV,AV=UV*FV-WV*dV,pV=ZV*FV-WV*CV,HV=NV*aV-eV*nV,oV=NV*GV-gV*nV,DV=NV*cV-JV*nV,wV=eV*GV-gV*aV,qV=eV*cV-JV*aV,Il=gV*cV-JV*GV;let nl=TV*Il-iV*qV+EV*wV+MV*DV-AV*oV+pV*HV;return nl?(nl=1/nl,J[0]=(dV*Il-CV*qV+FV*wV)*nl,J[1]=(ZV*qV-UV*Il-WV*wV)*nl,J[2]=(aV*pV-GV*AV+cV*MV)*nl,J[3]=(gV*AV-eV*pV-JV*MV)*nl,J[4]=(CV*DV-IV*Il-FV*oV)*nl,J[5]=(RV*Il-ZV*DV+WV*oV)*nl,J[6]=(GV*EV-nV*pV-cV*iV)*nl,J[7]=(NV*pV-gV*EV+JV*iV)*nl,J[8]=(IV*qV-dV*DV+FV*HV)*nl,J[9]=(UV*DV-RV*qV-WV*HV)*nl,J[10]=(nV*AV-aV*EV+cV*TV)*nl,J[11]=(eV*EV-NV*AV-JV*TV)*nl,J[12]=(dV*oV-IV*wV-CV*HV)*nl,J[13]=(RV*wV-UV*oV+ZV*HV)*nl,J[14]=(aV*iV-nV*MV-GV*TV)*nl,J[15]=(NV*MV-eV*iV+gV*TV)*nl,J):null}),invert_1$2}var equals_1$5,hasRequiredEquals$5;function requireEquals$5(){return hasRequiredEquals$5||(hasRequiredEquals$5=1,equals_1$5=(J,VV)=>J[0]===VV[0]&&J[1]===VV[1]&&J[2]===VV[2]&&J[3]===VV[3]&&J[4]===VV[4]&&J[5]===VV[5]&&J[6]===VV[6]&&J[7]===VV[7]&&J[8]===VV[8]&&J[9]===VV[9]&&J[10]===VV[10]&&J[11]===VV[11]&&J[12]===VV[12]&&J[13]===VV[13]&&J[14]===VV[14]&&J[15]===VV[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:lV}=requireConstants$1(),{sin:J,cos:VV}=requireTrigonometry(),RV=requireIdentity();return fromRotation_1=(ZV,WV,IV)=>{let[dV,CV,FV]=IV;const NV=dV*dV+CV*CV+FV*FV;if(Math.abs(NV)<lV)return RV(ZV);const eV=1/Math.sqrt(NV);dV*=eV,CV*=eV,FV*=eV;const gV=J(WV),JV=VV(WV),nV=1-JV;return ZV[0]=dV*dV*nV+JV,ZV[1]=CV*dV*nV+FV*gV,ZV[2]=FV*dV*nV-CV*gV,ZV[3]=0,ZV[4]=dV*CV*nV-FV*gV,ZV[5]=CV*CV*nV+JV,ZV[6]=FV*CV*nV+dV*gV,ZV[7]=0,ZV[8]=dV*FV*nV+CV*gV,ZV[9]=CV*FV*nV-dV*gV,ZV[10]=FV*FV*nV+JV,ZV[11]=0,ZV[12]=0,ZV[13]=0,ZV[14]=0,ZV[15]=1,ZV},fromRotation_1}var fromScaling_1,hasRequiredFromScaling;function requireFromScaling(){return hasRequiredFromScaling||(hasRequiredFromScaling=1,fromScaling_1=(J,VV)=>(J[0]=VV[0],J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=VV[1],J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=VV[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:lV,cos:J}=requireTrigonometry();return fromTaitBryanRotation_1=(RV,UV,ZV,WV)=>{const IV=lV(UV),dV=J(UV),CV=lV(ZV),FV=J(ZV),NV=lV(WV),eV=J(WV);return RV[0]=FV*dV,RV[1]=FV*IV,RV[2]=-CV,RV[3]=0,RV[4]=NV*CV*dV-eV*IV,RV[5]=eV*dV+NV*CV*IV,RV[6]=NV*FV,RV[7]=0,RV[8]=NV*IV+eV*CV*dV,RV[9]=eV*CV*IV-NV*dV,RV[10]=eV*FV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromTaitBryanRotation_1}var fromTranslation_1,hasRequiredFromTranslation;function requireFromTranslation(){return hasRequiredFromTranslation||(hasRequiredFromTranslation=1,fromTranslation_1=(J,VV)=>(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]=VV[0],J[13]=VV[1],J[14]=VV[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 lV=requireCreate$a();return fromValues_1$2=(VV,RV,UV,ZV,WV,IV,dV,CV,FV,NV,eV,gV,JV,nV,aV,GV)=>{const cV=lV();return cV[0]=VV,cV[1]=RV,cV[2]=UV,cV[3]=ZV,cV[4]=WV,cV[5]=IV,cV[6]=dV,cV[7]=CV,cV[8]=FV,cV[9]=NV,cV[10]=eV,cV[11]=gV,cV[12]=JV,cV[13]=nV,cV[14]=aV,cV[15]=GV,cV},fromValues_1$2}var fromVectorRotation_1,hasRequiredFromVectorRotation;function requireFromVectorRotation(){if(hasRequiredFromVectorRotation)return fromVectorRotation_1;hasRequiredFromVectorRotation=1;const lV=requireVec3(),J=requireFromRotation();return fromVectorRotation_1=(RV,UV,ZV)=>{const WV=lV.normalize(lV.create(),UV),IV=lV.normalize(lV.create(),ZV),dV=lV.cross(lV.create(),IV,WV),CV=lV.dot(IV,WV);if(CV===-1)return J(RV,Math.PI,lV.orthogonal(dV,WV));const FV=1/(1+CV);return RV[0]=dV[0]*dV[0]*FV+CV,RV[1]=dV[1]*dV[0]*FV-dV[2],RV[2]=dV[2]*dV[0]*FV+dV[1],RV[3]=0,RV[4]=dV[0]*dV[1]*FV+dV[2],RV[5]=dV[1]*dV[1]*FV+CV,RV[6]=dV[2]*dV[1]*FV-dV[0],RV[7]=0,RV[8]=dV[0]*dV[2]*FV-dV[1],RV[9]=dV[1]*dV[2]*FV+dV[0],RV[10]=dV[2]*dV[2]*FV+CV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromVectorRotation_1}var fromXRotation_1,hasRequiredFromXRotation;function requireFromXRotation(){if(hasRequiredFromXRotation)return fromXRotation_1;hasRequiredFromXRotation=1;const{sin:lV,cos:J}=requireTrigonometry();return fromXRotation_1=(RV,UV)=>{const ZV=lV(UV),WV=J(UV);return RV[0]=1,RV[1]=0,RV[2]=0,RV[3]=0,RV[4]=0,RV[5]=WV,RV[6]=ZV,RV[7]=0,RV[8]=0,RV[9]=-ZV,RV[10]=WV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromXRotation_1}var fromYRotation_1,hasRequiredFromYRotation;function requireFromYRotation(){if(hasRequiredFromYRotation)return fromYRotation_1;hasRequiredFromYRotation=1;const{sin:lV,cos:J}=requireTrigonometry();return fromYRotation_1=(RV,UV)=>{const ZV=lV(UV),WV=J(UV);return RV[0]=WV,RV[1]=0,RV[2]=-ZV,RV[3]=0,RV[4]=0,RV[5]=1,RV[6]=0,RV[7]=0,RV[8]=ZV,RV[9]=0,RV[10]=WV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromYRotation_1}var fromZRotation_1,hasRequiredFromZRotation;function requireFromZRotation(){if(hasRequiredFromZRotation)return fromZRotation_1;hasRequiredFromZRotation=1;const{sin:lV,cos:J}=requireTrigonometry();return fromZRotation_1=(RV,UV)=>{const ZV=lV(UV),WV=J(UV);return RV[0]=WV,RV[1]=ZV,RV[2]=0,RV[3]=0,RV[4]=-ZV,RV[5]=WV,RV[6]=0,RV[7]=0,RV[8]=0,RV[9]=0,RV[10]=1,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},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 lV=VV=>J(VV[1])&&J(VV[2])&&J(VV[3])&&J(VV[4])&&J(VV[6])&&J(VV[7])&&J(VV[8])&&J(VV[9])&&J(VV[11])&&VV[15]===1,J=VV=>Math.abs(VV)<Number.EPSILON;return isOnlyTransformScale_1=lV,isOnlyTransformScale_1}var isMirroring_1,hasRequiredIsMirroring;function requireIsMirroring(){return hasRequiredIsMirroring||(hasRequiredIsMirroring=1,isMirroring_1=J=>{const VV=J[4]*J[9]-J[8]*J[5],RV=J[8]*J[1]-J[0]*J[9],UV=J[0]*J[5]-J[4]*J[1];return VV*J[2]+RV*J[6]+UV*J[10]<0}),isMirroring_1}var mirrorByPlane_1,hasRequiredMirrorByPlane;function requireMirrorByPlane(){return hasRequiredMirrorByPlane||(hasRequiredMirrorByPlane=1,mirrorByPlane_1=(J,VV)=>{const[RV,UV,ZV,WV]=VV;return J[0]=1-2*RV*RV,J[1]=-2*UV*RV,J[2]=-2*ZV*RV,J[3]=0,J[4]=-2*RV*UV,J[5]=1-2*UV*UV,J[6]=-2*ZV*UV,J[7]=0,J[8]=-2*RV*ZV,J[9]=-2*UV*ZV,J[10]=1-2*ZV*ZV,J[11]=0,J[12]=2*RV*WV,J[13]=2*UV*WV,J[14]=2*ZV*WV,J[15]=1,J}),mirrorByPlane_1}var multiply_1,hasRequiredMultiply;function requireMultiply(){return hasRequiredMultiply||(hasRequiredMultiply=1,multiply_1=(J,VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2],IV=VV[3],dV=VV[4],CV=VV[5],FV=VV[6],NV=VV[7],eV=VV[8],gV=VV[9],JV=VV[10],nV=VV[11],aV=VV[12],GV=VV[13],cV=VV[14],TV=VV[15];let iV=RV[0],EV=RV[1],MV=RV[2],AV=RV[3];return J[0]=iV*UV+EV*dV+MV*eV+AV*aV,J[1]=iV*ZV+EV*CV+MV*gV+AV*GV,J[2]=iV*WV+EV*FV+MV*JV+AV*cV,J[3]=iV*IV+EV*NV+MV*nV+AV*TV,iV=RV[4],EV=RV[5],MV=RV[6],AV=RV[7],J[4]=iV*UV+EV*dV+MV*eV+AV*aV,J[5]=iV*ZV+EV*CV+MV*gV+AV*GV,J[6]=iV*WV+EV*FV+MV*JV+AV*cV,J[7]=iV*IV+EV*NV+MV*nV+AV*TV,iV=RV[8],EV=RV[9],MV=RV[10],AV=RV[11],J[8]=iV*UV+EV*dV+MV*eV+AV*aV,J[9]=iV*ZV+EV*CV+MV*gV+AV*GV,J[10]=iV*WV+EV*FV+MV*JV+AV*cV,J[11]=iV*IV+EV*NV+MV*nV+AV*TV,iV=RV[12],EV=RV[13],MV=RV[14],AV=RV[15],J[12]=iV*UV+EV*dV+MV*eV+AV*aV,J[13]=iV*ZV+EV*CV+MV*gV+AV*GV,J[14]=iV*WV+EV*FV+MV*JV+AV*cV,J[15]=iV*IV+EV*NV+MV*nV+AV*TV,J}),multiply_1}var rotate_1$1,hasRequiredRotate$1;function requireRotate$1(){if(hasRequiredRotate$1)return rotate_1$1;hasRequiredRotate$1=1;const{EPS:lV}=requireConstants$1(),{sin:J,cos:VV}=requireTrigonometry(),RV=requireCopy$3();return rotate_1$1=(ZV,WV,IV,dV)=>{let[CV,FV,NV]=dV;const eV=CV*CV+FV*FV+NV*NV;if(Math.abs(eV)<lV)return RV(ZV,WV);const gV=1/Math.sqrt(eV);CV*=gV,FV*=gV,NV*=gV;const JV=J(IV),nV=VV(IV),aV=1-nV,GV=WV[0],cV=WV[1],TV=WV[2],iV=WV[3],EV=WV[4],MV=WV[5],AV=WV[6],pV=WV[7],HV=WV[8],oV=WV[9],DV=WV[10],wV=WV[11],qV=CV*CV*aV+nV,Il=FV*CV*aV+NV*JV,nl=NV*CV*aV-FV*JV,dl=CV*FV*aV-NV*JV,LV=FV*FV*aV+nV,OV=NV*FV*aV+CV*JV,$V=CV*NV*aV+FV*JV,Cl=FV*NV*aV-CV*JV,Zl=NV*NV*aV+nV;return ZV[0]=GV*qV+EV*Il+HV*nl,ZV[1]=cV*qV+MV*Il+oV*nl,ZV[2]=TV*qV+AV*Il+DV*nl,ZV[3]=iV*qV+pV*Il+wV*nl,ZV[4]=GV*dl+EV*LV+HV*OV,ZV[5]=cV*dl+MV*LV+oV*OV,ZV[6]=TV*dl+AV*LV+DV*OV,ZV[7]=iV*dl+pV*LV+wV*OV,ZV[8]=GV*$V+EV*Cl+HV*Zl,ZV[9]=cV*$V+MV*Cl+oV*Zl,ZV[10]=TV*$V+AV*Cl+DV*Zl,ZV[11]=iV*$V+pV*Cl+wV*Zl,WV!==ZV&&(ZV[12]=WV[12],ZV[13]=WV[13],ZV[14]=WV[14],ZV[15]=WV[15]),ZV},rotate_1$1}var rotateX_1,hasRequiredRotateX;function requireRotateX(){if(hasRequiredRotateX)return rotateX_1;hasRequiredRotateX=1;const{sin:lV,cos:J}=requireTrigonometry();return rotateX_1=(RV,UV,ZV)=>{const WV=lV(ZV),IV=J(ZV),dV=UV[4],CV=UV[5],FV=UV[6],NV=UV[7],eV=UV[8],gV=UV[9],JV=UV[10],nV=UV[11];return UV!==RV&&(RV[0]=UV[0],RV[1]=UV[1],RV[2]=UV[2],RV[3]=UV[3],RV[12]=UV[12],RV[13]=UV[13],RV[14]=UV[14],RV[15]=UV[15]),RV[4]=dV*IV+eV*WV,RV[5]=CV*IV+gV*WV,RV[6]=FV*IV+JV*WV,RV[7]=NV*IV+nV*WV,RV[8]=eV*IV-dV*WV,RV[9]=gV*IV-CV*WV,RV[10]=JV*IV-FV*WV,RV[11]=nV*IV-NV*WV,RV},rotateX_1}var rotateY_1,hasRequiredRotateY;function requireRotateY(){if(hasRequiredRotateY)return rotateY_1;hasRequiredRotateY=1;const{sin:lV,cos:J}=requireTrigonometry();return rotateY_1=(RV,UV,ZV)=>{const WV=lV(ZV),IV=J(ZV),dV=UV[0],CV=UV[1],FV=UV[2],NV=UV[3],eV=UV[8],gV=UV[9],JV=UV[10],nV=UV[11];return UV!==RV&&(RV[4]=UV[4],RV[5]=UV[5],RV[6]=UV[6],RV[7]=UV[7],RV[12]=UV[12],RV[13]=UV[13],RV[14]=UV[14],RV[15]=UV[15]),RV[0]=dV*IV-eV*WV,RV[1]=CV*IV-gV*WV,RV[2]=FV*IV-JV*WV,RV[3]=NV*IV-nV*WV,RV[8]=dV*WV+eV*IV,RV[9]=CV*WV+gV*IV,RV[10]=FV*WV+JV*IV,RV[11]=NV*WV+nV*IV,RV},rotateY_1}var rotateZ_1,hasRequiredRotateZ;function requireRotateZ(){if(hasRequiredRotateZ)return rotateZ_1;hasRequiredRotateZ=1;const{sin:lV,cos:J}=requireTrigonometry();return rotateZ_1=(RV,UV,ZV)=>{const WV=lV(ZV),IV=J(ZV),dV=UV[0],CV=UV[1],FV=UV[2],NV=UV[3],eV=UV[4],gV=UV[5],JV=UV[6],nV=UV[7];return UV!==RV&&(RV[8]=UV[8],RV[9]=UV[9],RV[10]=UV[10],RV[11]=UV[11],RV[12]=UV[12],RV[13]=UV[13],RV[14]=UV[14],RV[15]=UV[15]),RV[0]=dV*IV+eV*WV,RV[1]=CV*IV+gV*WV,RV[2]=FV*IV+JV*WV,RV[3]=NV*IV+nV*WV,RV[4]=eV*IV-dV*WV,RV[5]=gV*IV-CV*WV,RV[6]=JV*IV-FV*WV,RV[7]=nV*IV-NV*WV,RV},rotateZ_1}var scale_1$1,hasRequiredScale$1;function requireScale$1(){return hasRequiredScale$1||(hasRequiredScale$1=1,scale_1$1=(J,VV,RV)=>{const UV=RV[0],ZV=RV[1],WV=RV[2];return J[0]=VV[0]*UV,J[1]=VV[1]*UV,J[2]=VV[2]*UV,J[3]=VV[3]*UV,J[4]=VV[4]*ZV,J[5]=VV[5]*ZV,J[6]=VV[6]*ZV,J[7]=VV[7]*ZV,J[8]=VV[8]*WV,J[9]=VV[9]*WV,J[10]=VV[10]*WV,J[11]=VV[11]*WV,J[12]=VV[12],J[13]=VV[13],J[14]=VV[14],J[15]=VV[15],J}),scale_1$1}var subtract_1$1,hasRequiredSubtract$1;function requireSubtract$1(){return hasRequiredSubtract$1||(hasRequiredSubtract$1=1,subtract_1$1=(J,VV,RV)=>(J[0]=VV[0]-RV[0],J[1]=VV[1]-RV[1],J[2]=VV[2]-RV[2],J[3]=VV[3]-RV[3],J[4]=VV[4]-RV[4],J[5]=VV[5]-RV[5],J[6]=VV[6]-RV[6],J[7]=VV[7]-RV[7],J[8]=VV[8]-RV[8],J[9]=VV[9]-RV[9],J[10]=VV[10]-RV[10],J[11]=VV[11]-RV[11],J[12]=VV[12]-RV[12],J[13]=VV[13]-RV[13],J[14]=VV[14]-RV[14],J[15]=VV[15]-RV[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(VV=>VV.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,VV,RV)=>{const UV=RV[0],ZV=RV[1],WV=RV[2];let IV,dV,CV,FV,NV,eV,gV,JV,nV,aV,GV,cV;return VV===J?(J[12]=VV[0]*UV+VV[4]*ZV+VV[8]*WV+VV[12],J[13]=VV[1]*UV+VV[5]*ZV+VV[9]*WV+VV[13],J[14]=VV[2]*UV+VV[6]*ZV+VV[10]*WV+VV[14],J[15]=VV[3]*UV+VV[7]*ZV+VV[11]*WV+VV[15]):(IV=VV[0],dV=VV[1],CV=VV[2],FV=VV[3],NV=VV[4],eV=VV[5],gV=VV[6],JV=VV[7],nV=VV[8],aV=VV[9],GV=VV[10],cV=VV[11],J[0]=IV,J[1]=dV,J[2]=CV,J[3]=FV,J[4]=NV,J[5]=eV,J[6]=gV,J[7]=JV,J[8]=nV,J[9]=aV,J[10]=GV,J[11]=cV,J[12]=IV*UV+NV*ZV+nV*WV+VV[12],J[13]=dV*UV+eV*ZV+aV*WV+VV[13],J[14]=CV*UV+gV*ZV+GV*WV+VV[14],J[15]=FV*UV+JV*ZV+cV*WV+VV[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 lV=requireMat4();return create_1$9=VV=>(VV===void 0&&(VV=[]),{sides:VV,transforms:lV.create()}),create_1$9}var fromPoints_1$7,hasRequiredFromPoints$7;function requireFromPoints$7(){if(hasRequiredFromPoints$7)return fromPoints_1$7;hasRequiredFromPoints$7=1;const lV=requireVec2(),J=requireCreate$9();return fromPoints_1$7=RV=>{if(!Array.isArray(RV))throw new Error("the given points must be an array");let UV=RV.length;if(UV<3)throw new Error("the given points must define a closed geometry with three or more points");lV.equals(RV[0],RV[UV-1])&&--UV;const ZV=[];let WV=RV[UV-1];for(let IV=0;IV<UV;IV++){const dV=RV[IV];ZV.push([lV.clone(WV),lV.clone(dV)]),WV=dV}return J(ZV)},fromPoints_1$7}var fromCompactBinary_1$2,hasRequiredFromCompactBinary$2;function requireFromCompactBinary$2(){if(hasRequiredFromCompactBinary$2)return fromCompactBinary_1$2;hasRequiredFromCompactBinary$2=1;const lV=requireMat4(),J=requireVec2(),VV=requireCreate$9();return fromCompactBinary_1$2=UV=>{if(UV[0]!==0)throw new Error("invalid compact binary data");const ZV=VV();ZV.transforms=lV.clone(UV.slice(1,17));for(let WV=21;WV<UV.length;WV+=4){const IV=J.fromValues(UV[WV+0],UV[WV+1]),dV=J.fromValues(UV[WV+2],UV[WV+3]);ZV.sides.push([IV,dV])}return UV[17]>=0&&(ZV.color=[UV[17],UV[18],UV[19],UV[20]]),ZV},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 lV=requireMat4(),J=requireVec2();return applyTransforms_1$2=RV=>(lV.isIdentity(RV.transforms)||(RV.sides=RV.sides.map(UV=>{const ZV=J.transform(J.create(),UV[0],RV.transforms),WV=J.transform(J.create(),UV[1],RV.transforms);return[ZV,WV]}),RV.transforms=lV.create()),RV),applyTransforms_1$2}var toSides_1,hasRequiredToSides;function requireToSides(){if(hasRequiredToSides)return toSides_1;hasRequiredToSides=1;const lV=requireApplyTransforms$2();return toSides_1=VV=>lV(VV).sides,toSides_1}var reverse_1$4,hasRequiredReverse$4;function requireReverse$4(){if(hasRequiredReverse$4)return reverse_1$4;hasRequiredReverse$4=1;const lV=requireCreate$9(),J=requireToSides();return reverse_1$4=RV=>{const ZV=J(RV).map(WV=>[WV[1],WV[0]]);return ZV.reverse(),lV(ZV)},reverse_1$4}var toOutlines_1,hasRequiredToOutlines;function requireToOutlines(){if(hasRequiredToOutlines)return toOutlines_1;hasRequiredToOutlines=1;const lV=requireVec2(),J=requireToSides(),VV=WV=>{const IV=new Map,dV=CV=>{const FV=CV.toString();return IV.has(FV)?IV.get(FV):(IV.set(FV,CV),CV)};return WV.map(CV=>CV.map(dV))},RV=WV=>{const IV=new Map;return VV(WV).forEach(CV=>{IV.has(CV[0])?IV.get(CV[0]).push(CV):IV.set(CV[0],[CV])}),IV},UV=WV=>{const IV=RV(J(WV)),dV=[];for(;;){let CV;for(const[eV,gV]of IV){if(CV=gV.shift(),!CV){IV.delete(eV);continue}break}if(CV===void 0)break;const FV=[],NV=CV[0];for(;;){FV.push(CV[0]);const eV=CV[1];if(eV===NV)break;const gV=IV.get(eV);if(!gV)throw new Error(`geometry is not closed at vertex ${eV}`);const JV=ZV(CV,gV);gV.length===0&&IV.delete(eV),CV=JV}FV.length>0&&FV.push(FV.shift()),dV.push(FV)}return IV.clear(),dV},ZV=(WV,IV)=>{if(IV.length===1)return IV.pop();const dV=lV.create(),CV=lV.angleDegrees(lV.subtract(dV,WV[1],WV[0]));let FV,NV;IV.forEach((gV,JV)=>{let aV=lV.angleDegrees(lV.subtract(dV,gV[1],gV[0]))-CV;aV<-180&&(aV+=360),aV>=180&&(aV-=360),(NV===void 0||aV>FV)&&(NV=JV,FV=aV)});const eV=IV[NV];return IV.splice(NV,1),eV};return toOutlines_1=UV,toOutlines_1}var toPoints_1$3,hasRequiredToPoints$3;function requireToPoints$3(){if(hasRequiredToPoints$3)return toPoints_1$3;hasRequiredToPoints$3=1;const lV=requireToSides();return toPoints_1$3=VV=>{const UV=lV(VV).map(ZV=>ZV[0]);return UV.length>0&&UV.push(UV.shift()),UV},toPoints_1$3}var toString_1$7,hasRequiredToString$7;function requireToString$7(){if(hasRequiredToString$7)return toString_1$7;hasRequiredToString$7=1;const lV=requireVec2(),J=requireToSides();return toString_1$7=RV=>{const UV=J(RV);let ZV="geom2 ("+UV.length+` sides):
7298
+ "${VV.message}"`)})).convertCircuitJsonToPcbSvg(this.getCircuitJson())}async preview(lV){throw new Error("project.preview is not yet implemented")}computeSchematicGlobalTransform(){return identity$4()}_computePcbGlobalTransformBeforeLayout(){return identity$4()}selectAll(lV){var J;return this._guessRootComponent(),((J=this.firstChild)==null?void 0:J.selectAll(lV))??[]}selectOne(lV,J){var VV;return this._guessRootComponent(),((VV=this.firstChild)==null?void 0:VV.selectOne(lV,J))??null}emit(lV,...J){if(this._eventListeners[lV])for(const VV of this._eventListeners[lV])VV(...J)}on(lV,J){this._eventListeners[lV]||(this._eventListeners[lV]=[]),this._eventListeners[lV].push(J)}getClientOrigin(){return typeof window<"u"?window.location.origin:typeof self<"u"?self.origin:""}},Project=RootCircuit,Circuit=RootCircuit,useRenderedCircuit=lV=>{const[J,VV]=React.useState(!0),[RV,UV]=React.useState(null),[ZV,WV]=React.useState(),[IV,dV]=React.useState();return React.useEffect(()=>{VV(!0),UV(null),lV&&setTimeout(()=>{try{const CV=new RootCircuit;CV.add(lV),WV(CV),dV(CV.toJson())}catch(CV){UV(CV)}VV(!1)},1)},[lV]),{isLoading:J,error:RV,circuit:ZV,circuitJson:IV}},createUseComponent=(lV,J)=>(VV,RV)=>{const UV=[];Array.isArray(J)?UV.push(...J.flat()):typeof J=="object"&&UV.push(...Object.values(J).flat(),...Object.keys(J));const ZV=WV=>{if(WV!=null&&WV.name&&WV.name!==VV)throw new Error(`Component name mismatch. Hook name: ${VV}, Component prop name: ${WV.name}`);const IV={...RV,...WV,name:VV},dV=[];for(const CV of UV)if(IV[CV]){const FV=`.${VV} > .${CV}`,NV=IV[CV];dV.push({from:FV,to:NV}),delete IV[CV]}return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(lV,{...IV}),dV.map((CV,FV)=>jsxRuntimeExports.jsx("trace",{...CV},FV))]})};for(const WV of UV)ZV[WV]=`.${VV} > .${WV}`;return ZV},useCapacitor=createUseComponent(lV=>jsxRuntimeExports.jsx("capacitor",{...lV}),capacitorPins),useChip=lV=>createUseComponent(J=>jsxRuntimeExports.jsx("chip",{pinLabels:lV,...J}),lV),useDiode=createUseComponent(lV=>jsxRuntimeExports.jsx("diode",{...lV}),diodePins),useLed=createUseComponent(lV=>jsxRuntimeExports.jsx("led",{...lV}),ledPins),useResistor=createUseComponent(lV=>jsxRuntimeExports.jsx("resistor",{...lV}),resistorPins),applyEditEventsToManualEditsFile=({circuitJson:lV,editEvents:J,manualEditsFile:VV})=>{var UV;const RV={...VV,schematic_placements:[...VV.schematic_placements??[]]};for(const ZV of J)if(ZV.edit_event_type==="edit_schematic_component_location"){const{schematic_component_id:WV,new_center:IV}=ZV,dV=su_default$1(lV).schematic_component.get(WV);if(!dV)continue;const CV=su_default$1(lV).source_component.get(dV.source_component_id);if(!CV)continue;const FV=(UV=RV.schematic_placements)==null?void 0:UV.findIndex(eV=>eV.selector===CV.name),NV={selector:CV.name,center:IV,relative_to:"group_center"};FV>=0?RV.schematic_placements[FV]=NV:RV.schematic_placements.push(NV)}return RV},getSimpleRouteJsonFromCircuitJson=({circuitJson:lV,minTraceWidth:J=.1})=>{const VV=su_default$1(lV),RV=getFullConnectivityMapFromCircuitJson$1(lV),UV=getObstaclesFromSoup([...VV.pcb_component.list(),...VV.pcb_smtpad.list(),...VV.pcb_plated_hole.list()],RV),ZV=UV.flatMap(dV=>[{x:dV.center.x-dV.width/2,y:dV.center.y-dV.height/2},{x:dV.center.x+dV.width/2,y:dV.center.y+dV.height/2}]),WV={minX:Math.min(...ZV.map(dV=>dV.x))-1,maxX:Math.max(...ZV.map(dV=>dV.x))+1,minY:Math.min(...ZV.map(dV=>dV.y))-1,maxY:Math.max(...ZV.map(dV=>dV.y))+1},IV=VV.source_trace.list().map(dV=>{const CV=dV.connected_source_port_ids.map(FV=>{const NV=VV.source_port.get(FV),eV=VV.pcb_port.getWhere({source_port_id:FV});return{...NV,...eV}});return CV.length<2?null:{name:RV.getNetConnectedToId(dV.source_trace_id)??dV.source_trace_id??"",source_trace_id:dV.source_trace_id,pointsToConnect:CV.map(FV=>{var NV;return{x:FV.x,y:FV.y,layer:((NV=FV.layers)==null?void 0:NV[0])??"top"}})}}).filter(dV=>dV!==null);return{bounds:WV,obstacles:UV,connections:IV,layerCount:2,minTraceWidth:J}};extendCatalogue(components_exports),extendCatalogue({Bug:Chip});const dist$8=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,getSimpleRouteJsonFromCircuitJson,orderedRenderPhases,useCapacitor,useChip,useDiode,useLed,useRenderedCircuit,useResistor},Symbol.toStringTag,{value:"Module"})),require$$2=getAugmentedNamespace(dist$8);var flatten_1$1,hasRequiredFlatten$1;function requireFlatten$1(){if(hasRequiredFlatten$1)return flatten_1$1;hasRequiredFlatten$1=1;const lV=J=>J.reduce((VV,RV)=>Array.isArray(RV)?VV.concat(lV(RV)):VV.concat(RV),[]);return flatten_1$1=lV,flatten_1$1}var padArrayToLength_1,hasRequiredPadArrayToLength;function requirePadArrayToLength(){return hasRequiredPadArrayToLength||(hasRequiredPadArrayToLength=1,padArrayToLength_1=(J,VV,RV)=>{for(J=J.slice();J.length<RV;)J.push(VV);return J}),padArrayToLength_1}var min_1$1,hasRequiredMin$1;function requireMin$1(){return hasRequiredMin$1||(hasRequiredMin$1=1,min_1$1=(J,VV,RV)=>(J[0]=Math.min(VV[0],RV[0]),J[1]=Math.min(VV[1],RV[1]),J[2]=Math.min(VV[2],RV[2]),J)),min_1$1}var max_1$1,hasRequiredMax$1;function requireMax$1(){return hasRequiredMax$1||(hasRequiredMax$1=1,max_1$1=(J,VV,RV)=>(J[0]=Math.max(VV[0],RV[0]),J[1]=Math.max(VV[1],RV[1]),J[2]=Math.max(VV[2],RV[2]),J)),max_1$1}var abs_1$1,hasRequiredAbs$1;function requireAbs$1(){return hasRequiredAbs$1||(hasRequiredAbs$1=1,abs_1$1=(J,VV)=>(J[0]=Math.abs(VV[0]),J[1]=Math.abs(VV[1]),J)),abs_1$1}var add_1$2,hasRequiredAdd$2;function requireAdd$2(){return hasRequiredAdd$2||(hasRequiredAdd$2=1,add_1$2=(J,VV,RV)=>(J[0]=VV[0]+RV[0],J[1]=VV[1]+RV[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 lV=requireAngleRadians();return angleDegrees_1=VV=>lV(VV)*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 lV=requireCreate$c();return clone_1$a=VV=>{const RV=lV();return RV[0]=VV[0],RV[1]=VV[1],RV},clone_1$a}var copy_1$5,hasRequiredCopy$5;function requireCopy$5(){return hasRequiredCopy$5||(hasRequiredCopy$5=1,copy_1$5=(J,VV)=>(J[0]=VV[0],J[1]=VV[1],J)),copy_1$5}var cross_1$1,hasRequiredCross$1;function requireCross$1(){return hasRequiredCross$1||(hasRequiredCross$1=1,cross_1$1=(J,VV,RV)=>(J[0]=0,J[1]=0,J[2]=VV[0]*RV[1]-VV[1]*RV[0],J)),cross_1$1}var distance_1$1,hasRequiredDistance$1;function requireDistance$1(){return hasRequiredDistance$1||(hasRequiredDistance$1=1,distance_1$1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1];return Math.sqrt(RV*RV+UV*UV)}),distance_1$1}var divide_1$1,hasRequiredDivide$1;function requireDivide$1(){return hasRequiredDivide$1||(hasRequiredDivide$1=1,divide_1$1=(J,VV,RV)=>(J[0]=VV[0]/RV[0],J[1]=VV[1]/RV[1],J)),divide_1$1}var dot_1$2,hasRequiredDot$2;function requireDot$2(){return hasRequiredDot$2||(hasRequiredDot$2=1,dot_1$2=(J,VV)=>J[0]*VV[0]+J[1]*VV[1]),dot_1$2}var equals_1$7,hasRequiredEquals$7;function requireEquals$7(){return hasRequiredEquals$7||(hasRequiredEquals$7=1,equals_1$7=(J,VV)=>J[0]===VV[0]&&J[1]===VV[1]),equals_1$7}var constants$1,hasRequiredConstants$1;function requireConstants$1(){if(hasRequiredConstants$1)return constants$1;hasRequiredConstants$1=1;const lV=1e5,J=1e-5,VV=1e-13,RV=Math.PI*2;return constants$1={EPS:J,NEPS:VV,TAU:RV,spatialResolution:lV},constants$1}var trigonometry,hasRequiredTrigonometry;function requireTrigonometry(){if(hasRequiredTrigonometry)return trigonometry;hasRequiredTrigonometry=1;const{NEPS:lV}=requireConstants$1(),J=UV=>Math.abs(UV)<lV?0:UV;return trigonometry={sin:UV=>J(Math.sin(UV)),cos:UV=>J(Math.cos(UV))},trigonometry}var fromAngleRadians_1,hasRequiredFromAngleRadians;function requireFromAngleRadians(){if(hasRequiredFromAngleRadians)return fromAngleRadians_1;hasRequiredFromAngleRadians=1;const{sin:lV,cos:J}=requireTrigonometry();return fromAngleRadians_1=(RV,UV)=>(RV[0]=J(UV),RV[1]=lV(UV),RV),fromAngleRadians_1}var fromAngleDegrees_1,hasRequiredFromAngleDegrees;function requireFromAngleDegrees(){if(hasRequiredFromAngleDegrees)return fromAngleDegrees_1;hasRequiredFromAngleDegrees=1;const lV=requireFromAngleRadians();return fromAngleDegrees_1=(VV,RV)=>lV(VV,RV*.017453292519943295),fromAngleDegrees_1}var fromScalar_1$2,hasRequiredFromScalar$2;function requireFromScalar$2(){return hasRequiredFromScalar$2||(hasRequiredFromScalar$2=1,fromScalar_1$2=(J,VV)=>(J[0]=VV,J[1]=VV,J)),fromScalar_1$2}var fromValues_1$4,hasRequiredFromValues$4;function requireFromValues$4(){if(hasRequiredFromValues$4)return fromValues_1$4;hasRequiredFromValues$4=1;const lV=requireCreate$c();return fromValues_1$4=(VV,RV)=>{const UV=lV();return UV[0]=VV,UV[1]=RV,UV},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,VV,RV,UV)=>{const ZV=VV[0],WV=VV[1];return J[0]=ZV+UV*(RV[0]-ZV),J[1]=WV+UV*(RV[1]-WV),J}),lerp_1$1}var max_1,hasRequiredMax;function requireMax(){return hasRequiredMax||(hasRequiredMax=1,max_1=(J,VV,RV)=>(J[0]=Math.max(VV[0],RV[0]),J[1]=Math.max(VV[1],RV[1]),J)),max_1}var min_1,hasRequiredMin;function requireMin(){return hasRequiredMin||(hasRequiredMin=1,min_1=(J,VV,RV)=>(J[0]=Math.min(VV[0],RV[0]),J[1]=Math.min(VV[1],RV[1]),J)),min_1}var multiply_1$2,hasRequiredMultiply$2;function requireMultiply$2(){return hasRequiredMultiply$2||(hasRequiredMultiply$2=1,multiply_1$2=(J,VV,RV)=>(J[0]=VV[0]*RV[0],J[1]=VV[1]*RV[1],J)),multiply_1$2}var negate_1$1,hasRequiredNegate$1;function requireNegate$1(){return hasRequiredNegate$1||(hasRequiredNegate$1=1,negate_1$1=(J,VV)=>(J[0]=-VV[0],J[1]=-VV[1],J)),negate_1$1}var rotate_1$2,hasRequiredRotate$2;function requireRotate$2(){return hasRequiredRotate$2||(hasRequiredRotate$2=1,rotate_1$2=(J,VV,RV,UV)=>{const ZV=VV[0]-RV[0],WV=VV[1]-RV[1],IV=Math.cos(UV),dV=Math.sin(UV);return J[0]=ZV*IV-WV*dV+RV[0],J[1]=ZV*dV+WV*IV+RV[1],J}),rotate_1$2}var normal_1,hasRequiredNormal;function requireNormal(){if(hasRequiredNormal)return normal_1;hasRequiredNormal=1;const{TAU:lV}=requireConstants$1(),J=requireCreate$c(),VV=requireRotate$2();return normal_1=(UV,ZV)=>VV(UV,ZV,J(),lV/4),normal_1}var normalize_1$1,hasRequiredNormalize$1;function requireNormalize$1(){return hasRequiredNormalize$1||(hasRequiredNormalize$1=1,normalize_1$1=(J,VV)=>{const RV=VV[0],UV=VV[1];let ZV=RV*RV+UV*UV;return ZV>0&&(ZV=1/Math.sqrt(ZV)),J[0]=RV*ZV,J[1]=UV*ZV,J}),normalize_1$1}var scale_1$3,hasRequiredScale$3;function requireScale$3(){return hasRequiredScale$3||(hasRequiredScale$3=1,scale_1$3=(J,VV,RV)=>(J[0]=VV[0]*RV,J[1]=VV[1]*RV,J)),scale_1$3}var snap_1$2,hasRequiredSnap$2;function requireSnap$2(){return hasRequiredSnap$2||(hasRequiredSnap$2=1,snap_1$2=(J,VV,RV)=>(J[0]=Math.round(VV[0]/RV)*RV+0,J[1]=Math.round(VV[1]/RV)*RV+0,J)),snap_1$2}var squaredDistance_1$1,hasRequiredSquaredDistance$1;function requireSquaredDistance$1(){return hasRequiredSquaredDistance$1||(hasRequiredSquaredDistance$1=1,squaredDistance_1$1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1];return RV*RV+UV*UV}),squaredDistance_1$1}var squaredLength_1$1,hasRequiredSquaredLength$1;function requireSquaredLength$1(){return hasRequiredSquaredLength$1||(hasRequiredSquaredLength$1=1,squaredLength_1$1=J=>{const VV=J[0],RV=J[1];return VV*VV+RV*RV}),squaredLength_1$1}var subtract_1$3,hasRequiredSubtract$3;function requireSubtract$3(){return hasRequiredSubtract$3||(hasRequiredSubtract$3=1,subtract_1$3=(J,VV,RV)=>(J[0]=VV[0]-RV[0],J[1]=VV[1]-RV[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,VV,RV)=>{const UV=VV[0],ZV=VV[1];return J[0]=RV[0]*UV+RV[4]*ZV+RV[12],J[1]=RV[1]*UV+RV[5]*ZV+RV[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,VV)=>(J[0]=Math.abs(VV[0]),J[1]=Math.abs(VV[1]),J[2]=Math.abs(VV[2]),J)),abs_1}var add_1$1,hasRequiredAdd$1;function requireAdd$1(){return hasRequiredAdd$1||(hasRequiredAdd$1=1,add_1$1=(J,VV,RV)=>(J[0]=VV[0]+RV[0],J[1]=VV[1]+RV[1],J[2]=VV[2]+RV[2],J)),add_1$1}var dot_1$1,hasRequiredDot$1;function requireDot$1(){return hasRequiredDot$1||(hasRequiredDot$1=1,dot_1$1=(J,VV)=>J[0]*VV[0]+J[1]*VV[1]+J[2]*VV[2]),dot_1$1}var angle_1,hasRequiredAngle;function requireAngle(){if(hasRequiredAngle)return angle_1;hasRequiredAngle=1;const lV=requireDot$1();return angle_1=(VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2],IV=RV[0],dV=RV[1],CV=RV[2],FV=Math.sqrt(UV*UV+ZV*ZV+WV*WV),NV=Math.sqrt(IV*IV+dV*dV+CV*CV),eV=FV*NV,gV=eV&&lV(VV,RV)/eV;return Math.acos(Math.min(Math.max(gV,-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 lV=requireCreate$b();return clone_1$9=VV=>{const RV=lV();return RV[0]=VV[0],RV[1]=VV[1],RV[2]=VV[2],RV},clone_1$9}var copy_1$4,hasRequiredCopy$4;function requireCopy$4(){return hasRequiredCopy$4||(hasRequiredCopy$4=1,copy_1$4=(J,VV)=>(J[0]=VV[0],J[1]=VV[1],J[2]=VV[2],J)),copy_1$4}var cross_1,hasRequiredCross;function requireCross(){return hasRequiredCross||(hasRequiredCross=1,cross_1=(J,VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2],IV=RV[0],dV=RV[1],CV=RV[2];return J[0]=ZV*CV-WV*dV,J[1]=WV*IV-UV*CV,J[2]=UV*dV-ZV*IV,J}),cross_1}var distance_1,hasRequiredDistance;function requireDistance(){return hasRequiredDistance||(hasRequiredDistance=1,distance_1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1],ZV=VV[2]-J[2];return Math.sqrt(RV*RV+UV*UV+ZV*ZV)}),distance_1}var divide_1,hasRequiredDivide;function requireDivide(){return hasRequiredDivide||(hasRequiredDivide=1,divide_1=(J,VV,RV)=>(J[0]=VV[0]/RV[0],J[1]=VV[1]/RV[1],J[2]=VV[2]/RV[2],J)),divide_1}var equals_1$6,hasRequiredEquals$6;function requireEquals$6(){return hasRequiredEquals$6||(hasRequiredEquals$6=1,equals_1$6=(J,VV)=>J[0]===VV[0]&&J[1]===VV[1]&&J[2]===VV[2]),equals_1$6}var fromScalar_1$1,hasRequiredFromScalar$1;function requireFromScalar$1(){return hasRequiredFromScalar$1||(hasRequiredFromScalar$1=1,fromScalar_1$1=(J,VV)=>(J[0]=VV,J[1]=VV,J[2]=VV,J)),fromScalar_1$1}var fromValues_1$3,hasRequiredFromValues$3;function requireFromValues$3(){if(hasRequiredFromValues$3)return fromValues_1$3;hasRequiredFromValues$3=1;const lV=requireCreate$b();return fromValues_1$3=(VV,RV,UV)=>{const ZV=lV();return ZV[0]=VV,ZV[1]=RV,ZV[2]=UV,ZV},fromValues_1$3}var fromVec2,hasRequiredFromVec2;function requireFromVec2(){return hasRequiredFromVec2||(hasRequiredFromVec2=1,fromVec2=(J,VV,RV=0)=>(J[0]=VV[0],J[1]=VV[1],J[2]=RV,J)),fromVec2}var length_1$1,hasRequiredLength$1;function requireLength$1(){return hasRequiredLength$1||(hasRequiredLength$1=1,length_1$1=J=>{const VV=J[0],RV=J[1],UV=J[2];return Math.sqrt(VV*VV+RV*RV+UV*UV)}),length_1$1}var lerp_1,hasRequiredLerp;function requireLerp(){return hasRequiredLerp||(hasRequiredLerp=1,lerp_1=(J,VV,RV,UV)=>(J[0]=VV[0]+UV*(RV[0]-VV[0]),J[1]=VV[1]+UV*(RV[1]-VV[1]),J[2]=VV[2]+UV*(RV[2]-VV[2]),J)),lerp_1}var multiply_1$1,hasRequiredMultiply$1;function requireMultiply$1(){return hasRequiredMultiply$1||(hasRequiredMultiply$1=1,multiply_1$1=(J,VV,RV)=>(J[0]=VV[0]*RV[0],J[1]=VV[1]*RV[1],J[2]=VV[2]*RV[2],J)),multiply_1$1}var negate_1,hasRequiredNegate;function requireNegate(){return hasRequiredNegate||(hasRequiredNegate=1,negate_1=(J,VV)=>(J[0]=-VV[0],J[1]=-VV[1],J[2]=-VV[2],J)),negate_1}var normalize_1,hasRequiredNormalize;function requireNormalize(){return hasRequiredNormalize||(hasRequiredNormalize=1,normalize_1=(J,VV)=>{const RV=VV[0],UV=VV[1],ZV=VV[2];let WV=RV*RV+UV*UV+ZV*ZV;return WV>0&&(WV=1/Math.sqrt(WV)),J[0]=RV*WV,J[1]=UV*WV,J[2]=ZV*WV,J}),normalize_1}var orthogonal_1,hasRequiredOrthogonal;function requireOrthogonal(){if(hasRequiredOrthogonal)return orthogonal_1;hasRequiredOrthogonal=1;const lV=requireAbs(),J=requireCreate$b(),VV=requireCross();return orthogonal_1=(UV,ZV)=>{const WV=lV(J(),ZV),IV=0+(WV[0]<WV[1]&&WV[0]<WV[2]),dV=0+(WV[1]<=WV[0]&&WV[1]<WV[2]),CV=0+(WV[2]<=WV[0]&&WV[2]<=WV[1]);return VV(UV,ZV,[IV,dV,CV])},orthogonal_1}var rotateX_1$1,hasRequiredRotateX$1;function requireRotateX$1(){return hasRequiredRotateX$1||(hasRequiredRotateX$1=1,rotateX_1$1=(J,VV,RV,UV)=>{const ZV=[],WV=[];return ZV[0]=VV[0]-RV[0],ZV[1]=VV[1]-RV[1],ZV[2]=VV[2]-RV[2],WV[0]=ZV[0],WV[1]=ZV[1]*Math.cos(UV)-ZV[2]*Math.sin(UV),WV[2]=ZV[1]*Math.sin(UV)+ZV[2]*Math.cos(UV),J[0]=WV[0]+RV[0],J[1]=WV[1]+RV[1],J[2]=WV[2]+RV[2],J}),rotateX_1$1}var rotateY_1$1,hasRequiredRotateY$1;function requireRotateY$1(){return hasRequiredRotateY$1||(hasRequiredRotateY$1=1,rotateY_1$1=(J,VV,RV,UV)=>{const ZV=[],WV=[];return ZV[0]=VV[0]-RV[0],ZV[1]=VV[1]-RV[1],ZV[2]=VV[2]-RV[2],WV[0]=ZV[2]*Math.sin(UV)+ZV[0]*Math.cos(UV),WV[1]=ZV[1],WV[2]=ZV[2]*Math.cos(UV)-ZV[0]*Math.sin(UV),J[0]=WV[0]+RV[0],J[1]=WV[1]+RV[1],J[2]=WV[2]+RV[2],J}),rotateY_1$1}var rotateZ_1$1,hasRequiredRotateZ$1;function requireRotateZ$1(){return hasRequiredRotateZ$1||(hasRequiredRotateZ$1=1,rotateZ_1$1=(J,VV,RV,UV)=>{const ZV=[],WV=[];return ZV[0]=VV[0]-RV[0],ZV[1]=VV[1]-RV[1],WV[0]=ZV[0]*Math.cos(UV)-ZV[1]*Math.sin(UV),WV[1]=ZV[0]*Math.sin(UV)+ZV[1]*Math.cos(UV),J[0]=WV[0]+RV[0],J[1]=WV[1]+RV[1],J[2]=VV[2],J}),rotateZ_1$1}var scale_1$2,hasRequiredScale$2;function requireScale$2(){return hasRequiredScale$2||(hasRequiredScale$2=1,scale_1$2=(J,VV,RV)=>(J[0]=VV[0]*RV,J[1]=VV[1]*RV,J[2]=VV[2]*RV,J)),scale_1$2}var snap_1$1,hasRequiredSnap$1;function requireSnap$1(){return hasRequiredSnap$1||(hasRequiredSnap$1=1,snap_1$1=(J,VV,RV)=>(J[0]=Math.round(VV[0]/RV)*RV+0,J[1]=Math.round(VV[1]/RV)*RV+0,J[2]=Math.round(VV[2]/RV)*RV+0,J)),snap_1$1}var squaredDistance_1,hasRequiredSquaredDistance;function requireSquaredDistance(){return hasRequiredSquaredDistance||(hasRequiredSquaredDistance=1,squaredDistance_1=(J,VV)=>{const RV=VV[0]-J[0],UV=VV[1]-J[1],ZV=VV[2]-J[2];return RV*RV+UV*UV+ZV*ZV}),squaredDistance_1}var squaredLength_1,hasRequiredSquaredLength;function requireSquaredLength(){return hasRequiredSquaredLength||(hasRequiredSquaredLength=1,squaredLength_1=J=>{const VV=J[0],RV=J[1],UV=J[2];return VV*VV+RV*RV+UV*UV}),squaredLength_1}var subtract_1$2,hasRequiredSubtract$2;function requireSubtract$2(){return hasRequiredSubtract$2||(hasRequiredSubtract$2=1,subtract_1$2=(J,VV,RV)=>(J[0]=VV[0]-RV[0],J[1]=VV[1]-RV[1],J[2]=VV[2]-RV[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,VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2];let IV=RV[3]*UV+RV[7]*ZV+RV[11]*WV+RV[15];return IV=IV||1,J[0]=(RV[0]*UV+RV[4]*ZV+RV[8]*WV+RV[12])/IV,J[1]=(RV[1]*UV+RV[5]*ZV+RV[9]*WV+RV[13])/IV,J[2]=(RV[2]*UV+RV[6]*ZV+RV[10]*WV+RV[14])/IV,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,VV,RV)=>(J[0]=VV[0]+RV[0],J[1]=VV[1]+RV[1],J[2]=VV[2]+RV[2],J[3]=VV[3]+RV[3],J[4]=VV[4]+RV[4],J[5]=VV[5]+RV[5],J[6]=VV[6]+RV[6],J[7]=VV[7]+RV[7],J[8]=VV[8]+RV[8],J[9]=VV[9]+RV[9],J[10]=VV[10]+RV[10],J[11]=VV[11]+RV[11],J[12]=VV[12]+RV[12],J[13]=VV[13]+RV[13],J[14]=VV[14]+RV[14],J[15]=VV[15]+RV[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 lV=requireCreate$a();return clone_1$7=VV=>{const RV=lV();return RV[0]=VV[0],RV[1]=VV[1],RV[2]=VV[2],RV[3]=VV[3],RV[4]=VV[4],RV[5]=VV[5],RV[6]=VV[6],RV[7]=VV[7],RV[8]=VV[8],RV[9]=VV[9],RV[10]=VV[10],RV[11]=VV[11],RV[12]=VV[12],RV[13]=VV[13],RV[14]=VV[14],RV[15]=VV[15],RV},clone_1$7}var copy_1$3,hasRequiredCopy$3;function requireCopy$3(){return hasRequiredCopy$3||(hasRequiredCopy$3=1,copy_1$3=(J,VV)=>(J[0]=VV[0],J[1]=VV[1],J[2]=VV[2],J[3]=VV[3],J[4]=VV[4],J[5]=VV[5],J[6]=VV[6],J[7]=VV[7],J[8]=VV[8],J[9]=VV[9],J[10]=VV[10],J[11]=VV[11],J[12]=VV[12],J[13]=VV[13],J[14]=VV[14],J[15]=VV[15],J)),copy_1$3}var invert_1$2,hasRequiredInvert$2;function requireInvert$2(){return hasRequiredInvert$2||(hasRequiredInvert$2=1,invert_1$2=(J,VV)=>{const RV=VV[0],UV=VV[1],ZV=VV[2],WV=VV[3],IV=VV[4],dV=VV[5],CV=VV[6],FV=VV[7],NV=VV[8],eV=VV[9],gV=VV[10],JV=VV[11],nV=VV[12],aV=VV[13],GV=VV[14],cV=VV[15],TV=RV*dV-UV*IV,iV=RV*CV-ZV*IV,EV=RV*FV-WV*IV,MV=UV*CV-ZV*dV,AV=UV*FV-WV*dV,pV=ZV*FV-WV*CV,HV=NV*aV-eV*nV,oV=NV*GV-gV*nV,DV=NV*cV-JV*nV,wV=eV*GV-gV*aV,qV=eV*cV-JV*aV,Il=gV*cV-JV*GV;let nl=TV*Il-iV*qV+EV*wV+MV*DV-AV*oV+pV*HV;return nl?(nl=1/nl,J[0]=(dV*Il-CV*qV+FV*wV)*nl,J[1]=(ZV*qV-UV*Il-WV*wV)*nl,J[2]=(aV*pV-GV*AV+cV*MV)*nl,J[3]=(gV*AV-eV*pV-JV*MV)*nl,J[4]=(CV*DV-IV*Il-FV*oV)*nl,J[5]=(RV*Il-ZV*DV+WV*oV)*nl,J[6]=(GV*EV-nV*pV-cV*iV)*nl,J[7]=(NV*pV-gV*EV+JV*iV)*nl,J[8]=(IV*qV-dV*DV+FV*HV)*nl,J[9]=(UV*DV-RV*qV-WV*HV)*nl,J[10]=(nV*AV-aV*EV+cV*TV)*nl,J[11]=(eV*EV-NV*AV-JV*TV)*nl,J[12]=(dV*oV-IV*wV-CV*HV)*nl,J[13]=(RV*wV-UV*oV+ZV*HV)*nl,J[14]=(aV*iV-nV*MV-GV*TV)*nl,J[15]=(NV*MV-eV*iV+gV*TV)*nl,J):null}),invert_1$2}var equals_1$5,hasRequiredEquals$5;function requireEquals$5(){return hasRequiredEquals$5||(hasRequiredEquals$5=1,equals_1$5=(J,VV)=>J[0]===VV[0]&&J[1]===VV[1]&&J[2]===VV[2]&&J[3]===VV[3]&&J[4]===VV[4]&&J[5]===VV[5]&&J[6]===VV[6]&&J[7]===VV[7]&&J[8]===VV[8]&&J[9]===VV[9]&&J[10]===VV[10]&&J[11]===VV[11]&&J[12]===VV[12]&&J[13]===VV[13]&&J[14]===VV[14]&&J[15]===VV[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:lV}=requireConstants$1(),{sin:J,cos:VV}=requireTrigonometry(),RV=requireIdentity();return fromRotation_1=(ZV,WV,IV)=>{let[dV,CV,FV]=IV;const NV=dV*dV+CV*CV+FV*FV;if(Math.abs(NV)<lV)return RV(ZV);const eV=1/Math.sqrt(NV);dV*=eV,CV*=eV,FV*=eV;const gV=J(WV),JV=VV(WV),nV=1-JV;return ZV[0]=dV*dV*nV+JV,ZV[1]=CV*dV*nV+FV*gV,ZV[2]=FV*dV*nV-CV*gV,ZV[3]=0,ZV[4]=dV*CV*nV-FV*gV,ZV[5]=CV*CV*nV+JV,ZV[6]=FV*CV*nV+dV*gV,ZV[7]=0,ZV[8]=dV*FV*nV+CV*gV,ZV[9]=CV*FV*nV-dV*gV,ZV[10]=FV*FV*nV+JV,ZV[11]=0,ZV[12]=0,ZV[13]=0,ZV[14]=0,ZV[15]=1,ZV},fromRotation_1}var fromScaling_1,hasRequiredFromScaling;function requireFromScaling(){return hasRequiredFromScaling||(hasRequiredFromScaling=1,fromScaling_1=(J,VV)=>(J[0]=VV[0],J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=VV[1],J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=VV[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:lV,cos:J}=requireTrigonometry();return fromTaitBryanRotation_1=(RV,UV,ZV,WV)=>{const IV=lV(UV),dV=J(UV),CV=lV(ZV),FV=J(ZV),NV=lV(WV),eV=J(WV);return RV[0]=FV*dV,RV[1]=FV*IV,RV[2]=-CV,RV[3]=0,RV[4]=NV*CV*dV-eV*IV,RV[5]=eV*dV+NV*CV*IV,RV[6]=NV*FV,RV[7]=0,RV[8]=NV*IV+eV*CV*dV,RV[9]=eV*CV*IV-NV*dV,RV[10]=eV*FV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromTaitBryanRotation_1}var fromTranslation_1,hasRequiredFromTranslation;function requireFromTranslation(){return hasRequiredFromTranslation||(hasRequiredFromTranslation=1,fromTranslation_1=(J,VV)=>(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]=VV[0],J[13]=VV[1],J[14]=VV[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 lV=requireCreate$a();return fromValues_1$2=(VV,RV,UV,ZV,WV,IV,dV,CV,FV,NV,eV,gV,JV,nV,aV,GV)=>{const cV=lV();return cV[0]=VV,cV[1]=RV,cV[2]=UV,cV[3]=ZV,cV[4]=WV,cV[5]=IV,cV[6]=dV,cV[7]=CV,cV[8]=FV,cV[9]=NV,cV[10]=eV,cV[11]=gV,cV[12]=JV,cV[13]=nV,cV[14]=aV,cV[15]=GV,cV},fromValues_1$2}var fromVectorRotation_1,hasRequiredFromVectorRotation;function requireFromVectorRotation(){if(hasRequiredFromVectorRotation)return fromVectorRotation_1;hasRequiredFromVectorRotation=1;const lV=requireVec3(),J=requireFromRotation();return fromVectorRotation_1=(RV,UV,ZV)=>{const WV=lV.normalize(lV.create(),UV),IV=lV.normalize(lV.create(),ZV),dV=lV.cross(lV.create(),IV,WV),CV=lV.dot(IV,WV);if(CV===-1)return J(RV,Math.PI,lV.orthogonal(dV,WV));const FV=1/(1+CV);return RV[0]=dV[0]*dV[0]*FV+CV,RV[1]=dV[1]*dV[0]*FV-dV[2],RV[2]=dV[2]*dV[0]*FV+dV[1],RV[3]=0,RV[4]=dV[0]*dV[1]*FV+dV[2],RV[5]=dV[1]*dV[1]*FV+CV,RV[6]=dV[2]*dV[1]*FV-dV[0],RV[7]=0,RV[8]=dV[0]*dV[2]*FV-dV[1],RV[9]=dV[1]*dV[2]*FV+dV[0],RV[10]=dV[2]*dV[2]*FV+CV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromVectorRotation_1}var fromXRotation_1,hasRequiredFromXRotation;function requireFromXRotation(){if(hasRequiredFromXRotation)return fromXRotation_1;hasRequiredFromXRotation=1;const{sin:lV,cos:J}=requireTrigonometry();return fromXRotation_1=(RV,UV)=>{const ZV=lV(UV),WV=J(UV);return RV[0]=1,RV[1]=0,RV[2]=0,RV[3]=0,RV[4]=0,RV[5]=WV,RV[6]=ZV,RV[7]=0,RV[8]=0,RV[9]=-ZV,RV[10]=WV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromXRotation_1}var fromYRotation_1,hasRequiredFromYRotation;function requireFromYRotation(){if(hasRequiredFromYRotation)return fromYRotation_1;hasRequiredFromYRotation=1;const{sin:lV,cos:J}=requireTrigonometry();return fromYRotation_1=(RV,UV)=>{const ZV=lV(UV),WV=J(UV);return RV[0]=WV,RV[1]=0,RV[2]=-ZV,RV[3]=0,RV[4]=0,RV[5]=1,RV[6]=0,RV[7]=0,RV[8]=ZV,RV[9]=0,RV[10]=WV,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},fromYRotation_1}var fromZRotation_1,hasRequiredFromZRotation;function requireFromZRotation(){if(hasRequiredFromZRotation)return fromZRotation_1;hasRequiredFromZRotation=1;const{sin:lV,cos:J}=requireTrigonometry();return fromZRotation_1=(RV,UV)=>{const ZV=lV(UV),WV=J(UV);return RV[0]=WV,RV[1]=ZV,RV[2]=0,RV[3]=0,RV[4]=-ZV,RV[5]=WV,RV[6]=0,RV[7]=0,RV[8]=0,RV[9]=0,RV[10]=1,RV[11]=0,RV[12]=0,RV[13]=0,RV[14]=0,RV[15]=1,RV},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 lV=VV=>J(VV[1])&&J(VV[2])&&J(VV[3])&&J(VV[4])&&J(VV[6])&&J(VV[7])&&J(VV[8])&&J(VV[9])&&J(VV[11])&&VV[15]===1,J=VV=>Math.abs(VV)<Number.EPSILON;return isOnlyTransformScale_1=lV,isOnlyTransformScale_1}var isMirroring_1,hasRequiredIsMirroring;function requireIsMirroring(){return hasRequiredIsMirroring||(hasRequiredIsMirroring=1,isMirroring_1=J=>{const VV=J[4]*J[9]-J[8]*J[5],RV=J[8]*J[1]-J[0]*J[9],UV=J[0]*J[5]-J[4]*J[1];return VV*J[2]+RV*J[6]+UV*J[10]<0}),isMirroring_1}var mirrorByPlane_1,hasRequiredMirrorByPlane;function requireMirrorByPlane(){return hasRequiredMirrorByPlane||(hasRequiredMirrorByPlane=1,mirrorByPlane_1=(J,VV)=>{const[RV,UV,ZV,WV]=VV;return J[0]=1-2*RV*RV,J[1]=-2*UV*RV,J[2]=-2*ZV*RV,J[3]=0,J[4]=-2*RV*UV,J[5]=1-2*UV*UV,J[6]=-2*ZV*UV,J[7]=0,J[8]=-2*RV*ZV,J[9]=-2*UV*ZV,J[10]=1-2*ZV*ZV,J[11]=0,J[12]=2*RV*WV,J[13]=2*UV*WV,J[14]=2*ZV*WV,J[15]=1,J}),mirrorByPlane_1}var multiply_1,hasRequiredMultiply;function requireMultiply(){return hasRequiredMultiply||(hasRequiredMultiply=1,multiply_1=(J,VV,RV)=>{const UV=VV[0],ZV=VV[1],WV=VV[2],IV=VV[3],dV=VV[4],CV=VV[5],FV=VV[6],NV=VV[7],eV=VV[8],gV=VV[9],JV=VV[10],nV=VV[11],aV=VV[12],GV=VV[13],cV=VV[14],TV=VV[15];let iV=RV[0],EV=RV[1],MV=RV[2],AV=RV[3];return J[0]=iV*UV+EV*dV+MV*eV+AV*aV,J[1]=iV*ZV+EV*CV+MV*gV+AV*GV,J[2]=iV*WV+EV*FV+MV*JV+AV*cV,J[3]=iV*IV+EV*NV+MV*nV+AV*TV,iV=RV[4],EV=RV[5],MV=RV[6],AV=RV[7],J[4]=iV*UV+EV*dV+MV*eV+AV*aV,J[5]=iV*ZV+EV*CV+MV*gV+AV*GV,J[6]=iV*WV+EV*FV+MV*JV+AV*cV,J[7]=iV*IV+EV*NV+MV*nV+AV*TV,iV=RV[8],EV=RV[9],MV=RV[10],AV=RV[11],J[8]=iV*UV+EV*dV+MV*eV+AV*aV,J[9]=iV*ZV+EV*CV+MV*gV+AV*GV,J[10]=iV*WV+EV*FV+MV*JV+AV*cV,J[11]=iV*IV+EV*NV+MV*nV+AV*TV,iV=RV[12],EV=RV[13],MV=RV[14],AV=RV[15],J[12]=iV*UV+EV*dV+MV*eV+AV*aV,J[13]=iV*ZV+EV*CV+MV*gV+AV*GV,J[14]=iV*WV+EV*FV+MV*JV+AV*cV,J[15]=iV*IV+EV*NV+MV*nV+AV*TV,J}),multiply_1}var rotate_1$1,hasRequiredRotate$1;function requireRotate$1(){if(hasRequiredRotate$1)return rotate_1$1;hasRequiredRotate$1=1;const{EPS:lV}=requireConstants$1(),{sin:J,cos:VV}=requireTrigonometry(),RV=requireCopy$3();return rotate_1$1=(ZV,WV,IV,dV)=>{let[CV,FV,NV]=dV;const eV=CV*CV+FV*FV+NV*NV;if(Math.abs(eV)<lV)return RV(ZV,WV);const gV=1/Math.sqrt(eV);CV*=gV,FV*=gV,NV*=gV;const JV=J(IV),nV=VV(IV),aV=1-nV,GV=WV[0],cV=WV[1],TV=WV[2],iV=WV[3],EV=WV[4],MV=WV[5],AV=WV[6],pV=WV[7],HV=WV[8],oV=WV[9],DV=WV[10],wV=WV[11],qV=CV*CV*aV+nV,Il=FV*CV*aV+NV*JV,nl=NV*CV*aV-FV*JV,dl=CV*FV*aV-NV*JV,LV=FV*FV*aV+nV,OV=NV*FV*aV+CV*JV,$V=CV*NV*aV+FV*JV,Cl=FV*NV*aV-CV*JV,Zl=NV*NV*aV+nV;return ZV[0]=GV*qV+EV*Il+HV*nl,ZV[1]=cV*qV+MV*Il+oV*nl,ZV[2]=TV*qV+AV*Il+DV*nl,ZV[3]=iV*qV+pV*Il+wV*nl,ZV[4]=GV*dl+EV*LV+HV*OV,ZV[5]=cV*dl+MV*LV+oV*OV,ZV[6]=TV*dl+AV*LV+DV*OV,ZV[7]=iV*dl+pV*LV+wV*OV,ZV[8]=GV*$V+EV*Cl+HV*Zl,ZV[9]=cV*$V+MV*Cl+oV*Zl,ZV[10]=TV*$V+AV*Cl+DV*Zl,ZV[11]=iV*$V+pV*Cl+wV*Zl,WV!==ZV&&(ZV[12]=WV[12],ZV[13]=WV[13],ZV[14]=WV[14],ZV[15]=WV[15]),ZV},rotate_1$1}var rotateX_1,hasRequiredRotateX;function requireRotateX(){if(hasRequiredRotateX)return rotateX_1;hasRequiredRotateX=1;const{sin:lV,cos:J}=requireTrigonometry();return rotateX_1=(RV,UV,ZV)=>{const WV=lV(ZV),IV=J(ZV),dV=UV[4],CV=UV[5],FV=UV[6],NV=UV[7],eV=UV[8],gV=UV[9],JV=UV[10],nV=UV[11];return UV!==RV&&(RV[0]=UV[0],RV[1]=UV[1],RV[2]=UV[2],RV[3]=UV[3],RV[12]=UV[12],RV[13]=UV[13],RV[14]=UV[14],RV[15]=UV[15]),RV[4]=dV*IV+eV*WV,RV[5]=CV*IV+gV*WV,RV[6]=FV*IV+JV*WV,RV[7]=NV*IV+nV*WV,RV[8]=eV*IV-dV*WV,RV[9]=gV*IV-CV*WV,RV[10]=JV*IV-FV*WV,RV[11]=nV*IV-NV*WV,RV},rotateX_1}var rotateY_1,hasRequiredRotateY;function requireRotateY(){if(hasRequiredRotateY)return rotateY_1;hasRequiredRotateY=1;const{sin:lV,cos:J}=requireTrigonometry();return rotateY_1=(RV,UV,ZV)=>{const WV=lV(ZV),IV=J(ZV),dV=UV[0],CV=UV[1],FV=UV[2],NV=UV[3],eV=UV[8],gV=UV[9],JV=UV[10],nV=UV[11];return UV!==RV&&(RV[4]=UV[4],RV[5]=UV[5],RV[6]=UV[6],RV[7]=UV[7],RV[12]=UV[12],RV[13]=UV[13],RV[14]=UV[14],RV[15]=UV[15]),RV[0]=dV*IV-eV*WV,RV[1]=CV*IV-gV*WV,RV[2]=FV*IV-JV*WV,RV[3]=NV*IV-nV*WV,RV[8]=dV*WV+eV*IV,RV[9]=CV*WV+gV*IV,RV[10]=FV*WV+JV*IV,RV[11]=NV*WV+nV*IV,RV},rotateY_1}var rotateZ_1,hasRequiredRotateZ;function requireRotateZ(){if(hasRequiredRotateZ)return rotateZ_1;hasRequiredRotateZ=1;const{sin:lV,cos:J}=requireTrigonometry();return rotateZ_1=(RV,UV,ZV)=>{const WV=lV(ZV),IV=J(ZV),dV=UV[0],CV=UV[1],FV=UV[2],NV=UV[3],eV=UV[4],gV=UV[5],JV=UV[6],nV=UV[7];return UV!==RV&&(RV[8]=UV[8],RV[9]=UV[9],RV[10]=UV[10],RV[11]=UV[11],RV[12]=UV[12],RV[13]=UV[13],RV[14]=UV[14],RV[15]=UV[15]),RV[0]=dV*IV+eV*WV,RV[1]=CV*IV+gV*WV,RV[2]=FV*IV+JV*WV,RV[3]=NV*IV+nV*WV,RV[4]=eV*IV-dV*WV,RV[5]=gV*IV-CV*WV,RV[6]=JV*IV-FV*WV,RV[7]=nV*IV-NV*WV,RV},rotateZ_1}var scale_1$1,hasRequiredScale$1;function requireScale$1(){return hasRequiredScale$1||(hasRequiredScale$1=1,scale_1$1=(J,VV,RV)=>{const UV=RV[0],ZV=RV[1],WV=RV[2];return J[0]=VV[0]*UV,J[1]=VV[1]*UV,J[2]=VV[2]*UV,J[3]=VV[3]*UV,J[4]=VV[4]*ZV,J[5]=VV[5]*ZV,J[6]=VV[6]*ZV,J[7]=VV[7]*ZV,J[8]=VV[8]*WV,J[9]=VV[9]*WV,J[10]=VV[10]*WV,J[11]=VV[11]*WV,J[12]=VV[12],J[13]=VV[13],J[14]=VV[14],J[15]=VV[15],J}),scale_1$1}var subtract_1$1,hasRequiredSubtract$1;function requireSubtract$1(){return hasRequiredSubtract$1||(hasRequiredSubtract$1=1,subtract_1$1=(J,VV,RV)=>(J[0]=VV[0]-RV[0],J[1]=VV[1]-RV[1],J[2]=VV[2]-RV[2],J[3]=VV[3]-RV[3],J[4]=VV[4]-RV[4],J[5]=VV[5]-RV[5],J[6]=VV[6]-RV[6],J[7]=VV[7]-RV[7],J[8]=VV[8]-RV[8],J[9]=VV[9]-RV[9],J[10]=VV[10]-RV[10],J[11]=VV[11]-RV[11],J[12]=VV[12]-RV[12],J[13]=VV[13]-RV[13],J[14]=VV[14]-RV[14],J[15]=VV[15]-RV[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(VV=>VV.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,VV,RV)=>{const UV=RV[0],ZV=RV[1],WV=RV[2];let IV,dV,CV,FV,NV,eV,gV,JV,nV,aV,GV,cV;return VV===J?(J[12]=VV[0]*UV+VV[4]*ZV+VV[8]*WV+VV[12],J[13]=VV[1]*UV+VV[5]*ZV+VV[9]*WV+VV[13],J[14]=VV[2]*UV+VV[6]*ZV+VV[10]*WV+VV[14],J[15]=VV[3]*UV+VV[7]*ZV+VV[11]*WV+VV[15]):(IV=VV[0],dV=VV[1],CV=VV[2],FV=VV[3],NV=VV[4],eV=VV[5],gV=VV[6],JV=VV[7],nV=VV[8],aV=VV[9],GV=VV[10],cV=VV[11],J[0]=IV,J[1]=dV,J[2]=CV,J[3]=FV,J[4]=NV,J[5]=eV,J[6]=gV,J[7]=JV,J[8]=nV,J[9]=aV,J[10]=GV,J[11]=cV,J[12]=IV*UV+NV*ZV+nV*WV+VV[12],J[13]=dV*UV+eV*ZV+aV*WV+VV[13],J[14]=CV*UV+gV*ZV+GV*WV+VV[14],J[15]=FV*UV+JV*ZV+cV*WV+VV[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 lV=requireMat4();return create_1$9=VV=>(VV===void 0&&(VV=[]),{sides:VV,transforms:lV.create()}),create_1$9}var fromPoints_1$7,hasRequiredFromPoints$7;function requireFromPoints$7(){if(hasRequiredFromPoints$7)return fromPoints_1$7;hasRequiredFromPoints$7=1;const lV=requireVec2(),J=requireCreate$9();return fromPoints_1$7=RV=>{if(!Array.isArray(RV))throw new Error("the given points must be an array");let UV=RV.length;if(UV<3)throw new Error("the given points must define a closed geometry with three or more points");lV.equals(RV[0],RV[UV-1])&&--UV;const ZV=[];let WV=RV[UV-1];for(let IV=0;IV<UV;IV++){const dV=RV[IV];ZV.push([lV.clone(WV),lV.clone(dV)]),WV=dV}return J(ZV)},fromPoints_1$7}var fromCompactBinary_1$2,hasRequiredFromCompactBinary$2;function requireFromCompactBinary$2(){if(hasRequiredFromCompactBinary$2)return fromCompactBinary_1$2;hasRequiredFromCompactBinary$2=1;const lV=requireMat4(),J=requireVec2(),VV=requireCreate$9();return fromCompactBinary_1$2=UV=>{if(UV[0]!==0)throw new Error("invalid compact binary data");const ZV=VV();ZV.transforms=lV.clone(UV.slice(1,17));for(let WV=21;WV<UV.length;WV+=4){const IV=J.fromValues(UV[WV+0],UV[WV+1]),dV=J.fromValues(UV[WV+2],UV[WV+3]);ZV.sides.push([IV,dV])}return UV[17]>=0&&(ZV.color=[UV[17],UV[18],UV[19],UV[20]]),ZV},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 lV=requireMat4(),J=requireVec2();return applyTransforms_1$2=RV=>(lV.isIdentity(RV.transforms)||(RV.sides=RV.sides.map(UV=>{const ZV=J.transform(J.create(),UV[0],RV.transforms),WV=J.transform(J.create(),UV[1],RV.transforms);return[ZV,WV]}),RV.transforms=lV.create()),RV),applyTransforms_1$2}var toSides_1,hasRequiredToSides;function requireToSides(){if(hasRequiredToSides)return toSides_1;hasRequiredToSides=1;const lV=requireApplyTransforms$2();return toSides_1=VV=>lV(VV).sides,toSides_1}var reverse_1$4,hasRequiredReverse$4;function requireReverse$4(){if(hasRequiredReverse$4)return reverse_1$4;hasRequiredReverse$4=1;const lV=requireCreate$9(),J=requireToSides();return reverse_1$4=RV=>{const ZV=J(RV).map(WV=>[WV[1],WV[0]]);return ZV.reverse(),lV(ZV)},reverse_1$4}var toOutlines_1,hasRequiredToOutlines;function requireToOutlines(){if(hasRequiredToOutlines)return toOutlines_1;hasRequiredToOutlines=1;const lV=requireVec2(),J=requireToSides(),VV=WV=>{const IV=new Map,dV=CV=>{const FV=CV.toString();return IV.has(FV)?IV.get(FV):(IV.set(FV,CV),CV)};return WV.map(CV=>CV.map(dV))},RV=WV=>{const IV=new Map;return VV(WV).forEach(CV=>{IV.has(CV[0])?IV.get(CV[0]).push(CV):IV.set(CV[0],[CV])}),IV},UV=WV=>{const IV=RV(J(WV)),dV=[];for(;;){let CV;for(const[eV,gV]of IV){if(CV=gV.shift(),!CV){IV.delete(eV);continue}break}if(CV===void 0)break;const FV=[],NV=CV[0];for(;;){FV.push(CV[0]);const eV=CV[1];if(eV===NV)break;const gV=IV.get(eV);if(!gV)throw new Error(`geometry is not closed at vertex ${eV}`);const JV=ZV(CV,gV);gV.length===0&&IV.delete(eV),CV=JV}FV.length>0&&FV.push(FV.shift()),dV.push(FV)}return IV.clear(),dV},ZV=(WV,IV)=>{if(IV.length===1)return IV.pop();const dV=lV.create(),CV=lV.angleDegrees(lV.subtract(dV,WV[1],WV[0]));let FV,NV;IV.forEach((gV,JV)=>{let aV=lV.angleDegrees(lV.subtract(dV,gV[1],gV[0]))-CV;aV<-180&&(aV+=360),aV>=180&&(aV-=360),(NV===void 0||aV>FV)&&(NV=JV,FV=aV)});const eV=IV[NV];return IV.splice(NV,1),eV};return toOutlines_1=UV,toOutlines_1}var toPoints_1$3,hasRequiredToPoints$3;function requireToPoints$3(){if(hasRequiredToPoints$3)return toPoints_1$3;hasRequiredToPoints$3=1;const lV=requireToSides();return toPoints_1$3=VV=>{const UV=lV(VV).map(ZV=>ZV[0]);return UV.length>0&&UV.push(UV.shift()),UV},toPoints_1$3}var toString_1$7,hasRequiredToString$7;function requireToString$7(){if(hasRequiredToString$7)return toString_1$7;hasRequiredToString$7=1;const lV=requireVec2(),J=requireToSides();return toString_1$7=RV=>{const UV=J(RV);let ZV="geom2 ("+UV.length+` sides):
7299
7299
  [
7300
7300
  `;return UV.forEach(WV=>{ZV+=" ["+lV.toString(WV[0])+", "+lV.toString(WV[1])+`]
7301
7301
  `}),ZV+=`]
@@ -22045,7 +22045,7 @@ void main() {
22045
22045
  * Copyright 2010-2024 Three.js Authors
22046
22046
  * SPDX-License-Identifier: MIT
22047
22047
  *)
22048
- */const dist$4=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$4);var dist$3,hasRequiredDist$2;function requireDist$2(){if(hasRequiredDist$2)return dist$3;hasRequiredDist$2=1;var lV=Object.create,J=Object.defineProperty,VV=Object.getOwnPropertyDescriptor,RV=Object.getOwnPropertyNames,UV=Object.getPrototypeOf,ZV=Object.prototype.hasOwnProperty,WV=(ol,vl)=>{for(var wR in vl)J(ol,wR,{get:vl[wR],enumerable:!0})},IV=(ol,vl,wR,ZU)=>{if(vl&&typeof vl=="object"||typeof vl=="function")for(let EU of RV(vl))!ZV.call(ol,EU)&&EU!==wR&&J(ol,EU,{get:()=>vl[EU],enumerable:!(ZU=VV(vl,EU))||ZU.enumerable});return ol},dV=(ol,vl,wR)=>(wR=ol!=null?lV(UV(ol)):{},IV(!ol||!ol.__esModule?J(wR,"default",{value:ol,enumerable:!0}):wR,ol)),CV=ol=>IV(J({},"__esModule",{value:!0}),ol),FV={};WV(FV,{CadViewer:()=>$U,useExportGltfUrl:()=>JV,useSaveGltfAs:()=>gV}),dist$3=CV(FV);var NV=requireThreeStdlib(),eV=requireReact();function gV(ol={}){const vl=nV(ol),wR=(0,eV.useMemo)(()=>document.createElement("a"),[]),ZU=async yU=>{const XZ=yU??ol.filename??"";ol.binary==null&&(ol.binary=XZ.endsWith(".glb"));const mZ=await vl(EU);wR.download=XZ,wR.href=mZ,wR.dispatchEvent(new MouseEvent("click")),URL.revokeObjectURL(mZ)};(0,eV.useEffect)(()=>()=>{wR.remove(),EU=null},[]);let EU;return[(0,eV.useCallback)(yU=>{EU=yU},[]),ZU]}function JV(ol={}){const vl=nV(ol),[wR,ZU]=(0,eV.useState)(),[EU,uU]=(0,eV.useState)(),yU=(0,eV.useCallback)(XZ=>vl(XZ).then(ZU).catch(uU),[]);return(0,eV.useEffect)(()=>()=>URL.revokeObjectURL(wR),[wR]),[yU,wR,EU]}function nV(ol={}){const vl=(0,eV.useMemo)(()=>new NV.GLTFExporter,[]);return wR=>{const{promise:ZU,resolve:EU,reject:uU}=Promise.withResolvers();return vl.parse(wR,yU=>{const XZ=ol.binary?"gltf-binary":"gltf+json",mZ=new Blob([yU instanceof ArrayBuffer?yU:JSON.stringify(yU)],{type:`model/${XZ}`});EU(URL.createObjectURL(mZ))},uU,ol),ZU}}var aV=require$$2,GV=requireReact(),cV=(ol,vl)=>(0,GV.useMemo)(()=>{if(!ol)return;const wR=new aV.Circuit;return wR.add(ol),wR.render(),wR.getCircuitJson()},[ol]),TV=requireDist$6(),iV=requireReact(),EV=requireDist$6(),MV=requireTransforms(),AV=requirePrimitives(),pV=requireColors(),HV=requireBooleans(),oV=requirePrimitives(),DV=requireColors(),wV=requireBooleans(),qV=.01,Il={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255]},nl=(ol,vl)=>{if(ol.shape||(ol.shape="circle"),ol.shape==="circle")return(0,DV.colorize)(Il.copper,(0,wV.subtract)((0,wV.union)((0,oV.cylinder)({center:[ol.x,ol.y,0],radius:ol.hole_diameter/2,height:1.2}),(0,oV.cylinder)({center:[ol.x,ol.y,1.2/2],radius:ol.outer_diameter/2,height:qV}),(0,oV.cylinder)({center:[ol.x,ol.y,-1.2/2],radius:ol.outer_diameter/2,height:qV})),(0,oV.cylinder)({center:[ol.x,ol.y,0],radius:ol.hole_diameter/2-qV,height:1.5})));if(ol.shape==="pill"){const wR=ol.hole_height>ol.hole_width,ZU=wR?ol.hole_height:ol.hole_width,EU=wR?ol.hole_width:ol.hole_height,uU=wR?ol.outer_width||ZU+.2:ol.outer_height||EU+.2,yU=EU/2,XZ=Math.abs(ZU-EU),mZ=(0,oV.cuboid)({center:wR?[ol.x,ol.y,0]:[ol.x,ol.y,0],size:wR?[EU,XZ,1.2]:[XZ,EU,1.2]}),QZ=(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,0]:[ol.x-XZ/2,ol.y,0],radius:yU,height:1.2}),ZW=(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,0]:[ol.x+XZ/2,ol.y,0],radius:yU,height:1.2}),JW=(0,oV.cuboid)({center:wR?[ol.x,ol.y,1.2/2]:[ol.x,ol.y,1.2/2],size:wR?[uU,XZ,qV]:[XZ,uU,qV]}),IZ=(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,1.2/2]:[ol.x-XZ/2,ol.y,1.2/2],radius:uU/2,height:qV}),MR=(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,1.2/2]:[ol.x+XZ/2,ol.y,1.2/2],radius:uU/2,height:qV}),WU=(0,oV.cuboid)({center:wR?[ol.x,ol.y,-1.2/2]:[ol.x,ol.y,-1.2/2],size:wR?[uU,XZ,qV]:[XZ,uU,qV]}),MU=(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,-1.2/2]:[ol.x-XZ/2,ol.y,-1.2/2],radius:uU/2,height:qV}),VZ=(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,-1.2/2]:[ol.x+XZ/2,ol.y,-1.2/2],radius:uU/2,height:qV});return(0,DV.colorize)(Il.copper,(0,wV.subtract)((0,wV.union)(mZ,QZ,ZW,JW,IZ,MR,WU,MU,VZ),(0,wV.union)((0,oV.cuboid)({center:[ol.x,ol.y,0],size:wR?[EU-qV,XZ,1.5]:[XZ,EU-qV,1.5]}),(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,0]:[ol.x-XZ/2,ol.y,0],radius:yU-qV,height:1.5}),(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,0]:[ol.x+XZ/2,ol.y,0],radius:yU-qV,height:1.5}))))}else throw new Error(`Unsupported plated hole shape: ${ol.shape}`)},dl=requireExtrusions(),LV=requireExpansions(),OV=requireExtrusions(),$V=requirePrimitives(),Cl=requireTransforms(),Zl=ol=>{let vl=0;for(let ZU=0;ZU<ol.length;ZU++){const EU=(ZU+1)%ol.length;vl+=ol[ZU][0]*ol[EU][1],vl-=ol[EU][0]*ol[ZU][1]}return vl/2<=0},gl=(ol,vl=1.2)=>{let wR=ol.map(uU=>[uU.x,uU.y]);Zl(wR)&&(wR=wR.reverse());const ZU=(0,$V.polygon)({points:wR});let EU=(0,OV.extrudeLinear)({height:vl},ZU);return EU=(0,Cl.translate)([0,0,-vl/2],EU),EU},pl=requireText();function ml(ol){var mZ,QZ,ZW,JW;const vl=(0,pl.vectorText)({height:ol.font_size,input:ol.text});vl.forEach(IZ=>{IZ.length===29?(vl.splice(vl.indexOf(IZ),1,IZ.slice(0,15)),vl.splice(vl.indexOf(IZ),0,IZ.slice(14,29))):IZ.length===17&&(vl.splice(vl.indexOf(IZ),1,IZ.slice(0,10)),vl.splice(vl.indexOf(IZ),0,IZ.slice(9,17)))});const wR=vl.flatMap(IZ=>IZ),ZU={minX:Math.min(...wR.map(IZ=>IZ[0])),maxX:Math.max(...wR.map(IZ=>IZ[0])),minY:Math.min(...wR.map(IZ=>IZ[1])),maxY:Math.max(...wR.map(IZ=>IZ[1]))},EU=(ZU.minX+ZU.maxX)/2,uU=(ZU.minY+ZU.maxY)/2;let yU=-EU,XZ=-uU;return(mZ=ol.anchor_alignment)!=null&&mZ.includes("right")?yU=-ZU.maxX:(QZ=ol.anchor_alignment)!=null&&QZ.includes("left")&&(yU=-ZU.minX),(ZW=ol.anchor_alignment)!=null&&ZW.includes("top")?XZ=-ZU.maxY:(JW=ol.anchor_alignment)!=null&&JW.includes("bottom")&&(XZ=-ZU.minY),{textOutlines:vl,xOffset:yU,yOffset:XZ}}var Bl=ol=>{const vl=(0,EV.su)(ol).pcb_board.list()[0];if(!vl)throw new Error("No pcb_board found");const wR=(0,EV.su)(ol).pcb_plated_hole.list(),ZU=(0,EV.su)(ol).pcb_hole.list(),EU=(0,EV.su)(ol).pcb_smtpad.list(),uU=(0,EV.su)(ol).pcb_trace.list(),yU=(0,EV.su)(ol).pcb_via.list(),XZ=(0,EV.su)(ol).pcb_silkscreen_text.list();let mZ;vl.outline&&vl.outline.length>0?mZ=gl(vl.outline,1.2):mZ=(0,AV.cuboid)({size:[vl.width,vl.height,1.2]});const QZ=[],ZW=[],JW=[],IZ=WU=>{if(WU.shape==="circle"){const MU=(0,AV.cylinder)({center:[WU.x,WU.y,0],radius:WU.hole_diameter/2+qV});mZ=(0,HV.subtract)(mZ,MU);const VZ=nl(WU);QZ.push(VZ)}else if(WU.shape==="pill"){const MU=WU.hole_height>WU.hole_width,VZ=MU?WU.hole_height:WU.hole_width,GZ=MU?WU.hole_width:WU.hole_height,$Z=GZ/2,gW=Math.abs(VZ-GZ),iZ=(0,HV.union)((0,AV.cuboid)({center:[WU.x,WU.y,0],size:MU?[GZ,gW,1.5]:[gW,GZ,1.5]}),(0,AV.cylinder)({center:MU?[WU.x,WU.y-gW/2,0]:[WU.x-gW/2,WU.y,0],radius:$Z,height:1.5}),(0,AV.cylinder)({center:MU?[WU.x,WU.y+gW/2,0]:[WU.x+gW/2,WU.y,0],radius:$Z,height:1.5}));mZ=(0,HV.subtract)(mZ,iZ);const KU=nl(WU);QZ.push(KU)}};for(const WU of wR)IZ(WU);for(const WU of ZU)if(WU.hole_shape==="round"||WU.hole_shape==="circle"){const MU=(0,AV.cylinder)({center:[WU.x,WU.y,0],radius:WU.hole_diameter/2+qV});mZ=(0,HV.subtract)(mZ,MU)}for(const WU of EU){const MU=WU.layer==="bottom"?-1:1;if(WU.shape==="rect"){const VZ=(0,pV.colorize)(Il.copper,(0,AV.cuboid)({center:[WU.x,WU.y,MU*1.2/2+MU*qV],size:[WU.width,WU.height,qV]}));ZW.push(VZ)}else if(WU.shape==="circle"){const VZ=(0,pV.colorize)(Il.copper,(0,AV.cylinder)({center:[WU.x,WU.y,MU*1.2/2+MU*qV],radius:WU.radius,height:qV}));ZW.push(VZ)}}for(const{route:WU}of uU){if(WU.length<2)continue;const MU=[];let VZ=[WU[0]],GZ=WU[0].route_type==="wire"?WU[0].layer:"top";for(let $Z=1;$Z<WU.length;$Z++){const gW=WU[$Z];gW.route_type==="via"?(MU.push(VZ),VZ=[gW]):gW.route_type==="wire"&&gW.layer!==GZ?(MU.push(VZ),GZ=gW.layer,VZ=[gW]):VZ.push(gW)}MU.push(VZ);for(const $Z of MU){if($Z.length<2)continue;const gW=(0,AV.line)($Z.map(KZ=>[KZ.x,KZ.y])),iZ=$Z[0].route_type==="via"?$Z[0].to_layer==="top"?1:-1:$Z[0].layer==="top"?1:-1;let KU=(0,MV.translate)([0,0,iZ*1.2/2],(0,dl.extrudeLinear)({height:qV*iZ},(0,LV.expand)({delta:.1,corners:"edge"},gW)));const yZ=yU.map(KZ=>(0,AV.cylinder)({center:[KZ.x,KZ.y,0],radius:KZ.outer_diameter/2,height:5})),dW=wR.filter(KZ=>KZ.shape==="circle").map(KZ=>(0,AV.cylinder)({center:[KZ.x,KZ.y,0],radius:KZ.outer_diameter/2,height:5}));KU=(0,HV.subtract)(KU,...yZ,...dW),KU=(0,pV.colorize)(Il.fr4GreenSolderWithMask,KU),JW.push(KU)}}for(const WU of yU)IZ({x:WU.x,y:WU.y,hole_diameter:WU.hole_diameter,outer_diameter:WU.outer_diameter,shape:"circle",layers:["top","bottom"],type:"pcb_plated_hole",pcb_plated_hole_id:""});const MR=[];for(const WU of XZ){const{textOutlines:MU,xOffset:VZ,yOffset:GZ}=ml(WU);for(let $Z of MU){const gW=$Z.map(EW=>[EW[0]+VZ+WU.anchor_position.x,EW[1]+GZ+WU.anchor_position.y]),iZ=(0,AV.line)(gW),KU=WU.font_size||.25,yZ=Math.min(Math.max(.01,KU*.1),KU*.2),dW=(0,LV.expand)({delta:yZ,corners:"round"},iZ);let KZ=(0,MV.translate)([0,0,.6],(0,dl.extrudeLinear)({height:.012},dW));KZ=(0,pV.colorize)([256,256,256],KZ),MR.push(KZ)}}return mZ=(0,pV.colorize)(Il.fr4Green,mZ),[mZ,...QZ,...ZW,...JW,...MR]},jl=requireReact(),rl=dV(requireStlSerializer());function Pl(ol){return new Promise((vl,wR)=>{const ZU=new FileReader;ZU.onload=()=>{vl(ZU.result)},ZU.onerror=wR,ZU.readAsDataURL(ol)})}var Hl=ol=>{const[vl,wR]=(0,jl.useState)([]),[ZU,EU]=(0,jl.useState)(!0);return(0,jl.useEffect)(()=>{if(!ol)return;(async()=>{EU(!0);const XZ=(Array.isArray(ol)?ol:[ol]).map(async mZ=>{const QZ=rl.default.serialize({binary:!0},[mZ]),ZW=new Blob(QZ);return{stlUrl:await Pl(ZW),color:mZ.color}});try{const mZ=await Promise.all(XZ);wR(mZ)}catch(mZ){console.error("Error generating STLs:",mZ),wR([])}finally{EU(!1)}})()},[ol]),{stls:vl,loading:ZU}},Tl=require$$12,kl=requireReact(),Dl=requireThreeStdlib(),ZR=requireJsxRuntime();function JR({stlUrl:ol,mtlUrl:vl,color:wR,opacity:ZU=1}){const EU=(0,Tl.useLoader)(Dl.STLLoader,ol),uU=(0,kl.useRef)();return(0,ZR.jsxs)("mesh",{ref:uU,children:[(0,ZR.jsx)("primitive",{object:EU,attach:"geometry"}),(0,ZR.jsx)("meshStandardMaterial",{color:wR,transparent:ZU!==1,opacity:ZU})]})}var FR=require$$14,QR=require$$12,hR={name:"@tscircuit/3d-viewer",version:"0.0.93",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.265","@tscircuit/props":"^0.0.129","@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"}},kR=require$$14,AR=require$$12,aR=requireReact(),TR=dV(requireThree()),xR=requireJsxRuntime();typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new TR.Euler(0,0,0));function pR(ol,vl){const wR=new TR.Quaternion().setFromEuler(new TR.Euler(ol.x,ol.y,ol.z)),ZU=new TR.Vector3(0,0,1);return ZU.applyQuaternion(wR),ZU.multiplyScalar(vl)}var UU=({})=>{const ol=(0,aR.useRef)();return(0,aR.useRef)({lastRotation:new TR.Euler}),(0,AR.useFrame)((vl,wR)=>{if(!ol.current)return;const ZU=window.TSCI_MAIN_CAMERA_ROTATION,EU=pR(ZU,2);vl.camera.position.copy(EU),vl.camera.lookAt(0,0,0)}),(0,xR.jsxs)("mesh",{ref:ol,rotation:[Math.PI/2,0,0],children:[(0,xR.jsx)("boxGeometry",{args:[1,1,1]}),(0,xR.jsx)("meshStandardMaterial",{color:"white"}),(0,xR.jsx)(kR.Text,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),(0,xR.jsx)(kR.Text,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),(0,xR.jsx)(kR.Text,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),(0,xR.jsx)(kR.Text,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),(0,xR.jsx)(kR.Text,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),(0,xR.jsx)(kR.Text,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),(0,xR.jsx)("lineSegments",{args:[new TR.EdgesGeometry(new TR.BoxGeometry(1,1,1))],material:new TR.LineBasicMaterial({color:0,linewidth:2})})]})},SU=requireReact(),xU=require$$14,DR=requireJsxRuntime(),BR=()=>((0,QR.useFrame)(({camera:ol})=>{window.TSCI_MAIN_CAMERA_ROTATION=ol.rotation}),(0,DR.jsx)(DR.Fragment,{})),CU=(0,SU.forwardRef)(({children:ol,hoveredComponent:vl},wR)=>(0,DR.jsxs)("div",{style:{position:"relative",width:"100%",height:"100%"},children:[(0,DR.jsx)("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:(0,DR.jsxs)(QR.Canvas,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[(0,DR.jsx)("ambientLight",{intensity:Math.PI/2}),(0,DR.jsx)(UU,{})]})}),(0,DR.jsxs)(QR.Canvas,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:[5,5,5]},children:[(0,DR.jsx)(BR,{}),(0,DR.jsx)(FR.OrbitControls,{autoRotate:!0,autoRotateSpeed:1}),(0,DR.jsx)("ambientLight",{intensity:Math.PI/2}),(0,DR.jsx)("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),(0,DR.jsx)(FR.Grid,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:10}),(0,DR.jsx)("object3D",{ref:wR,children:ol}),vl&&(0,DR.jsx)(xU.Html,{position:vl.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:vl.name})]}),(0,DR.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:["@",hR.version]})]})),bR=requireReact(),VR=dV(requireThree()),mR=requireJsxRuntime(),YR=ol=>(0,mR.jsx)("group",{...ol}),iR=({children:ol,isHovered:vl,onHover:wR,position:ZU})=>{const EU=(0,bR.useRef)(null),uU=(0,bR.useCallback)(XZ=>{XZ.stopPropagation();try{const mZ=XZ.point||(XZ.intersections&&XZ.intersections.length>0?XZ.intersections[0].point:null)||(ZU?new VR.Vector3(...ZU):null);mZ?(EU.current=mZ,wR({mousePosition:[mZ.x,mZ.y,mZ.z]})):wR({})}catch(mZ){console.warn("Hover event error:",mZ),wR({})}},[ZU]),yU=(0,bR.useCallback)(XZ=>{XZ.stopPropagation(),EU.current=null,wR(null)},[wR]);return(0,mR.jsx)(YR,{onPointerEnter:uU,onPointerMove:uU,onPointerLeave:yU,children:ol})},$R=iR,lU=requireReact(),hU=requireThreeStdlib();typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function GR(ol){const[vl,wR]=(0,lU.useState)(null);return(0,lU.useEffect)(()=>{if(!ol)return;const ZU=window.TSCIRCUIT_OBJ_LOADER_CACHE;let EU=!1;async function uU(){var XZ;try{const QZ=await(await fetch(ol)).text(),ZW=(XZ=QZ.match(/newmtl[\s\S]*?endmtl/g))==null?void 0:XZ.join(`
22048
+ */const dist$4=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$4);var dist$3,hasRequiredDist$2;function requireDist$2(){if(hasRequiredDist$2)return dist$3;hasRequiredDist$2=1;var lV=Object.create,J=Object.defineProperty,VV=Object.getOwnPropertyDescriptor,RV=Object.getOwnPropertyNames,UV=Object.getPrototypeOf,ZV=Object.prototype.hasOwnProperty,WV=(ol,vl)=>{for(var wR in vl)J(ol,wR,{get:vl[wR],enumerable:!0})},IV=(ol,vl,wR,ZU)=>{if(vl&&typeof vl=="object"||typeof vl=="function")for(let EU of RV(vl))!ZV.call(ol,EU)&&EU!==wR&&J(ol,EU,{get:()=>vl[EU],enumerable:!(ZU=VV(vl,EU))||ZU.enumerable});return ol},dV=(ol,vl,wR)=>(wR=ol!=null?lV(UV(ol)):{},IV(!ol||!ol.__esModule?J(wR,"default",{value:ol,enumerable:!0}):wR,ol)),CV=ol=>IV(J({},"__esModule",{value:!0}),ol),FV={};WV(FV,{CadViewer:()=>$U,useExportGltfUrl:()=>JV,useSaveGltfAs:()=>gV}),dist$3=CV(FV);var NV=requireThreeStdlib(),eV=requireReact();function gV(ol={}){const vl=nV(ol),wR=(0,eV.useMemo)(()=>document.createElement("a"),[]),ZU=async yU=>{const XZ=yU??ol.filename??"";ol.binary==null&&(ol.binary=XZ.endsWith(".glb"));const mZ=await vl(EU);wR.download=XZ,wR.href=mZ,wR.dispatchEvent(new MouseEvent("click")),URL.revokeObjectURL(mZ)};(0,eV.useEffect)(()=>()=>{wR.remove(),EU=null},[]);let EU;return[(0,eV.useCallback)(yU=>{EU=yU},[]),ZU]}function JV(ol={}){const vl=nV(ol),[wR,ZU]=(0,eV.useState)(),[EU,uU]=(0,eV.useState)(),yU=(0,eV.useCallback)(XZ=>vl(XZ).then(ZU).catch(uU),[]);return(0,eV.useEffect)(()=>()=>URL.revokeObjectURL(wR),[wR]),[yU,wR,EU]}function nV(ol={}){const vl=(0,eV.useMemo)(()=>new NV.GLTFExporter,[]);return wR=>{const{promise:ZU,resolve:EU,reject:uU}=Promise.withResolvers();return vl.parse(wR,yU=>{const XZ=ol.binary?"gltf-binary":"gltf+json",mZ=new Blob([yU instanceof ArrayBuffer?yU:JSON.stringify(yU)],{type:`model/${XZ}`});EU(URL.createObjectURL(mZ))},uU,ol),ZU}}var aV=require$$2,GV=requireReact(),cV=(ol,vl)=>(0,GV.useMemo)(()=>{if(!ol)return;const wR=new aV.Circuit;return wR.add(ol),wR.render(),wR.getCircuitJson()},[ol]),TV=requireDist$6(),iV=requireReact(),EV=requireDist$6(),MV=requireTransforms(),AV=requirePrimitives(),pV=requireColors(),HV=requireBooleans(),oV=requirePrimitives(),DV=requireColors(),wV=requireBooleans(),qV=.01,Il={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255]},nl=(ol,vl)=>{if(ol.shape||(ol.shape="circle"),ol.shape==="circle")return(0,DV.colorize)(Il.copper,(0,wV.subtract)((0,wV.union)((0,oV.cylinder)({center:[ol.x,ol.y,0],radius:ol.hole_diameter/2,height:1.2}),(0,oV.cylinder)({center:[ol.x,ol.y,1.2/2],radius:ol.outer_diameter/2,height:qV}),(0,oV.cylinder)({center:[ol.x,ol.y,-1.2/2],radius:ol.outer_diameter/2,height:qV})),(0,oV.cylinder)({center:[ol.x,ol.y,0],radius:ol.hole_diameter/2-qV,height:1.5})));if(ol.shape==="pill"){const wR=ol.hole_height>ol.hole_width,ZU=wR?ol.hole_height:ol.hole_width,EU=wR?ol.hole_width:ol.hole_height,uU=wR?ol.outer_width||ZU+.2:ol.outer_height||EU+.2,yU=EU/2,XZ=Math.abs(ZU-EU),mZ=(0,oV.cuboid)({center:wR?[ol.x,ol.y,0]:[ol.x,ol.y,0],size:wR?[EU,XZ,1.2]:[XZ,EU,1.2]}),QZ=(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,0]:[ol.x-XZ/2,ol.y,0],radius:yU,height:1.2}),ZW=(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,0]:[ol.x+XZ/2,ol.y,0],radius:yU,height:1.2}),JW=(0,oV.cuboid)({center:wR?[ol.x,ol.y,1.2/2]:[ol.x,ol.y,1.2/2],size:wR?[uU,XZ,qV]:[XZ,uU,qV]}),IZ=(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,1.2/2]:[ol.x-XZ/2,ol.y,1.2/2],radius:uU/2,height:qV}),MR=(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,1.2/2]:[ol.x+XZ/2,ol.y,1.2/2],radius:uU/2,height:qV}),WU=(0,oV.cuboid)({center:wR?[ol.x,ol.y,-1.2/2]:[ol.x,ol.y,-1.2/2],size:wR?[uU,XZ,qV]:[XZ,uU,qV]}),MU=(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,-1.2/2]:[ol.x-XZ/2,ol.y,-1.2/2],radius:uU/2,height:qV}),VZ=(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,-1.2/2]:[ol.x+XZ/2,ol.y,-1.2/2],radius:uU/2,height:qV});return(0,DV.colorize)(Il.copper,(0,wV.subtract)((0,wV.union)(mZ,QZ,ZW,JW,IZ,MR,WU,MU,VZ),(0,wV.union)((0,oV.cuboid)({center:[ol.x,ol.y,0],size:wR?[EU-qV,XZ,1.5]:[XZ,EU-qV,1.5]}),(0,oV.cylinder)({center:wR?[ol.x,ol.y-XZ/2,0]:[ol.x-XZ/2,ol.y,0],radius:yU-qV,height:1.5}),(0,oV.cylinder)({center:wR?[ol.x,ol.y+XZ/2,0]:[ol.x+XZ/2,ol.y,0],radius:yU-qV,height:1.5}))))}else throw new Error(`Unsupported plated hole shape: ${ol.shape}`)},dl=requireExtrusions(),LV=requireExpansions(),OV=requireExtrusions(),$V=requirePrimitives(),Cl=requireTransforms(),Zl=ol=>{let vl=0;for(let ZU=0;ZU<ol.length;ZU++){const EU=(ZU+1)%ol.length;vl+=ol[ZU][0]*ol[EU][1],vl-=ol[EU][0]*ol[ZU][1]}return vl/2<=0},gl=(ol,vl=1.2)=>{let wR=ol.map(uU=>[uU.x,uU.y]);Zl(wR)&&(wR=wR.reverse());const ZU=(0,$V.polygon)({points:wR});let EU=(0,OV.extrudeLinear)({height:vl},ZU);return EU=(0,Cl.translate)([0,0,-vl/2],EU),EU},pl=requireText();function ml(ol){var mZ,QZ,ZW,JW;const vl=(0,pl.vectorText)({height:ol.font_size,input:ol.text});vl.forEach(IZ=>{IZ.length===29?(vl.splice(vl.indexOf(IZ),1,IZ.slice(0,15)),vl.splice(vl.indexOf(IZ),0,IZ.slice(14,29))):IZ.length===17&&(vl.splice(vl.indexOf(IZ),1,IZ.slice(0,10)),vl.splice(vl.indexOf(IZ),0,IZ.slice(9,17)))});const wR=vl.flatMap(IZ=>IZ),ZU={minX:Math.min(...wR.map(IZ=>IZ[0])),maxX:Math.max(...wR.map(IZ=>IZ[0])),minY:Math.min(...wR.map(IZ=>IZ[1])),maxY:Math.max(...wR.map(IZ=>IZ[1]))},EU=(ZU.minX+ZU.maxX)/2,uU=(ZU.minY+ZU.maxY)/2;let yU=-EU,XZ=-uU;return(mZ=ol.anchor_alignment)!=null&&mZ.includes("right")?yU=-ZU.maxX:(QZ=ol.anchor_alignment)!=null&&QZ.includes("left")&&(yU=-ZU.minX),(ZW=ol.anchor_alignment)!=null&&ZW.includes("top")?XZ=-ZU.maxY:(JW=ol.anchor_alignment)!=null&&JW.includes("bottom")&&(XZ=-ZU.minY),{textOutlines:vl,xOffset:yU,yOffset:XZ}}var Bl=ol=>{const vl=(0,EV.su)(ol).pcb_board.list()[0];if(!vl)throw new Error("No pcb_board found");const wR=(0,EV.su)(ol).pcb_plated_hole.list(),ZU=(0,EV.su)(ol).pcb_hole.list(),EU=(0,EV.su)(ol).pcb_smtpad.list(),uU=(0,EV.su)(ol).pcb_trace.list(),yU=(0,EV.su)(ol).pcb_via.list(),XZ=(0,EV.su)(ol).pcb_silkscreen_text.list();let mZ;vl.outline&&vl.outline.length>0?mZ=gl(vl.outline,1.2):mZ=(0,AV.cuboid)({size:[vl.width,vl.height,1.2]});const QZ=[],ZW=[],JW=[],IZ=WU=>{if(WU.shape==="circle"){const MU=(0,AV.cylinder)({center:[WU.x,WU.y,0],radius:WU.hole_diameter/2+qV});mZ=(0,HV.subtract)(mZ,MU);const VZ=nl(WU);QZ.push(VZ)}else if(WU.shape==="pill"){const MU=WU.hole_height>WU.hole_width,VZ=MU?WU.hole_height:WU.hole_width,GZ=MU?WU.hole_width:WU.hole_height,$Z=GZ/2,gW=Math.abs(VZ-GZ),iZ=(0,HV.union)((0,AV.cuboid)({center:[WU.x,WU.y,0],size:MU?[GZ,gW,1.5]:[gW,GZ,1.5]}),(0,AV.cylinder)({center:MU?[WU.x,WU.y-gW/2,0]:[WU.x-gW/2,WU.y,0],radius:$Z,height:1.5}),(0,AV.cylinder)({center:MU?[WU.x,WU.y+gW/2,0]:[WU.x+gW/2,WU.y,0],radius:$Z,height:1.5}));mZ=(0,HV.subtract)(mZ,iZ);const KU=nl(WU);QZ.push(KU)}};for(const WU of wR)IZ(WU);for(const WU of ZU)if(WU.hole_shape==="round"||WU.hole_shape==="circle"){const MU=(0,AV.cylinder)({center:[WU.x,WU.y,0],radius:WU.hole_diameter/2+qV});mZ=(0,HV.subtract)(mZ,MU)}for(const WU of EU){const MU=WU.layer==="bottom"?-1:1;if(WU.shape==="rect"){const VZ=(0,pV.colorize)(Il.copper,(0,AV.cuboid)({center:[WU.x,WU.y,MU*1.2/2+MU*qV],size:[WU.width,WU.height,qV]}));ZW.push(VZ)}else if(WU.shape==="circle"){const VZ=(0,pV.colorize)(Il.copper,(0,AV.cylinder)({center:[WU.x,WU.y,MU*1.2/2+MU*qV],radius:WU.radius,height:qV}));ZW.push(VZ)}}for(const{route:WU}of uU){if(WU.length<2)continue;const MU=[];let VZ=[WU[0]],GZ=WU[0].route_type==="wire"?WU[0].layer:"top";for(let $Z=1;$Z<WU.length;$Z++){const gW=WU[$Z];gW.route_type==="via"?(MU.push(VZ),VZ=[gW]):gW.route_type==="wire"&&gW.layer!==GZ?(MU.push(VZ),GZ=gW.layer,VZ=[gW]):VZ.push(gW)}MU.push(VZ);for(const $Z of MU){if($Z.length<2)continue;const gW=(0,AV.line)($Z.map(KZ=>[KZ.x,KZ.y])),iZ=$Z[0].route_type==="via"?$Z[0].to_layer==="top"?1:-1:$Z[0].layer==="top"?1:-1;let KU=(0,MV.translate)([0,0,iZ*1.2/2],(0,dl.extrudeLinear)({height:qV*iZ},(0,LV.expand)({delta:.1,corners:"edge"},gW)));const yZ=yU.map(KZ=>(0,AV.cylinder)({center:[KZ.x,KZ.y,0],radius:KZ.outer_diameter/2,height:5})),dW=wR.filter(KZ=>KZ.shape==="circle").map(KZ=>(0,AV.cylinder)({center:[KZ.x,KZ.y,0],radius:KZ.outer_diameter/2,height:5}));KU=(0,HV.subtract)(KU,...yZ,...dW),KU=(0,pV.colorize)(Il.fr4GreenSolderWithMask,KU),JW.push(KU)}}for(const WU of yU)IZ({x:WU.x,y:WU.y,hole_diameter:WU.hole_diameter,outer_diameter:WU.outer_diameter,shape:"circle",layers:["top","bottom"],type:"pcb_plated_hole",pcb_plated_hole_id:""});const MR=[];for(const WU of XZ){const{textOutlines:MU,xOffset:VZ,yOffset:GZ}=ml(WU);for(let $Z of MU){const gW=$Z.map(EW=>[EW[0]+VZ+WU.anchor_position.x,EW[1]+GZ+WU.anchor_position.y]),iZ=(0,AV.line)(gW),KU=WU.font_size||.25,yZ=Math.min(Math.max(.01,KU*.1),KU*.2),dW=(0,LV.expand)({delta:yZ,corners:"round"},iZ);let KZ=(0,MV.translate)([0,0,.6],(0,dl.extrudeLinear)({height:.012},dW));KZ=(0,pV.colorize)([256,256,256],KZ),MR.push(KZ)}}return mZ=(0,pV.colorize)(Il.fr4Green,mZ),[mZ,...QZ,...ZW,...JW,...MR]},jl=requireReact(),rl=dV(requireStlSerializer());function Pl(ol){return new Promise((vl,wR)=>{const ZU=new FileReader;ZU.onload=()=>{vl(ZU.result)},ZU.onerror=wR,ZU.readAsDataURL(ol)})}var Hl=ol=>{const[vl,wR]=(0,jl.useState)([]),[ZU,EU]=(0,jl.useState)(!0);return(0,jl.useEffect)(()=>{if(!ol)return;(async()=>{EU(!0);const XZ=(Array.isArray(ol)?ol:[ol]).map(async mZ=>{const QZ=rl.default.serialize({binary:!0},[mZ]),ZW=new Blob(QZ);return{stlUrl:await Pl(ZW),color:mZ.color}});try{const mZ=await Promise.all(XZ);wR(mZ)}catch(mZ){console.error("Error generating STLs:",mZ),wR([])}finally{EU(!1)}})()},[ol]),{stls:vl,loading:ZU}},Tl=require$$12,kl=requireReact(),Dl=requireThreeStdlib(),ZR=requireJsxRuntime();function JR({stlUrl:ol,mtlUrl:vl,color:wR,opacity:ZU=1}){const EU=(0,Tl.useLoader)(Dl.STLLoader,ol),uU=(0,kl.useRef)();return(0,ZR.jsxs)("mesh",{ref:uU,children:[(0,ZR.jsx)("primitive",{object:EU,attach:"geometry"}),(0,ZR.jsx)("meshStandardMaterial",{color:wR,transparent:ZU!==1,opacity:ZU})]})}var FR=require$$14,QR=require$$12,hR={name:"@tscircuit/3d-viewer",version:"0.0.94",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.267","@tscircuit/props":"^0.0.129","@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"}},kR=require$$14,AR=require$$12,aR=requireReact(),TR=dV(requireThree()),xR=requireJsxRuntime();typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new TR.Euler(0,0,0));function pR(ol,vl){const wR=new TR.Quaternion().setFromEuler(new TR.Euler(ol.x,ol.y,ol.z)),ZU=new TR.Vector3(0,0,1);return ZU.applyQuaternion(wR),ZU.multiplyScalar(vl)}var UU=({})=>{const ol=(0,aR.useRef)();return(0,aR.useRef)({lastRotation:new TR.Euler}),(0,AR.useFrame)((vl,wR)=>{if(!ol.current)return;const ZU=window.TSCI_MAIN_CAMERA_ROTATION,EU=pR(ZU,2);vl.camera.position.copy(EU),vl.camera.lookAt(0,0,0)}),(0,xR.jsxs)("mesh",{ref:ol,rotation:[Math.PI/2,0,0],children:[(0,xR.jsx)("boxGeometry",{args:[1,1,1]}),(0,xR.jsx)("meshStandardMaterial",{color:"white"}),(0,xR.jsx)(kR.Text,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),(0,xR.jsx)(kR.Text,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),(0,xR.jsx)(kR.Text,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),(0,xR.jsx)(kR.Text,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),(0,xR.jsx)(kR.Text,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),(0,xR.jsx)(kR.Text,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),(0,xR.jsx)("lineSegments",{args:[new TR.EdgesGeometry(new TR.BoxGeometry(1,1,1))],material:new TR.LineBasicMaterial({color:0,linewidth:2})})]})},SU=requireReact(),xU=require$$14,DR=requireJsxRuntime(),BR=()=>((0,QR.useFrame)(({camera:ol})=>{window.TSCI_MAIN_CAMERA_ROTATION=ol.rotation}),(0,DR.jsx)(DR.Fragment,{})),CU=(0,SU.forwardRef)(({children:ol,hoveredComponent:vl},wR)=>(0,DR.jsxs)("div",{style:{position:"relative",width:"100%",height:"100%"},children:[(0,DR.jsx)("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:(0,DR.jsxs)(QR.Canvas,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[(0,DR.jsx)("ambientLight",{intensity:Math.PI/2}),(0,DR.jsx)(UU,{})]})}),(0,DR.jsxs)(QR.Canvas,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:[5,5,5]},children:[(0,DR.jsx)(BR,{}),(0,DR.jsx)(FR.OrbitControls,{autoRotate:!0,autoRotateSpeed:1}),(0,DR.jsx)("ambientLight",{intensity:Math.PI/2}),(0,DR.jsx)("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),(0,DR.jsx)(FR.Grid,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:10}),(0,DR.jsx)("object3D",{ref:wR,children:ol}),vl&&(0,DR.jsx)(xU.Html,{position:vl.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:vl.name})]}),(0,DR.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:["@",hR.version]})]})),bR=requireReact(),VR=dV(requireThree()),mR=requireJsxRuntime(),YR=ol=>(0,mR.jsx)("group",{...ol}),iR=({children:ol,isHovered:vl,onHover:wR,position:ZU})=>{const EU=(0,bR.useRef)(null),uU=(0,bR.useCallback)(XZ=>{XZ.stopPropagation();try{const mZ=XZ.point||(XZ.intersections&&XZ.intersections.length>0?XZ.intersections[0].point:null)||(ZU?new VR.Vector3(...ZU):null);mZ?(EU.current=mZ,wR({mousePosition:[mZ.x,mZ.y,mZ.z]})):wR({})}catch(mZ){console.warn("Hover event error:",mZ),wR({})}},[ZU]),yU=(0,bR.useCallback)(XZ=>{XZ.stopPropagation(),EU.current=null,wR(null)},[wR]);return(0,mR.jsx)(YR,{onPointerEnter:uU,onPointerMove:uU,onPointerLeave:yU,children:ol})},$R=iR,lU=requireReact(),hU=requireThreeStdlib();typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function GR(ol){const[vl,wR]=(0,lU.useState)(null);return(0,lU.useEffect)(()=>{if(!ol)return;const ZU=window.TSCIRCUIT_OBJ_LOADER_CACHE;let EU=!1;async function uU(){var XZ;try{const QZ=await(await fetch(ol)).text(),ZW=(XZ=QZ.match(/newmtl[\s\S]*?endmtl/g))==null?void 0:XZ.join(`
22049
22049
  `).replace(/d 0\./g,"d 1."),JW=QZ.replace(/newmtl[\s\S]*?endmtl/g,""),IZ=new hU.MTLLoader;IZ.setMaterialOptions({invertTrProperty:!0});const MR=IZ.parse(ZW.replace(/Kd\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/g,"Kd $2 $2 $2"),"test.mtl"),WU=new hU.OBJLoader;return WU.setMaterials(MR),WU.parse(JW)}catch(mZ){return mZ}}function yU(){if(ZU.has(ol)){const mZ=ZU.get(ol);return mZ.result?Promise.resolve(mZ.result.clone()):mZ.promise.then(QZ=>QZ.clone())}const XZ=uU().then(mZ=>(mZ instanceof Error||ZU.set(ol,{...ZU.get(ol),result:mZ}),mZ));return ZU.set(ol,{promise:XZ,result:null}),XZ}return yU().then(XZ=>{EU||wR(XZ)}).catch(XZ=>{console.error(XZ)}),()=>{EU=!0}},[ol]),vl}var IU=requireJsxRuntime();function FU({url:ol,position:vl,rotation:wR,onHover:ZU,isHovered:EU}){const uU=GR(ol);return uU?uU instanceof Error?(0,IU.jsx)($R,{isHovered:EU,onHover:ZU,children:(0,IU.jsxs)("mesh",{position:vl,children:[(0,IU.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,IU.jsx)("meshStandardMaterial",{transparent:!0,color:"red",opacity:.5}),(0,IU.jsx)("meshBasicMaterial",{color:"red"})]})}):(0,IU.jsx)($R,{isHovered:EU,onHover:ZU,children:(0,IU.jsx)("primitive",{rotation:wR,position:vl,object:uU})}):(0,IU.jsx)($R,{isHovered:EU,onHover:ZU,children:(0,IU.jsxs)("mesh",{position:vl,children:[(0,IU.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,IU.jsx)("meshStandardMaterial",{transparent:!0,color:"red",opacity:.25})]})})}var PU=requireDist$5(),hZ=dV(requireSrc$1()),zZ=requireDist$4(),jZ=dV(requireThree()),DZ=requireReact(),kW=requireJsxRuntime(),fU=({jscadPlan:ol,positionOffset:vl,rotationOffset:wR,onHover:ZU,isHovered:EU})=>{const{threeGeom:uU,material:yU}=(0,DZ.useMemo)(()=>{const XZ=(0,PU.executeJscadOperations)(hZ.default,ol),mZ=(0,zZ.convertCSGToThreeGeom)(XZ),QZ=new jZ.MeshStandardMaterial({vertexColors:!0,side:jZ.DoubleSide});return{threeGeom:mZ,material:QZ}},[ol]);return(0,DZ.useMemo)(()=>{if(EU){const XZ=new jZ.Color(yU.color.getHex());yU.emissive.copy(XZ),yU.emissive.setRGB(0,0,1),yU.emissiveIntensity=.2}else yU.emissiveIntensity=0},[EU,yU]),uU?(0,kW.jsx)($R,{isHovered:EU,onHover:ZU,position:vl,children:(0,kW.jsx)("mesh",{geometry:uU,material:yU,position:vl,rotation:wR})}):null},nW=require$$19,NW=requireDist$4(),cW=requireDist$5(),DW=requireReact(),HW=requireJsxRuntime(),{createJSCADRoot:FZ}=(0,NW.createJSCADRenderer)(cW.jscadPlanner),CW=({positionOffset:ol,footprint:vl,rotationOffset:wR,onHover:ZU,isHovered:EU})=>{const uU=(0,DW.useMemo)(()=>{if(!vl)return null;const yU=[];return FZ(yU).render((0,HW.jsx)(nW.Footprinter3d,{footprint:vl})),yU},[vl]);return uU?(0,HW.jsx)(HW.Fragment,{children:uU.map((yU,XZ)=>(0,HW.jsx)(fU,{positionOffset:ol,rotationOffset:wR,jscadPlan:yU,onHover:ZU,isHovered:EU},XZ))}):null},eW=(...ol)=>ol,TW=requireJsxRuntime(),pW=({cad_component:ol,onHover:vl=()=>{},isHovered:wR=!1})=>{const ZU=ol.model_obj_url??ol.model_stl_url,EU=ol.rotation?eW(ol.rotation.x*Math.PI/180,ol.rotation.y*Math.PI/180,ol.rotation.z*Math.PI/180):void 0;if(ZU)return(0,TW.jsx)(FU,{url:ZU,position:ol.position?[ol.position.x,ol.position.y,ol.position.z]:void 0,rotation:EU,onHover:vl,isHovered:wR},ol.cad_component_id);if(ol.model_jscad)return(0,TW.jsx)(fU,{jscadPlan:ol.model_jscad,rotationOffset:EU,onHover:vl,isHovered:wR},ol.cad_component_id);if(ol.footprinter_string)return(0,TW.jsx)(CW,{positionOffset:ol.position?[ol.position.x,ol.position.y,ol.position.z]:void 0,rotationOffset:EU,footprint:ol.footprinter_string,onHover:vl,isHovered:wR})},lZ=dV(requireReact()),wU=class extends lZ.default.Component{constructor(ol){super(ol),this.state={hasError:!1,error:null}}static getDerivedStateFromError(ol){return{hasError:!0,error:ol}}render(){return this.state.hasError&&this.state.error?this.props.fallback({error:this.state.error}):this.props.children}},LR=require$$14,TU=requireJsxRuntime(),vR=({error:ol,cad_component:vl})=>{let wR=[0,0,0];return vl!=null&&vl.position&&(wR=[vl.position.x,vl.position.y,vl.position.z],wR=wR.map(ZU=>Number.isNaN(ZU)?0:ZU)),(0,TU.jsxs)("group",{position:wR,children:[(0,TU.jsxs)("mesh",{renderOrder:-99999,rotation:[Math.PI/4,Math.PI/4,0],ref:ZU=>{ZU&&(ZU.renderOrder=999999)},children:[(0,TU.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,TU.jsx)("meshStandardMaterial",{depthTest:!1,transparent:!0,color:"red",opacity:.5})]}),(0,TU.jsxs)(LR.Text,{scale:[.1,.1,.1],color:"red",anchorX:"center",anchorY:"middle",depthOffset:-99999,children:[ol.toString().slice(0,50),"..."]})]})},DU=requireJsxRuntime(),$U=(0,iV.forwardRef)(({soup:ol,children:vl},wR)=>{const[ZU,EU]=(0,iV.useState)(null);if(ol??(ol=cV(vl)),!ol)return null;const uU=(0,iV.useMemo)(()=>ol.some(QZ=>QZ.type==="pcb_board")?Bl(ol):null,[ol]),{stls:yU,loading:XZ}=Hl(uU),mZ=(0,TV.su)(ol).cad_component.list();return(0,DU.jsxs)(CU,{ref:wR,hoveredComponent:ZU,children:[yU.map(({stlUrl:QZ,color:ZW},JW)=>(0,DU.jsx)(JR,{stlUrl:QZ,color:ZW,opacity:JW===0?.95:1},QZ)),mZ.map(QZ=>(0,DU.jsx)(wU,{fallback:({error:ZW})=>(0,DU.jsx)(vR,{cad_component:QZ,error:ZW}),children:(0,DU.jsx)(pW,{onHover:ZW=>{var IZ;if(ZW||EU(null),!ZW.mousePosition)return;const JW=(IZ=(0,TV.su)(ol).source_component.getUsing({source_component_id:QZ.source_component_id}))==null?void 0:IZ.name;EU({cad_component_id:QZ.cad_component_id,name:JW??"<unknown>",mousePosition:ZW.mousePosition})},cad_component:QZ,isHovered:(ZU==null?void 0:ZU.cad_component_id)===QZ.cad_component_id},QZ.cad_component_id)},QZ.cad_component_id))]})});return dist$3}var distExports$2=requireDist$2();const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$3=getAugmentedNamespace(__viteBrowserExternal$1),{useDebugValue}=React,{useSyncExternalStoreWithSelector}=useSyncExternalStoreExports;let didWarnAboutEqualityFn=!1;const identity=lV=>lV;function useStore(lV,J=identity,VV){process.env.NODE_ENV!=="production"&&VV&&!didWarnAboutEqualityFn&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),didWarnAboutEqualityFn=!0);const RV=useSyncExternalStoreWithSelector(lV.subscribe,lV.getState,lV.getServerState||lV.getInitialState,J,VV);return useDebugValue(RV),RV}const createImpl=lV=>{process.env.NODE_ENV!=="production"&&typeof lV!="function"&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const J=typeof lV=="function"?createStore(lV):lV,VV=(RV,UV)=>useStore(J,RV,UV);return Object.assign(VV,J),VV},create=lV=>lV?createImpl(lV):createImpl;var react=lV=>(process.env.NODE_ENV!=="production"&&console.warn("[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'`."),create(lV));const esm=Object.freeze(Object.defineProperty({__proto__:null,create,createStore,default:react,useStore},Symbol.toStringTag,{value:"Module"})),require$$4=getAugmentedNamespace(esm);var reactToastify={},clsx={exports:{}},hasRequiredClsx;function requireClsx(){if(hasRequiredClsx)return clsx.exports;hasRequiredClsx=1;function lV(VV){var RV,UV,ZV="";if(typeof VV=="string"||typeof VV=="number")ZV+=VV;else if(typeof VV=="object")if(Array.isArray(VV)){var WV=VV.length;for(RV=0;RV<WV;RV++)VV[RV]&&(UV=lV(VV[RV]))&&(ZV&&(ZV+=" "),ZV+=UV)}else for(UV in VV)VV[UV]&&(ZV&&(ZV+=" "),ZV+=UV);return ZV}function J(){for(var VV,RV,UV=0,ZV="",WV=arguments.length;UV<WV;UV++)(VV=arguments[UV])&&(RV=lV(VV))&&(ZV&&(ZV+=" "),ZV+=RV);return ZV}return clsx.exports=J,clsx.exports.clsx=J,clsx.exports}var hasRequiredReactToastify;function requireReactToastify(){if(hasRequiredReactToastify)return reactToastify;hasRequiredReactToastify=1;var lV=requireReact(),J=requireClsx();function VV(Bl){return Bl&&typeof Bl=="object"&&"default"in Bl?Bl:{default:Bl}}var RV=VV(lV),UV=VV(J);const ZV=Bl=>typeof Bl=="number"&&!isNaN(Bl),WV=Bl=>typeof Bl=="string",IV=Bl=>typeof Bl=="function",dV=Bl=>WV(Bl)||IV(Bl)?Bl:null,CV=Bl=>lV.isValidElement(Bl)||WV(Bl)||IV(Bl)||ZV(Bl);function FV(Bl,jl,rl){rl===void 0&&(rl=300);const{scrollHeight:Pl,style:Hl}=Bl;requestAnimationFrame(()=>{Hl.minHeight="initial",Hl.height=Pl+"px",Hl.transition=`all ${rl}ms`,requestAnimationFrame(()=>{Hl.height="0",Hl.padding="0",Hl.margin="0",setTimeout(jl,rl)})})}function NV(Bl){let{enter:jl,exit:rl,appendPosition:Pl=!1,collapse:Hl=!0,collapseDuration:Tl=300}=Bl;return function(kl){let{children:Dl,position:ZR,preventExitTransition:JR,done:FR,nodeRef:QR,isIn:hR,playToast:kR}=kl;const AR=Pl?`${jl}--${ZR}`:jl,aR=Pl?`${rl}--${ZR}`:rl,TR=lV.useRef(0);return lV.useLayoutEffect(()=>{const xR=QR.current,pR=AR.split(" "),UU=SU=>{SU.target===QR.current&&(kR(),xR.removeEventListener("animationend",UU),xR.removeEventListener("animationcancel",UU),TR.current===0&&SU.type!=="animationcancel"&&xR.classList.remove(...pR))};xR.classList.add(...pR),xR.addEventListener("animationend",UU),xR.addEventListener("animationcancel",UU)},[]),lV.useEffect(()=>{const xR=QR.current,pR=()=>{xR.removeEventListener("animationend",pR),Hl?FV(xR,FR,Tl):FR()};hR||(JR?pR():(TR.current=1,xR.className+=` ${aR}`,xR.addEventListener("animationend",pR)))},[hR]),RV.default.createElement(RV.default.Fragment,null,Dl)}}function eV(Bl,jl){return Bl!=null?{content:Bl.content,containerId:Bl.props.containerId,id:Bl.props.toastId,theme:Bl.props.theme,type:Bl.props.type,data:Bl.props.data||{},isLoading:Bl.props.isLoading,icon:Bl.props.icon,status:jl}:{}}const gV=new Map;let JV=[];const nV=new Set,aV=Bl=>nV.forEach(jl=>jl(Bl)),GV=()=>gV.size>0;function cV(Bl,jl){var rl;if(jl)return!((rl=gV.get(jl))==null||!rl.isToastActive(Bl));let Pl=!1;return gV.forEach(Hl=>{Hl.isToastActive(Bl)&&(Pl=!0)}),Pl}function TV(Bl,jl){CV(Bl)&&(GV()||JV.push({content:Bl,options:jl}),gV.forEach(rl=>{rl.buildToast(Bl,jl)}))}function iV(Bl,jl){gV.forEach(rl=>{jl!=null&&jl!=null&&jl.containerId?(jl==null?void 0:jl.containerId)===rl.id&&rl.toggle(Bl,jl==null?void 0:jl.id):rl.toggle(Bl,jl==null?void 0:jl.id)})}function EV(Bl){const{subscribe:jl,getSnapshot:rl,setProps:Pl}=lV.useRef(function(Tl){const kl=Tl.containerId||1;return{subscribe(Dl){const ZR=function(FR,QR,hR){let kR=1,AR=0,aR=[],TR=[],xR=[],pR=QR;const UU=new Map,SU=new Set,xU=()=>{xR=Array.from(UU.values()),SU.forEach(CU=>CU())},DR=CU=>{TR=CU==null?[]:TR.filter(bR=>bR!==CU),xU()},BR=CU=>{const{toastId:bR,onOpen:VR,updateId:mR,children:YR}=CU.props,iR=mR==null;CU.staleId&&UU.delete(CU.staleId),UU.set(bR,CU),TR=[...TR,CU.props.toastId].filter($R=>$R!==CU.staleId),xU(),hR(eV(CU,iR?"added":"updated")),iR&&IV(VR)&&VR(lV.isValidElement(YR)&&YR.props)};return{id:FR,props:pR,observe:CU=>(SU.add(CU),()=>SU.delete(CU)),toggle:(CU,bR)=>{UU.forEach(VR=>{bR!=null&&bR!==VR.props.toastId||IV(VR.toggle)&&VR.toggle(CU)})},removeToast:DR,toasts:UU,clearQueue:()=>{AR-=aR.length,aR=[]},buildToast:(CU,bR)=>{if((zZ=>{let{containerId:jZ,toastId:DZ,updateId:kW}=zZ;const fU=jZ?jZ!==FR:FR!==1,nW=UU.has(DZ)&&kW==null;return fU||nW})(bR))return;const{toastId:VR,updateId:mR,data:YR,staleId:iR,delay:$R}=bR,lU=()=>{DR(VR)},hU=mR==null;hU&&AR++;const GR={...pR,style:pR.toastStyle,key:kR++,...Object.fromEntries(Object.entries(bR).filter(zZ=>{let[jZ,DZ]=zZ;return DZ!=null})),toastId:VR,updateId:mR,data:YR,closeToast:lU,isIn:!1,className:dV(bR.className||pR.toastClassName),bodyClassName:dV(bR.bodyClassName||pR.bodyClassName),progressClassName:dV(bR.progressClassName||pR.progressClassName),autoClose:!bR.isLoading&&(IU=bR.autoClose,FU=pR.autoClose,IU===!1||ZV(IU)&&IU>0?IU:FU),deleteToast(){const zZ=UU.get(VR),{onClose:jZ,children:DZ}=zZ.props;IV(jZ)&&jZ(lV.isValidElement(DZ)&&DZ.props),hR(eV(zZ,"removed")),UU.delete(VR),AR--,AR<0&&(AR=0),aR.length>0?BR(aR.shift()):xU()}};var IU,FU;GR.closeButton=pR.closeButton,bR.closeButton===!1||CV(bR.closeButton)?GR.closeButton=bR.closeButton:bR.closeButton===!0&&(GR.closeButton=!CV(pR.closeButton)||pR.closeButton);let PU=CU;lV.isValidElement(CU)&&!WV(CU.type)?PU=lV.cloneElement(CU,{closeToast:lU,toastProps:GR,data:YR}):IV(CU)&&(PU=CU({closeToast:lU,toastProps:GR,data:YR}));const hZ={content:PU,props:GR,staleId:iR};pR.limit&&pR.limit>0&&AR>pR.limit&&hU?aR.push(hZ):ZV($R)?setTimeout(()=>{BR(hZ)},$R):BR(hZ)},setProps(CU){pR=CU},setToggle:(CU,bR)=>{UU.get(CU).toggle=bR},isToastActive:CU=>TR.some(bR=>bR===CU),getSnapshot:()=>xR}}(kl,Tl,aV);gV.set(kl,ZR);const JR=ZR.observe(Dl);return JV.forEach(FR=>TV(FR.content,FR.options)),JV=[],()=>{JR(),gV.delete(kl)}},setProps(Dl){var ZR;(ZR=gV.get(kl))==null||ZR.setProps(Dl)},getSnapshot(){var Dl;return(Dl=gV.get(kl))==null?void 0:Dl.getSnapshot()}}}(Bl)).current;Pl(Bl);const Hl=lV.useSyncExternalStore(jl,rl,rl);return{getToastToRender:function(Tl){if(!Hl)return[];const kl=new Map;return Bl.newestOnTop&&Hl.reverse(),Hl.forEach(Dl=>{const{position:ZR}=Dl.props;kl.has(ZR)||kl.set(ZR,[]),kl.get(ZR).push(Dl)}),Array.from(kl,Dl=>Tl(Dl[0],Dl[1]))},isToastActive:cV,count:Hl==null?void 0:Hl.length}}function MV(Bl){const[jl,rl]=lV.useState(!1),[Pl,Hl]=lV.useState(!1),Tl=lV.useRef(null),kl=lV.useRef({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:Dl,pauseOnHover:ZR,closeToast:JR,onClick:FR,closeOnClick:QR}=Bl;var hR,kR;function AR(){rl(!0)}function aR(){rl(!1)}function TR(UU){const SU=Tl.current;kl.canDrag&&SU&&(kl.didMove=!0,jl&&aR(),kl.delta=Bl.draggableDirection==="x"?UU.clientX-kl.start:UU.clientY-kl.start,kl.start!==UU.clientX&&(kl.canCloseOnClick=!1),SU.style.transform=`translate3d(${Bl.draggableDirection==="x"?`${kl.delta}px, var(--y)`:`0, calc(${kl.delta}px + var(--y))`},0)`,SU.style.opacity=""+(1-Math.abs(kl.delta/kl.removalDistance)))}function xR(){document.removeEventListener("pointermove",TR),document.removeEventListener("pointerup",xR);const UU=Tl.current;if(kl.canDrag&&kl.didMove&&UU){if(kl.canDrag=!1,Math.abs(kl.delta)>kl.removalDistance)return Hl(!0),Bl.closeToast(),void Bl.collapseAll();UU.style.transition="transform 0.2s, opacity 0.2s",UU.style.removeProperty("transform"),UU.style.removeProperty("opacity")}}(kR=gV.get((hR={id:Bl.toastId,containerId:Bl.containerId,fn:rl}).containerId||1))==null||kR.setToggle(hR.id,hR.fn),lV.useEffect(()=>{if(Bl.pauseOnFocusLoss)return document.hasFocus()||aR(),window.addEventListener("focus",AR),window.addEventListener("blur",aR),()=>{window.removeEventListener("focus",AR),window.removeEventListener("blur",aR)}},[Bl.pauseOnFocusLoss]);const pR={onPointerDown:function(UU){if(Bl.draggable===!0||Bl.draggable===UU.pointerType){kl.didMove=!1,document.addEventListener("pointermove",TR),document.addEventListener("pointerup",xR);const SU=Tl.current;kl.canCloseOnClick=!0,kl.canDrag=!0,SU.style.transition="none",Bl.draggableDirection==="x"?(kl.start=UU.clientX,kl.removalDistance=SU.offsetWidth*(Bl.draggablePercent/100)):(kl.start=UU.clientY,kl.removalDistance=SU.offsetHeight*(Bl.draggablePercent===80?1.5*Bl.draggablePercent:Bl.draggablePercent)/100)}},onPointerUp:function(UU){const{top:SU,bottom:xU,left:DR,right:BR}=Tl.current.getBoundingClientRect();UU.nativeEvent.type!=="touchend"&&Bl.pauseOnHover&&UU.clientX>=DR&&UU.clientX<=BR&&UU.clientY>=SU&&UU.clientY<=xU?aR():AR()}};return Dl&&ZR&&(pR.onMouseEnter=aR,Bl.stacked||(pR.onMouseLeave=AR)),QR&&(pR.onClick=UU=>{FR&&FR(UU),kl.canCloseOnClick&&JR()}),{playToast:AR,pauseToast:aR,isRunning:jl,preventExitTransition:Pl,toastRef:Tl,eventHandlers:pR}}function AV(Bl){let{delay:jl,isRunning:rl,closeToast:Pl,type:Hl="default",hide:Tl,className:kl,style:Dl,controlledProgress:ZR,progress:JR,rtl:FR,isIn:QR,theme:hR}=Bl;const kR=Tl||ZR&&JR===0,AR={...Dl,animationDuration:`${jl}ms`,animationPlayState:rl?"running":"paused"};ZR&&(AR.transform=`scaleX(${JR})`);const aR=UV.default("Toastify__progress-bar",ZR?"Toastify__progress-bar--controlled":"Toastify__progress-bar--animated",`Toastify__progress-bar-theme--${hR}`,`Toastify__progress-bar--${Hl}`,{"Toastify__progress-bar--rtl":FR}),TR=IV(kl)?kl({rtl:FR,type:Hl,defaultClassName:aR}):UV.default(aR,kl),xR={[ZR&&JR>=1?"onTransitionEnd":"onAnimationEnd"]:ZR&&JR<1?null:()=>{QR&&Pl()}};return RV.default.createElement("div",{className:"Toastify__progress-bar--wrp","data-hidden":kR},RV.default.createElement("div",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${hR} Toastify__progress-bar--${Hl}`}),RV.default.createElement("div",{role:"progressbar","aria-hidden":kR?"true":"false","aria-label":"notification timer",className:TR,style:AR,...xR}))}let pV=1;const HV=()=>""+pV++;function oV(Bl){return Bl&&(WV(Bl.toastId)||ZV(Bl.toastId))?Bl.toastId:HV()}function DV(Bl,jl){return TV(Bl,jl),jl.toastId}function wV(Bl,jl){return{...jl,type:jl&&jl.type||Bl,toastId:oV(jl)}}function qV(Bl){return(jl,rl)=>DV(jl,wV(Bl,rl))}function Il(Bl,jl){return DV(Bl,wV("default",jl))}Il.loading=(Bl,jl)=>DV(Bl,wV("default",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...jl})),Il.promise=function(Bl,jl,rl){let Pl,{pending:Hl,error:Tl,success:kl}=jl;Hl&&(Pl=WV(Hl)?Il.loading(Hl,rl):Il.loading(Hl.render,{...rl,...Hl}));const Dl={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},ZR=(FR,QR,hR)=>{if(QR==null)return void Il.dismiss(Pl);const kR={type:FR,...Dl,...rl,data:hR},AR=WV(QR)?{render:QR}:QR;return Pl?Il.update(Pl,{...kR,...AR}):Il(AR.render,{...kR,...AR}),hR},JR=IV(Bl)?Bl():Bl;return JR.then(FR=>ZR("success",kl,FR)).catch(FR=>ZR("error",Tl,FR)),JR},Il.success=qV("success"),Il.info=qV("info"),Il.error=qV("error"),Il.warning=qV("warning"),Il.warn=Il.warning,Il.dark=(Bl,jl)=>DV(Bl,wV("default",{theme:"dark",...jl})),Il.dismiss=function(Bl){(function(jl){var rl;if(GV()){if(jl==null||WV(rl=jl)||ZV(rl))gV.forEach(Pl=>{Pl.removeToast(jl)});else if(jl&&("containerId"in jl||"id"in jl)){const Pl=gV.get(jl.containerId);Pl?Pl.removeToast(jl.id):gV.forEach(Hl=>{Hl.removeToast(jl.id)})}}else JV=JV.filter(Pl=>jl!=null&&Pl.options.toastId!==jl)})(Bl)},Il.clearWaitingQueue=function(Bl){Bl===void 0&&(Bl={}),gV.forEach(jl=>{!jl.props.limit||Bl.containerId&&jl.id!==Bl.containerId||jl.clearQueue()})},Il.isActive=cV,Il.update=function(Bl,jl){jl===void 0&&(jl={});const rl=((Pl,Hl)=>{var Tl;let{containerId:kl}=Hl;return(Tl=gV.get(kl||1))==null?void 0:Tl.toasts.get(Pl)})(Bl,jl);if(rl){const{props:Pl,content:Hl}=rl,Tl={delay:100,...Pl,...jl,toastId:jl.toastId||Bl,updateId:HV()};Tl.toastId!==Bl&&(Tl.staleId=Bl);const kl=Tl.render||Hl;delete Tl.render,DV(kl,Tl)}},Il.done=Bl=>{Il.update(Bl,{progress:1})},Il.onChange=function(Bl){return nV.add(Bl),()=>{nV.delete(Bl)}},Il.play=Bl=>iV(!0,Bl),Il.pause=Bl=>iV(!1,Bl);const nl=typeof window<"u"?lV.useLayoutEffect:lV.useEffect,dl=Bl=>{let{theme:jl,type:rl,isLoading:Pl,...Hl}=Bl;return RV.default.createElement("svg",{viewBox:"0 0 24 24",width:"100%",height:"100%",fill:jl==="colored"?"currentColor":`var(--toastify-icon-color-${rl})`,...Hl})},LV={info:function(Bl){return RV.default.createElement(dl,{...Bl},RV.default.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(Bl){return RV.default.createElement(dl,{...Bl},RV.default.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(Bl){return RV.default.createElement(dl,{...Bl},RV.default.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(Bl){return RV.default.createElement(dl,{...Bl},RV.default.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 RV.default.createElement("div",{className:"Toastify__spinner"})}},OV=Bl=>{const{isRunning:jl,preventExitTransition:rl,toastRef:Pl,eventHandlers:Hl,playToast:Tl}=MV(Bl),{closeButton:kl,children:Dl,autoClose:ZR,onClick:JR,type:FR,hideProgressBar:QR,closeToast:hR,transition:kR,position:AR,className:aR,style:TR,bodyClassName:xR,bodyStyle:pR,progressClassName:UU,progressStyle:SU,updateId:xU,role:DR,progress:BR,rtl:CU,toastId:bR,deleteToast:VR,isIn:mR,isLoading:YR,closeOnClick:iR,theme:$R}=Bl,lU=UV.default("Toastify__toast",`Toastify__toast-theme--${$R}`,`Toastify__toast--${FR}`,{"Toastify__toast--rtl":CU},{"Toastify__toast--close-on-click":iR}),hU=IV(aR)?aR({rtl:CU,position:AR,type:FR,defaultClassName:lU}):UV.default(lU,aR),GR=function(hZ){let{theme:zZ,type:jZ,isLoading:DZ,icon:kW}=hZ,fU=null;const nW={theme:zZ,type:jZ};return kW===!1||(IV(kW)?fU=kW({...nW,isLoading:DZ}):lV.isValidElement(kW)?fU=lV.cloneElement(kW,nW):DZ?fU=LV.spinner():(NW=>NW in LV)(jZ)&&(fU=LV[jZ](nW))),fU}(Bl),IU=!!BR||!ZR,FU={closeToast:hR,type:FR,theme:$R};let PU=null;return kl===!1||(PU=IV(kl)?kl(FU):lV.isValidElement(kl)?lV.cloneElement(kl,FU):function(hZ){let{closeToast:zZ,theme:jZ,ariaLabel:DZ="close"}=hZ;return RV.default.createElement("button",{className:`Toastify__close-button Toastify__close-button--${jZ}`,type:"button",onClick:kW=>{kW.stopPropagation(),zZ(kW)},"aria-label":DZ},RV.default.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 14 16"},RV.default.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"})))}(FU)),RV.default.createElement(kR,{isIn:mR,done:VR,position:AR,preventExitTransition:rl,nodeRef:Pl,playToast:Tl},RV.default.createElement("div",{id:bR,onClick:JR,"data-in":mR,className:hU,...Hl,style:TR,ref:Pl},RV.default.createElement("div",{...mR&&{role:DR},className:IV(xR)?xR({type:FR}):UV.default("Toastify__toast-body",xR),style:pR},GR!=null&&RV.default.createElement("div",{className:UV.default("Toastify__toast-icon",{"Toastify--animate-icon Toastify__zoom-enter":!YR})},GR),RV.default.createElement("div",null,Dl)),PU,RV.default.createElement(AV,{...xU&&!IU?{key:`pb-${xU}`}:{},rtl:CU,theme:$R,delay:ZR,isRunning:jl,isIn:mR,closeToast:hR,hide:QR,type:FR,style:SU,className:UU,controlledProgress:IU,progress:BR||0})))},$V=function(Bl,jl){return jl===void 0&&(jl=!1),{enter:`Toastify--animate Toastify__${Bl}-enter`,exit:`Toastify--animate Toastify__${Bl}-exit`,appendPosition:jl}},Cl=NV($V("bounce",!0)),Zl=NV($V("slide",!0)),gl=NV($V("zoom")),pl=NV($V("flip")),ml={position:"top-right",transition:Cl,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:"touch",draggablePercent:80,draggableDirection:"x",role:"alert",theme:"light"};return reactToastify.Bounce=Cl,reactToastify.Flip=pl,reactToastify.Icons=LV,reactToastify.Slide=Zl,reactToastify.ToastContainer=function(Bl){let jl={...ml,...Bl};const rl=Bl.stacked,[Pl,Hl]=lV.useState(!0),Tl=lV.useRef(null),{getToastToRender:kl,isToastActive:Dl,count:ZR}=EV(jl),{className:JR,style:FR,rtl:QR,containerId:hR}=jl;function kR(aR){const TR=UV.default("Toastify__toast-container",`Toastify__toast-container--${aR}`,{"Toastify__toast-container--rtl":QR});return IV(JR)?JR({position:aR,rtl:QR,defaultClassName:TR}):UV.default(TR,dV(JR))}function AR(){rl&&(Hl(!0),Il.play())}return nl(()=>{if(rl){var aR;const TR=Tl.current.querySelectorAll('[data-in="true"]'),xR=12,pR=(aR=jl.position)==null?void 0:aR.includes("top");let UU=0,SU=0;Array.from(TR).reverse().forEach((xU,DR)=>{const BR=xU;BR.classList.add("Toastify__toast--stacked"),DR>0&&(BR.dataset.collapsed=`${Pl}`),BR.dataset.pos||(BR.dataset.pos=pR?"top":"bot");const CU=UU*(Pl?.2:1)+(Pl?0:xR*DR);BR.style.setProperty("--y",`${pR?CU:-1*CU}px`),BR.style.setProperty("--g",`${xR}`),BR.style.setProperty("--s",""+(1-(Pl?SU:0))),UU+=BR.offsetHeight,SU+=.025})}},[Pl,ZR,rl]),RV.default.createElement("div",{ref:Tl,className:"Toastify",id:hR,onMouseEnter:()=>{rl&&(Hl(!1),Il.pause())},onMouseLeave:AR},kl((aR,TR)=>{const xR=TR.length?{...FR}:{...FR,pointerEvents:"none"};return RV.default.createElement("div",{className:kR(aR),style:xR,key:`container-${aR}`},TR.map(pR=>{let{content:UU,props:SU}=pR;return RV.default.createElement(OV,{...SU,stacked:rl,collapseAll:AR,isIn:Dl(SU.toastId,SU.containerId),style:SU.style,key:`toast-${SU.key}`},UU)}))}))},reactToastify.Zoom=gl,reactToastify.collapseToast=FV,reactToastify.cssTransition=NV,reactToastify.toast=Il,reactToastify.useToast=MV,reactToastify.useToastContainer=EV,reactToastify}var injectStyle={},hasRequiredInjectStyle;function requireInjectStyle(){if(hasRequiredInjectStyle)return injectStyle;hasRequiredInjectStyle=1,Object.defineProperty(injectStyle,"__esModule",{value:!0}),injectStyle.injectStyle=lV;function lV(){var J=':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)}}',VV=document.createElement("style");VV.innerText=J,document.head.appendChild(VV)}return injectStyle}var SuperGrid_1,hasRequiredSuperGrid;function requireSuperGrid(){if(hasRequiredSuperGrid)return SuperGrid_1;hasRequiredSuperGrid=1;var lV=Object.defineProperty,J=Object.getOwnPropertyDescriptor,VV=Object.getOwnPropertyNames,RV=Object.prototype.hasOwnProperty,UV=(aV,GV)=>{for(var cV in GV)lV(aV,cV,{get:GV[cV],enumerable:!0})},ZV=(aV,GV,cV,TV)=>{if(GV&&typeof GV=="object"||typeof GV=="function")for(let iV of VV(GV))!RV.call(aV,iV)&&iV!==cV&&lV(aV,iV,{get:()=>GV[iV],enumerable:!(TV=J(GV,iV))||TV.enumerable});return aV},WV=aV=>ZV(lV({},"__esModule",{value:!0}),aV),IV={};UV(IV,{SuperGrid:()=>nV,toMMSI:()=>JV,toMeterSI:()=>gV}),SuperGrid_1=WV(IV);var dV=requireReact(),CV=require$$0,FV=requireJsxRuntime(),NV=(aV,GV,cV)=>{const TV=[];if(GV<aV)for(let iV=aV;iV>=GV;iV-=Math.abs(cV))TV.push(iV);else for(let iV=aV;iV<=GV;iV+=Math.abs(cV))TV.push(iV);return TV};function eV(aV,GV){return{x:Math.round(GV.x/aV)*aV,y:Math.round(GV.y/aV)*aV}}function gV(aV,GV=1){return aV<0?"-"+gV(-aV):aV<1e-6?"0m":aV>1e3?Math.floor(aV/1e3)+"km":aV>1&&GV>1?Math.round(aV)+"m":aV>1&&GV<=1?aV.toFixed(Math.ceil(-Math.log10(GV)))+"m":aV<1&&GV>=1/1e3?Math.round(aV*1e3)+"mm":aV<1&&GV<1/1e3?(aV*1e3).toFixed(Math.ceil(-Math.log10(GV*1e3)))+"mm":""}function JV(aV,GV=1){return gV(aV/1e3,GV/1e3)}var nV=aV=>{var GV;const cV=(0,dV.useRef)(null),[TV,iV]=(0,dV.useState)({x:0,y:0}),{majorColor:EV="rgba(0,0,0,0.2)",minorColor:MV="rgba(0,0,0,0.1)",textColor:AV=(GV=aV.majorColor)!=null?GV:"rgba(0,0,0,0.5)",width:pV,height:HV,screenSpaceCellSize:oV=200,stringifyCoord:DV=(nl,dl,LV)=>`${gV(nl,LV)}, ${gV(dl,LV)}`}=aV,wV=Math.ceil(pV/oV)+2,qV=Math.ceil(HV/oV)+2;(0,dV.useEffect)(()=>{if(!cV.current)return;const nl=cV.current.getContext("2d");if(!nl)return;const dl=oV/10**Math.floor(Math.log10(aV.transform.a)),LV=aV.transform.d<0?-1:1,$V=oV/10**Math.log10(aV.transform.a)/dl;function Cl(Tl,kl,Dl){const ZR=Tl;let JR,FR,QR;for(JR=kl.x;JR<=Dl.x;JR+=ZR)FR=(0,CV.applyToPoint)(aV.transform,{x:JR,y:kl.y}),QR=(0,CV.applyToPoint)(aV.transform,{x:JR,y:Dl.y}),nl.beginPath(),nl.moveTo(FR.x,FR.y),nl.lineTo(QR.x,QR.y),nl.stroke();const hR=NV(kl.y,Dl.y,ZR*LV);for(const kR of hR)FR=(0,CV.applyToPoint)(aV.transform,{x:kl.x,y:kR}),QR=(0,CV.applyToPoint)(aV.transform,{x:Dl.x,y:kR}),nl.beginPath(),nl.moveTo(FR.x,FR.y),nl.lineTo(QR.x,QR.y),nl.stroke()}function Zl(Tl,kl,Dl){const ZR=Tl;let JR;for(JR=kl.x;JR<=Dl.x;JR+=ZR)for(const FR of NV(kl.y,Dl.y,ZR*LV)){const QR=(0,CV.applyToPoint)(aV.transform,{x:JR,y:FR});nl.fillStyle=AV,nl.font="12px sans-serif",nl.fillText(DV(JR,FR,Tl),QR.x+2,QR.y-2)}}nl.clearRect(0,0,pV,HV);const gl=(0,CV.applyToPoint)((0,CV.inverse)(aV.transform),{x:0,y:0}),pl={x:Math.floor((gl.x-dl)/dl)*dl,y:Math.floor((gl.y-dl)/dl+(LV==-1?2:0))*dl},ml={x:pl.x+dl*wV,y:pl.y+dl*qV*LV},jl=dl*5,rl={x:Math.floor((gl.x-jl)/jl)*jl,y:Math.floor((gl.y-jl)/jl+(LV==-1?2:0))*jl},Pl={x:rl.x+jl*wV,y:rl.y+jl*qV*LV};nl.globalAlpha=1,nl.strokeStyle=EV,Cl(dl,pl,ml),Zl(jl,rl,Pl),nl.globalAlpha=1-$V,Cl(jl/10,rl,Pl),nl.globalAlpha=1-$V,nl.strokeStyle=MV,Cl(dl/10,pl,ml),nl.globalAlpha=Math.max(((1-$V)*10-5)/5,0),Zl(jl/10,rl,Pl),nl.globalAlpha=1;const Hl=(0,CV.applyToPoint)(aV.transform,TV);nl.font="12px sans-serif",nl.fillStyle=AV,nl.fillText(DV(TV.x,TV.y,dl),Hl.x+2,Hl.y-2),nl.strokeStyle=EV,nl.strokeRect(Hl.x-5,Hl.y-5,10,10)},[cV,aV.transform,TV,pV,HV]);const Il=nl=>{if(!cV.current)return;const dl=oV/10/10**Math.floor(Math.log10(aV.transform.a)),LV=cV.current.getBoundingClientRect(),OV=(0,CV.applyToPoint)((0,CV.inverse)(aV.transform),{x:nl.clientX-LV.left,y:nl.clientY-LV.top}),$V=eV(dl,OV);iV($V)};return(0,FV.jsx)("canvas",{onMouseUp:nl=>{nl.button===1&&Il(nl)},onDoubleClick:Il,ref:cV,width:aV.width,height:aV.height})};return SuperGrid_1}var isDevelopment$1=!1;function sheetForTag(lV){if(lV.sheet)return lV.sheet;for(var J=0;J<document.styleSheets.length;J++)if(document.styleSheets[J].ownerNode===lV)return document.styleSheets[J]}function createStyleElement(lV){var J=document.createElement("style");return J.setAttribute("data-emotion",lV.key),lV.nonce!==void 0&&J.setAttribute("nonce",lV.nonce),J.appendChild(document.createTextNode("")),J.setAttribute("data-s",""),J}var StyleSheet=function(){function lV(VV){var RV=this;this._insertTag=function(UV){var ZV;RV.tags.length===0?RV.insertionPoint?ZV=RV.insertionPoint.nextSibling:RV.prepend?ZV=RV.container.firstChild:ZV=RV.before:ZV=RV.tags[RV.tags.length-1].nextSibling,RV.container.insertBefore(UV,ZV),RV.tags.push(UV)},this.isSpeedy=VV.speedy===void 0?!isDevelopment$1:VV.speedy,this.tags=[],this.ctr=0,this.nonce=VV.nonce,this.key=VV.key,this.container=VV.container,this.prepend=VV.prepend,this.insertionPoint=VV.insertionPoint,this.before=null}var J=lV.prototype;return J.hydrate=function(RV){RV.forEach(this._insertTag)},J.insert=function(RV){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(createStyleElement(this));var UV=this.tags[this.tags.length-1];if(this.isSpeedy){var ZV=sheetForTag(UV);try{ZV.insertRule(RV,ZV.cssRules.length)}catch{}}else UV.appendChild(document.createTextNode(RV));this.ctr++},J.flush=function(){this.tags.forEach(function(RV){var UV;return(UV=RV.parentNode)==null?void 0:UV.removeChild(RV)}),this.tags=[],this.ctr=0},lV}(),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(lV,J){return charat(lV,0)^45?(((J<<2^charat(lV,0))<<2^charat(lV,1))<<2^charat(lV,2))<<2^charat(lV,3):0}function trim(lV){return lV.trim()}function match(lV,J){return(lV=J.exec(lV))?lV[0]:lV}function replace(lV,J,VV){return lV.replace(J,VV)}function indexof(lV,J){return lV.indexOf(J)}function charat(lV,J){return lV.charCodeAt(J)|0}function substr(lV,J,VV){return lV.slice(J,VV)}function strlen(lV){return lV.length}function sizeof$1(lV){return lV.length}function append(lV,J){return J.push(lV),lV}function combine(lV,J){return lV.map(J).join("")}var line=1,column=1,length=0,position=0,character=0,characters="";function node(lV,J,VV,RV,UV,ZV,WV){return{value:lV,root:J,parent:VV,type:RV,props:UV,children:ZV,line,column,length:WV,return:""}}function copy(lV,J){return assign(node("",null,null,"",null,null,0),lV,{length:-lV.length},J)}function char(){return character}function prev(){return character=position>0?charat(characters,--position):0,column--,character===10&&(column=1,line--),character}function next(){return character=position<length?charat(characters,position++):0,column++,character===10&&(column=1,line++),character}function peek(){return charat(characters,position)}function caret(){return position}function slice(lV,J){return substr(characters,lV,J)}function token(lV){switch(lV){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(lV){return line=column=1,length=strlen(characters=lV),position=0,[]}function dealloc(lV){return characters="",lV}function delimit(lV){return trim(slice(position-1,delimiter(lV===91?lV+2:lV===40?lV+1:lV)))}function whitespace(lV){for(;(character=peek())&&character<33;)next();return token(lV)>2||token(character)>3?"":" "}function escaping(lV,J){for(;--J&&next()&&!(character<48||character>102||character>57&&character<65||character>70&&character<97););return slice(lV,caret()+(J<6&&peek()==32&&next()==32))}function delimiter(lV){for(;next();)switch(character){case lV:return position;case 34:case 39:lV!==34&&lV!==39&&delimiter(character);break;case 40:lV===41&&delimiter(lV);break;case 92:next();break}return position}function commenter(lV,J){for(;next()&&lV+character!==57;)if(lV+character===84&&peek()===47)break;return"/*"+slice(J,position-1)+"*"+from(lV===47?lV:next())}function identifier(lV){for(;!token(peek());)next();return slice(lV,position)}function compile(lV){return dealloc(parse$1("",null,null,null,[""],lV=alloc(lV),0,[0],lV))}function parse$1(lV,J,VV,RV,UV,ZV,WV,IV,dV){for(var CV=0,FV=0,NV=WV,eV=0,gV=0,JV=0,nV=1,aV=1,GV=1,cV=0,TV="",iV=UV,EV=ZV,MV=RV,AV=TV;aV;)switch(JV=cV,cV=next()){case 40:if(JV!=108&&charat(AV,NV-1)==58){indexof(AV+=replace(delimit(cV),"&","&\f"),"&\f")!=-1&&(GV=-1);break}case 34:case 39:case 91:AV+=delimit(cV);break;case 9:case 10:case 13:case 32:AV+=whitespace(JV);break;case 92:AV+=escaping(caret()-1,7);continue;case 47:switch(peek()){case 42:case 47:append(comment(commenter(next(),caret()),J,VV),dV);break;default:AV+="/"}break;case 123*nV:IV[CV++]=strlen(AV)*GV;case 125*nV:case 59:case 0:switch(cV){case 0:case 125:aV=0;case 59+FV:GV==-1&&(AV=replace(AV,/\f/g,"")),gV>0&&strlen(AV)-NV&&append(gV>32?declaration(AV+";",RV,VV,NV-1):declaration(replace(AV," ","")+";",RV,VV,NV-2),dV);break;case 59:AV+=";";default:if(append(MV=ruleset(AV,J,VV,CV,FV,UV,IV,TV,iV=[],EV=[],NV),ZV),cV===123)if(FV===0)parse$1(AV,J,MV,MV,iV,ZV,NV,IV,EV);else switch(eV===99&&charat(AV,3)===110?100:eV){case 100:case 108:case 109:case 115:parse$1(lV,MV,MV,RV&&append(ruleset(lV,MV,MV,0,0,UV,IV,TV,UV,iV=[],NV),EV),UV,EV,NV,IV,RV?iV:EV);break;default:parse$1(AV,MV,MV,MV,[""],EV,0,IV,EV)}}CV=FV=gV=0,nV=GV=1,TV=AV="",NV=WV;break;case 58:NV=1+strlen(AV),gV=JV;default:if(nV<1){if(cV==123)--nV;else if(cV==125&&nV++==0&&prev()==125)continue}switch(AV+=from(cV),cV*nV){case 38:GV=FV>0?1:(AV+="\f",-1);break;case 44:IV[CV++]=(strlen(AV)-1)*GV,GV=1;break;case 64:peek()===45&&(AV+=delimit(next())),eV=peek(),FV=NV=strlen(TV=AV+=identifier(caret())),cV++;break;case 45:JV===45&&strlen(AV)==2&&(nV=0)}}return ZV}function ruleset(lV,J,VV,RV,UV,ZV,WV,IV,dV,CV,FV){for(var NV=UV-1,eV=UV===0?ZV:[""],gV=sizeof$1(eV),JV=0,nV=0,aV=0;JV<RV;++JV)for(var GV=0,cV=substr(lV,NV+1,NV=abs(nV=WV[JV])),TV=lV;GV<gV;++GV)(TV=trim(nV>0?eV[GV]+" "+cV:replace(cV,/&\f/g,eV[GV])))&&(dV[aV++]=TV);return node(lV,J,VV,UV===0?RULESET:IV,dV,CV,FV)}function comment(lV,J,VV){return node(lV,J,VV,COMMENT,from(char()),substr(lV,2,-2),0)}function declaration(lV,J,VV,RV){return node(lV,J,VV,DECLARATION,substr(lV,0,RV),substr(lV,RV+1,-1),RV)}function serialize(lV,J){for(var VV="",RV=sizeof$1(lV),UV=0;UV<RV;UV++)VV+=J(lV[UV],UV,lV,J)||"";return VV}function stringify$1(lV,J,VV,RV){switch(lV.type){case LAYER:if(lV.children.length)break;case IMPORT:case DECLARATION:return lV.return=lV.return||lV.value;case COMMENT:return"";case KEYFRAMES:return lV.return=lV.value+"{"+serialize(lV.children,RV)+"}";case RULESET:lV.value=lV.props.join(",")}return strlen(VV=serialize(lV.children,RV))?lV.return=lV.value+"{"+VV+"}":""}function middleware(lV){var J=sizeof$1(lV);return function(VV,RV,UV,ZV){for(var WV="",IV=0;IV<J;IV++)WV+=lV[IV](VV,RV,UV,ZV)||"";return WV}}function rulesheet(lV){return function(J){J.root||(J=J.return)&&lV(J)}}function memoize(lV){var J=Object.create(null);return function(VV){return J[VV]===void 0&&(J[VV]=lV(VV)),J[VV]}}var identifierWithPointTracking=function lV(J,VV,RV){for(var UV=0,ZV=0;UV=ZV,ZV=peek(),UV===38&&ZV===12&&(VV[RV]=1),!token(ZV);)next();return slice(J,position)},toRules=function lV(J,VV){var RV=-1,UV=44;do switch(token(UV)){case 0:UV===38&&peek()===12&&(VV[RV]=1),J[RV]+=identifierWithPointTracking(position-1,VV,RV);break;case 2:J[RV]+=delimit(UV);break;case 4:if(UV===44){J[++RV]=peek()===58?"&\f":"",VV[RV]=J[RV].length;break}default:J[RV]+=from(UV)}while(UV=next());return J},getRules=function lV(J,VV){return dealloc(toRules(alloc(J),VV))},fixedElements=new WeakMap,compat=function lV(J){if(!(J.type!=="rule"||!J.parent||J.length<1)){for(var VV=J.value,RV=J.parent,UV=J.column===RV.column&&J.line===RV.line;RV.type!=="rule";)if(RV=RV.parent,!RV)return;if(!(J.props.length===1&&VV.charCodeAt(0)!==58&&!fixedElements.get(RV))&&!UV){fixedElements.set(J,!0);for(var ZV=[],WV=getRules(VV,ZV),IV=RV.props,dV=0,CV=0;dV<WV.length;dV++)for(var FV=0;FV<IV.length;FV++,CV++)J.props[CV]=ZV[dV]?WV[dV].replace(/&\f/g,IV[FV]):IV[FV]+" "+WV[dV]}}},removeLabel=function lV(J){if(J.type==="decl"){var VV=J.value;VV.charCodeAt(0)===108&&VV.charCodeAt(2)===98&&(J.return="",J.value="")}};function prefix(lV,J){switch(hash(lV,J)){case 5103:return WEBKIT+"print-"+lV+lV;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+lV+lV;case 5349:case 4246:case 4810:case 6968:case 2756:return WEBKIT+lV+MOZ+lV+MS+lV+lV;case 6828:case 4268:return WEBKIT+lV+MS+lV+lV;case 6165:return WEBKIT+lV+MS+"flex-"+lV+lV;case 5187:return WEBKIT+lV+replace(lV,/(\w+).+(:[^]+)/,WEBKIT+"box-$1$2"+MS+"flex-$1$2")+lV;case 5443:return WEBKIT+lV+MS+"flex-item-"+replace(lV,/flex-|-self/,"")+lV;case 4675:return WEBKIT+lV+MS+"flex-line-pack"+replace(lV,/align-content|flex-|-self/,"")+lV;case 5548:return WEBKIT+lV+MS+replace(lV,"shrink","negative")+lV;case 5292:return WEBKIT+lV+MS+replace(lV,"basis","preferred-size")+lV;case 6060:return WEBKIT+"box-"+replace(lV,"-grow","")+WEBKIT+lV+MS+replace(lV,"grow","positive")+lV;case 4554:return WEBKIT+replace(lV,/([^-])(transform)/g,"$1"+WEBKIT+"$2")+lV;case 6187:return replace(replace(replace(lV,/(zoom-|grab)/,WEBKIT+"$1"),/(image-set)/,WEBKIT+"$1"),lV,"")+lV;case 5495:case 3959:return replace(lV,/(image-set\([^]*)/,WEBKIT+"$1$`$1");case 4968:return replace(replace(lV,/(.+:)(flex-)?(.*)/,WEBKIT+"box-pack:$3"+MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+WEBKIT+lV+lV;case 4095:case 3583:case 4068:case 2532:return replace(lV,/(.+)-inline(.+)/,WEBKIT+"$1$2")+lV;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(lV)-1-J>6)switch(charat(lV,J+1)){case 109:if(charat(lV,J+4)!==45)break;case 102:return replace(lV,/(.+:)(.+)-([^]+)/,"$1"+WEBKIT+"$2-$3$1"+MOZ+(charat(lV,J+3)==108?"$3":"$2-$3"))+lV;case 115:return~indexof(lV,"stretch")?prefix(replace(lV,"stretch","fill-available"),J)+lV:lV}break;case 4949:if(charat(lV,J+1)!==115)break;case 6444:switch(charat(lV,strlen(lV)-3-(~indexof(lV,"!important")&&10))){case 107:return replace(lV,":",":"+WEBKIT)+lV;case 101:return replace(lV,/(.+:)([^;!]+)(;|!.+)?/,"$1"+WEBKIT+(charat(lV,14)===45?"inline-":"")+"box$3$1"+WEBKIT+"$2$3$1"+MS+"$2box$3")+lV}break;case 5936:switch(charat(lV,J+11)){case 114:return WEBKIT+lV+MS+replace(lV,/[svh]\w+-[tblr]{2}/,"tb")+lV;case 108:return WEBKIT+lV+MS+replace(lV,/[svh]\w+-[tblr]{2}/,"tb-rl")+lV;case 45:return WEBKIT+lV+MS+replace(lV,/[svh]\w+-[tblr]{2}/,"lr")+lV}return WEBKIT+lV+MS+lV+lV}return lV}var prefixer=function lV(J,VV,RV,UV){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)})],UV);case RULESET:if(J.length)return combine(J.props,function(ZV){switch(match(ZV,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return serialize([copy(J,{props:[replace(ZV,/:(read-\w+)/,":"+MOZ+"$1")]})],UV);case"::placeholder":return serialize([copy(J,{props:[replace(ZV,/:(plac\w+)/,":"+WEBKIT+"input-$1")]}),copy(J,{props:[replace(ZV,/:(plac\w+)/,":"+MOZ+"$1")]}),copy(J,{props:[replace(ZV,/:(plac\w+)/,MS+"input-$1")]})],UV)}return""})}},defaultStylisPlugins=[prefixer],createCache=function lV(J){var VV=J.key;if(VV==="css"){var RV=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(RV,function(nV){var aV=nV.getAttribute("data-emotion");aV.indexOf(" ")!==-1&&(document.head.appendChild(nV),nV.setAttribute("data-s",""))})}var UV=J.stylisPlugins||defaultStylisPlugins,ZV={},WV,IV=[];WV=J.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+VV+' "]'),function(nV){for(var aV=nV.getAttribute("data-emotion").split(" "),GV=1;GV<aV.length;GV++)ZV[aV[GV]]=!0;IV.push(nV)});var dV,CV=[compat,removeLabel];{var FV,NV=[stringify$1,rulesheet(function(nV){FV.insert(nV)})],eV=middleware(CV.concat(UV,NV)),gV=function(aV){return serialize(compile(aV),eV)};dV=function(aV,GV,cV,TV){FV=cV,gV(aV?aV+"{"+GV.styles+"}":GV.styles),TV&&(JV.inserted[GV.name]=!0)}}var JV={key:VV,sheet:new StyleSheet({key:VV,container:WV,nonce:J.nonce,speedy:J.speedy,prepend:J.prepend,insertionPoint:J.insertionPoint}),nonce:J.nonce,inserted:ZV,registered:{},insert:dV};return JV.sheet.hydrate(IV),JV};function murmur2(lV){for(var J=0,VV,RV=0,UV=lV.length;UV>=4;++RV,UV-=4)VV=lV.charCodeAt(RV)&255|(lV.charCodeAt(++RV)&255)<<8|(lV.charCodeAt(++RV)&255)<<16|(lV.charCodeAt(++RV)&255)<<24,VV=(VV&65535)*1540483477+((VV>>>16)*59797<<16),VV^=VV>>>24,J=(VV&65535)*1540483477+((VV>>>16)*59797<<16)^(J&65535)*1540483477+((J>>>16)*59797<<16);switch(UV){case 3:J^=(lV.charCodeAt(RV+2)&255)<<16;case 2:J^=(lV.charCodeAt(RV+1)&255)<<8;case 1:J^=lV.charCodeAt(RV)&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 lV(J){return J.charCodeAt(1)===45},isProcessableValue=function lV(J){return J!=null&&typeof J!="boolean"},processStyleName=memoize(function(lV){return isCustomProperty(lV)?lV:lV.replace(hyphenateRegex,"-$&").toLowerCase()}),processStyleValue=function lV(J,VV){switch(J){case"animation":case"animationName":if(typeof VV=="string")return VV.replace(animationRegex,function(RV,UV,ZV){return cursor={name:UV,styles:ZV,next:cursor},UV})}return unitlessKeys[J]!==1&&!isCustomProperty(J)&&typeof VV=="number"&&VV!==0?VV+"px":VV},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(lV,J,VV){if(VV==null)return"";var RV=VV;if(RV.__emotion_styles!==void 0)return RV;switch(typeof VV){case"boolean":return"";case"object":{var UV=VV;if(UV.anim===1)return cursor={name:UV.name,styles:UV.styles,next:cursor},UV.name;var ZV=VV;if(ZV.styles!==void 0){var WV=ZV.next;if(WV!==void 0)for(;WV!==void 0;)cursor={name:WV.name,styles:WV.styles,next:cursor},WV=WV.next;var IV=ZV.styles+";";return IV}return createStringFromObject(lV,J,VV)}}var dV=VV;if(J==null)return dV;var CV=J[dV];return CV!==void 0?CV:dV}function createStringFromObject(lV,J,VV){var RV="";if(Array.isArray(VV))for(var UV=0;UV<VV.length;UV++)RV+=handleInterpolation(lV,J,VV[UV])+";";else for(var ZV in VV){var WV=VV[ZV];if(typeof WV!="object"){var IV=WV;J!=null&&J[IV]!==void 0?RV+=ZV+"{"+J[IV]+"}":isProcessableValue(IV)&&(RV+=processStyleName(ZV)+":"+processStyleValue(ZV,IV)+";")}else{if(ZV==="NO_COMPONENT_SELECTOR"&&isDevelopment)throw new Error(noComponentSelectorMessage);if(Array.isArray(WV)&&typeof WV[0]=="string"&&(J==null||J[WV[0]]===void 0))for(var dV=0;dV<WV.length;dV++)isProcessableValue(WV[dV])&&(RV+=processStyleName(ZV)+":"+processStyleValue(ZV,WV[dV])+";");else{var CV=handleInterpolation(lV,J,WV);switch(ZV){case"animation":case"animationName":{RV+=processStyleName(ZV)+":"+CV+";";break}default:RV+=ZV+"{"+CV+"}"}}}}return RV}var labelPattern=/label:\s*([^\s;{]+)\s*(;|$)/g,cursor;function serializeStyles(lV,J,VV){if(lV.length===1&&typeof lV[0]=="object"&&lV[0]!==null&&lV[0].styles!==void 0)return lV[0];var RV=!0,UV="";cursor=void 0;var ZV=lV[0];if(ZV==null||ZV.raw===void 0)RV=!1,UV+=handleInterpolation(VV,J,ZV);else{var WV=ZV;UV+=WV[0]}for(var IV=1;IV<lV.length;IV++)if(UV+=handleInterpolation(VV,J,lV[IV]),RV){var dV=ZV;UV+=dV[IV]}labelPattern.lastIndex=0;for(var CV="",FV;(FV=labelPattern.exec(UV))!==null;)CV+="-"+FV[1];var NV=murmur2(UV)+CV;return{name:NV,styles:UV,next:cursor}}function getRegisteredStyles$1(lV,J,VV){var RV="";return VV.split(" ").forEach(function(UV){lV[UV]!==void 0?J.push(lV[UV]+";"):UV&&(RV+=UV+" ")}),RV}var registerStyles=function lV(J,VV,RV){var UV=J.key+"-"+VV.name;J.registered[UV]===void 0&&(J.registered[UV]=VV.styles)},insertStyles=function lV(J,VV,RV){registerStyles(J,VV);var UV=J.key+"-"+VV.name;if(J.inserted[VV.name]===void 0){var ZV=VV;do J.insert(VV===ZV?"."+UV:"",ZV,J.sheet,!0),ZV=ZV.next;while(ZV!==void 0)}};function insertWithoutScoping(lV,J){if(lV.inserted[J.name]===void 0)return lV.insert("",J,lV.sheet,!0)}function merge$1(lV,J,VV){var RV=[],UV=getRegisteredStyles$1(lV,RV,VV);return RV.length<2?VV:UV+J(RV)}var createEmotion=function lV(J){var VV=createCache(J);VV.sheet.speedy=function(IV){this.isSpeedy=IV},VV.compat=!0;var RV=function(){for(var dV=arguments.length,CV=new Array(dV),FV=0;FV<dV;FV++)CV[FV]=arguments[FV];var NV=serializeStyles(CV,VV.registered,void 0);return insertStyles(VV,NV),VV.key+"-"+NV.name},UV=function(){for(var dV=arguments.length,CV=new Array(dV),FV=0;FV<dV;FV++)CV[FV]=arguments[FV];var NV=serializeStyles(CV,VV.registered),eV="animation-"+NV.name;return insertWithoutScoping(VV,{name:NV.name,styles:"@keyframes "+eV+"{"+NV.styles+"}"}),eV},ZV=function(){for(var dV=arguments.length,CV=new Array(dV),FV=0;FV<dV;FV++)CV[FV]=arguments[FV];var NV=serializeStyles(CV,VV.registered);insertWithoutScoping(VV,NV)},WV=function(){for(var dV=arguments.length,CV=new Array(dV),FV=0;FV<dV;FV++)CV[FV]=arguments[FV];return merge$1(VV.registered,RV,classnames(CV))};return{css:RV,cx:WV,injectGlobal:ZV,keyframes:UV,hydrate:function(dV){dV.forEach(function(CV){VV.inserted[CV]=!0})},flush:function(){VV.registered={},VV.inserted={},VV.sheet.flush()},sheet:VV.sheet,cache:VV,getRegisteredStyles:getRegisteredStyles$1.bind(null,VV.registered),merge:merge$1.bind(null,VV.registered,RV)}},classnames=function lV(J){for(var VV="",RV=0;RV<J.length;RV++){var UV=J[RV];if(UV!=null){var ZV=void 0;switch(typeof UV){case"boolean":break;case"object":{if(Array.isArray(UV))ZV=lV(UV);else{ZV="";for(var WV in UV)UV[WV]&&WV&&(ZV&&(ZV+=" "),ZV+=WV)}break}default:ZV=UV}ZV&&(VV&&(VV+=" "),VV+=ZV)}}return VV},_createEmotion=createEmotion({key:"css"}),flush=_createEmotion.flush,hydrate=_createEmotion.hydrate,cx$1=_createEmotion.cx,merge=_createEmotion.merge,getRegisteredStyles=_createEmotion.getRegisteredStyles,injectGlobal=_createEmotion.injectGlobal,keyframes=_createEmotion.keyframes,css=_createEmotion.css,sheet=_createEmotion.sheet,cache=_createEmotion.cache;const emotionCss_esm=Object.freeze(Object.defineProperty({__proto__:null,cache,css,cx:cx$1,flush,getRegisteredStyles,hydrate,injectGlobal,keyframes,merge,sheet},Symbol.toStringTag,{value:"Module"})),require$$10=getAugmentedNamespace(emotionCss_esm);function doesLineIntersectLine([lV,J],[VV,RV],{lineThickness:UV=0}={}){return UV===0?doSegmentsIntersect(lV,J,VV,RV):segmentsDistance(lV,J,VV,RV)<=UV}function doSegmentsIntersect(lV,J,VV,RV){const UV=orientation(lV,J,VV),ZV=orientation(lV,J,RV),WV=orientation(VV,RV,lV),IV=orientation(VV,RV,J);return!!(UV!==ZV&&WV!==IV||UV===0&&onSegment(lV,VV,J)||ZV===0&&onSegment(lV,RV,J)||WV===0&&onSegment(VV,lV,RV)||IV===0&&onSegment(VV,J,RV))}function orientation(lV,J,VV){const RV=(J.y-lV.y)*(VV.x-J.x)-(J.x-lV.x)*(VV.y-J.y);return RV===0?0:RV>0?1:2}function onSegment(lV,J,VV){return J.x<=Math.max(lV.x,VV.x)&&J.x>=Math.min(lV.x,VV.x)&&J.y<=Math.max(lV.y,VV.y)&&J.y>=Math.min(lV.y,VV.y)}function segmentsDistance(lV,J,VV,RV){if(lV.x===J.x&&lV.y===J.y)return pointToSegmentDistance(lV,VV,RV);if(VV.x===RV.x&&VV.y===RV.y)return pointToSegmentDistance(VV,lV,J);if(doSegmentsIntersect(lV,J,VV,RV))return 0;const UV=[pointToSegmentDistance(lV,VV,RV),pointToSegmentDistance(J,VV,RV),pointToSegmentDistance(VV,lV,J),pointToSegmentDistance(RV,lV,J)];return Math.min(...UV)}function pointToSegmentDistance(lV,J,VV){const RV=(VV.x-J.x)**2+(VV.y-J.y)**2;if(RV===0)return distance(lV,J);let UV=((lV.x-J.x)*(VV.x-J.x)+(lV.y-J.y)*(VV.y-J.y))/RV;UV=Math.max(0,Math.min(1,UV));const ZV={x:J.x+UV*(VV.x-J.x),y:J.y+UV*(VV.y-J.y)};return distance(lV,ZV)}function distance(lV,J){const VV=lV.x-J.x,RV=lV.y-J.y;return Math.sqrt(VV*VV+RV*RV)}function findConnectedNetworks(lV){const J=new Map;let VV=0;function RV(UV){for(const[,WV]of J)if(WV.has(UV))return WV;const ZV=new Set;return J.set(`connectivity_net${VV++}`,ZV),ZV}for(const UV of lV){let ZV=null;for(const WV of UV){if(!ZV)ZV=RV(WV);else if(!ZV.has(WV)){const IV=RV(WV);if(IV!==ZV){for(const dV of IV)ZV.add(dV);J.delete(Array.from(J.entries()).find(([,dV])=>dV===IV)[0])}}ZV.add(WV)}}return Object.fromEntries(Array.from(J.entries()).map(([UV,ZV])=>[UV,Array.from(ZV)]))}var ConnectivityMap=class{constructor(lV){SI(this,"netMap");SI(this,"idToNetMap");this.netMap=lV,this.idToNetMap={};for(const[J,VV]of Object.entries(lV))for(const RV of VV)this.idToNetMap[RV]=J}addConnections(lV){for(const J of lV){const VV=new Set;for(const UV of J){const ZV=this.idToNetMap[UV];ZV&&VV.add(ZV)}let RV;if(VV.size===0)RV=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[RV]=[];else if(VV.size===1)RV=VV.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{RV=VV.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(const UV of VV)if(UV!==RV){this.netMap[RV].push(...this.netMap[UV]),this.netMap[UV]=this.netMap[RV];for(const ZV of this.netMap[RV])this.idToNetMap[ZV]=RV}}for(const UV of J)this.netMap[RV].includes(UV)||this.netMap[RV].push(UV),this.idToNetMap[UV]=RV}}getIdsConnectedToNet(lV){return this.netMap[lV]||[]}getNetConnectedToId(lV){return this.idToNetMap[lV]}areIdsConnected(lV,J){const VV=this.getNetConnectedToId(lV),RV=this.getNetConnectedToId(J);return VV===RV||RV===lV||RV===lV}areAllIdsConnected(lV){const J=this.getNetConnectedToId(lV[0]);for(const VV of lV){const RV=this.getNetConnectedToId(VV);if(RV===void 0||RV!==J)return!1}return!0}},getSourcePortConnectivityMapFromCircuitJson=lV=>{const J=[];for(const RV of lV)RV.type==="source_trace"&&J.push([...RV.connected_source_port_ids??[],...RV.connected_source_net_ids??[]]);const VV=findConnectedNetworks(J);return new ConnectivityMap(VV)},getFullConnectivityMapFromCircuitJson=lV=>{const J=[];for(const RV of lV)if(RV.type==="source_trace")J.push([RV.source_trace_id,...RV.connected_source_port_ids??[],...RV.connected_source_net_ids??[]].filter(Boolean));else if(RV.type==="pcb_port"){const{pcb_port_id:UV,source_port_id:ZV}=RV;ZV&&UV&&J.push([ZV,UV])}else if(RV.type==="pcb_smtpad"){const{pcb_smtpad_id:UV,pcb_port_id:ZV}=RV;ZV&&UV&&J.push([UV,ZV])}else if(RV.type==="pcb_plated_hole"){const{pcb_plated_hole_id:UV,pcb_port_id:ZV}=RV;ZV&&UV&&J.push([UV,ZV])}else if(RV.type==="pcb_trace"){const{pcb_trace_id:UV,source_trace_id:ZV}=RV;ZV&&UV&&J.push([UV,ZV])}const VV=findConnectedNetworks(J);return new ConnectivityMap(VV)},PcbConnectivityMap=class{constructor(lV){SI(this,"circuitJson");SI(this,"traceIdToElm");SI(this,"portIdToElm");SI(this,"connMap");this.circuitJson=lV||[],this.traceIdToElm=new Map,this.portIdToElm=new Map,lV?(this._buildTraceMap(),this._buildPortMap(),this.connMap=this._buildTraceConnectivityMap()):this.connMap=new ConnectivityMap({})}_buildPortMap(){for(const lV of this.circuitJson)lV.type==="pcb_port"&&this.portIdToElm.set(lV.pcb_port_id,lV)}_buildTraceMap(){for(const lV of this.circuitJson)lV.type==="pcb_trace"&&this.traceIdToElm.set(lV.pcb_trace_id,lV)}_buildTraceConnectivityMap(){const lV=[],J=Array.from(this.traceIdToElm.keys());for(let VV=0;VV<J.length;VV++)for(let RV=VV+1;RV<J.length;RV++){const UV=this.traceIdToElm.get(J[VV]),ZV=this.traceIdToElm.get(J[RV]);this._arePcbTracesConnected(UV,ZV)&&lV.push([J[VV],J[RV]])}for(const VV of this.portIdToElm.values())for(const RV of this.traceIdToElm.values())for(const UV of RV.route)UV.route_type==="wire"&&(UV.start_pcb_port_id===VV.pcb_port_id?lV.push([VV.pcb_port_id,RV.pcb_trace_id]):UV.end_pcb_port_id===VV.pcb_port_id&&lV.push([RV.pcb_trace_id,VV.pcb_port_id]));return new ConnectivityMap(findConnectedNetworks(lV))}addTrace(lV){this.traceIdToElm.set(lV.pcb_trace_id,lV);const J=[];for(const VV of lV.route)VV.route_type==="wire"&&(VV.start_pcb_port_id&&J.push([VV.start_pcb_port_id,lV.pcb_trace_id]),VV.end_pcb_port_id&&J.push([VV.end_pcb_port_id,lV.pcb_trace_id]));this.connMap.addConnections(J)}_arePcbTracesConnected(lV,J){for(let VV=0;VV<lV.route.length-1;VV++){const RV=lV.route[VV],UV=lV.route[VV+1];if(RV.route_type==="wire"&&UV.route_type==="wire")for(let ZV=0;ZV<J.route.length-1;ZV++){const WV=J.route[ZV],IV=J.route[ZV+1];if(WV.route_type!=="wire"||IV.route_type!=="wire")continue;if(doesLineIntersectLine([RV,UV],[WV,IV],{lineThickness:(RV.width+WV.width)/2}))return!0}}return!1}areTracesConnected(lV,J){return this.connMap.areIdsConnected(lV,J)}getAllTracesConnectedToTrace(lV){const J=this.connMap.getNetConnectedToId(lV);return J?this.connMap.getIdsConnectedToNet(J).filter(VV=>this.traceIdToElm.has(VV)).map(VV=>this.traceIdToElm.get(VV)):[]}getAllTracesConnectedToPort(lV){const J=this.connMap.getNetConnectedToId(lV);return J?this.connMap.getIdsConnectedToNet(J).filter(VV=>this.traceIdToElm.has(VV)).map(VV=>this.traceIdToElm.get(VV)):[]}};const dist$2=Object.freeze(Object.defineProperty({__proto__:null,ConnectivityMap,PcbConnectivityMap,findConnectedNetworks,getFullConnectivityMapFromCircuitJson,getSourcePortConnectivityMapFromCircuitJson},Symbol.toStringTag,{value:"Module"})),require$$11=getAugmentedNamespace(dist$2);var dist$1,hasRequiredDist$1;function requireDist$1(){if(hasRequiredDist$1)return dist$1;hasRequiredDist$1=1;function lV($l,VU){(VU==null||VU>$l.length)&&(VU=$l.length);for(var yR=0,gU=new Array(VU);yR<VU;yR++)gU[yR]=$l[yR];return gU}function J($l){if(Array.isArray($l))return $l}function VV($l){if(Array.isArray($l))return lV($l)}function RV($l){if($l===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return $l}function UV($l,VU,yR,gU,sR,PV,Rl){try{var Ml=$l[PV](Rl),wl=Ml.value}catch(gR){yR(gR);return}Ml.done?VU(wl):Promise.resolve(wl).then(gU,sR)}function ZV($l){return function(){var VU=this,yR=arguments;return new Promise(function(gU,sR){var PV=$l.apply(VU,yR);function Rl(wl){UV(PV,gU,sR,Rl,Ml,"next",wl)}function Ml(wl){UV(PV,gU,sR,Rl,Ml,"throw",wl)}Rl(void 0)})}}function WV($l,VU){if(!($l instanceof VU))throw new TypeError("Cannot call a class as a function")}function IV($l,VU,yR){return dl()?IV=Reflect.construct:IV=function(sR,PV,Rl){var Ml=[null];Ml.push.apply(Ml,PV);var wl=Function.bind.apply(sR,Ml),gR=new wl;return Rl&&HV(gR,Rl.prototype),gR},IV.apply(null,arguments)}function dV($l,VU){for(var yR=0;yR<VU.length;yR++){var gU=VU[yR];gU.enumerable=gU.enumerable||!1,gU.configurable=!0,"value"in gU&&(gU.writable=!0),Object.defineProperty($l,gU.key,gU)}}function CV($l,VU,yR){return VU&&dV($l.prototype,VU),yR&&dV($l,yR),$l}function FV($l,VU,yR){return VU in $l?Object.defineProperty($l,VU,{value:yR,enumerable:!0,configurable:!0,writable:!0}):$l[VU]=yR,$l}function NV($l){return NV=Object.setPrototypeOf?Object.getPrototypeOf:function(yR){return yR.__proto__||Object.getPrototypeOf(yR)},NV($l)}function eV($l,VU){if(typeof VU!="function"&&VU!==null)throw new TypeError("Super expression must either be null or a function");$l.prototype=Object.create(VU&&VU.prototype,{constructor:{value:$l,writable:!0,configurable:!0}}),VU&&HV($l,VU)}function gV($l,VU){return VU!=null&&typeof Symbol<"u"&&VU[Symbol.hasInstance]?!!VU[Symbol.hasInstance]($l):$l instanceof VU}function JV($l){return Function.toString.call($l).indexOf("[native code]")!==-1}function nV($l){if(typeof Symbol<"u"&&$l[Symbol.iterator]!=null||$l["@@iterator"]!=null)return Array.from($l)}function aV($l,VU){var yR=$l==null?null:typeof Symbol<"u"&&$l[Symbol.iterator]||$l["@@iterator"];if(yR!=null){var gU=[],sR=!0,PV=!1,Rl,Ml;try{for(yR=yR.call($l);!(sR=(Rl=yR.next()).done)&&(gU.push(Rl.value),!(VU&&gU.length===VU));sR=!0);}catch(wl){PV=!0,Ml=wl}finally{try{!sR&&yR.return!=null&&yR.return()}finally{if(PV)throw Ml}}return gU}}function GV(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function cV(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function TV($l){for(var VU=1;VU<arguments.length;VU++){var yR=arguments[VU]!=null?arguments[VU]:{},gU=Object.keys(yR);typeof Object.getOwnPropertySymbols=="function"&&(gU=gU.concat(Object.getOwnPropertySymbols(yR).filter(function(sR){return Object.getOwnPropertyDescriptor(yR,sR).enumerable}))),gU.forEach(function(sR){FV($l,sR,yR[sR])})}return $l}function iV($l,VU){var yR=Object.keys($l);if(Object.getOwnPropertySymbols){var gU=Object.getOwnPropertySymbols($l);yR.push.apply(yR,gU)}return yR}function EV($l,VU){return VU=VU??{},Object.getOwnPropertyDescriptors?Object.defineProperties($l,Object.getOwnPropertyDescriptors(VU)):iV(Object(VU)).forEach(function(yR){Object.defineProperty($l,yR,Object.getOwnPropertyDescriptor(VU,yR))}),$l}function MV($l,VU){if($l==null)return{};var yR=AV($l,VU),gU,sR;if(Object.getOwnPropertySymbols){var PV=Object.getOwnPropertySymbols($l);for(sR=0;sR<PV.length;sR++)gU=PV[sR],!(VU.indexOf(gU)>=0)&&Object.prototype.propertyIsEnumerable.call($l,gU)&&(yR[gU]=$l[gU])}return yR}function AV($l,VU){if($l==null)return{};var yR={},gU=Object.keys($l),sR,PV;for(PV=0;PV<gU.length;PV++)sR=gU[PV],!(VU.indexOf(sR)>=0)&&(yR[sR]=$l[sR]);return yR}function pV($l,VU){return VU&&(qV(VU)==="object"||typeof VU=="function")?VU:RV($l)}function HV($l,VU){return HV=Object.setPrototypeOf||function(gU,sR){return gU.__proto__=sR,gU},HV($l,VU)}function oV($l,VU){return J($l)||aV($l,VU)||Il($l,VU)||GV()}function DV($l,VU){return VU||(VU=$l.slice(0)),Object.freeze(Object.defineProperties($l,{raw:{value:Object.freeze(VU)}}))}function wV($l){return VV($l)||nV($l)||Il($l)||cV()}function qV($l){"@swc/helpers - typeof";return $l&&typeof Symbol<"u"&&$l.constructor===Symbol?"symbol":typeof $l}function Il($l,VU){if($l){if(typeof $l=="string")return lV($l,VU);var yR=Object.prototype.toString.call($l).slice(8,-1);if(yR==="Object"&&$l.constructor&&(yR=$l.constructor.name),yR==="Map"||yR==="Set")return Array.from(yR);if(yR==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(yR))return lV($l,VU)}}function nl($l){var VU=typeof Map=="function"?new Map:void 0;return nl=function(gU){if(gU===null||!JV(gU))return gU;if(typeof gU!="function")throw new TypeError("Super expression must either be null or a function");if(typeof VU<"u"){if(VU.has(gU))return VU.get(gU);VU.set(gU,sR)}function sR(){return IV(gU,arguments,NV(this).constructor)}return sR.prototype=Object.create(gU.prototype,{constructor:{value:sR,enumerable:!1,writable:!0,configurable:!0}}),HV(sR,gU)},nl($l)}function dl(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function LV($l){var VU=dl();return function(){var gU=NV($l),sR;if(VU){var PV=NV(this).constructor;sR=Reflect.construct(gU,arguments,PV)}else sR=gU.apply(this,arguments);return pV(this,sR)}}function OV($l,VU){var yR,gU,sR,PV,Rl={label:0,sent:function(){if(sR[0]&1)throw sR[1];return sR[1]},trys:[],ops:[]};return PV={next:Ml(0),throw:Ml(1),return:Ml(2)},typeof Symbol=="function"&&(PV[Symbol.iterator]=function(){return this}),PV;function Ml(gR){return function(tR){return wl([gR,tR])}}function wl(gR){if(yR)throw new TypeError("Generator is already executing.");for(;Rl;)try{if(yR=1,gU&&(sR=gR[0]&2?gU.return:gR[0]?gU.throw||((sR=gU.return)&&sR.call(gU),0):gU.next)&&!(sR=sR.call(gU,gR[1])).done)return sR;switch(gU=0,sR&&(gR=[gR[0]&2,sR.value]),gR[0]){case 0:case 1:sR=gR;break;case 4:return Rl.label++,{value:gR[1],done:!1};case 5:Rl.label++,gU=gR[1],gR=[0];continue;case 7:gR=Rl.ops.pop(),Rl.trys.pop();continue;default:if(sR=Rl.trys,!(sR=sR.length>0&&sR[sR.length-1])&&(gR[0]===6||gR[0]===2)){Rl=0;continue}if(gR[0]===3&&(!sR||gR[1]>sR[0]&&gR[1]<sR[3])){Rl.label=gR[1];break}if(gR[0]===6&&Rl.label<sR[1]){Rl.label=sR[1],sR=gR;break}if(sR&&Rl.label<sR[2]){Rl.label=sR[2],Rl.ops.push(gR);break}sR[2]&&Rl.ops.pop(),Rl.trys.pop();continue}gR=VU.call($l,Rl)}catch(tR){gR=[6,tR],gU=0}finally{yR=sR=0}if(gR[0]&5)throw gR[1];return{value:gR[0]?gR[1]:void 0,done:!0}}}var $V=function($l){YG[$l]=[];var VU=qN[$l].split("M").slice(1).map(function(gR){return gR.split("L").map(function(tR){return tR.trim().split(" ").map(parseFloat)})}),yR=!0,gU=!1,sR=void 0;try{for(var PV=VU[Symbol.iterator](),Rl;!(yR=(Rl=PV.next()).done);yR=!0)for(var Ml=Rl.value,wl=0;wl<Ml.length-1;wl++)YG[$l].push({x1:Ml[wl][0],y1:1-Ml[wl][1],x2:Ml[wl+1][0],y2:1-Ml[wl+1][1]})}catch(gR){gU=!0,sR=gR}finally{try{!yR&&PV.return!=null&&PV.return()}finally{if(gU)throw sR}}};function Cl(){var $l=DV([`
22050
22050
  margin-top: 2px;
22051
22051
  padding: 4px;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@tscircuit/runframe",
3
3
  "main": "dist/preview.js",
4
4
  "type": "module",
5
- "version": "0.0.92",
5
+ "version": "0.0.94",
6
6
  "exports": {
7
7
  ".": "./dist/preview.js",
8
8
  "./preview": "./dist/preview.js",
@@ -52,9 +52,9 @@
52
52
  "@radix-ui/react-dropdown-menu": "^2.1.2",
53
53
  "@radix-ui/react-icons": "^1.3.2",
54
54
  "@radix-ui/react-tabs": "^1.1.1",
55
- "@tscircuit/3d-viewer": "^0.0.94",
55
+ "@tscircuit/3d-viewer": "^0.0.95",
56
56
  "@tscircuit/assembly-viewer": "^0.0.1",
57
- "@tscircuit/core": "^0.0.265",
57
+ "@tscircuit/core": "^0.0.267",
58
58
  "@tscircuit/eval-webworker": "^0.0.64",
59
59
  "@tscircuit/file-server": "^0.0.13",
60
60
  "@tscircuit/pcb-viewer": "^1.10.22",