@tscircuit/runframe 0.0.1 → 0.0.2
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.
|
@@ -67,7 +67,7 @@ No matching component was found for:
|
|
|
67
67
|
${g.stack}`),h.complete=!0,"root"in this&&this.root&&this.root.emit("asyncEffectComplete",{effectName:m,componentDisplayName:this.getString(),phase:h.phase,error:g.toString()})})}_emitRenderLifecycleEvent(m,u){const h={renderId:this._renderId,componentDisplayName:this.getString()},g=`renderable:renderLifecycle:${m}:${u}`;"root"in this&&this.root&&(this.root.emit(g,{...h,type:g}),this.root.emit("renderable:renderLifecycle:anyEvent",{...h,type:g}))}getString(){return this.constructor.name}_hasIncompleteAsyncEffects(){return this._asyncEffects.some(m=>!m.complete)}getCurrentRenderPhase(){return this._currentRenderPhase}getRenderGraph(){return{id:this._renderId,currentPhase:this._currentRenderPhase,renderPhaseStates:this.renderPhaseStates,shouldBeRemoved:this.shouldBeRemoved,children:this.children.map(m=>m.getRenderGraph())}}runRenderCycle(){for(const m of orderedRenderPhases)this.runRenderPhaseForChildren(m),this.runRenderPhase(m)}runRenderPhase(m){var _,A,b;this._currentRenderPhase=m;const u=this.renderPhaseStates[m],h=u.initialized,g=u.dirty;if(!h&&this.shouldBeRemoved)return;if(this.shouldBeRemoved&&h){this._emitRenderLifecycleEvent(m,"start"),(_=this==null?void 0:this[`remove${m}`])==null||_.call(this),u.initialized=!1,u.dirty=!1,this._emitRenderLifecycleEvent(m,"end");return}const y=orderedRenderPhases.indexOf(m)-1;if(y>=0){const S=orderedRenderPhases[y];if(this._asyncEffects.filter(T=>T.phase===S).some(T=>!T.complete))return}if(this._emitRenderLifecycleEvent(m,"start"),h){g&&((A=this==null?void 0:this[`update${m}`])==null||A.call(this),u.dirty=!1),this._emitRenderLifecycleEvent(m,"end");return}u.dirty=!1,(b=this==null?void 0:this[`doInitial${m}`])==null||b.call(this),u.initialized=!0,this._emitRenderLifecycleEvent(m,"end")}runRenderPhaseForChildren(m){for(const u of this.children)u.runRenderPhaseForChildren(m),u.runRenderPhase(m)}renderError(m){throw typeof m=="string"?new Error(m):new Error(JSON.stringify(m,null,2))}},catalogue$1={},extendCatalogue=m=>{const u=Object.fromEntries(Object.entries(m).map(([h,g])=>[h.toLowerCase(),g]));Object.assign(catalogue$1,m),Object.assign(catalogue$1,u)};function prepare$1(m,u){const h=m;return h.__tsci={...u},m}var hostConfig={supportsMutation:!0,createInstance(m,u){const h=catalogue$1[m];if(!h)throw Object.keys(catalogue$1).length===0?new Error("No components registered in catalogue, did you forget to import lib/register-catalogue in your test file?"):new Error(`Unsupported component type (not registered in @tscircuit/core catalogue): "${m}" See CREATING_NEW_COMPONENTS.md`);return prepare$1(new h(u),{})},createTextInstance(){return{}},appendInitialChild(m,u){m.add(u)},appendChild(m,u){m.add(u)},appendChildToContainer(m,u){m.add(u)},finalizeInitialChildren(){return!1},prepareUpdate(){return null},shouldSetTextContent(){return!1},getRootHostContext(){return{}},getChildHostContext(){return{}},prepareForCommit(){return null},resetAfterCommit(){},commitMount(){},commitUpdate(){},removeChild(){},clearContainer(){},supportsPersistence:!1,getPublicInstance(m){return m},preparePortalMount(m){throw new Error("Function not implemented.")},scheduleTimeout(m,u){throw new Error("Function not implemented.")},cancelTimeout(m){throw new Error("Function not implemented.")},noTimeout:void 0,isPrimaryRenderer:!1,getCurrentEventPriority(){throw new Error("Function not implemented.")},getInstanceFromNode(m){throw new Error("Function not implemented.")},beforeActiveInstanceBlur(){throw new Error("Function not implemented.")},afterActiveInstanceBlur(){throw new Error("Function not implemented.")},prepareScopeUpdate:(m,u)=>{throw new Error("Function not implemented.")},getInstanceFromScope:m=>{throw new Error("Function not implemented.")},detachDeletedInstance:m=>{throw new Error("Function not implemented.")},supportsHydration:!1},reconciler$1=ReactReconciler(hostConfig),createInstanceFromReactElement=m=>{const u={children:[],props:{name:"$root"},add(y){y.parent=this,this.children.push(y)},computePcbGlobalTransform(){return identity$4()}},h=reconciler$1.createContainer(u,0,null,!1,null,"tsci",y=>{console.log("Error in createContainer"),console.error(y)},null);reconciler$1.updateContainer(m,h,null,()=>{});const g=reconciler$1.getPublicRootInstance(h);return g||u.children[0]},underscorifyPinStyles=m=>{if(!m)return;const u={};for(const[h,g]of Object.entries(m))u[h]={bottom_margin:g.bottomMargin,left_margin:g.leftMargin,right_margin:g.rightMargin,top_margin:g.topMargin};return u},underscorifyPortArrangement=m=>{if(m){if("leftSide"in m||"rightSide"in m||"topSide"in m||"bottomSide"in m)return{left_side:m.leftSide,right_side:m.rightSide,top_side:m.topSide,bottom_side:m.bottomSide};if("leftPinCount"in m||"rightPinCount"in m||"topPinCount"in m||"bottomPinCount"in m)return{left_size:m.leftPinCount,right_size:m.rightPinCount,top_size:m.topPinCount,bottom_size:m.bottomPinCount};if("leftSize"in m||"rightSize"in m||"topSize"in m||"bottomSize"in m)return{left_size:m.leftSize,right_size:m.rightSize,top_size:m.topSize,bottom_size:m.bottomSize}}},InvalidProps=class extends Error{constructor(m,u,h){let g;const _=Object.keys(h).filter(A=>A!=="_errors").map(A=>h[A]._errors[0]?`${A} (${h[A]._errors[0]})`:`${A} (${JSON.stringify(h[A])})`).join(", ");"name"in u?g=`Invalid props for ${m} "${u.name}": ${_}`:"footprint"in u&&typeof u.footprint=="string"?g=`Invalid props for ${m} (unnamed ${u.footprint} component): ${_}`:g=`Invalid props for ${m} (unnamed): ${_}`,super(g),this.componentName=m,this.originalProps=u,this.formattedError=h}};function isMatchingSelector(m,u){const h=u.match(/^#(\w+)/);if(h)return m.props.id===h[1];const g=u.match(/^\.(\w+)/);if(g)return m.isMatchingNameOrAlias(g[1]);let[y,..._]=u.split(/(?=[#.[])/);return y==="pin"&&(y="port"),y&&y!=="*"&&m.lowercaseComponentName!==y.toLowerCase()?!1:_.every(A=>{if(A.startsWith("#"))return m.props.id===A.slice(1);if(A.startsWith("."))return m.isMatchingNameOrAlias(A.slice(1));const b=A.match(/\[(\w+)=['"]?(.+?)['"]?\]/);if(!b)return!0;const[,S,E]=b;return m.props[S].toString()===E})}var debugSelectAll=Debug4("tscircuit:primitive-component:selectAll"),PrimitiveComponent=class extends Renderable{constructor(u){super(u);Qi(this,"parent",null);Qi(this,"children");Qi(this,"childrenPendingRemoval");Qi(this,"props");Qi(this,"_parsedProps");Qi(this,"externallyAddedAliases");Qi(this,"isPrimitiveContainer",!1);Qi(this,"source_group_id",null);Qi(this,"source_component_id",null);Qi(this,"schematic_component_id",null);Qi(this,"pcb_component_id",null);Qi(this,"cad_component_id",null);this.children=[],this.childrenPendingRemoval=[],this.props=u??{},this.externallyAddedAliases=[];const h=this.config.zodProps.safeParse(u??{});if(h.success)this._parsedProps=h.data;else throw new InvalidProps(this.lowercaseComponentName,this.props,h.error.format())}get config(){return{componentName:"",zodProps:z.object({}).passthrough()}}get componentName(){return this.config.componentName}getInheritedProperty(u){let h=this;for(;h;){if(h._parsedProps&&u in h._parsedProps)return h._parsedProps[u];h=h.parent}}get lowercaseComponentName(){return this.componentName.toLowerCase()}get isSubcircuit(){var u;return!!this.props.subcircuit||this.lowercaseComponentName==="group"&&((u=this==null?void 0:this.parent)==null?void 0:u.isRoot)}get isGroup(){return this.lowercaseComponentName==="group"}setProps(u){var y,_;const h=this.config.zodProps.parse({...this.props,...u}),g=this.props;this.props=h,this._parsedProps=this.config.zodProps.parse(u),this.onPropsChange({oldProps:g,newProps:h,changedProps:Object.keys(u)}),(_=(y=this.parent)==null?void 0:y.onChildChanged)==null||_.call(y,this)}computePcbPropsTransform(){const{_parsedProps:u}=this;return compose(translate(u.pcbX??0,u.pcbY??0),rotate((u.pcbRotation??0)*Math.PI/180))}_computePcbGlobalTransformBeforeLayout(){var g,y,_;const{_parsedProps:u}=this,h=this.getSubcircuit()._getManualPlacementForComponent(this);if(h&&this.props.pcbX===void 0&&this.props.pcbY===void 0)return compose(((g=this.parent)==null?void 0:g._computePcbGlobalTransformBeforeLayout())??identity$4(),compose(translate(h.x,h.y),rotate((u.pcbRotation??0)*Math.PI/180)));if(this.isPcbPrimitive){const A=this.getPrimitiveContainer();if(A){const b=A._parsedProps.layer==="bottom",S=A._getGlobalPcbPositionBeforeLayout();if(b)return compose(translate(S.x,S.y),flipY(),translate(-S.x,-S.y)),compose(((y=this.parent)==null?void 0:y._computePcbGlobalTransformBeforeLayout())??identity$4(),flipY(),this.computePcbPropsTransform())}}return compose(((_=this.parent)==null?void 0:_._computePcbGlobalTransformBeforeLayout())??identity$4(),this.computePcbPropsTransform())}getPrimitiveContainer(){var u,h;return this.isPrimitiveContainer?this:((h=(u=this.parent)==null?void 0:u.getPrimitiveContainer)==null?void 0:h.call(u))??null}_getPcbCircuitJsonBounds(){return{center:{x:0,y:0},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getPcbPrimitiveFlippedHelpers(){const u=this.getPrimitiveContainer(),h=u?u._parsedProps.layer==="bottom":!1;return{isFlipped:h,maybeFlipLayer:y=>h?y==="top"?"bottom":"top":y}}_setPositionFromLayout(u){throw new Error(`_setPositionFromLayout not implemented for ${this.componentName}`)}computeSchematicPropsTransform(){return compose(translate(this.props.schX??0,this.props.schY??0))}computeSchematicGlobalTransform(){var u,h;return compose(((h=(u=this.parent)==null?void 0:u.computeSchematicGlobalTransform)==null?void 0:h.call(u))??identity$4(),this.computeSchematicPropsTransform())}_getSchematicSymbolName(){const{_parsedProps:u}=this,h=this.config.schematicSymbolName,g=`${h}_horz`,y=`${h}_vert`,_=`${h}_up`,A=`${h}_down`,b=`${h}_left`,S=`${h}_right`;if(S in symbols_index_default&&(u.schRotation===void 0||u.schRotation===0))return S;if(_ in symbols_index_default&&u.schRotation===90)return _;if(b in symbols_index_default&&u.schRotation===180)return b;if(A in symbols_index_default&&u.schRotation===270)return A;if(g in symbols_index_default&&(u.schRotation===0||u.schRotation===void 0||u.schRotation===180))return g;if(y in symbols_index_default&&(u.schRotation===90||u.schRotation===270))return y;if(h in symbols_index_default)return h}_getSchematicSymbolNameOrThrow(){const u=this._getSchematicSymbolName();if(!u)throw new Error(`No schematic symbol found (given: "${this.config.schematicSymbolName}")`);return u}getSchematicSymbol(){const u=this._getSchematicSymbolName();return u?symbols_index_default[u]??null:null}_getManualPlacementForComponent(u){var _;if(!this.isSubcircuit)return null;const h=this.props.layout,g=this.props.manualEdits;if(!h&&!g)return null;const y=((_=h==null?void 0:h.manual_pcb_placement_config)==null?void 0:_.positions)||(g==null?void 0:g.pcb_placements);if(!y)return null;for(const A of y)if(h&&isMatchingSelector(u,A.selector)||u.props.name===A.selector){const b=applyToPoint(this._computePcbGlobalTransformBeforeLayout(),A.center);return Array.isArray(b)?{x:b[0],y:b[1]}:b}return null}_getGlobalPcbPositionBeforeLayout(){return applyToPoint(this._computePcbGlobalTransformBeforeLayout(),{x:0,y:0})}_getGlobalSchematicPositionBeforeLayout(){return applyToPoint(this.computeSchematicGlobalTransform(),{x:0,y:0})}get root(){var u;return((u=this.parent)==null?void 0:u.root)??null}onAddToParent(u){this.parent=u}onPropsChange(u){}onChildChanged(u){var h,g;(g=(h=this.parent)==null?void 0:h.onChildChanged)==null||g.call(h,u)}add(u){u.onAddToParent(this),u.parent=this,this.children.push(u)}addAll(u){for(const h of u)this.add(h)}remove(u){this.children=this.children.filter(h=>h!==u),this.childrenPendingRemoval.push(u),u.shouldBeRemoved=!0}getSubcircuitSelector(){const u=this._parsedProps.name,h=u?`${this.lowercaseComponentName}.${u}`:this.lowercaseComponentName;return!this.parent||this.parent.isSubcircuit?h:`${this.parent.getSubcircuitSelector()} > ${h}`}getFullPathSelector(){var y,_;const u=this._parsedProps.name,h=u?`${this.lowercaseComponentName}.${u}`:this.lowercaseComponentName,g=(_=(y=this.parent)==null?void 0:y.getFullPathSelector)==null?void 0:_.call(y);return g?`${g} > ${h}`:h}getNameAndAliases(){return[this._parsedProps.name,...this._parsedProps.portHints??[]].filter(Boolean)}isMatchingNameOrAlias(u){return this.getNameAndAliases().includes(u)}isMatchingAnyOf(u){return this.getNameAndAliases().some(h=>u.map(g=>g.toString()).includes(h))}getPcbSize(){throw new Error(`getPcbSize not implemented for ${this.componentName}`)}doesSelectorMatch(u){const h=[this.componentName,this.lowercaseComponentName],g=[this._parsedProps.name].filter(Boolean),y=u.trim().split(/\> /)[0],_=y[0];return y.length>1?!1:!!(u==="*"||u[0]==="#"&&u.slice(1)===this.props.id||u[0]==="."&&g.includes(u.slice(1))||/^[a-zA-Z0-9_]/.test(_)&&h.includes(_))}getSubcircuit(){var h,g;if(this.isSubcircuit)return this;const u=(g=(h=this.parent)==null?void 0:h.getSubcircuit)==null?void 0:g.call(h);if(!u)throw new Error("Component is not inside an opaque group (no board?)");return u}selectAll(u){debugSelectAll(`selectAll: "${u}"`);const h=u.trim().split(/\s+/);let g=h[0]===">"?this.children:this.getSelectableDescendants(),y=[],_=!1,A=-1;for(const b of h)if(A++,debugSelectAll(`
|
|
68
68
|
|
|
69
69
|
iteration: ${A}`),debugSelectAll(`part: "${h[A]}"`),debugSelectAll(`currentSearch: [${g.map(S=>S.getString()).join(",")}]`),debugSelectAll(`currentResults: [${y.map(S=>S.getString()).join(",")}]`),b===">")_=!0;else{const S=g.filter(T=>isMatchingSelector(T,b));g=S.flatMap(T=>_?T.children:T.getSelectableDescendants()),y=S,_=!1}return y}selectOne(u,h){var y;let g=(y=h==null?void 0:h.type)==null?void 0:y.toLowerCase();return h!=null&&h.port&&(g="port"),g?this.selectAll(u).find(_=>_.lowercaseComponentName===g)??null:h!=null&&h.pcbPrimitive?this.selectAll(u).find(_=>_.isPcbPrimitive)??null:h!=null&&h.schematicPrimitive?this.selectAll(u).find(_=>_.isSchematicPrimitive)??null:this.selectAll(u)[0]??null}getAvailablePcbLayers(){var u,h;if(this.isPcbPrimitive){const{maybeFlipLayer:g}=this._getPcbPrimitiveFlippedHelpers();return"layer"in this._parsedProps||this.componentName==="SmtPad"?[g(this._parsedProps.layer??"top")]:"layers"in this._parsedProps?this._parsedProps.layers:this.componentName==="PlatedHole"?((h=(u=this.root)==null?void 0:u._getBoard())==null?void 0:h.allLayers)??["top","bottom"]:[]}return[]}getDescendants(){const u=[];for(const h of this.children)u.push(h),u.push(...h.getDescendants());return u}getSelectableDescendants(){const u=[];for(const h of this.children)h.isSubcircuit?u.push(h):(u.push(h),u.push(...h.getSelectableDescendants()));return u}_getPinCount(){return 0}_getSchematicBoxDimensions(){return null}renderError(u){var h;if(typeof u=="string")return super.renderError(u);(h=this.root)==null||h.db.pcb_placement_error.insert(u)}getString(){var y,_;const{lowercaseComponentName:u,_parsedProps:h,parent:g}=this;return(h==null?void 0:h.pinNumber)!==void 0&&((y=g==null?void 0:g.props)!=null&&y.name)&&(h!=null&&h.name)?`<${u}#${this._renderId}(pin:${h.pinNumber} .${g==null?void 0:g.props.name}>.${h.name}) />`:(_=g==null?void 0:g.props)!=null&&_.name&&(h!=null&&h.name)?`<${u}#${this._renderId}(.${g==null?void 0:g.props.name}>.${h==null?void 0:h.name}) />`:h!=null&&h.from&&(h!=null&&h.to)?`<${u}#${this._renderId}(from:${h.from} to:${h==null?void 0:h.to}) />`:h!=null&&h.name?`<${u}#${this._renderId} name=".${h==null?void 0:h.name}" />`:h!=null&&h.portHints?`<${u}#${this._renderId}(${h.portHints.map(A=>`.${A}`).join(", ")}) />`:`<${u}#${this._renderId} />`}get[Symbol.toStringTag](){return this.getString()}[Symbol.for("nodejs.util.inspect.custom")](){return this.getString()}};function pairs(m){const u=[];for(let h=0;h<m.length-1;h++)u.push([m[h],m[h+1]]);return u}var netProps=z.object({name:z.string()}),Net=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"source_net_id")}get config(){return{componentName:"Net",zodProps:netProps}}getPortSelector(){return`net.${this.props.name}`}doInitialSourceRender(){const{db:u}=this.root,{_parsedProps:h}=this,g=u.source_net.insert({name:h.name,member_source_group_ids:[]});this.source_net_id=g.source_net_id}getAllConnectedPorts(){const u=this.getSubcircuit().selectAll("port"),h=[];for(const g of u){const y=g._getDirectlyConnectedTraces();for(const _ of y)if(_._isExplicitlyConnectedToNet(this)){h.push(g);break}}return h}_getAllDirectlyConnectedTraces(){const u=this.getSubcircuit().selectAll("trace"),h=[];for(const g of u)g._isExplicitlyConnectedToNet(this)&&h.push(g);return h}doInitialPcbRouteNetIslands(){var _;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,h=this._getAllDirectlyConnectedTraces().filter(A=>{var b;return(((b=A._portsRoutedOnPcb)==null?void 0:b.length)??0)>0}),g=[];for(const A of h){const b=A._portsRoutedOnPcb,S=g.find(E=>b.some(T=>E.ports.includes(T)));if(!S){g.push({ports:[...b],traces:[A]});continue}S.traces.push(A),S.ports.push(...b)}if(g.length===0)return;const y=pairs(g);for(const[A,b]of y){const S=A.ports.map(I=>I._getGlobalPcbPositionBeforeLayout()),E=b.ports.map(I=>I._getGlobalPcbPositionBeforeLayout());let T=1/0,w=[-1,-1];for(let I=0;I<S.length;I++){const F=S[I];for(let N=0;N<E.length;N++){const O=E[N],U=Math.sqrt((F.x-O.x)**2+(F.y-O.y)**2);U<T&&(T=U,w=[I,N])}}const C=A.ports[w[0]],M=b.ports[w[1]],R=u.toArray().filter(I=>I.type==="pcb_smtpad"||I.type==="pcb_trace"||I.type==="pcb_plated_hole"||I.type==="pcb_hole"||I.type==="source_port"||I.type==="pcb_port"),{solution:P}=autoroute2(R.concat([{type:"source_trace",source_trace_id:"__net_trace_tmp",connected_source_port_ids:[C.source_port_id,M.source_port_id]}])),L=P[0];if(!L){this.renderError({pcb_trace_error_id:"",pcb_trace_id:"__net_trace_tmp",pcb_component_ids:[C.pcb_component_id,M.pcb_component_id].filter(Boolean),pcb_port_ids:[C.pcb_port_id,M.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}u.pcb_trace.insert(L)}}renderError(u){var h;if(typeof u=="string")return super.renderError(u);(h=this.root)==null||h.db.pcb_trace_error.insert(u)}},createNetsFromProps=(m,u)=>{for(const h of u)typeof h=="string"&&h.startsWith("net.")&&(m.getSubcircuit().selectOne(h)||m.getSubcircuit().add(new Net({name:h.split("net.")[1]})))},SmtPad=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_smtpad_id",null);Qi(this,"matchedPort",null);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SmtPad",zodProps:smtPadProps}}getPcbSize(){const{_parsedProps:u}=this;if(u.shape==="circle")return{width:u.radius*2,height:u.radius*2};if(u.shape==="rect")return{width:u.width,height:u.height};throw new Error(`getPcbSize for shape "${u.shape}" not implemented for ${this.componentName}`)}doInitialPortMatching(){var h;const u=(h=this.getPrimitiveContainer())==null?void 0:h.selectAll("port");if(this.props.portHints){for(const g of u)if(g.isMatchingAnyOf(this.props.portHints)){this.matchedPort=g,g.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var w,C,M,R,P;if((w=this.root)!=null&&w.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this;if(!h.portHints)return;const g=this.getPrimitiveContainer(),y=this._getGlobalPcbPositionBeforeLayout();g==null||g._getGlobalPcbPositionBeforeLayout();const _=decomposeTSR(this._computePcbGlobalTransformBeforeLayout()),A=Math.abs(_.rotation.angle*(180/Math.PI)-90)%180<.01,{maybeFlipLayer:b}=this._getPcbPrimitiveFlippedHelpers(),S=(g==null?void 0:g._parsedProps.pcbRotation)??0;let E=null;const T=((C=this.parent)==null?void 0:C.pcb_component_id)??((M=this.getPrimitiveContainer())==null?void 0:M.pcb_component_id);h.shape==="circle"?(E=u.pcb_smtpad.insert({pcb_component_id:T,pcb_port_id:(R=this.matchedPort)==null?void 0:R.pcb_port_id,layer:b(h.layer??"top"),shape:"circle",radius:h.radius,port_hints:h.portHints.map(L=>L.toString()),x:y.x,y:y.y}),u.pcb_solder_paste.insert({layer:E.layer,shape:"circle",radius:E.radius*.7,x:E.x,y:E.y,pcb_component_id:E.pcb_component_id,pcb_smtpad_id:E.pcb_smtpad_id})):h.shape==="rect"&&(E=S===0||A?u.pcb_smtpad.insert({pcb_component_id:T,pcb_port_id:(P=this.matchedPort)==null?void 0:P.pcb_port_id,layer:b(h.layer??"top"),shape:"rect",width:A?h.height:h.width,height:A?h.width:h.height,port_hints:h.portHints.map(L=>L.toString()),x:y.x,y:y.y}):u.pcb_smtpad.insert({pcb_component_id:T,layer:h.layer??"top",shape:"rotated_rect",width:h.width,height:h.height,x:y.x,y:y.y,ccw_rotation:S,port_hints:h.portHints.map(L=>L.toString())}),E.shape==="rect"&&u.pcb_solder_paste.insert({layer:E.layer,shape:"rect",width:E.width*.7,height:E.height*.7,x:E.x,y:E.y,pcb_component_id:E.pcb_component_id,pcb_smtpad_id:E.pcb_smtpad_id})),E&&(this.pcb_smtpad_id=E.pcb_smtpad_id)}doInitialPcbPortAttachment(){var h,g;if((h=this.root)!=null&&h.pcbDisabled)return;const{db:u}=this.root;u.pcb_smtpad.update(this.pcb_smtpad_id,{pcb_port_id:(g=this.matchedPort)==null?void 0:g.pcb_port_id})}_getPcbCircuitJsonBounds(){const{db:u}=this.root,h=u.pcb_smtpad.get(this.pcb_smtpad_id);if(h.shape==="rect")return{center:{x:h.x,y:h.y},bounds:{left:h.x-h.width/2,top:h.y-h.height/2,right:h.x+h.width/2,bottom:h.y+h.height/2},width:h.width,height:h.height};if(h.shape==="rotated_rect"){const g=h.ccw_rotation*Math.PI/180,y=Math.cos(g),_=Math.sin(g),A=h.width/2,b=h.height/2,S=Math.abs(A*y)+Math.abs(b*_),E=Math.abs(A*_)+Math.abs(b*y);return{center:{x:h.x,y:h.y},bounds:{left:h.x-S,right:h.x+S,top:h.y-E,bottom:h.y+E},width:S*2,height:E*2}}if(h.shape==="circle")return{center:{x:h.x,y:h.y},bounds:{left:h.x-h.radius,top:h.y-h.radius,right:h.x+h.radius,bottom:h.y+h.radius},width:h.radius*2,height:h.radius*2};throw new Error(`circuitJson bounds calculation not implemented for shape "${h.shape}"`)}_setPositionFromLayout(u){var y;const{db:h}=this.root;h.pcb_smtpad.update(this.pcb_smtpad_id,{x:u.x,y:u.y});const g=h.pcb_solder_paste.list().find(_=>_.pcb_smtpad_id===this.pcb_smtpad_id);h.pcb_solder_paste.update(g==null?void 0:g.pcb_solder_paste_id,{x:u.x,y:u.y}),(y=this.matchedPort)==null||y._setPositionFromLayout(u)}},SilkscreenPath=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_silkscreen_path_id",null)}get config(){return{componentName:"SilkscreenPath",zodProps:silkscreenPathProps}}doInitialPcbPrimitiveRender(){var A,b;if((A=this.root)!=null&&A.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=h.layer??"top";if(g!=="top"&&g!=="bottom")throw new Error(`Invalid layer "${g}" for SilkscreenPath. Must be "top" or "bottom".`);const y=this._computePcbGlobalTransformBeforeLayout(),_=u.pcb_silkscreen_path.insert({pcb_component_id:(b=this.parent)==null?void 0:b.pcb_component_id,layer:g,route:h.route.map(S=>{const E=applyToPoint(y,{x:S.x,y:S.y});return{...S,x:E.x,y:E.y}}),stroke_width:h.strokeWidth??.1});this.pcb_silkscreen_path_id=_.pcb_silkscreen_path_id}},PlatedHole=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_plated_hole_id",null);Qi(this,"matchedPort",null);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"PlatedHole",zodProps:platedHoleProps}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:u}=this;if(u.shape==="circle")return{width:u.outerDiameter,height:u.outerDiameter};if(u.shape==="oval"||u.shape==="pill")return{width:u.outerWidth,height:u.outerHeight};throw new Error(`getPcbSize for shape "${u.shape}" not implemented for ${this.componentName}`)}_getPcbCircuitJsonBounds(){const{db:u}=this.root,h=u.pcb_plated_hole.get(this.pcb_plated_hole_id),g=this.getPcbSize();return{center:{x:h.x,y:h.y},bounds:{left:h.x-g.width/2,top:h.y-g.height/2,right:h.x+g.width/2,bottom:h.y+g.height/2},width:g.width,height:g.height}}_setPositionFromLayout(u){var g;const{db:h}=this.root;h.pcb_plated_hole.update(this.pcb_plated_hole_id,{x:u.x,y:u.y}),(g=this.matchedPort)==null||g._setPositionFromLayout(u)}doInitialPortMatching(){var h;const u=(h=this.getPrimitiveContainer())==null?void 0:h.selectAll("port");if(this.props.portHints){for(const g of u)if(g.isMatchingAnyOf(this.props.portHints)){this.matchedPort=g,g.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var _,A,b,S,E;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this._getGlobalPcbPositionBeforeLayout(),y=((A=this.parent)==null?void 0:A.pcb_component_id)??((b=this.getPrimitiveContainer())==null?void 0:b.pcb_component_id);if(h.shape==="circle"){const T=u.pcb_plated_hole.insert({pcb_component_id:y,pcb_port_id:(S=this.matchedPort)==null?void 0:S.pcb_port_id,outer_diameter:h.outerDiameter,hole_diameter:h.holeDiameter,shape:"circle",port_hints:this.getNameAndAliases(),x:g.x,y:g.y,layers:["top","bottom"]});this.pcb_plated_hole_id=T.pcb_plated_hole_id}else if(h.shape==="pill"||h.shape==="oval"){const T=u.pcb_plated_hole.insert({pcb_component_id:y,pcb_port_id:(E=this.matchedPort)==null?void 0:E.pcb_port_id,outer_width:h.outerWidth,outer_height:h.outerHeight,hole_width:h.innerWidth,hole_height:h.innerHeight,shape:h.shape,port_hints:this.getNameAndAliases(),x:g.x,y:g.y,layers:["top","bottom"]});this.pcb_plated_hole_id=T.pcb_plated_hole_id}}doInitialPcbPortAttachment(){var h,g;if((h=this.root)!=null&&h.pcbDisabled)return;const{db:u}=this.root;u.pcb_plated_hole.update(this.pcb_plated_hole_id,{pcb_port_id:(g=this.matchedPort)==null?void 0:g.pcb_port_id})}},Keepout=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_keepout_id",null);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Keepout",zodProps:pcbKeepoutProps}}doInitialPcbPrimitiveRender(){var b;if((b=this.root)!=null&&b.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this._getGlobalPcbPositionBeforeLayout(),y=decomposeTSR(this._computePcbGlobalTransformBeforeLayout()),_=Math.abs(y.rotation.angle*(180/Math.PI)-90)%180<.01;let A=null;h.shape==="circle"?A=u.pcb_keepout.insert({layers:["top"],shape:"circle",radius:h.radius,center:{x:g.x,y:g.y}}):h.shape==="rect"&&(A=u.pcb_keepout.insert({layers:["top"],shape:"rect",..._?{width:h.height,height:h.width}:{width:h.width,height:h.height},center:{x:g.x,y:g.y}})),A&&(this.pcb_keepout_id=A.pcb_keepout_id)}},Hole=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_hole_id",null);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Hole",zodProps:holeProps}}getPcbSize(){const{_parsedProps:u}=this;return{width:u.diameter,height:u.diameter}}doInitialPcbPrimitiveRender(){var _;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this._getGlobalPcbPositionBeforeLayout(),y=u.pcb_hole.insert({hole_shape:"circle",hole_diameter:h.diameter,x:g.x,y:g.y});this.pcb_hole_id=y.pcb_hole_id}_getPcbCircuitJsonBounds(){const{db:u}=this.root,h=u.pcb_hole.get(this.pcb_hole_id),g=this.getPcbSize();return{center:{x:h.x,y:h.y},bounds:{left:h.x-g.width/2,top:h.y-g.height/2,right:h.x+g.width/2,bottom:h.y+g.height/2},width:g.width,height:g.height}}_setPositionFromLayout(u){const{db:h}=this.root;h.pcb_hole.update(this.pcb_hole_id,{x:u.x,y:u.y})}},createComponentsFromSoup=m=>{const u=[];for(const h of m)h.type==="pcb_smtpad"&&h.shape==="rect"?u.push(new SmtPad({pcbX:h.x,pcbY:h.y,layer:h.layer,shape:"rect",height:h.height,width:h.width,portHints:h.port_hints})):h.type==="pcb_smtpad"&&h.shape==="circle"?u.push(new SmtPad({pcbX:h.x,pcbY:h.y,layer:h.layer,shape:"circle",radius:h.radius,portHints:h.port_hints})):h.type==="pcb_silkscreen_path"?u.push(new SilkscreenPath({layer:h.layer,route:h.route,strokeWidth:h.stroke_width})):h.type==="pcb_plated_hole"&&h.shape==="circle"?h.shape==="circle"&&u.push(new PlatedHole({pcbX:h.x,pcbY:h.y,shape:"circle",holeDiameter:h.hole_diameter,outerDiameter:h.outer_diameter,portHints:h.port_hints})):h.type==="pcb_keepout"&&h.shape==="circle"?u.push(new Keepout({pcbX:h.center.x,pcbY:h.center.y,shape:"circle",radius:h.radius})):h.type==="pcb_keepout"&&h.shape==="rect"?u.push(new Keepout({pcbX:h.center.x,pcbY:h.center.y,shape:"rect",width:h.width,height:h.height})):h.type==="pcb_hole"&&h.hole_shape==="circle"&&u.push(new Hole({pcbX:h.x,pcbY:h.y,diameter:h.hole_diameter}));return u};function getBoundsOfPcbComponents(m){let u=1/0,h=1/0,g=-1/0,y=-1/0;for(const b of m)if(b.isPcbPrimitive){const{x:S,y:E}=b._getGlobalPcbPositionBeforeLayout(),{width:T,height:w}=b.getPcbSize();u=Math.min(u,S-T/2),h=Math.min(h,E-w/2),g=Math.max(g,S+T/2),y=Math.max(y,E+w/2)}else if(b.componentName==="Footprint"){const S=getBoundsOfPcbComponents(b.children);u=Math.min(u,S.minX),h=Math.min(h,S.minY),g=Math.max(g,S.maxX),y=Math.max(y,S.maxY)}let _=g-u,A=y-h;return _<0&&(_=0),A<0&&(A=0),{minX:u,minY:h,maxX:g,maxY:y,width:_,height:A}}function getRelativeDirection(m,u){const h=u.x-m.x,g=u.y-m.y;return Math.abs(h)>Math.abs(g)?h>=0?"right":"left":g>=0?"up":"down"}var portProps=z.object({name:z.string().optional(),pinNumber:z.number().optional(),aliases:z.array(z.string()).optional()}),Port=class extends PrimitiveComponent{constructor(u,h={}){if(!u.name&&u.pinNumber!==void 0&&(u.name=`pin${u.pinNumber}`),!u.name)throw new Error("Port must have a name or a pinNumber");super(u);Qi(this,"source_port_id",null);Qi(this,"pcb_port_id",null);Qi(this,"schematic_port_id",null);Qi(this,"schematicSymbolPortDef",null);Qi(this,"matchedComponents");Qi(this,"facingDirection",null);Qi(this,"originDescription",null);h.originDescription&&(this.originDescription=h.originDescription),this.matchedComponents=[]}get config(){return{componentName:"Port",zodProps:portProps}}_getGlobalPcbPositionBeforeLayout(){const u=this.matchedComponents.find(h=>h.isPcbPrimitive);if(!u)throw new Error(`Port ${this} has no matched pcb component, can't get global pcb position`);return(u==null?void 0:u._getGlobalPcbPositionBeforeLayout())??{x:0,y:0}}_getPcbCircuitJsonBounds(){if(!this.pcb_port_id)return super._getPcbCircuitJsonBounds();const{db:u}=this.root,h=u.pcb_port.get(this.pcb_port_id);return{center:{x:h.x,y:h.y},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getGlobalPcbPositionAfterLayout(){return this._getPcbCircuitJsonBounds().center}_getGlobalSchematicPositionBeforeLayout(){var g,y;const u=(g=this.parent)==null?void 0:g.getSchematicSymbol();if(u&&this.schematicSymbolPortDef){const _=compose(this.parent.computeSchematicGlobalTransform(),translate(-u.center.x,-u.center.y));return applyToPoint(_,this.schematicSymbolPortDef)}const h=(y=this==null?void 0:this.parent)==null?void 0:y._getSchematicBoxDimensions();if(h&&this.props.pinNumber!==void 0){const _=h.getPortPositionByPinNumber(this.props.pinNumber);return _?applyToPoint(this.parent.computeSchematicGlobalTransform(),_):{x:0,y:0}}return{x:0,y:0}}_getGlobalSchematicPositionAfterLayout(){const{db:u}=this.root;if(!this.schematic_port_id)throw new Error("Can't get schematic port position after layout, no schematic_port_id");const h=u.schematic_port.get(this.schematic_port_id);if(!h)throw new Error(`Schematic port not found when trying to get post-layout position: ${this.schematic_port_id}`);return h.center}registerMatch(u){this.matchedComponents.push(u)}getNameAndAliases(){const{_parsedProps:u}=this;return Array.from(new Set([...u.aliases??[],...u.name?[u.name]:[],...typeof u.pinNumber=="number"?[`pin${u.pinNumber}`,u.pinNumber.toString()]:[],...this.externallyAddedAliases??[]]))}isMatchingPort(u){return this.isMatchingAnyOf(u.getNameAndAliases())}getPortSelector(){var u;return`.${(u=this.parent)==null?void 0:u.props.name} > port.${this.props.name}`}getAvailablePcbLayers(){return Array.from(new Set(this.matchedComponents.flatMap(u=>u.getAvailablePcbLayers())))}_getDirectlyConnectedTraces(){return this.getSubcircuit().selectAll("trace").filter(g=>g._isExplicitlyConnectedToPort(this))}doInitialSourceRender(){var _;const{db:u}=this.root,{_parsedProps:h}=this,g=this.getNameAndAliases(),y=u.source_port.insert({name:h.name,pin_number:h.pinNumber,port_hints:g,source_component_id:(_=this.parent)==null?void 0:_.source_component_id});this.source_port_id=y.source_port_id}doInitialSourceParentAttachment(){var h,g,y,_;const{db:u}=this.root;if(!((h=this.parent)!=null&&h.source_component_id))throw new Error(`${this.getString()} has no parent source component (parent: ${(g=this.parent)==null?void 0:g.getString()})`);u.source_port.update(this.source_port_id,{source_component_id:(y=this.parent)==null?void 0:y.source_component_id}),this.source_component_id=(_=this.parent)==null?void 0:_.source_component_id}doInitialPcbPortRender(){var _,A,b,S;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{matchedComponents:h}=this;if(!((A=this.parent)!=null&&A.pcb_component_id))throw new Error(`${this.getString()} has no parent pcb component, cannot render pcb_port (parent: ${(b=this.parent)==null?void 0:b.getString()})`);const g=h.filter(E=>E.isPcbPrimitive);if(g.length===0)return;if(g.length>1)throw new Error(`${this.getString()} has multiple pcb matches, unclear how to place pcb_port: ${g.map(E=>E.getString()).join(", ")}`);const y=g[0];if("_getPcbCircuitJsonBounds"in y){const E=u.pcb_port.insert({pcb_component_id:(S=this.parent)==null?void 0:S.pcb_component_id,layers:this.getAvailablePcbLayers(),...y._getPcbCircuitJsonBounds().center,source_port_id:this.source_port_id});this.pcb_port_id=E.pcb_port_id}else throw new Error(`${y.getString()} does not have a _getGlobalPcbPositionBeforeLayout method (needed for pcb_port placement)`)}doInitialSchematicPortRender(){var w;const{db:u}=this.root,{_parsedProps:h}=this,g=this.getPrimitiveContainer();if(!g)return;const y=g._getGlobalSchematicPositionBeforeLayout(),_=this._getGlobalSchematicPositionBeforeLayout();let A=null;const b=g._getSchematicBoxDimensions();b&&h.pinNumber!==void 0&&(A=b.getPortPositionByPinNumber(h.pinNumber)),this.getSubcircuit().props._schDebugObjectsEnabled&&u.schematic_debug_object.insert({shape:"rect",center:_,size:{width:.1,height:.1},label:"obstacle"}),A!=null&&A.side?this.facingDirection={left:"left",right:"right",top:"up",bottom:"down"}[A.side]:this.facingDirection=getRelativeDirection(y,_);const S=u.source_port.get(this.source_port_id);let E;for(const C of(S==null?void 0:S.port_hints)??[])C.match(/^(pin)?\d+$/)||(E=C);const T=u.schematic_port.insert({schematic_component_id:(w=this.parent)==null?void 0:w.schematic_component_id,center:_,source_port_id:this.source_port_id,facing_direction:this.facingDirection,distance_from_component_edge:.4,side_of_component:A==null?void 0:A.side,pin_number:h.pinNumber,true_ccw_index:A==null?void 0:A.trueIndex,display_pin_label:E});this.schematic_port_id=T.schematic_port_id}_setPositionFromLayout(u){const{db:h}=this.root;this.pcb_port_id&&h.pcb_port.update(this.pcb_port_id,{x:u.x,y:u.y})}_hasMatchedPcbPrimitive(){return this.matchedComponents.some(u=>u.isPcbPrimitive)}},getPinNumberFromLabels=m=>{const u=m.find(h=>/^(pin)?\d+$/.test(h));return u?Number.parseInt(u.replace(/^pin/,"")):null};function getPortFromHints(m){const u=getPinNumberFromLabels(m);return u?new Port({pinNumber:u,aliases:m.filter(h=>h.toString()!==u.toString()&&h!==`pin${u}`)}):null}var hasExplicitPinMapping=m=>{for(const u of["leftSide","rightSide","topSide","bottomSide"])if(u in m&&typeof m[u]=="number")throw new Error(`A number was specified for "${u}", you probably meant to use "size" not "side"`);return"leftSide"in m||"rightSide"in m||"topSide"in m||"bottomSide"in m},getSizeOfSidesFromPortArrangement=m=>{var _,A,b,S;if(hasExplicitPinMapping(m))return{leftSize:((_=m.leftSide)==null?void 0:_.pins.length)??0,rightSize:((A=m.rightSide)==null?void 0:A.pins.length)??0,topSize:((b=m.topSide)==null?void 0:b.pins.length)??0,bottomSize:((S=m.bottomSide)==null?void 0:S.pins.length)??0};const{leftSize:u=0,rightSize:h=0,topSize:g=0,bottomSize:y=0}=m;return{leftSize:u,rightSize:h,topSize:g,bottomSize:y}},parsePinNumberFromLabelsOrThrow=(m,u)=>{if(typeof m=="number")return m;if(m.startsWith("pin"))return Number(m.slice(3));if(!u)throw new Error(`No pin labels provided and pin number or label is not a number: "${m}"`);for(const h in u)if((Array.isArray(u[h])?u[h]:[u[h]]).includes(m))return Number(h.replace("pin",""));throw new Error(`No pin labels provided and pin number or label is not a number: "${m}"`)};function isExplicitPinMappingArrangement(m){return m.leftSide!==void 0}var getAllDimensionsForSchematicBox=m=>{var L,I,F,N,O,U,W,H;const u=m.portDistanceFromEdge??.4;let h=m.schPortArrangement?getSizeOfSidesFromPortArrangement(m.schPortArrangement):null;const g={left:0,right:0,top:0,bottom:0};let y=m.pinCount??null;if(y===null)if(h)y=h.leftSize+h.rightSize+h.topSize;else throw new Error("Could not determine pin count for the schematic box");if(y&&!h){const Y=Math.floor(y/2);h={leftSize:y-Y,rightSize:Y,topSize:0,bottomSize:0}}h||(h={leftSize:0,rightSize:0,topSize:0,bottomSize:0});const _=({side:Y,sideIndex:J,truePinIndex:Z})=>{var be,ge,le,ne;if(!m.schPortArrangement||!isExplicitPinMappingArrangement(m.schPortArrangement))return Z+1;const oe={left:"top-to-bottom",bottom:"left-to-right",right:"bottom-to-top",top:"right-to-left"}[Y],re=((ge=(be=m.schPortArrangement)==null?void 0:be[`${Y}Side`])==null?void 0:ge.direction)??oe,fe=(ne=(le=m.schPortArrangement)==null?void 0:le[`${Y}Side`])==null?void 0:ne.pins;let _e=J;return re!==oe&&(_e=fe.length-J-1),parsePinNumberFromLabelsOrThrow(fe[_e],m.pinLabels)},A=[];let b=0,S=0;for(let Y=0;Y<h.leftSize;Y++){const J=_({side:"left",sideIndex:Y,truePinIndex:S}),Z=((L=m.schPinStyle)==null?void 0:L[`pin${J}`])??((I=m.schPinStyle)==null?void 0:I[J]);Z!=null&&Z.topMargin&&(b+=Z.topMargin),A.push({trueIndex:S,pinNumber:J,side:"left",distanceFromOrthogonalEdge:b}),Z!=null&&Z.bottomMargin&&(b+=Z.bottomMargin),Y===h.leftSize-1?g.left=b:b+=m.schPinSpacing,S++}b=0;for(let Y=0;Y<h.bottomSize;Y++){const J=_({side:"bottom",sideIndex:Y,truePinIndex:S}),Z=((F=m.schPinStyle)==null?void 0:F[`pin${J}`])??((N=m.schPinStyle)==null?void 0:N[J]);Z!=null&&Z.leftMargin&&(b+=Z.leftMargin),A.push({trueIndex:S,pinNumber:J,side:"bottom",distanceFromOrthogonalEdge:b}),Z!=null&&Z.rightMargin&&(b+=Z.rightMargin),Y===h.bottomSize-1?g.bottom=b:b+=m.schPinSpacing,S++}b=0;for(let Y=0;Y<h.rightSize;Y++){const J=_({side:"right",sideIndex:Y,truePinIndex:S}),Z=((O=m.schPinStyle)==null?void 0:O[`pin${J}`])??((U=m.schPinStyle)==null?void 0:U[J]);Z!=null&&Z.bottomMargin&&(b+=Z.bottomMargin),A.push({trueIndex:S,pinNumber:J,side:"right",distanceFromOrthogonalEdge:b}),Z!=null&&Z.topMargin&&(b+=Z.topMargin),Y===h.rightSize-1?g.right=b:b+=m.schPinSpacing,S++}b=0;for(let Y=0;Y<h.topSize;Y++){const J=_({side:"top",sideIndex:Y,truePinIndex:S}),Z=((W=m.schPinStyle)==null?void 0:W[`pin${J}`])??((H=m.schPinStyle)==null?void 0:H[J]);Z!=null&&Z.rightMargin&&(b+=Z.rightMargin),A.push({trueIndex:S,pinNumber:J,side:"top",distanceFromOrthogonalEdge:b}),Z!=null&&Z.leftMargin&&(b+=Z.leftMargin),Y===h.topSize-1?g.top=b:b+=m.schPinSpacing,S++}let E=m.schWidth;E||(E=Math.max(g.top+m.schPinSpacing*2,g.bottom+m.schPinSpacing*2));const T=m.pinLabels?Math.max(...Object.values(m.pinLabels).map(Y=>Y.length*.1)):0,w=T>0?1.1:0;E=Math.max(E,T+w);let C=m.schHeight;C||(C=Math.max(g.left+m.schPinSpacing*2,g.right+m.schPinSpacing*2));const M={left:{x:-E/2-u,y:g.left/2},bottom:{x:-g.bottom/2,y:-C/2-u},right:{x:E/2+u,y:-g.right/2},top:{x:g.top/2,y:C/2+u}},R={left:{x:0,y:-1},right:{x:0,y:1},top:{x:-1,y:0},bottom:{x:1,y:0}},P=A.map(Y=>{const{distanceFromOrthogonalEdge:J,side:Z}=Y,oe=M[Z],re=R[Z];return{x:oe.x+J*re.x,y:oe.y+J*re.y,...Y}});return{getPortPositionByPinNumber(Y){const J=P.find(Z=>Z.pinNumber.toString()===Y.toString());return J||null},getSize(){return{width:E,height:C}},pinCount:y}},debug=Debug4("tscircuit:core:footprint"),Footprint=class extends PrimitiveComponent{get config(){return{componentName:"Footprint",zodProps:footprintProps}}doInitialPcbFootprintLayout(){var w,C,M,R,P;if((w=this.root)!=null&&w.pcbDisabled)return;const m=this.children.filter(L=>L.componentName==="Constraint");if(m.length===0)return;const{isFlipped:u}=this._getPcbPrimitiveFlippedHelpers(),h=L=>u&&"left"in L&&"right"in L?{...L,left:L.right,right:L.left}:L,g=m.flatMap(L=>L._getAllReferencedComponents().componentsWithSelectors).map(({component:L,selector:I,componentSelector:F,edge:N})=>({component:L,selector:I,componentSelector:F,edge:N,bounds:L._getPcbCircuitJsonBounds()}));if(g.some(L=>L.edge))throw new Error("edge constraints not implemented yet for footprint layout, contributions welcome!");function y(L){return g.find(({selector:I})=>I===L)}const _=new Solver,A={};function b(L){return L in A||(A[L]=new Variable(L),_.addEditVariable(A[L],Strength.weak)),A[L]}for(const{selector:L,bounds:I}of g){const F=b(`${L}_x`),N=b(`${L}_y`);_.suggestValue(F,I.center.x),_.suggestValue(N,I.center.y)}for(const L of m){const I=L._parsedProps;if("xDist"in I){const{xDist:F,left:N,right:O,edgeToEdge:U,centerToCenter:W}=h(I),H=b(`${N}_x`),Y=b(`${O}_x`),J=(C=y(N))==null?void 0:C.bounds,Z=(M=y(O))==null?void 0:M.bounds;if(W){const oe=new Expression(Y,[-1,H]);_.addConstraint(new Constraint(oe,Operator.Eq,I.xDist,Strength.required))}else if(U){const oe=new Expression(Y,-Z.width/2,[-1,H],-J.width/2);_.addConstraint(new Constraint(oe,Operator.Eq,I.xDist,Strength.required))}}else if("yDist"in I){const{yDist:F,top:N,bottom:O,edgeToEdge:U,centerToCenter:W}=I,H=b(`${N}_y`),Y=b(`${O}_y`),J=(R=y(N))==null?void 0:R.bounds,Z=(P=y(O))==null?void 0:P.bounds;if(W){const oe=new Expression(H,[-1,Y]);_.addConstraint(new Constraint(oe,Operator.Eq,I.yDist,Strength.required))}else if(U){const oe=new Expression(H,J.height/2,[-1,Y],-Z.height/2);_.addConstraint(new Constraint(oe,Operator.Eq,I.yDist,Strength.required))}}else if("sameY"in I){const{for:F}=I;if(F.length<2)continue;const N=F.map(U=>b(`${U}_y`)),O=new Expression(...N.slice(1));_.addConstraint(new Constraint(O,Operator.Eq,N[0],Strength.required))}else if("sameX"in I){const{for:F}=I;if(F.length<2)continue;const N=F.map(U=>b(`${U}_x`)),O=new Expression(...N.slice(1));_.addConstraint(new Constraint(O,Operator.Eq,N[0],Strength.required))}}_.updateVariables(),debug.enabled&&(console.log("Solution to layout constraints:"),console.table(Object.entries(A).map(([L,I])=>({var:L,val:I.value()}))));const S={left:1/0,right:-1/0,top:-1/0,bottom:1/0};for(const{selector:L,bounds:{width:I,height:F}}of g){const N=b(`${L}_x`),O=b(`${L}_y`),U=N.value()-I/2,W=N.value()+I/2,H=O.value()+F/2,Y=O.value()-F/2;S.left=Math.min(S.left,U),S.right=Math.max(S.right,W),S.top=Math.max(S.top,H),S.bottom=Math.min(S.bottom,Y)}const E={x:-(S.right+S.left)/2,y:-(S.top+S.bottom)/2},T=this.getPrimitiveContainer()._getGlobalPcbPositionBeforeLayout();E.x+=T.x,E.y+=T.y;for(const{component:L,selector:I}of g){const F=b(`${I}_x`),N=b(`${I}_y`);L._setPositionFromLayout({x:F.value()+E.x,y:N.value()+E.y})}}},debug2=Debug4("tscircuit:core"),rotation3=z.object({x:rotation$3,y:rotation$3,z:rotation$3}),NormalComponent=class extends PrimitiveComponent{constructor(u){super(u);Qi(this,"reactSubtrees",[]);Qi(this,"_impliedFootprint");Qi(this,"isPrimitiveContainer",!0);Qi(this,"_asyncSupplierPartNumbers");Qi(this,"pcb_missing_footprint_error_id");this._addChildrenFromStringFootprint(),this.initPorts()}initPorts(u={}){var A,b,S,E,T,w,C,M,R,P,L,I,F,N;if((A=this.root)!=null&&A.schematicDisabled)return;const{config:h}=this,g=[],y=this._parsedProps.schPortArrangement;if(y&&!this._parsedProps.pinLabels){for(const W in y){const H=y[W].pins;if(Array.isArray(H))for(const Y of H){const J=parsePinNumberFromLabelsOrThrow(Y,this._parsedProps.pinLabels);g.push(new Port({pinNumber:J,aliases:((b=u.additionalAliases)==null?void 0:b[`pin${J}`])??[]},{originDescription:`schPortArrangement:${W}`}))}}const O=["left","right","top","bottom"];let U=1;for(const W of O){const H=y[`${W}Size`];for(let Y=0;Y<H;Y++)g.push(new Port({pinNumber:U++,aliases:((S=u.additionalAliases)==null?void 0:S[`pin${U}`])??[]},{originDescription:`schPortArrangement:${W}`}))}}const _=this._parsedProps.pinLabels;if(_)for(let[O,U]of Object.entries(_)){O=O.replace("pin","");let W=g.find(J=>J._parsedProps.pinNumber===Number(O));const H=Array.isArray(U)?U[0]:U,Y=Array.isArray(U)?U.slice(1):[];W?(W.externallyAddedAliases.push(H,...Y),W.props.name=H):(W=new Port({pinNumber:parseInt(O),name:H,aliases:[...Y,...((E=u.additionalAliases)==null?void 0:E[`pin${parseInt(O)}`])??[]]},{originDescription:`pinLabels:pin${O}`}),g.push(W))}if(h.schematicSymbolName){const O=symbols_index_default[this._getSchematicSymbolNameOrThrow()];if(!O)return;for(const U of O.ports){const W=getPinNumberFromLabels(U.labels);if(!W)continue;const H=getPortFromHints(U.labels.concat(((T=u.additionalAliases)==null?void 0:T[`pin${W}`])??[]));H&&(H.originDescription=`schematicSymbol:labels[0]:${U.labels[0]}`,H.schematicSymbolPortDef=U,g.push(H))}this.addAll(g);return}if(!this._parsedProps.schPortArrangement){const O=this.getPortsFromFootprint();for(const U of O)g.some(W=>W.isMatchingAnyOf(U.getNameAndAliases()))||g.push(U)}for(let O=1;O<=this._getPinCount();O++){if(!this._parsedProps.schPortArrangement||g.find(W=>W._parsedProps.pinNumber===O))continue;let U=[...((C=(w=this._parsedProps.schPortArrangement)==null?void 0:w.leftSide)==null?void 0:C.pins)??[],...((R=(M=this._parsedProps.schPortArrangement)==null?void 0:M.rightSide)==null?void 0:R.pins)??[],...((L=(P=this._parsedProps.schPortArrangement)==null?void 0:P.topSide)==null?void 0:L.pins)??[],...((F=(I=this._parsedProps.schPortArrangement)==null?void 0:I.bottomSide)==null?void 0:F.pins)??[]].map(W=>parsePinNumberFromLabelsOrThrow(W,this._parsedProps.pinLabels));["leftSize","rightSize","topSize","bottomSize","leftPinCount","rightPinCount","topPinCount","bottomPinCount"].some(W=>W in this._parsedProps.schPortArrangement)&&(U=Array.from({length:this._getPinCount()},(W,H)=>H+1)),U.includes(O)&&g.push(new Port({pinNumber:O,aliases:((N=u.additionalAliases)==null?void 0:N[`pin${O}`])??[]},{originDescription:`notOtherwiseAddedButDeducedFromPinCount:${O}`}))}g.length>0&&this.addAll(g)}_getImpliedFootprintString(){return null}_addChildrenFromStringFootprint(){var h;let{footprint:u}=this.props;if(u??(u=(h=this._getImpliedFootprintString)==null?void 0:h.call(this)),!!u&&typeof u=="string"){const g=fp$1.string(u).soup(),y=createComponentsFromSoup(g);this.addAll(y)}}get portMap(){return new Proxy({},{get:(u,h)=>{const g=this.children.find(y=>y.componentName==="Port"&&y.isMatchingNameOrAlias(h));if(!g)throw new Error(`There was an issue finding the port "${h.toString()}" inside of a ${this.componentName} component with name: "${this.props.name}". This is a bug in @tscircuit/core`);return g}})}getInstanceForReactElement(u){for(const h of this.reactSubtrees)if(h.element===u)return h.component;return null}doInitialSourceRender(){const u=this.config.sourceFtype;if(!u)return;const{db:h}=this.root,{_parsedProps:g}=this,y=h.source_component.insert({ftype:u,name:g.name,manufacturer_part_number:g.manufacturerPartNumber??g.mfn,supplier_part_numbers:g.supplierPartNumbers});this.source_component_id=y.source_component_id}doInitialSchematicComponentRender(){var g;if((g=this.root)!=null&&g.schematicDisabled)return;const{schematicSymbolName:u}=this.config;if(u)return this._doInitialSchematicComponentRenderWithSymbol();if(this._getSchematicBoxDimensions())return this._doInitialSchematicComponentRenderWithSchematicBoxDimensions()}_getSchematicSymbolDisplayValue(){}_doInitialSchematicComponentRenderWithSymbol(){var _;if((_=this.root)!=null&&_.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this._getSchematicSymbolNameOrThrow(),y=symbols_index_default[g];if(y){const A=u.schematic_component.insert({center:{x:h.schX??0,y:h.schY??0},rotation:h.schRotation??0,size:y.size,source_component_id:this.source_component_id,symbol_name:g,symbol_display_value:this._getSchematicSymbolDisplayValue()});this.schematic_component_id=A.schematic_component_id}}_doInitialSchematicComponentRenderWithSchematicBoxDimensions(){var E,T,w;if((E=this.root)!=null&&E.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this._getSchematicBoxDimensions(),y={};if(Array.isArray(h.pinLabels))h.pinLabels.forEach((C,M)=>{y[String(M+1)]=C});else for(const[C,M]of Object.entries(h.pinLabels??{}))y[C]=Array.isArray(M)?M[0]:M;const _=u.schematic_component.insert({center:{x:h.schX??0,y:h.schY??0},rotation:h.schRotation??0,size:g.getSize(),port_arrangement:underscorifyPortArrangement(h.schPortArrangement),pin_spacing:h.schPinSpacing??.2,pin_styles:underscorifyPinStyles(h.schPinStyle),port_labels:y,source_component_id:this.source_component_id}),A=((T=h.schPortArrangement)==null?void 0:T.topSide)!==void 0||((w=h.schPortArrangement)==null?void 0:w.bottomSide)!==void 0,b=g==null?void 0:g.getSize().width,S=g==null?void 0:g.getSize().height;u.schematic_text.insert({text:h.manufacturerPartNumber??"",schematic_component_id:_.schematic_component_id,anchor:"left",rotation:0,position:{x:A?(h.schX??0)+(b??0)/2+.1:(h.schX??0)-(b??0)/2,y:A?(h.schY??0)+(S??0)/2+.35:(h.schY??0)-(S??0)/2-.13},color:"#006464"}),u.schematic_text.insert({text:h.name??"",schematic_component_id:_.source_component_id,anchor:"left",rotation:0,position:{x:A?(h.schX??0)+(b??0)/2+.1:(h.schX??0)-(b??0)/2,y:A?(h.schY??0)+(S??0)/2+.55:(h.schY??0)+(S??0)/2+.13},color:"#006464"}),this.schematic_component_id=_.schematic_component_id}doInitialPcbComponentRender(){var y;if((y=this.root)!=null&&y.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=u.pcb_component.insert({center:this._getGlobalPcbPositionBeforeLayout(),width:0,height:0,layer:h.layer??"top",rotation:h.pcbRotation??0,source_component_id:this.source_component_id});if(!h.footprint&&!this.isGroup){const _=u.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=_.pcb_missing_footprint_error_id}this.pcb_component_id=g.pcb_component_id}doInitialPcbComponentSizeCalculation(){var y;if((y=this.root)!=null&&y.pcbDisabled||!this.pcb_component_id)return;const{db:u}=this.root,h=getBoundsOfPcbComponents(this.children);if(h.width===0||h.height===0)return;const g={x:(h.minX+h.maxX)/2,y:(h.minY+h.maxY)/2};u.pcb_component.update(this.pcb_component_id,{center:g,width:h.width,height:h.height})}_renderReactSubtree(u){return{element:u,component:createInstanceFromReactElement(u)}}doInitialInitializePortsFromChildren(){this.initPorts()}doInitialReactSubtreesRender(){if(reactExports.isValidElement(this.props.footprint)){if(this.reactSubtrees.some(h=>h.element===this.props.footprint))return;const u=this._renderReactSubtree(this.props.footprint);this.reactSubtrees.push(u),this.add(u.component)}}_hasExistingPortExactly(u){return this.children.filter(g=>g.componentName==="Port").some(g=>{const y=u.getNameAndAliases(),_=g.getNameAndAliases();return y.length===_.length&&y.every(A=>_.includes(A))})}add(u){let h;if(reactExports.isValidElement(u)){const g=this._renderReactSubtree(u);this.reactSubtrees.push(g),h=g.component}else h=u;if(h.componentName==="Port"){if(this._hasExistingPortExactly(h))return;const y=this.children.filter(_=>_.componentName==="Port").find(_=>_.isMatchingAnyOf(h.getNameAndAliases()));y&&debug2(`Similar ports added. Port 1: ${y}, Port 2: ${h}`)}super.add(h)}getPortsFromFootprint(){let{footprint:u}=this.props;if((!u||reactExports.isValidElement(u))&&(u=this.children.find(g=>g.componentName==="Footprint")),typeof u=="string"){const g=fp$1.string(u).soup(),y=[];for(const _ of g)if("port_hints"in _&&_.port_hints){const A=getPortFromHints(_.port_hints);if(!A)continue;A.originDescription=`footprint:string:${u}:port_hints[0]:${_.port_hints[0]}`,y.push(A)}return y}if(!reactExports.isValidElement(u)&&u&&u.componentName==="Footprint"){const g=u;let y=1;const _=[];for(const A of g.children){if(!A.props.portHints)continue;let b=A.props.portHints;b.some(T=>T.startsWith("pin"))||(b=[...b,`pin${y}`]),y++;const E=getPortFromHints(b);E&&(E.originDescription=`footprint:${u}`,_.push(E))}return _}const h=[];if(!u){for(const g of this.children)if(g.props.portHints&&g.isPcbPrimitive){const y=getPortFromHints(g.props.portHints);y&&h.push(y)}}return h}getPortsFromSchematicSymbol(){var y;if((y=this.root)!=null&&y.schematicDisabled)return[];const{config:u}=this;if(!u.schematicSymbolName)return[];const h=symbols_index_default[u.schematicSymbolName];if(!h)return[];const g=[];for(const _ of h.ports){const A=getPortFromHints(_.labels);A&&(A.schematicSymbolPortDef=_,g.push(A))}return g}_createNetsFromProps(u){createNetsFromProps(this,u)}doInitialPortDiscovery(){const{_parsedProps:u}=this;let h=[];u.schPortArrangement||(h=[...this.getPortsFromFootprint(),...this.getPortsFromSchematicSymbol()]);const g=this.children.filter(y=>y.componentName==="Port");for(const y of h){const _=g.find(A=>A.isMatchingAnyOf(y.getNameAndAliases()));if(_){!_.schematicSymbolPortDef&&y.schematicSymbolPortDef&&(_.schematicSymbolPortDef=y.schematicSymbolPortDef);continue}g.push(y),this.add(y)}}_getPcbCircuitJsonBounds(){const{db:u}=this.root;if(!this.pcb_component_id)return super._getPcbCircuitJsonBounds();const h=u.pcb_component.get(this.pcb_component_id);return{center:{x:h.center.x,y:h.center.y},bounds:{left:h.center.x-h.width/2,top:h.center.y-h.height/2,right:h.center.x+h.width/2,bottom:h.center.y+h.height/2},width:h.width,height:h.height}}_getPinCount(){const u=this._getSchematicPortArrangement();if(u){if(!isExplicitPinMappingArrangement(u))return(u.leftSize??u.leftPinCount??0)+(u.rightSize??u.rightPinCount??0)+(u.topSize??u.topPinCount??0)+(u.bottomSize??u.bottomPinCount??0);const{leftSide:g,rightSide:y,topSide:_,bottomSide:A}=u;return Math.max(...(g==null?void 0:g.pins)??[],...(y==null?void 0:y.pins)??[],...(_==null?void 0:_.pins)??[],...(A==null?void 0:A.pins)??[])}return this.getPortsFromFootprint().length}_getSchematicPortArrangement(){return this._parsedProps.schPortArrangement}_getSchematicBoxDimensions(){if(this.getSchematicSymbol()||!this.config.shouldRenderAsSchematicBox)return null;const{_parsedProps:u}=this,h=this._getPinCount(),g=u.schPinSpacing??.2;return getAllDimensionsForSchematicBox({schWidth:u.schWidth,schHeight:u.schHeight,schPinSpacing:g,schPinStyle:u.schPinStyle,pinCount:h,schPortArrangement:this._getSchematicPortArrangement(),pinLabels:u.pinLabels})}doInitialCadModelRender(){var E;const{db:u}=this.root,{boardThickness:h=0}=((E=this.root)==null?void 0:E._getBoard())??{},g=this._parsedProps.cadModel;if(!this.pcb_component_id||!g&&!this.props.footprint)return;const y=this._getPcbCircuitJsonBounds(),_=u.pcb_component.get(this.pcb_component_id);if(typeof g=="string")throw new Error("String cadModel not yet implemented");const A=rotation3.parse({x:0,y:0,z:typeof(g==null?void 0:g.rotationOffset)=="number"?g.rotationOffset:0,...typeof(g==null?void 0:g.rotationOffset)=="object"?g.rotationOffset??{}:{}}),b=point3$2.parse({x:0,y:0,z:0,...typeof(g==null?void 0:g.positionOffset)=="object"?g.positionOffset:{}}),S=this.props.layer==="bottom"?"bottom":"top";u.cad_component.insert({position:{x:y.center.x+b.x,y:y.center.y+b.y,z:(S==="bottom"?-h/2:h/2)+b.z},rotation:{x:A.x,y:(S==="top"?0:180)+A.y,z:((_==null?void 0:_.rotation)??0)+(S==="bottom"?180:0)+A.z},pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,model_stl_url:"stlUrl"in(g??{})?this._addCachebustToModelUrl(g.stlUrl):void 0,model_obj_url:"objUrl"in(g??{})?this._addCachebustToModelUrl(g.objUrl):void 0,model_jscad:"jscad"in(g??{})?g.jscad:void 0,footprinter_string:typeof this.props.footprint=="string"&&!g?this.props.footprint:void 0})}_addCachebustToModelUrl(u){var g;if(!u||!u.includes("modelcdn.tscircuit.com"))return u;const h=((g=this.root)==null?void 0:g.getClientOrigin())??"";return`${u}${u.includes("?")?"&":"?"}cachebust_origin=${encodeURIComponent(h)}`}doInitialPartsEngineRender(){const{partsEngine:u}=this.getSubcircuit()._parsedProps;if(!u)return;const{db:h}=this.root,g=h.source_component.get(this.source_component_id);if(!g||g.supplier_part_numbers)return;let y;this.props.footprint&&typeof this.props.footprint=="string"&&(y=this.props.footprint);const _=u.findPart({sourceComponent:g,footprinterString:y});if(!(_ instanceof Promise)){h.source_component.update(this.source_component_id,{supplier_part_numbers:_});return}this._queueAsyncEffect("get-supplier-part-numbers",async()=>{this._asyncSupplierPartNumbers=await _,this._markDirty("PartsEngineRender")})}updatePartsEngineRender(){const{db:u}=this.root,h=u.source_component.get(this.source_component_id);if(h&&!h.supplier_part_numbers&&this._asyncSupplierPartNumbers){u.source_component.update(this.source_component_id,{supplier_part_numbers:this._asyncSupplierPartNumbers});return}}},TraceHint=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"matchedPort",null)}get config(){return{componentName:"TraceHint",zodProps:traceHintProps}}doInitialPortMatching(){this.root;const{_parsedProps:u,parent:h}=this;if(!h)return;if(h.componentName==="Trace"){this.renderError(`Port inference inside trace is not yet supported (${this})`);return}if(!h)throw new Error("TraceHint has no parent");if(!u.for){this.renderError(`TraceHint has no for property (${this})`);return}const g=h.selectOne(u.for,{type:"port"});g||this.renderError(`${this} could not find port for selector "${u.for}"`),this.matchedPort=g,g.registerMatch(this)}getPcbRouteHints(){const{_parsedProps:u}=this,h=u.offset?[u.offset]:u.offsets;if(!h)return[];const g=this._computePcbGlobalTransformBeforeLayout();return h.map(y=>({...applyToPoint(g,y),via:y.via,to_layer:y.to_layer,trace_width:y.trace_width}))}doInitialPcbTraceHintRender(){var h,g,y;if((h=this.root)!=null&&h.pcbDisabled)return;const{db:u}=this.root;u.pcb_trace_hint.insert({pcb_component_id:(g=this.matchedPort)==null?void 0:g.pcb_component_id,pcb_port_id:(y=this.matchedPort)==null?void 0:y.pcb_port_id,route:this.getPcbRouteHints()})}},getSimpleRouteJsonFromTracesAndDb=({db:m,traces:u,minTraceWidth:h=.1})=>{const y=getObstaclesFromSoup([...m.pcb_component.list(),...m.pcb_smtpad.list(),...m.pcb_plated_hole.list()]).flatMap(b=>[{x:b.center.x-b.width/2,y:b.center.y-b.height/2},{x:b.center.x+b.width/2,y:b.center.y+b.height/2}]),_={minX:Math.min(...y.map(b=>b.x))-1,maxX:Math.max(...y.map(b=>b.x))+1,minY:Math.min(...y.map(b=>b.y))-1,maxY:Math.max(...y.map(b=>b.y))+1},A=u.map(b=>{const S=b._findConnectedPorts();return!S.allPortsFound||S.ports.length<2?null:{name:b.source_trace_id??"",pointsToConnect:S.ports.map(E=>{const T=E._getGlobalPcbPositionBeforeLayout();return{x:T.x,y:T.y,layer:E.getAvailablePcbLayers()[0]??"top"}})}}).filter(b=>b!==null);return{bounds:_,obstacles:[],connections:A,layerCount:2,minTraceWidth:h}},Group$2=class extends NormalComponent{constructor(){super(...arguments);Qi(this,"_asyncAutoroutingResult",null)}get config(){return{zodProps:groupProps,componentName:"Group"}}doInitialCreateTraceHintsFromProps(){var _;const{_parsedProps:h}=this;this.root;const g=h;if(!this.isSubcircuit)return;const y=(_=g.layout)==null?void 0:_.manual_trace_hints;if(y)for(const A of y)this.add(new TraceHint({for:A.pcb_port_selector,offsets:A.offsets}))}_getSimpleRouteJsonFromPcbTraces(){const h=this.selectAll("trace"),{db:g}=this.root;return getSimpleRouteJsonFromTracesAndDb({db:g,traces:h,minTraceWidth:this._parsedProps.minTraceWidth??.1})}doInitialSourceAddConnectivityMapKey(){if(!this.isSubcircuit)return;const{db:h}=this.root,g=this.selectAll("trace"),y=new ConnectivityMap({});y.addConnections(g.map(_=>{const A=h.source_trace.get(_.source_trace_id);return A?[A.source_trace_id,...A.connected_source_port_ids,...A.connected_source_net_ids]:null}).filter(_=>_!==null));for(const _ of g){if(!_.source_trace_id)continue;const A=y.getNetConnectedToId(_.source_trace_id);if(!A)continue;const{name:b}=this._parsedProps;_.subcircuit_connectivity_map_key=`${b??`unnamedsubcircuit${this._renderId}`}_${A}`,h.source_trace.update(_.source_trace_id,{subcircuit_connectivity_map_key:_.subcircuit_connectivity_map_key})}}doInitialPcbTraceRender(){var A,b,S;if((A=this.root)!=null&&A.pcbDisabled||this._shouldUseTraceByTraceRouting())return;const h=((b=this.props.autorouter)==null?void 0:b.serverUrl)??"https://registry-api.tscircuit.com",g=((S=this.props.autorouter)==null?void 0:S.serverMode)??"job",y=Debug4("tscircuit:core:autorouting"),_=(E,T)=>(y("fetching",E),fetch(E,T));this._queueAsyncEffect("make-http-autorouting-request",async()=>{var T;if(g==="solve-endpoint"){if(((T=this.props.autorouter)==null?void 0:T.inputFormat)==="simplified"){const{autorouting_result:C}=await _(`${h}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_simple_route_json:this._getSimpleRouteJsonFromPcbTraces()}),headers:{"Content-Type":"application/json"}}).then(M=>M.json());this._asyncAutoroutingResult=C,this._markDirty("PcbTraceRender");return}const{autorouting_result:w}=await _(`${h}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_circuit_json:this.root.db.toArray()}),headers:{"Content-Type":"application/json"}}).then(C=>C.json());this._asyncAutoroutingResult=w,this._markDirty("PcbTraceRender");return}const{autorouting_job:E}=await _(`${h}/autorouting/jobs/create`,{method:"POST",body:JSON.stringify({input_circuit_json:this.root.db.toArray(),provider:"freerouting",autostart:!0}),headers:{"Content-Type":"application/json"}}).then(w=>w.json());for(;;){const{autorouting_job:w}=await _(`${h}/autorouting/jobs/get`,{method:"POST",body:JSON.stringify({autorouting_job_id:E.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(C=>C.json());if(w.is_finished){const{autorouting_job_output:C}=await _(`${h}/autorouting/jobs/get_output`,{method:"POST",body:JSON.stringify({autorouting_job_id:E.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(M=>M.json());this._asyncAutoroutingResult={output_pcb_traces:C.output_pcb_traces},this._markDirty("PcbTraceRender");break}if(w.has_error)throw new Error(`Autorouting job failed: ${JSON.stringify(w.error)}`);await new Promise(C=>setTimeout(C,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:h}=this.root,{traces:g}=this._asyncAutoroutingResult.output_simple_route_json;if(g){this.selectAll("trace");for(const y of g)h.pcb_trace.insert({route:y.route})}}_updatePcbTraceRenderFromPcbTraces(){const{output_pcb_traces:h}=this._asyncAutoroutingResult;if(!h)return;const{db:g}=this.root;for(const y of h)g.pcb_trace.insert(y)}doInitialSchematicLayout(){if(!this.isSubcircuit||!this._parsedProps.schAutoLayoutEnabled)return;const{db:g}=this.root,y=this.getDescendants(),_=[];for(const S of y)if("schematic_component_id"in S){const E=g.schematic_component.get(S.schematic_component_id);if(E){const T=g.schematic_port.list().filter(w=>w.schematic_component_id===E.schematic_component_id);_.push(...T)}}const A=convertSoupToScene(g.toArray()),b=ascendingCentralLrBug1(A);mutateSoupForScene(g.toArray(),b)}_shouldUseTraceByTraceRouting(){const h=this._parsedProps;return h.autorouter==="auto-local"||h.autorouter==="sequential-trace"?!0:!h.autorouter}},Board=class extends Group$2{constructor(){super(...arguments);Qi(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 y;if((y=this.root)!=null&&y.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this;if(!h.width||!h.height)throw new Error("Board width and height or an outline are required");const g=u.pcb_board.insert({center:{x:h.pcbX??0,y:h.pcbY??0},thickness:this.boardThickness,num_layers:this.allLayers.length,width:h.width,height:h.height,outline:h.outline});this.pcb_board_id=g.pcb_board_id}removePcbComponentRender(){const{db:u}=this.root;this.pcb_board_id&&(u.pcb_board.delete(this.pcb_board_id),this.pcb_board_id=null)}_computePcbGlobalTransformBeforeLayout(){return identity$4()}},stringProxy=new Proxy({},{get:(m,u)=>u}),FTYPE=stringProxy,DirectLineRouter=class{constructor({input:m}){Qi(this,"input");this.input=m}solveAndMapToTraces(){const m=[];for(const u of this.input.connections){if(u.pointsToConnect.length!==2)continue;const[h,g]=u.pointsToConnect,y={type:"pcb_trace",pcb_trace_id:"",route:[{route_type:"wire",x:h.x,y:h.y,layer:"top",width:.1},{route_type:"wire",x:g.x,y:g.y,layer:"top",width:.1}]};m.push(y)}return m}},computeObstacleBounds=m=>{const u=Math.min(...m.map(_=>_.center.x)),h=Math.max(...m.map(_=>_.center.x)),g=Math.min(...m.map(_=>_.center.y)),y=Math.max(...m.map(_=>_.center.y));return{minX:u,maxX:h,minY:g,maxY:y}},LAYER_SELECTION_PREFERENCE=["top","bottom","inner1","inner2"],findPossibleTraceLayerCombinations=(m,u=[])=>{var b;const h=[];if(u.length===0){const S=m[0].layers;for(const E of S)h.push(...findPossibleTraceLayerCombinations(m.slice(1),[E]));return h}if(m.length===0)return[];const g=m[0],y=g.via||g.optional_via,_=u[u.length-1];if(m.length===1){const S=g;return S.layers&&y?S.layers.map(E=>({layer_path:[...u,E]})):(b=S.layers)!=null&&b.includes(_)?[{layer_path:[...u,_]}]:[]}if(!y)return g.layers&&!g.layers.includes(_)?[]:findPossibleTraceLayerCombinations(m.slice(1),u.concat([_]));const A=(g.optional_via?LAYER_SELECTION_PREFERENCE:LAYER_SELECTION_PREFERENCE.filter(S=>S!==_)).filter(S=>{var E;return!g.layers||((E=g.layers)==null?void 0:E.includes(S))});for(const S of A)h.push(...findPossibleTraceLayerCombinations(m.slice(1),u.concat(S)));return h};function getDominantDirection(m){const u={x:m.to.x-m.from.x,y:m.to.y-m.from.y},h=Math.abs(u.x),g=Math.abs(u.y);return h>g?u.x>0?"right":"left":u.y>0?"down":"up"}function pdist(m,u){return Math.hypot(m.x-u.x,m.y-u.y)}var mergeRoutes=m=>{if(m.length===1)return m[0];if(m.some(S=>S.length===0))throw new Error("Cannot merge routes with zero length");const u=[],h=m[0][0],g=m[0][m[0].length-1],y=m[1][0],_=m[1][m[1].length-1],A=Math.min(pdist(h,y),pdist(h,_)),b=Math.min(pdist(g,y),pdist(g,_));A<b?u.push(...m[0].reverse()):u.push(...m[0]);for(let S=1;S<m.length;S++){const E=u[u.length-1],T=m[S],w=T[0],C=T[T.length-1],M=pdist(E,w),R=pdist(E,C);M<R?u.push(...T):u.push(...T.reverse())}for(let S=1;S<u.length-1;S++){const E=u[S-1],T=u[S];E.route_type==="wire"&&T.route_type==="wire"&&E.layer!==T.layer&&u.splice(S,0,{x:E.x,y:E.y,from_layer:E.layer,to_layer:T.layer,route_type:"via"})}return u},getDistance=(m,u)=>{const h="_getGlobalPcbPositionBeforeLayout"in m?m._getGlobalPcbPositionBeforeLayout():m,g="_getGlobalPcbPositionBeforeLayout"in u?u._getGlobalPcbPositionBeforeLayout():u;return Math.sqrt((h.x-g.x)**2+(h.y-g.y)**2)};function getClosest(m,u){if(u.length===0)throw new Error("No candidates given to getClosest method");let h=u[0],g=1/0;for(const y of u){const _=getDistance(m,y);_<g&&(h=y,g=_)}return h}var getEnteringEdgeFromDirection=m=>({up:"bottom",down:"top",left:"right",right:"left"})[m]??null,getStubEdges=({firstEdge:m,firstEdgePort:u,firstDominantDirection:h,lastEdge:g,lastEdgePort:y,lastDominantDirection:_})=>{if(m&&u)return getStubEdges({lastEdge:{from:m.to,to:m.from},lastEdgePort:u,lastDominantDirection:h}).reverse().map(b=>({from:b.to,to:b.from}));let A=[];if(g&&y){const b={x:g.to.x,y:g.to.y};_==="left"||_==="right"?(b.x=y.position.x,A.push({from:g.to,to:{...b}}),A.push({from:b,to:{...y.position}})):(b.y=y.position.y,A.push({from:g.to,to:{...b}}),A.push({from:b,to:{...y.position}}))}return A=A.filter(b=>distance$1(b.from,b.to)>.01),A};function tryNow(m){try{return[m(),null]}catch(u){return[null,u]}}var getOtherSchematicTraces=({db:m,source_trace_id:u,sameNetOnly:h,differentNetOnly:g})=>{!h&&!g&&(g=!0);const y=m.source_trace.get(u),_=[];for(const A of m.schematic_trace.list()){if(A.source_trace_id===u)continue;const b=m.source_trace.get(A.source_trace_id),S=(b==null?void 0:b.subcircuit_connectivity_map_key)===y.subcircuit_connectivity_map_key;g&&S||h&&!S||_.push(A)}return _},createSchematicTraceCrossingSegments=({edges:m,db:u,source_trace_id:h})=>{const g=getOtherSchematicTraces({db:u,source_trace_id:h,differentNetOnly:!0}).flatMap(y=>y.edges);for(let y=0;y<m.length;y++){const _=m[y],A=Math.abs(_.from.x-_.to.x)<.01?"vertical":"horizontal",b=[];for(const L of g){const I=L.from.x===L.to.x?"vertical":"horizontal";if(A===I)continue;if(doesLineIntersectLine([_.from,_.to],[L.from,L.to],{lineThickness:.01})){const N=A==="vertical"?_.from.x:L.from.x,O=A==="vertical"?L.from.y:_.from.y,U={x:N,y:O};b.push({otherEdge:L,crossingPoint:U,distanceFromEdgeFrom:distance$1(_.from,U)})}}if(b.length===0)continue;let S=b[0];for(const L of b)L.distanceFromEdgeFrom<S.distanceFromEdgeFrom&&(S=L);const E=S.crossingPoint,T=.075,w=getUnitVectorFromPointAToB(_.from,E),C={x:E.x-w.x*T/2,y:E.y-w.y*T/2},M={x:E.x+w.x*T/2,y:E.y+w.y*T/2},R=distance$1(M,_.to)<T,P=[{from:_.from,to:C},{from:C,to:M,is_crossing:!0},{from:M,to:_.to}];m.splice(y,1,...P),y+=P.length-2,R&&y++}},isOrthogonal=(m,u)=>{const h=m.from.x===m.to.x,g=u.from.x===u.to.x;return h!==g},getIntersectionPoint=(m,u)=>{if(!isOrthogonal(m,u))return null;const h=m.from.x===m.to.x,g=h?m:u,y=h?u:m,_=Math.min(y.from.x,y.to.x),A=Math.max(y.from.x,y.to.x);if(g.from.x<_||g.from.x>A)return null;const b=Math.min(g.from.y,g.to.y),S=Math.max(g.from.y,g.to.y);return y.from.y<b||y.from.y>S?null:{x:g.from.x,y:y.from.y}},createSchematicTraceJunctions=({edges:m,db:u,source_trace_id:h})=>{const g=getOtherSchematicTraces({db:u,source_trace_id:h,sameNetOnly:!0}).flatMap(_=>_.edges),y=new Set;for(const _ of m)for(const A of g){const b=getIntersectionPoint(_,A);b&&y.add(`${b.x},${b.y}`)}return Array.from(y).map(_=>{const[A,b]=_.split(",").map(Number);return{x:A,y:b}})},pushEdgesOfSchematicTraceToPreventOverlap=({edges:m,db:u,source_trace_id:h})=>{u.source_trace.get(h);const g=getOtherSchematicTraces({db:u,source_trace_id:h,differentNetOnly:!0}).flatMap(_=>_.edges),y=_=>{const{from:A,to:b}=_;return A.x===b.x?"vertical":"horizontal"};for(const _ of m){const A=y(_),b=()=>g.find(E=>y(E)===A&&doesLineIntersectLine([_.from,_.to],[E.from,E.to],{lineThickness:.05}));let S=b();for(;S;)A==="horizontal"?(_.from.y+=.1,_.to.y+=.1):(_.from.x+=.1,_.to.x+=.1),S=b()}},countComplexElements=(m,u)=>{let h=0;h+=m.length??0,h+=u.filter(g=>g.is_crossing).length;for(let g=1;g<u.length;g++){const y=u[g-1],_=u[g],A=Math.abs(y.from.x-y.to.x)<.01,b=Math.abs(_.from.x-_.to.x)<.01;A!==b&&h++}return h},portToObjective=m=>({...m._getGlobalPcbPositionAfterLayout(),layers:m.getAvailablePcbLayers()}),Trace=class extends PrimitiveComponent{constructor(u){super(u);Qi(this,"source_trace_id",null);Qi(this,"pcb_trace_id",null);Qi(this,"schematic_trace_id",null);Qi(this,"_portsRoutedOnPcb");Qi(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(u=>typeof u=="string"?u:u.getPortSelector()):[]}getTracePortPathSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter(u=>!u.includes("net."))}getTracePathNetSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter(u=>u.includes("net."))}_findConnectedPorts(){this.root;const{_parsedProps:u,parent:h}=this;if(!h)throw new Error("Trace has no parent");const y=this.getTracePortPathSelectors().map(_=>({selector:_,port:this.getSubcircuit().selectOne(_,{type:"port"})??null}));for(const{selector:_,port:A}of y)if(!A){const b=_.replace(/\>.*$/,""),S=this.getSubcircuit().selectOne(b);S?this.renderError(`Could not find port for selector "${_}" (did you forget to include the pin name?)
|
|
70
|
-
searched component ${S.getString()}, which has ports: ${S.children.filter(E=>E.componentName==="Port").map(E=>`${E.getString()}(${E.getNameAndAliases().join(",")})`).join(" & ")}`):this.renderError(`Could not find port for selector "${_}"`)}return y.some(_=>!_.port)?{allPortsFound:!1}:{allPortsFound:!0,portsWithSelectors:y,ports:y.map(({port:_})=>_)}}_findConnectedNets(){const u=this.getTracePathNetSelectors().map(g=>({selector:g,net:this.getSubcircuit().selectOne(g,{type:"net"})})),h=u.filter(g=>!g.net);return h.length>0&&this.renderError(`Could not find net for selector "${h[0].selector}" inside ${this}`),{netsWithSelectors:u,nets:u.map(g=>g.net)}}_getAllTracesConnectedToSameNet(){const u=this.getSubcircuit().selectAll("trace"),h=this._findConnectedNets().nets,g=this._findConnectedPorts().ports??[];return u.filter(y=>{if(y===this)return!1;const _=y._findConnectedNets().nets,A=y._findConnectedPorts().ports??[];return _.some(b=>h.includes(b))||A.some(b=>g.includes(b))})}_isExplicitlyConnectedToPort(u){const{allPortsFound:h,portsWithSelectors:g}=this._findConnectedPorts();return h?g.map(_=>_.port).includes(u):!1}_isExplicitlyConnectedToNet(u){return this._findConnectedNets().nets.includes(u)}doInitialCreateNetsFromProps(){createNetsFromProps(this,this.getTracePathNetSelectors())}doInitialSourceTraceRender(){const{db:u}=this.root,{_parsedProps:h,parent:g}=this;if(!g){this.renderError("Trace has no parent");return}const{allPortsFound:y,portsWithSelectors:_}=this._findConnectedPorts();if(!y)return;const A=this._findConnectedNets().nets,b=u.source_trace.insert({connected_source_port_ids:_.map(S=>S.port.source_port_id),connected_source_net_ids:A.map(S=>S.source_net_id)});this.source_trace_id=b.source_trace_id}doInitialPcbTraceRender(){var H,Y;if((H=this.root)!=null&&H.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h,parent:g}=this,y=this.getSubcircuit();if(!g)throw new Error("Trace has no parent");if(y._parsedProps.routingDisabled)return;const _=(Y=y._parsedProps.pcbRouteCache)==null?void 0:Y.pcbTraces;if(_){const J=u.pcb_trace.insert({route:_.flatMap(Z=>Z.route),source_trace_id:this.source_trace_id});this.pcb_trace_id=J.pcb_trace_id;return}if(!y._shouldUseTraceByTraceRouting())return;const{allPortsFound:A,ports:b}=this._findConnectedPorts();if(!A)return;const S=[];for(const J of b)J._hasMatchedPcbPrimitive()||S.push(J);if(S.length>0){u.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: ${S.map(J=>J.getString()).join(", ")}`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:S.map(J=>J.pcb_port_id).filter(Boolean)});return}const E=this._findConnectedNets().netsWithSelectors;if(b.length===0&&E.length===2){this.renderError("Trace connects two nets, we haven't implemented a way to route this yet");return}else if(b.length===1&&E.length===1){const J=b[0],oe=E[0].net.getAllConnectedPorts().filter(fe=>fe!==J);if(oe.length===0){console.log("Nothing to connect this port to, the net is empty. TODO should emit a warning!");return}const re=getClosest(J,oe);b.push(re)}else if(b.length>1&&E.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 T=b.flatMap(J=>J.matchedComponents.filter(Z=>Z.componentName==="TraceHint")),w=(this._parsedProps.pcbRouteHints??[]).concat(T.flatMap(J=>J.getPcbRouteHints()));if(b.length>2){this.renderError(`Trace has more than two ports (${b.map(J=>J.getString()).join(", ")}), routing between more than two ports for a single trace is not implemented`);return}if(this.getSubcircuit().selectAll("trace").filter(J=>J.renderPhaseStates.PcbTraceRender.initialized).some(J=>J._portsRoutedOnPcb.length===b.length&&J._portsRoutedOnPcb.every(Z=>b.includes(Z))))return;let R=[];w.length===0?R=[portToObjective(b[0]),portToObjective(b[1])]:R=[portToObjective(b[0]),...w,portToObjective(b[1])];const P=findPossibleTraceLayerCombinations(R),L=getFullConnectivityMapFromCircuitJson(this.root.db.toArray()),[I,F]=tryNow(()=>getObstaclesFromSoup(this.root.db.toArray()));if(F){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: ${F.message}`,source_trace_id:this.source_trace_id,center:{x:0,y:0},pcb_port_ids:b.map(J=>J.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[]});return}for(const J of I)if(J.connectedTo.length>0){const oe=L.getNetConnectedToId(J.connectedTo[0]);oe&&J.connectedTo.push(oe)}let N=[];if(P.length===0)N=R;else{const J=P[0].layer_path;N=R.map((Z,oe)=>Z.via?{...Z,via_to_layer:J[oe]}:{...Z,layers:[J[oe]]})}N[0].pcb_port_id=b[0].pcb_port_id,N[N.length-1].pcb_port_id=b[1].pcb_port_id;const O=[];for(const[J,Z]of pairs(N)){const oe="via_to_layer"in J?J.via_to_layer:null,re=2,fe="layers"in J&&J.layers.length===1?J.layers[0]:oe??"top",_e="layers"in Z&&Z.layers.length===1?Z.layers[0]:oe??"top",be="pcb_port_id"in J?J.pcb_port_id:null,ge="pcb_port_id"in Z?Z.pcb_port_id:null,le=this.getSubcircuit()._parsedProps.minTraceWidth??.16,ne=new MultilayerIjump({OBSTACLE_MARGIN:le*2,isRemovePathLoopsEnabled:!0,optimizeWithGoalBoxes:!!(be&&ge),connMap:L,input:{obstacles:I,minTraceWidth:le,connections:[{name:this.source_trace_id,pointsToConnect:[{...J,layer:fe,pcb_port_id:be},{...Z,layer:_e,pcb_port_id:ge}]}],layerCount:2,bounds:{minX:Math.min(J.x,Z.x)-re,maxX:Math.max(J.x,Z.x)+re,minY:Math.min(J.y,Z.y)-re,maxY:Math.max(J.y,Z.y)+re}}});let ue=null;try{ue=ne.solveAndMapToTraces()}catch(Ee){this.renderError({type:"pcb_trace_error",pcb_trace_error_id:this.source_trace_id,error_type:"pcb_trace_error",message:`error solving route: ${Ee.message}`,source_trace_id:this.pcb_trace_id,center:{x:(J.x+Z.x)/2,y:(J.y+Z.y)/2},pcb_port_ids:b.map(Oe=>Oe.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:b.map(Oe=>Oe.pcb_component_id)})}if(!ue)return;if(ue.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:(J.x+Z.x)/2,y:(J.y+Z.y)/2},pcb_port_ids:b.map(Ee=>Ee.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:b.map(Ee=>Ee.pcb_component_id)});return}const[ye]=ue;oe&&(ye.route=ye.route.map(Ee=>(Ee.route_type==="wire"&&!Ee.layer&&(Ee.layer=oe),Ee))),be&&ye.route[0].route_type==="wire"&&(ye.route[0].start_pcb_port_id=be);const ve=ye.route[ye.route.length-1];ge&&ve.route_type==="wire"&&(ve.end_pcb_port_id=ge),O.push(ye.route)}const U=mergeRoutes(O),W=u.pcb_trace.insert({route:U,source_trace_id:this.source_trace_id});this._portsRoutedOnPcb=b,this.pcb_trace_id=W.pcb_trace_id;for(const J of U)J.route_type==="via"&&u.pcb_via.insert({pcb_trace_id:W.pcb_trace_id,x:J.x,y:J.y,hole_diameter:.3,outer_diameter:.6,layers:[J.from_layer,J.to_layer],from_layer:J.from_layer,to_layer:J.to_layer})}_doInitialSchematicTraceRenderWithDisplayLabel(){var N,O,U,W;if((N=this.root)!=null&&N.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h,parent:g}=this;if(!g)throw new Error("Trace has no parent");const{allPortsFound:y,portsWithSelectors:_}=this._findConnectedPorts();if(!y)return;const A=_.map(({port:H})=>({port:H,position:H._getGlobalSchematicPositionAfterLayout(),schematic_port_id:H.schematic_port_id,facingDirection:H.facingDirection}));if(A.length<2)throw new Error("Expected at least two ports in portsWithPosition.");let b,S;const E=A[0].position,T=A[0].port;if("path"in this.props){if(this.props.path.length!==2)throw new Error("Invalid 'path': Must contain exactly two elements.");[b,S]=this.props.path}else{if(!("from"in this.props&&"to"in this.props))throw new Error("Missing 'from' or 'to' properties in props.");b=this.props.from,S=this.props.to}if(!T.source_port_id)throw new Error(`Missing source_port_id for the 'from' port (${b}).`);const w=A[1].position,C=A[1].port;if(!C.source_port_id)throw new Error(`Missing source_port_id for the 'to' port (${S}).`);const M=u.schematic_net_label.list().find(H=>H.source_net_id===T.source_port_id),R=u.schematic_net_label.list().find(H=>H.source_net_id===C.source_port_id);if(this.props.schDisplayLabel&&(M&&M.text!==this.props.schDisplayLabel||R&&(R==null?void 0:R.text)!==this.props.schDisplayLabel))throw new Error(`Cannot create net label for port ${M?b:S} because it already has a net label with text "${M?M.text:R==null?void 0:R.text}".`);const[P,L]=_.map(({port:H})=>H),F=((O=P.parent)==null?void 0:O.config.shouldRenderAsSchematicBox)?`${(U=P==null?void 0:P.parent)==null?void 0:U.props.name}_${P==null?void 0:P.props.name}`:`${(W=L==null?void 0:L.parent)==null?void 0:W.props.name}_${L==null?void 0:L.props.name}`;u.schematic_net_label.insert({text:this.props.schDisplayLabel??F,source_net_id:T.source_port_id,anchor_position:E,center:E,anchor_side:getEnteringEdgeFromDirection(T.facingDirection)??"bottom"}),u.schematic_net_label.insert({text:this.props.schDisplayLabel??F,source_net_id:C.source_port_id,anchor_position:w,center:w,anchor_side:getEnteringEdgeFromDirection(C.facingDirection)??"bottom"})}_isPassiveToChipConnection(){const{allPortsFound:u,ports:h}=this._findConnectedPorts();if(!u||h.length!==2)return!1;const[g,y]=h;if(!(g!=null&&g.parent)||!(y!=null&&y.parent))return!1;const _=g.parent.config.shouldRenderAsSchematicBox,A=y.parent.config.shouldRenderAsSchematicBox;return _&&!A||!_&&A}doInitialSchematicTraceRender(){var Z,oe;if((Z=this.root)!=null&&Z.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h,parent:g}=this;if(!g)throw new Error("Trace has no parent");const{allPortsFound:y,portsWithSelectors:_}=this._findConnectedPorts(),{netsWithSelectors:A}=this._findConnectedNets();if(!y)return;const b=[],S={name:this.source_trace_id,pointsToConnect:[]};if(this.props.schDisplayLabel&&("from"in this.props&&"to"in this.props||"path"in this.props)){this._doInitialSchematicTraceRenderWithDisplayLabel();return}for(const re of u.toArray())re.type==="schematic_component"&&b.push({type:"rect",layers:["top"],center:re.center,width:re.size.width,height:re.size.height,connectedTo:[]}),re.type==="schematic_port"&&b.push({type:"rect",layers:["top"],center:re.center,width:.1,height:.1,connectedTo:[]}),re.type==="schematic_text"&&b.push({type:"rect",layers:["top"],center:re.position,width:(((oe=re.text)==null?void 0:oe.length)??0)*.1,height:.2,connectedTo:[]}),re.type==="schematic_box"&&b.push({type:"rect",layers:["top"],center:{x:re.x,y:re.y},width:re.width,height:re.width,connectedTo:[]});const E=_.map(({port:re})=>({port:re,position:re._getGlobalSchematicPositionAfterLayout(),schematic_port_id:re.schematic_port_id??void 0,facingDirection:re.facingDirection}));if(E.length===1&&A.length===1){const re=A[0].net,{port:fe,position:_e}=E[0];u.schematic_net_label.insert({text:re._parsedProps.name,source_net_id:re.source_net_id,anchor_position:_e,center:_e,anchor_side:getEnteringEdgeFromDirection(fe.facingDirection)??"bottom"});return}if(E.length<2)return;S.pointsToConnect=E.map(({position:re})=>({...re,layer:"top"}));const w=computeObstacleBounds(b),C={minTraceWidth:.1,obstacles:b,connections:[S],bounds:w,layerCount:1};let M=MultilayerIjump;this.getSubcircuit().props._schDirectLineRoutingEnabled&&(M=DirectLineRouter);const P=new M({input:C,OBSTACLE_MARGIN:.1,isRemovePathLoopsEnabled:!0}).solveAndMapToTraces();if(P.length===0)return;const[{route:L}]=P,I=[];for(let re=0;re<L.length-1;re++)I.push({from:L[re],to:L[re+1]});const F=this.source_trace_id;pushEdgesOfSchematicTraceToPreventOverlap({edges:I,db:u,source_trace_id:F}),createSchematicTraceCrossingSegments({edges:I,db:u,source_trace_id:F});const N=createSchematicTraceJunctions({edges:I,db:u,source_trace_id:this.source_trace_id}),O=I[I.length-1],U=E[E.length-1],W=getDominantDirection(O);I.push(...getStubEdges({lastEdge:O,lastEdgePort:U,lastDominantDirection:W}));const H=I[0],Y=E[0],J=getDominantDirection(H);if(I.unshift(...getStubEdges({firstEdge:H,firstEdgePort:Y,firstDominantDirection:J})),!this.source_trace_id)throw new Error("Missing source_trace_id for schematic trace insertion.");if(countComplexElements(N,I)>=5&&this._isPassiveToChipConnection())this._doInitialSchematicTraceRenderWithDisplayLabel(),u.schematic_trace.delete(this.schematic_trace_id);else{const re=u.schematic_trace.insert({source_trace_id:this.source_trace_id,edges:I,junctions:N});this.schematic_trace_id=re.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 Trace({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.decouplingFor})),this.add(new Trace({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.decouplingTo})))}doInitialSourceRender(){const{db:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({ftype:"simple_capacitor",name:u.name,manufacturer_part_number:u.manufacturerPartNumber??u.mfn,supplier_part_numbers:u.supplierPartNumbers,capacitance:u.capacitance});this.source_component_id=h.source_component_id}},Chip=class extends NormalComponent{constructor(){super(...arguments);Qi(this,"schematicBoxDimensions",null)}get config(){return{componentName:"Chip",zodProps:chipProps,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){const{db:u}=this.root,{_parsedProps:h}=this,g=u.source_component.insert({ftype:"simple_chip",name:h.name,manufacturer_part_number:h.manufacturerPartNumber,supplier_part_numbers:h.supplierPartNumbers});this.source_component_id=g.source_component_id}doInitialPcbComponentRender(){var y;if((y=this.root)!=null&&y.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=u.pcb_component.insert({center:{x:h.pcbX??0,y:h.pcbY??0},width:2,height:3,layer:h.layer??"top",rotation:h.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=g.pcb_component_id}},Diode=class extends NormalComponent{constructor(){super(...arguments);Qi(this,"pos",this.portMap.pin1);Qi(this,"anode",this.portMap.pin1);Qi(this,"neg",this.portMap.pin2);Qi(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);Qi(this,"schematicDimensions",null)}get config(){return{componentName:"Jumper",zodProps:jumperProps,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){const{db:u}=this.root,{_parsedProps:h}=this,g=u.source_component.insert({ftype:"simple_chip",name:h.name,manufacturer_part_number:h.manufacturerPartNumber,supplier_part_numbers:h.supplierPartNumbers});this.source_component_id=g.source_component_id}doInitialPcbComponentRender(){var y;if((y=this.root)!=null&&y.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=u.pcb_component.insert({center:{x:h.pcbX??0,y:h.pcbY??0},width:2,height:3,layer:h.layer??"top",rotation:h.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=g.pcb_component_id}},Led=class extends NormalComponent{constructor(){super(...arguments);Qi(this,"pos",this.portMap.pin1);Qi(this,"anode",this.portMap.pin1);Qi(this,"neg",this.portMap.pin2);Qi(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);Qi(this,"pos",this.portMap.pin1);Qi(this,"positive",this.portMap.pin1);Qi(this,"neg",this.portMap.pin2);Qi(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 Trace({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.pullupFor})),this.add(new Trace({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.pullupTo})))}doInitialSourceRender(){const{db:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({ftype:"simple_resistor",name:u.name,manufacturer_part_number:u.manufacturerPartNumber??u.mfn,supplier_part_numbers:u.supplierPartNumbers,resistance:u.resistance});this.source_component_id=h.source_component_id}},edgeSpecifiers=["leftedge","rightedge","topedge","bottomedge","center"],Constraint2=class extends PrimitiveComponent{get config(){return{componentName:"Constraint",zodProps:constraintProps}}constructor(m){if(super(m),("xdist"in m||"ydist"in m)&&!("edgeToEdge"in m)&&!("centerToCenter"in m))throw new Error(`edgeToEdge, centerToCenter must be set for xDist or yDist for ${this}`);if("for"in m&&m.for.length<2)throw new Error(`"for" must have at least two selectors for ${this}`)}_getAllReferencedComponents(){const m=[],u=this.getPrimitiveContainer();function h(g){const y=g.split(" ").pop(),_=edgeSpecifiers.includes(y)?y:void 0,A=_?g.replace(` ${_}`,""):g,b=u.selectOne(A,{pcbPrimitive:!0});b&&m.push({selector:g,component:b,componentSelector:A,edge:_})}for(const g of["left","right","top","bottom"])g in this._parsedProps&&h(this._parsedProps[g]);if("for"in this._parsedProps)for(const g of this._parsedProps.for)h(g);return{componentsWithSelectors:m}}},FabricationNotePath=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"fabrication_note_path_id",null)}get config(){return{componentName:"FabricationNotePath",zodProps:fabricationNotePathProps}}doInitialPcbPrimitiveRender(){var A,b;if((A=this.root)!=null&&A.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=h.layer??"top";if(g!=="top"&&g!=="bottom")throw new Error(`Invalid layer "${g}" for SilkscreenPath. Must be "top" or "bottom".`);const y=this._computePcbGlobalTransformBeforeLayout(),_=u.pcb_fabrication_note_path.insert({pcb_component_id:(b=this.parent)==null?void 0:b.pcb_component_id,layer:g,color:h.color,route:h.route.map(S=>{const E=applyToPoint(y,{x:S.x,y:S.y});return{...S,x:E.x,y:E.y}}),stroke_width:h.strokeWidth??.1});this.fabrication_note_path_id=_.pcb_fabrication_note_path_id}},FabricationNoteText=class extends PrimitiveComponent{get config(){return{componentName:"FabricationNoteText",zodProps:fabricationNoteTextProps}}doInitialPcbPrimitiveRender(){var g;if((g=this.root)!=null&&g.pcbDisabled)return;const{db:m}=this.root,{_parsedProps:u}=this,h=this.getPrimitiveContainer();m.pcb_fabrication_note_text.insert({anchor_alignment:u.anchorAlignment,anchor_position:{x:u.pcbX??0,y:u.pcbY??0},font:u.font??"tscircuit2024",font_size:u.fontSize??1,layer:"top",color:u.color,text:u.text??"",pcb_component_id:h.pcb_component_id})}},Subcircuit=class extends Group$2{constructor(m){super({...m,subcircuit:!0})}},NetAlias=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"source_net_alias_id")}get config(){return{componentName:"NetAlias",zodProps:netAliasProps}}doInitialSchematicComponentRender(){var _;if((_=this.root)!=null&&_.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g={x:h.schX??0,y:h.schY??0},y=u.schematic_net_label.insert({text:h.net,source_net_id:h.net,anchor_position:g,center:g,anchor_side:"bottom"});this.source_net_alias_id=y.source_net_id}},SilkscreenCircle=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_silkscreen_circle_id",null)}get config(){return{componentName:"SilkscreenCircle",zodProps:silkscreenCircleProps}}doInitialPcbPrimitiveRender(){var _,A;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=h.layer??"top";if(g!=="top"&&g!=="bottom")throw new Error(`Invalid layer "${g}" for SilkscreenCircle. Must be "top" or "bottom".`);this._computePcbGlobalTransformBeforeLayout();const y=u.pcb_silkscreen_circle.insert({pcb_component_id:(A=this.parent)==null?void 0:A.pcb_component_id,layer:g,center:{x:h.pcbX??0,y:h.pcbY??0},radius:h.radius});this.pcb_silkscreen_circle_id=y.pcb_silkscreen_circle_id}},SilkscreenRect=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_silkscreen_rect_id",null)}get config(){return{componentName:"SilkscreenRect",zodProps:silkscreenRectProps}}doInitialPcbPrimitiveRender(){var _,A;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=h.layer??"top";if(g!=="top"&&g!=="bottom")throw new Error(`Invalid layer "${g}" for SilkscreenRect. Must be "top" or "bottom".`);const y=u.pcb_silkscreen_rect.insert({pcb_component_id:(A=this.parent)==null?void 0:A.pcb_component_id,layer:g,center:{x:h.pcbX??0,y:h.pcbY??0},width:h.width,height:h.height});this.pcb_silkscreen_rect_id=y.pcb_silkscreen_rect_id}},SilkscreenText=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenText",zodProps:silkscreenTextProps}}doInitialPcbPrimitiveRender(){var A;if((A=this.root)!=null&&A.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this.getPrimitiveContainer(),y=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:_}=this._getPcbPrimitiveFlippedHelpers();u.pcb_silkscreen_text.insert({anchor_alignment:h.anchorAlignment,anchor_position:{x:y.x,y:y.y},font:h.font??"tscircuit2024",font_size:h.fontSize??1,layer:_(h.layer??"top"),text:h.text??"",pcb_component_id:g.pcb_component_id})}getPcbSize(){const{_parsedProps:u}=this,h=u.fontSize??1,y=(u.text??"").length*h,_=h;return{width:y*h,height:_*h}}},Via=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_via_id",null);Qi(this,"matchedPort",null);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Via",zodProps:viaProps}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:u}=this;return{width:u.outerDiameter,height:u.outerDiameter}}_getPcbCircuitJsonBounds(){const{db:u}=this.root,h=u.pcb_via.get(this.pcb_via_id),g=this.getPcbSize();return{center:{x:h.x,y:h.y},bounds:{left:h.x-g.width/2,top:h.y-g.height/2,right:h.x+g.width/2,bottom:h.y+g.height/2},width:g.width,height:g.height}}_setPositionFromLayout(u){const{db:h}=this.root;h.pcb_via.update(this.pcb_via_id,{x:u.x,y:u.y})}doInitialPcbPrimitiveRender(){var _;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this._getGlobalPcbPositionBeforeLayout(),y=u.pcb_via.insert({x:g.x,y:g.y,hole_diameter:h.holeDiameter,outer_diameter:h.outerDiameter,layers:["bottom","top"],from_layer:h.fromLayer||"bottom",to_layer:h.toLayer||"top"});this.pcb_via_id=y.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:"simple_power_source",capacity:u.capacity,supplier_part_numbers:u.supplierPartNumbers});this.source_component_id=h.source_component_id}},PinHeader=class extends NormalComponent{get config(){return{componentName:"PinHeader",zodProps:pinHeaderProps,shouldRenderAsSchematicBox:!0}}_getImpliedFootprintString(){var y;const m=this._parsedProps.pinCount??((y=this._parsedProps.pinLabels)==null?void 0:y.length)??0,u=this._parsedProps.holeDiameter,h=this._parsedProps.platedDiameter,g=this._parsedProps.pitch;return m>0&&g?!u&&!h?`pinrow${m}_p${g}`:`pinrow${m}_p${g}_id${u}_od${h}`:null}initPorts(){var u;const m=this._parsedProps.pinCount??((u=this._parsedProps.pinLabels)==null?void 0:u.length)??1;for(let h=1;h<=m;h++)this.add(new Port({name:`pin${h}`,pinNumber:h,aliases:[]}))}_getSchematicPortArrangement(){const m=this._parsedProps.pinCount??1,u=this._parsedProps.facingDirection??"right";return{leftSize:u==="left"?m:0,rightSize:u==="right"?m:0}}doInitialSourceRender(){const{db:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({ftype:"simple_pin_header",name:u.name,supplier_part_numbers:u.supplierPartNumbers,pin_count:u.pinCount,gender:u.gender});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:FTYPE.simple_inductor,inductance:u.inductance,supplier_part_numbers:u.supplierPartNumbers});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:"simple_potentiometer",max_resistance:u.maxResistance});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:FTYPE.simple_push_button,supplier_part_numbers:u.supplierPartNumbers});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:"simple_crystal",frequency:u.frequency,load_capacitance:u.loadCapacitance});this.source_component_id=h.source_component_id}},Circuit=class{constructor(){Qi(this,"firstChild",null);Qi(this,"children");Qi(this,"db");Qi(this,"root",null);Qi(this,"isRoot",!0);Qi(this,"schematicDisabled",!1);Qi(this,"pcbDisabled",!1);Qi(this,"_hasRenderedAtleastOnce",!1);Qi(this,"_eventListeners",{});this.children=[],this.db=su_default$1([]),this.root=this}add(m){let u;reactExports.isValidElement(m)?u=createInstanceFromReactElement(m):u=m,this.children.push(u)}_getBoard(){return this.children.find(m=>m.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: Project has no children (use project.add(...))");if(this.children.length>0){const m=this.children.find(u=>u.componentName==="Board")??null;if(m){this.firstChild=m;return}}throw new Error("Not able to guess root component: Project has multiple children and no board")}}render(){this.firstChild||this._guessRootComponent();const{firstChild:m,db:u}=this;if(!m)throw new Error("Project has no root component");m.parent=this,m.runRenderCycle(),this._hasRenderedAtleastOnce=!0}async renderUntilSettled(){for(this.render();this._hasIncompleteAsyncEffects();)await new Promise(m=>setTimeout(m,100)),this.render()}_hasIncompleteAsyncEffects(){return this.children.some(m=>m._hasIncompleteAsyncEffects()?!0:m.children.some(u=>u._hasIncompleteAsyncEffects()))}getSoup(){return this._hasRenderedAtleastOnce||this.render(),this.db.toArray()}getCircuitJson(){return this.getSoup()}toJson(){return this.getSoup()}async getSvg(m){return(await __vitePreload(()=>import("./index-CNL2S1zq.js"),[]).catch(h=>{throw new Error(`To use project.getSvg, you must install the "circuit-to-svg" package.
|
|
70
|
+
searched component ${S.getString()}, which has ports: ${S.children.filter(E=>E.componentName==="Port").map(E=>`${E.getString()}(${E.getNameAndAliases().join(",")})`).join(" & ")}`):this.renderError(`Could not find port for selector "${_}"`)}return y.some(_=>!_.port)?{allPortsFound:!1}:{allPortsFound:!0,portsWithSelectors:y,ports:y.map(({port:_})=>_)}}_findConnectedNets(){const u=this.getTracePathNetSelectors().map(g=>({selector:g,net:this.getSubcircuit().selectOne(g,{type:"net"})})),h=u.filter(g=>!g.net);return h.length>0&&this.renderError(`Could not find net for selector "${h[0].selector}" inside ${this}`),{netsWithSelectors:u,nets:u.map(g=>g.net)}}_getAllTracesConnectedToSameNet(){const u=this.getSubcircuit().selectAll("trace"),h=this._findConnectedNets().nets,g=this._findConnectedPorts().ports??[];return u.filter(y=>{if(y===this)return!1;const _=y._findConnectedNets().nets,A=y._findConnectedPorts().ports??[];return _.some(b=>h.includes(b))||A.some(b=>g.includes(b))})}_isExplicitlyConnectedToPort(u){const{allPortsFound:h,portsWithSelectors:g}=this._findConnectedPorts();return h?g.map(_=>_.port).includes(u):!1}_isExplicitlyConnectedToNet(u){return this._findConnectedNets().nets.includes(u)}doInitialCreateNetsFromProps(){createNetsFromProps(this,this.getTracePathNetSelectors())}doInitialSourceTraceRender(){const{db:u}=this.root,{_parsedProps:h,parent:g}=this;if(!g){this.renderError("Trace has no parent");return}const{allPortsFound:y,portsWithSelectors:_}=this._findConnectedPorts();if(!y)return;const A=this._findConnectedNets().nets,b=u.source_trace.insert({connected_source_port_ids:_.map(S=>S.port.source_port_id),connected_source_net_ids:A.map(S=>S.source_net_id)});this.source_trace_id=b.source_trace_id}doInitialPcbTraceRender(){var H,Y;if((H=this.root)!=null&&H.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h,parent:g}=this,y=this.getSubcircuit();if(!g)throw new Error("Trace has no parent");if(y._parsedProps.routingDisabled)return;const _=(Y=y._parsedProps.pcbRouteCache)==null?void 0:Y.pcbTraces;if(_){const J=u.pcb_trace.insert({route:_.flatMap(Z=>Z.route),source_trace_id:this.source_trace_id});this.pcb_trace_id=J.pcb_trace_id;return}if(!y._shouldUseTraceByTraceRouting())return;const{allPortsFound:A,ports:b}=this._findConnectedPorts();if(!A)return;const S=[];for(const J of b)J._hasMatchedPcbPrimitive()||S.push(J);if(S.length>0){u.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: ${S.map(J=>J.getString()).join(", ")}`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:S.map(J=>J.pcb_port_id).filter(Boolean)});return}const E=this._findConnectedNets().netsWithSelectors;if(b.length===0&&E.length===2){this.renderError("Trace connects two nets, we haven't implemented a way to route this yet");return}else if(b.length===1&&E.length===1){const J=b[0],oe=E[0].net.getAllConnectedPorts().filter(fe=>fe!==J);if(oe.length===0){console.log("Nothing to connect this port to, the net is empty. TODO should emit a warning!");return}const re=getClosest(J,oe);b.push(re)}else if(b.length>1&&E.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 T=b.flatMap(J=>J.matchedComponents.filter(Z=>Z.componentName==="TraceHint")),w=(this._parsedProps.pcbRouteHints??[]).concat(T.flatMap(J=>J.getPcbRouteHints()));if(b.length>2){this.renderError(`Trace has more than two ports (${b.map(J=>J.getString()).join(", ")}), routing between more than two ports for a single trace is not implemented`);return}if(this.getSubcircuit().selectAll("trace").filter(J=>J.renderPhaseStates.PcbTraceRender.initialized).some(J=>J._portsRoutedOnPcb.length===b.length&&J._portsRoutedOnPcb.every(Z=>b.includes(Z))))return;let R=[];w.length===0?R=[portToObjective(b[0]),portToObjective(b[1])]:R=[portToObjective(b[0]),...w,portToObjective(b[1])];const P=findPossibleTraceLayerCombinations(R),L=getFullConnectivityMapFromCircuitJson(this.root.db.toArray()),[I,F]=tryNow(()=>getObstaclesFromSoup(this.root.db.toArray()));if(F){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: ${F.message}`,source_trace_id:this.source_trace_id,center:{x:0,y:0},pcb_port_ids:b.map(J=>J.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[]});return}for(const J of I)if(J.connectedTo.length>0){const oe=L.getNetConnectedToId(J.connectedTo[0]);oe&&J.connectedTo.push(oe)}let N=[];if(P.length===0)N=R;else{const J=P[0].layer_path;N=R.map((Z,oe)=>Z.via?{...Z,via_to_layer:J[oe]}:{...Z,layers:[J[oe]]})}N[0].pcb_port_id=b[0].pcb_port_id,N[N.length-1].pcb_port_id=b[1].pcb_port_id;const O=[];for(const[J,Z]of pairs(N)){const oe="via_to_layer"in J?J.via_to_layer:null,re=2,fe="layers"in J&&J.layers.length===1?J.layers[0]:oe??"top",_e="layers"in Z&&Z.layers.length===1?Z.layers[0]:oe??"top",be="pcb_port_id"in J?J.pcb_port_id:null,ge="pcb_port_id"in Z?Z.pcb_port_id:null,le=this.getSubcircuit()._parsedProps.minTraceWidth??.16,ne=new MultilayerIjump({OBSTACLE_MARGIN:le*2,isRemovePathLoopsEnabled:!0,optimizeWithGoalBoxes:!!(be&&ge),connMap:L,input:{obstacles:I,minTraceWidth:le,connections:[{name:this.source_trace_id,pointsToConnect:[{...J,layer:fe,pcb_port_id:be},{...Z,layer:_e,pcb_port_id:ge}]}],layerCount:2,bounds:{minX:Math.min(J.x,Z.x)-re,maxX:Math.max(J.x,Z.x)+re,minY:Math.min(J.y,Z.y)-re,maxY:Math.max(J.y,Z.y)+re}}});let ue=null;try{ue=ne.solveAndMapToTraces()}catch(Ee){this.renderError({type:"pcb_trace_error",pcb_trace_error_id:this.source_trace_id,error_type:"pcb_trace_error",message:`error solving route: ${Ee.message}`,source_trace_id:this.pcb_trace_id,center:{x:(J.x+Z.x)/2,y:(J.y+Z.y)/2},pcb_port_ids:b.map(Oe=>Oe.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:b.map(Oe=>Oe.pcb_component_id)})}if(!ue)return;if(ue.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:(J.x+Z.x)/2,y:(J.y+Z.y)/2},pcb_port_ids:b.map(Ee=>Ee.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:b.map(Ee=>Ee.pcb_component_id)});return}const[ye]=ue;oe&&(ye.route=ye.route.map(Ee=>(Ee.route_type==="wire"&&!Ee.layer&&(Ee.layer=oe),Ee))),be&&ye.route[0].route_type==="wire"&&(ye.route[0].start_pcb_port_id=be);const ve=ye.route[ye.route.length-1];ge&&ve.route_type==="wire"&&(ve.end_pcb_port_id=ge),O.push(ye.route)}const U=mergeRoutes(O),W=u.pcb_trace.insert({route:U,source_trace_id:this.source_trace_id});this._portsRoutedOnPcb=b,this.pcb_trace_id=W.pcb_trace_id;for(const J of U)J.route_type==="via"&&u.pcb_via.insert({pcb_trace_id:W.pcb_trace_id,x:J.x,y:J.y,hole_diameter:.3,outer_diameter:.6,layers:[J.from_layer,J.to_layer],from_layer:J.from_layer,to_layer:J.to_layer})}_doInitialSchematicTraceRenderWithDisplayLabel(){var N,O,U,W;if((N=this.root)!=null&&N.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h,parent:g}=this;if(!g)throw new Error("Trace has no parent");const{allPortsFound:y,portsWithSelectors:_}=this._findConnectedPorts();if(!y)return;const A=_.map(({port:H})=>({port:H,position:H._getGlobalSchematicPositionAfterLayout(),schematic_port_id:H.schematic_port_id,facingDirection:H.facingDirection}));if(A.length<2)throw new Error("Expected at least two ports in portsWithPosition.");let b,S;const E=A[0].position,T=A[0].port;if("path"in this.props){if(this.props.path.length!==2)throw new Error("Invalid 'path': Must contain exactly two elements.");[b,S]=this.props.path}else{if(!("from"in this.props&&"to"in this.props))throw new Error("Missing 'from' or 'to' properties in props.");b=this.props.from,S=this.props.to}if(!T.source_port_id)throw new Error(`Missing source_port_id for the 'from' port (${b}).`);const w=A[1].position,C=A[1].port;if(!C.source_port_id)throw new Error(`Missing source_port_id for the 'to' port (${S}).`);const M=u.schematic_net_label.list().find(H=>H.source_net_id===T.source_port_id),R=u.schematic_net_label.list().find(H=>H.source_net_id===C.source_port_id);if(this.props.schDisplayLabel&&(M&&M.text!==this.props.schDisplayLabel||R&&(R==null?void 0:R.text)!==this.props.schDisplayLabel))throw new Error(`Cannot create net label for port ${M?b:S} because it already has a net label with text "${M?M.text:R==null?void 0:R.text}".`);const[P,L]=_.map(({port:H})=>H),F=((O=P.parent)==null?void 0:O.config.shouldRenderAsSchematicBox)?`${(U=P==null?void 0:P.parent)==null?void 0:U.props.name}_${P==null?void 0:P.props.name}`:`${(W=L==null?void 0:L.parent)==null?void 0:W.props.name}_${L==null?void 0:L.props.name}`;u.schematic_net_label.insert({text:this.props.schDisplayLabel??F,source_net_id:T.source_port_id,anchor_position:E,center:E,anchor_side:getEnteringEdgeFromDirection(T.facingDirection)??"bottom"}),u.schematic_net_label.insert({text:this.props.schDisplayLabel??F,source_net_id:C.source_port_id,anchor_position:w,center:w,anchor_side:getEnteringEdgeFromDirection(C.facingDirection)??"bottom"})}_isPassiveToChipConnection(){const{allPortsFound:u,ports:h}=this._findConnectedPorts();if(!u||h.length!==2)return!1;const[g,y]=h;if(!(g!=null&&g.parent)||!(y!=null&&y.parent))return!1;const _=g.parent.config.shouldRenderAsSchematicBox,A=y.parent.config.shouldRenderAsSchematicBox;return _&&!A||!_&&A}doInitialSchematicTraceRender(){var Z,oe;if((Z=this.root)!=null&&Z.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h,parent:g}=this;if(!g)throw new Error("Trace has no parent");const{allPortsFound:y,portsWithSelectors:_}=this._findConnectedPorts(),{netsWithSelectors:A}=this._findConnectedNets();if(!y)return;const b=[],S={name:this.source_trace_id,pointsToConnect:[]};if(this.props.schDisplayLabel&&("from"in this.props&&"to"in this.props||"path"in this.props)){this._doInitialSchematicTraceRenderWithDisplayLabel();return}for(const re of u.toArray())re.type==="schematic_component"&&b.push({type:"rect",layers:["top"],center:re.center,width:re.size.width,height:re.size.height,connectedTo:[]}),re.type==="schematic_port"&&b.push({type:"rect",layers:["top"],center:re.center,width:.1,height:.1,connectedTo:[]}),re.type==="schematic_text"&&b.push({type:"rect",layers:["top"],center:re.position,width:(((oe=re.text)==null?void 0:oe.length)??0)*.1,height:.2,connectedTo:[]}),re.type==="schematic_box"&&b.push({type:"rect",layers:["top"],center:{x:re.x,y:re.y},width:re.width,height:re.width,connectedTo:[]});const E=_.map(({port:re})=>({port:re,position:re._getGlobalSchematicPositionAfterLayout(),schematic_port_id:re.schematic_port_id??void 0,facingDirection:re.facingDirection}));if(E.length===1&&A.length===1){const re=A[0].net,{port:fe,position:_e}=E[0];u.schematic_net_label.insert({text:re._parsedProps.name,source_net_id:re.source_net_id,anchor_position:_e,center:_e,anchor_side:getEnteringEdgeFromDirection(fe.facingDirection)??"bottom"});return}if(E.length<2)return;S.pointsToConnect=E.map(({position:re})=>({...re,layer:"top"}));const w=computeObstacleBounds(b),C={minTraceWidth:.1,obstacles:b,connections:[S],bounds:w,layerCount:1};let M=MultilayerIjump;this.getSubcircuit().props._schDirectLineRoutingEnabled&&(M=DirectLineRouter);const P=new M({input:C,OBSTACLE_MARGIN:.1,isRemovePathLoopsEnabled:!0}).solveAndMapToTraces();if(P.length===0)return;const[{route:L}]=P,I=[];for(let re=0;re<L.length-1;re++)I.push({from:L[re],to:L[re+1]});const F=this.source_trace_id;pushEdgesOfSchematicTraceToPreventOverlap({edges:I,db:u,source_trace_id:F}),createSchematicTraceCrossingSegments({edges:I,db:u,source_trace_id:F});const N=createSchematicTraceJunctions({edges:I,db:u,source_trace_id:this.source_trace_id}),O=I[I.length-1],U=E[E.length-1],W=getDominantDirection(O);I.push(...getStubEdges({lastEdge:O,lastEdgePort:U,lastDominantDirection:W}));const H=I[0],Y=E[0],J=getDominantDirection(H);if(I.unshift(...getStubEdges({firstEdge:H,firstEdgePort:Y,firstDominantDirection:J})),!this.source_trace_id)throw new Error("Missing source_trace_id for schematic trace insertion.");if(countComplexElements(N,I)>=5&&this._isPassiveToChipConnection())this._doInitialSchematicTraceRenderWithDisplayLabel(),u.schematic_trace.delete(this.schematic_trace_id);else{const re=u.schematic_trace.insert({source_trace_id:this.source_trace_id,edges:I,junctions:N});this.schematic_trace_id=re.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 Trace({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.decouplingFor})),this.add(new Trace({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.decouplingTo})))}doInitialSourceRender(){const{db:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({ftype:"simple_capacitor",name:u.name,manufacturer_part_number:u.manufacturerPartNumber??u.mfn,supplier_part_numbers:u.supplierPartNumbers,capacitance:u.capacitance});this.source_component_id=h.source_component_id}},Chip=class extends NormalComponent{constructor(){super(...arguments);Qi(this,"schematicBoxDimensions",null)}get config(){return{componentName:"Chip",zodProps:chipProps,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){const{db:u}=this.root,{_parsedProps:h}=this,g=u.source_component.insert({ftype:"simple_chip",name:h.name,manufacturer_part_number:h.manufacturerPartNumber,supplier_part_numbers:h.supplierPartNumbers});this.source_component_id=g.source_component_id}doInitialPcbComponentRender(){var y;if((y=this.root)!=null&&y.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=u.pcb_component.insert({center:{x:h.pcbX??0,y:h.pcbY??0},width:2,height:3,layer:h.layer??"top",rotation:h.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=g.pcb_component_id}},Diode=class extends NormalComponent{constructor(){super(...arguments);Qi(this,"pos",this.portMap.pin1);Qi(this,"anode",this.portMap.pin1);Qi(this,"neg",this.portMap.pin2);Qi(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);Qi(this,"schematicDimensions",null)}get config(){return{componentName:"Jumper",zodProps:jumperProps,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){const{db:u}=this.root,{_parsedProps:h}=this,g=u.source_component.insert({ftype:"simple_chip",name:h.name,manufacturer_part_number:h.manufacturerPartNumber,supplier_part_numbers:h.supplierPartNumbers});this.source_component_id=g.source_component_id}doInitialPcbComponentRender(){var y;if((y=this.root)!=null&&y.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=u.pcb_component.insert({center:{x:h.pcbX??0,y:h.pcbY??0},width:2,height:3,layer:h.layer??"top",rotation:h.pcbRotation??0,source_component_id:this.source_component_id});this.pcb_component_id=g.pcb_component_id}},Led=class extends NormalComponent{constructor(){super(...arguments);Qi(this,"pos",this.portMap.pin1);Qi(this,"anode",this.portMap.pin1);Qi(this,"neg",this.portMap.pin2);Qi(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);Qi(this,"pos",this.portMap.pin1);Qi(this,"positive",this.portMap.pin1);Qi(this,"neg",this.portMap.pin2);Qi(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 Trace({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.pullupFor})),this.add(new Trace({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.pullupTo})))}doInitialSourceRender(){const{db:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({ftype:"simple_resistor",name:u.name,manufacturer_part_number:u.manufacturerPartNumber??u.mfn,supplier_part_numbers:u.supplierPartNumbers,resistance:u.resistance});this.source_component_id=h.source_component_id}},edgeSpecifiers=["leftedge","rightedge","topedge","bottomedge","center"],Constraint2=class extends PrimitiveComponent{get config(){return{componentName:"Constraint",zodProps:constraintProps}}constructor(m){if(super(m),("xdist"in m||"ydist"in m)&&!("edgeToEdge"in m)&&!("centerToCenter"in m))throw new Error(`edgeToEdge, centerToCenter must be set for xDist or yDist for ${this}`);if("for"in m&&m.for.length<2)throw new Error(`"for" must have at least two selectors for ${this}`)}_getAllReferencedComponents(){const m=[],u=this.getPrimitiveContainer();function h(g){const y=g.split(" ").pop(),_=edgeSpecifiers.includes(y)?y:void 0,A=_?g.replace(` ${_}`,""):g,b=u.selectOne(A,{pcbPrimitive:!0});b&&m.push({selector:g,component:b,componentSelector:A,edge:_})}for(const g of["left","right","top","bottom"])g in this._parsedProps&&h(this._parsedProps[g]);if("for"in this._parsedProps)for(const g of this._parsedProps.for)h(g);return{componentsWithSelectors:m}}},FabricationNotePath=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"fabrication_note_path_id",null)}get config(){return{componentName:"FabricationNotePath",zodProps:fabricationNotePathProps}}doInitialPcbPrimitiveRender(){var A,b;if((A=this.root)!=null&&A.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=h.layer??"top";if(g!=="top"&&g!=="bottom")throw new Error(`Invalid layer "${g}" for SilkscreenPath. Must be "top" or "bottom".`);const y=this._computePcbGlobalTransformBeforeLayout(),_=u.pcb_fabrication_note_path.insert({pcb_component_id:(b=this.parent)==null?void 0:b.pcb_component_id,layer:g,color:h.color,route:h.route.map(S=>{const E=applyToPoint(y,{x:S.x,y:S.y});return{...S,x:E.x,y:E.y}}),stroke_width:h.strokeWidth??.1});this.fabrication_note_path_id=_.pcb_fabrication_note_path_id}},FabricationNoteText=class extends PrimitiveComponent{get config(){return{componentName:"FabricationNoteText",zodProps:fabricationNoteTextProps}}doInitialPcbPrimitiveRender(){var g;if((g=this.root)!=null&&g.pcbDisabled)return;const{db:m}=this.root,{_parsedProps:u}=this,h=this.getPrimitiveContainer();m.pcb_fabrication_note_text.insert({anchor_alignment:u.anchorAlignment,anchor_position:{x:u.pcbX??0,y:u.pcbY??0},font:u.font??"tscircuit2024",font_size:u.fontSize??1,layer:"top",color:u.color,text:u.text??"",pcb_component_id:h.pcb_component_id})}},Subcircuit=class extends Group$2{constructor(m){super({...m,subcircuit:!0})}},NetAlias=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"source_net_alias_id")}get config(){return{componentName:"NetAlias",zodProps:netAliasProps}}doInitialSchematicComponentRender(){var _;if((_=this.root)!=null&&_.schematicDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g={x:h.schX??0,y:h.schY??0},y=u.schematic_net_label.insert({text:h.net,source_net_id:h.net,anchor_position:g,center:g,anchor_side:"bottom"});this.source_net_alias_id=y.source_net_id}},SilkscreenCircle=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_silkscreen_circle_id",null)}get config(){return{componentName:"SilkscreenCircle",zodProps:silkscreenCircleProps}}doInitialPcbPrimitiveRender(){var _,A;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=h.layer??"top";if(g!=="top"&&g!=="bottom")throw new Error(`Invalid layer "${g}" for SilkscreenCircle. Must be "top" or "bottom".`);this._computePcbGlobalTransformBeforeLayout();const y=u.pcb_silkscreen_circle.insert({pcb_component_id:(A=this.parent)==null?void 0:A.pcb_component_id,layer:g,center:{x:h.pcbX??0,y:h.pcbY??0},radius:h.radius});this.pcb_silkscreen_circle_id=y.pcb_silkscreen_circle_id}},SilkscreenRect=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_silkscreen_rect_id",null)}get config(){return{componentName:"SilkscreenRect",zodProps:silkscreenRectProps}}doInitialPcbPrimitiveRender(){var _,A;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=h.layer??"top";if(g!=="top"&&g!=="bottom")throw new Error(`Invalid layer "${g}" for SilkscreenRect. Must be "top" or "bottom".`);const y=u.pcb_silkscreen_rect.insert({pcb_component_id:(A=this.parent)==null?void 0:A.pcb_component_id,layer:g,center:{x:h.pcbX??0,y:h.pcbY??0},width:h.width,height:h.height});this.pcb_silkscreen_rect_id=y.pcb_silkscreen_rect_id}},SilkscreenText=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenText",zodProps:silkscreenTextProps}}doInitialPcbPrimitiveRender(){var A;if((A=this.root)!=null&&A.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this.getPrimitiveContainer(),y=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:_}=this._getPcbPrimitiveFlippedHelpers();u.pcb_silkscreen_text.insert({anchor_alignment:h.anchorAlignment,anchor_position:{x:y.x,y:y.y},font:h.font??"tscircuit2024",font_size:h.fontSize??1,layer:_(h.layer??"top"),text:h.text??"",pcb_component_id:g.pcb_component_id})}getPcbSize(){const{_parsedProps:u}=this,h=u.fontSize??1,y=(u.text??"").length*h,_=h;return{width:y*h,height:_*h}}},Via=class extends PrimitiveComponent{constructor(){super(...arguments);Qi(this,"pcb_via_id",null);Qi(this,"matchedPort",null);Qi(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Via",zodProps:viaProps}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:u}=this;return{width:u.outerDiameter,height:u.outerDiameter}}_getPcbCircuitJsonBounds(){const{db:u}=this.root,h=u.pcb_via.get(this.pcb_via_id),g=this.getPcbSize();return{center:{x:h.x,y:h.y},bounds:{left:h.x-g.width/2,top:h.y-g.height/2,right:h.x+g.width/2,bottom:h.y+g.height/2},width:g.width,height:g.height}}_setPositionFromLayout(u){const{db:h}=this.root;h.pcb_via.update(this.pcb_via_id,{x:u.x,y:u.y})}doInitialPcbPrimitiveRender(){var _;if((_=this.root)!=null&&_.pcbDisabled)return;const{db:u}=this.root,{_parsedProps:h}=this,g=this._getGlobalPcbPositionBeforeLayout(),y=u.pcb_via.insert({x:g.x,y:g.y,hole_diameter:h.holeDiameter,outer_diameter:h.outerDiameter,layers:["bottom","top"],from_layer:h.fromLayer||"bottom",to_layer:h.toLayer||"top"});this.pcb_via_id=y.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:"simple_power_source",capacity:u.capacity,supplier_part_numbers:u.supplierPartNumbers});this.source_component_id=h.source_component_id}},PinHeader=class extends NormalComponent{get config(){return{componentName:"PinHeader",zodProps:pinHeaderProps,shouldRenderAsSchematicBox:!0}}_getImpliedFootprintString(){var y;const m=this._parsedProps.pinCount??((y=this._parsedProps.pinLabels)==null?void 0:y.length)??0,u=this._parsedProps.holeDiameter,h=this._parsedProps.platedDiameter,g=this._parsedProps.pitch;return m>0&&g?!u&&!h?`pinrow${m}_p${g}`:`pinrow${m}_p${g}_id${u}_od${h}`:null}initPorts(){var u;const m=this._parsedProps.pinCount??((u=this._parsedProps.pinLabels)==null?void 0:u.length)??1;for(let h=1;h<=m;h++)this.add(new Port({name:`pin${h}`,pinNumber:h,aliases:[]}))}_getSchematicPortArrangement(){const m=this._parsedProps.pinCount??1,u=this._parsedProps.facingDirection??"right";return{leftSize:u==="left"?m:0,rightSize:u==="right"?m:0}}doInitialSourceRender(){const{db:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({ftype:"simple_pin_header",name:u.name,supplier_part_numbers:u.supplierPartNumbers,pin_count:u.pinCount,gender:u.gender});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:FTYPE.simple_inductor,inductance:u.inductance,supplier_part_numbers:u.supplierPartNumbers});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:"simple_potentiometer",max_resistance:u.maxResistance});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:FTYPE.simple_push_button,supplier_part_numbers:u.supplierPartNumbers});this.source_component_id=h.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:m}=this.root,{_parsedProps:u}=this,h=m.source_component.insert({name:u.name,ftype:"simple_crystal",frequency:u.frequency,load_capacitance:u.loadCapacitance});this.source_component_id=h.source_component_id}},Circuit=class{constructor(){Qi(this,"firstChild",null);Qi(this,"children");Qi(this,"db");Qi(this,"root",null);Qi(this,"isRoot",!0);Qi(this,"schematicDisabled",!1);Qi(this,"pcbDisabled",!1);Qi(this,"_hasRenderedAtleastOnce",!1);Qi(this,"_eventListeners",{});this.children=[],this.db=su_default$1([]),this.root=this}add(m){let u;reactExports.isValidElement(m)?u=createInstanceFromReactElement(m):u=m,this.children.push(u)}_getBoard(){return this.children.find(m=>m.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: Project has no children (use project.add(...))");if(this.children.length>0){const m=this.children.find(u=>u.componentName==="Board")??null;if(m){this.firstChild=m;return}}throw new Error("Not able to guess root component: Project has multiple children and no board")}}render(){this.firstChild||this._guessRootComponent();const{firstChild:m,db:u}=this;if(!m)throw new Error("Project has no root component");m.parent=this,m.runRenderCycle(),this._hasRenderedAtleastOnce=!0}async renderUntilSettled(){for(this.render();this._hasIncompleteAsyncEffects();)await new Promise(m=>setTimeout(m,100)),this.render()}_hasIncompleteAsyncEffects(){return this.children.some(m=>m._hasIncompleteAsyncEffects()?!0:m.children.some(u=>u._hasIncompleteAsyncEffects()))}getSoup(){return this._hasRenderedAtleastOnce||this.render(),this.db.toArray()}getCircuitJson(){return this.getSoup()}toJson(){return this.getSoup()}async getSvg(m){return(await __vitePreload(()=>import("./index-DeptkiN_.js"),[]).catch(h=>{throw new Error(`To use project.getSvg, you must install the "circuit-to-svg" package.
|
|
71
71
|
|
|
72
72
|
"${h.message}"`)})).convertCircuitJsonToPcbSvg(this.getCircuitJson())}async preview(m){throw new Error("project.preview is not yet implemented")}computeSchematicGlobalTransform(){return identity$4()}_computePcbGlobalTransformBeforeLayout(){return identity$4()}selectAll(m){var u;return this._guessRootComponent(),((u=this.firstChild)==null?void 0:u.selectAll(m))??[]}selectOne(m,u){var h;return this._guessRootComponent(),((h=this.firstChild)==null?void 0:h.selectOne(m,u))??null}emit(m,...u){if(this._eventListeners[m])for(const h of this._eventListeners[m])h(...u)}on(m,u){this._eventListeners[m]||(this._eventListeners[m]=[]),this._eventListeners[m].push(u)}getClientOrigin(){return typeof window<"u"?window.location.origin:typeof self<"u"?self.origin:""}},Project=Circuit,useRenderedCircuit=m=>{const[u,h]=React.useState(!0),[g,y]=React.useState(null),[_,A]=React.useState(),[b,S]=React.useState();return React.useEffect(()=>{h(!0),y(null),m&&setTimeout(()=>{try{const E=new Circuit;E.add(m),A(E),S(E.toJson())}catch(E){y(E)}h(!1)},1)},[m]),{isLoading:u,error:g,circuit:_,circuitJson:b}},createUseComponent=(m,u)=>(h,g)=>{const y=[];Array.isArray(u)?y.push(...u.flat()):typeof u=="object"&&y.push(...Object.values(u).flat(),...Object.keys(u));const _=A=>{if(A!=null&&A.name&&A.name!==h)throw new Error(`Component name mismatch. Hook name: ${h}, Component prop name: ${A.name}`);const b={...g,...A,name:h},S=[];for(const E of y)if(b[E]){const T=`.${h} > .${E}`,w=b[E];S.push({from:T,to:w}),delete b[E]}return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(m,{...b}),S.map((E,T)=>jsxRuntimeExports.jsx("trace",{...E},T))]})};for(const A of y)_[A]=`.${h} > .${A}`;return _},useCapacitor=createUseComponent(m=>jsxRuntimeExports.jsx("capacitor",{...m}),capacitorPins),useChip=m=>createUseComponent(u=>jsxRuntimeExports.jsx("chip",{pinLabels:m,...u}),m),useDiode=createUseComponent(m=>jsxRuntimeExports.jsx("diode",{...m}),diodePins),useLed=createUseComponent(m=>jsxRuntimeExports.jsx("led",{...m}),ledPins),useResistor=createUseComponent(m=>jsxRuntimeExports.jsx("resistor",{...m}),resistorPins);extendCatalogue(components_exports);extendCatalogue({Bug:Chip});const dist$7=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,Net,NetAlias,NormalComponent,PinHeader,PlatedHole,Port,Potentiometer,PowerSource,PrimitiveComponent,Project,PushButton,Renderable,Resistor,SilkscreenCircle,SilkscreenPath,SilkscreenRect,SilkscreenText,SmtPad,Subcircuit,Trace,TraceHint,Via,createUseComponent,useCapacitor,useChip,useDiode,useLed,useRenderedCircuit,useResistor},Symbol.toStringTag,{value:"Module"})),require$$2=getAugmentedNamespace(dist$7);var flatten_1$1,hasRequiredFlatten$1;function requireFlatten$1(){if(hasRequiredFlatten$1)return flatten_1$1;hasRequiredFlatten$1=1;const m=u=>u.reduce((h,g)=>Array.isArray(g)?h.concat(m(g)):h.concat(g),[]);return flatten_1$1=m,flatten_1$1}var padArrayToLength_1,hasRequiredPadArrayToLength;function requirePadArrayToLength(){return hasRequiredPadArrayToLength||(hasRequiredPadArrayToLength=1,padArrayToLength_1=(u,h,g)=>{for(u=u.slice();u.length<g;)u.push(h);return u}),padArrayToLength_1}var min_1$1,hasRequiredMin$1;function requireMin$1(){return hasRequiredMin$1||(hasRequiredMin$1=1,min_1$1=(u,h,g)=>(u[0]=Math.min(h[0],g[0]),u[1]=Math.min(h[1],g[1]),u[2]=Math.min(h[2],g[2]),u)),min_1$1}var max_1$1,hasRequiredMax$1;function requireMax$1(){return hasRequiredMax$1||(hasRequiredMax$1=1,max_1$1=(u,h,g)=>(u[0]=Math.max(h[0],g[0]),u[1]=Math.max(h[1],g[1]),u[2]=Math.max(h[2],g[2]),u)),max_1$1}var abs_1$1,hasRequiredAbs$1;function requireAbs$1(){return hasRequiredAbs$1||(hasRequiredAbs$1=1,abs_1$1=(u,h)=>(u[0]=Math.abs(h[0]),u[1]=Math.abs(h[1]),u)),abs_1$1}var add_1$2,hasRequiredAdd$2;function requireAdd$2(){return hasRequiredAdd$2||(hasRequiredAdd$2=1,add_1$2=(u,h,g)=>(u[0]=h[0]+g[0],u[1]=h[1]+g[1],u)),add_1$2}var angleRadians_1,hasRequiredAngleRadians;function requireAngleRadians(){return hasRequiredAngleRadians||(hasRequiredAngleRadians=1,angleRadians_1=u=>Math.atan2(u[1],u[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 m=requireAngleRadians();return angleDegrees_1=h=>m(h)*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 m=requireCreate$c();return clone_1$a=h=>{const g=m();return g[0]=h[0],g[1]=h[1],g},clone_1$a}var copy_1$5,hasRequiredCopy$5;function requireCopy$5(){return hasRequiredCopy$5||(hasRequiredCopy$5=1,copy_1$5=(u,h)=>(u[0]=h[0],u[1]=h[1],u)),copy_1$5}var cross_1$1,hasRequiredCross$1;function requireCross$1(){return hasRequiredCross$1||(hasRequiredCross$1=1,cross_1$1=(u,h,g)=>(u[0]=0,u[1]=0,u[2]=h[0]*g[1]-h[1]*g[0],u)),cross_1$1}var distance_1$1,hasRequiredDistance$1;function requireDistance$1(){return hasRequiredDistance$1||(hasRequiredDistance$1=1,distance_1$1=(u,h)=>{const g=h[0]-u[0],y=h[1]-u[1];return Math.sqrt(g*g+y*y)}),distance_1$1}var divide_1$1,hasRequiredDivide$1;function requireDivide$1(){return hasRequiredDivide$1||(hasRequiredDivide$1=1,divide_1$1=(u,h,g)=>(u[0]=h[0]/g[0],u[1]=h[1]/g[1],u)),divide_1$1}var dot_1$2,hasRequiredDot$2;function requireDot$2(){return hasRequiredDot$2||(hasRequiredDot$2=1,dot_1$2=(u,h)=>u[0]*h[0]+u[1]*h[1]),dot_1$2}var equals_1$7,hasRequiredEquals$7;function requireEquals$7(){return hasRequiredEquals$7||(hasRequiredEquals$7=1,equals_1$7=(u,h)=>u[0]===h[0]&&u[1]===h[1]),equals_1$7}var constants$2,hasRequiredConstants$2;function requireConstants$2(){if(hasRequiredConstants$2)return constants$2;hasRequiredConstants$2=1;const m=1e5,u=1e-5,h=1e-13,g=Math.PI*2;return constants$2={EPS:u,NEPS:h,TAU:g,spatialResolution:m},constants$2}var trigonometry,hasRequiredTrigonometry;function requireTrigonometry(){if(hasRequiredTrigonometry)return trigonometry;hasRequiredTrigonometry=1;const{NEPS:m}=requireConstants$2(),u=y=>Math.abs(y)<m?0:y;return trigonometry={sin:y=>u(Math.sin(y)),cos:y=>u(Math.cos(y))},trigonometry}var fromAngleRadians_1,hasRequiredFromAngleRadians;function requireFromAngleRadians(){if(hasRequiredFromAngleRadians)return fromAngleRadians_1;hasRequiredFromAngleRadians=1;const{sin:m,cos:u}=requireTrigonometry();return fromAngleRadians_1=(g,y)=>(g[0]=u(y),g[1]=m(y),g),fromAngleRadians_1}var fromAngleDegrees_1,hasRequiredFromAngleDegrees;function requireFromAngleDegrees(){if(hasRequiredFromAngleDegrees)return fromAngleDegrees_1;hasRequiredFromAngleDegrees=1;const m=requireFromAngleRadians();return fromAngleDegrees_1=(h,g)=>m(h,g*.017453292519943295),fromAngleDegrees_1}var fromScalar_1$2,hasRequiredFromScalar$2;function requireFromScalar$2(){return hasRequiredFromScalar$2||(hasRequiredFromScalar$2=1,fromScalar_1$2=(u,h)=>(u[0]=h,u[1]=h,u)),fromScalar_1$2}var fromValues_1$4,hasRequiredFromValues$4;function requireFromValues$4(){if(hasRequiredFromValues$4)return fromValues_1$4;hasRequiredFromValues$4=1;const m=requireCreate$c();return fromValues_1$4=(h,g)=>{const y=m();return y[0]=h,y[1]=g,y},fromValues_1$4}var length_1$2,hasRequiredLength$2;function requireLength$2(){return hasRequiredLength$2||(hasRequiredLength$2=1,length_1$2=u=>Math.sqrt(u[0]*u[0]+u[1]*u[1])),length_1$2}var lerp_1$1,hasRequiredLerp$1;function requireLerp$1(){return hasRequiredLerp$1||(hasRequiredLerp$1=1,lerp_1$1=(u,h,g,y)=>{const _=h[0],A=h[1];return u[0]=_+y*(g[0]-_),u[1]=A+y*(g[1]-A),u}),lerp_1$1}var max_1,hasRequiredMax;function requireMax(){return hasRequiredMax||(hasRequiredMax=1,max_1=(u,h,g)=>(u[0]=Math.max(h[0],g[0]),u[1]=Math.max(h[1],g[1]),u)),max_1}var min_1,hasRequiredMin;function requireMin(){return hasRequiredMin||(hasRequiredMin=1,min_1=(u,h,g)=>(u[0]=Math.min(h[0],g[0]),u[1]=Math.min(h[1],g[1]),u)),min_1}var multiply_1$2,hasRequiredMultiply$2;function requireMultiply$2(){return hasRequiredMultiply$2||(hasRequiredMultiply$2=1,multiply_1$2=(u,h,g)=>(u[0]=h[0]*g[0],u[1]=h[1]*g[1],u)),multiply_1$2}var negate_1$1,hasRequiredNegate$1;function requireNegate$1(){return hasRequiredNegate$1||(hasRequiredNegate$1=1,negate_1$1=(u,h)=>(u[0]=-h[0],u[1]=-h[1],u)),negate_1$1}var rotate_1$2,hasRequiredRotate$2;function requireRotate$2(){return hasRequiredRotate$2||(hasRequiredRotate$2=1,rotate_1$2=(u,h,g,y)=>{const _=h[0]-g[0],A=h[1]-g[1],b=Math.cos(y),S=Math.sin(y);return u[0]=_*b-A*S+g[0],u[1]=_*S+A*b+g[1],u}),rotate_1$2}var normal_1,hasRequiredNormal;function requireNormal(){if(hasRequiredNormal)return normal_1;hasRequiredNormal=1;const{TAU:m}=requireConstants$2(),u=requireCreate$c(),h=requireRotate$2();return normal_1=(y,_)=>h(y,_,u(),m/4),normal_1}var normalize_1$1,hasRequiredNormalize$1;function requireNormalize$1(){return hasRequiredNormalize$1||(hasRequiredNormalize$1=1,normalize_1$1=(u,h)=>{const g=h[0],y=h[1];let _=g*g+y*y;return _>0&&(_=1/Math.sqrt(_)),u[0]=g*_,u[1]=y*_,u}),normalize_1$1}var scale_1$3,hasRequiredScale$3;function requireScale$3(){return hasRequiredScale$3||(hasRequiredScale$3=1,scale_1$3=(u,h,g)=>(u[0]=h[0]*g,u[1]=h[1]*g,u)),scale_1$3}var snap_1$2,hasRequiredSnap$2;function requireSnap$2(){return hasRequiredSnap$2||(hasRequiredSnap$2=1,snap_1$2=(u,h,g)=>(u[0]=Math.round(h[0]/g)*g+0,u[1]=Math.round(h[1]/g)*g+0,u)),snap_1$2}var squaredDistance_1$1,hasRequiredSquaredDistance$1;function requireSquaredDistance$1(){return hasRequiredSquaredDistance$1||(hasRequiredSquaredDistance$1=1,squaredDistance_1$1=(u,h)=>{const g=h[0]-u[0],y=h[1]-u[1];return g*g+y*y}),squaredDistance_1$1}var squaredLength_1$1,hasRequiredSquaredLength$1;function requireSquaredLength$1(){return hasRequiredSquaredLength$1||(hasRequiredSquaredLength$1=1,squaredLength_1$1=u=>{const h=u[0],g=u[1];return h*h+g*g}),squaredLength_1$1}var subtract_1$3,hasRequiredSubtract$3;function requireSubtract$3(){return hasRequiredSubtract$3||(hasRequiredSubtract$3=1,subtract_1$3=(u,h,g)=>(u[0]=h[0]-g[0],u[1]=h[1]-g[1],u)),subtract_1$3}var toString_1$a,hasRequiredToString$a;function requireToString$a(){return hasRequiredToString$a||(hasRequiredToString$a=1,toString_1$a=u=>`[${u[0].toFixed(7)}, ${u[1].toFixed(7)}]`),toString_1$a}var transform_1$b,hasRequiredTransform$b;function requireTransform$b(){return hasRequiredTransform$b||(hasRequiredTransform$b=1,transform_1$b=(u,h,g)=>{const y=h[0],_=h[1];return u[0]=g[0]*y+g[4]*_+g[12],u[1]=g[1]*y+g[5]*_+g[13],u}),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=(u,h)=>(u[0]=Math.abs(h[0]),u[1]=Math.abs(h[1]),u[2]=Math.abs(h[2]),u)),abs_1}var add_1$1,hasRequiredAdd$1;function requireAdd$1(){return hasRequiredAdd$1||(hasRequiredAdd$1=1,add_1$1=(u,h,g)=>(u[0]=h[0]+g[0],u[1]=h[1]+g[1],u[2]=h[2]+g[2],u)),add_1$1}var dot_1$1,hasRequiredDot$1;function requireDot$1(){return hasRequiredDot$1||(hasRequiredDot$1=1,dot_1$1=(u,h)=>u[0]*h[0]+u[1]*h[1]+u[2]*h[2]),dot_1$1}var angle_1,hasRequiredAngle;function requireAngle(){if(hasRequiredAngle)return angle_1;hasRequiredAngle=1;const m=requireDot$1();return angle_1=(h,g)=>{const y=h[0],_=h[1],A=h[2],b=g[0],S=g[1],E=g[2],T=Math.sqrt(y*y+_*_+A*A),w=Math.sqrt(b*b+S*S+E*E),C=T*w,M=C&&m(h,g)/C;return Math.acos(Math.min(Math.max(M,-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 m=requireCreate$b();return clone_1$9=h=>{const g=m();return g[0]=h[0],g[1]=h[1],g[2]=h[2],g},clone_1$9}var copy_1$4,hasRequiredCopy$4;function requireCopy$4(){return hasRequiredCopy$4||(hasRequiredCopy$4=1,copy_1$4=(u,h)=>(u[0]=h[0],u[1]=h[1],u[2]=h[2],u)),copy_1$4}var cross_1,hasRequiredCross;function requireCross(){return hasRequiredCross||(hasRequiredCross=1,cross_1=(u,h,g)=>{const y=h[0],_=h[1],A=h[2],b=g[0],S=g[1],E=g[2];return u[0]=_*E-A*S,u[1]=A*b-y*E,u[2]=y*S-_*b,u}),cross_1}var distance_1,hasRequiredDistance;function requireDistance(){return hasRequiredDistance||(hasRequiredDistance=1,distance_1=(u,h)=>{const g=h[0]-u[0],y=h[1]-u[1],_=h[2]-u[2];return Math.sqrt(g*g+y*y+_*_)}),distance_1}var divide_1,hasRequiredDivide;function requireDivide(){return hasRequiredDivide||(hasRequiredDivide=1,divide_1=(u,h,g)=>(u[0]=h[0]/g[0],u[1]=h[1]/g[1],u[2]=h[2]/g[2],u)),divide_1}var equals_1$6,hasRequiredEquals$6;function requireEquals$6(){return hasRequiredEquals$6||(hasRequiredEquals$6=1,equals_1$6=(u,h)=>u[0]===h[0]&&u[1]===h[1]&&u[2]===h[2]),equals_1$6}var fromScalar_1$1,hasRequiredFromScalar$1;function requireFromScalar$1(){return hasRequiredFromScalar$1||(hasRequiredFromScalar$1=1,fromScalar_1$1=(u,h)=>(u[0]=h,u[1]=h,u[2]=h,u)),fromScalar_1$1}var fromValues_1$3,hasRequiredFromValues$3;function requireFromValues$3(){if(hasRequiredFromValues$3)return fromValues_1$3;hasRequiredFromValues$3=1;const m=requireCreate$b();return fromValues_1$3=(h,g,y)=>{const _=m();return _[0]=h,_[1]=g,_[2]=y,_},fromValues_1$3}var fromVec2,hasRequiredFromVec2;function requireFromVec2(){return hasRequiredFromVec2||(hasRequiredFromVec2=1,fromVec2=(u,h,g=0)=>(u[0]=h[0],u[1]=h[1],u[2]=g,u)),fromVec2}var length_1$1,hasRequiredLength$1;function requireLength$1(){return hasRequiredLength$1||(hasRequiredLength$1=1,length_1$1=u=>{const h=u[0],g=u[1],y=u[2];return Math.sqrt(h*h+g*g+y*y)}),length_1$1}var lerp_1,hasRequiredLerp;function requireLerp(){return hasRequiredLerp||(hasRequiredLerp=1,lerp_1=(u,h,g,y)=>(u[0]=h[0]+y*(g[0]-h[0]),u[1]=h[1]+y*(g[1]-h[1]),u[2]=h[2]+y*(g[2]-h[2]),u)),lerp_1}var multiply_1$1,hasRequiredMultiply$1;function requireMultiply$1(){return hasRequiredMultiply$1||(hasRequiredMultiply$1=1,multiply_1$1=(u,h,g)=>(u[0]=h[0]*g[0],u[1]=h[1]*g[1],u[2]=h[2]*g[2],u)),multiply_1$1}var negate_1,hasRequiredNegate;function requireNegate(){return hasRequiredNegate||(hasRequiredNegate=1,negate_1=(u,h)=>(u[0]=-h[0],u[1]=-h[1],u[2]=-h[2],u)),negate_1}var normalize_1,hasRequiredNormalize;function requireNormalize(){return hasRequiredNormalize||(hasRequiredNormalize=1,normalize_1=(u,h)=>{const g=h[0],y=h[1],_=h[2];let A=g*g+y*y+_*_;return A>0&&(A=1/Math.sqrt(A)),u[0]=g*A,u[1]=y*A,u[2]=_*A,u}),normalize_1}var orthogonal_1,hasRequiredOrthogonal;function requireOrthogonal(){if(hasRequiredOrthogonal)return orthogonal_1;hasRequiredOrthogonal=1;const m=requireAbs(),u=requireCreate$b(),h=requireCross();return orthogonal_1=(y,_)=>{const A=m(u(),_),b=0+(A[0]<A[1]&&A[0]<A[2]),S=0+(A[1]<=A[0]&&A[1]<A[2]),E=0+(A[2]<=A[0]&&A[2]<=A[1]);return h(y,_,[b,S,E])},orthogonal_1}var rotateX_1$1,hasRequiredRotateX$1;function requireRotateX$1(){return hasRequiredRotateX$1||(hasRequiredRotateX$1=1,rotateX_1$1=(u,h,g,y)=>{const _=[],A=[];return _[0]=h[0]-g[0],_[1]=h[1]-g[1],_[2]=h[2]-g[2],A[0]=_[0],A[1]=_[1]*Math.cos(y)-_[2]*Math.sin(y),A[2]=_[1]*Math.sin(y)+_[2]*Math.cos(y),u[0]=A[0]+g[0],u[1]=A[1]+g[1],u[2]=A[2]+g[2],u}),rotateX_1$1}var rotateY_1$1,hasRequiredRotateY$1;function requireRotateY$1(){return hasRequiredRotateY$1||(hasRequiredRotateY$1=1,rotateY_1$1=(u,h,g,y)=>{const _=[],A=[];return _[0]=h[0]-g[0],_[1]=h[1]-g[1],_[2]=h[2]-g[2],A[0]=_[2]*Math.sin(y)+_[0]*Math.cos(y),A[1]=_[1],A[2]=_[2]*Math.cos(y)-_[0]*Math.sin(y),u[0]=A[0]+g[0],u[1]=A[1]+g[1],u[2]=A[2]+g[2],u}),rotateY_1$1}var rotateZ_1$1,hasRequiredRotateZ$1;function requireRotateZ$1(){return hasRequiredRotateZ$1||(hasRequiredRotateZ$1=1,rotateZ_1$1=(u,h,g,y)=>{const _=[],A=[];return _[0]=h[0]-g[0],_[1]=h[1]-g[1],A[0]=_[0]*Math.cos(y)-_[1]*Math.sin(y),A[1]=_[0]*Math.sin(y)+_[1]*Math.cos(y),u[0]=A[0]+g[0],u[1]=A[1]+g[1],u[2]=h[2],u}),rotateZ_1$1}var scale_1$2,hasRequiredScale$2;function requireScale$2(){return hasRequiredScale$2||(hasRequiredScale$2=1,scale_1$2=(u,h,g)=>(u[0]=h[0]*g,u[1]=h[1]*g,u[2]=h[2]*g,u)),scale_1$2}var snap_1$1,hasRequiredSnap$1;function requireSnap$1(){return hasRequiredSnap$1||(hasRequiredSnap$1=1,snap_1$1=(u,h,g)=>(u[0]=Math.round(h[0]/g)*g+0,u[1]=Math.round(h[1]/g)*g+0,u[2]=Math.round(h[2]/g)*g+0,u)),snap_1$1}var squaredDistance_1,hasRequiredSquaredDistance;function requireSquaredDistance(){return hasRequiredSquaredDistance||(hasRequiredSquaredDistance=1,squaredDistance_1=(u,h)=>{const g=h[0]-u[0],y=h[1]-u[1],_=h[2]-u[2];return g*g+y*y+_*_}),squaredDistance_1}var squaredLength_1,hasRequiredSquaredLength;function requireSquaredLength(){return hasRequiredSquaredLength||(hasRequiredSquaredLength=1,squaredLength_1=u=>{const h=u[0],g=u[1],y=u[2];return h*h+g*g+y*y}),squaredLength_1}var subtract_1$2,hasRequiredSubtract$2;function requireSubtract$2(){return hasRequiredSubtract$2||(hasRequiredSubtract$2=1,subtract_1$2=(u,h,g)=>(u[0]=h[0]-g[0],u[1]=h[1]-g[1],u[2]=h[2]-g[2],u)),subtract_1$2}var toString_1$9,hasRequiredToString$9;function requireToString$9(){return hasRequiredToString$9||(hasRequiredToString$9=1,toString_1$9=u=>`[${u[0].toFixed(7)}, ${u[1].toFixed(7)}, ${u[2].toFixed(7)}]`),toString_1$9}var transform_1$a,hasRequiredTransform$a;function requireTransform$a(){return hasRequiredTransform$a||(hasRequiredTransform$a=1,transform_1$a=(u,h,g)=>{const y=h[0],_=h[1],A=h[2];let b=g[3]*y+g[7]*_+g[11]*A+g[15];return b=b||1,u[0]=(g[0]*y+g[4]*_+g[8]*A+g[12])/b,u[1]=(g[1]*y+g[5]*_+g[9]*A+g[13])/b,u[2]=(g[2]*y+g[6]*_+g[10]*A+g[14])/b,u}),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=u=>Object.assign({},u)),clone_1$8}var add_1,hasRequiredAdd;function requireAdd(){return hasRequiredAdd||(hasRequiredAdd=1,add_1=(u,h,g)=>(u[0]=h[0]+g[0],u[1]=h[1]+g[1],u[2]=h[2]+g[2],u[3]=h[3]+g[3],u[4]=h[4]+g[4],u[5]=h[5]+g[5],u[6]=h[6]+g[6],u[7]=h[7]+g[7],u[8]=h[8]+g[8],u[9]=h[9]+g[9],u[10]=h[10]+g[10],u[11]=h[11]+g[11],u[12]=h[12]+g[12],u[13]=h[13]+g[13],u[14]=h[14]+g[14],u[15]=h[15]+g[15],u)),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 m=requireCreate$a();return clone_1$7=h=>{const g=m();return g[0]=h[0],g[1]=h[1],g[2]=h[2],g[3]=h[3],g[4]=h[4],g[5]=h[5],g[6]=h[6],g[7]=h[7],g[8]=h[8],g[9]=h[9],g[10]=h[10],g[11]=h[11],g[12]=h[12],g[13]=h[13],g[14]=h[14],g[15]=h[15],g},clone_1$7}var copy_1$3,hasRequiredCopy$3;function requireCopy$3(){return hasRequiredCopy$3||(hasRequiredCopy$3=1,copy_1$3=(u,h)=>(u[0]=h[0],u[1]=h[1],u[2]=h[2],u[3]=h[3],u[4]=h[4],u[5]=h[5],u[6]=h[6],u[7]=h[7],u[8]=h[8],u[9]=h[9],u[10]=h[10],u[11]=h[11],u[12]=h[12],u[13]=h[13],u[14]=h[14],u[15]=h[15],u)),copy_1$3}var invert_1$2,hasRequiredInvert$2;function requireInvert$2(){return hasRequiredInvert$2||(hasRequiredInvert$2=1,invert_1$2=(u,h)=>{const g=h[0],y=h[1],_=h[2],A=h[3],b=h[4],S=h[5],E=h[6],T=h[7],w=h[8],C=h[9],M=h[10],R=h[11],P=h[12],L=h[13],I=h[14],F=h[15],N=g*S-y*b,O=g*E-_*b,U=g*T-A*b,W=y*E-_*S,H=y*T-A*S,Y=_*T-A*E,J=w*L-C*P,Z=w*I-M*P,oe=w*F-R*P,re=C*I-M*L,fe=C*F-R*L,_e=M*F-R*I;let be=N*_e-O*fe+U*re+W*oe-H*Z+Y*J;return be?(be=1/be,u[0]=(S*_e-E*fe+T*re)*be,u[1]=(_*fe-y*_e-A*re)*be,u[2]=(L*Y-I*H+F*W)*be,u[3]=(M*H-C*Y-R*W)*be,u[4]=(E*oe-b*_e-T*Z)*be,u[5]=(g*_e-_*oe+A*Z)*be,u[6]=(I*U-P*Y-F*O)*be,u[7]=(w*Y-M*U+R*O)*be,u[8]=(b*fe-S*oe+T*J)*be,u[9]=(y*oe-g*fe-A*J)*be,u[10]=(P*H-L*U+F*N)*be,u[11]=(C*U-w*H-R*N)*be,u[12]=(S*Z-b*re-E*J)*be,u[13]=(g*re-y*Z+_*J)*be,u[14]=(L*O-P*W-I*N)*be,u[15]=(w*W-C*O+M*N)*be,u):null}),invert_1$2}var equals_1$5,hasRequiredEquals$5;function requireEquals$5(){return hasRequiredEquals$5||(hasRequiredEquals$5=1,equals_1$5=(u,h)=>u[0]===h[0]&&u[1]===h[1]&&u[2]===h[2]&&u[3]===h[3]&&u[4]===h[4]&&u[5]===h[5]&&u[6]===h[6]&&u[7]===h[7]&&u[8]===h[8]&&u[9]===h[9]&&u[10]===h[10]&&u[11]===h[11]&&u[12]===h[12]&&u[13]===h[13]&&u[14]===h[14]&&u[15]===h[15]),equals_1$5}var identity_1,hasRequiredIdentity;function requireIdentity(){return hasRequiredIdentity||(hasRequiredIdentity=1,identity_1=u=>(u[0]=1,u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=1,u[6]=0,u[7]=0,u[8]=0,u[9]=0,u[10]=1,u[11]=0,u[12]=0,u[13]=0,u[14]=0,u[15]=1,u)),identity_1}var fromRotation_1,hasRequiredFromRotation;function requireFromRotation(){if(hasRequiredFromRotation)return fromRotation_1;hasRequiredFromRotation=1;const{EPS:m}=requireConstants$2(),{sin:u,cos:h}=requireTrigonometry(),g=requireIdentity();return fromRotation_1=(_,A,b)=>{let[S,E,T]=b;const w=S*S+E*E+T*T;if(Math.abs(w)<m)return g(_);const C=1/Math.sqrt(w);S*=C,E*=C,T*=C;const M=u(A),R=h(A),P=1-R;return _[0]=S*S*P+R,_[1]=E*S*P+T*M,_[2]=T*S*P-E*M,_[3]=0,_[4]=S*E*P-T*M,_[5]=E*E*P+R,_[6]=T*E*P+S*M,_[7]=0,_[8]=S*T*P+E*M,_[9]=E*T*P-S*M,_[10]=T*T*P+R,_[11]=0,_[12]=0,_[13]=0,_[14]=0,_[15]=1,_},fromRotation_1}var fromScaling_1,hasRequiredFromScaling;function requireFromScaling(){return hasRequiredFromScaling||(hasRequiredFromScaling=1,fromScaling_1=(u,h)=>(u[0]=h[0],u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=h[1],u[6]=0,u[7]=0,u[8]=0,u[9]=0,u[10]=h[2],u[11]=0,u[12]=0,u[13]=0,u[14]=0,u[15]=1,u)),fromScaling_1}var fromTaitBryanRotation_1,hasRequiredFromTaitBryanRotation;function requireFromTaitBryanRotation(){if(hasRequiredFromTaitBryanRotation)return fromTaitBryanRotation_1;hasRequiredFromTaitBryanRotation=1;const{sin:m,cos:u}=requireTrigonometry();return fromTaitBryanRotation_1=(g,y,_,A)=>{const b=m(y),S=u(y),E=m(_),T=u(_),w=m(A),C=u(A);return g[0]=T*S,g[1]=T*b,g[2]=-E,g[3]=0,g[4]=w*E*S-C*b,g[5]=C*S+w*E*b,g[6]=w*T,g[7]=0,g[8]=w*b+C*E*S,g[9]=C*E*b-w*S,g[10]=C*T,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g},fromTaitBryanRotation_1}var fromTranslation_1,hasRequiredFromTranslation;function requireFromTranslation(){return hasRequiredFromTranslation||(hasRequiredFromTranslation=1,fromTranslation_1=(u,h)=>(u[0]=1,u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=1,u[6]=0,u[7]=0,u[8]=0,u[9]=0,u[10]=1,u[11]=0,u[12]=h[0],u[13]=h[1],u[14]=h[2],u[15]=1,u)),fromTranslation_1}var fromValues_1$2,hasRequiredFromValues$2;function requireFromValues$2(){if(hasRequiredFromValues$2)return fromValues_1$2;hasRequiredFromValues$2=1;const m=requireCreate$a();return fromValues_1$2=(h,g,y,_,A,b,S,E,T,w,C,M,R,P,L,I)=>{const F=m();return F[0]=h,F[1]=g,F[2]=y,F[3]=_,F[4]=A,F[5]=b,F[6]=S,F[7]=E,F[8]=T,F[9]=w,F[10]=C,F[11]=M,F[12]=R,F[13]=P,F[14]=L,F[15]=I,F},fromValues_1$2}var fromVectorRotation_1,hasRequiredFromVectorRotation;function requireFromVectorRotation(){if(hasRequiredFromVectorRotation)return fromVectorRotation_1;hasRequiredFromVectorRotation=1;const m=requireVec3(),u=requireFromRotation();return fromVectorRotation_1=(g,y,_)=>{const A=m.normalize(m.create(),y),b=m.normalize(m.create(),_),S=m.cross(m.create(),b,A),E=m.dot(b,A);if(E===-1)return u(g,Math.PI,m.orthogonal(S,A));const T=1/(1+E);return g[0]=S[0]*S[0]*T+E,g[1]=S[1]*S[0]*T-S[2],g[2]=S[2]*S[0]*T+S[1],g[3]=0,g[4]=S[0]*S[1]*T+S[2],g[5]=S[1]*S[1]*T+E,g[6]=S[2]*S[1]*T-S[0],g[7]=0,g[8]=S[0]*S[2]*T-S[1],g[9]=S[1]*S[2]*T+S[0],g[10]=S[2]*S[2]*T+E,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g},fromVectorRotation_1}var fromXRotation_1,hasRequiredFromXRotation;function requireFromXRotation(){if(hasRequiredFromXRotation)return fromXRotation_1;hasRequiredFromXRotation=1;const{sin:m,cos:u}=requireTrigonometry();return fromXRotation_1=(g,y)=>{const _=m(y),A=u(y);return g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=A,g[6]=_,g[7]=0,g[8]=0,g[9]=-_,g[10]=A,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g},fromXRotation_1}var fromYRotation_1,hasRequiredFromYRotation;function requireFromYRotation(){if(hasRequiredFromYRotation)return fromYRotation_1;hasRequiredFromYRotation=1;const{sin:m,cos:u}=requireTrigonometry();return fromYRotation_1=(g,y)=>{const _=m(y),A=u(y);return g[0]=A,g[1]=0,g[2]=-_,g[3]=0,g[4]=0,g[5]=1,g[6]=0,g[7]=0,g[8]=_,g[9]=0,g[10]=A,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g},fromYRotation_1}var fromZRotation_1,hasRequiredFromZRotation;function requireFromZRotation(){if(hasRequiredFromZRotation)return fromZRotation_1;hasRequiredFromZRotation=1;const{sin:m,cos:u}=requireTrigonometry();return fromZRotation_1=(g,y)=>{const _=m(y),A=u(y);return g[0]=A,g[1]=_,g[2]=0,g[3]=0,g[4]=-_,g[5]=A,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=1,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g},fromZRotation_1}var isIdentity_1,hasRequiredIsIdentity;function requireIsIdentity(){return hasRequiredIsIdentity||(hasRequiredIsIdentity=1,isIdentity_1=u=>u[0]===1&&u[1]===0&&u[2]===0&&u[3]===0&&u[4]===0&&u[5]===1&&u[6]===0&&u[7]===0&&u[8]===0&&u[9]===0&&u[10]===1&&u[11]===0&&u[12]===0&&u[13]===0&&u[14]===0&&u[15]===1),isIdentity_1}var isOnlyTransformScale_1,hasRequiredIsOnlyTransformScale;function requireIsOnlyTransformScale(){if(hasRequiredIsOnlyTransformScale)return isOnlyTransformScale_1;hasRequiredIsOnlyTransformScale=1;const m=h=>u(h[1])&&u(h[2])&&u(h[3])&&u(h[4])&&u(h[6])&&u(h[7])&&u(h[8])&&u(h[9])&&u(h[11])&&h[15]===1,u=h=>Math.abs(h)<Number.EPSILON;return isOnlyTransformScale_1=m,isOnlyTransformScale_1}var isMirroring_1,hasRequiredIsMirroring;function requireIsMirroring(){return hasRequiredIsMirroring||(hasRequiredIsMirroring=1,isMirroring_1=u=>{const h=u[4]*u[9]-u[8]*u[5],g=u[8]*u[1]-u[0]*u[9],y=u[0]*u[5]-u[4]*u[1];return h*u[2]+g*u[6]+y*u[10]<0}),isMirroring_1}var mirrorByPlane_1,hasRequiredMirrorByPlane;function requireMirrorByPlane(){return hasRequiredMirrorByPlane||(hasRequiredMirrorByPlane=1,mirrorByPlane_1=(u,h)=>{const[g,y,_,A]=h;return u[0]=1-2*g*g,u[1]=-2*y*g,u[2]=-2*_*g,u[3]=0,u[4]=-2*g*y,u[5]=1-2*y*y,u[6]=-2*_*y,u[7]=0,u[8]=-2*g*_,u[9]=-2*y*_,u[10]=1-2*_*_,u[11]=0,u[12]=2*g*A,u[13]=2*y*A,u[14]=2*_*A,u[15]=1,u}),mirrorByPlane_1}var multiply_1,hasRequiredMultiply;function requireMultiply(){return hasRequiredMultiply||(hasRequiredMultiply=1,multiply_1=(u,h,g)=>{const y=h[0],_=h[1],A=h[2],b=h[3],S=h[4],E=h[5],T=h[6],w=h[7],C=h[8],M=h[9],R=h[10],P=h[11],L=h[12],I=h[13],F=h[14],N=h[15];let O=g[0],U=g[1],W=g[2],H=g[3];return u[0]=O*y+U*S+W*C+H*L,u[1]=O*_+U*E+W*M+H*I,u[2]=O*A+U*T+W*R+H*F,u[3]=O*b+U*w+W*P+H*N,O=g[4],U=g[5],W=g[6],H=g[7],u[4]=O*y+U*S+W*C+H*L,u[5]=O*_+U*E+W*M+H*I,u[6]=O*A+U*T+W*R+H*F,u[7]=O*b+U*w+W*P+H*N,O=g[8],U=g[9],W=g[10],H=g[11],u[8]=O*y+U*S+W*C+H*L,u[9]=O*_+U*E+W*M+H*I,u[10]=O*A+U*T+W*R+H*F,u[11]=O*b+U*w+W*P+H*N,O=g[12],U=g[13],W=g[14],H=g[15],u[12]=O*y+U*S+W*C+H*L,u[13]=O*_+U*E+W*M+H*I,u[14]=O*A+U*T+W*R+H*F,u[15]=O*b+U*w+W*P+H*N,u}),multiply_1}var rotate_1$1,hasRequiredRotate$1;function requireRotate$1(){if(hasRequiredRotate$1)return rotate_1$1;hasRequiredRotate$1=1;const{EPS:m}=requireConstants$2(),{sin:u,cos:h}=requireTrigonometry(),g=requireCopy$3();return rotate_1$1=(_,A,b,S)=>{let[E,T,w]=S;const C=E*E+T*T+w*w;if(Math.abs(C)<m)return g(_,A);const M=1/Math.sqrt(C);E*=M,T*=M,w*=M;const R=u(b),P=h(b),L=1-P,I=A[0],F=A[1],N=A[2],O=A[3],U=A[4],W=A[5],H=A[6],Y=A[7],J=A[8],Z=A[9],oe=A[10],re=A[11],fe=E*E*L+P,_e=T*E*L+w*R,be=w*E*L-T*R,ge=E*T*L-w*R,le=T*T*L+P,ne=w*T*L+E*R,ue=E*w*L+T*R,ye=T*w*L-E*R,ve=w*w*L+P;return _[0]=I*fe+U*_e+J*be,_[1]=F*fe+W*_e+Z*be,_[2]=N*fe+H*_e+oe*be,_[3]=O*fe+Y*_e+re*be,_[4]=I*ge+U*le+J*ne,_[5]=F*ge+W*le+Z*ne,_[6]=N*ge+H*le+oe*ne,_[7]=O*ge+Y*le+re*ne,_[8]=I*ue+U*ye+J*ve,_[9]=F*ue+W*ye+Z*ve,_[10]=N*ue+H*ye+oe*ve,_[11]=O*ue+Y*ye+re*ve,A!==_&&(_[12]=A[12],_[13]=A[13],_[14]=A[14],_[15]=A[15]),_},rotate_1$1}var rotateX_1,hasRequiredRotateX;function requireRotateX(){if(hasRequiredRotateX)return rotateX_1;hasRequiredRotateX=1;const{sin:m,cos:u}=requireTrigonometry();return rotateX_1=(g,y,_)=>{const A=m(_),b=u(_),S=y[4],E=y[5],T=y[6],w=y[7],C=y[8],M=y[9],R=y[10],P=y[11];return y!==g&&(g[0]=y[0],g[1]=y[1],g[2]=y[2],g[3]=y[3],g[12]=y[12],g[13]=y[13],g[14]=y[14],g[15]=y[15]),g[4]=S*b+C*A,g[5]=E*b+M*A,g[6]=T*b+R*A,g[7]=w*b+P*A,g[8]=C*b-S*A,g[9]=M*b-E*A,g[10]=R*b-T*A,g[11]=P*b-w*A,g},rotateX_1}var rotateY_1,hasRequiredRotateY;function requireRotateY(){if(hasRequiredRotateY)return rotateY_1;hasRequiredRotateY=1;const{sin:m,cos:u}=requireTrigonometry();return rotateY_1=(g,y,_)=>{const A=m(_),b=u(_),S=y[0],E=y[1],T=y[2],w=y[3],C=y[8],M=y[9],R=y[10],P=y[11];return y!==g&&(g[4]=y[4],g[5]=y[5],g[6]=y[6],g[7]=y[7],g[12]=y[12],g[13]=y[13],g[14]=y[14],g[15]=y[15]),g[0]=S*b-C*A,g[1]=E*b-M*A,g[2]=T*b-R*A,g[3]=w*b-P*A,g[8]=S*A+C*b,g[9]=E*A+M*b,g[10]=T*A+R*b,g[11]=w*A+P*b,g},rotateY_1}var rotateZ_1,hasRequiredRotateZ;function requireRotateZ(){if(hasRequiredRotateZ)return rotateZ_1;hasRequiredRotateZ=1;const{sin:m,cos:u}=requireTrigonometry();return rotateZ_1=(g,y,_)=>{const A=m(_),b=u(_),S=y[0],E=y[1],T=y[2],w=y[3],C=y[4],M=y[5],R=y[6],P=y[7];return y!==g&&(g[8]=y[8],g[9]=y[9],g[10]=y[10],g[11]=y[11],g[12]=y[12],g[13]=y[13],g[14]=y[14],g[15]=y[15]),g[0]=S*b+C*A,g[1]=E*b+M*A,g[2]=T*b+R*A,g[3]=w*b+P*A,g[4]=C*b-S*A,g[5]=M*b-E*A,g[6]=R*b-T*A,g[7]=P*b-w*A,g},rotateZ_1}var scale_1$1,hasRequiredScale$1;function requireScale$1(){return hasRequiredScale$1||(hasRequiredScale$1=1,scale_1$1=(u,h,g)=>{const y=g[0],_=g[1],A=g[2];return u[0]=h[0]*y,u[1]=h[1]*y,u[2]=h[2]*y,u[3]=h[3]*y,u[4]=h[4]*_,u[5]=h[5]*_,u[6]=h[6]*_,u[7]=h[7]*_,u[8]=h[8]*A,u[9]=h[9]*A,u[10]=h[10]*A,u[11]=h[11]*A,u[12]=h[12],u[13]=h[13],u[14]=h[14],u[15]=h[15],u}),scale_1$1}var subtract_1$1,hasRequiredSubtract$1;function requireSubtract$1(){return hasRequiredSubtract$1||(hasRequiredSubtract$1=1,subtract_1$1=(u,h,g)=>(u[0]=h[0]-g[0],u[1]=h[1]-g[1],u[2]=h[2]-g[2],u[3]=h[3]-g[3],u[4]=h[4]-g[4],u[5]=h[5]-g[5],u[6]=h[6]-g[6],u[7]=h[7]-g[7],u[8]=h[8]-g[8],u[9]=h[9]-g[9],u[10]=h[10]-g[10],u[11]=h[11]-g[11],u[12]=h[12]-g[12],u[13]=h[13]-g[13],u[14]=h[14]-g[14],u[15]=h[15]-g[15],u)),subtract_1$1}var toString_1$8,hasRequiredToString$8;function requireToString$8(){return hasRequiredToString$8||(hasRequiredToString$8=1,toString_1$8=u=>u.map(h=>h.toFixed(7)).toString()),toString_1$8}var translate_1$1,hasRequiredTranslate$1;function requireTranslate$1(){return hasRequiredTranslate$1||(hasRequiredTranslate$1=1,translate_1$1=(u,h,g)=>{const y=g[0],_=g[1],A=g[2];let b,S,E,T,w,C,M,R,P,L,I,F;return h===u?(u[12]=h[0]*y+h[4]*_+h[8]*A+h[12],u[13]=h[1]*y+h[5]*_+h[9]*A+h[13],u[14]=h[2]*y+h[6]*_+h[10]*A+h[14],u[15]=h[3]*y+h[7]*_+h[11]*A+h[15]):(b=h[0],S=h[1],E=h[2],T=h[3],w=h[4],C=h[5],M=h[6],R=h[7],P=h[8],L=h[9],I=h[10],F=h[11],u[0]=b,u[1]=S,u[2]=E,u[3]=T,u[4]=w,u[5]=C,u[6]=M,u[7]=R,u[8]=P,u[9]=L,u[10]=I,u[11]=F,u[12]=b*y+w*_+P*A+h[12],u[13]=S*y+C*_+L*A+h[13],u[14]=E*y+M*_+I*A+h[14],u[15]=T*y+R*_+F*A+h[15]),u}),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 m=requireMat4();return create_1$9=h=>(h===void 0&&(h=[]),{sides:h,transforms:m.create()}),create_1$9}var fromPoints_1$7,hasRequiredFromPoints$7;function requireFromPoints$7(){if(hasRequiredFromPoints$7)return fromPoints_1$7;hasRequiredFromPoints$7=1;const m=requireVec2(),u=requireCreate$9();return fromPoints_1$7=g=>{if(!Array.isArray(g))throw new Error("the given points must be an array");let y=g.length;if(y<3)throw new Error("the given points must define a closed geometry with three or more points");m.equals(g[0],g[y-1])&&--y;const _=[];let A=g[y-1];for(let b=0;b<y;b++){const S=g[b];_.push([m.clone(A),m.clone(S)]),A=S}return u(_)},fromPoints_1$7}var fromCompactBinary_1$2,hasRequiredFromCompactBinary$2;function requireFromCompactBinary$2(){if(hasRequiredFromCompactBinary$2)return fromCompactBinary_1$2;hasRequiredFromCompactBinary$2=1;const m=requireMat4(),u=requireVec2(),h=requireCreate$9();return fromCompactBinary_1$2=y=>{if(y[0]!==0)throw new Error("invalid compact binary data");const _=h();_.transforms=m.clone(y.slice(1,17));for(let A=21;A<y.length;A+=4){const b=u.fromValues(y[A+0],y[A+1]),S=u.fromValues(y[A+2],y[A+3]);_.sides.push([b,S])}return y[17]>=0&&(_.color=[y[17],y[18],y[19],y[20]]),_},fromCompactBinary_1$2}var isA_1$4,hasRequiredIsA$4;function requireIsA$4(){return hasRequiredIsA$4||(hasRequiredIsA$4=1,isA_1$4=u=>!!(u&&typeof u=="object"&&"sides"in u&&"transforms"in u&&Array.isArray(u.sides)&&"length"in u.transforms)),isA_1$4}var applyTransforms_1$2,hasRequiredApplyTransforms$2;function requireApplyTransforms$2(){if(hasRequiredApplyTransforms$2)return applyTransforms_1$2;hasRequiredApplyTransforms$2=1;const m=requireMat4(),u=requireVec2();return applyTransforms_1$2=g=>(m.isIdentity(g.transforms)||(g.sides=g.sides.map(y=>{const _=u.transform(u.create(),y[0],g.transforms),A=u.transform(u.create(),y[1],g.transforms);return[_,A]}),g.transforms=m.create()),g),applyTransforms_1$2}var toSides_1,hasRequiredToSides;function requireToSides(){if(hasRequiredToSides)return toSides_1;hasRequiredToSides=1;const m=requireApplyTransforms$2();return toSides_1=h=>m(h).sides,toSides_1}var reverse_1$4,hasRequiredReverse$4;function requireReverse$4(){if(hasRequiredReverse$4)return reverse_1$4;hasRequiredReverse$4=1;const m=requireCreate$9(),u=requireToSides();return reverse_1$4=g=>{const _=u(g).map(A=>[A[1],A[0]]);return _.reverse(),m(_)},reverse_1$4}var toOutlines_1,hasRequiredToOutlines;function requireToOutlines(){if(hasRequiredToOutlines)return toOutlines_1;hasRequiredToOutlines=1;const m=requireVec2(),u=requireToSides(),h=A=>{const b=new Map,S=E=>{const T=E.toString();return b.has(T)?b.get(T):(b.set(T,E),E)};return A.map(E=>E.map(S))},g=A=>{const b=new Map;return h(A).forEach(E=>{b.has(E[0])?b.get(E[0]).push(E):b.set(E[0],[E])}),b},y=A=>{const b=g(u(A)),S=[];for(;;){let E;for(const[C,M]of b){if(E=M.shift(),!E){b.delete(C);continue}break}if(E===void 0)break;const T=[],w=E[0];for(;;){T.push(E[0]);const C=E[1];if(C===w)break;const M=b.get(C);if(!M)throw new Error(`geometry is not closed at vertex ${C}`);const R=_(E,M);M.length===0&&b.delete(C),E=R}T.length>0&&T.push(T.shift()),S.push(T)}return b.clear(),S},_=(A,b)=>{if(b.length===1)return b.pop();const S=m.create(),E=m.angleDegrees(m.subtract(S,A[1],A[0]));let T,w;b.forEach((M,R)=>{let L=m.angleDegrees(m.subtract(S,M[1],M[0]))-E;L<-180&&(L+=360),L>=180&&(L-=360),(w===void 0||L>T)&&(w=R,T=L)});const C=b[w];return b.splice(w,1),C};return toOutlines_1=y,toOutlines_1}var toPoints_1$3,hasRequiredToPoints$3;function requireToPoints$3(){if(hasRequiredToPoints$3)return toPoints_1$3;hasRequiredToPoints$3=1;const m=requireToSides();return toPoints_1$3=h=>{const y=m(h).map(_=>_[0]);return y.length>0&&y.push(y.shift()),y},toPoints_1$3}var toString_1$7,hasRequiredToString$7;function requireToString$7(){if(hasRequiredToString$7)return toString_1$7;hasRequiredToString$7=1;const m=requireVec2(),u=requireToSides();return toString_1$7=g=>{const y=u(g);let _="geom2 ("+y.length+` sides):
|
|
73
73
|
[
|
|
@@ -21413,7 +21413,7 @@ three/build/three.module.js:
|
|
|
21413
21413
|
* Copyright 2010-2024 Three.js Authors
|
|
21414
21414
|
* SPDX-License-Identifier: MIT
|
|
21415
21415
|
*)
|
|
21416
|
-
*/const dist$3=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$3);var dist$2,hasRequiredDist$2;function requireDist$2(){if(hasRequiredDist$2)return dist$2;hasRequiredDist$2=1;var m=Object.create,u=Object.defineProperty,h=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,y=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty,A=(rn,sr)=>{for(var Ar in sr)u(rn,Ar,{get:sr[Ar],enumerable:!0})},b=(rn,sr,Ar,Wt)=>{if(sr&&typeof sr=="object"||typeof sr=="function")for(let Rr of g(sr))!_.call(rn,Rr)&&Rr!==Ar&&u(rn,Rr,{get:()=>sr[Rr],enumerable:!(Wt=h(sr,Rr))||Wt.enumerable});return rn},S=(rn,sr,Ar)=>(Ar=rn!=null?m(y(rn)):{},b(!rn||!rn.__esModule?u(Ar,"default",{value:rn,enumerable:!0}):Ar,rn)),E=rn=>b(u({},"__esModule",{value:!0}),rn),T={};A(T,{CadViewer:()=>hi}),dist$2=E(T);var w=require$$2,C=requireReact(),M=(rn,sr)=>(0,C.useMemo)(()=>{if(!rn)return;const Ar=new w.Circuit;return Ar.add(rn),Ar.render(),Ar.getCircuitJson()},[rn]),R=requireDist$6(),P=requireReact(),L=requireDist$6(),I=requireTransforms(),F=requirePrimitives(),N=requireColors(),O=requireBooleans(),U=requirePrimitives(),W=requireColors(),H=requireBooleans(),Y=.01,J={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255]},Z=(rn,sr)=>{if(rn.shape||(rn.shape="circle"),rn.shape==="circle")return(0,W.colorize)(J.copper,(0,H.subtract)((0,H.union)((0,U.cylinder)({center:[rn.x,rn.y,0],radius:rn.hole_diameter/2,height:1.2}),(0,U.cylinder)({center:[rn.x,rn.y,1.2/2],radius:rn.outer_diameter/2,height:Y}),(0,U.cylinder)({center:[rn.x,rn.y,-1.2/2],radius:rn.outer_diameter/2,height:Y})),(0,U.cylinder)({center:[rn.x,rn.y,0],radius:rn.hole_diameter/2-Y,height:1.5})));if(rn.shape==="pill"){const Ar=rn.hole_height>rn.hole_width,Wt=Ar?rn.hole_height:rn.hole_width,Rr=Ar?rn.hole_width:rn.hole_height,Qr=Ar?rn.outer_width||Wt+.2:rn.outer_height||Rr+.2,Je=Rr/2,Ke=Math.abs(Wt-Rr),kt=(0,U.cuboid)({center:Ar?[rn.x,rn.y,0]:[rn.x,rn.y,0],size:Ar?[Rr,Ke,1.2]:[Ke,Rr,1.2]}),lr=(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,0]:[rn.x-Ke/2,rn.y,0],radius:Je,height:1.2}),Cr=(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,0]:[rn.x+Ke/2,rn.y,0],radius:Je,height:1.2}),kr=(0,U.cuboid)({center:Ar?[rn.x,rn.y,1.2/2]:[rn.x,rn.y,1.2/2],size:Ar?[Qr,Ke,Y]:[Ke,Qr,Y]}),Br=(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,1.2/2]:[rn.x-Ke/2,rn.y,1.2/2],radius:Qr/2,height:Y}),$n=(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,1.2/2]:[rn.x+Ke/2,rn.y,1.2/2],radius:Qr/2,height:Y}),ln=(0,U.cuboid)({center:Ar?[rn.x,rn.y,-1.2/2]:[rn.x,rn.y,-1.2/2],size:Ar?[Qr,Ke,Y]:[Ke,Qr,Y]}),xn=(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,-1.2/2]:[rn.x-Ke/2,rn.y,-1.2/2],radius:Qr/2,height:Y}),Nn=(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,-1.2/2]:[rn.x+Ke/2,rn.y,-1.2/2],radius:Qr/2,height:Y});return(0,W.colorize)(J.copper,(0,H.subtract)((0,H.union)(kt,lr,Cr,kr,Br,$n,ln,xn,Nn),(0,H.union)((0,U.cuboid)({center:[rn.x,rn.y,0],size:Ar?[Rr-Y,Ke,1.5]:[Ke,Rr-Y,1.5]}),(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,0]:[rn.x-Ke/2,rn.y,0],radius:Je-Y,height:1.5}),(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,0]:[rn.x+Ke/2,rn.y,0],radius:Je-Y,height:1.5}))))}else throw new Error(`Unsupported plated hole shape: ${rn.shape}`)},oe=requireExtrusions(),re=requireExpansions(),fe=requireExtrusions(),_e=requirePrimitives(),be=requireTransforms(),ge=rn=>{let sr=0;for(let Wt=0;Wt<rn.length;Wt++){const Rr=(Wt+1)%rn.length;sr+=rn[Wt][0]*rn[Rr][1],sr-=rn[Rr][0]*rn[Wt][1]}return sr/2<=0},le=(rn,sr=1.2)=>{let Ar=rn.map(Qr=>[Qr.x,Qr.y]);ge(Ar)&&(Ar=Ar.reverse());const Wt=(0,_e.polygon)({points:Ar});let Rr=(0,fe.extrudeLinear)({height:sr},Wt);return Rr=(0,be.translate)([0,0,-sr/2],Rr),Rr},ne=requireText();function ue(rn){var kt,lr,Cr,kr;const sr=(0,ne.vectorText)({height:rn.font_size,input:rn.text});sr.forEach(Br=>{Br.length===29?(sr.splice(sr.indexOf(Br),1,Br.slice(0,15)),sr.splice(sr.indexOf(Br),0,Br.slice(14,29))):Br.length===17&&(sr.splice(sr.indexOf(Br),1,Br.slice(0,10)),sr.splice(sr.indexOf(Br),0,Br.slice(9,17)))});const Ar=sr.flatMap(Br=>Br),Wt={minX:Math.min(...Ar.map(Br=>Br[0])),maxX:Math.max(...Ar.map(Br=>Br[0])),minY:Math.min(...Ar.map(Br=>Br[1])),maxY:Math.max(...Ar.map(Br=>Br[1]))},Rr=(Wt.minX+Wt.maxX)/2,Qr=(Wt.minY+Wt.maxY)/2;let Je=-Rr,Ke=-Qr;return(kt=rn.anchor_alignment)!=null&&kt.includes("right")?Je=-Wt.maxX:(lr=rn.anchor_alignment)!=null&&lr.includes("left")&&(Je=-Wt.minX),(Cr=rn.anchor_alignment)!=null&&Cr.includes("top")?Ke=-Wt.maxY:(kr=rn.anchor_alignment)!=null&&kr.includes("bottom")&&(Ke=-Wt.minY),{textOutlines:sr,xOffset:Je,yOffset:Ke}}var ye=rn=>{const sr=(0,L.su)(rn).pcb_board.list()[0];if(!sr)throw new Error("No pcb_board found");const Ar=(0,L.su)(rn).pcb_plated_hole.list(),Wt=(0,L.su)(rn).pcb_hole.list(),Rr=(0,L.su)(rn).pcb_smtpad.list(),Qr=(0,L.su)(rn).pcb_trace.list(),Je=(0,L.su)(rn).pcb_via.list(),Ke=(0,L.su)(rn).pcb_silkscreen_text.list();let kt;sr.outline&&sr.outline.length>0?kt=le(sr.outline,1.2):kt=(0,F.cuboid)({size:[sr.width,sr.height,1.2]});const lr=[],Cr=[],kr=[],Br=ln=>{if(ln.shape==="circle"){const xn=(0,F.cylinder)({center:[ln.x,ln.y,0],radius:ln.hole_diameter/2+Y});kt=(0,O.subtract)(kt,xn);const Nn=Z(ln);lr.push(Nn)}else if(ln.shape==="pill"){const xn=ln.hole_height>ln.hole_width,Nn=xn?ln.hole_height:ln.hole_width,jn=xn?ln.hole_width:ln.hole_height,$r=jn/2,At=Math.abs(Nn-jn),Zt=(0,O.union)((0,F.cuboid)({center:[ln.x,ln.y,0],size:xn?[jn,At,1.5]:[At,jn,1.5]}),(0,F.cylinder)({center:xn?[ln.x,ln.y-At/2,0]:[ln.x-At/2,ln.y,0],radius:$r,height:1.5}),(0,F.cylinder)({center:xn?[ln.x,ln.y+At/2,0]:[ln.x+At/2,ln.y,0],radius:$r,height:1.5}));kt=(0,O.subtract)(kt,Zt);const gr=Z(ln);lr.push(gr)}};for(const ln of Ar)Br(ln);for(const ln of Wt)if(ln.hole_shape==="round"||ln.hole_shape==="circle"){const xn=(0,F.cylinder)({center:[ln.x,ln.y,0],radius:ln.hole_diameter/2+Y});kt=(0,O.subtract)(kt,xn)}for(const ln of Rr){const xn=ln.layer==="bottom"?-1:1;if(ln.shape==="rect"){const Nn=(0,N.colorize)(J.copper,(0,F.cuboid)({center:[ln.x,ln.y,xn*1.2/2+xn*Y],size:[ln.width,ln.height,Y]}));Cr.push(Nn)}else if(ln.shape==="circle"){const Nn=(0,N.colorize)(J.copper,(0,F.cylinder)({center:[ln.x,ln.y,xn*1.2/2+xn*Y],radius:ln.radius,height:Y}));Cr.push(Nn)}}for(const{route:ln}of Qr){if(ln.length<2)continue;const xn=[];let Nn=[ln[0]],jn=ln[0].route_type==="wire"?ln[0].layer:"top";for(let $r=1;$r<ln.length;$r++){const At=ln[$r];At.route_type==="via"?(xn.push(Nn),Nn=[At]):At.route_type==="wire"&&At.layer!==jn?(xn.push(Nn),jn=At.layer,Nn=[At]):Nn.push(At)}xn.push(Nn);for(const $r of xn){if($r.length<2)continue;const At=(0,F.line)($r.map(Sn=>[Sn.x,Sn.y])),Zt=$r[0].route_type==="via"?$r[0].to_layer==="top"?1:-1:$r[0].layer==="top"?1:-1;let gr=(0,I.translate)([0,0,Zt*1.2/2],(0,oe.extrudeLinear)({height:Y*Zt},(0,re.expand)({delta:.1,corners:"edge"},At)));const Dr=Je.map(Sn=>(0,F.cylinder)({center:[Sn.x,Sn.y,0],radius:Sn.outer_diameter/2,height:5})),Kr=Ar.filter(Sn=>Sn.shape==="circle").map(Sn=>(0,F.cylinder)({center:[Sn.x,Sn.y,0],radius:Sn.outer_diameter/2,height:5}));gr=(0,O.subtract)(gr,...Dr,...Kr),gr=(0,N.colorize)(J.fr4GreenSolderWithMask,gr),kr.push(gr)}}for(const ln of Je)Br({x:ln.x,y:ln.y,hole_diameter:ln.hole_diameter,outer_diameter:ln.outer_diameter,shape:"circle",layers:["top","bottom"],type:"pcb_plated_hole",pcb_plated_hole_id:""});const $n=[];for(const ln of Ke){const{textOutlines:xn,xOffset:Nn,yOffset:jn}=ue(ln);for(let $r of xn){const At=$r.map(Un=>[Un[0]+Nn+ln.anchor_position.x,Un[1]+jn+ln.anchor_position.y]),Zt=(0,F.line)(At),gr=ln.font_size||.25,Dr=Math.min(Math.max(.01,gr*.1),gr*.2),Kr=(0,re.expand)({delta:Dr,corners:"round"},Zt);let Sn=(0,I.translate)([0,0,.6],(0,oe.extrudeLinear)({height:.012},Kr));Sn=(0,N.colorize)([256,256,256],Sn),$n.push(Sn)}}return kt=(0,N.colorize)(J.fr4Green,kt),[kt,...lr,...Cr,...kr,...$n]},ve=requireReact(),Ee=S(requireStlSerializer());function Oe(rn){return new Promise((sr,Ar)=>{const Wt=new FileReader;Wt.onload=()=>{sr(Wt.result)},Wt.onerror=Ar,Wt.readAsDataURL(rn)})}var Ne=rn=>{const[sr,Ar]=(0,ve.useState)([]),[Wt,Rr]=(0,ve.useState)(!0);return(0,ve.useEffect)(()=>{if(!rn)return;(async()=>{Rr(!0);const Ke=(Array.isArray(rn)?rn:[rn]).map(async kt=>{const lr=Ee.default.serialize({binary:!0},[kt]),Cr=new Blob(lr);return{stlUrl:await Oe(Cr),color:kt.color}});try{const kt=await Promise.all(Ke);Ar(kt)}catch(kt){console.error("Error generating STLs:",kt),Ar([])}finally{Rr(!1)}})()},[rn]),{stls:sr,loading:Wt}},Ue=require$$11$1,qe=requireReact(),He=requireThreeStdlib(),Ze=requireJsxRuntime();function $e({stlUrl:rn,mtlUrl:sr,color:Ar,opacity:Wt=1}){const Rr=(0,Ue.useLoader)(He.STLLoader,rn),Qr=(0,qe.useRef)();return(0,Ze.jsxs)("mesh",{ref:Qr,children:[(0,Ze.jsx)("primitive",{object:Rr,attach:"geometry"}),(0,Ze.jsx)("meshStandardMaterial",{color:Ar,transparent:Wt!==1,opacity:Wt})]})}var Me=require$$14,Fe=require$$11$1,Qe={name:"@tscircuit/3d-viewer",version:"0.0.52",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",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.229","@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.75","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.1.10","@storybook/addon-interactions":"^8.1.10","@storybook/addon-links":"^8.1.10","@storybook/addon-onboarding":"^8.1.10","@storybook/blocks":"^8.1.10","@storybook/builder-vite":"^8.1.10","@storybook/react":"^8.1.10","@storybook/react-vite":"^8.1.10","@storybook/test":"^8.1.10","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1","circuit-json":"^0.0.77",storybook:"^8.1.10","strip-ansi":"^7.1.0",tsup:"^8.1.0",typescript:"^5.5.3",vite:"^5.3.1","vite-tsconfig-paths":"^4.3.2"}},nt=require$$14,ft=require$$11$1,ht=requireReact(),wt=S(requireThree()),gt=requireJsxRuntime();typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new wt.Euler(0,0,0));function Tt(rn,sr){const Ar=new wt.Quaternion().setFromEuler(new wt.Euler(rn.x,rn.y,rn.z)),Wt=new wt.Vector3(0,0,1);return Wt.applyQuaternion(Ar),Wt.multiplyScalar(sr)}var St=({})=>{const rn=(0,ht.useRef)();return(0,ht.useRef)({lastRotation:new wt.Euler}),(0,ft.useFrame)((sr,Ar)=>{if(!rn.current)return;const Wt=window.TSCI_MAIN_CAMERA_ROTATION,Rr=Tt(Wt,2);sr.camera.position.copy(Rr),sr.camera.lookAt(0,0,0)}),(0,gt.jsxs)("mesh",{ref:rn,rotation:[Math.PI/2,0,0],children:[(0,gt.jsx)("boxGeometry",{args:[1,1,1]}),(0,gt.jsx)("meshStandardMaterial",{color:"white"}),(0,gt.jsx)(nt.Text,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),(0,gt.jsx)(nt.Text,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),(0,gt.jsx)(nt.Text,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),(0,gt.jsx)(nt.Text,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),(0,gt.jsx)(nt.Text,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),(0,gt.jsx)(nt.Text,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),(0,gt.jsx)("lineSegments",{args:[new wt.EdgesGeometry(new wt.BoxGeometry(1,1,1))],material:new wt.LineBasicMaterial({color:0,linewidth:2})})]})},mt=require$$14,yt=requireJsxRuntime(),Dt=()=>((0,Fe.useFrame)(({camera:rn})=>{window.TSCI_MAIN_CAMERA_ROTATION=rn.rotation}),(0,yt.jsx)(yt.Fragment,{})),Rt=({children:rn,hoveredComponent:sr})=>(0,yt.jsxs)("div",{style:{position:"relative",width:"100%",height:"100%"},children:[(0,yt.jsx)("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:(0,yt.jsxs)(Fe.Canvas,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[(0,yt.jsx)("ambientLight",{intensity:Math.PI/2}),(0,yt.jsx)(St,{})]})}),(0,yt.jsxs)(Fe.Canvas,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:[5,5,5]},children:[(0,yt.jsx)(Dt,{}),(0,yt.jsx)(Me.OrbitControls,{autoRotate:!0,autoRotateSpeed:1}),(0,yt.jsx)("ambientLight",{intensity:Math.PI/2}),(0,yt.jsx)("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),(0,yt.jsx)(Me.Grid,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:10}),rn,sr&&(0,yt.jsx)(mt.Html,{position:sr.mousePosition,style:{fontFamily:"sans-serif",transform:"translate3d(50%, 50%, 0)",backgroundColor:"white",padding:"5px",borderRadius:"3px",pointerEvents:"none"},children:sr.name})]}),(0,yt.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:["@",Qe.version]})]}),Qt=requireReact(),vr=S(requireThree()),Tr=requireJsxRuntime(),Ft=rn=>(0,Tr.jsx)("group",{...rn}),Mt=({children:rn,isHovered:sr,onHover:Ar,position:Wt})=>{const Rr=(0,Qt.useRef)(null),Qr=(0,Qt.useCallback)(Ke=>{Ke.stopPropagation();try{const kt=Ke.point||(Ke.intersections&&Ke.intersections.length>0?Ke.intersections[0].point:null)||(Wt?new vr.Vector3(...Wt):null);kt?(Rr.current=kt,Ar({mousePosition:[kt.x,kt.y,kt.z]})):Ar({})}catch(kt){console.warn("Hover event error:",kt),Ar({})}},[Wt]),Je=(0,Qt.useCallback)(Ke=>{Ke.stopPropagation(),Rr.current=null,Ar(null)},[Ar]);return(0,Tr.jsx)(Ft,{onPointerEnter:Qr,onPointerMove:Qr,onPointerLeave:Je,children:rn})},Xt=Mt,Et=requireReact(),pt=requireThreeStdlib();typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function $t(rn){const[sr,Ar]=(0,Et.useState)(null);return(0,Et.useEffect)(()=>{if(!rn)return;const Wt=window.TSCIRCUIT_OBJ_LOADER_CACHE;let Rr=!1;async function Qr(){var Ke;try{const lr=await(await fetch(rn)).text(),Cr=(Ke=lr.match(/newmtl[\s\S]*?endmtl/g))==null?void 0:Ke.join(`
|
|
21416
|
+
*/const dist$3=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$3);var dist$2,hasRequiredDist$2;function requireDist$2(){if(hasRequiredDist$2)return dist$2;hasRequiredDist$2=1;var m=Object.create,u=Object.defineProperty,h=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,y=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty,A=(rn,sr)=>{for(var Ar in sr)u(rn,Ar,{get:sr[Ar],enumerable:!0})},b=(rn,sr,Ar,Wt)=>{if(sr&&typeof sr=="object"||typeof sr=="function")for(let Rr of g(sr))!_.call(rn,Rr)&&Rr!==Ar&&u(rn,Rr,{get:()=>sr[Rr],enumerable:!(Wt=h(sr,Rr))||Wt.enumerable});return rn},S=(rn,sr,Ar)=>(Ar=rn!=null?m(y(rn)):{},b(!rn||!rn.__esModule?u(Ar,"default",{value:rn,enumerable:!0}):Ar,rn)),E=rn=>b(u({},"__esModule",{value:!0}),rn),T={};A(T,{CadViewer:()=>hi}),dist$2=E(T);var w=require$$2,C=requireReact(),M=(rn,sr)=>(0,C.useMemo)(()=>{if(!rn)return;const Ar=new w.Circuit;return Ar.add(rn),Ar.render(),Ar.getCircuitJson()},[rn]),R=requireDist$6(),P=requireReact(),L=requireDist$6(),I=requireTransforms(),F=requirePrimitives(),N=requireColors(),O=requireBooleans(),U=requirePrimitives(),W=requireColors(),H=requireBooleans(),Y=.01,J={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255]},Z=(rn,sr)=>{if(rn.shape||(rn.shape="circle"),rn.shape==="circle")return(0,W.colorize)(J.copper,(0,H.subtract)((0,H.union)((0,U.cylinder)({center:[rn.x,rn.y,0],radius:rn.hole_diameter/2,height:1.2}),(0,U.cylinder)({center:[rn.x,rn.y,1.2/2],radius:rn.outer_diameter/2,height:Y}),(0,U.cylinder)({center:[rn.x,rn.y,-1.2/2],radius:rn.outer_diameter/2,height:Y})),(0,U.cylinder)({center:[rn.x,rn.y,0],radius:rn.hole_diameter/2-Y,height:1.5})));if(rn.shape==="pill"){const Ar=rn.hole_height>rn.hole_width,Wt=Ar?rn.hole_height:rn.hole_width,Rr=Ar?rn.hole_width:rn.hole_height,Qr=Ar?rn.outer_width||Wt+.2:rn.outer_height||Rr+.2,Je=Rr/2,Ke=Math.abs(Wt-Rr),kt=(0,U.cuboid)({center:Ar?[rn.x,rn.y,0]:[rn.x,rn.y,0],size:Ar?[Rr,Ke,1.2]:[Ke,Rr,1.2]}),lr=(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,0]:[rn.x-Ke/2,rn.y,0],radius:Je,height:1.2}),Cr=(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,0]:[rn.x+Ke/2,rn.y,0],radius:Je,height:1.2}),kr=(0,U.cuboid)({center:Ar?[rn.x,rn.y,1.2/2]:[rn.x,rn.y,1.2/2],size:Ar?[Qr,Ke,Y]:[Ke,Qr,Y]}),Br=(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,1.2/2]:[rn.x-Ke/2,rn.y,1.2/2],radius:Qr/2,height:Y}),$n=(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,1.2/2]:[rn.x+Ke/2,rn.y,1.2/2],radius:Qr/2,height:Y}),ln=(0,U.cuboid)({center:Ar?[rn.x,rn.y,-1.2/2]:[rn.x,rn.y,-1.2/2],size:Ar?[Qr,Ke,Y]:[Ke,Qr,Y]}),xn=(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,-1.2/2]:[rn.x-Ke/2,rn.y,-1.2/2],radius:Qr/2,height:Y}),Nn=(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,-1.2/2]:[rn.x+Ke/2,rn.y,-1.2/2],radius:Qr/2,height:Y});return(0,W.colorize)(J.copper,(0,H.subtract)((0,H.union)(kt,lr,Cr,kr,Br,$n,ln,xn,Nn),(0,H.union)((0,U.cuboid)({center:[rn.x,rn.y,0],size:Ar?[Rr-Y,Ke,1.5]:[Ke,Rr-Y,1.5]}),(0,U.cylinder)({center:Ar?[rn.x,rn.y-Ke/2,0]:[rn.x-Ke/2,rn.y,0],radius:Je-Y,height:1.5}),(0,U.cylinder)({center:Ar?[rn.x,rn.y+Ke/2,0]:[rn.x+Ke/2,rn.y,0],radius:Je-Y,height:1.5}))))}else throw new Error(`Unsupported plated hole shape: ${rn.shape}`)},oe=requireExtrusions(),re=requireExpansions(),fe=requireExtrusions(),_e=requirePrimitives(),be=requireTransforms(),ge=rn=>{let sr=0;for(let Wt=0;Wt<rn.length;Wt++){const Rr=(Wt+1)%rn.length;sr+=rn[Wt][0]*rn[Rr][1],sr-=rn[Rr][0]*rn[Wt][1]}return sr/2<=0},le=(rn,sr=1.2)=>{let Ar=rn.map(Qr=>[Qr.x,Qr.y]);ge(Ar)&&(Ar=Ar.reverse());const Wt=(0,_e.polygon)({points:Ar});let Rr=(0,fe.extrudeLinear)({height:sr},Wt);return Rr=(0,be.translate)([0,0,-sr/2],Rr),Rr},ne=requireText();function ue(rn){var kt,lr,Cr,kr;const sr=(0,ne.vectorText)({height:rn.font_size,input:rn.text});sr.forEach(Br=>{Br.length===29?(sr.splice(sr.indexOf(Br),1,Br.slice(0,15)),sr.splice(sr.indexOf(Br),0,Br.slice(14,29))):Br.length===17&&(sr.splice(sr.indexOf(Br),1,Br.slice(0,10)),sr.splice(sr.indexOf(Br),0,Br.slice(9,17)))});const Ar=sr.flatMap(Br=>Br),Wt={minX:Math.min(...Ar.map(Br=>Br[0])),maxX:Math.max(...Ar.map(Br=>Br[0])),minY:Math.min(...Ar.map(Br=>Br[1])),maxY:Math.max(...Ar.map(Br=>Br[1]))},Rr=(Wt.minX+Wt.maxX)/2,Qr=(Wt.minY+Wt.maxY)/2;let Je=-Rr,Ke=-Qr;return(kt=rn.anchor_alignment)!=null&&kt.includes("right")?Je=-Wt.maxX:(lr=rn.anchor_alignment)!=null&&lr.includes("left")&&(Je=-Wt.minX),(Cr=rn.anchor_alignment)!=null&&Cr.includes("top")?Ke=-Wt.maxY:(kr=rn.anchor_alignment)!=null&&kr.includes("bottom")&&(Ke=-Wt.minY),{textOutlines:sr,xOffset:Je,yOffset:Ke}}var ye=rn=>{const sr=(0,L.su)(rn).pcb_board.list()[0];if(!sr)throw new Error("No pcb_board found");const Ar=(0,L.su)(rn).pcb_plated_hole.list(),Wt=(0,L.su)(rn).pcb_hole.list(),Rr=(0,L.su)(rn).pcb_smtpad.list(),Qr=(0,L.su)(rn).pcb_trace.list(),Je=(0,L.su)(rn).pcb_via.list(),Ke=(0,L.su)(rn).pcb_silkscreen_text.list();let kt;sr.outline&&sr.outline.length>0?kt=le(sr.outline,1.2):kt=(0,F.cuboid)({size:[sr.width,sr.height,1.2]});const lr=[],Cr=[],kr=[],Br=ln=>{if(ln.shape==="circle"){const xn=(0,F.cylinder)({center:[ln.x,ln.y,0],radius:ln.hole_diameter/2+Y});kt=(0,O.subtract)(kt,xn);const Nn=Z(ln);lr.push(Nn)}else if(ln.shape==="pill"){const xn=ln.hole_height>ln.hole_width,Nn=xn?ln.hole_height:ln.hole_width,jn=xn?ln.hole_width:ln.hole_height,$r=jn/2,At=Math.abs(Nn-jn),Zt=(0,O.union)((0,F.cuboid)({center:[ln.x,ln.y,0],size:xn?[jn,At,1.5]:[At,jn,1.5]}),(0,F.cylinder)({center:xn?[ln.x,ln.y-At/2,0]:[ln.x-At/2,ln.y,0],radius:$r,height:1.5}),(0,F.cylinder)({center:xn?[ln.x,ln.y+At/2,0]:[ln.x+At/2,ln.y,0],radius:$r,height:1.5}));kt=(0,O.subtract)(kt,Zt);const gr=Z(ln);lr.push(gr)}};for(const ln of Ar)Br(ln);for(const ln of Wt)if(ln.hole_shape==="round"||ln.hole_shape==="circle"){const xn=(0,F.cylinder)({center:[ln.x,ln.y,0],radius:ln.hole_diameter/2+Y});kt=(0,O.subtract)(kt,xn)}for(const ln of Rr){const xn=ln.layer==="bottom"?-1:1;if(ln.shape==="rect"){const Nn=(0,N.colorize)(J.copper,(0,F.cuboid)({center:[ln.x,ln.y,xn*1.2/2+xn*Y],size:[ln.width,ln.height,Y]}));Cr.push(Nn)}else if(ln.shape==="circle"){const Nn=(0,N.colorize)(J.copper,(0,F.cylinder)({center:[ln.x,ln.y,xn*1.2/2+xn*Y],radius:ln.radius,height:Y}));Cr.push(Nn)}}for(const{route:ln}of Qr){if(ln.length<2)continue;const xn=[];let Nn=[ln[0]],jn=ln[0].route_type==="wire"?ln[0].layer:"top";for(let $r=1;$r<ln.length;$r++){const At=ln[$r];At.route_type==="via"?(xn.push(Nn),Nn=[At]):At.route_type==="wire"&&At.layer!==jn?(xn.push(Nn),jn=At.layer,Nn=[At]):Nn.push(At)}xn.push(Nn);for(const $r of xn){if($r.length<2)continue;const At=(0,F.line)($r.map(Sn=>[Sn.x,Sn.y])),Zt=$r[0].route_type==="via"?$r[0].to_layer==="top"?1:-1:$r[0].layer==="top"?1:-1;let gr=(0,I.translate)([0,0,Zt*1.2/2],(0,oe.extrudeLinear)({height:Y*Zt},(0,re.expand)({delta:.1,corners:"edge"},At)));const Dr=Je.map(Sn=>(0,F.cylinder)({center:[Sn.x,Sn.y,0],radius:Sn.outer_diameter/2,height:5})),Kr=Ar.filter(Sn=>Sn.shape==="circle").map(Sn=>(0,F.cylinder)({center:[Sn.x,Sn.y,0],radius:Sn.outer_diameter/2,height:5}));gr=(0,O.subtract)(gr,...Dr,...Kr),gr=(0,N.colorize)(J.fr4GreenSolderWithMask,gr),kr.push(gr)}}for(const ln of Je)Br({x:ln.x,y:ln.y,hole_diameter:ln.hole_diameter,outer_diameter:ln.outer_diameter,shape:"circle",layers:["top","bottom"],type:"pcb_plated_hole",pcb_plated_hole_id:""});const $n=[];for(const ln of Ke){const{textOutlines:xn,xOffset:Nn,yOffset:jn}=ue(ln);for(let $r of xn){const At=$r.map(Un=>[Un[0]+Nn+ln.anchor_position.x,Un[1]+jn+ln.anchor_position.y]),Zt=(0,F.line)(At),gr=ln.font_size||.25,Dr=Math.min(Math.max(.01,gr*.1),gr*.2),Kr=(0,re.expand)({delta:Dr,corners:"round"},Zt);let Sn=(0,I.translate)([0,0,.6],(0,oe.extrudeLinear)({height:.012},Kr));Sn=(0,N.colorize)([256,256,256],Sn),$n.push(Sn)}}return kt=(0,N.colorize)(J.fr4Green,kt),[kt,...lr,...Cr,...kr,...$n]},ve=requireReact(),Ee=S(requireStlSerializer());function Oe(rn){return new Promise((sr,Ar)=>{const Wt=new FileReader;Wt.onload=()=>{sr(Wt.result)},Wt.onerror=Ar,Wt.readAsDataURL(rn)})}var Ne=rn=>{const[sr,Ar]=(0,ve.useState)([]),[Wt,Rr]=(0,ve.useState)(!0);return(0,ve.useEffect)(()=>{if(!rn)return;(async()=>{Rr(!0);const Ke=(Array.isArray(rn)?rn:[rn]).map(async kt=>{const lr=Ee.default.serialize({binary:!0},[kt]),Cr=new Blob(lr);return{stlUrl:await Oe(Cr),color:kt.color}});try{const kt=await Promise.all(Ke);Ar(kt)}catch(kt){console.error("Error generating STLs:",kt),Ar([])}finally{Rr(!1)}})()},[rn]),{stls:sr,loading:Wt}},Ue=require$$11$1,qe=requireReact(),He=requireThreeStdlib(),Ze=requireJsxRuntime();function $e({stlUrl:rn,mtlUrl:sr,color:Ar,opacity:Wt=1}){const Rr=(0,Ue.useLoader)(He.STLLoader,rn),Qr=(0,qe.useRef)();return(0,Ze.jsxs)("mesh",{ref:Qr,children:[(0,Ze.jsx)("primitive",{object:Rr,attach:"geometry"}),(0,Ze.jsx)("meshStandardMaterial",{color:Ar,transparent:Wt!==1,opacity:Wt})]})}var Me=require$$14,Fe=require$$11$1,Qe={name:"@tscircuit/3d-viewer",version:"0.0.53",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",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.229","@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.1.10","@storybook/addon-interactions":"^8.1.10","@storybook/addon-links":"^8.1.10","@storybook/addon-onboarding":"^8.1.10","@storybook/blocks":"^8.1.10","@storybook/builder-vite":"^8.1.10","@storybook/react":"^8.1.10","@storybook/react-vite":"^8.1.10","@storybook/test":"^8.1.10","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1","circuit-json":"^0.0.77",storybook:"^8.1.10","strip-ansi":"^7.1.0",tsup:"^8.1.0",typescript:"^5.5.3",vite:"^5.3.1","vite-tsconfig-paths":"^4.3.2"}},nt=require$$14,ft=require$$11$1,ht=requireReact(),wt=S(requireThree()),gt=requireJsxRuntime();typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new wt.Euler(0,0,0));function Tt(rn,sr){const Ar=new wt.Quaternion().setFromEuler(new wt.Euler(rn.x,rn.y,rn.z)),Wt=new wt.Vector3(0,0,1);return Wt.applyQuaternion(Ar),Wt.multiplyScalar(sr)}var St=({})=>{const rn=(0,ht.useRef)();return(0,ht.useRef)({lastRotation:new wt.Euler}),(0,ft.useFrame)((sr,Ar)=>{if(!rn.current)return;const Wt=window.TSCI_MAIN_CAMERA_ROTATION,Rr=Tt(Wt,2);sr.camera.position.copy(Rr),sr.camera.lookAt(0,0,0)}),(0,gt.jsxs)("mesh",{ref:rn,rotation:[Math.PI/2,0,0],children:[(0,gt.jsx)("boxGeometry",{args:[1,1,1]}),(0,gt.jsx)("meshStandardMaterial",{color:"white"}),(0,gt.jsx)(nt.Text,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),(0,gt.jsx)(nt.Text,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),(0,gt.jsx)(nt.Text,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),(0,gt.jsx)(nt.Text,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),(0,gt.jsx)(nt.Text,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),(0,gt.jsx)(nt.Text,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),(0,gt.jsx)("lineSegments",{args:[new wt.EdgesGeometry(new wt.BoxGeometry(1,1,1))],material:new wt.LineBasicMaterial({color:0,linewidth:2})})]})},mt=require$$14,yt=requireJsxRuntime(),Dt=()=>((0,Fe.useFrame)(({camera:rn})=>{window.TSCI_MAIN_CAMERA_ROTATION=rn.rotation}),(0,yt.jsx)(yt.Fragment,{})),Rt=({children:rn,hoveredComponent:sr})=>(0,yt.jsxs)("div",{style:{position:"relative",width:"100%",height:"100%"},children:[(0,yt.jsx)("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:(0,yt.jsxs)(Fe.Canvas,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[(0,yt.jsx)("ambientLight",{intensity:Math.PI/2}),(0,yt.jsx)(St,{})]})}),(0,yt.jsxs)(Fe.Canvas,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:[5,5,5]},children:[(0,yt.jsx)(Dt,{}),(0,yt.jsx)(Me.OrbitControls,{autoRotate:!0,autoRotateSpeed:1}),(0,yt.jsx)("ambientLight",{intensity:Math.PI/2}),(0,yt.jsx)("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),(0,yt.jsx)(Me.Grid,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:10}),rn,sr&&(0,yt.jsx)(mt.Html,{position:sr.mousePosition,style:{fontFamily:"sans-serif",transform:"translate3d(50%, 50%, 0)",backgroundColor:"white",padding:"5px",borderRadius:"3px",pointerEvents:"none"},children:sr.name})]}),(0,yt.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:["@",Qe.version]})]}),Qt=requireReact(),vr=S(requireThree()),Tr=requireJsxRuntime(),Ft=rn=>(0,Tr.jsx)("group",{...rn}),Mt=({children:rn,isHovered:sr,onHover:Ar,position:Wt})=>{const Rr=(0,Qt.useRef)(null),Qr=(0,Qt.useCallback)(Ke=>{Ke.stopPropagation();try{const kt=Ke.point||(Ke.intersections&&Ke.intersections.length>0?Ke.intersections[0].point:null)||(Wt?new vr.Vector3(...Wt):null);kt?(Rr.current=kt,Ar({mousePosition:[kt.x,kt.y,kt.z]})):Ar({})}catch(kt){console.warn("Hover event error:",kt),Ar({})}},[Wt]),Je=(0,Qt.useCallback)(Ke=>{Ke.stopPropagation(),Rr.current=null,Ar(null)},[Ar]);return(0,Tr.jsx)(Ft,{onPointerEnter:Qr,onPointerMove:Qr,onPointerLeave:Je,children:rn})},Xt=Mt,Et=requireReact(),pt=requireThreeStdlib();typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function $t(rn){const[sr,Ar]=(0,Et.useState)(null);return(0,Et.useEffect)(()=>{if(!rn)return;const Wt=window.TSCIRCUIT_OBJ_LOADER_CACHE;let Rr=!1;async function Qr(){var Ke;try{const lr=await(await fetch(rn)).text(),Cr=(Ke=lr.match(/newmtl[\s\S]*?endmtl/g))==null?void 0:Ke.join(`
|
|
21417
21417
|
`).replace(/d 0\./g,"d 1."),kr=lr.replace(/newmtl[\s\S]*?endmtl/g,""),Br=new pt.MTLLoader;Br.setMaterialOptions({invertTrProperty:!0});const $n=Br.parse(Cr.replace(/Kd\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/g,"Kd $2 $2 $2"),"test.mtl"),ln=new pt.OBJLoader;return ln.setMaterials($n),ln.parse(kr)}catch(kt){return kt}}function Je(){if(Wt.has(rn)){const kt=Wt.get(rn);return kt.result?Promise.resolve(kt.result.clone()):kt.promise.then(lr=>lr.clone())}const Ke=Qr().then(kt=>(kt instanceof Error||Wt.set(rn,{...Wt.get(rn),result:kt}),kt));return Wt.set(rn,{promise:Ke,result:null}),Ke}return Je().then(Ke=>{Rr||Ar(Ke)}).catch(Ke=>{console.error(Ke)}),()=>{Rr=!0}},[rn]),sr}var Pt=requireJsxRuntime();function Bt({url:rn,position:sr,rotation:Ar,onHover:Wt,isHovered:Rr}){const Qr=$t(rn);return Qr?Qr instanceof Error?(0,Pt.jsx)(Xt,{isHovered:Rr,onHover:Wt,children:(0,Pt.jsxs)("mesh",{position:sr,children:[(0,Pt.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,Pt.jsx)("meshStandardMaterial",{transparent:!0,color:"red",opacity:.5}),(0,Pt.jsx)("meshBasicMaterial",{color:"red"})]})}):(0,Pt.jsx)(Xt,{isHovered:Rr,onHover:Wt,children:(0,Pt.jsx)("primitive",{rotation:Ar,position:sr,object:Qr})}):(0,Pt.jsx)(Xt,{isHovered:Rr,onHover:Wt,children:(0,Pt.jsxs)("mesh",{position:sr,children:[(0,Pt.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,Pt.jsx)("meshStandardMaterial",{transparent:!0,color:"red",opacity:.25})]})})}var er=requireDist$5(),Kt=S(requireSrc$1()),Er=requireDist$4(),xt=S(requireThree()),br=requireReact(),mr=requireJsxRuntime(),Jr=({jscadPlan:rn,positionOffset:sr,rotationOffset:Ar,onHover:Wt,isHovered:Rr})=>{const{threeGeom:Qr,material:Je}=(0,br.useMemo)(()=>{const Ke=(0,er.executeJscadOperations)(Kt.default,rn),kt=(0,Er.convertCSGToThreeGeom)(Ke),lr=new xt.MeshStandardMaterial({vertexColors:!0,side:xt.DoubleSide});return{threeGeom:kt,material:lr}},[rn]);return(0,br.useMemo)(()=>{if(Rr){const Ke=new xt.Color(Je.color.getHex());Je.emissive.copy(Ke),Je.emissive.setRGB(0,0,1),Je.emissiveIntensity=.2}else Je.emissiveIntensity=0},[Rr,Je]),Qr?(0,mr.jsx)(Xt,{isHovered:Rr,onHover:Wt,position:sr,children:(0,mr.jsx)("mesh",{geometry:Qr,material:Je,position:sr,rotation:Ar})}):null},In=require$$19,Fn=requireDist$4(),Mn=requireDist$5(),kn=requireReact(),ti=requireJsxRuntime(),{createJSCADRoot:Wr}=(0,Fn.createJSCADRenderer)(Mn.jscadPlanner),Qn=({positionOffset:rn,footprint:sr,rotationOffset:Ar,onHover:Wt,isHovered:Rr})=>{const Qr=(0,kn.useMemo)(()=>{if(!sr)return null;const Je=[];return Wr(Je).render((0,ti.jsx)(In.Footprinter3d,{footprint:sr})),Je},[sr]);return Qr?(0,ti.jsx)(ti.Fragment,{children:Qr.map((Je,Ke)=>(0,ti.jsx)(Jr,{positionOffset:rn,rotationOffset:Ar,jscadPlan:Je,onHover:Wt,isHovered:Rr},Ke))}):null},Wn=(...rn)=>rn,ei=requireJsxRuntime(),Oi=({cad_component:rn,onHover:sr=()=>{},isHovered:Ar=!1})=>{const Wt=rn.model_obj_url??rn.model_stl_url,Rr=rn.rotation?Wn(rn.rotation.x*Math.PI/180,rn.rotation.y*Math.PI/180,rn.rotation.z*Math.PI/180):void 0;if(Wt)return(0,ei.jsx)(Bt,{url:Wt,position:rn.position?[rn.position.x,rn.position.y,rn.position.z]:void 0,rotation:Rr,onHover:sr,isHovered:Ar},rn.cad_component_id);if(rn.model_jscad)return(0,ei.jsx)(Jr,{jscadPlan:rn.model_jscad,rotationOffset:Rr,onHover:sr,isHovered:Ar},rn.cad_component_id);if(rn.footprinter_string)return(0,ei.jsx)(Qn,{positionOffset:rn.position?[rn.position.x,rn.position.y,rn.position.z]:void 0,rotationOffset:Rr,footprint:rn.footprinter_string,onHover:sr,isHovered:Ar})},Ei=S(requireReact()),Hr=class extends Ei.default.Component{constructor(rn){super(rn),this.state={hasError:!1,error:null}}static getDerivedStateFromError(rn){return{hasError:!0,error:rn}}render(){return this.state.hasError&&this.state.error?this.props.fallback({error:this.state.error}):this.props.children}},zn=require$$14,Gn=requireJsxRuntime(),Zn=({error:rn,cad_component:sr})=>{let Ar=[0,0,0];return sr!=null&&sr.position&&(Ar=[sr.position.x,sr.position.y,sr.position.z],Ar=Ar.map(Wt=>Number.isNaN(Wt)?0:Wt)),(0,Gn.jsxs)("group",{position:Ar,children:[(0,Gn.jsxs)("mesh",{renderOrder:-99999,rotation:[Math.PI/4,Math.PI/4,0],ref:Wt=>{Wt&&(Wt.renderOrder=999999)},children:[(0,Gn.jsx)("boxGeometry",{args:[.5,.5,.5]}),(0,Gn.jsx)("meshStandardMaterial",{depthTest:!1,transparent:!0,color:"red",opacity:.5})]}),(0,Gn.jsxs)(zn.Text,{scale:[.1,.1,.1],color:"red",anchorX:"center",anchorY:"middle",depthOffset:-99999,children:[rn.toString().slice(0,50),"..."]})]})},ii=requireJsxRuntime(),hi=({soup:rn,children:sr})=>{const[Ar,Wt]=(0,P.useState)(null);if(rn??(rn=M(sr)),!rn)return null;const Rr=(0,P.useMemo)(()=>rn.some(kt=>kt.type==="pcb_board")?ye(rn):null,[rn]),{stls:Qr,loading:Je}=Ne(Rr),Ke=(0,R.su)(rn).cad_component.list();return(0,ii.jsxs)(Rt,{hoveredComponent:Ar,children:[Qr.map(({stlUrl:kt,color:lr},Cr)=>(0,ii.jsx)($e,{stlUrl:kt,color:lr,opacity:Cr===0?.95:1},kt)),Ke.map(kt=>(0,ii.jsx)(Hr,{fallback:({error:lr})=>(0,ii.jsx)(Zn,{cad_component:kt,error:lr}),children:(0,ii.jsx)(Oi,{onHover:lr=>{var kr;if(lr||Wt(null),!lr.mousePosition)return;const Cr=(kr=(0,R.su)(rn).source_component.getUsing({source_component_id:kt.source_component_id}))==null?void 0:kr.name;Wt({cad_component_id:kt.cad_component_id,name:Cr??"<unknown>",mousePosition:lr.mousePosition})},cad_component:kt,isHovered:(Ar==null?void 0:Ar.cad_component_id)===kt.cad_component_id},kt.cad_component_id)},kt.cad_component_id))]})};return dist$2}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,identity=m=>m;function useStore(m,u=identity,h){const g=useSyncExternalStoreWithSelector(m.subscribe,m.getState,m.getServerState||m.getInitialState,u,h);return useDebugValue(g),g}const createImpl=m=>{const u=typeof m=="function"?createStore(m):m,h=(g,y)=>useStore(u,g,y);return Object.assign(h,u),h},create=m=>m?createImpl(m):createImpl;var react=m=>create(m);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 m(h){var g,y,_="";if(typeof h=="string"||typeof h=="number")_+=h;else if(typeof h=="object")if(Array.isArray(h)){var A=h.length;for(g=0;g<A;g++)h[g]&&(y=m(h[g]))&&(_&&(_+=" "),_+=y)}else for(y in h)h[y]&&(_&&(_+=" "),_+=y);return _}function u(){for(var h,g,y=0,_="",A=arguments.length;y<A;y++)(h=arguments[y])&&(g=m(h))&&(_&&(_+=" "),_+=g);return _}return clsx.exports=u,clsx.exports.clsx=u,clsx.exports}var hasRequiredReactToastify;function requireReactToastify(){if(hasRequiredReactToastify)return reactToastify;hasRequiredReactToastify=1;var m=requireReact(),u=requireClsx();function h(Ue){return Ue&&typeof Ue=="object"&&"default"in Ue?Ue:{default:Ue}}var g=h(m),y=h(u);const _=Ue=>typeof Ue=="number"&&!isNaN(Ue),A=Ue=>typeof Ue=="string",b=Ue=>typeof Ue=="function",S=Ue=>A(Ue)||b(Ue)?Ue:null,E=Ue=>m.isValidElement(Ue)||A(Ue)||b(Ue)||_(Ue);function T(Ue,qe,He){He===void 0&&(He=300);const{scrollHeight:Ze,style:$e}=Ue;requestAnimationFrame(()=>{$e.minHeight="initial",$e.height=Ze+"px",$e.transition=`all ${He}ms`,requestAnimationFrame(()=>{$e.height="0",$e.padding="0",$e.margin="0",setTimeout(qe,He)})})}function w(Ue){let{enter:qe,exit:He,appendPosition:Ze=!1,collapse:$e=!0,collapseDuration:Me=300}=Ue;return function(Fe){let{children:Qe,position:nt,preventExitTransition:ft,done:ht,nodeRef:wt,isIn:gt,playToast:Tt}=Fe;const St=Ze?`${qe}--${nt}`:qe,mt=Ze?`${He}--${nt}`:He,yt=m.useRef(0);return m.useLayoutEffect(()=>{const Dt=wt.current,Rt=St.split(" "),Qt=vr=>{vr.target===wt.current&&(Tt(),Dt.removeEventListener("animationend",Qt),Dt.removeEventListener("animationcancel",Qt),yt.current===0&&vr.type!=="animationcancel"&&Dt.classList.remove(...Rt))};Dt.classList.add(...Rt),Dt.addEventListener("animationend",Qt),Dt.addEventListener("animationcancel",Qt)},[]),m.useEffect(()=>{const Dt=wt.current,Rt=()=>{Dt.removeEventListener("animationend",Rt),$e?T(Dt,ht,Me):ht()};gt||(ft?Rt():(yt.current=1,Dt.className+=` ${mt}`,Dt.addEventListener("animationend",Rt)))},[gt]),g.default.createElement(g.default.Fragment,null,Qe)}}function C(Ue,qe){return Ue!=null?{content:Ue.content,containerId:Ue.props.containerId,id:Ue.props.toastId,theme:Ue.props.theme,type:Ue.props.type,data:Ue.props.data||{},isLoading:Ue.props.isLoading,icon:Ue.props.icon,status:qe}:{}}const M=new Map;let R=[];const P=new Set,L=Ue=>P.forEach(qe=>qe(Ue)),I=()=>M.size>0;function F(Ue,qe){var He;if(qe)return!((He=M.get(qe))==null||!He.isToastActive(Ue));let Ze=!1;return M.forEach($e=>{$e.isToastActive(Ue)&&(Ze=!0)}),Ze}function N(Ue,qe){E(Ue)&&(I()||R.push({content:Ue,options:qe}),M.forEach(He=>{He.buildToast(Ue,qe)}))}function O(Ue,qe){M.forEach(He=>{qe!=null&&qe!=null&&qe.containerId?(qe==null?void 0:qe.containerId)===He.id&&He.toggle(Ue,qe==null?void 0:qe.id):He.toggle(Ue,qe==null?void 0:qe.id)})}function U(Ue){const{subscribe:qe,getSnapshot:He,setProps:Ze}=m.useRef(function(Me){const Fe=Me.containerId||1;return{subscribe(Qe){const nt=function(ht,wt,gt){let Tt=1,St=0,mt=[],yt=[],Dt=[],Rt=wt;const Qt=new Map,vr=new Set,Tr=()=>{Dt=Array.from(Qt.values()),vr.forEach(Xt=>Xt())},Ft=Xt=>{yt=Xt==null?[]:yt.filter(Et=>Et!==Xt),Tr()},Mt=Xt=>{const{toastId:Et,onOpen:pt,updateId:$t,children:Pt}=Xt.props,Bt=$t==null;Xt.staleId&&Qt.delete(Xt.staleId),Qt.set(Et,Xt),yt=[...yt,Xt.props.toastId].filter(er=>er!==Xt.staleId),Tr(),gt(C(Xt,Bt?"added":"updated")),Bt&&b(pt)&&pt(m.isValidElement(Pt)&&Pt.props)};return{id:ht,props:Rt,observe:Xt=>(vr.add(Xt),()=>vr.delete(Xt)),toggle:(Xt,Et)=>{Qt.forEach(pt=>{Et!=null&&Et!==pt.props.toastId||b(pt.toggle)&&pt.toggle(Xt)})},removeToast:Ft,toasts:Qt,clearQueue:()=>{St-=mt.length,mt=[]},buildToast:(Xt,Et)=>{if((Fn=>{let{containerId:Mn,toastId:kn,updateId:ti}=Fn;const Wr=Mn?Mn!==ht:ht!==1,Qn=Qt.has(kn)&&ti==null;return Wr||Qn})(Et))return;const{toastId:pt,updateId:$t,data:Pt,staleId:Bt,delay:er}=Et,Kt=()=>{Ft(pt)},Er=$t==null;Er&&St++;const xt={...Rt,style:Rt.toastStyle,key:Tt++,...Object.fromEntries(Object.entries(Et).filter(Fn=>{let[Mn,kn]=Fn;return kn!=null})),toastId:pt,updateId:$t,data:Pt,closeToast:Kt,isIn:!1,className:S(Et.className||Rt.toastClassName),bodyClassName:S(Et.bodyClassName||Rt.bodyClassName),progressClassName:S(Et.progressClassName||Rt.progressClassName),autoClose:!Et.isLoading&&(br=Et.autoClose,mr=Rt.autoClose,br===!1||_(br)&&br>0?br:mr),deleteToast(){const Fn=Qt.get(pt),{onClose:Mn,children:kn}=Fn.props;b(Mn)&&Mn(m.isValidElement(kn)&&kn.props),gt(C(Fn,"removed")),Qt.delete(pt),St--,St<0&&(St=0),mt.length>0?Mt(mt.shift()):Tr()}};var br,mr;xt.closeButton=Rt.closeButton,Et.closeButton===!1||E(Et.closeButton)?xt.closeButton=Et.closeButton:Et.closeButton===!0&&(xt.closeButton=!E(Rt.closeButton)||Rt.closeButton);let Jr=Xt;m.isValidElement(Xt)&&!A(Xt.type)?Jr=m.cloneElement(Xt,{closeToast:Kt,toastProps:xt,data:Pt}):b(Xt)&&(Jr=Xt({closeToast:Kt,toastProps:xt,data:Pt}));const In={content:Jr,props:xt,staleId:Bt};Rt.limit&&Rt.limit>0&&St>Rt.limit&&Er?mt.push(In):_(er)?setTimeout(()=>{Mt(In)},er):Mt(In)},setProps(Xt){Rt=Xt},setToggle:(Xt,Et)=>{Qt.get(Xt).toggle=Et},isToastActive:Xt=>yt.some(Et=>Et===Xt),getSnapshot:()=>Dt}}(Fe,Me,L);M.set(Fe,nt);const ft=nt.observe(Qe);return R.forEach(ht=>N(ht.content,ht.options)),R=[],()=>{ft(),M.delete(Fe)}},setProps(Qe){var nt;(nt=M.get(Fe))==null||nt.setProps(Qe)},getSnapshot(){var Qe;return(Qe=M.get(Fe))==null?void 0:Qe.getSnapshot()}}}(Ue)).current;Ze(Ue);const $e=m.useSyncExternalStore(qe,He,He);return{getToastToRender:function(Me){if(!$e)return[];const Fe=new Map;return Ue.newestOnTop&&$e.reverse(),$e.forEach(Qe=>{const{position:nt}=Qe.props;Fe.has(nt)||Fe.set(nt,[]),Fe.get(nt).push(Qe)}),Array.from(Fe,Qe=>Me(Qe[0],Qe[1]))},isToastActive:F,count:$e==null?void 0:$e.length}}function W(Ue){const[qe,He]=m.useState(!1),[Ze,$e]=m.useState(!1),Me=m.useRef(null),Fe=m.useRef({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:Qe,pauseOnHover:nt,closeToast:ft,onClick:ht,closeOnClick:wt}=Ue;var gt,Tt;function St(){He(!0)}function mt(){He(!1)}function yt(Qt){const vr=Me.current;Fe.canDrag&&vr&&(Fe.didMove=!0,qe&&mt(),Fe.delta=Ue.draggableDirection==="x"?Qt.clientX-Fe.start:Qt.clientY-Fe.start,Fe.start!==Qt.clientX&&(Fe.canCloseOnClick=!1),vr.style.transform=`translate3d(${Ue.draggableDirection==="x"?`${Fe.delta}px, var(--y)`:`0, calc(${Fe.delta}px + var(--y))`},0)`,vr.style.opacity=""+(1-Math.abs(Fe.delta/Fe.removalDistance)))}function Dt(){document.removeEventListener("pointermove",yt),document.removeEventListener("pointerup",Dt);const Qt=Me.current;if(Fe.canDrag&&Fe.didMove&&Qt){if(Fe.canDrag=!1,Math.abs(Fe.delta)>Fe.removalDistance)return $e(!0),Ue.closeToast(),void Ue.collapseAll();Qt.style.transition="transform 0.2s, opacity 0.2s",Qt.style.removeProperty("transform"),Qt.style.removeProperty("opacity")}}(Tt=M.get((gt={id:Ue.toastId,containerId:Ue.containerId,fn:He}).containerId||1))==null||Tt.setToggle(gt.id,gt.fn),m.useEffect(()=>{if(Ue.pauseOnFocusLoss)return document.hasFocus()||mt(),window.addEventListener("focus",St),window.addEventListener("blur",mt),()=>{window.removeEventListener("focus",St),window.removeEventListener("blur",mt)}},[Ue.pauseOnFocusLoss]);const Rt={onPointerDown:function(Qt){if(Ue.draggable===!0||Ue.draggable===Qt.pointerType){Fe.didMove=!1,document.addEventListener("pointermove",yt),document.addEventListener("pointerup",Dt);const vr=Me.current;Fe.canCloseOnClick=!0,Fe.canDrag=!0,vr.style.transition="none",Ue.draggableDirection==="x"?(Fe.start=Qt.clientX,Fe.removalDistance=vr.offsetWidth*(Ue.draggablePercent/100)):(Fe.start=Qt.clientY,Fe.removalDistance=vr.offsetHeight*(Ue.draggablePercent===80?1.5*Ue.draggablePercent:Ue.draggablePercent)/100)}},onPointerUp:function(Qt){const{top:vr,bottom:Tr,left:Ft,right:Mt}=Me.current.getBoundingClientRect();Qt.nativeEvent.type!=="touchend"&&Ue.pauseOnHover&&Qt.clientX>=Ft&&Qt.clientX<=Mt&&Qt.clientY>=vr&&Qt.clientY<=Tr?mt():St()}};return Qe&&nt&&(Rt.onMouseEnter=mt,Ue.stacked||(Rt.onMouseLeave=St)),wt&&(Rt.onClick=Qt=>{ht&&ht(Qt),Fe.canCloseOnClick&&ft()}),{playToast:St,pauseToast:mt,isRunning:qe,preventExitTransition:Ze,toastRef:Me,eventHandlers:Rt}}function H(Ue){let{delay:qe,isRunning:He,closeToast:Ze,type:$e="default",hide:Me,className:Fe,style:Qe,controlledProgress:nt,progress:ft,rtl:ht,isIn:wt,theme:gt}=Ue;const Tt=Me||nt&&ft===0,St={...Qe,animationDuration:`${qe}ms`,animationPlayState:He?"running":"paused"};nt&&(St.transform=`scaleX(${ft})`);const mt=y.default("Toastify__progress-bar",nt?"Toastify__progress-bar--controlled":"Toastify__progress-bar--animated",`Toastify__progress-bar-theme--${gt}`,`Toastify__progress-bar--${$e}`,{"Toastify__progress-bar--rtl":ht}),yt=b(Fe)?Fe({rtl:ht,type:$e,defaultClassName:mt}):y.default(mt,Fe),Dt={[nt&&ft>=1?"onTransitionEnd":"onAnimationEnd"]:nt&&ft<1?null:()=>{wt&&Ze()}};return g.default.createElement("div",{className:"Toastify__progress-bar--wrp","data-hidden":Tt},g.default.createElement("div",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${gt} Toastify__progress-bar--${$e}`}),g.default.createElement("div",{role:"progressbar","aria-hidden":Tt?"true":"false","aria-label":"notification timer",className:yt,style:St,...Dt}))}let Y=1;const J=()=>""+Y++;function Z(Ue){return Ue&&(A(Ue.toastId)||_(Ue.toastId))?Ue.toastId:J()}function oe(Ue,qe){return N(Ue,qe),qe.toastId}function re(Ue,qe){return{...qe,type:qe&&qe.type||Ue,toastId:Z(qe)}}function fe(Ue){return(qe,He)=>oe(qe,re(Ue,He))}function _e(Ue,qe){return oe(Ue,re("default",qe))}_e.loading=(Ue,qe)=>oe(Ue,re("default",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...qe})),_e.promise=function(Ue,qe,He){let Ze,{pending:$e,error:Me,success:Fe}=qe;$e&&(Ze=A($e)?_e.loading($e,He):_e.loading($e.render,{...He,...$e}));const Qe={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},nt=(ht,wt,gt)=>{if(wt==null)return void _e.dismiss(Ze);const Tt={type:ht,...Qe,...He,data:gt},St=A(wt)?{render:wt}:wt;return Ze?_e.update(Ze,{...Tt,...St}):_e(St.render,{...Tt,...St}),gt},ft=b(Ue)?Ue():Ue;return ft.then(ht=>nt("success",Fe,ht)).catch(ht=>nt("error",Me,ht)),ft},_e.success=fe("success"),_e.info=fe("info"),_e.error=fe("error"),_e.warning=fe("warning"),_e.warn=_e.warning,_e.dark=(Ue,qe)=>oe(Ue,re("default",{theme:"dark",...qe})),_e.dismiss=function(Ue){(function(qe){var He;if(I()){if(qe==null||A(He=qe)||_(He))M.forEach(Ze=>{Ze.removeToast(qe)});else if(qe&&("containerId"in qe||"id"in qe)){const Ze=M.get(qe.containerId);Ze?Ze.removeToast(qe.id):M.forEach($e=>{$e.removeToast(qe.id)})}}else R=R.filter(Ze=>qe!=null&&Ze.options.toastId!==qe)})(Ue)},_e.clearWaitingQueue=function(Ue){Ue===void 0&&(Ue={}),M.forEach(qe=>{!qe.props.limit||Ue.containerId&&qe.id!==Ue.containerId||qe.clearQueue()})},_e.isActive=F,_e.update=function(Ue,qe){qe===void 0&&(qe={});const He=((Ze,$e)=>{var Me;let{containerId:Fe}=$e;return(Me=M.get(Fe||1))==null?void 0:Me.toasts.get(Ze)})(Ue,qe);if(He){const{props:Ze,content:$e}=He,Me={delay:100,...Ze,...qe,toastId:qe.toastId||Ue,updateId:J()};Me.toastId!==Ue&&(Me.staleId=Ue);const Fe=Me.render||$e;delete Me.render,oe(Fe,Me)}},_e.done=Ue=>{_e.update(Ue,{progress:1})},_e.onChange=function(Ue){return P.add(Ue),()=>{P.delete(Ue)}},_e.play=Ue=>O(!0,Ue),_e.pause=Ue=>O(!1,Ue);const be=typeof window<"u"?m.useLayoutEffect:m.useEffect,ge=Ue=>{let{theme:qe,type:He,isLoading:Ze,...$e}=Ue;return g.default.createElement("svg",{viewBox:"0 0 24 24",width:"100%",height:"100%",fill:qe==="colored"?"currentColor":`var(--toastify-icon-color-${He})`,...$e})},le={info:function(Ue){return g.default.createElement(ge,{...Ue},g.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(Ue){return g.default.createElement(ge,{...Ue},g.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(Ue){return g.default.createElement(ge,{...Ue},g.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(Ue){return g.default.createElement(ge,{...Ue},g.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 g.default.createElement("div",{className:"Toastify__spinner"})}},ne=Ue=>{const{isRunning:qe,preventExitTransition:He,toastRef:Ze,eventHandlers:$e,playToast:Me}=W(Ue),{closeButton:Fe,children:Qe,autoClose:nt,onClick:ft,type:ht,hideProgressBar:wt,closeToast:gt,transition:Tt,position:St,className:mt,style:yt,bodyClassName:Dt,bodyStyle:Rt,progressClassName:Qt,progressStyle:vr,updateId:Tr,role:Ft,progress:Mt,rtl:Xt,toastId:Et,deleteToast:pt,isIn:$t,isLoading:Pt,closeOnClick:Bt,theme:er}=Ue,Kt=y.default("Toastify__toast",`Toastify__toast-theme--${er}`,`Toastify__toast--${ht}`,{"Toastify__toast--rtl":Xt},{"Toastify__toast--close-on-click":Bt}),Er=b(mt)?mt({rtl:Xt,position:St,type:ht,defaultClassName:Kt}):y.default(Kt,mt),xt=function(In){let{theme:Fn,type:Mn,isLoading:kn,icon:ti}=In,Wr=null;const Qn={theme:Fn,type:Mn};return ti===!1||(b(ti)?Wr=ti({...Qn,isLoading:kn}):m.isValidElement(ti)?Wr=m.cloneElement(ti,Qn):kn?Wr=le.spinner():(Wn=>Wn in le)(Mn)&&(Wr=le[Mn](Qn))),Wr}(Ue),br=!!Mt||!nt,mr={closeToast:gt,type:ht,theme:er};let Jr=null;return Fe===!1||(Jr=b(Fe)?Fe(mr):m.isValidElement(Fe)?m.cloneElement(Fe,mr):function(In){let{closeToast:Fn,theme:Mn,ariaLabel:kn="close"}=In;return g.default.createElement("button",{className:`Toastify__close-button Toastify__close-button--${Mn}`,type:"button",onClick:ti=>{ti.stopPropagation(),Fn(ti)},"aria-label":kn},g.default.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 14 16"},g.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"})))}(mr)),g.default.createElement(Tt,{isIn:$t,done:pt,position:St,preventExitTransition:He,nodeRef:Ze,playToast:Me},g.default.createElement("div",{id:Et,onClick:ft,"data-in":$t,className:Er,...$e,style:yt,ref:Ze},g.default.createElement("div",{...$t&&{role:Ft},className:b(Dt)?Dt({type:ht}):y.default("Toastify__toast-body",Dt),style:Rt},xt!=null&&g.default.createElement("div",{className:y.default("Toastify__toast-icon",{"Toastify--animate-icon Toastify__zoom-enter":!Pt})},xt),g.default.createElement("div",null,Qe)),Jr,g.default.createElement(H,{...Tr&&!br?{key:`pb-${Tr}`}:{},rtl:Xt,theme:er,delay:nt,isRunning:qe,isIn:$t,closeToast:gt,hide:wt,type:ht,style:vr,className:Qt,controlledProgress:br,progress:Mt||0})))},ue=function(Ue,qe){return qe===void 0&&(qe=!1),{enter:`Toastify--animate Toastify__${Ue}-enter`,exit:`Toastify--animate Toastify__${Ue}-exit`,appendPosition:qe}},ye=w(ue("bounce",!0)),ve=w(ue("slide",!0)),Ee=w(ue("zoom")),Oe=w(ue("flip")),Ne={position:"top-right",transition:ye,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:"touch",draggablePercent:80,draggableDirection:"x",role:"alert",theme:"light"};return reactToastify.Bounce=ye,reactToastify.Flip=Oe,reactToastify.Icons=le,reactToastify.Slide=ve,reactToastify.ToastContainer=function(Ue){let qe={...Ne,...Ue};const He=Ue.stacked,[Ze,$e]=m.useState(!0),Me=m.useRef(null),{getToastToRender:Fe,isToastActive:Qe,count:nt}=U(qe),{className:ft,style:ht,rtl:wt,containerId:gt}=qe;function Tt(mt){const yt=y.default("Toastify__toast-container",`Toastify__toast-container--${mt}`,{"Toastify__toast-container--rtl":wt});return b(ft)?ft({position:mt,rtl:wt,defaultClassName:yt}):y.default(yt,S(ft))}function St(){He&&($e(!0),_e.play())}return be(()=>{if(He){var mt;const yt=Me.current.querySelectorAll('[data-in="true"]'),Dt=12,Rt=(mt=qe.position)==null?void 0:mt.includes("top");let Qt=0,vr=0;Array.from(yt).reverse().forEach((Tr,Ft)=>{const Mt=Tr;Mt.classList.add("Toastify__toast--stacked"),Ft>0&&(Mt.dataset.collapsed=`${Ze}`),Mt.dataset.pos||(Mt.dataset.pos=Rt?"top":"bot");const Xt=Qt*(Ze?.2:1)+(Ze?0:Dt*Ft);Mt.style.setProperty("--y",`${Rt?Xt:-1*Xt}px`),Mt.style.setProperty("--g",`${Dt}`),Mt.style.setProperty("--s",""+(1-(Ze?vr:0))),Qt+=Mt.offsetHeight,vr+=.025})}},[Ze,nt,He]),g.default.createElement("div",{ref:Me,className:"Toastify",id:gt,onMouseEnter:()=>{He&&($e(!1),_e.pause())},onMouseLeave:St},Fe((mt,yt)=>{const Dt=yt.length?{...ht}:{...ht,pointerEvents:"none"};return g.default.createElement("div",{className:Tt(mt),style:Dt,key:`container-${mt}`},yt.map(Rt=>{let{content:Qt,props:vr}=Rt;return g.default.createElement(ne,{...vr,stacked:He,collapseAll:St,isIn:Qe(vr.toastId,vr.containerId),style:vr.style,key:`toast-${vr.key}`},Qt)}))}))},reactToastify.Zoom=Ee,reactToastify.collapseToast=T,reactToastify.cssTransition=w,reactToastify.toast=_e,reactToastify.useToast=W,reactToastify.useToastContainer=U,reactToastify}var injectStyle={},hasRequiredInjectStyle;function requireInjectStyle(){if(hasRequiredInjectStyle)return injectStyle;hasRequiredInjectStyle=1,Object.defineProperty(injectStyle,"__esModule",{value:!0}),injectStyle.injectStyle=m;function m(){var u=':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)}}',h=document.createElement("style");h.innerText=u,document.head.appendChild(h)}return injectStyle}var SuperGrid_1,hasRequiredSuperGrid;function requireSuperGrid(){if(hasRequiredSuperGrid)return SuperGrid_1;hasRequiredSuperGrid=1;var m=Object.defineProperty,u=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyNames,g=Object.prototype.hasOwnProperty,y=(L,I)=>{for(var F in I)m(L,F,{get:I[F],enumerable:!0})},_=(L,I,F,N)=>{if(I&&typeof I=="object"||typeof I=="function")for(let O of h(I))!g.call(L,O)&&O!==F&&m(L,O,{get:()=>I[O],enumerable:!(N=u(I,O))||N.enumerable});return L},A=L=>_(m({},"__esModule",{value:!0}),L),b={};y(b,{SuperGrid:()=>P,toMMSI:()=>R,toMeterSI:()=>M}),SuperGrid_1=A(b);var S=requireReact(),E=require$$0,T=requireJsxRuntime(),w=(L,I,F)=>{const N=[];if(I<L)for(let O=L;O>=I;O-=Math.abs(F))N.push(O);else for(let O=L;O<=I;O+=Math.abs(F))N.push(O);return N};function C(L,I){return{x:Math.round(I.x/L)*L,y:Math.round(I.y/L)*L}}function M(L,I=1){return L<0?"-"+M(-L):L<1e-6?"0m":L>1e3?Math.floor(L/1e3)+"km":L>1&&I>1?Math.round(L)+"m":L>1&&I<=1?L.toFixed(Math.ceil(-Math.log10(I)))+"m":L<1&&I>=1/1e3?Math.round(L*1e3)+"mm":L<1&&I<1/1e3?(L*1e3).toFixed(Math.ceil(-Math.log10(I*1e3)))+"mm":""}function R(L,I=1){return M(L/1e3,I/1e3)}var P=L=>{var I;const F=(0,S.useRef)(null),[N,O]=(0,S.useState)({x:0,y:0}),{majorColor:U="rgba(0,0,0,0.2)",minorColor:W="rgba(0,0,0,0.1)",textColor:H=(I=L.majorColor)!=null?I:"rgba(0,0,0,0.5)",width:Y,height:J,screenSpaceCellSize:Z=200,stringifyCoord:oe=(be,ge,le)=>`${M(be,le)}, ${M(ge,le)}`}=L,re=Math.ceil(Y/Z)+2,fe=Math.ceil(J/Z)+2;(0,S.useEffect)(()=>{if(!F.current)return;const be=F.current.getContext("2d");if(!be)return;const ge=Z/10**Math.floor(Math.log10(L.transform.a)),le=L.transform.d<0?-1:1,ue=Z/10**Math.log10(L.transform.a)/ge;function ye(Me,Fe,Qe){const nt=Me;let ft,ht,wt;for(ft=Fe.x;ft<=Qe.x;ft+=nt)ht=(0,E.applyToPoint)(L.transform,{x:ft,y:Fe.y}),wt=(0,E.applyToPoint)(L.transform,{x:ft,y:Qe.y}),be.beginPath(),be.moveTo(ht.x,ht.y),be.lineTo(wt.x,wt.y),be.stroke();const gt=w(Fe.y,Qe.y,nt*le);for(const Tt of gt)ht=(0,E.applyToPoint)(L.transform,{x:Fe.x,y:Tt}),wt=(0,E.applyToPoint)(L.transform,{x:Qe.x,y:Tt}),be.beginPath(),be.moveTo(ht.x,ht.y),be.lineTo(wt.x,wt.y),be.stroke()}function ve(Me,Fe,Qe){const nt=Me;let ft;for(ft=Fe.x;ft<=Qe.x;ft+=nt)for(const ht of w(Fe.y,Qe.y,nt*le)){const wt=(0,E.applyToPoint)(L.transform,{x:ft,y:ht});be.fillStyle=H,be.font="12px sans-serif",be.fillText(oe(ft,ht,Me),wt.x+2,wt.y-2)}}be.clearRect(0,0,Y,J);const Ee=(0,E.applyToPoint)((0,E.inverse)(L.transform),{x:0,y:0}),Oe={x:Math.floor((Ee.x-ge)/ge)*ge,y:Math.floor((Ee.y-ge)/ge+(le==-1?2:0))*ge},Ne={x:Oe.x+ge*re,y:Oe.y+ge*fe*le},qe=ge*5,He={x:Math.floor((Ee.x-qe)/qe)*qe,y:Math.floor((Ee.y-qe)/qe+(le==-1?2:0))*qe},Ze={x:He.x+qe*re,y:He.y+qe*fe*le};be.globalAlpha=1,be.strokeStyle=U,ye(ge,Oe,Ne),ve(qe,He,Ze),be.globalAlpha=1-ue,ye(qe/10,He,Ze),be.globalAlpha=1-ue,be.strokeStyle=W,ye(ge/10,Oe,Ne),be.globalAlpha=Math.max(((1-ue)*10-5)/5,0),ve(qe/10,He,Ze),be.globalAlpha=1;const $e=(0,E.applyToPoint)(L.transform,N);be.font="12px sans-serif",be.fillStyle=H,be.fillText(oe(N.x,N.y,ge),$e.x+2,$e.y-2),be.strokeStyle=U,be.strokeRect($e.x-5,$e.y-5,10,10)},[F,L.transform,N,Y,J]);const _e=be=>{if(!F.current)return;const ge=Z/10/10**Math.floor(Math.log10(L.transform.a)),le=F.current.getBoundingClientRect(),ne=(0,E.applyToPoint)((0,E.inverse)(L.transform),{x:be.clientX-le.left,y:be.clientY-le.top}),ue=C(ge,ne);O(ue)};return(0,T.jsx)("canvas",{onMouseUp:be=>{be.button===1&&_e(be)},onDoubleClick:_e,ref:F,width:L.width,height:L.height})};return SuperGrid_1}var isDevelopment$1=!1;function sheetForTag(m){if(m.sheet)return m.sheet;for(var u=0;u<document.styleSheets.length;u++)if(document.styleSheets[u].ownerNode===m)return document.styleSheets[u]}function createStyleElement(m){var u=document.createElement("style");return u.setAttribute("data-emotion",m.key),m.nonce!==void 0&&u.setAttribute("nonce",m.nonce),u.appendChild(document.createTextNode("")),u.setAttribute("data-s",""),u}var StyleSheet=function(){function m(h){var g=this;this._insertTag=function(y){var _;g.tags.length===0?g.insertionPoint?_=g.insertionPoint.nextSibling:g.prepend?_=g.container.firstChild:_=g.before:_=g.tags[g.tags.length-1].nextSibling,g.container.insertBefore(y,_),g.tags.push(y)},this.isSpeedy=h.speedy===void 0?!isDevelopment$1:h.speedy,this.tags=[],this.ctr=0,this.nonce=h.nonce,this.key=h.key,this.container=h.container,this.prepend=h.prepend,this.insertionPoint=h.insertionPoint,this.before=null}var u=m.prototype;return u.hydrate=function(g){g.forEach(this._insertTag)},u.insert=function(g){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(createStyleElement(this));var y=this.tags[this.tags.length-1];if(this.isSpeedy){var _=sheetForTag(y);try{_.insertRule(g,_.cssRules.length)}catch{}}else y.appendChild(document.createTextNode(g));this.ctr++},u.flush=function(){this.tags.forEach(function(g){var y;return(y=g.parentNode)==null?void 0:y.removeChild(g)}),this.tags=[],this.ctr=0},m}(),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(m,u){return charat(m,0)^45?(((u<<2^charat(m,0))<<2^charat(m,1))<<2^charat(m,2))<<2^charat(m,3):0}function trim(m){return m.trim()}function match(m,u){return(m=u.exec(m))?m[0]:m}function replace(m,u,h){return m.replace(u,h)}function indexof(m,u){return m.indexOf(u)}function charat(m,u){return m.charCodeAt(u)|0}function substr(m,u,h){return m.slice(u,h)}function strlen(m){return m.length}function sizeof$1(m){return m.length}function append(m,u){return u.push(m),m}function combine(m,u){return m.map(u).join("")}var line=1,column=1,length=0,position=0,character=0,characters="";function node(m,u,h,g,y,_,A){return{value:m,root:u,parent:h,type:g,props:y,children:_,line,column,length:A,return:""}}function copy(m,u){return assign(node("",null,null,"",null,null,0),m,{length:-m.length},u)}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(m,u){return substr(characters,m,u)}function token(m){switch(m){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(m){return line=column=1,length=strlen(characters=m),position=0,[]}function dealloc(m){return characters="",m}function delimit(m){return trim(slice(position-1,delimiter(m===91?m+2:m===40?m+1:m)))}function whitespace(m){for(;(character=peek())&&character<33;)next();return token(m)>2||token(character)>3?"":" "}function escaping(m,u){for(;--u&&next()&&!(character<48||character>102||character>57&&character<65||character>70&&character<97););return slice(m,caret()+(u<6&&peek()==32&&next()==32))}function delimiter(m){for(;next();)switch(character){case m:return position;case 34:case 39:m!==34&&m!==39&&delimiter(character);break;case 40:m===41&&delimiter(m);break;case 92:next();break}return position}function commenter(m,u){for(;next()&&m+character!==57;)if(m+character===84&&peek()===47)break;return"/*"+slice(u,position-1)+"*"+from(m===47?m:next())}function identifier(m){for(;!token(peek());)next();return slice(m,position)}function compile(m){return dealloc(parse$1("",null,null,null,[""],m=alloc(m),0,[0],m))}function parse$1(m,u,h,g,y,_,A,b,S){for(var E=0,T=0,w=A,C=0,M=0,R=0,P=1,L=1,I=1,F=0,N="",O=y,U=_,W=g,H=N;L;)switch(R=F,F=next()){case 40:if(R!=108&&charat(H,w-1)==58){indexof(H+=replace(delimit(F),"&","&\f"),"&\f")!=-1&&(I=-1);break}case 34:case 39:case 91:H+=delimit(F);break;case 9:case 10:case 13:case 32:H+=whitespace(R);break;case 92:H+=escaping(caret()-1,7);continue;case 47:switch(peek()){case 42:case 47:append(comment(commenter(next(),caret()),u,h),S);break;default:H+="/"}break;case 123*P:b[E++]=strlen(H)*I;case 125*P:case 59:case 0:switch(F){case 0:case 125:L=0;case 59+T:I==-1&&(H=replace(H,/\f/g,"")),M>0&&strlen(H)-w&&append(M>32?declaration(H+";",g,h,w-1):declaration(replace(H," ","")+";",g,h,w-2),S);break;case 59:H+=";";default:if(append(W=ruleset(H,u,h,E,T,y,b,N,O=[],U=[],w),_),F===123)if(T===0)parse$1(H,u,W,W,O,_,w,b,U);else switch(C===99&&charat(H,3)===110?100:C){case 100:case 108:case 109:case 115:parse$1(m,W,W,g&&append(ruleset(m,W,W,0,0,y,b,N,y,O=[],w),U),y,U,w,b,g?O:U);break;default:parse$1(H,W,W,W,[""],U,0,b,U)}}E=T=M=0,P=I=1,N=H="",w=A;break;case 58:w=1+strlen(H),M=R;default:if(P<1){if(F==123)--P;else if(F==125&&P++==0&&prev()==125)continue}switch(H+=from(F),F*P){case 38:I=T>0?1:(H+="\f",-1);break;case 44:b[E++]=(strlen(H)-1)*I,I=1;break;case 64:peek()===45&&(H+=delimit(next())),C=peek(),T=w=strlen(N=H+=identifier(caret())),F++;break;case 45:R===45&&strlen(H)==2&&(P=0)}}return _}function ruleset(m,u,h,g,y,_,A,b,S,E,T){for(var w=y-1,C=y===0?_:[""],M=sizeof$1(C),R=0,P=0,L=0;R<g;++R)for(var I=0,F=substr(m,w+1,w=abs(P=A[R])),N=m;I<M;++I)(N=trim(P>0?C[I]+" "+F:replace(F,/&\f/g,C[I])))&&(S[L++]=N);return node(m,u,h,y===0?RULESET:b,S,E,T)}function comment(m,u,h){return node(m,u,h,COMMENT,from(char()),substr(m,2,-2),0)}function declaration(m,u,h,g){return node(m,u,h,DECLARATION,substr(m,0,g),substr(m,g+1,-1),g)}function serialize(m,u){for(var h="",g=sizeof$1(m),y=0;y<g;y++)h+=u(m[y],y,m,u)||"";return h}function stringify$1(m,u,h,g){switch(m.type){case LAYER:if(m.children.length)break;case IMPORT:case DECLARATION:return m.return=m.return||m.value;case COMMENT:return"";case KEYFRAMES:return m.return=m.value+"{"+serialize(m.children,g)+"}";case RULESET:m.value=m.props.join(",")}return strlen(h=serialize(m.children,g))?m.return=m.value+"{"+h+"}":""}function middleware(m){var u=sizeof$1(m);return function(h,g,y,_){for(var A="",b=0;b<u;b++)A+=m[b](h,g,y,_)||"";return A}}function rulesheet(m){return function(u){u.root||(u=u.return)&&m(u)}}function memoize(m){var u=Object.create(null);return function(h){return u[h]===void 0&&(u[h]=m(h)),u[h]}}var identifierWithPointTracking=function m(u,h,g){for(var y=0,_=0;y=_,_=peek(),y===38&&_===12&&(h[g]=1),!token(_);)next();return slice(u,position)},toRules=function m(u,h){var g=-1,y=44;do switch(token(y)){case 0:y===38&&peek()===12&&(h[g]=1),u[g]+=identifierWithPointTracking(position-1,h,g);break;case 2:u[g]+=delimit(y);break;case 4:if(y===44){u[++g]=peek()===58?"&\f":"",h[g]=u[g].length;break}default:u[g]+=from(y)}while(y=next());return u},getRules=function m(u,h){return dealloc(toRules(alloc(u),h))},fixedElements=new WeakMap,compat=function m(u){if(!(u.type!=="rule"||!u.parent||u.length<1)){for(var h=u.value,g=u.parent,y=u.column===g.column&&u.line===g.line;g.type!=="rule";)if(g=g.parent,!g)return;if(!(u.props.length===1&&h.charCodeAt(0)!==58&&!fixedElements.get(g))&&!y){fixedElements.set(u,!0);for(var _=[],A=getRules(h,_),b=g.props,S=0,E=0;S<A.length;S++)for(var T=0;T<b.length;T++,E++)u.props[E]=_[S]?A[S].replace(/&\f/g,b[T]):b[T]+" "+A[S]}}},removeLabel=function m(u){if(u.type==="decl"){var h=u.value;h.charCodeAt(0)===108&&h.charCodeAt(2)===98&&(u.return="",u.value="")}};function prefix(m,u){switch(hash(m,u)){case 5103:return WEBKIT+"print-"+m+m;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+m+m;case 5349:case 4246:case 4810:case 6968:case 2756:return WEBKIT+m+MOZ+m+MS+m+m;case 6828:case 4268:return WEBKIT+m+MS+m+m;case 6165:return WEBKIT+m+MS+"flex-"+m+m;case 5187:return WEBKIT+m+replace(m,/(\w+).+(:[^]+)/,WEBKIT+"box-$1$2"+MS+"flex-$1$2")+m;case 5443:return WEBKIT+m+MS+"flex-item-"+replace(m,/flex-|-self/,"")+m;case 4675:return WEBKIT+m+MS+"flex-line-pack"+replace(m,/align-content|flex-|-self/,"")+m;case 5548:return WEBKIT+m+MS+replace(m,"shrink","negative")+m;case 5292:return WEBKIT+m+MS+replace(m,"basis","preferred-size")+m;case 6060:return WEBKIT+"box-"+replace(m,"-grow","")+WEBKIT+m+MS+replace(m,"grow","positive")+m;case 4554:return WEBKIT+replace(m,/([^-])(transform)/g,"$1"+WEBKIT+"$2")+m;case 6187:return replace(replace(replace(m,/(zoom-|grab)/,WEBKIT+"$1"),/(image-set)/,WEBKIT+"$1"),m,"")+m;case 5495:case 3959:return replace(m,/(image-set\([^]*)/,WEBKIT+"$1$`$1");case 4968:return replace(replace(m,/(.+:)(flex-)?(.*)/,WEBKIT+"box-pack:$3"+MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+WEBKIT+m+m;case 4095:case 3583:case 4068:case 2532:return replace(m,/(.+)-inline(.+)/,WEBKIT+"$1$2")+m;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(m)-1-u>6)switch(charat(m,u+1)){case 109:if(charat(m,u+4)!==45)break;case 102:return replace(m,/(.+:)(.+)-([^]+)/,"$1"+WEBKIT+"$2-$3$1"+MOZ+(charat(m,u+3)==108?"$3":"$2-$3"))+m;case 115:return~indexof(m,"stretch")?prefix(replace(m,"stretch","fill-available"),u)+m:m}break;case 4949:if(charat(m,u+1)!==115)break;case 6444:switch(charat(m,strlen(m)-3-(~indexof(m,"!important")&&10))){case 107:return replace(m,":",":"+WEBKIT)+m;case 101:return replace(m,/(.+:)([^;!]+)(;|!.+)?/,"$1"+WEBKIT+(charat(m,14)===45?"inline-":"")+"box$3$1"+WEBKIT+"$2$3$1"+MS+"$2box$3")+m}break;case 5936:switch(charat(m,u+11)){case 114:return WEBKIT+m+MS+replace(m,/[svh]\w+-[tblr]{2}/,"tb")+m;case 108:return WEBKIT+m+MS+replace(m,/[svh]\w+-[tblr]{2}/,"tb-rl")+m;case 45:return WEBKIT+m+MS+replace(m,/[svh]\w+-[tblr]{2}/,"lr")+m}return WEBKIT+m+MS+m+m}return m}var prefixer=function m(u,h,g,y){if(u.length>-1&&!u.return)switch(u.type){case DECLARATION:u.return=prefix(u.value,u.length);break;case KEYFRAMES:return serialize([copy(u,{value:replace(u.value,"@","@"+WEBKIT)})],y);case RULESET:if(u.length)return combine(u.props,function(_){switch(match(_,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return serialize([copy(u,{props:[replace(_,/:(read-\w+)/,":"+MOZ+"$1")]})],y);case"::placeholder":return serialize([copy(u,{props:[replace(_,/:(plac\w+)/,":"+WEBKIT+"input-$1")]}),copy(u,{props:[replace(_,/:(plac\w+)/,":"+MOZ+"$1")]}),copy(u,{props:[replace(_,/:(plac\w+)/,MS+"input-$1")]})],y)}return""})}},defaultStylisPlugins=[prefixer],createCache=function m(u){var h=u.key;if(h==="css"){var g=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(g,function(P){var L=P.getAttribute("data-emotion");L.indexOf(" ")!==-1&&(document.head.appendChild(P),P.setAttribute("data-s",""))})}var y=u.stylisPlugins||defaultStylisPlugins,_={},A,b=[];A=u.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+h+' "]'),function(P){for(var L=P.getAttribute("data-emotion").split(" "),I=1;I<L.length;I++)_[L[I]]=!0;b.push(P)});var S,E=[compat,removeLabel];{var T,w=[stringify$1,rulesheet(function(P){T.insert(P)})],C=middleware(E.concat(y,w)),M=function(L){return serialize(compile(L),C)};S=function(L,I,F,N){T=F,M(L?L+"{"+I.styles+"}":I.styles),N&&(R.inserted[I.name]=!0)}}var R={key:h,sheet:new StyleSheet({key:h,container:A,nonce:u.nonce,speedy:u.speedy,prepend:u.prepend,insertionPoint:u.insertionPoint}),nonce:u.nonce,inserted:_,registered:{},insert:S};return R.sheet.hydrate(b),R};function murmur2(m){for(var u=0,h,g=0,y=m.length;y>=4;++g,y-=4)h=m.charCodeAt(g)&255|(m.charCodeAt(++g)&255)<<8|(m.charCodeAt(++g)&255)<<16|(m.charCodeAt(++g)&255)<<24,h=(h&65535)*1540483477+((h>>>16)*59797<<16),h^=h>>>24,u=(h&65535)*1540483477+((h>>>16)*59797<<16)^(u&65535)*1540483477+((u>>>16)*59797<<16);switch(y){case 3:u^=(m.charCodeAt(g+2)&255)<<16;case 2:u^=(m.charCodeAt(g+1)&255)<<8;case 1:u^=m.charCodeAt(g)&255,u=(u&65535)*1540483477+((u>>>16)*59797<<16)}return u^=u>>>13,u=(u&65535)*1540483477+((u>>>16)*59797<<16),((u^u>>>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 m(u){return u.charCodeAt(1)===45},isProcessableValue=function m(u){return u!=null&&typeof u!="boolean"},processStyleName=memoize(function(m){return isCustomProperty(m)?m:m.replace(hyphenateRegex,"-$&").toLowerCase()}),processStyleValue=function m(u,h){switch(u){case"animation":case"animationName":if(typeof h=="string")return h.replace(animationRegex,function(g,y,_){return cursor={name:y,styles:_,next:cursor},y})}return unitlessKeys[u]!==1&&!isCustomProperty(u)&&typeof h=="number"&&h!==0?h+"px":h},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(m,u,h){if(h==null)return"";var g=h;if(g.__emotion_styles!==void 0)return g;switch(typeof h){case"boolean":return"";case"object":{var y=h;if(y.anim===1)return cursor={name:y.name,styles:y.styles,next:cursor},y.name;var _=h;if(_.styles!==void 0){var A=_.next;if(A!==void 0)for(;A!==void 0;)cursor={name:A.name,styles:A.styles,next:cursor},A=A.next;var b=_.styles+";";return b}return createStringFromObject(m,u,h)}}var S=h;if(u==null)return S;var E=u[S];return E!==void 0?E:S}function createStringFromObject(m,u,h){var g="";if(Array.isArray(h))for(var y=0;y<h.length;y++)g+=handleInterpolation(m,u,h[y])+";";else for(var _ in h){var A=h[_];if(typeof A!="object"){var b=A;u!=null&&u[b]!==void 0?g+=_+"{"+u[b]+"}":isProcessableValue(b)&&(g+=processStyleName(_)+":"+processStyleValue(_,b)+";")}else{if(_==="NO_COMPONENT_SELECTOR"&&isDevelopment)throw new Error(noComponentSelectorMessage);if(Array.isArray(A)&&typeof A[0]=="string"&&(u==null||u[A[0]]===void 0))for(var S=0;S<A.length;S++)isProcessableValue(A[S])&&(g+=processStyleName(_)+":"+processStyleValue(_,A[S])+";");else{var E=handleInterpolation(m,u,A);switch(_){case"animation":case"animationName":{g+=processStyleName(_)+":"+E+";";break}default:g+=_+"{"+E+"}"}}}}return g}var labelPattern=/label:\s*([^\s;{]+)\s*(;|$)/g,cursor;function serializeStyles(m,u,h){if(m.length===1&&typeof m[0]=="object"&&m[0]!==null&&m[0].styles!==void 0)return m[0];var g=!0,y="";cursor=void 0;var _=m[0];if(_==null||_.raw===void 0)g=!1,y+=handleInterpolation(h,u,_);else{var A=_;y+=A[0]}for(var b=1;b<m.length;b++)if(y+=handleInterpolation(h,u,m[b]),g){var S=_;y+=S[b]}labelPattern.lastIndex=0;for(var E="",T;(T=labelPattern.exec(y))!==null;)E+="-"+T[1];var w=murmur2(y)+E;return{name:w,styles:y,next:cursor}}function getRegisteredStyles$1(m,u,h){var g="";return h.split(" ").forEach(function(y){m[y]!==void 0?u.push(m[y]+";"):y&&(g+=y+" ")}),g}var registerStyles=function m(u,h,g){var y=u.key+"-"+h.name;u.registered[y]===void 0&&(u.registered[y]=h.styles)},insertStyles=function m(u,h,g){registerStyles(u,h);var y=u.key+"-"+h.name;if(u.inserted[h.name]===void 0){var _=h;do u.insert(h===_?"."+y:"",_,u.sheet,!0),_=_.next;while(_!==void 0)}};function insertWithoutScoping(m,u){if(m.inserted[u.name]===void 0)return m.insert("",u,m.sheet,!0)}function merge$1(m,u,h){var g=[],y=getRegisteredStyles$1(m,g,h);return g.length<2?h:y+u(g)}var createEmotion=function m(u){var h=createCache(u);h.sheet.speedy=function(b){this.isSpeedy=b},h.compat=!0;var g=function(){for(var S=arguments.length,E=new Array(S),T=0;T<S;T++)E[T]=arguments[T];var w=serializeStyles(E,h.registered,void 0);return insertStyles(h,w),h.key+"-"+w.name},y=function(){for(var S=arguments.length,E=new Array(S),T=0;T<S;T++)E[T]=arguments[T];var w=serializeStyles(E,h.registered),C="animation-"+w.name;return insertWithoutScoping(h,{name:w.name,styles:"@keyframes "+C+"{"+w.styles+"}"}),C},_=function(){for(var S=arguments.length,E=new Array(S),T=0;T<S;T++)E[T]=arguments[T];var w=serializeStyles(E,h.registered);insertWithoutScoping(h,w)},A=function(){for(var S=arguments.length,E=new Array(S),T=0;T<S;T++)E[T]=arguments[T];return merge$1(h.registered,g,classnames(E))};return{css:g,cx:A,injectGlobal:_,keyframes:y,hydrate:function(S){S.forEach(function(E){h.inserted[E]=!0})},flush:function(){h.registered={},h.inserted={},h.sheet.flush()},sheet:h.sheet,cache:h,getRegisteredStyles:getRegisteredStyles$1.bind(null,h.registered),merge:merge$1.bind(null,h.registered,g)}},classnames=function m(u){for(var h="",g=0;g<u.length;g++){var y=u[g];if(y!=null){var _=void 0;switch(typeof y){case"boolean":break;case"object":{if(Array.isArray(y))_=m(y);else{_="";for(var A in y)y[A]&&A&&(_&&(_+=" "),_+=A)}break}default:_=y}_&&(h&&(h+=" "),h+=_)}}return h},_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),require$$11=getAugmentedNamespace(dist$8);var dist$1,hasRequiredDist$1;function requireDist$1(){if(hasRequiredDist$1)return dist$1;hasRequiredDist$1=1;function m(Xe,Ht){(Ht==null||Ht>Xe.length)&&(Ht=Xe.length);for(var Lt=0,tr=new Array(Ht);Lt<Ht;Lt++)tr[Lt]=Xe[Lt];return tr}function u(Xe){if(Array.isArray(Xe))return Xe}function h(Xe){if(Array.isArray(Xe))return m(Xe)}function g(Xe){if(Xe===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return Xe}function y(Xe,Ht,Lt,tr,bt,ae,de){try{var Pe=Xe[ae](de),Ge=Pe.value}catch(ut){Lt(ut);return}Pe.done?Ht(Ge):Promise.resolve(Ge).then(tr,bt)}function _(Xe){return function(){var Ht=this,Lt=arguments;return new Promise(function(tr,bt){var ae=Xe.apply(Ht,Lt);function de(Ge){y(ae,tr,bt,de,Pe,"next",Ge)}function Pe(Ge){y(ae,tr,bt,de,Pe,"throw",Ge)}de(void 0)})}}function A(Xe,Ht){if(!(Xe instanceof Ht))throw new TypeError("Cannot call a class as a function")}function b(Xe,Ht,Lt){return ge()?b=Reflect.construct:b=function(bt,ae,de){var Pe=[null];Pe.push.apply(Pe,ae);var Ge=Function.bind.apply(bt,Pe),ut=new Ge;return de&&J(ut,de.prototype),ut},b.apply(null,arguments)}function S(Xe,Ht){for(var Lt=0;Lt<Ht.length;Lt++){var tr=Ht[Lt];tr.enumerable=tr.enumerable||!1,tr.configurable=!0,"value"in tr&&(tr.writable=!0),Object.defineProperty(Xe,tr.key,tr)}}function E(Xe,Ht,Lt){return Ht&&S(Xe.prototype,Ht),Lt&&S(Xe,Lt),Xe}function T(Xe,Ht,Lt){return Ht in Xe?Object.defineProperty(Xe,Ht,{value:Lt,enumerable:!0,configurable:!0,writable:!0}):Xe[Ht]=Lt,Xe}function w(Xe){return w=Object.setPrototypeOf?Object.getPrototypeOf:function(Lt){return Lt.__proto__||Object.getPrototypeOf(Lt)},w(Xe)}function C(Xe,Ht){if(typeof Ht!="function"&&Ht!==null)throw new TypeError("Super expression must either be null or a function");Xe.prototype=Object.create(Ht&&Ht.prototype,{constructor:{value:Xe,writable:!0,configurable:!0}}),Ht&&J(Xe,Ht)}function M(Xe,Ht){return Ht!=null&&typeof Symbol<"u"&&Ht[Symbol.hasInstance]?!!Ht[Symbol.hasInstance](Xe):Xe instanceof Ht}function R(Xe){return Function.toString.call(Xe).indexOf("[native code]")!==-1}function P(Xe){if(typeof Symbol<"u"&&Xe[Symbol.iterator]!=null||Xe["@@iterator"]!=null)return Array.from(Xe)}function L(Xe,Ht){var Lt=Xe==null?null:typeof Symbol<"u"&&Xe[Symbol.iterator]||Xe["@@iterator"];if(Lt!=null){var tr=[],bt=!0,ae=!1,de,Pe;try{for(Lt=Lt.call(Xe);!(bt=(de=Lt.next()).done)&&(tr.push(de.value),!(Ht&&tr.length===Ht));bt=!0);}catch(Ge){ae=!0,Pe=Ge}finally{try{!bt&&Lt.return!=null&&Lt.return()}finally{if(ae)throw Pe}}return tr}}function I(){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 F(){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 N(Xe){for(var Ht=1;Ht<arguments.length;Ht++){var Lt=arguments[Ht]!=null?arguments[Ht]:{},tr=Object.keys(Lt);typeof Object.getOwnPropertySymbols=="function"&&(tr=tr.concat(Object.getOwnPropertySymbols(Lt).filter(function(bt){return Object.getOwnPropertyDescriptor(Lt,bt).enumerable}))),tr.forEach(function(bt){T(Xe,bt,Lt[bt])})}return Xe}function O(Xe,Ht){var Lt=Object.keys(Xe);if(Object.getOwnPropertySymbols){var tr=Object.getOwnPropertySymbols(Xe);Lt.push.apply(Lt,tr)}return Lt}function U(Xe,Ht){return Ht=Ht??{},Object.getOwnPropertyDescriptors?Object.defineProperties(Xe,Object.getOwnPropertyDescriptors(Ht)):O(Object(Ht)).forEach(function(Lt){Object.defineProperty(Xe,Lt,Object.getOwnPropertyDescriptor(Ht,Lt))}),Xe}function W(Xe,Ht){if(Xe==null)return{};var Lt=H(Xe,Ht),tr,bt;if(Object.getOwnPropertySymbols){var ae=Object.getOwnPropertySymbols(Xe);for(bt=0;bt<ae.length;bt++)tr=ae[bt],!(Ht.indexOf(tr)>=0)&&Object.prototype.propertyIsEnumerable.call(Xe,tr)&&(Lt[tr]=Xe[tr])}return Lt}function H(Xe,Ht){if(Xe==null)return{};var Lt={},tr=Object.keys(Xe),bt,ae;for(ae=0;ae<tr.length;ae++)bt=tr[ae],!(Ht.indexOf(bt)>=0)&&(Lt[bt]=Xe[bt]);return Lt}function Y(Xe,Ht){return Ht&&(fe(Ht)==="object"||typeof Ht=="function")?Ht:g(Xe)}function J(Xe,Ht){return J=Object.setPrototypeOf||function(tr,bt){return tr.__proto__=bt,tr},J(Xe,Ht)}function Z(Xe,Ht){return u(Xe)||L(Xe,Ht)||_e(Xe,Ht)||I()}function oe(Xe,Ht){return Ht||(Ht=Xe.slice(0)),Object.freeze(Object.defineProperties(Xe,{raw:{value:Object.freeze(Ht)}}))}function re(Xe){return h(Xe)||P(Xe)||_e(Xe)||F()}function fe(Xe){"@swc/helpers - typeof";return Xe&&typeof Symbol<"u"&&Xe.constructor===Symbol?"symbol":typeof Xe}function _e(Xe,Ht){if(Xe){if(typeof Xe=="string")return m(Xe,Ht);var Lt=Object.prototype.toString.call(Xe).slice(8,-1);if(Lt==="Object"&&Xe.constructor&&(Lt=Xe.constructor.name),Lt==="Map"||Lt==="Set")return Array.from(Lt);if(Lt==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Lt))return m(Xe,Ht)}}function be(Xe){var Ht=typeof Map=="function"?new Map:void 0;return be=function(tr){if(tr===null||!R(tr))return tr;if(typeof tr!="function")throw new TypeError("Super expression must either be null or a function");if(typeof Ht<"u"){if(Ht.has(tr))return Ht.get(tr);Ht.set(tr,bt)}function bt(){return b(tr,arguments,w(this).constructor)}return bt.prototype=Object.create(tr.prototype,{constructor:{value:bt,enumerable:!1,writable:!0,configurable:!0}}),J(bt,tr)},be(Xe)}function ge(){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 le(Xe){var Ht=ge();return function(){var tr=w(Xe),bt;if(Ht){var ae=w(this).constructor;bt=Reflect.construct(tr,arguments,ae)}else bt=tr.apply(this,arguments);return Y(this,bt)}}function ne(Xe,Ht){var Lt,tr,bt,ae,de={label:0,sent:function(){if(bt[0]&1)throw bt[1];return bt[1]},trys:[],ops:[]};return ae={next:Pe(0),throw:Pe(1),return:Pe(2)},typeof Symbol=="function"&&(ae[Symbol.iterator]=function(){return this}),ae;function Pe(ut){return function(vt){return Ge([ut,vt])}}function Ge(ut){if(Lt)throw new TypeError("Generator is already executing.");for(;de;)try{if(Lt=1,tr&&(bt=ut[0]&2?tr.return:ut[0]?tr.throw||((bt=tr.return)&&bt.call(tr),0):tr.next)&&!(bt=bt.call(tr,ut[1])).done)return bt;switch(tr=0,bt&&(ut=[ut[0]&2,bt.value]),ut[0]){case 0:case 1:bt=ut;break;case 4:return de.label++,{value:ut[1],done:!1};case 5:de.label++,tr=ut[1],ut=[0];continue;case 7:ut=de.ops.pop(),de.trys.pop();continue;default:if(bt=de.trys,!(bt=bt.length>0&&bt[bt.length-1])&&(ut[0]===6||ut[0]===2)){de=0;continue}if(ut[0]===3&&(!bt||ut[1]>bt[0]&&ut[1]<bt[3])){de.label=ut[1];break}if(ut[0]===6&&de.label<bt[1]){de.label=bt[1],bt=ut;break}if(bt&&de.label<bt[2]){de.label=bt[2],de.ops.push(ut);break}bt[2]&&de.ops.pop(),de.trys.pop();continue}ut=Ht.call(Xe,de)}catch(vt){ut=[6,vt],tr=0}finally{Lt=bt=0}if(ut[0]&5)throw ut[1];return{value:ut[0]?ut[1]:void 0,done:!0}}}var ue=function(Xe){ah[Xe]=[];var Ht=ru[Xe].split("M").slice(1).map(function(ut){return ut.split("L").map(function(vt){return vt.trim().split(" ").map(parseFloat)})}),Lt=!0,tr=!1,bt=void 0;try{for(var ae=Ht[Symbol.iterator](),de;!(Lt=(de=ae.next()).done);Lt=!0)for(var Pe=de.value,Ge=0;Ge<Pe.length-1;Ge++)ah[Xe].push({x1:Pe[Ge][0],y1:1-Pe[Ge][1],x2:Pe[Ge+1][0],y2:1-Pe[Ge+1][1]})}catch(ut){tr=!0,bt=ut}finally{try{!Lt&&ae.return!=null&&ae.return()}finally{if(tr)throw bt}}};function ye(){var Xe=oe([`
|
|
21418
21418
|
margin-top: 2px;
|
|
21419
21419
|
padding: 4px;
|
|
@@ -21606,4 +21606,4 @@ three/build/three.module.js:
|
|
|
21606
21606
|
`)},getCurrentUseCounter=function(){var m=parseInt(document.body.getAttribute(lockAttribute)||"0",10);return isFinite(m)?m:0},useLockAttribute=function(){reactExports.useEffect(function(){return document.body.setAttribute(lockAttribute,(getCurrentUseCounter()+1).toString()),function(){var m=getCurrentUseCounter()-1;m<=0?document.body.removeAttribute(lockAttribute):document.body.setAttribute(lockAttribute,m.toString())}},[])},RemoveScrollBar=function(m){var u=m.noRelative,h=m.noImportant,g=m.gapMode,y=g===void 0?"margin":g;useLockAttribute();var _=reactExports.useMemo(function(){return getGapWidth(y)},[y]);return reactExports.createElement(Style,{styles:getStyles(_,!u,y,h?"":"!important")})},passiveSupported=!1;if(typeof window<"u")try{var options=Object.defineProperty({},"passive",{get:function(){return passiveSupported=!0,!0}});window.addEventListener("test",options,options),window.removeEventListener("test",options,options)}catch{passiveSupported=!1}var nonPassive=passiveSupported?{passive:!1}:!1,alwaysContainsScroll=function(m){return m.tagName==="TEXTAREA"},elementCanBeScrolled=function(m,u){if(!(m instanceof Element))return!1;var h=window.getComputedStyle(m);return h[u]!=="hidden"&&!(h.overflowY===h.overflowX&&!alwaysContainsScroll(m)&&h[u]==="visible")},elementCouldBeVScrolled=function(m){return elementCanBeScrolled(m,"overflowY")},elementCouldBeHScrolled=function(m){return elementCanBeScrolled(m,"overflowX")},locationCouldBeScrolled=function(m,u){var h=u.ownerDocument,g=u;do{typeof ShadowRoot<"u"&&g instanceof ShadowRoot&&(g=g.host);var y=elementCouldBeScrolled(m,g);if(y){var _=getScrollVariables(m,g),A=_[1],b=_[2];if(A>b)return!0}g=g.parentNode}while(g&&g!==h.body);return!1},getVScrollVariables=function(m){var u=m.scrollTop,h=m.scrollHeight,g=m.clientHeight;return[u,h,g]},getHScrollVariables=function(m){var u=m.scrollLeft,h=m.scrollWidth,g=m.clientWidth;return[u,h,g]},elementCouldBeScrolled=function(m,u){return m==="v"?elementCouldBeVScrolled(u):elementCouldBeHScrolled(u)},getScrollVariables=function(m,u){return m==="v"?getVScrollVariables(u):getHScrollVariables(u)},getDirectionFactor=function(m,u){return m==="h"&&u==="rtl"?-1:1},handleScroll=function(m,u,h,g,y){var _=getDirectionFactor(m,window.getComputedStyle(u).direction),A=_*g,b=h.target,S=u.contains(b),E=!1,T=A>0,w=0,C=0;do{var M=getScrollVariables(m,b),R=M[0],P=M[1],L=M[2],I=P-L-_*R;(R||I)&&elementCouldBeScrolled(m,b)&&(w+=I,C+=R),b instanceof ShadowRoot?b=b.host:b=b.parentNode}while(!S&&b!==document.body||S&&(u.contains(b)||u===b));return(T&&(Math.abs(w)<1||!y)||!T&&(Math.abs(C)<1||!y))&&(E=!0),E},getTouchXY=function(m){return"changedTouches"in m?[m.changedTouches[0].clientX,m.changedTouches[0].clientY]:[0,0]},getDeltaXY=function(m){return[m.deltaX,m.deltaY]},extractRef=function(m){return m&&"current"in m?m.current:m},deltaCompare=function(m,u){return m[0]===u[0]&&m[1]===u[1]},generateStyle=function(m){return`
|
|
21607
21607
|
.block-interactivity-`.concat(m,` {pointer-events: none;}
|
|
21608
21608
|
.allow-interactivity-`).concat(m,` {pointer-events: all;}
|
|
21609
|
-
`)},idCounter=0,lockStack=[];function RemoveScrollSideCar(m){var u=reactExports.useRef([]),h=reactExports.useRef([0,0]),g=reactExports.useRef(),y=reactExports.useState(idCounter++)[0],_=reactExports.useState(styleSingleton)[0],A=reactExports.useRef(m);reactExports.useEffect(function(){A.current=m},[m]),reactExports.useEffect(function(){if(m.inert){document.body.classList.add("block-interactivity-".concat(y));var P=__spreadArray([m.lockRef.current],(m.shards||[]).map(extractRef),!0).filter(Boolean);return P.forEach(function(L){return L.classList.add("allow-interactivity-".concat(y))}),function(){document.body.classList.remove("block-interactivity-".concat(y)),P.forEach(function(L){return L.classList.remove("allow-interactivity-".concat(y))})}}},[m.inert,m.lockRef.current,m.shards]);var b=reactExports.useCallback(function(P,L){if("touches"in P&&P.touches.length===2||P.type==="wheel"&&P.ctrlKey)return!A.current.allowPinchZoom;var I=getTouchXY(P),F=h.current,N="deltaX"in P?P.deltaX:F[0]-I[0],O="deltaY"in P?P.deltaY:F[1]-I[1],U,W=P.target,H=Math.abs(N)>Math.abs(O)?"h":"v";if("touches"in P&&H==="h"&&W.type==="range")return!1;var Y=locationCouldBeScrolled(H,W);if(!Y)return!0;if(Y?U=H:(U=H==="v"?"h":"v",Y=locationCouldBeScrolled(H,W)),!Y)return!1;if(!g.current&&"changedTouches"in P&&(N||O)&&(g.current=U),!U)return!0;var J=g.current||U;return handleScroll(J,L,P,J==="h"?N:O,!0)},[]),S=reactExports.useCallback(function(P){var L=P;if(!(!lockStack.length||lockStack[lockStack.length-1]!==_)){var I="deltaY"in L?getDeltaXY(L):getTouchXY(L),F=u.current.filter(function(U){return U.name===L.type&&(U.target===L.target||L.target===U.shadowParent)&&deltaCompare(U.delta,I)})[0];if(F&&F.should){L.cancelable&&L.preventDefault();return}if(!F){var N=(A.current.shards||[]).map(extractRef).filter(Boolean).filter(function(U){return U.contains(L.target)}),O=N.length>0?b(L,N[0]):!A.current.noIsolation;O&&L.cancelable&&L.preventDefault()}}},[]),E=reactExports.useCallback(function(P,L,I,F){var N={name:P,delta:L,target:I,should:F,shadowParent:getOutermostShadowParent(I)};u.current.push(N),setTimeout(function(){u.current=u.current.filter(function(O){return O!==N})},1)},[]),T=reactExports.useCallback(function(P){h.current=getTouchXY(P),g.current=void 0},[]),w=reactExports.useCallback(function(P){E(P.type,getDeltaXY(P),P.target,b(P,m.lockRef.current))},[]),C=reactExports.useCallback(function(P){E(P.type,getTouchXY(P),P.target,b(P,m.lockRef.current))},[]);reactExports.useEffect(function(){return lockStack.push(_),m.setCallbacks({onScrollCapture:w,onWheelCapture:w,onTouchMoveCapture:C}),document.addEventListener("wheel",S,nonPassive),document.addEventListener("touchmove",S,nonPassive),document.addEventListener("touchstart",T,nonPassive),function(){lockStack=lockStack.filter(function(P){return P!==_}),document.removeEventListener("wheel",S,nonPassive),document.removeEventListener("touchmove",S,nonPassive),document.removeEventListener("touchstart",T,nonPassive)}},[]);var M=m.removeScrollBar,R=m.inert;return reactExports.createElement(reactExports.Fragment,null,R?reactExports.createElement(_,{styles:generateStyle(y)}):null,M?reactExports.createElement(RemoveScrollBar,{gapMode:m.gapMode}):null)}function getOutermostShadowParent(m){for(var u=null;m!==null;)m instanceof ShadowRoot&&(u=m.host,m=m.host),m=m.parentNode;return u}const SideCar=exportSidecar(effectCar,RemoveScrollSideCar);var ReactRemoveScroll=reactExports.forwardRef(function(m,u){return reactExports.createElement(RemoveScroll,__assign({},m,{ref:u,sideCar:SideCar}))});ReactRemoveScroll.classNames=RemoveScroll.classNames;var SELECTION_KEYS=["Enter"," "],FIRST_KEYS=["ArrowDown","PageUp","Home"],LAST_KEYS=["ArrowUp","PageDown","End"],FIRST_LAST_KEYS=[...FIRST_KEYS,...LAST_KEYS],SUB_OPEN_KEYS={ltr:[...SELECTION_KEYS,"ArrowRight"],rtl:[...SELECTION_KEYS,"ArrowLeft"]},SUB_CLOSE_KEYS={ltr:["ArrowLeft"],rtl:["ArrowRight"]},MENU_NAME="Menu",[Collection,useCollection,createCollectionScope]=createCollection(MENU_NAME),[createMenuContext,createMenuScope]=createContextScope$3(MENU_NAME,[createCollectionScope,createPopperScope,createRovingFocusGroupScope]),usePopperScope=createPopperScope(),useRovingFocusGroupScope=createRovingFocusGroupScope(),[MenuProvider,useMenuContext]=createMenuContext(MENU_NAME),[MenuRootProvider,useMenuRootContext]=createMenuContext(MENU_NAME),Menu=m=>{const{__scopeMenu:u,open:h=!1,children:g,dir:y,onOpenChange:_,modal:A=!0}=m,b=usePopperScope(u),[S,E]=reactExports.useState(null),T=reactExports.useRef(!1),w=useCallbackRef$1(_),C=useDirection(y);return reactExports.useEffect(()=>{const M=()=>{T.current=!0,document.addEventListener("pointerdown",R,{capture:!0,once:!0}),document.addEventListener("pointermove",R,{capture:!0,once:!0})},R=()=>T.current=!1;return document.addEventListener("keydown",M,{capture:!0}),()=>{document.removeEventListener("keydown",M,{capture:!0}),document.removeEventListener("pointerdown",R,{capture:!0}),document.removeEventListener("pointermove",R,{capture:!0})}},[]),jsxRuntimeExports.jsx(Root2$1,{...b,children:jsxRuntimeExports.jsx(MenuProvider,{scope:u,open:h,onOpenChange:w,content:S,onContentChange:E,children:jsxRuntimeExports.jsx(MenuRootProvider,{scope:u,onClose:reactExports.useCallback(()=>w(!1),[w]),isUsingKeyboardRef:T,dir:C,modal:A,children:g})})})};Menu.displayName=MENU_NAME;var ANCHOR_NAME="MenuAnchor",MenuAnchor=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m,y=usePopperScope(h);return jsxRuntimeExports.jsx(Anchor,{...y,...g,ref:u})});MenuAnchor.displayName=ANCHOR_NAME;var PORTAL_NAME$1="MenuPortal",[PortalProvider,usePortalContext]=createMenuContext(PORTAL_NAME$1,{forceMount:void 0}),MenuPortal=m=>{const{__scopeMenu:u,forceMount:h,children:g,container:y}=m,_=useMenuContext(PORTAL_NAME$1,u);return jsxRuntimeExports.jsx(PortalProvider,{scope:u,forceMount:h,children:jsxRuntimeExports.jsx(Presence,{present:h||_.open,children:jsxRuntimeExports.jsx(Portal$1,{asChild:!0,container:y,children:g})})})};MenuPortal.displayName=PORTAL_NAME$1;var CONTENT_NAME$1="MenuContent",[MenuContentProvider,useMenuContentContext]=createMenuContext(CONTENT_NAME$1),MenuContent=reactExports.forwardRef((m,u)=>{const h=usePortalContext(CONTENT_NAME$1,m.__scopeMenu),{forceMount:g=h.forceMount,...y}=m,_=useMenuContext(CONTENT_NAME$1,m.__scopeMenu),A=useMenuRootContext(CONTENT_NAME$1,m.__scopeMenu);return jsxRuntimeExports.jsx(Collection.Provider,{scope:m.__scopeMenu,children:jsxRuntimeExports.jsx(Presence,{present:g||_.open,children:jsxRuntimeExports.jsx(Collection.Slot,{scope:m.__scopeMenu,children:A.modal?jsxRuntimeExports.jsx(MenuRootContentModal,{...y,ref:u}):jsxRuntimeExports.jsx(MenuRootContentNonModal,{...y,ref:u})})})})}),MenuRootContentModal=reactExports.forwardRef((m,u)=>{const h=useMenuContext(CONTENT_NAME$1,m.__scopeMenu),g=reactExports.useRef(null),y=useComposedRefs(u,g);return reactExports.useEffect(()=>{const _=g.current;if(_)return hideOthers(_)},[]),jsxRuntimeExports.jsx(MenuContentImpl,{...m,ref:y,trapFocus:h.open,disableOutsidePointerEvents:h.open,disableOutsideScroll:!0,onFocusOutside:composeEventHandlers(m.onFocusOutside,_=>_.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>h.onOpenChange(!1)})}),MenuRootContentNonModal=reactExports.forwardRef((m,u)=>{const h=useMenuContext(CONTENT_NAME$1,m.__scopeMenu);return jsxRuntimeExports.jsx(MenuContentImpl,{...m,ref:u,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>h.onOpenChange(!1)})}),MenuContentImpl=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,loop:g=!1,trapFocus:y,onOpenAutoFocus:_,onCloseAutoFocus:A,disableOutsidePointerEvents:b,onEntryFocus:S,onEscapeKeyDown:E,onPointerDownOutside:T,onFocusOutside:w,onInteractOutside:C,onDismiss:M,disableOutsideScroll:R,...P}=m,L=useMenuContext(CONTENT_NAME$1,h),I=useMenuRootContext(CONTENT_NAME$1,h),F=usePopperScope(h),N=useRovingFocusGroupScope(h),O=useCollection(h),[U,W]=reactExports.useState(null),H=reactExports.useRef(null),Y=useComposedRefs(u,H,L.onContentChange),J=reactExports.useRef(0),Z=reactExports.useRef(""),oe=reactExports.useRef(0),re=reactExports.useRef(null),fe=reactExports.useRef("right"),_e=reactExports.useRef(0),be=R?ReactRemoveScroll:reactExports.Fragment,ge=R?{as:Slot,allowPinchZoom:!0}:void 0,le=ue=>{var He,Ze;const ye=Z.current+ue,ve=O().filter($e=>!$e.disabled),Ee=document.activeElement,Oe=(He=ve.find($e=>$e.ref.current===Ee))==null?void 0:He.textValue,Ne=ve.map($e=>$e.textValue),Ue=getNextMatch(Ne,ye,Oe),qe=(Ze=ve.find($e=>$e.textValue===Ue))==null?void 0:Ze.ref.current;(function $e(Me){Z.current=Me,window.clearTimeout(J.current),Me!==""&&(J.current=window.setTimeout(()=>$e(""),1e3))})(ye),qe&&setTimeout(()=>qe.focus())};reactExports.useEffect(()=>()=>window.clearTimeout(J.current),[]),useFocusGuards();const ne=reactExports.useCallback(ue=>{var ve,Ee;return fe.current===((ve=re.current)==null?void 0:ve.side)&&isPointerInGraceArea(ue,(Ee=re.current)==null?void 0:Ee.area)},[]);return jsxRuntimeExports.jsx(MenuContentProvider,{scope:h,searchRef:Z,onItemEnter:reactExports.useCallback(ue=>{ne(ue)&&ue.preventDefault()},[ne]),onItemLeave:reactExports.useCallback(ue=>{var ye;ne(ue)||((ye=H.current)==null||ye.focus(),W(null))},[ne]),onTriggerLeave:reactExports.useCallback(ue=>{ne(ue)&&ue.preventDefault()},[ne]),pointerGraceTimerRef:oe,onPointerGraceIntentChange:reactExports.useCallback(ue=>{re.current=ue},[]),children:jsxRuntimeExports.jsx(be,{...ge,children:jsxRuntimeExports.jsx(FocusScope,{asChild:!0,trapped:y,onMountAutoFocus:composeEventHandlers(_,ue=>{var ye;ue.preventDefault(),(ye=H.current)==null||ye.focus({preventScroll:!0})}),onUnmountAutoFocus:A,children:jsxRuntimeExports.jsx(DismissableLayer,{asChild:!0,disableOutsidePointerEvents:b,onEscapeKeyDown:E,onPointerDownOutside:T,onFocusOutside:w,onInteractOutside:C,onDismiss:M,children:jsxRuntimeExports.jsx(Root$1,{asChild:!0,...N,dir:I.dir,orientation:"vertical",loop:g,currentTabStopId:U,onCurrentTabStopIdChange:W,onEntryFocus:composeEventHandlers(S,ue=>{I.isUsingKeyboardRef.current||ue.preventDefault()}),preventScrollOnEntryFocus:!0,children:jsxRuntimeExports.jsx(Content,{role:"menu","aria-orientation":"vertical","data-state":getOpenState(L.open),"data-radix-menu-content":"",dir:I.dir,...F,...P,ref:Y,style:{outline:"none",...P.style},onKeyDown:composeEventHandlers(P.onKeyDown,ue=>{const ve=ue.target.closest("[data-radix-menu-content]")===ue.currentTarget,Ee=ue.ctrlKey||ue.altKey||ue.metaKey,Oe=ue.key.length===1;ve&&(ue.key==="Tab"&&ue.preventDefault(),!Ee&&Oe&&le(ue.key));const Ne=H.current;if(ue.target!==Ne||!FIRST_LAST_KEYS.includes(ue.key))return;ue.preventDefault();const qe=O().filter(He=>!He.disabled).map(He=>He.ref.current);LAST_KEYS.includes(ue.key)&&qe.reverse(),focusFirst(qe)}),onBlur:composeEventHandlers(m.onBlur,ue=>{ue.currentTarget.contains(ue.target)||(window.clearTimeout(J.current),Z.current="")}),onPointerMove:composeEventHandlers(m.onPointerMove,whenMouse(ue=>{const ye=ue.target,ve=_e.current!==ue.clientX;if(ue.currentTarget.contains(ye)&&ve){const Ee=ue.clientX>_e.current?"right":"left";fe.current=Ee,_e.current=ue.clientX}}))})})})})})})});MenuContent.displayName=CONTENT_NAME$1;var GROUP_NAME$1="MenuGroup",MenuGroup=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m;return jsxRuntimeExports.jsx(Primitive.div,{role:"group",...g,ref:u})});MenuGroup.displayName=GROUP_NAME$1;var LABEL_NAME$1="MenuLabel",MenuLabel=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m;return jsxRuntimeExports.jsx(Primitive.div,{...g,ref:u})});MenuLabel.displayName=LABEL_NAME$1;var ITEM_NAME$1="MenuItem",ITEM_SELECT="menu.itemSelect",MenuItem=reactExports.forwardRef((m,u)=>{const{disabled:h=!1,onSelect:g,...y}=m,_=reactExports.useRef(null),A=useMenuRootContext(ITEM_NAME$1,m.__scopeMenu),b=useMenuContentContext(ITEM_NAME$1,m.__scopeMenu),S=useComposedRefs(u,_),E=reactExports.useRef(!1),T=()=>{const w=_.current;if(!h&&w){const C=new CustomEvent(ITEM_SELECT,{bubbles:!0,cancelable:!0});w.addEventListener(ITEM_SELECT,M=>g==null?void 0:g(M),{once:!0}),dispatchDiscreteCustomEvent(w,C),C.defaultPrevented?E.current=!1:A.onClose()}};return jsxRuntimeExports.jsx(MenuItemImpl,{...y,ref:S,disabled:h,onClick:composeEventHandlers(m.onClick,T),onPointerDown:w=>{var C;(C=m.onPointerDown)==null||C.call(m,w),E.current=!0},onPointerUp:composeEventHandlers(m.onPointerUp,w=>{var C;E.current||(C=w.currentTarget)==null||C.click()}),onKeyDown:composeEventHandlers(m.onKeyDown,w=>{const C=b.searchRef.current!=="";h||C&&w.key===" "||SELECTION_KEYS.includes(w.key)&&(w.currentTarget.click(),w.preventDefault())})})});MenuItem.displayName=ITEM_NAME$1;var MenuItemImpl=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,disabled:g=!1,textValue:y,..._}=m,A=useMenuContentContext(ITEM_NAME$1,h),b=useRovingFocusGroupScope(h),S=reactExports.useRef(null),E=useComposedRefs(u,S),[T,w]=reactExports.useState(!1),[C,M]=reactExports.useState("");return reactExports.useEffect(()=>{const R=S.current;R&&M((R.textContent??"").trim())},[_.children]),jsxRuntimeExports.jsx(Collection.ItemSlot,{scope:h,disabled:g,textValue:y??C,children:jsxRuntimeExports.jsx(Item,{asChild:!0,...b,focusable:!g,children:jsxRuntimeExports.jsx(Primitive.div,{role:"menuitem","data-highlighted":T?"":void 0,"aria-disabled":g||void 0,"data-disabled":g?"":void 0,..._,ref:E,onPointerMove:composeEventHandlers(m.onPointerMove,whenMouse(R=>{g?A.onItemLeave(R):(A.onItemEnter(R),R.defaultPrevented||R.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:composeEventHandlers(m.onPointerLeave,whenMouse(R=>A.onItemLeave(R))),onFocus:composeEventHandlers(m.onFocus,()=>w(!0)),onBlur:composeEventHandlers(m.onBlur,()=>w(!1))})})})}),CHECKBOX_ITEM_NAME$1="MenuCheckboxItem",MenuCheckboxItem=reactExports.forwardRef((m,u)=>{const{checked:h=!1,onCheckedChange:g,...y}=m;return jsxRuntimeExports.jsx(ItemIndicatorProvider,{scope:m.__scopeMenu,checked:h,children:jsxRuntimeExports.jsx(MenuItem,{role:"menuitemcheckbox","aria-checked":isIndeterminate(h)?"mixed":h,...y,ref:u,"data-state":getCheckedState(h),onSelect:composeEventHandlers(y.onSelect,()=>g==null?void 0:g(isIndeterminate(h)?!0:!h),{checkForDefaultPrevented:!1})})})});MenuCheckboxItem.displayName=CHECKBOX_ITEM_NAME$1;var RADIO_GROUP_NAME$1="MenuRadioGroup",[RadioGroupProvider,useRadioGroupContext]=createMenuContext(RADIO_GROUP_NAME$1,{value:void 0,onValueChange:()=>{}}),MenuRadioGroup=reactExports.forwardRef((m,u)=>{const{value:h,onValueChange:g,...y}=m,_=useCallbackRef$1(g);return jsxRuntimeExports.jsx(RadioGroupProvider,{scope:m.__scopeMenu,value:h,onValueChange:_,children:jsxRuntimeExports.jsx(MenuGroup,{...y,ref:u})})});MenuRadioGroup.displayName=RADIO_GROUP_NAME$1;var RADIO_ITEM_NAME$1="MenuRadioItem",MenuRadioItem=reactExports.forwardRef((m,u)=>{const{value:h,...g}=m,y=useRadioGroupContext(RADIO_ITEM_NAME$1,m.__scopeMenu),_=h===y.value;return jsxRuntimeExports.jsx(ItemIndicatorProvider,{scope:m.__scopeMenu,checked:_,children:jsxRuntimeExports.jsx(MenuItem,{role:"menuitemradio","aria-checked":_,...g,ref:u,"data-state":getCheckedState(_),onSelect:composeEventHandlers(g.onSelect,()=>{var A;return(A=y.onValueChange)==null?void 0:A.call(y,h)},{checkForDefaultPrevented:!1})})})});MenuRadioItem.displayName=RADIO_ITEM_NAME$1;var ITEM_INDICATOR_NAME="MenuItemIndicator",[ItemIndicatorProvider,useItemIndicatorContext]=createMenuContext(ITEM_INDICATOR_NAME,{checked:!1}),MenuItemIndicator=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,forceMount:g,...y}=m,_=useItemIndicatorContext(ITEM_INDICATOR_NAME,h);return jsxRuntimeExports.jsx(Presence,{present:g||isIndeterminate(_.checked)||_.checked===!0,children:jsxRuntimeExports.jsx(Primitive.span,{...y,ref:u,"data-state":getCheckedState(_.checked)})})});MenuItemIndicator.displayName=ITEM_INDICATOR_NAME;var SEPARATOR_NAME$1="MenuSeparator",MenuSeparator=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m;return jsxRuntimeExports.jsx(Primitive.div,{role:"separator","aria-orientation":"horizontal",...g,ref:u})});MenuSeparator.displayName=SEPARATOR_NAME$1;var ARROW_NAME$1="MenuArrow",MenuArrow=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m,y=usePopperScope(h);return jsxRuntimeExports.jsx(Arrow,{...y,...g,ref:u})});MenuArrow.displayName=ARROW_NAME$1;var SUB_NAME="MenuSub",[MenuSubProvider,useMenuSubContext]=createMenuContext(SUB_NAME),SUB_TRIGGER_NAME$1="MenuSubTrigger",MenuSubTrigger=reactExports.forwardRef((m,u)=>{const h=useMenuContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),g=useMenuRootContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),y=useMenuSubContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),_=useMenuContentContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),A=reactExports.useRef(null),{pointerGraceTimerRef:b,onPointerGraceIntentChange:S}=_,E={__scopeMenu:m.__scopeMenu},T=reactExports.useCallback(()=>{A.current&&window.clearTimeout(A.current),A.current=null},[]);return reactExports.useEffect(()=>T,[T]),reactExports.useEffect(()=>{const w=b.current;return()=>{window.clearTimeout(w),S(null)}},[b,S]),jsxRuntimeExports.jsx(MenuAnchor,{asChild:!0,...E,children:jsxRuntimeExports.jsx(MenuItemImpl,{id:y.triggerId,"aria-haspopup":"menu","aria-expanded":h.open,"aria-controls":y.contentId,"data-state":getOpenState(h.open),...m,ref:composeRefs(u,y.onTriggerChange),onClick:w=>{var C;(C=m.onClick)==null||C.call(m,w),!(m.disabled||w.defaultPrevented)&&(w.currentTarget.focus(),h.open||h.onOpenChange(!0))},onPointerMove:composeEventHandlers(m.onPointerMove,whenMouse(w=>{_.onItemEnter(w),!w.defaultPrevented&&!m.disabled&&!h.open&&!A.current&&(_.onPointerGraceIntentChange(null),A.current=window.setTimeout(()=>{h.onOpenChange(!0),T()},100))})),onPointerLeave:composeEventHandlers(m.onPointerLeave,whenMouse(w=>{var M,R;T();const C=(M=h.content)==null?void 0:M.getBoundingClientRect();if(C){const P=(R=h.content)==null?void 0:R.dataset.side,L=P==="right",I=L?-5:5,F=C[L?"left":"right"],N=C[L?"right":"left"];_.onPointerGraceIntentChange({area:[{x:w.clientX+I,y:w.clientY},{x:F,y:C.top},{x:N,y:C.top},{x:N,y:C.bottom},{x:F,y:C.bottom}],side:P}),window.clearTimeout(b.current),b.current=window.setTimeout(()=>_.onPointerGraceIntentChange(null),300)}else{if(_.onTriggerLeave(w),w.defaultPrevented)return;_.onPointerGraceIntentChange(null)}})),onKeyDown:composeEventHandlers(m.onKeyDown,w=>{var M;const C=_.searchRef.current!=="";m.disabled||C&&w.key===" "||SUB_OPEN_KEYS[g.dir].includes(w.key)&&(h.onOpenChange(!0),(M=h.content)==null||M.focus(),w.preventDefault())})})})});MenuSubTrigger.displayName=SUB_TRIGGER_NAME$1;var SUB_CONTENT_NAME$1="MenuSubContent",MenuSubContent=reactExports.forwardRef((m,u)=>{const h=usePortalContext(CONTENT_NAME$1,m.__scopeMenu),{forceMount:g=h.forceMount,...y}=m,_=useMenuContext(CONTENT_NAME$1,m.__scopeMenu),A=useMenuRootContext(CONTENT_NAME$1,m.__scopeMenu),b=useMenuSubContext(SUB_CONTENT_NAME$1,m.__scopeMenu),S=reactExports.useRef(null),E=useComposedRefs(u,S);return jsxRuntimeExports.jsx(Collection.Provider,{scope:m.__scopeMenu,children:jsxRuntimeExports.jsx(Presence,{present:g||_.open,children:jsxRuntimeExports.jsx(Collection.Slot,{scope:m.__scopeMenu,children:jsxRuntimeExports.jsx(MenuContentImpl,{id:b.contentId,"aria-labelledby":b.triggerId,...y,ref:E,align:"start",side:A.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:T=>{var w;A.isUsingKeyboardRef.current&&((w=S.current)==null||w.focus()),T.preventDefault()},onCloseAutoFocus:T=>T.preventDefault(),onFocusOutside:composeEventHandlers(m.onFocusOutside,T=>{T.target!==b.trigger&&_.onOpenChange(!1)}),onEscapeKeyDown:composeEventHandlers(m.onEscapeKeyDown,T=>{A.onClose(),T.preventDefault()}),onKeyDown:composeEventHandlers(m.onKeyDown,T=>{var M;const w=T.currentTarget.contains(T.target),C=SUB_CLOSE_KEYS[A.dir].includes(T.key);w&&C&&(_.onOpenChange(!1),(M=b.trigger)==null||M.focus(),T.preventDefault())})})})})})});MenuSubContent.displayName=SUB_CONTENT_NAME$1;function getOpenState(m){return m?"open":"closed"}function isIndeterminate(m){return m==="indeterminate"}function getCheckedState(m){return isIndeterminate(m)?"indeterminate":m?"checked":"unchecked"}function focusFirst(m){const u=document.activeElement;for(const h of m)if(h===u||(h.focus(),document.activeElement!==u))return}function wrapArray(m,u){return m.map((h,g)=>m[(u+g)%m.length])}function getNextMatch(m,u,h){const y=u.length>1&&Array.from(u).every(E=>E===u[0])?u[0]:u,_=h?m.indexOf(h):-1;let A=wrapArray(m,Math.max(_,0));y.length===1&&(A=A.filter(E=>E!==h));const S=A.find(E=>E.toLowerCase().startsWith(y.toLowerCase()));return S!==h?S:void 0}function isPointInPolygon(m,u){const{x:h,y:g}=m;let y=!1;for(let _=0,A=u.length-1;_<u.length;A=_++){const b=u[_].x,S=u[_].y,E=u[A].x,T=u[A].y;S>g!=T>g&&h<(E-b)*(g-S)/(T-S)+b&&(y=!y)}return y}function isPointerInGraceArea(m,u){if(!u)return!1;const h={x:m.clientX,y:m.clientY};return isPointInPolygon(h,u)}function whenMouse(m){return u=>u.pointerType==="mouse"?m(u):void 0}var Root3=Menu,Anchor2=MenuAnchor,Portal=MenuPortal,Content2$1=MenuContent,Group=MenuGroup,Label=MenuLabel,Item2$1=MenuItem,CheckboxItem=MenuCheckboxItem,RadioGroup=MenuRadioGroup,RadioItem=MenuRadioItem,ItemIndicator=MenuItemIndicator,Separator=MenuSeparator,Arrow2=MenuArrow,SubTrigger=MenuSubTrigger,SubContent=MenuSubContent,DROPDOWN_MENU_NAME="DropdownMenu",[createDropdownMenuContext,createDropdownMenuScope]=createContextScope$3(DROPDOWN_MENU_NAME,[createMenuScope]),useMenuScope=createMenuScope(),[DropdownMenuProvider,useDropdownMenuContext]=createDropdownMenuContext(DROPDOWN_MENU_NAME),DropdownMenu$1=m=>{const{__scopeDropdownMenu:u,children:h,dir:g,open:y,defaultOpen:_,onOpenChange:A,modal:b=!0}=m,S=useMenuScope(u),E=reactExports.useRef(null),[T=!1,w]=useControllableState({prop:y,defaultProp:_,onChange:A});return jsxRuntimeExports.jsx(DropdownMenuProvider,{scope:u,triggerId:useId(),triggerRef:E,contentId:useId(),open:T,onOpenChange:w,onOpenToggle:reactExports.useCallback(()=>w(C=>!C),[w]),modal:b,children:jsxRuntimeExports.jsx(Root3,{...S,open:T,onOpenChange:w,dir:g,modal:b,children:h})})};DropdownMenu$1.displayName=DROPDOWN_MENU_NAME;var TRIGGER_NAME="DropdownMenuTrigger",DropdownMenuTrigger$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,disabled:g=!1,...y}=m,_=useDropdownMenuContext(TRIGGER_NAME,h),A=useMenuScope(h);return jsxRuntimeExports.jsx(Anchor2,{asChild:!0,...A,children:jsxRuntimeExports.jsx(Primitive.button,{type:"button",id:_.triggerId,"aria-haspopup":"menu","aria-expanded":_.open,"aria-controls":_.open?_.contentId:void 0,"data-state":_.open?"open":"closed","data-disabled":g?"":void 0,disabled:g,...y,ref:composeRefs(u,_.triggerRef),onPointerDown:composeEventHandlers(m.onPointerDown,b=>{!g&&b.button===0&&b.ctrlKey===!1&&(_.onOpenToggle(),_.open||b.preventDefault())}),onKeyDown:composeEventHandlers(m.onKeyDown,b=>{g||(["Enter"," "].includes(b.key)&&_.onOpenToggle(),b.key==="ArrowDown"&&_.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(b.key)&&b.preventDefault())})})})});DropdownMenuTrigger$1.displayName=TRIGGER_NAME;var PORTAL_NAME="DropdownMenuPortal",DropdownMenuPortal=m=>{const{__scopeDropdownMenu:u,...h}=m,g=useMenuScope(u);return jsxRuntimeExports.jsx(Portal,{...g,...h})};DropdownMenuPortal.displayName=PORTAL_NAME;var CONTENT_NAME="DropdownMenuContent",DropdownMenuContent$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useDropdownMenuContext(CONTENT_NAME,h),_=useMenuScope(h),A=reactExports.useRef(!1);return jsxRuntimeExports.jsx(Content2$1,{id:y.contentId,"aria-labelledby":y.triggerId,..._,...g,ref:u,onCloseAutoFocus:composeEventHandlers(m.onCloseAutoFocus,b=>{var S;A.current||(S=y.triggerRef.current)==null||S.focus(),A.current=!1,b.preventDefault()}),onInteractOutside:composeEventHandlers(m.onInteractOutside,b=>{const S=b.detail.originalEvent,E=S.button===0&&S.ctrlKey===!0,T=S.button===2||E;(!y.modal||T)&&(A.current=!0)}),style:{...m.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});DropdownMenuContent$1.displayName=CONTENT_NAME;var GROUP_NAME="DropdownMenuGroup",DropdownMenuGroup=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Group,{...y,...g,ref:u})});DropdownMenuGroup.displayName=GROUP_NAME;var LABEL_NAME="DropdownMenuLabel",DropdownMenuLabel$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Label,{...y,...g,ref:u})});DropdownMenuLabel$1.displayName=LABEL_NAME;var ITEM_NAME="DropdownMenuItem",DropdownMenuItem$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Item2$1,{...y,...g,ref:u})});DropdownMenuItem$1.displayName=ITEM_NAME;var CHECKBOX_ITEM_NAME="DropdownMenuCheckboxItem",DropdownMenuCheckboxItem$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(CheckboxItem,{...y,...g,ref:u})});DropdownMenuCheckboxItem$1.displayName=CHECKBOX_ITEM_NAME;var RADIO_GROUP_NAME="DropdownMenuRadioGroup",DropdownMenuRadioGroup=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(RadioGroup,{...y,...g,ref:u})});DropdownMenuRadioGroup.displayName=RADIO_GROUP_NAME;var RADIO_ITEM_NAME="DropdownMenuRadioItem",DropdownMenuRadioItem$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(RadioItem,{...y,...g,ref:u})});DropdownMenuRadioItem$1.displayName=RADIO_ITEM_NAME;var INDICATOR_NAME="DropdownMenuItemIndicator",DropdownMenuItemIndicator=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(ItemIndicator,{...y,...g,ref:u})});DropdownMenuItemIndicator.displayName=INDICATOR_NAME;var SEPARATOR_NAME="DropdownMenuSeparator",DropdownMenuSeparator$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Separator,{...y,...g,ref:u})});DropdownMenuSeparator$1.displayName=SEPARATOR_NAME;var ARROW_NAME="DropdownMenuArrow",DropdownMenuArrow=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Arrow2,{...y,...g,ref:u})});DropdownMenuArrow.displayName=ARROW_NAME;var SUB_TRIGGER_NAME="DropdownMenuSubTrigger",DropdownMenuSubTrigger$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(SubTrigger,{...y,...g,ref:u})});DropdownMenuSubTrigger$1.displayName=SUB_TRIGGER_NAME;var SUB_CONTENT_NAME="DropdownMenuSubContent",DropdownMenuSubContent$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(SubContent,{...y,...g,ref:u,style:{...m.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});DropdownMenuSubContent$1.displayName=SUB_CONTENT_NAME;var Root2=DropdownMenu$1,Trigger=DropdownMenuTrigger$1,Portal2=DropdownMenuPortal,Content2=DropdownMenuContent$1,Label2=DropdownMenuLabel$1,Item2=DropdownMenuItem$1,CheckboxItem2=DropdownMenuCheckboxItem$1,RadioItem2=DropdownMenuRadioItem$1,ItemIndicator2=DropdownMenuItemIndicator,Separator2=DropdownMenuSeparator$1,SubTrigger2=DropdownMenuSubTrigger$1,SubContent2=DropdownMenuSubContent$1;const DropdownMenu=Root2,DropdownMenuTrigger=Trigger,DropdownMenuSubTrigger=reactExports.forwardRef(({className:m,inset:u,children:h,...g},y)=>jsxRuntimeExports.jsxs(SubTrigger2,{ref:y,className:cn("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100 dark:focus:bg-slate-800 dark:data-[state=open]:bg-slate-800",u&&"pl-8",m),...g,children:[h,jsxRuntimeExports.jsx(ChevronRightIcon,{className:"ml-auto h-4 w-4"})]}));DropdownMenuSubTrigger.displayName=SubTrigger2.displayName;const DropdownMenuSubContent=reactExports.forwardRef(({className:m,...u},h)=>jsxRuntimeExports.jsx(SubContent2,{ref:h,className:cn("z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50",m),...u}));DropdownMenuSubContent.displayName=SubContent2.displayName;const DropdownMenuContent=reactExports.forwardRef(({className:m,sideOffset:u=4,...h},g)=>jsxRuntimeExports.jsx(Portal2,{children:jsxRuntimeExports.jsx(Content2,{ref:g,sideOffset:u,className:cn("z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",m),...h})}));DropdownMenuContent.displayName=Content2.displayName;const DropdownMenuItem=reactExports.forwardRef(({className:m,inset:u,...h},g)=>jsxRuntimeExports.jsx(Item2,{ref:g,className:cn("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",u&&"pl-8",m),...h}));DropdownMenuItem.displayName=Item2.displayName;const DropdownMenuCheckboxItem=reactExports.forwardRef(({className:m,children:u,checked:h,...g},y)=>jsxRuntimeExports.jsxs(CheckboxItem2,{ref:y,className:cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",m),checked:h,...g,children:[jsxRuntimeExports.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:jsxRuntimeExports.jsx(ItemIndicator2,{children:jsxRuntimeExports.jsx(CheckIcon,{className:"h-4 w-4"})})}),u]}));DropdownMenuCheckboxItem.displayName=CheckboxItem2.displayName;const DropdownMenuRadioItem=reactExports.forwardRef(({className:m,children:u,...h},g)=>jsxRuntimeExports.jsxs(RadioItem2,{ref:g,className:cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",m),...h,children:[jsxRuntimeExports.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:jsxRuntimeExports.jsx(ItemIndicator2,{children:jsxRuntimeExports.jsx(DotFilledIcon,{className:"h-4 w-4 fill-current"})})}),u]}));DropdownMenuRadioItem.displayName=RadioItem2.displayName;const DropdownMenuLabel=reactExports.forwardRef(({className:m,inset:u,...h},g)=>jsxRuntimeExports.jsx(Label2,{ref:g,className:cn("px-2 py-1.5 text-sm font-semibold",u&&"pl-8",m),...h}));DropdownMenuLabel.displayName=Label2.displayName;const DropdownMenuSeparator=reactExports.forwardRef(({className:m,...u},h)=>jsxRuntimeExports.jsx(Separator2,{ref:h,className:cn("-mx-1 my-1 h-px bg-slate-100 dark:bg-slate-800",m),...u}));DropdownMenuSeparator.displayName=Separator2.displayName;const PcbViewerWithContainerHeight=({containerClassName:m,...u})=>{const h=reactExports.useRef(null),[g,y]=reactExports.useState(620);return reactExports.useLayoutEffect(()=>{const _=()=>{if(h.current){const b=h.current.clientHeight,S=window.innerHeight;y(Math.min(Math.max(b,620),S))}};_();const A=new ResizeObserver(_);return h.current&&A.observe(h.current),window.addEventListener("resize",_),()=>{A.disconnect(),window.removeEventListener("resize",_)}},[]),jsxRuntimeExports.jsx("div",{ref:h,className:m||"w-full h-full",children:jsxRuntimeExports.jsx(distExports$1.PCBViewer,{...u,height:g})})},styles=".visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.left-2{left:.5rem}.right-4{right:1rem}.right-\\[4px\\]{right:4px}.top-2{top:.5rem}.top-4{top:1rem}.top-\\[6px\\]{top:6px}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-1{margin-bottom:.25rem;margin-top:.25rem}.mb-3{margin-bottom:.75rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.contents{display:contents}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\\.5{height:.875rem}.h-4{height:1rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\\[620px\\]{height:620px}.h-\\[calc\\(100vh-96px\\)\\]{height:calc(100vh - 96px)}.h-full{height:100%}.h-px{height:1px}.max-h-\\[500px\\]{max-height:500px}.min-h-\\[620px\\]{min-height:620px}.min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.w-1{width:.25rem}.w-11{width:2.75rem}.w-11\\/12{width:91.666667%}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\\.5{width:.875rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-full{width:100%}.min-w-\\[8rem\\]{min-width:8rem}.max-w-2xl{max-width:42rem}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-opacity-50{--tw-bg-opacity:0.5}.fill-current{fill:currentColor}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\\[8px\\]{font-size:8px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.leading-5{line-height:1.25rem}.tracking-widest{letter-spacing:.1em}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-offset-slate-950{--tw-ring-offset-color:#020617}.ring-offset-white{--tw-ring-offset-color:#fff}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\\*\\:text-xs>*{font-size:.75rem;line-height:1rem}.hover\\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\:bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\\:bg-slate-100\\/80:hover{background-color:rgba(241,245,249,.8)}.hover\\:bg-slate-900\\/90:hover{background-color:rgba(15,23,42,.9)}.hover\\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\\:underline:hover{text-decoration-line:underline}.focus\\:bg-slate-100:focus{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.focus\\:text-slate-900:focus{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:ring-slate-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity,1))}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:opacity-50:disabled{opacity:.5}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\[state\\=active\\]\\:bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:bg-slate-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:text-slate-950[data-state=active]{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}@media (min-width:768px){.md\\:sticky{position:sticky}.md\\:top-2{top:.5rem}}@media (prefers-color-scheme:dark){.dark\\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.dark\\:bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.dark\\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.dark\\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\\:text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\\:text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.dark\\:ring-offset-slate-950{--tw-ring-offset-color:#020617}.dark\\:hover\\:bg-red-900\\/90:hover{background-color:rgba(127,29,29,.9)}.dark\\:hover\\:bg-slate-50\\/90:hover{background-color:rgba(248,250,252,.9)}.dark\\:hover\\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:hover\\:bg-slate-800\\/80:hover{background-color:rgba(30,41,59,.8)}.dark\\:hover\\:text-slate-50:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\\:focus\\:bg-slate-800:focus{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:focus\\:text-slate-50:focus{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\\:focus-visible\\:ring-slate-300:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:bg-slate-950[data-state=active]{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=open\\]\\:bg-slate-800[data-state=open]{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:text-slate-50[data-state=active]{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}}",useStyles=()=>{reactExports.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const u=document.createElement("style");u.setAttribute("data-styles","tscircuit-runframe"),u.textContent=styles,document.head.appendChild(u)},[])},CircuitJsonPreview=({code:m,onRunClicked:u=()=>{},tsxRunTriggerCount:h,errorMessage:g,circuitJsonKey:y="",circuitJson:_,showCodeTab:A=!1,codeTabContent:b,showJsonTab:S=!0,showImportAndFormatButtons:E=!0,className:T,headerClassName:w,leftHeaderContent:C,readOnly:M,isStreaming:R,onToggleFullScreen:P,isFullScreen:L,isRunningCode:I,hasCodeChangedSinceLastRun:F,onCodeChange:N,onDtsChange:O,manualEditsFileContent:U,onManualEditsFileContentChange:W})=>{useStyles();const[H,Y]=reactExports.useState(A?"code":"pcb");return reactExports.useEffect(()=>{g&&Y("error")},[g]),reactExports.useEffect(()=>{H==="code"&&_&&!g&&Y("pcb")},[_]),jsxRuntimeExports.jsx("div",{className:cn("flex flex-col relative",T),children:jsxRuntimeExports.jsx("div",{className:"md:sticky md:top-2",children:jsxRuntimeExports.jsxs(Tabs,{value:H,onValueChange:Y,className:"flex-grow flex flex-col p-2",children:[jsxRuntimeExports.jsxs("div",{className:cn("flex items-center gap-2",w),children:[C,C&&jsxRuntimeExports.jsx("div",{className:"flex-grow"}),!C&&jsxRuntimeExports.jsx("div",{className:"flex-grow"}),jsxRuntimeExports.jsxs(TabsList,{children:[A&&jsxRuntimeExports.jsx(TabsTrigger,{value:"code",children:"Code"}),jsxRuntimeExports.jsxs(TabsTrigger,{value:"pcb",className:"whitespace-nowrap",children:[_&&jsxRuntimeExports.jsx("span",{className:cn("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",F?"bg-gray-500":"bg-blue-500")}),"PCB"]}),jsxRuntimeExports.jsxs(TabsTrigger,{value:"schematic",className:"whitespace-nowrap",children:[_&&jsxRuntimeExports.jsx("span",{className:cn("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",F?"bg-gray-500":"bg-blue-500")}),"Schematic"]}),jsxRuntimeExports.jsxs(TabsTrigger,{value:"cad",children:[_&&jsxRuntimeExports.jsx("span",{className:cn("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",F?"bg-gray-500":"bg-blue-500")}),"3D"]}),jsxRuntimeExports.jsxs(DropdownMenu,{children:[jsxRuntimeExports.jsx(DropdownMenuTrigger,{asChild:!0,children:jsxRuntimeExports.jsxs("div",{className:"whitespace-nowrap p-2 mr-1 cursor-pointer relative",children:[jsxRuntimeExports.jsx(Ellipsis,{className:"w-4 h-4"}),g&&jsxRuntimeExports.jsx("span",{className:"inline-flex absolute top-[6px] right-[4px] items-center justify-center w-1 h-1 ml-2 text-[8px] font-bold text-white bg-red-500 rounded-full"})]})}),jsxRuntimeExports.jsxs(DropdownMenuContent,{className:"*:text-xs",children:[jsxRuntimeExports.jsxs(DropdownMenuItem,{onSelect:()=>Y("error"),className:"flex",children:[jsxRuntimeExports.jsx(Check,{className:cn("w-3 h-3 mr-2",H!=="error"&&"invisible")}),jsxRuntimeExports.jsx("div",{className:"flex-grow",children:"Errors"}),g&&jsxRuntimeExports.jsx("span",{className:"inline-flex items-center justify-center w-3 h-3 ml-2 text-[8px] font-bold text-white bg-red-500 rounded-full",children:"1"})]}),jsxRuntimeExports.jsxs(DropdownMenuItem,{onSelect:()=>Y("bom"),children:[jsxRuntimeExports.jsx(Check,{className:cn("w-3 h-3 mr-2",H!=="bom"&&"invisible")}),"Bill of Materials"]}),jsxRuntimeExports.jsxs(DropdownMenuItem,{onSelect:()=>Y("circuitjson"),children:[jsxRuntimeExports.jsx(Check,{className:cn("w-3 h-3 mr-2",H!=="circuitjson"&&"invisible")}),"JSON"]})]})]})]}),P&&jsxRuntimeExports.jsx(Button,{onClick:P,variant:"ghost",children:L?jsxRuntimeExports.jsx(Minimize,{size:16}):jsxRuntimeExports.jsx(Fullscreen,{size:16})})]}),A&&jsxRuntimeExports.jsx(TabsContent,{value:"code",className:"flex-grow overflow-hidden",children:jsxRuntimeExports.jsx("div",{className:"h-full",children:b})}),jsxRuntimeExports.jsx(TabsContent,{value:"pcb",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-hidden",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading PCB viewer"}),children:_?jsxRuntimeExports.jsx(PcbViewerWithContainerHeight,{soup:_,containerClassName:cn("h-full w-full",L?"min-h-[calc(100vh-240px)]":"min-h-[620px]")},y):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"schematic",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading Schematic"}),children:_?jsxRuntimeExports.jsx(SchematicViewer,{circuitJson:_,containerStyle:{height:"100%"}}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"cad",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{FallbackComponent:ErrorFallback,children:_?jsxRuntimeExports.jsx(distExports$2.CadViewer,{soup:_}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"bom",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading BOM"}),children:_?jsxRuntimeExports.jsx(BomTable,{circuitJson:_}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"circuitjson",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading JSON viewer"}),children:_?jsxRuntimeExports.jsx(CircuitJsonTableViewer,{elements:_}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"error",children:_||g?jsxRuntimeExports.jsx(ErrorTabContent,{code:m,errorMessage:g}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})]})})})},root=clientExports.createRoot(document.getElementById("root"));root.render(jsxRuntimeExports.jsx(React.StrictMode,{children:jsxRuntimeExports.jsx("div",{style:{width:"100vw",height:"100vh"},children:jsxRuntimeExports.jsx(CircuitJsonPreview,{circuitJson:[]})})}));export{Soup as S,any_soup_element as a,stringify as b,compose as c,applyToPoint as d,toString as e,fromTriangles as f,symbols_index_default as g,rotate as r,scale$2 as s,translate as t};
|
|
21609
|
+
`)},idCounter=0,lockStack=[];function RemoveScrollSideCar(m){var u=reactExports.useRef([]),h=reactExports.useRef([0,0]),g=reactExports.useRef(),y=reactExports.useState(idCounter++)[0],_=reactExports.useState(styleSingleton)[0],A=reactExports.useRef(m);reactExports.useEffect(function(){A.current=m},[m]),reactExports.useEffect(function(){if(m.inert){document.body.classList.add("block-interactivity-".concat(y));var P=__spreadArray([m.lockRef.current],(m.shards||[]).map(extractRef),!0).filter(Boolean);return P.forEach(function(L){return L.classList.add("allow-interactivity-".concat(y))}),function(){document.body.classList.remove("block-interactivity-".concat(y)),P.forEach(function(L){return L.classList.remove("allow-interactivity-".concat(y))})}}},[m.inert,m.lockRef.current,m.shards]);var b=reactExports.useCallback(function(P,L){if("touches"in P&&P.touches.length===2||P.type==="wheel"&&P.ctrlKey)return!A.current.allowPinchZoom;var I=getTouchXY(P),F=h.current,N="deltaX"in P?P.deltaX:F[0]-I[0],O="deltaY"in P?P.deltaY:F[1]-I[1],U,W=P.target,H=Math.abs(N)>Math.abs(O)?"h":"v";if("touches"in P&&H==="h"&&W.type==="range")return!1;var Y=locationCouldBeScrolled(H,W);if(!Y)return!0;if(Y?U=H:(U=H==="v"?"h":"v",Y=locationCouldBeScrolled(H,W)),!Y)return!1;if(!g.current&&"changedTouches"in P&&(N||O)&&(g.current=U),!U)return!0;var J=g.current||U;return handleScroll(J,L,P,J==="h"?N:O,!0)},[]),S=reactExports.useCallback(function(P){var L=P;if(!(!lockStack.length||lockStack[lockStack.length-1]!==_)){var I="deltaY"in L?getDeltaXY(L):getTouchXY(L),F=u.current.filter(function(U){return U.name===L.type&&(U.target===L.target||L.target===U.shadowParent)&&deltaCompare(U.delta,I)})[0];if(F&&F.should){L.cancelable&&L.preventDefault();return}if(!F){var N=(A.current.shards||[]).map(extractRef).filter(Boolean).filter(function(U){return U.contains(L.target)}),O=N.length>0?b(L,N[0]):!A.current.noIsolation;O&&L.cancelable&&L.preventDefault()}}},[]),E=reactExports.useCallback(function(P,L,I,F){var N={name:P,delta:L,target:I,should:F,shadowParent:getOutermostShadowParent(I)};u.current.push(N),setTimeout(function(){u.current=u.current.filter(function(O){return O!==N})},1)},[]),T=reactExports.useCallback(function(P){h.current=getTouchXY(P),g.current=void 0},[]),w=reactExports.useCallback(function(P){E(P.type,getDeltaXY(P),P.target,b(P,m.lockRef.current))},[]),C=reactExports.useCallback(function(P){E(P.type,getTouchXY(P),P.target,b(P,m.lockRef.current))},[]);reactExports.useEffect(function(){return lockStack.push(_),m.setCallbacks({onScrollCapture:w,onWheelCapture:w,onTouchMoveCapture:C}),document.addEventListener("wheel",S,nonPassive),document.addEventListener("touchmove",S,nonPassive),document.addEventListener("touchstart",T,nonPassive),function(){lockStack=lockStack.filter(function(P){return P!==_}),document.removeEventListener("wheel",S,nonPassive),document.removeEventListener("touchmove",S,nonPassive),document.removeEventListener("touchstart",T,nonPassive)}},[]);var M=m.removeScrollBar,R=m.inert;return reactExports.createElement(reactExports.Fragment,null,R?reactExports.createElement(_,{styles:generateStyle(y)}):null,M?reactExports.createElement(RemoveScrollBar,{gapMode:m.gapMode}):null)}function getOutermostShadowParent(m){for(var u=null;m!==null;)m instanceof ShadowRoot&&(u=m.host,m=m.host),m=m.parentNode;return u}const SideCar=exportSidecar(effectCar,RemoveScrollSideCar);var ReactRemoveScroll=reactExports.forwardRef(function(m,u){return reactExports.createElement(RemoveScroll,__assign({},m,{ref:u,sideCar:SideCar}))});ReactRemoveScroll.classNames=RemoveScroll.classNames;var SELECTION_KEYS=["Enter"," "],FIRST_KEYS=["ArrowDown","PageUp","Home"],LAST_KEYS=["ArrowUp","PageDown","End"],FIRST_LAST_KEYS=[...FIRST_KEYS,...LAST_KEYS],SUB_OPEN_KEYS={ltr:[...SELECTION_KEYS,"ArrowRight"],rtl:[...SELECTION_KEYS,"ArrowLeft"]},SUB_CLOSE_KEYS={ltr:["ArrowLeft"],rtl:["ArrowRight"]},MENU_NAME="Menu",[Collection,useCollection,createCollectionScope]=createCollection(MENU_NAME),[createMenuContext,createMenuScope]=createContextScope$3(MENU_NAME,[createCollectionScope,createPopperScope,createRovingFocusGroupScope]),usePopperScope=createPopperScope(),useRovingFocusGroupScope=createRovingFocusGroupScope(),[MenuProvider,useMenuContext]=createMenuContext(MENU_NAME),[MenuRootProvider,useMenuRootContext]=createMenuContext(MENU_NAME),Menu=m=>{const{__scopeMenu:u,open:h=!1,children:g,dir:y,onOpenChange:_,modal:A=!0}=m,b=usePopperScope(u),[S,E]=reactExports.useState(null),T=reactExports.useRef(!1),w=useCallbackRef$1(_),C=useDirection(y);return reactExports.useEffect(()=>{const M=()=>{T.current=!0,document.addEventListener("pointerdown",R,{capture:!0,once:!0}),document.addEventListener("pointermove",R,{capture:!0,once:!0})},R=()=>T.current=!1;return document.addEventListener("keydown",M,{capture:!0}),()=>{document.removeEventListener("keydown",M,{capture:!0}),document.removeEventListener("pointerdown",R,{capture:!0}),document.removeEventListener("pointermove",R,{capture:!0})}},[]),jsxRuntimeExports.jsx(Root2$1,{...b,children:jsxRuntimeExports.jsx(MenuProvider,{scope:u,open:h,onOpenChange:w,content:S,onContentChange:E,children:jsxRuntimeExports.jsx(MenuRootProvider,{scope:u,onClose:reactExports.useCallback(()=>w(!1),[w]),isUsingKeyboardRef:T,dir:C,modal:A,children:g})})})};Menu.displayName=MENU_NAME;var ANCHOR_NAME="MenuAnchor",MenuAnchor=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m,y=usePopperScope(h);return jsxRuntimeExports.jsx(Anchor,{...y,...g,ref:u})});MenuAnchor.displayName=ANCHOR_NAME;var PORTAL_NAME$1="MenuPortal",[PortalProvider,usePortalContext]=createMenuContext(PORTAL_NAME$1,{forceMount:void 0}),MenuPortal=m=>{const{__scopeMenu:u,forceMount:h,children:g,container:y}=m,_=useMenuContext(PORTAL_NAME$1,u);return jsxRuntimeExports.jsx(PortalProvider,{scope:u,forceMount:h,children:jsxRuntimeExports.jsx(Presence,{present:h||_.open,children:jsxRuntimeExports.jsx(Portal$1,{asChild:!0,container:y,children:g})})})};MenuPortal.displayName=PORTAL_NAME$1;var CONTENT_NAME$1="MenuContent",[MenuContentProvider,useMenuContentContext]=createMenuContext(CONTENT_NAME$1),MenuContent=reactExports.forwardRef((m,u)=>{const h=usePortalContext(CONTENT_NAME$1,m.__scopeMenu),{forceMount:g=h.forceMount,...y}=m,_=useMenuContext(CONTENT_NAME$1,m.__scopeMenu),A=useMenuRootContext(CONTENT_NAME$1,m.__scopeMenu);return jsxRuntimeExports.jsx(Collection.Provider,{scope:m.__scopeMenu,children:jsxRuntimeExports.jsx(Presence,{present:g||_.open,children:jsxRuntimeExports.jsx(Collection.Slot,{scope:m.__scopeMenu,children:A.modal?jsxRuntimeExports.jsx(MenuRootContentModal,{...y,ref:u}):jsxRuntimeExports.jsx(MenuRootContentNonModal,{...y,ref:u})})})})}),MenuRootContentModal=reactExports.forwardRef((m,u)=>{const h=useMenuContext(CONTENT_NAME$1,m.__scopeMenu),g=reactExports.useRef(null),y=useComposedRefs(u,g);return reactExports.useEffect(()=>{const _=g.current;if(_)return hideOthers(_)},[]),jsxRuntimeExports.jsx(MenuContentImpl,{...m,ref:y,trapFocus:h.open,disableOutsidePointerEvents:h.open,disableOutsideScroll:!0,onFocusOutside:composeEventHandlers(m.onFocusOutside,_=>_.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>h.onOpenChange(!1)})}),MenuRootContentNonModal=reactExports.forwardRef((m,u)=>{const h=useMenuContext(CONTENT_NAME$1,m.__scopeMenu);return jsxRuntimeExports.jsx(MenuContentImpl,{...m,ref:u,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>h.onOpenChange(!1)})}),MenuContentImpl=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,loop:g=!1,trapFocus:y,onOpenAutoFocus:_,onCloseAutoFocus:A,disableOutsidePointerEvents:b,onEntryFocus:S,onEscapeKeyDown:E,onPointerDownOutside:T,onFocusOutside:w,onInteractOutside:C,onDismiss:M,disableOutsideScroll:R,...P}=m,L=useMenuContext(CONTENT_NAME$1,h),I=useMenuRootContext(CONTENT_NAME$1,h),F=usePopperScope(h),N=useRovingFocusGroupScope(h),O=useCollection(h),[U,W]=reactExports.useState(null),H=reactExports.useRef(null),Y=useComposedRefs(u,H,L.onContentChange),J=reactExports.useRef(0),Z=reactExports.useRef(""),oe=reactExports.useRef(0),re=reactExports.useRef(null),fe=reactExports.useRef("right"),_e=reactExports.useRef(0),be=R?ReactRemoveScroll:reactExports.Fragment,ge=R?{as:Slot,allowPinchZoom:!0}:void 0,le=ue=>{var He,Ze;const ye=Z.current+ue,ve=O().filter($e=>!$e.disabled),Ee=document.activeElement,Oe=(He=ve.find($e=>$e.ref.current===Ee))==null?void 0:He.textValue,Ne=ve.map($e=>$e.textValue),Ue=getNextMatch(Ne,ye,Oe),qe=(Ze=ve.find($e=>$e.textValue===Ue))==null?void 0:Ze.ref.current;(function $e(Me){Z.current=Me,window.clearTimeout(J.current),Me!==""&&(J.current=window.setTimeout(()=>$e(""),1e3))})(ye),qe&&setTimeout(()=>qe.focus())};reactExports.useEffect(()=>()=>window.clearTimeout(J.current),[]),useFocusGuards();const ne=reactExports.useCallback(ue=>{var ve,Ee;return fe.current===((ve=re.current)==null?void 0:ve.side)&&isPointerInGraceArea(ue,(Ee=re.current)==null?void 0:Ee.area)},[]);return jsxRuntimeExports.jsx(MenuContentProvider,{scope:h,searchRef:Z,onItemEnter:reactExports.useCallback(ue=>{ne(ue)&&ue.preventDefault()},[ne]),onItemLeave:reactExports.useCallback(ue=>{var ye;ne(ue)||((ye=H.current)==null||ye.focus(),W(null))},[ne]),onTriggerLeave:reactExports.useCallback(ue=>{ne(ue)&&ue.preventDefault()},[ne]),pointerGraceTimerRef:oe,onPointerGraceIntentChange:reactExports.useCallback(ue=>{re.current=ue},[]),children:jsxRuntimeExports.jsx(be,{...ge,children:jsxRuntimeExports.jsx(FocusScope,{asChild:!0,trapped:y,onMountAutoFocus:composeEventHandlers(_,ue=>{var ye;ue.preventDefault(),(ye=H.current)==null||ye.focus({preventScroll:!0})}),onUnmountAutoFocus:A,children:jsxRuntimeExports.jsx(DismissableLayer,{asChild:!0,disableOutsidePointerEvents:b,onEscapeKeyDown:E,onPointerDownOutside:T,onFocusOutside:w,onInteractOutside:C,onDismiss:M,children:jsxRuntimeExports.jsx(Root$1,{asChild:!0,...N,dir:I.dir,orientation:"vertical",loop:g,currentTabStopId:U,onCurrentTabStopIdChange:W,onEntryFocus:composeEventHandlers(S,ue=>{I.isUsingKeyboardRef.current||ue.preventDefault()}),preventScrollOnEntryFocus:!0,children:jsxRuntimeExports.jsx(Content,{role:"menu","aria-orientation":"vertical","data-state":getOpenState(L.open),"data-radix-menu-content":"",dir:I.dir,...F,...P,ref:Y,style:{outline:"none",...P.style},onKeyDown:composeEventHandlers(P.onKeyDown,ue=>{const ve=ue.target.closest("[data-radix-menu-content]")===ue.currentTarget,Ee=ue.ctrlKey||ue.altKey||ue.metaKey,Oe=ue.key.length===1;ve&&(ue.key==="Tab"&&ue.preventDefault(),!Ee&&Oe&&le(ue.key));const Ne=H.current;if(ue.target!==Ne||!FIRST_LAST_KEYS.includes(ue.key))return;ue.preventDefault();const qe=O().filter(He=>!He.disabled).map(He=>He.ref.current);LAST_KEYS.includes(ue.key)&&qe.reverse(),focusFirst(qe)}),onBlur:composeEventHandlers(m.onBlur,ue=>{ue.currentTarget.contains(ue.target)||(window.clearTimeout(J.current),Z.current="")}),onPointerMove:composeEventHandlers(m.onPointerMove,whenMouse(ue=>{const ye=ue.target,ve=_e.current!==ue.clientX;if(ue.currentTarget.contains(ye)&&ve){const Ee=ue.clientX>_e.current?"right":"left";fe.current=Ee,_e.current=ue.clientX}}))})})})})})})});MenuContent.displayName=CONTENT_NAME$1;var GROUP_NAME$1="MenuGroup",MenuGroup=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m;return jsxRuntimeExports.jsx(Primitive.div,{role:"group",...g,ref:u})});MenuGroup.displayName=GROUP_NAME$1;var LABEL_NAME$1="MenuLabel",MenuLabel=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m;return jsxRuntimeExports.jsx(Primitive.div,{...g,ref:u})});MenuLabel.displayName=LABEL_NAME$1;var ITEM_NAME$1="MenuItem",ITEM_SELECT="menu.itemSelect",MenuItem=reactExports.forwardRef((m,u)=>{const{disabled:h=!1,onSelect:g,...y}=m,_=reactExports.useRef(null),A=useMenuRootContext(ITEM_NAME$1,m.__scopeMenu),b=useMenuContentContext(ITEM_NAME$1,m.__scopeMenu),S=useComposedRefs(u,_),E=reactExports.useRef(!1),T=()=>{const w=_.current;if(!h&&w){const C=new CustomEvent(ITEM_SELECT,{bubbles:!0,cancelable:!0});w.addEventListener(ITEM_SELECT,M=>g==null?void 0:g(M),{once:!0}),dispatchDiscreteCustomEvent(w,C),C.defaultPrevented?E.current=!1:A.onClose()}};return jsxRuntimeExports.jsx(MenuItemImpl,{...y,ref:S,disabled:h,onClick:composeEventHandlers(m.onClick,T),onPointerDown:w=>{var C;(C=m.onPointerDown)==null||C.call(m,w),E.current=!0},onPointerUp:composeEventHandlers(m.onPointerUp,w=>{var C;E.current||(C=w.currentTarget)==null||C.click()}),onKeyDown:composeEventHandlers(m.onKeyDown,w=>{const C=b.searchRef.current!=="";h||C&&w.key===" "||SELECTION_KEYS.includes(w.key)&&(w.currentTarget.click(),w.preventDefault())})})});MenuItem.displayName=ITEM_NAME$1;var MenuItemImpl=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,disabled:g=!1,textValue:y,..._}=m,A=useMenuContentContext(ITEM_NAME$1,h),b=useRovingFocusGroupScope(h),S=reactExports.useRef(null),E=useComposedRefs(u,S),[T,w]=reactExports.useState(!1),[C,M]=reactExports.useState("");return reactExports.useEffect(()=>{const R=S.current;R&&M((R.textContent??"").trim())},[_.children]),jsxRuntimeExports.jsx(Collection.ItemSlot,{scope:h,disabled:g,textValue:y??C,children:jsxRuntimeExports.jsx(Item,{asChild:!0,...b,focusable:!g,children:jsxRuntimeExports.jsx(Primitive.div,{role:"menuitem","data-highlighted":T?"":void 0,"aria-disabled":g||void 0,"data-disabled":g?"":void 0,..._,ref:E,onPointerMove:composeEventHandlers(m.onPointerMove,whenMouse(R=>{g?A.onItemLeave(R):(A.onItemEnter(R),R.defaultPrevented||R.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:composeEventHandlers(m.onPointerLeave,whenMouse(R=>A.onItemLeave(R))),onFocus:composeEventHandlers(m.onFocus,()=>w(!0)),onBlur:composeEventHandlers(m.onBlur,()=>w(!1))})})})}),CHECKBOX_ITEM_NAME$1="MenuCheckboxItem",MenuCheckboxItem=reactExports.forwardRef((m,u)=>{const{checked:h=!1,onCheckedChange:g,...y}=m;return jsxRuntimeExports.jsx(ItemIndicatorProvider,{scope:m.__scopeMenu,checked:h,children:jsxRuntimeExports.jsx(MenuItem,{role:"menuitemcheckbox","aria-checked":isIndeterminate(h)?"mixed":h,...y,ref:u,"data-state":getCheckedState(h),onSelect:composeEventHandlers(y.onSelect,()=>g==null?void 0:g(isIndeterminate(h)?!0:!h),{checkForDefaultPrevented:!1})})})});MenuCheckboxItem.displayName=CHECKBOX_ITEM_NAME$1;var RADIO_GROUP_NAME$1="MenuRadioGroup",[RadioGroupProvider,useRadioGroupContext]=createMenuContext(RADIO_GROUP_NAME$1,{value:void 0,onValueChange:()=>{}}),MenuRadioGroup=reactExports.forwardRef((m,u)=>{const{value:h,onValueChange:g,...y}=m,_=useCallbackRef$1(g);return jsxRuntimeExports.jsx(RadioGroupProvider,{scope:m.__scopeMenu,value:h,onValueChange:_,children:jsxRuntimeExports.jsx(MenuGroup,{...y,ref:u})})});MenuRadioGroup.displayName=RADIO_GROUP_NAME$1;var RADIO_ITEM_NAME$1="MenuRadioItem",MenuRadioItem=reactExports.forwardRef((m,u)=>{const{value:h,...g}=m,y=useRadioGroupContext(RADIO_ITEM_NAME$1,m.__scopeMenu),_=h===y.value;return jsxRuntimeExports.jsx(ItemIndicatorProvider,{scope:m.__scopeMenu,checked:_,children:jsxRuntimeExports.jsx(MenuItem,{role:"menuitemradio","aria-checked":_,...g,ref:u,"data-state":getCheckedState(_),onSelect:composeEventHandlers(g.onSelect,()=>{var A;return(A=y.onValueChange)==null?void 0:A.call(y,h)},{checkForDefaultPrevented:!1})})})});MenuRadioItem.displayName=RADIO_ITEM_NAME$1;var ITEM_INDICATOR_NAME="MenuItemIndicator",[ItemIndicatorProvider,useItemIndicatorContext]=createMenuContext(ITEM_INDICATOR_NAME,{checked:!1}),MenuItemIndicator=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,forceMount:g,...y}=m,_=useItemIndicatorContext(ITEM_INDICATOR_NAME,h);return jsxRuntimeExports.jsx(Presence,{present:g||isIndeterminate(_.checked)||_.checked===!0,children:jsxRuntimeExports.jsx(Primitive.span,{...y,ref:u,"data-state":getCheckedState(_.checked)})})});MenuItemIndicator.displayName=ITEM_INDICATOR_NAME;var SEPARATOR_NAME$1="MenuSeparator",MenuSeparator=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m;return jsxRuntimeExports.jsx(Primitive.div,{role:"separator","aria-orientation":"horizontal",...g,ref:u})});MenuSeparator.displayName=SEPARATOR_NAME$1;var ARROW_NAME$1="MenuArrow",MenuArrow=reactExports.forwardRef((m,u)=>{const{__scopeMenu:h,...g}=m,y=usePopperScope(h);return jsxRuntimeExports.jsx(Arrow,{...y,...g,ref:u})});MenuArrow.displayName=ARROW_NAME$1;var SUB_NAME="MenuSub",[MenuSubProvider,useMenuSubContext]=createMenuContext(SUB_NAME),SUB_TRIGGER_NAME$1="MenuSubTrigger",MenuSubTrigger=reactExports.forwardRef((m,u)=>{const h=useMenuContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),g=useMenuRootContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),y=useMenuSubContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),_=useMenuContentContext(SUB_TRIGGER_NAME$1,m.__scopeMenu),A=reactExports.useRef(null),{pointerGraceTimerRef:b,onPointerGraceIntentChange:S}=_,E={__scopeMenu:m.__scopeMenu},T=reactExports.useCallback(()=>{A.current&&window.clearTimeout(A.current),A.current=null},[]);return reactExports.useEffect(()=>T,[T]),reactExports.useEffect(()=>{const w=b.current;return()=>{window.clearTimeout(w),S(null)}},[b,S]),jsxRuntimeExports.jsx(MenuAnchor,{asChild:!0,...E,children:jsxRuntimeExports.jsx(MenuItemImpl,{id:y.triggerId,"aria-haspopup":"menu","aria-expanded":h.open,"aria-controls":y.contentId,"data-state":getOpenState(h.open),...m,ref:composeRefs(u,y.onTriggerChange),onClick:w=>{var C;(C=m.onClick)==null||C.call(m,w),!(m.disabled||w.defaultPrevented)&&(w.currentTarget.focus(),h.open||h.onOpenChange(!0))},onPointerMove:composeEventHandlers(m.onPointerMove,whenMouse(w=>{_.onItemEnter(w),!w.defaultPrevented&&!m.disabled&&!h.open&&!A.current&&(_.onPointerGraceIntentChange(null),A.current=window.setTimeout(()=>{h.onOpenChange(!0),T()},100))})),onPointerLeave:composeEventHandlers(m.onPointerLeave,whenMouse(w=>{var M,R;T();const C=(M=h.content)==null?void 0:M.getBoundingClientRect();if(C){const P=(R=h.content)==null?void 0:R.dataset.side,L=P==="right",I=L?-5:5,F=C[L?"left":"right"],N=C[L?"right":"left"];_.onPointerGraceIntentChange({area:[{x:w.clientX+I,y:w.clientY},{x:F,y:C.top},{x:N,y:C.top},{x:N,y:C.bottom},{x:F,y:C.bottom}],side:P}),window.clearTimeout(b.current),b.current=window.setTimeout(()=>_.onPointerGraceIntentChange(null),300)}else{if(_.onTriggerLeave(w),w.defaultPrevented)return;_.onPointerGraceIntentChange(null)}})),onKeyDown:composeEventHandlers(m.onKeyDown,w=>{var M;const C=_.searchRef.current!=="";m.disabled||C&&w.key===" "||SUB_OPEN_KEYS[g.dir].includes(w.key)&&(h.onOpenChange(!0),(M=h.content)==null||M.focus(),w.preventDefault())})})})});MenuSubTrigger.displayName=SUB_TRIGGER_NAME$1;var SUB_CONTENT_NAME$1="MenuSubContent",MenuSubContent=reactExports.forwardRef((m,u)=>{const h=usePortalContext(CONTENT_NAME$1,m.__scopeMenu),{forceMount:g=h.forceMount,...y}=m,_=useMenuContext(CONTENT_NAME$1,m.__scopeMenu),A=useMenuRootContext(CONTENT_NAME$1,m.__scopeMenu),b=useMenuSubContext(SUB_CONTENT_NAME$1,m.__scopeMenu),S=reactExports.useRef(null),E=useComposedRefs(u,S);return jsxRuntimeExports.jsx(Collection.Provider,{scope:m.__scopeMenu,children:jsxRuntimeExports.jsx(Presence,{present:g||_.open,children:jsxRuntimeExports.jsx(Collection.Slot,{scope:m.__scopeMenu,children:jsxRuntimeExports.jsx(MenuContentImpl,{id:b.contentId,"aria-labelledby":b.triggerId,...y,ref:E,align:"start",side:A.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:T=>{var w;A.isUsingKeyboardRef.current&&((w=S.current)==null||w.focus()),T.preventDefault()},onCloseAutoFocus:T=>T.preventDefault(),onFocusOutside:composeEventHandlers(m.onFocusOutside,T=>{T.target!==b.trigger&&_.onOpenChange(!1)}),onEscapeKeyDown:composeEventHandlers(m.onEscapeKeyDown,T=>{A.onClose(),T.preventDefault()}),onKeyDown:composeEventHandlers(m.onKeyDown,T=>{var M;const w=T.currentTarget.contains(T.target),C=SUB_CLOSE_KEYS[A.dir].includes(T.key);w&&C&&(_.onOpenChange(!1),(M=b.trigger)==null||M.focus(),T.preventDefault())})})})})})});MenuSubContent.displayName=SUB_CONTENT_NAME$1;function getOpenState(m){return m?"open":"closed"}function isIndeterminate(m){return m==="indeterminate"}function getCheckedState(m){return isIndeterminate(m)?"indeterminate":m?"checked":"unchecked"}function focusFirst(m){const u=document.activeElement;for(const h of m)if(h===u||(h.focus(),document.activeElement!==u))return}function wrapArray(m,u){return m.map((h,g)=>m[(u+g)%m.length])}function getNextMatch(m,u,h){const y=u.length>1&&Array.from(u).every(E=>E===u[0])?u[0]:u,_=h?m.indexOf(h):-1;let A=wrapArray(m,Math.max(_,0));y.length===1&&(A=A.filter(E=>E!==h));const S=A.find(E=>E.toLowerCase().startsWith(y.toLowerCase()));return S!==h?S:void 0}function isPointInPolygon(m,u){const{x:h,y:g}=m;let y=!1;for(let _=0,A=u.length-1;_<u.length;A=_++){const b=u[_].x,S=u[_].y,E=u[A].x,T=u[A].y;S>g!=T>g&&h<(E-b)*(g-S)/(T-S)+b&&(y=!y)}return y}function isPointerInGraceArea(m,u){if(!u)return!1;const h={x:m.clientX,y:m.clientY};return isPointInPolygon(h,u)}function whenMouse(m){return u=>u.pointerType==="mouse"?m(u):void 0}var Root3=Menu,Anchor2=MenuAnchor,Portal=MenuPortal,Content2$1=MenuContent,Group=MenuGroup,Label=MenuLabel,Item2$1=MenuItem,CheckboxItem=MenuCheckboxItem,RadioGroup=MenuRadioGroup,RadioItem=MenuRadioItem,ItemIndicator=MenuItemIndicator,Separator=MenuSeparator,Arrow2=MenuArrow,SubTrigger=MenuSubTrigger,SubContent=MenuSubContent,DROPDOWN_MENU_NAME="DropdownMenu",[createDropdownMenuContext,createDropdownMenuScope]=createContextScope$3(DROPDOWN_MENU_NAME,[createMenuScope]),useMenuScope=createMenuScope(),[DropdownMenuProvider,useDropdownMenuContext]=createDropdownMenuContext(DROPDOWN_MENU_NAME),DropdownMenu$1=m=>{const{__scopeDropdownMenu:u,children:h,dir:g,open:y,defaultOpen:_,onOpenChange:A,modal:b=!0}=m,S=useMenuScope(u),E=reactExports.useRef(null),[T=!1,w]=useControllableState({prop:y,defaultProp:_,onChange:A});return jsxRuntimeExports.jsx(DropdownMenuProvider,{scope:u,triggerId:useId(),triggerRef:E,contentId:useId(),open:T,onOpenChange:w,onOpenToggle:reactExports.useCallback(()=>w(C=>!C),[w]),modal:b,children:jsxRuntimeExports.jsx(Root3,{...S,open:T,onOpenChange:w,dir:g,modal:b,children:h})})};DropdownMenu$1.displayName=DROPDOWN_MENU_NAME;var TRIGGER_NAME="DropdownMenuTrigger",DropdownMenuTrigger$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,disabled:g=!1,...y}=m,_=useDropdownMenuContext(TRIGGER_NAME,h),A=useMenuScope(h);return jsxRuntimeExports.jsx(Anchor2,{asChild:!0,...A,children:jsxRuntimeExports.jsx(Primitive.button,{type:"button",id:_.triggerId,"aria-haspopup":"menu","aria-expanded":_.open,"aria-controls":_.open?_.contentId:void 0,"data-state":_.open?"open":"closed","data-disabled":g?"":void 0,disabled:g,...y,ref:composeRefs(u,_.triggerRef),onPointerDown:composeEventHandlers(m.onPointerDown,b=>{!g&&b.button===0&&b.ctrlKey===!1&&(_.onOpenToggle(),_.open||b.preventDefault())}),onKeyDown:composeEventHandlers(m.onKeyDown,b=>{g||(["Enter"," "].includes(b.key)&&_.onOpenToggle(),b.key==="ArrowDown"&&_.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(b.key)&&b.preventDefault())})})})});DropdownMenuTrigger$1.displayName=TRIGGER_NAME;var PORTAL_NAME="DropdownMenuPortal",DropdownMenuPortal=m=>{const{__scopeDropdownMenu:u,...h}=m,g=useMenuScope(u);return jsxRuntimeExports.jsx(Portal,{...g,...h})};DropdownMenuPortal.displayName=PORTAL_NAME;var CONTENT_NAME="DropdownMenuContent",DropdownMenuContent$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useDropdownMenuContext(CONTENT_NAME,h),_=useMenuScope(h),A=reactExports.useRef(!1);return jsxRuntimeExports.jsx(Content2$1,{id:y.contentId,"aria-labelledby":y.triggerId,..._,...g,ref:u,onCloseAutoFocus:composeEventHandlers(m.onCloseAutoFocus,b=>{var S;A.current||(S=y.triggerRef.current)==null||S.focus(),A.current=!1,b.preventDefault()}),onInteractOutside:composeEventHandlers(m.onInteractOutside,b=>{const S=b.detail.originalEvent,E=S.button===0&&S.ctrlKey===!0,T=S.button===2||E;(!y.modal||T)&&(A.current=!0)}),style:{...m.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});DropdownMenuContent$1.displayName=CONTENT_NAME;var GROUP_NAME="DropdownMenuGroup",DropdownMenuGroup=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Group,{...y,...g,ref:u})});DropdownMenuGroup.displayName=GROUP_NAME;var LABEL_NAME="DropdownMenuLabel",DropdownMenuLabel$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Label,{...y,...g,ref:u})});DropdownMenuLabel$1.displayName=LABEL_NAME;var ITEM_NAME="DropdownMenuItem",DropdownMenuItem$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Item2$1,{...y,...g,ref:u})});DropdownMenuItem$1.displayName=ITEM_NAME;var CHECKBOX_ITEM_NAME="DropdownMenuCheckboxItem",DropdownMenuCheckboxItem$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(CheckboxItem,{...y,...g,ref:u})});DropdownMenuCheckboxItem$1.displayName=CHECKBOX_ITEM_NAME;var RADIO_GROUP_NAME="DropdownMenuRadioGroup",DropdownMenuRadioGroup=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(RadioGroup,{...y,...g,ref:u})});DropdownMenuRadioGroup.displayName=RADIO_GROUP_NAME;var RADIO_ITEM_NAME="DropdownMenuRadioItem",DropdownMenuRadioItem$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(RadioItem,{...y,...g,ref:u})});DropdownMenuRadioItem$1.displayName=RADIO_ITEM_NAME;var INDICATOR_NAME="DropdownMenuItemIndicator",DropdownMenuItemIndicator=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(ItemIndicator,{...y,...g,ref:u})});DropdownMenuItemIndicator.displayName=INDICATOR_NAME;var SEPARATOR_NAME="DropdownMenuSeparator",DropdownMenuSeparator$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Separator,{...y,...g,ref:u})});DropdownMenuSeparator$1.displayName=SEPARATOR_NAME;var ARROW_NAME="DropdownMenuArrow",DropdownMenuArrow=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(Arrow2,{...y,...g,ref:u})});DropdownMenuArrow.displayName=ARROW_NAME;var SUB_TRIGGER_NAME="DropdownMenuSubTrigger",DropdownMenuSubTrigger$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(SubTrigger,{...y,...g,ref:u})});DropdownMenuSubTrigger$1.displayName=SUB_TRIGGER_NAME;var SUB_CONTENT_NAME="DropdownMenuSubContent",DropdownMenuSubContent$1=reactExports.forwardRef((m,u)=>{const{__scopeDropdownMenu:h,...g}=m,y=useMenuScope(h);return jsxRuntimeExports.jsx(SubContent,{...y,...g,ref:u,style:{...m.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});DropdownMenuSubContent$1.displayName=SUB_CONTENT_NAME;var Root2=DropdownMenu$1,Trigger=DropdownMenuTrigger$1,Portal2=DropdownMenuPortal,Content2=DropdownMenuContent$1,Label2=DropdownMenuLabel$1,Item2=DropdownMenuItem$1,CheckboxItem2=DropdownMenuCheckboxItem$1,RadioItem2=DropdownMenuRadioItem$1,ItemIndicator2=DropdownMenuItemIndicator,Separator2=DropdownMenuSeparator$1,SubTrigger2=DropdownMenuSubTrigger$1,SubContent2=DropdownMenuSubContent$1;const DropdownMenu=Root2,DropdownMenuTrigger=Trigger,DropdownMenuSubTrigger=reactExports.forwardRef(({className:m,inset:u,children:h,...g},y)=>jsxRuntimeExports.jsxs(SubTrigger2,{ref:y,className:cn("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100 dark:focus:bg-slate-800 dark:data-[state=open]:bg-slate-800",u&&"pl-8",m),...g,children:[h,jsxRuntimeExports.jsx(ChevronRightIcon,{className:"ml-auto h-4 w-4"})]}));DropdownMenuSubTrigger.displayName=SubTrigger2.displayName;const DropdownMenuSubContent=reactExports.forwardRef(({className:m,...u},h)=>jsxRuntimeExports.jsx(SubContent2,{ref:h,className:cn("z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50",m),...u}));DropdownMenuSubContent.displayName=SubContent2.displayName;const DropdownMenuContent=reactExports.forwardRef(({className:m,sideOffset:u=4,...h},g)=>jsxRuntimeExports.jsx(Portal2,{children:jsxRuntimeExports.jsx(Content2,{ref:g,sideOffset:u,className:cn("z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",m),...h})}));DropdownMenuContent.displayName=Content2.displayName;const DropdownMenuItem=reactExports.forwardRef(({className:m,inset:u,...h},g)=>jsxRuntimeExports.jsx(Item2,{ref:g,className:cn("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",u&&"pl-8",m),...h}));DropdownMenuItem.displayName=Item2.displayName;const DropdownMenuCheckboxItem=reactExports.forwardRef(({className:m,children:u,checked:h,...g},y)=>jsxRuntimeExports.jsxs(CheckboxItem2,{ref:y,className:cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",m),checked:h,...g,children:[jsxRuntimeExports.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:jsxRuntimeExports.jsx(ItemIndicator2,{children:jsxRuntimeExports.jsx(CheckIcon,{className:"h-4 w-4"})})}),u]}));DropdownMenuCheckboxItem.displayName=CheckboxItem2.displayName;const DropdownMenuRadioItem=reactExports.forwardRef(({className:m,children:u,...h},g)=>jsxRuntimeExports.jsxs(RadioItem2,{ref:g,className:cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",m),...h,children:[jsxRuntimeExports.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:jsxRuntimeExports.jsx(ItemIndicator2,{children:jsxRuntimeExports.jsx(DotFilledIcon,{className:"h-4 w-4 fill-current"})})}),u]}));DropdownMenuRadioItem.displayName=RadioItem2.displayName;const DropdownMenuLabel=reactExports.forwardRef(({className:m,inset:u,...h},g)=>jsxRuntimeExports.jsx(Label2,{ref:g,className:cn("px-2 py-1.5 text-sm font-semibold",u&&"pl-8",m),...h}));DropdownMenuLabel.displayName=Label2.displayName;const DropdownMenuSeparator=reactExports.forwardRef(({className:m,...u},h)=>jsxRuntimeExports.jsx(Separator2,{ref:h,className:cn("-mx-1 my-1 h-px bg-slate-100 dark:bg-slate-800",m),...u}));DropdownMenuSeparator.displayName=Separator2.displayName;const PcbViewerWithContainerHeight=({containerClassName:m,...u})=>{const h=reactExports.useRef(null),[g,y]=reactExports.useState(620);return reactExports.useLayoutEffect(()=>{const _=()=>{if(h.current){const b=h.current.clientHeight,S=window.innerHeight;y(Math.min(Math.max(b,620),S))}};_();const A=new ResizeObserver(_);return h.current&&A.observe(h.current),window.addEventListener("resize",_),()=>{A.disconnect(),window.removeEventListener("resize",_)}},[]),jsxRuntimeExports.jsx("div",{ref:h,className:m||"w-full h-full",children:jsxRuntimeExports.jsx(distExports$1.PCBViewer,{...u,height:g})})},styles=".invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-2{left:.5rem}.right-4{right:1rem}.right-\\[4px\\]{right:4px}.top-4{top:1rem}.top-\\[6px\\]{top:6px}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-1{margin-bottom:.25rem;margin-top:.25rem}.mb-3{margin-bottom:.75rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.contents{display:contents}.h-1{height:.25rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\\.5{height:.875rem}.h-4{height:1rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\\[620px\\]{height:620px}.h-\\[calc\\(100vh-96px\\)\\]{height:calc(100vh - 96px)}.h-full{height:100%}.h-px{height:1px}.max-h-\\[500px\\]{max-height:500px}.min-h-\\[620px\\]{min-height:620px}.min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.w-1{width:.25rem}.w-11\\/12{width:91.666667%}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\\.5{width:.875rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-full{width:100%}.min-w-\\[8rem\\]{min-width:8rem}.max-w-2xl{max-width:42rem}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-opacity-50{--tw-bg-opacity:0.5}.fill-current{fill:currentColor}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\\[8px\\]{font-size:8px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.leading-5{line-height:1.25rem}.tracking-widest{letter-spacing:.1em}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-offset-white{--tw-ring-offset-color:#fff}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\\*\\:text-xs>*{font-size:.75rem;line-height:1rem}.hover\\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\:bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\\:bg-slate-100\\/80:hover{background-color:rgba(241,245,249,.8)}.hover\\:bg-slate-900\\/90:hover{background-color:rgba(15,23,42,.9)}.hover\\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\\:underline:hover{text-decoration-line:underline}.focus\\:bg-slate-100:focus{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.focus\\:text-slate-900:focus{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:ring-slate-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity,1))}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:opacity-50:disabled{opacity:.5}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\[state\\=active\\]\\:bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:bg-slate-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:text-slate-950[data-state=active]{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}@media (min-width:768px){.md\\:sticky{position:sticky}.md\\:top-2{top:.5rem}}@media (prefers-color-scheme:dark){.dark\\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.dark\\:bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.dark\\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.dark\\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\\:text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\\:text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.dark\\:ring-offset-slate-950{--tw-ring-offset-color:#020617}.dark\\:hover\\:bg-red-900\\/90:hover{background-color:rgba(127,29,29,.9)}.dark\\:hover\\:bg-slate-50\\/90:hover{background-color:rgba(248,250,252,.9)}.dark\\:hover\\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:hover\\:bg-slate-800\\/80:hover{background-color:rgba(30,41,59,.8)}.dark\\:hover\\:text-slate-50:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\\:focus\\:bg-slate-800:focus{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:focus\\:text-slate-50:focus{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\\:focus-visible\\:ring-slate-300:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:bg-slate-950[data-state=active]{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=open\\]\\:bg-slate-800[data-state=open]{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:text-slate-50[data-state=active]{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}}",useStyles=()=>{reactExports.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const u=document.createElement("style");u.setAttribute("data-styles","tscircuit-runframe"),u.textContent=styles,document.head.appendChild(u)},[])},CircuitJsonPreview=({code:m,onRunClicked:u=()=>{},tsxRunTriggerCount:h,errorMessage:g,circuitJsonKey:y="",circuitJson:_,showCodeTab:A=!1,codeTabContent:b,showJsonTab:S=!0,showImportAndFormatButtons:E=!0,className:T,headerClassName:w,leftHeaderContent:C,readOnly:M,isStreaming:R,onToggleFullScreen:P,isFullScreen:L,isRunningCode:I,hasCodeChangedSinceLastRun:F,onCodeChange:N,onDtsChange:O,manualEditsFileContent:U,onManualEditsFileContentChange:W})=>{useStyles();const[H,Y]=reactExports.useState(A?"code":"pcb");return reactExports.useEffect(()=>{g&&Y("error")},[g]),reactExports.useEffect(()=>{H==="code"&&_&&!g&&Y("pcb")},[_]),jsxRuntimeExports.jsx("div",{className:cn("flex flex-col relative",T),children:jsxRuntimeExports.jsx("div",{className:"md:sticky md:top-2",children:jsxRuntimeExports.jsxs(Tabs,{value:H,onValueChange:Y,className:"flex-grow flex flex-col p-2",children:[jsxRuntimeExports.jsxs("div",{className:cn("flex items-center gap-2",w),children:[C,C&&jsxRuntimeExports.jsx("div",{className:"flex-grow"}),!C&&jsxRuntimeExports.jsx("div",{className:"flex-grow"}),jsxRuntimeExports.jsxs(TabsList,{children:[A&&jsxRuntimeExports.jsx(TabsTrigger,{value:"code",children:"Code"}),jsxRuntimeExports.jsxs(TabsTrigger,{value:"pcb",className:"whitespace-nowrap",children:[_&&jsxRuntimeExports.jsx("span",{className:cn("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",F?"bg-gray-500":"bg-blue-500")}),"PCB"]}),jsxRuntimeExports.jsxs(TabsTrigger,{value:"schematic",className:"whitespace-nowrap",children:[_&&jsxRuntimeExports.jsx("span",{className:cn("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",F?"bg-gray-500":"bg-blue-500")}),"Schematic"]}),jsxRuntimeExports.jsxs(TabsTrigger,{value:"cad",children:[_&&jsxRuntimeExports.jsx("span",{className:cn("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",F?"bg-gray-500":"bg-blue-500")}),"3D"]}),jsxRuntimeExports.jsxs(DropdownMenu,{children:[jsxRuntimeExports.jsx(DropdownMenuTrigger,{asChild:!0,children:jsxRuntimeExports.jsxs("div",{className:"whitespace-nowrap p-2 mr-1 cursor-pointer relative",children:[jsxRuntimeExports.jsx(Ellipsis,{className:"w-4 h-4"}),g&&jsxRuntimeExports.jsx("span",{className:"inline-flex absolute top-[6px] right-[4px] items-center justify-center w-1 h-1 ml-2 text-[8px] font-bold text-white bg-red-500 rounded-full"})]})}),jsxRuntimeExports.jsxs(DropdownMenuContent,{className:"*:text-xs",children:[jsxRuntimeExports.jsxs(DropdownMenuItem,{onSelect:()=>Y("error"),className:"flex",children:[jsxRuntimeExports.jsx(Check,{className:cn("w-3 h-3 mr-2",H!=="error"&&"invisible")}),jsxRuntimeExports.jsx("div",{className:"flex-grow",children:"Errors"}),g&&jsxRuntimeExports.jsx("span",{className:"inline-flex items-center justify-center w-3 h-3 ml-2 text-[8px] font-bold text-white bg-red-500 rounded-full",children:"1"})]}),jsxRuntimeExports.jsxs(DropdownMenuItem,{onSelect:()=>Y("bom"),children:[jsxRuntimeExports.jsx(Check,{className:cn("w-3 h-3 mr-2",H!=="bom"&&"invisible")}),"Bill of Materials"]}),jsxRuntimeExports.jsxs(DropdownMenuItem,{onSelect:()=>Y("circuitjson"),children:[jsxRuntimeExports.jsx(Check,{className:cn("w-3 h-3 mr-2",H!=="circuitjson"&&"invisible")}),"JSON"]})]})]})]}),P&&jsxRuntimeExports.jsx(Button,{onClick:P,variant:"ghost",children:L?jsxRuntimeExports.jsx(Minimize,{size:16}):jsxRuntimeExports.jsx(Fullscreen,{size:16})})]}),A&&jsxRuntimeExports.jsx(TabsContent,{value:"code",className:"flex-grow overflow-hidden",children:jsxRuntimeExports.jsx("div",{className:"h-full",children:b})}),jsxRuntimeExports.jsx(TabsContent,{value:"pcb",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-hidden",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading PCB viewer"}),children:_?jsxRuntimeExports.jsx(PcbViewerWithContainerHeight,{soup:_,containerClassName:cn("h-full w-full",L?"min-h-[calc(100vh-240px)]":"min-h-[620px]")},y):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"schematic",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading Schematic"}),children:_?jsxRuntimeExports.jsx(SchematicViewer,{circuitJson:_,containerStyle:{height:"100%"}}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"cad",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{FallbackComponent:ErrorFallback,children:_?jsxRuntimeExports.jsx(distExports$2.CadViewer,{soup:_}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"bom",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading BOM"}),children:_?jsxRuntimeExports.jsx(BomTable,{circuitJson:_}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"circuitjson",children:jsxRuntimeExports.jsx("div",{className:cn("overflow-auto",L?"h-[calc(100vh-96px)]":"h-[620px]"),children:jsxRuntimeExports.jsx(ErrorBoundary,{fallback:jsxRuntimeExports.jsx("div",{children:"Error loading JSON viewer"}),children:_?jsxRuntimeExports.jsx(CircuitJsonTableViewer,{elements:_}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})})}),jsxRuntimeExports.jsx(TabsContent,{value:"error",children:_||g?jsxRuntimeExports.jsx(ErrorTabContent,{code:m,errorMessage:g}):jsxRuntimeExports.jsx(PreviewEmptyState,{onRunClicked:u})})]})})})},root=clientExports.createRoot(document.getElementById("root"));root.render(jsxRuntimeExports.jsx(React.StrictMode,{children:jsxRuntimeExports.jsx("div",{style:{width:"100vw",height:"100vh"},children:jsxRuntimeExports.jsx(CircuitJsonPreview,{circuitJson:[]})})}));export{Soup as S,any_soup_element as a,stringify as b,compose as c,applyToPoint as d,toString as e,fromTriangles as f,symbols_index_default as g,rotate as r,scale$2 as s,translate as t};
|