@tscircuit/runframe 0.0.3011 → 0.0.3013
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}}),Jbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/trees/Tree.js"(g,A){var I=Nbt(),e=Ubt(),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:Jbt()}}}),Kbt=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=Kbt(),B=(...o)=>{o=I(o);let C=o.shift();return o.forEach(Q=>{C=t(C,Q)}),C=e(C),C};A.exports=B}}),Pbt=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}}),Lbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/intersect.js"(g,A){var I=TC(),e=ZgA(),t=fQ(),B=yQ(),o=Pbt(),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}}),Ybt=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}}),_bt=fg({"node_modules/@jscad/modeling/src/operations/booleans/scission.js"(g,A){var I=TC(),e=yQ(),t=Ybt(),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}}),bbt=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=bbt(),B=(...o)=>{o=I(o);let C=o.shift();return o.forEach(Q=>{C=t(C,Q)}),C=e(C),C};A.exports=B}}),Hbt=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}}),vbt=fg({"node_modules/@jscad/modeling/src/operations/booleans/subtract.js"(g,A){var I=TC(),e=ZgA(),t=fQ(),B=yQ(),o=Hbt(),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:Lbt(),minkowski:vdI(),scission:_bt(),subtract:vbt(),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}}),qbt=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}}),Tbt=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}}),Zbt=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=Tbt(),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}}),Obt=fg({"node_modules/@jscad/modeling/src/operations/expansions/expandGeom3.js"(g,A){var I=yQ(),e=o$A(),t=Zbt(),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}}),Wbt=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=qbt(),C=Obt(),Q=Wbt(),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}}),Vbt=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}}),jbt=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}}),zbt=fg({"node_modules/@jscad/modeling/src/operations/expansions/offset.js"(g,A){var I=TC(),e=fQ(),t=ca(),B=Vbt(),o=jbt(),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:zbt()}}}),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}}),Xbt=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}}),$bt=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeLinear.js"(g,A){var I=TC(),e=fQ(),t=ca(),B=ldA(),o=Xbt(),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}}),A9t=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}}),g9t=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}}),I9t=fg({"node_modules/@jscad/modeling/src/operations/extrusions/extrudeRectangular.js"(g,A){var I=TC(),e=fQ(),t=ca(),B=A9t(),o=g9t(),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}}),e9t=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}}),t9t=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:$bt(),extrudeRectangular:I9t(),extrudeRotate:KdI(),extrudeHelical:e9t(),project:t9t(),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}}),B9t=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}}),o9t=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}}),C9t=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=B9t(),Q=o9t(),i=C9t(),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}}),Q9t=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}}),i9t=fg({"node_modules/@jscad/modeling/src/operations/hulls/index.js"(g,A){A.exports={hull:OdI(),hullChain:Q9t(),hullPoints2:Q$A(),hullPoints3:t$A()}}}),E9t=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}}),n9t=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}}),s9t=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}}),a9t=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}}),r9t=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=n9t(),i=s9t(),E=a9t(),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}}),c9t=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}}),h9t=fg({"node_modules/@jscad/modeling/src/operations/modifiers/index.js"(g,A){A.exports={generalize:r9t(),snap:c9t(),retessellate:OgA()}}}),l9t=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}}),D9t=fg({"node_modules/@jscad/modeling/src/operations/transforms/align.js"(g,A){var I=TC(),e=l9t(),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:D9t(),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:r5t(),geometries:TXA(),maths:Y5t(),measurements:pdI(),primitives:A5(),text:mbt(),utils:_dI(),booleans:WgA(),expansions:ZdI(),extrusions:VgA(),hulls:i9t(),minkowski:E9t(),modifiers:h9t(),transforms:g5()}}}),VdI={};wR(VdI,{ANGLE_ORDER:()=>E$A,ARRAY_TYPE:()=>Si,EPSILON:()=>ao,RANDOM:()=>J2,equals:()=>G9t,round:()=>Ex,setMatrixArrayType:()=>y9t,toDegree:()=>u9t,toRadian:()=>w9t});function Ex(g){return g>=0?Math.round(g):g%.5===0?Math.floor(g):Math.round(g)}function y9t(g){Si=g}function w9t(g){return g*jdI}function u9t(g){return g*zdI}function G9t(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:()=>_9t,add:()=>b9t,adjoint:()=>x9t,clone:()=>p9t,copy:()=>k9t,create:()=>m9t,determinant:()=>F9t,equals:()=>v9t,exactEquals:()=>H9t,frob:()=>Y9t,fromRotation:()=>K9t,fromScaling:()=>P9t,fromValues:()=>S9t,identity:()=>M9t,invert:()=>N9t,mul:()=>gyI,multiply:()=>$dI,multiplyScalar:()=>q9t,multiplyScalarAndAdd:()=>T9t,rotate:()=>U9t,scale:()=>J9t,set:()=>f9t,str:()=>L9t,sub:()=>IyI,subtract:()=>AyI,transpose:()=>R9t});function m9t(){var g=new Si(4);return Si!=Float32Array&&(g[1]=0,g[2]=0),g[0]=1,g[3]=1,g}function p9t(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 k9t(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g[3]=A[3],g}function M9t(g){return g[0]=1,g[1]=0,g[2]=0,g[3]=1,g}function S9t(g,A,I,e){var t=new Si(4);return t[0]=g,t[1]=A,t[2]=I,t[3]=e,t}function f9t(g,A,I,e,t){return g[0]=A,g[1]=I,g[2]=e,g[3]=t,g}function R9t(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 N9t(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 x9t(g,A){var I=A[0];return g[0]=A[3],g[1]=-A[1],g[2]=-A[2],g[3]=I,g}function F9t(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 U9t(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 J9t(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 K9t(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 P9t(g,A){return g[0]=A[0],g[1]=0,g[2]=0,g[3]=A[1],g}function L9t(g){return"mat2("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+")"}function Y9t(g){return Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]+g[3]*g[3])}function _9t(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 b9t(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 H9t(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]&&g[3]===A[3]}function v9t(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 q9t(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 T9t(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,Z9t=yR({"node_modules/gl-matrix/esm/mat2.js"(){nx(),gyI=$dI,IyI=AyI}}),eyI={};wR(eyI,{add:()=>iHt,clone:()=>W9t,copy:()=>V9t,create:()=>O9t,determinant:()=>AHt,equals:()=>aHt,exactEquals:()=>sHt,frob:()=>QHt,fromRotation:()=>tHt,fromScaling:()=>BHt,fromTranslation:()=>oHt,fromValues:()=>z9t,identity:()=>j9t,invert:()=>$9t,mul:()=>oyI,multiply:()=>tyI,multiplyScalar:()=>EHt,multiplyScalarAndAdd:()=>nHt,rotate:()=>gHt,scale:()=>IHt,set:()=>X9t,str:()=>CHt,sub:()=>CyI,subtract:()=>ByI,translate:()=>eHt});function O9t(){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 W9t(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 V9t(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 j9t(g){return g[0]=1,g[1]=0,g[2]=0,g[3]=1,g[4]=0,g[5]=0,g}function z9t(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 X9t(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 $9t(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 AHt(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 gHt(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 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*i,g[1]=t*i,g[2]=B*E,g[3]=o*E,g[4]=C,g[5]=Q,g}function eHt(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 tHt(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 BHt(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 oHt(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 CHt(g){return"mat2d("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+", "+g[4]+", "+g[5]+")"}function QHt(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 iHt(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 EHt(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 nHt(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 sHt(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 aHt(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,rHt=yR({"node_modules/gl-matrix/esm/mat2d.js"(){nx(),oyI=tyI,CyI=ByI}}),QyI={};wR(QyI,{add:()=>PHt,adjoint:()=>GHt,clone:()=>hHt,copy:()=>lHt,create:()=>iyI,determinant:()=>mHt,equals:()=>bHt,exactEquals:()=>_Ht,frob:()=>KHt,fromMat2d:()=>NHt,fromMat4:()=>cHt,fromQuat:()=>xHt,fromRotation:()=>fHt,fromScaling:()=>RHt,fromTranslation:()=>SHt,fromValues:()=>DHt,identity:()=>yHt,invert:()=>uHt,mul:()=>syI,multiply:()=>EyI,multiplyScalar:()=>LHt,multiplyScalarAndAdd:()=>YHt,normalFromMat4:()=>FHt,projection:()=>UHt,rotate:()=>kHt,scale:()=>MHt,set:()=>dHt,str:()=>JHt,sub:()=>ayI,subtract:()=>nyI,translate:()=>pHt,transpose:()=>wHt});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 cHt(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 hHt(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 lHt(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 DHt(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 yHt(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 wHt(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 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],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 GHt(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 mHt(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 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=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 kHt(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 MHt(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 SHt(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 fHt(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 RHt(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 NHt(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 xHt(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 FHt(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 UHt(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 JHt(g){return"mat3("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+", "+g[4]+", "+g[5]+", "+g[6]+", "+g[7]+", "+g[8]+")"}function KHt(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 PHt(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 LHt(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 YHt(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 _Ht(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 bHt(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:()=>u6t,adjoint:()=>VHt,clone:()=>vHt,copy:()=>qHt,create:()=>HHt,decompose:()=>E6t,determinant:()=>jHt,equals:()=>k6t,exactEquals:()=>p6t,frob:()=>w6t,fromQuat:()=>a6t,fromQuat2:()=>i6t,fromRotation:()=>B6t,fromRotationTranslation:()=>DyI,fromRotationTranslationScale:()=>n6t,fromRotationTranslationScaleOrigin:()=>s6t,fromScaling:()=>t6t,fromTranslation:()=>e6t,fromValues:()=>THt,fromXRotation:()=>o6t,fromYRotation:()=>C6t,fromZRotation:()=>Q6t,frustum:()=>r6t,getRotation:()=>wyI,getScaling:()=>yyI,getTranslation:()=>dyI,identity:()=>hyI,invert:()=>WHt,lookAt:()=>D6t,mul:()=>MyI,multiply:()=>lyI,multiplyScalar:()=>G6t,multiplyScalarAndAdd:()=>m6t,ortho:()=>kyI,orthoNO:()=>GyI,orthoZO:()=>l6t,perspective:()=>pyI,perspectiveFromFieldOfView:()=>h6t,perspectiveNO:()=>uyI,perspectiveZO:()=>c6t,rotate:()=>$Ht,rotateX:()=>A6t,rotateY:()=>g6t,rotateZ:()=>I6t,scale:()=>XHt,set:()=>ZHt,str:()=>y6t,sub:()=>SyI,subtract:()=>myI,targetTo:()=>d6t,translate:()=>zHt,transpose:()=>OHt});function HHt(){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 vHt(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 qHt(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 THt(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 ZHt(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 OHt(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 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,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 VHt(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 jHt(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 zHt(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 XHt(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 $Ht(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 A6t(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 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[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 I6t(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 e6t(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 t6t(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 B6t(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 o6t(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 C6t(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 Q6t(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 i6t(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 E6t(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 n6t(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 s6t(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 a6t(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 r6t(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 c6t(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 h6t(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 l6t(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 D6t(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 y6t(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 w6t(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 u6t(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 G6t(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 m6t(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 p6t(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 k6t(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:()=>R6t,angle:()=>z6t,bezier:()=>v6t,ceil:()=>N6t,clone:()=>M6t,copy:()=>S6t,create:()=>n$A,cross:()=>udA,dist:()=>HyI,distance:()=>JyI,div:()=>byI,divide:()=>UyI,dot:()=>wdA,equals:()=>gvt,exactEquals:()=>Avt,floor:()=>x6t,forEach:()=>TyI,fromValues:()=>s$A,hermite:()=>H6t,inverse:()=>Y6t,len:()=>a$A,length:()=>NyI,lerp:()=>_6t,max:()=>U6t,min:()=>F6t,mul:()=>_yI,multiply:()=>FyI,negate:()=>L6t,normalize:()=>LyI,random:()=>q6t,rotateX:()=>W6t,rotateY:()=>V6t,rotateZ:()=>j6t,round:()=>J6t,scale:()=>K6t,scaleAndAdd:()=>P6t,set:()=>f6t,slerp:()=>b6t,sqrDist:()=>vyI,sqrLen:()=>qyI,squaredDistance:()=>KyI,squaredLength:()=>PyI,str:()=>$6t,sub:()=>YyI,subtract:()=>xyI,transformMat3:()=>Z6t,transformMat4:()=>T6t,transformQuat:()=>O6t,zero:()=>X6t});function n$A(){var g=new Si(3);return Si!=Float32Array&&(g[0]=0,g[1]=0,g[2]=0),g}function M6t(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 S6t(g,A){return g[0]=A[0],g[1]=A[1],g[2]=A[2],g}function f6t(g,A,I,e){return g[0]=A,g[1]=I,g[2]=e,g}function R6t(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 N6t(g,A){return g[0]=Math.ceil(A[0]),g[1]=Math.ceil(A[1]),g[2]=Math.ceil(A[2]),g}function x6t(g,A){return g[0]=Math.floor(A[0]),g[1]=Math.floor(A[1]),g[2]=Math.floor(A[2]),g}function F6t(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 U6t(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 J6t(g,A){return g[0]=Ex(A[0]),g[1]=Ex(A[1]),g[2]=Ex(A[2]),g}function K6t(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g[2]=A[2]*I,g}function P6t(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 L6t(g,A){return g[0]=-A[0],g[1]=-A[1],g[2]=-A[2],g}function Y6t(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 _6t(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 b6t(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 H6t(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 v6t(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 q6t(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 T6t(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 Z6t(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 O6t(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 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[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 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[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 j6t(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 z6t(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 X6t(g){return g[0]=0,g[1]=0,g[2]=0,g}function $6t(g){return"vec3("+g[0]+", "+g[1]+", "+g[2]+")"}function Avt(g,A){return g[0]===A[0]&&g[1]===A[1]&&g[2]===A[2]}function gvt(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:()=>Ivt,clone:()=>VyI,copy:()=>zyI,create:()=>WyI,cross:()=>Evt,dist:()=>swI,distance:()=>twI,div:()=>nwI,divide:()=>IwI,dot:()=>h$A,equals:()=>hvt,exactEquals:()=>QwI,floor:()=>evt,forEach:()=>hwI,fromValues:()=>jyI,inverse:()=>ivt,len:()=>rwI,length:()=>r$A,lerp:()=>CwI,max:()=>Bvt,min:()=>tvt,mul:()=>EwI,multiply:()=>gwI,negate:()=>Qvt,normalize:()=>owI,random:()=>nvt,round:()=>ovt,scale:()=>ewI,scaleAndAdd:()=>Cvt,set:()=>XyI,sqrDist:()=>awI,sqrLen:()=>cwI,squaredDistance:()=>BwI,squaredLength:()=>c$A,str:()=>cvt,sub:()=>iwI,subtract:()=>AwI,transformMat4:()=>svt,transformQuat:()=>avt,zero:()=>rvt});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 Ivt(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 evt(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 tvt(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 Bvt(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 ovt(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 Cvt(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 Qvt(g,A){return g[0]=-A[0],g[1]=-A[1],g[2]=-A[2],g[3]=-A[3],g}function ivt(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 Evt(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 nvt(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 svt(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 avt(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 rvt(g){return g[0]=0,g[1]=0,g[2]=0,g[3]=0,g}function cvt(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 hvt(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:()=>yvt,clone:()=>MwI,conjugate:()=>mvt,copy:()=>pdA,create:()=>GdA,dot:()=>kdA,equals:()=>Mvt,exactEquals:()=>JwI,exp:()=>mwI,fromEuler:()=>pvt,fromMat3:()=>kwI,fromValues:()=>SwI,getAngle:()=>dvt,getAxisAngle:()=>Dvt,identity:()=>lvt,invert:()=>Gvt,len:()=>FwI,length:()=>MdA,lerp:()=>xwI,ln:()=>pwI,mul:()=>NwI,multiply:()=>ywI,normalize:()=>fdA,pow:()=>wvt,random:()=>uvt,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:()=>kvt});function GdA(){var g=new Si(4);return Si!=Float32Array&&(g[0]=0,g[1]=0,g[2]=0),g[3]=1,g}function lvt(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 Dvt(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 yvt(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 wvt(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 uvt(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 Gvt(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 mvt(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 pvt(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 kvt(g){return"quat("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+")"}function Mvt(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:()=>Ovt,clone:()=>fvt,conjugate:()=>zvt,copy:()=>HwI,create:()=>Svt,dot:()=>D$A,equals:()=>gqt,exactEquals:()=>Aqt,fromMat4:()=>Uvt,fromRotation:()=>Fvt,fromRotationTranslation:()=>bwI,fromRotationTranslationValues:()=>Nvt,fromTranslation:()=>xvt,fromValues:()=>Rvt,getDual:()=>Pvt,getReal:()=>qwI,getTranslation:()=>Yvt,identity:()=>Jvt,invert:()=>jvt,len:()=>OwI,length:()=>d$A,lerp:()=>Vvt,mul:()=>ZwI,multiply:()=>vwI,normalize:()=>Xvt,rotateAroundAxis:()=>Zvt,rotateByQuatAppend:()=>qvt,rotateByQuatPrepend:()=>Tvt,rotateX:()=>bvt,rotateY:()=>Hvt,rotateZ:()=>vvt,scale:()=>Wvt,set:()=>Kvt,setDual:()=>Lvt,setReal:()=>TwI,sqrLen:()=>WwI,squaredLength:()=>jgA,str:()=>$vt,translate:()=>_vt});function Svt(){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 fvt(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 Rvt(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 Nvt(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 xvt(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 Fvt(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 Uvt(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 Jvt(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 Kvt(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 Pvt(g,A){return g[0]=A[4],g[1]=A[5],g[2]=A[6],g[3]=A[7],g}function Lvt(g,A){return g[4]=A[0],g[5]=A[1],g[6]=A[2],g[7]=A[3],g}function Yvt(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 _vt(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 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 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 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 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 vvt(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 qvt(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 Tvt(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 Zvt(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 Ovt(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 Wvt(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 Vvt(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 jvt(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 zvt(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 Xvt(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 $vt(g){return"quat2("+g[0]+", "+g[1]+", "+g[2]+", "+g[3]+", "+g[4]+", "+g[5]+", "+g[6]+", "+g[7]+")"}function Aqt(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 gqt(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,Iqt=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:()=>Cqt,angle:()=>Mqt,ceil:()=>Qqt,clone:()=>eqt,copy:()=>Bqt,create:()=>jwI,cross:()=>dqt,dist:()=>QuI,distance:()=>AuI,div:()=>CuI,divide:()=>$wI,dot:()=>Dqt,equals:()=>xqt,exactEquals:()=>Nqt,floor:()=>iqt,forEach:()=>nuI,fromValues:()=>tqt,inverse:()=>hqt,len:()=>tuI,length:()=>IuI,lerp:()=>yqt,max:()=>nqt,min:()=>Eqt,mul:()=>ouI,multiply:()=>XwI,negate:()=>cqt,normalize:()=>lqt,random:()=>wqt,rotate:()=>kqt,round:()=>sqt,scale:()=>aqt,scaleAndAdd:()=>rqt,set:()=>oqt,signedAngle:()=>Sqt,sqrDist:()=>iuI,sqrLen:()=>EuI,squaredDistance:()=>guI,squaredLength:()=>euI,str:()=>Rqt,sub:()=>BuI,subtract:()=>zwI,transformMat2:()=>uqt,transformMat2d:()=>Gqt,transformMat3:()=>mqt,transformMat4:()=>pqt,zero:()=>fqt});function jwI(){var g=new Si(2);return Si!=Float32Array&&(g[0]=0,g[1]=0),g}function eqt(g){var A=new Si(2);return A[0]=g[0],A[1]=g[1],A}function tqt(g,A){var I=new Si(2);return I[0]=g,I[1]=A,I}function Bqt(g,A){return g[0]=A[0],g[1]=A[1],g}function oqt(g,A,I){return g[0]=A,g[1]=I,g}function Cqt(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 Qqt(g,A){return g[0]=Math.ceil(A[0]),g[1]=Math.ceil(A[1]),g}function iqt(g,A){return g[0]=Math.floor(A[0]),g[1]=Math.floor(A[1]),g}function Eqt(g,A,I){return g[0]=Math.min(A[0],I[0]),g[1]=Math.min(A[1],I[1]),g}function nqt(g,A,I){return g[0]=Math.max(A[0],I[0]),g[1]=Math.max(A[1],I[1]),g}function sqt(g,A){return g[0]=Ex(A[0]),g[1]=Ex(A[1]),g}function aqt(g,A,I){return g[0]=A[0]*I,g[1]=A[1]*I,g}function rqt(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 cqt(g,A){return g[0]=-A[0],g[1]=-A[1],g}function hqt(g,A){return g[0]=1/A[0],g[1]=1/A[1],g}function lqt(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 Dqt(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 yqt(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 wqt(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 uqt(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 Gqt(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 mqt(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 pqt(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 kqt(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 Mqt(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 Sqt(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 fqt(g){return g[0]=0,g[1]=0,g}function Rqt(g){return"vec2("+g[0]+", "+g[1]+")"}function Nqt(g,A){return g[0]===A[0]&&g[1]===A[1]}function xqt(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,Fqt=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 Uqt=yR({"node_modules/gl-matrix/esm/index.js"(){nx(),Z9t(),rHt(),ryI(),fyI(),YwI(),Iqt(),Fqt(),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=(Uqt(),JYt(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)}`)}}}}),Jqt=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":"")}}}),Kqt=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=Jqt(),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}}),Pqt=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=Kqt()(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),Lqt=()=>{const g=gA.useContext(w$A),A=SD();return gA.useEffect(()=>{if(g)return g.current=A,()=>{g.current=null}},[g,A]),null},Yqt=({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}},_qt=(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 bqt=(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,Hqt=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 Rpt;return A.add(g),A.render(),A.getCircuitJson()},[g]),vqt=(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"],qqt=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),Tqt=({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},Zqt=ts(ydA()),yuI=gA.createContext(null),Oqt=()=>{const g=gA.useContext(yuI);if(!g)throw new Error("useHover must be used within a HoverProvider");return g},Wqt=({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})},Vqt=({children:g,object:A,onHover:I,onUnhover:e,isHovered:t})=>{const{addHoverable:B,removeHoverable:o}=Oqt();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=Vqt,ZM=(g,{castShadow:A=!0,receiveShadow:I=!0}={})=>{g.traverse(e=>{e instanceof FB&&(e.castShadow=A,e.receiveShadow=I)})},jqt=({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}=jJt(A,Zqt),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,zqt=()=>{const g=new Hr;return g.name="fallback-environment-map",g.mapping=aEA,g},Xqt=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(y4t(),.04).texture,t.dispose()}else e=zqt();return wuI.set(A,e),e};function $qt(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 A7t(g){const A=$qt(g);return A?A.getSize(new oI):new oI}function g7t(g,A,I="contain_within_bounds"){if(!A)return[1,1,1];const e=A7t(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=g7t(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 u4t;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=Xqt(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 I7t=ts(auI()),e7t=ts(ydA()),t7t=({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,I7t.executeJscadOperations)(e7t.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 B7t(g){return g.replace(/(DEF|USE)\s+([^\s]+)/g,(A,I,e)=>`${I} ${e.replace(/-/g,"_")}`)}async function o7t(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 CKt().parse(B7t(I),g)}typeof window<"u"&&!window.TSCIRCUIT_OBJ_LOADER_CACHE&&(window.TSCIRCUIT_OBJ_LOADER_CACHE=new Map);function C7t(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 o7t(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 hKt;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 tKt;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 Q7t({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=C7t(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 i7t=new tB(.82,.82,.82),muI=g=>new Ps({color:g?new tB(g[0],g[1],g[2]):i7t});function E7t(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 n7t(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=E7t(B,I),Q=new FB(B,C.length>1?C:C[0]);Q.name=I.name,A.add(Q)}return A}var k$A,s7t="https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/dist";function a7t(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 r7t(){if(!k$A){const g=await import("https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/+esm");k$A=a7t(g)({locateFile:I=>`${s7t}/${I}`})}return k$A}async function c7t(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 r7t()).ReadStepFile(new Uint8Array(I),null);if(!t.success||!t.meshes.length)throw new Error("occt-import-js failed to convert STEP file");const B=n7t(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 h7t(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 l7t(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 D7t(g){try{const A=localStorage.getItem(`${puI}${g}`);return A?l7t(A):null}catch(A){return console.warn("Failed to read STEP GLB cache",A),null}}function kuI(g,A){try{const I=h7t(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 y7t=({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=D7t(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=c7t(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 w7t(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 w7t(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 u7t(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 G7t(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 m7t(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 p7t(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 k7t(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 p7t(e,I)}function M7t(g,A){const I=G7t(g,A.layer,A.pcbThickness),e=m7t(g,A.layer),t=AIA(g,A.modelType),B=u7t(g.model_board_normal_direction??"z+"),o=k7t(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 S7t=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",f7t=g=>g==="step"?"glb":g,R7t=(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)},N7t=(g,A)=>{if(g)return A?A(g):g},x7t=(...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}},F7t=({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(()=>vqt(g,A),[g,A]),c=gA.useCallback(H=>N7t(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(()=>R7t(g,A),[g,A]),m=G?o.enclosure==="translucent":!!g.show_as_translucent_model,p=S7t(g),k=f7t(p),S=g.model_glb_url?"glb":"gltf",R=g.model_wrl_url?"wrl":g.model_stl_url?"stl":"obj",F=gA.useMemo(()=>M7t(g,{layer:r,pcbThickness:e,modelType:k}),[g,r,e,k]),N=x7t(...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(Q7t,{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(y7t,{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(F7t,{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(t7t,{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(jqt,{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(Yqt,{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",U7t=()=>typeof window>"u"?!0:window.localStorage.getItem(fuI)!=="false",RuI=gA.createContext(void 0),J7t=({children:g})=>{const[A,I]=gA.useState(!1),[e,t]=gA.useState(!1),[B,o]=gA.useState(U7t);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),K7t=({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},P7t=g=>g<.5?4*g*g*g:1-Math.pow(-2*g+2,3)/2,L7t=()=>{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=P7t(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},Y7t=()=>{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 _7t(g){g.querySelectorAll("canvas").forEach(A=>A.remove())}var b7t=g=>{g.outputColorSpace=Fp,g.toneMapping=pNg,g.toneMappingExposure=1,g.shadowMap.enabled=!0,g.shadowMap.type=wNg},H7t=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;_7t(C.current);const l=new TEA({antialias:!0,alpha:!0});b7t(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 zue;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(Wqt,{children:g})})})}),v7t=`
|
|
5319
|
+
`).replace(/^d\s+0\./gm,"d 1."),r=i.replace(/newmtl[\s\S]*?endmtl/g,"").replace(/^mtllib.*/gm,""),a=new tKt;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 Q7t({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=C7t(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 i7t=new tB(.82,.82,.82),muI=g=>new Ps({color:g?new tB(g[0],g[1],g[2]):i7t});function E7t(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 n7t(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=E7t(B,I),Q=new FB(B,C.length>1?C:C[0]);Q.name=I.name,A.add(Q)}return A}var k$A,s7t="https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/dist";function a7t(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 r7t(){if(!k$A){const g=await import("https://cdn.jsdelivr.net/npm/occt-import-js@0.0.23/+esm");k$A=a7t(g)({locateFile:I=>`${s7t}/${I}`})}return k$A}async function c7t(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 r7t()).ReadStepFile(new Uint8Array(I),null);if(!t.success||!t.meshes.length)throw new Error("occt-import-js failed to convert STEP file");const B=n7t(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 h7t(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 l7t(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 D7t(g){try{const A=localStorage.getItem(`${puI}${g}`);return A?l7t(A):null}catch(A){return console.warn("Failed to read STEP GLB cache",A),null}}function kuI(g,A){try{const I=h7t(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 y7t=({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=D7t(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=c7t(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 w7t(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 w7t(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 u7t(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 G7t(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 m7t(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 p7t(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 k7t(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 p7t(e,I)}function M7t(g,A){const I=G7t(g,A.layer,A.pcbThickness),e=m7t(g,A.layer),t=AIA(g,A.modelType),B=u7t(g.model_board_normal_direction??"z+"),o=k7t(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 S7t=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",f7t=g=>g==="step"?"glb":g,R7t=(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)},N7t=(g,A)=>{if(g)return A?A(g):g},x7t=(...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}},F7t=({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(()=>vqt(g,A),[g,A]),c=gA.useCallback(H=>N7t(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(()=>R7t(g,A),[g,A]),m=G?o.enclosure==="translucent":!!g.show_as_translucent_model,p=S7t(g),k=f7t(p),S=g.model_glb_url?"glb":"gltf",R=g.model_wrl_url?"wrl":g.model_stl_url?"stl":"obj",F=gA.useMemo(()=>M7t(g,{layer:r,pcbThickness:e,modelType:k}),[g,r,e,k]),N=x7t(...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(Q7t,{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(y7t,{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(F7t,{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(t7t,{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(jqt,{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(Yqt,{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.623"},fuI="cadViewerLightingEnabled",U7t=()=>typeof window>"u"?!0:window.localStorage.getItem(fuI)!=="false",RuI=gA.createContext(void 0),J7t=({children:g})=>{const[A,I]=gA.useState(!1),[e,t]=gA.useState(!1),[B,o]=gA.useState(U7t);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),K7t=({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},P7t=g=>g<.5?4*g*g*g:1-Math.pow(-2*g+2,3)/2,L7t=()=>{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=P7t(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},Y7t=()=>{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 _7t(g){g.querySelectorAll("canvas").forEach(A=>A.remove())}var b7t=g=>{g.outputColorSpace=Fp,g.toneMapping=pNg,g.toneMappingExposure=1,g.shadowMap.enabled=!0,g.shadowMap.type=wNg},H7t=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;_7t(C.current);const l=new TEA({antialias:!0,alpha:!0});b7t(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 zue;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(Wqt,{children:g})})})}),v7t=`
|
|
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"})]})]})},XNI=g=>g.activeSubSolver?[g,...XNI(g.activeSubSolver)]:[g],ThB=({solver:g})=>{const A=XNI(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(qhB,{solver:I})]},I.getSolverName()))})},ZhB=({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(ThB,{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]})]})},OhB=g=>g!==null&&"pipelineDef"in g&&Array.isArray(g.pipelineDef),WhB=(g,A,I)=>{const e=g.currentPipelineStageIndex;return A<e?"Completed":A===e&&g.activeSubSolver?g.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},VhB=(g,A)=>{const e=g.pipelineDef[A].solverName,t=WhB(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}},jhB=({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,"%"]})]})},$NI=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)},XhB=g=>Object.entries(g).map(([A,I])=>`${A}: ${$NI(I)}`).join(", "),$hB=({stats:g})=>{if(!g||Object.keys(g).length===0)return W.jsx("span",{children:"-"});const A=Object.entries(g),I=XhB(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,": ",$NI(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},A0B=(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)}`)}},g0B=({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"})}),A1I=g=>{let A=g;for(;A.activeSubSolver;)A=A.activeSubSolver;return A},g1I=({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)=>VhB(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):A0B(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=A1I(g);for(;!g.solved&&!g.failed&&(g.step(),A1I(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=OhB(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(g0B,{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(jhB,{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($hB,{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(g1I,{solver:h.solverInstance,onStepUntilPhase:A,onDownloadInput:I,isNested:!0,indentLevel:t+1,triggerRender:B})})})]},h.name)})})]})})]})};function I0B({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 e0B=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}},t0B=({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(ZhB,{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(e0B,{fallback:W.jsx(I0B,{graphics:s}),children:Q==="canvas"?W.jsx(vhB,{graphics:s}):W.jsx(_hB,{graphics:s})}),a&&W.jsx(g1I,{solver:C,onStepUntilPhase:c,triggerRender:o})]})};const B0B=()=>{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)},[])},o0B=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)},o0B)},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"},C0B=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",I1I="https://github.com/tscircuit/copper-pour-solver/issues/new",e1I="https://github.com/tscircuit/calculate-packing/issues/new",Q0B="https://github.com/tscircuit/matchpack/issues/new",t1I="https://github.com/tscircuit/schematic-trace-solver/issues/new?template=json-bug-report.yml",i0B={PackSolver2:e1I,LayoutPipelineSolver:Q0B,AutoroutingPipelineSolver:Kx,AssignableAutoroutingPipeline2:Kx,AssignableAutoroutingPipeline3:Kx,AutoroutingPipeline1_OriginalUnravel:Kx,AutoroutingPipelineSolver3_HgPortPointPathing:Kx,AutoroutingPipelineSolver4:Kx,AutoroutingPipelineSolver5:Kx,AutoroutingPipelineSolver7_MultiGraph:Kx,AutoroutingPipelineSolver8:Kx,CopperPourPipelineSolver:I1I,SchematicTracePipelineSolver:t1I},E0B=g=>g.toLowerCase().includes("pack")?mBB:g.toLowerCase().includes("rout")?qSI:hBB,B1I=g=>{const A=i0B[g];if(A)return A;const I=g.toLowerCase();return I.includes("autorout")?Kx:I.includes("schematic")&&I.includes("trace")?t1I:I.includes("copperpour")?I1I:I.includes("pack")?e1I:null},n0B=g=>`${etg(`${g.componentName}-${g.solverName}`)}-solver-input.json`,o1I=g=>{dk(JSON.stringify(g.solverParams,null,2),{fileName:n0B(g),mimeType:"application/json"})},s0B=({solverEvent:g})=>{const A=B1I(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:()=>o1I(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"]})]})},a0B=({solverEvent:g})=>{const A=B1I(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"})})},r0B=({solverEvents:g=[]})=>{const[A,I]=gA.useState(null);B0B();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(...C0B(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=E0B(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(s0B,{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(t0B,{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(a0B,{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:()=>o1I(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"})})})]})},c0B=new Map([["custom","Custom"],["fanout","Fanout"],["single_layer_fanout","Single layer fanout"],["tscircuit_simplify","Simplify"]]),h0B=new Set(["tscircuit","default","auto","auto_local"]);function l0B(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 D0B(g){const A=g.autorouterName?.trim(),I=A?.replace(/-/g,"_"),e=I&&c0B.get(I);if(e)return e;if(I&&!h0B.has(I))return A;const t=g.solverName?.trim();if(t)return l0B(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 d0B(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 C1I(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 y0B(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 Q1I(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,...y0B(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 w0B(g){const A=[],I=[],e=g.endSimpleRouteJson;if(!e)return{lines:A,circles:I};const t=new Set(C1I(g));for(const B of e.traces??[])if(t.has(B.pcb_trace_id))for(const o of Q1I(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 u0B(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 G0B=new Set(["pcb_trace","pcb_via","pcb_copper_pour","pcb_ground_plane","pcb_ground_plane_region","pcb_thermal_spoke","pcb_breakout_point"]);function m0B(g,A,I){const e=I==="input"?A.startSimpleRouteJson??A.errorSimpleRouteJson:A.endSimpleRouteJson,t=g.filter(i=>!G0B.has(i.type)&&!i.type.endsWith("_error")&&!i.type.endsWith("_warning"));if(!e)return t;const B=I==="input"?e.traces??[]:d0B(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=Q1I(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}_${u0B(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}`,i1I=g=>g.componentDisplayName?.match(/name="([^"]+)"/)?.[1]?.replace(/^\./,"")||g.componentDisplayName||g.subcircuit_id||"Board",E1I=g=>g.startSimpleRouteJson??g.endSimpleRouteJson??g.errorSimpleRouteJson,p0B={is_showing_autorouting:!0,is_showing_rats_nest:!1,is_showing_drc_errors:!1,is_showing_drc_warnings:!1,is_showing_pcb_groups:!1},k0B=({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&&E1I(N)===E1I(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:m0B(g??[],h,w),[g,h,u,w]),m=gA.useMemo(()=>h&&w==="output"&&C?w0B(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(qSI,{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=C1I(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:`${i1I(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:[D0B(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:p0B,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`,` · ${i1I(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."})]})]})},n1I=({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])},M0B=g=>{gA.useEffect(()=>{try{uVI(g)}catch{}},[g.source,g.component,g.isWebEmbedded,g.activeTab])},s1I="0.0.3010",S0B={version:s1I},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()])):{}},f0B=(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}},a1I=(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}=f0B(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"})]})]})},XNI=g=>g.activeSubSolver?[g,...XNI(g.activeSubSolver)]:[g],ThB=({solver:g})=>{const A=XNI(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(qhB,{solver:I})]},I.getSolverName()))})},ZhB=({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(ThB,{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]})]})},OhB=g=>g!==null&&"pipelineDef"in g&&Array.isArray(g.pipelineDef),WhB=(g,A,I)=>{const e=g.currentPipelineStageIndex;return A<e?"Completed":A===e&&g.activeSubSolver?g.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},VhB=(g,A)=>{const e=g.pipelineDef[A].solverName,t=WhB(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}},jhB=({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,"%"]})]})},$NI=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)},XhB=g=>Object.entries(g).map(([A,I])=>`${A}: ${$NI(I)}`).join(", "),$hB=({stats:g})=>{if(!g||Object.keys(g).length===0)return W.jsx("span",{children:"-"});const A=Object.entries(g),I=XhB(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,": ",$NI(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},A0B=(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)}`)}},g0B=({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"})}),A1I=g=>{let A=g;for(;A.activeSubSolver;)A=A.activeSubSolver;return A},g1I=({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)=>VhB(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):A0B(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=A1I(g);for(;!g.solved&&!g.failed&&(g.step(),A1I(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=OhB(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(g0B,{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(jhB,{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($hB,{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(g1I,{solver:h.solverInstance,onStepUntilPhase:A,onDownloadInput:I,isNested:!0,indentLevel:t+1,triggerRender:B})})})]},h.name)})})]})})]})};function I0B({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 e0B=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}},t0B=({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(ZhB,{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(e0B,{fallback:W.jsx(I0B,{graphics:s}),children:Q==="canvas"?W.jsx(vhB,{graphics:s}):W.jsx(_hB,{graphics:s})}),a&&W.jsx(g1I,{solver:C,onStepUntilPhase:c,triggerRender:o})]})};const B0B=()=>{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)},[])},o0B=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)},o0B)},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"},C0B=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",I1I="https://github.com/tscircuit/copper-pour-solver/issues/new",e1I="https://github.com/tscircuit/calculate-packing/issues/new",Q0B="https://github.com/tscircuit/matchpack/issues/new",t1I="https://github.com/tscircuit/schematic-trace-solver/issues/new?template=json-bug-report.yml",i0B={PackSolver2:e1I,LayoutPipelineSolver:Q0B,AutoroutingPipelineSolver:Kx,AssignableAutoroutingPipeline2:Kx,AssignableAutoroutingPipeline3:Kx,AutoroutingPipeline1_OriginalUnravel:Kx,AutoroutingPipelineSolver3_HgPortPointPathing:Kx,AutoroutingPipelineSolver4:Kx,AutoroutingPipelineSolver5:Kx,AutoroutingPipelineSolver7_MultiGraph:Kx,AutoroutingPipelineSolver8:Kx,CopperPourPipelineSolver:I1I,SchematicTracePipelineSolver:t1I},E0B=g=>g.toLowerCase().includes("pack")?mBB:g.toLowerCase().includes("rout")?qSI:hBB,B1I=g=>{const A=i0B[g];if(A)return A;const I=g.toLowerCase();return I.includes("autorout")?Kx:I.includes("schematic")&&I.includes("trace")?t1I:I.includes("copperpour")?I1I:I.includes("pack")?e1I:null},n0B=g=>`${etg(`${g.componentName}-${g.solverName}`)}-solver-input.json`,o1I=g=>{dk(JSON.stringify(g.solverParams,null,2),{fileName:n0B(g),mimeType:"application/json"})},s0B=({solverEvent:g})=>{const A=B1I(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:()=>o1I(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"]})]})},a0B=({solverEvent:g})=>{const A=B1I(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"})})},r0B=({solverEvents:g=[]})=>{const[A,I]=gA.useState(null);B0B();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(...C0B(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=E0B(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(s0B,{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(t0B,{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(a0B,{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:()=>o1I(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"})})})]})},c0B=new Map([["custom","Custom"],["fanout","Fanout"],["single_layer_fanout","Single layer fanout"],["tscircuit_simplify","Simplify"]]),h0B=new Set(["tscircuit","default","auto","auto_local"]);function l0B(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 D0B(g){const A=g.autorouterName?.trim(),I=A?.replace(/-/g,"_"),e=I&&c0B.get(I);if(e)return e;if(I&&!h0B.has(I))return A;const t=g.solverName?.trim();if(t)return l0B(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 d0B(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 C1I(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 y0B(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 Q1I(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,...y0B(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 w0B(g){const A=[],I=[],e=g.endSimpleRouteJson;if(!e)return{lines:A,circles:I};const t=new Set(C1I(g));for(const B of e.traces??[])if(t.has(B.pcb_trace_id))for(const o of Q1I(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 u0B(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 G0B=new Set(["pcb_trace","pcb_via","pcb_copper_pour","pcb_ground_plane","pcb_ground_plane_region","pcb_thermal_spoke","pcb_breakout_point"]);function m0B(g,A,I){const e=I==="input"?A.startSimpleRouteJson??A.errorSimpleRouteJson:A.endSimpleRouteJson,t=g.filter(i=>!G0B.has(i.type)&&!i.type.endsWith("_error")&&!i.type.endsWith("_warning"));if(!e)return t;const B=I==="input"?e.traces??[]:d0B(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=Q1I(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}_${u0B(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}`,i1I=g=>g.componentDisplayName?.match(/name="([^"]+)"/)?.[1]?.replace(/^\./,"")||g.componentDisplayName||g.subcircuit_id||"Board",E1I=g=>g.startSimpleRouteJson??g.endSimpleRouteJson??g.errorSimpleRouteJson,p0B={is_showing_autorouting:!0,is_showing_rats_nest:!1,is_showing_drc_errors:!1,is_showing_drc_warnings:!1,is_showing_pcb_groups:!1},k0B=({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&&E1I(N)===E1I(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:m0B(g??[],h,w),[g,h,u,w]),m=gA.useMemo(()=>h&&w==="output"&&C?w0B(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(qSI,{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=C1I(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:`${i1I(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:[D0B(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:p0B,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`,` · ${i1I(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."})]})]})},n1I=({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])},M0B=g=>{gA.useEffect(()=>{try{uVI(g)}catch{}},[g.source,g.component,g.isWebEmbedded,g.activeTab])},s1I="0.0.3012",S0B={version:s1I},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()])):{}},f0B=(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}},a1I=(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}=f0B(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" } } }
|