@tscircuit/runframe 0.0.3008 → 0.0.3010
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.
|
@@ -5316,7 +5316,7 @@ ${Q.join(`
|
|
|
5316
5316
|
${c}polygon: ${a.polygon.vertices}
|
|
5317
5317
|
`:Q+=`
|
|
5318
5318
|
`,a.children.length>0&&E.push(a.children)}return Q}};A.exports=o}}),Ubt=fg({"node_modules/@jscad/modeling/src/operations/booleans/trees/Tree.js"(g,A){var I=Rbt(),e=Fbt(),t=class{constructor(B){this.polygonTree=new e,this.rootnode=new I(null),B&&this.addPolygons(B)}invert(){this.polygonTree.invert(),this.rootnode.invert()}clipTo(B,o=!1){this.rootnode.clipTo(B,o)}allPolygons(){const B=[];return this.polygonTree.getPolygons(B),B}addPolygons(B){const o=new Array(B.length);for(let C=0;C<B.length;C++)o[C]=this.polygonTree.addChild(B[C]);this.rootnode.addPolygonTreeNodes(o)}clear(){this.polygonTree.clear()}toString(){return"Tree: "+this.polygonTree.toString("")}};A.exports=t}}),e$A=fg({"node_modules/@jscad/modeling/src/operations/booleans/trees/index.js"(g,A){A.exports={Tree:Ubt()}}}),Jbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/intersectGeom3Sub.js"(g,A){var I=yQ(),e=I$A(),{Tree:t}=e$A(),B=(o,C)=>{if(!e(o,C))return I.create();const Q=new t(I.toPolygons(o)),i=new t(I.toPolygons(C));Q.invert(),i.clipTo(Q),i.invert(),Q.clipTo(i),i.clipTo(Q),Q.addPolygons(i.allPolygons()),Q.invert();const E=Q.allPolygons();return I.create(E)};A.exports=B}}),bdI=fg({"node_modules/@jscad/modeling/src/operations/booleans/intersectGeom3.js"(g,A){var I=TC(),e=OgA(),t=Jbt(),B=(...o)=>{o=I(o);let C=o.shift();return o.forEach(Q=>{C=t(C,Q)}),C=e(C),C};A.exports=B}}),Kbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/intersectGeom2.js"(g,A){var I=TC(),e=yQ(),t=B3(),B=A$A(),o=g$A(),C=bdI(),Q=(...i)=>{i=I(i);const E=i.map(r=>o({z0:-1,z1:1},r)),n=C(E),s=t(n);return B(s,e.toPolygons(n))};A.exports=Q}}),Pbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/intersect.js"(g,A){var I=TC(),e=ZgA(),t=fQ(),B=yQ(),o=Kbt(),C=bdI(),Q=(...i)=>{if(i=I(i),i.length===0)throw new Error("wrong number of arguments");if(!e(i))throw new Error("only intersect of the types are supported");const E=i[0];return t.isA(E)?o(i):B.isA(E)?C(i):E};A.exports=Q}}),t$A=fg({"node_modules/@jscad/modeling/src/operations/hulls/hullPoints3.js"(g,A){var I=_i(),e=TDI(),t=B=>e(B,{skipTriangulation:!0}).map(Q=>{const i=Q.map(E=>B[E]);return I.create(i)});A.exports=t}}),HdI=fg({"node_modules/@jscad/modeling/src/operations/booleans/unionGeom3Sub.js"(g,A){var I=yQ(),e=I$A(),{Tree:t}=e$A(),B=(C,Q)=>{if(!e(C,Q))return o(C,Q);const i=new t(I.toPolygons(C)),E=new t(I.toPolygons(Q));i.clipTo(E,!1),E.clipTo(i),E.invert(),E.clipTo(i),E.invert();const n=i.allPolygons().concat(E.allPolygons());return I.create(n)},o=(C,Q)=>{let i=I.toPolygons(C);return i=i.concat(I.toPolygons(Q)),I.create(i)};A.exports=B}}),B$A=fg({"node_modules/@jscad/modeling/src/operations/booleans/unionGeom3.js"(g,A){var I=TC(),e=OgA(),t=HdI(),B=(...o)=>{o=I(o);let C;for(C=1;C<o.length;C+=2)o.push(t(o[C-1],o[C]));let Q=o[C-1];return Q=e(Q),Q};A.exports=B}}),vdI=fg({"node_modules/@jscad/modeling/src/operations/minkowski/minkowskiSum.js"(g,A){var I=TC(),e=yQ(),t=_i(),B=t$A(),o=B$A(),C=(...r)=>{if(r=I(r),r.length!==2)throw new Error("minkowskiSum requires exactly two geometries");const[a,c]=r;if(!e.isA(a)||!e.isA(c))throw new Error("minkowskiSum requires geom3 geometries");const h=e.isConvex(a),l=e.isConvex(c);if(h&&l)return n(a,c);if(!h&&l)return Q(a,c);if(h&&!l)return Q(c,a);throw new Error("minkowskiSum of two non-convex geometries is not yet supported")},Q=(r,a)=>{const c=i(r);if(c.length===0)return e.create();const h=c.map(l=>n(l,a));return h.length===1?h[0]:o(h)},i=r=>{const a=e.toPolygons(r);if(a.length===0)return[];const c=[];for(let h=0;h<a.length;h++){const l=a[h],D=l.vertices;let d=0,y=0,w=0;for(let R=0;R<D.length;R++)d+=D[R][0],y+=D[R][1],w+=D[R][2];d/=D.length,y/=D.length,w/=D.length;const u=t.plane(l),G=u[0],m=u[1],p=u[2],k=.1,S=[d-G*k,y-m*k,w-p*k];for(let R=1;R<D.length-1;R++){const F=D[0],N=D[R],J=D[R+1],P=E(S,F,N,J);c.push(e.create(P))}}return c},E=(r,a,c,h)=>[t.create([r,c,a]),t.create([r,a,h]),t.create([a,c,h]),t.create([c,r,h])],n=(r,a)=>{const c=s(r),h=s(a);if(c.length===0||h.length===0)return e.create();const l=[];for(let d=0;d<c.length;d++){const y=c[d];for(let w=0;w<h.length;w++){const u=h[w];l.push([y[0]+u[0],y[1]+u[1],y[2]+u[2]])}}const D=B(l);return e.create(D)},s=r=>{const a=new Set,c=[],h=e.toPolygons(r);for(let l=0;l<h.length;l++){const D=h[l].vertices;for(let d=0;d<D.length;d++){const y=D[d],w=`${y[0]},${y[1]},${y[2]}`;a.has(w)||(a.add(w),c.push(y))}}return c};A.exports=C}}),Lbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/scissionGeom3.js"(g,A){var I=yo(),e=B3(),t=yQ(),B=i=>i.sort((E,n)=>E-n).filter((E,n,s)=>!n||E!==s[n-1]),o=(i,E,n)=>{const s=`${E}`,r=i.get(s);r===void 0?i.set(s,[n]):r.push(n)},C=(i,E)=>{const n=`${E}`;return i.get(n)},Q=i=>{const E=e(i),n=t.toPolygons(i),s=n.length,r=new Map,a=I.create();n.forEach((d,y)=>{d.vertices.forEach(w=>{o(r,I.snap(a,w,E),y)})});const c=n.map(d=>{let y=[];return d.vertices.forEach(w=>{y=y.concat(C(r,I.snap(a,w,E)))}),{e:1,d:B(y)}});r.clear();let h=0;const l=c.length;for(let d=0;d<l;d++){const y=c[d];if(y.e>0){const w=new Array(s);w[d]=!0;do h=0,w.forEach((u,G)=>{const m=c[G];if(m.e>0){m.e=-1;for(let p=0;p<m.d.length;p++)w[m.d[p]]=!0;h++}});while(h>0);y.indexes=w}}const D=[];for(let d=0;d<l;d++)if(c[d].indexes){const y=[];c[d].indexes.forEach((w,u)=>y.push(n[u])),D.push(t.create(y))}return D};A.exports=Q}}),Ybt=fg({"node_modules/@jscad/modeling/src/operations/booleans/scission.js"(g,A){var I=TC(),e=yQ(),t=Lbt(),B=(...o)=>{if(o=I(o),o.length===0)throw new Error("wrong number of arguments");const C=o.map(Q=>e.isA(Q)?t(Q):Q);return C.length===1?C[0]:C};A.exports=B}}),_bt=fg({"node_modules/@jscad/modeling/src/operations/booleans/subtractGeom3Sub.js"(g,A){var I=yQ(),e=I$A(),{Tree:t}=e$A(),B=(o,C)=>{if(!e(o,C))return I.clone(o);const Q=new t(I.toPolygons(o)),i=new t(I.toPolygons(C));Q.invert(),Q.clipTo(i),i.clipTo(Q,!0),Q.addPolygons(i.allPolygons()),Q.invert();const E=Q.allPolygons();return I.create(E)};A.exports=B}}),qdI=fg({"node_modules/@jscad/modeling/src/operations/booleans/subtractGeom3.js"(g,A){var I=TC(),e=OgA(),t=_bt(),B=(...o)=>{o=I(o);let C=o.shift();return o.forEach(Q=>{C=t(C,Q)}),C=e(C),C};A.exports=B}}),bbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/subtractGeom2.js"(g,A){var I=TC(),e=yQ(),t=B3(),B=A$A(),o=g$A(),C=qdI(),Q=(...i)=>{i=I(i);const E=i.map(r=>o({z0:-1,z1:1},r)),n=C(E),s=t(n);return B(s,e.toPolygons(n))};A.exports=Q}}),Hbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/subtract.js"(g,A){var I=TC(),e=ZgA(),t=fQ(),B=yQ(),o=bbt(),C=qdI(),Q=(...i)=>{if(i=I(i),i.length===0)throw new Error("wrong number of arguments");if(!e(i))throw new Error("only subtract of the types are supported");const E=i[0];return t.isA(E)?o(i):B.isA(E)?C(i):E};A.exports=Q}}),TdI=fg({"node_modules/@jscad/modeling/src/operations/booleans/unionGeom2.js"(g,A){var I=TC(),e=yQ(),t=B3(),B=A$A(),o=g$A(),C=B$A(),Q=(...i)=>{i=I(i);const E=i.map(r=>o({z0:-1,z1:1},r)),n=C(E),s=t(n);return B(s,e.toPolygons(n))};A.exports=Q}}),o$A=fg({"node_modules/@jscad/modeling/src/operations/booleans/union.js"(g,A){var I=TC(),e=ZgA(),t=fQ(),B=yQ(),o=TdI(),C=B$A(),Q=(...i)=>{if(i=I(i),i.length===0)throw new Error("wrong number of arguments");if(!e(i))throw new Error("only unions of the same type are supported");const E=i[0];return t.isA(E)?o(i):B.isA(E)?C(i):E};A.exports=Q}}),WgA=fg({"node_modules/@jscad/modeling/src/operations/booleans/index.js"(g,A){A.exports={intersect:Pbt(),minkowski:vdI(),scission:Ybt(),subtract:Hbt(),union:o$A()}}}),hdA=fg({"node_modules/@jscad/modeling/src/operations/expansions/offsetFromPoints.js"(g,A){var{EPS:I,TAU:e}=nE(),t=ddI(),B=VXA(),o=Ci(),C=adA(),Q=(i,E)=>{const n={delta:1,corners:"edge",closed:!1,segments:16};let{delta:s,corners:r,closed:a,segments:c}=Object.assign({},n,i);if(Math.abs(s)<I)return E;let h=i.closed?C(E):1;h===0&&(h=1);const l=h>0&&s>=0||h<0&&s<0;s=Math.abs(s);let D=null,d=[];const y=[],w=o.create(),u=E.length;for(let G=0;G<u;G++){const m=(G+1)%u,p=E[G],k=E[m];l?o.subtract(w,p,k):o.subtract(w,k,p),o.normal(w,w),o.normalize(w,w),o.scale(w,w,s);const S=o.add(o.create(),p,w),R=o.add(o.create(),k,w),F=[S,R];if(D!=null&&(a||!a&&m!==0)){const N=t(D[0],D[1],F[0],F[1]);N?(d.pop(),F[0]=N):y.push({c:p,s0:D,s1:F})}D=[S,R],!(m===0&&!a)&&(d.push(F[0]),d.push(F[1]))}if(a&&D!=null){const G=d[0],m=d[1],p=t(D[0],D[1],G,m);if(p)d[0]=p,d.pop();else{const k=E[0],S=[G,m];y.push({c:k,s0:D,s1:S})}}if(r==="edge"){const G=new Map;d.forEach((k,S)=>G.set(k,S));const m=B.create(),p=B.create();y.forEach(k=>{B.fromPoints(m,k.s0[0],k.s0[1]),B.fromPoints(p,k.s1[0],k.s1[1]);const S=B.intersectPointOfLines(m,p);if(Number.isFinite(S[0])&&Number.isFinite(S[1])){const R=k.s0[1],F=G.get(R);d[F]=S,d[(F+1)%d.length]=void 0}else{const R=k.s1[0],F=G.get(R);d[F]=void 0}}),d=d.filter(k=>k!==void 0)}if(r==="round"){let G=Math.floor(c/4);const m=o.create();y.forEach(p=>{let k=o.angle(o.subtract(m,p.s1[0],p.c));if(k-=o.angle(o.subtract(m,p.s0[1],p.c)),l&&k<0&&(k=k+Math.PI,k<0&&(k=k+Math.PI)),!l&&k>0&&(k=k-Math.PI,k>0&&(k=k-Math.PI)),k!==0){G=Math.floor(c*(Math.abs(k)/e));const S=k/G,R=o.angle(o.subtract(m,p.s0[1],p.c)),F=[];for(let N=1;N<G;N++){const J=R+S*N,P=o.fromAngleRadians(o.create(),J);o.scale(P,P,s),o.add(P,P,p.c),F.push(P)}if(F.length>0){const N=p.s0[1];let J=d.findIndex(P=>o.equals(N,P));J=(J+1)%d.length,d.splice(J,0,...F)}}else{const S=p.s1[0],R=d.findIndex(F=>o.equals(S,F));d.splice(R,1)}})}return d};A.exports=Q}}),vbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/expandGeom2.js"(g,A){var I=fQ(),e=hdA(),t=(B,o)=>{const C={delta:1,corners:"edge",segments:16},{delta:Q,corners:i,segments:E}=Object.assign({},C,B);if(!(i==="edge"||i==="chamfer"||i==="round"))throw new Error('corners must be "edge", "chamfer", or "round"');const r=I.toOutlines(o).map(a=>(B={delta:Q,corners:i,closed:!0,segments:E},e(B,a))).reduce((a,c)=>a.concat(I.toSides(I.fromPoints(c))),[]);return I.create(r)};A.exports=t}}),qbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/extrudePolygon.js"(g,A){var I=_a(),e=yo(),t=yQ(),B=_i(),o=(C,Q)=>{e.dot(B.plane(Q),C)>0&&(Q=B.invert(Q));const E=[Q],n=B.transform(I.fromTranslation(I.create(),C),Q),s=Q.vertices.length;for(let r=0;r<s;r++){const a=r<s-1?r+1:0,c=B.create([Q.vertices[r],n.vertices[r],n.vertices[a],Q.vertices[a]]);E.push(c)}return E.push(B.invert(n)),t.create(E)};A.exports=o}}),Tbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/expandShell.js"(g,A){var{EPS:I,TAU:e}=nE(),t=_a(),B=yo(),o=YdI(),C=yQ(),Q=_i(),i=xdI(),E=OgA(),n=HdI(),s=qbt(),r=(l,D,d)=>{const y=D.toString();if(l.has(y))l.get(y)[1].push(d);else{const w=[D,[d]];l.set(y,w)}},a=(l,D,d)=>{const y=D[0].toString(),w=D[1].toString(),u=y<w?`${y},${w}`:`${w},${y}`;if(l.has(u))l.get(u)[1].push(d);else{const G=[D,[d]];l.set(u,G)}},c=(l,D)=>{l.findIndex(y=>y===D)<0&&l.push(D)},h=(l,D)=>{const d={delta:1,segments:12},{delta:y,segments:w}=Object.assign({},d,l);let u=C.create();const G=new Map,m=new Map,p=B.create(),k=B.create();return C.toPolygons(D).forEach((R,F)=>{const N=B.scale(B.create(),Q.plane(R),2*y),J=Q.transform(t.fromTranslation(t.create(),B.scale(B.create(),N,-.5)),R),P=s(N,J);u=n(u,P);const b=R.vertices;for(let H=0;H<b.length;H++){r(G,b[H],Q.plane(R));const q=(H+1)%b.length,j=[b[H],b[q]];a(m,j,Q.plane(R))}}),m.forEach(R=>{const F=R[0],N=R[1],J=F[0],P=F[1],b=B.subtract(B.create(),P,J);B.normalize(b,b);const H=N[0],q=B.cross(B.create(),H,b);let j=[];for(let DA=0;DA<w;DA++)c(j,DA*e/w);for(let DA=0,CA=N.length;DA<CA;DA++){const cA=N[DA],nA=B.dot(q,cA),hA=B.dot(H,cA);let fA=Math.atan2(nA,hA);fA<0&&(fA+=e),c(j,fA),fA=Math.atan2(-nA,-hA),fA<0&&(fA+=e),c(j,fA)}j=j.sort(o);const Z=j.length;let O,AA;const tA=[],eA=[],iA=[];for(let DA=-1;DA<Z;DA++){const CA=j[DA<0?DA+Z:DA],cA=Math.sin(CA),nA=Math.cos(CA);B.scale(p,H,nA*y),B.scale(k,q,cA*y),B.add(p,p,k);const hA=B.add(B.create(),J,p),fA=B.add(B.create(),P,p);let NA=!1;if(DA>=0&&B.distance(hA,O)<I&&(NA=!0),!NA){if(DA>=0){tA.push(hA),eA.push(fA);const aA=[AA,fA,hA,O],xA=Q.create(aA);iA.push(xA)}O=hA,AA=fA}}eA.reverse(),iA.push(Q.create(tA)),iA.push(Q.create(eA));const sA=C.create(iA);u=n(u,sA)}),G.forEach(R=>{const F=R[0],N=R[1],J=N[0];let P=null,b=0;for(let Z=1;Z<N.length;Z++){const O=N[Z],AA=B.cross(p,J,O),tA=B.length(AA);tA>.05&&tA>b&&(b=tA,P=O)}P||(P=B.orthogonal(p,J));const H=B.cross(p,J,P);B.normalize(H,H);const q=B.cross(k,H,J),j=i({center:[F[0],F[1],F[2]],radius:y,segments:w,axes:[J,H,q]});u=n(u,j)}),E(u)};A.exports=h}}),Zbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/expandGeom3.js"(g,A){var I=yQ(),e=o$A(),t=Tbt(),B=(o,C)=>{const Q={delta:1,corners:"round",segments:12},{delta:i,corners:E,segments:n}=Object.assign({},Q,o);if(E!=="round")throw new Error('corners must be "round" for 3D geometries');if(I.toPolygons(C).length===0)throw new Error("the given geometry cannot be empty");o={delta:i,corners:E,segments:n};const r=t(o,C);return e(C,r)};A.exports=B}}),Obt=fg({"node_modules/@jscad/modeling/src/operations/expansions/expandPath2.js"(g,A){var I=adA(),e=Ci(),t=fQ(),B=ca(),o=hdA(),C=E=>{let{external:n,internal:s}=E;I(n)<0?n=n.reverse():s=s.reverse();const r=B.fromPoints({closed:!0},n),a=B.fromPoints({closed:!0},s),c=t.toSides(t.fromPoints(B.toPoints(r))),h=t.toSides(t.fromPoints(B.toPoints(a)));return c.push(...h),t.create(c)},Q=(E,n,s,r)=>{const{points:a,external:c,internal:h}=E,l=Math.floor(n/2),D=[],d=[];if(s==="round"&&l>0){const w=Math.PI/l,u=a[a.length-1],G=e.angle(e.subtract(e.create(),c[c.length-1],u)),m=a[0],p=e.angle(e.subtract(e.create(),h[0],m));for(let k=1;k<l;k++){let S=G+w*k,R=e.fromAngleRadians(e.create(),S);e.scale(R,R,r),e.add(R,R,u),D.push(R),S=p+w*k,R=e.fromAngleRadians(e.create(),S),e.scale(R,R,r),e.add(R,R,m),d.push(R)}}const y=[];return y.push(...c,...D,...h.reverse(),...d),t.fromPoints(y)},i=(E,n)=>{E=Object.assign({},{delta:1,corners:"edge",segments:16},E);const{delta:r,corners:a,segments:c}=E;if(r<=0)throw new Error("the given delta must be positive for paths");if(!(a==="edge"||a==="chamfer"||a==="round"))throw new Error('corners must be "edge", "chamfer", or "round"');const h=n.isClosed,l=B.toPoints(n);if(l.length===0)throw new Error("the given geometry cannot be empty");const D={points:l,external:o({delta:r,corners:a,segments:c,closed:h},l),internal:o({delta:-r,corners:a,segments:c,closed:h},l)};return n.isClosed?C(D):Q(D,c,a,r)};A.exports=i}}),C$A=fg({"node_modules/@jscad/modeling/src/operations/expansions/expand.js"(g,A){var I=TC(),e=fQ(),t=yQ(),B=ca(),o=vbt(),C=Zbt(),Q=Obt(),i=(E,...n)=>{if(n=I(n),n.length===0)throw new Error("wrong number of arguments");const s=n.map(r=>B.isA(r)?Q(E,r):e.isA(r)?o(E,r):t.isA(r)?C(E,r):r);return s.length===1?s[0]:s};A.exports=i}}),Wbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/offsetGeom2.js"(g,A){var I=fQ(),e=qXA(),t=hdA(),B=(o,C)=>{const Q={delta:1,corners:"edge",segments:0},{delta:i,corners:E,segments:n}=Object.assign({},Q,o);if(!(E==="edge"||E==="chamfer"||E==="round"))throw new Error('corners must be "edge", "chamfer", or "round"');const s=I.toOutlines(C),a=s.map(c=>(o={delta:s.reduce((D,d)=>D+e.arePointsInside(c,e.create(d)),0)%2===0?i:-i,corners:E,closed:!0,segments:n},t(o,c))).reduce((c,h)=>c.concat(I.toSides(I.fromPoints(h))),[]);return I.create(a)};A.exports=B}}),Vbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/offsetPath2.js"(g,A){var I=ca(),e=hdA(),t=(B,o)=>{const C={delta:1,corners:"edge",closed:o.isClosed,segments:16},{delta:Q,corners:i,closed:E,segments:n}=Object.assign({},C,B);if(!(i==="edge"||i==="chamfer"||i==="round"))throw new Error('corners must be "edge", "chamfer", or "round"');B={delta:Q,corners:i,closed:E,segments:n};const s=e(B,I.toPoints(o));return I.fromPoints({closed:E},s)};A.exports=t}}),jbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/offset.js"(g,A){var I=TC(),e=fQ(),t=ca(),B=Wbt(),o=Vbt(),C=(Q,...i)=>{if(i=I(i),i.length===0)throw new Error("wrong number of arguments");const E=i.map(n=>t.isA(n)?o(Q,n):e.isA(n)?B(Q,n):n);return E.length===1?E[0]:E};A.exports=C}}),ZdI=fg({"node_modules/@jscad/modeling/src/operations/expansions/index.js"(g,A){A.exports={expand:C$A(),offset:jbt()}}}),ldA=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeLinearGeom2.js"(g,A){var I=_a(),e=yo(),t=fQ(),B=CT(),o=cdA(),C=(Q,i)=>{const E={offset:[0,0,1],twistAngle:0,twistSteps:12,repair:!0};let{offset:n,twistAngle:s,twistSteps:r,repair:a}=Object.assign({},E,Q);if(r<1)throw new Error("twistSteps must be 1 or more");s===0&&(r=1);const c=e.clone(n),h=t.toSides(i);if(h.length===0)throw new Error("the given geometry cannot be empty");const l=B.fromSides(h);c[2]<0&&B.reverse(l,l);const D=I.create(),d=(y,w,u)=>{const G=w/r*s,m=e.scale(e.create(),c,w/r);return I.multiply(D,I.fromZRotation(D,G),I.fromTranslation(I.create(),m)),B.transform(D,u)};return Q={numberOfSlices:r+1,capStart:!0,capEnd:!0,repair:a,callback:d},o(Q,l)};A.exports=C}}),zbt=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeLinearPath2.js"(g,A){var I=fQ(),e=ca(),t=ldA(),B=(o,C)=>{if(!C.isClosed)throw new Error("extruded path must be closed");const Q=e.toPoints(C),i=I.fromPoints(Q);return t(o,i)};A.exports=B}}),Xbt=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeLinear.js"(g,A){var I=TC(),e=fQ(),t=ca(),B=ldA(),o=zbt(),C=(Q,...i)=>{const E={height:1,twistAngle:0,twistSteps:1,repair:!0},{height:n,twistAngle:s,twistSteps:r,repair:a}=Object.assign({},E,Q);if(i=I(i),i.length===0)throw new Error("wrong number of arguments");Q={offset:[0,0,n],twistAngle:s,twistSteps:r,repair:a};const c=i.map(h=>t.isA(h)?o(Q,h):e.isA(h)?B(Q,h):h);return c.length===1?c[0]:c};A.exports=C}}),$bt=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeRectangularPath2.js"(g,A){var I=ca(),e=C$A(),t=ldA(),B=(o,C)=>{const Q={size:1,height:1},{size:i,height:E}=Object.assign({},Q,o);if(o.delta=i,o.offset=[0,0,E],I.toPoints(C).length===0)throw new Error("the given geometry cannot be empty");const s=e(o,C);return t(o,s)};A.exports=B}}),A9t=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeRectangularGeom2.js"(g,A){var{area:I}=HgA(),e=fQ(),t=ca(),B=C$A(),o=ldA(),C=(Q,i)=>{const E={size:1,height:1},{size:n,height:s}=Object.assign({},E,Q);Q.delta=n,Q.offset=[0,0,s];const r=e.toOutlines(i);if(r.length===0)throw new Error("the given geometry cannot be empty");const c=r.map(l=>(I(l)<0&&l.reverse(),B(Q,t.fromPoints({closed:!0},l)))).reduce((l,D)=>l.concat(e.toSides(D)),[]),h=e.create(c);return o(Q,h)};A.exports=C}}),g9t=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeRectangular.js"(g,A){var I=TC(),e=fQ(),t=ca(),B=$bt(),o=A9t(),C=(Q,...i)=>{const E={size:1,height:1},{size:n,height:s}=Object.assign({},E,Q);if(i=I(i),i.length===0)throw new Error("wrong number of arguments");if(n<=0)throw new Error("size must be positive");if(s<=0)throw new Error("height must be positive");const r=i.map(a=>t.isA(a)?B(Q,a):e.isA(a)?o(Q,a):a);return r.length===1?r[0]:r};A.exports=C}}),I9t=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeHelical.js"(g,A){var{TAU:I}=nE(),e=_a(),t=fQ(),B=cdA(),o=CT(),C=(Q,i)=>{const E={angle:I,startAngle:0,pitch:10,height:0,endOffset:0,segmentsPerRotation:32};let{angle:n,startAngle:s,pitch:r,height:a,endOffset:c,segmentsPerRotation:h}=Object.assign({},E,Q);if(a!=0&&(r=a/(n/I)),h<3)throw new Error("The number of segments per rotation needs to be at least 3.");const D=t.toSides(i);if(D.length===0)throw new Error("The given geometry cannot be empty");const d=D.filter(k=>k[0][0]>=0);let y=o.fromSides(D);d.length===0&&(y=o.reverse(y));const w=Math.round(h/I*Math.abs(n)),u=w>=2?w:2,G=e.create(),m=e.create(),p=(k,S,R)=>{const F=s+n/u*S,N=c/u*S,J=(F-s)/I*r;return e.multiply(G,e.fromTranslation(e.create(),[N,0,J*Math.sign(n)]),e.fromXRotation(e.create(),-I/4*Math.sign(n))),e.multiply(m,e.fromZRotation(e.create(),F),G),o.transform(m,R)};return B({numberOfSlices:u+1,callback:p},y)};A.exports=C}}),e9t=fg({"node_modules/@jscad/modeling/src/operations/extrusions/project.js"(g,A){var I=TC(),e=WXA(),t=ix(),B=_a(),o=fQ(),C=yQ(),Q=_i(),i=B3(),E=TdI(),n=(r,a)=>{const c=t.fromNormalAndPoint(t.create(),r.axis,r.origin);if(Number.isNaN(c[0])||Number.isNaN(c[1])||Number.isNaN(c[2])||Number.isNaN(c[3]))throw new Error("project: invalid axis or origin");const h=i(a),l=h*h*Math.sqrt(3)/4;if(h===0)return o.create();const D=C.toPolygons(a);let d=[];for(let w=0;w<D.length;w++){const u=D[w].vertices.map(p=>t.projectionOfPoint(c,p)),G=Q.create(u),m=Q.plane(G);e(c,m)&&(Q.measureArea(G)<l||d.push(G))}if(!e(c,[0,0,1])){const w=B.fromVectorRotation(B.create(),c,[0,0,1]);d=d.map(u=>Q.transform(w,u))}d=d.sort((w,u)=>Q.measureArea(u)-Q.measureArea(w));const y=d.map(w=>o.fromPoints(w.vertices));return E(y)},s=(r,...a)=>{const c={axis:[0,0,1],origin:[0,0,0]},{axis:h,origin:l}=Object.assign({},c,r);if(a=I(a),a.length===0)throw new Error("wrong number of arguments");r={axis:h,origin:l};const D=a.map(d=>C.isA(d)?n(r,d):d);return D.length===1?D[0]:D};A.exports=s}}),VgA=fg({"node_modules/@jscad/modeling/src/operations/extrusions/index.js"(g,A){A.exports={extrudeFromSlices:cdA(),extrudeLinear:Xbt(),extrudeRectangular:g9t(),extrudeRotate:KdI(),extrudeHelical:I9t(),project:e9t(),slice:CT()}}}),Q$A=fg({"node_modules/@jscad/modeling/src/operations/hulls/hullPoints2.js"(g,A){var I=Ci(),e=o=>{let C=I.fromValues(1/0,1/0);o.forEach(E=>{(E[1]<C[1]||E[1]===C[1]&&E[0]<C[0])&&(C=E)});const Q=[];o.forEach(E=>{const n=B(E[1]-C[1],E[0]-C[0]),s=I.squaredDistance(E,C);Q.push({point:E,angle:n,distSq:s})}),Q.sort((E,n)=>E.angle!==n.angle?E.angle-n.angle:E.distSq-n.distSq);const i=[];return Q.forEach(E=>{let n=i.length;for(;n>1&&t(i[n-2],i[n-1],E.point)<=Number.EPSILON;)i.pop(),n=i.length;i.push(E.point)}),i},t=(o,C,Q)=>(C[0]-o[0])*(Q[1]-o[1])-(C[1]-o[1])*(Q[0]-o[0]),B=(o,C)=>o===0&&C===0?-1/0:-C/o;A.exports=e}}),i$A=fg({"node_modules/@jscad/modeling/src/operations/hulls/toUniquePoints.js"(g,A){var I=fQ(),e=yQ(),t=ca(),B=o=>{const C=new Set,Q=[],i=E=>{const n=E.toString();C.has(n)||(Q.push(E),C.add(n))};return o.forEach(E=>{I.isA(E)?I.toPoints(E).forEach(i):e.isA(E)?e.toPoints(E).forEach(n=>n.forEach(i)):t.isA(E)&&t.toPoints(E).forEach(i)}),Q};A.exports=B}}),t9t=fg({"node_modules/@jscad/modeling/src/operations/hulls/hullPath2.js"(g,A){var I=TC(),e=ca(),t=Q$A(),B=i$A(),o=(...C)=>{C=I(C);const Q=B(C),i=t(Q);return e.fromPoints({closed:!0},i)};A.exports=o}}),B9t=fg({"node_modules/@jscad/modeling/src/operations/hulls/hullGeom2.js"(g,A){var I=TC(),e=fQ(),t=Q$A(),B=i$A(),o=(...C)=>{C=I(C);const Q=B(C),i=t(Q);return i.length<3?e.create():e.fromPoints(i)};A.exports=o}}),o9t=fg({"node_modules/@jscad/modeling/src/operations/hulls/hullGeom3.js"(g,A){var I=TC(),e=yQ(),t=i$A(),B=t$A(),o=(...C)=>{C=I(C);const Q=t(C);return Q.length===0?e.create():e.create(B(Q))};A.exports=o}}),OdI=fg({"node_modules/@jscad/modeling/src/operations/hulls/hull.js"(g,A){var I=TC(),e=ZgA(),t=fQ(),B=yQ(),o=ca(),C=t9t(),Q=B9t(),i=o9t(),E=(...n)=>{if(n=I(n),n.length===0)throw new Error("wrong number of arguments");if(!e(n))throw new Error("only hulls of the same type are supported");const s=n[0];return o.isA(s)?C(n):t.isA(s)?Q(n):B.isA(s)?i(n):s};A.exports=E}}),C9t=fg({"node_modules/@jscad/modeling/src/operations/hulls/hullChain.js"(g,A){var I=TC(),e=o$A(),t=OdI(),B=(...o)=>{if(o=I(o),o.length<2)throw new Error("wrong number of arguments");const C=[];for(let Q=1;Q<o.length;Q++)C.push(t(o[Q-1],o[Q]));return e(C)};A.exports=B}}),Q9t=fg({"node_modules/@jscad/modeling/src/operations/hulls/index.js"(g,A){A.exports={hull:OdI(),hullChain:C9t(),hullPoints2:Q$A(),hullPoints3:t$A()}}}),i9t=fg({"node_modules/@jscad/modeling/src/operations/minkowski/index.js"(g,A){A.exports={minkowskiSum:vdI()}}}),WdI=fg({"node_modules/@jscad/modeling/src/operations/modifiers/snapPolygons.js"(g,A){var I=yo(),e=_i(),t=(o,C)=>{const Q=Math.abs(e.measureArea(C));return Number.isFinite(Q)&&Q>o},B=(o,C)=>{let Q=C.map(E=>{const n=E.vertices.map(a=>I.snap(I.create(),a,o)),s=[];for(let a=0;a<n.length;a++){const c=(a+1)%n.length;I.equals(n[a],n[c])||s.push(n[a])}const r=e.create(s);return E.color&&(r.color=E.color),r});const i=o*o*Math.sqrt(3)/4;return Q=Q.filter(E=>t(i,E)),Q};A.exports=B}}),E9t=fg({"node_modules/@jscad/modeling/src/operations/modifiers/mergePolygons.js"(g,A){var I=WXA(),e=yo(),t=_i(),B=l=>{const D=t.toPoints(l),d=[];for(let y=0;y<D.length;y++){const w=(y+1)%D.length,u={v1:D[y],v2:D[w]};d.push(u)}for(let y=0;y<d.length;y++){const w=(y+1)%D.length;d[y].next=d[w],d[w].prev=d[y]}return d},o=(l,D)=>{const d=`${D.v1}:${D.v2}`;l.set(d,D)},C=(l,D)=>{const d=`${D.v1}:${D.v2}`;l.delete(d)},Q=(l,D)=>{const d=`${D.v2}:${D.v1}`;return l.get(d)},i=(l,D,d)=>{let y=l.prev.v1,w=l.prev.v2,u=D.next.v2;const G=s(y,w,u,d);y=D.prev.v1,w=D.prev.v2,u=l.next.v2;const m=s(y,w,u,d);return[G,m]},E=e.create(),n=e.create(),s=(l,D,d,y)=>{const w=e.subtract(E,D,l),u=e.subtract(n,d,D);return e.cross(w,w,u),e.dot(w,y)},r=l=>{let D;const d=[];for(;l.next;){const y=l.next;d.push(l.v1),l.v1=null,l.v2=null,l.next=null,l.prev=null,l=y}return d.length>0&&(D=t.create(d)),D},a=l=>{if(l.length<2)return l;const D=l[0].plane,d=l.slice(),y=new Map;for(;d.length>0;){const u=d.shift(),G=B(u);for(let m=0;m<G.length;m++){const p=G[m],k=Q(y,p);if(k){const S=i(p,k,D);if(S[0]>=0&&S[1]>=0){const R=k.next,F=p.next;p.prev.next=k.next,p.next.prev=k.prev,k.prev.next=p.next,k.next.prev=p.prev,p.v1=null,p.v2=null,p.next=null,p.prev=null,C(y,k),k.v1=null,k.v2=null,k.next=null,k.prev=null;const N=(J,P,b)=>{const H={v1:b.v1,v2:P.v2,next:P.next,prev:b.prev};b.prev.next=H,P.next.prev=H,C(J,P),P.v1=null,P.v2=null,P.next=null,P.prev=null,C(J,b),b.v1=null,b.v2=null,b.next=null,b.prev=null};S[0]===0&&N(y,R,R.prev),S[1]===0&&N(y,F,F.prev)}}else p.next&&o(y,p)}}const w=[];return y.forEach(u=>{const G=r(u);G&&w.push(G)}),y.clear(),w},c=(l,D)=>Math.abs(l[3]-D[3])<15e-8?I(l,D):!1,h=(l,D)=>{const d=[];D.forEach(w=>{const u=d.find(G=>c(G[0],t.plane(w)));u?u[1].push(w):d.push([t.plane(w),[w]])});let y=[];return d.forEach(w=>{const u=w[1],G=a(u);y=y.concat(G)}),y};A.exports=h}}),n9t=fg({"node_modules/@jscad/modeling/src/operations/modifiers/insertTjunctions.js"(g,A){var I=nE(),e=yo(),t=_i(),B=i=>`${i}`,o=(i,E,n,s,r,a)=>{const c=B(s),h=B(r),l=`${c}/${h}`,D=`${h}/${c}`;if(i.has(D))return C(i,E,n,r,s,null),null;const d={vertex0:s,vertex1:r,polygonindex:a};return i.has(l)?i.get(l).push(d):i.set(l,[d]),E.has(c)?E.get(c).push(l):E.set(c,[l]),n.has(h)?n.get(h).push(l):n.set(h,[l]),l},C=(i,E,n,s,r,a)=>{const c=B(s),h=B(r),l=`${c}/${h}`;let D=-1;const d=i.get(l);for(let y=0;y<d.length;y++){const w=d[y];let u=B(w.vertex0);if(u===c&&(u=B(w.vertex1),u===h&&!(a!==null&&w.polygonindex!==a))){D=y;break}}d.splice(D,1),d.length===0&&i.delete(l),D=E.get(c).indexOf(l),E.get(c).splice(D,1),E.get(c).length===0&&E.delete(c),D=n.get(h).indexOf(l),n.get(h).splice(D,1),n.get(h).length===0&&n.delete(h)},Q=i=>{const E=new Map;for(let n=0;n<i.length;n++){const s=i[n],r=s.vertices.length;if(r>=3){let a=s.vertices[0],c=B(a);for(let h=0;h<r;h++){let l=h+1;l===r&&(l=0);const D=s.vertices[l],d=B(D),y=`${c}/${d}`,w=`${d}/${c}`;if(E.has(w)){const u=E.get(w);u.splice(-1,1),u.length===0&&E.delete(w)}else{const u={vertex0:a,vertex1:D,polygonindex:n};E.has(y)?E.get(y).push(u):E.set(y,[u])}a=D,c=d}}else console.warn("warning: invalid polygon found during insertTjunctions")}if(E.size>0){const n=new Map,s=new Map,r=new Map;for(const[c,h]of E)r.set(c,!0),h.forEach(l=>{const D=B(l.vertex0),d=B(l.vertex1);n.has(D)?n.get(D).push(c):n.set(D,[c]),s.has(d)?s.get(d).push(c):s.set(d,[c])});const a=i.slice(0);for(;E.size!==0;){for(const h of E.keys())r.set(h,!0);let c=!1;for(;;){const h=Array.from(r.keys());if(h.length===0)break;const l=h[0];let D=!0;if(E.has(l)){const y=E.get(l)[0];for(let w=0;w<2;w++){const u=w===0?y.vertex0:y.vertex1,G=w===0?y.vertex1:y.vertex0,m=B(u),p=B(G);let k=[];w===0?s.has(m)&&(k=s.get(m)):n.has(m)&&(k=n.get(m));for(let S=0;S<k.length;S++){const R=k[S],F=E.get(R)[0],N=w===0?F.vertex0:F.vertex1;if(w===0?F.vertex1:F.vertex0,B(N)===p){C(E,n,s,u,G,null),C(E,n,s,G,u,null),D=!1,w=2,c=!0;break}else{const P=u,b=G,H=N,q=e.subtract(e.create(),H,P),j=e.dot(e.subtract(e.create(),b,P),q)/e.dot(q,q);if(j>0&&j<1){const Z=e.scale(e.create(),q,j);if(e.add(Z,Z,P),e.squaredDistance(Z,b)<I.EPS*I.EPS){const AA=F.polygonindex,tA=a[AA],eA=B(F.vertex1);let iA=-1;for(let nA=0;nA<tA.vertices.length;nA++)if(B(tA.vertices[nA])===eA){iA=nA;break}const sA=tA.vertices.slice(0);sA.splice(iA,0,G);const DA=t.create(sA);a[AA]=DA,C(E,n,s,F.vertex0,F.vertex1,AA);const CA=o(E,n,s,F.vertex0,G,AA),cA=o(E,n,s,G,F.vertex1,AA);CA!==null&&r.set(CA,!0),cA!==null&&r.set(cA,!0),D=!1,w=2,c=!0;break}}}}}}D&&r.delete(l)}if(!c)break}i=a}return E.clear(),i};A.exports=Q}}),s9t=fg({"node_modules/@jscad/modeling/src/operations/modifiers/triangulatePolygons.js"(g,A){var I=yo(),e=_i(),t=(o,C,Q)=>{const i=C.vertices.length;if(i>3){if(i>4){const s=[0,0,0];C.vertices.forEach(r=>I.add(s,s,r)),I.snap(s,I.divide(s,s,[i,i,i]),o);for(let r=0;r<i;r++){const a=e.create([s,C.vertices[r],C.vertices[(r+1)%i]]);C.color&&(a.color=C.color),Q.push(a)}return}const E=e.create([C.vertices[0],C.vertices[1],C.vertices[2]]),n=e.create([C.vertices[0],C.vertices[2],C.vertices[3]]);C.color&&(E.color=C.color,n.color=C.color),Q.push(E,n);return}Q.push(C)},B=(o,C)=>{const Q=[];return C.forEach(i=>{t(o,i,Q)}),Q};A.exports=B}}),a9t=fg({"node_modules/@jscad/modeling/src/operations/modifiers/generalize.js"(g,A){var I=TC(),e=B3(),t=fQ(),B=yQ(),o=ca(),C=WdI(),Q=E9t(),i=n9t(),E=s9t(),n=(c,h)=>h,s=(c,h)=>h,r=(c,h)=>{const l={snap:!1,simplify:!1,triangulate:!1},{snap:D,simplify:d,triangulate:y}=Object.assign({},l,c),w=e(h);let u=B.toPolygons(h);D&&(u=C(w,u)),d&&(u=Q(w,u)),y&&(u=i(u),u=E(w,u));const G=Object.assign({},h);return G.polygons=u,G},a=(c,...h)=>{if(h=I(h),h.length===0)throw new Error("wrong number of arguments");const l=h.map(D=>{if(o.isA(D))return n(c,D);if(t.isA(D))return s(c,D);if(B.isA(D))return r(c,D);throw new Error("invalid geometry")});return l.length===1?l[0]:l};A.exports=a}}),r9t=fg({"node_modules/@jscad/modeling/src/operations/modifiers/snap.js"(g,A){var I=TC(),e=Ci(),t=fQ(),B=yQ(),o=ca(),C=B3(),Q=WdI(),i=r=>{const a=C(r),h=o.toPoints(r).map(l=>e.snap(e.create(),l,a));return o.create(h)},E=r=>{const a=C(r);let h=t.toSides(r).map(l=>[e.snap(e.create(),l[0],a),e.snap(e.create(),l[1],a)]);return h=h.filter(l=>!e.equals(l[0],l[1])),t.create(h)},n=r=>{const a=C(r),c=B.toPolygons(r),h=Q(a,c);return B.create(h)},s=(...r)=>{if(r=I(r),r.length===0)throw new Error("wrong number of arguments");const a=r.map(c=>o.isA(c)?i(c):t.isA(c)?E(c):B.isA(c)?n(c):c);return a.length===1?a[0]:a};A.exports=s}}),c9t=fg({"node_modules/@jscad/modeling/src/operations/modifiers/index.js"(g,A){A.exports={generalize:a9t(),snap:r9t(),retessellate:OgA()}}}),h9t=fg({"node_modules/@jscad/modeling/src/utils/padArrayToLength.js"(g,A){var I=(e,t,B)=>{for(e=e.slice();e.length<B;)e.push(t);return e};A.exports=I}}),l9t=fg({"node_modules/@jscad/modeling/src/operations/transforms/align.js"(g,A){var I=TC(),e=h9t(),t=jXA(),{translate:B}=$_(),o=E=>{if(!Array.isArray(E.modes)||E.modes.length>3)throw new Error("align(): modes must be an array of length <= 3");if(E.modes=e(E.modes,"none",3),E.modes.filter(n=>["center","max","min","none"].includes(n)).length!==3)throw new Error('align(): all modes must be one of "center", "max" or "min"');if(!Array.isArray(E.relativeTo)||E.relativeTo.length>3)throw new Error("align(): relativeTo must be an array of length <= 3");if(E.relativeTo=e(E.relativeTo,0,3),E.relativeTo.filter(n=>Number.isFinite(n)||n==null).length!==3)throw new Error("align(): all relativeTo values must be a number, or null.");if(typeof E.grouped!="boolean")throw new Error("align(): grouped must be a boolean value.");return E},C=(E,n,s)=>{for(let r=0;r<3;r++)E[r]==null&&(n[r]==="center"?E[r]=(s[0][r]+s[1][r])/2:n[r]==="max"?E[r]=s[1][r]:n[r]==="min"&&(E[r]=s[0][r]));return E},Q=(E,n,s)=>{const r=t(E),a=[0,0,0];for(let c=0;c<3;c++)n[c]==="center"?a[c]=s[c]-(r[0][c]+r[1][c])/2:n[c]==="max"?a[c]=s[c]-r[1][c]:n[c]==="min"&&(a[c]=s[c]-r[0][c]);return B(a,E)},i=(E,...n)=>{E=Object.assign({},{modes:["center","center","min"],relativeTo:[0,0,0],grouped:!1},E),E=o(E);let{modes:r,relativeTo:a,grouped:c}=E;if(n=I(n),n.length===0)throw new Error("align(): No geometries were provided to act upon");if(a.filter(h=>h==null).length){const h=t(n);a=C(a,r,h)}return c?n=Q(n,r,a):n=n.map(h=>Q(h,r,a)),n.length===1?n[0]:n};A.exports=i}}),DdA=fg({"node_modules/@jscad/modeling/src/operations/transforms/center.js"(g,A){var I=TC(),e=fQ(),t=yQ(),B=ca(),o=z_(),{translate:C}=$_(),Q=(r,a)=>{const c={axes:[!0,!0,!0],relativeTo:[0,0,0]},{axes:h,relativeTo:l}=Object.assign({},c,r),D=o(a),d=[0,0,0];return h[0]&&(d[0]=l[0]-(D[0][0]+(D[1][0]-D[0][0])/2)),h[1]&&(d[1]=l[1]-(D[0][1]+(D[1][1]-D[0][1])/2)),h[2]&&(d[2]=l[2]-(D[0][2]+(D[1][2]-D[0][2])/2)),C(d,a)},i=(r,...a)=>{const c={axes:[!0,!0,!0],relativeTo:[0,0,0]},{axes:h,relativeTo:l}=Object.assign({},c,r);if(a=I(a),a.length===0)throw new Error("wrong number of arguments");if(l.length!==3)throw new Error("relativeTo must be an array of length 3");r={axes:h,relativeTo:l};const D=a.map(d=>B.isA(d)||e.isA(d)||t.isA(d)?Q(r,d):d);return D.length===1?D[0]:D},E=(...r)=>i({axes:[!0,!1,!1]},r),n=(...r)=>i({axes:[!1,!0,!1]},r),s=(...r)=>i({axes:[!1,!1,!0]},r);A.exports={center:i,centerX:E,centerY:n,centerZ:s}}}),ddA=fg({"node_modules/@jscad/modeling/src/operations/transforms/scale.js"(g,A){var I=TC(),e=_a(),t=fQ(),B=yQ(),o=ca(),C=(n,...s)=>{if(!Array.isArray(n))throw new Error("factors must be an array");if(s=I(s),s.length===0)throw new Error("wrong number of arguments");for(n=n.slice();n.length<3;)n.push(1);if(n[0]<=0||n[1]<=0||n[2]<=0)throw new Error("factors must be positive");const r=e.fromScaling(e.create(),n),a=s.map(c=>o.isA(c)?o.transform(r,c):t.isA(c)?t.transform(r,c):B.isA(c)?B.transform(r,c):c);return a.length===1?a[0]:a},Q=(n,...s)=>C([n,1,1],s),i=(n,...s)=>C([1,n,1],s),E=(n,...s)=>C([1,1,n],s);A.exports={scale:C,scaleX:Q,scaleY:i,scaleZ:E}}}),D9t=fg({"node_modules/@jscad/modeling/src/operations/transforms/transform.js"(g,A){var I=TC(),e=fQ(),t=yQ(),B=ca(),o=(C,...Q)=>{if(Q=I(Q),Q.length===0)throw new Error("wrong number of arguments");const i=Q.map(E=>B.isA(E)?B.transform(C,E):e.isA(E)?e.transform(C,E):t.isA(E)?t.transform(C,E):E);return i.length===1?i[0]:i};A.exports=o}}),g5=fg({"node_modules/@jscad/modeling/src/operations/transforms/index.js"(g,A){A.exports={align:l9t(),center:DdA().center,centerX:DdA().centerX,centerY:DdA().centerY,centerZ:DdA().centerZ,mirror:qgA().mirror,mirrorX:qgA().mirrorX,mirrorY:qgA().mirrorY,mirrorZ:qgA().mirrorZ,rotate:TgA().rotate,rotateX:TgA().rotateX,rotateY:TgA().rotateY,rotateZ:TgA().rotateZ,scale:ddA().scale,scaleX:ddA().scaleX,scaleY:ddA().scaleY,scaleZ:ddA().scaleZ,transform:D9t(),translate:$_().translate,translateX:$_().translateX,translateY:$_().translateY,translateZ:$_().translateZ}}}),ydA=fg({"node_modules/@jscad/modeling/src/index.js"(g,A){A.exports={colors:sdA(),curves:a5t(),geometries:TXA(),maths:L5t(),measurements:pdI(),primitives:A5(),text:Gbt(),utils:_dI(),booleans:WgA(),expansions:ZdI(),extrusions:VgA(),hulls:Q9t(),minkowski:i9t(),modifiers:c9t(),transforms:g5()}}}),VdI={};wR(VdI,{ANGLE_ORDER:()=>E$A,ARRAY_TYPE:()=>Si,EPSILON:()=>ao,RANDOM:()=>J2,equals:()=>u9t,round:()=>Ex,setMatrixArrayType:()=>d9t,toDegree:()=>w9t,toRadian:()=>y9t});function Ex(g){return g>=0?Math.round(g):g%.5===0?Math.floor(g):Math.round(g)}function d9t(g){Si=g}function y9t(g){return g*jdI}function w9t(g){return g*zdI}function u9t(g,A){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ao;return Math.abs(g-A)<=I*Math.max(1,Math.abs(g),Math.abs(A))}var ao,Si,J2,E$A,jdI,zdI,nx=yR({"node_modules/gl-matrix/esm/common.js"(){ao=1e-6,Si=typeof Float32Array<"u"?Float32Array:Array,J2=Math.random,E$A="zyx",jdI=Math.PI/180,zdI=180/Math.PI}}),XdI={};wR(XdI,{LDU:()=>Y9t,add:()=>_9t,adjoint:()=>N9t,clone:()=>m9t,copy:()=>p9t,create:()=>G9t,determinant:()=>x9t,equals:()=>H9t,exactEquals:()=>b9t,frob:()=>L9t,fromRotation:()=>J9t,fromScaling:()=>K9t,fromValues:()=>M9t,identity:()=>k9t,invert:()=>R9t,mul:()=>gyI,multiply:()=>$dI,multiplyScalar:()=>v9t,multiplyScalarAndAdd:()=>q9t,rotate:()=>F9t,scale:()=>U9t,set:()=>S9t,str:()=>P9t,sub:()=>IyI,subtract:()=>AyI,transpose:()=>f9t});function G9t(){var g=new Si(4);return Si!=Float32Array&&(g[1]=0,g[2]=0),g[0]=1,g[3]=1,g}function m9t(g){var A=new Si(4);return A[0]=g[0],A[1]=g[1],A[2]=g[2],A[3]=g[3],A}function p9t(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g}function k9t(g){return g[0]=1,g[1]=0,g[2]=0,g[3]=1,g}function M9t(g,A,I,e){var t=new Si(4);return t[0]=g,t[1]=A,t[2]=I,t[3]=e,t}function S9t(g,A,I,e,t){return g[0]=A,g[1]=I,g[2]=e,g[3]=t,g}function f9t(g,A){if(g===A){var I=A[1];g[1]=A[2],g[2]=I}else g[0]=A[0],g[1]=A[2],g[2]=A[1],g[3]=A[3];return g}function R9t(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=I*B-t*e;return o?(o=1/o,g[0]=B*o,g[1]=-e*o,g[2]=-t*o,g[3]=I*o,g):null}function N9t(g,A){var I=A[0];return g[0]=A[3],g[1]=-A[1],g[2]=-A[2],g[3]=I,g}function x9t(g){return g[0]*g[3]-g[2]*g[1]}function $dI(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=I[0],Q=I[1],i=I[2],E=I[3];return g[0]=e*C+B*Q,g[1]=t*C+o*Q,g[2]=e*i+B*E,g[3]=t*i+o*E,g}function F9t(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=Math.sin(I),Q=Math.cos(I);return g[0]=e*Q+B*C,g[1]=t*Q+o*C,g[2]=e*-C+B*Q,g[3]=t*-C+o*Q,g}function U9t(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=I[0],Q=I[1];return g[0]=e*C,g[1]=t*C,g[2]=B*Q,g[3]=o*Q,g}function J9t(g,A){var I=Math.sin(A),e=Math.cos(A);return g[0]=e,g[1]=I,g[2]=-I,g[3]=e,g}function K9t(g,A){return g[0]=A[0],g[1]=0,g[2]=0,g[3]=A[1],g}function P9t(g){return"mat2("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+")"}function L9t(g){return Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]+g[3]*g[3])}function Y9t(g,A,I,e){return g[2]=e[2]/e[0],I[0]=e[0],I[1]=e[1],I[3]=e[3]-g[2]*I[1],[g,A,I]}function _9t(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g[2]=A[2]+I[2],g[3]=A[3]+I[3],g}function AyI(g,A,I){return g[0]=A[0]-I[0],g[1]=A[1]-I[1],g[2]=A[2]-I[2],g[3]=A[3]-I[3],g}function b9t(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]&&g[3]===A[3]}function H9t(g,A){var I=g[0],e=g[1],t=g[2],B=g[3],o=A[0],C=A[1],Q=A[2],i=A[3];return Math.abs(I-o)<=ao*Math.max(1,Math.abs(I),Math.abs(o))&&Math.abs(e-C)<=ao*Math.max(1,Math.abs(e),Math.abs(C))&&Math.abs(t-Q)<=ao*Math.max(1,Math.abs(t),Math.abs(Q))&&Math.abs(B-i)<=ao*Math.max(1,Math.abs(B),Math.abs(i))}function v9t(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g[3]=A[3]*I,g}function q9t(g,A,I,e){return g[0]=A[0]+I[0]*e,g[1]=A[1]+I[1]*e,g[2]=A[2]+I[2]*e,g[3]=A[3]+I[3]*e,g}var gyI,IyI,T9t=yR({"node_modules/gl-matrix/esm/mat2.js"(){nx(),gyI=$dI,IyI=AyI}}),eyI={};wR(eyI,{add:()=>QHt,clone:()=>O9t,copy:()=>W9t,create:()=>Z9t,determinant:()=>$9t,equals:()=>sHt,exactEquals:()=>nHt,frob:()=>CHt,fromRotation:()=>eHt,fromScaling:()=>tHt,fromTranslation:()=>BHt,fromValues:()=>j9t,identity:()=>V9t,invert:()=>X9t,mul:()=>oyI,multiply:()=>tyI,multiplyScalar:()=>iHt,multiplyScalarAndAdd:()=>EHt,rotate:()=>AHt,scale:()=>gHt,set:()=>z9t,str:()=>oHt,sub:()=>CyI,subtract:()=>ByI,translate:()=>IHt});function Z9t(){var g=new Si(6);return Si!=Float32Array&&(g[1]=0,g[2]=0,g[4]=0,g[5]=0),g[0]=1,g[3]=1,g}function O9t(g){var A=new Si(6);return A[0]=g[0],A[1]=g[1],A[2]=g[2],A[3]=g[3],A[4]=g[4],A[5]=g[5],A}function W9t(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g[4]=A[4],g[5]=A[5],g}function V9t(g){return g[0]=1,g[1]=0,g[2]=0,g[3]=1,g[4]=0,g[5]=0,g}function j9t(g,A,I,e,t,B){var o=new Si(6);return o[0]=g,o[1]=A,o[2]=I,o[3]=e,o[4]=t,o[5]=B,o}function z9t(g,A,I,e,t,B,o){return g[0]=A,g[1]=I,g[2]=e,g[3]=t,g[4]=B,g[5]=o,g}function X9t(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=A[4],C=A[5],Q=I*B-e*t;return Q?(Q=1/Q,g[0]=B*Q,g[1]=-e*Q,g[2]=-t*Q,g[3]=I*Q,g[4]=(t*C-B*o)*Q,g[5]=(e*o-I*C)*Q,g):null}function $9t(g){return g[0]*g[3]-g[1]*g[2]}function tyI(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=I[0],E=I[1],n=I[2],s=I[3],r=I[4],a=I[5];return g[0]=e*i+B*E,g[1]=t*i+o*E,g[2]=e*n+B*s,g[3]=t*n+o*s,g[4]=e*r+B*a+C,g[5]=t*r+o*a+Q,g}function AHt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=Math.sin(I),E=Math.cos(I);return g[0]=e*E+B*i,g[1]=t*E+o*i,g[2]=e*-i+B*E,g[3]=t*-i+o*E,g[4]=C,g[5]=Q,g}function gHt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=I[0],E=I[1];return g[0]=e*i,g[1]=t*i,g[2]=B*E,g[3]=o*E,g[4]=C,g[5]=Q,g}function IHt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=I[0],E=I[1];return g[0]=e,g[1]=t,g[2]=B,g[3]=o,g[4]=e*i+B*E+C,g[5]=t*i+o*E+Q,g}function eHt(g,A){var I=Math.sin(A),e=Math.cos(A);return g[0]=e,g[1]=I,g[2]=-I,g[3]=e,g[4]=0,g[5]=0,g}function tHt(g,A){return g[0]=A[0],g[1]=0,g[2]=0,g[3]=A[1],g[4]=0,g[5]=0,g}function BHt(g,A){return g[0]=1,g[1]=0,g[2]=0,g[3]=1,g[4]=A[0],g[5]=A[1],g}function oHt(g){return"mat2d("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+", "+g[4]+", "+g[5]+")"}function CHt(g){return Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]+g[3]*g[3]+g[4]*g[4]+g[5]*g[5]+1)}function QHt(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g[2]=A[2]+I[2],g[3]=A[3]+I[3],g[4]=A[4]+I[4],g[5]=A[5]+I[5],g}function ByI(g,A,I){return g[0]=A[0]-I[0],g[1]=A[1]-I[1],g[2]=A[2]-I[2],g[3]=A[3]-I[3],g[4]=A[4]-I[4],g[5]=A[5]-I[5],g}function iHt(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g[3]=A[3]*I,g[4]=A[4]*I,g[5]=A[5]*I,g}function EHt(g,A,I,e){return g[0]=A[0]+I[0]*e,g[1]=A[1]+I[1]*e,g[2]=A[2]+I[2]*e,g[3]=A[3]+I[3]*e,g[4]=A[4]+I[4]*e,g[5]=A[5]+I[5]*e,g}function nHt(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]&&g[3]===A[3]&&g[4]===A[4]&&g[5]===A[5]}function sHt(g,A){var I=g[0],e=g[1],t=g[2],B=g[3],o=g[4],C=g[5],Q=A[0],i=A[1],E=A[2],n=A[3],s=A[4],r=A[5];return Math.abs(I-Q)<=ao*Math.max(1,Math.abs(I),Math.abs(Q))&&Math.abs(e-i)<=ao*Math.max(1,Math.abs(e),Math.abs(i))&&Math.abs(t-E)<=ao*Math.max(1,Math.abs(t),Math.abs(E))&&Math.abs(B-n)<=ao*Math.max(1,Math.abs(B),Math.abs(n))&&Math.abs(o-s)<=ao*Math.max(1,Math.abs(o),Math.abs(s))&&Math.abs(C-r)<=ao*Math.max(1,Math.abs(C),Math.abs(r))}var oyI,CyI,aHt=yR({"node_modules/gl-matrix/esm/mat2d.js"(){nx(),oyI=tyI,CyI=ByI}}),QyI={};wR(QyI,{add:()=>KHt,adjoint:()=>uHt,clone:()=>cHt,copy:()=>hHt,create:()=>iyI,determinant:()=>GHt,equals:()=>_Ht,exactEquals:()=>YHt,frob:()=>JHt,fromMat2d:()=>RHt,fromMat4:()=>rHt,fromQuat:()=>NHt,fromRotation:()=>SHt,fromScaling:()=>fHt,fromTranslation:()=>MHt,fromValues:()=>lHt,identity:()=>dHt,invert:()=>wHt,mul:()=>syI,multiply:()=>EyI,multiplyScalar:()=>PHt,multiplyScalarAndAdd:()=>LHt,normalFromMat4:()=>xHt,projection:()=>FHt,rotate:()=>pHt,scale:()=>kHt,set:()=>DHt,str:()=>UHt,sub:()=>ayI,subtract:()=>nyI,translate:()=>mHt,transpose:()=>yHt});function iyI(){var g=new Si(9);return Si!=Float32Array&&(g[1]=0,g[2]=0,g[3]=0,g[5]=0,g[6]=0,g[7]=0),g[0]=1,g[4]=1,g[8]=1,g}function rHt(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[4],g[4]=A[5],g[5]=A[6],g[6]=A[8],g[7]=A[9],g[8]=A[10],g}function cHt(g){var A=new Si(9);return A[0]=g[0],A[1]=g[1],A[2]=g[2],A[3]=g[3],A[4]=g[4],A[5]=g[5],A[6]=g[6],A[7]=g[7],A[8]=g[8],A}function hHt(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g[4]=A[4],g[5]=A[5],g[6]=A[6],g[7]=A[7],g[8]=A[8],g}function lHt(g,A,I,e,t,B,o,C,Q){var i=new Si(9);return i[0]=g,i[1]=A,i[2]=I,i[3]=e,i[4]=t,i[5]=B,i[6]=o,i[7]=C,i[8]=Q,i}function DHt(g,A,I,e,t,B,o,C,Q,i){return g[0]=A,g[1]=I,g[2]=e,g[3]=t,g[4]=B,g[5]=o,g[6]=C,g[7]=Q,g[8]=i,g}function dHt(g){return g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=1,g[5]=0,g[6]=0,g[7]=0,g[8]=1,g}function yHt(g,A){if(g===A){var I=A[1],e=A[2],t=A[5];g[1]=A[3],g[2]=A[6],g[3]=I,g[5]=A[7],g[6]=e,g[7]=t}else g[0]=A[0],g[1]=A[3],g[2]=A[6],g[3]=A[1],g[4]=A[4],g[5]=A[7],g[6]=A[2],g[7]=A[5],g[8]=A[8];return g}function wHt(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=A[4],C=A[5],Q=A[6],i=A[7],E=A[8],n=E*o-C*i,s=-E*B+C*Q,r=i*B-o*Q,a=I*n+e*s+t*r;return a?(a=1/a,g[0]=n*a,g[1]=(-E*e+t*i)*a,g[2]=(C*e-t*o)*a,g[3]=s*a,g[4]=(E*I-t*Q)*a,g[5]=(-C*I+t*B)*a,g[6]=r*a,g[7]=(-i*I+e*Q)*a,g[8]=(o*I-e*B)*a,g):null}function uHt(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=A[4],C=A[5],Q=A[6],i=A[7],E=A[8];return g[0]=o*E-C*i,g[1]=t*i-e*E,g[2]=e*C-t*o,g[3]=C*Q-B*E,g[4]=I*E-t*Q,g[5]=t*B-I*C,g[6]=B*i-o*Q,g[7]=e*Q-I*i,g[8]=I*o-e*B,g}function GHt(g){var A=g[0],I=g[1],e=g[2],t=g[3],B=g[4],o=g[5],C=g[6],Q=g[7],i=g[8];return A*(i*B-o*Q)+I*(-i*t+o*C)+e*(Q*t-B*C)}function EyI(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=A[8],s=I[0],r=I[1],a=I[2],c=I[3],h=I[4],l=I[5],D=I[6],d=I[7],y=I[8];return g[0]=s*e+r*o+a*i,g[1]=s*t+r*C+a*E,g[2]=s*B+r*Q+a*n,g[3]=c*e+h*o+l*i,g[4]=c*t+h*C+l*E,g[5]=c*B+h*Q+l*n,g[6]=D*e+d*o+y*i,g[7]=D*t+d*C+y*E,g[8]=D*B+d*Q+y*n,g}function mHt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=A[8],s=I[0],r=I[1];return g[0]=e,g[1]=t,g[2]=B,g[3]=o,g[4]=C,g[5]=Q,g[6]=s*e+r*o+i,g[7]=s*t+r*C+E,g[8]=s*B+r*Q+n,g}function pHt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=A[8],s=Math.sin(I),r=Math.cos(I);return g[0]=r*e+s*o,g[1]=r*t+s*C,g[2]=r*B+s*Q,g[3]=r*o-s*e,g[4]=r*C-s*t,g[5]=r*Q-s*B,g[6]=i,g[7]=E,g[8]=n,g}function kHt(g,A,I){var e=I[0],t=I[1];return g[0]=e*A[0],g[1]=e*A[1],g[2]=e*A[2],g[3]=t*A[3],g[4]=t*A[4],g[5]=t*A[5],g[6]=A[6],g[7]=A[7],g[8]=A[8],g}function MHt(g,A){return g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=1,g[5]=0,g[6]=A[0],g[7]=A[1],g[8]=1,g}function SHt(g,A){var I=Math.sin(A),e=Math.cos(A);return g[0]=e,g[1]=I,g[2]=0,g[3]=-I,g[4]=e,g[5]=0,g[6]=0,g[7]=0,g[8]=1,g}function fHt(g,A){return g[0]=A[0],g[1]=0,g[2]=0,g[3]=0,g[4]=A[1],g[5]=0,g[6]=0,g[7]=0,g[8]=1,g}function RHt(g,A){return g[0]=A[0],g[1]=A[1],g[2]=0,g[3]=A[2],g[4]=A[3],g[5]=0,g[6]=A[4],g[7]=A[5],g[8]=1,g}function NHt(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=I+I,C=e+e,Q=t+t,i=I*o,E=e*o,n=e*C,s=t*o,r=t*C,a=t*Q,c=B*o,h=B*C,l=B*Q;return g[0]=1-n-a,g[3]=E-l,g[6]=s+h,g[1]=E+l,g[4]=1-i-a,g[7]=r-c,g[2]=s-h,g[5]=r+c,g[8]=1-i-n,g}function xHt(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=A[4],C=A[5],Q=A[6],i=A[7],E=A[8],n=A[9],s=A[10],r=A[11],a=A[12],c=A[13],h=A[14],l=A[15],D=I*C-e*o,d=I*Q-t*o,y=I*i-B*o,w=e*Q-t*C,u=e*i-B*C,G=t*i-B*Q,m=E*c-n*a,p=E*h-s*a,k=E*l-r*a,S=n*h-s*c,R=n*l-r*c,F=s*l-r*h,N=D*F-d*R+y*S+w*k-u*p+G*m;return N?(N=1/N,g[0]=(C*F-Q*R+i*S)*N,g[1]=(Q*k-o*F-i*p)*N,g[2]=(o*R-C*k+i*m)*N,g[3]=(t*R-e*F-B*S)*N,g[4]=(I*F-t*k+B*p)*N,g[5]=(e*k-I*R-B*m)*N,g[6]=(c*G-h*u+l*w)*N,g[7]=(h*y-a*G-l*d)*N,g[8]=(a*u-c*y+l*D)*N,g):null}function FHt(g,A,I){return g[0]=2/A,g[1]=0,g[2]=0,g[3]=0,g[4]=-2/I,g[5]=0,g[6]=-1,g[7]=1,g[8]=1,g}function UHt(g){return"mat3("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+", "+g[4]+", "+g[5]+", "+g[6]+", "+g[7]+", "+g[8]+")"}function JHt(g){return Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]+g[3]*g[3]+g[4]*g[4]+g[5]*g[5]+g[6]*g[6]+g[7]*g[7]+g[8]*g[8])}function KHt(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g[2]=A[2]+I[2],g[3]=A[3]+I[3],g[4]=A[4]+I[4],g[5]=A[5]+I[5],g[6]=A[6]+I[6],g[7]=A[7]+I[7],g[8]=A[8]+I[8],g}function nyI(g,A,I){return g[0]=A[0]-I[0],g[1]=A[1]-I[1],g[2]=A[2]-I[2],g[3]=A[3]-I[3],g[4]=A[4]-I[4],g[5]=A[5]-I[5],g[6]=A[6]-I[6],g[7]=A[7]-I[7],g[8]=A[8]-I[8],g}function PHt(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g[3]=A[3]*I,g[4]=A[4]*I,g[5]=A[5]*I,g[6]=A[6]*I,g[7]=A[7]*I,g[8]=A[8]*I,g}function LHt(g,A,I,e){return g[0]=A[0]+I[0]*e,g[1]=A[1]+I[1]*e,g[2]=A[2]+I[2]*e,g[3]=A[3]+I[3]*e,g[4]=A[4]+I[4]*e,g[5]=A[5]+I[5]*e,g[6]=A[6]+I[6]*e,g[7]=A[7]+I[7]*e,g[8]=A[8]+I[8]*e,g}function YHt(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]&&g[3]===A[3]&&g[4]===A[4]&&g[5]===A[5]&&g[6]===A[6]&&g[7]===A[7]&&g[8]===A[8]}function _Ht(g,A){var I=g[0],e=g[1],t=g[2],B=g[3],o=g[4],C=g[5],Q=g[6],i=g[7],E=g[8],n=A[0],s=A[1],r=A[2],a=A[3],c=A[4],h=A[5],l=A[6],D=A[7],d=A[8];return Math.abs(I-n)<=ao*Math.max(1,Math.abs(I),Math.abs(n))&&Math.abs(e-s)<=ao*Math.max(1,Math.abs(e),Math.abs(s))&&Math.abs(t-r)<=ao*Math.max(1,Math.abs(t),Math.abs(r))&&Math.abs(B-a)<=ao*Math.max(1,Math.abs(B),Math.abs(a))&&Math.abs(o-c)<=ao*Math.max(1,Math.abs(o),Math.abs(c))&&Math.abs(C-h)<=ao*Math.max(1,Math.abs(C),Math.abs(h))&&Math.abs(Q-l)<=ao*Math.max(1,Math.abs(Q),Math.abs(l))&&Math.abs(i-D)<=ao*Math.max(1,Math.abs(i),Math.abs(D))&&Math.abs(E-d)<=ao*Math.max(1,Math.abs(E),Math.abs(d))}var syI,ayI,ryI=yR({"node_modules/gl-matrix/esm/mat3.js"(){nx(),syI=EyI,ayI=nyI}}),cyI={};wR(cyI,{add:()=>w6t,adjoint:()=>WHt,clone:()=>HHt,copy:()=>vHt,create:()=>bHt,decompose:()=>i6t,determinant:()=>VHt,equals:()=>p6t,exactEquals:()=>m6t,frob:()=>y6t,fromQuat:()=>s6t,fromQuat2:()=>Q6t,fromRotation:()=>t6t,fromRotationTranslation:()=>DyI,fromRotationTranslationScale:()=>E6t,fromRotationTranslationScaleOrigin:()=>n6t,fromScaling:()=>e6t,fromTranslation:()=>I6t,fromValues:()=>qHt,fromXRotation:()=>B6t,fromYRotation:()=>o6t,fromZRotation:()=>C6t,frustum:()=>a6t,getRotation:()=>wyI,getScaling:()=>yyI,getTranslation:()=>dyI,identity:()=>hyI,invert:()=>OHt,lookAt:()=>l6t,mul:()=>MyI,multiply:()=>lyI,multiplyScalar:()=>u6t,multiplyScalarAndAdd:()=>G6t,ortho:()=>kyI,orthoNO:()=>GyI,orthoZO:()=>h6t,perspective:()=>pyI,perspectiveFromFieldOfView:()=>c6t,perspectiveNO:()=>uyI,perspectiveZO:()=>r6t,rotate:()=>XHt,rotateX:()=>$Ht,rotateY:()=>A6t,rotateZ:()=>g6t,scale:()=>zHt,set:()=>THt,str:()=>d6t,sub:()=>SyI,subtract:()=>myI,targetTo:()=>D6t,translate:()=>jHt,transpose:()=>ZHt});function bHt(){var g=new Si(16);return Si!=Float32Array&&(g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[11]=0,g[12]=0,g[13]=0,g[14]=0),g[0]=1,g[5]=1,g[10]=1,g[15]=1,g}function HHt(g){var A=new Si(16);return A[0]=g[0],A[1]=g[1],A[2]=g[2],A[3]=g[3],A[4]=g[4],A[5]=g[5],A[6]=g[6],A[7]=g[7],A[8]=g[8],A[9]=g[9],A[10]=g[10],A[11]=g[11],A[12]=g[12],A[13]=g[13],A[14]=g[14],A[15]=g[15],A}function vHt(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g[4]=A[4],g[5]=A[5],g[6]=A[6],g[7]=A[7],g[8]=A[8],g[9]=A[9],g[10]=A[10],g[11]=A[11],g[12]=A[12],g[13]=A[13],g[14]=A[14],g[15]=A[15],g}function qHt(g,A,I,e,t,B,o,C,Q,i,E,n,s,r,a,c){var h=new Si(16);return h[0]=g,h[1]=A,h[2]=I,h[3]=e,h[4]=t,h[5]=B,h[6]=o,h[7]=C,h[8]=Q,h[9]=i,h[10]=E,h[11]=n,h[12]=s,h[13]=r,h[14]=a,h[15]=c,h}function THt(g,A,I,e,t,B,o,C,Q,i,E,n,s,r,a,c,h){return g[0]=A,g[1]=I,g[2]=e,g[3]=t,g[4]=B,g[5]=o,g[6]=C,g[7]=Q,g[8]=i,g[9]=E,g[10]=n,g[11]=s,g[12]=r,g[13]=a,g[14]=c,g[15]=h,g}function hyI(g){return g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=1,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=1,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g}function ZHt(g,A){if(g===A){var I=A[1],e=A[2],t=A[3],B=A[6],o=A[7],C=A[11];g[1]=A[4],g[2]=A[8],g[3]=A[12],g[4]=I,g[6]=A[9],g[7]=A[13],g[8]=e,g[9]=B,g[11]=A[14],g[12]=t,g[13]=o,g[14]=C}else g[0]=A[0],g[1]=A[4],g[2]=A[8],g[3]=A[12],g[4]=A[1],g[5]=A[5],g[6]=A[9],g[7]=A[13],g[8]=A[2],g[9]=A[6],g[10]=A[10],g[11]=A[14],g[12]=A[3],g[13]=A[7],g[14]=A[11],g[15]=A[15];return g}function OHt(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=A[4],C=A[5],Q=A[6],i=A[7],E=A[8],n=A[9],s=A[10],r=A[11],a=A[12],c=A[13],h=A[14],l=A[15],D=I*C-e*o,d=I*Q-t*o,y=I*i-B*o,w=e*Q-t*C,u=e*i-B*C,G=t*i-B*Q,m=E*c-n*a,p=E*h-s*a,k=E*l-r*a,S=n*h-s*c,R=n*l-r*c,F=s*l-r*h,N=D*F-d*R+y*S+w*k-u*p+G*m;return N?(N=1/N,g[0]=(C*F-Q*R+i*S)*N,g[1]=(t*R-e*F-B*S)*N,g[2]=(c*G-h*u+l*w)*N,g[3]=(s*u-n*G-r*w)*N,g[4]=(Q*k-o*F-i*p)*N,g[5]=(I*F-t*k+B*p)*N,g[6]=(h*y-a*G-l*d)*N,g[7]=(E*G-s*y+r*d)*N,g[8]=(o*R-C*k+i*m)*N,g[9]=(e*k-I*R-B*m)*N,g[10]=(a*u-c*y+l*D)*N,g[11]=(n*y-E*u-r*D)*N,g[12]=(C*p-o*S-Q*m)*N,g[13]=(I*S-e*p+t*m)*N,g[14]=(c*d-a*w-h*D)*N,g[15]=(E*w-n*d+s*D)*N,g):null}function WHt(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=A[4],C=A[5],Q=A[6],i=A[7],E=A[8],n=A[9],s=A[10],r=A[11],a=A[12],c=A[13],h=A[14],l=A[15],D=I*C-e*o,d=I*Q-t*o,y=I*i-B*o,w=e*Q-t*C,u=e*i-B*C,G=t*i-B*Q,m=E*c-n*a,p=E*h-s*a,k=E*l-r*a,S=n*h-s*c,R=n*l-r*c,F=s*l-r*h;return g[0]=C*F-Q*R+i*S,g[1]=t*R-e*F-B*S,g[2]=c*G-h*u+l*w,g[3]=s*u-n*G-r*w,g[4]=Q*k-o*F-i*p,g[5]=I*F-t*k+B*p,g[6]=h*y-a*G-l*d,g[7]=E*G-s*y+r*d,g[8]=o*R-C*k+i*m,g[9]=e*k-I*R-B*m,g[10]=a*u-c*y+l*D,g[11]=n*y-E*u-r*D,g[12]=C*p-o*S-Q*m,g[13]=I*S-e*p+t*m,g[14]=c*d-a*w-h*D,g[15]=E*w-n*d+s*D,g}function VHt(g){var A=g[0],I=g[1],e=g[2],t=g[3],B=g[4],o=g[5],C=g[6],Q=g[7],i=g[8],E=g[9],n=g[10],s=g[11],r=g[12],a=g[13],c=g[14],h=g[15],l=A*o-I*B,D=A*C-e*B,d=I*C-e*o,y=i*a-E*r,w=i*c-n*r,u=E*c-n*a,G=A*u-I*w+e*y,m=B*u-o*w+C*y,p=i*d-E*D+n*l,k=r*d-a*D+c*l;return Q*G-t*m+h*p-s*k}function lyI(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=A[8],s=A[9],r=A[10],a=A[11],c=A[12],h=A[13],l=A[14],D=A[15],d=I[0],y=I[1],w=I[2],u=I[3];return g[0]=d*e+y*C+w*n+u*c,g[1]=d*t+y*Q+w*s+u*h,g[2]=d*B+y*i+w*r+u*l,g[3]=d*o+y*E+w*a+u*D,d=I[4],y=I[5],w=I[6],u=I[7],g[4]=d*e+y*C+w*n+u*c,g[5]=d*t+y*Q+w*s+u*h,g[6]=d*B+y*i+w*r+u*l,g[7]=d*o+y*E+w*a+u*D,d=I[8],y=I[9],w=I[10],u=I[11],g[8]=d*e+y*C+w*n+u*c,g[9]=d*t+y*Q+w*s+u*h,g[10]=d*B+y*i+w*r+u*l,g[11]=d*o+y*E+w*a+u*D,d=I[12],y=I[13],w=I[14],u=I[15],g[12]=d*e+y*C+w*n+u*c,g[13]=d*t+y*Q+w*s+u*h,g[14]=d*B+y*i+w*r+u*l,g[15]=d*o+y*E+w*a+u*D,g}function jHt(g,A,I){var e=I[0],t=I[1],B=I[2],o,C,Q,i,E,n,s,r,a,c,h,l;return A===g?(g[12]=A[0]*e+A[4]*t+A[8]*B+A[12],g[13]=A[1]*e+A[5]*t+A[9]*B+A[13],g[14]=A[2]*e+A[6]*t+A[10]*B+A[14],g[15]=A[3]*e+A[7]*t+A[11]*B+A[15]):(o=A[0],C=A[1],Q=A[2],i=A[3],E=A[4],n=A[5],s=A[6],r=A[7],a=A[8],c=A[9],h=A[10],l=A[11],g[0]=o,g[1]=C,g[2]=Q,g[3]=i,g[4]=E,g[5]=n,g[6]=s,g[7]=r,g[8]=a,g[9]=c,g[10]=h,g[11]=l,g[12]=o*e+E*t+a*B+A[12],g[13]=C*e+n*t+c*B+A[13],g[14]=Q*e+s*t+h*B+A[14],g[15]=i*e+r*t+l*B+A[15]),g}function zHt(g,A,I){var e=I[0],t=I[1],B=I[2];return g[0]=A[0]*e,g[1]=A[1]*e,g[2]=A[2]*e,g[3]=A[3]*e,g[4]=A[4]*t,g[5]=A[5]*t,g[6]=A[6]*t,g[7]=A[7]*t,g[8]=A[8]*B,g[9]=A[9]*B,g[10]=A[10]*B,g[11]=A[11]*B,g[12]=A[12],g[13]=A[13],g[14]=A[14],g[15]=A[15],g}function XHt(g,A,I,e){var t=e[0],B=e[1],o=e[2],C=Math.sqrt(t*t+B*B+o*o),Q,i,E,n,s,r,a,c,h,l,D,d,y,w,u,G,m,p,k,S,R,F,N,J;return C<ao?null:(C=1/C,t*=C,B*=C,o*=C,Q=Math.sin(I),i=Math.cos(I),E=1-i,n=A[0],s=A[1],r=A[2],a=A[3],c=A[4],h=A[5],l=A[6],D=A[7],d=A[8],y=A[9],w=A[10],u=A[11],G=t*t*E+i,m=B*t*E+o*Q,p=o*t*E-B*Q,k=t*B*E-o*Q,S=B*B*E+i,R=o*B*E+t*Q,F=t*o*E+B*Q,N=B*o*E-t*Q,J=o*o*E+i,g[0]=n*G+c*m+d*p,g[1]=s*G+h*m+y*p,g[2]=r*G+l*m+w*p,g[3]=a*G+D*m+u*p,g[4]=n*k+c*S+d*R,g[5]=s*k+h*S+y*R,g[6]=r*k+l*S+w*R,g[7]=a*k+D*S+u*R,g[8]=n*F+c*N+d*J,g[9]=s*F+h*N+y*J,g[10]=r*F+l*N+w*J,g[11]=a*F+D*N+u*J,A!==g&&(g[12]=A[12],g[13]=A[13],g[14]=A[14],g[15]=A[15]),g)}function $Ht(g,A,I){var e=Math.sin(I),t=Math.cos(I),B=A[4],o=A[5],C=A[6],Q=A[7],i=A[8],E=A[9],n=A[10],s=A[11];return A!==g&&(g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g[12]=A[12],g[13]=A[13],g[14]=A[14],g[15]=A[15]),g[4]=B*t+i*e,g[5]=o*t+E*e,g[6]=C*t+n*e,g[7]=Q*t+s*e,g[8]=i*t-B*e,g[9]=E*t-o*e,g[10]=n*t-C*e,g[11]=s*t-Q*e,g}function A6t(g,A,I){var e=Math.sin(I),t=Math.cos(I),B=A[0],o=A[1],C=A[2],Q=A[3],i=A[8],E=A[9],n=A[10],s=A[11];return A!==g&&(g[4]=A[4],g[5]=A[5],g[6]=A[6],g[7]=A[7],g[12]=A[12],g[13]=A[13],g[14]=A[14],g[15]=A[15]),g[0]=B*t-i*e,g[1]=o*t-E*e,g[2]=C*t-n*e,g[3]=Q*t-s*e,g[8]=B*e+i*t,g[9]=o*e+E*t,g[10]=C*e+n*t,g[11]=Q*e+s*t,g}function g6t(g,A,I){var e=Math.sin(I),t=Math.cos(I),B=A[0],o=A[1],C=A[2],Q=A[3],i=A[4],E=A[5],n=A[6],s=A[7];return A!==g&&(g[8]=A[8],g[9]=A[9],g[10]=A[10],g[11]=A[11],g[12]=A[12],g[13]=A[13],g[14]=A[14],g[15]=A[15]),g[0]=B*t+i*e,g[1]=o*t+E*e,g[2]=C*t+n*e,g[3]=Q*t+s*e,g[4]=i*t-B*e,g[5]=E*t-o*e,g[6]=n*t-C*e,g[7]=s*t-Q*e,g}function I6t(g,A){return g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=1,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=1,g[11]=0,g[12]=A[0],g[13]=A[1],g[14]=A[2],g[15]=1,g}function e6t(g,A){return g[0]=A[0],g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=A[1],g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=A[2],g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g}function t6t(g,A,I){var e=I[0],t=I[1],B=I[2],o=Math.sqrt(e*e+t*t+B*B),C,Q,i;return o<ao?null:(o=1/o,e*=o,t*=o,B*=o,C=Math.sin(A),Q=Math.cos(A),i=1-Q,g[0]=e*e*i+Q,g[1]=t*e*i+B*C,g[2]=B*e*i-t*C,g[3]=0,g[4]=e*t*i-B*C,g[5]=t*t*i+Q,g[6]=B*t*i+e*C,g[7]=0,g[8]=e*B*i+t*C,g[9]=t*B*i-e*C,g[10]=B*B*i+Q,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g)}function B6t(g,A){var I=Math.sin(A),e=Math.cos(A);return g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=e,g[6]=I,g[7]=0,g[8]=0,g[9]=-I,g[10]=e,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g}function o6t(g,A){var I=Math.sin(A),e=Math.cos(A);return g[0]=e,g[1]=0,g[2]=-I,g[3]=0,g[4]=0,g[5]=1,g[6]=0,g[7]=0,g[8]=I,g[9]=0,g[10]=e,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g}function C6t(g,A){var I=Math.sin(A),e=Math.cos(A);return g[0]=e,g[1]=I,g[2]=0,g[3]=0,g[4]=-I,g[5]=e,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=1,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g}function DyI(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=e+e,Q=t+t,i=B+B,E=e*C,n=e*Q,s=e*i,r=t*Q,a=t*i,c=B*i,h=o*C,l=o*Q,D=o*i;return g[0]=1-(r+c),g[1]=n+D,g[2]=s-l,g[3]=0,g[4]=n-D,g[5]=1-(E+c),g[6]=a+h,g[7]=0,g[8]=s+l,g[9]=a-h,g[10]=1-(E+r),g[11]=0,g[12]=I[0],g[13]=I[1],g[14]=I[2],g[15]=1,g}function Q6t(g,A){var I=new Si(3),e=-A[0],t=-A[1],B=-A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=e*e+t*t+B*B+o*o;return n>0?(I[0]=(C*o+E*e+Q*B-i*t)*2/n,I[1]=(Q*o+E*t+i*e-C*B)*2/n,I[2]=(i*o+E*B+C*t-Q*e)*2/n):(I[0]=(C*o+E*e+Q*B-i*t)*2,I[1]=(Q*o+E*t+i*e-C*B)*2,I[2]=(i*o+E*B+C*t-Q*e)*2),DyI(g,A,I),g}function dyI(g,A){return g[0]=A[12],g[1]=A[13],g[2]=A[14],g}function yyI(g,A){var I=A[0],e=A[1],t=A[2],B=A[4],o=A[5],C=A[6],Q=A[8],i=A[9],E=A[10];return g[0]=Math.sqrt(I*I+e*e+t*t),g[1]=Math.sqrt(B*B+o*o+C*C),g[2]=Math.sqrt(Q*Q+i*i+E*E),g}function wyI(g,A){var I=new Si(3);yyI(I,A);var e=1/I[0],t=1/I[1],B=1/I[2],o=A[0]*e,C=A[1]*t,Q=A[2]*B,i=A[4]*e,E=A[5]*t,n=A[6]*B,s=A[8]*e,r=A[9]*t,a=A[10]*B,c=o+E+a,h=0;return c>0?(h=Math.sqrt(c+1)*2,g[3]=.25*h,g[0]=(n-r)/h,g[1]=(s-Q)/h,g[2]=(C-i)/h):o>E&&o>a?(h=Math.sqrt(1+o-E-a)*2,g[3]=(n-r)/h,g[0]=.25*h,g[1]=(C+i)/h,g[2]=(s+Q)/h):E>a?(h=Math.sqrt(1+E-o-a)*2,g[3]=(s-Q)/h,g[0]=(C+i)/h,g[1]=.25*h,g[2]=(n+r)/h):(h=Math.sqrt(1+a-o-E)*2,g[3]=(C-i)/h,g[0]=(s+Q)/h,g[1]=(n+r)/h,g[2]=.25*h),g}function i6t(g,A,I,e){A[0]=e[12],A[1]=e[13],A[2]=e[14];var t=e[0],B=e[1],o=e[2],C=e[4],Q=e[5],i=e[6],E=e[8],n=e[9],s=e[10];I[0]=Math.sqrt(t*t+B*B+o*o),I[1]=Math.sqrt(C*C+Q*Q+i*i),I[2]=Math.sqrt(E*E+n*n+s*s);var r=1/I[0],a=1/I[1],c=1/I[2],h=t*r,l=B*a,D=o*c,d=C*r,y=Q*a,w=i*c,u=E*r,G=n*a,m=s*c,p=h+y+m,k=0;return p>0?(k=Math.sqrt(p+1)*2,g[3]=.25*k,g[0]=(w-G)/k,g[1]=(u-D)/k,g[2]=(l-d)/k):h>y&&h>m?(k=Math.sqrt(1+h-y-m)*2,g[3]=(w-G)/k,g[0]=.25*k,g[1]=(l+d)/k,g[2]=(u+D)/k):y>m?(k=Math.sqrt(1+y-h-m)*2,g[3]=(u-D)/k,g[0]=(l+d)/k,g[1]=.25*k,g[2]=(w+G)/k):(k=Math.sqrt(1+m-h-y)*2,g[3]=(l-d)/k,g[0]=(u+D)/k,g[1]=(w+G)/k,g[2]=.25*k),g}function E6t(g,A,I,e){var t=A[0],B=A[1],o=A[2],C=A[3],Q=t+t,i=B+B,E=o+o,n=t*Q,s=t*i,r=t*E,a=B*i,c=B*E,h=o*E,l=C*Q,D=C*i,d=C*E,y=e[0],w=e[1],u=e[2];return g[0]=(1-(a+h))*y,g[1]=(s+d)*y,g[2]=(r-D)*y,g[3]=0,g[4]=(s-d)*w,g[5]=(1-(n+h))*w,g[6]=(c+l)*w,g[7]=0,g[8]=(r+D)*u,g[9]=(c-l)*u,g[10]=(1-(n+a))*u,g[11]=0,g[12]=I[0],g[13]=I[1],g[14]=I[2],g[15]=1,g}function n6t(g,A,I,e,t){var B=A[0],o=A[1],C=A[2],Q=A[3],i=B+B,E=o+o,n=C+C,s=B*i,r=B*E,a=B*n,c=o*E,h=o*n,l=C*n,D=Q*i,d=Q*E,y=Q*n,w=e[0],u=e[1],G=e[2],m=t[0],p=t[1],k=t[2],S=(1-(c+l))*w,R=(r+y)*w,F=(a-d)*w,N=(r-y)*u,J=(1-(s+l))*u,P=(h+D)*u,b=(a+d)*G,H=(h-D)*G,q=(1-(s+c))*G;return g[0]=S,g[1]=R,g[2]=F,g[3]=0,g[4]=N,g[5]=J,g[6]=P,g[7]=0,g[8]=b,g[9]=H,g[10]=q,g[11]=0,g[12]=I[0]+m-(S*m+N*p+b*k),g[13]=I[1]+p-(R*m+J*p+H*k),g[14]=I[2]+k-(F*m+P*p+q*k),g[15]=1,g}function s6t(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=I+I,C=e+e,Q=t+t,i=I*o,E=e*o,n=e*C,s=t*o,r=t*C,a=t*Q,c=B*o,h=B*C,l=B*Q;return g[0]=1-n-a,g[1]=E+l,g[2]=s-h,g[3]=0,g[4]=E-l,g[5]=1-i-a,g[6]=r+c,g[7]=0,g[8]=s+h,g[9]=r-c,g[10]=1-i-n,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g}function a6t(g,A,I,e,t,B,o){var C=1/(I-A),Q=1/(t-e),i=1/(B-o);return g[0]=B*2*C,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=B*2*Q,g[6]=0,g[7]=0,g[8]=(I+A)*C,g[9]=(t+e)*Q,g[10]=(o+B)*i,g[11]=-1,g[12]=0,g[13]=0,g[14]=o*B*2*i,g[15]=0,g}function uyI(g,A,I,e,t){var B=1/Math.tan(A/2);if(g[0]=B/I,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=B,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[11]=-1,g[12]=0,g[13]=0,g[15]=0,t!=null&&t!==1/0){var o=1/(e-t);g[10]=(t+e)*o,g[14]=2*t*e*o}else g[10]=-1,g[14]=-2*e;return g}function r6t(g,A,I,e,t){var B=1/Math.tan(A/2);if(g[0]=B/I,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=B,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[11]=-1,g[12]=0,g[13]=0,g[15]=0,t!=null&&t!==1/0){var o=1/(e-t);g[10]=t*o,g[14]=t*e*o}else g[10]=-1,g[14]=-e;return g}function c6t(g,A,I,e){var t=Math.tan(A.upDegrees*Math.PI/180),B=Math.tan(A.downDegrees*Math.PI/180),o=Math.tan(A.leftDegrees*Math.PI/180),C=Math.tan(A.rightDegrees*Math.PI/180),Q=2/(o+C),i=2/(t+B);return g[0]=Q,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=i,g[6]=0,g[7]=0,g[8]=-((o-C)*Q*.5),g[9]=(t-B)*i*.5,g[10]=e/(I-e),g[11]=-1,g[12]=0,g[13]=0,g[14]=e*I/(I-e),g[15]=0,g}function GyI(g,A,I,e,t,B,o){var C=1/(A-I),Q=1/(e-t),i=1/(B-o);return g[0]=-2*C,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=-2*Q,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=2*i,g[11]=0,g[12]=(A+I)*C,g[13]=(t+e)*Q,g[14]=(o+B)*i,g[15]=1,g}function h6t(g,A,I,e,t,B,o){var C=1/(A-I),Q=1/(e-t),i=1/(B-o);return g[0]=-2*C,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=-2*Q,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=i,g[11]=0,g[12]=(A+I)*C,g[13]=(t+e)*Q,g[14]=B*i,g[15]=1,g}function l6t(g,A,I,e){var t,B,o,C,Q,i,E,n,s,r,a=A[0],c=A[1],h=A[2],l=e[0],D=e[1],d=e[2],y=I[0],w=I[1],u=I[2];return Math.abs(a-y)<ao&&Math.abs(c-w)<ao&&Math.abs(h-u)<ao?hyI(g):(E=a-y,n=c-w,s=h-u,r=1/Math.sqrt(E*E+n*n+s*s),E*=r,n*=r,s*=r,t=D*s-d*n,B=d*E-l*s,o=l*n-D*E,r=Math.sqrt(t*t+B*B+o*o),r?(r=1/r,t*=r,B*=r,o*=r):(t=0,B=0,o=0),C=n*o-s*B,Q=s*t-E*o,i=E*B-n*t,r=Math.sqrt(C*C+Q*Q+i*i),r?(r=1/r,C*=r,Q*=r,i*=r):(C=0,Q=0,i=0),g[0]=t,g[1]=C,g[2]=E,g[3]=0,g[4]=B,g[5]=Q,g[6]=n,g[7]=0,g[8]=o,g[9]=i,g[10]=s,g[11]=0,g[12]=-(t*a+B*c+o*h),g[13]=-(C*a+Q*c+i*h),g[14]=-(E*a+n*c+s*h),g[15]=1,g)}function D6t(g,A,I,e){var t=A[0],B=A[1],o=A[2],C=e[0],Q=e[1],i=e[2],E=t-I[0],n=B-I[1],s=o-I[2],r=E*E+n*n+s*s;r>0&&(r=1/Math.sqrt(r),E*=r,n*=r,s*=r);var a=Q*s-i*n,c=i*E-C*s,h=C*n-Q*E;return r=a*a+c*c+h*h,r>0&&(r=1/Math.sqrt(r),a*=r,c*=r,h*=r),g[0]=a,g[1]=c,g[2]=h,g[3]=0,g[4]=n*h-s*c,g[5]=s*a-E*h,g[6]=E*c-n*a,g[7]=0,g[8]=E,g[9]=n,g[10]=s,g[11]=0,g[12]=t,g[13]=B,g[14]=o,g[15]=1,g}function d6t(g){return"mat4("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+", "+g[4]+", "+g[5]+", "+g[6]+", "+g[7]+", "+g[8]+", "+g[9]+", "+g[10]+", "+g[11]+", "+g[12]+", "+g[13]+", "+g[14]+", "+g[15]+")"}function y6t(g){return Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]+g[3]*g[3]+g[4]*g[4]+g[5]*g[5]+g[6]*g[6]+g[7]*g[7]+g[8]*g[8]+g[9]*g[9]+g[10]*g[10]+g[11]*g[11]+g[12]*g[12]+g[13]*g[13]+g[14]*g[14]+g[15]*g[15])}function w6t(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g[2]=A[2]+I[2],g[3]=A[3]+I[3],g[4]=A[4]+I[4],g[5]=A[5]+I[5],g[6]=A[6]+I[6],g[7]=A[7]+I[7],g[8]=A[8]+I[8],g[9]=A[9]+I[9],g[10]=A[10]+I[10],g[11]=A[11]+I[11],g[12]=A[12]+I[12],g[13]=A[13]+I[13],g[14]=A[14]+I[14],g[15]=A[15]+I[15],g}function myI(g,A,I){return g[0]=A[0]-I[0],g[1]=A[1]-I[1],g[2]=A[2]-I[2],g[3]=A[3]-I[3],g[4]=A[4]-I[4],g[5]=A[5]-I[5],g[6]=A[6]-I[6],g[7]=A[7]-I[7],g[8]=A[8]-I[8],g[9]=A[9]-I[9],g[10]=A[10]-I[10],g[11]=A[11]-I[11],g[12]=A[12]-I[12],g[13]=A[13]-I[13],g[14]=A[14]-I[14],g[15]=A[15]-I[15],g}function u6t(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g[3]=A[3]*I,g[4]=A[4]*I,g[5]=A[5]*I,g[6]=A[6]*I,g[7]=A[7]*I,g[8]=A[8]*I,g[9]=A[9]*I,g[10]=A[10]*I,g[11]=A[11]*I,g[12]=A[12]*I,g[13]=A[13]*I,g[14]=A[14]*I,g[15]=A[15]*I,g}function G6t(g,A,I,e){return g[0]=A[0]+I[0]*e,g[1]=A[1]+I[1]*e,g[2]=A[2]+I[2]*e,g[3]=A[3]+I[3]*e,g[4]=A[4]+I[4]*e,g[5]=A[5]+I[5]*e,g[6]=A[6]+I[6]*e,g[7]=A[7]+I[7]*e,g[8]=A[8]+I[8]*e,g[9]=A[9]+I[9]*e,g[10]=A[10]+I[10]*e,g[11]=A[11]+I[11]*e,g[12]=A[12]+I[12]*e,g[13]=A[13]+I[13]*e,g[14]=A[14]+I[14]*e,g[15]=A[15]+I[15]*e,g}function m6t(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]&&g[3]===A[3]&&g[4]===A[4]&&g[5]===A[5]&&g[6]===A[6]&&g[7]===A[7]&&g[8]===A[8]&&g[9]===A[9]&&g[10]===A[10]&&g[11]===A[11]&&g[12]===A[12]&&g[13]===A[13]&&g[14]===A[14]&&g[15]===A[15]}function p6t(g,A){var I=g[0],e=g[1],t=g[2],B=g[3],o=g[4],C=g[5],Q=g[6],i=g[7],E=g[8],n=g[9],s=g[10],r=g[11],a=g[12],c=g[13],h=g[14],l=g[15],D=A[0],d=A[1],y=A[2],w=A[3],u=A[4],G=A[5],m=A[6],p=A[7],k=A[8],S=A[9],R=A[10],F=A[11],N=A[12],J=A[13],P=A[14],b=A[15];return Math.abs(I-D)<=ao*Math.max(1,Math.abs(I),Math.abs(D))&&Math.abs(e-d)<=ao*Math.max(1,Math.abs(e),Math.abs(d))&&Math.abs(t-y)<=ao*Math.max(1,Math.abs(t),Math.abs(y))&&Math.abs(B-w)<=ao*Math.max(1,Math.abs(B),Math.abs(w))&&Math.abs(o-u)<=ao*Math.max(1,Math.abs(o),Math.abs(u))&&Math.abs(C-G)<=ao*Math.max(1,Math.abs(C),Math.abs(G))&&Math.abs(Q-m)<=ao*Math.max(1,Math.abs(Q),Math.abs(m))&&Math.abs(i-p)<=ao*Math.max(1,Math.abs(i),Math.abs(p))&&Math.abs(E-k)<=ao*Math.max(1,Math.abs(E),Math.abs(k))&&Math.abs(n-S)<=ao*Math.max(1,Math.abs(n),Math.abs(S))&&Math.abs(s-R)<=ao*Math.max(1,Math.abs(s),Math.abs(R))&&Math.abs(r-F)<=ao*Math.max(1,Math.abs(r),Math.abs(F))&&Math.abs(a-N)<=ao*Math.max(1,Math.abs(a),Math.abs(N))&&Math.abs(c-J)<=ao*Math.max(1,Math.abs(c),Math.abs(J))&&Math.abs(h-P)<=ao*Math.max(1,Math.abs(h),Math.abs(P))&&Math.abs(l-b)<=ao*Math.max(1,Math.abs(l),Math.abs(b))}var pyI,kyI,MyI,SyI,fyI=yR({"node_modules/gl-matrix/esm/mat4.js"(){nx(),pyI=uyI,kyI=GyI,MyI=lyI,SyI=myI}}),RyI={};wR(RyI,{add:()=>f6t,angle:()=>j6t,bezier:()=>H6t,ceil:()=>R6t,clone:()=>k6t,copy:()=>M6t,create:()=>n$A,cross:()=>udA,dist:()=>HyI,distance:()=>JyI,div:()=>byI,divide:()=>UyI,dot:()=>wdA,equals:()=>Avt,exactEquals:()=>$6t,floor:()=>N6t,forEach:()=>TyI,fromValues:()=>s$A,hermite:()=>b6t,inverse:()=>L6t,len:()=>a$A,length:()=>NyI,lerp:()=>Y6t,max:()=>F6t,min:()=>x6t,mul:()=>_yI,multiply:()=>FyI,negate:()=>P6t,normalize:()=>LyI,random:()=>v6t,rotateX:()=>O6t,rotateY:()=>W6t,rotateZ:()=>V6t,round:()=>U6t,scale:()=>J6t,scaleAndAdd:()=>K6t,set:()=>S6t,slerp:()=>_6t,sqrDist:()=>vyI,sqrLen:()=>qyI,squaredDistance:()=>KyI,squaredLength:()=>PyI,str:()=>X6t,sub:()=>YyI,subtract:()=>xyI,transformMat3:()=>T6t,transformMat4:()=>q6t,transformQuat:()=>Z6t,zero:()=>z6t});function n$A(){var g=new Si(3);return Si!=Float32Array&&(g[0]=0,g[1]=0,g[2]=0),g}function k6t(g){var A=new Si(3);return A[0]=g[0],A[1]=g[1],A[2]=g[2],A}function NyI(g){var A=g[0],I=g[1],e=g[2];return Math.sqrt(A*A+I*I+e*e)}function s$A(g,A,I){var e=new Si(3);return e[0]=g,e[1]=A,e[2]=I,e}function M6t(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g}function S6t(g,A,I,e){return g[0]=A,g[1]=I,g[2]=e,g}function f6t(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g[2]=A[2]+I[2],g}function xyI(g,A,I){return g[0]=A[0]-I[0],g[1]=A[1]-I[1],g[2]=A[2]-I[2],g}function FyI(g,A,I){return g[0]=A[0]*I[0],g[1]=A[1]*I[1],g[2]=A[2]*I[2],g}function UyI(g,A,I){return g[0]=A[0]/I[0],g[1]=A[1]/I[1],g[2]=A[2]/I[2],g}function R6t(g,A){return g[0]=Math.ceil(A[0]),g[1]=Math.ceil(A[1]),g[2]=Math.ceil(A[2]),g}function N6t(g,A){return g[0]=Math.floor(A[0]),g[1]=Math.floor(A[1]),g[2]=Math.floor(A[2]),g}function x6t(g,A,I){return g[0]=Math.min(A[0],I[0]),g[1]=Math.min(A[1],I[1]),g[2]=Math.min(A[2],I[2]),g}function F6t(g,A,I){return g[0]=Math.max(A[0],I[0]),g[1]=Math.max(A[1],I[1]),g[2]=Math.max(A[2],I[2]),g}function U6t(g,A){return g[0]=Ex(A[0]),g[1]=Ex(A[1]),g[2]=Ex(A[2]),g}function J6t(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g}function K6t(g,A,I,e){return g[0]=A[0]+I[0]*e,g[1]=A[1]+I[1]*e,g[2]=A[2]+I[2]*e,g}function JyI(g,A){var I=A[0]-g[0],e=A[1]-g[1],t=A[2]-g[2];return Math.sqrt(I*I+e*e+t*t)}function KyI(g,A){var I=A[0]-g[0],e=A[1]-g[1],t=A[2]-g[2];return I*I+e*e+t*t}function PyI(g){var A=g[0],I=g[1],e=g[2];return A*A+I*I+e*e}function P6t(g,A){return g[0]=-A[0],g[1]=-A[1],g[2]=-A[2],g}function L6t(g,A){return g[0]=1/A[0],g[1]=1/A[1],g[2]=1/A[2],g}function LyI(g,A){var I=A[0],e=A[1],t=A[2],B=I*I+e*e+t*t;return B>0&&(B=1/Math.sqrt(B)),g[0]=A[0]*B,g[1]=A[1]*B,g[2]=A[2]*B,g}function wdA(g,A){return g[0]*A[0]+g[1]*A[1]+g[2]*A[2]}function udA(g,A,I){var e=A[0],t=A[1],B=A[2],o=I[0],C=I[1],Q=I[2];return g[0]=t*Q-B*C,g[1]=B*o-e*Q,g[2]=e*C-t*o,g}function Y6t(g,A,I,e){var t=A[0],B=A[1],o=A[2];return g[0]=t+e*(I[0]-t),g[1]=B+e*(I[1]-B),g[2]=o+e*(I[2]-o),g}function _6t(g,A,I,e){var t=Math.acos(Math.min(Math.max(wdA(A,I),-1),1)),B=Math.sin(t),o=Math.sin((1-e)*t)/B,C=Math.sin(e*t)/B;return g[0]=o*A[0]+C*I[0],g[1]=o*A[1]+C*I[1],g[2]=o*A[2]+C*I[2],g}function b6t(g,A,I,e,t,B){var o=B*B,C=o*(2*B-3)+1,Q=o*(B-2)+B,i=o*(B-1),E=o*(3-2*B);return g[0]=A[0]*C+I[0]*Q+e[0]*i+t[0]*E,g[1]=A[1]*C+I[1]*Q+e[1]*i+t[1]*E,g[2]=A[2]*C+I[2]*Q+e[2]*i+t[2]*E,g}function H6t(g,A,I,e,t,B){var o=1-B,C=o*o,Q=B*B,i=C*o,E=3*B*C,n=3*Q*o,s=Q*B;return g[0]=A[0]*i+I[0]*E+e[0]*n+t[0]*s,g[1]=A[1]*i+I[1]*E+e[1]*n+t[1]*s,g[2]=A[2]*i+I[2]*E+e[2]*n+t[2]*s,g}function v6t(g,A){A=A===void 0?1:A;var I=J2()*2*Math.PI,e=J2()*2-1,t=Math.sqrt(1-e*e)*A;return g[0]=Math.cos(I)*t,g[1]=Math.sin(I)*t,g[2]=e*A,g}function q6t(g,A,I){var e=A[0],t=A[1],B=A[2],o=I[3]*e+I[7]*t+I[11]*B+I[15];return o=o||1,g[0]=(I[0]*e+I[4]*t+I[8]*B+I[12])/o,g[1]=(I[1]*e+I[5]*t+I[9]*B+I[13])/o,g[2]=(I[2]*e+I[6]*t+I[10]*B+I[14])/o,g}function T6t(g,A,I){var e=A[0],t=A[1],B=A[2];return g[0]=e*I[0]+t*I[3]+B*I[6],g[1]=e*I[1]+t*I[4]+B*I[7],g[2]=e*I[2]+t*I[5]+B*I[8],g}function Z6t(g,A,I){var e=I[0],t=I[1],B=I[2],o=I[3],C=A[0],Q=A[1],i=A[2],E=t*i-B*Q,n=B*C-e*i,s=e*Q-t*C;return E=E+E,n=n+n,s=s+s,g[0]=C+o*E+t*s-B*n,g[1]=Q+o*n+B*E-e*s,g[2]=i+o*s+e*n-t*E,g}function O6t(g,A,I,e){var t=[],B=[];return t[0]=A[0]-I[0],t[1]=A[1]-I[1],t[2]=A[2]-I[2],B[0]=t[0],B[1]=t[1]*Math.cos(e)-t[2]*Math.sin(e),B[2]=t[1]*Math.sin(e)+t[2]*Math.cos(e),g[0]=B[0]+I[0],g[1]=B[1]+I[1],g[2]=B[2]+I[2],g}function W6t(g,A,I,e){var t=[],B=[];return t[0]=A[0]-I[0],t[1]=A[1]-I[1],t[2]=A[2]-I[2],B[0]=t[2]*Math.sin(e)+t[0]*Math.cos(e),B[1]=t[1],B[2]=t[2]*Math.cos(e)-t[0]*Math.sin(e),g[0]=B[0]+I[0],g[1]=B[1]+I[1],g[2]=B[2]+I[2],g}function V6t(g,A,I,e){var t=[],B=[];return t[0]=A[0]-I[0],t[1]=A[1]-I[1],t[2]=A[2]-I[2],B[0]=t[0]*Math.cos(e)-t[1]*Math.sin(e),B[1]=t[0]*Math.sin(e)+t[1]*Math.cos(e),B[2]=t[2],g[0]=B[0]+I[0],g[1]=B[1]+I[1],g[2]=B[2]+I[2],g}function j6t(g,A){var I=g[0],e=g[1],t=g[2],B=A[0],o=A[1],C=A[2],Q=Math.sqrt((I*I+e*e+t*t)*(B*B+o*o+C*C)),i=Q&&wdA(g,A)/Q;return Math.acos(Math.min(Math.max(i,-1),1))}function z6t(g){return g[0]=0,g[1]=0,g[2]=0,g}function X6t(g){return"vec3("+g[0]+", "+g[1]+", "+g[2]+")"}function $6t(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]}function Avt(g,A){var I=g[0],e=g[1],t=g[2],B=A[0],o=A[1],C=A[2];return Math.abs(I-B)<=ao*Math.max(1,Math.abs(I),Math.abs(B))&&Math.abs(e-o)<=ao*Math.max(1,Math.abs(e),Math.abs(o))&&Math.abs(t-C)<=ao*Math.max(1,Math.abs(t),Math.abs(C))}var YyI,_yI,byI,HyI,vyI,a$A,qyI,TyI,ZyI=yR({"node_modules/gl-matrix/esm/vec3.js"(){nx(),YyI=xyI,_yI=FyI,byI=UyI,HyI=JyI,vyI=KyI,a$A=NyI,qyI=PyI,TyI=(function(){var g=n$A();return function(A,I,e,t,B,o){var C,Q;for(I||(I=3),e||(e=0),t?Q=Math.min(t*I+e,A.length):Q=A.length,C=e;C<Q;C+=I)g[0]=A[C],g[1]=A[C+1],g[2]=A[C+2],B(g,g,o),A[C]=g[0],A[C+1]=g[1],A[C+2]=g[2];return A}})()}}),OyI={};wR(OyI,{add:()=>$yI,ceil:()=>gvt,clone:()=>VyI,copy:()=>zyI,create:()=>WyI,cross:()=>ivt,dist:()=>swI,distance:()=>twI,div:()=>nwI,divide:()=>IwI,dot:()=>h$A,equals:()=>cvt,exactEquals:()=>QwI,floor:()=>Ivt,forEach:()=>hwI,fromValues:()=>jyI,inverse:()=>Qvt,len:()=>rwI,length:()=>r$A,lerp:()=>CwI,max:()=>tvt,min:()=>evt,mul:()=>EwI,multiply:()=>gwI,negate:()=>Cvt,normalize:()=>owI,random:()=>Evt,round:()=>Bvt,scale:()=>ewI,scaleAndAdd:()=>ovt,set:()=>XyI,sqrDist:()=>awI,sqrLen:()=>cwI,squaredDistance:()=>BwI,squaredLength:()=>c$A,str:()=>rvt,sub:()=>iwI,subtract:()=>AwI,transformMat4:()=>nvt,transformQuat:()=>svt,zero:()=>avt});function WyI(){var g=new Si(4);return Si!=Float32Array&&(g[0]=0,g[1]=0,g[2]=0,g[3]=0),g}function VyI(g){var A=new Si(4);return A[0]=g[0],A[1]=g[1],A[2]=g[2],A[3]=g[3],A}function jyI(g,A,I,e){var t=new Si(4);return t[0]=g,t[1]=A,t[2]=I,t[3]=e,t}function zyI(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g}function XyI(g,A,I,e,t){return g[0]=A,g[1]=I,g[2]=e,g[3]=t,g}function $yI(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g[2]=A[2]+I[2],g[3]=A[3]+I[3],g}function AwI(g,A,I){return g[0]=A[0]-I[0],g[1]=A[1]-I[1],g[2]=A[2]-I[2],g[3]=A[3]-I[3],g}function gwI(g,A,I){return g[0]=A[0]*I[0],g[1]=A[1]*I[1],g[2]=A[2]*I[2],g[3]=A[3]*I[3],g}function IwI(g,A,I){return g[0]=A[0]/I[0],g[1]=A[1]/I[1],g[2]=A[2]/I[2],g[3]=A[3]/I[3],g}function gvt(g,A){return g[0]=Math.ceil(A[0]),g[1]=Math.ceil(A[1]),g[2]=Math.ceil(A[2]),g[3]=Math.ceil(A[3]),g}function Ivt(g,A){return g[0]=Math.floor(A[0]),g[1]=Math.floor(A[1]),g[2]=Math.floor(A[2]),g[3]=Math.floor(A[3]),g}function evt(g,A,I){return g[0]=Math.min(A[0],I[0]),g[1]=Math.min(A[1],I[1]),g[2]=Math.min(A[2],I[2]),g[3]=Math.min(A[3],I[3]),g}function tvt(g,A,I){return g[0]=Math.max(A[0],I[0]),g[1]=Math.max(A[1],I[1]),g[2]=Math.max(A[2],I[2]),g[3]=Math.max(A[3],I[3]),g}function Bvt(g,A){return g[0]=Ex(A[0]),g[1]=Ex(A[1]),g[2]=Ex(A[2]),g[3]=Ex(A[3]),g}function ewI(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g[3]=A[3]*I,g}function ovt(g,A,I,e){return g[0]=A[0]+I[0]*e,g[1]=A[1]+I[1]*e,g[2]=A[2]+I[2]*e,g[3]=A[3]+I[3]*e,g}function twI(g,A){var I=A[0]-g[0],e=A[1]-g[1],t=A[2]-g[2],B=A[3]-g[3];return Math.sqrt(I*I+e*e+t*t+B*B)}function BwI(g,A){var I=A[0]-g[0],e=A[1]-g[1],t=A[2]-g[2],B=A[3]-g[3];return I*I+e*e+t*t+B*B}function r$A(g){var A=g[0],I=g[1],e=g[2],t=g[3];return Math.sqrt(A*A+I*I+e*e+t*t)}function c$A(g){var A=g[0],I=g[1],e=g[2],t=g[3];return A*A+I*I+e*e+t*t}function Cvt(g,A){return g[0]=-A[0],g[1]=-A[1],g[2]=-A[2],g[3]=-A[3],g}function Qvt(g,A){return g[0]=1/A[0],g[1]=1/A[1],g[2]=1/A[2],g[3]=1/A[3],g}function owI(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=I*I+e*e+t*t+B*B;return o>0&&(o=1/Math.sqrt(o)),g[0]=I*o,g[1]=e*o,g[2]=t*o,g[3]=B*o,g}function h$A(g,A){return g[0]*A[0]+g[1]*A[1]+g[2]*A[2]+g[3]*A[3]}function ivt(g,A,I,e){var t=I[0]*e[1]-I[1]*e[0],B=I[0]*e[2]-I[2]*e[0],o=I[0]*e[3]-I[3]*e[0],C=I[1]*e[2]-I[2]*e[1],Q=I[1]*e[3]-I[3]*e[1],i=I[2]*e[3]-I[3]*e[2],E=A[0],n=A[1],s=A[2],r=A[3];return g[0]=n*i-s*Q+r*C,g[1]=-(E*i)+s*o-r*B,g[2]=E*Q-n*o+r*t,g[3]=-(E*C)+n*B-s*t,g}function CwI(g,A,I,e){var t=A[0],B=A[1],o=A[2],C=A[3];return g[0]=t+e*(I[0]-t),g[1]=B+e*(I[1]-B),g[2]=o+e*(I[2]-o),g[3]=C+e*(I[3]-C),g}function Evt(g,A){A=A===void 0?1:A;var I,e,t,B,o,C,Q;Q=J2(),I=Q*2-1,e=(4*J2()-2)*Math.sqrt(Q*-Q+Q),o=I*I+e*e,Q=J2(),t=Q*2-1,B=(4*J2()-2)*Math.sqrt(Q*-Q+Q),C=t*t+B*B;var i=Math.sqrt((1-o)/C);return g[0]=A*I,g[1]=A*e,g[2]=A*t*i,g[3]=A*B*i,g}function nvt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3];return g[0]=I[0]*e+I[4]*t+I[8]*B+I[12]*o,g[1]=I[1]*e+I[5]*t+I[9]*B+I[13]*o,g[2]=I[2]*e+I[6]*t+I[10]*B+I[14]*o,g[3]=I[3]*e+I[7]*t+I[11]*B+I[15]*o,g}function svt(g,A,I){var e=I[0],t=I[1],B=I[2],o=I[3],C=A[0],Q=A[1],i=A[2],E=t*i-B*Q,n=B*C-e*i,s=e*Q-t*C;return E=E+E,n=n+n,s=s+s,g[0]=C+o*E+t*s-B*n,g[1]=Q+o*n+B*E-e*s,g[2]=i+o*s+e*n-t*E,g[3]=A[3],g}function avt(g){return g[0]=0,g[1]=0,g[2]=0,g[3]=0,g}function rvt(g){return"vec4("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+")"}function QwI(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]&&g[3]===A[3]}function cvt(g,A){var I=g[0],e=g[1],t=g[2],B=g[3],o=A[0],C=A[1],Q=A[2],i=A[3];return Math.abs(I-o)<=ao*Math.max(1,Math.abs(I),Math.abs(o))&&Math.abs(e-C)<=ao*Math.max(1,Math.abs(e),Math.abs(C))&&Math.abs(t-Q)<=ao*Math.max(1,Math.abs(t),Math.abs(Q))&&Math.abs(B-i)<=ao*Math.max(1,Math.abs(B),Math.abs(i))}var iwI,EwI,nwI,swI,awI,rwI,cwI,hwI,lwI=yR({"node_modules/gl-matrix/esm/vec4.js"(){nx(),iwI=AwI,EwI=gwI,nwI=IwI,swI=twI,awI=BwI,rwI=r$A,cwI=c$A,hwI=(function(){var g=WyI();return function(A,I,e,t,B,o){var C,Q;for(I||(I=4),e||(e=0),t?Q=Math.min(t*I+e,A.length):Q=A.length,C=e;C<Q;C+=I)g[0]=A[C],g[1]=A[C+1],g[2]=A[C+2],g[3]=A[C+3],B(g,g,o),A[C]=g[0],A[C+1]=g[1],A[C+2]=g[2],A[C+3]=g[3];return A}})()}}),DwI={};wR(DwI,{add:()=>RwI,calculateW:()=>dvt,clone:()=>MwI,conjugate:()=>Gvt,copy:()=>pdA,create:()=>GdA,dot:()=>kdA,equals:()=>kvt,exactEquals:()=>JwI,exp:()=>mwI,fromEuler:()=>mvt,fromMat3:()=>kwI,fromValues:()=>SwI,getAngle:()=>Dvt,getAxisAngle:()=>lvt,identity:()=>hvt,invert:()=>uvt,len:()=>FwI,length:()=>MdA,lerp:()=>xwI,ln:()=>pwI,mul:()=>NwI,multiply:()=>ywI,normalize:()=>fdA,pow:()=>yvt,random:()=>wvt,rotateX:()=>wwI,rotateY:()=>uwI,rotateZ:()=>GwI,rotationTo:()=>KwI,scale:()=>l$A,set:()=>fwI,setAxes:()=>LwI,setAxisAngle:()=>dwI,slerp:()=>mdA,sqlerp:()=>PwI,sqrLen:()=>UwI,squaredLength:()=>SdA,str:()=>pvt});function GdA(){var g=new Si(4);return Si!=Float32Array&&(g[0]=0,g[1]=0,g[2]=0),g[3]=1,g}function hvt(g){return g[0]=0,g[1]=0,g[2]=0,g[3]=1,g}function dwI(g,A,I){I=I*.5;var e=Math.sin(I);return g[0]=e*A[0],g[1]=e*A[1],g[2]=e*A[2],g[3]=Math.cos(I),g}function lvt(g,A){var I=Math.acos(A[3])*2,e=Math.sin(I/2);return e>ao?(g[0]=A[0]/e,g[1]=A[1]/e,g[2]=A[2]/e):(g[0]=1,g[1]=0,g[2]=0),I}function Dvt(g,A){var I=kdA(g,A);return Math.acos(2*I*I-1)}function ywI(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=I[0],Q=I[1],i=I[2],E=I[3];return g[0]=e*E+o*C+t*i-B*Q,g[1]=t*E+o*Q+B*C-e*i,g[2]=B*E+o*i+e*Q-t*C,g[3]=o*E-e*C-t*Q-B*i,g}function wwI(g,A,I){I*=.5;var e=A[0],t=A[1],B=A[2],o=A[3],C=Math.sin(I),Q=Math.cos(I);return g[0]=e*Q+o*C,g[1]=t*Q+B*C,g[2]=B*Q-t*C,g[3]=o*Q-e*C,g}function uwI(g,A,I){I*=.5;var e=A[0],t=A[1],B=A[2],o=A[3],C=Math.sin(I),Q=Math.cos(I);return g[0]=e*Q-B*C,g[1]=t*Q+o*C,g[2]=B*Q+e*C,g[3]=o*Q-t*C,g}function GwI(g,A,I){I*=.5;var e=A[0],t=A[1],B=A[2],o=A[3],C=Math.sin(I),Q=Math.cos(I);return g[0]=e*Q+t*C,g[1]=t*Q-e*C,g[2]=B*Q+o*C,g[3]=o*Q-B*C,g}function dvt(g,A){var I=A[0],e=A[1],t=A[2];return g[0]=I,g[1]=e,g[2]=t,g[3]=Math.sqrt(Math.abs(1-I*I-e*e-t*t)),g}function mwI(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=Math.sqrt(I*I+e*e+t*t),C=Math.exp(B),Q=o>0?C*Math.sin(o)/o:0;return g[0]=I*Q,g[1]=e*Q,g[2]=t*Q,g[3]=C*Math.cos(o),g}function pwI(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=Math.sqrt(I*I+e*e+t*t),C=o>0?Math.atan2(o,B)/o:0;return g[0]=I*C,g[1]=e*C,g[2]=t*C,g[3]=.5*Math.log(I*I+e*e+t*t+B*B),g}function yvt(g,A,I){return pwI(g,A),l$A(g,g,I),mwI(g,g),g}function mdA(g,A,I,e){var t=A[0],B=A[1],o=A[2],C=A[3],Q=I[0],i=I[1],E=I[2],n=I[3],s,r,a,c,h;return r=t*Q+B*i+o*E+C*n,r<0&&(r=-r,Q=-Q,i=-i,E=-E,n=-n),1-r>ao?(s=Math.acos(r),a=Math.sin(s),c=Math.sin((1-e)*s)/a,h=Math.sin(e*s)/a):(c=1-e,h=e),g[0]=c*t+h*Q,g[1]=c*B+h*i,g[2]=c*o+h*E,g[3]=c*C+h*n,g}function wvt(g){var A=J2(),I=J2(),e=J2(),t=Math.sqrt(1-A),B=Math.sqrt(A);return g[0]=t*Math.sin(2*Math.PI*I),g[1]=t*Math.cos(2*Math.PI*I),g[2]=B*Math.sin(2*Math.PI*e),g[3]=B*Math.cos(2*Math.PI*e),g}function uvt(g,A){var I=A[0],e=A[1],t=A[2],B=A[3],o=I*I+e*e+t*t+B*B,C=o?1/o:0;return g[0]=-I*C,g[1]=-e*C,g[2]=-t*C,g[3]=B*C,g}function Gvt(g,A){return g[0]=-A[0],g[1]=-A[1],g[2]=-A[2],g[3]=A[3],g}function kwI(g,A){var I=A[0]+A[4]+A[8],e;if(I>0)e=Math.sqrt(I+1),g[3]=.5*e,e=.5/e,g[0]=(A[5]-A[7])*e,g[1]=(A[6]-A[2])*e,g[2]=(A[1]-A[3])*e;else{var t=0;A[4]>A[0]&&(t=1),A[8]>A[t*3+t]&&(t=2);var B=(t+1)%3,o=(t+2)%3;e=Math.sqrt(A[t*3+t]-A[B*3+B]-A[o*3+o]+1),g[t]=.5*e,e=.5/e,g[3]=(A[B*3+o]-A[o*3+B])*e,g[B]=(A[B*3+t]+A[t*3+B])*e,g[o]=(A[o*3+t]+A[t*3+o])*e}return g}function mvt(g,A,I,e){var t=arguments.length>4&&arguments[4]!==void 0?arguments[4]:E$A,B=Math.PI/360;A*=B,e*=B,I*=B;var o=Math.sin(A),C=Math.cos(A),Q=Math.sin(I),i=Math.cos(I),E=Math.sin(e),n=Math.cos(e);switch(t){case"xyz":g[0]=o*i*n+C*Q*E,g[1]=C*Q*n-o*i*E,g[2]=C*i*E+o*Q*n,g[3]=C*i*n-o*Q*E;break;case"xzy":g[0]=o*i*n-C*Q*E,g[1]=C*Q*n-o*i*E,g[2]=C*i*E+o*Q*n,g[3]=C*i*n+o*Q*E;break;case"yxz":g[0]=o*i*n+C*Q*E,g[1]=C*Q*n-o*i*E,g[2]=C*i*E-o*Q*n,g[3]=C*i*n+o*Q*E;break;case"yzx":g[0]=o*i*n+C*Q*E,g[1]=C*Q*n+o*i*E,g[2]=C*i*E-o*Q*n,g[3]=C*i*n-o*Q*E;break;case"zxy":g[0]=o*i*n-C*Q*E,g[1]=C*Q*n+o*i*E,g[2]=C*i*E+o*Q*n,g[3]=C*i*n-o*Q*E;break;case"zyx":g[0]=o*i*n-C*Q*E,g[1]=C*Q*n+o*i*E,g[2]=C*i*E-o*Q*n,g[3]=C*i*n+o*Q*E;break;default:throw new Error("Unknown angle order "+t)}return g}function pvt(g){return"quat("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+")"}function kvt(g,A){return Math.abs(h$A(g,A))>=1-ao}var MwI,SwI,pdA,fwI,RwI,NwI,l$A,kdA,xwI,MdA,FwI,SdA,UwI,fdA,JwI,KwI,PwI,LwI,YwI=yR({"node_modules/gl-matrix/esm/quat.js"(){nx(),ryI(),ZyI(),lwI(),MwI=VyI,SwI=jyI,pdA=zyI,fwI=XyI,RwI=$yI,NwI=ywI,l$A=ewI,kdA=h$A,xwI=CwI,MdA=r$A,FwI=MdA,SdA=c$A,UwI=SdA,fdA=owI,JwI=QwI,KwI=(function(){var g=n$A(),A=s$A(1,0,0),I=s$A(0,1,0);return function(e,t,B){var o=wdA(t,B);return o<-.999999?(udA(g,A,t),a$A(g)<1e-6&&udA(g,I,t),LyI(g,g),dwI(e,g,Math.PI),e):o>.999999?(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e):(udA(g,t,B),e[0]=g[0],e[1]=g[1],e[2]=g[2],e[3]=1+o,fdA(e,e))}})(),PwI=(function(){var g=GdA(),A=GdA();return function(I,e,t,B,o,C){return mdA(g,e,o,C),mdA(A,t,B,C),mdA(I,g,A,2*C*(1-C)),I}})(),LwI=(function(){var g=iyI();return function(A,I,e,t){return g[0]=e[0],g[3]=e[1],g[6]=e[2],g[1]=t[0],g[4]=t[1],g[7]=t[2],g[2]=-I[0],g[5]=-I[1],g[8]=-I[2],fdA(A,kwI(A,g))}})()}}),_wI={};wR(_wI,{add:()=>Zvt,clone:()=>Svt,conjugate:()=>jvt,copy:()=>HwI,create:()=>Mvt,dot:()=>D$A,equals:()=>Aqt,exactEquals:()=>$vt,fromMat4:()=>Fvt,fromRotation:()=>xvt,fromRotationTranslation:()=>bwI,fromRotationTranslationValues:()=>Rvt,fromTranslation:()=>Nvt,fromValues:()=>fvt,getDual:()=>Kvt,getReal:()=>qwI,getTranslation:()=>Lvt,identity:()=>Uvt,invert:()=>Vvt,len:()=>OwI,length:()=>d$A,lerp:()=>Wvt,mul:()=>ZwI,multiply:()=>vwI,normalize:()=>zvt,rotateAroundAxis:()=>Tvt,rotateByQuatAppend:()=>vvt,rotateByQuatPrepend:()=>qvt,rotateX:()=>_vt,rotateY:()=>bvt,rotateZ:()=>Hvt,scale:()=>Ovt,set:()=>Jvt,setDual:()=>Pvt,setReal:()=>TwI,sqrLen:()=>WwI,squaredLength:()=>jgA,str:()=>Xvt,translate:()=>Yvt});function Mvt(){var g=new Si(8);return Si!=Float32Array&&(g[0]=0,g[1]=0,g[2]=0,g[4]=0,g[5]=0,g[6]=0,g[7]=0),g[3]=1,g}function Svt(g){var A=new Si(8);return A[0]=g[0],A[1]=g[1],A[2]=g[2],A[3]=g[3],A[4]=g[4],A[5]=g[5],A[6]=g[6],A[7]=g[7],A}function fvt(g,A,I,e,t,B,o,C){var Q=new Si(8);return Q[0]=g,Q[1]=A,Q[2]=I,Q[3]=e,Q[4]=t,Q[5]=B,Q[6]=o,Q[7]=C,Q}function Rvt(g,A,I,e,t,B,o){var C=new Si(8);C[0]=g,C[1]=A,C[2]=I,C[3]=e;var Q=t*.5,i=B*.5,E=o*.5;return C[4]=Q*e+i*I-E*A,C[5]=i*e+E*g-Q*I,C[6]=E*e+Q*A-i*g,C[7]=-Q*g-i*A-E*I,C}function bwI(g,A,I){var e=I[0]*.5,t=I[1]*.5,B=I[2]*.5,o=A[0],C=A[1],Q=A[2],i=A[3];return g[0]=o,g[1]=C,g[2]=Q,g[3]=i,g[4]=e*i+t*Q-B*C,g[5]=t*i+B*o-e*Q,g[6]=B*i+e*C-t*o,g[7]=-e*o-t*C-B*Q,g}function Nvt(g,A){return g[0]=0,g[1]=0,g[2]=0,g[3]=1,g[4]=A[0]*.5,g[5]=A[1]*.5,g[6]=A[2]*.5,g[7]=0,g}function xvt(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g[4]=0,g[5]=0,g[6]=0,g[7]=0,g}function Fvt(g,A){var I=GdA();wyI(I,A);var e=new Si(3);return dyI(e,A),bwI(g,I,e),g}function HwI(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g[4]=A[4],g[5]=A[5],g[6]=A[6],g[7]=A[7],g}function Uvt(g){return g[0]=0,g[1]=0,g[2]=0,g[3]=1,g[4]=0,g[5]=0,g[6]=0,g[7]=0,g}function Jvt(g,A,I,e,t,B,o,C,Q){return g[0]=A,g[1]=I,g[2]=e,g[3]=t,g[4]=B,g[5]=o,g[6]=C,g[7]=Q,g}function Kvt(g,A){return g[0]=A[4],g[1]=A[5],g[2]=A[6],g[3]=A[7],g}function Pvt(g,A){return g[4]=A[0],g[5]=A[1],g[6]=A[2],g[7]=A[3],g}function Lvt(g,A){var I=A[4],e=A[5],t=A[6],B=A[7],o=-A[0],C=-A[1],Q=-A[2],i=A[3];return g[0]=(I*i+B*o+e*Q-t*C)*2,g[1]=(e*i+B*C+t*o-I*Q)*2,g[2]=(t*i+B*Q+I*C-e*o)*2,g}function Yvt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=I[0]*.5,Q=I[1]*.5,i=I[2]*.5,E=A[4],n=A[5],s=A[6],r=A[7];return g[0]=e,g[1]=t,g[2]=B,g[3]=o,g[4]=o*C+t*i-B*Q+E,g[5]=o*Q+B*C-e*i+n,g[6]=o*i+e*Q-t*C+s,g[7]=-e*C-t*Q-B*i+r,g}function _vt(g,A,I){var e=-A[0],t=-A[1],B=-A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=C*o+E*e+Q*B-i*t,s=Q*o+E*t+i*e-C*B,r=i*o+E*B+C*t-Q*e,a=E*o-C*e-Q*t-i*B;return wwI(g,A,I),e=g[0],t=g[1],B=g[2],o=g[3],g[4]=n*o+a*e+s*B-r*t,g[5]=s*o+a*t+r*e-n*B,g[6]=r*o+a*B+n*t-s*e,g[7]=a*o-n*e-s*t-r*B,g}function bvt(g,A,I){var e=-A[0],t=-A[1],B=-A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=C*o+E*e+Q*B-i*t,s=Q*o+E*t+i*e-C*B,r=i*o+E*B+C*t-Q*e,a=E*o-C*e-Q*t-i*B;return uwI(g,A,I),e=g[0],t=g[1],B=g[2],o=g[3],g[4]=n*o+a*e+s*B-r*t,g[5]=s*o+a*t+r*e-n*B,g[6]=r*o+a*B+n*t-s*e,g[7]=a*o-n*e-s*t-r*B,g}function Hvt(g,A,I){var e=-A[0],t=-A[1],B=-A[2],o=A[3],C=A[4],Q=A[5],i=A[6],E=A[7],n=C*o+E*e+Q*B-i*t,s=Q*o+E*t+i*e-C*B,r=i*o+E*B+C*t-Q*e,a=E*o-C*e-Q*t-i*B;return GwI(g,A,I),e=g[0],t=g[1],B=g[2],o=g[3],g[4]=n*o+a*e+s*B-r*t,g[5]=s*o+a*t+r*e-n*B,g[6]=r*o+a*B+n*t-s*e,g[7]=a*o-n*e-s*t-r*B,g}function vvt(g,A,I){var e=I[0],t=I[1],B=I[2],o=I[3],C=A[0],Q=A[1],i=A[2],E=A[3];return g[0]=C*o+E*e+Q*B-i*t,g[1]=Q*o+E*t+i*e-C*B,g[2]=i*o+E*B+C*t-Q*e,g[3]=E*o-C*e-Q*t-i*B,C=A[4],Q=A[5],i=A[6],E=A[7],g[4]=C*o+E*e+Q*B-i*t,g[5]=Q*o+E*t+i*e-C*B,g[6]=i*o+E*B+C*t-Q*e,g[7]=E*o-C*e-Q*t-i*B,g}function qvt(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=I[0],Q=I[1],i=I[2],E=I[3];return g[0]=e*E+o*C+t*i-B*Q,g[1]=t*E+o*Q+B*C-e*i,g[2]=B*E+o*i+e*Q-t*C,g[3]=o*E-e*C-t*Q-B*i,C=I[4],Q=I[5],i=I[6],E=I[7],g[4]=e*E+o*C+t*i-B*Q,g[5]=t*E+o*Q+B*C-e*i,g[6]=B*E+o*i+e*Q-t*C,g[7]=o*E-e*C-t*Q-B*i,g}function Tvt(g,A,I,e){if(Math.abs(e)<ao)return HwI(g,A);var t=Math.sqrt(I[0]*I[0]+I[1]*I[1]+I[2]*I[2]);e=e*.5;var B=Math.sin(e),o=B*I[0]/t,C=B*I[1]/t,Q=B*I[2]/t,i=Math.cos(e),E=A[0],n=A[1],s=A[2],r=A[3];g[0]=E*i+r*o+n*Q-s*C,g[1]=n*i+r*C+s*o-E*Q,g[2]=s*i+r*Q+E*C-n*o,g[3]=r*i-E*o-n*C-s*Q;var a=A[4],c=A[5],h=A[6],l=A[7];return g[4]=a*i+l*o+c*Q-h*C,g[5]=c*i+l*C+h*o-a*Q,g[6]=h*i+l*Q+a*C-c*o,g[7]=l*i-a*o-c*C-h*Q,g}function Zvt(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g[2]=A[2]+I[2],g[3]=A[3]+I[3],g[4]=A[4]+I[4],g[5]=A[5]+I[5],g[6]=A[6]+I[6],g[7]=A[7]+I[7],g}function vwI(g,A,I){var e=A[0],t=A[1],B=A[2],o=A[3],C=I[4],Q=I[5],i=I[6],E=I[7],n=A[4],s=A[5],r=A[6],a=A[7],c=I[0],h=I[1],l=I[2],D=I[3];return g[0]=e*D+o*c+t*l-B*h,g[1]=t*D+o*h+B*c-e*l,g[2]=B*D+o*l+e*h-t*c,g[3]=o*D-e*c-t*h-B*l,g[4]=e*E+o*C+t*i-B*Q+n*D+a*c+s*l-r*h,g[5]=t*E+o*Q+B*C-e*i+s*D+a*h+r*c-n*l,g[6]=B*E+o*i+e*Q-t*C+r*D+a*l+n*h-s*c,g[7]=o*E-e*C-t*Q-B*i+a*D-n*c-s*h-r*l,g}function Ovt(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g[3]=A[3]*I,g[4]=A[4]*I,g[5]=A[5]*I,g[6]=A[6]*I,g[7]=A[7]*I,g}function Wvt(g,A,I,e){var t=1-e;return D$A(A,I)<0&&(e=-e),g[0]=A[0]*t+I[0]*e,g[1]=A[1]*t+I[1]*e,g[2]=A[2]*t+I[2]*e,g[3]=A[3]*t+I[3]*e,g[4]=A[4]*t+I[4]*e,g[5]=A[5]*t+I[5]*e,g[6]=A[6]*t+I[6]*e,g[7]=A[7]*t+I[7]*e,g}function Vvt(g,A){var I=jgA(A);return g[0]=-A[0]/I,g[1]=-A[1]/I,g[2]=-A[2]/I,g[3]=A[3]/I,g[4]=-A[4]/I,g[5]=-A[5]/I,g[6]=-A[6]/I,g[7]=A[7]/I,g}function jvt(g,A){return g[0]=-A[0],g[1]=-A[1],g[2]=-A[2],g[3]=A[3],g[4]=-A[4],g[5]=-A[5],g[6]=-A[6],g[7]=A[7],g}function zvt(g,A){var I=jgA(A);if(I>0){I=Math.sqrt(I);var e=A[0]/I,t=A[1]/I,B=A[2]/I,o=A[3]/I,C=A[4],Q=A[5],i=A[6],E=A[7],n=e*C+t*Q+B*i+o*E;g[0]=e,g[1]=t,g[2]=B,g[3]=o,g[4]=(C-e*n)/I,g[5]=(Q-t*n)/I,g[6]=(i-B*n)/I,g[7]=(E-o*n)/I}return g}function Xvt(g){return"quat2("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+", "+g[4]+", "+g[5]+", "+g[6]+", "+g[7]+")"}function $vt(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]&&g[3]===A[3]&&g[4]===A[4]&&g[5]===A[5]&&g[6]===A[6]&&g[7]===A[7]}function Aqt(g,A){var I=g[0],e=g[1],t=g[2],B=g[3],o=g[4],C=g[5],Q=g[6],i=g[7],E=A[0],n=A[1],s=A[2],r=A[3],a=A[4],c=A[5],h=A[6],l=A[7];return Math.abs(I-E)<=ao*Math.max(1,Math.abs(I),Math.abs(E))&&Math.abs(e-n)<=ao*Math.max(1,Math.abs(e),Math.abs(n))&&Math.abs(t-s)<=ao*Math.max(1,Math.abs(t),Math.abs(s))&&Math.abs(B-r)<=ao*Math.max(1,Math.abs(B),Math.abs(r))&&Math.abs(o-a)<=ao*Math.max(1,Math.abs(o),Math.abs(a))&&Math.abs(C-c)<=ao*Math.max(1,Math.abs(C),Math.abs(c))&&Math.abs(Q-h)<=ao*Math.max(1,Math.abs(Q),Math.abs(h))&&Math.abs(i-l)<=ao*Math.max(1,Math.abs(i),Math.abs(l))}var qwI,TwI,ZwI,D$A,d$A,OwI,jgA,WwI,gqt=yR({"node_modules/gl-matrix/esm/quat2.js"(){nx(),YwI(),fyI(),qwI=pdA,TwI=pdA,ZwI=vwI,D$A=kdA,d$A=MdA,OwI=d$A,jgA=SdA,WwI=jgA}}),VwI={};wR(VwI,{add:()=>oqt,angle:()=>kqt,ceil:()=>Cqt,clone:()=>Iqt,copy:()=>tqt,create:()=>jwI,cross:()=>Dqt,dist:()=>QuI,distance:()=>AuI,div:()=>CuI,divide:()=>$wI,dot:()=>lqt,equals:()=>Nqt,exactEquals:()=>Rqt,floor:()=>Qqt,forEach:()=>nuI,fromValues:()=>eqt,inverse:()=>cqt,len:()=>tuI,length:()=>IuI,lerp:()=>dqt,max:()=>Eqt,min:()=>iqt,mul:()=>ouI,multiply:()=>XwI,negate:()=>rqt,normalize:()=>hqt,random:()=>yqt,rotate:()=>pqt,round:()=>nqt,scale:()=>sqt,scaleAndAdd:()=>aqt,set:()=>Bqt,signedAngle:()=>Mqt,sqrDist:()=>iuI,sqrLen:()=>EuI,squaredDistance:()=>guI,squaredLength:()=>euI,str:()=>fqt,sub:()=>BuI,subtract:()=>zwI,transformMat2:()=>wqt,transformMat2d:()=>uqt,transformMat3:()=>Gqt,transformMat4:()=>mqt,zero:()=>Sqt});function jwI(){var g=new Si(2);return Si!=Float32Array&&(g[0]=0,g[1]=0),g}function Iqt(g){var A=new Si(2);return A[0]=g[0],A[1]=g[1],A}function eqt(g,A){var I=new Si(2);return I[0]=g,I[1]=A,I}function tqt(g,A){return g[0]=A[0],g[1]=A[1],g}function Bqt(g,A,I){return g[0]=A,g[1]=I,g}function oqt(g,A,I){return g[0]=A[0]+I[0],g[1]=A[1]+I[1],g}function zwI(g,A,I){return g[0]=A[0]-I[0],g[1]=A[1]-I[1],g}function XwI(g,A,I){return g[0]=A[0]*I[0],g[1]=A[1]*I[1],g}function $wI(g,A,I){return g[0]=A[0]/I[0],g[1]=A[1]/I[1],g}function Cqt(g,A){return g[0]=Math.ceil(A[0]),g[1]=Math.ceil(A[1]),g}function Qqt(g,A){return g[0]=Math.floor(A[0]),g[1]=Math.floor(A[1]),g}function iqt(g,A,I){return g[0]=Math.min(A[0],I[0]),g[1]=Math.min(A[1],I[1]),g}function Eqt(g,A,I){return g[0]=Math.max(A[0],I[0]),g[1]=Math.max(A[1],I[1]),g}function nqt(g,A){return g[0]=Ex(A[0]),g[1]=Ex(A[1]),g}function sqt(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g}function aqt(g,A,I,e){return g[0]=A[0]+I[0]*e,g[1]=A[1]+I[1]*e,g}function AuI(g,A){var I=A[0]-g[0],e=A[1]-g[1];return Math.sqrt(I*I+e*e)}function guI(g,A){var I=A[0]-g[0],e=A[1]-g[1];return I*I+e*e}function IuI(g){var A=g[0],I=g[1];return Math.sqrt(A*A+I*I)}function euI(g){var A=g[0],I=g[1];return A*A+I*I}function rqt(g,A){return g[0]=-A[0],g[1]=-A[1],g}function cqt(g,A){return g[0]=1/A[0],g[1]=1/A[1],g}function hqt(g,A){var I=A[0],e=A[1],t=I*I+e*e;return t>0&&(t=1/Math.sqrt(t)),g[0]=A[0]*t,g[1]=A[1]*t,g}function lqt(g,A){return g[0]*A[0]+g[1]*A[1]}function Dqt(g,A,I){var e=A[0]*I[1]-A[1]*I[0];return g[0]=g[1]=0,g[2]=e,g}function dqt(g,A,I,e){var t=A[0],B=A[1];return g[0]=t+e*(I[0]-t),g[1]=B+e*(I[1]-B),g}function yqt(g,A){A=A===void 0?1:A;var I=J2()*2*Math.PI;return g[0]=Math.cos(I)*A,g[1]=Math.sin(I)*A,g}function wqt(g,A,I){var e=A[0],t=A[1];return g[0]=I[0]*e+I[2]*t,g[1]=I[1]*e+I[3]*t,g}function uqt(g,A,I){var e=A[0],t=A[1];return g[0]=I[0]*e+I[2]*t+I[4],g[1]=I[1]*e+I[3]*t+I[5],g}function Gqt(g,A,I){var e=A[0],t=A[1];return g[0]=I[0]*e+I[3]*t+I[6],g[1]=I[1]*e+I[4]*t+I[7],g}function mqt(g,A,I){var e=A[0],t=A[1];return g[0]=I[0]*e+I[4]*t+I[12],g[1]=I[1]*e+I[5]*t+I[13],g}function pqt(g,A,I,e){var t=A[0]-I[0],B=A[1]-I[1],o=Math.sin(e),C=Math.cos(e);return g[0]=t*C-B*o+I[0],g[1]=t*o+B*C+I[1],g}function kqt(g,A){var I=g[0],e=g[1],t=A[0],B=A[1];return Math.abs(Math.atan2(e*t-I*B,I*t+e*B))}function Mqt(g,A){var I=g[0],e=g[1],t=A[0],B=A[1];return Math.atan2(I*B-e*t,I*t+e*B)}function Sqt(g){return g[0]=0,g[1]=0,g}function fqt(g){return"vec2("+g[0]+", "+g[1]+")"}function Rqt(g,A){return g[0]===A[0]&&g[1]===A[1]}function Nqt(g,A){var I=g[0],e=g[1],t=A[0],B=A[1];return Math.abs(I-t)<=ao*Math.max(1,Math.abs(I),Math.abs(t))&&Math.abs(e-B)<=ao*Math.max(1,Math.abs(e),Math.abs(B))}var tuI,BuI,ouI,CuI,QuI,iuI,EuI,nuI,xqt=yR({"node_modules/gl-matrix/esm/vec2.js"(){nx(),tuI=IuI,BuI=zwI,ouI=XwI,CuI=$wI,QuI=AuI,iuI=guI,EuI=euI,nuI=(function(){var g=jwI();return function(A,I,e,t,B,o){var C,Q;for(I||(I=2),e||(e=0),t?Q=Math.min(t*I+e,A.length):Q=A.length,C=e;C<Q;C+=I)g[0]=A[C],g[1]=A[C+1],B(g,g,o),A[C]=g[0],A[C+1]=g[1];return A}})()}}),suI={};wR(suI,{glMatrix:()=>VdI,mat2:()=>XdI,mat2d:()=>eyI,mat3:()=>QyI,mat4:()=>cyI,quat:()=>DwI,quat2:()=>_wI,vec2:()=>VwI,vec3:()=>RyI,vec4:()=>OyI});var Fqt=yR({"node_modules/gl-matrix/esm/index.js"(){nx(),T9t(),aHt(),ryI(),fyI(),YwI(),gqt(),xqt(),ZyI(),lwI()}}),auI=fg({"node_modules/jscad-planner/dist/index.cjs"(g,A){var I=Object.defineProperty,e=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,B=Object.prototype.hasOwnProperty,o=(w,u)=>{for(var G in u)I(w,G,{get:u[G],enumerable:!0})},C=(w,u,G,m)=>{if(u&&typeof u=="object"||typeof u=="function")for(let p of t(u))!B.call(w,p)&&p!==G&&I(w,p,{get:()=>u[p],enumerable:!(m=e(u,p))||m.enumerable});return w},Q=w=>C(I({},"__esModule",{value:!0}),w),i={};o(i,{assertTransformMatrix:()=>n,executeJscadOperations:()=>d,jscadPlanner:()=>r,resolveReferencePlanes:()=>D,toTransformMatrix:()=>s}),A.exports=Q(i);var E="Transform matrix must be a column-major array of exactly 16 finite numbers";function n(w){if(!Array.isArray(w)||w.length!==16||!Array.from(w).every(Number.isFinite))throw new Error(E)}function s(w){if(w==null||w.length!==16)throw new Error(E);const u=Array.from(w);return n(u),u}var r={booleans:{intersect:(...w)=>({type:"intersect",shapes:w}),subtract:(...w)=>({type:"subtract",shapes:w}),union:(...w)=>({type:"union",shapes:w})},hulls:{hull:(...w)=>({type:"hull",shapes:w.flat()}),hullChain:(...w)=>({type:"hullChain",shapes:w.flat()})},colors:{colorize:(w,u)=>({type:"colorize",color:w,shape:u})},primitives:{rectangle:w=>({...w,type:"rectangle"}),cube:w=>({type:"cube",...w}),sphere:w=>({type:"sphere",...w}),cylinder:w=>({type:"cylinder",...w}),polygon:w=>({type:"polygon",...w}),cuboid:w=>({type:"cuboid",...w}),roundedCuboid:w=>({type:"roundedCuboid",...w})},transforms:{transform:(w,u)=>(n(w),{type:"transform",matrix:w,shape:u}),rotate:(w,u)=>({type:"rotate",angles:w,shape:u}),rotateX:(w,u)=>({type:"rotateX",angle:w,shape:u}),rotateY:(w,u)=>({type:"rotateY",angle:w,shape:u}),rotateZ:(w,u)=>({type:"rotateZ",angle:w,shape:u}),scale:(w,u)=>({type:"scale",factors:w,shape:u}),translate:(w,u)=>({type:"translate",vector:w,shape:u})},extrusions:{extrudeLinear:(w,u)=>({type:"extrudeLinear",options:w,shape:u}),extrudeRotate:(w,u)=>({type:"extrudeRotate",options:w,shape:u})},maths:{vec2:{create:(w,u)=>[w,u],fromValues:(w,u)=>[w,u]},vec3:{create:(w,u,G)=>[w,u,G],fromValues:(w,u,G)=>[w,u,G]}},geometries:{geom2:{create:w=>({type:"createGeom2",points:w}),fromPoints:w=>({type:"fromPointsGeom2",points:w})},geom3:{create:w=>({type:"createGeom3",polygons:w})},path2:{create:w=>({type:"createPath2",points:w})}},measurements:{measureBoundingBox:w=>({type:"measureBoundingBox",shape:w}),measureArea:w=>({type:"measureArea",shape:w}),measureVolume:w=>({type:"measureVolume",shape:w})},utils:{degToRad:w=>w*Math.PI/180,radToDeg:w=>w*180/Math.PI}},a=(Fqt(),UYt(suI)),c=()=>s(a.mat4.create());function h(w){const u=c();switch(w.type){case"transform":return n(w.matrix),[...w.matrix];case"translate":return s(a.mat4.fromTranslation(u,w.vector));case"scale":return s(a.mat4.fromScaling(u,w.factors));case"rotate":return a.mat4.rotateZ(u,u,w.angles[2]),a.mat4.rotateY(u,u,w.angles[1]),a.mat4.rotateX(u,u,w.angles[0]),u;case"rotateX":return s(a.mat4.fromXRotation(u,w.angle));case"rotateY":return s(a.mat4.fromYRotation(u,w.angle));case"rotateZ":return s(a.mat4.fromZRotation(u,w.angle));default:throw new Error(`Cannot use ${w.type} as a reference transform`)}}function l(w,u){const G=w.name;if(!G?.trim())throw new Error("Reference rectangles require a nonblank name");let m;if(w.type==="rectangle"){if(w.size.length!==2||!w.size.every(N=>Number.isFinite(N)&&N>0))throw new Error(`Reference rectangle "${G}" requires two positive finite dimensions`);m=w.center??[0,0]}else{const N=w.points;if(w.paths||N.length!==4||!N.every(H=>H.length===2&&H.every(q=>typeof q=="number"&&Number.isFinite(q))))throw new Error(`Reference polygon "${G}" must be an axis-aligned rectangle`);const J=N,P=[...new Set(J.map(H=>H[0]))],b=[...new Set(J.map(H=>H[1]))];if(P.length!==2||b.length!==2||new Set(J.map(H=>JSON.stringify(H))).size!==4)throw new Error(`Reference polygon "${G}" must be an axis-aligned rectangle`);m=[(P[0]+P[1])/2,(b[0]+b[1])/2]}if(m.length!==2||!m.every(Number.isFinite))throw new Error(`Reference rectangle "${G}" has an invalid center`);const p=c();for(const N of u)a.mat4.multiply(p,p,h(N));if(n(p),p[3]!==0||p[7]!==0||p[11]!==0||p[15]!==1)throw new Error(`Reference rectangle "${G}" requires affine transforms`);const k=a.mat4.invert(c(),p);if(!k)throw new Error(`Reference rectangle "${G}" has a singular transform`);const S=[0,0,0];a.vec3.transformMat4(S,[m[0],m[1],0],p);const R=[k[2],k[6],k[10]],F=[p[0],p[1],p[2]];if(![...S,...R,...F].every(Number.isFinite)||!a.vec3.length(R)||!a.vec3.length(F))throw new Error(`Reference rectangle "${G}" has an invalid frame`);return a.vec3.normalize(R,R),a.vec3.normalize(F,F),{name:G,origin:S,normal:R,xAxis:F}}function D(w){const u=[],G=new Set;function m(S,R,F=!1){if(S.reference){if(S.type!=="rectangle"&&S.type!=="polygon")throw new Error("Only rectangles can be reference geometry");if(F)throw new Error("Reference rectangles must be outside extrusion and measurement inputs");const N=l(S,R);if(G.has(N.name))throw new Error(`Duplicate reference plane "${N.name}"`);G.add(N.name),u.push(N);return}switch(S.type){case"translate":case"rotate":case"rotateX":case"rotateY":case"rotateZ":case"scale":case"transform":{const N=m(S.shape,[...R,S],F);return N?{...S,shape:N}:void 0}case"colorize":{const N=m(S.shape,R,F);return N?{...S,shape:N}:void 0}case"extrudeLinear":case"extrudeRotate":case"measureArea":case"measureVolume":case"measureBoundingBox":{const N=m(S.shape,R,!0);return N?{...S,shape:N}:void 0}case"union":case"subtract":case"intersect":case"hull":case"hullChain":{const N=S.shapes.map(P=>m(P,R,F));if(S.type==="subtract"&&S.shapes.length&&!N[0])throw new Error("A subtraction base cannot be reference geometry");const J=N.filter(P=>P!==void 0);return J.length?J.length===1?J[0]:{...S,shapes:J}:void 0}default:return{...S}}}const p=(Array.isArray(w)?w:[w]).map(S=>m(S,[])).filter(S=>S!==void 0);return{geometry:p.length>1?{type:"union",shapes:p}:p[0],referencePlanes:u}}var d=(w,u)=>{if(Array.isArray(u)&&u.length===1)return d(w,u[0]);if(Array.isArray(u))throw new Error("executeJscadOperations currently doesn't support Array<JscadOperation>, try adding a root union or or executing each element individually");const{geometry:G}=D(u);if(!G)throw new Error("JSCAD plan contains only reference geometry");return y(w,G)},y=(w,u)=>{const G=k=>y(w,k),{type:m,...p}=u;switch(m){case"rectangle":if(!w.primitives.rectangle)throw new Error("JSCAD adapter does not support primitives.rectangle");return w.primitives.rectangle({size:u.size,center:u.center??[0,0]});case"intersect":return w.booleans.intersect(...u.shapes.map(G));case"subtract":return w.booleans.subtract(...u.shapes.map(G));case"union":return w.booleans.union(...u.shapes.map(G));case"hull":return w.hulls.hull(...u.shapes.map(G));case"hullChain":return w.hulls.hullChain(...u.shapes.map(G));case"colorize":return w.colors.colorize(u.color,G(u.shape));case"cube":return w.primitives.cube(p);case"sphere":return w.primitives.sphere(p);case"cylinder":return w.primitives.cylinder(p);case"polygon":return w.primitives.polygon(p);case"cuboid":return w.primitives.cuboid(p);case"roundedCuboid":return w.primitives.roundedCuboid(p);case"transform":if(n(u.matrix),!w.transforms.transform)throw new Error('Cannot execute "transform" operation: this JSCAD adapter does not support transforms.transform');return w.transforms.transform(u.matrix,G(u.shape));case"rotate":return w.transforms.rotate(u.angles,G(u.shape));case"rotateX":return w.transforms.rotateX(u.angle,G(u.shape));case"rotateY":return w.transforms.rotateY(u.angle,G(u.shape));case"rotateZ":return w.transforms.rotateZ(u.angle,G(u.shape));case"scale":return w.transforms.scale(u.factors,G(u.shape));case"translate":return w.transforms.translate(u.vector,G(u.shape));case"extrudeLinear":return w.extrusions.extrudeLinear(u.options,G(u.shape));case"extrudeRotate":return w.extrusions.extrudeRotate(u.options,G(u.shape));case"createGeom2":return w.geometries.geom2.create(u.points);case"fromPointsGeom2":return w.geometries.geom2.fromPoints(u.points);case"createGeom3":return w.geometries.geom3.create(u.polygons);case"createPath2":return w.geometries.path2.create(u.points);case"measureBoundingBox":return w.measurements.measureBoundingBox(G(u.shape));case"measureArea":return w.measurements.measureArea(G(u.shape));case"measureVolume":return w.measurements.measureVolume(G(u.shape));case"degToRad":return w.utils.degToRad(u.degrees);case"radToDeg":return w.utils.radToDeg(u.radians);default:throw u.type===void 0?new Error(`Operation type is undefined. This usually means the operation object is malformed or not properly initialized. Operation: ${JSON.stringify(u,null,2).slice(0,200)}...`):new Error(`Unsupported operation type: ${u.type}. Operation: ${JSON.stringify(u,null,2)}`)}}}}),Uqt=fg({"node_modules/ms/index.js"(g,A){var I=1e3,e=I*60,t=e*60,B=t*24,o=B*7,C=B*365.25;A.exports=function(s,r){r=r||{};var a=typeof s;if(a==="string"&&s.length>0)return Q(s);if(a==="number"&&isFinite(s))return r.long?E(s):i(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function Q(s){if(s=String(s),!(s.length>100)){var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(r){var a=parseFloat(r[1]),c=(r[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return a*C;case"weeks":case"week":case"w":return a*o;case"days":case"day":case"d":return a*B;case"hours":case"hour":case"hrs":case"hr":case"h":return a*t;case"minutes":case"minute":case"mins":case"min":case"m":return a*e;case"seconds":case"second":case"secs":case"sec":case"s":return a*I;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}}}function i(s){var r=Math.abs(s);return r>=B?Math.round(s/B)+"d":r>=t?Math.round(s/t)+"h":r>=e?Math.round(s/e)+"m":r>=I?Math.round(s/I)+"s":s+"ms"}function E(s){var r=Math.abs(s);return r>=B?n(s,r,B,"day"):r>=t?n(s,r,t,"hour"):r>=e?n(s,r,e,"minute"):r>=I?n(s,r,I,"second"):s+" ms"}function n(s,r,a,c){var h=r>=a*1.5;return Math.round(s/a)+" "+c+(h?"s":"")}}}),Jqt=fg({"node_modules/debug/src/common.js"(g,A){function I(e){B.debug=B,B.default=B,B.coerce=n,B.disable=i,B.enable=C,B.enabled=E,B.humanize=Uqt(),B.destroy=s,Object.keys(e).forEach(r=>{B[r]=e[r]}),B.names=[],B.skips=[],B.formatters={};function t(r){let a=0;for(let c=0;c<r.length;c++)a=(a<<5)-a+r.charCodeAt(c),a|=0;return B.colors[Math.abs(a)%B.colors.length]}B.selectColor=t;function B(r){let a,c=null,h,l;function D(...d){if(!D.enabled)return;const y=D,w=Number(new Date),u=w-(a||w);y.diff=u,y.prev=a,y.curr=w,a=w,d[0]=B.coerce(d[0]),typeof d[0]!="string"&&d.unshift("%O");let G=0;d[0]=d[0].replace(/%([a-zA-Z%])/g,(p,k)=>{if(p==="%%")return"%";G++;const S=B.formatters[k];if(typeof S=="function"){const R=d[G];p=S.call(y,R),d.splice(G,1),G--}return p}),B.formatArgs.call(y,d),(y.log||B.log).apply(y,d)}return D.namespace=r,D.useColors=B.useColors(),D.color=B.selectColor(r),D.extend=o,D.destroy=B.destroy,Object.defineProperty(D,"enabled",{enumerable:!0,configurable:!1,get:()=>c!==null?c:(h!==B.namespaces&&(h=B.namespaces,l=B.enabled(r)),l),set:d=>{c=d}}),typeof B.init=="function"&&B.init(D),D}function o(r,a){const c=B(this.namespace+(typeof a>"u"?":":a)+r);return c.log=this.log,c}function C(r){B.save(r),B.namespaces=r,B.names=[],B.skips=[];const a=(typeof r=="string"?r:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const c of a)c[0]==="-"?B.skips.push(c.slice(1)):B.names.push(c)}function Q(r,a){let c=0,h=0,l=-1,D=0;for(;c<r.length;)if(h<a.length&&(a[h]===r[c]||a[h]==="*"))a[h]==="*"?(l=h,D=c,h++):(c++,h++);else if(l!==-1)h=l+1,D++,c=D;else return!1;for(;h<a.length&&a[h]==="*";)h++;return h===a.length}function i(){const r=[...B.names,...B.skips.map(a=>"-"+a)].join(",");return B.enable(""),r}function E(r){for(const a of B.skips)if(Q(r,a))return!1;for(const a of B.names)if(Q(r,a))return!0;return!1}function n(r){return r instanceof Error?r.stack||r.message:r}function s(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return B.enable(B.load()),B}A.exports=I}}),Kqt=fg({"node_modules/debug/src/browser.js"(g,A){g.formatArgs=e,g.save=t,g.load=B,g.useColors=I,g.storage=o(),g.destroy=(()=>{let Q=!1;return()=>{Q||(Q=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),g.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function I(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let Q;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(Q=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(Q[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function e(Q){if(Q[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+Q[0]+(this.useColors?"%c ":" ")+"+"+A.exports.humanize(this.diff),!this.useColors)return;const i="color: "+this.color;Q.splice(1,0,i,"color: inherit");let E=0,n=0;Q[0].replace(/%[a-zA-Z%]/g,s=>{s!=="%%"&&(E++,s==="%c"&&(n=E))}),Q.splice(n,0,i)}g.log=console.debug||console.log||(()=>{});function t(Q){try{Q?g.storage.setItem("debug",Q):g.storage.removeItem("debug")}catch{}}function B(){let Q;try{Q=g.storage.getItem("debug")||g.storage.getItem("DEBUG")}catch{}return!Q&&typeof UXA<"u"&&"env"in UXA&&(Q=UXA.env.DEBUG),Q}function o(){try{return localStorage}catch{}}A.exports=Jqt()(g);var{formatters:C}=A.exports;C.j=function(Q){try{return JSON.stringify(Q)}catch(i){return"[UnexpectedJSONParseError]: "+i.message}}}}),y$A=gA.createContext(null),SD=()=>{const g=gA.useContext(y$A);if(!g)throw new Error("useThree must be used within a ThreeProvider");return g},zgA=(g,A=[])=>{const{addFrameListener:I,removeFrameListener:e}=SD();nC.useEffect(()=>(I(g),()=>e(g)),[I,e,...A])},w$A=gA.createContext(null),Pqt=()=>{const g=gA.useContext(w$A),A=SD();return gA.useEffect(()=>{if(g)return g.current=A,()=>{g.current=null}},[g,A]),null},Lqt=({cadComponent:g,children:A})=>{const I=SD(),e=gA.useMemo(()=>new Nc,[]);e.userData.cad_component_id=g.cad_component_id,e.userData.pcb_component_id=g.pcb_component_id,gA.useEffect(()=>(I.rootObject.add(e),()=>{I.rootObject.remove(e)}),[I.rootObject,e]);const t=gA.useMemo(()=>({...I,rootObject:e}),[I,e]);return W.jsx(y$A.Provider,{value:t,children:A})},ruI=(g,A)=>{if(!g)return;const{camera:I,rootObject:e,renderer:t}=g,B=t.domElement.getBoundingClientRect();if(!B.width||!B.height||A.x<B.left||A.x>B.right||A.y<B.top||A.y>B.bottom)return;const o=new oFg;I.updateWorldMatrix(!0,!1),e.updateWorldMatrix(!0,!0),o.setFromCamera(new ct((A.x-B.left)/B.width*2-1,-((A.y-B.top)/B.height)*2+1),I);for(const C of o.intersectObject(e,!0)){if(!(C.object instanceof FB))continue;let Q=C.object,i=!0;for(;Q;)Q.visible||(i=!1),Q=Q.parent;if(i)return C.object}},Yqt=(g,A,I)=>{let e=ruI(g,A)??null,t;for(;e;)t??=e.userData.pcb_component_id,e=e.parent;if(!t)return;const B=I.find(C=>C.type==="pcb_component"&&C.pcb_component_id===t);if(B?.type!=="pcb_component")return;const o=I.find(C=>C.type==="source_component"&&C.source_component_id===B.source_component_id);if(o?.type==="source_component")return{source_component_id:o.source_component_id,pcb_component_id:B.pcb_component_id,refdes:o.name}};function cuI(g,A){return A??g.some(I=>I.type==="cad_component"&&I.is_on_folded_board===!0)}var _qt=(g,A,I)=>{let e=ruI(g,A)??null;for(;e;){const t=e.userData.cad_component_id;if(t){const B=I.find(C=>C.type==="cad_component"&&C.cad_component_id===t);if(B?.type!=="cad_component")return;const o=I.find(C=>C.type==="source_component"&&C.source_component_id===B.source_component_id);return{cad_component_id:B.cad_component_id,componentName:o?.type==="source_component"?o.name:B.cad_component_id}}e=e.parent}},RdA=new Set,bqt=g=>{const[A,I]=gA.useState({circuitKey:g,ids:RdA}),e=A.circuitKey===g?A.ids:RdA;return A.circuitKey!==g&&I({circuitKey:g,ids:RdA}),{hiddenCadComponentIds:e,hideComponent:t=>{I(B=>({circuitKey:g,ids:new Set([...B.circuitKey===g?B.ids:[],t])}))},unhideAllComponents:()=>{I({circuitKey:g,ids:RdA})}}},u$A=g=>gA.useMemo(()=>{if(!g)return[];const A=new fpt;return A.add(g),A.render(),A.getCircuitJson()},[g]),Hqt=(g,A)=>{const I=g.pcb_component_id?A.find(e=>e.type==="pcb_component"&&e.pcb_component_id===g.pcb_component_id):void 0;return{pcbComponent:I,layer:g.layer??I?.layer??"top",isThroughHole:!!(I&&A.some(e=>e.type==="pcb_plated_hole"&&e.pcb_component_id===I.pcb_component_id))}},G$A=["translucent","opaque","hidden"],vqt=g=>G$A[(G$A.indexOf(g)+1)%G$A.length],huI={boardBody:!0,topCopper:!0,bottomCopper:!0,keepout:!0,adhesive:!1,solderPaste:!1,topSilkscreen:!0,bottomSilkscreen:!0,topMask:!0,bottomMask:!0,throughHoleModels:!0,smtModels:!0,translucentModels:!0,modelsNotInPosFile:!1,modelsMarkedDNP:!1,modelBoundingBoxes:!1,threedAxis:!1,pcbNotes:!1,backgroundStart:!0,backgroundEnd:!0,enclosure:"translucent"},luI=gA.createContext(void 0),qqt=({children:g})=>{const[A,I]=gA.useState(huI),e=gA.useCallback((o,C)=>{I(Q=>({...Q,[o]:C}))},[]),t=gA.useCallback(()=>{I(huI)},[]),B=gA.useMemo(()=>({visibility:A,setLayerVisibility:e,resetToDefaults:t}),[A,e,t]);return W.jsx(luI.Provider,{value:B,children:g})},I5=()=>{const g=gA.useContext(luI);if(!g)throw new Error("useLayerVisibility must be used within a LayerVisibilityProvider");return g},m$A=1.2;function DuI(g){return gA.useMemo(()=>{if(!g)return m$A;try{return jB(g).pcb_board.list()[0]?.thickness??m$A}catch{return m$A}},[g])}var XgA={clickToInteractOverlay:100,htmlElements:95,orientationCube:95,contextMenu:110,appearanceMenu:111},duI=({children:g,position:A,style:I})=>{const{camera:e,renderer:t}=SD(),B=gA.useRef(document.createElement("div")),[o,C]=gA.useState(null);return gA.useEffect(()=>{const Q=t?.domElement.parentNode;if(Q)return Q.style.position!=="relative"&&Q.style.position!=="absolute"&&(Q.style.position="relative"),Q.appendChild(B.current),C(Dcg.createPortal(g,B.current)),()=>{Q.contains(B.current)&&Q.removeChild(B.current)}},[t,g]),zgA(()=>{if(!e||!B.current||!t)return;const Q=new oI(...A);Q.project(e);const i=t.domElement.getBoundingClientRect(),E=Math.round((Q.x+1)/2*i.width),n=Math.round((-Q.y+1)/2*i.height);B.current.style.position="absolute",B.current.style.left=`${E}px`,B.current.style.top=`${n}px`,B.current.style.pointerEvents="none",B.current.style.zIndex=XgA.htmlElements.toString(),I&&Object.assign(B.current.style,I)},[e,t,A,I]),o},Tqt=ts(ydA()),yuI=gA.createContext(null),Zqt=()=>{const g=gA.useContext(yuI);if(!g)throw new Error("useHover must be used within a HoverProvider");return g},Oqt=({children:g})=>{const{camera:A,renderer:I}=SD(),[e,t]=gA.useState([]),B=gA.useMemo(()=>new oFg,[]),o=gA.useMemo(()=>new ct,[]),C=gA.useRef(e);C.current=e;const Q=gA.useRef(null),i=gA.useCallback(a=>{t(c=>[...c,a])},[]),E=gA.useCallback(a=>{if(Q.current){let c=!1,h=Q.current.object;for(;h;){if(h===a){c=!0;break}h=h.parent}c&&(Q.current.onUnhover(),Q.current=null)}t(c=>c.filter(h=>h.object!==a))},[]),n=gA.useCallback(a=>{let c=a;for(;c;){const h=C.current.find(l=>l.object===c);if(h)return h;c=c.parent}},[]),s=gA.useCallback(a=>{if(!I.domElement)return;const c=I.domElement.getBoundingClientRect();o.x=(a.clientX-c.left)/c.width*2-1,o.y=-((a.clientY-c.top)/c.height)*2+1,B.setFromCamera(o,A);const h=C.current.map(D=>D.object);if(h.length===0){Q.current&&(Q.current.onUnhover(),Q.current=null);return}const l=B.intersectObjects(h,!0);if(l.length>0){const D=l[0],d=n(D.object);if(d){const y={mousePosition:[D.point.x,D.point.y,D.point.z]};Q.current!==d?(Q.current?.onUnhover(),d.onHover(y),Q.current=d):d.onHover(y)}else Q.current&&(Q.current.onUnhover(),Q.current=null)}else Q.current&&(Q.current.onUnhover(),Q.current=null)},[A,I,B,o,n]);gA.useEffect(()=>{const a=I.domElement;return a.addEventListener("mousemove",s),()=>{a.removeEventListener("mousemove",s)}},[I,s]);const r=gA.useMemo(()=>({addHoverable:i,removeHoverable:E}),[i,E]);return W.jsx(yuI.Provider,{value:r,children:g})},Wqt=({children:g,object:A,onHover:I,onUnhover:e,isHovered:t})=>{const{addHoverable:B,removeHoverable:o}=Zqt();return gA.useEffect(()=>A?(B({object:A,onHover:I,onUnhover:e}),()=>{o(A)}):void 0,[A,I,e,B,o]),W.jsx(W.Fragment,{children:g})},$gA=Wqt,ZM=(g,{castShadow:A=!0,receiveShadow:I=!0}={})=>{g.traverse(e=>{e instanceof FB&&(e.castShadow=A,e.receiveShadow=I)})},Vqt=({positionOffset:g,footprint:A,rotationOffset:I,onHover:e,onUnhover:t,isHovered:B,scale:o,isTranslucent:C=!1})=>{const{rootObject:Q}=SD(),i=gA.useMemo(()=>{if(!A)return null;const{geometries:E}=VJt(A,Tqt),n=new Nc;for(const s of E.flat(1/0)){const r=s.geom;if(!r||!r.polygons&&!r.sides)continue;const a=new tB(s.color);a.convertLinearToSRGB();const c={...r,color:[a.r,a.g,a.b]},h=r0I(c),l=new Ps({vertexColors:!0,side:dl,transparent:C,opacity:C?.5:1,depthWrite:!C}),D=new FB(h,l);D.renderOrder=C?2:1,ZM(D,{castShadow:!C,receiveShadow:!0}),n.add(D)}return n},[A,C]);return gA.useEffect(()=>{if(!(!i||!Q))return Q.add(i),()=>{Q.remove(i)}},[Q,i]),gA.useEffect(()=>{i&&(g&&i.position.fromArray(g),I&&i.rotation.fromArray(I),o!==void 0&&i.scale.setScalar(o))},[i,g?.[0],g?.[1],g?.[2],I?.[0],I?.[1],I?.[2],o]),gA.useEffect(()=>{i&&i.traverse(E=>{E instanceof FB&&E.material instanceof Ps&&(B?(E.material.emissive.setHex(255),E.material.emissiveIntensity=.2):E.material.emissiveIntensity=0)})},[B,i]),i?W.jsx($gA,{isHovered:B,onHover:e,onUnhover:t,object:i}):null},wuI=new WeakMap,jqt=()=>{const g=new Hr;return g.name="fallback-environment-map",g.mapping=aEA,g},zqt=g=>{if(!g)return null;const A=g,I=wuI.get(A);if(I)return I;let e;if(g instanceof TEA){const t=new O4A(g);e=t.fromScene(d4t(),.04).texture,t.dispose()}else e=jqt();return wuI.set(A,e),e};function Xqt(g){const A=new WG;let I=!1;g.updateWorldMatrix(!0,!1);const e=g.parent?g.parent.matrixWorld.clone().invert():new iQ;return g.traverse(t=>{if(t.updateWorldMatrix(!0,!1),t instanceof FB&&t.geometry&&(t.geometry.boundingBox||t.geometry.computeBoundingBox(),t.geometry.boundingBox)){const B=e.clone().multiply(t.matrixWorld),o=t.geometry.boundingBox.clone();o.applyMatrix4(B),I?A.union(o):(A.copy(o),I=!0)}}),I?A:null}function $qt(g){const A=Xqt(g);return A?A.getSize(new oI):new oI}function A7t(g,A,I="contain_within_bounds"){if(!A)return[1,1,1];const e=$qt(g),t=[e.x>0?A[0]/e.x:1,e.y>0?A[1]/e.y:1,e.z>0?A[2]/e.z:1];if(I==="fill_bounds")return t;const B=Math.min(...t);return[B,B,B]}var p$A=({model:g,position:A,rotation:I,modelOffset:e=[0,0,0],modelRotation:t=[0,0,0],sourceCoordinateTransform:B,modelSize:o,modelFitMode:C="contain_within_bounds",scale:Q})=>{const{rootObject:i}=SD(),E=gA.useMemo(()=>new Nc,[]),n=gA.useMemo(()=>new Nc,[]),s=gA.useMemo(()=>new Nc,[]),r=gA.useMemo(()=>new Nc,[]);return gA.useEffect(()=>(E.add(n),()=>{E.remove(n)}),[E,n]),gA.useEffect(()=>(n.add(s),()=>{n.remove(s)}),[n,s]),gA.useEffect(()=>(s.add(r),()=>{s.remove(r)}),[s,r]),gA.useEffect(()=>{for(;r.children.length>0;){const a=r.children[0];if(!a)break;r.remove(a)}g&&r.add(g)},[r,g]),gA.useEffect(()=>{if(!B){r.matrixAutoUpdate=!0,r.position.set(0,0,0),r.rotation.set(0,0,0),r.scale.set(1,1,1),r.updateMatrix();return}r.matrixAutoUpdate=!1,r.matrix.copy(B),r.matrixWorldNeedsUpdate=!0},[r,B]),gA.useEffect(()=>{if(i)return i.add(E),()=>{i.remove(E)}},[i,E]),gA.useEffect(()=>{if(A?E.position.fromArray(A):E.position.set(0,0,0),I?E.rotation.fromArray(I):E.rotation.set(0,0,0),s.position.fromArray(e),s.rotation.fromArray(t),s.scale.setScalar(Q??1),!g){n.scale.set(1,1,1);return}n.scale.set(1,1,1),n.updateWorldMatrix(!0,!0);const a=A7t(s,o,C);n.scale.set(a[0],a[1],a[2])},[E,n,g,C,e,r,s,t,o,A,I,Q]),{boardTransformGroup:E}},uuI=1.25;function GuI({gltfUrl:g,position:A,rotation:I,modelOffset:e=[0,0,0],modelRotation:t=[0,0,0],sourceCoordinateTransform:B,modelSize:o,modelFitMode:C="contain_within_bounds",onHover:Q,onUnhover:i,isHovered:E,scale:n,isTranslucent:s=!1}){const{renderer:r}=SD(),[a,c]=gA.useState(null),[h,l]=gA.useState(null),{boardTransformGroup:D}=p$A({model:a,position:A,rotation:I,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:n});if(gA.useEffect(()=>{if(!g)return;const d=new w4t;let y=!0;return d.load(g,w=>{if(!y)return;const u=w.scene;u.traverse(G=>{if(G instanceof FB&&G.material){const m=p=>{p.transparent=s,p.opacity=s?.5:1,p.depthWrite=!s,p.needsUpdate=!0};Array.isArray(G.material)?G.material.forEach(m):m(G.material),G.renderOrder=s?2:1}}),ZM(u,{castShadow:!s,receiveShadow:!0}),c(u)},void 0,w=>{if(!y)return;console.error(`An error happened loading ${g}`,w);const u=w instanceof Error?w:new Error(`Failed to load glTF model from ${g}`);l(u)}),()=>{y=!1}},[g,s]),gA.useEffect(()=>{if(!a||!r)return;const d=zqt(r);if(!d)return;const y=[],w=u=>{u instanceof Ps&&(y.push({material:u,envMap:u.envMap??null,envMapIntensity:u.envMapIntensity??1}),u.envMap=d,(typeof u.envMapIntensity!="number"||u.envMapIntensity<uuI)&&(u.envMapIntensity=uuI),u.needsUpdate=!0)};return a.traverse(u=>{if(!(u instanceof FB))return;const G=u.material;Array.isArray(G)?G.forEach(w):G&&w(G)}),()=>{y.forEach(({material:u,envMap:G,envMapIntensity:m})=>{u.envMap=G,u.envMapIntensity=m,u.needsUpdate=!0})}},[a,r]),gA.useEffect(()=>{a&&a.traverse(d=>{if(!(d instanceof FB))return;const y=Array.isArray(d.material)?d.material:[d.material];for(const w of y)w instanceof Ps&&(E?(w.emissive.setHex(255),w.emissiveIntensity=.2):w.emissiveIntensity=0)})},[E,a]),h)throw h;return a?W.jsx($gA,{isHovered:E,onHover:Q,onUnhover:i,object:D}):null}var g7t=ts(auI()),I7t=ts(ydA()),e7t=({jscadPlan:g,positionOffset:A,rotationOffset:I,modelOffset:e=[0,0,0],modelRotation:t=[0,0,0],sourceCoordinateTransform:B,modelSize:o,modelFitMode:C="contain_within_bounds",onHover:Q,onUnhover:i,isHovered:E,scale:n,isTranslucent:s=!1})=>{const[r,a]=gA.useState(null);gA.useEffect(()=>{const l=(0,g7t.executeJscadOperations)(I7t.default,g);if(!l||!l.polygons&&!l.sides){a(null);return}const D=r0I(l),d=new Ps({vertexColors:!0,side:dl}),y=new FB(D,d);return a(y),()=>{D.dispose(),d.dispose()}},[g]),gA.useEffect(()=>{if(!r)return;const l=r.material;l.transparent=s,l.opacity=s?.5:1,l.depthWrite=!s,l.needsUpdate=!0,r.renderOrder=s?2:1,ZM(r,{castShadow:!s,receiveShadow:!0})},[r,s]);const c=r?.material,{boardTransformGroup:h}=p$A({model:r,position:A,rotation:I,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:n});return gA.useEffect(()=>{if(c)if(E){const l=new tB(c.color.getHex());c.emissive.copy(l),c.emissive.setRGB(0,0,1),c.emissiveIntensity=.2}else c.emissiveIntensity=0},[E,c]),r?W.jsx($gA,{isHovered:E,onHover:Q,onUnhover:i,object:h}):null};function t7t(g){return g.replace(/(DEF|USE)\s+([^\s]+)/g,(A,I,e)=>`${I} ${e.replace(/-/g,"_")}`)}async function B7t(g){const A=await fetch(g);if(!A.ok)throw new Error(`Failed to fetch "${g}": ${A.status} ${A.statusText}`);const I=await A.text();return new oKt().parse(t7t(I),g)}typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function o7t(g){const[A,I]=gA.useState(null);return gA.useEffect(()=>{if(!g)return;const e=g.replace(/&cachebust_origin=$/,""),t=window.TSCIRCUIT_OBJ_LOADER_CACHE;let B=!1;async function o(){try{if(e.endsWith(".wrl"))return await B7t(e);const Q=await fetch(e);if(!Q.ok)throw new Error(`Failed to fetch "${e}": ${Q.status} ${Q.statusText}`);const i=await Q.text(),E=i.match(/newmtl[\s\S]*?endmtl/g),n=new cKt;if(E?.length){const s=E.join(`
|
|
5319
|
-
`).replace(/^d\s+0\./gm,"d 1."),r=i.replace(/newmtl[\s\S]*?endmtl/g,"").replace(/^mtllib.*/gm,""),a=new eKt;a.setMaterialOptions({invertTrProperty:!0});const c=a.parse(s,"embedded.mtl");return n.setMaterials(c),n.parse(r)}return n.parse(i.replace(/^mtllib.*/gm,""))}catch(Q){return Q}}function C(){if(t.has(e)){const i=t.get(e);return i.result?Promise.resolve(i.result.clone()):i.promise.then(E=>E instanceof Error?E:E.clone())}const Q=o().then(i=>(i instanceof Error||t.set(e,{...t.get(e),result:i}),i));return t.set(e,{promise:Q,result:null}),Q}return C().then(Q=>{B||I(Q)}).catch(Q=>{console.error(Q)}),()=>{B=!0}},[g]),A}function C7t({url:g,position:A,rotation:I,modelOffset:e=[0,0,0],modelRotation:t=[0,0,0],sourceCoordinateTransform:B,modelSize:o,modelFitMode:C="contain_within_bounds",onHover:Q,onUnhover:i,isHovered:E,scale:n,isTranslucent:s=!1}){const r=o7t(g),a=gA.useMemo(()=>{if(r&&!(r instanceof Error))return r.traverse(l=>{if(l instanceof FB&&l.material){const D=d=>{d.transparent=s,d.opacity=s?.5:1,d.depthWrite=!s,d.needsUpdate=!0};Array.isArray(l.material)?l.material.forEach(D):D(l.material),l.renderOrder=s?2:1}}),ZM(r,{castShadow:!s,receiveShadow:!0}),r;const h=new FB(new Jp(.5,.5,.5),new Ps({transparent:!0,color:"red",opacity:.25}));return ZM(h,{castShadow:!1,receiveShadow:!0}),h},[r,s]),{boardTransformGroup:c}=p$A({model:a,position:Array.isArray(A)?A:A?[A.x,A.y,A.z]:void 0,rotation:Array.isArray(I)?I:I?[I.x,I.y,I.z]:void 0,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:n});if(r instanceof Error)throw r;return W.jsx($gA,{isHovered:E,onHover:Q,onUnhover:i,object:c})}var Q7t=new tB(.82,.82,.82),muI=g=>new Ps({color:g?new tB(g[0],g[1],g[2]):Q7t});function i7t(g,A){const I=muI(A.color),e=A.brep_faces??[];if(e.length===0)return[I];const t=e.length>1?[...e].sort((n,s)=>n.first-s.first):e,B=[I],o=new Map,C=A.index.array.length/3;let Q=0,i=0;const E=n=>{if(!n)return 0;const s=n.join(","),r=o.get(s);if(r!==void 0)return r;const a=B.length;return B.push(muI(n)),o.set(s,a),a};for(;Q<C;){const n=t[i];let s=C,r=0;n&&(Q<n.first?s=n.first:(s=n.last+1,r=E(n.color),i+=1)),s>Q&&g.addGroup(Q*3,(s-Q)*3,r),Q=s}return B}function E7t(g){const A=new Nc;for(const I of g){const e=I.attributes.position?.array??[],t=I.index?.array??[];if(!e.length||!t.length)continue;const B=new Jn;B.setAttribute("position",new To(e,3));const o=I.attributes.normal?.array??[];o.length?B.setAttribute("normal",new To(o,3)):B.computeVertexNormals(),B.setIndex(t),B.clearGroups();const C=i7t(B,I),Q=new FB(B,C.length>1?C:C[0]);Q.name=I.name,A.add(Q)}return A}var k$A,n7t="https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/dist";function s7t(g){if(typeof g=="function")return g;if(g&&typeof g=="object"&&"default"in g&&typeof g.default=="function")return g.default;throw new Error("Unable to resolve occt-import-js factory export")}async function a7t(){if(!k$A){const g=await import("https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/+esm");k$A=s7t(g)({locateFile:I=>`${n7t}/${I}`})}return k$A}async function r7t(g){const A=await fetch(g);if(!A.ok)throw new Error(`Failed to fetch STEP file: ${A.statusText}`);const I=await A.arrayBuffer(),t=(await a7t()).ReadStepFile(new Uint8Array(I),null);if(!t.success||!t.meshes.length)throw new Error("occt-import-js failed to convert STEP file");const B=E7t(t.meshes),o=new _zA;return await new Promise((Q,i)=>{o.parse(B,E=>{E instanceof ArrayBuffer?Q(E):i(new Error("GLTFExporter did not return binary output"))},E=>{i(E)},{binary:!0})})}var puI="step-glb-cache:v2:";function c7t(g){const A=new Uint8Array(g),I=32768;let e="";for(let t=0;t<A.length;t+=I){const B=A.subarray(t,t+I);e+=String.fromCharCode(...B)}return btoa(e)}function h7t(g){const A=atob(g),I=new Uint8Array(A.length);for(let e=0;e<A.length;e+=1)I[e]=A.charCodeAt(e);return I.buffer}function l7t(g){try{const A=localStorage.getItem(`${puI}${g}`);return A?h7t(A):null}catch(A){return console.warn("Failed to read STEP GLB cache",A),null}}function kuI(g,A){try{const I=c7t(A);localStorage.setItem(`${puI}${g}`,I)}catch(I){console.warn("Failed to write STEP GLB cache",I)}}function D7t(){const g=globalThis;return g.stepUrlToGltfModelConversions||(g.stepUrlToGltfModelConversions={inProgress:new Map,completed:new Map}),g.stepUrlToGltfModelConversions}var d7t=({stepUrl:g,position:A,rotation:I,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:Q,onHover:i,onUnhover:E,isHovered:n,isTranslucent:s})=>{const[r,a]=gA.useState(null);return gA.useEffect(()=>{let c=!0,h=null,l=!0;const D=D7t(),d=l7t(g);if(d){const u={arrayBuffer:d,blobUrl:URL.createObjectURL(new Blob([d],{type:"model/gltf-binary"}))};return D.completed.set(g,u),h=u.blobUrl,l=!1,a(u.blobUrl),()=>{c=!1,h&&l&&URL.revokeObjectURL(h)}}const y=D.completed.get(g);if(y)return h=y.blobUrl,l=!1,a(y.blobUrl),kuI(g,y.arrayBuffer),()=>{c=!1,h&&l&&URL.revokeObjectURL(h)};let w=D.inProgress.get(g);return w||(w=r7t(g).then(u=>{const G={arrayBuffer:u,blobUrl:URL.createObjectURL(new Blob([u],{type:"model/gltf-binary"}))};return D.completed.set(g,G),D.inProgress.delete(g),G}).catch(u=>{throw D.inProgress.delete(g),u}),D.inProgress.set(g,w)),w.then(u=>{c&&(h=u.blobUrl,l=!1,a(u.blobUrl),kuI(g,u.arrayBuffer))}).catch(u=>{console.error("Failed to convert STEP file to GLB",u),c&&a(null)}),()=>{c=!1,h&&l&&URL.revokeObjectURL(h)}},[g]),r?W.jsx(GuI,{gltfUrl:r,position:A,rotation:I,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:Q,onHover:i,onUnhover:E,isHovered:n,isTranslucent:s}):null};function NdA(g,A){let{x:I,y:e,z:t}=g;if(A.axisMapping){const B={x:I,y:e,z:t};A.axisMapping.x&&(I=M$A(B,A.axisMapping.x)),A.axisMapping.y&&(e=M$A(B,A.axisMapping.y)),A.axisMapping.z&&(t=M$A(B,A.axisMapping.z))}if(I*=A.flipX??1,e*=A.flipY??1,t*=A.flipZ??1,A.rotation){if(A.rotation.x){const B=A.rotation.x*Math.PI/180,o=Math.cos(B),C=Math.sin(B),Q=e*o-t*C,i=e*C+t*o;e=Q,t=i}if(A.rotation.y){const B=A.rotation.y*Math.PI/180,o=Math.cos(B),C=Math.sin(B),Q=I*o+t*C,i=-I*C+t*o;I=Q,t=i}if(A.rotation.z){const B=A.rotation.z*Math.PI/180,o=Math.cos(B),C=Math.sin(B),Q=I*o-e*C,i=I*C+e*o;I=Q,e=i}}return{x:I,y:e,z:t}}function M$A(g,A){switch(A){case"x":return g.x;case"y":return g.y;case"z":return g.z;case"-x":return-g.x;case"-y":return-g.y;case"-z":return-g.z;default:return 0}}var S$A={STEP_INVERTED:{axisMapping:{x:"-x",y:"z",z:"-y"}},Z_UP_TO_Y_UP_USB_FIX:{axisMapping:{x:"x",y:"-z",z:"y"},flipZ:-1},FOOTPRINTER_MODEL_TRANSFORM:{axisMapping:{x:"x",y:"-z",z:"y"},flipX:-1,rotation:{x:180,y:180}}};function y7t(g,A){if(A.coordinateTransform)return A.coordinateTransform;if(!A.usingGlbCoordinates){if(A.hasFootprinterModel)return S$A.FOOTPRINTER_MODEL_TRANSFORM;if(!A.usingObjFormat)return A.usingStepFormat?S$A.STEP_INVERTED:S$A.Z_UP_TO_Y_UP_USB_FIX}}function AIA(g,A){return y7t(g,{usingGlbCoordinates:A==="gltf"||A==="glb"||A==="jscad",usingObjFormat:A==="obj"||A==="wrl",usingStepFormat:A==="step",hasFootprinterModel:A==="footprinter"})}function xdA(g){if(!g)return;const A=NdA({x:1,y:0,z:0},g),I=NdA({x:0,y:1,z:0},g),e=NdA({x:0,y:0,z:1},g);return new iQ().makeBasis(new oI(A.x,A.y,A.z),new oI(I.x,I.y,I.z),new oI(e.x,e.y,e.z))}function o3(g){return g*Math.PI/180}function w7t(g){if(g==="z+")return[0,0,0];switch(g){case"x+":return[0,o3(-90),0];case"x-":return[0,o3(90),0];case"y+":return[o3(90),0,0];case"y-":return[o3(-90),0,0];case"z-":return[o3(180),0,0];default:return[0,0,0]}}function u7t(g,A,I){if(!g.position)return;let e=g.position.z;return!g.is_on_folded_board&&g.pcb_component_id&&A==="bottom"&&g.position.z>=0&&(e=-(g.position.z+I)),[g.position.x,g.position.y,e]}function G7t(g,A){return g.rotation?[o3(g.rotation.x),o3(g.rotation.y),o3(g.rotation.z)]:A==="bottom"?[Math.PI,0,0]:[0,0,0]}function m7t(g,A){const I=new oI(g.x,g.y,g.z),e=new VG(A[0],A[1],A[2],"XYZ");return I.applyEuler(e),[I.x,I.y,I.z]}function p7t(g,A,I){if(!g.model_origin_position)return[0,0,0];const e=A?NdA(g.model_origin_position,A):g.model_origin_position;return m7t(e,I)}function k7t(g,A){const I=u7t(g,A.layer,A.pcbThickness),e=G7t(g,A.layer),t=AIA(g,A.modelType),B=w7t(g.model_board_normal_direction??"z+"),o=p7t(g,t,B);return{position:I,rotation:e,modelPosition:[-o[0],-o[1],-o[2]],modelRotation:B,scale:g.model_unit_to_mm_scale_factor??void 0,fitMode:g.model_object_fit??"contain_within_bounds",size:g.size?[g.size.x,g.size.y,g.size.z]:void 0}}var M7t=g=>g.model_glb_url||g.model_gltf_url?g.model_glb_url?"glb":"gltf":g.model_obj_url||g.model_wrl_url||g.model_stl_url?g.model_wrl_url?"wrl":g.model_stl_url?"stl":"obj":g.model_jscad?"jscad":g.footprinter_string?"footprinter":g.model_step_url?"step":"unknown",S7t=g=>g==="step"?"glb":g,f7t=(g,A)=>{if(!g.pcb_component_id||!g.model_jscad||g.model_origin_alignment!=="bottom_center_of_component")return!1;const I=A.find(e=>e.type==="pcb_component"&&e.pcb_component_id===g.pcb_component_id);return!!(I&&I.do_not_place&&I.is_allowed_to_be_off_board&&I.obstructs_within_bounds===!1)},R7t=(g,A)=>{if(g)return A?A(g):g},N7t=(...g)=>g,f$A=class extends nC.Component{constructor(g){super(g),this.state={hasError:!1,error:null}}static getDerivedStateFromError(g){return{hasError:!0,error:g}}render(){return this.state.hasError&&this.state.error?this.props.fallback({error:this.state.error}):this.props.children}},x7t=({error:g,onError:A})=>(gA.useEffect(()=>{A(g)},[g,A]),null),MuI=({cad_component:g,circuitJson:A,resolveStaticAsset:I})=>{const e=DuI(A),[t,B]=gA.useState(!1),{visibility:o}=I5(),[C,Q]=gA.useState(null),i=gA.useCallback(H=>{H?.mousePosition?(B(!0),Q(H.mousePosition)):(B(!1),Q(null))},[]),E=gA.useCallback(()=>{B(!1),Q(null)},[]),n=gA.useMemo(()=>jB(A).source_component.getUsing({source_component_id:g.source_component_id})?.name,[A,g.source_component_id]),{pcbComponent:s,layer:r,isThroughHole:a}=gA.useMemo(()=>Hqt(g,A),[g,A]),c=gA.useCallback(H=>R7t(H,I),[I]),h=c(g.model_wrl_url??g.model_stl_url??g.model_obj_url),l=c(g.model_glb_url??g.model_gltf_url),D=c(g.model_step_url),[d,y]=gA.useState(0),[w,u]=gA.useState(null);gA.useEffect(()=>{y(0),u(null)},[g.cad_component_id,h,l,D]);const G=gA.useMemo(()=>f7t(g,A),[g,A]),m=G?o.enclosure==="translucent":!!g.show_as_translucent_model,p=M7t(g),k=S7t(p),S=g.model_glb_url?"glb":"gltf",R=g.model_wrl_url?"wrl":g.model_stl_url?"stl":"obj",F=gA.useMemo(()=>k7t(g,{layer:r,pcbThickness:e,modelType:k}),[g,r,e,k]),N=N7t(...F.rotation),J=F.position,P=gA.useMemo(()=>{const H=[];return l&&H.push(W.jsx(GuI,{gltfUrl:l,position:J,rotation:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,S)),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},`${g.cad_component_id}-gltf-${l}`)),h&&H.push(W.jsx(C7t,{url:h,position:J,rotation:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,R)),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},`${g.cad_component_id}-mixed-${h}`)),D&&!g.model_jscad&&!g.footprinter_string&&H.push(W.jsx(d7t,{stepUrl:D,position:J,rotation:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,k)),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},`${g.cad_component_id}-step-${D}`)),H},[J,g.cad_component_id,g.footprinter_string,g.model_jscad,m,l,S,i,E,t,R,F.modelPosition,F.modelRotation,F.scale,F.fitMode,F.size,k,N,D,h]);let b=null;if(P.length>0){if(d>=P.length){if(w)throw w;return null}b=W.jsx(f$A,{fallback:({error:H})=>W.jsx(x7t,{error:H,onError:q=>{u(q),y(j=>Math.max(j,d+1))}}),children:P[d]},`${g.cad_component_id}-fallback-${d}`)}else g.model_jscad?b=W.jsx(e7t,{jscadPlan:g.model_jscad,positionOffset:J,rotationOffset:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,"jscad")),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},g.cad_component_id):g.footprinter_string&&(b=W.jsx(Vqt,{positionOffset:J,rotationOffset:N,footprint:g.footprinter_string,scale:F.scale,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m}));if(G){if(o.enclosure==="hidden")return null}else if(g.show_as_translucent_model){if(!o.translucentModels)return null}else if(s&&(a&&!o.throughHoleModels||!a&&!o.smtModels))return null;return W.jsxs(W.Fragment,{children:[W.jsx(Lqt,{cadComponent:g,children:b}),t&&C?W.jsx(duI,{position:C,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:n??"<unknown>"}):null]})},SuI={version:"0.0.621"},fuI="cadViewerLightingEnabled",F7t=()=>typeof window>"u"?!0:window.localStorage.getItem(fuI)!=="false",RuI=gA.createContext(void 0),U7t=({children:g})=>{const[A,I]=gA.useState(!1),[e,t]=gA.useState(!1),[B,o]=gA.useState(F7t);gA.useEffect(()=>{window.localStorage.setItem(fuI,B?"true":"false")},[B]);const C=gA.useMemo(()=>({darkBackgroundEnabled:A,setDarkBackgroundEnabled:I,gridEnabled:e,setGridEnabled:t,lightingEnabled:B,setLightingEnabled:o}),[A,e,B]);return W.jsx(RuI.Provider,{value:C,children:g})},R$A=()=>{const g=gA.useContext(RuI);if(!g)throw new Error("useAppearance must be used within an AppearanceProvider");return g},NuI="cadViewerCameraStateSession",xuI=(g,A)=>{try{const I={position:g.position.toArray(),quaternion:g.quaternion.toArray(),up:g.up.toArray(),fov:g.fov??50,target:A.target.toArray()};sessionStorage.setItem(NuI,JSON.stringify(I))}catch(I){console.warn("Failed to save camera:",I)}},N$A=(g,A)=>{try{const I=sessionStorage.getItem(NuI);if(!I)return!1;const e=JSON.parse(I);if(g.position.fromArray(e.position),g.quaternion.fromArray(e.quaternion),g.up.fromArray(e.up),"fov"in g){const t=g;t.fov=e.fov,t.updateProjectionMatrix?.()}return A.target.fromArray(e.target),A.update(),g.updateMatrixWorld(),!0}catch(I){return console.warn("Failed to restore camera:",I),!1}},FuI=gA.createContext(void 0),J7t=({children:g,defaultTarget:A,initialCameraPosition:I,initialCameraType:e})=>{const t=gA.useRef(null),B=gA.useRef(null),[o,C]=gA.useState(null),[Q,i]=gA.useState(e??"perspective"),[E,n]=gA.useState(I??null),[s,r]=gA.useState(new VG(0,0,0)),a=gA.useMemo(()=>{const[D,d,y]=I??[5,-5,5],w=Math.hypot(D-A.x,d-A.y,y-A.z);return w>0?w:5},[I,A]),c=gA.useCallback(D=>{const d=[A.x,A.y,A.z],y=B.current,w=t.current;let u=a;switch(y&&w&&(u=y.position.distanceTo(w.target)),D){case"Top Center Angled":{const G=u/Math.sqrt(2);return{position:[A.x,A.y-G,A.z+G],target:d,up:[0,0,1]}}case"Top Down":return{position:[A.x,A.y,A.z+u],target:d,up:[0,0,1]};case"Top Left Corner":return{position:[A.x-u*.6,A.y-u*.6,A.z+u*.6],target:d,up:[0,0,1]};case"Top Right Corner":return{position:[A.x+u*.6,A.y-u*.6,A.z+u*.6],target:d,up:[0,0,1]};case"Left Sideview":return{position:[A.x-u,A.y,A.z],target:d,up:[0,0,1]};case"Right Sideview":return{position:[A.x+u,A.y,A.z],target:d,up:[0,0,1]};case"Front":return{position:[A.x,A.y-u,A.z],target:d,up:[0,0,1]};default:return null}},[a,A,B,t]),h=gA.useCallback(D=>{t.current=D},[]),l=gA.useMemo(()=>({controlsRef:t,mainCameraRef:B,defaultTarget:A,baseDistance:a,controller:o,setController:C,getPresetConfig:c,handleControlsChange:h,cameraType:Q,setCameraType:i,cameraPosition:E,setCameraPosition:n,cameraRotation:s,setCameraRotation:r,saveCameraToSession:xuI,loadCameraFromSession:N$A}),[A,a,o,c,h,Q,E,s]);return W.jsx(FuI.Provider,{value:l,children:g})},gJ=()=>{const g=gA.useContext(FuI);if(!g)throw new Error("useCameraController must be used within a CameraControllerProvider");return g},K7t=g=>g<.5?4*g*g*g:1-Math.pow(-2*g+2,3)/2,P7t=()=>{const{controlsRef:g,mainCameraRef:A,defaultTarget:I,setController:e,getPresetConfig:t}=gJ(),B=gA.useRef(null),o=gA.useRef(new OG),C=gA.useRef(new oI),Q=gA.useRef(new oI),i=gA.useRef(new OG),E=gA.useRef(new OG),n=gA.useRef(new Ks),s=gA.useRef(new Ks),r=gA.useCallback(({position:c,target:h,up:l,durationMs:D=600})=>{if(!A.current)return;const d=g.current?.target??I,y=new oI(c[0],c[1],c[2]),w=h?new oI(h[0],h[1],h[2]):I.clone(),u=new oI(...l??[0,0,1]).normalize(),G=s.current;G.position.copy(y),G.up.copy(u),G.lookAt(w);const m=G.quaternion.clone(),p=A.current.quaternion.clone(),k=A.current.position.clone(),S=d.clone(),R=n.current;R.up.set(0,0,1),R.position.copy(k),R.lookAt(S);const F=R.quaternion.clone();R.up.set(0,0,1),R.position.copy(y),R.lookAt(w);const N=R.quaternion.clone(),J=F.clone().invert().multiply(p).normalize(),P=N.clone().invert().multiply(m).normalize();B.current={fromPosition:k,toPosition:y,fromTarget:S,toTarget:w,toQuaternion:m,rollFrom:J,rollTo:P,startTime:performance.now(),duration:D}},[A,g,I]),a=gA.useCallback(c=>{if(c==="Custom")return;const h=t(c);h&&r(h)},[r,t]);return gA.useEffect(()=>A.current?(e({animateTo:r,animateToPreset:a}),()=>{e(null)}):void 0,[r,a,A,e]),zgA(()=>{if(!A.current||!B.current)return;const{fromPosition:c,toPosition:h,fromTarget:l,toTarget:D,toQuaternion:d,rollFrom:y,rollTo:w,startTime:u,duration:G}=B.current,m=performance.now()-u,p=G<=0?1:Math.min(m/G,1),k=K7t(p);A.current.position.lerpVectors(c,h,k);const S=C.current;S.copy(l).lerp(D,k);const R=n.current;R.up.set(0,0,1),R.position.copy(A.current.position),R.lookAt(S);const F=o.current;F.copy(R.quaternion);const N=i.current;N.copy(y);const J=E.current;J.copy(w),y.dot(w)<0&&(J.x*=-1,J.y*=-1,J.z*=-1,J.w*=-1),J.normalize(),N.slerp(J,k),A.current.quaternion.copy(F).multiply(N).normalize();const P=Q.current;P.set(0,1,0).applyQuaternion(A.current.quaternion).normalize(),A.current.up.copy(P),g.current?.target.copy(S),A.current.updateMatrixWorld(),g.current?.update(),p>=1&&(A.current.position.copy(h),A.current.quaternion.copy(d),A.current.up.set(0,0,1),A.current.updateMatrixWorld(),g.current?.target.copy(D),g.current?.update(),B.current=null)}),null},L7t=()=>{const{controlsRef:g}=gJ(),A=gA.useRef(null),I=gA.useRef(!1),e=gA.useRef(null),t=gA.useCallback(o=>{A.current=o,!I.current&&g.current&&N$A(o,g.current)&&(I.current=!0)},[g]),B=gA.useCallback(()=>{if(!(!A.current||!g.current)){if(!I.current&&N$A(A.current,g.current)){I.current=!0;return}clearTimeout(e.current),e.current=setTimeout(()=>{A.current&&g.current&&xuI(A.current,g.current)},150)}},[g]);return{handleCameraCreated:t,handleControlsChange:B}};function Y7t(g){g.querySelectorAll("canvas").forEach(A=>A.remove())}var _7t=g=>{g.outputColorSpace=Fp,g.toneMapping=pNg,g.toneMappingExposure=1,g.shadowMap.enabled=!0,g.shadowMap.type=wNg},b7t=gA.forwardRef(({children:g,scene:A,camera:I,style:e,onCreated:t},B)=>{const{cameraType:o}=gJ(),C=gA.useRef(null),[Q,i]=gA.useState(null),E=gA.useRef([]),n=gA.useRef(void 0);n.current=t;const s=gA.useRef(null),r=gA.useCallback(l=>{E.current.push(l)},[]),a=gA.useCallback(l=>{E.current=E.current.filter(D=>D!==l)},[]),c=gA.useMemo(()=>new mY,[]);A?.up&&c.up.set(A.up.x,A.up.y,A.up.z);const h=gA.useRef(new Ks);return gA.useImperativeHandle(B,()=>h.current),gA.useEffect(()=>{if(!C.current)return;Y7t(C.current);const l=new TEA({antialias:!0,alpha:!0});_7t(l),l.setSize(C.current.clientWidth,C.current.clientHeight),l.setPixelRatio(window.devicePixelRatio),C.current.appendChild(l.domElement);const D=C.current.clientWidth/C.current.clientHeight,d=o==="perspective"?new wl(75,D,.1,1e3):new zH(-10*D,10*D,10,-10,-1e3,1e3);s.current?(d.position.copy(s.current.position),d.quaternion.copy(s.current.quaternion),d.up.copy(s.current.up)):(I?.up&&d.up.set(I.up[0],I.up[1],I.up[2]),I?.position&&d.position.set(I.position[0],I.position[1],I.position[2]),d.lookAt(0,0,0)),c.add(h.current),window.__TSCIRCUIT_THREE_OBJECT=h.current,i({scene:c,camera:d,renderer:l,rootObject:h.current,addFrameListener:r,removeFrameListener:a}),n.current?.({camera:d,renderer:l});let y;const w=new jue;let u=!0;const G=new IntersectionObserver(([k])=>{u=k?.isIntersecting??!1,u&&p()});G.observe(C.current);const m=()=>{if(y=requestAnimationFrame(m),!u)return;const k=w.getElapsedTime(),S=w.getDelta();E.current.forEach(R=>R(k,S)),l.render(c,d)};m();const p=()=>{if(C.current?.clientWidth&&C.current.clientHeight){const k=C.current.clientWidth/C.current.clientHeight;d instanceof wl?d.aspect=k:d instanceof zH&&(d.left=-10*k,d.right=10*k,d.top=10,d.bottom=-10),d.updateProjectionMatrix(),l.setSize(C.current.clientWidth,C.current.clientHeight)}};return window.addEventListener("resize",p),()=>{s.current={position:d.position.clone(),quaternion:d.quaternion.clone(),up:d.up.clone()},window.removeEventListener("resize",p),cancelAnimationFrame(y),G.disconnect(),C.current&&l.domElement&&C.current.removeChild(l.domElement),l.dispose(),c.remove(h.current),window.__TSCIRCUIT_THREE_OBJECT===h.current&&(window.__TSCIRCUIT_THREE_OBJECT=void 0)}},[c,r,a,o]),W.jsx("div",{ref:C,style:{width:"100%",height:"100%",...e},children:Q&&W.jsx(y$A.Provider,{value:Q,children:W.jsx(Oqt,{children:g})})})}),H7t=`
|
|
5319
|
+
`).replace(/^d\s+0\./gm,"d 1."),r=i.replace(/newmtl[\s\S]*?endmtl/g,"").replace(/^mtllib.*/gm,""),a=new eKt;a.setMaterialOptions({invertTrProperty:!0});const c=a.parse(s,"embedded.mtl");return n.setMaterials(c),n.parse(r)}return n.parse(i.replace(/^mtllib.*/gm,""))}catch(Q){return Q}}function C(){if(t.has(e)){const i=t.get(e);return i.result?Promise.resolve(i.result.clone()):i.promise.then(E=>E instanceof Error?E:E.clone())}const Q=o().then(i=>(i instanceof Error||t.set(e,{...t.get(e),result:i}),i));return t.set(e,{promise:Q,result:null}),Q}return C().then(Q=>{B||I(Q)}).catch(Q=>{console.error(Q)}),()=>{B=!0}},[g]),A}function C7t({url:g,position:A,rotation:I,modelOffset:e=[0,0,0],modelRotation:t=[0,0,0],sourceCoordinateTransform:B,modelSize:o,modelFitMode:C="contain_within_bounds",onHover:Q,onUnhover:i,isHovered:E,scale:n,isTranslucent:s=!1}){const r=o7t(g),a=gA.useMemo(()=>{if(r&&!(r instanceof Error))return r.traverse(l=>{if(l instanceof FB&&l.material){const D=d=>{d.transparent=s,d.opacity=s?.5:1,d.depthWrite=!s,d.needsUpdate=!0};Array.isArray(l.material)?l.material.forEach(D):D(l.material),l.renderOrder=s?2:1}}),ZM(r,{castShadow:!s,receiveShadow:!0}),r;const h=new FB(new Jp(.5,.5,.5),new Ps({transparent:!0,color:"red",opacity:.25}));return ZM(h,{castShadow:!1,receiveShadow:!0}),h},[r,s]),{boardTransformGroup:c}=p$A({model:a,position:Array.isArray(A)?A:A?[A.x,A.y,A.z]:void 0,rotation:Array.isArray(I)?I:I?[I.x,I.y,I.z]:void 0,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:n});if(r instanceof Error)throw r;return W.jsx($gA,{isHovered:E,onHover:Q,onUnhover:i,object:c})}var Q7t=new tB(.82,.82,.82),muI=g=>new Ps({color:g?new tB(g[0],g[1],g[2]):Q7t});function i7t(g,A){const I=muI(A.color),e=A.brep_faces??[];if(e.length===0)return[I];const t=e.length>1?[...e].sort((n,s)=>n.first-s.first):e,B=[I],o=new Map,C=A.index.array.length/3;let Q=0,i=0;const E=n=>{if(!n)return 0;const s=n.join(","),r=o.get(s);if(r!==void 0)return r;const a=B.length;return B.push(muI(n)),o.set(s,a),a};for(;Q<C;){const n=t[i];let s=C,r=0;n&&(Q<n.first?s=n.first:(s=n.last+1,r=E(n.color),i+=1)),s>Q&&g.addGroup(Q*3,(s-Q)*3,r),Q=s}return B}function E7t(g){const A=new Nc;for(const I of g){const e=I.attributes.position?.array??[],t=I.index?.array??[];if(!e.length||!t.length)continue;const B=new Jn;B.setAttribute("position",new To(e,3));const o=I.attributes.normal?.array??[];o.length?B.setAttribute("normal",new To(o,3)):B.computeVertexNormals(),B.setIndex(t),B.clearGroups();const C=i7t(B,I),Q=new FB(B,C.length>1?C:C[0]);Q.name=I.name,A.add(Q)}return A}var k$A,n7t="https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/dist";function s7t(g){if(typeof g=="function")return g;if(g&&typeof g=="object"&&"default"in g&&typeof g.default=="function")return g.default;throw new Error("Unable to resolve occt-import-js factory export")}async function a7t(){if(!k$A){const g=await import("https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/+esm");k$A=s7t(g)({locateFile:I=>`${n7t}/${I}`})}return k$A}async function r7t(g){const A=await fetch(g);if(!A.ok)throw new Error(`Failed to fetch STEP file: ${A.statusText}`);const I=await A.arrayBuffer(),t=(await a7t()).ReadStepFile(new Uint8Array(I),null);if(!t.success||!t.meshes.length)throw new Error("occt-import-js failed to convert STEP file");const B=E7t(t.meshes),o=new _zA;return await new Promise((Q,i)=>{o.parse(B,E=>{E instanceof ArrayBuffer?Q(E):i(new Error("GLTFExporter did not return binary output"))},E=>{i(E)},{binary:!0})})}var puI="step-glb-cache:v2:";function c7t(g){const A=new Uint8Array(g),I=32768;let e="";for(let t=0;t<A.length;t+=I){const B=A.subarray(t,t+I);e+=String.fromCharCode(...B)}return btoa(e)}function h7t(g){const A=atob(g),I=new Uint8Array(A.length);for(let e=0;e<A.length;e+=1)I[e]=A.charCodeAt(e);return I.buffer}function l7t(g){try{const A=localStorage.getItem(`${puI}${g}`);return A?h7t(A):null}catch(A){return console.warn("Failed to read STEP GLB cache",A),null}}function kuI(g,A){try{const I=c7t(A);localStorage.setItem(`${puI}${g}`,I)}catch(I){console.warn("Failed to write STEP GLB cache",I)}}function D7t(){const g=globalThis;return g.stepUrlToGltfModelConversions||(g.stepUrlToGltfModelConversions={inProgress:new Map,completed:new Map}),g.stepUrlToGltfModelConversions}var d7t=({stepUrl:g,position:A,rotation:I,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:Q,onHover:i,onUnhover:E,isHovered:n,isTranslucent:s})=>{const[r,a]=gA.useState(null);return gA.useEffect(()=>{let c=!0,h=null,l=!0;const D=D7t(),d=l7t(g);if(d){const u={arrayBuffer:d,blobUrl:URL.createObjectURL(new Blob([d],{type:"model/gltf-binary"}))};return D.completed.set(g,u),h=u.blobUrl,l=!1,a(u.blobUrl),()=>{c=!1,h&&l&&URL.revokeObjectURL(h)}}const y=D.completed.get(g);if(y)return h=y.blobUrl,l=!1,a(y.blobUrl),kuI(g,y.arrayBuffer),()=>{c=!1,h&&l&&URL.revokeObjectURL(h)};let w=D.inProgress.get(g);return w||(w=r7t(g).then(u=>{const G={arrayBuffer:u,blobUrl:URL.createObjectURL(new Blob([u],{type:"model/gltf-binary"}))};return D.completed.set(g,G),D.inProgress.delete(g),G}).catch(u=>{throw D.inProgress.delete(g),u}),D.inProgress.set(g,w)),w.then(u=>{c&&(h=u.blobUrl,l=!1,a(u.blobUrl),kuI(g,u.arrayBuffer))}).catch(u=>{console.error("Failed to convert STEP file to GLB",u),c&&a(null)}),()=>{c=!1,h&&l&&URL.revokeObjectURL(h)}},[g]),r?W.jsx(GuI,{gltfUrl:r,position:A,rotation:I,modelOffset:e,modelRotation:t,sourceCoordinateTransform:B,modelSize:o,modelFitMode:C,scale:Q,onHover:i,onUnhover:E,isHovered:n,isTranslucent:s}):null};function NdA(g,A){let{x:I,y:e,z:t}=g;if(A.axisMapping){const B={x:I,y:e,z:t};A.axisMapping.x&&(I=M$A(B,A.axisMapping.x)),A.axisMapping.y&&(e=M$A(B,A.axisMapping.y)),A.axisMapping.z&&(t=M$A(B,A.axisMapping.z))}if(I*=A.flipX??1,e*=A.flipY??1,t*=A.flipZ??1,A.rotation){if(A.rotation.x){const B=A.rotation.x*Math.PI/180,o=Math.cos(B),C=Math.sin(B),Q=e*o-t*C,i=e*C+t*o;e=Q,t=i}if(A.rotation.y){const B=A.rotation.y*Math.PI/180,o=Math.cos(B),C=Math.sin(B),Q=I*o+t*C,i=-I*C+t*o;I=Q,t=i}if(A.rotation.z){const B=A.rotation.z*Math.PI/180,o=Math.cos(B),C=Math.sin(B),Q=I*o-e*C,i=I*C+e*o;I=Q,e=i}}return{x:I,y:e,z:t}}function M$A(g,A){switch(A){case"x":return g.x;case"y":return g.y;case"z":return g.z;case"-x":return-g.x;case"-y":return-g.y;case"-z":return-g.z;default:return 0}}var S$A={STEP_INVERTED:{axisMapping:{x:"-x",y:"z",z:"-y"}},Z_UP_TO_Y_UP_USB_FIX:{axisMapping:{x:"x",y:"-z",z:"y"},flipZ:-1},FOOTPRINTER_MODEL_TRANSFORM:{axisMapping:{x:"x",y:"-z",z:"y"},flipX:-1,rotation:{x:180,y:180}}};function y7t(g,A){if(A.coordinateTransform)return A.coordinateTransform;if(!A.usingGlbCoordinates){if(A.hasFootprinterModel)return S$A.FOOTPRINTER_MODEL_TRANSFORM;if(!A.usingObjFormat)return A.usingStepFormat?S$A.STEP_INVERTED:S$A.Z_UP_TO_Y_UP_USB_FIX}}function AIA(g,A){return y7t(g,{usingGlbCoordinates:A==="gltf"||A==="glb"||A==="jscad",usingObjFormat:A==="obj"||A==="wrl",usingStepFormat:A==="step",hasFootprinterModel:A==="footprinter"})}function xdA(g){if(!g)return;const A=NdA({x:1,y:0,z:0},g),I=NdA({x:0,y:1,z:0},g),e=NdA({x:0,y:0,z:1},g);return new iQ().makeBasis(new oI(A.x,A.y,A.z),new oI(I.x,I.y,I.z),new oI(e.x,e.y,e.z))}function o3(g){return g*Math.PI/180}function w7t(g){if(g==="z+")return[0,0,0];switch(g){case"x+":return[0,o3(-90),0];case"x-":return[0,o3(90),0];case"y+":return[o3(90),0,0];case"y-":return[o3(-90),0,0];case"z-":return[o3(180),0,0];default:return[0,0,0]}}function u7t(g,A,I){if(!g.position)return;let e=g.position.z;return!g.is_on_folded_board&&g.pcb_component_id&&A==="bottom"&&g.position.z>=0&&(e=-(g.position.z+I)),[g.position.x,g.position.y,e]}function G7t(g,A){return g.rotation?[o3(g.rotation.x),o3(g.rotation.y),o3(g.rotation.z)]:A==="bottom"?[Math.PI,0,0]:[0,0,0]}function m7t(g,A){const I=new oI(g.x,g.y,g.z),e=new VG(A[0],A[1],A[2],"XYZ");return I.applyEuler(e),[I.x,I.y,I.z]}function p7t(g,A,I){if(!g.model_origin_position)return[0,0,0];const e=A?NdA(g.model_origin_position,A):g.model_origin_position;return m7t(e,I)}function k7t(g,A){const I=u7t(g,A.layer,A.pcbThickness),e=G7t(g,A.layer),t=AIA(g,A.modelType),B=w7t(g.model_board_normal_direction??"z+"),o=p7t(g,t,B);return{position:I,rotation:e,modelPosition:[-o[0],-o[1],-o[2]],modelRotation:B,scale:g.model_unit_to_mm_scale_factor??void 0,fitMode:g.model_object_fit??"contain_within_bounds",size:g.size?[g.size.x,g.size.y,g.size.z]:void 0}}var M7t=g=>g.model_glb_url||g.model_gltf_url?g.model_glb_url?"glb":"gltf":g.model_obj_url||g.model_wrl_url||g.model_stl_url?g.model_wrl_url?"wrl":g.model_stl_url?"stl":"obj":g.model_jscad?"jscad":g.footprinter_string?"footprinter":g.model_step_url?"step":"unknown",S7t=g=>g==="step"?"glb":g,f7t=(g,A)=>{if(!g.pcb_component_id||!g.model_jscad||g.model_origin_alignment!=="bottom_center_of_component")return!1;const I=A.find(e=>e.type==="pcb_component"&&e.pcb_component_id===g.pcb_component_id);return!!(I&&I.do_not_place&&I.is_allowed_to_be_off_board&&I.obstructs_within_bounds===!1)},R7t=(g,A)=>{if(g)return A?A(g):g},N7t=(...g)=>g,f$A=class extends nC.Component{constructor(g){super(g),this.state={hasError:!1,error:null}}static getDerivedStateFromError(g){return{hasError:!0,error:g}}render(){return this.state.hasError&&this.state.error?this.props.fallback({error:this.state.error}):this.props.children}},x7t=({error:g,onError:A})=>(gA.useEffect(()=>{A(g)},[g,A]),null),MuI=({cad_component:g,circuitJson:A,resolveStaticAsset:I})=>{const e=DuI(A),[t,B]=gA.useState(!1),{visibility:o}=I5(),[C,Q]=gA.useState(null),i=gA.useCallback(H=>{H?.mousePosition?(B(!0),Q(H.mousePosition)):(B(!1),Q(null))},[]),E=gA.useCallback(()=>{B(!1),Q(null)},[]),n=gA.useMemo(()=>jB(A).source_component.getUsing({source_component_id:g.source_component_id})?.name,[A,g.source_component_id]),{pcbComponent:s,layer:r,isThroughHole:a}=gA.useMemo(()=>Hqt(g,A),[g,A]),c=gA.useCallback(H=>R7t(H,I),[I]),h=c(g.model_wrl_url??g.model_stl_url??g.model_obj_url),l=c(g.model_glb_url??g.model_gltf_url),D=c(g.model_step_url),[d,y]=gA.useState(0),[w,u]=gA.useState(null);gA.useEffect(()=>{y(0),u(null)},[g.cad_component_id,h,l,D]);const G=gA.useMemo(()=>f7t(g,A),[g,A]),m=G?o.enclosure==="translucent":!!g.show_as_translucent_model,p=M7t(g),k=S7t(p),S=g.model_glb_url?"glb":"gltf",R=g.model_wrl_url?"wrl":g.model_stl_url?"stl":"obj",F=gA.useMemo(()=>k7t(g,{layer:r,pcbThickness:e,modelType:k}),[g,r,e,k]),N=N7t(...F.rotation),J=F.position,P=gA.useMemo(()=>{const H=[];return l&&H.push(W.jsx(GuI,{gltfUrl:l,position:J,rotation:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,S)),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},`${g.cad_component_id}-gltf-${l}`)),h&&H.push(W.jsx(C7t,{url:h,position:J,rotation:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,R)),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},`${g.cad_component_id}-mixed-${h}`)),D&&!g.model_jscad&&!g.footprinter_string&&H.push(W.jsx(d7t,{stepUrl:D,position:J,rotation:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,k)),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},`${g.cad_component_id}-step-${D}`)),H},[J,g.cad_component_id,g.footprinter_string,g.model_jscad,m,l,S,i,E,t,R,F.modelPosition,F.modelRotation,F.scale,F.fitMode,F.size,k,N,D,h]);let b=null;if(P.length>0){if(d>=P.length){if(w)throw w;return null}b=W.jsx(f$A,{fallback:({error:H})=>W.jsx(x7t,{error:H,onError:q=>{u(q),y(j=>Math.max(j,d+1))}}),children:P[d]},`${g.cad_component_id}-fallback-${d}`)}else g.model_jscad?b=W.jsx(e7t,{jscadPlan:g.model_jscad,positionOffset:J,rotationOffset:N,modelOffset:F.modelPosition,modelRotation:F.modelRotation,sourceCoordinateTransform:xdA(AIA(g,"jscad")),scale:F.scale,modelSize:F.size,modelFitMode:F.fitMode,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m},g.cad_component_id):g.footprinter_string&&(b=W.jsx(Vqt,{positionOffset:J,rotationOffset:N,footprint:g.footprinter_string,scale:F.scale,onHover:i,onUnhover:E,isHovered:t,isTranslucent:m}));if(G){if(o.enclosure==="hidden")return null}else if(g.show_as_translucent_model){if(!o.translucentModels)return null}else if(s&&(a&&!o.throughHoleModels||!a&&!o.smtModels))return null;return W.jsxs(W.Fragment,{children:[W.jsx(Lqt,{cadComponent:g,children:b}),t&&C?W.jsx(duI,{position:C,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:n??"<unknown>"}):null]})},SuI={version:"0.0.622"},fuI="cadViewerLightingEnabled",F7t=()=>typeof window>"u"?!0:window.localStorage.getItem(fuI)!=="false",RuI=gA.createContext(void 0),U7t=({children:g})=>{const[A,I]=gA.useState(!1),[e,t]=gA.useState(!1),[B,o]=gA.useState(F7t);gA.useEffect(()=>{window.localStorage.setItem(fuI,B?"true":"false")},[B]);const C=gA.useMemo(()=>({darkBackgroundEnabled:A,setDarkBackgroundEnabled:I,gridEnabled:e,setGridEnabled:t,lightingEnabled:B,setLightingEnabled:o}),[A,e,B]);return W.jsx(RuI.Provider,{value:C,children:g})},R$A=()=>{const g=gA.useContext(RuI);if(!g)throw new Error("useAppearance must be used within an AppearanceProvider");return g},NuI="cadViewerCameraStateSession",xuI=(g,A)=>{try{const I={position:g.position.toArray(),quaternion:g.quaternion.toArray(),up:g.up.toArray(),fov:g.fov??50,target:A.target.toArray()};sessionStorage.setItem(NuI,JSON.stringify(I))}catch(I){console.warn("Failed to save camera:",I)}},N$A=(g,A)=>{try{const I=sessionStorage.getItem(NuI);if(!I)return!1;const e=JSON.parse(I);if(g.position.fromArray(e.position),g.quaternion.fromArray(e.quaternion),g.up.fromArray(e.up),"fov"in g){const t=g;t.fov=e.fov,t.updateProjectionMatrix?.()}return A.target.fromArray(e.target),A.update(),g.updateMatrixWorld(),!0}catch(I){return console.warn("Failed to restore camera:",I),!1}},FuI=gA.createContext(void 0),J7t=({children:g,defaultTarget:A,initialCameraPosition:I,initialCameraType:e})=>{const t=gA.useRef(null),B=gA.useRef(null),[o,C]=gA.useState(null),[Q,i]=gA.useState(e??"perspective"),[E,n]=gA.useState(I??null),[s,r]=gA.useState(new VG(0,0,0)),a=gA.useMemo(()=>{const[D,d,y]=I??[5,-5,5],w=Math.hypot(D-A.x,d-A.y,y-A.z);return w>0?w:5},[I,A]),c=gA.useCallback(D=>{const d=[A.x,A.y,A.z],y=B.current,w=t.current;let u=a;switch(y&&w&&(u=y.position.distanceTo(w.target)),D){case"Top Center Angled":{const G=u/Math.sqrt(2);return{position:[A.x,A.y-G,A.z+G],target:d,up:[0,0,1]}}case"Top Down":return{position:[A.x,A.y,A.z+u],target:d,up:[0,0,1]};case"Top Left Corner":return{position:[A.x-u*.6,A.y-u*.6,A.z+u*.6],target:d,up:[0,0,1]};case"Top Right Corner":return{position:[A.x+u*.6,A.y-u*.6,A.z+u*.6],target:d,up:[0,0,1]};case"Left Sideview":return{position:[A.x-u,A.y,A.z],target:d,up:[0,0,1]};case"Right Sideview":return{position:[A.x+u,A.y,A.z],target:d,up:[0,0,1]};case"Front":return{position:[A.x,A.y-u,A.z],target:d,up:[0,0,1]};default:return null}},[a,A,B,t]),h=gA.useCallback(D=>{t.current=D},[]),l=gA.useMemo(()=>({controlsRef:t,mainCameraRef:B,defaultTarget:A,baseDistance:a,controller:o,setController:C,getPresetConfig:c,handleControlsChange:h,cameraType:Q,setCameraType:i,cameraPosition:E,setCameraPosition:n,cameraRotation:s,setCameraRotation:r,saveCameraToSession:xuI,loadCameraFromSession:N$A}),[A,a,o,c,h,Q,E,s]);return W.jsx(FuI.Provider,{value:l,children:g})},gJ=()=>{const g=gA.useContext(FuI);if(!g)throw new Error("useCameraController must be used within a CameraControllerProvider");return g},K7t=g=>g<.5?4*g*g*g:1-Math.pow(-2*g+2,3)/2,P7t=()=>{const{controlsRef:g,mainCameraRef:A,defaultTarget:I,setController:e,getPresetConfig:t}=gJ(),B=gA.useRef(null),o=gA.useRef(new OG),C=gA.useRef(new oI),Q=gA.useRef(new oI),i=gA.useRef(new OG),E=gA.useRef(new OG),n=gA.useRef(new Ks),s=gA.useRef(new Ks),r=gA.useCallback(({position:c,target:h,up:l,durationMs:D=600})=>{if(!A.current)return;const d=g.current?.target??I,y=new oI(c[0],c[1],c[2]),w=h?new oI(h[0],h[1],h[2]):I.clone(),u=new oI(...l??[0,0,1]).normalize(),G=s.current;G.position.copy(y),G.up.copy(u),G.lookAt(w);const m=G.quaternion.clone(),p=A.current.quaternion.clone(),k=A.current.position.clone(),S=d.clone(),R=n.current;R.up.set(0,0,1),R.position.copy(k),R.lookAt(S);const F=R.quaternion.clone();R.up.set(0,0,1),R.position.copy(y),R.lookAt(w);const N=R.quaternion.clone(),J=F.clone().invert().multiply(p).normalize(),P=N.clone().invert().multiply(m).normalize();B.current={fromPosition:k,toPosition:y,fromTarget:S,toTarget:w,toQuaternion:m,rollFrom:J,rollTo:P,startTime:performance.now(),duration:D}},[A,g,I]),a=gA.useCallback(c=>{if(c==="Custom")return;const h=t(c);h&&r(h)},[r,t]);return gA.useEffect(()=>A.current?(e({animateTo:r,animateToPreset:a}),()=>{e(null)}):void 0,[r,a,A,e]),zgA(()=>{if(!A.current||!B.current)return;const{fromPosition:c,toPosition:h,fromTarget:l,toTarget:D,toQuaternion:d,rollFrom:y,rollTo:w,startTime:u,duration:G}=B.current,m=performance.now()-u,p=G<=0?1:Math.min(m/G,1),k=K7t(p);A.current.position.lerpVectors(c,h,k);const S=C.current;S.copy(l).lerp(D,k);const R=n.current;R.up.set(0,0,1),R.position.copy(A.current.position),R.lookAt(S);const F=o.current;F.copy(R.quaternion);const N=i.current;N.copy(y);const J=E.current;J.copy(w),y.dot(w)<0&&(J.x*=-1,J.y*=-1,J.z*=-1,J.w*=-1),J.normalize(),N.slerp(J,k),A.current.quaternion.copy(F).multiply(N).normalize();const P=Q.current;P.set(0,1,0).applyQuaternion(A.current.quaternion).normalize(),A.current.up.copy(P),g.current?.target.copy(S),A.current.updateMatrixWorld(),g.current?.update(),p>=1&&(A.current.position.copy(h),A.current.quaternion.copy(d),A.current.up.set(0,0,1),A.current.updateMatrixWorld(),g.current?.target.copy(D),g.current?.update(),B.current=null)}),null},L7t=()=>{const{controlsRef:g}=gJ(),A=gA.useRef(null),I=gA.useRef(!1),e=gA.useRef(null),t=gA.useCallback(o=>{A.current=o,!I.current&&g.current&&N$A(o,g.current)&&(I.current=!0)},[g]),B=gA.useCallback(()=>{if(!(!A.current||!g.current)){if(!I.current&&N$A(A.current,g.current)){I.current=!0;return}clearTimeout(e.current),e.current=setTimeout(()=>{A.current&&g.current&&xuI(A.current,g.current)},150)}},[g]);return{handleCameraCreated:t,handleControlsChange:B}};function Y7t(g){g.querySelectorAll("canvas").forEach(A=>A.remove())}var _7t=g=>{g.outputColorSpace=Fp,g.toneMapping=pNg,g.toneMappingExposure=1,g.shadowMap.enabled=!0,g.shadowMap.type=wNg},b7t=gA.forwardRef(({children:g,scene:A,camera:I,style:e,onCreated:t},B)=>{const{cameraType:o}=gJ(),C=gA.useRef(null),[Q,i]=gA.useState(null),E=gA.useRef([]),n=gA.useRef(void 0);n.current=t;const s=gA.useRef(null),r=gA.useCallback(l=>{E.current.push(l)},[]),a=gA.useCallback(l=>{E.current=E.current.filter(D=>D!==l)},[]),c=gA.useMemo(()=>new mY,[]);A?.up&&c.up.set(A.up.x,A.up.y,A.up.z);const h=gA.useRef(new Ks);return gA.useImperativeHandle(B,()=>h.current),gA.useEffect(()=>{if(!C.current)return;Y7t(C.current);const l=new TEA({antialias:!0,alpha:!0});_7t(l),l.setSize(C.current.clientWidth,C.current.clientHeight),l.setPixelRatio(window.devicePixelRatio),C.current.appendChild(l.domElement);const D=C.current.clientWidth/C.current.clientHeight,d=o==="perspective"?new wl(75,D,.1,1e3):new zH(-10*D,10*D,10,-10,-1e3,1e3);s.current?(d.position.copy(s.current.position),d.quaternion.copy(s.current.quaternion),d.up.copy(s.current.up)):(I?.up&&d.up.set(I.up[0],I.up[1],I.up[2]),I?.position&&d.position.set(I.position[0],I.position[1],I.position[2]),d.lookAt(0,0,0)),c.add(h.current),window.__TSCIRCUIT_THREE_OBJECT=h.current,i({scene:c,camera:d,renderer:l,rootObject:h.current,addFrameListener:r,removeFrameListener:a}),n.current?.({camera:d,renderer:l});let y;const w=new jue;let u=!0;const G=new IntersectionObserver(([k])=>{u=k?.isIntersecting??!1,u&&p()});G.observe(C.current);const m=()=>{if(y=requestAnimationFrame(m),!u)return;const k=w.getElapsedTime(),S=w.getDelta();E.current.forEach(R=>R(k,S)),l.render(c,d)};m();const p=()=>{if(C.current?.clientWidth&&C.current.clientHeight){const k=C.current.clientWidth/C.current.clientHeight;d instanceof wl?d.aspect=k:d instanceof zH&&(d.left=-10*k,d.right=10*k,d.top=10,d.bottom=-10),d.updateProjectionMatrix(),l.setSize(C.current.clientWidth,C.current.clientHeight)}};return window.addEventListener("resize",p),()=>{s.current={position:d.position.clone(),quaternion:d.quaternion.clone(),up:d.up.clone()},window.removeEventListener("resize",p),cancelAnimationFrame(y),G.disconnect(),C.current&&l.domElement&&C.current.removeChild(l.domElement),l.dispose(),c.remove(h.current),window.__TSCIRCUIT_THREE_OBJECT===h.current&&(window.__TSCIRCUIT_THREE_OBJECT=void 0)}},[c,r,a,o]),W.jsx("div",{ref:C,style:{width:"100%",height:"100%",...e},children:Q&&W.jsx(y$A.Provider,{value:Q,children:W.jsx(Oqt,{children:g})})})}),H7t=`
|
|
5320
5320
|
varying vec3 worldPosition;
|
|
5321
5321
|
void main() {
|
|
5322
5322
|
worldPosition = (modelMatrix * vec4(position, 1.0)).xyz;
|
|
@@ -5670,7 +5670,7 @@ test("${i} should solve problem correctly", () => {
|
|
|
5670
5670
|
// Add more specific assertions based on expected output
|
|
5671
5671
|
// expect(solver.netLabelPlacementSolver!.netLabelPlacements).toMatchInlineSnapshot()
|
|
5672
5672
|
})
|
|
5673
|
-
`,n=new Blob([E],{type:"text/plain"}),s=URL.createObjectURL(n),r=document.createElement("a");r.href=s,r.download=`${i}.test.ts`,r.click(),URL.revokeObjectURL(s)}catch(Q){alert(`Error generating test.ts for ${g.getSolverName()}: ${Q instanceof Error?Q.message:String(Q)}`)}e(!1)};return W.jsxs("div",{className:`relative ${A}`,ref:t,children:[W.jsx("button",{className:"px-2 py-1 rounded text-xs cursor-pointer",onClick:()=>e(!I),title:`Download options for ${g.getSolverName()}`,children:g.getSolverName()}),I&&W.jsxs("div",{className:"absolute top-full left-0 mt-1 bg-white border border-gray-300 rounded shadow-lg z-10 min-w-[150px]",children:[W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:B,children:"Download JSON"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:o,children:"Download page.tsx"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:C,children:"Download test.ts"})]})]})},zNI=g=>g.activeSubSolver?[g,...zNI(g.activeSubSolver)]:[g],_hB=({solver:g})=>{const A=zNI(g);return W.jsx("div",{className:"flex gap-1 items-center text-sm pt-1",children:A.map((I,e)=>W.jsxs("div",{className:"flex items-center",children:[e>0&&W.jsx("span",{className:"text-gray-400 mx-1",children:"→"}),W.jsx(YhB,{solver:I})]},I.getSolverName()))})},bhB=({solver:g,triggerRender:A,animationSpeed:I=25,renderer:e,onRendererChange:t,onAnimationSpeedChange:B,onDownloadVisualization:o,onSolverStarted:C,onSolverCompleted:Q})=>{const[i,E]=gA.useReducer(m=>!m,!1),n=gA.useRef(void 0),s=gA.useRef(null),r="solver-debugger-last-iteration",[a,c]=gA.useState(null),h=gA.useRef(null),l=gA.useMemo(()=>[{label:"Slow",value:250,description:"250ms"},{label:"Normal",value:100,description:"100ms"},{label:"Fast",value:10,description:"10ms"},{label:"Fast (2x)",value:5,description:"5ms"},{label:"Fast (10x)",value:1,description:"1ms"},{label:"Fast 20x",value:.5,description:"2 steps / 1ms"},{label:"Fast 100x",value:.1,description:"10 steps / 1ms"}],[]),D=()=>{const m=Math.max(1,I),p=I<1?Math.round(1/I):1;n.current=setInterval(()=>{if(g.solved||g.failed){n.current&&(clearInterval(n.current),n.current=void 0),E(),A(),Q&&g.solved&&Q(g);return}for(let k=0;k<p&&!(g.solved||g.failed);k++)g.step();A()},m)},d=()=>{n.current&&(clearInterval(n.current),n.current=void 0)},y=()=>{!g.solved&&!g.failed&&(g.step(),A())},w=()=>{!g.solved&&!g.failed&&(C&&C(g),g.solve(),A(),Q&&Q(g))},u=()=>{i?(d(),E()):(E(),D())},G=()=>{if(g.solved||g.failed||i)return;s.current===null&&typeof window<"u"&&(s.current=window.localStorage.getItem(r));const m=window.prompt("Step until which iteration?",s.current??`${g.iterations}`);if(m===null)return;s.current=m,typeof window<"u"&&window.localStorage.setItem(r,m);const p=Number(m);if(!Number.isFinite(p)){window.alert("Please enter a valid number for the iteration");return}for(;g.iterations<p&&!g.solved&&!g.failed;)g.step();A(),g.solved&&Q&&Q(g)};return gA.useEffect(()=>()=>{d()},[]),gA.useEffect(()=>{(g.solved||g.failed)&&i&&(d(),E())},[g.solved,g.failed,i]),gA.useEffect(()=>{i&&(d(),D())},[I,i]),gA.useEffect(()=>{if(typeof document>"u")return;const m=p=>{h.current&&!h.current.contains(p.target)&&c(null)};return document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m)}},[]),W.jsxs("div",{className:"space-y-2 p-2 border-b",children:[W.jsx("div",{className:"flex items-center",children:W.jsxs("div",{className:"flex items-center gap-2",ref:h,children:[W.jsxs("div",{className:"flex h-9 items-center space-x-1 rounded-md border border-slate-200 bg-white p-1 shadow-sm",children:[W.jsxs("div",{className:"relative",children:[W.jsx("button",{type:"button",onClick:()=>c(a==="renderer"?null:"renderer"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":a==="renderer"?"open":"closed",children:"Renderer"}),a==="renderer"&&W.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[10rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:["vector","canvas"].map(m=>W.jsxs("button",{type:"button",onClick:()=>{t(m),c(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[m==="vector"?"Vector":"Canvas",e===m&&W.jsx("span",{className:"ml-auto text-xs text-slate-500",children:"✓"})]},m))})]}),W.jsxs("div",{className:"relative",children:[W.jsx("button",{type:"button",onClick:()=>c(a==="debug"?null:"debug"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":a==="debug"?"open":"closed",children:"Debug"}),a==="debug"&&W.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:W.jsx("button",{type:"button",onClick:()=>{o(),c(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:"Download Visualization"})})]}),W.jsxs("div",{className:"relative",children:[W.jsx("button",{type:"button",onClick:()=>c(a==="animation"?null:"animation"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":a==="animation"?"open":"closed",children:"Animation"}),a==="animation"&&W.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:l.map(m=>W.jsxs("button",{type:"button",onClick:()=>{B(m.value),c(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[m.label,W.jsx("span",{className:"ml-auto text-xs text-slate-500",children:m.description}),I===m.value&&W.jsx("span",{className:"ml-2 text-xs text-slate-500",children:"✓"})]},m.value))})]})]}),W.jsx(_hB,{solver:g})]})}),W.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[W.jsx("button",{onClick:y,disabled:g.solved||g.failed||i,className:"bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step"}),W.jsx("button",{onClick:w,disabled:g.solved||g.failed||i,className:"bg-green-500 hover:bg-green-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Solve"}),W.jsx("button",{onClick:u,disabled:g.solved||g.failed,className:`px-3 py-1 rounded text-white text-sm ${i?"bg-red-500 hover:bg-red-600":"bg-yellow-500 hover:bg-yellow-600"} disabled:bg-gray-300`,children:i?"Stop":"Animate"}),W.jsx("button",{onClick:G,disabled:g.solved||g.failed||i,className:"bg-orange-500 hover:bg-orange-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step Until Iteration"}),W.jsxs("div",{className:"text-sm text-gray-600",children:["Iterations: ",g.iterations]}),g.timeToSolve!==void 0&&W.jsxs("div",{className:"text-sm text-gray-600",children:["Time: ",(g.timeToSolve/1e3).toFixed(3),"s"]}),g.solved&&W.jsx("div",{className:"px-2 py-1 bg-green-100 text-green-800 rounded text-sm",children:"Solved"}),g.failed&&W.jsx("div",{className:"px-2 py-1 bg-red-100 text-red-800 rounded text-sm",children:"Failed"})]}),g.error&&W.jsxs("div",{className:"text-red-600 text-sm",children:["Error: ",g.error]})]})},HhB=g=>g!==null&&"pipelineDef"in g&&Array.isArray(g.pipelineDef),vhB=(g,A,I)=>{const e=g.currentPipelineStageIndex;return A<e?"Completed":A===e&&g.activeSubSolver?g.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},qhB=(g,A)=>{const e=g.pipelineDef[A].solverName,t=vhB(g,A),B=g[e],o=g.firstIterationOfStage?.[e]??(A===g.currentPipelineStageIndex?g.iterations:null),C=g.iterations;let Q=0;if(t==="Completed"){const s=g.pipelineDef[A+1],r=s?g.firstIterationOfStage?.[s.solverName]:void 0;r!==void 0&&o!==null?Q=r-o:o!==null&&(Q=C-o)}else t==="In Progress"&&o!==null&&(Q=C-o);const i=g.timeSpentOnStage?.[e]??0;let E=0;t==="Completed"?E=1:t==="In Progress"&&B&&(E=B.progress??0);const n=B?.stats??null;return{index:A,name:e,status:t,firstIteration:o,iterations:Q,progress:E,timeSpent:i,stats:n&&Object.keys(n).length>0?n:null,solverInstance:B??null}},ThB=({status:g})=>{const A={"Not Started":"text-blue-600","In Progress":"text-yellow-600",Completed:"text-green-600",Failed:"text-red-600"};return W.jsx("span",{className:`font-medium ${A[g]}`,children:g})},ZhB=({progress:g})=>{if(g===0)return null;const A=Math.round(g*100);return W.jsxs("div",{className:"flex items-center gap-2",children:[W.jsx("div",{className:"w-20 h-2 bg-gray-200 rounded overflow-hidden",children:W.jsx("div",{className:"h-full bg-blue-500 transition-all duration-200",style:{width:`${A}%`}})}),W.jsxs("span",{className:"text-xs text-gray-500",children:[A,"%"]})]})},XNI=g=>{if(typeof g=="string")return g;if(typeof g=="number"||typeof g=="boolean"||typeof g=="bigint"||g==null)return String(g);if(typeof g=="object")try{return JSON.stringify(g)}catch{return String(g)}return String(g)},OhB=g=>Object.entries(g).map(([A,I])=>`${A}: ${XNI(I)}`).join(", "),WhB=({stats:g})=>{if(!g||Object.keys(g).length===0)return W.jsx("span",{children:"-"});const A=Object.entries(g),I=OhB(g);return W.jsxs("details",{className:"cursor-pointer",children:[W.jsx("summary",{className:"whitespace-nowrap overflow-hidden text-ellipsis max-w-[200px]",children:I}),W.jsx("div",{className:"mt-1 text-xs",children:A.map(([e,t])=>W.jsxs("div",{children:[e,": ",XNI(t)]},e))})]})},Itg=g=>{if(g===null||typeof g!="object")return g;if(Array.isArray(g))return g.map(Itg);const A={};for(const[I,e]of Object.entries(g))I.startsWith("_")||(A[I]=Itg(e));return A},VhB=(g,A)=>{try{if(typeof g.getConstructorParams!="function"){alert(`getConstructorParams() is not implemented for ${A}`);return}const I=Itg(g.getConstructorParams()),e=new Blob([JSON.stringify(I,null,2)],{type:"application/json"}),t=URL.createObjectURL(e),B=document.createElement("a");B.href=t,B.download=`${A}_input.json`,B.click(),URL.revokeObjectURL(t)}catch(I){alert(`Error downloading input for ${A}: ${I instanceof Error?I.message:String(I)}`)}},jhB=({expanded:g})=>W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:`w-4 h-4 transition-transform duration-200 ${g?"rotate-90":""}`,children:W.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})}),$NI=g=>{let A=g;for(;A.activeSubSolver;)A=A.activeSubSolver;return A},A1I=({solver:g,onStepUntilPhase:A,onDownloadInput:I,isNested:e=!1,indentLevel:t=0,triggerRender:B})=>{const[o,C]=gA.useState(new Set),Q=g.pipelineDef.map((h,l)=>qhB(g,l)),i=h=>{C(l=>{const D=new Set(l);return D.has(h)?D.delete(h):D.add(h),D})},E=h=>{A?.(h)},n=h=>{h.solverInstance&&(I?I(h.solverInstance,h.name):VhB(h.solverInstance,h.name))},s=h=>`${(h/1e3).toFixed(2)}s`,r=()=>{if(!g.solved&&!g.failed){const h=g.activeSubSolver;for(;!g.solved&&!g.failed&&(g.step(),!(g.activeSubSolver&&g.activeSubSolver!==h)););B?.()}},a=()=>{if(!g.solved&&!g.failed){const h=$NI(g);for(;!g.solved&&!g.failed&&(g.step(),$NI(g)===h););B?.()}},c=t*24;return W.jsxs("div",{className:e?"":"border-t border-gray-200",children:[!e&&W.jsxs("div",{className:"px-4 py-2 bg-gray-50 border-b border-gray-200 flex items-center justify-between",children:[W.jsx("h3",{className:"text-sm font-semibold text-gray-700",children:"Pipeline Stages"}),W.jsxs("div",{className:"flex gap-2",children:[W.jsx("button",{onClick:a,disabled:g.solved||g.failed,className:"bg-indigo-500 hover:bg-indigo-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Solver"}),W.jsx("button",{onClick:r,disabled:g.solved||g.failed,className:"bg-purple-500 hover:bg-purple-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Stage"})]})]}),W.jsx("div",{className:"overflow-x-auto",children:W.jsxs("table",{className:"w-full text-sm",children:[!e&&W.jsx("thead",{children:W.jsxs("tr",{className:"bg-gray-50 border-b border-gray-200",children:[W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stage"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Status"}),W.jsxs("th",{className:"px-4 py-2 text-center font-semibold text-gray-700",children:["i",W.jsx("sub",{children:"0"})]}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Iterations"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Progress"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Time"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stats"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Input"})]})}),W.jsx("tbody",{children:Q.map(h=>{const l=HhB(h.solverInstance),D=o.has(h.name);return W.jsxs(nC.Fragment,{children:[W.jsxs("tr",{className:`border-b border-gray-100 ${h.status==="In Progress"?"bg-yellow-50":""}`,children:[W.jsx("td",{className:"px-4 py-2",children:W.jsxs("div",{className:"flex items-center gap-2",style:{paddingLeft:c},children:[l?W.jsx("button",{onClick:()=>i(h.name),className:"text-gray-500 hover:text-gray-700",title:D?"Collapse":"Expand",children:W.jsx(jhB,{expanded:D})}):W.jsx("span",{className:"w-4"}),W.jsx("span",{className:"text-gray-400 w-6",children:String(h.index+1).padStart(2,"0")}),W.jsx("button",{onClick:()=>E(h.name),disabled:h.status==="Completed"||g.solved||g.failed,className:"text-blue-500 hover:text-blue-700 disabled:text-gray-300 disabled:cursor-not-allowed",title:`Step until ${h.name} completes`,children:W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})})}),W.jsx("span",{className:"font-medium text-gray-900",children:h.name})]})}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(ThB,{status:h.status})}),W.jsx("td",{className:"px-4 py-2 text-center text-gray-600",children:h.firstIteration!==null?h.firstIteration:""}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:h.iterations}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(ZhB,{progress:h.progress})}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:s(h.timeSpent)}),W.jsx("td",{className:"px-4 py-2 text-gray-500",children:W.jsx(WhB,{stats:h.stats})}),W.jsx("td",{className:"px-4 py-2",children:h.solverInstance?W.jsxs("button",{onClick:()=>n(h),className:"flex items-center gap-1 text-blue-500 hover:text-blue-700",title:`Download input for ${h.name}`,children:[W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M12 2.25a.75.75 0 01.75.75v11.69l3.22-3.22a.75.75 0 111.06 1.06l-4.5 4.5a.75.75 0 01-1.06 0l-4.5-4.5a.75.75 0 111.06-1.06l3.22 3.22V3a.75.75 0 01.75-.75zm-9 13.5a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z",clipRule:"evenodd"})}),W.jsx("span",{children:"Input"})]}):null})]}),l&&D&&W.jsx("tr",{children:W.jsx("td",{colSpan:8,className:"p-0",children:W.jsx(A1I,{solver:h.solverInstance,onStepUntilPhase:A,onDownloadInput:I,isNested:!0,indentLevel:t+1,triggerRender:B})})})]},h.name)})})]})})]})};function zhB({graphics:g}){const A=g.points??[],I=g.lines??[],e=g.rects??[],t=g.circles??[],B=g.texts??[];let o=Number.POSITIVE_INFINITY,C=Number.POSITIVE_INFINITY,Q=Number.NEGATIVE_INFINITY,i=Number.NEGATIVE_INFINITY;const E=(h,l)=>{typeof h=="number"&&(h<o&&(o=h),h>Q&&(Q=h)),typeof l=="number"&&(l<C&&(C=l),l>i&&(i=l))};for(const h of A)E(h.x,h.y);for(const h of I){const l=h.points??[];for(const D of l)E(D.x,D.y)}for(const h of e){const l=h.x??0,D=h.y??0,d=h.width??0,y=h.height??0;E(l,D),E(l+d,D+y)}for(const h of t){const l=h.x??0,D=h.y??0,d=h.radius??1;E(l-d,D-d),E(l+d,D+d)}for(const h of B)E(h.x,h.y);(!isFinite(o)||!isFinite(C)||!isFinite(Q)||!isFinite(i))&&(o=-20,C=-20,Q=20,i=20);const n=10,s=o-n,r=C-n,a=Math.max(1,Q-o+2*n),c=Math.max(1,i-C+2*n);return W.jsxs("svg",{className:"w-full h-[400px] bg-white",viewBox:`${s} ${r} ${a} ${c}`,role:"img","aria-label":"Graphics fallback",children:[e.map((h,l)=>W.jsx("rect",{x:h.x??0,y:h.y??0,width:h.width??0,height:h.height??0,fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`rect-${l}`)),I.map((h,l)=>W.jsx("polyline",{fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1,points:(h.points??[]).map(D=>`${D.x??0},${D.y??0}`).join(" ")},`line-${l}`)),t.map((h,l)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.fillColor??"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`circle-${l}`)),A.map((h,l)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.color??"black"},`point-${l}`)),B.map((h,l)=>W.jsx("text",{x:h.x??0,y:h.y??0,fontSize:h.fontSize??10,fill:h.color??"black",children:h.text??""},`text-${l}`))]})}var XhB=class extends nC.Component{constructor(g){super(g),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(g){console.error("InteractiveGraphics render error:",g)}render(){return this.state.hasError?this.props.fallback:this.props.children}},$hB=({solver:g,createSolver:A,animationSpeed:I=25,onSolverStarted:e,onSolverCompleted:t})=>{const[B,o]=gA.useReducer(D=>D+1,0),[C]=gA.useState(()=>{if(A)return A();if(!g)throw new Error("GenericSolverDebugger requires solver or createSolver");return g}),[Q,i]=gA.useState(()=>typeof window>"u"?"vector":window.localStorage.getItem("solver-utils-renderer")==="canvas"?"canvas":"vector"),[E,n]=gA.useState(I),s=gA.useMemo(()=>{try{return C.visualize()||{points:[],lines:[],rects:[],circles:[]}}catch(D){return console.error("Visualization error:",D),{points:[],lines:[],rects:[],circles:[]}}},[C,B]),r=gA.useMemo(()=>(s.rects?.length||0)===0&&(s.lines?.length||0)===0&&(s.points?.length||0)===0&&(s.circles?.length||0)===0,[s]);gA.useEffect(()=>{if(!(typeof document>"u")&&!document.querySelector('script[src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"]')){const D=document.createElement("script");D.src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4",document.head.appendChild(D)}},[]),gA.useEffect(()=>{n(I)},[I]);const a=C.pipelineDef!==void 0,c=D=>{const d=C;if(!C.solved&&!C.failed){for(;!C.solved&&!C.failed&&d.currentPipelineStageIndex<=d.pipelineDef.findIndex(y=>y.solverName===D);)C.step();o()}},h=()=>{const D=JSON.stringify(s,null,2),d=new Blob([D],{type:"application/json"}),y=URL.createObjectURL(d),w=document.createElement("a");w.download="visualization.json",w.href=y,document.body.appendChild(w),w.click(),document.body.removeChild(w),URL.revokeObjectURL(y)},l=D=>{i(D),typeof window<"u"&&window.localStorage.setItem("solver-utils-renderer",D)};return W.jsxs("div",{children:[W.jsx(bhB,{solver:C,triggerRender:o,animationSpeed:E,renderer:Q,onRendererChange:l,onAnimationSpeedChange:n,onDownloadVisualization:h,onSolverStarted:e,onSolverCompleted:t}),r?W.jsx("div",{className:"p-4 text-gray-500",children:"No Graphics Yet"}):W.jsx(XhB,{fallback:W.jsx(zhB,{graphics:s}),children:Q==="canvas"?W.jsx(LhB,{graphics:s}):W.jsx(JhB,{graphics:s})}),a&&W.jsx(A1I,{solver:C,onStepUntilPhase:c,triggerRender:o})]})};const A0B=()=>{gA.useEffect(()=>{const g="tailwind-cdn-script";if(document.getElementById(g)||window.tailwind)return;const A=document.createElement("div");A.className="hidden",document.body.appendChild(A);const I=window.getComputedStyle(A).display==="none";if(document.body.removeChild(A),I)return;const e=document.createElement("script");e.id=g,e.src="https://cdn.tailwindcss.com",document.head.appendChild(e)},[])},g0B=1e3,dk=(g,A)=>{const{fileName:I,mimeType:e="text/plain"}=A,t=g instanceof Blob?g:new Blob([g],{type:e}),B=URL.createObjectURL(t),o=document.createElement("a");o.href=B,o.download=I,o.target="_blank",o.rel="noopener noreferrer",o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(()=>{URL.revokeObjectURL(B)},g0B)},etg=g=>{let A=g.trim().replace(/[\\/:*?"<>|]/g,"_").replace(/[\x00-\x1f]/g,"").replace(/^\.+/,"").replace(/\.+$/,"").replace(/\s+/g," ").replace(/_+/g,"_");return/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i.test(A)&&(A=`_${A}`),A=A.slice(0,200),A||"untitled"},I0B=g=>{const A=g.solverConstructorArgs??[g.solverParams];if(g.solverName!=="AutoroutingPipelineSolver7_MultiGraph"||A.length!==1)return A;const[{input:I,options:e}]=A;return[I,e]},Kx="https://github.com/tscircuit/tscircuit-autorouter/issues/new",g1I="https://github.com/tscircuit/copper-pour-solver/issues/new",I1I="https://github.com/tscircuit/calculate-packing/issues/new",e0B="https://github.com/tscircuit/matchpack/issues/new",e1I="https://github.com/tscircuit/schematic-trace-solver/issues/new?template=json-bug-report.yml",t0B={PackSolver2:I1I,LayoutPipelineSolver:e0B,AutoroutingPipelineSolver:Kx,AssignableAutoroutingPipeline2:Kx,AssignableAutoroutingPipeline3:Kx,AutoroutingPipeline1_OriginalUnravel:Kx,AutoroutingPipelineSolver3_HgPortPointPathing:Kx,AutoroutingPipelineSolver4:Kx,AutoroutingPipelineSolver5:Kx,AutoroutingPipelineSolver7_MultiGraph:Kx,AutoroutingPipelineSolver8:Kx,CopperPourPipelineSolver:g1I,SchematicTracePipelineSolver:e1I},B0B=g=>g.toLowerCase().includes("pack")?dBB:g.toLowerCase().includes("rout")?vSI:nBB,t1I=g=>{const A=t0B[g];if(A)return A;const I=g.toLowerCase();return I.includes("autorout")?Kx:I.includes("schematic")&&I.includes("trace")?e1I:I.includes("copperpour")?g1I:I.includes("pack")?I1I:null},o0B=g=>`${etg(`${g.componentName}-${g.solverName}`)}-solver-input.json`,B1I=g=>{dk(JSON.stringify(g.solverParams,null,2),{fileName:o0B(g),mimeType:"application/json"})},C0B=({solverEvent:g})=>{const A=t1I(g.solverName);return W.jsxs("div",{className:"rf-flex rf-items-center rf-justify-end rf-gap-2 rf-border-b rf-border-gray-200 rf-bg-gray-50 rf-px-4 rf-py-2",children:[W.jsxs(XE,{type:"button",variant:"outline",size:"sm",onClick:()=>B1I(g),children:[W.jsx(vIA,{className:"rf-w-4 rf-h-4"}),"Download"]}),A?W.jsx(XE,{asChild:!0,variant:"outline",size:"sm",children:W.jsxs("a",{href:A,target:"_blank",rel:"noopener noreferrer",children:[W.jsx(EwA,{className:"rf-w-4 rf-h-4"}),"Report"]})}):W.jsxs(XE,{type:"button",variant:"outline",size:"sm",disabled:!0,title:"No report link configured for this solver",children:[W.jsx(EwA,{className:"rf-w-4 rf-h-4"}),"Report"]})]})},Q0B=({solverEvent:g})=>{const A=t1I(g.solverName);return A?W.jsx(XE,{asChild:!0,variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",children:W.jsx("a",{href:A,target:"_blank",rel:"noopener noreferrer",title:"Report solver bug","aria-label":"Report solver bug",children:W.jsx(EwA,{className:"rf-w-4 rf-h-4"})})}):W.jsx(XE,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",disabled:!0,title:"No report link configured for this solver","aria-label":"Report solver bug",children:W.jsx(EwA,{className:"rf-w-4 rf-h-4"})})},i0B=({solverEvents:g=[]})=>{const[A,I]=gA.useState(null);A0B();const e=gA.useMemo(()=>{const C=new Map;for(const Q of g){const i=`${Q.componentName}-${Q.solverName}`;C.set(i,Q)}return C},[g]),t=gA.useMemo(()=>Array.from(e.keys()),[e]),B=A?e.get(A):null,o=gA.useMemo(()=>{if(!B)return{instance:null,error:null,classFound:!1};const C=w6A[B.solverName];if(!C)return{instance:null,error:`Solver class "${B.solverName}" not found in SOLVERS registry. Available: ${Object.keys(w6A).join(", ")}`,classFound:!1};try{return{instance:new C(...I0B(B)),error:null,classFound:!0}}catch(Q){const i=Q instanceof Error?Q.message:String(Q);return console.error("Failed to reconstruct solver:",Q),{instance:null,error:`Failed to instantiate solver: ${i}`,classFound:!0}}},[B]);return g.length===0?W.jsx("div",{className:"rf-p-4",children:W.jsx("div",{className:"rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200",children:W.jsxs("div",{className:"rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3",children:"No Solvers Detected"}),W.jsx("p",{className:"rf-text-sm rf-text-gray-600",children:"Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting."})]})})}):W.jsxs("div",{className:"rf-flex rf-h-full rf-overflow-hidden",children:[W.jsxs("div",{className:"rf-w-64 rf-border-r rf-border-gray-200 rf-overflow-y-auto rf-flex-shrink-0",children:[W.jsxs("div",{className:"rf-text-xs rf-font-semibold rf-text-gray-500 rf-px-3 rf-py-2 rf-bg-gray-50 rf-border-b rf-border-gray-200",children:[t.length," ",t.length===1?"Solver":"Solvers"]}),t.map(C=>{const Q=e.get(C),i=A===C;return W.jsx("div",{className:`rf-px-3 rf-py-2 rf-cursor-pointer rf-border-b rf-border-gray-100 ${i?"rf-bg-blue-50 rf-border-l-2 rf-border-l-blue-500":"hover:rf-bg-gray-50"}`,onClick:()=>I(C),children:(()=>{const E=B0B(Q.solverName);return W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[W.jsx(E,{className:"rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0"}),W.jsxs("div",{className:"rf-flex-1 rf-min-w-0",children:[W.jsx("div",{className:"rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate",children:Q.componentName}),W.jsx("div",{className:"rf-text-xs rf-text-gray-500 rf-truncate",children:Q.solverName})]})]})})()},C)})]}),W.jsx("div",{className:"rf-flex-1 rf-overflow-hidden",children:B?o.instance?W.jsxs("div",{className:"rf-flex rf-h-full rf-flex-col rf-overflow-y-auto",children:[W.jsx(C0B,{solverEvent:B}),W.jsx("div",{className:"rf-min-h-0 rf-flex-1",children:W.jsx(SR,{fallback:W.jsx("div",{className:"rf-p-4",children:W.jsxs("div",{className:"rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2",children:"Error Loading Solver Debugger"}),W.jsxs("p",{className:"rf-text-sm rf-text-red-600",children:["Failed to render the solver debugger for"," ",B.solverName]})]})}),children:W.jsx($hB,{solver:o.instance})})})]}):W.jsxs("div",{className:"rf-p-4",children:[W.jsxs("div",{className:"rf-mb-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800",children:B.solverName}),W.jsxs("p",{className:"rf-text-sm rf-text-gray-500",children:["Component: ",B.componentName]})]}),o.error&&W.jsx("div",{className:`rf-rounded-md rf-border rf-p-4 rf-mb-4 ${o.classFound?"rf-bg-red-50 rf-border-red-200":"rf-bg-yellow-50 rf-border-yellow-200"}`,children:W.jsx("p",{className:`rf-text-sm ${o.classFound?"rf-text-red-700":"rf-text-yellow-700"}`,children:o.error})}),W.jsxs("div",{className:"rf-border rf-border-gray-200 rf-rounded-md rf-overflow-hidden",children:[W.jsxs("div",{className:"rf-px-3 rf-py-2 rf-bg-gray-50 rf-flex rf-items-center rf-justify-between rf-gap-2",children:[W.jsx("span",{className:"rf-text-sm rf-font-medium rf-text-gray-700",children:"Solver Parameters"}),W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-1",children:[W.jsx(Q0B,{solverEvent:B}),W.jsx(XE,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8","aria-label":"Download solver input JSON",title:"Download solver input JSON",onClick:()=>B1I(B),children:W.jsx(vIA,{className:"rf-w-4 rf-h-4"})})]})]}),W.jsx("div",{className:"rf-p-3 rf-bg-white rf-border-t rf-border-gray-200",children:W.jsx("pre",{className:"rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto",children:JSON.stringify(B.solverParams,null,2)})})]})]}):W.jsx("div",{className:"rf-flex rf-items-center rf-justify-center rf-h-full",children:W.jsx("p",{className:"rf-text-sm rf-text-gray-500",children:"Select a solver from the list to view details"})})})]})},E0B=new Map([["custom","Custom"],["fanout","Fanout"],["single_layer_fanout","Single layer fanout"],["tscircuit_simplify","Simplify"]]),n0B=new Set(["tscircuit","default","auto","auto_local"]);function s0B(g){if(g==="FanoutSolver")return"Fanout";if(g==="AutoroutingPipelineSolver11_Simplification")return"Simplify";const A=g.match(/^AutoroutingPipeline(?:Solver)?(\d+)(?:_|$)/);if(A)return`Pipeline${A[1]}`;const I=g.match(/^AssignableAutoroutingPipeline(\d+)$/);return I?`Assignable${I[1]}`:g}function a0B(g){const A=g.autorouterName?.trim(),I=A?.replace(/-/g,"_"),e=I&&E0B.get(I);if(e)return e;if(I&&!n0B.has(I))return A;const t=g.solverName?.trim();if(t)return s0B(t);const B=g.autorouterVersion?.trim();if(B){const o=B.match(/^beta[_-]pipeline(\d+)$/);return o?`Pipeline${o[1]}`:B==="latest"?"default":B}return A?"default":"Unknown"}const ttg="#fbbf24";function r0B(g){const A=g.endSimpleRouteJson?.traces??[],I=new Set(A.flatMap(t=>[t.pcb_trace_id,t.__replaces_pcb_trace_id].filter(B=>B!==void 0)));return[...(g.startSimpleRouteJson?.traces??[]).filter(t=>!I.has(t.pcb_trace_id)),...A]}function o1I(g){const A=new Map((g.startSimpleRouteJson?.traces??[]).map(I=>[I.pcb_trace_id,I]));return(g.endSimpleRouteJson?.traces??[]).filter(I=>{const e=A.get(I.pcb_trace_id);return!e||!!I.__replaces_pcb_trace_id&&I.__replaces_pcb_trace_id!==e.__replaces_pcb_trace_id||JSON.stringify(e.route)!==JSON.stringify(I.route)}).map(I=>I.pcb_trace_id)}function c0B(g,A){return{outer_diameter:g.via_diameter??A.minViaPadDiameter??A.min_via_pad_diameter??A.minViaDiameter??.6,hole_diameter:g.via_hole_diameter??A.minViaHoleDiameter??A.min_via_hole_diameter??.3}}function C1I(g,A){const I=[];for(const C of g.route)C.route_type==="wire"?I.push({...C,layer:C.layer}):C.route_type==="via"?I.push({route_type:"via",x:C.x,y:C.y,from_layer:C.from_layer,to_layer:C.to_layer,...c0B(C,A)}):C.route_type==="through_obstacle"&&I.push({route_type:"through_pad",start:{...C.start},end:{...C.end},width:C.width,start_layer:C.from_layer,end_layer:C.to_layer,pcb_smtpad_id:C.circuitJsonMetadata?.pcb_smtpad_id,pcb_plated_hole_id:C.circuitJsonMetadata?.pcb_plated_hole_id});const e=C=>{let Q=-1,i=Number.POSITIVE_INFINITY;return I.forEach((E,n)=>{if(E.route_type!=="wire")return;const s=Math.hypot(E.x-C.x,E.y-C.y);s<i&&(i=s,Q=n)}),Q},t=g.route.filter(C=>C.route_type==="jumper").map(C=>[e(C.start),e(C.end)].sort((Q,i)=>Q-i)).filter(([C,Q])=>C>=0&&Q>C).sort(([C],[Q])=>C-Q),B=[];let o=0;for(const[C,Q]of t)C>=o&&B.push(I.slice(o,C+1)),o=Math.max(o,Q);return o<I.length&&B.push(I.slice(o)),B}function h0B(g){const A=[],I=[],e=g.endSimpleRouteJson;if(!e)return{lines:A,circles:I};const t=new Set(o1I(g));for(const B of e.traces??[])if(t.has(B.pcb_trace_id))for(const o of C1I(B,e)){let C;for(const Q of o){if(Q.route_type==="through_pad"){C={...Q.end,layer:Q.end_layer,width:Q.width};continue}const i=Q.route_type==="wire"?Q.layer:Q.from_layer;C&&C.layer===i&&(C.x!==Q.x||C.y!==Q.y)&&A.push({points:[{x:C.x,y:C.y},{x:Q.x,y:Q.y}],strokeWidth:Q.route_type==="wire"?Q.width:C.width,strokeColor:ttg,layer:i}),Q.route_type==="via"&&I.push({center:{x:Q.x,y:Q.y},radius:Q.outer_diameter/2,stroke:ttg,fill:"transparent"}),C={x:Q.x,y:Q.y,layer:Q.route_type==="wire"?Q.layer:Q.to_layer,width:Q.route_type==="wire"?Q.width:C?.width??e.minTraceWidth}}}return{coordinateSystem:"cartesian",lines:A,circles:I}}function l0B(g){const A=JSON.stringify(g);let I=2166136261;for(let e=0;e<A.length;e++)I=Math.imul(I^A.charCodeAt(e),16777619);return(I>>>0).toString(36)}const D0B=new Set(["pcb_trace","pcb_via","pcb_copper_pour","pcb_ground_plane","pcb_ground_plane_region","pcb_thermal_spoke","pcb_breakout_point"]);function d0B(g,A,I){const e=I==="input"?A.startSimpleRouteJson??A.errorSimpleRouteJson:A.endSimpleRouteJson,t=g.filter(i=>!D0B.has(i.type)&&!i.type.endsWith("_error")&&!i.type.endsWith("_warning"));if(!e)return t;const B=I==="input"?e.traces??[]:r0B(A),o=new Set(g.filter(i=>i.type==="source_trace").map(i=>i.source_trace_id)),C=["top",...Array.from({length:Math.max(0,e.layerCount-2)},(i,E)=>`inner${E+1}`),...e.layerCount>1?["bottom"]:[]],Q=[];for(const i of B){const n=e.connections.find(r=>r.name===i.connection_name||r.source_trace_id===i.connection_name)?.source_trace_id??i.connection_name??"",s=C1I(i,e);for(const[r,a]of s.entries()){const c={type:"pcb_trace",pcb_trace_id:`${A.id}_${I}_${i.pcb_trace_id}_${r}_${l0B(a)}`,subcircuit_id:A.subcircuit_id??void 0,source_trace_id:o.has(n)?n:void 0,route:a};Q.push(c);for(const[h,l]of a.entries()){if(l.route_type!=="via")continue;const D=C.indexOf(l.from_layer),d=C.indexOf(l.to_layer),y={type:"pcb_via",pcb_via_id:`${c.pcb_trace_id}_via_${h}`,pcb_trace_id:c.pcb_trace_id,subcircuit_id:A.subcircuit_id??void 0,x:l.x,y:l.y,outer_diameter:l.outer_diameter,hole_diameter:l.hole_diameter,layers:D>=0&&d>=0?C.slice(Math.min(D,d),Math.max(D,d)+1):[l.from_layer,l.to_layer]};Q.push(y)}}}return[...t,...Q]}const Btg=(g,A)=>g.phaseName||`Phase ${g.phaseOrdinal??A+1}`,Q1I=g=>g.componentDisplayName?.match(/name="([^"]+)"/)?.[1]?.replace(/^\./,"")||g.componentDisplayName||g.subcircuit_id||"Board",i1I=g=>g.startSimpleRouteJson??g.endSimpleRouteJson??g.errorSimpleRouteJson,y0B={is_showing_autorouting:!0,is_showing_rats_nest:!1,is_showing_drc_errors:!1,is_showing_drc_warnings:!1,is_showing_pcb_groups:!1},w0B=({circuitJson:g,phases:A=[],isRunning:I=!1})=>{const[e,t]=gA.useState(null),[B,o]=gA.useState("output"),[C,Q]=gA.useState(!0),[i,E]=gA.useState(!1),n=gA.useRef(null),[s,r]=gA.useState(480),a=e?A.findIndex(N=>N.id===e.id&&i1I(N)===i1I(e)):-1,c=a<0?A.length-1:a,h=A[c],l=a<0,D=!!h?.endSimpleRouteJson,d=h?.startSimpleRouteJson??h?.errorSimpleRouteJson,y=!!d,w=B==="output"&&!D?"input":B==="input"&&!y?"output":B,u=w==="input"?d:h?.endSimpleRouteJson,G=gA.useMemo(()=>!h||!u?null:d0B(g??[],h,w),[g,h,u,w]),m=gA.useMemo(()=>h&&w==="output"&&C?h0B(h):{lines:[],circles:[]},[h,w,C]);if(gA.useLayoutEffect(()=>{const N=n.current;if(!N)return;const J=()=>r(Math.max(360,N.clientHeight));J();const P=new ResizeObserver(J);return P.observe(N),()=>P.disconnect()},[!!h]),!h)return W.jsxs("div",{className:"rf-flex rf-min-h-[400px] rf-flex-col rf-items-center rf-justify-center rf-gap-3 rf-p-8 rf-text-center",children:[W.jsx(vSI,{className:"rf-h-7 rf-w-7 rf-text-blue-500"}),W.jsx("h3",{className:"rf-text-base rf-font-medium",children:I?"Waiting for autorouting":"No autorouting captures"}),W.jsx("p",{className:"rf-max-w-md rf-text-sm rf-text-gray-500",children:I?"Phases appear as the circuit routes. Each capture includes its input and output on the PCB.":"Run a circuit with autorouting enabled to inspect its phases. A circuit JSON file alone does not include routing history."})]});const p=Btg(h,c),k=h.status==="running"&&I,S=!D,R=d?.connections.length,F=G?.filter(N=>N.type==="pcb_trace").length??0;return W.jsxs("div",{className:"rf-flex rf-h-full rf-min-h-[620px] rf-flex-col rf-bg-white md:rf-flex-row","data-testid":"autorouting-explorer",children:[W.jsxs("aside",{className:"rf-flex rf-shrink-0 rf-flex-col rf-border-b rf-border-gray-200 md:rf-w-52 md:rf-border-b-0 md:rf-border-r","aria-label":"Routing phases",children:[W.jsxs("div",{className:"rf-flex rf-items-center rf-justify-between rf-px-3 rf-py-2 rf-text-xs rf-text-gray-500",children:[W.jsx("span",{children:"Routing phases"}),W.jsx("span",{children:A.length})]}),W.jsx("div",{className:"rf-flex rf-gap-1 rf-overflow-x-auto rf-px-1.5 rf-pb-1.5 md:rf-flex-col md:rf-overflow-x-hidden md:rf-overflow-y-auto",children:A.map((N,J)=>{const P=o1I(N).length,b=N.endSimpleRouteJson?`${P} ${P===1?"trace":"traces"} routed`:N.status==="error"?"Failed":N.status==="running"&&I?"Routing…":"No output";return W.jsxs("button",{type:"button","aria-pressed":J===c,title:`${Q1I(N)} · ${b}`,onClick:()=>t(N),className:no("rf-flex rf-min-w-[192px] rf-items-start rf-gap-2 rf-rounded-md rf-border rf-px-2 rf-py-2 rf-text-left md:rf-min-w-0",J===c?"rf-border-blue-200 rf-bg-blue-50":"rf-border-transparent hover:rf-bg-gray-50"),children:[W.jsx("span",{className:no("rf-flex rf-h-5 rf-w-5 rf-shrink-0 rf-items-center rf-justify-center rf-rounded-full rf-text-[11px]",J===c?"rf-bg-blue-600 rf-text-white":"rf-bg-gray-100 rf-text-gray-500"),children:J+1}),W.jsxs("span",{className:"rf-min-w-0 rf-flex-1",children:[W.jsxs("span",{className:"rf-flex rf-items-center rf-gap-1",children:[W.jsx("span",{className:"rf-min-w-0 rf-flex-1 rf-truncate rf-text-xs rf-font-medium rf-leading-5 rf-text-gray-800",title:Btg(N,J),children:Btg(N,J)}),N.status==="complete"?W.jsx(HIA,{"aria-label":"Captured",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-green-600"}):N.status==="error"?W.jsx(aIg,{"aria-label":"Failed",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-red-500"}):I?W.jsx(b2,{"aria-label":"Routing",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-animate-spin rf-text-blue-500"}):null]}),W.jsxs("span",{className:"rf-block rf-text-[11px] rf-leading-4 rf-text-gray-500",children:[a0B(N)," · ",b]})]})]},N.id)})})]}),W.jsxs("div",{className:"rf-flex rf-min-w-0 rf-flex-1 rf-flex-col",children:[W.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-gap-3 rf-border-b rf-border-gray-200 rf-px-4 rf-py-3",children:[W.jsxs("h3",{className:"rf-mr-auto rf-flex rf-items-center rf-gap-2 rf-text-sm rf-font-medium",children:[p,W.jsxs("span",{className:"rf-text-xs rf-font-normal rf-text-gray-500",children:[c+1," of ",A.length]})]}),I&&W.jsx("button",{type:"button",onClick:()=>t(null),disabled:l,className:"rf-text-xs rf-text-blue-600 disabled:rf-text-gray-500",children:l?"Following latest":"Follow latest"}),W.jsx("div",{className:"rf-flex rf-rounded-md rf-bg-gray-100 rf-p-1","aria-label":"Phase snapshot",children:["input","output"].map(N=>W.jsx("button",{type:"button","aria-pressed":w===N,disabled:N==="input"?!y:!D,onClick:()=>o(N),className:no("rf-rounded rf-px-3 rf-py-1 rf-text-xs disabled:rf-opacity-40",w===N?"rf-bg-white rf-text-gray-900 rf-shadow-sm":"rf-text-gray-500"),children:N==="input"?"Input":"Output"},N))})]}),W.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-px-4 rf-py-2 rf-text-xs rf-text-gray-600",children:[W.jsxs("label",{className:"rf-flex rf-items-center rf-gap-2",children:[W.jsx("input",{type:"checkbox",checked:C,disabled:w!=="output",onChange:N=>Q(N.target.checked),className:"rf-accent-blue-600"}),W.jsx("span",{"aria-hidden":"true",className:"rf-inline-block rf-h-0.5 rf-w-3",style:{backgroundColor:ttg}}),"Highlight changes (all layers)"]}),W.jsxs("span",{children:[w==="input"?"Before this phase":"After this phase"," ","· ",F," traces"]})]}),S&&W.jsx("div",{className:no("rf-border-y rf-px-4 rf-py-2 rf-text-xs",h.status==="error"?"rf-border-red-100 rf-bg-red-50 rf-text-red-700":"rf-border-blue-100 rf-bg-blue-50 rf-text-blue-700"),role:"status",children:h.status==="error"?`Routing failed: ${h.error?.message||"No output was captured."}`:k?"Routing in progress. Showing captured input until output is available.":"No output was captured for this phase. Showing the available input."}),W.jsx("div",{ref:n,className:"rf-relative rf-min-h-[360px] rf-flex-1","data-testid":"autorouting-pcb",children:G?W.jsx(EIg,{circuitJson:G,height:s,allowEditing:!1,clickToInteractEnabled:!1,initialState:y0B,debugGraphics:m}):W.jsx("div",{className:"rf-p-6 rf-text-sm rf-text-gray-500",children:"No PCB snapshot available for this capture."})}),W.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-border-t rf-border-gray-200 rf-px-4 rf-py-3 rf-text-xs rf-text-gray-500",children:[W.jsxs("span",{children:[R===void 0?"Input unavailable":`${R} input connections`,` · ${Q1I(h)}`]}),W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-4",children:[W.jsxs("button",{type:"button",disabled:!u,onClick:()=>dk(JSON.stringify(u,null,2),{fileName:`${h.id}-${w}.srj.json`,mimeType:"application/json"}),className:"rf-flex rf-items-center rf-gap-1 disabled:rf-opacity-40",children:[W.jsx(vIA,{className:"rf-h-3 rf-w-3"}),"Download SRJ"]}),W.jsxs("button",{type:"button","aria-expanded":i,onClick:()=>E(!i),className:"rf-flex rf-items-center rf-gap-1",children:[W.jsx(vT,{className:no("rf-h-3 rf-w-3",i&&"rf-rotate-90")}),"Inspect SRJ"]})]})]}),i&&W.jsx("pre",{className:"rf-m-0 rf-max-h-64 rf-overflow-auto rf-border-t rf-border-gray-200 rf-bg-gray-50 rf-p-4 rf-text-xs","aria-label":`${p} ${w} SRJ`,children:u?JSON.stringify(u,null,2):"No snapshot captured."})]})]})},E1I=({errorMessage:g,errorStack:A,circuitJsonErrors:I})=>{gA.useEffect(()=>{if(wF("TSCIRCUIT_TELEMETRY_DISABLED")!==!0&&g){const e=new Error(g);A&&(e.stack=A);try{n9.captureException(e)}catch{}}},[g,A]),gA.useEffect(()=>{if(wF("TSCIRCUIT_TELEMETRY_DISABLED")!==!0&&I&&I.length>0)for(const e of I){const t=new Error(e.message||"Circuit JSON Error");e.stack&&(t.stack=e.stack);try{n9.captureException(t,{error_type:e.type})}catch{}}},[I])},u0B=g=>{gA.useEffect(()=>{try{wVI(g)}catch{}},[g.source,g.component,g.isWebEmbedded,g.activeTab])},n1I="0.0.3007",G0B={version:n1I},otg={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Ctg=new Map,SuA=g=>{const A=Ctg.get(g);return A?Object.fromEntries(Object.entries(A.stores).map(([I,e])=>[I,e.getState()])):{}},m0B=(g,A,I)=>{if(g===void 0)return{type:"untracked",connection:A.connect(I)};const e=Ctg.get(I.name);if(e)return{type:"tracked",store:g,...e};const t={connection:A.connect(I),stores:{}};return Ctg.set(I.name,t),{type:"tracked",store:g,...t}},s1I=(g,A={})=>(I,e,t)=>{const{enabled:B,anonymousActionType:o,store:C,...Q}=A;let i;try{i=(B??(otg?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!i)return(otg?"production":void 0)!=="production"&&B&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),g(I,e,t);const{connection:E,...n}=m0B(C,i,Q);let s=!0;t.setState=(c,h,l)=>{const D=I(c,h);if(!s)return D;const d=l===void 0?{type:o||"anonymous"}:typeof l=="string"?{type:l}:l;return C===void 0?(E?.send(d,e()),D):(E?.send({...d,type:`${C}/${d.type}`},{...SuA(Q.name),[C]:t.getState()}),D)};const r=(...c)=>{const h=s;s=!1,I(...c),s=h},a=g(t.setState,e,t);if(n.type==="untracked"?E?.init(a):(n.stores[n.store]=t,E?.init(Object.fromEntries(Object.entries(n.stores).map(([c,h])=>[c,c===n.store?a:h.getState()])))),t.dispatchFromDevtools&&typeof t.dispatch=="function"){let c=!1;const h=t.dispatch;t.dispatch=(...l)=>{(otg?"production":void 0)!=="production"&&l[0].type==="__setState"&&!c&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),c=!0),h(...l)}}return E.subscribe(c=>{var h;switch(c.type){case"ACTION":if(typeof c.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return Qtg(c.payload,l=>{if(l.type==="__setState"){if(C===void 0){r(l.state);return}Object.keys(l.state).length!==1&&console.error(`
|
|
5673
|
+
`,n=new Blob([E],{type:"text/plain"}),s=URL.createObjectURL(n),r=document.createElement("a");r.href=s,r.download=`${i}.test.ts`,r.click(),URL.revokeObjectURL(s)}catch(Q){alert(`Error generating test.ts for ${g.getSolverName()}: ${Q instanceof Error?Q.message:String(Q)}`)}e(!1)};return W.jsxs("div",{className:`relative ${A}`,ref:t,children:[W.jsx("button",{className:"px-2 py-1 rounded text-xs cursor-pointer",onClick:()=>e(!I),title:`Download options for ${g.getSolverName()}`,children:g.getSolverName()}),I&&W.jsxs("div",{className:"absolute top-full left-0 mt-1 bg-white border border-gray-300 rounded shadow-lg z-10 min-w-[150px]",children:[W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:B,children:"Download JSON"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:o,children:"Download page.tsx"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:C,children:"Download test.ts"})]})]})},zNI=g=>g.activeSubSolver?[g,...zNI(g.activeSubSolver)]:[g],_hB=({solver:g})=>{const A=zNI(g);return W.jsx("div",{className:"flex gap-1 items-center text-sm pt-1",children:A.map((I,e)=>W.jsxs("div",{className:"flex items-center",children:[e>0&&W.jsx("span",{className:"text-gray-400 mx-1",children:"→"}),W.jsx(YhB,{solver:I})]},I.getSolverName()))})},bhB=({solver:g,triggerRender:A,animationSpeed:I=25,renderer:e,onRendererChange:t,onAnimationSpeedChange:B,onDownloadVisualization:o,onSolverStarted:C,onSolverCompleted:Q})=>{const[i,E]=gA.useReducer(m=>!m,!1),n=gA.useRef(void 0),s=gA.useRef(null),r="solver-debugger-last-iteration",[a,c]=gA.useState(null),h=gA.useRef(null),l=gA.useMemo(()=>[{label:"Slow",value:250,description:"250ms"},{label:"Normal",value:100,description:"100ms"},{label:"Fast",value:10,description:"10ms"},{label:"Fast (2x)",value:5,description:"5ms"},{label:"Fast (10x)",value:1,description:"1ms"},{label:"Fast 20x",value:.5,description:"2 steps / 1ms"},{label:"Fast 100x",value:.1,description:"10 steps / 1ms"}],[]),D=()=>{const m=Math.max(1,I),p=I<1?Math.round(1/I):1;n.current=setInterval(()=>{if(g.solved||g.failed){n.current&&(clearInterval(n.current),n.current=void 0),E(),A(),Q&&g.solved&&Q(g);return}for(let k=0;k<p&&!(g.solved||g.failed);k++)g.step();A()},m)},d=()=>{n.current&&(clearInterval(n.current),n.current=void 0)},y=()=>{!g.solved&&!g.failed&&(g.step(),A())},w=()=>{!g.solved&&!g.failed&&(C&&C(g),g.solve(),A(),Q&&Q(g))},u=()=>{i?(d(),E()):(E(),D())},G=()=>{if(g.solved||g.failed||i)return;s.current===null&&typeof window<"u"&&(s.current=window.localStorage.getItem(r));const m=window.prompt("Step until which iteration?",s.current??`${g.iterations}`);if(m===null)return;s.current=m,typeof window<"u"&&window.localStorage.setItem(r,m);const p=Number(m);if(!Number.isFinite(p)){window.alert("Please enter a valid number for the iteration");return}for(;g.iterations<p&&!g.solved&&!g.failed;)g.step();A(),g.solved&&Q&&Q(g)};return gA.useEffect(()=>()=>{d()},[]),gA.useEffect(()=>{(g.solved||g.failed)&&i&&(d(),E())},[g.solved,g.failed,i]),gA.useEffect(()=>{i&&(d(),D())},[I,i]),gA.useEffect(()=>{if(typeof document>"u")return;const m=p=>{h.current&&!h.current.contains(p.target)&&c(null)};return document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m)}},[]),W.jsxs("div",{className:"space-y-2 p-2 border-b",children:[W.jsx("div",{className:"flex items-center",children:W.jsxs("div",{className:"flex items-center gap-2",ref:h,children:[W.jsxs("div",{className:"flex h-9 items-center space-x-1 rounded-md border border-slate-200 bg-white p-1 shadow-sm",children:[W.jsxs("div",{className:"relative",children:[W.jsx("button",{type:"button",onClick:()=>c(a==="renderer"?null:"renderer"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":a==="renderer"?"open":"closed",children:"Renderer"}),a==="renderer"&&W.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[10rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:["vector","canvas"].map(m=>W.jsxs("button",{type:"button",onClick:()=>{t(m),c(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[m==="vector"?"Vector":"Canvas",e===m&&W.jsx("span",{className:"ml-auto text-xs text-slate-500",children:"✓"})]},m))})]}),W.jsxs("div",{className:"relative",children:[W.jsx("button",{type:"button",onClick:()=>c(a==="debug"?null:"debug"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":a==="debug"?"open":"closed",children:"Debug"}),a==="debug"&&W.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:W.jsx("button",{type:"button",onClick:()=>{o(),c(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:"Download Visualization"})})]}),W.jsxs("div",{className:"relative",children:[W.jsx("button",{type:"button",onClick:()=>c(a==="animation"?null:"animation"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":a==="animation"?"open":"closed",children:"Animation"}),a==="animation"&&W.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:l.map(m=>W.jsxs("button",{type:"button",onClick:()=>{B(m.value),c(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[m.label,W.jsx("span",{className:"ml-auto text-xs text-slate-500",children:m.description}),I===m.value&&W.jsx("span",{className:"ml-2 text-xs text-slate-500",children:"✓"})]},m.value))})]})]}),W.jsx(_hB,{solver:g})]})}),W.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[W.jsx("button",{onClick:y,disabled:g.solved||g.failed||i,className:"bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step"}),W.jsx("button",{onClick:w,disabled:g.solved||g.failed||i,className:"bg-green-500 hover:bg-green-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Solve"}),W.jsx("button",{onClick:u,disabled:g.solved||g.failed,className:`px-3 py-1 rounded text-white text-sm ${i?"bg-red-500 hover:bg-red-600":"bg-yellow-500 hover:bg-yellow-600"} disabled:bg-gray-300`,children:i?"Stop":"Animate"}),W.jsx("button",{onClick:G,disabled:g.solved||g.failed||i,className:"bg-orange-500 hover:bg-orange-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step Until Iteration"}),W.jsxs("div",{className:"text-sm text-gray-600",children:["Iterations: ",g.iterations]}),g.timeToSolve!==void 0&&W.jsxs("div",{className:"text-sm text-gray-600",children:["Time: ",(g.timeToSolve/1e3).toFixed(3),"s"]}),g.solved&&W.jsx("div",{className:"px-2 py-1 bg-green-100 text-green-800 rounded text-sm",children:"Solved"}),g.failed&&W.jsx("div",{className:"px-2 py-1 bg-red-100 text-red-800 rounded text-sm",children:"Failed"})]}),g.error&&W.jsxs("div",{className:"text-red-600 text-sm",children:["Error: ",g.error]})]})},HhB=g=>g!==null&&"pipelineDef"in g&&Array.isArray(g.pipelineDef),vhB=(g,A,I)=>{const e=g.currentPipelineStageIndex;return A<e?"Completed":A===e&&g.activeSubSolver?g.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},qhB=(g,A)=>{const e=g.pipelineDef[A].solverName,t=vhB(g,A),B=g[e],o=g.firstIterationOfStage?.[e]??(A===g.currentPipelineStageIndex?g.iterations:null),C=g.iterations;let Q=0;if(t==="Completed"){const s=g.pipelineDef[A+1],r=s?g.firstIterationOfStage?.[s.solverName]:void 0;r!==void 0&&o!==null?Q=r-o:o!==null&&(Q=C-o)}else t==="In Progress"&&o!==null&&(Q=C-o);const i=g.timeSpentOnStage?.[e]??0;let E=0;t==="Completed"?E=1:t==="In Progress"&&B&&(E=B.progress??0);const n=B?.stats??null;return{index:A,name:e,status:t,firstIteration:o,iterations:Q,progress:E,timeSpent:i,stats:n&&Object.keys(n).length>0?n:null,solverInstance:B??null}},ThB=({status:g})=>{const A={"Not Started":"text-blue-600","In Progress":"text-yellow-600",Completed:"text-green-600",Failed:"text-red-600"};return W.jsx("span",{className:`font-medium ${A[g]}`,children:g})},ZhB=({progress:g})=>{if(g===0)return null;const A=Math.round(g*100);return W.jsxs("div",{className:"flex items-center gap-2",children:[W.jsx("div",{className:"w-20 h-2 bg-gray-200 rounded overflow-hidden",children:W.jsx("div",{className:"h-full bg-blue-500 transition-all duration-200",style:{width:`${A}%`}})}),W.jsxs("span",{className:"text-xs text-gray-500",children:[A,"%"]})]})},XNI=g=>{if(typeof g=="string")return g;if(typeof g=="number"||typeof g=="boolean"||typeof g=="bigint"||g==null)return String(g);if(typeof g=="object")try{return JSON.stringify(g)}catch{return String(g)}return String(g)},OhB=g=>Object.entries(g).map(([A,I])=>`${A}: ${XNI(I)}`).join(", "),WhB=({stats:g})=>{if(!g||Object.keys(g).length===0)return W.jsx("span",{children:"-"});const A=Object.entries(g),I=OhB(g);return W.jsxs("details",{className:"cursor-pointer",children:[W.jsx("summary",{className:"whitespace-nowrap overflow-hidden text-ellipsis max-w-[200px]",children:I}),W.jsx("div",{className:"mt-1 text-xs",children:A.map(([e,t])=>W.jsxs("div",{children:[e,": ",XNI(t)]},e))})]})},Itg=g=>{if(g===null||typeof g!="object")return g;if(Array.isArray(g))return g.map(Itg);const A={};for(const[I,e]of Object.entries(g))I.startsWith("_")||(A[I]=Itg(e));return A},VhB=(g,A)=>{try{if(typeof g.getConstructorParams!="function"){alert(`getConstructorParams() is not implemented for ${A}`);return}const I=Itg(g.getConstructorParams()),e=new Blob([JSON.stringify(I,null,2)],{type:"application/json"}),t=URL.createObjectURL(e),B=document.createElement("a");B.href=t,B.download=`${A}_input.json`,B.click(),URL.revokeObjectURL(t)}catch(I){alert(`Error downloading input for ${A}: ${I instanceof Error?I.message:String(I)}`)}},jhB=({expanded:g})=>W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:`w-4 h-4 transition-transform duration-200 ${g?"rotate-90":""}`,children:W.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})}),$NI=g=>{let A=g;for(;A.activeSubSolver;)A=A.activeSubSolver;return A},A1I=({solver:g,onStepUntilPhase:A,onDownloadInput:I,isNested:e=!1,indentLevel:t=0,triggerRender:B})=>{const[o,C]=gA.useState(new Set),Q=g.pipelineDef.map((h,l)=>qhB(g,l)),i=h=>{C(l=>{const D=new Set(l);return D.has(h)?D.delete(h):D.add(h),D})},E=h=>{A?.(h)},n=h=>{h.solverInstance&&(I?I(h.solverInstance,h.name):VhB(h.solverInstance,h.name))},s=h=>`${(h/1e3).toFixed(2)}s`,r=()=>{if(!g.solved&&!g.failed){const h=g.activeSubSolver;for(;!g.solved&&!g.failed&&(g.step(),!(g.activeSubSolver&&g.activeSubSolver!==h)););B?.()}},a=()=>{if(!g.solved&&!g.failed){const h=$NI(g);for(;!g.solved&&!g.failed&&(g.step(),$NI(g)===h););B?.()}},c=t*24;return W.jsxs("div",{className:e?"":"border-t border-gray-200",children:[!e&&W.jsxs("div",{className:"px-4 py-2 bg-gray-50 border-b border-gray-200 flex items-center justify-between",children:[W.jsx("h3",{className:"text-sm font-semibold text-gray-700",children:"Pipeline Stages"}),W.jsxs("div",{className:"flex gap-2",children:[W.jsx("button",{onClick:a,disabled:g.solved||g.failed,className:"bg-indigo-500 hover:bg-indigo-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Solver"}),W.jsx("button",{onClick:r,disabled:g.solved||g.failed,className:"bg-purple-500 hover:bg-purple-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Stage"})]})]}),W.jsx("div",{className:"overflow-x-auto",children:W.jsxs("table",{className:"w-full text-sm",children:[!e&&W.jsx("thead",{children:W.jsxs("tr",{className:"bg-gray-50 border-b border-gray-200",children:[W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stage"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Status"}),W.jsxs("th",{className:"px-4 py-2 text-center font-semibold text-gray-700",children:["i",W.jsx("sub",{children:"0"})]}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Iterations"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Progress"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Time"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stats"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Input"})]})}),W.jsx("tbody",{children:Q.map(h=>{const l=HhB(h.solverInstance),D=o.has(h.name);return W.jsxs(nC.Fragment,{children:[W.jsxs("tr",{className:`border-b border-gray-100 ${h.status==="In Progress"?"bg-yellow-50":""}`,children:[W.jsx("td",{className:"px-4 py-2",children:W.jsxs("div",{className:"flex items-center gap-2",style:{paddingLeft:c},children:[l?W.jsx("button",{onClick:()=>i(h.name),className:"text-gray-500 hover:text-gray-700",title:D?"Collapse":"Expand",children:W.jsx(jhB,{expanded:D})}):W.jsx("span",{className:"w-4"}),W.jsx("span",{className:"text-gray-400 w-6",children:String(h.index+1).padStart(2,"0")}),W.jsx("button",{onClick:()=>E(h.name),disabled:h.status==="Completed"||g.solved||g.failed,className:"text-blue-500 hover:text-blue-700 disabled:text-gray-300 disabled:cursor-not-allowed",title:`Step until ${h.name} completes`,children:W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})})}),W.jsx("span",{className:"font-medium text-gray-900",children:h.name})]})}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(ThB,{status:h.status})}),W.jsx("td",{className:"px-4 py-2 text-center text-gray-600",children:h.firstIteration!==null?h.firstIteration:""}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:h.iterations}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(ZhB,{progress:h.progress})}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:s(h.timeSpent)}),W.jsx("td",{className:"px-4 py-2 text-gray-500",children:W.jsx(WhB,{stats:h.stats})}),W.jsx("td",{className:"px-4 py-2",children:h.solverInstance?W.jsxs("button",{onClick:()=>n(h),className:"flex items-center gap-1 text-blue-500 hover:text-blue-700",title:`Download input for ${h.name}`,children:[W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M12 2.25a.75.75 0 01.75.75v11.69l3.22-3.22a.75.75 0 111.06 1.06l-4.5 4.5a.75.75 0 01-1.06 0l-4.5-4.5a.75.75 0 111.06-1.06l3.22 3.22V3a.75.75 0 01.75-.75zm-9 13.5a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z",clipRule:"evenodd"})}),W.jsx("span",{children:"Input"})]}):null})]}),l&&D&&W.jsx("tr",{children:W.jsx("td",{colSpan:8,className:"p-0",children:W.jsx(A1I,{solver:h.solverInstance,onStepUntilPhase:A,onDownloadInput:I,isNested:!0,indentLevel:t+1,triggerRender:B})})})]},h.name)})})]})})]})};function zhB({graphics:g}){const A=g.points??[],I=g.lines??[],e=g.rects??[],t=g.circles??[],B=g.texts??[];let o=Number.POSITIVE_INFINITY,C=Number.POSITIVE_INFINITY,Q=Number.NEGATIVE_INFINITY,i=Number.NEGATIVE_INFINITY;const E=(h,l)=>{typeof h=="number"&&(h<o&&(o=h),h>Q&&(Q=h)),typeof l=="number"&&(l<C&&(C=l),l>i&&(i=l))};for(const h of A)E(h.x,h.y);for(const h of I){const l=h.points??[];for(const D of l)E(D.x,D.y)}for(const h of e){const l=h.x??0,D=h.y??0,d=h.width??0,y=h.height??0;E(l,D),E(l+d,D+y)}for(const h of t){const l=h.x??0,D=h.y??0,d=h.radius??1;E(l-d,D-d),E(l+d,D+d)}for(const h of B)E(h.x,h.y);(!isFinite(o)||!isFinite(C)||!isFinite(Q)||!isFinite(i))&&(o=-20,C=-20,Q=20,i=20);const n=10,s=o-n,r=C-n,a=Math.max(1,Q-o+2*n),c=Math.max(1,i-C+2*n);return W.jsxs("svg",{className:"w-full h-[400px] bg-white",viewBox:`${s} ${r} ${a} ${c}`,role:"img","aria-label":"Graphics fallback",children:[e.map((h,l)=>W.jsx("rect",{x:h.x??0,y:h.y??0,width:h.width??0,height:h.height??0,fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`rect-${l}`)),I.map((h,l)=>W.jsx("polyline",{fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1,points:(h.points??[]).map(D=>`${D.x??0},${D.y??0}`).join(" ")},`line-${l}`)),t.map((h,l)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.fillColor??"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`circle-${l}`)),A.map((h,l)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.color??"black"},`point-${l}`)),B.map((h,l)=>W.jsx("text",{x:h.x??0,y:h.y??0,fontSize:h.fontSize??10,fill:h.color??"black",children:h.text??""},`text-${l}`))]})}var XhB=class extends nC.Component{constructor(g){super(g),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(g){console.error("InteractiveGraphics render error:",g)}render(){return this.state.hasError?this.props.fallback:this.props.children}},$hB=({solver:g,createSolver:A,animationSpeed:I=25,onSolverStarted:e,onSolverCompleted:t})=>{const[B,o]=gA.useReducer(D=>D+1,0),[C]=gA.useState(()=>{if(A)return A();if(!g)throw new Error("GenericSolverDebugger requires solver or createSolver");return g}),[Q,i]=gA.useState(()=>typeof window>"u"?"vector":window.localStorage.getItem("solver-utils-renderer")==="canvas"?"canvas":"vector"),[E,n]=gA.useState(I),s=gA.useMemo(()=>{try{return C.visualize()||{points:[],lines:[],rects:[],circles:[]}}catch(D){return console.error("Visualization error:",D),{points:[],lines:[],rects:[],circles:[]}}},[C,B]),r=gA.useMemo(()=>(s.rects?.length||0)===0&&(s.lines?.length||0)===0&&(s.points?.length||0)===0&&(s.circles?.length||0)===0,[s]);gA.useEffect(()=>{if(!(typeof document>"u")&&!document.querySelector('script[src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"]')){const D=document.createElement("script");D.src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4",document.head.appendChild(D)}},[]),gA.useEffect(()=>{n(I)},[I]);const a=C.pipelineDef!==void 0,c=D=>{const d=C;if(!C.solved&&!C.failed){for(;!C.solved&&!C.failed&&d.currentPipelineStageIndex<=d.pipelineDef.findIndex(y=>y.solverName===D);)C.step();o()}},h=()=>{const D=JSON.stringify(s,null,2),d=new Blob([D],{type:"application/json"}),y=URL.createObjectURL(d),w=document.createElement("a");w.download="visualization.json",w.href=y,document.body.appendChild(w),w.click(),document.body.removeChild(w),URL.revokeObjectURL(y)},l=D=>{i(D),typeof window<"u"&&window.localStorage.setItem("solver-utils-renderer",D)};return W.jsxs("div",{children:[W.jsx(bhB,{solver:C,triggerRender:o,animationSpeed:E,renderer:Q,onRendererChange:l,onAnimationSpeedChange:n,onDownloadVisualization:h,onSolverStarted:e,onSolverCompleted:t}),r?W.jsx("div",{className:"p-4 text-gray-500",children:"No Graphics Yet"}):W.jsx(XhB,{fallback:W.jsx(zhB,{graphics:s}),children:Q==="canvas"?W.jsx(LhB,{graphics:s}):W.jsx(JhB,{graphics:s})}),a&&W.jsx(A1I,{solver:C,onStepUntilPhase:c,triggerRender:o})]})};const A0B=()=>{gA.useEffect(()=>{const g="tailwind-cdn-script";if(document.getElementById(g)||window.tailwind)return;const A=document.createElement("div");A.className="hidden",document.body.appendChild(A);const I=window.getComputedStyle(A).display==="none";if(document.body.removeChild(A),I)return;const e=document.createElement("script");e.id=g,e.src="https://cdn.tailwindcss.com",document.head.appendChild(e)},[])},g0B=1e3,dk=(g,A)=>{const{fileName:I,mimeType:e="text/plain"}=A,t=g instanceof Blob?g:new Blob([g],{type:e}),B=URL.createObjectURL(t),o=document.createElement("a");o.href=B,o.download=I,o.target="_blank",o.rel="noopener noreferrer",o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(()=>{URL.revokeObjectURL(B)},g0B)},etg=g=>{let A=g.trim().replace(/[\\/:*?"<>|]/g,"_").replace(/[\x00-\x1f]/g,"").replace(/^\.+/,"").replace(/\.+$/,"").replace(/\s+/g," ").replace(/_+/g,"_");return/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i.test(A)&&(A=`_${A}`),A=A.slice(0,200),A||"untitled"},I0B=g=>{const A=g.solverConstructorArgs??[g.solverParams];if(g.solverName!=="AutoroutingPipelineSolver7_MultiGraph"||A.length!==1)return A;const[{input:I,options:e}]=A;return[I,e]},Kx="https://github.com/tscircuit/tscircuit-autorouter/issues/new",g1I="https://github.com/tscircuit/copper-pour-solver/issues/new",I1I="https://github.com/tscircuit/calculate-packing/issues/new",e0B="https://github.com/tscircuit/matchpack/issues/new",e1I="https://github.com/tscircuit/schematic-trace-solver/issues/new?template=json-bug-report.yml",t0B={PackSolver2:I1I,LayoutPipelineSolver:e0B,AutoroutingPipelineSolver:Kx,AssignableAutoroutingPipeline2:Kx,AssignableAutoroutingPipeline3:Kx,AutoroutingPipeline1_OriginalUnravel:Kx,AutoroutingPipelineSolver3_HgPortPointPathing:Kx,AutoroutingPipelineSolver4:Kx,AutoroutingPipelineSolver5:Kx,AutoroutingPipelineSolver7_MultiGraph:Kx,AutoroutingPipelineSolver8:Kx,CopperPourPipelineSolver:g1I,SchematicTracePipelineSolver:e1I},B0B=g=>g.toLowerCase().includes("pack")?dBB:g.toLowerCase().includes("rout")?vSI:nBB,t1I=g=>{const A=t0B[g];if(A)return A;const I=g.toLowerCase();return I.includes("autorout")?Kx:I.includes("schematic")&&I.includes("trace")?e1I:I.includes("copperpour")?g1I:I.includes("pack")?I1I:null},o0B=g=>`${etg(`${g.componentName}-${g.solverName}`)}-solver-input.json`,B1I=g=>{dk(JSON.stringify(g.solverParams,null,2),{fileName:o0B(g),mimeType:"application/json"})},C0B=({solverEvent:g})=>{const A=t1I(g.solverName);return W.jsxs("div",{className:"rf-flex rf-items-center rf-justify-end rf-gap-2 rf-border-b rf-border-gray-200 rf-bg-gray-50 rf-px-4 rf-py-2",children:[W.jsxs(XE,{type:"button",variant:"outline",size:"sm",onClick:()=>B1I(g),children:[W.jsx(vIA,{className:"rf-w-4 rf-h-4"}),"Download"]}),A?W.jsx(XE,{asChild:!0,variant:"outline",size:"sm",children:W.jsxs("a",{href:A,target:"_blank",rel:"noopener noreferrer",children:[W.jsx(EwA,{className:"rf-w-4 rf-h-4"}),"Report"]})}):W.jsxs(XE,{type:"button",variant:"outline",size:"sm",disabled:!0,title:"No report link configured for this solver",children:[W.jsx(EwA,{className:"rf-w-4 rf-h-4"}),"Report"]})]})},Q0B=({solverEvent:g})=>{const A=t1I(g.solverName);return A?W.jsx(XE,{asChild:!0,variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",children:W.jsx("a",{href:A,target:"_blank",rel:"noopener noreferrer",title:"Report solver bug","aria-label":"Report solver bug",children:W.jsx(EwA,{className:"rf-w-4 rf-h-4"})})}):W.jsx(XE,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",disabled:!0,title:"No report link configured for this solver","aria-label":"Report solver bug",children:W.jsx(EwA,{className:"rf-w-4 rf-h-4"})})},i0B=({solverEvents:g=[]})=>{const[A,I]=gA.useState(null);A0B();const e=gA.useMemo(()=>{const C=new Map;for(const Q of g){const i=`${Q.componentName}-${Q.solverName}`;C.set(i,Q)}return C},[g]),t=gA.useMemo(()=>Array.from(e.keys()),[e]),B=A?e.get(A):null,o=gA.useMemo(()=>{if(!B)return{instance:null,error:null,classFound:!1};const C=w6A[B.solverName];if(!C)return{instance:null,error:`Solver class "${B.solverName}" not found in SOLVERS registry. Available: ${Object.keys(w6A).join(", ")}`,classFound:!1};try{return{instance:new C(...I0B(B)),error:null,classFound:!0}}catch(Q){const i=Q instanceof Error?Q.message:String(Q);return console.error("Failed to reconstruct solver:",Q),{instance:null,error:`Failed to instantiate solver: ${i}`,classFound:!0}}},[B]);return g.length===0?W.jsx("div",{className:"rf-p-4",children:W.jsx("div",{className:"rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200",children:W.jsxs("div",{className:"rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3",children:"No Solvers Detected"}),W.jsx("p",{className:"rf-text-sm rf-text-gray-600",children:"Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting."})]})})}):W.jsxs("div",{className:"rf-flex rf-h-full rf-overflow-hidden",children:[W.jsxs("div",{className:"rf-w-64 rf-border-r rf-border-gray-200 rf-overflow-y-auto rf-flex-shrink-0",children:[W.jsxs("div",{className:"rf-text-xs rf-font-semibold rf-text-gray-500 rf-px-3 rf-py-2 rf-bg-gray-50 rf-border-b rf-border-gray-200",children:[t.length," ",t.length===1?"Solver":"Solvers"]}),t.map(C=>{const Q=e.get(C),i=A===C;return W.jsx("div",{className:`rf-px-3 rf-py-2 rf-cursor-pointer rf-border-b rf-border-gray-100 ${i?"rf-bg-blue-50 rf-border-l-2 rf-border-l-blue-500":"hover:rf-bg-gray-50"}`,onClick:()=>I(C),children:(()=>{const E=B0B(Q.solverName);return W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[W.jsx(E,{className:"rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0"}),W.jsxs("div",{className:"rf-flex-1 rf-min-w-0",children:[W.jsx("div",{className:"rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate",children:Q.componentName}),W.jsx("div",{className:"rf-text-xs rf-text-gray-500 rf-truncate",children:Q.solverName})]})]})})()},C)})]}),W.jsx("div",{className:"rf-flex-1 rf-overflow-hidden",children:B?o.instance?W.jsxs("div",{className:"rf-flex rf-h-full rf-flex-col rf-overflow-y-auto",children:[W.jsx(C0B,{solverEvent:B}),W.jsx("div",{className:"rf-min-h-0 rf-flex-1",children:W.jsx(SR,{fallback:W.jsx("div",{className:"rf-p-4",children:W.jsxs("div",{className:"rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2",children:"Error Loading Solver Debugger"}),W.jsxs("p",{className:"rf-text-sm rf-text-red-600",children:["Failed to render the solver debugger for"," ",B.solverName]})]})}),children:W.jsx($hB,{solver:o.instance})})})]}):W.jsxs("div",{className:"rf-p-4",children:[W.jsxs("div",{className:"rf-mb-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800",children:B.solverName}),W.jsxs("p",{className:"rf-text-sm rf-text-gray-500",children:["Component: ",B.componentName]})]}),o.error&&W.jsx("div",{className:`rf-rounded-md rf-border rf-p-4 rf-mb-4 ${o.classFound?"rf-bg-red-50 rf-border-red-200":"rf-bg-yellow-50 rf-border-yellow-200"}`,children:W.jsx("p",{className:`rf-text-sm ${o.classFound?"rf-text-red-700":"rf-text-yellow-700"}`,children:o.error})}),W.jsxs("div",{className:"rf-border rf-border-gray-200 rf-rounded-md rf-overflow-hidden",children:[W.jsxs("div",{className:"rf-px-3 rf-py-2 rf-bg-gray-50 rf-flex rf-items-center rf-justify-between rf-gap-2",children:[W.jsx("span",{className:"rf-text-sm rf-font-medium rf-text-gray-700",children:"Solver Parameters"}),W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-1",children:[W.jsx(Q0B,{solverEvent:B}),W.jsx(XE,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8","aria-label":"Download solver input JSON",title:"Download solver input JSON",onClick:()=>B1I(B),children:W.jsx(vIA,{className:"rf-w-4 rf-h-4"})})]})]}),W.jsx("div",{className:"rf-p-3 rf-bg-white rf-border-t rf-border-gray-200",children:W.jsx("pre",{className:"rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto",children:JSON.stringify(B.solverParams,null,2)})})]})]}):W.jsx("div",{className:"rf-flex rf-items-center rf-justify-center rf-h-full",children:W.jsx("p",{className:"rf-text-sm rf-text-gray-500",children:"Select a solver from the list to view details"})})})]})},E0B=new Map([["custom","Custom"],["fanout","Fanout"],["single_layer_fanout","Single layer fanout"],["tscircuit_simplify","Simplify"]]),n0B=new Set(["tscircuit","default","auto","auto_local"]);function s0B(g){if(g==="FanoutSolver")return"Fanout";if(g==="AutoroutingPipelineSolver11_Simplification")return"Simplify";const A=g.match(/^AutoroutingPipeline(?:Solver)?(\d+)(?:_|$)/);if(A)return`Pipeline${A[1]}`;const I=g.match(/^AssignableAutoroutingPipeline(\d+)$/);return I?`Assignable${I[1]}`:g}function a0B(g){const A=g.autorouterName?.trim(),I=A?.replace(/-/g,"_"),e=I&&E0B.get(I);if(e)return e;if(I&&!n0B.has(I))return A;const t=g.solverName?.trim();if(t)return s0B(t);const B=g.autorouterVersion?.trim();if(B){const o=B.match(/^beta[_-]pipeline(\d+)$/);return o?`Pipeline${o[1]}`:B==="latest"?"default":B}return A?"default":"Unknown"}const ttg="#fbbf24";function r0B(g){const A=g.endSimpleRouteJson?.traces??[],I=new Set(A.flatMap(t=>[t.pcb_trace_id,t.__replaces_pcb_trace_id].filter(B=>B!==void 0)));return[...(g.startSimpleRouteJson?.traces??[]).filter(t=>!I.has(t.pcb_trace_id)),...A]}function o1I(g){const A=new Map((g.startSimpleRouteJson?.traces??[]).map(I=>[I.pcb_trace_id,I]));return(g.endSimpleRouteJson?.traces??[]).filter(I=>{const e=A.get(I.pcb_trace_id);return!e||!!I.__replaces_pcb_trace_id&&I.__replaces_pcb_trace_id!==e.__replaces_pcb_trace_id||JSON.stringify(e.route)!==JSON.stringify(I.route)}).map(I=>I.pcb_trace_id)}function c0B(g,A){return{outer_diameter:g.via_diameter??A.minViaPadDiameter??A.min_via_pad_diameter??A.minViaDiameter??.6,hole_diameter:g.via_hole_diameter??A.minViaHoleDiameter??A.min_via_hole_diameter??.3}}function C1I(g,A){const I=[];for(const C of g.route)C.route_type==="wire"?I.push({...C,layer:C.layer}):C.route_type==="via"?I.push({route_type:"via",x:C.x,y:C.y,from_layer:C.from_layer,to_layer:C.to_layer,...c0B(C,A)}):C.route_type==="through_obstacle"&&I.push({route_type:"through_pad",start:{...C.start},end:{...C.end},width:C.width,start_layer:C.from_layer,end_layer:C.to_layer,pcb_smtpad_id:C.circuitJsonMetadata?.pcb_smtpad_id,pcb_plated_hole_id:C.circuitJsonMetadata?.pcb_plated_hole_id});const e=C=>{let Q=-1,i=Number.POSITIVE_INFINITY;return I.forEach((E,n)=>{if(E.route_type!=="wire")return;const s=Math.hypot(E.x-C.x,E.y-C.y);s<i&&(i=s,Q=n)}),Q},t=g.route.filter(C=>C.route_type==="jumper").map(C=>[e(C.start),e(C.end)].sort((Q,i)=>Q-i)).filter(([C,Q])=>C>=0&&Q>C).sort(([C],[Q])=>C-Q),B=[];let o=0;for(const[C,Q]of t)C>=o&&B.push(I.slice(o,C+1)),o=Math.max(o,Q);return o<I.length&&B.push(I.slice(o)),B}function h0B(g){const A=[],I=[],e=g.endSimpleRouteJson;if(!e)return{lines:A,circles:I};const t=new Set(o1I(g));for(const B of e.traces??[])if(t.has(B.pcb_trace_id))for(const o of C1I(B,e)){let C;for(const Q of o){if(Q.route_type==="through_pad"){C={...Q.end,layer:Q.end_layer,width:Q.width};continue}const i=Q.route_type==="wire"?Q.layer:Q.from_layer;C&&C.layer===i&&(C.x!==Q.x||C.y!==Q.y)&&A.push({points:[{x:C.x,y:C.y},{x:Q.x,y:Q.y}],strokeWidth:Q.route_type==="wire"?Q.width:C.width,strokeColor:ttg,layer:i}),Q.route_type==="via"&&I.push({center:{x:Q.x,y:Q.y},radius:Q.outer_diameter/2,stroke:ttg,fill:"transparent"}),C={x:Q.x,y:Q.y,layer:Q.route_type==="wire"?Q.layer:Q.to_layer,width:Q.route_type==="wire"?Q.width:C?.width??e.minTraceWidth}}}return{coordinateSystem:"cartesian",lines:A,circles:I}}function l0B(g){const A=JSON.stringify(g);let I=2166136261;for(let e=0;e<A.length;e++)I=Math.imul(I^A.charCodeAt(e),16777619);return(I>>>0).toString(36)}const D0B=new Set(["pcb_trace","pcb_via","pcb_copper_pour","pcb_ground_plane","pcb_ground_plane_region","pcb_thermal_spoke","pcb_breakout_point"]);function d0B(g,A,I){const e=I==="input"?A.startSimpleRouteJson??A.errorSimpleRouteJson:A.endSimpleRouteJson,t=g.filter(i=>!D0B.has(i.type)&&!i.type.endsWith("_error")&&!i.type.endsWith("_warning"));if(!e)return t;const B=I==="input"?e.traces??[]:r0B(A),o=new Set(g.filter(i=>i.type==="source_trace").map(i=>i.source_trace_id)),C=["top",...Array.from({length:Math.max(0,e.layerCount-2)},(i,E)=>`inner${E+1}`),...e.layerCount>1?["bottom"]:[]],Q=[];for(const i of B){const n=e.connections.find(r=>r.name===i.connection_name||r.source_trace_id===i.connection_name)?.source_trace_id??i.connection_name??"",s=C1I(i,e);for(const[r,a]of s.entries()){const c={type:"pcb_trace",pcb_trace_id:`${A.id}_${I}_${i.pcb_trace_id}_${r}_${l0B(a)}`,subcircuit_id:A.subcircuit_id??void 0,source_trace_id:o.has(n)?n:void 0,route:a};Q.push(c);for(const[h,l]of a.entries()){if(l.route_type!=="via")continue;const D=C.indexOf(l.from_layer),d=C.indexOf(l.to_layer),y={type:"pcb_via",pcb_via_id:`${c.pcb_trace_id}_via_${h}`,pcb_trace_id:c.pcb_trace_id,subcircuit_id:A.subcircuit_id??void 0,x:l.x,y:l.y,outer_diameter:l.outer_diameter,hole_diameter:l.hole_diameter,layers:D>=0&&d>=0?C.slice(Math.min(D,d),Math.max(D,d)+1):[l.from_layer,l.to_layer]};Q.push(y)}}}return[...t,...Q]}const Btg=(g,A)=>g.phaseName||`Phase ${g.phaseOrdinal??A+1}`,Q1I=g=>g.componentDisplayName?.match(/name="([^"]+)"/)?.[1]?.replace(/^\./,"")||g.componentDisplayName||g.subcircuit_id||"Board",i1I=g=>g.startSimpleRouteJson??g.endSimpleRouteJson??g.errorSimpleRouteJson,y0B={is_showing_autorouting:!0,is_showing_rats_nest:!1,is_showing_drc_errors:!1,is_showing_drc_warnings:!1,is_showing_pcb_groups:!1},w0B=({circuitJson:g,phases:A=[],isRunning:I=!1})=>{const[e,t]=gA.useState(null),[B,o]=gA.useState("output"),[C,Q]=gA.useState(!0),[i,E]=gA.useState(!1),n=gA.useRef(null),[s,r]=gA.useState(480),a=e?A.findIndex(N=>N.id===e.id&&i1I(N)===i1I(e)):-1,c=a<0?A.length-1:a,h=A[c],l=a<0,D=!!h?.endSimpleRouteJson,d=h?.startSimpleRouteJson??h?.errorSimpleRouteJson,y=!!d,w=B==="output"&&!D?"input":B==="input"&&!y?"output":B,u=w==="input"?d:h?.endSimpleRouteJson,G=gA.useMemo(()=>!h||!u?null:d0B(g??[],h,w),[g,h,u,w]),m=gA.useMemo(()=>h&&w==="output"&&C?h0B(h):{lines:[],circles:[]},[h,w,C]);if(gA.useLayoutEffect(()=>{const N=n.current;if(!N)return;const J=()=>r(Math.max(360,N.clientHeight));J();const P=new ResizeObserver(J);return P.observe(N),()=>P.disconnect()},[!!h]),!h)return W.jsxs("div",{className:"rf-flex rf-min-h-[400px] rf-flex-col rf-items-center rf-justify-center rf-gap-3 rf-p-8 rf-text-center",children:[W.jsx(vSI,{className:"rf-h-7 rf-w-7 rf-text-blue-500"}),W.jsx("h3",{className:"rf-text-base rf-font-medium",children:I?"Waiting for autorouting":"No autorouting captures"}),W.jsx("p",{className:"rf-max-w-md rf-text-sm rf-text-gray-500",children:I?"Phases appear as the circuit routes. Each capture includes its input and output on the PCB.":"Run a circuit with autorouting enabled to inspect its phases. A circuit JSON file alone does not include routing history."})]});const p=Btg(h,c),k=h.status==="running"&&I,S=!D,R=d?.connections.length,F=G?.filter(N=>N.type==="pcb_trace").length??0;return W.jsxs("div",{className:"rf-flex rf-h-full rf-min-h-[620px] rf-flex-col rf-bg-white md:rf-flex-row","data-testid":"autorouting-explorer",children:[W.jsxs("aside",{className:"rf-flex rf-shrink-0 rf-flex-col rf-border-b rf-border-gray-200 md:rf-w-52 md:rf-border-b-0 md:rf-border-r","aria-label":"Routing phases",children:[W.jsxs("div",{className:"rf-flex rf-items-center rf-justify-between rf-px-3 rf-py-2 rf-text-xs rf-text-gray-500",children:[W.jsx("span",{children:"Routing phases"}),W.jsx("span",{children:A.length})]}),W.jsx("div",{className:"rf-flex rf-gap-1 rf-overflow-x-auto rf-px-1.5 rf-pb-1.5 md:rf-flex-col md:rf-overflow-x-hidden md:rf-overflow-y-auto",children:A.map((N,J)=>{const P=o1I(N).length,b=N.endSimpleRouteJson?`${P} ${P===1?"trace":"traces"} routed`:N.status==="error"?"Failed":N.status==="running"&&I?"Routing…":"No output";return W.jsxs("button",{type:"button","aria-pressed":J===c,title:`${Q1I(N)} · ${b}`,onClick:()=>t(N),className:no("rf-flex rf-min-w-[192px] rf-items-start rf-gap-2 rf-rounded-md rf-border rf-px-2 rf-py-2 rf-text-left md:rf-min-w-0",J===c?"rf-border-blue-200 rf-bg-blue-50":"rf-border-transparent hover:rf-bg-gray-50"),children:[W.jsx("span",{className:no("rf-flex rf-h-5 rf-w-5 rf-shrink-0 rf-items-center rf-justify-center rf-rounded-full rf-text-[11px]",J===c?"rf-bg-blue-600 rf-text-white":"rf-bg-gray-100 rf-text-gray-500"),children:J+1}),W.jsxs("span",{className:"rf-min-w-0 rf-flex-1",children:[W.jsxs("span",{className:"rf-flex rf-items-center rf-gap-1",children:[W.jsx("span",{className:"rf-min-w-0 rf-flex-1 rf-truncate rf-text-xs rf-font-medium rf-leading-5 rf-text-gray-800",title:Btg(N,J),children:Btg(N,J)}),N.status==="complete"?W.jsx(HIA,{"aria-label":"Captured",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-green-600"}):N.status==="error"?W.jsx(aIg,{"aria-label":"Failed",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-red-500"}):I?W.jsx(b2,{"aria-label":"Routing",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-animate-spin rf-text-blue-500"}):null]}),W.jsxs("span",{className:"rf-block rf-text-[11px] rf-leading-4 rf-text-gray-500",children:[a0B(N)," · ",b]})]})]},N.id)})})]}),W.jsxs("div",{className:"rf-flex rf-min-w-0 rf-flex-1 rf-flex-col",children:[W.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-gap-3 rf-border-b rf-border-gray-200 rf-px-4 rf-py-3",children:[W.jsxs("h3",{className:"rf-mr-auto rf-flex rf-items-center rf-gap-2 rf-text-sm rf-font-medium",children:[p,W.jsxs("span",{className:"rf-text-xs rf-font-normal rf-text-gray-500",children:[c+1," of ",A.length]})]}),I&&W.jsx("button",{type:"button",onClick:()=>t(null),disabled:l,className:"rf-text-xs rf-text-blue-600 disabled:rf-text-gray-500",children:l?"Following latest":"Follow latest"}),W.jsx("div",{className:"rf-flex rf-rounded-md rf-bg-gray-100 rf-p-1","aria-label":"Phase snapshot",children:["input","output"].map(N=>W.jsx("button",{type:"button","aria-pressed":w===N,disabled:N==="input"?!y:!D,onClick:()=>o(N),className:no("rf-rounded rf-px-3 rf-py-1 rf-text-xs disabled:rf-opacity-40",w===N?"rf-bg-white rf-text-gray-900 rf-shadow-sm":"rf-text-gray-500"),children:N==="input"?"Input":"Output"},N))})]}),W.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-px-4 rf-py-2 rf-text-xs rf-text-gray-600",children:[W.jsxs("label",{className:"rf-flex rf-items-center rf-gap-2",children:[W.jsx("input",{type:"checkbox",checked:C,disabled:w!=="output",onChange:N=>Q(N.target.checked),className:"rf-accent-blue-600"}),W.jsx("span",{"aria-hidden":"true",className:"rf-inline-block rf-h-0.5 rf-w-3",style:{backgroundColor:ttg}}),"Highlight changes (all layers)"]}),W.jsxs("span",{children:[w==="input"?"Before this phase":"After this phase"," ","· ",F," traces"]})]}),S&&W.jsx("div",{className:no("rf-border-y rf-px-4 rf-py-2 rf-text-xs",h.status==="error"?"rf-border-red-100 rf-bg-red-50 rf-text-red-700":"rf-border-blue-100 rf-bg-blue-50 rf-text-blue-700"),role:"status",children:h.status==="error"?`Routing failed: ${h.error?.message||"No output was captured."}`:k?"Routing in progress. Showing captured input until output is available.":"No output was captured for this phase. Showing the available input."}),W.jsx("div",{ref:n,className:"rf-relative rf-min-h-[360px] rf-flex-1","data-testid":"autorouting-pcb",children:G?W.jsx(EIg,{circuitJson:G,height:s,allowEditing:!1,clickToInteractEnabled:!1,initialState:y0B,debugGraphics:m}):W.jsx("div",{className:"rf-p-6 rf-text-sm rf-text-gray-500",children:"No PCB snapshot available for this capture."})}),W.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-border-t rf-border-gray-200 rf-px-4 rf-py-3 rf-text-xs rf-text-gray-500",children:[W.jsxs("span",{children:[R===void 0?"Input unavailable":`${R} input connections`,` · ${Q1I(h)}`]}),W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-4",children:[W.jsxs("button",{type:"button",disabled:!u,onClick:()=>dk(JSON.stringify(u,null,2),{fileName:`${h.id}-${w}.srj.json`,mimeType:"application/json"}),className:"rf-flex rf-items-center rf-gap-1 disabled:rf-opacity-40",children:[W.jsx(vIA,{className:"rf-h-3 rf-w-3"}),"Download SRJ"]}),W.jsxs("button",{type:"button","aria-expanded":i,onClick:()=>E(!i),className:"rf-flex rf-items-center rf-gap-1",children:[W.jsx(vT,{className:no("rf-h-3 rf-w-3",i&&"rf-rotate-90")}),"Inspect SRJ"]})]})]}),i&&W.jsx("pre",{className:"rf-m-0 rf-max-h-64 rf-overflow-auto rf-border-t rf-border-gray-200 rf-bg-gray-50 rf-p-4 rf-text-xs","aria-label":`${p} ${w} SRJ`,children:u?JSON.stringify(u,null,2):"No snapshot captured."})]})]})},E1I=({errorMessage:g,errorStack:A,circuitJsonErrors:I})=>{gA.useEffect(()=>{if(wF("TSCIRCUIT_TELEMETRY_DISABLED")!==!0&&g){const e=new Error(g);A&&(e.stack=A);try{n9.captureException(e)}catch{}}},[g,A]),gA.useEffect(()=>{if(wF("TSCIRCUIT_TELEMETRY_DISABLED")!==!0&&I&&I.length>0)for(const e of I){const t=new Error(e.message||"Circuit JSON Error");e.stack&&(t.stack=e.stack);try{n9.captureException(t,{error_type:e.type})}catch{}}},[I])},u0B=g=>{gA.useEffect(()=>{try{wVI(g)}catch{}},[g.source,g.component,g.isWebEmbedded,g.activeTab])},n1I="0.0.3009",G0B={version:n1I},otg={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Ctg=new Map,SuA=g=>{const A=Ctg.get(g);return A?Object.fromEntries(Object.entries(A.stores).map(([I,e])=>[I,e.getState()])):{}},m0B=(g,A,I)=>{if(g===void 0)return{type:"untracked",connection:A.connect(I)};const e=Ctg.get(I.name);if(e)return{type:"tracked",store:g,...e};const t={connection:A.connect(I),stores:{}};return Ctg.set(I.name,t),{type:"tracked",store:g,...t}},s1I=(g,A={})=>(I,e,t)=>{const{enabled:B,anonymousActionType:o,store:C,...Q}=A;let i;try{i=(B??(otg?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!i)return(otg?"production":void 0)!=="production"&&B&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),g(I,e,t);const{connection:E,...n}=m0B(C,i,Q);let s=!0;t.setState=(c,h,l)=>{const D=I(c,h);if(!s)return D;const d=l===void 0?{type:o||"anonymous"}:typeof l=="string"?{type:l}:l;return C===void 0?(E?.send(d,e()),D):(E?.send({...d,type:`${C}/${d.type}`},{...SuA(Q.name),[C]:t.getState()}),D)};const r=(...c)=>{const h=s;s=!1,I(...c),s=h},a=g(t.setState,e,t);if(n.type==="untracked"?E?.init(a):(n.stores[n.store]=t,E?.init(Object.fromEntries(Object.entries(n.stores).map(([c,h])=>[c,c===n.store?a:h.getState()])))),t.dispatchFromDevtools&&typeof t.dispatch=="function"){let c=!1;const h=t.dispatch;t.dispatch=(...l)=>{(otg?"production":void 0)!=="production"&&l[0].type==="__setState"&&!c&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),c=!0),h(...l)}}return E.subscribe(c=>{var h;switch(c.type){case"ACTION":if(typeof c.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return Qtg(c.payload,l=>{if(l.type==="__setState"){if(C===void 0){r(l.state);return}Object.keys(l.state).length!==1&&console.error(`
|
|
5674
5674
|
[zustand devtools middleware] Unsupported __setState action format.
|
|
5675
5675
|
When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
|
|
5676
5676
|
and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
|