@tscircuit/runframe 0.0.725 → 0.0.727
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/standalone.min.js
CHANGED
|
@@ -13080,7 +13080,7 @@ ${l.join(`
|
|
|
13080
13080
|
`)),i.indexOf(`\\
|
|
13081
13081
|
`)!==-1&&(i=i.replace(/\\\n/g,""));const t=i.split(`
|
|
13082
13082
|
`);let n="",r="",o=0,a=[];const s=typeof"".trimLeft=="function";for(let u=0,d=t.length;u<d;u++)if(n=t[u],n=s?n.trimLeft():n.trim(),o=n.length,o!==0&&(r=n.charAt(0),r!=="#"))if(r==="v"){const f=n.split(/\s+/);switch(f[0]){case"v":e.vertices.push(parseFloat(f[1]),parseFloat(f[2]),parseFloat(f[3])),f.length>=7?e.colors.push(parseFloat(f[4]),parseFloat(f[5]),parseFloat(f[6])):e.colors.push(void 0,void 0,void 0);break;case"vn":e.normals.push(parseFloat(f[1]),parseFloat(f[2]),parseFloat(f[3]));break;case"vt":e.uvs.push(parseFloat(f[1]),parseFloat(f[2]));break}}else if(r==="f"){const h=n.substr(1).trim().split(/\s+/),g=[];for(let v=0,_=h.length;v<_;v++){const x=h[v];if(x.length>0){const S=x.split("/");g.push(S)}}const y=g[0];for(let v=1,_=g.length-1;v<_;v++){const x=g[v],S=g[v+1];e.addFace(y[0],x[0],S[0],y[1],x[1],S[1],y[2],x[2],S[2])}}else if(r==="l"){const f=n.substring(1).trim().split(" ");let h=[];const g=[];if(n.indexOf("/")===-1)h=f;else for(let y=0,v=f.length;y<v;y++){const _=f[y].split("/");_[0]!==""&&h.push(_[0]),_[1]!==""&&g.push(_[1])}e.addLineGeometry(h,g)}else if(r==="p"){const h=n.substr(1).trim().split(" ");e.addPointGeometry(h)}else if((a=$An.exec(n))!==null){const f=(" "+a[0].substr(1).trim()).substr(1);e.startObject(f)}else if(tfn.test(n))e.object.startMaterial(n.substring(7).trim(),e.materialLibraries);else if(efn.test(n))e.materialLibraries.push(n.substring(7).trim());else if(nfn.test(n))console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');else if(r==="s"){if(a=n.split(" "),a.length>1){const h=a[1].trim().toLowerCase();e.object.smooth=h!=="0"&&h!=="off"}else e.object.smooth=!0;const f=e.object.currentMaterial();f&&(f.smooth=e.object.smooth)}else{if(n==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+n+'"')}e.finalize();const l=new T4;if(l.materialLibraries=[].concat(e.materialLibraries),!(e.objects.length===1&&e.objects[0].geometry.vertices.length===0)===!0)for(let u=0,d=e.objects.length;u<d;u++){const f=e.objects[u],h=f.geometry,g=f.materials,y=h.type==="Line",v=h.type==="Points";let _=!1;if(h.vertices.length===0)continue;const x=new Jp;x.setAttribute("position",new Nd(h.vertices,3)),h.normals.length>0&&x.setAttribute("normal",new Nd(h.normals,3)),h.colors.length>0&&(_=!0,x.setAttribute("color",new Nd(h.colors,3))),h.hasUVIndices===!0&&x.setAttribute("uv",new Nd(h.uvs,2));const S=[];for(let z=0,U=g.length;z<U;z++){const H=g[z],k=H.name+"_"+H.smooth+"_"+_;let j=e.materials[k];if(this.materials!==null){if(j=this.materials.create(H.name),y&&j&&!(j instanceof Z9)){const G=new Z9;Sx.prototype.copy.call(G,j),G.color.copy(j.color),j=G}else if(v&&j&&!(j instanceof G4)){const G=new G4({size:10,sizeAttenuation:!1});Sx.prototype.copy.call(G,j),G.color.copy(j.color),G.map=j.map,j=G}}j===void 0&&(y?j=new Z9:v?j=new G4({size:1,sizeAttenuation:!1}):j=new wz,j.name=H.name,j.flatShading=!H.smooth,j.vertexColors=_,e.materials[k]=j),S.push(j)}let M;if(S.length>1){for(let z=0,U=g.length;z<U;z++){const H=g[z];x.addGroup(H.groupStart,H.groupCount,z)}y?M=new S2(x,S):v?M=new IT(x,S):M=new z1(x,S)}else y?M=new S2(x,S[0]):v?M=new IT(x,S[0]):M=new z1(x,S[0]);M.name=f.name,l.add(M)}else if(e.vertices.length>0){const u=new G4({size:1,sizeAttenuation:!1}),d=new Jp;d.setAttribute("position",new Nd(e.vertices,3)),e.colors.length>0&&e.colors[0]!==void 0&&(d.setAttribute("color",new Nd(e.colors,3)),u.vertexColors=!0);const f=new IT(d,u);l.add(f)}return l}};typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function ofn(i){const[e,t]=rt.useState(null);return rt.useEffect(()=>{if(!i)return;const n=i.replace(/&cachebust_origin=$/,""),r=window.TSCIRCUIT_OBJ_LOADER_CACHE;let o=!1;async function a(){var l;try{const c=await fetch(n);if(!c.ok)throw new Error(`Failed to fetch "${n}": ${c.status} ${c.statusText}`);const u=await c.text(),d=(l=u.match(/newmtl[\s\S]*?endmtl/g))==null?void 0:l.join(`
|
|
13083
|
-
`).replace(/d 0\./g,"d 1."),f=u.replace(/newmtl[\s\S]*?endmtl/g,""),h=new XAn;h.setMaterialOptions({invertTrProperty:!0});const g=h.parse(d.replace(/Kd\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/g,"Kd $2 $2 $2"),"test.mtl"),y=new rfn;return y.setMaterials(g),y.parse(f)}catch(c){return c}}function s(){if(r.has(n)){const c=r.get(n);return c.result?Promise.resolve(c.result.clone()):c.promise.then(u=>u instanceof Error?u:u.clone())}const l=a().then(c=>(c instanceof Error||r.set(n,{...r.get(n),result:c}),c));return r.set(n,{promise:l,result:null}),l}return s().then(l=>{o||t(l)}).catch(l=>{console.error(l)}),()=>{o=!0}},[i]),e}function afn({url:i,position:e,rotation:t,onHover:n,onUnhover:r,isHovered:o}){const a=ofn(i);if(!a)return je.jsx(BY,{isHovered:o,onHover:n,onUnhover:r,children:je.jsxs("mesh",{position:e,children:[je.jsx("boxGeometry",{args:[.5,.5,.5]}),je.jsx("meshStandardMaterial",{transparent:!0,color:"red",opacity:.25})]})});if(a instanceof Error)throw a;return je.jsx(BY,{isHovered:o,onHover:n,onUnhover:r,children:je.jsx("primitive",{rotation:t,position:e,object:a})})}var sfn=sC(VXe()),WXe=({jscadPlan:i,positionOffset:e,rotationOffset:t,onHover:n,onUnhover:r,isHovered:o})=>{const{threeGeom:a,material:s}=rt.useMemo(()=>{const l=V6e.executeJscadOperations(sfn.default,i),c=iWt(l),u=new BR({vertexColors:!0,side:mE});return{threeGeom:c,material:u}},[i]);return rt.useMemo(()=>{if(o){const l=new Jc(s.color.getHex());s.emissive.copy(l),s.emissive.setRGB(0,0,1),s.emissiveIntensity=.2}else s.emissiveIntensity=0},[o,s]),a?je.jsx(BY,{isHovered:o,onHover:n,onUnhover:r,position:e,children:je.jsx("mesh",{geometry:a,material:s,position:e,rotation:t})}):null},{createJSCADRoot:lfn}=AYt(V6e.jscadPlanner),cfn=({positionOffset:i,footprint:e,rotationOffset:t,onHover:n,onUnhover:r,isHovered:o})=>{const a=rt.useMemo(()=>{if(!e)return null;const s=[];return lfn(s).render(je.jsx(Mon,{footprint:e})),s},[e]);return a?je.jsx(je.Fragment,{children:a.map((s,l)=>je.jsx(WXe,{positionOffset:i,rotationOffset:t,jscadPlan:s,onHover:n,onUnhover:r,isHovered:o},l))}):null},ufn=(...i)=>i,qXe=({cad_component:i,circuitJson:e})=>{const[t,n]=rt.useState(!1),[r,o]=rt.useState(null),a=rt.useCallback(f=>{f!=null&&f.mousePosition?(n(!0),o(f.mousePosition)):(n(!1),o(null))},[]),s=rt.useCallback(()=>{n(!1),o(null)},[]),l=rt.useMemo(()=>{var f;return(f=Nv(e).source_component.getUsing({source_component_id:i.source_component_id}))==null?void 0:f.name},[e,i.source_component_id]),c=i.model_obj_url??i.model_stl_url,u=i.rotation?ufn(i.rotation.x*Math.PI/180,i.rotation.y*Math.PI/180,i.rotation.z*Math.PI/180):void 0;let d=null;return c?d=je.jsx(afn,{url:c,position:i.position?[i.position.x,i.position.y,i.position.z]:void 0,rotation:u,onHover:a,onUnhover:s,isHovered:t},i.cad_component_id):i.model_jscad?d=je.jsx(WXe,{jscadPlan:i.model_jscad,rotationOffset:u,onHover:a,onUnhover:s,isHovered:t},i.cad_component_id):i.footprinter_string&&(d=je.jsx(cfn,{positionOffset:i.position?[i.position.x,i.position.y,i.position.z]:void 0,rotationOffset:u,footprint:i.footprinter_string,onHover:a,onUnhover:s,isHovered:t})),je.jsxs(je.Fragment,{children:[d,t&&r?je.jsx(PWe,{position:r,style:{fontFamily:"sans-serif",transform:"translate3d(1rem, 1rem, 0)",backgroundColor:"white",padding:"5px",borderRadius:"3px",pointerEvents:"none",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none"},children:l??"<unknown>"}):null]})},dfn={version:"0.0.302"};typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new vb(0,0,0));function Afn(i,e){const t=new Fx().setFromEuler(new vb(i.x,i.y,i.z)),n=new vi(0,0,1);return n.applyQuaternion(t),n.multiplyScalar(e)}var ffn=({})=>{const i=rt.useRef();return rt.useRef({lastRotation:new vb}),U6((e,t)=>{if(!i.current)return;const n=window.TSCI_MAIN_CAMERA_ROTATION,r=Afn(n,2);e.camera.position.copy(r),e.camera.lookAt(0,0,0)}),je.jsxs("mesh",{ref:i,rotation:[Math.PI/2,0,0],children:[je.jsx("boxGeometry",{args:[1,1,1]}),je.jsx("meshStandardMaterial",{color:"white"}),je.jsx(fM,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),je.jsx(fM,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),je.jsx(fM,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),je.jsx(fM,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),je.jsx(fM,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),je.jsx(fM,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),je.jsx("lineSegments",{args:[new jre(new kw(1,1,1))],material:new Z9({color:0,linewidth:2})})]})},hfn=()=>(U6(({camera:i})=>{window.TSCI_MAIN_CAMERA_ROTATION=i.rotation}),je.jsx(je.Fragment,{})),XXe=rt.forwardRef(({children:i,initialCameraPosition:e=[5,5,5],autoRotateDisabled:t,clickToInteractEnabled:n=!1,boardDimensions:r},o)=>{const[a,s]=rt.useState(!n),l=rt.useMemo(()=>{if(!r)return 10;const c=r.width??0,u=r.height??0,f=Math.max(c,u)*1.5;return f>10?f:10},[r]);return je.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},children:[je.jsx("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:je.jsxs(DWe,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[je.jsx("ambientLight",{intensity:Math.PI/2}),je.jsx(ffn,{})]})}),je.jsxs(DWe,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:e},children:[je.jsx(hfn,{}),a&&je.jsx(Gsn,{autoRotate:!t,autoRotateSpeed:1}),je.jsx("ambientLight",{intensity:Math.PI/2}),je.jsx("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),je.jsx(zsn,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:l,args:[l,l]}),je.jsx("object3D",{ref:o,children:i})]}),je.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:["@",dfn.version]}),n&&!a&&je.jsx("button",{type:"button",onClick:()=>s(!0),onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&s(!0)},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:10,display:"flex",alignItems:"center",justifyContent:"center"},children:je.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",fontFamily:"sans-serif",pointerEvents:"none"},children:"Click to Interact"})})]})}),ZXe=i=>rt.useMemo(()=>{if(!i)return[];const e=new eTt;return e.add(i),e.render(),e.getCircuitJson()},[i]);function pfn(i){return new Promise((e,t)=>{const n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=t,n.readAsDataURL(i)})}var gfn=i=>{const[e,t]=rt.useState([]),[n,r]=rt.useState(!0);return rt.useEffect(()=>{if(!i)return;(async()=>{r(!0);const s=(Array.isArray(i)?i:[i]).map(async l=>{const c=tln.serialize({binary:!0},[l]),u=new Blob(c);return{stlUrl:await pfn(u),color:l.color}});try{const l=await Promise.all(s);t(l)}catch(l){console.error("Error generating STLs:",l),t([])}finally{r(!1)}})()},[i]),{stls:e,loading:n}},mfn=sC(lD()),yfn=sC(J6()),I_=.01,rx={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255],fr1Copper:[.8,.4,.2],fr1CopperSolderWithMask:[.9,.6,.2]},C5=.001,cS=32,vfn=.035,SY=50,M0e={fr1:rx.fr1Copper,fr4:rx.fr4Green},$Xe={fr1:rx.fr1CopperSolderWithMask,fr4:rx.fr4GreenSolderWithMask},_fn=sC(CY()),Ifn=sC(lD()),Cfn=sC(bY()),eZe=i=>{let e=0;for(let n=0;n<i.length;n++){const r=(n+1)%i.length;e+=i[n][0]*i[r][1],e-=i[r][0]*i[n][1]}return e/2<=0},tZe=(i,e=1.2)=>{const{outline:t}=i;let n=t.map(a=>[a.x,a.y]);eZe(n)&&(n=n.reverse());const r=(0,Ifn.polygon)({points:n});let o=(0,_fn.extrudeLinear)({height:e},r);return o=(0,Cfn.translate)([0,0,-e/2],o),o},xfn=i=>{const e=Nv(i).pcb_board.list()[0];if(!e)return console.warn("No pcb_board found for simplified geometry"),[];let t;const n=1.2;e.outline&&e.outline.length>0?t=tZe({outline:e.outline},n):t=(0,mfn.cuboid)({size:[e.width,e.height,n],center:[e.center.x,e.center.y,0]});const r=M0e[e.material]??rx.fr4Green;return[(0,yfn.colorize)(r,t)]},mM=sC(bY()),EE=sC(lD()),cD=sC(J6()),yM=sC(x0e()),j1=sC(lD()),wY=sC(J6()),e2=sC(x0e()),VC=.05,nZe=(i,e)=>{if(i.shape||(i.shape="circle"),i.shape==="circle")return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)((0,j1.cylinder)({center:[i.x,i.y,0],radius:i.hole_diameter/2,height:e.pcbThickness}),(0,j1.cylinder)({center:[i.x,i.y,e.pcbThickness/2+VC/2+I_],radius:i.outer_diameter/2,height:VC}),(0,j1.cylinder)({center:[i.x,i.y,-e.pcbThickness/2-VC/2-I_],radius:i.outer_diameter/2,height:VC})),(0,j1.cylinder)({center:[i.x,i.y,0],radius:i.hole_diameter/2-I_,height:1.5})));if(i.shape==="circular_hole_with_rect_pad"){const t=i.rect_pad_width||i.hole_diameter,n=i.rect_pad_height||i.hole_diameter;return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)((0,j1.cuboid)({center:[i.x,i.y,1.2/2],size:[t,n,VC]}),(0,j1.cuboid)({center:[i.x,i.y,-1.2/2],size:[t,n,VC]}),(0,j1.cylinder)({center:[i.x,i.y,0],radius:i.hole_diameter/2,height:1.2})),(0,j1.cylinder)({center:[i.x,i.y,0],radius:Math.max(i.hole_diameter/2-I_,.01),height:1.5})))}if(i.shape==="pill"){const t=i.hole_height>i.hole_width,n=t?i.hole_height:i.hole_width,r=t?i.hole_width:i.hole_height,o=t?i.outer_height||r+.2:i.outer_width||n+.2,a=t?i.outer_width||n+.2:i.outer_height||r+.2,s=r/2,l=a/2,c=Math.abs(n-r),u=Math.abs(o-a),d=(0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r,c,e.pcbThickness]:[c,r,e.pcbThickness]}),f=(0,j1.cylinder)({center:t?[i.x,i.y-c/2,0]:[i.x-c/2,i.y,0],radius:s,height:e.pcbThickness}),h=(0,j1.cylinder)({center:t?[i.x,i.y+c/2,0]:[i.x+c/2,i.y,0],radius:s,height:e.pcbThickness}),g=(0,e2.union)(d,f,h),y=e.pcbThickness/2+VC/2+I_,v=(0,j1.cuboid)({center:[i.x,i.y,y],size:t?[a,u,VC]:[u,a,VC]}),_=(0,j1.cylinder)({center:t?[i.x,i.y-u/2,y]:[i.x-u/2,i.y,y],radius:l,height:VC}),x=(0,j1.cylinder)({center:t?[i.x,i.y+u/2,y]:[i.x+u/2,i.y,y],radius:l,height:VC}),S=(0,e2.union)(v,_,x),M=-e.pcbThickness/2-VC/2-I_,z=(0,j1.cuboid)({center:[i.x,i.y,M],size:t?[a,u,VC]:[u,a,VC]}),U=(0,j1.cylinder)({center:t?[i.x,i.y-u/2,M]:[i.x-u/2,i.y,M],radius:l,height:VC}),H=(0,j1.cylinder)({center:t?[i.x,i.y+u/2,M]:[i.x+u/2,i.y,M],radius:l,height:VC}),k=(0,e2.union)(z,U,H),j=(0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r-2*I_,c,e.pcbThickness+2*I_]:[c,r-2*I_,e.pcbThickness+2*I_]}),G=(0,j1.cylinder)({center:t?[i.x,i.y-c/2,0]:[i.x-c/2,i.y,0],radius:s-I_,height:e.pcbThickness+2*I_}),ee=(0,j1.cylinder)({center:t?[i.x,i.y+c/2,0]:[i.x+c/2,i.y,0],radius:s-I_,height:e.pcbThickness+2*I_}),K=(0,e2.union)(j,G,ee);return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)(g,S,k),K))}if(i.shape==="pill_hole_with_rect_pad"){const t=i.hole_height>i.hole_width,n=t?i.hole_height:i.hole_width,r=t?i.hole_width:i.hole_height,o=r/2,a=Math.abs(n-r),s=i.rect_pad_width||n+.2,l=i.rect_pad_height||r+.2,c=(0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r,a,1.2]:[a,r,1.2]}),u=(0,j1.cylinder)({center:t?[i.x,i.y-a/2,0]:[i.x-a/2,i.y,0],radius:o,height:1.2}),d=(0,j1.cylinder)({center:t?[i.x,i.y+a/2,0]:[i.x+a/2,i.y,0],radius:o,height:1.2}),f=(0,j1.cuboid)({center:[i.x,i.y,1.2/2],size:[s,l,VC]}),h=(0,j1.cuboid)({center:[i.x,i.y,-1.2/2],size:[s,l,VC]}),g=(0,e2.union)((0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r-VC,a,1.5]:[a,r-VC,1.5]}),(0,j1.cylinder)({center:t?[i.x,i.y-a/2,0]:[i.x-a/2,i.y,0],radius:o-VC,height:1.5}),(0,j1.cylinder)({center:t?[i.x,i.y+a/2,0]:[i.x+a/2,i.y,0],radius:o-VC,height:1.5}));return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)(c,u,d,f,h),g))}else throw new Error(`Unsupported plated hole shape: ${i.shape}`)},MY=sC(CY()),iZe=sC(b0e()),Efn=sC(m0e());function rZe(i,e){return Array.isArray(e)?[i.a*e[0]+i.c*e[1]+i.e,i.b*e[0]+i.d*e[1]+i.f]:{x:i.a*e.x+i.c*e.y+i.e,y:i.b*e.x+i.d*e.y+i.f}}function Xw(i,e=0){return{a:1,c:0,e:i,b:0,d:1,f:e}}function oZe(...i){i=Array.isArray(i[0])?i[0]:i;const e=(t,n)=>({a:t.a*n.a+t.c*n.b,c:t.a*n.c+t.c*n.d,e:t.a*n.e+t.c*n.f+t.e,b:t.b*n.a+t.d*n.b,d:t.b*n.c+t.d*n.d,f:t.b*n.e+t.d*n.f+t.f});switch(i.length){case 0:throw new Error("no matrices provided");case 1:return i[0];case 2:return e(i[0],i[1]);default:{const[t,n,...r]=i,o=e(t,n);return oZe(o,...r)}}}function aZe(...i){return oZe(...i)}var{cos:bfn,sin:Bfn}=Math;function sZe(i,e,t){const n=bfn(i),r=Bfn(i);return{a:n,c:-r,e:0,b:r,d:n,f:0}}function Sfn(i,e){function t(){this.constructor=i}t.prototype=e.prototype,i.prototype=new t}function QY(i,e,t,n){var r=Error.call(this,i);return Object.setPrototypeOf&&Object.setPrototypeOf(r,QY.prototype),r.expected=e,r.found=t,r.location=n,r.name="SyntaxError",r}Sfn(QY,Error);function Q0e(i,e,t){return t=t||" ",i.length>e?i:(e-=i.length,t+=t.repeat(e),i+t.slice(0,e))}QY.prototype.format=function(i){var e="Error: "+this.message;if(this.location){var t=null,n;for(n=0;n<i.length;n++)if(i[n].source===this.location.source){t=i[n].text.split(/\r\n|\n|\r/g);break}var r=this.location.start,o=this.location.source&&typeof this.location.source.offset=="function"?this.location.source.offset(r):r,a=this.location.source+":"+o.line+":"+o.column;if(t){var s=this.location.end,l=Q0e("",o.line.toString().length," "),c=t[r.line-1],u=r.line===s.line?s.column:c.length+1,d=u-r.column||1;e+=`
|
|
13083
|
+
`).replace(/d 0\./g,"d 1."),f=u.replace(/newmtl[\s\S]*?endmtl/g,""),h=new XAn;h.setMaterialOptions({invertTrProperty:!0});const g=h.parse(d.replace(/Kd\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/g,"Kd $2 $2 $2"),"test.mtl"),y=new rfn;return y.setMaterials(g),y.parse(f)}catch(c){return c}}function s(){if(r.has(n)){const c=r.get(n);return c.result?Promise.resolve(c.result.clone()):c.promise.then(u=>u instanceof Error?u:u.clone())}const l=a().then(c=>(c instanceof Error||r.set(n,{...r.get(n),result:c}),c));return r.set(n,{promise:l,result:null}),l}return s().then(l=>{o||t(l)}).catch(l=>{console.error(l)}),()=>{o=!0}},[i]),e}function afn({url:i,position:e,rotation:t,onHover:n,onUnhover:r,isHovered:o}){const a=ofn(i);if(!a)return je.jsx(BY,{isHovered:o,onHover:n,onUnhover:r,children:je.jsxs("mesh",{position:e,children:[je.jsx("boxGeometry",{args:[.5,.5,.5]}),je.jsx("meshStandardMaterial",{transparent:!0,color:"red",opacity:.25})]})});if(a instanceof Error)throw a;return je.jsx(BY,{isHovered:o,onHover:n,onUnhover:r,children:je.jsx("primitive",{rotation:t,position:e,object:a})})}var sfn=sC(VXe()),WXe=({jscadPlan:i,positionOffset:e,rotationOffset:t,onHover:n,onUnhover:r,isHovered:o})=>{const{threeGeom:a,material:s}=rt.useMemo(()=>{const l=V6e.executeJscadOperations(sfn.default,i),c=iWt(l),u=new BR({vertexColors:!0,side:mE});return{threeGeom:c,material:u}},[i]);return rt.useMemo(()=>{if(o){const l=new Jc(s.color.getHex());s.emissive.copy(l),s.emissive.setRGB(0,0,1),s.emissiveIntensity=.2}else s.emissiveIntensity=0},[o,s]),a?je.jsx(BY,{isHovered:o,onHover:n,onUnhover:r,position:e,children:je.jsx("mesh",{geometry:a,material:s,position:e,rotation:t})}):null},{createJSCADRoot:lfn}=AYt(V6e.jscadPlanner),cfn=({positionOffset:i,footprint:e,rotationOffset:t,onHover:n,onUnhover:r,isHovered:o})=>{const a=rt.useMemo(()=>{if(!e)return null;const s=[];return lfn(s).render(je.jsx(Mon,{footprint:e})),s},[e]);return a?je.jsx(je.Fragment,{children:a.map((s,l)=>je.jsx(WXe,{positionOffset:i,rotationOffset:t,jscadPlan:s,onHover:n,onUnhover:r,isHovered:o},l))}):null},ufn=(...i)=>i,qXe=({cad_component:i,circuitJson:e})=>{const[t,n]=rt.useState(!1),[r,o]=rt.useState(null),a=rt.useCallback(f=>{f!=null&&f.mousePosition?(n(!0),o(f.mousePosition)):(n(!1),o(null))},[]),s=rt.useCallback(()=>{n(!1),o(null)},[]),l=rt.useMemo(()=>{var f;return(f=Nv(e).source_component.getUsing({source_component_id:i.source_component_id}))==null?void 0:f.name},[e,i.source_component_id]),c=i.model_obj_url??i.model_stl_url,u=i.rotation?ufn(i.rotation.x*Math.PI/180,i.rotation.y*Math.PI/180,i.rotation.z*Math.PI/180):void 0;let d=null;return c?d=je.jsx(afn,{url:c,position:i.position?[i.position.x,i.position.y,i.position.z]:void 0,rotation:u,onHover:a,onUnhover:s,isHovered:t},i.cad_component_id):i.model_jscad?d=je.jsx(WXe,{jscadPlan:i.model_jscad,rotationOffset:u,onHover:a,onUnhover:s,isHovered:t},i.cad_component_id):i.footprinter_string&&(d=je.jsx(cfn,{positionOffset:i.position?[i.position.x,i.position.y,i.position.z]:void 0,rotationOffset:u,footprint:i.footprinter_string,onHover:a,onUnhover:s,isHovered:t})),je.jsxs(je.Fragment,{children:[d,t&&r?je.jsx(PWe,{position:r,style:{fontFamily:"sans-serif",transform:"translate3d(1rem, 1rem, 0)",backgroundColor:"white",padding:"5px",borderRadius:"3px",pointerEvents:"none",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none"},children:l??"<unknown>"}):null]})},dfn={version:"0.0.303"};typeof window<"u"&&(window.TSCI_MAIN_CAMERA_ROTATION=new vb(0,0,0));function Afn(i,e){const t=new Fx().setFromEuler(new vb(i.x,i.y,i.z)),n=new vi(0,0,1);return n.applyQuaternion(t),n.multiplyScalar(e)}var ffn=({})=>{const i=rt.useRef();return rt.useRef({lastRotation:new vb}),U6((e,t)=>{if(!i.current)return;const n=window.TSCI_MAIN_CAMERA_ROTATION,r=Afn(n,2);e.camera.position.copy(r),e.camera.lookAt(0,0,0)}),je.jsxs("mesh",{ref:i,rotation:[Math.PI/2,0,0],children:[je.jsx("boxGeometry",{args:[1,1,1]}),je.jsx("meshStandardMaterial",{color:"white"}),je.jsx(fM,{position:[0,0,.51],fontSize:.25,color:"black",children:"Front"}),je.jsx(fM,{position:[0,0,-.51],fontSize:.25,color:"black",rotation:[0,Math.PI,0],children:"Back"}),je.jsx(fM,{position:[.51,0,0],fontSize:.25,color:"black",rotation:[0,Math.PI/2,0],children:"Right"}),je.jsx(fM,{position:[-.51,0,0],fontSize:.25,color:"black",rotation:[0,-Math.PI/2,0],children:"Left"}),je.jsx(fM,{position:[0,.51,0],fontSize:.25,color:"black",rotation:[-Math.PI/2,0,0],children:"Top"}),je.jsx(fM,{position:[0,-.51,0],fontSize:.25,color:"black",rotation:[Math.PI/2,0,0],children:"Bottom"}),je.jsx("lineSegments",{args:[new jre(new kw(1,1,1))],material:new Z9({color:0,linewidth:2})})]})},hfn=()=>(U6(({camera:i})=>{window.TSCI_MAIN_CAMERA_ROTATION=i.rotation}),je.jsx(je.Fragment,{})),XXe=rt.forwardRef(({children:i,initialCameraPosition:e=[5,5,5],autoRotateDisabled:t,clickToInteractEnabled:n=!1,boardDimensions:r},o)=>{const[a,s]=rt.useState(!n),l=rt.useMemo(()=>{if(!r)return 10;const c=r.width??0,u=r.height??0,f=Math.max(c,u)*1.5;return f>10?f:10},[r]);return je.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},children:[je.jsx("div",{style:{position:"absolute",top:0,left:0,width:120,height:120},children:je.jsxs(DWe,{camera:{up:[0,0,1],position:[1,1,1]},style:{zIndex:10},children:[je.jsx("ambientLight",{intensity:Math.PI/2}),je.jsx(ffn,{})]})}),je.jsxs(DWe,{scene:{up:[0,0,1]},camera:{up:[0,0,1],position:e},children:[je.jsx(hfn,{}),a&&je.jsx(Gsn,{autoRotate:!t,autoRotateSpeed:1}),je.jsx("ambientLight",{intensity:Math.PI/2}),je.jsx("pointLight",{position:[-10,-10,10],decay:0,intensity:Math.PI/4}),je.jsx(zsn,{rotation:[Math.PI/2,0,0],infiniteGrid:!0,cellSize:1,sectionSize:l,args:[l,l]}),je.jsx("object3D",{ref:o,children:i})]}),je.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:["@",dfn.version]}),n&&!a&&je.jsx("button",{type:"button",onClick:()=>s(!0),onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&s(!0)},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:10,display:"flex",alignItems:"center",justifyContent:"center"},children:je.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",fontFamily:"sans-serif",pointerEvents:"none"},children:"Click to Interact"})})]})}),ZXe=i=>rt.useMemo(()=>{if(!i)return[];const e=new eTt;return e.add(i),e.render(),e.getCircuitJson()},[i]);function pfn(i){return new Promise((e,t)=>{const n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=t,n.readAsDataURL(i)})}var gfn=i=>{const[e,t]=rt.useState([]),[n,r]=rt.useState(!0);return rt.useEffect(()=>{if(!i)return;(async()=>{r(!0);const s=(Array.isArray(i)?i:[i]).map(async l=>{const c=tln.serialize({binary:!0},[l]),u=new Blob(c);return{stlUrl:await pfn(u),color:l.color}});try{const l=await Promise.all(s);t(l)}catch(l){console.error("Error generating STLs:",l),t([])}finally{r(!1)}})()},[i]),{stls:e,loading:n}},mfn=sC(lD()),yfn=sC(J6()),I_=.01,rx={copper:[.9,.6,.2],fr4Green:[5/255,163/255,46/255],fr4GreenSolderWithMask:[0/255,152/255,19/255],fr1Copper:[.8,.4,.2],fr1CopperSolderWithMask:[.9,.6,.2]},C5=.001,cS=32,vfn=.035,SY=50,M0e={fr1:rx.fr1Copper,fr4:rx.fr4Green},$Xe={fr1:rx.fr1CopperSolderWithMask,fr4:rx.fr4GreenSolderWithMask},_fn=sC(CY()),Ifn=sC(lD()),Cfn=sC(bY()),eZe=i=>{let e=0;for(let n=0;n<i.length;n++){const r=(n+1)%i.length;e+=i[n][0]*i[r][1],e-=i[r][0]*i[n][1]}return e/2<=0},tZe=(i,e=1.2)=>{const{outline:t}=i;let n=t.map(a=>[a.x,a.y]);eZe(n)&&(n=n.reverse());const r=(0,Ifn.polygon)({points:n});let o=(0,_fn.extrudeLinear)({height:e},r);return o=(0,Cfn.translate)([0,0,-e/2],o),o},xfn=i=>{const e=Nv(i).pcb_board.list()[0];if(!e)return console.warn("No pcb_board found for simplified geometry"),[];let t;const n=1.2;e.outline&&e.outline.length>0?t=tZe({outline:e.outline},n):t=(0,mfn.cuboid)({size:[e.width,e.height,n],center:[e.center.x,e.center.y,0]});const r=M0e[e.material]??rx.fr4Green;return[(0,yfn.colorize)(r,t)]},mM=sC(bY()),EE=sC(lD()),cD=sC(J6()),yM=sC(x0e()),j1=sC(lD()),wY=sC(J6()),e2=sC(x0e()),VC=.05,nZe=(i,e)=>{if(i.shape||(i.shape="circle"),i.shape==="circle")return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)((0,j1.cylinder)({center:[i.x,i.y,0],radius:i.hole_diameter/2,height:e.pcbThickness}),(0,j1.cylinder)({center:[i.x,i.y,e.pcbThickness/2+VC/2+I_],radius:i.outer_diameter/2,height:VC}),(0,j1.cylinder)({center:[i.x,i.y,-e.pcbThickness/2-VC/2-I_],radius:i.outer_diameter/2,height:VC})),(0,j1.cylinder)({center:[i.x,i.y,0],radius:i.hole_diameter/2-I_,height:1.5})));if(i.shape==="circular_hole_with_rect_pad"){const t=i.rect_pad_width||i.hole_diameter,n=i.rect_pad_height||i.hole_diameter;return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)((0,j1.cuboid)({center:[i.x,i.y,1.2/2],size:[t,n,VC]}),(0,j1.cuboid)({center:[i.x,i.y,-1.2/2],size:[t,n,VC]}),(0,j1.cylinder)({center:[i.x,i.y,0],radius:i.hole_diameter/2,height:1.2})),(0,j1.cylinder)({center:[i.x,i.y,0],radius:Math.max(i.hole_diameter/2-I_,.01),height:1.5})))}if(i.shape==="pill"){const t=i.hole_height>i.hole_width,n=t?i.hole_height:i.hole_width,r=t?i.hole_width:i.hole_height,o=t?i.outer_height||r+.2:i.outer_width||n+.2,a=t?i.outer_width||n+.2:i.outer_height||r+.2,s=r/2,l=a/2,c=Math.abs(n-r),u=Math.abs(o-a),d=(0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r,c,e.pcbThickness]:[c,r,e.pcbThickness]}),f=(0,j1.cylinder)({center:t?[i.x,i.y-c/2,0]:[i.x-c/2,i.y,0],radius:s,height:e.pcbThickness}),h=(0,j1.cylinder)({center:t?[i.x,i.y+c/2,0]:[i.x+c/2,i.y,0],radius:s,height:e.pcbThickness}),g=(0,e2.union)(d,f,h),y=e.pcbThickness/2+VC/2+I_,v=(0,j1.cuboid)({center:[i.x,i.y,y],size:t?[a,u,VC]:[u,a,VC]}),_=(0,j1.cylinder)({center:t?[i.x,i.y-u/2,y]:[i.x-u/2,i.y,y],radius:l,height:VC}),x=(0,j1.cylinder)({center:t?[i.x,i.y+u/2,y]:[i.x+u/2,i.y,y],radius:l,height:VC}),S=(0,e2.union)(v,_,x),M=-e.pcbThickness/2-VC/2-I_,z=(0,j1.cuboid)({center:[i.x,i.y,M],size:t?[a,u,VC]:[u,a,VC]}),U=(0,j1.cylinder)({center:t?[i.x,i.y-u/2,M]:[i.x-u/2,i.y,M],radius:l,height:VC}),H=(0,j1.cylinder)({center:t?[i.x,i.y+u/2,M]:[i.x+u/2,i.y,M],radius:l,height:VC}),k=(0,e2.union)(z,U,H),j=(0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r-2*I_,c,e.pcbThickness+2*I_]:[c,r-2*I_,e.pcbThickness+2*I_]}),G=(0,j1.cylinder)({center:t?[i.x,i.y-c/2,0]:[i.x-c/2,i.y,0],radius:s-I_,height:e.pcbThickness+2*I_}),ee=(0,j1.cylinder)({center:t?[i.x,i.y+c/2,0]:[i.x+c/2,i.y,0],radius:s-I_,height:e.pcbThickness+2*I_}),K=(0,e2.union)(j,G,ee);return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)(g,S,k),K))}if(i.shape==="pill_hole_with_rect_pad"){const t=i.hole_height>i.hole_width,n=t?i.hole_height:i.hole_width,r=t?i.hole_width:i.hole_height,o=r/2,a=Math.abs(n-r),s=i.rect_pad_width||n+.2,l=i.rect_pad_height||r+.2,c=(0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r,a,1.2]:[a,r,1.2]}),u=(0,j1.cylinder)({center:t?[i.x,i.y-a/2,0]:[i.x-a/2,i.y,0],radius:o,height:1.2}),d=(0,j1.cylinder)({center:t?[i.x,i.y+a/2,0]:[i.x+a/2,i.y,0],radius:o,height:1.2}),f=(0,j1.cuboid)({center:[i.x,i.y,1.2/2],size:[s,l,VC]}),h=(0,j1.cuboid)({center:[i.x,i.y,-1.2/2],size:[s,l,VC]}),g=(0,e2.union)((0,j1.cuboid)({center:[i.x,i.y,0],size:t?[r-VC,a,1.5]:[a,r-VC,1.5]}),(0,j1.cylinder)({center:t?[i.x,i.y-a/2,0]:[i.x-a/2,i.y,0],radius:o-VC,height:1.5}),(0,j1.cylinder)({center:t?[i.x,i.y+a/2,0]:[i.x+a/2,i.y,0],radius:o-VC,height:1.5}));return(0,wY.colorize)(rx.copper,(0,e2.subtract)((0,e2.union)(c,u,d,f,h),g))}else throw new Error(`Unsupported plated hole shape: ${i.shape}`)},MY=sC(CY()),iZe=sC(b0e()),Efn=sC(m0e());function rZe(i,e){return Array.isArray(e)?[i.a*e[0]+i.c*e[1]+i.e,i.b*e[0]+i.d*e[1]+i.f]:{x:i.a*e.x+i.c*e.y+i.e,y:i.b*e.x+i.d*e.y+i.f}}function Xw(i,e=0){return{a:1,c:0,e:i,b:0,d:1,f:e}}function oZe(...i){i=Array.isArray(i[0])?i[0]:i;const e=(t,n)=>({a:t.a*n.a+t.c*n.b,c:t.a*n.c+t.c*n.d,e:t.a*n.e+t.c*n.f+t.e,b:t.b*n.a+t.d*n.b,d:t.b*n.c+t.d*n.d,f:t.b*n.e+t.d*n.f+t.f});switch(i.length){case 0:throw new Error("no matrices provided");case 1:return i[0];case 2:return e(i[0],i[1]);default:{const[t,n,...r]=i,o=e(t,n);return oZe(o,...r)}}}function aZe(...i){return oZe(...i)}var{cos:bfn,sin:Bfn}=Math;function sZe(i,e,t){const n=bfn(i),r=Bfn(i);return{a:n,c:-r,e:0,b:r,d:n,f:0}}function Sfn(i,e){function t(){this.constructor=i}t.prototype=e.prototype,i.prototype=new t}function QY(i,e,t,n){var r=Error.call(this,i);return Object.setPrototypeOf&&Object.setPrototypeOf(r,QY.prototype),r.expected=e,r.found=t,r.location=n,r.name="SyntaxError",r}Sfn(QY,Error);function Q0e(i,e,t){return t=t||" ",i.length>e?i:(e-=i.length,t+=t.repeat(e),i+t.slice(0,e))}QY.prototype.format=function(i){var e="Error: "+this.message;if(this.location){var t=null,n;for(n=0;n<i.length;n++)if(i[n].source===this.location.source){t=i[n].text.split(/\r\n|\n|\r/g);break}var r=this.location.start,o=this.location.source&&typeof this.location.source.offset=="function"?this.location.source.offset(r):r,a=this.location.source+":"+o.line+":"+o.column;if(t){var s=this.location.end,l=Q0e("",o.line.toString().length," "),c=t[r.line-1],u=r.line===s.line?s.column:c.length+1,d=u-r.column||1;e+=`
|
|
13084
13084
|
--> `+a+`
|
|
13085
13085
|
`+l+` |
|
|
13086
13086
|
`+o.line+" | "+c+`
|
|
@@ -13340,7 +13340,7 @@ ${z.type}: ${K}
|
|
|
13340
13340
|
50% { opacity: 0.2; }
|
|
13341
13341
|
100% { opacity: 0.6; }
|
|
13342
13342
|
}
|
|
13343
|
-
`,r.appendChild(S)}})}};o();const a=new MutationObserver(o);return a.observe(r,{childList:!0,subtree:!1,characterData:!1}),()=>{a.disconnect()}},[i,t,e,n])},Vyn=F1("schematic-viewer"),jyn=()=>{F1.enable("schematic-viewer*")},Kyn=Vyn,Jyn=i=>{const[e,t]=rt.useState(0),[n,r]=rt.useState(0);return rt.useEffect(()=>{if(!i.current)return;const o=()=>{var l;const s=(l=i.current)==null?void 0:l.getBoundingClientRect();t((s==null?void 0:s.width)||0),r((s==null?void 0:s.height)||0)};o();const a=new ResizeObserver(o);return a.observe(i.current),window.addEventListener("resize",o),()=>{a.disconnect(),window.removeEventListener("resize",o)}},[]),{containerWidth:e,containerHeight:n}},Wyn=Kyn.extend("useComponentDragging"),qyn=({onEditEvent:i,editEvents:e=[],circuitJson:t,cancelDrag:n,svgToScreenProjection:r,realToSvgProjection:o,enabled:a=!1,snapToGrid:s=!1})=>{const[l,c]=rt.useState(null),u=XA(o,r),d=rt.useRef(null),f=rt.useRef(null),h=rt.useRef(new Map);rt.useEffect(()=>{e.forEach(_=>{"edit_event_type"in _&&_.edit_event_type==="edit_schematic_component_location"&&!_.in_progress&&h.current.set(_.schematic_component_id,{..._.new_center})})},[e]);const g=rt.useCallback(_=>{if(!a)return;const S=_.target.closest('[data-circuit-json-type="schematic_component"]');if(!S)return;const M=S.getAttribute("data-schematic-component-id");if(!M)return;n&&n();const z=Nv(t).schematic_component.get(M);if(!z)return;d.current={x:_.clientX,y:_.clientY};let U;const H=h.current.get(M);if(H)U={...H};else{const j=$et({editEvents:e,schematic_component_id:M});U={x:z.center.x+j.x,y:z.center.y+j.y},h.current.set(M,{...U})}const k={edit_event_id:Math.random().toString(36).substr(2,9),edit_event_type:"edit_schematic_component_location",schematic_component_id:M,original_center:U,new_center:{...U},in_progress:!0,created_at:Date.now(),_element:S};f.current=k,c(k)},[n,a,t,e]),y=rt.useCallback(_=>{if(!f.current||!d.current)return;const x={x:_.clientX-d.current.x,y:_.clientY-d.current.y},S={x:x.x/u.a,y:x.y/u.d};let M={x:f.current.original_center.x+S.x,y:f.current.original_center.y+S.y};if(s){const U=H=>Math.round(H*10)/10;M={x:U(M.x),y:U(M.y)}}const z={...f.current,new_center:M};f.current=z,c(z)},[u,s]),v=rt.useCallback(()=>{if(!f.current)return;const _={...f.current,in_progress:!1};h.current.set(_.schematic_component_id,{..._.new_center}),Wyn("handleMouseUp calling onEditEvent with new edit event",{newEditEvent:_}),i&&i(_),f.current=null,d.current=null,c(null)},[i]);return rt.useEffect(()=>(window.addEventListener("mousemove",y),window.addEventListener("mouseup",v),()=>{window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",v)}),[y,v]),{handleMouseDown:g,isDragging:!!f.current,activeEditEvent:l}},Pge={schematicEditIcon:50,schematicGridIcon:49,clickToInteractOverlay:100},Xyn=({onClick:i,active:e})=>je.jsx("div",{onClick:i,style:{position:"absolute",top:"16px",right:"16px",backgroundColor:e?"#4CAF50":"#fff",color:e?"#fff":"#000",padding:"8px",borderRadius:"4px",cursor:"pointer",boxShadow:"0 2px 4px rgba(0,0,0,0.1)",display:"flex",alignItems:"center",gap:"4px",zIndex:Pge.schematicEditIcon},children:je.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[je.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),je.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})}),Zyn=({onClick:i,active:e})=>je.jsx("div",{onClick:i,style:{position:"absolute",top:"56px",right:"16px",backgroundColor:e?"#4CAF50":"#fff",color:e?"#fff":"#000",padding:"8px",borderRadius:"4px",cursor:"pointer",boxShadow:"0 2px 4px rgba(0,0,0,0.1)",display:"flex",alignItems:"center",gap:"4px",zIndex:Pge.schematicGridIcon},children:je.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:je.jsx("path",{d:"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z"})})}),$yn=({circuitJson:i,containerStyle:e,editEvents:t=[],onEditEvent:n,defaultEditMode:r=!1,debugGrid:o=!1,editingEnabled:a=!1,debug:s=!1,clickToInteractEnabled:l=!1,colorOverrides:c})=>{s&&jyn();const[u,d]=rt.useState(r),[f,h]=rt.useState(!0),[g,y]=rt.useState(!l),v=rt.useRef(null),_=rt.useRef(null),x=Ee=>{const Ge=Ee.touches[0];_.current={x:Ge.clientX,y:Ge.clientY}},S=Ee=>{const Ge=Ee.changedTouches[0],Ke=_.current;if(!Ke)return;const nt=Math.abs(Ge.clientX-Ke.x),lt=Math.abs(Ge.clientY-Ke.y);nt<10&<<10&&(Ee.preventDefault(),y(!0)),_.current=null},[M,z]=rt.useState([]),U=rt.useRef(i),H=Ee=>`${(Ee==null?void 0:Ee.length)||0}_${(Ee==null?void 0:Ee.editCount)||0}`;rt.useEffect(()=>{const Ee=H(i),Ge=H(U.current);Ee!==Ge&&(z([]),U.current=i)},[i]);const{ref:k,cancelDrag:j,transform:G}=Zet({onSetTransform(Ee){v.current&&(v.current.style.transform=ow(Ee))},enabled:g}),{containerWidth:ee,containerHeight:K}=Jyn(k),ie=rt.useMemo(()=>!ee||!K?"":Rge(i,{width:ee,height:K||720,grid:o?{cellSize:1,labelCells:!0}:void 0,colorOverrides:c}),[i,ee,K]),ce=rt.useMemo(()=>{const Ee=ie.match(/<svg[^>]*style="[^"]*background-color:\s*([^;\"]+)/i);return(Ee==null?void 0:Ee[1])??"transparent"},[ie]),ue=rt.useMemo(()=>{var Ge;if(!ie)return h1();const Ee=(Ge=ie.match(/data-real-to-screen-transform="([^"]+)"/))==null?void 0:Ge[1];try{return sX(Ee)}catch(Ke){return console.error(Ke),h1()}},[ie]),le=Ee=>{z(Ge=>[...Ge,Ee]),n&&n(Ee)},_e=rt.useMemo(()=>[...t,...M],[t,M]),{handleMouseDown:ye,isDragging:Qe,activeEditEvent:Me}=qyn({onEditEvent:le,cancelDrag:j,realToSvgProjection:ue,svgToScreenProjection:G,circuitJson:i,editEvents:_e,enabled:u&&g,snapToGrid:f});Hyn({svgDivRef:v,editEvents:_e,realToSvgProjection:ue,svgToScreenProjection:G,activeEditEvent:Me}),Yyn({svgDivRef:v,circuitJson:i,activeEditEvent:Me,editEvents:_e});const Te=rt.useMemo(()=>je.jsx("div",{ref:v,style:{pointerEvents:l?g?"auto":"none":"auto",transformOrigin:"0 0"},dangerouslySetInnerHTML:{__html:ie}}),[ie,g,l]);return je.jsxs("div",{ref:k,style:{position:"relative",backgroundColor:ce,overflow:"hidden",cursor:Qe?"grabbing":l&&!g?"pointer":"grab",minHeight:"300px",...e},onMouseDown:Ee=>{if(l&&!g){Ee.preventDefault(),Ee.stopPropagation();return}ye(Ee)},onMouseDownCapture:Ee=>{if(l&&!g){Ee.preventDefault(),Ee.stopPropagation();return}},onTouchStart:x,onTouchEnd:S,children:[!g&&l&&je.jsx("div",{onClick:Ee=>{Ee.preventDefault(),Ee.stopPropagation(),y(!0)},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:Pge.clickToInteractOverlay,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"all",touchAction:"pan-x pan-y pinch-zoom"},children:je.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",fontFamily:"sans-serif",pointerEvents:"none"},children:typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)?"Touch to Interact":"Click to Interact"})}),a&&je.jsx(Xyn,{active:u,onClick:()=>d(!u)}),a&&u&&je.jsx(Zyn,{active:f,onClick:()=>h(!f)}),Te]})},evn=i=>{const[e,t]=rt.useState(0),[n,r]=rt.useState(0);return rt.useEffect(()=>{if(!i.current)return;const o=()=>{var l;const s=(l=i.current)==null?void 0:l.getBoundingClientRect();t((s==null?void 0:s.width)||0),r((s==null?void 0:s.height)||0)};o();const a=new ResizeObserver(o);return a.observe(i.current),window.addEventListener("resize",o),()=>{a.disconnect(),window.removeEventListener("resize",o)}},[]),{containerWidth:e,containerHeight:n}};F1("assembly-viewer");var tvn=()=>{F1.enable("assembly-viewer*")},nvn=({circuitJson:i,containerStyle:e,debugGrid:t=!1,debug:n=!1})=>{n&&tvn();const r=rt.useRef(null),{ref:o}=Zet({onSetTransform(u){r.current&&(r.current.style.transform=ow(u))}}),{containerWidth:a,containerHeight:s}=evn(o),l=rt.useMemo(()=>!a||!s?"":zet(i,{width:a,height:s||720}),[i,a,s]);rt.useMemo(()=>{var d;if(!l)return h1();const u=(d=l.match(/data-real-to-screen-transform="([^"]+)"/))==null?void 0:d[1];try{return sX(u)}catch(f){return console.error(f),h1()}},[l]);const c=rt.useMemo(()=>je.jsx("div",{ref:r,style:{pointerEvents:"auto",transformOrigin:"0 0"},dangerouslySetInnerHTML:{__html:l}}),[l]);return je.jsx("div",{ref:o,style:{position:"relative",backgroundColor:"#F5F1ED",overflow:"hidden",minHeight:"300px",...e},children:c})};const ett=["Initialize a tscircuit project using [tsci init](https://github.com/tscircuit/cli) before adding components.","Define reusable modules with cached routes using [<subcircuit />](https://docs.tscircuit.com/elements/subcircuit)","Run `tsci dev` on the command line to preview your boards before export",'Use units like mm or mils consistently across your designs (e.g. pcbX="10mm")',"Quickly set footprints with the [footprint prop](https://docs.tscircuit.com/footprints/footprinter-strings)","Check out the guide on [ordering prototypes](https://docs.tscircuit.com/building-electronics/ordering-prototypes)","Use [net labels](https://docs.tscircuit.com/elements/net) and [group elements](https://docs.tscircuit.com/elements/group) to organize complex schematics.","You can manually drag components on the PCB and Schematic using [manual edits](https://docs.tscircuit.com/guides/manual-edits)","Every tscircuit module can export to [Circuit JSON](https://github.com/tscircuit/circuit-json), Gerbers, Pick'n'Place CSV files, Bill of Materials CSV and more","You can import components from [JLCPCB](https://docs.tscircuit.com/guides/importing-modules-and-chips/importing-from-jlcpcb) or [KiCad](https://docs.tscircuit.com/guides/importing-modules-and-chips/importing-from-kicad)","Any module you push to the [registry](https://tscircuit.com/trending) will have [simple image urls](https://docs.tscircuit.com/web-apis/image-generation-api) you can use display images on a website","The default [Parts Engine](https://docs.tscircuit.com/guides/platform-configuration) will automatically find parts from common vendors for your BOM",'[Pin selectors](https://docs.tscircuit.com/guides/using-sel-references) are similar to CSS selectors, ".R1 > .pin1" means "connect to the first pin of the component R1"',"You can use the [sel](https://docs.tscircuit.com/guides/using-sel-references) object to select pins in a type-safe way","Publish modules via the [registry](https://tscircuit.com/trending) for working with a team or sharing your work","[Explore tutorials](https://docs.tscircuit.com/category/tutorials) for real-world circuit design examples.","Upload your Circuit JSON to [circuitjson.com](https://circuitjson.com) for a quick preview.","You can display Circuit JSON in 3D, PCB or Schematic mode with the [<CircuitJsonPreview />](https://docs.tscircuit.com/elements/circuitjsonpreview) React component","Use a [<group />](https://docs.tscircuit.com/elements/group) element to move multiple components at once in a schematic or PCB layout.","Check out the [GitHub Discussions page](https://github.com/tscircuit/tscircuit/discussions) to upvote features","You can customize the autorouter using the [autorouter prop](https://docs.tscircuit.com/elements/board#setting-the-autorouter)","Use the [<constraint />](https://docs.tscircuit.com/footprints/constraint) element to enforce geometric relationships in PCB designs.","Join the [Discord server](https://tscircuit.com/join) to discuss issues and get help directly from the community."],ivn=(()=>{let i=ett[Math.floor(Math.random()*ett.length)];return i=i.replace(/</g,"<"),i=i.replace(/>/g,">"),i=i.replace(new RegExp('(?<!href=")(?<!\\()(?<!\\]\\()(https?:\\/\\/[^\\s\\)\\]]+)',"g"),(e,t)=>`<a class="rf-text-blue-500 rf-underline" href="${e}" target="_blank">${e}</a>`),i=i.replace(/\[([^\]]+)\]\((https?:\/\/[^\)]+)\)/g,'<a class="rf-text-blue-500 rf-underline" href="$2" target="_blank">$1</a>'),i})(),xM=({onRunClicked:i})=>je.jsxs("div",{className:"rf-flex rf-flex-col rf-items-center rf-justify-center rf-h-full rf-bg-gray-50 rf-text-gray-500 rf-p-4",children:[je.jsx(bhn,{className:"rf-size-14 rf-mb-4"}),je.jsxs("p",{className:"rf-text-md rf-break-words rf-max-w-xl rf-text-center",children:["Tip: ",je.jsx("span",{dangerouslySetInnerHTML:{__html:ivn}})]}),i&&je.jsxs(jC,{className:"rf-mt-4 rf-bg-blue-600 rf-hover:bg-blue-500",onClick:i,children:["Run Code",je.jsx(IZe,{className:"rf-w-3 rf-h-3 rf-ml-2"})]})]}),dV=({text:i,onClick:e})=>je.jsx("span",{className:"rf-cursor-pointer rf-underline rf-text-blue-600 rf-mx-2",onClick:e,children:i}),AV=i=>{var e;return je.jsxs("div",{className:"rf-leading-5",children:[je.jsx("div",{className:"rf-py-2 rf-font-bold",children:i.column.name}),je.jsx("div",{children:((e=i.field)==null?void 0:e.call(i))??je.jsx("input",{type:"text",className:"rf-border rf-rounded rf-p-1 rf-w-full",onChange:t=>{var n;(n=i.onTextChange)==null||n.call(i,t.target.value)}})})]})},rvn=({open:i,children:e,title:t,onClose:n})=>i?je.jsx("div",{className:"rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-justify-center rf-items-center rf-z-50",onClick:n,children:je.jsxs("div",{className:"rf-bg-white rf-p-5 rf-rounded-lg rf-relative rf-w-11/12 rf-max-w-2xl",onClick:r=>{r.preventDefault(),r.stopPropagation()},children:[je.jsx("h2",{className:"rf-mt-0 rf-text-md rf-pb-4",children:t}),je.jsx("button",{type:"button",className:"rf-absolute rf-top-2 rf-right-4 rf-text-2xl rf-font-bold",onClick:n,children:"×"}),e]})}):null,ovn=({elements:i})=>{const[e,t]=rt.useState({open:!1}),[n,r]=rt.useReducer((u,d)=>({...u,...d}),{}),o=[...new Set(i.map(u=>u.type))],a=i.map(u=>{const d=u[`${u.type}_id`],f=Object.fromEntries(Object.entries(u).filter(([g])=>!(g===`${u.type}_id`||!g.endsWith("_id")))),h=Object.fromEntries(Object.entries(u).filter(([g])=>!g.endsWith("_id")));return{primary_id:d,other_ids:f,...h,_og_elm:u}}),s=a.map(u=>{let d="";const f=h=>{const g=Object.keys(h.other_ids).find(_=>_.startsWith("source_"));if(!g)return`.${h.name}`;const y=g.slice(0,-3),v=a.find(_=>_.type===y&&_.primary_id===h.other_ids[g]);return v?"name"in v?`${f(v)} > .${h.name}`:`#${v.primary_id} > .${h.name}`:`??? > .${h.name}`};return"name"in u&&(d=f(u)),{...u,selector_path:d}}),l=[{key:"primary_id",name:"primary_id",renderCell:u=>je.jsxs("div",{className:"rf-flex rf-items-center",children:[je.jsx(dV,{text:u.primary_id,onClick:()=>r({focused_id:u.primary_id,id_search:void 0,selector_search:void 0})}),je.jsx("span",{className:"rf-flex-grow"}),je.jsx(dV,{text:"(JSON)",onClick:()=>t({open:!0,element:u._og_elm,title:u.primary_id})})]}),renderHeaderCell:u=>je.jsx(AV,{column:u,onTextChange:d=>r({id_search:d}),field:n.focused_id?()=>je.jsxs("div",{children:["Focus:"," ",je.jsx("span",{className:"rf-underline",children:n.focused_id}),je.jsx(dV,{text:"(unfocus)",onClick:()=>r({focused_id:void 0})})]}):void 0})},{key:"type",name:"type",renderHeaderCell:u=>je.jsx(AV,{column:u,field:()=>je.jsxs("select",{onChange:d=>r({component_type_filter:d.target.value}),className:"rf-border rf-rounded rf-p-1 rf-w-full",children:[je.jsx("option",{value:"any",children:"any"},"any"),je.jsx("option",{value:"source",children:"source"},"source"),je.jsx("option",{value:"source/pcb",children:"source/pcb"},"source/pcb"),je.jsx("option",{value:"source/schematic",children:"source/schematic"},"source/schematic"),o.map(d=>je.jsx("option",{value:d,children:d},d))]})})},{key:"name",name:"name",renderHeaderCell:u=>je.jsx(AV,{column:u,onTextChange:d=>r({name_search:d})})},{key:"selector_path",name:"selector_path",renderHeaderCell:u=>je.jsx(AV,{column:u,onTextChange:d=>r({selector_search:d})})},{key:"other_ids",name:"other_ids",renderCell:u=>je.jsx("div",{className:"rf-space-x-2",children:Object.entries(u.other_ids).map(([d,f])=>je.jsx(dV,{text:f,onClick:()=>r({focused_id:f})},f))})}],c=s.filter(u=>{var d,f;return n.name_search?(f=(d=u.name)==null?void 0:d.toLowerCase())==null?void 0:f.includes(n.name_search.toLowerCase()):!0}).filter(u=>{var d;return!n.component_type_filter||n.component_type_filter==="any"?!0:n.component_type_filter==="source"?u.type.startsWith("source_"):n.component_type_filter==="source/pcb"?u.type.startsWith("source_")||u.type.startsWith("pcb_"):n.component_type_filter==="source/schematic"?u.type.startsWith("source_")||u.type.startsWith("schematic_"):(d=u.type)==null?void 0:d.includes(n.component_type_filter)}).filter(u=>n.selector_search?n.selector_search.split(" ").filter(f=>f.length>0).every(f=>{var h;return(h=u.selector_path)==null?void 0:h.includes(f)}):!0).filter(u=>{var d;return n.id_search?(d=u.primary_id)==null?void 0:d.includes(n.id_search):!0}).filter(u=>!!(!n.focused_id||u.primary_id===n.focused_id||Object.values(u.other_ids).includes(n.focused_id)));return je.jsxs("div",{className:"rf-font-mono rf-text-xs rf-bg-white",children:[je.jsx("div",{className:"rf-overflow-x-auto",children:je.jsxs("table",{className:"rf-table-auto rf-w-full rf-text-left",children:[je.jsx("thead",{children:je.jsx("tr",{children:l.map(u=>je.jsx("th",{className:"rf-px-4 rf-py-2 rf-border-b",children:u.renderHeaderCell?u.renderHeaderCell(u):u.name},u.key))})}),je.jsx("tbody",{children:c.map((u,d)=>je.jsx("tr",{className:"rf-hover:bg-gray-100",children:l.map(f=>je.jsx("td",{className:"rf-px-4 rf-py-2 rf-border-b",children:f.renderCell?f.renderCell(u):u[f.key]},f.key))},d))})]})}),je.jsx(rvn,{open:e.open,onClose:()=>t({open:!1}),title:e.open?e.title:"",children:je.jsx("div",{className:"rf-bg-gray-800 rf-p-3 rf-text-white rf-rounded",children:je.jsx("pre",{className:"rf-whitespace-pre-wrap",children:e.open?JSON.stringify(e.element,null,2):""})})})]})},avn=(i,e)=>i==="jlcpcb"?je.jsx("a",{className:"rf-underline rf-text-blue-500",target:"_blank",rel:"noreferrer",href:`https://jlcpcb.com/partdetail/${e}`,children:e}):e,svn=({circuitJson:i})=>{const e=i.filter(n=>n.type==="source_component"),t=new Set;for(const n of e)if(n.supplier_part_numbers)for(const r of Object.keys(n.supplier_part_numbers))t.add(r);return je.jsx("div",{className:"rf-overflow-x-auto",children:je.jsxs("table",{className:"rf-w-full rf-text-left rf-text-sm",children:[je.jsx("thead",{children:je.jsxs("tr",{className:"rf-border-b",children:[je.jsx("th",{className:"rf-p-2",children:"Name"}),Array.from(t).map(n=>je.jsx("th",{className:"rf-p-2 rf-capitalize",children:n},n))]})}),je.jsx("tbody",{children:e.map(n=>je.jsxs("tr",{className:"rf-border-b",children:[je.jsx("td",{className:"rf-p-2",children:n.name}),Array.from(t).map(r=>{var o,a;return je.jsx("td",{className:"rf-p-2",children:avn(r,((a=(o=n.supplier_part_numbers)==null?void 0:o[r])==null?void 0:a[0])||"")},r)})]},n.source_component_id))})]})})};function ttt([i,e],[t,n],{lineThickness:r=0}={}){return r===0?ntt(i,e,t,n):lvn(i,e,t,n)<=r}function ntt(i,e,t,n){const r=fV(i,e,t),o=fV(i,e,n),a=fV(t,n,i),s=fV(t,n,e);return!!(r!==o&&a!==s||r===0&&hV(i,t,e)||o===0&&hV(i,n,e)||a===0&&hV(t,i,n)||s===0&&hV(t,e,n))}function fV(i,e,t){const n=(e.y-i.y)*(t.x-e.x)-(e.x-i.x)*(t.y-e.y);return n===0?0:n>0?1:2}function hV(i,e,t){return e.x<=Math.max(i.x,t.x)&&e.x>=Math.min(i.x,t.x)&&e.y<=Math.max(i.y,t.y)&&e.y>=Math.min(i.y,t.y)}function lvn(i,e,t,n){if(i.x===e.x&&i.y===e.y)return EM(i,t,n);if(t.x===n.x&&t.y===n.y)return EM(t,i,e);if(ntt(i,e,t,n))return 0;const r=[EM(i,t,n),EM(e,t,n),EM(t,i,e),EM(n,i,e)];return Math.min(...r)}function EM(i,e,t){const n=(t.x-e.x)**2+(t.y-e.y)**2;if(n===0)return p7(i,e);let r=((i.x-e.x)*(t.x-e.x)+(i.y-e.y)*(t.y-e.y))/n;r=Math.max(0,Math.min(1,r));const o={x:e.x+r*(t.x-e.x),y:e.y+r*(t.y-e.y)};return p7(i,o)}function p7(i,e){const t=i.x-e.x,n=i.y-e.y;return Math.sqrt(t*t+n*n)}var cvn=(i,e)=>{const t={x:e.x-i.x,y:e.y-i.y},n=Math.sqrt(t.x**2+t.y**2);return{x:t.x/n,y:t.y/n}},uvn=i=>{switch(i){case"up":return{x:0,y:1};case"down":return{x:0,y:-1};case"left":return{x:-1,y:0};case"right":return{x:1,y:0}}},dvn=Object.defineProperty,Avn=(i,e)=>{for(var t in e)dvn(i,t,{get:e[t],enumerable:!0})},itt={};Avn(itt,{Battery:()=>M_n,Board:()=>c_n,Capacitor:()=>d_n,Chip:()=>btt,Constraint:()=>v_n,Crystal:()=>L_n,Cutout:()=>w_n,Diode:()=>A_n,FabricationNotePath:()=>__n,FabricationNoteText:()=>I_n,Footprint:()=>Pvn,Fuse:()=>f_n,Group:()=>Kge,Hole:()=>htt,Inductor:()=>N_n,Jumper:()=>h_n,Keepout:()=>Oge,Led:()=>p_n,Mosfet:()=>U_n,Net:()=>utt,NetAlias:()=>x_n,NormalComponent:()=>S9,PcbTrace:()=>ftt,PinHeader:()=>Q_n,PlatedHole:()=>Gge,Port:()=>S5,Potentiometer:()=>P_n,PowerSource:()=>g_n,PrimitiveComponent:()=>MI,PushButton:()=>k_n,Renderable:()=>rtt,Resistor:()=>m_n,Resonator:()=>D_n,SchematicBox:()=>z_n,SchematicText:()=>O_n,SilkscreenCircle:()=>E_n,SilkscreenLine:()=>B_n,SilkscreenPath:()=>Att,SilkscreenRect:()=>b_n,SilkscreenText:()=>zge,SmtPad:()=>Uge,Subcircuit:()=>C_n,Switch:()=>G_n,Trace:()=>w5,TraceHint:()=>xtt,Transistor:()=>F_n,Via:()=>S_n});var fvn=F1("tscircuit:renderable"),bM=["ReactSubtreesRender","PcbFootprintStringRender","InitializePortsFromChildren","CreateNetsFromProps","CreateTracesFromProps","CreateTraceHintsFromProps","SourceRender","SourceParentAttachment","PortMatching","OptimizeSelectorCache","SourceTraceRender","SourceAddConnectivityMapKey","SchematicComponentRender","SchematicPortRender","SchematicPrimitiveRender","SchematicLayout","SchematicTraceRender","SchematicReplaceNetLabelsWithSymbols","PcbComponentRender","PcbPrimitiveRender","PcbFootprintLayout","PcbPortRender","PcbPortAttachment","PcbLayout","PcbComponentSizeCalculation","PcbBoardAutoSize","PcbTraceHintRender","PcbTraceRender","PcbRouteNetIslands","PcbDesignRuleChecks","CadModelRender","PartsEngineRender"],hvn=0,rtt=class{constructor(e){Ce(this,"renderPhaseStates");Ce(this,"shouldBeRemoved",!1);Ce(this,"children");Ce(this,"isPcbPrimitive",!1);Ce(this,"isSchematicPrimitive",!1);Ce(this,"_renderId");Ce(this,"_currentRenderPhase",null);Ce(this,"_asyncEffects",[]);Ce(this,"parent",null);this._renderId=`${hvn++}`,this.children=[],this.renderPhaseStates={};for(const t of bM)this.renderPhaseStates[t]={initialized:!1,dirty:!1}}_markDirty(e){var n;this.renderPhaseStates[e].dirty=!0;const t=bM.indexOf(e);for(let r=t+1;r<bM.length;r++)this.renderPhaseStates[bM[r]].dirty=!0;(n=this.parent)!=null&&n._markDirty&&this.parent._markDirty(e)}_queueAsyncEffect(e,t){const n={promise:t(),phase:this._currentRenderPhase,effectName:e,complete:!1};this._asyncEffects.push(n),"root"in this&&this.root&&this.root.emit("asyncEffect:start",{effectName:e,componentDisplayName:this.getString(),phase:n.phase}),n.promise.then(()=>{n.complete=!0,"root"in this&&this.root&&this.root.emit("asyncEffect:end",{effectName:e,componentDisplayName:this.getString(),phase:n.phase})}).catch(r=>{console.error(`Async effect error in ${n.phase} "${e}":
|
|
13343
|
+
`,r.appendChild(S)}})}};o();const a=new MutationObserver(o);return a.observe(r,{childList:!0,subtree:!1,characterData:!1}),()=>{a.disconnect()}},[i,t,e,n])},Vyn=F1("schematic-viewer"),jyn=()=>{F1.enable("schematic-viewer*")},Kyn=Vyn,Jyn=i=>{const[e,t]=rt.useState(0),[n,r]=rt.useState(0);return rt.useEffect(()=>{if(!i.current)return;const o=()=>{var l;const s=(l=i.current)==null?void 0:l.getBoundingClientRect();t((s==null?void 0:s.width)||0),r((s==null?void 0:s.height)||0)};o();const a=new ResizeObserver(o);return a.observe(i.current),window.addEventListener("resize",o),()=>{a.disconnect(),window.removeEventListener("resize",o)}},[]),{containerWidth:e,containerHeight:n}},Wyn=Kyn.extend("useComponentDragging"),qyn=({onEditEvent:i,editEvents:e=[],circuitJson:t,cancelDrag:n,svgToScreenProjection:r,realToSvgProjection:o,enabled:a=!1,snapToGrid:s=!1})=>{const[l,c]=rt.useState(null),u=XA(o,r),d=rt.useRef(null),f=rt.useRef(null),h=rt.useRef(new Map);rt.useEffect(()=>{e.forEach(_=>{"edit_event_type"in _&&_.edit_event_type==="edit_schematic_component_location"&&!_.in_progress&&h.current.set(_.schematic_component_id,{..._.new_center})})},[e]);const g=rt.useCallback(_=>{if(!a)return;const S=_.target.closest('[data-circuit-json-type="schematic_component"]');if(!S)return;const M=S.getAttribute("data-schematic-component-id");if(!M)return;n&&n();const z=Nv(t).schematic_component.get(M);if(!z)return;d.current={x:_.clientX,y:_.clientY};let U;const H=h.current.get(M);if(H)U={...H};else{const j=$et({editEvents:e,schematic_component_id:M});U={x:z.center.x+j.x,y:z.center.y+j.y},h.current.set(M,{...U})}const k={edit_event_id:Math.random().toString(36).substr(2,9),edit_event_type:"edit_schematic_component_location",schematic_component_id:M,original_center:U,new_center:{...U},in_progress:!0,created_at:Date.now(),_element:S};f.current=k,c(k)},[n,a,t,e]),y=rt.useCallback(_=>{if(!f.current||!d.current)return;const x={x:_.clientX-d.current.x,y:_.clientY-d.current.y},S={x:x.x/u.a,y:x.y/u.d};let M={x:f.current.original_center.x+S.x,y:f.current.original_center.y+S.y};if(s){const U=H=>Math.round(H*10)/10;M={x:U(M.x),y:U(M.y)}}const z={...f.current,new_center:M};f.current=z,c(z)},[u,s]),v=rt.useCallback(()=>{if(!f.current)return;const _={...f.current,in_progress:!1};h.current.set(_.schematic_component_id,{..._.new_center}),Wyn("handleMouseUp calling onEditEvent with new edit event",{newEditEvent:_}),i&&i(_),f.current=null,d.current=null,c(null)},[i]);return rt.useEffect(()=>(window.addEventListener("mousemove",y),window.addEventListener("mouseup",v),()=>{window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",v)}),[y,v]),{handleMouseDown:g,isDragging:!!f.current,activeEditEvent:l}},Pge={schematicEditIcon:50,schematicGridIcon:49,clickToInteractOverlay:100},Xyn=({onClick:i,active:e})=>je.jsx("div",{onClick:i,style:{position:"absolute",top:"16px",right:"16px",backgroundColor:e?"#4CAF50":"#fff",color:e?"#fff":"#000",padding:"8px",borderRadius:"4px",cursor:"pointer",boxShadow:"0 2px 4px rgba(0,0,0,0.1)",display:"flex",alignItems:"center",gap:"4px",zIndex:Pge.schematicEditIcon},children:je.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[je.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),je.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})}),Zyn=({onClick:i,active:e})=>je.jsx("div",{onClick:i,style:{position:"absolute",top:"56px",right:"16px",backgroundColor:e?"#4CAF50":"#fff",color:e?"#fff":"#000",padding:"8px",borderRadius:"4px",cursor:"pointer",boxShadow:"0 2px 4px rgba(0,0,0,0.1)",display:"flex",alignItems:"center",gap:"4px",zIndex:Pge.schematicGridIcon},children:je.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:je.jsx("path",{d:"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z"})})}),$yn=({circuitJson:i,containerStyle:e,editEvents:t=[],onEditEvent:n,defaultEditMode:r=!1,debugGrid:o=!1,editingEnabled:a=!1,debug:s=!1,clickToInteractEnabled:l=!1,colorOverrides:c})=>{s&&jyn();const[u,d]=rt.useState(r),[f,h]=rt.useState(!0),[g,y]=rt.useState(!l),v=rt.useRef(null),_=rt.useRef(null),x=Ee=>{const Ge=Ee.touches[0];_.current={x:Ge.clientX,y:Ge.clientY}},S=Ee=>{const Ge=Ee.changedTouches[0],Ke=_.current;if(!Ke)return;const nt=Math.abs(Ge.clientX-Ke.x),lt=Math.abs(Ge.clientY-Ke.y);nt<10&<<10&&(Ee.preventDefault(),y(!0)),_.current=null},[M,z]=rt.useState([]),U=rt.useRef(i),H=Ee=>`${(Ee==null?void 0:Ee.length)||0}_${(Ee==null?void 0:Ee.editCount)||0}`;rt.useEffect(()=>{const Ee=H(i),Ge=H(U.current);Ee!==Ge&&(z([]),U.current=i)},[i]);const{ref:k,cancelDrag:j,transform:G}=Zet({onSetTransform(Ee){v.current&&(v.current.style.transform=ow(Ee))},enabled:g}),{containerWidth:ee,containerHeight:K}=Jyn(k),ie=rt.useMemo(()=>!ee||!K?"":Rge(i,{width:ee,height:K||720,grid:o?{cellSize:1,labelCells:!0}:void 0,colorOverrides:c}),[i,ee,K]),ce=rt.useMemo(()=>{const Ee=ie.match(/<svg[^>]*style="[^"]*background-color:\s*([^;\"]+)/i);return(Ee==null?void 0:Ee[1])??"transparent"},[ie]),ue=rt.useMemo(()=>{var Ge;if(!ie)return h1();const Ee=(Ge=ie.match(/data-real-to-screen-transform="([^"]+)"/))==null?void 0:Ge[1];try{return sX(Ee)}catch(Ke){return console.error(Ke),h1()}},[ie]),le=Ee=>{z(Ge=>[...Ge,Ee]),n&&n(Ee)},_e=rt.useMemo(()=>[...t,...M],[t,M]),{handleMouseDown:ye,isDragging:Qe,activeEditEvent:Me}=qyn({onEditEvent:le,cancelDrag:j,realToSvgProjection:ue,svgToScreenProjection:G,circuitJson:i,editEvents:_e,enabled:u&&g,snapToGrid:f});Hyn({svgDivRef:v,editEvents:_e,realToSvgProjection:ue,svgToScreenProjection:G,activeEditEvent:Me}),Yyn({svgDivRef:v,circuitJson:i,activeEditEvent:Me,editEvents:_e});const Te=rt.useMemo(()=>je.jsx("div",{ref:v,style:{pointerEvents:l?g?"auto":"none":"auto",transformOrigin:"0 0"},dangerouslySetInnerHTML:{__html:ie}}),[ie,g,l]);return je.jsxs("div",{ref:k,style:{position:"relative",backgroundColor:ce,overflow:"hidden",cursor:Qe?"grabbing":l&&!g?"pointer":"grab",minHeight:"300px",...e},onMouseDown:Ee=>{if(l&&!g){Ee.preventDefault(),Ee.stopPropagation();return}ye(Ee)},onMouseDownCapture:Ee=>{if(l&&!g){Ee.preventDefault(),Ee.stopPropagation();return}},onTouchStart:x,onTouchEnd:S,children:[!g&&l&&je.jsx("div",{onClick:Ee=>{Ee.preventDefault(),Ee.stopPropagation(),y(!0)},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:Pge.clickToInteractOverlay,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"all",touchAction:"pan-x pan-y pinch-zoom"},children:je.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",fontFamily:"sans-serif",pointerEvents:"none"},children:typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)?"Touch to Interact":"Click to Interact"})}),a&&je.jsx(Xyn,{active:u,onClick:()=>d(!u)}),a&&u&&je.jsx(Zyn,{active:f,onClick:()=>h(!f)}),Te]})},evn=i=>{const[e,t]=rt.useState(0),[n,r]=rt.useState(0);return rt.useEffect(()=>{if(!i.current)return;const o=()=>{var l;const s=(l=i.current)==null?void 0:l.getBoundingClientRect();t((s==null?void 0:s.width)||0),r((s==null?void 0:s.height)||0)};o();const a=new ResizeObserver(o);return a.observe(i.current),window.addEventListener("resize",o),()=>{a.disconnect(),window.removeEventListener("resize",o)}},[]),{containerWidth:e,containerHeight:n}};F1("assembly-viewer");var tvn=()=>{F1.enable("assembly-viewer*")},nvn=({circuitJson:i,containerStyle:e,debugGrid:t=!1,debug:n=!1})=>{n&&tvn();const r=rt.useRef(null),{ref:o}=Zet({onSetTransform(u){r.current&&(r.current.style.transform=ow(u))}}),{containerWidth:a,containerHeight:s}=evn(o),l=rt.useMemo(()=>!a||!s?"":zet(i,{width:a,height:s||720}),[i,a,s]);rt.useMemo(()=>{var d;if(!l)return h1();const u=(d=l.match(/data-real-to-screen-transform="([^"]+)"/))==null?void 0:d[1];try{return sX(u)}catch(f){return console.error(f),h1()}},[l]);const c=rt.useMemo(()=>je.jsx("div",{ref:r,style:{pointerEvents:"auto",transformOrigin:"0 0"},dangerouslySetInnerHTML:{__html:l}}),[l]);return je.jsx("div",{ref:o,style:{position:"relative",backgroundColor:"#FFFFFF",overflow:"hidden",minHeight:"300px",...e},children:c})};const ett=["Initialize a tscircuit project using [tsci init](https://github.com/tscircuit/cli) before adding components.","Define reusable modules with cached routes using [<subcircuit />](https://docs.tscircuit.com/elements/subcircuit)","Run `tsci dev` on the command line to preview your boards before export",'Use units like mm or mils consistently across your designs (e.g. pcbX="10mm")',"Quickly set footprints with the [footprint prop](https://docs.tscircuit.com/footprints/footprinter-strings)","Check out the guide on [ordering prototypes](https://docs.tscircuit.com/building-electronics/ordering-prototypes)","Use [net labels](https://docs.tscircuit.com/elements/net) and [group elements](https://docs.tscircuit.com/elements/group) to organize complex schematics.","You can manually drag components on the PCB and Schematic using [manual edits](https://docs.tscircuit.com/guides/manual-edits)","Every tscircuit module can export to [Circuit JSON](https://github.com/tscircuit/circuit-json), Gerbers, Pick'n'Place CSV files, Bill of Materials CSV and more","You can import components from [JLCPCB](https://docs.tscircuit.com/guides/importing-modules-and-chips/importing-from-jlcpcb) or [KiCad](https://docs.tscircuit.com/guides/importing-modules-and-chips/importing-from-kicad)","Any module you push to the [registry](https://tscircuit.com/trending) will have [simple image urls](https://docs.tscircuit.com/web-apis/image-generation-api) you can use display images on a website","The default [Parts Engine](https://docs.tscircuit.com/guides/platform-configuration) will automatically find parts from common vendors for your BOM",'[Pin selectors](https://docs.tscircuit.com/guides/using-sel-references) are similar to CSS selectors, ".R1 > .pin1" means "connect to the first pin of the component R1"',"You can use the [sel](https://docs.tscircuit.com/guides/using-sel-references) object to select pins in a type-safe way","Publish modules via the [registry](https://tscircuit.com/trending) for working with a team or sharing your work","[Explore tutorials](https://docs.tscircuit.com/category/tutorials) for real-world circuit design examples.","Upload your Circuit JSON to [circuitjson.com](https://circuitjson.com) for a quick preview.","You can display Circuit JSON in 3D, PCB or Schematic mode with the [<CircuitJsonPreview />](https://docs.tscircuit.com/elements/circuitjsonpreview) React component","Use a [<group />](https://docs.tscircuit.com/elements/group) element to move multiple components at once in a schematic or PCB layout.","Check out the [GitHub Discussions page](https://github.com/tscircuit/tscircuit/discussions) to upvote features","You can customize the autorouter using the [autorouter prop](https://docs.tscircuit.com/elements/board#setting-the-autorouter)","Use the [<constraint />](https://docs.tscircuit.com/footprints/constraint) element to enforce geometric relationships in PCB designs.","Join the [Discord server](https://tscircuit.com/join) to discuss issues and get help directly from the community."],ivn=(()=>{let i=ett[Math.floor(Math.random()*ett.length)];return i=i.replace(/</g,"<"),i=i.replace(/>/g,">"),i=i.replace(new RegExp('(?<!href=")(?<!\\()(?<!\\]\\()(https?:\\/\\/[^\\s\\)\\]]+)',"g"),(e,t)=>`<a class="rf-text-blue-500 rf-underline" href="${e}" target="_blank">${e}</a>`),i=i.replace(/\[([^\]]+)\]\((https?:\/\/[^\)]+)\)/g,'<a class="rf-text-blue-500 rf-underline" href="$2" target="_blank">$1</a>'),i})(),xM=({onRunClicked:i})=>je.jsxs("div",{className:"rf-flex rf-flex-col rf-items-center rf-justify-center rf-h-full rf-bg-gray-50 rf-text-gray-500 rf-p-4",children:[je.jsx(bhn,{className:"rf-size-14 rf-mb-4"}),je.jsxs("p",{className:"rf-text-md rf-break-words rf-max-w-xl rf-text-center",children:["Tip: ",je.jsx("span",{dangerouslySetInnerHTML:{__html:ivn}})]}),i&&je.jsxs(jC,{className:"rf-mt-4 rf-bg-blue-600 rf-hover:bg-blue-500",onClick:i,children:["Run Code",je.jsx(IZe,{className:"rf-w-3 rf-h-3 rf-ml-2"})]})]}),dV=({text:i,onClick:e})=>je.jsx("span",{className:"rf-cursor-pointer rf-underline rf-text-blue-600 rf-mx-2",onClick:e,children:i}),AV=i=>{var e;return je.jsxs("div",{className:"rf-leading-5",children:[je.jsx("div",{className:"rf-py-2 rf-font-bold",children:i.column.name}),je.jsx("div",{children:((e=i.field)==null?void 0:e.call(i))??je.jsx("input",{type:"text",className:"rf-border rf-rounded rf-p-1 rf-w-full",onChange:t=>{var n;(n=i.onTextChange)==null||n.call(i,t.target.value)}})})]})},rvn=({open:i,children:e,title:t,onClose:n})=>i?je.jsx("div",{className:"rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-justify-center rf-items-center rf-z-50",onClick:n,children:je.jsxs("div",{className:"rf-bg-white rf-p-5 rf-rounded-lg rf-relative rf-w-11/12 rf-max-w-2xl",onClick:r=>{r.preventDefault(),r.stopPropagation()},children:[je.jsx("h2",{className:"rf-mt-0 rf-text-md rf-pb-4",children:t}),je.jsx("button",{type:"button",className:"rf-absolute rf-top-2 rf-right-4 rf-text-2xl rf-font-bold",onClick:n,children:"×"}),e]})}):null,ovn=({elements:i})=>{const[e,t]=rt.useState({open:!1}),[n,r]=rt.useReducer((u,d)=>({...u,...d}),{}),o=[...new Set(i.map(u=>u.type))],a=i.map(u=>{const d=u[`${u.type}_id`],f=Object.fromEntries(Object.entries(u).filter(([g])=>!(g===`${u.type}_id`||!g.endsWith("_id")))),h=Object.fromEntries(Object.entries(u).filter(([g])=>!g.endsWith("_id")));return{primary_id:d,other_ids:f,...h,_og_elm:u}}),s=a.map(u=>{let d="";const f=h=>{const g=Object.keys(h.other_ids).find(_=>_.startsWith("source_"));if(!g)return`.${h.name}`;const y=g.slice(0,-3),v=a.find(_=>_.type===y&&_.primary_id===h.other_ids[g]);return v?"name"in v?`${f(v)} > .${h.name}`:`#${v.primary_id} > .${h.name}`:`??? > .${h.name}`};return"name"in u&&(d=f(u)),{...u,selector_path:d}}),l=[{key:"primary_id",name:"primary_id",renderCell:u=>je.jsxs("div",{className:"rf-flex rf-items-center",children:[je.jsx(dV,{text:u.primary_id,onClick:()=>r({focused_id:u.primary_id,id_search:void 0,selector_search:void 0})}),je.jsx("span",{className:"rf-flex-grow"}),je.jsx(dV,{text:"(JSON)",onClick:()=>t({open:!0,element:u._og_elm,title:u.primary_id})})]}),renderHeaderCell:u=>je.jsx(AV,{column:u,onTextChange:d=>r({id_search:d}),field:n.focused_id?()=>je.jsxs("div",{children:["Focus:"," ",je.jsx("span",{className:"rf-underline",children:n.focused_id}),je.jsx(dV,{text:"(unfocus)",onClick:()=>r({focused_id:void 0})})]}):void 0})},{key:"type",name:"type",renderHeaderCell:u=>je.jsx(AV,{column:u,field:()=>je.jsxs("select",{onChange:d=>r({component_type_filter:d.target.value}),className:"rf-border rf-rounded rf-p-1 rf-w-full",children:[je.jsx("option",{value:"any",children:"any"},"any"),je.jsx("option",{value:"source",children:"source"},"source"),je.jsx("option",{value:"source/pcb",children:"source/pcb"},"source/pcb"),je.jsx("option",{value:"source/schematic",children:"source/schematic"},"source/schematic"),o.map(d=>je.jsx("option",{value:d,children:d},d))]})})},{key:"name",name:"name",renderHeaderCell:u=>je.jsx(AV,{column:u,onTextChange:d=>r({name_search:d})})},{key:"selector_path",name:"selector_path",renderHeaderCell:u=>je.jsx(AV,{column:u,onTextChange:d=>r({selector_search:d})})},{key:"other_ids",name:"other_ids",renderCell:u=>je.jsx("div",{className:"rf-space-x-2",children:Object.entries(u.other_ids).map(([d,f])=>je.jsx(dV,{text:f,onClick:()=>r({focused_id:f})},f))})}],c=s.filter(u=>{var d,f;return n.name_search?(f=(d=u.name)==null?void 0:d.toLowerCase())==null?void 0:f.includes(n.name_search.toLowerCase()):!0}).filter(u=>{var d;return!n.component_type_filter||n.component_type_filter==="any"?!0:n.component_type_filter==="source"?u.type.startsWith("source_"):n.component_type_filter==="source/pcb"?u.type.startsWith("source_")||u.type.startsWith("pcb_"):n.component_type_filter==="source/schematic"?u.type.startsWith("source_")||u.type.startsWith("schematic_"):(d=u.type)==null?void 0:d.includes(n.component_type_filter)}).filter(u=>n.selector_search?n.selector_search.split(" ").filter(f=>f.length>0).every(f=>{var h;return(h=u.selector_path)==null?void 0:h.includes(f)}):!0).filter(u=>{var d;return n.id_search?(d=u.primary_id)==null?void 0:d.includes(n.id_search):!0}).filter(u=>!!(!n.focused_id||u.primary_id===n.focused_id||Object.values(u.other_ids).includes(n.focused_id)));return je.jsxs("div",{className:"rf-font-mono rf-text-xs rf-bg-white",children:[je.jsx("div",{className:"rf-overflow-x-auto",children:je.jsxs("table",{className:"rf-table-auto rf-w-full rf-text-left",children:[je.jsx("thead",{children:je.jsx("tr",{children:l.map(u=>je.jsx("th",{className:"rf-px-4 rf-py-2 rf-border-b",children:u.renderHeaderCell?u.renderHeaderCell(u):u.name},u.key))})}),je.jsx("tbody",{children:c.map((u,d)=>je.jsx("tr",{className:"rf-hover:bg-gray-100",children:l.map(f=>je.jsx("td",{className:"rf-px-4 rf-py-2 rf-border-b",children:f.renderCell?f.renderCell(u):u[f.key]},f.key))},d))})]})}),je.jsx(rvn,{open:e.open,onClose:()=>t({open:!1}),title:e.open?e.title:"",children:je.jsx("div",{className:"rf-bg-gray-800 rf-p-3 rf-text-white rf-rounded",children:je.jsx("pre",{className:"rf-whitespace-pre-wrap",children:e.open?JSON.stringify(e.element,null,2):""})})})]})},avn=(i,e)=>i==="jlcpcb"?je.jsx("a",{className:"rf-underline rf-text-blue-500",target:"_blank",rel:"noreferrer",href:`https://jlcpcb.com/partdetail/${e}`,children:e}):e,svn=({circuitJson:i})=>{const e=i.filter(n=>n.type==="source_component"),t=new Set;for(const n of e)if(n.supplier_part_numbers)for(const r of Object.keys(n.supplier_part_numbers))t.add(r);return je.jsx("div",{className:"rf-overflow-x-auto",children:je.jsxs("table",{className:"rf-w-full rf-text-left rf-text-sm",children:[je.jsx("thead",{children:je.jsxs("tr",{className:"rf-border-b",children:[je.jsx("th",{className:"rf-p-2",children:"Name"}),Array.from(t).map(n=>je.jsx("th",{className:"rf-p-2 rf-capitalize",children:n},n))]})}),je.jsx("tbody",{children:e.map(n=>je.jsxs("tr",{className:"rf-border-b",children:[je.jsx("td",{className:"rf-p-2",children:n.name}),Array.from(t).map(r=>{var o,a;return je.jsx("td",{className:"rf-p-2",children:avn(r,((a=(o=n.supplier_part_numbers)==null?void 0:o[r])==null?void 0:a[0])||"")},r)})]},n.source_component_id))})]})})};function ttt([i,e],[t,n],{lineThickness:r=0}={}){return r===0?ntt(i,e,t,n):lvn(i,e,t,n)<=r}function ntt(i,e,t,n){const r=fV(i,e,t),o=fV(i,e,n),a=fV(t,n,i),s=fV(t,n,e);return!!(r!==o&&a!==s||r===0&&hV(i,t,e)||o===0&&hV(i,n,e)||a===0&&hV(t,i,n)||s===0&&hV(t,e,n))}function fV(i,e,t){const n=(e.y-i.y)*(t.x-e.x)-(e.x-i.x)*(t.y-e.y);return n===0?0:n>0?1:2}function hV(i,e,t){return e.x<=Math.max(i.x,t.x)&&e.x>=Math.min(i.x,t.x)&&e.y<=Math.max(i.y,t.y)&&e.y>=Math.min(i.y,t.y)}function lvn(i,e,t,n){if(i.x===e.x&&i.y===e.y)return EM(i,t,n);if(t.x===n.x&&t.y===n.y)return EM(t,i,e);if(ntt(i,e,t,n))return 0;const r=[EM(i,t,n),EM(e,t,n),EM(t,i,e),EM(n,i,e)];return Math.min(...r)}function EM(i,e,t){const n=(t.x-e.x)**2+(t.y-e.y)**2;if(n===0)return p7(i,e);let r=((i.x-e.x)*(t.x-e.x)+(i.y-e.y)*(t.y-e.y))/n;r=Math.max(0,Math.min(1,r));const o={x:e.x+r*(t.x-e.x),y:e.y+r*(t.y-e.y)};return p7(i,o)}function p7(i,e){const t=i.x-e.x,n=i.y-e.y;return Math.sqrt(t*t+n*n)}var cvn=(i,e)=>{const t={x:e.x-i.x,y:e.y-i.y},n=Math.sqrt(t.x**2+t.y**2);return{x:t.x/n,y:t.y/n}},uvn=i=>{switch(i){case"up":return{x:0,y:1};case"down":return{x:0,y:-1};case"left":return{x:-1,y:0};case"right":return{x:1,y:0}}},dvn=Object.defineProperty,Avn=(i,e)=>{for(var t in e)dvn(i,t,{get:e[t],enumerable:!0})},itt={};Avn(itt,{Battery:()=>M_n,Board:()=>c_n,Capacitor:()=>d_n,Chip:()=>btt,Constraint:()=>v_n,Crystal:()=>L_n,Cutout:()=>w_n,Diode:()=>A_n,FabricationNotePath:()=>__n,FabricationNoteText:()=>I_n,Footprint:()=>Pvn,Fuse:()=>f_n,Group:()=>Kge,Hole:()=>htt,Inductor:()=>N_n,Jumper:()=>h_n,Keepout:()=>Oge,Led:()=>p_n,Mosfet:()=>U_n,Net:()=>utt,NetAlias:()=>x_n,NormalComponent:()=>S9,PcbTrace:()=>ftt,PinHeader:()=>Q_n,PlatedHole:()=>Gge,Port:()=>S5,Potentiometer:()=>P_n,PowerSource:()=>g_n,PrimitiveComponent:()=>MI,PushButton:()=>k_n,Renderable:()=>rtt,Resistor:()=>m_n,Resonator:()=>D_n,SchematicBox:()=>z_n,SchematicText:()=>O_n,SilkscreenCircle:()=>E_n,SilkscreenLine:()=>B_n,SilkscreenPath:()=>Att,SilkscreenRect:()=>b_n,SilkscreenText:()=>zge,SmtPad:()=>Uge,Subcircuit:()=>C_n,Switch:()=>G_n,Trace:()=>w5,TraceHint:()=>xtt,Transistor:()=>F_n,Via:()=>S_n});var fvn=F1("tscircuit:renderable"),bM=["ReactSubtreesRender","PcbFootprintStringRender","InitializePortsFromChildren","CreateNetsFromProps","CreateTracesFromProps","CreateTraceHintsFromProps","SourceRender","SourceParentAttachment","PortMatching","OptimizeSelectorCache","SourceTraceRender","SourceAddConnectivityMapKey","SchematicComponentRender","SchematicPortRender","SchematicPrimitiveRender","SchematicLayout","SchematicTraceRender","SchematicReplaceNetLabelsWithSymbols","PcbComponentRender","PcbPrimitiveRender","PcbFootprintLayout","PcbPortRender","PcbPortAttachment","PcbLayout","PcbComponentSizeCalculation","PcbBoardAutoSize","PcbTraceHintRender","PcbTraceRender","PcbRouteNetIslands","PcbDesignRuleChecks","CadModelRender","PartsEngineRender"],hvn=0,rtt=class{constructor(e){Ce(this,"renderPhaseStates");Ce(this,"shouldBeRemoved",!1);Ce(this,"children");Ce(this,"isPcbPrimitive",!1);Ce(this,"isSchematicPrimitive",!1);Ce(this,"_renderId");Ce(this,"_currentRenderPhase",null);Ce(this,"_asyncEffects",[]);Ce(this,"parent",null);this._renderId=`${hvn++}`,this.children=[],this.renderPhaseStates={};for(const t of bM)this.renderPhaseStates[t]={initialized:!1,dirty:!1}}_markDirty(e){var n;this.renderPhaseStates[e].dirty=!0;const t=bM.indexOf(e);for(let r=t+1;r<bM.length;r++)this.renderPhaseStates[bM[r]].dirty=!0;(n=this.parent)!=null&&n._markDirty&&this.parent._markDirty(e)}_queueAsyncEffect(e,t){const n={promise:t(),phase:this._currentRenderPhase,effectName:e,complete:!1};this._asyncEffects.push(n),"root"in this&&this.root&&this.root.emit("asyncEffect:start",{effectName:e,componentDisplayName:this.getString(),phase:n.phase}),n.promise.then(()=>{n.complete=!0,"root"in this&&this.root&&this.root.emit("asyncEffect:end",{effectName:e,componentDisplayName:this.getString(),phase:n.phase})}).catch(r=>{console.error(`Async effect error in ${n.phase} "${e}":
|
|
13344
13344
|
${r.stack}`),n.complete=!0,"root"in this&&this.root&&this.root.emit("asyncEffect:end",{effectName:e,componentDisplayName:this.getString(),phase:n.phase,error:r.toString()})})}_emitRenderLifecycleEvent(e,t){fvn(`${e}:${t} ${this.getString()}`);const n=`renderable:renderLifecycle:${e}:${t}`,r={renderId:this._renderId,componentDisplayName:this.getString(),type:n};"root"in this&&this.root&&(this.root.emit(n,r),this.root.emit("renderable:renderLifecycle:anyEvent",{...r,type:n}))}getString(){return this.constructor.name}_hasIncompleteAsyncEffects(){return this._asyncEffects.some(e=>!e.complete)}getCurrentRenderPhase(){return this._currentRenderPhase}getRenderGraph(){return{id:this._renderId,currentPhase:this._currentRenderPhase,renderPhaseStates:this.renderPhaseStates,shouldBeRemoved:this.shouldBeRemoved,children:this.children.map(e=>e.getRenderGraph())}}runRenderCycle(){for(const e of bM)this.runRenderPhaseForChildren(e),this.runRenderPhase(e)}runRenderPhase(e){var a,s,l;this._currentRenderPhase=e;const t=this.renderPhaseStates[e],n=t.initialized,r=t.dirty;if(!n&&this.shouldBeRemoved)return;if(this.shouldBeRemoved&&n){this._emitRenderLifecycleEvent(e,"start"),(a=this==null?void 0:this[`remove${e}`])==null||a.call(this),t.initialized=!1,t.dirty=!1,this._emitRenderLifecycleEvent(e,"end");return}const o=bM.indexOf(e)-1;if(o>=0){const c=bM[o];if(this._asyncEffects.filter(d=>d.phase===c).some(d=>!d.complete))return}if(this._emitRenderLifecycleEvent(e,"start"),n){r&&((s=this==null?void 0:this[`update${e}`])==null||s.call(this),t.dirty=!1),this._emitRenderLifecycleEvent(e,"end");return}t.dirty=!1,(l=this==null?void 0:this[`doInitial${e}`])==null||l.call(this),t.initialized=!0,this._emitRenderLifecycleEvent(e,"end")}runRenderPhaseForChildren(e){for(const t of this.children)t.runRenderPhaseForChildren(e),t.runRenderPhase(e)}renderError(e){throw typeof e=="string"?new Error(e):new Error(JSON.stringify(e,null,2))}},pV={},ott=i=>{const e=Object.fromEntries(Object.entries(i).map(([t,n])=>[t.toLowerCase(),n]));Object.assign(pV,i),Object.assign(pV,e)},pvn=class extends Error{constructor(e,t,n){let r;const a=Object.keys(n).filter(s=>s!=="_errors").map(s=>n[s]._errors[0]?`${s} (${n[s]._errors[0]})`:`${s} (${JSON.stringify(n[s])})`).join(", ");"name"in t?r=`Invalid props for ${e} "${t.name}": ${a}`:"footprint"in t&&typeof t.footprint=="string"?r=`Invalid props for ${e} (unnamed ${t.footprint} component): ${a}`:r=`Invalid props for ${e} (unnamed): ${a}`,super(r),this.componentName=e,this.originalProps=t,this.formattedError=n}};function kge(i,e){const t=e.match(/^#(\w+)/);if(t)return i.props.id===t[1];const n=e.match(/^\.(\w+)/);if(n)return i.isMatchingNameOrAlias(n[1]);let[r,...o]=e.split(/(?=[#.[])/);return r==="pin"&&(r="port"),r&&r!=="*"&&i.lowercaseComponentName!==r.toLowerCase()?!1:o.every(a=>{if(a.startsWith("#"))return i.props.id===a.slice(1);if(a.startsWith("."))return i.isMatchingNameOrAlias(a.slice(1));const s=a.match(/\[(\w+)=['"]?(.+?)['"]?\]/);if(!s)return!0;const[,l,c]=s;return i.props[l].toString()===c})}var Lge={isTag:i=>!0,getParent:i=>i.parent,getChildren:i=>i.children,getName:i=>i.lowercaseComponentName,getAttributeValue:(i,e)=>{var t;if(e==="class"&&"getNameAndAliases"in i)return i.getNameAndAliases().join(" ");if(e==="name"&&((t=i._parsedProps)!=null&&t.name))return i._parsedProps.name;if(i._parsedProps&&e in i._parsedProps){const n=i._parsedProps[e];return typeof n=="string"?n:n!=null?String(n):null}return null},hasAttrib:(i,e)=>{var t;return e==="class"?!!((t=i._parsedProps)!=null&&t.name):i._parsedProps&&e in i._parsedProps},getSiblings:i=>i.parent?i.parent.children:[],prevElementSibling:i=>{if(!i.parent)return null;const e=i.parent.children,t=e.indexOf(i);return t>0?e[t-1]:null},getText:()=>"",removeSubsets:i=>i.filter((e,t)=>!i.some((n,r)=>t!==r&&n!==e&&n.getDescendants().includes(e))),existsOne:(i,e)=>e.some(i),findAll:(i,e)=>{const t=[],n=r=>{i(r)&&t.push(r);for(const o of r.children)n(o)};for(const r of e)n(r);return t},findOne:(i,e)=>{for(const t of e){if(i(t))return t;const n=t.children;if(n.length>0){const r=Lge.findOne(i,n);if(r)return r}}return null},equals:(i,e)=>i._renderId===e._renderId,isHovered:i=>!1,isVisited:i=>!1,isActive:i=>!1},gvn={...Lge,getChildren:i=>i.children.filter(e=>!e.isSubcircuit)},att={...Lge,getChildren:i=>i.children.filter(e=>e.isSubcircuit)},stt=i=>{if(/net\.[^\s>]*\./.test(i))throw new Error('Net names cannot contain a period, try using "sel.net..." to autocomplete with conventional net names, e.g. V3_3');if(/net\.[0-9]/.test(i))throw new Error('Net names cannot start with a number, try using a prefix like "VBUS1"');return i.replace(/ pin/g," port").replace(/ subcircuit\./g," group[isSubcircuit=true]").replace(/([^ ])\>([^ ])/g,"$1 > $2").replace(/(^|[ >])(?!pin\.)(?!port\.)(?!net\.)([A-Z][A-Za-z0-9_-]*)\.([A-Za-z0-9_-]+)/g,(e,t,n,r)=>{const o=/^\d+$/.test(r)?`pin${r}`:r;return`${t}.${n} > .${o}`}).trim()},Fge={adapter:gvn,cacheResults:!0},MI=class extends rtt{constructor(t){super(t);Ce(this,"parent",null);Ce(this,"children");Ce(this,"childrenPendingRemoval");Ce(this,"props");Ce(this,"_parsedProps");Ce(this,"externallyAddedAliases");Ce(this,"isPrimitiveContainer",!1);Ce(this,"source_group_id",null);Ce(this,"source_component_id",null);Ce(this,"schematic_component_id",null);Ce(this,"pcb_component_id",null);Ce(this,"cad_component_id",null);Ce(this,"_cachedSelectAllQueries",new Map);Ce(this,"_cachedSelectOneQueries",new Map);this.children=[],this.childrenPendingRemoval=[],this.props=t??{},this.externallyAddedAliases=[];const n=this.config.zodProps.safeParse(t??{});if(n.success)this._parsedProps=n.data;else throw new pvn(this.lowercaseComponentName,this.props,n.error.format())}get config(){return{componentName:"",zodProps:Ft({}).passthrough()}}get componentName(){return this.config.componentName}getInheritedProperty(t){var r;let n=this;for(;n;){if(n._parsedProps&&t in n._parsedProps)return n._parsedProps[t];n=n.parent}if((r=this.root)!=null&&r.platform&&t in this.root.platform)return this.root.platform[t]}get lowercaseComponentName(){return this.componentName.toLowerCase()}get isSubcircuit(){var t;return!!this.props.subcircuit||this.lowercaseComponentName==="group"&&((t=this==null?void 0:this.parent)==null?void 0:t.isRoot)}get isGroup(){return this.lowercaseComponentName==="group"}setProps(t){var o,a;const n=this.config.zodProps.parse({...this.props,...t}),r=this.props;this.props=n,this._parsedProps=this.config.zodProps.parse(t),this.onPropsChange({oldProps:r,newProps:n,changedProps:Object.keys(t)}),(a=(o=this.parent)==null?void 0:o.onChildChanged)==null||a.call(o,this)}computePcbPropsTransform(){const{_parsedProps:t}=this;return XA(hp(t.pcbX??0,t.pcbY??0),lb((t.pcbRotation??0)*Math.PI/180))}_computePcbGlobalTransformBeforeLayout(){var r,o,a;const{_parsedProps:t}=this,n=this.getSubcircuit()._getPcbManualPlacementForComponent(this);if(n&&this.props.pcbX===void 0&&this.props.pcbY===void 0)return XA(((r=this.parent)==null?void 0:r._computePcbGlobalTransformBeforeLayout())??h1(),XA(hp(n.x,n.y),lb((t.pcbRotation??0)*Math.PI/180)));if(this.isPcbPrimitive){const s=this.getPrimitiveContainer();if(s){const l=s._parsedProps.layer==="bottom",c=s._getGlobalPcbPositionBeforeLayout();if(l)return XA(hp(c.x,c.y),zN(),hp(-c.x,-c.y)),XA(((o=this.parent)==null?void 0:o._computePcbGlobalTransformBeforeLayout())??h1(),zN(),this.computePcbPropsTransform())}}return XA(((a=this.parent)==null?void 0:a._computePcbGlobalTransformBeforeLayout())??h1(),this.computePcbPropsTransform())}getPrimitiveContainer(){var t,n;return this.isPrimitiveContainer?this:((n=(t=this.parent)==null?void 0:t.getPrimitiveContainer)==null?void 0:n.call(t))??null}_getPcbCircuitJsonBounds(){return{center:{x:0,y:0},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getPcbPrimitiveFlippedHelpers(){const t=this.getPrimitiveContainer(),n=t?t._parsedProps.layer==="bottom":!1;return{isFlipped:n,maybeFlipLayer:o=>n?o==="top"?"bottom":"top":o}}_setPositionFromLayout(t){throw new Error(`_setPositionFromLayout not implemented for ${this.componentName}`)}computeSchematicPropsTransform(){const{_parsedProps:t}=this;return XA(hp(t.schX??0,t.schY??0))}computeSchematicGlobalTransform(){var n,r;const t=this._getSchematicGlobalManualPlacementTransform(this);return t||XA(((r=(n=this.parent)==null?void 0:n.computeSchematicGlobalTransform)==null?void 0:r.call(n))??h1(),this.computeSchematicPropsTransform())}_getSchematicSymbolName(){const{_parsedProps:t}=this,n=this.config.schematicSymbolName;let r=t.schRotation;if(r===void 0&&(r=0),r=r%360,r<0&&(r+=360),t.schRotation!==void 0&&r%90!==0)throw new Error(`Schematic rotation ${t.schRotation} is not supported for ${this.componentName}`);const o=`${n}_horz`,a=`${n}_vert`,s=`${n}_up`,l=`${n}_down`,c=`${n}_left`,u=`${n}_right`;if(u in YI&&r===0)return u;if(s in YI&&r===90)return s;if(c in YI&&r===180)return c;if(l in YI&&r===270)return l;if(o in YI&&(r===0||r===180))return o;if(a in YI&&(r===90||r===270))return a;if(n in YI)return n}_getSchematicSymbolNameOrThrow(){const t=this._getSchematicSymbolName();if(!t)throw new Error(`No schematic symbol found (given: "${this.config.schematicSymbolName}")`);return t}getSchematicSymbol(){const t=this._getSchematicSymbolName();return t?YI[t]??null:null}_getPcbManualPlacementForComponent(t){var a;if(!this.isSubcircuit)return null;const n=this.props.layout,r=this.props.manualEdits;if(!n&&!r)return null;const o=((a=n==null?void 0:n.manual_pcb_placement_config)==null?void 0:a.positions)||(r==null?void 0:r.pcb_placements);if(!o)return null;for(const s of o)if(n&&kge(t,s.selector)||t.props.name===s.selector)return Qr(this._computePcbGlobalTransformBeforeLayout(),s.center);return null}_getSchematicManualPlacementForComponent(t){if(!this.isSubcircuit)return null;const n=this.props.manualEdits;if(!n)return null;const r=n.schematic_placements;if(!r)return null;for(const o of r)if(kge(t,o.selector)||t.props.name===o.selector)return Qr(this.computeSchematicGlobalTransform(),o.center);return null}_getSchematicGlobalManualPlacementTransform(t){var r,o;const n=(r=this.getSubcircuit())==null?void 0:r._parsedProps.manualEdits;if(!n)return null;for(const a of n.schematic_placements??[])if((kge(t,a.selector)||t.props.name===a.selector)&&a.relative_to==="group_center")return XA(((o=this.parent)==null?void 0:o._computePcbGlobalTransformBeforeLayout())??h1(),hp(a.center.x,a.center.y));return null}_getGlobalPcbPositionBeforeLayout(){return Qr(this._computePcbGlobalTransformBeforeLayout(),{x:0,y:0})}_getGlobalSchematicPositionBeforeLayout(){return Qr(this.computeSchematicGlobalTransform(),{x:0,y:0})}get root(){var t;return((t=this.parent)==null?void 0:t.root)??null}onAddToParent(t){this.parent=t}onPropsChange(t){}onChildChanged(t){var n,r;(r=(n=this.parent)==null?void 0:n.onChildChanged)==null||r.call(n,t)}add(t){if(!t.onAddToParent)throw new Error(`Invalid JSX Element: Expected a React component but received "${JSON.stringify(t)}"`);t.onAddToParent(this),t.parent=this,this.children.push(t)}addAll(t){for(const n of t)this.add(n)}remove(t){this.children=this.children.filter(n=>n!==t),this.childrenPendingRemoval.push(t),t.shouldBeRemoved=!0}getSubcircuitSelector(){const t=this._parsedProps.name,n=t?`${this.lowercaseComponentName}.${t}`:this.lowercaseComponentName;return!this.parent||this.parent.isSubcircuit?n:`${this.parent.getSubcircuitSelector()} > ${n}`}getFullPathSelector(){var o,a;const t=this._parsedProps.name,n=t?`${this.lowercaseComponentName}.${t}`:this.lowercaseComponentName,r=(a=(o=this.parent)==null?void 0:o.getFullPathSelector)==null?void 0:a.call(o);return r?`${r} > ${n}`:n}getNameAndAliases(){return[this._parsedProps.name,...this._parsedProps.portHints??[]].filter(Boolean)}isMatchingNameOrAlias(t){return this.getNameAndAliases().includes(t)}isMatchingAnyOf(t){return this.getNameAndAliases().some(n=>t.map(r=>r.toString()).includes(n))}getPcbSize(){throw new Error(`getPcbSize not implemented for ${this.componentName}`)}doesSelectorMatch(t){const n=[this.componentName,this.lowercaseComponentName],r=[this._parsedProps.name].filter(Boolean),o=t.trim().split(/\> /)[0],a=o[0];return o.length>1?!1:!!(t==="*"||t[0]==="#"&&t.slice(1)===this.props.id||t[0]==="."&&r.includes(t.slice(1))||/^[a-zA-Z0-9_]/.test(a)&&n.includes(a))}getSubcircuit(){var n,r;if(this.isSubcircuit)return this;const t=(r=(n=this.parent)==null?void 0:n.getSubcircuit)==null?void 0:r.call(n);if(!t)throw new Error("Component is not inside an opaque group (no board?)");return t}getGroup(){var t,n;return this.isGroup?this:((n=(t=this.parent)==null?void 0:t.getGroup)==null?void 0:n.call(t))??null}doInitialOptimizeSelectorCache(){var n;if(!this.isSubcircuit)return;const t=this.selectAll("port");for(const r of t){const o=(n=r.parent)==null?void 0:n.getNameAndAliases(),a=r.getNameAndAliases();if(o)for(const s of o)for(const l of a){const c=[`.${s} > .${l}`,`.${s} .${l}`];for(const u of c){const d=this._cachedSelectAllQueries.get(u);d?d.push(r):this._cachedSelectAllQueries.set(u,[r])}}}for(const[r,o]of this._cachedSelectAllQueries.entries())o.length===1&&this._cachedSelectOneQueries.set(r,o[0])}selectAll(t){if(this._cachedSelectAllQueries.has(t))return this._cachedSelectAllQueries.get(t);const n=stt(t),r=GF(n,this,Fge);if(r.length>0)return this._cachedSelectAllQueries.set(t,r),r;const[o,...a]=n.split(" "),s=IQ(o,this,{adapter:att});if(!s)return[];const l=s.selectAll(a.join(" "));return this._cachedSelectAllQueries.set(t,l),l}selectOne(t,n){if(this._cachedSelectOneQueries.has(t))return this._cachedSelectOneQueries.get(t);const r=stt(t);n!=null&&n.port&&(n.type="port");let o=null;if(n!=null&&n.type&&(o=GF(r,this,Fge).find(u=>u.lowercaseComponentName===n.type)),o??(o=IQ(r,this,Fge)),o)return this._cachedSelectOneQueries.set(t,o),o;const[a,...s]=r.split(" "),l=IQ(a,this,{adapter:att});return l?(o=l.selectOne(s.join(" "),n),this._cachedSelectOneQueries.set(t,o),o):null}getAvailablePcbLayers(){var t,n;if(this.isPcbPrimitive){const{maybeFlipLayer:r}=this._getPcbPrimitiveFlippedHelpers();return"layer"in this._parsedProps||this.componentName==="SmtPad"?[r(this._parsedProps.layer??"top")]:"layers"in this._parsedProps?this._parsedProps.layers:this.componentName==="PlatedHole"?((n=(t=this.root)==null?void 0:t._getBoard())==null?void 0:n.allLayers)??["top","bottom"]:[]}return[]}getDescendants(){const t=[];for(const n of this.children)t.push(n),t.push(...n.getDescendants());return t}getSelectableDescendants(){const t=[];for(const n of this.children)n.isSubcircuit?t.push(n):(t.push(n),t.push(...n.getSelectableDescendants()));return t}_getPinCount(){return 0}_getSchematicBoxDimensions(){return null}_getSchematicBoxComponentDimensions(){if(this.getSchematicSymbol()||!this.config.shouldRenderAsSchematicBox)return null;const{_parsedProps:t}=this;return{schWidth:t.schWidth,schHeight:t.schHeight}}renderError(t){var n;if(typeof t=="string")return super.renderError(t);(n=this.root)==null||n.db.pcb_placement_error.insert(t)}getString(){var o,a;const{lowercaseComponentName:t,_parsedProps:n,parent:r}=this;return(n==null?void 0:n.pinNumber)!==void 0&&((o=r==null?void 0:r.props)!=null&&o.name)&&(n!=null&&n.name)?`<${t}#${this._renderId}(pin:${n.pinNumber} .${r==null?void 0:r.props.name}>.${n.name}) />`:(a=r==null?void 0:r.props)!=null&&a.name&&(n!=null&&n.name)?`<${t}#${this._renderId}(.${r==null?void 0:r.props.name}>.${n==null?void 0:n.name}) />`:n!=null&&n.from&&(n!=null&&n.to)?`<${t}#${this._renderId}(from:${n.from} to:${n==null?void 0:n.to}) />`:n!=null&&n.name?`<${t}#${this._renderId} name=".${n==null?void 0:n.name}" />`:n!=null&&n.portHints?`<${t}#${this._renderId}(${n.portHints.map(s=>`.${s}`).join(", ")}) />`:`<${t}#${this._renderId} />`}get[Symbol.toStringTag](){return this.getString()}[Symbol.for("nodejs.util.inspect.custom")](){return this.getString()}},mvn=class extends MI{constructor(e,t){super(e),this._parsedProps={...e,error:t,type:e.type||"unknown",component_name:e.name,error_type:"source_failed_to_create_component_error",message:t instanceof Error?t.message:String(t),pcbX:e.pcbX,pcbY:e.pcbY,schX:e.schX,schY:e.schY}}get config(){return{componentName:"ErrorPlaceholder",zodProps:Ft({}).passthrough()}}doInitialSourceRender(){var e,t,n,r;if((e=this.root)!=null&&e.db){const o=this._getGlobalPcbPositionBeforeLayout(),a=this._getGlobalSchematicPositionBeforeLayout();this.root.db.source_failed_to_create_component_error.insert({component_name:this._parsedProps.component_name,message:((r=(n=(t=this._parsedProps.error)==null?void 0:t.formattedError)==null?void 0:n._errors)==null?void 0:r.join("; "))||this._parsedProps.message,pcb_center:o,schematic_center:a})}}};function yvn(i,e){return new mvn(i,e)}function vvn(i,e){const t=i;return t.__tsci={...e},i}var ltt={supportsMutation:!0,createInstance(i,e){const t=pV[i];if(!t)throw Object.keys(pV).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): "${i}" See CREATING_NEW_COMPONENTS.md`);try{return vvn(new t(e),{})}catch(n){return yvn(e,n)}},createTextInstance(){return{}},appendInitialChild(i,e){i.add(e)},appendChild(i,e){i.add(e)},appendChildToContainer(i,e){i.add(e)},finalizeInitialChildren(){return!1},prepareUpdate(){return null},shouldSetTextContent(){return!1},getRootHostContext(){return{}},getChildHostContext(){return{}},prepareForCommit(){return null},resetAfterCommit(){},commitMount(){},commitUpdate(){},removeChild(){},clearContainer(){},supportsPersistence:!1,getPublicInstance(i){return i},preparePortalMount(i){throw new Error("Function not implemented.")},scheduleTimeout(i,e){throw new Error("Function not implemented.")},cancelTimeout(i){throw new Error("Function not implemented.")},noTimeout:void 0,isPrimaryRenderer:!1,getInstanceFromNode(i){throw new Error("Function not implemented.")},beforeActiveInstanceBlur(){throw new Error("Function not implemented.")},afterActiveInstanceBlur(){throw new Error("Function not implemented.")},prepareScopeUpdate:(i,e)=>{throw new Error("Function not implemented.")},getInstanceFromScope:i=>{throw new Error("Function not implemented.")},detachDeletedInstance:i=>{throw new Error("Function not implemented.")},getCurrentEventPriority:()=>hQ.DefaultEventPriority,getCurrentUpdatePriority:()=>hQ.DefaultEventPriority,resolveUpdatePriority:()=>hQ.DefaultEventPriority,setCurrentUpdatePriority:()=>{},maySuspendCommit:()=>!1,supportsHydration:!1},BM;kA.version.startsWith("19.")?BM=T2e(ltt):BM=F2e(ltt);var _vn=i=>{const e={children:[],props:{name:"$root"},add(o){o.parent=this,this.children.push(o)},computePcbGlobalTransform(){return h1()}},t=[],n=BM.createContainer(e,0,null,!1,null,"tsci",o=>{console.log("Error in createContainer"),console.error(o),t.push(o)},null);if(kA.version.startsWith("19.")?(BM.updateContainerSync(i,n,null,()=>{}),BM.flushSyncWork()):BM.updateContainer(i,n,null,()=>{}),t.length>0)throw t[0];const r=BM.getPublicRootInstance(n);return r||e.children[0]},g7=(i,e)=>{if(typeof i=="number")return i;if(i.startsWith("pin"))return Number(i.slice(3));if(!e)throw new Error(`No pin labels provided and pin number or label is not a number: "${i}"`);for(const t in e)if((Array.isArray(e[t])?e[t]:[e[t]]).includes(i))return Number(t.replace("pin",""));throw new Error(`No pin labels provided and pin number or label is not a number: "${i}"`)},Ivn=(i,e)=>{if(!i)return;const t={},n={};for(const[r,o]of Object.entries(i)){const a=g7(r,e);n[a]={...n[a],...o}}for(const[r,o]of Object.entries(n)){const a=`pin${r}`;t[a]={bottom_margin:o.bottomMargin,left_margin:o.leftMargin,right_margin:o.rightMargin,top_margin:o.topMargin}}return t},Cvn=i=>{if(i){if("leftSide"in i||"rightSide"in i||"topSide"in i||"bottomSide"in i)return{left_side:i.leftSide,right_side:i.rightSide,top_side:i.topSide,bottom_side:i.bottomSide};if("leftPinCount"in i||"rightPinCount"in i||"topPinCount"in i||"bottomPinCount"in i)return{left_size:i.leftPinCount,right_size:i.rightPinCount,top_size:i.topPinCount,bottom_size:i.bottomPinCount};if("leftSize"in i||"rightSize"in i||"topSize"in i||"bottomSize"in i)return{left_size:i.leftSize,right_size:i.rightSize,top_size:i.topSize,bottom_size:i.bottomSize}}};function ctt(i){const e=[];for(let t=0;t<i.length-1;t++)e.push([i[t],i[t+1]]);return e}var xvn=Ft({name:Ae()}),utt=class extends MI{constructor(){super(...arguments);Ce(this,"source_net_id")}get config(){return{componentName:"Net",zodProps:xvn}}getPortSelector(){return`net.${this.props.name}`}doInitialSourceRender(){const{db:t}=this.root,{_parsedProps:n}=this,r=t.source_net.insert({name:n.name,member_source_group_ids:[]});this.source_net_id=r.source_net_id}doInitialSourceParentAttachment(){const t=this.getSubcircuit();if(!t)return;const{db:n}=this.root;n.source_net.update(this.source_net_id,{subcircuit_id:t.subcircuit_id})}getAllConnectedPorts(){const t=this.getSubcircuit().selectAll("port"),n=[];for(const r of t){const o=r._getDirectlyConnectedTraces();for(const a of o)if(a._isExplicitlyConnectedToNet(this)){n.push(r);break}}return n}_getAllDirectlyConnectedTraces(){const t=this.getSubcircuit().selectAll("trace"),n=[];for(const r of t)r._isExplicitlyConnectedToNet(this)&&n.push(r);return n}doInitialPcbRouteNetIslands(){var s;if((s=this.root)!=null&&s.pcbDisabled||this.getSubcircuit()._parsedProps.routingDisabled||this.getSubcircuit()._getAutorouterConfig().groupMode!=="sequential-trace")return;const{db:t}=this.root,{_parsedProps:n}=this,r=this._getAllDirectlyConnectedTraces().filter(l=>{var c;return(((c=l._portsRoutedOnPcb)==null?void 0:c.length)??0)>0}),o=[];for(const l of r){const c=l._portsRoutedOnPcb,u=o.find(d=>c.some(f=>d.ports.includes(f)));if(!u){o.push({ports:[...c],traces:[l]});continue}u.traces.push(l),u.ports.push(...c)}if(o.length===0)return;const a=ctt(o);for(const[l,c]of a){const u=l.ports.map(S=>S._getGlobalPcbPositionBeforeLayout()),d=c.ports.map(S=>S._getGlobalPcbPositionBeforeLayout());let f=1/0,h=[-1,-1];for(let S=0;S<u.length;S++){const M=u[S];for(let z=0;z<d.length;z++){const U=d[z],H=Math.sqrt((M.x-U.x)**2+(M.y-U.y)**2);H<f&&(f=H,h=[S,z])}}const g=l.ports[h[0]],y=c.ports[h[1]],v=t.toArray().filter(S=>S.type==="pcb_smtpad"||S.type==="pcb_trace"||S.type==="pcb_plated_hole"||S.type==="pcb_hole"||S.type==="source_port"||S.type==="pcb_port"),{solution:_}=i3e(v.concat([{type:"source_trace",source_trace_id:"__net_trace_tmp",connected_source_port_ids:[g.source_port_id,y.source_port_id]}])),x=_[0];if(!x){this.renderError({pcb_trace_error_id:"",pcb_trace_id:"__net_trace_tmp",pcb_component_ids:[g.pcb_component_id,y.pcb_component_id].filter(Boolean),pcb_port_ids:[g.pcb_port_id,y.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}t.pcb_trace.insert(x)}}renderError(t){var n;if(typeof t=="string")return super.renderError(t);(n=this.root)==null||n.db.pcb_trace_error.insert(t)}},dtt=(i,e)=>{for(const t of e)if(typeof t=="string"&&t.startsWith("net.")){if(/net\.[^\s>]*\./.test(t))throw new Error('Net names cannot contain a period, try using "sel.net..." to autocomplete with conventional net names, e.g. V3_3');if(/net\.[0-9]/.test(t))throw new Error('Net names cannot start with a number, try using a prefix like "VBUS1"');const n=i.getSubcircuit();if(!n.selectOne(t)){const r=new utt({name:t.split("net.")[1]});n.add(r)}}},Uge=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_smtpad_id",null);Ce(this,"matchedPort",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SmtPad",zodProps:v3e}}getPcbSize(){const{_parsedProps:t}=this;if(t.shape==="circle")return{width:t.radius*2,height:t.radius*2};if(t.shape==="rect")return{width:t.width,height:t.height};throw new Error(`getPcbSize for shape "${t.shape}" not implemented for ${this.componentName}`)}doInitialPortMatching(){var n;const t=(n=this.getPrimitiveContainer())==null?void 0:n.selectAll("port");if(this.props.portHints){for(const r of t)if(r.isMatchingAnyOf(this.props.portHints)){this.matchedPort=r,r.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var h,g,y,v,_,x,S,M,z,U;if((h=this.root)!=null&&h.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this;if(!n.portHints)return;const r=this.getPrimitiveContainer(),o=this.getSubcircuit(),a=this._getGlobalPcbPositionBeforeLayout();r==null||r._getGlobalPcbPositionBeforeLayout();const s=mQ(this._computePcbGlobalTransformBeforeLayout()),l=Math.abs(s.rotation.angle*(180/Math.PI)-90)%180<.01,{maybeFlipLayer:c}=this._getPcbPrimitiveFlippedHelpers(),u=(r==null?void 0:r._parsedProps.pcbRotation)??0;let d=null;const f=((g=this.parent)==null?void 0:g.pcb_component_id)??((y=this.getPrimitiveContainer())==null?void 0:y.pcb_component_id);n.shape==="circle"?(d=t.pcb_smtpad.insert({pcb_component_id:f,pcb_port_id:(v=this.matchedPort)==null?void 0:v.pcb_port_id,layer:c(n.layer??"top"),shape:"circle",radius:n.radius,port_hints:n.portHints.map(H=>H.toString()),x:a.x,y:a.y,subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0}),t.pcb_solder_paste.insert({layer:d.layer,shape:"circle",radius:d.radius*.7,x:d.x,y:d.y,pcb_component_id:d.pcb_component_id,pcb_smtpad_id:d.pcb_smtpad_id,subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((_=this.getGroup())==null?void 0:_.pcb_group_id)??void 0})):n.shape==="rect"&&(d=u===0||l?t.pcb_smtpad.insert({pcb_component_id:f,pcb_port_id:(x=this.matchedPort)==null?void 0:x.pcb_port_id,layer:c(n.layer??"top"),shape:"rect",width:l?n.height:n.width,height:l?n.width:n.height,port_hints:n.portHints.map(H=>H.toString()),x:a.x,y:a.y,subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((S=this.getGroup())==null?void 0:S.pcb_group_id)??void 0}):t.pcb_smtpad.insert({pcb_component_id:f,layer:c(n.layer??"top"),shape:"rotated_rect",width:n.width,height:n.height,x:a.x,y:a.y,ccw_rotation:u,port_hints:n.portHints.map(H=>H.toString()),subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((M=this.getGroup())==null?void 0:M.pcb_group_id)??void 0}),d.shape==="rect"&&t.pcb_solder_paste.insert({layer:c(n.layer??"top"),shape:"rect",width:d.width*.7,height:d.height*.7,x:d.x,y:d.y,pcb_component_id:d.pcb_component_id,pcb_smtpad_id:d.pcb_smtpad_id,subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((z=this.getGroup())==null?void 0:z.pcb_group_id)??void 0}),d.shape==="rotated_rect"&&t.pcb_solder_paste.insert({layer:c(n.layer??"top"),shape:"rotated_rect",width:d.width*.7,height:d.height*.7,x:d.x,y:d.y,ccw_rotation:u,pcb_component_id:d.pcb_component_id,pcb_smtpad_id:d.pcb_smtpad_id,subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((U=this.getGroup())==null?void 0:U.pcb_group_id)??void 0})),d&&(this.pcb_smtpad_id=d.pcb_smtpad_id)}doInitialPcbPortAttachment(){var n,r;if((n=this.root)!=null&&n.pcbDisabled)return;const{db:t}=this.root;t.pcb_smtpad.update(this.pcb_smtpad_id,{pcb_port_id:(r=this.matchedPort)==null?void 0:r.pcb_port_id})}_getPcbCircuitJsonBounds(){const{db:t}=this.root,n=t.pcb_smtpad.get(this.pcb_smtpad_id);if(n.shape==="rect")return{center:{x:n.x,y:n.y},bounds:{left:n.x-n.width/2,top:n.y+n.height/2,right:n.x+n.width/2,bottom:n.y-n.height/2},width:n.width,height:n.height};if(n.shape==="rotated_rect"){const r=n.ccw_rotation*Math.PI/180,o=Math.cos(r),a=Math.sin(r),s=n.width/2,l=n.height/2,c=Math.abs(s*o)+Math.abs(l*a),u=Math.abs(s*a)+Math.abs(l*o);return{center:{x:n.x,y:n.y},bounds:{left:n.x-c,right:n.x+c,top:n.y-u,bottom:n.y+u},width:c*2,height:u*2}}if(n.shape==="circle")return{center:{x:n.x,y:n.y},bounds:{left:n.x-n.radius,top:n.y-n.radius,right:n.x+n.radius,bottom:n.y+n.radius},width:n.radius*2,height:n.radius*2};throw new Error(`circuitJson bounds calculation not implemented for shape "${n.shape}"`)}_setPositionFromLayout(t){var o;const{db:n}=this.root;n.pcb_smtpad.update(this.pcb_smtpad_id,{x:t.x,y:t.y});const r=n.pcb_solder_paste.list().find(a=>a.pcb_smtpad_id===this.pcb_smtpad_id);n.pcb_solder_paste.update(r==null?void 0:r.pcb_solder_paste_id,{x:t.x,y:t.y}),(o=this.matchedPort)==null||o._setPositionFromLayout(t)}},Att=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_silkscreen_path_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenPath",zodProps:O3e}}doInitialPcbPrimitiveRender(){var c,u,d;if((c=this.root)!=null&&c.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,{maybeFlipLayer:r}=this._getPcbPrimitiveFlippedHelpers(),o=r(n.layer??"top");if(o!=="top"&&o!=="bottom")throw new Error(`Invalid layer "${o}" for SilkscreenPath. Must be "top" or "bottom".`);const a=this._computePcbGlobalTransformBeforeLayout(),s=this.getSubcircuit(),l=t.pcb_silkscreen_path.insert({pcb_component_id:(u=this.parent)==null?void 0:u.pcb_component_id,layer:o,route:n.route.map(f=>{const h=Qr(a,{x:f.x,y:f.y});return{...f,x:h.x,y:h.y}}),stroke_width:n.strokeWidth??.1,subcircuit_id:(s==null?void 0:s.subcircuit_id)??void 0,pcb_group_id:((d=this.getGroup())==null?void 0:d.pcb_group_id)??void 0});this.pcb_silkscreen_path_id=l.pcb_silkscreen_path_id}getPcbSize(){const{_parsedProps:t}=this;if(!t.route||t.route.length===0)return{width:0,height:0};let n=1/0,r=-1/0,o=1/0,a=-1/0;for(const s of t.route)n=Math.min(n,s.x),r=Math.max(r,s.x),o=Math.min(o,s.y),a=Math.max(a,s.y);return{width:r-n,height:a-o}}},Evn=Ft({route:Ci(Lk),source_trace_id:Ae().optional()}),ftt=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_trace_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"PcbTrace",zodProps:Evn}}doInitialPcbPrimitiveRender(){var u,d;if((u=this.root)!=null&&u.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this.getPrimitiveContainer(),o=this.getSubcircuit(),{maybeFlipLayer:a}=this._getPcbPrimitiveFlippedHelpers(),s=this._computePcbGlobalTransformBeforeLayout(),l=n.route.map(f=>{const{x:h,y:g,...y}=f,v=Qr(s,{x:h,y:g});return f.route_type==="wire"&&f.layer?{...v,...y,layer:a(f.layer)}:{...v,...y}}),c=t.pcb_trace.insert({pcb_component_id:r.pcb_component_id,source_trace_id:n.source_trace_id,route:l,subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((d=this.getGroup())==null?void 0:d.pcb_group_id)??void 0});this.pcb_trace_id=c.pcb_trace_id}getPcbSize(){const{_parsedProps:t}=this;if(!t.route||t.route.length===0)return{width:0,height:0};let n=1/0,r=-1/0,o=1/0,a=-1/0;for(const s of t.route)n=Math.min(n,s.x),r=Math.max(r,s.x),o=Math.min(o,s.y),a=Math.max(a,s.y),s.route_type==="wire"&&(n=Math.min(n,s.x-s.width/2),r=Math.max(r,s.x+s.width/2),o=Math.min(o,s.y-s.width/2),a=Math.max(a,s.y+s.width/2));return n===1/0||r===-1/0||o===1/0||a===-1/0?{width:0,height:0}:{width:r-n,height:a-o}}},Gge=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_plated_hole_id",null);Ce(this,"matchedPort",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"PlatedHole",zodProps:d3e}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:t}=this;if(t.shape==="circle")return{width:t.outerDiameter,height:t.outerDiameter};if(t.shape==="oval"||t.shape==="pill")return{width:t.outerWidth,height:t.outerHeight};if(t.shape==="circular_hole_with_rect_pad")return{width:t.rectPadWidth,height:t.rectPadHeight};if(t.shape==="pill_hole_with_rect_pad")return{width:t.rectPadWidth,height:t.rectPadHeight};throw new Error(`getPcbSize for shape "${t.shape}" not implemented for ${this.componentName}`)}_getPcbCircuitJsonBounds(){const{db:t}=this.root,n=t.pcb_plated_hole.get(this.pcb_plated_hole_id),r=this.getPcbSize();return{center:{x:n.x,y:n.y},bounds:{left:n.x-r.width/2,top:n.y+r.height/2,right:n.x+r.width/2,bottom:n.y-r.height/2},width:r.width,height:r.height}}_setPositionFromLayout(t){var r;const{db:n}=this.root;n.pcb_plated_hole.update(this.pcb_plated_hole_id,{x:t.x,y:t.y}),(r=this.matchedPort)==null||r._setPositionFromLayout(t)}doInitialPortMatching(){var n;const t=(n=this.getPrimitiveContainer())==null?void 0:n.selectAll("port");if(this.props.portHints){for(const r of t)if(r.isMatchingAnyOf(this.props.portHints)){this.matchedPort=r,r.registerMatch(this);return}}}doInitialPcbPrimitiveRender(){var s,l,c,u,d,f,h,g,y,v,_,x,S,M,z;if((s=this.root)!=null&&s.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this._getGlobalPcbPositionBeforeLayout(),o=((l=this.parent)==null?void 0:l.pcb_component_id)??((c=this.getPrimitiveContainer())==null?void 0:c.pcb_component_id),a=this.getSubcircuit();if(n.shape==="circle"){const U=t.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:(u=this.matchedPort)==null?void 0:u.pcb_port_id,outer_diameter:n.outerDiameter,hole_diameter:n.holeDiameter,shape:"circle",port_hints:this.getNameAndAliases(),x:r.x,y:r.y,layers:["top","bottom"],subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((d=this.getGroup())==null?void 0:d.pcb_group_id)??void 0});this.pcb_plated_hole_id=U.pcb_plated_hole_id,t.pcb_solder_paste.insert({layer:"top",shape:"circle",radius:n.outerDiameter/2,x:r.x,y:r.y,subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((f=this.getGroup())==null?void 0:f.pcb_group_id)??void 0}),t.pcb_solder_paste.insert({layer:"bottom",shape:"circle",radius:n.outerDiameter/2,x:r.x,y:r.y,subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((h=this.getGroup())==null?void 0:h.pcb_group_id)??void 0})}else if(n.shape==="pill"||n.shape==="oval"){const U=t.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:(g=this.matchedPort)==null?void 0:g.pcb_port_id,outer_width:n.outerWidth,outer_height:n.outerHeight,hole_width:n.holeWidth,hole_height:n.holeHeight,shape:n.shape,port_hints:this.getNameAndAliases(),x:r.x,y:r.y,layers:["top","bottom"],subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((y=this.getGroup())==null?void 0:y.pcb_group_id)??void 0});this.pcb_plated_hole_id=U.pcb_plated_hole_id,t.pcb_solder_paste.insert({layer:"top",shape:n.shape,width:n.outerWidth,height:n.outerHeight,x:r.x,y:r.y,subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((v=this.getGroup())==null?void 0:v.pcb_group_id)??void 0}),t.pcb_solder_paste.insert({layer:"bottom",shape:n.shape,width:n.outerWidth,height:n.outerHeight,x:r.x,y:r.y,subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((_=this.getGroup())==null?void 0:_.pcb_group_id)??void 0})}else if(n.shape==="circular_hole_with_rect_pad"){const U=t.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:(x=this.matchedPort)==null?void 0:x.pcb_port_id,hole_diameter:n.holeDiameter,rect_pad_width:n.rectPadWidth,rect_pad_height:n.rectPadHeight,shape:"circular_hole_with_rect_pad",port_hints:this.getNameAndAliases(),x:r.x,y:r.y,layers:["top","bottom"],subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((S=this.getGroup())==null?void 0:S.pcb_group_id)??void 0});this.pcb_plated_hole_id=U.pcb_plated_hole_id}else if(n.shape==="pill_hole_with_rect_pad"){const U=t.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:(M=this.matchedPort)==null?void 0:M.pcb_port_id,hole_width:n.holeWidth,hole_height:n.holeHeight,rect_pad_width:n.rectPadWidth,rect_pad_height:n.rectPadHeight,shape:"pill_hole_with_rect_pad",port_hints:this.getNameAndAliases(),x:r.x,y:r.y,layers:["top","bottom"],subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((z=this.getGroup())==null?void 0:z.pcb_group_id)??void 0});this.pcb_plated_hole_id=U.pcb_plated_hole_id}}doInitialPcbPortAttachment(){var n,r;if((n=this.root)!=null&&n.pcbDisabled)return;const{db:t}=this.root;t.pcb_plated_hole.update(this.pcb_plated_hole_id,{pcb_port_id:(r=this.matchedPort)==null?void 0:r.pcb_port_id})}},Oge=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_keepout_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Keepout",zodProps:L3e}}doInitialPcbPrimitiveRender(){var c,u,d;if((c=this.root)!=null&&c.pcbDisabled)return;const t=this.getSubcircuit(),{db:n}=this.root,{_parsedProps:r}=this,o=this._getGlobalPcbPositionBeforeLayout(),a=mQ(this._computePcbGlobalTransformBeforeLayout()),s=Math.abs(a.rotation.angle*(180/Math.PI)-90)%180<.01;let l=null;r.shape==="circle"?l=n.pcb_keepout.insert({layers:["top"],shape:"circle",radius:r.radius,center:{x:o.x,y:o.y},subcircuit_id:(t==null?void 0:t.subcircuit_id)??void 0,pcb_group_id:((u=t==null?void 0:t.getGroup())==null?void 0:u.pcb_group_id)??void 0}):r.shape==="rect"&&(l=n.pcb_keepout.insert({layers:["top"],shape:"rect",...s?{width:r.height,height:r.width}:{width:r.width,height:r.height},center:{x:o.x,y:o.y},subcircuit_id:(t==null?void 0:t.subcircuit_id)??void 0,pcb_group_id:((d=t==null?void 0:t.getGroup())==null?void 0:d.pcb_group_id)??void 0})),l&&(this.pcb_keepout_id=l.pcb_keepout_id)}},htt=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_hole_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Hole",zodProps:_3e}}getPcbSize(){const{_parsedProps:t}=this;return{width:t.diameter,height:t.diameter}}doInitialPcbPrimitiveRender(){var s,l;if((s=this.root)!=null&&s.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this.getSubcircuit(),o=this._getGlobalPcbPositionBeforeLayout(),a=t.pcb_hole.insert({hole_shape:"circle",hole_diameter:n.diameter,x:o.x,y:o.y,subcircuit_id:(r==null?void 0:r.subcircuit_id)??void 0,pcb_group_id:((l=r==null?void 0:r.getGroup())==null?void 0:l.pcb_group_id)??void 0});this.pcb_hole_id=a.pcb_hole_id}_getPcbCircuitJsonBounds(){const{db:t}=this.root,n=t.pcb_hole.get(this.pcb_hole_id),r=this.getPcbSize();return{center:{x:n.x,y:n.y},bounds:{left:n.x-r.width/2,top:n.y-r.height/2,right:n.x+r.width/2,bottom:n.y+r.height/2},width:r.width,height:r.height}}_setPositionFromLayout(t){const{db:n}=this.root;n.pcb_hole.update(this.pcb_hole_id,{x:t.x,y:t.y})}},zge=class extends MI{constructor(){super(...arguments);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenText",zodProps:G3e}}doInitialPcbPrimitiveRender(){var l,c;if((l=this.root)!=null&&l.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this.getPrimitiveContainer(),o=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:a}=this._getPcbPrimitiveFlippedHelpers(),s=this.getSubcircuit();t.pcb_silkscreen_text.insert({anchor_alignment:n.anchorAlignment,anchor_position:{x:o.x,y:o.y},font:n.font??"tscircuit2024",font_size:n.fontSize??1,layer:a(n.layer??"top"),text:n.text??"",ccw_rotation:n.pcbRotation,pcb_component_id:r.pcb_component_id,subcircuit_id:(s==null?void 0:s.subcircuit_id)??void 0,pcb_group_id:((c=this.getGroup())==null?void 0:c.pcb_group_id)??void 0})}getPcbSize(){const{_parsedProps:t}=this,n=t.fontSize??1,o=(t.text??"").length*n,a=n;return{width:o*n,height:a*n}}},bvn=({elm:i,pinLabels:e,layer:t,readableRotation:n,anchorAlignment:r})=>{const o=i.text.replace(/[{}]/g,"").toLowerCase();let a=o;if(Array.isArray(e)){const s=parseInt(o.replace(/[^\d]/g,""),10)-1;a=String(e[s]??o)}else typeof e=="object"&&(a=String(e[o]??o));return new zge({anchorAlignment:r||"center",text:a??o,layer:t||"top",fontSize:i.font_size+.2,pcbX:isNaN(i.anchor_position.x)?0:i.anchor_position.x,pcbY:i.anchor_position.y,pcbRotation:n??0})},Bvn=(i,e)=>((-parseInt(i||"0",10)+(e??0))%360+360)%360,ptt=({componentName:i,componentRotation:e,footprint:t,pinLabels:n},r)=>{const o=[];for(const a of r)if(a.type==="pcb_smtpad"&&a.shape==="rect")o.push(new Uge({pcbX:a.x,pcbY:a.y,layer:a.layer,shape:"rect",height:a.height,width:a.width,portHints:a.port_hints}));else if(a.type==="pcb_smtpad"&&a.shape==="circle")o.push(new Uge({pcbX:a.x,pcbY:a.y,layer:a.layer,shape:"circle",radius:a.radius,portHints:a.port_hints}));else if(a.type==="pcb_silkscreen_path")o.push(new Att({layer:a.layer,route:a.route,strokeWidth:a.stroke_width}));else if(a.type==="pcb_plated_hole")a.shape==="circle"?o.push(new Gge({pcbX:a.x,pcbY:a.y,shape:"circle",holeDiameter:a.hole_diameter,outerDiameter:a.outer_diameter,portHints:a.port_hints})):a.shape==="circular_hole_with_rect_pad"&&o.push(new Gge({pcbX:a.x,pcbY:a.y,shape:"circular_hole_with_rect_pad",holeDiameter:a.hole_diameter,rectPadHeight:a.rect_pad_height,rectPadWidth:a.rect_pad_width,portHints:a.port_hints}));else if(a.type==="pcb_keepout"&&a.shape==="circle")o.push(new Oge({pcbX:a.center.x,pcbY:a.center.y,shape:"circle",radius:a.radius}));else if(a.type==="pcb_keepout"&&a.shape==="rect")o.push(new Oge({pcbX:a.center.x,pcbY:a.center.y,shape:"rect",width:a.width,height:a.height}));else if(a.type==="pcb_hole"&&a.hole_shape==="circle")o.push(new htt({pcbX:a.x,pcbY:a.y,diameter:a.hole_diameter}));else if(a.type==="pcb_silkscreen_text"){const s=Bvn(e,a.ccw_rotation);t.includes("pinrow")&&a.text.includes("PIN")?o.push(bvn({elm:a,pinLabels:n,layer:a.layer,readableRotation:s,anchorAlignment:a.anchor_alignment})):o.push(new zge({anchorAlignment:a.anchor_alignment||"center",text:i,fontSize:a.font_size+.2,pcbX:isNaN(a.anchor_position.x)?0:a.anchor_position.x,pcbY:a.anchor_position.y,pcbRotation:s??0}))}else a.type==="pcb_trace"&&o.push(new ftt({route:a.route}));return o};function Hge(i){let e=1/0,t=1/0,n=-1/0,r=-1/0,o=!1;for(const l of i)if(l.isPcbPrimitive&&!l.componentName.startsWith("Silkscreen")){const{x:c,y:u}=l._getGlobalPcbPositionBeforeLayout(),{width:d,height:f}=l.getPcbSize();e=Math.min(e,c-d/2),t=Math.min(t,u-f/2),n=Math.max(n,c+d/2),r=Math.max(r,u+f/2),o=!0}else if(l.children.length>0){const c=Hge(l.children);(c.width>0||c.height>0)&&(e=Math.min(e,c.minX),t=Math.min(t,c.minY),n=Math.max(n,c.maxX),r=Math.max(r,c.maxY),o=!0)}if(!o)return{minX:0,minY:0,maxX:0,maxY:0,width:0,height:0};let a=n-e,s=r-t;return a<0&&(a=0),s<0&&(s=0),{minX:e,minY:t,maxX:n,maxY:r,width:a,height:s}}function Svn(i,e){const t=e.x-i.x,n=e.y-i.y;return Math.abs(t)>Math.abs(n)?t>=0?"right":"left":n>=0?"up":"down"}var wvn=i=>{if(i.length<=1)return!0;const e=i.map(o=>{const a=o._getPcbCircuitJsonBounds();return{left:a.bounds.left,right:a.bounds.right,top:a.bounds.top,bottom:a.bounds.bottom}}),t=Array(e.length).fill(!1).map(()=>Array(e.length).fill(!1));for(let o=0;o<e.length;o++)for(let a=o+1;a<e.length;a++){const s=e[o],l=e[a];t[o][a]=t[a][o]=!(s.right<l.left||s.left>l.right||s.bottom>l.top||s.top<l.bottom)}const n=new Set,r=o=>{n.add(o);for(let a=0;a<e.length;a++)t[o][a]&&!n.has(a)&&r(a)};return r(0),n.size===e.length},Mvn=i=>{if(i.length===0)throw new Error("Cannot get center of empty PCB primitives array");const e=i.map(r=>r._getPcbCircuitJsonBounds().center).filter(Boolean),t=e.reduce((r,o)=>r+o.x,0),n=e.reduce((r,o)=>r+o.y,0);return{x:t/e.length,y:n/e.length}},Qvn=Ft({name:Ae().optional(),pinNumber:nn().optional(),aliases:Ci(Ae()).optional()}),S5=class extends MI{constructor(t,n={}){if(!t.name&&t.pinNumber!==void 0&&(t.name=`pin${t.pinNumber}`),!t.name)throw new Error("Port must have a name or a pinNumber");super(t);Ce(this,"source_port_id",null);Ce(this,"pcb_port_id",null);Ce(this,"schematic_port_id",null);Ce(this,"schematicSymbolPortDef",null);Ce(this,"matchedComponents");Ce(this,"facingDirection",null);Ce(this,"originDescription",null);n.originDescription&&(this.originDescription=n.originDescription),this.matchedComponents=[]}get config(){return{componentName:"Port",zodProps:Qvn}}_getGlobalPcbPositionBeforeLayout(){const t=this.matchedComponents.find(r=>r.isPcbPrimitive),n=this.parent;if(n&&!n.props.footprint)throw new Error(`${n.componentName} "${n.props.name}" does not have a footprint. Add a footprint prop, e.g. <${n.componentName.toLowerCase()} footprint="..." />`);if(!t)throw new Error(`Port ${this} has no matching PCB primitives. This often means the footprint's pads lack matching port hints.`);return(t==null?void 0:t._getGlobalPcbPositionBeforeLayout())??{x:0,y:0}}_getPcbCircuitJsonBounds(){if(!this.pcb_port_id)return super._getPcbCircuitJsonBounds();const{db:t}=this.root,n=t.pcb_port.get(this.pcb_port_id);return{center:{x:n.x,y:n.y},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getGlobalPcbPositionAfterLayout(){return this._getPcbCircuitJsonBounds().center}_getPortsInternallyConnectedToThisPort(){const t=this.parent;if(!t||!t._getInternallyConnectedPins)return[];const n=t._getInternallyConnectedPins();for(const r of n)if(r.some(o=>o===this))return r;return[]}_hasSchematicPort(){var r,o;if((r=this.parent)==null?void 0:r.getSchematicSymbol())return!!(this.schematicSymbolPortDef||this._getPortsInternallyConnectedToThisPort().some(s=>s.schematicSymbolPortDef));const n=(o=this==null?void 0:this.parent)==null?void 0:o._getSchematicBoxDimensions();return!!(n&&this.props.pinNumber!==void 0&&n.getPortPositionByPinNumber(this.props.pinNumber))}_getGlobalSchematicPositionBeforeLayout(){var r,o,a;const t=(r=this.parent)==null?void 0:r.getSchematicSymbol();if(t){let s=this.schematicSymbolPortDef;if(!s&&(s=((o=this._getPortsInternallyConnectedToThisPort().find(c=>c.schematicSymbolPortDef))==null?void 0:o.schematicSymbolPortDef)??null,!s))throw new Error(`Couldn't find schematicSymbolPortDef for port ${this.getString()}, searched internally connected ports and none had a schematicSymbolPortDef. Why are we trying to get the schematic position of this port?`);const l=XA(this.parent.computeSchematicGlobalTransform(),hp(-t.center.x,-t.center.y));return Qr(l,s)}const n=(a=this==null?void 0:this.parent)==null?void 0:a._getSchematicBoxDimensions();if(n&&this.props.pinNumber!==void 0){const s=n.getPortPositionByPinNumber(this.props.pinNumber);if(!s)throw new Error(`Couldn't find position for schematic_port for port ${this.getString()} inside of the schematic box`);return Qr(this.parent.computeSchematicGlobalTransform(),s)}throw new Error(`Couldn't find position for schematic_port for port ${this.getString()}`)}_getGlobalSchematicPositionAfterLayout(){const{db:t}=this.root;if(!this.schematic_port_id)throw new Error(`Can't get schematic port position after layout for "${this.getString()}", no schematic_port_id`);const n=t.schematic_port.get(this.schematic_port_id);if(!n)throw new Error(`Schematic port not found when trying to get post-layout position: ${this.schematic_port_id}`);return n.center}registerMatch(t){this.matchedComponents.push(t)}getNameAndAliases(){const{_parsedProps:t}=this;return Array.from(new Set([...t.aliases??[],...t.name?[t.name]:[],...typeof t.pinNumber=="number"?[`pin${t.pinNumber}`,t.pinNumber.toString()]:[],...this.externallyAddedAliases??[]]))}isMatchingPort(t){return this.isMatchingAnyOf(t.getNameAndAliases())}getPortSelector(){var t;return`.${(t=this.parent)==null?void 0:t.props.name} > port.${this.props.name}`}getAvailablePcbLayers(){return Array.from(new Set(this.matchedComponents.flatMap(t=>t.getAvailablePcbLayers())))}_getDirectlyConnectedTraces(){return this.getSubcircuit().selectAll("trace").filter(r=>r._isExplicitlyConnectedToPort(this))}doInitialSourceRender(){var a,s;const{db:t}=this.root,{_parsedProps:n}=this,r=this.getNameAndAliases(),o=t.source_port.insert({name:n.name,pin_number:n.pinNumber,port_hints:r,source_component_id:(a=this.parent)==null?void 0:a.source_component_id,subcircuit_id:(s=this.getSubcircuit())==null?void 0:s.subcircuit_id});this.source_port_id=o.source_port_id}doInitialSourceParentAttachment(){var n,r,o,a,s;const{db:t}=this.root;if(!((n=this.parent)!=null&&n.source_component_id))throw new Error(`${this.getString()} has no parent source component (parent: ${(r=this.parent)==null?void 0:r.getString()})`);t.source_port.update(this.source_port_id,{source_component_id:(o=this.parent)==null?void 0:o.source_component_id,subcircuit_id:(a=this.getSubcircuit())==null?void 0:a.subcircuit_id}),this.source_component_id=(s=this.parent)==null?void 0:s.source_component_id}doInitialPcbPortRender(){var a,s,l,c,u;if((a=this.root)!=null&&a.pcbDisabled)return;const{db:t}=this.root,{matchedComponents:n}=this;if(!((s=this.parent)!=null&&s.pcb_component_id))throw new Error(`${this.getString()} has no parent pcb component, cannot render pcb_port (parent: ${(l=this.parent)==null?void 0:l.getString()})`);const r=n.filter(d=>d.isPcbPrimitive);if(r.length===0)return;let o=null;if(r.length===1&&(o=r[0]._getPcbCircuitJsonBounds().center),r.length>1){if(!wvn(r))throw new Error(`${this.getString()} has multiple non-overlapping pcb matches, unclear how to place pcb_port: ${r.map(d=>d.getString()).join(", ")}. (Note: tscircuit core does not currently allow you to specify internally connected pcb primitives with the same port hints, try giving them different port hints and specifying they are connected externally- or file an issue)`);o=Mvn(r)}if(o){const d=this.getSubcircuit(),f=t.pcb_port.insert({pcb_component_id:(c=this.parent)==null?void 0:c.pcb_component_id,layers:this.getAvailablePcbLayers(),subcircuit_id:(d==null?void 0:d.subcircuit_id)??void 0,pcb_group_id:((u=this.getGroup())==null?void 0:u.pcb_group_id)??void 0,...o,source_port_id:this.source_port_id});this.pcb_port_id=f.pcb_port_id}else{const d=r[0];throw new Error(`${d.getString()} does not have a center or _getGlobalPcbPositionBeforeLayout method (needed for pcb_port placement)`)}}doInitialSchematicPortRender(){var f;const{db:t}=this.root,{_parsedProps:n}=this,r=this.getPrimitiveContainer();if(!r||!this._hasSchematicPort())return;const o=r._getGlobalSchematicPositionBeforeLayout(),a=this._getGlobalSchematicPositionBeforeLayout();let s=null;const l=r._getSchematicBoxDimensions();l&&n.pinNumber!==void 0&&(s=l.getPortPositionByPinNumber(n.pinNumber)),this.getSubcircuit().props._schDebugObjectsEnabled&&t.schematic_debug_object.insert({shape:"rect",center:a,size:{width:.1,height:.1},label:"obstacle"}),s!=null&&s.side?this.facingDirection={left:"left",right:"right",top:"up",bottom:"down"}[s.side]:this.facingDirection=Svn(o,a);const c=t.source_port.get(this.source_port_id);let u;for(const h of(c==null?void 0:c.port_hints)??[])h.match(/^(pin)?\d+$/)||h.match(/^(left|right)/)&&!(c!=null&&c.name.match(/^(left|right)/))||(u=h);const d=t.schematic_port.insert({schematic_component_id:(f=this.parent)==null?void 0:f.schematic_component_id,center:a,source_port_id:this.source_port_id,facing_direction:this.facingDirection,distance_from_component_edge:.4,side_of_component:s==null?void 0:s.side,pin_number:n.pinNumber,true_ccw_index:s==null?void 0:s.trueIndex,display_pin_label:u});this.schematic_port_id=d.schematic_port_id}_setPositionFromLayout(t){const{db:n}=this.root;this.pcb_port_id&&n.pcb_port.update(this.pcb_port_id,{x:t.x,y:t.y})}_hasMatchedPcbPrimitive(){return this.matchedComponents.some(t=>t.isPcbPrimitive)}},gtt=i=>{const e=i.find(t=>/^(pin)?\d+$/.test(t));return e?Number.parseInt(e.replace(/^pin/,"")):null};function m7(i,e){var o;const t=gtt(i);if(!t)return null;const r=[...i.filter(a=>a.toString()!==t.toString()&&a!==`pin${t}`),...((o=e==null?void 0:e.additionalAliases)==null?void 0:o[`pin${t}`])??[]];return new S5({pinNumber:t,aliases:r})}var Rvn=i=>{for(const e of["leftSide","rightSide","topSide","bottomSide"])if(e in i&&typeof i[e]=="number")throw new Error(`A number was specified for "${e}", you probably meant to use "size" not "side"`);return"leftSide"in i||"rightSide"in i||"topSide"in i||"bottomSide"in i},Dvn=i=>{var o,a,s,l;if(Rvn(i))return{leftSize:((o=i.leftSide)==null?void 0:o.pins.length)??0,rightSize:((a=i.rightSide)==null?void 0:a.pins.length)??0,topSize:((s=i.topSide)==null?void 0:s.pins.length)??0,bottomSize:((l=i.bottomSide)==null?void 0:l.pins.length)??0};const{leftSize:e=0,rightSize:t=0,topSize:n=0,bottomSize:r=0}=i;return{leftSize:e,rightSize:t,topSize:n,bottomSize:r}};function mtt(i){return i.leftSide!==void 0}var Nvn=i=>{var v,_,x,S,M,z,U,H;const e=i.portDistanceFromEdge??.4;let t=i.schPortArrangement?Dvn(i.schPortArrangement):null;const n={left:0,right:0,top:0,bottom:0};let r=i.pinCount??null;if(r===null)if(t)r=t.leftSize+t.rightSize+t.topSize;else throw new Error("Could not determine pin count for the schematic box");if(r&&!t){const k=Math.floor(r/2);t={leftSize:r-k,rightSize:k,topSize:0,bottomSize:0}}t||(t={leftSize:0,rightSize:0,topSize:0,bottomSize:0});const o=({side:k,sideIndex:j,truePinIndex:G})=>{var ue,le,_e,ye;if(!i.schPortArrangement||!mtt(i.schPortArrangement))return G+1;const ee={left:"top-to-bottom",bottom:"left-to-right",right:"bottom-to-top",top:"right-to-left"}[k],K=((le=(ue=i.schPortArrangement)==null?void 0:ue[`${k}Side`])==null?void 0:le.direction)??ee,ie=(ye=(_e=i.schPortArrangement)==null?void 0:_e[`${k}Side`])==null?void 0:ye.pins;let ce=j;return K!==ee&&(ce=ie.length-j-1),g7(ie[ce],i.pinLabels)},a=[];let s=0,l=0;for(let k=0;k<t.leftSize;k++){const j=o({side:"left",sideIndex:k,truePinIndex:l}),G=((v=i.numericSchPinStyle)==null?void 0:v[`pin${j}`])??((_=i.numericSchPinStyle)==null?void 0:_[j]);G!=null&&G.topMargin&&(s+=G.topMargin),a.push({trueIndex:l,pinNumber:j,side:"left",distanceFromOrthogonalEdge:s}),G!=null&&G.bottomMargin&&(s+=G.bottomMargin),k===t.leftSize-1?n.left=s:s+=i.schPinSpacing,l++}s=0;for(let k=0;k<t.bottomSize;k++){const j=o({side:"bottom",sideIndex:k,truePinIndex:l}),G=((x=i.numericSchPinStyle)==null?void 0:x[`pin${j}`])??((S=i.numericSchPinStyle)==null?void 0:S[j]);G!=null&&G.leftMargin&&(s+=G.leftMargin),a.push({trueIndex:l,pinNumber:j,side:"bottom",distanceFromOrthogonalEdge:s}),G!=null&&G.rightMargin&&(s+=G.rightMargin),k===t.bottomSize-1?n.bottom=s:s+=i.schPinSpacing,l++}s=0;for(let k=0;k<t.rightSize;k++){const j=o({side:"right",sideIndex:k,truePinIndex:l}),G=((M=i.numericSchPinStyle)==null?void 0:M[`pin${j}`])??((z=i.numericSchPinStyle)==null?void 0:z[j]);G!=null&&G.bottomMargin&&(s+=G.bottomMargin),a.push({trueIndex:l,pinNumber:j,side:"right",distanceFromOrthogonalEdge:s}),G!=null&&G.topMargin&&(s+=G.topMargin),k===t.rightSize-1?n.right=s:s+=i.schPinSpacing,l++}s=0;for(let k=0;k<t.topSize;k++){const j=o({side:"top",sideIndex:k,truePinIndex:l}),G=((U=i.numericSchPinStyle)==null?void 0:U[`pin${j}`])??((H=i.numericSchPinStyle)==null?void 0:H[j]);G!=null&&G.rightMargin&&(s+=G.rightMargin),a.push({trueIndex:l,pinNumber:j,side:"top",distanceFromOrthogonalEdge:s}),G!=null&&G.leftMargin&&(s+=G.leftMargin),k===t.topSize-1?n.top=s:s+=i.schPinSpacing,l++}let c=i.schWidth;c||(c=Math.max(n.top+i.schPinSpacing*2,n.bottom+i.schPinSpacing*2));const u=i.pinLabels?Math.max(...Object.values(i.pinLabels).map(k=>k.length*.1)):0,d=u>0?1.1:0;c=Math.max(c,u+d);let f=i.schHeight;f||(f=Math.max(n.left+i.schPinSpacing*2,n.right+i.schPinSpacing*2));const h={left:{x:-c/2-e,y:n.left/2},bottom:{x:-n.bottom/2,y:-f/2-e},right:{x:c/2+e,y:-n.right/2},top:{x:n.top/2,y:f/2+e}},g={left:{x:0,y:-1},right:{x:0,y:1},top:{x:-1,y:0},bottom:{x:1,y:0}},y=a.map(k=>{const{distanceFromOrthogonalEdge:j,side:G}=k,ee=h[G],K=g[G];return{x:ee.x+j*K.x,y:ee.y+j*K.y,...k}});return{getPortPositionByPinNumber(k){const j=y.find(G=>G.pinNumber.toString()===k.toString());return j||null},getSize(){return{width:c,height:f}},getSizeIncludingPins(){return{width:c+(t.leftSize||t.rightSize?.4:0),height:f+(t.topSize||t.bottomSize?.4:0)}},pinCount:r}},Tvn=F1("tscircuit:core:footprint"),Pvn=class extends MI{get config(){return{componentName:"Footprint",zodProps:x3e}}doInitialPcbFootprintLayout(){var f,h,g,y,v;if((f=this.root)!=null&&f.pcbDisabled)return;const e=this.children.filter(_=>_.componentName==="Constraint");if(e.length===0)return;const{isFlipped:t}=this._getPcbPrimitiveFlippedHelpers(),n=_=>t&&"left"in _&&"right"in _?{..._,left:_.right,right:_.left}:_,r=e.flatMap(_=>_._getAllReferencedComponents().componentsWithSelectors).map(({component:_,selector:x,componentSelector:S,edge:M})=>({component:_,selector:x,componentSelector:S,edge:M,bounds:_._getPcbCircuitJsonBounds()}));if(r.some(_=>_.edge))throw new Error("edge constraints not implemented yet for footprint layout, contributions welcome!");function o(_){return r.find(({selector:x})=>x===_)}const a=new J3e,s={};function l(_){return _ in s||(s[_]=new eU(_),a.addEditVariable(s[_],n9.weak)),s[_]}for(const{selector:_,bounds:x}of r){const S=l(`${_}_x`),M=l(`${_}_y`);a.suggestValue(S,x.center.x),a.suggestValue(M,x.center.y)}for(const _ of e){const x=_._parsedProps;if("xDist"in x){const{xDist:S,left:M,right:z,edgeToEdge:U,centerToCenter:H}=n(x),k=l(`${M}_x`),j=l(`${z}_x`),G=(h=o(M))==null?void 0:h.bounds,ee=(g=o(z))==null?void 0:g.bounds;if(H){const K=new _9(j,[-1,k]);a.addConstraint(new ub(K,K9.Eq,x.xDist,n9.required))}else if(U){const K=new _9(j,-ee.width/2,[-1,k],-G.width/2);a.addConstraint(new ub(K,K9.Eq,x.xDist,n9.required))}}else if("yDist"in x){const{yDist:S,top:M,bottom:z,edgeToEdge:U,centerToCenter:H}=x,k=l(`${M}_y`),j=l(`${z}_y`),G=(y=o(M))==null?void 0:y.bounds,ee=(v=o(z))==null?void 0:v.bounds;if(H){const K=new _9(k,[-1,j]);a.addConstraint(new ub(K,K9.Eq,x.yDist,n9.required))}else if(U){const K=new _9(k,G.height/2,[-1,j],-ee.height/2);a.addConstraint(new ub(K,K9.Eq,x.yDist,n9.required))}}else if("sameY"in x){const{for:S}=x;if(S.length<2)continue;const M=S.map(U=>l(`${U}_y`)),z=new _9(...M.slice(1));a.addConstraint(new ub(z,K9.Eq,M[0],n9.required))}else if("sameX"in x){const{for:S}=x;if(S.length<2)continue;const M=S.map(U=>l(`${U}_x`)),z=new _9(...M.slice(1));a.addConstraint(new ub(z,K9.Eq,M[0],n9.required))}}a.updateVariables(),Tvn.enabled&&(console.log("Solution to layout constraints:"),console.table(Object.entries(s).map(([_,x])=>({var:_,val:x.value()}))));const c={left:1/0,right:-1/0,top:-1/0,bottom:1/0};for(const{selector:_,bounds:{width:x,height:S}}of r){const M=l(`${_}_x`),z=l(`${_}_y`),U=M.value()-x/2,H=M.value()+x/2,k=z.value()+S/2,j=z.value()-S/2;c.left=Math.min(c.left,U),c.right=Math.max(c.right,H),c.top=Math.max(c.top,k),c.bottom=Math.min(c.bottom,j)}const u={x:-(c.right+c.left)/2,y:-(c.top+c.bottom)/2},d=this.getPrimitiveContainer()._getGlobalPcbPositionBeforeLayout();u.x+=d.x,u.y+=d.y;for(const{component:_,selector:x}of r){const S=l(`${x}_x`),M=l(`${x}_y`);_._setPositionFromLayout({x:S.value()+u.x,y:M.value()+u.y})}}},kvn=(i,e)=>{if(!i)return;const t={};for(const[n,r]of Object.entries(i)){const o=g7(n,e),a={leftMargin:r.marginLeft??r.leftMargin,rightMargin:r.marginRight??r.rightMargin,topMargin:r.marginTop??r.topMargin,bottomMargin:r.marginBottom??r.bottomMargin};t[`pin${o}`]={...t[`pin${o}`],...a}}return t},ytt=class{constructor({input:e}){Ce(this,"input");this.input=e}solveAndMapToTraces(){const e=[];for(const t of this.input.connections){if(t.pointsToConnect.length!==2)continue;const[n,r]=t.pointsToConnect,o={type:"pcb_trace",pcb_trace_id:"",connection_name:t.name,route:[{route_type:"wire",x:n.x,y:n.y,layer:"top",width:.1},{route_type:"wire",x:r.x,y:r.y,layer:"top",width:.1}]};e.push(o)}return e}},Lvn=i=>{const e=Math.min(...i.map(o=>o.center.x)),t=Math.max(...i.map(o=>o.center.x)),n=Math.min(...i.map(o=>o.center.y)),r=Math.max(...i.map(o=>o.center.y));return{minX:e,maxX:t,minY:n,maxY:r}},vtt=["top","bottom","inner1","inner2"],gV=(i,e=[])=>{var s;const t=[];if(e.length===0){const l=i[0].layers;for(const c of l)t.push(...gV(i.slice(1),[c]));return t}if(i.length===0)return[];const n=i[0],r=n.via||n.optional_via,o=e[e.length-1];if(i.length===1){const l=n;return l.layers&&r?l.layers.map(c=>({layer_path:[...e,c]})):(s=l.layers)!=null&&s.includes(o)?[{layer_path:[...e,o]}]:[]}if(!r)return n.layers&&!n.layers.includes(o)?[]:gV(i.slice(1),e.concat([o]));const a=(n.optional_via?vtt:vtt.filter(l=>l!==o)).filter(l=>{var c;return!n.layers||((c=n.layers)==null?void 0:c.includes(l))});for(const l of a)t.push(...gV(i.slice(1),e.concat(l)));return t};function _tt(i){const e={x:i.to.x-i.from.x,y:i.to.y-i.from.y},t=Math.abs(e.x),n=Math.abs(e.y);return t>n?e.x>0?"right":"left":e.y>0?"down":"up"}function ED(i,e){return Math.hypot(i.x-e.x,i.y-e.y)}var Fvn=i=>{if(i.length===1)return i[0];if(i.some(l=>l.length===0))throw new Error("Cannot merge routes with zero length");const e=[],t=i[0][0],n=i[0][i[0].length-1],r=i[1][0],o=i[1][i[1].length-1],a=Math.min(ED(t,r),ED(t,o)),s=Math.min(ED(n,r),ED(n,o));a<s?e.push(...i[0].reverse()):e.push(...i[0]);for(let l=1;l<i.length;l++){const c=e[e.length-1],u=i[l],d=u[0],f=u[u.length-1],h=ED(c,d),g=ED(c,f);h<g?e.push(...u):e.push(...u.reverse())}for(let l=1;l<e.length-1;l++){const c=e[l-1],u=e[l];c.route_type==="wire"&&u.route_type==="wire"&&c.layer!==u.layer&&e.splice(l,0,{x:c.x,y:c.y,from_layer:c.layer,to_layer:u.layer,route_type:"via"})}return e},Uvn=(i,e)=>{const t="_getGlobalPcbPositionBeforeLayout"in i?i._getGlobalPcbPositionBeforeLayout():i,n="_getGlobalPcbPositionBeforeLayout"in e?e._getGlobalPcbPositionBeforeLayout():e;return Math.sqrt((t.x-n.x)**2+(t.y-n.y)**2)};function Gvn(i,e){if(e.length===0)throw new Error("No candidates given to getClosest method");let t=e[0],n=1/0;for(const r of e){const o=Uvn(i,r);o<n&&(t=r,n=o)}return t}var Ovn=(i,e)=>{let t=0;t+=i.length??0,t+=e.filter(n=>n.is_crossing).length;for(let n=1;n<e.length;n++){const r=e[n-1],o=e[n],a=Math.abs(r.from.x-r.to.x)<.01,s=Math.abs(o.from.x-o.to.x)<.01;a!==s&&t++}return t},Yge=i=>({up:"bottom",down:"top",left:"right",right:"left"})[i]??null,Vge=({firstEdge:i,firstEdgePort:e,firstDominantDirection:t,lastEdge:n,lastEdgePort:r,lastDominantDirection:o})=>{if(i&&e)return Vge({lastEdge:{from:i.to,to:i.from},lastEdgePort:e,lastDominantDirection:t}).reverse().map(s=>({from:s.to,to:s.from}));let a=[];if(n&&r){const s={x:n.to.x,y:n.to.y};o==="left"||o==="right"?(s.x=r.position.x,a.push({from:n.to,to:{...s}}),a.push({from:s,to:{...r.position}})):(s.y=r.position.y,a.push({from:n.to,to:{...s}}),a.push({from:s,to:{...r.position}}))}return a=a.filter(s=>p7(s.from,s.to)>.01),a};function zvn(i){try{return[i(),null]}catch(e){return[null,e]}}function Hvn(i){let e=0;for(let t=0;t<i.length;t++){const n=i[t];if(n.route_type==="wire"){const r=i[t+1];if(r){const o=r.x-n.x,a=r.y-n.y;e+=Math.sqrt(o*o+a*a)}}else n.route_type==="via"&&(e+=1.6)}return e}var mV=({db:i,source_trace_id:e,sameNetOnly:t,differentNetOnly:n})=>{!t&&!n&&(n=!0);const r=i.source_trace.get(e),o=[];for(const a of i.schematic_trace.list()){if(a.source_trace_id===e)continue;const s=i.source_trace.get(a.source_trace_id),l=(s==null?void 0:s.subcircuit_connectivity_map_key)===r.subcircuit_connectivity_map_key;n&&l||t&&!l||o.push(a)}return o},Itt=({edges:i,otherEdges:e})=>{const t=[...i];for(let n=0;n<t.length;n++){if(n>2e3)throw new Error("Over 2000 iterations spent inside createSchematicTraceCrossingSegments, you have triggered an infinite loop, please report this!");const r=t[n],o=Math.abs(r.from.x-r.to.x)<.01?"vertical":r.from.y===r.to.y?"horizontal":"not-orthogonal";if(o==="not-orthogonal")continue;const a=[];for(const y of e){const v=y.from.x===y.to.x?"vertical":y.from.y===y.to.y?"horizontal":"not-orthogonal";if(v==="not-orthogonal"||o===v)continue;if(ttt([r.from,r.to],[y.from,y.to],{lineThickness:.01})){const x=o==="vertical"?r.from.x:y.from.x,S=o==="vertical"?y.from.y:r.from.y,M={x,y:S};a.push({otherEdge:y,crossingPoint:M,distanceFromEdgeFrom:p7(r.from,M)})}}if(a.length===0)continue;let s=a[0];for(const y of a)y.distanceFromEdgeFrom<s.distanceFromEdgeFrom&&(s=y);const l=s.crossingPoint,c=.075;if(l.x===r.from.x&&l.y===r.from.y)continue;const u=cvn(r.from,l),d={x:l.x-u.x*c/2,y:l.y-u.y*c/2},f={x:l.x+u.x*c/2,y:l.y+u.y*c/2},h=p7(f,r.to)<c,g=[{from:r.from,to:d},{from:d,to:f,is_crossing:!0},{from:f,to:r.to}];t.splice(n,1,...g),n+=g.length-2,h&&n++}return t},Yvn=(i,e)=>{if(i.from.x===i.to.x&&e.from.x===e.to.x)return null;if(i.from.x===i.to.x){const u=i.from.x,d=(e.to.y-e.from.y)/(e.to.x-e.from.x),f=e.from.y-d*e.from.x,h=d*u+f;return u>=Math.min(e.from.x,e.to.x)&&u<=Math.max(e.from.x,e.to.x)&&h>=Math.min(e.from.y,e.to.y)&&h<=Math.max(e.from.y,e.to.y)?{x:u,y:h}:null}if(e.from.x===e.to.x){const u=e.from.x,d=(i.to.y-i.from.y)/(i.to.x-i.from.x),f=i.from.y-d*i.from.x,h=d*u+f;return u>=Math.min(i.from.x,i.to.x)&&u<=Math.max(i.from.x,i.to.x)&&h>=Math.min(i.from.y,i.to.y)&&h<=Math.max(i.from.y,i.to.y)?{x:u,y:h}:null}const t=(i.to.y-i.from.y)/(i.to.x-i.from.x),n=i.from.y-t*i.from.x,r=(e.to.y-e.from.y)/(e.to.x-e.from.x),o=e.from.y-r*e.from.x;if(t===r)return null;const a=(o-n)/(t-r),s=t*a+n,l=a>=Math.min(i.from.x,i.to.x)&&a<=Math.max(i.from.x,i.to.x)&&s>=Math.min(i.from.y,i.to.y)&&s<=Math.max(i.from.y,i.to.y),c=a>=Math.min(e.from.x,e.to.x)&&a<=Math.max(e.from.x,e.to.x)&&s>=Math.min(e.from.y,e.to.y)&&s<=Math.max(e.from.y,e.to.y);return l&&c?{x:a,y:s}:null},Ctt=({edges:i,db:e,source_trace_id:t})=>{const n=mV({db:e,source_trace_id:t,sameNetOnly:!0}).flatMap(r=>r.edges);for(const r of i)for(const o of n){const a=Yvn(r,o);if(a)return`${a.x}${a.y}`,[{x:a.x,y:a.y}]}return[]},Vvn=(i,{db:e})=>{const t=i.map(n=>{const r=e.source_port.get(n.source_port_id);if(!(r!=null&&r.source_component_id))return null;const o=e.source_component.get(r.source_component_id);return(o==null?void 0:o.ftype)==="simple_capacitor"?o.max_decoupling_trace_length:null}).filter(n=>n!==null);if(t.length!==0)return Math.min(...t)};function jvn(i){var o,a,s,l,c,u,d,f,h;let e=1/0,t=1/0,n=-1/0,r=-1/0;for(const g of i){let y,v,_,x;g.type==="schematic_component"?(y=(o=g.center)==null?void 0:o.x,v=(a=g.center)==null?void 0:a.y,_=(s=g.size)==null?void 0:s.width,x=(l=g.size)==null?void 0:l.height):g.type==="schematic_box"?(y=g.x,v=g.y,_=g.width,x=g.height):g.type==="schematic_port"?(y=(c=g.center)==null?void 0:c.x,v=(u=g.center)==null?void 0:u.y,_=.2,x=.2):g.type==="schematic_text"&&(y=(d=g.position)==null?void 0:d.x,v=(f=g.position)==null?void 0:f.y,_=(((h=g.text)==null?void 0:h.length)??0)*.1,x=.2),typeof y=="number"&&typeof v=="number"&&typeof _=="number"&&typeof x=="number"&&(e=Math.min(e,y-_/2),n=Math.max(n,y+_/2),t=Math.min(t,v-x/2),r=Math.max(r,v+x/2))}return{minX:e,maxX:n,minY:t,maxY:r}}function Kvn(i,e={}){const{minX:t,maxX:n,minY:r,maxY:o}=i,a=e.padding??1;if(!isFinite(t)||!isFinite(n)||!isFinite(r)||!isFinite(o))return[];const s=t-a,l=n+a,c=o+a,u=r-a,d=.01;return[{type:"rect",layers:["top"],center:{x:(s+l)/2,y:c},width:l-s,height:d,connectedTo:[]},{type:"rect",layers:["top"],center:{x:(s+l)/2,y:u},width:l-s,height:d,connectedTo:[]},{type:"rect",layers:["top"],center:{x:s,y:(c+u)/2},width:d,height:c-u,connectedTo:[]},{type:"rect",layers:["top"],center:{x:l,y:(c+u)/2},width:d,height:c-u,connectedTo:[]}]}var Jvn=i=>{var a;const e=i.root.db,t=i._findConnectedPorts().ports??[],n=new Set(t.map(s=>s.schematic_port_id)),r=[];for(const s of e.toArray()){if(s.type==="schematic_component"){const l=!!s.symbol_name,c=s.size.width>s.size.height?"horz":"vert";r.push({type:"rect",layers:["top"],center:s.center,width:s.size.width+(l&&c==="horz"?-.5:0),height:s.size.height+(l&&c==="vert"?-.5:0),connectedTo:[]})}if(s.type==="schematic_port"){if(n.has(s.schematic_port_id))continue;const l=s.facing_direction?uvn(s.facing_direction):{x:0,y:0};r.push({type:"rect",layers:["top"],center:{x:s.center.x-l.x*.1,y:s.center.y-l.y*.1},width:.1+Math.abs(l.x)*.3,height:.1+Math.abs(l.y)*.3,connectedTo:[]})}s.type==="schematic_text"&&r.push({type:"rect",layers:["top"],center:s.position,width:(((a=s.text)==null?void 0:a.length)??0)*.1,height:.2,connectedTo:[]}),s.type==="schematic_box"&&r.push({type:"rect",layers:["top"],center:{x:s.x,y:s.y},width:s.width,height:s.height,connectedTo:[]})}const o=jvn(e.toArray());return r.push(...Kvn(o,{padding:1})),r};function Wvn({ports:i,nets:e}){var t,n,r;if(i.length>=2)return`${(t=i[0])==null?void 0:t.selector} to ${(n=i[1])==null?void 0:n.selector}`;if(i.length===1&&e.length===1)return`${(r=i[0])==null?void 0:r.selector} to net.${e[0]._parsedProps.name}`}var qvn=({edges:i,db:e,source_trace_id:t})=>{e.source_trace.get(t);const n=mV({db:e,source_trace_id:t,differentNetOnly:!0}).flatMap(o=>o.edges),r=o=>{const{from:a,to:s}=o;return a.x===s.x?"vertical":"horizontal"};for(const o of i){const a=r(o),s=()=>n.find(c=>r(c)===a&&ttt([o.from,o.to],[c.from,c.to],{lineThickness:.05}));let l=s();for(;l;)a==="horizontal"?(o.from.y+=.1,o.to.y+=.1):(o.from.x+=.1,o.to.x+=.1),l=s()}},Xvn=(i,{db:e})=>{const t=e.pcb_board.list()[0];if(t.outline){const l=t.outline,c=(u,d)=>{let f=!1;for(let h=0,g=d.length-1;h<d.length;g=h++){const y=d[h].x,v=d[h].y,_=d[g].x,x=d[g].y;v>u.y!=x>u.y&&u.x<(_-y)*(u.y-v)/(x-v)+y&&(f=!f)}return f};return i.some(u=>!c(u,l))}const n=t.width,r=t.height,o=t.center.x,a=t.center.y;return i.some(l=>l.x<o-n/2||l.y<a-r/2||l.x>o+n/2||l.y>a+r/2)},yV=i=>({...i._getGlobalPcbPositionAfterLayout(),layers:i.getAvailablePcbLayers()}),w5=class extends MI{constructor(t){super(t);Ce(this,"source_trace_id",null);Ce(this,"pcb_trace_id",null);Ce(this,"schematic_trace_id",null);Ce(this,"_portsRoutedOnPcb");Ce(this,"subcircuit_connectivity_map_key",null);Ce(this,"_traceConnectionHash",null);this._portsRoutedOnPcb=[]}get config(){return{zodProps:C3e,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(t=>typeof t=="string"?t:t.getPortSelector()):[]}getTracePortPathSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter(t=>!t.includes("net."))}getTracePathNetSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter(t=>t.includes("net."))}_findConnectedPorts(){const{db:t}=this.root,{_parsedProps:n,parent:r}=this;if(!r)throw new Error("Trace has no parent");const a=this.getTracePortPathSelectors().map(s=>({selector:s,port:this.getSubcircuit().selectOne(s,{type:"port"})??null}));for(const{selector:s,port:l}of a)if(!l){const c=s.replace(/(\> )?[^ ]+$/,""),u=this.getSubcircuit().selectOne(c);u?this.renderError(`Could not find port for selector "${s}" (did you forget to include the pin name?)
|
|
13345
13345
|
searched component ${u.getString()}, which has ports: ${u.children.filter(d=>d.componentName==="Port").map(d=>`${d.getString()}(${d.getNameAndAliases().join(",")})`).join(" & ")}`):this.renderError(`Could not find port for selector "${s}"`)}return a.some(s=>!s.port)?{allPortsFound:!1}:{allPortsFound:!0,portsWithSelectors:a,ports:a.map(({port:s})=>s)}}_findConnectedNets(){const t=this.getTracePathNetSelectors().map(r=>({selector:r,net:this.getSubcircuit().selectOne(r,{type:"net"})})),n=t.filter(r=>!r.net);return n.length>0&&this.renderError(`Could not find net for selector "${n[0].selector}" inside ${this}`),{netsWithSelectors:t,nets:t.map(r=>r.net)}}_getAllTracesConnectedToSameNet(){const t=this.getSubcircuit().selectAll("trace"),n=this._findConnectedNets().nets,r=this._findConnectedPorts().ports??[];return t.filter(o=>{if(o===this)return!1;const a=o._findConnectedNets().nets,s=o._findConnectedPorts().ports??[];return a.some(l=>n.includes(l))||s.some(l=>r.includes(l))})}_isExplicitlyConnectedToPort(t){const{allPortsFound:n,portsWithSelectors:r}=this._findConnectedPorts();return n?r.map(a=>a.port).includes(t):!1}_isExplicitlyConnectedToNet(t){return this._findConnectedNets().nets.includes(t)}doInitialCreateNetsFromProps(){dtt(this,this.getTracePathNetSelectors())}_computeTraceConnectionHash(){const{allPortsFound:t,ports:n}=this._findConnectedPorts();return!t||!n?null:[...n].sort((a,s)=>(a.pcb_port_id||"").localeCompare(s.pcb_port_id||"")).map(a=>a.pcb_port_id).join(",")}doInitialSourceTraceRender(){var f;const{db:t}=this.root,{_parsedProps:n,parent:r}=this;if(!r){this.renderError("Trace has no parent");return}const{allPortsFound:o,portsWithSelectors:a}=this._findConnectedPorts();if(!o)return;this._traceConnectionHash=this._computeTraceConnectionHash();const l=t.source_trace.list().find(h=>h.subcircuit_connectivity_map_key===this.subcircuit_connectivity_map_key&&h.connected_source_port_ids.sort().join(",")===this._traceConnectionHash);if(l){this.source_trace_id=l.source_trace_id;return}const c=this._findConnectedNets().nets,u=Wvn({ports:a,nets:c}),d=t.source_trace.insert({connected_source_port_ids:a.map(h=>h.port.source_port_id),connected_source_net_ids:c.map(h=>h.source_net_id),subcircuit_id:(f=this.getSubcircuit())==null?void 0:f.subcircuit_id,max_length:Vvn(a.map(h=>h.port),{db:t})??n.maxLength,display_name:u,min_trace_thickness:n.thickness});this.source_trace_id=d.source_trace_id}_insertErrorIfTraceIsOutsideBoard(t,n){const{db:r}=this.root;Xvn(t,{db:r})&&r.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:this.source_trace_id,message:`Trace ${this.getString()} routed outside the board boundaries.`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:n.map(a=>a.pcb_port_id)})}doInitialPcbTraceRender(){var j,G,ee,K;if((j=this.root)!=null&&j.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n,parent:r}=this,o=this.getSubcircuit();if(!r)throw new Error("Trace has no parent");if(o._parsedProps.routingDisabled)return;const a=(G=o._parsedProps.pcbRouteCache)==null?void 0:G.pcbTraces;if(a){const ie=t.pcb_trace.insert({route:a.flatMap(ce=>ce.route),source_trace_id:this.source_trace_id,subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((ee=this.getGroup())==null?void 0:ee.pcb_group_id)??void 0});this.pcb_trace_id=ie.pcb_trace_id;return}if(!o._shouldUseTraceByTraceRouting())return;const{allPortsFound:s,ports:l}=this._findConnectedPorts();if(!s)return;const c=[];for(const ie of l)ie._hasMatchedPcbPrimitive()||c.push(ie);if(c.length>0){t.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: ${c.map(ie=>ie.getString()).join(", ")}`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:c.map(ie=>ie.pcb_port_id).filter(Boolean)});return}const u=this._findConnectedNets().netsWithSelectors;if(l.length===0&&u.length===2){this.renderError("Trace connects two nets, we haven't implemented a way to route this yet");return}else if(l.length===1&&u.length===1){const ie=l[0],ue=u[0].net.getAllConnectedPorts().filter(_e=>_e!==ie);if(ue.length===0){console.log("Nothing to connect this port to, the net is empty. TODO should emit a warning!");return}const le=Gvn(ie,ue);l.push(le)}else if(l.length>1&&u.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 d=l.flatMap(ie=>ie.matchedComponents.filter(ce=>ce.componentName==="TraceHint")),f=(this._parsedProps.pcbRouteHints??[]).concat(d.flatMap(ie=>ie.getPcbRouteHints()));if(l.length>2){this.renderError(`Trace has more than two ports (${l.map(ie=>ie.getString()).join(", ")}), routing between more than two ports for a single trace is not implemented`);return}if(this.getSubcircuit().selectAll("trace").filter(ie=>ie.renderPhaseStates.PcbTraceRender.initialized).some(ie=>ie._portsRoutedOnPcb.length===l.length&&ie._portsRoutedOnPcb.every(ce=>l.includes(ce))))return;let y=[];f.length===0?y=[yV(l[0]),yV(l[1])]:y=[yV(l[0]),...f,yV(l[1])];const v=gV(y),_=OS(this.root.db.toArray()),[x,S]=zvn(()=>VF(this.root.db.toArray()));if(S){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: ${S.message}`,source_trace_id:this.source_trace_id,center:{x:0,y:0},pcb_port_ids:l.map(ie=>ie.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[]});return}for(const ie of x)if(ie.connectedTo.length>0){const ue=_.getNetConnectedToId(ie.connectedTo[0]);ue&&ie.connectedTo.push(ue)}let M=[];if(v.length===0)M=y;else{const ie=v[0].layer_path;M=y.map((ce,ue)=>ce.via?{...ce,via_to_layer:ie[ue]}:{...ce,layers:[ie[ue]]})}M[0].pcb_port_id=l[0].pcb_port_id,M[M.length-1].pcb_port_id=l[1].pcb_port_id;const z=[];for(const[ie,ce]of ctt(M)){const ue="via_to_layer"in ie?ie.via_to_layer:null,le=2,_e="layers"in ie&&ie.layers.length===1?ie.layers[0]:ue??"top",ye="layers"in ce&&ce.layers.length===1?ce.layers[0]:ue??"top",Qe="pcb_port_id"in ie?ie.pcb_port_id:null,Me="pcb_port_id"in ce?ce.pcb_port_id:null,Te=this.getSubcircuit()._parsedProps.minTraceWidth??.16,Ee=new YF({OBSTACLE_MARGIN:Te*2,isRemovePathLoopsEnabled:!0,optimizeWithGoalBoxes:!!(Qe&&Me),connMap:_,input:{obstacles:x,minTraceWidth:Te,connections:[{name:this.source_trace_id,pointsToConnect:[{...ie,layer:_e,pcb_port_id:Qe},{...ce,layer:ye,pcb_port_id:Me}]}],layerCount:2,bounds:{minX:Math.min(ie.x,ce.x)-le,maxX:Math.max(ie.x,ce.x)+le,minY:Math.min(ie.y,ce.y)-le,maxY:Math.max(ie.y,ce.y)+le}}});let Ge=null;try{Ge=Ee.solveAndMapToTraces()}catch(lt){this.renderError({type:"pcb_trace_error",pcb_trace_error_id:this.source_trace_id,error_type:"pcb_trace_error",message:`error solving route: ${lt.message}`,source_trace_id:this.pcb_trace_id,center:{x:(ie.x+ce.x)/2,y:(ie.y+ce.y)/2},pcb_port_ids:l.map(Rt=>Rt.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:l.map(Rt=>Rt.pcb_component_id)})}if(!Ge)return;if(Ge.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:(ie.x+ce.x)/2,y:(ie.y+ce.y)/2},pcb_port_ids:l.map(lt=>lt.pcb_port_id),pcb_trace_id:this.pcb_trace_id,pcb_component_ids:l.map(lt=>lt.pcb_component_id)});return}const[Ke]=Ge;ue&&(Ke.route=Ke.route.map(lt=>(lt.route_type==="wire"&&!lt.layer&&(lt.layer=ue),lt))),Qe&&Ke.route[0].route_type==="wire"&&(Ke.route[0].start_pcb_port_id=Qe);const nt=Ke.route[Ke.route.length-1];Me&&nt.route_type==="wire"&&(nt.end_pcb_port_id=Me),z.push(Ke.route)}const U=Fvn(z),H=Hvn(U),k=t.pcb_trace.insert({route:U,source_trace_id:this.source_trace_id,subcircuit_id:(K=this.getSubcircuit())==null?void 0:K.subcircuit_id,trace_length:H});this._portsRoutedOnPcb=l,this.pcb_trace_id=k.pcb_trace_id;for(const ie of U)ie.route_type==="via"&&t.pcb_via.insert({pcb_trace_id:k.pcb_trace_id,x:ie.x,y:ie.y,hole_diameter:.3,outer_diameter:.6,layers:[ie.from_layer,ie.to_layer],from_layer:ie.from_layer,to_layer:ie.to_layer});this._insertErrorIfTraceIsOutsideBoard(U,l)}_doInitialSchematicTraceRenderWithDisplayLabel(){var z,U,H,k;if((z=this.root)!=null&&z.schematicDisabled)return;const{db:t}=this.root,{_parsedProps:n,parent:r}=this;if(!r)throw new Error("Trace has no parent");const{allPortsFound:o,portsWithSelectors:a}=this._findConnectedPorts();if(!o)return;const s=a.map(({port:j})=>({port:j,position:j._getGlobalSchematicPositionAfterLayout(),schematic_port_id:j.schematic_port_id,facingDirection:j.facingDirection}));if(s.length<2)throw new Error("Expected at least two ports in portsWithPosition.");let l,c;const u=s[0].position,d=s[0].port;if("path"in this.props){if(this.props.path.length!==2)throw new Error("Invalid 'path': Must contain exactly two elements.");[l,c]=this.props.path}else{if(!("from"in this.props&&"to"in this.props))throw new Error("Missing 'from' or 'to' properties in props.");l=this.props.from,c=this.props.to}if(!d.source_port_id)throw new Error(`Missing source_port_id for the 'from' port (${l}).`);const f=s[1].position,h=s[1].port;if(!h.source_port_id)throw new Error(`Missing source_port_id for the 'to' port (${c}).`);const g=t.schematic_net_label.list().find(j=>j.source_net_id===d.source_port_id),y=t.schematic_net_label.list().find(j=>j.source_net_id===h.source_port_id),[v,_]=a.map(({port:j})=>j),S=((U=v.parent)==null?void 0:U.config.shouldRenderAsSchematicBox)?`${(H=v==null?void 0:v.parent)==null?void 0:H.props.name}_${v==null?void 0:v.props.name}`:`${(k=_==null?void 0:_.parent)==null?void 0:k.props.name}_${_==null?void 0:_.props.name}`,M=this.props.schDisplayLabel??S;g&&g.text!==M&&(g.text=`${M} / ${g.text}`),y&&(y==null?void 0:y.text)!==M&&(y.text=`${M} / ${y.text}`),y||t.schematic_net_label.insert({text:this.props.schDisplayLabel??S,source_net_id:h.source_port_id,anchor_position:f,center:f,anchor_side:Yge(h.facingDirection)??"bottom"}),g||t.schematic_net_label.insert({text:this.props.schDisplayLabel??S,source_net_id:d.source_port_id,anchor_position:u,center:u,anchor_side:Yge(d.facingDirection)??"bottom"})}_isSymbolToChipConnection(){const{allPortsFound:t,ports:n}=this._findConnectedPorts();if(!t||n.length!==2)return!1;const[r,o]=n;if(!(r!=null&&r.parent)||!(o!=null&&o.parent))return!1;const a=r.parent.config.shouldRenderAsSchematicBox,s=o.parent.config.shouldRenderAsSchematicBox;return a&&!s||!a&&s}_isSymbolToSymbolConnection(){const{allPortsFound:t,ports:n}=this._findConnectedPorts();if(!t||n.length!==2)return!1;const[r,o]=n;if(!(r!=null&&r.parent)||!(o!=null&&o.parent))return!1;const a=!r.parent.config.shouldRenderAsSchematicBox,s=!o.parent.config.shouldRenderAsSchematicBox;return a&&s}_isChipToChipConnection(){const{allPortsFound:t,ports:n}=this._findConnectedPorts();if(!t||n.length!==2)return!1;const[r,o]=n;if(!(r!=null&&r.parent)||!(o!=null&&o.parent))return!1;const a=r.parent.config.shouldRenderAsSchematicBox,s=o.parent.config.shouldRenderAsSchematicBox;return a&&s}doInitialSchematicTraceRender(){var _e,ye,Qe;if((_e=this.root)!=null&&_e.schematicDisabled||((ye=this.getGroup())==null?void 0:ye._getSchematicLayoutMode())==="match-adapt")return;const{db:t}=this.root,{_parsedProps:n,parent:r}=this;if(!r)throw new Error("Trace has no parent");const{allPortsFound:o,portsWithSelectors:a}=this._findConnectedPorts(),{netsWithSelectors:s}=this._findConnectedNets();if(!o)return;const c=a.map(Me=>Me.port.schematic_port_id).sort().join(","),u=(Qe=this.root)==null?void 0:Qe._getBoard();if(u!=null&&u._connectedSchematicPortPairs&&u._connectedSchematicPortPairs.has(c))return;if(this.props.schDisplayLabel&&("from"in this.props&&"to"in this.props||"path"in this.props)){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const d={name:this.source_trace_id,pointsToConnect:[]},f=Jvn(this),h=a.map(({port:Me})=>({port:Me,position:Me._getGlobalSchematicPositionAfterLayout(),schematic_port_id:Me.schematic_port_id??void 0,facingDirection:Me.facingDirection}));if(h.length===1&&s.length===1){const Me=s[0].net,{port:Te,position:Ee}=h[0];t.schematic_net_label.insert({text:Me._parsedProps.name,source_net_id:Me.source_net_id,anchor_position:Ee,center:Ee,anchor_side:Yge(Te.facingDirection)??"bottom"});return}if(h.length<2)return;d.pointsToConnect=h.map(({position:Me})=>({...Me,layer:"top"}));const y=Lvn(f),v=2,_={minTraceWidth:.1,obstacles:f,connections:[d],bounds:{minX:y.minX-v,maxX:y.maxX+v,minY:y.minY-v,maxY:y.maxY+v},layerCount:1};let x=YF,S=!1;this.getSubcircuit().props._schDirectLineRoutingEnabled&&(x=ytt,S=!0);let z=new x({input:_,MAX_ITERATIONS:100,OBSTACLE_MARGIN:.1,isRemovePathLoopsEnabled:!0,isShortenPathWithShortcutsEnabled:!0,marginsWithCosts:[{margin:1,enterCost:0,travelCostFactor:1},{margin:.3,enterCost:0,travelCostFactor:1},{margin:.2,enterCost:0,travelCostFactor:2},{margin:.1,enterCost:0,travelCostFactor:3}]}).solveAndMapToTraces();if(z.length===0){if(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection()||this._isChipToChipConnection()){this._doInitialSchematicTraceRenderWithDisplayLabel();return}z=new ytt({input:_}).solveAndMapToTraces(),S=!0}const[{route:U}]=z;let H=[];for(let Me=0;Me<U.length-1;Me++)H.push({from:U[Me],to:U[Me+1]});const k=this.source_trace_id;let j=[];if(!S){qvn({edges:H,db:t,source_trace_id:k});const Me=mV({db:t,source_trace_id:k,differentNetOnly:!0}).flatMap(Te=>Te.edges);H=Itt({edges:H,otherEdges:Me}),j=Ctt({edges:H,db:t,source_trace_id:this.source_trace_id})}const G=H[H.length-1],ee=h[h.length-1],K=_tt(G);H.push(...Vge({lastEdge:G,lastEdgePort:ee,lastDominantDirection:K}));const ie=H[0],ce=h[0],ue=_tt(ie);if(H.unshift(...Vge({firstEdge:ie,firstEdgePort:ce,firstDominantDirection:ue})),!this.source_trace_id)throw new Error("Missing source_trace_id for schematic trace insertion.");if(this.getSubcircuit()._parsedProps.schTraceAutoLabelEnabled&&Ovn(j,H)>=5&&(this._isSymbolToChipConnection()||this._isSymbolToSymbolConnection()||this._isChipToChipConnection())){this._doInitialSchematicTraceRenderWithDisplayLabel();return}const le=t.schematic_trace.insert({source_trace_id:this.source_trace_id,edges:H,junctions:j});this.schematic_trace_id=le.schematic_trace_id,u!=null&&u._connectedSchematicPortPairs&&u._connectedSchematicPortPairs.add(c)}},Zvn=F1("tscircuit:core"),$vn=Ft({x:lE,y:lE,z:lE}),S9=class extends MI{constructor(t){super(t);Ce(this,"reactSubtrees",[]);Ce(this,"_impliedFootprint");Ce(this,"isPrimitiveContainer",!0);Ce(this,"_asyncSupplierPartNumbers");Ce(this,"pcb_missing_footprint_error_id");Ce(this,"_hasStartedFootprintUrlLoad",!1);this._addChildrenFromStringFootprint(),this.initPorts()}get defaultInternallyConnectedPinNames(){return[]}get internallyConnectedPinNames(){return this._parsedProps.internallyConnectedPins??this.defaultInternallyConnectedPinNames}initPorts(t={}){var s,l,c,u,d,f,h,g,y,v;if((s=this.root)!=null&&s.schematicDisabled)return;const{config:n}=this,r=[],o=this._getSchematicPortArrangement();if(o&&!this._parsedProps.pinLabels){for(const S in o){const M=o[S].pins;if(Array.isArray(M))for(const z of M){const U=g7(z,this._parsedProps.pinLabels);r.push(new S5({pinNumber:U,aliases:((l=t.additionalAliases)==null?void 0:l[`pin${U}`])??[]},{originDescription:`schPortArrangement:${S}`}))}}const _=["left","right","top","bottom"];let x=1;for(const S of _){const M=o[`${S}Size`];for(let z=0;z<M;z++)r.push(new S5({pinNumber:x++,aliases:((c=t.additionalAliases)==null?void 0:c[`pin${x}`])??[]},{originDescription:`schPortArrangement:${S}`}))}}const a=this._parsedProps.pinLabels;if(a)for(let[_,x]of Object.entries(a)){_=_.replace("pin","");let S=r.find(U=>U._parsedProps.pinNumber===Number(_));const M=Array.isArray(x)?x[0]:x,z=Array.isArray(x)?x.slice(1):[];S?(S.externallyAddedAliases.push(M,...z),S.props.name=M):(S=new S5({pinNumber:parseInt(_),name:M,aliases:[...z,...((u=t.additionalAliases)==null?void 0:u[`pin${parseInt(_)}`])??[]]},{originDescription:`pinLabels:pin${_}`}),r.push(S))}if(n.schematicSymbolName){const _=YI[this._getSchematicSymbolNameOrThrow()];if(!_)return;for(const x of _.ports){const S=gtt(x.labels);if(!S)continue;const M=r.find(z=>z._parsedProps.pinNumber===Number(S));if(M)M.schematicSymbolPortDef=x;else{const z=m7(x.labels.concat(((d=t.additionalAliases)==null?void 0:d[`pin${S}`])??[]));z&&(z.originDescription=`schematicSymbol:labels[0]:${x.labels[0]}`,z.schematicSymbolPortDef=x,r.push(z))}}this.addAll(r)}if(!this._getSchematicPortArrangement()){const _=this.getPortsFromFootprint(t);for(const x of _)r.some(S=>S.isMatchingAnyOf(x.getNameAndAliases()))||r.push(x)}for(let _=1;_<=(t.pinCount??this._getPinCount());_++){if(!o||r.find(S=>S._parsedProps.pinNumber===_))continue;let x=[...((f=o.leftSide)==null?void 0:f.pins)??[],...((h=o.rightSide)==null?void 0:h.pins)??[],...((g=o.topSide)==null?void 0:g.pins)??[],...((y=o.bottomSide)==null?void 0:y.pins)??[]].map(S=>g7(S,this._parsedProps.pinLabels));["leftSize","rightSize","topSize","bottomSize","leftPinCount","rightPinCount","topPinCount","bottomPinCount"].some(S=>S in o)&&(x=Array.from({length:this._getPinCount()},(S,M)=>M+1)),x.includes(_)&&r.push(new S5({pinNumber:_,aliases:((v=t.additionalAliases)==null?void 0:v[`pin${_}`])??[]},{originDescription:`notOtherwiseAddedButDeducedFromPinCount:${_}`}))}r.length>0&&this.addAll(r)}_getImpliedFootprintString(){return null}_isFootprintUrl(t){return t.startsWith("http://")||t.startsWith("https://")}_addChildrenFromStringFootprint(){var a;const{name:t,pcbRotation:n,pinLabels:r}=this.props;let{footprint:o}=this.props;if(o??(o=(a=this._getImpliedFootprintString)==null?void 0:a.call(this)),!!o&&typeof o=="string"){if(this._isFootprintUrl(o))return;const s=Kk.string(o).soup(),l=ptt({componentName:t,componentRotation:n,footprint:o,pinLabels:r},s);this.addAll(l)}}get portMap(){return new Proxy({},{get:(t,n)=>{const r=this.children.find(o=>o.componentName==="Port"&&o.isMatchingNameOrAlias(n));if(!r)throw new Error(`There was an issue finding the port "${n.toString()}" inside of a ${this.componentName} component with name: "${this.props.name}". This is a bug in @tscircuit/core`);return r}})}getInstanceForReactElement(t){for(const n of this.reactSubtrees)if(n.element===t)return n.component;return null}doInitialSourceRender(){const t=this.config.sourceFtype;if(!t)return;const{db:n}=this.root,{_parsedProps:r}=this,o=n.source_component.insert({ftype:t,name:r.name,manufacturer_part_number:r.manufacturerPartNumber??r.mfn,supplier_part_numbers:r.supplierPartNumbers});this.source_component_id=o.source_component_id}doInitialSchematicComponentRender(){var o,a,s;if((o=this.root)!=null&&o.schematicDisabled)return;const{db:t}=this.root,{schematicSymbolName:n}=this.config;n?this._doInitialSchematicComponentRenderWithSymbol():this._getSchematicBoxDimensions()&&this._doInitialSchematicComponentRenderWithSchematicBoxDimensions();const r=(a=this.getSubcircuit())==null?void 0:a._getSchematicManualPlacementForComponent(this);if(this.schematic_component_id&&(this.props.schX!==void 0||this.props.schY!==void 0)&&r){if(!this.schematic_component_id)return;const l=kk.parse({type:"schematic_manual_edit_conflict_warning",schematic_manual_edit_conflict_warning_id:`schematic_manual_edit_conflict_${this.source_component_id}`,message:`${this.getString()} has both manual placement and prop coordinates. schX and schY will be used. Remove schX/schY or clear the manual placement.`,schematic_component_id:this.schematic_component_id,source_component_id:this.source_component_id,subcircuit_id:(s=this.getSubcircuit())==null?void 0:s.subcircuit_id});t.schematic_manual_edit_conflict_warning.insert(l)}}_getSchematicSymbolDisplayValue(){}_getInternallyConnectedPins(){if(this.internallyConnectedPinNames.length===0)return[];const t=[];for(const n of this.internallyConnectedPinNames){const r=[];for(const o of n)r.push(this.portMap[o]);t.push(r)}return t}_doInitialSchematicComponentRenderWithSymbol(){var s;if((s=this.root)!=null&&s.schematicDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this._getSchematicSymbolNameOrThrow(),o=YI[r],a=this._getGlobalSchematicPositionBeforeLayout();if(o){const l=t.schematic_component.insert({center:a,size:o.size,source_component_id:this.source_component_id,symbol_name:r,symbol_display_value:this._getSchematicSymbolDisplayValue()});this.schematic_component_id=l.schematic_component_id}}_doInitialSchematicComponentRenderWithSchematicBoxDimensions(){var f;if((f=this.root)!=null&&f.schematicDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this._getSchematicBoxDimensions(),o={};if(Array.isArray(n.pinLabels))n.pinLabels.forEach((h,g)=>{o[String(g+1)]=h});else for(const[h,g]of Object.entries(n.pinLabels??{}))o[h]=Array.isArray(g)?g[0]:g;const a=this._getGlobalSchematicPositionBeforeLayout(),s=this._getSchematicPortArrangement(),l=t.schematic_component.insert({center:a,rotation:n.schRotation??0,size:r.getSize(),port_arrangement:Cvn(s),pin_spacing:n.schPinSpacing??.2,pin_styles:Ivn(n.schPinStyle,n.pinLabels),port_labels:o,source_component_id:this.source_component_id}),c=(s==null?void 0:s.topSide)!==void 0||(s==null?void 0:s.bottomSide)!==void 0,u=r==null?void 0:r.getSize().width,d=r==null?void 0:r.getSize().height;t.schematic_text.insert({text:n.manufacturerPartNumber??"",schematic_component_id:l.schematic_component_id,anchor:"left",rotation:0,position:{x:c?a.x+(u??0)/2+.1:a.x-(u??0)/2,y:c?a.y+(d??0)/2+.35:a.y-(d??0)/2-.13},color:"#006464",font_size:.18}),t.schematic_text.insert({text:n.name??"",schematic_component_id:l.schematic_component_id,anchor:"left",rotation:0,position:{x:c?a.x+(u??0)/2+.1:a.x-(u??0)/2,y:c?a.y+(d??0)/2+.55:a.y+(d??0)/2+.13},color:"#006464",font_size:.18}),this.schematic_component_id=l.schematic_component_id}doInitialPcbComponentRender(){var s;if((s=this.root)!=null&&s.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this.getSubcircuit(),o=t.pcb_component.insert({center:this._getGlobalPcbPositionBeforeLayout(),width:0,height:0,layer:n.layer??"top",rotation:n.pcbRotation??0,source_component_id:this.source_component_id,subcircuit_id:r.subcircuit_id??void 0});if(!n.footprint&&!this.isGroup){const l=t.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=l.pcb_missing_footprint_error_id}this.pcb_component_id=o.pcb_component_id;const a=this.getSubcircuit()._getPcbManualPlacementForComponent(this);if((this.props.pcbX!==void 0||this.props.pcbY!==void 0)&&a){const l=Fk.parse({type:"pcb_manual_edit_conflict_warning",pcb_manual_edit_conflict_warning_id:`pcb_manual_edit_conflict_${this.source_component_id}`,message:`${this.getString()} has both manual placement and prop coordinates. pcbX and pcbY will be used. Remove pcbX/pcbY or clear the manual placement.`,pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,subcircuit_id:r.subcircuit_id??void 0});t.pcb_manual_edit_conflict_warning.insert(l)}}doInitialPcbComponentSizeCalculation(){var a;if((a=this.root)!=null&&a.pcbDisabled||!this.pcb_component_id)return;const{db:t}=this.root,{_parsedProps:n}=this,r=Hge(this.children);if(r.width===0||r.height===0)return;const o={x:(r.minX+r.maxX)/2,y:(r.minY+r.maxY)/2};t.pcb_component.update(this.pcb_component_id,{center:o,width:r.width,height:r.height})}_renderReactSubtree(t){return{element:t,component:_vn(t)}}doInitialInitializePortsFromChildren(){this.initPorts()}doInitialReactSubtreesRender(){}doInitialPcbFootprintStringRender(){var a;let{footprint:t}=this.props;if(t??(t=(a=this._getImpliedFootprintString)==null?void 0:a.call(this)),!t)return;const{name:n,pcbRotation:r,pinLabels:o}=this.props;if(typeof t=="string"&&this._isFootprintUrl(t)){if(this._hasStartedFootprintUrlLoad)return;this._hasStartedFootprintUrlLoad=!0;const s=t;this._queueAsyncEffect("load-footprint-url",async()=>{const c=await(await fetch(s)).json(),u=ptt({componentName:n,componentRotation:r,footprint:s,pinLabels:o},c);this.addAll(u),this._markDirty("InitializePortsFromChildren")});return}if(rt.isValidElement(t)){if(this.reactSubtrees.some(l=>l.element===t))return;const s=this._renderReactSubtree(t);this.reactSubtrees.push(s),this.add(s.component);return}!rt.isValidElement(t)&&t.componentName==="Footprint"&&this.add(t)}_hasExistingPortExactly(t){return this.children.filter(r=>r.componentName==="Port").some(r=>{const o=t.getNameAndAliases(),a=r.getNameAndAliases();return o.length===a.length&&o.every(s=>a.includes(s))})}add(t){let n;if(rt.isValidElement(t)){const r=this._renderReactSubtree(t);this.reactSubtrees.push(r),n=r.component}else n=t;if(n.componentName==="Port"){if(this._hasExistingPortExactly(n))return;const o=this.children.filter(a=>a.componentName==="Port").find(a=>a.isMatchingAnyOf(n.getNameAndAliases()));o&&Zvn(`Similar ports added. Port 1: ${o}, Port 2: ${n}`)}super.add(n)}getPortsFromFootprint(t){let{footprint:n}=this.props;if((!n||rt.isValidElement(n))&&(n=this.children.find(o=>o.componentName==="Footprint")),typeof n=="string"){if(this._isFootprintUrl(n))return[];const o=Kk.string(n).soup(),a=[];for(const s of o)if("port_hints"in s&&s.port_hints){const l=m7(s.port_hints,t);if(!l)continue;l.originDescription=`footprint:string:${n}:port_hints[0]:${s.port_hints[0]}`,a.push(l)}return a}if(!rt.isValidElement(n)&&n&&n.componentName==="Footprint"){const o=n;let a=1;const s=[];for(const l of o.children){if(!l.props.portHints)continue;let c=l.props.portHints;c.some(f=>f.startsWith("pin"))||(c=[...c,`pin${a}`]),a++;const d=m7(c);d&&(d.originDescription=`footprint:${n}`,s.push(d))}return s}const r=[];if(!n){for(const o of this.children)if(o.props.portHints&&o.isPcbPrimitive){const a=m7(o.props.portHints);a&&r.push(a)}}return r}getPortsFromSchematicSymbol(){var o;if((o=this.root)!=null&&o.schematicDisabled)return[];const{config:t}=this;if(!t.schematicSymbolName)return[];const n=YI[t.schematicSymbolName];if(!n)return[];const r=[];for(const a of n.ports){const s=m7(a.labels);s&&(s.schematicSymbolPortDef=a,r.push(s))}return r}doInitialCreateNetsFromProps(){this._createNetsFromProps(this._getNetsFromConnectionsProp())}_getNetsFromConnectionsProp(){const{_parsedProps:t}=this,n=[];if(t.connections)for(const[r,o]of Object.entries(t.connections)){const a=Array.isArray(o)?o:[o];for(const s of a)n.push(s)}return n}_createNetsFromProps(t){dtt(this,t)}_getPcbCircuitJsonBounds(){const{db:t}=this.root;if(!this.pcb_component_id)return super._getPcbCircuitJsonBounds();const n=t.pcb_component.get(this.pcb_component_id);return{center:{x:n.center.x,y:n.center.y},bounds:{left:n.center.x-n.width/2,top:n.center.y-n.height/2,right:n.center.x+n.width/2,bottom:n.center.y+n.height/2},width:n.width,height:n.height}}_getPinCountFromSchematicPortArrangement(){const t=this._getSchematicPortArrangement();if(!t)return 0;if(!mtt(t))return(t.leftSize??t.leftPinCount??0)+(t.rightSize??t.rightPinCount??0)+(t.topSize??t.topPinCount??0)+(t.bottomSize??t.bottomPinCount??0);const{leftSide:r,rightSide:o,topSide:a,bottomSide:s}=t;return Math.max(...(r==null?void 0:r.pins)??[],...(o==null?void 0:o.pins)??[],...(a==null?void 0:a.pins)??[],...(s==null?void 0:s.pins)??[])}_getPinCount(){return this._getSchematicPortArrangement()?this._getPinCountFromSchematicPortArrangement():this.getPortsFromFootprint().length}_getSchematicPortArrangement(){return this._parsedProps.schPinArrangement??this._parsedProps.schPortArrangement}_getSchematicBoxDimensions(){if(this.getSchematicSymbol()||!this.config.shouldRenderAsSchematicBox)return null;const{_parsedProps:t}=this,n=this._getPinCount(),r=t.schPinSpacing??.2;return Nvn({schWidth:t.schWidth,schHeight:t.schHeight,schPinSpacing:r,numericSchPinStyle:kvn(t.schPinStyle,t.pinLabels),pinCount:n,schPortArrangement:this._getSchematicPortArrangement(),pinLabels:t.pinLabels})}doInitialCadModelRender(){var u;const{db:t}=this.root,{boardThickness:n=0}=((u=this.root)==null?void 0:u._getBoard())??{},r=this._parsedProps.cadModel;if(!this.pcb_component_id||!r&&!this.props.footprint||r===null)return;const o=this._getPcbCircuitJsonBounds(),a=t.pcb_component.get(this.pcb_component_id);if(typeof r=="string")throw new Error("String cadModel not yet implemented");const s=$vn.parse({x:0,y:0,z:typeof(r==null?void 0:r.rotationOffset)=="number"?r.rotationOffset:0,...typeof(r==null?void 0:r.rotationOffset)=="object"?r.rotationOffset??{}:{}}),l=O3.parse({x:0,y:0,z:0,...typeof(r==null?void 0:r.positionOffset)=="object"?r.positionOffset:{}}),c=this.props.layer==="bottom"?"bottom":"top";t.cad_component.insert({position:{x:o.center.x+l.x,y:o.center.y+l.y,z:(c==="bottom"?-n/2:n/2)+l.z},rotation:{x:s.x,y:(c==="top"?0:180)+s.y,z:c==="bottom"?-(((a==null?void 0:a.rotation)??0)+s.z)+180:((a==null?void 0:a.rotation)??0)+s.z},pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,model_stl_url:"stlUrl"in(r??{})?this._addCachebustToModelUrl(r.stlUrl):void 0,model_obj_url:"objUrl"in(r??{})?this._addCachebustToModelUrl(r.objUrl):void 0,model_jscad:"jscad"in(r??{})?r.jscad:void 0,footprinter_string:typeof this.props.footprint=="string"&&!r?this.props.footprint:void 0})}_addCachebustToModelUrl(t){var r;if(!t||!t.includes("modelcdn.tscircuit.com"))return t;const n=((r=this.root)==null?void 0:r.getClientOrigin())??"";return`${t}${t.includes("?")?"&":"?"}cachebust_origin=${encodeURIComponent(n)}`}_getPartsEngineCacheKey(t,n){return JSON.stringify({ftype:t.ftype,name:t.name,manufacturer_part_number:t.manufacturer_part_number,footprinterString:n})}async _getSupplierPartNumbers(t,n,r){var c,u;if(this.props.doNotPlace)return{};const o=(u=(c=this.root)==null?void 0:c.platform)==null?void 0:u.localCacheEngine,a=this._getPartsEngineCacheKey(n,r);if(o){const d=await o.getItem(a);if(d)try{return JSON.parse(d)}catch{}}const s=await Promise.resolve(t.findPart({sourceComponent:n,footprinterString:r})),l=s==="Not found"?{}:s;if(o)try{await o.setItem(a,JSON.stringify(l))}catch{}return l}doInitialPartsEngineRender(){if(this.props.doNotPlace)return;const t=this.getInheritedProperty("partsEngine");if(!t)return;const{db:n}=this.root,r=n.source_component.get(this.source_component_id);if(!r||r.supplier_part_numbers)return;let o;this.props.footprint&&typeof this.props.footprint=="string"&&(o=this.props.footprint);const a=this._getSupplierPartNumbers(t,r,o);if(!(a instanceof Promise)){n.source_component.update(this.source_component_id,{supplier_part_numbers:a});return}this._queueAsyncEffect("get-supplier-part-numbers",async()=>{this._asyncSupplierPartNumbers=await a,this._markDirty("PartsEngineRender")})}updatePartsEngineRender(){if(this.props.doNotPlace)return;const{db:t}=this.root,n=t.source_component.get(this.source_component_id);if(n&&!n.supplier_part_numbers&&this._asyncSupplierPartNumbers){t.source_component.update(this.source_component_id,{supplier_part_numbers:this._asyncSupplierPartNumbers});return}}doInitialCreateTracesFromProps(){this._createTracesFromConnectionsProp()}_createTracesFromConnectionsProp(){const{_parsedProps:t}=this;if(t.connections)for(const[n,r]of Object.entries(t.connections)){const o=Array.isArray(r)?r:[r];for(const a of o)this.add(new w5({from:`${this.getSubcircuitSelector()} > port.${n}`,to:a}))}}},e_n=class{constructor(e,t={}){Ce(this,"input");Ce(this,"isRouting",!1);Ce(this,"solver");Ce(this,"eventHandlers",{complete:[],error:[],progress:[]});Ce(this,"cycleCount",0);Ce(this,"stepDelay");Ce(this,"timeoutId");this.input=e;const{capacityDepth:n,targetMinCapacity:r,stepDelay:o=0}=t;this.solver=new H4e(e,{capacityDepth:n,targetMinCapacity:r,cacheProvider:null}),this.stepDelay=o}start(){this.isRouting||(this.isRouting=!0,this.cycleCount=0,this.runCycleAndQueueNextCycle())}runCycleAndQueueNextCycle(){var e;if(this.isRouting)try{if(this.solver.solved||this.solver.failed){this.solver.failed?this.emitEvent({type:"error",error:new Error(this.solver.error||"Routing failed")}):this.emitEvent({type:"complete",traces:this.solver.getOutputSimpleRouteJson().traces||[]}),this.isRouting=!1;return}const t=Date.now(),n=this.solver.iterations;for(;Date.now()-t<250&&!this.solver.failed&&!this.solver.solved;)this.solver.step();const r=(this.solver.iterations-n)/(Date.now()-t)*1e3;this.cycleCount++;const o=((e=this.solver)==null?void 0:e.preview())||void 0,a=this.solver.progress;this.emitEvent({type:"progress",steps:this.cycleCount,iterationsPerSecond:r,progress:a,phase:this.solver.getCurrentPhase(),debugGraphics:o}),this.stepDelay>0?this.timeoutId=setTimeout(()=>this.runCycleAndQueueNextCycle(),this.stepDelay):this.timeoutId=setTimeout(()=>this.runCycleAndQueueNextCycle(),0)}catch(t){this.emitEvent({type:"error",error:t instanceof Error?t:new Error(String(t))}),this.isRouting=!1}}stop(){this.isRouting&&(this.isRouting=!1,this.timeoutId!==void 0&&(clearTimeout(this.timeoutId),this.timeoutId=void 0))}on(e,t){e==="complete"?this.eventHandlers.complete.push(t):e==="error"?this.eventHandlers.error.push(t):e==="progress"&&this.eventHandlers.progress.push(t)}emitEvent(e){if(e.type==="complete")for(const t of this.eventHandlers.complete)t(e);else if(e.type==="error")for(const t of this.eventHandlers.error)t(e);else if(e.type==="progress")for(const t of this.eventHandlers.progress)t(e)}solveSync(){if(this.solver.solve(),this.solver.failed)throw new Error(this.solver.error||"Routing failed");return this.solver.getOutputSimpleRouteJson().traces||[]}},xtt=class extends MI{constructor(){super(...arguments);Ce(this,"matchedPort",null)}get config(){return{componentName:"TraceHint",zodProps:j3e}}doInitialPortMatching(){const{db:t}=this.root,{_parsedProps:n,parent:r}=this;if(!r)return;if(r.componentName==="Trace"){this.renderError(`Port inference inside trace is not yet supported (${this})`);return}if(!r)throw new Error("TraceHint has no parent");if(!n.for){this.renderError(`TraceHint has no for property (${this})`);return}const o=r.selectOne(n.for,{type:"port"});o||this.renderError(`${this} could not find port for selector "${n.for}"`),this.matchedPort=o,o.registerMatch(this)}getPcbRouteHints(){const{_parsedProps:t}=this,n=t.offset?[t.offset]:t.offsets;if(!n)return[];const r=this._computePcbGlobalTransformBeforeLayout();return n.map(o=>({...Qr(r,o),via:o.via,to_layer:o.to_layer,trace_width:o.trace_width}))}doInitialPcbTraceHintRender(){var r,o,a;if((r=this.root)!=null&&r.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this;t.pcb_trace_hint.insert({pcb_component_id:(o=this.matchedPort)==null?void 0:o.pcb_component_id,pcb_port_id:(a=this.matchedPort)==null?void 0:a.pcb_port_id,route:this.getPcbRouteHints()})}},t_n=(i,e)=>{if(UC(i).pcb_trace_hint.get(e.pcb_trace_hint_id))i=i.map(n=>n.pcb_trace_hint_id===e.pcb_trace_hint_id?{...n,route:e.route}:n);else{const n=UC(i).pcb_port.get(e.pcb_port_id);i=i.filter(r=>!(r.type==="pcb_trace_hint"&&r.pcb_port_id===e.pcb_port_id)).concat([{type:"pcb_trace_hint",pcb_trace_hint_id:e.pcb_trace_hint_id,route:e.route,pcb_port_id:e.pcb_port_id,pcb_component_id:n==null?void 0:n.pcb_component_id}])}return i},n_n=({circuitJson:i,editEvents:e})=>{i=JSON.parse(JSON.stringify(i));for(const t of e)if(t.edit_event_type==="edit_pcb_component_location"){const n=i.find(o=>o.type==="pcb_component"&&o.pcb_component_id===t.pcb_component_id);if((!n||n.center.x!==t.new_center.x||n.center.y!==t.new_center.y)&&t.original_center){const o=hp(t.new_center.x-t.original_center.x,t.new_center.y-t.original_center.y);i=i.map(a=>a.pcb_component_id!==t.pcb_component_id?a:j4e(a,o))}}else t.edit_event_type==="edit_schematic_component_location"?i=i.map(n=>n.type==="schematic_component"&&n.schematic_component_id===t.schematic_component_id?{...n,center:t.new_center}:n):t.edit_event_type==="edit_pcb_trace_hint"&&(i=t_n(i,t));return i},i_n=(i,e)=>{const t=i.source_group.list(),n=[],r=o=>{const a=t.filter(s=>s.parent_subcircuit_id===o);for(const s of a)s.subcircuit_id&&(n.push(s.subcircuit_id),r(s.subcircuit_id))};return r(e),n},Ett=({db:i,circuitJson:e,subcircuit_id:t,minTraceWidth:n=.1})=>{if(!i&&e&&(i=UC(e)),!i)throw new Error("db or circuitJson is required");const r=i.pcb_trace_hint.list(),o=t?new Set([t]):null;if(t){const y=i_n(i,t);for(const v of y)o.add(v)}const a=(e??i.toArray()).filter(y=>!t||"subcircuit_id"in y&&o.has(y.subcircuit_id)),s=i.pcb_board.list()[0];i=UC(a);const l=OS(a),c=VF([...i.pcb_component.list(),...i.pcb_smtpad.list(),...i.pcb_plated_hole.list(),...i.pcb_hole.list(),...i.pcb_via.list()].filter(y=>!t||(o==null?void 0:o.has(y.subcircuit_id))),l);for(const y of c){const v=y.connectedTo.flatMap(_=>l.getIdsConnectedToNet(_));y.connectedTo.push(...v)}const u=c.flatMap(y=>[{x:y.center.x-y.width/2,y:y.center.y-y.height/2},{x:y.center.x+y.width/2,y:y.center.y+y.height/2}]);let d;s?d={minX:s.center.x-s.width/2,maxX:s.center.x+s.width/2,minY:s.center.y-s.height/2,maxY:s.center.y+s.height/2}:d={minX:Math.min(...u.map(y=>y.x))-1,maxX:Math.max(...u.map(y=>y.x))+1,minY:Math.min(...u.map(y=>y.y))-1,maxY:Math.max(...u.map(y=>y.y))+1};const f=i.source_trace.list().map(y=>{var H,k,j;const v=y.connected_source_port_ids.map(G=>{const ee=i.source_port.get(G),K=i.pcb_port.getWhere({source_port_id:G});return{...ee,...K}});if(v.length<2)return null;const[_,x]=v,S=((H=_.layers)==null?void 0:H[0])??"top",M=((k=x.layers)==null?void 0:k[0])??"top",z=r.filter(G=>G.pcb_port_id===_.pcb_port_id||G.pcb_port_id===x.pcb_port_id),U=[];for(const G of z){const ee=i.pcb_port.get(G.pcb_port_id),K=((j=ee==null?void 0:ee.layers)==null?void 0:j[0])??"top";for(const ie of G.route)U.push({x:ie.x,y:ie.y,layer:K})}return{name:y.source_trace_id??l.getNetConnectedToId(y.source_trace_id)??"",source_trace_id:y.source_trace_id,pointsToConnect:[{x:_.x,y:_.y,layer:S},...U,{x:x.x,y:x.y,layer:M}]}}).filter(y=>y!==null),h=i.source_net.list().filter(y=>!t||(o==null?void 0:o.has(y.subcircuit_id))),g=[];for(const y of h){const v=i.source_trace.list().filter(_=>{var x;return(x=_.connected_source_net_ids)==null?void 0:x.includes(y.source_net_id)});g.push({name:y.source_net_id??l.getNetConnectedToId(y.source_net_id),pointsToConnect:v.flatMap(_=>i.pcb_port.list().filter(S=>_.connected_source_port_ids.includes(S.source_port_id)).map(S=>{var M;return{x:S.x,y:S.y,layer:((M=S.layers)==null?void 0:M[0])??"top",pcb_port_id:S.pcb_port_id}}))})}return{simpleRouteJson:{bounds:d,obstacles:c,connections:[...f,...g],layerCount:2,minTraceWidth:n},connMap:l}};function jge(i,e){if("boxId"in i){const{boxId:t,pinNumber:n}=i,r=e.source_component.getWhere({name:t});if(!r)throw new Error(`Source component "${t}" not found, but returned from match-adapt ${JSON.stringify(i)}`);const o=e.source_port.getWhere({source_component_id:r.source_component_id,pin_number:n});return{subcircuit_connectivity_map_key:(o==null?void 0:o.subcircuit_connectivity_map_key)??null,source_port_id:o.source_port_id}}if("netId"in i){const{netId:t}=i;return e.source_net.getWhere({name:t}),null}if("junctionId"in i){const{junctionId:t}=i;return null}return null}function r_n({path:i,db:e,layoutConnMap:t}){let n=jge(i.to,e)??jge(i.from,e);if(!n){const o=t.getNetConnectedToId(Px(i.to));n=t.getIdsConnectedToNet(o).map(s=>BU(s)).map(s=>jge(s,e)).find(Boolean)}if(!(n!=null&&n.subcircuit_connectivity_map_key))throw new Error(`No connectivity net id found for match-adapt path ${JSON.stringify(i)}`);const r=e.source_trace.list({subcircuit_connectivity_map_key:n.subcircuit_connectivity_map_key});for(const o of r)if(o.connected_source_port_ids.includes(n.source_port_id))return o.source_trace_id;if(r.length>0)return r[0].source_trace_id;throw new Error(`No source trace found for match-adapt path "${JSON.stringify(i)}"`)}function o_n(i){const{db:e}=i.root;let t=structuredClone(e.toArray());t=dMe(t);const n=uMe(t),r=new cMe({inputNetlist:n});let o=null;try{r.solve(),o=r.getLayout()}catch(d){e.schematic_layout_error.insert({message:`Match-adapt layout failed: ${d.toString()}`,source_group_id:i.source_group_id,schematic_group_id:i.schematic_group_id});return}const{boxes:a,junctions:s,netLabels:l,paths:c}=o,u=new Y3({});for(const d of c)u.addConnections([[Px(d.from),Px(d.to)]]);for(const d of s)for(const f of c)for(const h of f.points)Math.abs(h.x-d.x)<.001&&Math.abs(h.y-d.y)<.001&&u.addConnections([[Px(f.from),Px(d)],[Px(f.to),Px(d)]]);for(const d of a){const f=e.source_component.list().find(_=>_.name===d.boxId);if(!f)continue;const h=e.schematic_component.getWhere({source_component_id:f.source_component_id});if(!h)continue;const g={x:d.centerX-h.center.x+.1,y:d.centerY-h.center.y-.1};e.schematic_component.update(h.schematic_component_id,{center:{x:h.center.x+g.x,y:h.center.y+g.y}});const y=e.schematic_port.list({schematic_component_id:h.schematic_component_id});for(const _ of y)e.schematic_port.update(_.schematic_port_id,{center:{x:_.center.x+g.x,y:_.center.y+g.y}});const v=e.schematic_text.list({schematic_component_id:h.schematic_component_id});for(const _ of v)e.schematic_text.update(_.schematic_text_id,{position:{x:_.position.x+g.x,y:_.position.y+g.y}})}for(const d of l){const f=e.source_net.list().find(h=>h.name===d.netId);e.schematic_net_label.insert({text:d.netId,source_net_id:f==null?void 0:f.source_net_id,anchor_position:{x:d.x,y:d.y},center:{x:d.x,y:d.y},anchor_side:d.anchorPosition})}for(const d of c){if(!d.points||d.points.length<2)continue;const f=r_n({path:d,db:Hb(t),layoutConnMap:u});let h=[];for(let v=0;v<d.points.length-1;v++)h.push({from:{x:d.points[v].x,y:d.points[v].y},to:{x:d.points[v+1].x,y:d.points[v+1].y}});const g=mV({db:e,source_trace_id:f,differentNetOnly:!0}).flatMap(v=>v.edges);g.length>0&&(h=Itt({edges:h,otherEdges:g}));const y=Ctt({edges:h,db:e,source_trace_id:f});e.schematic_trace.insert({source_trace_id:f,edges:h,junctions:y})}}function a_n(i){if(!i.isSubcircuit)return;const{db:e}=i.root,t=i.selectAll("trace"),n=new Y3({});n.addConnections(t.map(s=>{const l=e.source_trace.get(s.source_trace_id);return l?[l.source_trace_id,...l.connected_source_port_ids,...l.connected_source_net_ids]:null}).filter(s=>s!==null));const{name:r}=i._parsedProps;for(const s of t){if(!s.source_trace_id)continue;const l=n.getNetConnectedToId(s.source_trace_id);l&&(s.subcircuit_connectivity_map_key=`${r??`unnamedsubcircuit${i._renderId}`}_${l}`,e.source_trace.update(s.source_trace_id,{subcircuit_connectivity_map_key:s.subcircuit_connectivity_map_key}))}const o=new Set;for(const s of t){if(!s.source_trace_id)continue;const l=e.source_trace.get(s.source_trace_id);if(l)for(const c of l.connected_source_port_ids)o.add(c)}for(const s of o){const l=n.getNetConnectedToId(s);if(!l)continue;const c=`${r??`unnamedsubcircuit${i._renderId}`}_${l}`;e.source_port.update(s,{subcircuit_connectivity_map_key:c})}const a=new Set;for(const s of t){if(!s.source_trace_id)continue;const l=e.source_trace.get(s.source_trace_id);if(l)for(const c of l.connected_source_net_ids)a.add(c)}for(const s of a){const l=n.getNetConnectedToId(s);if(!l)continue;const c=`${r??`unnamedsubcircuit${i._renderId}`}_${l}`;e.source_net.update(s,{subcircuit_connectivity_map_key:c})}}function s_n(i){var x;const{db:e}=i.root,t=i._parsedProps,n=i.children.filter(S=>S.schematic_component_id);if(n.length===0)return;let r=0,o=0;for(const S of n){const M=e.schematic_component.get(S.schematic_component_id);M!=null&&M.size&&(r=Math.max(r,M.size.width),o=Math.max(o,M.size.height))}r===0&&n.length>0&&(r=1),o===0&&n.length>0&&(o=1);let a=t.gridCols,s,l=t.gridGap;(x=t.schLayout)!=null&&x.grid&&(a=t.schLayout.grid.cols??a,s=t.schLayout.grid.rows,l=t.schLayout.grid.gap??l);let c,u;a!==void 0&&s!==void 0?(c=a,u=s):a!==void 0?(c=a,u=Math.ceil(n.length/c)):s!==void 0?(u=s,c=Math.ceil(n.length/u)):(c=Math.ceil(Math.sqrt(n.length)),u=Math.ceil(n.length/c)),c===0&&n.length>0&&(c=1),u===0&&n.length>0&&(u=n.length);let d,f;typeof l=="number"?(d=l,f=l):typeof l=="object"&&l!==null?(d=l.x,f=l.y):(d=1,f=1);const h=c*r+Math.max(0,c-1)*d,g=u*o+Math.max(0,u-1)*f,y=i._getGlobalSchematicPositionBeforeLayout(),v=y.x-h/2+r/2,_=y.y+g/2-o/2;for(let S=0;S<n.length;S++){const M=n[S];if(!M.schematic_component_id)continue;const z=Math.floor(S/c),U=S%c;if(z>=u||U>=c){console.warn(`Schematic grid layout: Child ${M.getString()} at index ${S} (row ${z}, col ${U}) exceeds specified grid dimensions (${u}x${c}). Skipping placement.`);continue}const H=v+U*(r+d),k=_-z*(o+f),j=e.schematic_component.get(M.schematic_component_id);if(j){const G=j.center,ee={x:H,y:k};e.schematic_component.update(M.schematic_component_id,{center:ee});const K=ee.x-G.x,ie=ee.y-G.y,ce=e.schematic_port.list({schematic_component_id:M.schematic_component_id});for(const le of ce)e.schematic_port.update(le.schematic_port_id,{center:{x:le.center.x+K,y:le.center.y+ie}});const ue=e.schematic_text.list({schematic_component_id:M.schematic_component_id});for(const le of ue)e.schematic_text.update(le.schematic_text_id,{position:{x:le.position.x+K,y:le.position.y+ie}})}}i.schematic_group_id&&e.schematic_group.update(i.schematic_group_id,{width:h,height:g,center:y})}function l_n(i){var x;const{db:e}=i.root,t=i._parsedProps,n=i.children.filter(S=>S.pcb_component_id);if(n.length===0)return;let r=0,o=0;for(const S of n){const M=e.pcb_component.get(S.pcb_component_id);M&&(r=Math.max(r,M.width),o=Math.max(o,M.height))}r===0&&n.length>0&&(r=1),o===0&&n.length>0&&(o=1);let a=t.gridCols,s,l=t.gridGap;(x=t.pcbLayout)!=null&&x.grid&&(a=t.pcbLayout.grid.cols??a,s=t.pcbLayout.grid.rows,l=t.pcbLayout.grid.gap??l);let c,u;a!==void 0&&s!==void 0?(c=a,u=s):a!==void 0?(c=a,u=Math.ceil(n.length/c)):s!==void 0?(u=s,c=Math.ceil(n.length/u)):(c=Math.ceil(Math.sqrt(n.length)),u=Math.ceil(n.length/c)),c===0&&n.length>0&&(c=1),u===0&&n.length>0&&(u=n.length);let d,f;typeof l=="number"?(d=l,f=l):typeof l=="object"&&l!==null?(d=l.x,f=l.y):(d=1,f=1);const h=c*r+Math.max(0,c-1)*d,g=u*o+Math.max(0,u-1)*f,y=i._getGlobalPcbPositionBeforeLayout(),v=y.x-h/2+r/2,_=y.y+g/2-o/2;for(let S=0;S<n.length;S++){const M=n[S];if(!M.pcb_component_id)continue;const z=Math.floor(S/c),U=S%c;if(z>=u||U>=c){console.warn(`PCB grid layout: Child ${M.getString()} at index ${S} (row ${z}, col ${U}) exceeds grid dimensions (${u}x${c}). Skipping placement.`);continue}const H=v+U*(r+d),k=_-z*(o+f),j=e.pcb_component.get(M.pcb_component_id);if(j){const G=j.center,ee={x:H,y:k},K=ee.x-G.x,ie=ee.y-G.y,ce=hp(K,ie),ue=e.toArray().filter(_e=>_e.pcb_component_id===M.pcb_component_id),le=K4e(ue,ce);for(const _e of le){const ye=s8(_e);e[_e.type].update(_e[ye],_e)}e.pcb_component.update(M.pcb_component_id,{center:ee}),M.setProps({...M.props,pcbX:(M.props.pcbX??0)+K,pcbY:(M.props.pcbY??0)+ie})}}i.pcb_group_id&&e.pcb_group.update(i.pcb_group_id,{width:h,height:g,center:y})}var Kge=class extends S9{constructor(){super(...arguments);Ce(this,"pcb_group_id",null);Ce(this,"schematic_group_id",null);Ce(this,"subcircuit_id",null);Ce(this,"_hasStartedAsyncAutorouting",!1);Ce(this,"_asyncAutoroutingResult",null)}get config(){return{zodProps:c3e,componentName:"Group"}}doInitialSourceRender(){const{db:t}=this.root,n=t.source_group.insert({name:this._parsedProps.name,is_subcircuit:this.isSubcircuit});this.subcircuit_id=`subcircuit_${n.source_group_id}`,this.source_group_id=n.source_group_id,t.source_group.update(n.source_group_id,{subcircuit_id:this.subcircuit_id});for(const r of this.children)t.source_component.update(r.source_component_id,{source_group_id:this.source_group_id})}doInitialSourceParentAttachment(){var r,o,a;const{db:t}=this.root;if(!this.isSubcircuit)return;const n=(a=(o=(r=this.parent)==null?void 0:r.getSubcircuit)==null?void 0:o.call(r))==null?void 0:a.subcircuit_id;n&&t.source_group.update(this.source_group_id,{parent_subcircuit_id:n})}doInitialPcbComponentRender(){var o;if((o=this.root)!=null&&o.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=t.pcb_group.insert({is_subcircuit:this.isSubcircuit,subcircuit_id:this.subcircuit_id,name:this._parsedProps.name,center:this._getGlobalPcbPositionBeforeLayout(),width:0,height:0,pcb_component_ids:[],source_group_id:this.source_group_id});this.pcb_group_id=r.pcb_group_id;for(const a of this.children)t.pcb_component.update(a.pcb_component_id,{pcb_group_id:r.pcb_group_id})}doInitialPcbPrimitiveRender(){var r;if((r=this.root)!=null&&r.pcbDisabled)return;const{db:t}=this.root,n=Hge(this.children);this.pcb_group_id&&t.pcb_group.update(this.pcb_group_id,{width:n.width,height:n.height,center:{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2}})}doInitialCreateTraceHintsFromProps(){var a;const{_parsedProps:t}=this,{db:n}=this.root,r=t;if(!this.isSubcircuit)return;const o=(a=r.layout)==null?void 0:a.manual_trace_hints;if(o)for(const s of o)this.add(new xtt({for:s.pcb_port_selector,offsets:s.offsets}))}doInitialSourceAddConnectivityMapKey(){a_n(this)}_areChildSubcircuitsRouted(){const t=this.selectAll("group").filter(n=>n.isSubcircuit);for(const n of t)if(n._shouldRouteAsync()&&!n._asyncAutoroutingResult)return!1;return!0}_shouldRouteAsync(){const t=this._getAutorouterConfig();return t.groupMode==="sequential-trace"?!1:!!(t.local&&t.groupMode==="subcircuit"||!t.local)}_hasTracesToRoute(){const t=F1("tscircuit:core:_hasTracesToRoute"),n=this.selectAll("trace");return t(`[${this.getString()}] has ${n.length} traces to route`),n.length>0}async _runEffectMakeHttpAutoroutingRequest(){var u,d,f,h;const{db:t}=this.root,n=F1("tscircuit:core:_runEffectMakeHttpAutoroutingRequest");this._parsedProps;const r=this._getAutorouterConfig(),o=r.serverUrl,a=r.serverMode,s=(g,y)=>{var v;return n("fetching",g),y.headers&&(y.headers["Tscircuit-Core-Version"]=(v=this.root)==null?void 0:v.getCoreVersion()),fetch(g,y)},l=this.root.db.toArray().filter(g=>g.type.startsWith("source_")||g.type.startsWith("pcb_"));if(a==="solve-endpoint"){if(((u=this.props.autorouter)==null?void 0:u.inputFormat)==="simplified"){const{autorouting_result:y}=await s(`${o}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_simple_route_json:Ett({db:t,minTraceWidth:((d=this.props.autorouter)==null?void 0:d.minTraceWidth)??.15,subcircuit_id:this.subcircuit_id}).simpleRouteJson,subcircuit_id:this.subcircuit_id}),headers:{"Content-Type":"application/json"}}).then(v=>v.json());this._asyncAutoroutingResult=y,this._markDirty("PcbTraceRender");return}const{autorouting_result:g}=await s(`${o}/autorouting/solve`,{method:"POST",body:JSON.stringify({input_circuit_json:l,subcircuit_id:this.subcircuit_id}),headers:{"Content-Type":"application/json"}}).then(y=>y.json());this._asyncAutoroutingResult=g,this._markDirty("PcbTraceRender");return}const{autorouting_job:c}=await s(`${o}/autorouting/jobs/create`,{method:"POST",body:JSON.stringify({input_circuit_json:l,provider:"freerouting",autostart:!0,display_name:(f=this.root)==null?void 0:f.name,subcircuit_id:this.subcircuit_id,server_cache_enabled:r.serverCacheEnabled}),headers:{"Content-Type":"application/json"}}).then(g=>g.json());for(;;){const{autorouting_job:g}=await s(`${o}/autorouting/jobs/get`,{method:"POST",body:JSON.stringify({autorouting_job_id:c.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(y=>y.json());if(g.is_finished){const{autorouting_job_output:y}=await s(`${o}/autorouting/jobs/get_output`,{method:"POST",body:JSON.stringify({autorouting_job_id:c.autorouting_job_id}),headers:{"Content-Type":"application/json"}}).then(v=>v.json());this._asyncAutoroutingResult={output_pcb_traces:y.output_pcb_traces},this._markDirty("PcbTraceRender");break}if(g.has_error)throw t.pcb_autorouting_error.insert({pcb_error_id:c.autorouting_job_id,message:((h=g.error)==null?void 0:h.message)??JSON.stringify(g.error)}),new Error(`Autorouting job failed: ${JSON.stringify(g.error)}`);await new Promise(y=>setTimeout(y,100))}}async _runLocalAutorouting(){var l,c,u,d,f;const{db:t}=this.root;this._parsedProps;const n=F1("tscircuit:core:_runLocalAutorouting");n(`[${this.getString()}] starting local autorouting`);const r=this._getAutorouterConfig(),{simpleRouteJson:o}=Ett({db:t,minTraceWidth:((l=this.props.autorouter)==null?void 0:l.minTraceWidth)??.15,subcircuit_id:this.subcircuit_id});(c=this.root)==null||c.emit("autorouting:start",{subcircuit_id:this.subcircuit_id,componentDisplayName:this.getString(),simpleRouteJson:o});let a;r.algorithmFn?a=await r.algorithmFn(o):a=new e_n(o,{capacityDepth:(u=this.props.autorouter)==null?void 0:u.capacityDepth,targetMinCapacity:(d=this.props.autorouter)==null?void 0:d.targetMinCapacity});const s=new Promise((h,g)=>{a.on("complete",y=>{n(`[${this.getString()}] local autorouting complete`),h(y.traces)}),a.on("error",y=>{n(`[${this.getString()}] local autorouting error: ${y.error.message}`),g(y.error)})});a.on("progress",h=>{var g;(g=this.root)==null||g.emit("autorouting:progress",{subcircuit_id:this.subcircuit_id,componentDisplayName:this.getString(),...h})}),a.start();try{const h=await s;this._asyncAutoroutingResult={output_pcb_traces:h},this._markDirty("PcbTraceRender")}catch(h){const{db:g}=this.root;throw g.pcb_autorouting_error.insert({pcb_error_id:`pcb_autorouter_error_subcircuit_${this.subcircuit_id}`,message:h instanceof Error?h.message:String(h)}),(f=this.root)==null||f.emit("autorouting:error",{subcircuit_id:this.subcircuit_id,componentDisplayName:this.getString(),error:{message:h instanceof Error?h.message:String(h)},simpleRouteJson:o}),h}finally{a.stop()}}_startAsyncAutorouting(){this._hasStartedAsyncAutorouting||(this._hasStartedAsyncAutorouting=!0,this._getAutorouterConfig().local?this._queueAsyncEffect("capacity-mesh-autorouting",async()=>this._runLocalAutorouting()):this._queueAsyncEffect("make-http-autorouting-request",async()=>this._runEffectMakeHttpAutoroutingRequest()))}doInitialPcbTraceRender(){var n;const t=F1("tscircuit:core:doInitialPcbTraceRender");if(this.isSubcircuit&&!((n=this.root)!=null&&n.pcbDisabled)&&!this.getInheritedProperty("routingDisabled")&&!this._shouldUseTraceByTraceRouting()){if(!this._areChildSubcircuitsRouted()){t(`[${this.getString()}] child subcircuits are not routed, skipping async autorouting until subcircuits routed`);return}t(`[${this.getString()}] no child subcircuits to wait for, initiating async routing`),this._hasTracesToRoute()&&this._startAsyncAutorouting()}}updatePcbTraceRender(){var r;const t=F1("tscircuit:core:updatePcbTraceRender");if(t(`[${this.getString()}] updating...`),!this.isSubcircuit)return;if(this._shouldRouteAsync()&&this._hasTracesToRoute()&&!this._hasStartedAsyncAutorouting){this._areChildSubcircuitsRouted()&&(t(`[${this.getString()}] child subcircuits are now routed, starting async autorouting`),this._startAsyncAutorouting());return}if(!this._asyncAutoroutingResult||this._shouldUseTraceByTraceRouting())return;const{db:n}=this.root;if(this._asyncAutoroutingResult.output_simple_route_json){t(`[${this.getString()}] updating PCB traces from simple route json (${(r=this._asyncAutoroutingResult.output_simple_route_json.traces)==null?void 0:r.length} traces)`),this._updatePcbTraceRenderFromSimpleRouteJson();return}if(this._asyncAutoroutingResult.output_pcb_traces){t(`[${this.getString()}] updating PCB traces from ${this._asyncAutoroutingResult.output_pcb_traces.length} traces`),this._updatePcbTraceRenderFromPcbTraces();return}}_updatePcbTraceRenderFromSimpleRouteJson(){const{db:t}=this.root,{traces:n}=this._asyncAutoroutingResult.output_simple_route_json;if(n)for(const r of n)t.pcb_trace.insert({subcircuit_id:this.subcircuit_id,route:r.route})}_updatePcbTraceRenderFromPcbTraces(){const{output_pcb_traces:t}=this._asyncAutoroutingResult;if(!t)return;const{db:n}=this.root;for(const r of t)if(r.type==="pcb_trace"){if(r.subcircuit_id=this.subcircuit_id,r.connection_name){const o=r.connection_name;r.source_trace_id=o}n.pcb_trace.insert(r)}for(const r of t)if(r.type!=="pcb_via"&&r.type==="pcb_trace")for(const o of r.route)o.route_type==="via"&&n.pcb_via.insert({pcb_trace_id:r.pcb_trace_id,x:o.x,y:o.y,hole_diameter:.3,outer_diameter:.6,layers:[o.from_layer,o.to_layer],from_layer:o.from_layer,to_layer:o.to_layer})}doInitialSchematicComponentRender(){var o;if((o=this.root)!=null&&o.schematicDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=t.schematic_group.insert({is_subcircuit:this.isSubcircuit,subcircuit_id:this.subcircuit_id,name:this._parsedProps.name,center:this._getGlobalSchematicPositionBeforeLayout(),width:0,height:0,schematic_component_ids:[],source_group_id:this.source_group_id});this.schematic_group_id=r.schematic_group_id;for(const a of this.children)a.schematic_component_id&&t.schematic_component.update(a.schematic_component_id,{schematic_group_id:r.schematic_group_id})}_getSchematicLayoutMode(){var n,r,o;const t=this._parsedProps;return(n=t.schLayout)!=null&&n.matchAdapt?"match-adapt":(r=t.schLayout)!=null&&r.flex?"flex":(o=t.schLayout)!=null&&o.grid?"grid":t.matchAdapt?"match-adapt":t.flex?"flex":t.grid?"grid":"none"}doInitialSchematicLayout(){this._parsedProps;const t=this._getSchematicLayoutMode();t==="match-adapt"&&this._doInitialSchematicLayoutMatchAdapt(),t==="grid"&&this._doInitialSchematicLayoutGrid()}_doInitialSchematicLayoutMatchAdapt(){o_n(this)}_doInitialSchematicLayoutGrid(){s_n(this)}_getPcbLayoutMode(){var n,r,o;const t=this._parsedProps;return(n=t.pcbLayout)!=null&&n.matchAdapt?"match-adapt":(r=t.pcbLayout)!=null&&r.flex?"flex":(o=t.pcbLayout)!=null&&o.grid?"grid":t.matchAdapt?"match-adapt":t.flex?"flex":t.grid?"grid":"none"}doInitialPcbLayout(){this._getPcbLayoutMode()==="grid"&&this._doInitialPcbLayoutGrid()}_doInitialPcbLayoutGrid(){l_n(this)}_determineSideFromPosition(t,n){if(!t.center||!n.center)return"left";const r=t.center.x-n.center.x,o=t.center.y-n.center.y;return Math.abs(r)>Math.abs(o)?r>0?"right":"left":o>0?"bottom":"top"}_calculateSchematicBounds(t){if(t.length===0)return{minX:0,maxX:0,minY:0,maxY:0};let n=1/0,r=-1/0,o=1/0,a=-1/0;for(const l of t)n=Math.min(n,l.centerX),r=Math.max(r,l.centerX),o=Math.min(o,l.centerY),a=Math.max(a,l.centerY);const s=2;return{minX:n-s,maxX:r+s,minY:o-s,maxY:a+s}}_getAutorouterConfig(){const t={serverUrl:"https://registry-api.tscircuit.com",serverMode:"job",serverCacheEnabled:!0},n=this._parsedProps.autorouter??this.getInheritedProperty("autorouter");return typeof n=="object"?{local:!(n.serverUrl||n.serverMode||n.serverCacheEnabled),...t,...n}:n==="auto-local"?{local:!0,groupMode:"subcircuit"}:n==="sequential-trace"?{local:!0,groupMode:"sequential-trace"}:n==="subcircuit"?{local:!0,groupMode:"subcircuit"}:n==="auto-cloud"?{local:!1,groupMode:"subcircuit",serverUrl:t.serverUrl,serverMode:t.serverMode,serverCacheEnabled:!0}:{local:!0,groupMode:"subcircuit"}}_shouldUseTraceByTraceRouting(){return this._getAutorouterConfig().groupMode==="sequential-trace"}doInitialPcbDesignRuleChecks(){var n;if((n=this.root)!=null&&n.pcbDisabled||this.getInheritedProperty("routingDisabled"))return;const{db:t}=this.root;if(this.isSubcircuit){const r=new Map;for(const o of this.children)if(!o.isSubcircuit&&o._parsedProps.name){const a=r.get(o._parsedProps.name)||[];a.push(o),r.set(o._parsedProps.name,a)}for(const[o,a]of r.entries())a.length>1&&t.pcb_trace_error.insert({error_type:"pcb_trace_error",message:`Multiple components found with name "${o}" in subcircuit "${this._parsedProps.name||"unnamed"}". Component names must be unique within a subcircuit.`,source_trace_id:"",pcb_trace_id:"",pcb_component_ids:a.map(s=>s.pcb_component_id).filter(Boolean),pcb_port_ids:[]})}}doInitialSchematicReplaceNetLabelsWithSymbols(){var n;if((n=this.root)!=null&&n.schematicDisabled)return;const{db:t}=this.root;for(const r of t.schematic_net_label.list()){const o=t.source_net.get(r.source_net_id),a=r.text||(o==null?void 0:o.name)||"";if(r.anchor_side==="top"&&/^gnd/i.test(a)){t.schematic_net_label.update(r.schematic_net_label_id,{symbol_name:"ground_down"});continue}r.anchor_side==="bottom"&&/^v/i.test(a)&&t.schematic_net_label.update(r.schematic_net_label_id,{symbol_name:"vcc_up"})}}},c_n=class extends Kge{constructor(){super(...arguments);Ce(this,"pcb_board_id",null);Ce(this,"_drcChecksComplete",!1);Ce(this,"_connectedSchematicPortPairs",new Set)}get isSubcircuit(){return!0}get isGroup(){return!0}get config(){return{componentName:"Board",zodProps:Gee}}get boardThickness(){const{_parsedProps:t}=this;return 1.4}get allLayers(){return["top","bottom","inner1","inner2"]}doInitialPcbBoardAutoSize(){var g;if((g=this.root)!=null&&g.pcbDisabled||!this.pcb_board_id)return;const{db:t}=this.root,{_parsedProps:n}=this;if(n.width&&n.height)return;let r=1/0,o=1/0,a=-1/0,s=-1/0;const l=t.pcb_component.list();let c=!1;for(const y of l){const{width:v,height:_,center:x}=y;v===0||_===0||(c=!0,r=Math.min(r,x.x-v/2),o=Math.min(o,x.y-_/2),a=Math.max(a,x.x+v/2),s=Math.max(s,x.y+_/2))}const u=2,d=c?a-r+u*2:0,f=c?s-o+u*2:0,h={x:c?(r+a)/2+(n.outlineOffsetX??0):n.outlineOffsetX??0,y:c?(o+s)/2+(n.outlineOffsetY??0):n.outlineOffsetY??0};t.pcb_board.update(this.pcb_board_id,{width:d,height:f,center:h})}doInitialPcbComponentRender(){var s,l;if((s=this.root)!=null&&s.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this;let r=n.width??0,o=n.height??0;if(n.outline){const c=n.outline.map(y=>y.x),u=n.outline.map(y=>y.y),d=Math.min(...c),f=Math.max(...c),h=Math.min(...u),g=Math.max(...u);r=f-d,o=g-h}const a=t.pcb_board.insert({center:{x:(n.pcbX??0)+(n.outlineOffsetX??0),y:(n.pcbY??0)+(n.outlineOffsetY??0)},thickness:this.boardThickness,num_layers:this.allLayers.length,width:r,height:o,outline:(l=n.outline)==null?void 0:l.map(c=>({x:c.x+(n.outlineOffsetX??0),y:c.y+(n.outlineOffsetY??0)})),material:n.material});this.pcb_board_id=a.pcb_board_id}removePcbComponentRender(){const{db:t}=this.root;this.pcb_board_id&&(t.pcb_board.delete(this.pcb_board_id),this.pcb_board_id=null)}_computePcbGlobalTransformBeforeLayout(){return h1()}doInitialPcbDesignRuleChecks(){var t;(t=this.root)!=null&&t.pcbDisabled||this.getInheritedProperty("routingDisabled")||super.doInitialPcbDesignRuleChecks()}updatePcbDesignRuleChecks(){var r;if((r=this.root)!=null&&r.pcbDisabled||this.getInheritedProperty("routingDisabled"))return;const{db:t}=this.root;if(!this._areChildSubcircuitsRouted()||this._drcChecksComplete)return;this._drcChecksComplete=!0;const n=$4e(t.toArray());for(const o of n)t.pcb_trace_error.insert(o)}_emitRenderLifecycleEvent(t,n){var r;super._emitRenderLifecycleEvent(t,n),n==="start"&&((r=this.root)==null||r.emit("board:renderPhaseStarted",{renderId:this._renderId,phase:t}))}},u_n=new Proxy({},{get:(i,e)=>e}),SM=u_n,d_n=class extends S9{get config(){return{componentName:"Capacitor",schematicSymbolName:this.props.polarized?"capacitor_polarized":this.props.symbolName??"capacitor",zodProps:g3e,sourceFtype:SM.simple_capacitor}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}_getSchematicSymbolDisplayValue(){const e=`${Ex(this._parsedProps.capacitance)}F`;return this._parsedProps.schShowRatings&&this._parsedProps.maxVoltageRating?`${e}/${Ex(this._parsedProps.maxVoltageRating)}V`:e}doInitialCreateNetsFromProps(){this._createNetsFromProps([this.props.decouplingFor,this.props.decouplingTo,...this._getNetsFromConnectionsProp()])}doInitialCreateTracesFromProps(){this.props.decouplingFor&&this.props.decouplingTo&&(this.add(new w5({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.decouplingFor})),this.add(new w5({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.decouplingTo}))),this._createTracesFromConnectionsProp()}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_capacitor",name:t.name,manufacturer_part_number:t.manufacturerPartNumber??t.mfn,supplier_part_numbers:t.supplierPartNumbers,capacitance:t.capacitance,max_voltage_rating:t.maxVoltageRating,max_decoupling_trace_length:t.maxDecouplingTraceLength,display_capacitance:this._getSchematicSymbolDisplayValue(),are_pins_interchangeable:!t.polarized});this.source_component_id=n.source_component_id}},btt=class extends S9{constructor(){super(...arguments);Ce(this,"schematicBoxDimensions",null)}get config(){return{componentName:"Chip",zodProps:Oee,shouldRenderAsSchematicBox:!0}}doInitialSchematicComponentRender(){const{_parsedProps:t}=this;(t==null?void 0:t.noSchematicRepresentation)!==!0&&super.doInitialSchematicComponentRender()}doInitialSourceRender(){const{db:t}=this.root,{_parsedProps:n}=this,r=t.source_component.insert({ftype:"simple_chip",name:n.name,manufacturer_part_number:n.manufacturerPartNumber,supplier_part_numbers:n.supplierPartNumbers});this.source_component_id=r.source_component_id}doInitialPcbComponentRender(){var o;if((o=this.root)!=null&&o.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=t.pcb_component.insert({center:{x:n.pcbX??0,y:n.pcbY??0},width:2,height:3,layer:n.layer??"top",rotation:n.pcbRotation??0,source_component_id:this.source_component_id,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0});this.pcb_component_id=r.pcb_component_id}doInitialCreateTracesFromProps(){const{_parsedProps:t}=this;if(t.externallyConnectedPins)for(const[n,r]of t.externallyConnectedPins)this.add(new w5({from:`${this.getSubcircuitSelector()} > port.${n}`,to:`${this.getSubcircuitSelector()} > port.${r}`}));this._createTracesFromConnectionsProp()}},A_n=class extends S9{constructor(){super(...arguments);Ce(this,"pos",this.portMap.pin1);Ce(this,"anode",this.portMap.pin1);Ce(this,"neg",this.portMap.pin2);Ce(this,"cathode",this.portMap.pin2)}get config(){return{schematicSymbolName:this.props.symbolName??"diode",componentName:"Diode",zodProps:R3e,sourceFtype:"simple_diode"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}doInitialSourceRender(){const{db:t}=this.root,{_parsedProps:n}=this,r=t.source_component.insert({ftype:"simple_diode",name:n.name,manufacturer_part_number:n.manufacturerPartNumber??n.mfn,supplier_part_numbers:n.supplierPartNumbers,are_pins_interchangeable:!1});this.source_component_id=r.source_component_id}},f_n=class extends S9{get config(){return{componentName:"fuse",schematicSymbolName:this.props.symbolName??"fuse",zodProps:u3e,sourceFtype:SM.simple_fuse}}_getSchematicSymbolDisplayValue(){const e=this._parsedProps.currentRating,t=this._parsedProps.voltageRating,n=typeof e=="string"?parseFloat(e):e,r=typeof t=="string"?parseFloat(t):t;return`${Ex(n)}A / ${Ex(r)}V`}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=typeof t.currentRating=="string"?parseFloat(t.currentRating):t.currentRating,r=typeof t.voltageRating=="string"?parseFloat(t.voltageRating):t.voltageRating,o=e.source_component.insert({name:t.name,ftype:SM.simple_fuse,current_rating_amps:n,voltage_rating_volts:r,display_current_rating:`${Ex(n)}A`,display_voltage_rating:`${Ex(r)}V`});this.source_component_id=o.source_component_id}},h_n=class extends S9{constructor(){super(...arguments);Ce(this,"schematicDimensions",null)}get config(){let t="";if(this.props.pinCount&&(t+=`solderjumper${this.props.pinCount||2}`),Array.isArray(this.props.internallyConnectedPins)&&this.props.internallyConnectedPins.length>0){const n=Array.from(new Set(this.props.internallyConnectedPins.flat())).sort().join("");t+=`_bridged${n}`}return{schematicSymbolName:t,componentName:"Jumper",zodProps:Hee,shouldRenderAsSchematicBox:!0}}_getSchematicPortArrangement(){const t=super._getSchematicPortArrangement();if(t)return t;const n=this._parsedProps.pinCount??(Array.isArray(this._parsedProps.pinLabels)?this._parsedProps.pinLabels.length:this._parsedProps.pinLabels?Object.keys(this._parsedProps.pinLabels).length:this.getPortsFromFootprint().length),r=this._parsedProps.schDirection??"right";return{leftSize:r==="left"?n:0,rightSize:r==="right"?n:0}}doInitialSourceRender(){const{db:t}=this.root,{_parsedProps:n}=this,r=t.source_component.insert({ftype:"simple_chip",name:n.name,manufacturer_part_number:n.manufacturerPartNumber,supplier_part_numbers:n.supplierPartNumbers,are_pins_interchangeable:!0});this.source_component_id=r.source_component_id}doInitialPcbComponentRender(){var o;if((o=this.root)!=null&&o.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=t.pcb_component.insert({center:{x:n.pcbX??0,y:n.pcbY??0},width:2,height:3,layer:n.layer??"top",rotation:n.pcbRotation??0,source_component_id:this.source_component_id,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0});this.pcb_component_id=r.pcb_component_id}doInitialPcbTraceRender(){const{db:t}=this.root,n=t.pcb_port.list({pcb_component_id:this.pcb_component_id}),r={};for(let s=0;s<n.length;s++){const l=n[s],c=t.source_port.get(l.source_port_id);let u="";if(typeof(c==null?void 0:c.pin_number)=="number")u=c.pin_number.toString();else if(Array.isArray(c==null?void 0:c.port_hints)){let d=c.port_hints.find(f=>/^(pin)?\d+$/.test(f));d&&(/^pin\d+$/.test(d)?u=d.replace(/^pin/,""):u=d)}r[u]=l.pcb_port_id}const o=t.pcb_trace.list(),a=s=>{if(s&&typeof s=="string"&&s.startsWith("{PIN")){const l=s.replace("{PIN","").replace("}","");return r[l]||s}return s};for(const s of o)if(s.route)for(const l of s.route)l.route_type==="wire"&&(l.start_pcb_port_id=a(l.start_pcb_port_id),l.end_pcb_port_id=a(l.end_pcb_port_id))}},p_n=class extends S9{constructor(){super(...arguments);Ce(this,"pos",this.portMap.pin1);Ce(this,"anode",this.portMap.pin1);Ce(this,"neg",this.portMap.pin2);Ce(this,"cathode",this.portMap.pin2)}get config(){return{componentName:"Led",schematicSymbolName:this.props.symbolName??"led",zodProps:D3e,sourceFtype:"simple_led"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}_getSchematicSymbolDisplayValue(){return this._parsedProps.schDisplayValue||this._parsedProps.color||void 0}doInitialSourceRender(){const{db:t}=this.root,{_parsedProps:n}=this,r=t.source_component.insert({ftype:"simple_led",name:n.name,wave_length:n.wavelength,color:n.color,symbol_display_value:this._getSchematicSymbolDisplayValue(),manufacturer_part_number:n.manufacturerPartNumber??n.mfn,supplier_part_numbers:n.supplierPartNumbers,are_pins_interchangeable:!1});this.source_component_id=r.source_component_id}},g_n=class extends S9{constructor(){super(...arguments);Ce(this,"pos",this.portMap.pin1);Ce(this,"positive",this.portMap.pin1);Ce(this,"neg",this.portMap.pin2);Ce(this,"negative",this.portMap.pin2)}get config(){return{schematicSymbolName:this.props.symbolName??"power_factor_meter_horz",componentName:"PowerSource",zodProps:F3e,sourceFtype:"simple_power_source"}}initPorts(){this.add(new S5({name:"pin1",pinNumber:1,aliases:["positive","pos"]})),this.add(new S5({name:"pin2",pinNumber:2,aliases:["negative","neg"]}))}doInitialSourceRender(){const{db:t}=this.root,{_parsedProps:n}=this,r=t.source_component.insert({ftype:"simple_power_source",name:n.name,voltage:n.voltage,supplier_part_numbers:n.supplierPartNumbers,are_pins_interchangeable:!1});this.source_component_id=r.source_component_id}},m_n=class extends S9{get config(){return{componentName:"Resistor",schematicSymbolName:this.props.symbolName??"boxresistor",zodProps:A3e,sourceFtype:"simple_resistor"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}_getSchematicSymbolDisplayValue(){return`${Ex(this._parsedProps.resistance)}Ω`}doInitialCreateNetsFromProps(){this._createNetsFromProps([this.props.pullupFor,this.props.pullupTo,this.props.pulldownFor,this.props.pulldownTo,...this._getNetsFromConnectionsProp()])}doInitialCreateTracesFromProps(){this.props.pullupFor&&this.props.pullupTo&&(this.add(new w5({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.pullupFor})),this.add(new w5({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.pullupTo}))),this.props.pulldownFor&&this.props.pulldownTo&&(this.add(new w5({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.pulldownFor})),this.add(new w5({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.pulldownTo}))),this._createTracesFromConnectionsProp()}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_resistor",name:t.name,manufacturer_part_number:t.manufacturerPartNumber??t.mfn,supplier_part_numbers:t.supplierPartNumbers,resistance:t.resistance,display_resistance:this._getSchematicSymbolDisplayValue(),are_pins_interchangeable:!0});this.source_component_id=n.source_component_id}},y_n=["leftedge","rightedge","topedge","bottomedge","center"],v_n=class extends MI{get config(){return{componentName:"Constraint",zodProps:m3e}}constructor(e){if(super(e),("xdist"in e||"ydist"in e)&&!("edgeToEdge"in e)&&!("centerToCenter"in e))throw new Error(`edgeToEdge, centerToCenter must be set for xDist or yDist for ${this}`);if("for"in e&&e.for.length<2)throw new Error(`"for" must have at least two selectors for ${this}`)}_getAllReferencedComponents(){const e=[],t=this.getPrimitiveContainer();function n(r){const o=r.split(" ").pop(),a=y_n.includes(o)?o:void 0,s=a?r.replace(` ${a}`,""):r,l=t.selectOne(s,{pcbPrimitive:!0});l&&e.push({selector:r,component:l,componentSelector:s,edge:a})}for(const r of["left","right","top","bottom"])r in this._parsedProps&&n(this._parsedProps[r]);if("for"in this._parsedProps)for(const r of this._parsedProps.for)n(r);return{componentsWithSelectors:e}}},__n=class extends MI{constructor(){super(...arguments);Ce(this,"fabrication_note_path_id",null)}get config(){return{componentName:"FabricationNotePath",zodProps:P3e}}doInitialPcbPrimitiveRender(){var l,c;if((l=this.root)!=null&&l.pcbDisabled)return;const{db:t}=this.root,n=this.getSubcircuit(),{_parsedProps:r}=this,o=r.layer??"top";if(o!=="top"&&o!=="bottom")throw new Error(`Invalid layer "${o}" for SilkscreenPath. Must be "top" or "bottom".`);const a=this._computePcbGlobalTransformBeforeLayout(),s=t.pcb_fabrication_note_path.insert({pcb_component_id:(c=this.parent)==null?void 0:c.pcb_component_id,layer:o,color:r.color,route:r.route.map(u=>{const d=Qr(a,{x:u.x,y:u.y});return{...u,x:d.x,y:d.y}}),stroke_width:r.strokeWidth??.1,subcircuit_id:(n==null?void 0:n.subcircuit_id)??void 0});this.fabrication_note_path_id=s.pcb_fabrication_note_path_id}},I_n=class extends MI{get config(){return{componentName:"FabricationNoteText",zodProps:T3e}}doInitialPcbPrimitiveRender(){var o,a;if((o=this.root)!=null&&o.pcbDisabled)return;const{db:e}=this.root,{_parsedProps:t}=this,n=this.getPrimitiveContainer(),r=this.getSubcircuit();e.pcb_fabrication_note_text.insert({anchor_alignment:t.anchorAlignment,anchor_position:{x:t.pcbX??0,y:t.pcbY??0},font:t.font??"tscircuit2024",font_size:t.fontSize??1,layer:"top",color:t.color,text:t.text??"",pcb_component_id:n.pcb_component_id,subcircuit_id:(r==null?void 0:r.subcircuit_id)??void 0,pcb_group_id:((a=this.getGroup())==null?void 0:a.pcb_group_id)??void 0})}},C_n=class extends Kge{constructor(e){super({...e,subcircuit:!0})}},x_n=class extends MI{constructor(){super(...arguments);Ce(this,"source_net_alias_id")}get config(){return{componentName:"NetAlias",zodProps:B3e}}doInitialSchematicComponentRender(){var o;if((o=this.root)!=null&&o.schematicDisabled)return;const{db:e}=this.root,{_parsedProps:t}=this,n={x:t.schX??0,y:t.schY??0},r=e.schematic_net_label.insert({text:t.net,source_net_id:t.net,anchor_position:n,center:n,anchor_side:"bottom"});this.source_net_alias_id=r.source_net_id}},E_n=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_silkscreen_circle_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenCircle",zodProps:Y3e}}doInitialPcbPrimitiveRender(){var l,c,u;if((l=this.root)!=null&&l.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,{maybeFlipLayer:r}=this._getPcbPrimitiveFlippedHelpers(),o=r(n.layer??"top");if(o!=="top"&&o!=="bottom")throw new Error(`Invalid layer "${o}" for SilkscreenCircle. Must be "top" or "bottom".`);this._computePcbGlobalTransformBeforeLayout();const a=this.getSubcircuit(),s=t.pcb_silkscreen_circle.insert({pcb_component_id:(c=this.parent)==null?void 0:c.pcb_component_id,layer:o,center:{x:n.pcbX??0,y:n.pcbY??0},radius:n.radius,subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((u=this.getGroup())==null?void 0:u.pcb_group_id)??void 0,stroke_width:n.strokeWidth??.1});this.pcb_silkscreen_circle_id=s.pcb_silkscreen_circle_id}getPcbSize(){const{_parsedProps:t}=this,n=t.radius*2;return{width:n,height:n}}},b_n=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_silkscreen_rect_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenRect",zodProps:H3e}}doInitialPcbPrimitiveRender(){var l,c,u;if((l=this.root)!=null&&l.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,{maybeFlipLayer:r}=this._getPcbPrimitiveFlippedHelpers(),o=r(n.layer??"top");if(o!=="top"&&o!=="bottom")throw new Error(`Invalid layer "${o}" for SilkscreenRect. Must be "top" or "bottom".`);const a=this.getSubcircuit(),s=t.pcb_silkscreen_rect.insert({pcb_component_id:(c=this.parent)==null?void 0:c.pcb_component_id,layer:o,center:{x:n.pcbX??0,y:n.pcbY??0},width:n.width,height:n.height,subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((u=this==null?void 0:this.getGroup())==null?void 0:u.pcb_group_id)??void 0,stroke_width:n.strokeWidth??.1});this.pcb_silkscreen_rect_id=s.pcb_silkscreen_rect_id}getPcbSize(){const{_parsedProps:t}=this;return{width:t.width,height:t.height}}},B_n=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_silkscreen_line_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"SilkscreenLine",zodProps:z3e}}doInitialPcbPrimitiveRender(){var l,c,u;if((l=this.root)!=null&&l.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,{maybeFlipLayer:r}=this._getPcbPrimitiveFlippedHelpers(),o=r(n.layer??"top");if(o!=="top"&&o!=="bottom")throw new Error(`Invalid layer "${o}" for SilkscreenLine. Must be "top" or "bottom".`);const a=this.getSubcircuit(),s=t.pcb_silkscreen_line.insert({pcb_component_id:(c=this.parent)==null?void 0:c.pcb_component_id,layer:o,x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2,stroke_width:n.strokeWidth??.1,subcircuit_id:(a==null?void 0:a.subcircuit_id)??void 0,pcb_group_id:((u=a==null?void 0:a.getGroup())==null?void 0:u.pcb_group_id)??void 0});this.pcb_silkscreen_line_id=s.pcb_silkscreen_line_id}getPcbSize(){const{_parsedProps:t}=this,n=Math.abs(t.x2-t.x1),r=Math.abs(t.y2-t.y1);return{width:n,height:r}}},S_n=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_via_id",null);Ce(this,"matchedPort",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Via",zodProps:k3e}}getAvailablePcbLayers(){return["top","inner1","inner2","bottom"]}getPcbSize(){const{_parsedProps:t}=this;return{width:t.outerDiameter,height:t.outerDiameter}}_getPcbCircuitJsonBounds(){const{db:t}=this.root,n=t.pcb_via.get(this.pcb_via_id),r=this.getPcbSize();return{center:{x:n.x,y:n.y},bounds:{left:n.x-r.width/2,top:n.y-r.height/2,right:n.x+r.width/2,bottom:n.y+r.height/2},width:r.width,height:r.height}}_setPositionFromLayout(t){const{db:n}=this.root;n.pcb_via.update(this.pcb_via_id,{x:t.x,y:t.y})}doInitialPcbPrimitiveRender(){var s,l;if((s=this.root)!=null&&s.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this._getGlobalPcbPositionBeforeLayout(),o=this.getSubcircuit(),a=t.pcb_via.insert({x:r.x,y:r.y,hole_diameter:n.holeDiameter,outer_diameter:n.outerDiameter,layers:["bottom","top"],from_layer:n.fromLayer||"bottom",to_layer:n.toLayer||"top",subcircuit_id:(o==null?void 0:o.subcircuit_id)??void 0,pcb_group_id:((l=this.getGroup())==null?void 0:l.pcb_group_id)??void 0});this.pcb_via_id=a.pcb_via_id}},w_n=class extends MI{constructor(){super(...arguments);Ce(this,"pcb_cutout_id",null);Ce(this,"isPcbPrimitive",!0)}get config(){return{componentName:"Cutout",zodProps:y3e}}doInitialPcbPrimitiveRender(){var l,c;if((l=this.root)!=null&&l.pcbDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=this.getSubcircuit(),o=((c=this.getGroup())==null?void 0:c.pcb_group_id)??void 0,a=this._getGlobalPcbPositionBeforeLayout();let s;if(n.shape==="rect"){const u={shape:"rect",center:a,width:n.width,height:n.height,subcircuit_id:(r==null?void 0:r.subcircuit_id)??void 0,pcb_group_id:o};s=t.pcb_cutout.insert(u)}else if(n.shape==="circle"){const u={shape:"circle",center:a,radius:n.radius,subcircuit_id:(r==null?void 0:r.subcircuit_id)??void 0,pcb_group_id:o};s=t.pcb_cutout.insert(u)}else if(n.shape==="polygon"){const u=this._computePcbGlobalTransformBeforeLayout(),f={shape:"polygon",points:n.points.map(h=>Qr(u,h)),subcircuit_id:(r==null?void 0:r.subcircuit_id)??void 0,pcb_group_id:o};s=t.pcb_cutout.insert(f)}s&&(this.pcb_cutout_id=s.pcb_cutout_id)}getPcbSize(){const{_parsedProps:t}=this;if(t.shape==="rect")return{width:t.width,height:t.height};if(t.shape==="circle")return{width:t.radius*2,height:t.radius*2};if(t.shape==="polygon"){if(t.points.length===0)return{width:0,height:0};let n=1/0,r=-1/0,o=1/0,a=-1/0;for(const s of t.points)n=Math.min(n,s.x),r=Math.max(r,s.x),o=Math.min(o,s.y),a=Math.max(a,s.y);return{width:r-n,height:a-o}}return{width:0,height:0}}_getPcbCircuitJsonBounds(){if(!this.pcb_cutout_id)return super._getPcbCircuitJsonBounds();const{db:t}=this.root,n=t.pcb_cutout.get(this.pcb_cutout_id);if(!n)return super._getPcbCircuitJsonBounds();if(n.shape==="rect")return{center:n.center,bounds:{left:n.center.x-n.width/2,top:n.center.y+n.height/2,right:n.center.x+n.width/2,bottom:n.center.y-n.height/2},width:n.width,height:n.height};if(n.shape==="circle")return{center:n.center,bounds:{left:n.center.x-n.radius,top:n.center.y+n.radius,right:n.center.x+n.radius,bottom:n.center.y-n.radius},width:n.radius*2,height:n.radius*2};if(n.shape==="polygon"){if(n.points.length===0)return super._getPcbCircuitJsonBounds();let r=1/0,o=-1/0,a=1/0,s=-1/0;for(const l of n.points)r=Math.min(r,l.x),o=Math.max(o,l.x),a=Math.min(a,l.y),s=Math.max(s,l.y);return{center:{x:(r+o)/2,y:(a+s)/2},bounds:{left:r,top:s,right:o,bottom:a},width:o-r,height:s-a}}return super._getPcbCircuitJsonBounds()}_setPositionFromLayout(t){if(!this.pcb_cutout_id)return;const{db:n}=this.root,r=n.pcb_cutout.get(this.pcb_cutout_id);if(r){if(r.shape==="rect"||r.shape==="circle")n.pcb_cutout.update(this.pcb_cutout_id,{...r,center:t});else if(r.shape==="polygon"){const o=this._getPcbCircuitJsonBounds().center,a=t.x-o.x,s=t.y-o.y,l=r.points.map(c=>({x:c.x+a,y:c.y+s}));n.pcb_cutout.update(this.pcb_cutout_id,{...r,points:l})}}}},M_n=class extends S9{get config(){return{componentName:"Battery",schematicSymbolName:this.props.symbolName??"battery",zodProps:E3e,sourceFtype:"simple_power_source"}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({name:t.name,ftype:"simple_power_source",capacity:t.capacity,supplier_part_numbers:t.supplierPartNumbers,are_pins_interchangeable:!1});this.source_component_id=n.source_component_id}},Q_n=class extends S9{get config(){return{componentName:"PinHeader",zodProps:b3e,shouldRenderAsSchematicBox:!0}}_getImpliedFootprintString(){var o;const e=this._parsedProps.pinCount??((o=this._parsedProps.pinLabels)==null?void 0:o.length)??0,t=this._parsedProps.holeDiameter,n=this._parsedProps.platedDiameter,r=this._parsedProps.pitch;return e>0&&r?!t&&!n?`pinrow${e}_p${r}`:`pinrow${e}_p${r}_id${t}_od${n}`:null}initPorts(){var t,n;const e=this._parsedProps.pinCount??((t=this._parsedProps.pinLabels)==null?void 0:t.length)??1;for(let r=1;r<=e;r++)this.add(new S5({name:`pin${r}`,pinNumber:r,aliases:[(n=this._parsedProps.pinLabels)==null?void 0:n[r-1]].filter(Boolean)}))}_getSchematicPortArrangement(){var r,o,a,s;const e=this._parsedProps.pinCount??1,t=this._parsedProps.facingDirection??"right",n=this._parsedProps.schPinArrangement;return t==="left"?{leftSide:{direction:((r=n==null?void 0:n.leftSide)==null?void 0:r.direction)??"top-to-bottom",pins:((o=n==null?void 0:n.leftSide)==null?void 0:o.pins)??Array.from({length:e},(l,c)=>`pin${c+1}`)}}:{rightSide:{direction:((a=n==null?void 0:n.rightSide)==null?void 0:a.direction)??"top-to-bottom",pins:((s=n==null?void 0:n.rightSide)==null?void 0:s.pins)??Array.from({length:e},(l,c)=>`pin${c+1}`)}}}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_pin_header",name:t.name,supplier_part_numbers:t.supplierPartNumbers,pin_count:t.pinCount,gender:t.gender,are_pins_interchangeable:!0});this.source_component_id=n.source_component_id}};function R_n(i){switch(i){case"two_ground_pins":return"crystal_4pin";case"ground_pin":return"resonator";case"no_ground":return"crystal";default:return"crystal"}}var D_n=class extends S9{get config(){return{componentName:"Resonator",schematicSymbolName:this.props.symbolName??R_n(this.props.pinVariant),zodProps:p3e,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=t.pinVariant||"no_ground",r=e.source_component.insert({ftype:"simple_resonator",name:t.name,frequency:t.frequency,load_capacitance:t.loadCapacitance,supplier_part_numbers:t.supplierPartNumbers,pin_variant:n,are_pins_interchangeable:n==="no_ground"||n==="ground_pin"});this.source_component_id=r.source_component_id}},N_n=class extends S9{get config(){return{componentName:"Inductor",schematicSymbolName:this.props.symbolName??"inductor",zodProps:Q3e,sourceFtype:SM.simple_inductor}}initPorts(){super.initPorts({additionalAliases:{pin1:["anode","pos","left"],pin2:["cathode","neg","right"]}})}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({name:t.name,ftype:SM.simple_inductor,inductance:t.inductance,supplier_part_numbers:t.supplierPartNumbers,are_pins_interchangeable:!0});this.source_component_id=n.source_component_id}};function T_n(i){switch(i){case"three_pin":return"potentiometer3";case"two_pin":return"potentiometer2";default:return"potentiometer2"}}var P_n=class extends S9{get config(){return{componentName:"Potentiometer",schematicSymbolName:this.props.symbolName??T_n(this.props.pinVariant),zodProps:f3e,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=t.pinVariant||"two_pin",r=e.source_component.insert({ftype:"simple_potentiometer",name:t.name,max_resistance:t.maxResistance,pin_variant:n,are_pins_interchangeable:n==="two_pin"});this.source_component_id=r.source_component_id}},k_n=class extends S9{get config(){return{componentName:"PushButton",schematicSymbolName:this.props.symbolName??"push_button_normally_open_momentary",zodProps:S3e,sourceFtype:SM.simple_push_button}}get defaultInternallyConnectedPinNames(){return[["pin1","pin4"],["pin2","pin3"]]}initPorts(){super.initPorts({pinCount:4,additionalAliases:{pin1:["side1"],pin3:["side2"]}})}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({name:t.name,ftype:SM.simple_push_button,supplier_part_numbers:t.supplierPartNumbers,are_pins_interchangeable:!0});this.source_component_id=n.source_component_id}},L_n=class extends S9{get config(){return{schematicSymbolName:this.props.symbolName??(this.props.pinVariant==="four_pin"?"crystal_4pin":"crystal"),componentName:"Crystal",zodProps:h3e,sourceFtype:"simple_crystal"}}initPorts(){const e=this.props.pinVariant==="four_pin"?{pin1:["left1","1"],pin2:["top1","2","gnd1"],pin3:["right1","3"],pin4:["bottom1","4","gnd2"]}:{pin1:["pos","left"],pin2:["neg","right"]};super.initPorts({additionalAliases:e})}_getSchematicSymbolDisplayValue(){return`${Ex(this._parsedProps.frequency)}Hz`}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({name:t.name,ftype:"simple_crystal",frequency:t.frequency,load_capacitance:t.loadCapacitance,pin_variant:t.pinVariant||"two_pin",are_pins_interchangeable:(t.pinVariant||"two_pin")==="two_pin"});this.source_component_id=n.source_component_id}},F_n=class extends S9{constructor(){super(...arguments);Ce(this,"emitter",this.portMap.pin1);Ce(this,"collector",this.portMap.pin2);Ce(this,"base",this.portMap.pin3)}get config(){return{componentName:"Transistor",schematicSymbolName:this.props.type==="npn"?"npn_bipolar_transistor":"pnp_bipolar_transistor",zodProps:w3e,sourceFtype:"simple_transistor",shouldRenderAsSchematicBox:!1}}initPorts(){const t=this.props.type==="npn"?{pin1:["emitter","e"],pin2:["collector","c"],pin3:["base","b"]}:{pin1:["collector","c"],pin2:["emitter","e"],pin3:["base","b"]};super.initPorts({pinCount:3,additionalAliases:t})}doInitialSourceRender(){const{db:t}=this.root,{_parsedProps:n}=this,r=t.source_component.insert({ftype:"simple_transistor",name:n.name,transistor_type:n.type});this.source_component_id=r.source_component_id}},U_n=class extends S9{get config(){const e=this.props.mosfetMode==="depletion"?"d":"e";return{componentName:"Mosfet",schematicSymbolName:`${this.props.channelType}_channel_${e}_mosfet_transistor`,zodProps:M3e,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_mosfet",name:t.name,mosfet_mode:t.mosfetMode,channel_type:t.channelType});this.source_component_id=n.source_component_id}},G_n=class extends S9{_getSwitchType(){const{spst:e,spdt:t,dpst:n,dpdt:r,type:o}=this._parsedProps??{};return r?"dpdt":e?"spst":t?"spdt":n?"dpst":o??"spst"}get config(){const e=this._getSwitchType(),{isNormallyClosed:t}=this._parsedProps??{};return{componentName:"Switch",schematicSymbolName:{spst:t?"spst_normally_closed_switch":"spst_switch",spdt:t?"spdt_normally_closed_switch":"spdt_switch",dpst:t?"dpst_normally_closed_switch":"dpst_switch",dpdt:t?"dpdt_normally_closed_switch":"dpdt_switch"}[e]??"spst_switch",zodProps:N3e,shouldRenderAsSchematicBox:!1}}doInitialSourceRender(){const{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_switch",name:t.name,switch_type:t.type,is_normally_closed:t.isNormallyClosed??!1,are_pins_interchangeable:this._getSwitchType()==="spst"});this.source_component_id=n.source_component_id}},O_n=class extends MI{constructor(){super(...arguments);Ce(this,"isSchematicPrimitive",!0)}get config(){return{componentName:"SchematicText",zodProps:U3e}}doInitialSchematicPrimitiveRender(){var r;if((r=this.root)!=null&&r.schematicDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this;t.schematic_text.insert({anchor:n.anchor??"center",text:n.text,font_size:n.fontSize,color:n.color||"#000000",position:{x:n.schX,y:n.schY},rotation:n.schRotation??0})}},z_n=class extends MI{constructor(){super(...arguments);Ce(this,"isSchematicPrimitive",!0)}get config(){return{componentName:"SchematicBox",zodProps:$F,shouldRenderAsSchematicBox:!0}}doInitialSchematicPrimitiveRender(){var _;if((_=this.root)!=null&&_.schematicDisabled)return;const{db:t}=this.root,{_parsedProps:n}=this,r=$F.safeParse(n);if(!r.success)throw console.error("Validation failed:",r.error.format()),r.error;const o=.6,a=typeof n.padding=="number"?n.padding:0,s=typeof n.paddingTop=="number"?n.paddingTop:a,l=typeof n.paddingBottom=="number"?n.paddingBottom:a,c=typeof n.paddingLeft=="number"?n.paddingLeft:a,u=typeof n.paddingRight=="number"?n.paddingRight:a,d=n.overlay&&n.overlay.length>0,f=typeof n.width=="number"&&typeof n.height=="number";let h,g,y,v;if(d){const S=n.overlay.map(Ee=>({selector:Ee,port:this.getSubcircuit().selectOne(Ee,{type:"port"})})).filter(({port:Ee})=>Ee!=null).map(({port:Ee})=>({position:Ee._getGlobalSchematicPositionAfterLayout()}));if(S.length===0)return;const M=S.map(Ee=>Ee.position.x),z=S.map(Ee=>Ee.position.y),U=Math.min(...M),H=Math.max(...M),k=Math.min(...z),j=Math.max(...z),G=H-U,ee=j-k,K=G===0?o:0,ie=ee===0?o:0,ce=c+K/2,ue=u+K/2,le=s+ie/2,_e=l+ie/2,ye=U-ce,Qe=H+ue,Me=k-_e,Te=j+le;h=Qe-ye,g=Te-Me,y=ye+(n.schX??0),v=Me+(n.schY??0)}else if(f){h=n.width,g=n.height;const x=typeof n.schX=="number"?n.schX:0,S=typeof n.schY=="number"?n.schY:0;y=x-h/2,v=S-g/2}else return;t.schematic_box.insert({height:g,width:h,x:y,y:v,is_dashed:n.strokeStyle==="dashed",schematic_component_id:""})}};new Proxy({},{get:(i,e)=>{const t=(...n)=>(n[0],new Proxy({},{get:(r,o)=>`.${e} > .${o}`}));return new Proxy(t,{get:(n,r)=>e==="net"?`net.${r}`:e==="subcircuit"?new Proxy({},{get:(o,a)=>new Proxy({},{get:(s,l)=>`subcircuit.${r} > .${a} > .${l}`})}):`.${e} > .${r}`,apply:(n,r,o)=>new Proxy({},{get:(a,s)=>{const l=`.${e} > .${s}`;return e.startsWith("U")?l:new Proxy(new String(l),{get:(c,u)=>typeof u=="symbol"||u==="toString"?()=>l:`.${e} > .${s} > .${u}`})}})})}}),ott(itt),ott({Bug:btt});const y7=i=>typeof i=="number"&&!isNaN(i),wM=i=>typeof i=="string",r2=i=>typeof i=="function",vV=i=>wM(i)||r2(i)?i:null,Jge=i=>rt.isValidElement(i)||wM(i)||r2(i)||y7(i);function H_n(i,e,t){t===void 0&&(t=300);const{scrollHeight:n,style:r}=i;requestAnimationFrame(()=>{r.minHeight="initial",r.height=n+"px",r.transition=`all ${t}ms`,requestAnimationFrame(()=>{r.height="0",r.padding="0",r.margin="0",setTimeout(e,t)})})}function _V(i){let{enter:e,exit:t,appendPosition:n=!1,collapse:r=!0,collapseDuration:o=300}=i;return function(a){let{children:s,position:l,preventExitTransition:c,done:u,nodeRef:d,isIn:f,playToast:h}=a;const g=n?`${e}--${l}`:e,y=n?`${t}--${l}`:t,v=rt.useRef(0);return rt.useLayoutEffect(()=>{const _=d.current,x=g.split(" "),S=M=>{M.target===d.current&&(h(),_.removeEventListener("animationend",S),_.removeEventListener("animationcancel",S),v.current===0&&M.type!=="animationcancel"&&_.classList.remove(...x))};_.classList.add(...x),_.addEventListener("animationend",S),_.addEventListener("animationcancel",S)},[]),rt.useEffect(()=>{const _=d.current,x=()=>{_.removeEventListener("animationend",x),r?H_n(_,u,o):u()};f||(c?x():(v.current=1,_.className+=` ${y}`,_.addEventListener("animationend",x)))},[f]),kA.createElement(kA.Fragment,null,s)}}function Btt(i,e){return i!=null?{content:i.content,containerId:i.props.containerId,id:i.props.toastId,theme:i.props.theme,type:i.props.type,data:i.props.data||{},isLoading:i.props.isLoading,icon:i.props.icon,status:e}:{}}const YE=new Map;let v7=[];const Wge=new Set,Y_n=i=>Wge.forEach(e=>e(i)),Stt=()=>YE.size>0;function wtt(i,e){var t;if(e)return!((t=YE.get(e))==null||!t.isToastActive(i));let n=!1;return YE.forEach(r=>{r.isToastActive(i)&&(n=!0)}),n}function Mtt(i,e){Jge(i)&&(Stt()||v7.push({content:i,options:e}),YE.forEach(t=>{t.buildToast(i,e)}))}function Qtt(i,e){YE.forEach(t=>{e!=null&&e!=null&&e.containerId?(e==null?void 0:e.containerId)===t.id&&t.toggle(i,e==null?void 0:e.id):t.toggle(i,e==null?void 0:e.id)})}function V_n(i){const{subscribe:e,getSnapshot:t,setProps:n}=rt.useRef(function(o){const a=o.containerId||1;return{subscribe(s){const l=function(u,d,f){let h=1,g=0,y=[],v=[],_=[],x=d;const S=new Map,M=new Set,z=()=>{_=Array.from(S.values()),M.forEach(k=>k())},U=k=>{v=k==null?[]:v.filter(j=>j!==k),z()},H=k=>{const{toastId:j,onOpen:G,updateId:ee,children:K}=k.props,ie=ee==null;k.staleId&&S.delete(k.staleId),S.set(j,k),v=[...v,k.props.toastId].filter(ce=>ce!==k.staleId),z(),f(Btt(k,ie?"added":"updated")),ie&&r2(G)&&G(rt.isValidElement(K)&&K.props)};return{id:u,props:x,observe:k=>(M.add(k),()=>M.delete(k)),toggle:(k,j)=>{S.forEach(G=>{j!=null&&j!==G.props.toastId||r2(G.toggle)&&G.toggle(k)})},removeToast:U,toasts:S,clearQueue:()=>{g-=y.length,y=[]},buildToast:(k,j)=>{if((Ee=>{let{containerId:Ge,toastId:Ke,updateId:nt}=Ee;const lt=Ge?Ge!==u:u!==1,Rt=S.has(Ke)&&nt==null;return lt||Rt})(j))return;const{toastId:G,updateId:ee,data:K,staleId:ie,delay:ce}=j,ue=()=>{U(G)},le=ee==null;le&&g++;const _e={...x,style:x.toastStyle,key:h++,...Object.fromEntries(Object.entries(j).filter(Ee=>{let[Ge,Ke]=Ee;return Ke!=null})),toastId:G,updateId:ee,data:K,closeToast:ue,isIn:!1,className:vV(j.className||x.toastClassName),bodyClassName:vV(j.bodyClassName||x.bodyClassName),progressClassName:vV(j.progressClassName||x.progressClassName),autoClose:!j.isLoading&&(ye=j.autoClose,Qe=x.autoClose,ye===!1||y7(ye)&&ye>0?ye:Qe),deleteToast(){const Ee=S.get(G),{onClose:Ge,children:Ke}=Ee.props;r2(Ge)&&Ge(rt.isValidElement(Ke)&&Ke.props),f(Btt(Ee,"removed")),S.delete(G),g--,g<0&&(g=0),y.length>0?H(y.shift()):z()}};var ye,Qe;_e.closeButton=x.closeButton,j.closeButton===!1||Jge(j.closeButton)?_e.closeButton=j.closeButton:j.closeButton===!0&&(_e.closeButton=!Jge(x.closeButton)||x.closeButton);let Me=k;rt.isValidElement(k)&&!wM(k.type)?Me=rt.cloneElement(k,{closeToast:ue,toastProps:_e,data:K}):r2(k)&&(Me=k({closeToast:ue,toastProps:_e,data:K}));const Te={content:Me,props:_e,staleId:ie};x.limit&&x.limit>0&&g>x.limit&&le?y.push(Te):y7(ce)?setTimeout(()=>{H(Te)},ce):H(Te)},setProps(k){x=k},setToggle:(k,j)=>{S.get(k).toggle=j},isToastActive:k=>v.some(j=>j===k),getSnapshot:()=>_}}(a,o,Y_n);YE.set(a,l);const c=l.observe(s);return v7.forEach(u=>Mtt(u.content,u.options)),v7=[],()=>{c(),YE.delete(a)}},setProps(s){var l;(l=YE.get(a))==null||l.setProps(s)},getSnapshot(){var s;return(s=YE.get(a))==null?void 0:s.getSnapshot()}}}(i)).current;n(i);const r=rt.useSyncExternalStore(e,t,t);return{getToastToRender:function(o){if(!r)return[];const a=new Map;return i.newestOnTop&&r.reverse(),r.forEach(s=>{const{position:l}=s.props;a.has(l)||a.set(l,[]),a.get(l).push(s)}),Array.from(a,s=>o(s[0],s[1]))},isToastActive:wtt,count:r==null?void 0:r.length}}function j_n(i){const[e,t]=rt.useState(!1),[n,r]=rt.useState(!1),o=rt.useRef(null),a=rt.useRef({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:s,pauseOnHover:l,closeToast:c,onClick:u,closeOnClick:d}=i;var f,h;function g(){t(!0)}function y(){t(!1)}function v(S){const M=o.current;a.canDrag&&M&&(a.didMove=!0,e&&y(),a.delta=i.draggableDirection==="x"?S.clientX-a.start:S.clientY-a.start,a.start!==S.clientX&&(a.canCloseOnClick=!1),M.style.transform=`translate3d(${i.draggableDirection==="x"?`${a.delta}px, var(--y)`:`0, calc(${a.delta}px + var(--y))`},0)`,M.style.opacity=""+(1-Math.abs(a.delta/a.removalDistance)))}function _(){document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",_);const S=o.current;if(a.canDrag&&a.didMove&&S){if(a.canDrag=!1,Math.abs(a.delta)>a.removalDistance)return r(!0),i.closeToast(),void i.collapseAll();S.style.transition="transform 0.2s, opacity 0.2s",S.style.removeProperty("transform"),S.style.removeProperty("opacity")}}(h=YE.get((f={id:i.toastId,containerId:i.containerId,fn:t}).containerId||1))==null||h.setToggle(f.id,f.fn),rt.useEffect(()=>{if(i.pauseOnFocusLoss)return document.hasFocus()||y(),window.addEventListener("focus",g),window.addEventListener("blur",y),()=>{window.removeEventListener("focus",g),window.removeEventListener("blur",y)}},[i.pauseOnFocusLoss]);const x={onPointerDown:function(S){if(i.draggable===!0||i.draggable===S.pointerType){a.didMove=!1,document.addEventListener("pointermove",v),document.addEventListener("pointerup",_);const M=o.current;a.canCloseOnClick=!0,a.canDrag=!0,M.style.transition="none",i.draggableDirection==="x"?(a.start=S.clientX,a.removalDistance=M.offsetWidth*(i.draggablePercent/100)):(a.start=S.clientY,a.removalDistance=M.offsetHeight*(i.draggablePercent===80?1.5*i.draggablePercent:i.draggablePercent)/100)}},onPointerUp:function(S){const{top:M,bottom:z,left:U,right:H}=o.current.getBoundingClientRect();S.nativeEvent.type!=="touchend"&&i.pauseOnHover&&S.clientX>=U&&S.clientX<=H&&S.clientY>=M&&S.clientY<=z?y():g()}};return s&&l&&(x.onMouseEnter=y,i.stacked||(x.onMouseLeave=g)),d&&(x.onClick=S=>{u&&u(S),a.canCloseOnClick&&c()}),{playToast:g,pauseToast:y,isRunning:e,preventExitTransition:n,toastRef:o,eventHandlers:x}}function K_n(i){let{delay:e,isRunning:t,closeToast:n,type:r="default",hide:o,className:a,style:s,controlledProgress:l,progress:c,rtl:u,isIn:d,theme:f}=i;const h=o||l&&c===0,g={...s,animationDuration:`${e}ms`,animationPlayState:t?"running":"paused"};l&&(g.transform=`scaleX(${c})`);const y=PB("Toastify__progress-bar",l?"Toastify__progress-bar--controlled":"Toastify__progress-bar--animated",`Toastify__progress-bar-theme--${f}`,`Toastify__progress-bar--${r}`,{"Toastify__progress-bar--rtl":u}),v=r2(a)?a({rtl:u,type:r,defaultClassName:y}):PB(y,a),_={[l&&c>=1?"onTransitionEnd":"onAnimationEnd"]:l&&c<1?null:()=>{d&&n()}};return kA.createElement("div",{className:"Toastify__progress-bar--wrp","data-hidden":h},kA.createElement("div",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${f} Toastify__progress-bar--${r}`}),kA.createElement("div",{role:"progressbar","aria-hidden":h?"true":"false","aria-label":"notification timer",className:v,style:g,..._}))}let J_n=1;const Rtt=()=>""+J_n++;function W_n(i){return i&&(wM(i.toastId)||y7(i.toastId))?i.toastId:Rtt()}function _7(i,e){return Mtt(i,e),e.toastId}function IV(i,e){return{...e,type:e&&e.type||i,toastId:W_n(e)}}function CV(i){return(e,t)=>_7(e,IV(i,t))}function K1(i,e){return _7(i,IV("default",e))}K1.loading=(i,e)=>_7(i,IV("default",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...e})),K1.promise=function(i,e,t){let n,{pending:r,error:o,success:a}=e;r&&(n=wM(r)?K1.loading(r,t):K1.loading(r.render,{...t,...r}));const s={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},l=(u,d,f)=>{if(d==null)return void K1.dismiss(n);const h={type:u,...s,...t,data:f},g=wM(d)?{render:d}:d;return n?K1.update(n,{...h,...g}):K1(g.render,{...h,...g}),f},c=r2(i)?i():i;return c.then(u=>l("success",a,u)).catch(u=>l("error",o,u)),c},K1.success=CV("success"),K1.info=CV("info"),K1.error=CV("error"),K1.warning=CV("warning"),K1.warn=K1.warning,K1.dark=(i,e)=>_7(i,IV("default",{theme:"dark",...e})),K1.dismiss=function(i){(function(e){var t;if(Stt()){if(e==null||wM(t=e)||y7(t))YE.forEach(n=>{n.removeToast(e)});else if(e&&("containerId"in e||"id"in e)){const n=YE.get(e.containerId);n?n.removeToast(e.id):YE.forEach(r=>{r.removeToast(e.id)})}}else v7=v7.filter(n=>e!=null&&n.options.toastId!==e)})(i)},K1.clearWaitingQueue=function(i){i===void 0&&(i={}),YE.forEach(e=>{!e.props.limit||i.containerId&&e.id!==i.containerId||e.clearQueue()})},K1.isActive=wtt,K1.update=function(i,e){e===void 0&&(e={});const t=((n,r)=>{var o;let{containerId:a}=r;return(o=YE.get(a||1))==null?void 0:o.toasts.get(n)})(i,e);if(t){const{props:n,content:r}=t,o={delay:100,...n,...e,toastId:e.toastId||i,updateId:Rtt()};o.toastId!==i&&(o.staleId=i);const a=o.render||r;delete o.render,_7(a,o)}},K1.done=i=>{K1.update(i,{progress:1})},K1.onChange=function(i){return Wge.add(i),()=>{Wge.delete(i)}},K1.play=i=>Qtt(!0,i),K1.pause=i=>Qtt(!1,i);const q_n=typeof window<"u"?rt.useLayoutEffect:rt.useEffect,xV=i=>{let{theme:e,type:t,isLoading:n,...r}=i;return kA.createElement("svg",{viewBox:"0 0 24 24",width:"100%",height:"100%",fill:e==="colored"?"currentColor":`var(--toastify-icon-color-${t})`,...r})},qge={info:function(i){return kA.createElement(xV,{...i},kA.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(i){return kA.createElement(xV,{...i},kA.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(i){return kA.createElement(xV,{...i},kA.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(i){return kA.createElement(xV,{...i},kA.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 kA.createElement("div",{className:"Toastify__spinner"})}},X_n=i=>{const{isRunning:e,preventExitTransition:t,toastRef:n,eventHandlers:r,playToast:o}=j_n(i),{closeButton:a,children:s,autoClose:l,onClick:c,type:u,hideProgressBar:d,closeToast:f,transition:h,position:g,className:y,style:v,bodyClassName:_,bodyStyle:x,progressClassName:S,progressStyle:M,updateId:z,role:U,progress:H,rtl:k,toastId:j,deleteToast:G,isIn:ee,isLoading:K,closeOnClick:ie,theme:ce}=i,ue=PB("Toastify__toast",`Toastify__toast-theme--${ce}`,`Toastify__toast--${u}`,{"Toastify__toast--rtl":k},{"Toastify__toast--close-on-click":ie}),le=r2(y)?y({rtl:k,position:g,type:u,defaultClassName:ue}):PB(ue,y),_e=function(Te){let{theme:Ee,type:Ge,isLoading:Ke,icon:nt}=Te,lt=null;const Rt={theme:Ee,type:Ge};return nt===!1||(r2(nt)?lt=nt({...Rt,isLoading:Ke}):rt.isValidElement(nt)?lt=rt.cloneElement(nt,Rt):Ke?lt=qge.spinner():(pt=>pt in qge)(Ge)&&(lt=qge[Ge](Rt))),lt}(i),ye=!!H||!l,Qe={closeToast:f,type:u,theme:ce};let Me=null;return a===!1||(Me=r2(a)?a(Qe):rt.isValidElement(a)?rt.cloneElement(a,Qe):function(Te){let{closeToast:Ee,theme:Ge,ariaLabel:Ke="close"}=Te;return kA.createElement("button",{className:`Toastify__close-button Toastify__close-button--${Ge}`,type:"button",onClick:nt=>{nt.stopPropagation(),Ee(nt)},"aria-label":Ke},kA.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 14 16"},kA.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"})))}(Qe)),kA.createElement(h,{isIn:ee,done:G,position:g,preventExitTransition:t,nodeRef:n,playToast:o},kA.createElement("div",{id:j,onClick:c,"data-in":ee,className:le,...r,style:v,ref:n},kA.createElement("div",{...ee&&{role:U},className:r2(_)?_({type:u}):PB("Toastify__toast-body",_),style:x},_e!=null&&kA.createElement("div",{className:PB("Toastify__toast-icon",{"Toastify--animate-icon Toastify__zoom-enter":!K})},_e),kA.createElement("div",null,s)),Me,kA.createElement(K_n,{...z&&!ye?{key:`pb-${z}`}:{},rtl:k,theme:ce,delay:l,isRunning:e,isIn:ee,closeToast:f,hide:d,type:u,style:M,className:S,controlledProgress:ye,progress:H||0})))},EV=function(i,e){return e===void 0&&(e=!1),{enter:`Toastify--animate Toastify__${i}-enter`,exit:`Toastify--animate Toastify__${i}-exit`,appendPosition:e}},Z_n=_V(EV("bounce",!0));_V(EV("slide",!0)),_V(EV("zoom")),_V(EV("flip"));const $_n={position:"top-right",transition:Z_n,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:"touch",draggablePercent:80,draggableDirection:"x",role:"alert",theme:"light"};function e1n(i){let e={...$_n,...i};const t=i.stacked,[n,r]=rt.useState(!0),o=rt.useRef(null),{getToastToRender:a,isToastActive:s,count:l}=V_n(e),{className:c,style:u,rtl:d,containerId:f}=e;function h(y){const v=PB("Toastify__toast-container",`Toastify__toast-container--${y}`,{"Toastify__toast-container--rtl":d});return r2(c)?c({position:y,rtl:d,defaultClassName:v}):PB(v,vV(c))}function g(){t&&(r(!0),K1.play())}return q_n(()=>{if(t){var y;const v=o.current.querySelectorAll('[data-in="true"]'),_=12,x=(y=e.position)==null?void 0:y.includes("top");let S=0,M=0;Array.from(v).reverse().forEach((z,U)=>{const H=z;H.classList.add("Toastify__toast--stacked"),U>0&&(H.dataset.collapsed=`${n}`),H.dataset.pos||(H.dataset.pos=x?"top":"bot");const k=S*(n?.2:1)+(n?0:_*U);H.style.setProperty("--y",`${x?k:-1*k}px`),H.style.setProperty("--g",`${_}`),H.style.setProperty("--s",""+(1-(n?M:0))),S+=H.offsetHeight,M+=.025})}},[n,l,t]),kA.createElement("div",{ref:o,className:"Toastify",id:f,onMouseEnter:()=>{t&&(r(!1),K1.pause())},onMouseLeave:g},a((y,v)=>{const _=v.length?{...u}:{...u,pointerEvents:"none"};return kA.createElement("div",{className:h(y),style:_,key:`container-${y}`},v.map(x=>{let{content:S,props:M}=x;return kA.createElement(X_n,{...M,stacked:t,collapseAll:g,isIn:s(M.toastId,M.containerId),style:M.style,key:`toast-${M.key}`},S)}))}))}function t1n(){var i=':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)}}',e=document.createElement("style");e.innerText=i,document.head.appendChild(e)}const n1n=yyt(y9t);var Xge,Dtt;function i1n(){if(Dtt)return Xge;Dtt=1;var i=Object.defineProperty,e=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,r=(v,_)=>{for(var x in _)i(v,x,{get:_[x],enumerable:!0})},o=(v,_,x,S)=>{if(_&&typeof _=="object"||typeof _=="function")for(let M of t(_))!n.call(v,M)&&M!==x&&i(v,M,{get:()=>_[M],enumerable:!(S=e(_,M))||S.enumerable});return v},a=v=>o(i({},"__esModule",{value:!0}),v),s={};r(s,{SuperGrid:()=>y,toMMSI:()=>g,toMeterSI:()=>h}),Xge=a(s);var l=Cx(),c=n1n,u=tEe(),d=(v,_,x)=>{const S=[];if(_<v)for(let M=v;M>=_;M-=Math.abs(x))S.push(M);else for(let M=v;M<=_;M+=Math.abs(x))S.push(M);return S};function f(v,_){return{x:Math.round(_.x/v)*v,y:Math.round(_.y/v)*v}}function h(v,_=1){return v<0?"-"+h(-v):v<1e-6?"0m":v>1e3?Math.floor(v/1e3)+"km":v>1&&_>1?Math.round(v)+"m":v>1&&_<=1?v.toFixed(Math.ceil(-Math.log10(_)))+"m":v<1&&_>=1/1e3?Math.round(v*1e3)+"mm":v<1&&_<1/1e3?(v*1e3).toFixed(Math.ceil(-Math.log10(_*1e3)))+"mm":""}function g(v,_=1){return h(v/1e3,_/1e3)}var y=v=>{var _;const x=(0,l.useRef)(null),[S,M]=(0,l.useState)({x:0,y:0}),{majorColor:z="rgba(0,0,0,0.2)",minorColor:U="rgba(0,0,0,0.1)",textColor:H=(_=v.majorColor)!=null?_:"rgba(0,0,0,0.5)",width:k,height:j,screenSpaceCellSize:G=200,stringifyCoord:ee=(ue,le,_e)=>`${h(ue,_e)}, ${h(le,_e)}`}=v,K=Math.ceil(k/G)+2,ie=Math.ceil(j/G)+2;(0,l.useEffect)(()=>{if(!x.current)return;const ue=x.current.getContext("2d");if(!ue)return;const le=G/10**Math.floor(Math.log10(v.transform.a)),_e=v.transform.d<0?-1:1,Qe=G/10**Math.log10(v.transform.a)/le;function Me(We,$e,_t){const Tt=We;let yt,tt,Pt;for(yt=$e.x;yt<=_t.x;yt+=Tt)tt=(0,c.applyToPoint)(v.transform,{x:yt,y:$e.y}),Pt=(0,c.applyToPoint)(v.transform,{x:yt,y:_t.y}),ue.beginPath(),ue.moveTo(tt.x,tt.y),ue.lineTo(Pt.x,Pt.y),ue.stroke();const Et=d($e.y,_t.y,Tt*_e);for(const Dt of Et)tt=(0,c.applyToPoint)(v.transform,{x:$e.x,y:Dt}),Pt=(0,c.applyToPoint)(v.transform,{x:_t.x,y:Dt}),ue.beginPath(),ue.moveTo(tt.x,tt.y),ue.lineTo(Pt.x,Pt.y),ue.stroke()}function Te(We,$e,_t){const Tt=We;let yt;for(yt=$e.x;yt<=_t.x;yt+=Tt)for(const tt of d($e.y,_t.y,Tt*_e)){const Pt=(0,c.applyToPoint)(v.transform,{x:yt,y:tt});ue.fillStyle=H,ue.font="12px sans-serif",ue.fillText(ee(yt,tt,We),Pt.x+2,Pt.y-2)}}ue.clearRect(0,0,k,j);const Ee=(0,c.applyToPoint)((0,c.inverse)(v.transform),{x:0,y:0}),Ge={x:Math.floor((Ee.x-le)/le)*le,y:Math.floor((Ee.y-le)/le+(_e==-1?2:0))*le},Ke={x:Ge.x+le*K,y:Ge.y+le*ie*_e},lt=le*5,Rt={x:Math.floor((Ee.x-lt)/lt)*lt,y:Math.floor((Ee.y-lt)/lt+(_e==-1?2:0))*lt},pt={x:Rt.x+lt*K,y:Rt.y+lt*ie*_e};ue.globalAlpha=1,ue.strokeStyle=z,Me(le,Ge,Ke),Te(lt,Rt,pt),ue.globalAlpha=1-Qe,Me(lt/10,Rt,pt),ue.globalAlpha=1-Qe,ue.strokeStyle=U,Me(le/10,Ge,Ke),ue.globalAlpha=Math.max(((1-Qe)*10-5)/5,0),Te(lt/10,Rt,pt),ue.globalAlpha=1;const Fe=(0,c.applyToPoint)(v.transform,S);ue.font="12px sans-serif",ue.fillStyle=H,ue.fillText(ee(S.x,S.y,le),Fe.x+2,Fe.y-2),ue.strokeStyle=z,ue.strokeRect(Fe.x-5,Fe.y-5,10,10)},[x,v.transform,S,k,j]);const ce=ue=>{if(!x.current)return;const le=G/10/10**Math.floor(Math.log10(v.transform.a)),_e=x.current.getBoundingClientRect(),ye=(0,c.applyToPoint)((0,c.inverse)(v.transform),{x:ue.clientX-_e.left,y:ue.clientY-_e.top}),Qe=f(le,ye);M(Qe)};return(0,u.jsx)("canvas",{onMouseUp:ue=>{ue.button===1&&ce(ue)},onDoubleClick:ce,ref:x,width:v.width,height:v.height})};return Xge}var Zge=i1n(),$ge={exports:{}},I7={},bV={exports:{}},eme={},tme={},Ntt;function nme(){if(Ntt)return tme;Ntt=1;function i(n){this.__parent=n,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}i.prototype.clone_empty=function(){var n=new i(this.__parent);return n.set_indent(this.__indent_count,this.__alignment_count),n},i.prototype.item=function(n){return n<0?this.__items[this.__items.length+n]:this.__items[n]},i.prototype.has_match=function(n){for(var r=this.__items.length-1;r>=0;r--)if(this.__items[r].match(n))return!0;return!1},i.prototype.set_indent=function(n,r){this.is_empty()&&(this.__indent_count=n||0,this.__alignment_count=r||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},i.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},i.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},i.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var n=this.__parent.current_line;return n.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),n.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),n.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,n.__items[0]===" "&&(n.__items.splice(0,1),n.__character_count-=1),!0}return!1},i.prototype.is_empty=function(){return this.__items.length===0},i.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},i.prototype.push=function(n){this.__items.push(n);var r=n.lastIndexOf(`
|
|
13346
13346
|
`);r!==-1?this.__character_count=n.length-r:this.__character_count+=n.length},i.prototype.pop=function(){var n=null;return this.is_empty()||(n=this.__items.pop(),this.__character_count-=n.length),n},i.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},i.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},i.prototype.trim=function(){for(;this.last()===" ";)this.__items.pop(),this.__character_count-=1},i.prototype.toString=function(){var n="";return this.is_empty()?this.__parent.indent_empty_lines&&(n=this.__parent.get_indent_string(this.__indent_count)):(n=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),n+=this.__items.join("")),n};function e(n,r){this.__cache=[""],this.__indent_size=n.indent_size,this.__indent_string=n.indent_char,n.indent_with_tabs||(this.__indent_string=new Array(n.indent_size+1).join(n.indent_char)),r=r||"",n.indent_level>0&&(r=new Array(n.indent_level+1).join(this.__indent_string)),this.__base_string=r,this.__base_string_length=r.length}e.prototype.get_indent_size=function(n,r){var o=this.__base_string_length;return r=r||0,n<0&&(o=0),o+=n*this.__indent_size,o+=r,o},e.prototype.get_indent_string=function(n,r){var o=this.__base_string;return r=r||0,n<0&&(n=0,o=""),r+=n*this.__indent_size,this.__ensure_cache(r),o+=this.__cache[r],o},e.prototype.__ensure_cache=function(n){for(;n>=this.__cache.length;)this.__add_column()},e.prototype.__add_column=function(){var n=this.__cache.length,r=0,o="";this.__indent_size&&n>=this.__indent_size&&(r=Math.floor(n/this.__indent_size),n-=r*this.__indent_size,o=new Array(r+1).join(this.__indent_string)),n&&(o+=new Array(n+1).join(" ")),this.__cache.push(o)};function t(n,r){this.__indent_cache=new e(n,r),this.raw=!1,this._end_with_newline=n.end_with_newline,this.indent_size=n.indent_size,this.wrap_line_length=n.wrap_line_length,this.indent_empty_lines=n.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new i(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}return t.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},t.prototype.get_line_number=function(){return this.__lines.length},t.prototype.get_indent_string=function(n,r){return this.__indent_cache.get_indent_string(n,r)},t.prototype.get_indent_size=function(n,r){return this.__indent_cache.get_indent_size(n,r)},t.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},t.prototype.add_new_line=function(n){return this.is_empty()||!n&&this.just_added_newline()?!1:(this.raw||this.__add_outputline(),!0)},t.prototype.get_code=function(n){this.trim(!0);var r=this.current_line.pop();r&&(r[r.length-1]===`
|
|
@@ -13512,7 +13512,7 @@ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}return xme}m1n();function gnt(i,e,t,n=
|
|
|
13512
13512
|
&:hover {
|
|
13513
13513
|
background-color: rgba(255, 255, 255, 0.1);
|
|
13514
13514
|
}
|
|
13515
|
-
`,onClick:n=>{n.stopPropagation(),t()},children:[je.jsx("input",{type:"checkbox",checked:e}),je.jsx("span",{style:{color:"#eee"},children:i})]}),Y9n=({children:i,elements:e})=>{const[t,n]=M9(k=>[k.is_mouse_over_container,k.setIsMouseOverContainer]),[r,o]=rt.useState(!1),[a,s]=rt.useState(!1),[l,c]=rt.useState(!1),[u,d]=M9(k=>[k.selected_layer,k.selectLayer]),[f,h,g,y,v,_]=M9(k=>[k.in_move_footprint_mode,k.in_draw_trace_mode,k.is_showing_rats_nest,k.is_showing_multiple_traces_length,k.is_showing_autorouting,k.is_showing_drc_errors]),x=M9(k=>k.setEditMode),S=M9(k=>k.setIsShowingRatsNest),M=M9(k=>k.setIsShowingMultipleTracesLength),z=M9(k=>k.setIsShowingAutorouting),U=M9(k=>k.setIsShowingDrcErrors);l3("1",()=>d("top")),l3("2",()=>d("bottom")),l3("3",()=>d("inner1")),l3("4",()=>d("inner2")),l3("5",()=>d("inner3")),l3("6",()=>d("inner4")),l3("7",()=>d("inner5")),l3("8",()=>d("inner6"));const H=(e==null?void 0:e.filter(k=>k.type.includes("error")).length)??0;return je.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>{n(!0)},onMouseLeave:k=>{n(!1),s(!1)},children:[i,je.jsxs("div",{style:{position:"absolute",bottom:4,right:8,pointerEvents:"none",color:"white",fontSize:11,opacity:t?.5:0,transition:"opacity 1s",transitionDelay:"2s",fontFamily:"sans-serif"},children:["@tscircuit/pcb-viewer@",z9n.version]}),je.jsxs("div",{style:{position:"absolute",opacity:t?1:0,top:16,left:16,transition:t?"opacity 100ms linear":"opacity 1s linear",zIndex:wE.toolbarOverlay,color:"red",display:"flex",fontSize:12,height:100,fontFamily:"sans-serif"},children:[je.jsxs(LD,{onClick:()=>{s(!a)},onMouseLeave:()=>{a&&s(!1)},children:[je.jsxs("div",{children:["layer:"," ",je.jsx("span",{style:{marginLeft:2,fontWeight:500,color:kD[u]},children:u})]}),a&&je.jsx("div",{style:{marginTop:4,minWidth:120},children:rye.map(k=>k.replace(/-/g,"")).map(k=>je.jsx(H9n,{name:k,selected:k===u,onClick:()=>{d(k.replace(/-/,""))}},k))})]}),je.jsxs(LD,{style:H>0?{color:"red"}:{},onClick:()=>c(!l),onMouseLeave:()=>c(!1),children:[je.jsxs("div",{children:[H," errors"]}),l&&je.jsx("div",{style:{display:"grid",gridTemplateColumns:"100px 300px"},children:e==null?void 0:e.filter(k=>k.type.includes("error")).map((k,j)=>je.jsxs(rt.Fragment,{children:[je.jsx("div",{children:k.error_type}),je.jsx("div",{children:k.message})]},j))})]}),je.jsx(LD,{style:{},onClick:()=>{x(h?"off":"draw_trace")},children:je.jsxs("div",{children:[h?"✖ ":"","Edit Traces"]})}),je.jsx(LD,{style:{},onClick:()=>{x(f?"off":"move_footprint")},children:je.jsxs("div",{children:[f?"✖ ":"","Move Components"]})}),je.jsx(LD,{style:{},onClick:()=>{S(!g)},children:je.jsxs("div",{children:[g?"✖ ":"","Rats Nest"]})}),je.jsx(LD,{onClick:()=>{o(!r)},children:je.jsxs("div",{children:[je.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:["View"," ",je.jsx("span",{style:{fontSize:"8px",transform:r?"rotate(180deg)":"rotate(0)",transition:"transform 0.1s ease",display:"inline-block"},children:"▼"})]}),r&&je.jsxs("div",{style:{marginTop:4,minWidth:120},children:[je.jsx(uye,{label:"Show All Trace Lengths",checked:y,onClick:()=>{M(!y)}}),je.jsx(uye,{label:"Show Autorouting Animation",checked:v,onClick:()=>{z(!v)}}),je.jsx(uye,{label:"Show DRC Errors",checked:_,onClick:()=>{U(!_)}})]})]})})]})]})},V9n=i=>{const{transform:e,elements:t}=i,[n,r]=rt.useMemo(()=>{const c=i.elements.flatMap(d=>n9n(d,i.elements)),u=OS(i.elements);return[c,u]},[i.elements]),[o,a]=rt.useState({drawingObjectIdsWithMouseOver:new Set,primitiveIdsInMousedOverNet:[]}),s=rt.useMemo(()=>e9n({primitivesWithoutInteractionMetadata:n,drawingObjectIdsWithMouseOver:o.drawingObjectIdsWithMouseOver,primitiveIdsInMousedOverNet:o.primitiveIdsInMousedOverNet}),[n,o]),l=rt.useCallback(c=>{var f,h;const u=[];for(const g of c)if(g._element){const y=r.getNetConnectedToId("pcb_port_id"in g._element?(f=g._element)==null?void 0:f.pcb_port_id:"pcb_trace_id"in g._element?(h=g._element)==null?void 0:h.pcb_trace_id:"");u.push(...r.getIdsConnectedToNet(y))}const d=new Set(c.map(g=>g._pcb_drawing_object_id));a({drawingObjectIdsWithMouseOver:d,primitiveIdsInMousedOverNet:u})},[r]);return je.jsx(G9n,{elements:t,transform:e,primitives:n,onMouseHoverOverPrimitives:l,children:je.jsx(x9n,{disabled:!i.allowEditing,transform:e,soup:t,cancelPanDrag:i.cancelPanDrag,onCreateEditEvent:i.onCreateEditEvent,onModifyEditEvent:i.onModifyEditEvent,children:je.jsx(S9n,{disabled:!i.allowEditing,transform:e,soup:t,cancelPanDrag:i.cancelPanDrag,onCreateEditEvent:i.onCreateEditEvent,onModifyEditEvent:i.onModifyEditEvent,children:je.jsx(I9n,{transform:e,focusOnHover:i.focusOnHover,children:je.jsx(Y9n,{elements:t,children:je.jsx(Q9n,{transform:e,elements:t,children:je.jsx(O9n,{transform:e,soup:t,children:je.jsx(v9n,{transform:e,debugGraphics:i.debugGraphics,children:je.jsx(_9n,{transform:e,elements:t,children:je.jsx(y9n,{transform:e,primitives:s,width:i.width,height:i.height,grid:i.grid})})})})})})})})})})},j9n=XA(hp(400,300),H9(40,-40)),K9n=({circuitJson:i,debugGraphics:e,height:t=600,initialState:n,allowEditing:r=!0,editEvents:o,onEditEventsChanged:a,focusOnHover:s=!1,clickToInteractEnabled:l=!1})=>{const[c,u]=rt.useState(!l),[d,f]=lye(),[h,g]=rt.useState(j9n),{ref:y,setTransform:v,cancelDrag:_}=$Cn({transform:h,onSetTransform:g,enabled:c});let[x,S]=rt.useState([]);x=o??x;const M=rt.useRef(!1),z=rt.useRef(null),U=`${(i==null?void 0:i.length)||0}_${(i==null?void 0:i.editCount)||0}`,H=()=>{const K=(f==null?void 0:f.width)>0?f:{width:500,height:500},{center:ie,width:ce,height:ue}=j.some(ye=>ye.type.startsWith("pcb_"))?HCn(j.filter(ye=>ye.type.startsWith("pcb_"))):{center:{x:0,y:0},width:.001,height:.001},le=Math.min((K.width??0)/ce,(K.height??0)/ue,100)*.75,_e=XA(hp((K.width??0)/2,(K.height??0)/2),H9(le,-le,0,0),hp(-ie.x,-ie.y));v(_e)};rt.useEffect(()=>{f!=null&&f.width&&i&&i.length!==0&&(M.current||(H(),M.current=!0))},[i,f]);const k=rt.useMemo(()=>(i==null?void 0:i.filter(K=>K.type.startsWith("pcb_")||K.type.startsWith("source_")))??[],[U]),j=rt.useMemo(()=>n_n({circuitJson:k,editEvents:x}),[k,x]),G=K=>{S([...x,K]),a==null||a([...x,K])},ee=K=>{const ie=x.map(ce=>ce.edit_event_id===K.edit_event_id?{...ce,...K}:ce);S(ie),a==null||a(ie)};return je.jsxs("div",{ref:y,style:{position:"relative"},children:[je.jsx("div",{ref:d,children:je.jsxs(VCn,{initialState:n,children:[je.jsx(V9n,{transform:h,height:t,width:f.width,allowEditing:r,focusOnHover:s,cancelPanDrag:_,onCreateEditEvent:G,onModifyEditEvent:ee,grid:{spacing:1,view_window:{left:0,right:f.width||500,top:t,bottom:0}},elements:j,debugGraphics:e},f.width),je.jsx(KCn,{})]})}),l&&!c&&je.jsx("div",{onClick:()=>{u(!0),H()},onTouchStart:K=>{const ie=K.touches[0];z.current={x:ie.clientX,y:ie.clientY}},onTouchEnd:K=>{const ie=K.changedTouches[0],ce=z.current;if(!ce)return;const ue=Math.abs(ie.clientX-ce.x),le=Math.abs(ie.clientY-ce.y);ue<10&&le<10&&(K.preventDefault(),u(!0),H()),z.current=null},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:wE.clickToInteractOverlay,display:"flex",alignItems:"center",justifyContent:"center",touchAction:"pan-x pan-y pinch-zoom"},children:je.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",pointerEvents:"none"},children:typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)?"Touch to Interact":"Click to Interact"})})]})};const J9n=({containerClassName:i,...e})=>{const t=rt.useRef(null),[n,r]=rt.useState(620);return rt.useLayoutEffect(()=>{const o=()=>{if(t.current){const s=t.current.clientHeight,l=window.innerHeight;r(Math.min(Math.max(s,620),l))}};o();const a=new ResizeObserver(o);return t.current&&a.observe(t.current),window.addEventListener("resize",o),()=>{a.disconnect(),window.removeEventListener("resize",o)}},[]),je.jsx("div",{ref:t,className:i||"rf-w-full rf-h-full",children:je.jsx(K9n,{...e,height:n})})},W9n='*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--radius:0.5rem}.rf-pointer-events-none{pointer-events:none}.rf-invisible{visibility:hidden}.rf-fixed{position:fixed}.rf-absolute{position:absolute}.rf-relative{position:relative}.rf-inset-0{inset:0}.-rf-left-2{left:-.5rem}.-rf-right-10{right:-2.5rem}.-rf-right-2{right:-.5rem}.-rf-right-4{right:-1rem}.-rf-right-6{right:-1.5rem}.-rf-right-7{right:-1.75rem}.-rf-right-8{right:-2rem}.-rf-right-9{right:-2.25rem}.rf-bottom-full{bottom:100%}.rf-left-0{left:0}.rf-left-1{left:.25rem}.rf-left-1\\/2{left:50%}.rf-left-2{left:.5rem}.rf-left-\\[50\\%\\]{left:50%}.rf-right-0{right:0}.rf-right-1{right:.25rem}.rf-right-4{right:1rem}.rf-right-\\[4px\\]{right:4px}.rf-top-0{top:0}.rf-top-1{top:.25rem}.rf-top-2{top:.5rem}.rf-top-2\\.5{top:.625rem}.rf-top-\\[50\\%\\]{top:50%}.rf-top-\\[6px\\]{top:6px}.\\!rf-z-\\[101\\]{z-index:101!important}.rf-z-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.rf-m-1{margin:.25rem}.rf-m-6{margin:1.5rem}.-rf-mx-1,.rf--mx-1{margin-left:-.25rem;margin-right:-.25rem}.rf-mx-1{margin-left:.25rem;margin-right:.25rem}.rf-mx-2{margin-left:.5rem;margin-right:.5rem}.rf-mx-4{margin-left:1rem;margin-right:1rem}.rf-mx-auto{margin-left:auto;margin-right:auto}.rf-my-1{margin-bottom:.25rem;margin-top:.25rem}.rf-my-12{margin-bottom:3rem;margin-top:3rem}.rf-my-4{margin-bottom:1rem;margin-top:1rem}.rf-my-auto{margin-bottom:auto;margin-top:auto}.rf-mb-1{margin-bottom:.25rem}.rf-mb-12{margin-bottom:3rem}.rf-mb-2{margin-bottom:.5rem}.rf-mb-3{margin-bottom:.75rem}.rf-mb-4{margin-bottom:1rem}.rf-mb-6{margin-bottom:1.5rem}.rf-mb-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.rf-mt-0{margin-top:0}.rf-mt-0\\.5{margin-top:.125rem}.rf-mt-1{margin-top:.25rem}.rf-mt-2{margin-top:.5rem}.rf-mt-3{margin-top:.75rem}.rf-mt-4{margin-top:1rem}.rf-mt-5{margin-top:1.25rem}.rf-mt-auto{margin-top:auto}.rf-block{display:block}.rf-inline-block{display:inline-block}.rf-inline{display:inline}.rf-flex{display:flex}.rf-inline-flex{display:inline-flex}.rf-grid{display:grid}.rf-hidden{display:none}.rf-aspect-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.\\!rf-h-3{height:.75rem!important}.\\!rf-h-full{height:100%!important}.rf-h-1{height:.25rem}.rf-h-10{height:2.5rem}.rf-h-12{height:3rem}.rf-h-2{height:.5rem}.rf-h-2\\.5{height:.625rem}.rf-h-3{height:.75rem}.rf-h-3\\.5{height:.875rem}.rf-h-4{height:1rem}.rf-h-5{height:1.25rem}.rf-h-6{height:1.5rem}.rf-h-60{height:15rem}.rf-h-64{height:16rem}.rf-h-8{height:2rem}.rf-h-9{height:2.25rem}.rf-h-\\[400px\\]{height:400px}.rf-h-\\[calc\\(100vh-52px\\)\\]{height:calc(100vh - 52px)}.rf-h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.rf-h-auto{height:auto}.rf-h-fit{height:-moz-fit-content;height:fit-content}.rf-h-full{height:100%}.rf-h-px{height:1px}.rf-h-screen{height:100vh}.\\!rf-max-h-\\[40vh\\]{max-height:40vh!important}.rf-max-h-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[500px\\]{max-height:500px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.rf-w-1{width:.25rem}.rf-w-1\\/2{width:50%}.rf-w-11{width:2.75rem}.rf-w-11\\/12{width:91.666667%}.rf-w-12{width:3rem}.rf-w-16{width:4rem}.rf-w-2{width:.5rem}.rf-w-2\\.5{width:.625rem}.rf-w-20{width:5rem}.rf-w-28{width:7rem}.rf-w-3{width:.75rem}.rf-w-3\\.5{width:.875rem}.rf-w-32{width:8rem}.rf-w-4{width:1rem}.rf-w-48{width:12rem}.rf-w-5{width:1.25rem}.rf-w-6{width:1.5rem}.rf-w-64{width:16rem}.rf-w-72{width:18rem}.rf-w-8{width:2rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-\\[95\\%\\]{width:95%}.rf-w-fit{width:-moz-fit-content;width:fit-content}.rf-w-full{width:100%}.rf-w-screen{width:100vw}.rf-min-w-0{min-width:0}.rf-min-w-10{min-width:2.5rem}.rf-min-w-16{min-width:4rem}.rf-min-w-\\[148px\\]{min-width:148px}.rf-min-w-\\[8rem\\]{min-width:8rem}.rf-min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.\\!rf-max-w-\\[660px\\]{max-width:660px!important}.rf-max-w-2xl{max-width:42rem}.rf-max-w-3xl{max-width:48rem}.rf-max-w-4xl{max-width:56rem}.rf-max-w-5xl{max-width:64rem}.rf-max-w-full{max-width:100%}.rf-max-w-lg{max-width:32rem}.rf-max-w-md{max-width:28rem}.rf-max-w-none{max-width:none}.rf-max-w-xl{max-width:36rem}.rf-flex-1{flex:1 1 0%}.rf-flex-shrink-0,.rf-shrink-0{flex-shrink:0}.rf-flex-grow{flex-grow:1}.rf-table-auto{table-layout:auto}.rf-origin-\\[--radix-popover-content-transform-origin\\]{transform-origin:var(--radix-popover-content-transform-origin)}.-rf-translate-x-1{--tw-translate-x:-0.25rem}.-rf-translate-x-1,.-rf-translate-x-1\\/2{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))}.-rf-translate-x-1\\/2{--tw-translate-x:-50%}.-rf-translate-y-1{--tw-translate-y:-0.25rem}.-rf-translate-y-1,.rf--translate-x-1{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))}.rf--translate-x-1{--tw-translate-x:-0.25rem}.rf--translate-x-1\\/2{--tw-translate-x:-50%}.rf--translate-x-1\\/2,.rf--translate-y-1{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))}.rf--translate-y-1{--tw-translate-y:-0.25rem}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-x-\\[-50\\%\\],.rf-translate-y-\\[-50\\%\\]{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))}.rf-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.rf-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))}@keyframes rf-pulse{50%{opacity:.5}}.rf-animate-pulse{animation:rf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes rf-spin{to{transform:rotate(1turn)}}.rf-animate-spin{animation:rf-spin 1s linear infinite}.rf-cursor-default{cursor:default}.rf-cursor-not-allowed{cursor:not-allowed}.rf-cursor-pointer{cursor:pointer}.rf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rf-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.rf-flex-row{flex-direction:row}.rf-flex-col{flex-direction:column}.rf-flex-col-reverse{flex-direction:column-reverse}.rf-flex-wrap{flex-wrap:wrap}.rf-place-items-center{place-items:center}.rf-items-start{align-items:flex-start}.rf-items-end{align-items:flex-end}.rf-items-center{align-items:center}.rf-items-stretch{align-items:stretch}.rf-justify-end{justify-content:flex-end}.rf-justify-center{justify-content:center}.rf-justify-between{justify-content:space-between}.rf-gap-0{gap:0}.rf-gap-1{gap:.25rem}.rf-gap-2{gap:.5rem}.rf-gap-3{gap:.75rem}.rf-gap-4{gap:1rem}.rf-gap-5{gap:1.25rem}.rf-gap-6{gap:1.5rem}.rf-gap-8{gap:2rem}.rf-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))}.rf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.rf-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.rf-overflow-auto{overflow:auto}.rf-overflow-hidden{overflow:hidden}.rf-overflow-visible{overflow:visible}.rf-overflow-x-auto{overflow-x:auto}.\\!rf-overflow-y-auto{overflow-y:auto!important}.rf-overflow-y-auto{overflow-y:auto}.rf-overflow-x-hidden{overflow-x:hidden}.rf-overflow-x-clip{overflow-x:clip}.rf-truncate{overflow:hidden;text-overflow:ellipsis}.rf-truncate,.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-break-words{overflow-wrap:break-word}.rf-rounded{border-radius:.25rem}.rf-rounded-2xl{border-radius:1rem}.rf-rounded-full{border-radius:9999px}.rf-rounded-lg{border-radius:var(--radius)}.rf-rounded-md{border-radius:calc(var(--radius) - 2px)}.rf-rounded-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-2{border-width:2px}.rf-border-b{border-bottom-width:1px}.rf-border-t{border-top-width:1px}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.rf-border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.rf-border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.rf-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.rf-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.rf-border-input{border-color:hsl(var(--input))}.rf-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.rf-border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.rf-border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.rf-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.rf-border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.rf-border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity,1))}.rf-bg-background{background-color:hsl(var(--background))}.rf-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.rf-bg-black\\/80{background-color:rgba(0,0,0,.8)}.rf-bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.rf-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.rf-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.rf-bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.rf-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.rf-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.rf-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.rf-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.rf-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.rf-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.rf-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.rf-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.rf-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.rf-bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.rf-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.rf-bg-muted{background-color:hsl(var(--muted))}.rf-bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity,1))}.rf-bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.rf-bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity,1))}.rf-bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity,1))}.rf-bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.rf-bg-popover{background-color:hsl(var(--popover))}.rf-bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.rf-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.rf-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.rf-bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.rf-bg-transparent{background-color:transparent}.rf-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.rf-bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.rf-bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.rf-bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity,1))}.rf-bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.rf-bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.rf-bg-opacity-50{--tw-bg-opacity:0.5}.rf-fill-current{fill:currentColor}.rf-object-contain{-o-object-fit:contain;object-fit:contain}.rf-object-cover{-o-object-fit:cover;object-fit:cover}.\\!rf-p-0{padding:0!important}.rf-p-0{padding:0}.rf-p-1{padding:.25rem}.rf-p-2{padding:.5rem}.rf-p-3{padding:.75rem}.rf-p-4{padding:1rem}.rf-p-5{padding:1.25rem}.rf-p-6{padding:1.5rem}.rf-p-8{padding:2rem}.rf-px-1{padding-left:.25rem;padding-right:.25rem}.rf-px-2{padding-left:.5rem;padding-right:.5rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.rf-px-8{padding-left:2rem;padding-right:2rem}.rf-py-0{padding-bottom:0;padding-top:0}.rf-py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.rf-py-1{padding-bottom:.25rem;padding-top:.25rem}.rf-py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.rf-py-10{padding-bottom:2.5rem;padding-top:2.5rem}.rf-py-12{padding-bottom:3rem;padding-top:3rem}.rf-py-2{padding-bottom:.5rem;padding-top:.5rem}.rf-py-3{padding-bottom:.75rem;padding-top:.75rem}.rf-py-4{padding-bottom:1rem;padding-top:1rem}.rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.rf-py-8{padding-bottom:2rem;padding-top:2rem}.rf-pb-0{padding-bottom:0}.rf-pb-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.rf-pl-2{padding-left:.5rem}.rf-pl-4{padding-left:1rem}.rf-pl-8{padding-left:2rem}.rf-pr-2{padding-right:.5rem}.rf-pt-0{padding-top:0}.rf-pt-2{padding-top:.5rem}.rf-pt-4{padding-top:1rem}.rf-text-left{text-align:left}.rf-text-center{text-align:center}.rf-text-right{text-align:right}.rf-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.rf-text-\\[8px\\]{font-size:8px}.rf-text-base{font-size:1rem;line-height:1.5rem}.rf-text-lg{font-size:1.125rem;line-height:1.75rem}.rf-text-sm{font-size:.875rem;line-height:1.25rem}.rf-text-xl{font-size:1.25rem;line-height:1.75rem}.rf-text-xs{font-size:.75rem;line-height:1rem}.\\!rf-font-normal{font-weight:400!important}.rf-font-bold{font-weight:700}.rf-font-medium{font-weight:500}.rf-font-semibold{font-weight:600}.rf-uppercase{text-transform:uppercase}.rf-capitalize{text-transform:capitalize}.rf-tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.rf-leading-5{line-height:1.25rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.rf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.rf-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.rf-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.rf-text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.rf-text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.rf-text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.rf-text-current{color:currentColor}.rf-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.rf-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.rf-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.rf-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.rf-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.rf-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.rf-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.rf-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.rf-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.rf-text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.rf-text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity,1))}.rf-text-muted-foreground{color:hsl(var(--muted-foreground))}.rf-text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.rf-text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity,1))}.rf-text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity,1))}.rf-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.rf-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.rf-text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.rf-text-popover-foreground{color:hsl(var(--popover-foreground))}.rf-text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.rf-text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.rf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.rf-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.rf-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.rf-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.rf-text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.rf-text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.rf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.rf-text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.rf-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.rf-text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.rf-text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity,1))}.rf-text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.rf-text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.rf-text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.rf-text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.rf-text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.rf-underline{text-decoration-line:underline}.rf-line-through{text-decoration-line:line-through}.rf-underline-offset-4{text-underline-offset:4px}.rf-opacity-0{opacity:0}.rf-opacity-100{opacity:1}.rf-opacity-25{opacity:.25}.rf-opacity-30{opacity:.3}.rf-opacity-50{opacity:.5}.rf-opacity-60{opacity:.6}.rf-opacity-75{opacity:.75}.rf-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)}.rf-shadow,.rf-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-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)}.rf-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)}.rf-shadow-md,.rf-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.rf-outline-none{outline:2px solid transparent;outline-offset:2px}.rf-ring-2{--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)}.rf-ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.rf-ring-primary{--tw-ring-color:hsl(var(--primary))}.rf-ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.rf-ring-offset-white{--tw-ring-offset-color:#fff}.rf-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-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)}.rf-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-duration-200{transition-duration:.2s}.rf-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.rf-slide-in-from-left-1{--tw-enter-translate-x:-0.25rem}.rf-slide-out-to-left-1{--tw-exit-translate-x:-0.25rem}.rf-duration-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.file\\:rf-border-0::file-selector-button{border-width:0}.file\\:rf-bg-transparent::file-selector-button{background-color:transparent}.file\\:rf-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\:rf-font-medium::file-selector-button{font-weight:500}.placeholder\\:rf-text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\\:rf-text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.hover\\:rf-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\\:\\!rf-bg-transparent:hover{background-color:transparent!important}.hover\\:rf-bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:rf-bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100\\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\\:rf-bg-zinc-900\\/90:hover{background-color:rgba(24,24,27,.9)}.hover\\:rf-text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\\:rf-text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\\:rf-underline:hover{text-decoration-line:underline}.focus\\:rf-bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\\:rf-bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\\:rf-text-gray-900:focus{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.focus\\:rf-text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\\:rf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:rf-ring-2:focus{--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\\:rf-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\\:rf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:rf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:rf-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\\:rf-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\\:rf-ring-zinc-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity,1))}.focus-visible\\:rf-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:rf-pointer-events-none:disabled{pointer-events:none}.disabled\\:rf-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:rf-opacity-50:disabled{opacity:.5}.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.data-\\[disabled\\=true\\]\\:rf-pointer-events-none[data-disabled=true],.data-\\[disabled\\]\\:rf-pointer-events-none[data-disabled]{pointer-events:none}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom],.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{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))}.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right],.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{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))}.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\\[selected\\=true\\]\\:rf-bg-zinc-100[data-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:rf-bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=checked\\]\\:rf-bg-zinc-900[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:rf-bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[selected\\=true\\]\\:rf-text-zinc-900[data-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.data-\\[state\\=active\\]\\:rf-text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\\[state\\=checked\\]\\:rf-text-zinc-50[data-state=checked]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.data-\\[disabled\\=true\\]\\:rf-opacity-50[data-disabled=true],.data-\\[disabled\\]\\:rf-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:rf-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)}.data-\\[state\\=open\\]\\:rf-animate-in[data-state=open]{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-animate-out[data-state=closed]{animation-duration:.15s;animation-name:exit;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=open\\]\\:rf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=closed\\]\\:rf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=open\\]\\:rf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[side\\=bottom\\]\\:rf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\\[side\\=left\\]\\:rf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\\[side\\=right\\]\\:rf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\\[side\\=top\\]\\:rf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\\[state\\=closed\\]\\:rf-slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\\[state\\=closed\\]\\:rf-slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\\[state\\=open\\]\\:rf-slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\\[state\\=open\\]\\:rf-slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y:-48%}.dark\\:rf-border-zinc-50:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity,1))}.dark\\:rf-border-zinc-800:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\\:rf-bg-red-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-50:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-950:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:rf-text-zinc-400:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-50:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-900:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-ring-offset-zinc-950:is(.rf-dark *){--tw-ring-offset-color:#09090b}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:hover\\:rf-bg-red-900\\/90:hover:is(.rf-dark *){background-color:rgba(127,29,29,.9)}.dark\\:hover\\:rf-bg-zinc-50\\/90:hover:is(.rf-dark *){background-color:hsla(0,0%,98%,.9)}.dark\\:hover\\:rf-bg-zinc-800:hover:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:hover\\:rf-bg-zinc-800\\/80:hover:is(.rf-dark *){background-color:rgba(39,39,42,.8)}.dark\\:hover\\:rf-text-zinc-50:hover:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus\\:rf-bg-zinc-800:focus:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:focus\\:rf-text-zinc-50:focus:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus-visible\\:rf-ring-zinc-300:focus-visible:is(.rf-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-bg-zinc-800[data-selected=true]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-bg-zinc-950[data-state=active]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-bg-zinc-50[data-state=checked]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=open\\]\\:rf-bg-zinc-800[data-state=open]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-text-zinc-50[data-selected=true]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-text-zinc-50[data-state=active]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-text-zinc-900[data-state=checked]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\\:rf-order-1{order:1}.sm\\:rf-order-2{order:2}.sm\\:rf-mt-0{margin-top:0}.sm\\:rf-inline{display:inline}.sm\\:rf-hidden{display:none}.sm\\:rf-w-auto{width:auto}.sm\\:rf-flex-row{flex-direction:row}.sm\\:rf-items-center{align-items:center}.sm\\:rf-justify-end{justify-content:flex-end}.sm\\:rf-gap-3{gap:.75rem}.sm\\:rf-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))}.sm\\:rf-rounded-lg{border-radius:var(--radius)}.sm\\:rf-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-text-left{text-align:left}.sm\\:rf-text-sm{font-size:.875rem;line-height:1.25rem}.sm\\:rf-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\\[\\&\\>span\\]\\:rf-line-clamp-1>span{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>svg\\]\\:rf-size-4>svg{height:1rem;width:1rem}.\\[\\&\\>svg\\]\\:rf-shrink-0>svg{flex-shrink:0}.\\[\\&\\>svg\\]\\:rf-text-red-300>svg{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.\\[\\&\\>svg\\]\\:hover\\:rf-text-red-400:hover>svg{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-py-1\\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-font-medium [cmdk-group-heading]{font-weight:500}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-500 [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.dark\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-400 [cmdk-group-heading]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:rf-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\[\\&_\\[cmdk-group\\]\\]\\:rf-px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\\[\\&_\\[cmdk-input\\]\\]\\:rf-h-12 [cmdk-input]{height:3rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-h-5 [cmdk-item] svg{height:1.25rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-w-5 [cmdk-item] svg{width:1.25rem}.\\[\\&_svg\\]\\:rf-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:rf-size-4 svg{height:1rem;width:1rem}.\\[\\&_svg\\]\\:rf-shrink-0 svg{flex-shrink:0}',q9n=()=>{rt.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=W9n,document.head.appendChild(e)},[])},X9n=i=>{rt.useEffect(()=>(i?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[i])},Rrt=i=>`hsl(${Ab.indexOf(i)*137.5%360}, 70%, 50%)`,Z9n=({phaseTimings:i})=>{if(!i)return null;const e=Object.values(i).reduce((t,n)=>t+n,0);return je.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[je.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:Ab.map(t=>{const n=i[t]||0,r=n/e*100;return je.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${r}%`,backgroundColor:Rrt(t)},children:je.jsxs("div",{className:"rf-opacity-0 group-hover/bar:rf-opacity-100 rf-transition-opacity rf-absolute rf-bottom-full rf-left-1/2 rf-transform -rf-translate-x-1/2 rf-mb-2 rf-px-2 rf-py-1 rf-text-xs rf-whitespace-nowrap rf-rounded rf-bg-gray-900 rf-text-white rf-pointer-events-none",children:[t,": ",n.toFixed(1),"ms"]})},t)})}),je.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},$9n=({renderLog:i})=>{const[e,t]=rt.useState("chronological");if(!i)return je.jsx("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:"No render log, make sure this tab is open when you render (TODO add a rerender button here)"});const n=Object.entries((i==null?void 0:i.phaseTimings)??{});e==="chronological"?n.sort((o,a)=>Ab.indexOf(o[0])-Ab.indexOf(a[0])):n.sort((o,a)=>a[1]-o[1]);const r=n.reduce((o,[a,s])=>o+s,0);return je.jsxs("div",{className:"rf-bg-white",children:[je.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center",children:[je.jsx("div",{children:"Render Logs"}),je.jsxs("div",{className:"rf-mb-4 rf-pr-2 rf-flex rf-text-xs rf-items-center",children:[je.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),je.jsxs("select",{value:e,onChange:o=>t(o.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[je.jsx("option",{value:"chronological",children:"Phase Order"}),je.jsx("option",{value:"longest",children:"Duration"})]})]})]}),je.jsx(Z9n,{phaseTimings:i.phaseTimings}),je.jsxs("table",{className:"rf-w-full rf-text-xs",children:[je.jsx("thead",{children:je.jsxs("tr",{children:[je.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),je.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),je.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),je.jsx("tbody",{children:n.map(([o,a])=>je.jsxs("tr",{children:[je.jsx("td",{className:"rf-p-2",children:Ab.indexOf(o)}),je.jsx("td",{className:"rf-p-2",children:o}),je.jsx("td",{className:"rf-p-2",children:je.jsx("div",{className:"rf-w-8",children:je.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:Rrt(o),width:`${a/r*100}%`}})})}),je.jsx("td",{className:"rf-p-2",children:je.jsxs("div",{className:"rf-flex w-full",children:[je.jsxs("span",{className:"rf-flex-grow",children:[a,"ms"]}),je.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(a/r*100).toFixed(1),"%"]})]})})]},o))})]})]})},Drt=({errorMessage:i,errorStack:e,circuitJsonErrors:t})=>{rt.useEffect(()=>{if(i){const n=new Error(i);e&&(n.stack=e);try{_G.captureException(n)}catch{}}},[i,e]),rt.useEffect(()=>{if(t&&t.length>0)for(const n of t){const r=new Error(n.message||"Circuit JSON Error");n.stack&&(r.stack=n.stack);try{_G.captureException(r,{error_type:n.type})}catch{}}},[t])},exn="0.0.724",dye=aQe()(sQe(i=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:e=>{i({lastRunEvalVersion:e})}}),{name:"runframe-runner-store"})),txn=["assembly","bom","circuit_json","errors","render_log"],nxn=({code:i,fsMap:e,onRunClicked:t=void 0,errorMessage:n,errorStack:r,circuitJson:o,autoroutingGraphics:a,showRightHeaderContent:s=!0,showCodeTab:l=!1,codeTabContent:c,showJsonTab:u=!0,showRenderLogTab:d=!0,onActiveTabChange:f,renderLog:h,showImportAndFormatButtons:g=!0,className:y,headerClassName:v,leftHeaderContent:_,readOnly:x,isStreaming:S,autoroutingLog:M,onReportAutoroutingLog:z,isRunningCode:U,hasCodeChangedSinceLastRun:H,onEditEvent:k,editEvents:j,defaultActiveTab:G,defaultTab:ee,availableTabs:K,autoRotate3dViewerDisabled:ie,showSchematicDebugGrid:ce=!1,showToggleFullScreen:ue=!0,defaultToFullScreen:le=!1,activeEffectName:_e})=>{var We;q9n();const ye=dye($e=>$e.lastRunEvalVersion),Qe=rt.useMemo(()=>o?o.filter($e=>$e&&"error_type"in $e||$e.type.includes("error")):null,[o]),Me=rt.useMemo(()=>o?o.filter($e=>$e&&"warning_type"in $e||$e.type.includes("warning")):null,[o]);Drt({errorMessage:n,errorStack:r,circuitJsonErrors:Qe});const[Te,Ee]=rt.useState(G??ee??(K==null?void 0:K[0])??"pcb"),[Ge,Ke]=rt.useState(null),[nt,lt]=rt.useState(le);X9n(nt);const Rt=rt.useCallback($e=>{Ee($e),f==null||f($e)},[f]),pt=()=>{lt(!nt)};rt.useEffect(()=>{n&&(Te!=="errors"&&Ke(Te),Rt("errors"))},[n]),rt.useEffect(()=>{(Te==="code"||Te==="errors")&&o&&!n&&Rt(Ge??G??ee??(K==null?void 0:K[0])??"pcb")},[o]);const Fe=rt.useCallback($e=>{window.TSCIRCUIT_3D_OBJECT_REF=$e===null?void 0:$e},[]);return je.jsx("div",{className:ip("flex flex-col relative rf-overflow-x-hidden rf-h-full",y),children:je.jsx("div",{className:ip("rf-md:sticky rf-md:top-2 rf-h-full",nt&&"rf-fixed rf-top-0 rf-left-0 rf-w-full rf-h-full rf-bg-white rf-overflow-hidden"),children:je.jsxs(Iie,{value:Te,onValueChange:Rt,className:"rf-flex-grow rf-flex rf-flex-col rf-h-full",children:[je.jsxs("div",{className:ip("rf-flex rf-items-center rf-gap-2 rf-p-2 rf-pb-0",v),children:[_,_&&je.jsx("div",{className:"rf-flex-grow"}),!_&&U&&je.jsx(vM,{className:"rf-w-4 rf-h-4 rf-animate-spin"}),!_&&je.jsx("div",{className:"rf-flex-grow"}),h&&h.progress!==1&&!n&&je.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[_e?je.jsx("div",{className:"rf-text-xs rf-text-gray-500",children:_e}):h.lastRenderEvent&&je.jsx("div",{className:"rf-text-xs rf-text-gray-500",children:((We=h.lastRenderEvent)==null?void 0:We.phase)??""}),je.jsx("div",{className:"rf-w-4 rf-h-4 rf-bg-blue-500 rf-opacity-50 rf-rounded-full rf-text-white",children:je.jsx(vM,{className:"rf-w-4 rf-h-4 rf-animate-spin"})}),je.jsxs("div",{className:"rf-text-xs rf-font-bold rf-text-gray-700 rf-tabular-nums",children:[((h.progress??0)*100).toFixed(1),"%"]})]}),s&&je.jsxs(CG,{children:[l&&je.jsx(zB,{value:"code",children:"Code"}),!K||K.includes("pcb")?je.jsxs(zB,{value:"pcb",className:"rf-whitespace-nowrap",children:[o&&je.jsx("span",{className:ip("rf-inline-flex rf-items-center rf-justify-center rf-w-2 rf-h-2 rf-mr-1 rf-text-xs rf-font-bold rf-text-white rf-rounded-full",H?"rf-bg-gray-500":"rf-bg-blue-500")}),"PCB"]}):null,!K||K.includes("schematic")?je.jsxs(zB,{value:"schematic",className:"rf-whitespace-nowrap",children:[o&&je.jsx("span",{className:ip("rf-inline-flex rf-items-center rf-justify-center rf-w-2 rf-h-2 rf-mr-1 rf-text-xs rf-font-bold rf-text-white rf-rounded-full",H?"rf-bg-gray-500":"rf-bg-blue-500")}),"Schematic"]}):null,!K||K.includes("cad")?je.jsxs(zB,{value:"cad",children:[o&&je.jsx("span",{className:ip("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",H?"rf-bg-gray-500":"rf-bg-blue-500")}),"3D"]}):null,!["pcb","cad","schematic"].includes(Te)&&je.jsx(zB,{value:Te,children:hNe(Te)}),je.jsxs(mge,{children:[je.jsx(yge,{asChild:!0,children:je.jsxs("div",{className:"rf-whitespace-nowrap rf-p-2 rf-mr-1 rf-cursor-pointer rf-relative",children:[je.jsx(Chn,{className:"rf-w-4 rf-h-4"}),(Qe&&Qe.length>0||n)&&je.jsx("span",{className:"rf-inline-flex rf-absolute rf-top-[6px] rf-right-[4px] rf-items-center rf-justify-center rf-w-1 rf-h-1 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full"})]})}),je.jsxs(iV,{className:"rf-*:text-xs",children:[txn.filter($e=>!K||K.includes($e)).map($e=>je.jsxs(i2,{onSelect:()=>Rt($e),children:[Te!==$e&&je.jsx(_Ze,{className:"rf-w-3 rf-h-3 rf-opacity-30"}),Te===$e&&je.jsx(RY,{className:"rf-w-3 rf-h-3"}),je.jsx("div",{className:"rf-pr-2",children:hNe($e)}),$e==="errors"&&(Qe&&Qe.length>0||n)&&je.jsx("span",{className:"rf-inline-flex rf-items-center rf-justify-center rf-w-3 rf-h-3 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full",children:n?1:Qe==null?void 0:Qe.length})]},$e)),je.jsx(i2,{disabled:!0,className:"rf-opacity-60 rf-cursor-default rf-select-none",children:je.jsxs("div",{className:"rf-pr-2 rf-text-xs rf-text-gray-500",children:["@tscircuit/runframe@",exn.split(".").map(($e,_t)=>_t===2?parseInt($e)+1:$e).join(".")]})}),ye&&je.jsx(i2,{disabled:!0,className:"rf-opacity-60 rf-cursor-default rf-select-none",children:je.jsxs("div",{className:"rf-pr-2 rf-text-xs rf-text-gray-500",children:["@tscircuit/eval@",ye]})})]})]})]}),ue&&je.jsx(jC,{onClick:pt,variant:"ghost",children:nt?je.jsx(Bhn,{size:16}):je.jsx(Ehn,{size:16})})]}),l&&je.jsx(C2,{value:"code",className:"rf-flex-grow rf-overflow-hidden",children:je.jsx("div",{className:"rf-h-full",children:c})}),(!K||K.includes("pcb"))&&je.jsx(C2,{value:"pcb",children:je.jsx("div",{className:ip("rf-overflow-hidden",nt?"rf-h-[calc(100vh-52px)]":"rf-h-full"),children:je.jsx(uD,{fallbackRender:({error:$e})=>je.jsx("div",{className:"rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200",children:je.jsxs("div",{className:"rf-p-4",children:[je.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3",children:"Error loading PCB viewer"}),je.jsx("p",{className:"rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2",children:($e==null?void 0:$e.message)||"An unknown error occurred"})]})}),children:o?je.jsx(J9n,{focusOnHover:!1,circuitJson:o,debugGraphics:a,containerClassName:ip("rf-h-full rf-w-full",nt?"rf-min-h-[calc(100vh-240px)]":"rf-min-h-[620px]"),onEditEventsChanged:$e=>{if(k)for(const _t of $e)k(_t)}}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("assembly"))&&je.jsx(C2,{value:"assembly",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallback:je.jsx("div",{children:"Error loading Assembly"}),children:o?je.jsx(nvn,{circuitJson:o,containerStyle:{height:"100%"},editingEnabled:!0,debugGrid:!0}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("schematic"))&&je.jsx(C2,{value:"schematic",children:je.jsx("div",{className:ip("rf-overflow-auto rf-bg-white",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallbackRender:({error:$e})=>je.jsx("div",{className:"rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200",children:je.jsxs("div",{className:"rf-p-4",children:[je.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3",children:"Error loading Schematic"}),je.jsx("p",{className:"rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2",children:($e==null?void 0:$e.message)||"An unknown error occurred"})]})}),children:o?je.jsx($yn,{circuitJson:o,containerStyle:{height:"100%"},editingEnabled:!0,onEditEvent:$e=>{k==null||k($e)},debugGrid:ce}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("cad"))&&je.jsx(C2,{value:"cad",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{FallbackComponent:chn,children:o?je.jsx(shn,{ref:Fe,circuitJson:o,autoRotateDisabled:ie}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("bom"))&&je.jsx(C2,{value:"bom",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallbackRender:({error:$e})=>je.jsx("div",{className:"rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200",children:je.jsxs("div",{className:"rf-p-4",children:[je.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3",children:"Error loading Bill of Materials"}),je.jsx("p",{className:"rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2",children:($e==null?void 0:$e.message)||"An unknown error occurred"})]})}),children:o?je.jsx(svn,{circuitJson:o}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("circuit_json"))&&je.jsx(C2,{value:"circuit_json",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallback:je.jsx("div",{children:"Error loading JSON viewer"}),children:o?je.jsx(ovn,{elements:o}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("errors"))&&je.jsx(C2,{value:"errors",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:n||Qe&&Qe.length>0||o?je.jsx(hmn,{code:i,fsMap:e,circuitJsonErrors:Qe,circuitJsonWarnings:Me,errorMessage:n,errorStack:r,circuitJson:o,evalVersion:ye,autoroutingLog:M,onReportAutoroutingLog:z}):je.jsx(xM,{onRunClicked:t})})}),d&&(!K||K.includes("render_log"))&&je.jsx(C2,{value:"render_log",children:je.jsx($9n,{renderLog:h})})]})})})};var ej="Dialog",[Nrt,Trt]=NB(ej),[ixn,cB]=Nrt(ej),Prt=i=>{const{__scopeDialog:e,children:t,open:n,defaultOpen:r,onOpenChange:o,modal:a=!0}=i,s=rt.useRef(null),l=rt.useRef(null),[c,u]=t4({prop:n,defaultProp:r??!1,onChange:o,caller:ej});return je.jsx(ixn,{scope:e,triggerRef:s,contentRef:l,contentId:dE(),titleId:dE(),descriptionId:dE(),open:c,onOpenChange:u,onOpenToggle:rt.useCallback(()=>u(d=>!d),[u]),modal:a,children:t})};Prt.displayName=ej;var krt="DialogTrigger",Lrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(krt,t),o=_C(e,r.triggerRef);return je.jsx(_y.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":hye(r.open),...n,ref:o,onClick:Fp(i.onClick,r.onOpenToggle)})});Lrt.displayName=krt;var Aye="DialogPortal",[rxn,Frt]=Nrt(Aye,{forceMount:void 0}),Urt=i=>{const{__scopeDialog:e,forceMount:t,children:n,container:r}=i,o=cB(Aye,e);return je.jsx(rxn,{scope:e,forceMount:t,children:rt.Children.map(n,a=>je.jsx(y2,{present:t||o.open,children:je.jsx(YY,{asChild:!0,container:r,children:a})}))})};Urt.displayName=Aye;var tj="DialogOverlay",Grt=rt.forwardRef((i,e)=>{const t=Frt(tj,i.__scopeDialog),{forceMount:n=t.forceMount,...r}=i,o=cB(tj,i.__scopeDialog);return o.modal?je.jsx(y2,{present:n||o.open,children:je.jsx(axn,{...r,ref:e})}):null});Grt.displayName=tj;var oxn=e4("DialogOverlay.RemoveScroll"),axn=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(tj,t);return je.jsx(ZY,{as:oxn,allowPinchZoom:!0,shards:[r.contentRef],children:je.jsx(_y.div,{"data-state":hye(r.open),...n,ref:e,style:{pointerEvents:"auto",...n.style}})})}),NM="DialogContent",Ort=rt.forwardRef((i,e)=>{const t=Frt(NM,i.__scopeDialog),{forceMount:n=t.forceMount,...r}=i,o=cB(NM,i.__scopeDialog);return je.jsx(y2,{present:n||o.open,children:o.modal?je.jsx(sxn,{...r,ref:e}):je.jsx(lxn,{...r,ref:e})})});Ort.displayName=NM;var sxn=rt.forwardRef((i,e)=>{const t=cB(NM,i.__scopeDialog),n=rt.useRef(null),r=_C(e,t.contentRef,n);return rt.useEffect(()=>{const o=n.current;if(o)return ige(o)},[]),je.jsx(zrt,{...i,ref:r,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Fp(i.onCloseAutoFocus,o=>{var a;o.preventDefault(),(a=t.triggerRef.current)==null||a.focus()}),onPointerDownOutside:Fp(i.onPointerDownOutside,o=>{const a=o.detail.originalEvent,s=a.button===0&&a.ctrlKey===!0;(a.button===2||s)&&o.preventDefault()}),onFocusOutside:Fp(i.onFocusOutside,o=>o.preventDefault())})}),lxn=rt.forwardRef((i,e)=>{const t=cB(NM,i.__scopeDialog),n=rt.useRef(!1),r=rt.useRef(!1);return je.jsx(zrt,{...i,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var a,s;(a=i.onCloseAutoFocus)==null||a.call(i,o),o.defaultPrevented||(n.current||(s=t.triggerRef.current)==null||s.focus(),o.preventDefault()),n.current=!1,r.current=!1},onInteractOutside:o=>{var l,c;(l=i.onInteractOutside)==null||l.call(i,o),o.defaultPrevented||(n.current=!0,o.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const a=o.target;((c=t.triggerRef.current)==null?void 0:c.contains(a))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&r.current&&o.preventDefault()}})}),zrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,trapFocus:n,onOpenAutoFocus:r,onCloseAutoFocus:o,...a}=i,s=cB(NM,t),l=rt.useRef(null),c=_C(e,l);return L0e(),je.jsxs(je.Fragment,{children:[je.jsx(NY,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:r,onUnmountAutoFocus:o,children:je.jsx(DY,{role:"dialog",id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":hye(s.open),...a,ref:c,onDismiss:()=>s.onOpenChange(!1)})}),je.jsxs(je.Fragment,{children:[je.jsx(uxn,{titleId:s.titleId}),je.jsx(Axn,{contentRef:l,descriptionId:s.descriptionId})]})]})}),fye="DialogTitle",Hrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(fye,t);return je.jsx(_y.h2,{id:r.titleId,...n,ref:e})});Hrt.displayName=fye;var Yrt="DialogDescription",Vrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(Yrt,t);return je.jsx(_y.p,{id:r.descriptionId,...n,ref:e})});Vrt.displayName=Yrt;var jrt="DialogClose",Krt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(jrt,t);return je.jsx(_y.button,{type:"button",...n,ref:e,onClick:Fp(i.onClick,()=>r.onOpenChange(!1))})});Krt.displayName=jrt;function hye(i){return i?"open":"closed"}var Jrt="DialogTitleWarning",[cxn,Wrt]=yTt(Jrt,{contentName:NM,titleName:fye,docsSlug:"dialog"}),uxn=({titleId:i})=>{const e=Wrt(Jrt),t=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users.
|
|
13515
|
+
`,onClick:n=>{n.stopPropagation(),t()},children:[je.jsx("input",{type:"checkbox",checked:e}),je.jsx("span",{style:{color:"#eee"},children:i})]}),Y9n=({children:i,elements:e})=>{const[t,n]=M9(k=>[k.is_mouse_over_container,k.setIsMouseOverContainer]),[r,o]=rt.useState(!1),[a,s]=rt.useState(!1),[l,c]=rt.useState(!1),[u,d]=M9(k=>[k.selected_layer,k.selectLayer]),[f,h,g,y,v,_]=M9(k=>[k.in_move_footprint_mode,k.in_draw_trace_mode,k.is_showing_rats_nest,k.is_showing_multiple_traces_length,k.is_showing_autorouting,k.is_showing_drc_errors]),x=M9(k=>k.setEditMode),S=M9(k=>k.setIsShowingRatsNest),M=M9(k=>k.setIsShowingMultipleTracesLength),z=M9(k=>k.setIsShowingAutorouting),U=M9(k=>k.setIsShowingDrcErrors);l3("1",()=>d("top")),l3("2",()=>d("bottom")),l3("3",()=>d("inner1")),l3("4",()=>d("inner2")),l3("5",()=>d("inner3")),l3("6",()=>d("inner4")),l3("7",()=>d("inner5")),l3("8",()=>d("inner6"));const H=(e==null?void 0:e.filter(k=>k.type.includes("error")).length)??0;return je.jsxs("div",{style:{position:"relative"},onMouseEnter:()=>{n(!0)},onMouseLeave:k=>{n(!1),s(!1)},children:[i,je.jsxs("div",{style:{position:"absolute",bottom:4,right:8,pointerEvents:"none",color:"white",fontSize:11,opacity:t?.5:0,transition:"opacity 1s",transitionDelay:"2s",fontFamily:"sans-serif"},children:["@tscircuit/pcb-viewer@",z9n.version]}),je.jsxs("div",{style:{position:"absolute",opacity:t?1:0,top:16,left:16,transition:t?"opacity 100ms linear":"opacity 1s linear",zIndex:wE.toolbarOverlay,color:"red",display:"flex",fontSize:12,height:100,fontFamily:"sans-serif"},children:[je.jsxs(LD,{onClick:()=>{s(!a)},onMouseLeave:()=>{a&&s(!1)},children:[je.jsxs("div",{children:["layer:"," ",je.jsx("span",{style:{marginLeft:2,fontWeight:500,color:kD[u]},children:u})]}),a&&je.jsx("div",{style:{marginTop:4,minWidth:120},children:rye.map(k=>k.replace(/-/g,"")).map(k=>je.jsx(H9n,{name:k,selected:k===u,onClick:()=>{d(k.replace(/-/,""))}},k))})]}),je.jsxs(LD,{style:H>0?{color:"red"}:{},onClick:()=>c(!l),onMouseLeave:()=>c(!1),children:[je.jsxs("div",{children:[H," errors"]}),l&&je.jsx("div",{style:{display:"grid",gridTemplateColumns:"100px 300px"},children:e==null?void 0:e.filter(k=>k.type.includes("error")).map((k,j)=>je.jsxs(rt.Fragment,{children:[je.jsx("div",{children:k.error_type}),je.jsx("div",{children:k.message})]},j))})]}),je.jsx(LD,{style:{},onClick:()=>{x(h?"off":"draw_trace")},children:je.jsxs("div",{children:[h?"✖ ":"","Edit Traces"]})}),je.jsx(LD,{style:{},onClick:()=>{x(f?"off":"move_footprint")},children:je.jsxs("div",{children:[f?"✖ ":"","Move Components"]})}),je.jsx(LD,{style:{},onClick:()=>{S(!g)},children:je.jsxs("div",{children:[g?"✖ ":"","Rats Nest"]})}),je.jsx(LD,{onClick:()=>{o(!r)},children:je.jsxs("div",{children:[je.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:["View"," ",je.jsx("span",{style:{fontSize:"8px",transform:r?"rotate(180deg)":"rotate(0)",transition:"transform 0.1s ease",display:"inline-block"},children:"▼"})]}),r&&je.jsxs("div",{style:{marginTop:4,minWidth:120},children:[je.jsx(uye,{label:"Show All Trace Lengths",checked:y,onClick:()=>{M(!y)}}),je.jsx(uye,{label:"Show Autorouting Animation",checked:v,onClick:()=>{z(!v)}}),je.jsx(uye,{label:"Show DRC Errors",checked:_,onClick:()=>{U(!_)}})]})]})})]})]})},V9n=i=>{const{transform:e,elements:t}=i,[n,r]=rt.useMemo(()=>{const c=i.elements.flatMap(d=>n9n(d,i.elements)),u=OS(i.elements);return[c,u]},[i.elements]),[o,a]=rt.useState({drawingObjectIdsWithMouseOver:new Set,primitiveIdsInMousedOverNet:[]}),s=rt.useMemo(()=>e9n({primitivesWithoutInteractionMetadata:n,drawingObjectIdsWithMouseOver:o.drawingObjectIdsWithMouseOver,primitiveIdsInMousedOverNet:o.primitiveIdsInMousedOverNet}),[n,o]),l=rt.useCallback(c=>{var f,h;const u=[];for(const g of c)if(g._element){const y=r.getNetConnectedToId("pcb_port_id"in g._element?(f=g._element)==null?void 0:f.pcb_port_id:"pcb_trace_id"in g._element?(h=g._element)==null?void 0:h.pcb_trace_id:"");u.push(...r.getIdsConnectedToNet(y))}const d=new Set(c.map(g=>g._pcb_drawing_object_id));a({drawingObjectIdsWithMouseOver:d,primitiveIdsInMousedOverNet:u})},[r]);return je.jsx(G9n,{elements:t,transform:e,primitives:n,onMouseHoverOverPrimitives:l,children:je.jsx(x9n,{disabled:!i.allowEditing,transform:e,soup:t,cancelPanDrag:i.cancelPanDrag,onCreateEditEvent:i.onCreateEditEvent,onModifyEditEvent:i.onModifyEditEvent,children:je.jsx(S9n,{disabled:!i.allowEditing,transform:e,soup:t,cancelPanDrag:i.cancelPanDrag,onCreateEditEvent:i.onCreateEditEvent,onModifyEditEvent:i.onModifyEditEvent,children:je.jsx(I9n,{transform:e,focusOnHover:i.focusOnHover,children:je.jsx(Y9n,{elements:t,children:je.jsx(Q9n,{transform:e,elements:t,children:je.jsx(O9n,{transform:e,soup:t,children:je.jsx(v9n,{transform:e,debugGraphics:i.debugGraphics,children:je.jsx(_9n,{transform:e,elements:t,children:je.jsx(y9n,{transform:e,primitives:s,width:i.width,height:i.height,grid:i.grid})})})})})})})})})})},j9n=XA(hp(400,300),H9(40,-40)),K9n=({circuitJson:i,debugGraphics:e,height:t=600,initialState:n,allowEditing:r=!0,editEvents:o,onEditEventsChanged:a,focusOnHover:s=!1,clickToInteractEnabled:l=!1})=>{const[c,u]=rt.useState(!l),[d,f]=lye(),[h,g]=rt.useState(j9n),{ref:y,setTransform:v,cancelDrag:_}=$Cn({transform:h,onSetTransform:g,enabled:c});let[x,S]=rt.useState([]);x=o??x;const M=rt.useRef(!1),z=rt.useRef(null),U=`${(i==null?void 0:i.length)||0}_${(i==null?void 0:i.editCount)||0}`,H=()=>{const K=(f==null?void 0:f.width)>0?f:{width:500,height:500},{center:ie,width:ce,height:ue}=j.some(ye=>ye.type.startsWith("pcb_"))?HCn(j.filter(ye=>ye.type.startsWith("pcb_"))):{center:{x:0,y:0},width:.001,height:.001},le=Math.min((K.width??0)/ce,(K.height??0)/ue,100)*.75,_e=XA(hp((K.width??0)/2,(K.height??0)/2),H9(le,-le,0,0),hp(-ie.x,-ie.y));v(_e)};rt.useEffect(()=>{f!=null&&f.width&&i&&i.length!==0&&(M.current||(H(),M.current=!0))},[i,f]);const k=rt.useMemo(()=>(i==null?void 0:i.filter(K=>K.type.startsWith("pcb_")||K.type.startsWith("source_")))??[],[U]),j=rt.useMemo(()=>n_n({circuitJson:k,editEvents:x}),[k,x]),G=K=>{S([...x,K]),a==null||a([...x,K])},ee=K=>{const ie=x.map(ce=>ce.edit_event_id===K.edit_event_id?{...ce,...K}:ce);S(ie),a==null||a(ie)};return je.jsxs("div",{ref:y,style:{position:"relative"},children:[je.jsx("div",{ref:d,children:je.jsxs(VCn,{initialState:n,children:[je.jsx(V9n,{transform:h,height:t,width:f.width,allowEditing:r,focusOnHover:s,cancelPanDrag:_,onCreateEditEvent:G,onModifyEditEvent:ee,grid:{spacing:1,view_window:{left:0,right:f.width||500,top:t,bottom:0}},elements:j,debugGraphics:e},f.width),je.jsx(KCn,{})]})}),l&&!c&&je.jsx("div",{onClick:()=>{u(!0),H()},onTouchStart:K=>{const ie=K.touches[0];z.current={x:ie.clientX,y:ie.clientY}},onTouchEnd:K=>{const ie=K.changedTouches[0],ce=z.current;if(!ce)return;const ue=Math.abs(ie.clientX-ce.x),le=Math.abs(ie.clientY-ce.y);ue<10&&le<10&&(K.preventDefault(),u(!0),H()),z.current=null},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:wE.clickToInteractOverlay,display:"flex",alignItems:"center",justifyContent:"center",touchAction:"pan-x pan-y pinch-zoom"},children:je.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",pointerEvents:"none"},children:typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)?"Touch to Interact":"Click to Interact"})})]})};const J9n=({containerClassName:i,...e})=>{const t=rt.useRef(null),[n,r]=rt.useState(620);return rt.useLayoutEffect(()=>{const o=()=>{if(t.current){const s=t.current.clientHeight,l=window.innerHeight;r(Math.min(Math.max(s,620),l))}};o();const a=new ResizeObserver(o);return t.current&&a.observe(t.current),window.addEventListener("resize",o),()=>{a.disconnect(),window.removeEventListener("resize",o)}},[]),je.jsx("div",{ref:t,className:i||"rf-w-full rf-h-full",children:je.jsx(K9n,{...e,height:n})})},W9n='*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--radius:0.5rem}.rf-pointer-events-none{pointer-events:none}.rf-invisible{visibility:hidden}.rf-fixed{position:fixed}.rf-absolute{position:absolute}.rf-relative{position:relative}.rf-inset-0{inset:0}.-rf-left-2{left:-.5rem}.-rf-right-10{right:-2.5rem}.-rf-right-2{right:-.5rem}.-rf-right-4{right:-1rem}.-rf-right-6{right:-1.5rem}.-rf-right-7{right:-1.75rem}.-rf-right-8{right:-2rem}.-rf-right-9{right:-2.25rem}.rf-bottom-full{bottom:100%}.rf-left-0{left:0}.rf-left-1{left:.25rem}.rf-left-1\\/2{left:50%}.rf-left-2{left:.5rem}.rf-left-\\[50\\%\\]{left:50%}.rf-right-0{right:0}.rf-right-1{right:.25rem}.rf-right-4{right:1rem}.rf-right-\\[4px\\]{right:4px}.rf-top-0{top:0}.rf-top-1{top:.25rem}.rf-top-2{top:.5rem}.rf-top-2\\.5{top:.625rem}.rf-top-\\[50\\%\\]{top:50%}.rf-top-\\[6px\\]{top:6px}.\\!rf-z-\\[101\\]{z-index:101!important}.rf-z-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.rf-m-1{margin:.25rem}.rf-m-6{margin:1.5rem}.-rf-mx-1,.rf--mx-1{margin-left:-.25rem;margin-right:-.25rem}.rf-mx-1{margin-left:.25rem;margin-right:.25rem}.rf-mx-2{margin-left:.5rem;margin-right:.5rem}.rf-mx-4{margin-left:1rem;margin-right:1rem}.rf-mx-auto{margin-left:auto;margin-right:auto}.rf-my-1{margin-bottom:.25rem;margin-top:.25rem}.rf-my-12{margin-bottom:3rem;margin-top:3rem}.rf-my-4{margin-bottom:1rem;margin-top:1rem}.rf-my-auto{margin-bottom:auto;margin-top:auto}.rf-mb-1{margin-bottom:.25rem}.rf-mb-12{margin-bottom:3rem}.rf-mb-2{margin-bottom:.5rem}.rf-mb-3{margin-bottom:.75rem}.rf-mb-4{margin-bottom:1rem}.rf-mb-6{margin-bottom:1.5rem}.rf-mb-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.rf-mt-0{margin-top:0}.rf-mt-0\\.5{margin-top:.125rem}.rf-mt-1{margin-top:.25rem}.rf-mt-2{margin-top:.5rem}.rf-mt-3{margin-top:.75rem}.rf-mt-4{margin-top:1rem}.rf-mt-5{margin-top:1.25rem}.rf-mt-auto{margin-top:auto}.rf-block{display:block}.rf-inline-block{display:inline-block}.rf-inline{display:inline}.rf-flex{display:flex}.rf-inline-flex{display:inline-flex}.rf-grid{display:grid}.rf-hidden{display:none}.rf-aspect-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.\\!rf-h-3{height:.75rem!important}.\\!rf-h-full{height:100%!important}.rf-h-1{height:.25rem}.rf-h-10{height:2.5rem}.rf-h-12{height:3rem}.rf-h-2{height:.5rem}.rf-h-2\\.5{height:.625rem}.rf-h-3{height:.75rem}.rf-h-3\\.5{height:.875rem}.rf-h-4{height:1rem}.rf-h-5{height:1.25rem}.rf-h-6{height:1.5rem}.rf-h-60{height:15rem}.rf-h-64{height:16rem}.rf-h-8{height:2rem}.rf-h-9{height:2.25rem}.rf-h-\\[400px\\]{height:400px}.rf-h-\\[calc\\(100vh-52px\\)\\]{height:calc(100vh - 52px)}.rf-h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.rf-h-auto{height:auto}.rf-h-fit{height:-moz-fit-content;height:fit-content}.rf-h-full{height:100%}.rf-h-px{height:1px}.rf-h-screen{height:100vh}.\\!rf-max-h-\\[40vh\\]{max-height:40vh!important}.rf-max-h-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[500px\\]{max-height:500px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.rf-w-1{width:.25rem}.rf-w-1\\/2{width:50%}.rf-w-11{width:2.75rem}.rf-w-11\\/12{width:91.666667%}.rf-w-12{width:3rem}.rf-w-16{width:4rem}.rf-w-2{width:.5rem}.rf-w-2\\.5{width:.625rem}.rf-w-20{width:5rem}.rf-w-28{width:7rem}.rf-w-3{width:.75rem}.rf-w-3\\.5{width:.875rem}.rf-w-32{width:8rem}.rf-w-4{width:1rem}.rf-w-48{width:12rem}.rf-w-5{width:1.25rem}.rf-w-6{width:1.5rem}.rf-w-64{width:16rem}.rf-w-72{width:18rem}.rf-w-8{width:2rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-\\[95\\%\\]{width:95%}.rf-w-fit{width:-moz-fit-content;width:fit-content}.rf-w-full{width:100%}.rf-w-screen{width:100vw}.rf-min-w-0{min-width:0}.rf-min-w-10{min-width:2.5rem}.rf-min-w-16{min-width:4rem}.rf-min-w-\\[148px\\]{min-width:148px}.rf-min-w-\\[8rem\\]{min-width:8rem}.rf-min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.\\!rf-max-w-\\[660px\\]{max-width:660px!important}.rf-max-w-2xl{max-width:42rem}.rf-max-w-3xl{max-width:48rem}.rf-max-w-4xl{max-width:56rem}.rf-max-w-5xl{max-width:64rem}.rf-max-w-full{max-width:100%}.rf-max-w-lg{max-width:32rem}.rf-max-w-md{max-width:28rem}.rf-max-w-none{max-width:none}.rf-max-w-xl{max-width:36rem}.rf-flex-1{flex:1 1 0%}.rf-flex-shrink-0,.rf-shrink-0{flex-shrink:0}.rf-flex-grow{flex-grow:1}.rf-table-auto{table-layout:auto}.rf-origin-\\[--radix-popover-content-transform-origin\\]{transform-origin:var(--radix-popover-content-transform-origin)}.-rf-translate-x-1{--tw-translate-x:-0.25rem}.-rf-translate-x-1,.-rf-translate-x-1\\/2{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))}.-rf-translate-x-1\\/2{--tw-translate-x:-50%}.-rf-translate-y-1{--tw-translate-y:-0.25rem}.-rf-translate-y-1,.rf--translate-x-1{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))}.rf--translate-x-1{--tw-translate-x:-0.25rem}.rf--translate-x-1\\/2{--tw-translate-x:-50%}.rf--translate-x-1\\/2,.rf--translate-y-1{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))}.rf--translate-y-1{--tw-translate-y:-0.25rem}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-x-\\[-50\\%\\],.rf-translate-y-\\[-50\\%\\]{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))}.rf-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.rf-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))}@keyframes rf-pulse{50%{opacity:.5}}.rf-animate-pulse{animation:rf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes rf-spin{to{transform:rotate(1turn)}}.rf-animate-spin{animation:rf-spin 1s linear infinite}.rf-cursor-default{cursor:default}.rf-cursor-not-allowed{cursor:not-allowed}.rf-cursor-pointer{cursor:pointer}.rf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rf-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.rf-flex-row{flex-direction:row}.rf-flex-col{flex-direction:column}.rf-flex-col-reverse{flex-direction:column-reverse}.rf-flex-wrap{flex-wrap:wrap}.rf-place-items-center{place-items:center}.rf-items-start{align-items:flex-start}.rf-items-end{align-items:flex-end}.rf-items-center{align-items:center}.rf-items-stretch{align-items:stretch}.rf-justify-end{justify-content:flex-end}.rf-justify-center{justify-content:center}.rf-justify-between{justify-content:space-between}.rf-gap-0{gap:0}.rf-gap-1{gap:.25rem}.rf-gap-2{gap:.5rem}.rf-gap-3{gap:.75rem}.rf-gap-4{gap:1rem}.rf-gap-5{gap:1.25rem}.rf-gap-6{gap:1.5rem}.rf-gap-8{gap:2rem}.rf-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))}.rf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.rf-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.rf-overflow-auto{overflow:auto}.rf-overflow-hidden{overflow:hidden}.rf-overflow-visible{overflow:visible}.rf-overflow-x-auto{overflow-x:auto}.\\!rf-overflow-y-auto{overflow-y:auto!important}.rf-overflow-y-auto{overflow-y:auto}.rf-overflow-x-hidden{overflow-x:hidden}.rf-overflow-x-clip{overflow-x:clip}.rf-truncate{overflow:hidden;text-overflow:ellipsis}.rf-truncate,.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-break-words{overflow-wrap:break-word}.rf-rounded{border-radius:.25rem}.rf-rounded-2xl{border-radius:1rem}.rf-rounded-full{border-radius:9999px}.rf-rounded-lg{border-radius:var(--radius)}.rf-rounded-md{border-radius:calc(var(--radius) - 2px)}.rf-rounded-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-2{border-width:2px}.rf-border-b{border-bottom-width:1px}.rf-border-t{border-top-width:1px}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.rf-border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.rf-border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.rf-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.rf-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.rf-border-input{border-color:hsl(var(--input))}.rf-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.rf-border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.rf-border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.rf-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.rf-border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.rf-border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity,1))}.rf-bg-background{background-color:hsl(var(--background))}.rf-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.rf-bg-black\\/80{background-color:rgba(0,0,0,.8)}.rf-bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.rf-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.rf-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.rf-bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.rf-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.rf-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.rf-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.rf-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.rf-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.rf-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.rf-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.rf-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.rf-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.rf-bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.rf-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.rf-bg-muted{background-color:hsl(var(--muted))}.rf-bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity,1))}.rf-bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.rf-bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity,1))}.rf-bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity,1))}.rf-bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.rf-bg-popover{background-color:hsl(var(--popover))}.rf-bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.rf-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.rf-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.rf-bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.rf-bg-transparent{background-color:transparent}.rf-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.rf-bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.rf-bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.rf-bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity,1))}.rf-bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.rf-bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.rf-bg-opacity-50{--tw-bg-opacity:0.5}.rf-fill-current{fill:currentColor}.rf-object-contain{-o-object-fit:contain;object-fit:contain}.rf-object-cover{-o-object-fit:cover;object-fit:cover}.\\!rf-p-0{padding:0!important}.rf-p-0{padding:0}.rf-p-1{padding:.25rem}.rf-p-2{padding:.5rem}.rf-p-3{padding:.75rem}.rf-p-4{padding:1rem}.rf-p-5{padding:1.25rem}.rf-p-6{padding:1.5rem}.rf-p-8{padding:2rem}.rf-px-1{padding-left:.25rem;padding-right:.25rem}.rf-px-2{padding-left:.5rem;padding-right:.5rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.rf-px-8{padding-left:2rem;padding-right:2rem}.rf-py-0{padding-bottom:0;padding-top:0}.rf-py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.rf-py-1{padding-bottom:.25rem;padding-top:.25rem}.rf-py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.rf-py-10{padding-bottom:2.5rem;padding-top:2.5rem}.rf-py-12{padding-bottom:3rem;padding-top:3rem}.rf-py-2{padding-bottom:.5rem;padding-top:.5rem}.rf-py-3{padding-bottom:.75rem;padding-top:.75rem}.rf-py-4{padding-bottom:1rem;padding-top:1rem}.rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.rf-py-8{padding-bottom:2rem;padding-top:2rem}.rf-pb-0{padding-bottom:0}.rf-pb-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.rf-pl-2{padding-left:.5rem}.rf-pl-4{padding-left:1rem}.rf-pl-8{padding-left:2rem}.rf-pr-2{padding-right:.5rem}.rf-pt-0{padding-top:0}.rf-pt-2{padding-top:.5rem}.rf-pt-4{padding-top:1rem}.rf-text-left{text-align:left}.rf-text-center{text-align:center}.rf-text-right{text-align:right}.rf-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.rf-text-\\[8px\\]{font-size:8px}.rf-text-base{font-size:1rem;line-height:1.5rem}.rf-text-lg{font-size:1.125rem;line-height:1.75rem}.rf-text-sm{font-size:.875rem;line-height:1.25rem}.rf-text-xl{font-size:1.25rem;line-height:1.75rem}.rf-text-xs{font-size:.75rem;line-height:1rem}.\\!rf-font-normal{font-weight:400!important}.rf-font-bold{font-weight:700}.rf-font-medium{font-weight:500}.rf-font-semibold{font-weight:600}.rf-uppercase{text-transform:uppercase}.rf-capitalize{text-transform:capitalize}.rf-tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.rf-leading-5{line-height:1.25rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.rf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.rf-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.rf-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.rf-text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.rf-text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.rf-text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.rf-text-current{color:currentColor}.rf-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.rf-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.rf-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.rf-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.rf-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.rf-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.rf-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.rf-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.rf-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.rf-text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.rf-text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity,1))}.rf-text-muted-foreground{color:hsl(var(--muted-foreground))}.rf-text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.rf-text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity,1))}.rf-text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity,1))}.rf-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.rf-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.rf-text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.rf-text-popover-foreground{color:hsl(var(--popover-foreground))}.rf-text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.rf-text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.rf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.rf-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.rf-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.rf-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.rf-text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.rf-text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.rf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.rf-text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.rf-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.rf-text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.rf-text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity,1))}.rf-text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.rf-text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.rf-text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.rf-text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.rf-text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.rf-underline{text-decoration-line:underline}.rf-line-through{text-decoration-line:line-through}.rf-underline-offset-4{text-underline-offset:4px}.rf-opacity-0{opacity:0}.rf-opacity-100{opacity:1}.rf-opacity-25{opacity:.25}.rf-opacity-30{opacity:.3}.rf-opacity-50{opacity:.5}.rf-opacity-60{opacity:.6}.rf-opacity-75{opacity:.75}.rf-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)}.rf-shadow,.rf-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-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)}.rf-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)}.rf-shadow-md,.rf-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.rf-outline-none{outline:2px solid transparent;outline-offset:2px}.rf-ring-2{--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)}.rf-ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.rf-ring-primary{--tw-ring-color:hsl(var(--primary))}.rf-ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.rf-ring-offset-white{--tw-ring-offset-color:#fff}.rf-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-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)}.rf-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-duration-200{transition-duration:.2s}.rf-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.rf-slide-in-from-left-1{--tw-enter-translate-x:-0.25rem}.rf-slide-out-to-left-1{--tw-exit-translate-x:-0.25rem}.rf-duration-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.file\\:rf-border-0::file-selector-button{border-width:0}.file\\:rf-bg-transparent::file-selector-button{background-color:transparent}.file\\:rf-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\:rf-font-medium::file-selector-button{font-weight:500}.placeholder\\:rf-text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\\:rf-text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.hover\\:rf-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\\:\\!rf-bg-transparent:hover{background-color:transparent!important}.hover\\:rf-bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:rf-bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100\\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\\:rf-bg-zinc-900\\/90:hover{background-color:rgba(24,24,27,.9)}.hover\\:rf-text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\\:rf-text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\\:rf-underline:hover{text-decoration-line:underline}.focus\\:rf-bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\\:rf-bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\\:rf-text-gray-900:focus{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.focus\\:rf-text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\\:rf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:rf-ring-2:focus{--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\\:rf-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\\:rf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:rf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:rf-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\\:rf-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\\:rf-ring-zinc-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity,1))}.focus-visible\\:rf-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:rf-pointer-events-none:disabled{pointer-events:none}.disabled\\:rf-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:rf-opacity-50:disabled{opacity:.5}.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.data-\\[disabled\\=true\\]\\:rf-pointer-events-none[data-disabled=true],.data-\\[disabled\\]\\:rf-pointer-events-none[data-disabled]{pointer-events:none}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom],.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{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))}.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right],.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{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))}.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\\[selected\\=true\\]\\:rf-bg-zinc-100[data-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:rf-bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=checked\\]\\:rf-bg-zinc-900[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:rf-bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[selected\\=true\\]\\:rf-text-zinc-900[data-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.data-\\[state\\=active\\]\\:rf-text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\\[state\\=checked\\]\\:rf-text-zinc-50[data-state=checked]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.data-\\[disabled\\=true\\]\\:rf-opacity-50[data-disabled=true],.data-\\[disabled\\]\\:rf-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:rf-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)}.data-\\[state\\=open\\]\\:rf-animate-in[data-state=open]{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-animate-out[data-state=closed]{animation-duration:.15s;animation-name:exit;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=open\\]\\:rf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=closed\\]\\:rf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=open\\]\\:rf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[side\\=bottom\\]\\:rf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\\[side\\=left\\]\\:rf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\\[side\\=right\\]\\:rf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\\[side\\=top\\]\\:rf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\\[state\\=closed\\]\\:rf-slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\\[state\\=closed\\]\\:rf-slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\\[state\\=open\\]\\:rf-slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\\[state\\=open\\]\\:rf-slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y:-48%}.dark\\:rf-border-zinc-50:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity,1))}.dark\\:rf-border-zinc-800:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\\:rf-bg-red-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-50:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-950:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:rf-text-zinc-400:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-50:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-900:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-ring-offset-zinc-950:is(.rf-dark *){--tw-ring-offset-color:#09090b}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:hover\\:rf-bg-red-900\\/90:hover:is(.rf-dark *){background-color:rgba(127,29,29,.9)}.dark\\:hover\\:rf-bg-zinc-50\\/90:hover:is(.rf-dark *){background-color:hsla(0,0%,98%,.9)}.dark\\:hover\\:rf-bg-zinc-800:hover:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:hover\\:rf-bg-zinc-800\\/80:hover:is(.rf-dark *){background-color:rgba(39,39,42,.8)}.dark\\:hover\\:rf-text-zinc-50:hover:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus\\:rf-bg-zinc-800:focus:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:focus\\:rf-text-zinc-50:focus:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus-visible\\:rf-ring-zinc-300:focus-visible:is(.rf-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-bg-zinc-800[data-selected=true]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-bg-zinc-950[data-state=active]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-bg-zinc-50[data-state=checked]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=open\\]\\:rf-bg-zinc-800[data-state=open]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-text-zinc-50[data-selected=true]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-text-zinc-50[data-state=active]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-text-zinc-900[data-state=checked]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\\:rf-order-1{order:1}.sm\\:rf-order-2{order:2}.sm\\:rf-mt-0{margin-top:0}.sm\\:rf-inline{display:inline}.sm\\:rf-hidden{display:none}.sm\\:rf-w-auto{width:auto}.sm\\:rf-flex-row{flex-direction:row}.sm\\:rf-items-center{align-items:center}.sm\\:rf-justify-end{justify-content:flex-end}.sm\\:rf-gap-3{gap:.75rem}.sm\\:rf-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))}.sm\\:rf-rounded-lg{border-radius:var(--radius)}.sm\\:rf-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-text-left{text-align:left}.sm\\:rf-text-sm{font-size:.875rem;line-height:1.25rem}.sm\\:rf-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\\[\\&\\>span\\]\\:rf-line-clamp-1>span{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>svg\\]\\:rf-size-4>svg{height:1rem;width:1rem}.\\[\\&\\>svg\\]\\:rf-shrink-0>svg{flex-shrink:0}.\\[\\&\\>svg\\]\\:rf-text-red-300>svg{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.\\[\\&\\>svg\\]\\:hover\\:rf-text-red-400:hover>svg{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-py-1\\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-font-medium [cmdk-group-heading]{font-weight:500}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-500 [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.dark\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-400 [cmdk-group-heading]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:rf-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\[\\&_\\[cmdk-group\\]\\]\\:rf-px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\\[\\&_\\[cmdk-input\\]\\]\\:rf-h-12 [cmdk-input]{height:3rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-h-5 [cmdk-item] svg{height:1.25rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-w-5 [cmdk-item] svg{width:1.25rem}.\\[\\&_svg\\]\\:rf-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:rf-size-4 svg{height:1rem;width:1rem}.\\[\\&_svg\\]\\:rf-shrink-0 svg{flex-shrink:0}',q9n=()=>{rt.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=W9n,document.head.appendChild(e)},[])},X9n=i=>{rt.useEffect(()=>(i?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[i])},Rrt=i=>`hsl(${Ab.indexOf(i)*137.5%360}, 70%, 50%)`,Z9n=({phaseTimings:i})=>{if(!i)return null;const e=Object.values(i).reduce((t,n)=>t+n,0);return je.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[je.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:Ab.map(t=>{const n=i[t]||0,r=n/e*100;return je.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${r}%`,backgroundColor:Rrt(t)},children:je.jsxs("div",{className:"rf-opacity-0 group-hover/bar:rf-opacity-100 rf-transition-opacity rf-absolute rf-bottom-full rf-left-1/2 rf-transform -rf-translate-x-1/2 rf-mb-2 rf-px-2 rf-py-1 rf-text-xs rf-whitespace-nowrap rf-rounded rf-bg-gray-900 rf-text-white rf-pointer-events-none",children:[t,": ",n.toFixed(1),"ms"]})},t)})}),je.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},$9n=({renderLog:i})=>{const[e,t]=rt.useState("chronological");if(!i)return je.jsx("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:"No render log, make sure this tab is open when you render (TODO add a rerender button here)"});const n=Object.entries((i==null?void 0:i.phaseTimings)??{});e==="chronological"?n.sort((o,a)=>Ab.indexOf(o[0])-Ab.indexOf(a[0])):n.sort((o,a)=>a[1]-o[1]);const r=n.reduce((o,[a,s])=>o+s,0);return je.jsxs("div",{className:"rf-bg-white",children:[je.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center",children:[je.jsx("div",{children:"Render Logs"}),je.jsxs("div",{className:"rf-mb-4 rf-pr-2 rf-flex rf-text-xs rf-items-center",children:[je.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),je.jsxs("select",{value:e,onChange:o=>t(o.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[je.jsx("option",{value:"chronological",children:"Phase Order"}),je.jsx("option",{value:"longest",children:"Duration"})]})]})]}),je.jsx(Z9n,{phaseTimings:i.phaseTimings}),je.jsxs("table",{className:"rf-w-full rf-text-xs",children:[je.jsx("thead",{children:je.jsxs("tr",{children:[je.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),je.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),je.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),je.jsx("tbody",{children:n.map(([o,a])=>je.jsxs("tr",{children:[je.jsx("td",{className:"rf-p-2",children:Ab.indexOf(o)}),je.jsx("td",{className:"rf-p-2",children:o}),je.jsx("td",{className:"rf-p-2",children:je.jsx("div",{className:"rf-w-8",children:je.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:Rrt(o),width:`${a/r*100}%`}})})}),je.jsx("td",{className:"rf-p-2",children:je.jsxs("div",{className:"rf-flex w-full",children:[je.jsxs("span",{className:"rf-flex-grow",children:[a,"ms"]}),je.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(a/r*100).toFixed(1),"%"]})]})})]},o))})]})]})},Drt=({errorMessage:i,errorStack:e,circuitJsonErrors:t})=>{rt.useEffect(()=>{if(i){const n=new Error(i);e&&(n.stack=e);try{_G.captureException(n)}catch{}}},[i,e]),rt.useEffect(()=>{if(t&&t.length>0)for(const n of t){const r=new Error(n.message||"Circuit JSON Error");n.stack&&(r.stack=n.stack);try{_G.captureException(r,{error_type:n.type})}catch{}}},[t])},exn="0.0.726",dye=aQe()(sQe(i=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:e=>{i({lastRunEvalVersion:e})}}),{name:"runframe-runner-store"})),txn=["assembly","bom","circuit_json","errors","render_log"],nxn=({code:i,fsMap:e,onRunClicked:t=void 0,errorMessage:n,errorStack:r,circuitJson:o,autoroutingGraphics:a,showRightHeaderContent:s=!0,showCodeTab:l=!1,codeTabContent:c,showJsonTab:u=!0,showRenderLogTab:d=!0,onActiveTabChange:f,renderLog:h,showImportAndFormatButtons:g=!0,className:y,headerClassName:v,leftHeaderContent:_,readOnly:x,isStreaming:S,autoroutingLog:M,onReportAutoroutingLog:z,isRunningCode:U,hasCodeChangedSinceLastRun:H,onEditEvent:k,editEvents:j,defaultActiveTab:G,defaultTab:ee,availableTabs:K,autoRotate3dViewerDisabled:ie,showSchematicDebugGrid:ce=!1,showToggleFullScreen:ue=!0,defaultToFullScreen:le=!1,activeEffectName:_e})=>{var We;q9n();const ye=dye($e=>$e.lastRunEvalVersion),Qe=rt.useMemo(()=>o?o.filter($e=>$e&&"error_type"in $e||$e.type.includes("error")):null,[o]),Me=rt.useMemo(()=>o?o.filter($e=>$e&&"warning_type"in $e||$e.type.includes("warning")):null,[o]);Drt({errorMessage:n,errorStack:r,circuitJsonErrors:Qe});const[Te,Ee]=rt.useState(G??ee??(K==null?void 0:K[0])??"pcb"),[Ge,Ke]=rt.useState(null),[nt,lt]=rt.useState(le);X9n(nt);const Rt=rt.useCallback($e=>{Ee($e),f==null||f($e)},[f]),pt=()=>{lt(!nt)};rt.useEffect(()=>{n&&(Te!=="errors"&&Ke(Te),Rt("errors"))},[n]),rt.useEffect(()=>{(Te==="code"||Te==="errors")&&o&&!n&&Rt(Ge??G??ee??(K==null?void 0:K[0])??"pcb")},[o]);const Fe=rt.useCallback($e=>{window.TSCIRCUIT_3D_OBJECT_REF=$e===null?void 0:$e},[]);return je.jsx("div",{className:ip("flex flex-col relative rf-overflow-x-hidden rf-h-full",y),children:je.jsx("div",{className:ip("rf-md:sticky rf-md:top-2 rf-h-full",nt&&"rf-fixed rf-top-0 rf-left-0 rf-w-full rf-h-full rf-bg-white rf-overflow-hidden"),children:je.jsxs(Iie,{value:Te,onValueChange:Rt,className:"rf-flex-grow rf-flex rf-flex-col rf-h-full",children:[je.jsxs("div",{className:ip("rf-flex rf-items-center rf-gap-2 rf-p-2 rf-pb-0",v),children:[_,_&&je.jsx("div",{className:"rf-flex-grow"}),!_&&U&&je.jsx(vM,{className:"rf-w-4 rf-h-4 rf-animate-spin"}),!_&&je.jsx("div",{className:"rf-flex-grow"}),h&&h.progress!==1&&!n&&je.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[_e?je.jsx("div",{className:"rf-text-xs rf-text-gray-500",children:_e}):h.lastRenderEvent&&je.jsx("div",{className:"rf-text-xs rf-text-gray-500",children:((We=h.lastRenderEvent)==null?void 0:We.phase)??""}),je.jsx("div",{className:"rf-w-4 rf-h-4 rf-bg-blue-500 rf-opacity-50 rf-rounded-full rf-text-white",children:je.jsx(vM,{className:"rf-w-4 rf-h-4 rf-animate-spin"})}),je.jsxs("div",{className:"rf-text-xs rf-font-bold rf-text-gray-700 rf-tabular-nums",children:[((h.progress??0)*100).toFixed(1),"%"]})]}),s&&je.jsxs(CG,{children:[l&&je.jsx(zB,{value:"code",children:"Code"}),!K||K.includes("pcb")?je.jsxs(zB,{value:"pcb",className:"rf-whitespace-nowrap",children:[o&&je.jsx("span",{className:ip("rf-inline-flex rf-items-center rf-justify-center rf-w-2 rf-h-2 rf-mr-1 rf-text-xs rf-font-bold rf-text-white rf-rounded-full",H?"rf-bg-gray-500":"rf-bg-blue-500")}),"PCB"]}):null,!K||K.includes("schematic")?je.jsxs(zB,{value:"schematic",className:"rf-whitespace-nowrap",children:[o&&je.jsx("span",{className:ip("rf-inline-flex rf-items-center rf-justify-center rf-w-2 rf-h-2 rf-mr-1 rf-text-xs rf-font-bold rf-text-white rf-rounded-full",H?"rf-bg-gray-500":"rf-bg-blue-500")}),"Schematic"]}):null,!K||K.includes("cad")?je.jsxs(zB,{value:"cad",children:[o&&je.jsx("span",{className:ip("inline-flex items-center justify-center w-2 h-2 mr-1 text-xs font-bold text-white rounded-full",H?"rf-bg-gray-500":"rf-bg-blue-500")}),"3D"]}):null,!["pcb","cad","schematic"].includes(Te)&&je.jsx(zB,{value:Te,children:hNe(Te)}),je.jsxs(mge,{children:[je.jsx(yge,{asChild:!0,children:je.jsxs("div",{className:"rf-whitespace-nowrap rf-p-2 rf-mr-1 rf-cursor-pointer rf-relative",children:[je.jsx(Chn,{className:"rf-w-4 rf-h-4"}),(Qe&&Qe.length>0||n)&&je.jsx("span",{className:"rf-inline-flex rf-absolute rf-top-[6px] rf-right-[4px] rf-items-center rf-justify-center rf-w-1 rf-h-1 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full"})]})}),je.jsxs(iV,{className:"rf-*:text-xs",children:[txn.filter($e=>!K||K.includes($e)).map($e=>je.jsxs(i2,{onSelect:()=>Rt($e),children:[Te!==$e&&je.jsx(_Ze,{className:"rf-w-3 rf-h-3 rf-opacity-30"}),Te===$e&&je.jsx(RY,{className:"rf-w-3 rf-h-3"}),je.jsx("div",{className:"rf-pr-2",children:hNe($e)}),$e==="errors"&&(Qe&&Qe.length>0||n)&&je.jsx("span",{className:"rf-inline-flex rf-items-center rf-justify-center rf-w-3 rf-h-3 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full",children:n?1:Qe==null?void 0:Qe.length})]},$e)),je.jsx(i2,{disabled:!0,className:"rf-opacity-60 rf-cursor-default rf-select-none",children:je.jsxs("div",{className:"rf-pr-2 rf-text-xs rf-text-gray-500",children:["@tscircuit/runframe@",exn.split(".").map(($e,_t)=>_t===2?parseInt($e)+1:$e).join(".")]})}),ye&&je.jsx(i2,{disabled:!0,className:"rf-opacity-60 rf-cursor-default rf-select-none",children:je.jsxs("div",{className:"rf-pr-2 rf-text-xs rf-text-gray-500",children:["@tscircuit/eval@",ye]})})]})]})]}),ue&&je.jsx(jC,{onClick:pt,variant:"ghost",children:nt?je.jsx(Bhn,{size:16}):je.jsx(Ehn,{size:16})})]}),l&&je.jsx(C2,{value:"code",className:"rf-flex-grow rf-overflow-hidden",children:je.jsx("div",{className:"rf-h-full",children:c})}),(!K||K.includes("pcb"))&&je.jsx(C2,{value:"pcb",children:je.jsx("div",{className:ip("rf-overflow-hidden",nt?"rf-h-[calc(100vh-52px)]":"rf-h-full"),children:je.jsx(uD,{fallbackRender:({error:$e})=>je.jsx("div",{className:"rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200",children:je.jsxs("div",{className:"rf-p-4",children:[je.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3",children:"Error loading PCB viewer"}),je.jsx("p",{className:"rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2",children:($e==null?void 0:$e.message)||"An unknown error occurred"})]})}),children:o?je.jsx(J9n,{focusOnHover:!1,circuitJson:o,debugGraphics:a,containerClassName:ip("rf-h-full rf-w-full",nt?"rf-min-h-[calc(100vh-240px)]":"rf-min-h-[620px]"),onEditEventsChanged:$e=>{if(k)for(const _t of $e)k(_t)}}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("assembly"))&&je.jsx(C2,{value:"assembly",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallback:je.jsx("div",{children:"Error loading Assembly"}),children:o?je.jsx(nvn,{circuitJson:o,containerStyle:{height:"100%"},editingEnabled:!0,debugGrid:!0}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("schematic"))&&je.jsx(C2,{value:"schematic",children:je.jsx("div",{className:ip("rf-overflow-auto rf-bg-white",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallbackRender:({error:$e})=>je.jsx("div",{className:"rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200",children:je.jsxs("div",{className:"rf-p-4",children:[je.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3",children:"Error loading Schematic"}),je.jsx("p",{className:"rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2",children:($e==null?void 0:$e.message)||"An unknown error occurred"})]})}),children:o?je.jsx($yn,{circuitJson:o,containerStyle:{height:"100%"},editingEnabled:!0,onEditEvent:$e=>{k==null||k($e)},debugGrid:ce}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("cad"))&&je.jsx(C2,{value:"cad",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{FallbackComponent:chn,children:o?je.jsx(shn,{ref:Fe,circuitJson:o,autoRotateDisabled:ie}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("bom"))&&je.jsx(C2,{value:"bom",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallbackRender:({error:$e})=>je.jsx("div",{className:"rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200",children:je.jsxs("div",{className:"rf-p-4",children:[je.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3",children:"Error loading Bill of Materials"}),je.jsx("p",{className:"rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2",children:($e==null?void 0:$e.message)||"An unknown error occurred"})]})}),children:o?je.jsx(svn,{circuitJson:o}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("circuit_json"))&&je.jsx(C2,{value:"circuit_json",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:je.jsx(uD,{fallback:je.jsx("div",{children:"Error loading JSON viewer"}),children:o?je.jsx(ovn,{elements:o}):je.jsx(xM,{onRunClicked:t})})})}),(!K||K.includes("errors"))&&je.jsx(C2,{value:"errors",children:je.jsx("div",{className:ip("rf-overflow-auto",nt?"rf-h-screen":"rf-h-full rf-min-h-[620px]"),children:n||Qe&&Qe.length>0||o?je.jsx(hmn,{code:i,fsMap:e,circuitJsonErrors:Qe,circuitJsonWarnings:Me,errorMessage:n,errorStack:r,circuitJson:o,evalVersion:ye,autoroutingLog:M,onReportAutoroutingLog:z}):je.jsx(xM,{onRunClicked:t})})}),d&&(!K||K.includes("render_log"))&&je.jsx(C2,{value:"render_log",children:je.jsx($9n,{renderLog:h})})]})})})};var ej="Dialog",[Nrt,Trt]=NB(ej),[ixn,cB]=Nrt(ej),Prt=i=>{const{__scopeDialog:e,children:t,open:n,defaultOpen:r,onOpenChange:o,modal:a=!0}=i,s=rt.useRef(null),l=rt.useRef(null),[c,u]=t4({prop:n,defaultProp:r??!1,onChange:o,caller:ej});return je.jsx(ixn,{scope:e,triggerRef:s,contentRef:l,contentId:dE(),titleId:dE(),descriptionId:dE(),open:c,onOpenChange:u,onOpenToggle:rt.useCallback(()=>u(d=>!d),[u]),modal:a,children:t})};Prt.displayName=ej;var krt="DialogTrigger",Lrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(krt,t),o=_C(e,r.triggerRef);return je.jsx(_y.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":hye(r.open),...n,ref:o,onClick:Fp(i.onClick,r.onOpenToggle)})});Lrt.displayName=krt;var Aye="DialogPortal",[rxn,Frt]=Nrt(Aye,{forceMount:void 0}),Urt=i=>{const{__scopeDialog:e,forceMount:t,children:n,container:r}=i,o=cB(Aye,e);return je.jsx(rxn,{scope:e,forceMount:t,children:rt.Children.map(n,a=>je.jsx(y2,{present:t||o.open,children:je.jsx(YY,{asChild:!0,container:r,children:a})}))})};Urt.displayName=Aye;var tj="DialogOverlay",Grt=rt.forwardRef((i,e)=>{const t=Frt(tj,i.__scopeDialog),{forceMount:n=t.forceMount,...r}=i,o=cB(tj,i.__scopeDialog);return o.modal?je.jsx(y2,{present:n||o.open,children:je.jsx(axn,{...r,ref:e})}):null});Grt.displayName=tj;var oxn=e4("DialogOverlay.RemoveScroll"),axn=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(tj,t);return je.jsx(ZY,{as:oxn,allowPinchZoom:!0,shards:[r.contentRef],children:je.jsx(_y.div,{"data-state":hye(r.open),...n,ref:e,style:{pointerEvents:"auto",...n.style}})})}),NM="DialogContent",Ort=rt.forwardRef((i,e)=>{const t=Frt(NM,i.__scopeDialog),{forceMount:n=t.forceMount,...r}=i,o=cB(NM,i.__scopeDialog);return je.jsx(y2,{present:n||o.open,children:o.modal?je.jsx(sxn,{...r,ref:e}):je.jsx(lxn,{...r,ref:e})})});Ort.displayName=NM;var sxn=rt.forwardRef((i,e)=>{const t=cB(NM,i.__scopeDialog),n=rt.useRef(null),r=_C(e,t.contentRef,n);return rt.useEffect(()=>{const o=n.current;if(o)return ige(o)},[]),je.jsx(zrt,{...i,ref:r,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Fp(i.onCloseAutoFocus,o=>{var a;o.preventDefault(),(a=t.triggerRef.current)==null||a.focus()}),onPointerDownOutside:Fp(i.onPointerDownOutside,o=>{const a=o.detail.originalEvent,s=a.button===0&&a.ctrlKey===!0;(a.button===2||s)&&o.preventDefault()}),onFocusOutside:Fp(i.onFocusOutside,o=>o.preventDefault())})}),lxn=rt.forwardRef((i,e)=>{const t=cB(NM,i.__scopeDialog),n=rt.useRef(!1),r=rt.useRef(!1);return je.jsx(zrt,{...i,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var a,s;(a=i.onCloseAutoFocus)==null||a.call(i,o),o.defaultPrevented||(n.current||(s=t.triggerRef.current)==null||s.focus(),o.preventDefault()),n.current=!1,r.current=!1},onInteractOutside:o=>{var l,c;(l=i.onInteractOutside)==null||l.call(i,o),o.defaultPrevented||(n.current=!0,o.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const a=o.target;((c=t.triggerRef.current)==null?void 0:c.contains(a))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&r.current&&o.preventDefault()}})}),zrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,trapFocus:n,onOpenAutoFocus:r,onCloseAutoFocus:o,...a}=i,s=cB(NM,t),l=rt.useRef(null),c=_C(e,l);return L0e(),je.jsxs(je.Fragment,{children:[je.jsx(NY,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:r,onUnmountAutoFocus:o,children:je.jsx(DY,{role:"dialog",id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":hye(s.open),...a,ref:c,onDismiss:()=>s.onOpenChange(!1)})}),je.jsxs(je.Fragment,{children:[je.jsx(uxn,{titleId:s.titleId}),je.jsx(Axn,{contentRef:l,descriptionId:s.descriptionId})]})]})}),fye="DialogTitle",Hrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(fye,t);return je.jsx(_y.h2,{id:r.titleId,...n,ref:e})});Hrt.displayName=fye;var Yrt="DialogDescription",Vrt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(Yrt,t);return je.jsx(_y.p,{id:r.descriptionId,...n,ref:e})});Vrt.displayName=Yrt;var jrt="DialogClose",Krt=rt.forwardRef((i,e)=>{const{__scopeDialog:t,...n}=i,r=cB(jrt,t);return je.jsx(_y.button,{type:"button",...n,ref:e,onClick:Fp(i.onClick,()=>r.onOpenChange(!1))})});Krt.displayName=jrt;function hye(i){return i?"open":"closed"}var Jrt="DialogTitleWarning",[cxn,Wrt]=yTt(Jrt,{contentName:NM,titleName:fye,docsSlug:"dialog"}),uxn=({titleId:i})=>{const e=Wrt(Jrt),t=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users.
|
|
13516
13516
|
|
|
13517
13517
|
If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
13518
13518
|
|