@layoutit/polycss 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/elements.js CHANGED
@@ -1,4 +1,4 @@
1
- import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as hs,cameraCullVisibleSignature as gs,computeSceneBbox as ys,findOverlappingPolygonDuplicates as bs,inverseRotateVec3 as oo,isVoxelCameraCullableNormalGroups as xs,mergePolygons as vs,normalFacesCamera as Ps,parseHexColor as Jt,polygonCssSurfaceNormal as ro}from"@layoutit/polycss-core";import{parsePureColor as En}from"@layoutit/polycss-core";var Ot=50,It=[.4,-.7,.59],Ht="#ffffff",Vt=1,zt="#ffffff",Ft=.4,Oe=4096,ln=1,_o=.1,Ro=1,An=Oe*Oe,ko=An*3,_t=2048,Do=4*1024*1024,Oo=16*1024*1024,Io=.995,Ho=12,ke=new Map,Rt=new WeakMap,ne=.001,ae=1e-9,Vo=1e-4,zo=.1,cn=.01,Fo=.75,Bo=1,No=250,un=1.5,$o=.75,Xo=3,Yo=2,Uo=4,kt=64,we=64,ve=64,Go=128,dn=50,mn=1e-7,pn=16,Tt=.9,Wo=.05,jo=Number.POSITIVE_INFINITY,Zo=.6;function qo(e){let n=ke.get(e);return n||(n=new Promise((t,o)=>{let r=new Image;r.decoding="async",r.onload=()=>t(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),ke.set(e,n),n.then(()=>{ke.get(e)===n&&ke.delete(e)},()=>{ke.get(e)===n&&ke.delete(e)})),n}function Ke(e){let n=typeof e=="string"?Number(e):e;return n===void 0||!Number.isFinite(n)?1:Math.min(Ro,Math.max(_o,n))}function Bt(e,n){let t=e.toFixed(n).replace(/\.?0+$/,"");return Object.is(Number(t),-0)?"0":t}function Ie(e,n=Uo){let t=Bt(e,n);return Number(t)===0||Object.is(Number(t),-0)?"0":`${t}px`}function Ae(e,n=Xo){return e.map(t=>Bt(t,n)).join(",")}function Mn(e){if(e.length<3)return!1;let n=0;for(let t=0;t<e.length;t++){let o=e[t],r=e[(t+1)%e.length],s=e[(t+2)%e.length],i=(r[0]-o[0])*(s[1]-r[1])-(r[1]-o[1])*(s[0]-r[0]);if(Math.abs(i)<=ae)return!1;let l=Math.sign(i);if(n===0)n=l;else if(l!==n)return!1}return!0}function Qo(e){let n=0;for(let t=0;t<e.length;t++){let o=e[t],r=e[(t+1)%e.length];n+=o[0]*r[1]-o[1]*r[0]}return n/2}function Ko(e,n,t,o){let r=n[0]-e[0],s=n[1]-e[1],i=o[0]-t[0],l=o[1]-t[1],a=r*l-s*i;if(Math.abs(a)<=ae)return null;let u=t[0]-e[0],m=t[1]-e[1],d=(u*l-m*i)/a;return[e[0]+d*r,e[1]+d*s]}function Nt(e,n){if(e.length<6||e.length%2!==0||n<=0)return e;let t=[];for(let a=0;a<e.length;a+=2)t.push([e[a],e[a+1]]);if(!Mn(t))return Ne(e,n);let o=Qo(t);if(Math.abs(o)<=ae)return Ne(e,n);let r=o>0?1:-1,s=[];for(let a=0;a<t.length;a++){let u=t[a],m=t[(a+1)%t.length],d=m[0]-u[0],f=m[1]-u[1],g=Math.hypot(d,f);if(g<=ae)return Ne(e,n);let p=r*(f/g)*n,h=r*(-d/g)*n;s.push({a:[u[0]+p,u[1]+h],b:[m[0]+p,m[1]+h]})}let i=[],l=Math.max(2,n*4);for(let a=0;a<t.length;a++){let u=s[(a+t.length-1)%t.length],m=s[a],d=Ko(u.a,u.b,m.a,m.b);if(!d)return Ne(e,n);let f=t[a],g=d[0]-f[0],p=d[1]-f[1],h=Math.hypot(g,p);h>l?i.push(f[0]+g/h*l,f[1]+p/h*l):i.push(d[0],d[1])}return i}function fn(e,n){return typeof e=="number"&&Number.isFinite(e)?e:n}function $t(e){let t=e?.defaultView?.__polycssProjectiveQuadGuards,o=t?.maxWeightRatio,r=Math.max(0,fn(t?.denomEps,Wo)),s=typeof o=="number"&&Number.isFinite(o)&&o>0?Math.max(1,o):jo,i=Math.max(0,fn(t?.bleed,Zo));return{denomEps:r,maxWeightRatio:s,bleed:i,disableGuards:t?.disableGuards===!0}}function hn(e,n){if(e.length!==4||!Mn(e))return null;let[t,o,r,s]=e,i=t[0]-o[0]+r[0]-s[0],l=t[1]-o[1]+r[1]-s[1],a=o[0]-r[0],u=s[0]-r[0],m=o[1]-r[1],d=s[1]-r[1],f=a*d-m*u;if(Math.abs(f)<=ae)return null;let g=(i*d-l*u)/f,p=(a*l-m*i)/f,h=[1,1+g,1+g+p,1+p];if(h.some(A=>!Number.isFinite(A)))return null;let b=Math.min(...h),x=Math.max(...h);return!n.disableGuards&&(b<=n.denomEps||x/b>n.maxWeightRatio)?null:{g,h:p,w1:1+g,w3:1+p}}function Jo(e,n,t,o,r,s,i,l){if(e.length!==8)return null;let a=[[e[0],e[1]],[e[2],e[3]],[e[4],e[5]],[e[6],e[7]]];if(!hn(a,l))return null;let u=Nt(e,l.bleed),m=[[u[0],u[1]],[u[2],u[3]],[u[4],u[5]],[u[6],u[7]]],d=hn(m,l);if(!d)return null;let{g:f,h:g,w1:p,w3:h}=d,[b,x,,A]=m,M=[r+b[0]*n[0]+b[1]*t[0],s+b[0]*n[1]+b[1]*t[1],i+b[0]*n[2]+b[1]*t[2]],P=([k,C],v)=>[(v-1)*r+(v*k-b[0])*n[0]+(v*C-b[1])*t[0],(v-1)*s+(v*k-b[0])*n[1]+(v*C-b[1])*t[1],(v-1)*i+(v*k-b[0])*n[2]+(v*C-b[1])*t[2]],E=[...P(x,p),f,...P(A,h),g,o[0],o[1],o[2],0,M[0],M[1],M[2],1];for(let k=0;k<8;k+=1)E[k]/=kt;return Ae(E,6)}function je(e,n=Yo){let t=Bt(e,n);return Number(t)===0?"0":`${t}%`}function er(e,n,t,o,r,s){let i=(e-t)*(s-o)-(n-o)*(r-t);return Math.abs(i)>mn?!1:(e-t)*(e-r)+(n-o)*(n-s)<=mn}function tr(e,n=dn,t=dn){let o=!1;for(let r=0,s=e.length-1;r<e.length;s=r++){let[i,l]=e[r],[a,u]=e[s];if(er(n,t,i,l,a,u))return!0;l>t!=u>t&&n<(a-i)*(t-l)/(u-l)+i&&(o=!o)}return o}function Cn(e){return e.reduce((n,t)=>n+t.width*t.height,0)}function nr(e,n){let t=Cn(e);if(t<=0)return 1;let o=Math.max(1,...e.map(i=>Math.max(i.width,i.height))),r=_t/o,s=Math.sqrt(n/(t*4));return Ke(Math.min(r,s))}function or(e,n){let t=Cn(e),o=.5;return t<=An?o=1:t<=ko&&(o=.75),Ke(Math.min(o,nr(e,n)))}function rr(e,n){return e.reduce((t,o)=>Math.max(t,Math.ceil(o.width*n),Math.ceil(o.height*n)),0)}function sr(e,n){return e.reduce((t,o)=>t+Math.ceil(o.width*n)*Math.ceil(o.height*n)*4,0)}function ir(e,n,t){let o=rr(e,n),r=sr(e,n),s=o>_t?_t/o:1,i=r>t?Math.sqrt(t/r):1;return Math.min(s,i)}function ar(e,n,t){let o=or(n.pages,t),r=o===1?n:qe(e,o);for(let s=0;s<4;s++){let i=ir(r.pages,o,t);if(i>=1)break;let l=Ke(o*i*Io);if(l>=o)break;o=l,r=qe(e,o)}return{packed:r,atlasScale:o}}function lr(e){return Sn(e)?Do:Oo}function Sn(e){if(!e)return!1;let t=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function cr(e,n){return e!==void 0&&e!=="auto"||Sn(n)?ve:Go}function ur(e,n){let t=e.matrix.split(",").map(o=>Number(o));return t.length!==16||t.some(o=>!Number.isFinite(o))?e.canonicalMatrix:(t[0]*=e.canvasW/n,t[1]*=e.canvasW/n,t[2]*=e.canvasW/n,t[4]*=e.canvasH/n,t[5]*=e.canvasH/n,t[6]*=e.canvasH/n,Ae(t))}function gn(e,n){for(let t of e.entries)t&&(t.atlasCanonicalSize=n,t.atlasMatrix=ur(t,n));return e}function Ee(e){return e.atlasCanonicalSize??ve}function wn(e,n,t){let o=cr(n,t);if(n!==void 0&&n!=="auto"){let i=Ke(n);return{packed:gn(qe(e,i),o),atlasScale:i,atlasCanonicalSize:o}}let r=qe(e,1),s=ar(e,r,lr(t));return{packed:gn(s.packed,o),atlasScale:s.atlasScale,atlasCanonicalSize:o}}function dr(e){return Math.max(ln,Math.ceil(ln/e))}function xe(e,n,t=1,o=0,r=0,s=1,i=0,l=0){e.setTransform(t*n,o*n,r*n,s*n,i*n,l*n)}function Me(e){let n=En(e);return n?{r:n.rgb[0],g:n.rgb[1],b:n.rgb[2]}:{r:255,g:255,b:255}}function Xt({r:e,g:n,b:t}){return`${e},${n},${t}`}function mr(e){return En(e)?.alpha??1}function pr({r:e,g:n,b:t}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(n)}${o(t)}`}function J(e,n,t){let o=e.getAttribute("style")??"",r=`${n}:${t}`,s=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`(^|;)\\s*${s}\\s*:[^;]*`,"i"),l=i.test(o)?o.replace(i,(a,u)=>`${u}${r}`):`${o}${o.trim()&&!o.trim().endsWith(";")?";":""}${r}`;l!==o&&e.setAttribute("style",l)}function de(e,n){let t=e.getAttribute("style")??"";if(!t)return;let o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`^\\s*${o}\\s*:`,"i"),s=t.split(";").map(i=>i.trim()).filter(i=>i&&!r.test(i)).join(";");s?e.setAttribute("style",s):e.removeAttribute("style")}function Tn(e,n,t,o,r){let s=Me(e),i=Me(t),l=Me(o),a=l.r/255*r+i.r/255*n,u=l.g/255*r+i.g/255*n,m=l.b/255*r+i.b/255*n,d=Math.max(0,Math.min(255,Math.round(s.r*a))),f=Math.max(0,Math.min(255,Math.round(s.g*u))),g=Math.max(0,Math.min(255,Math.round(s.b*m))),p=mr(e);return p<1?`rgba(${d}, ${f}, ${g}, ${p})`:pr({r:d,g:f,b:g})}function Ln(e,n,t,o){let r=Me(n),s=Me(t);return{r:s.r/255*o+r.r/255*e,g:s.g/255*o+r.g/255*e,b:s.b/255*o+r.b/255*e}}function fr({r:e,g:n,b:t}){let o=r=>Math.round(Math.max(0,Math.min(1,r))*255);return`rgb(${o(e)} ${o(n)} ${o(t)})`}function hr(e,n,t,o,r,s,i){Math.abs(s.r-1)<.001&&Math.abs(s.g-1)<.001&&Math.abs(s.b-1)<.001||(e.save(),xe(e,i),e.globalCompositeOperation="multiply",e.fillStyle=fr(s),e.fillRect(n,t,o,r),e.restore())}function gr(e,n,t,o,r,s,i){let l=n.naturalWidth||n.width||1,a=n.naturalHeight||n.height||1,u=Math.max(r/l,s/a),m=l*u,d=a*u;xe(e,i),e.drawImage(n,t+(r-m)/2,o+(s-d)/2,m,d)}function Ze(e){return`${e[0]},${e[1]},${e[2]}`}function yr(e,n){let t=Ze(e),o=Ze(n);return t<o?`${t}|${o}`:`${o}|${t}`}function _n(e,n){return Ze(e)<Ze(n)?[n[0]-e[0],n[1]-e[1],n[2]-e[2]]:[e[0]-n[0],e[1]-n[1],e[2]-n[2]]}function br(e){return!e.texture}function Xe(e,n,t){return e.map(o=>[o[1]*n,o[0]*n,o[2]*t])}function Je(e){if(e.length<3)return null;let n=e[0],t=0,o=0,r=0;for(let i=1;i+1<e.length;i++){let l=e[i],a=e[i+1],u=[l[0]-n[0],l[1]-n[1],l[2]-n[2]],m=[a[0]-n[0],a[1]-n[1],a[2]-n[2]];t-=u[1]*m[2]-u[2]*m[1],o-=u[2]*m[0]-u[0]*m[2],r-=u[0]*m[1]-u[1]*m[0]}let s=Math.hypot(t,o,r);return s<=ae?null:(t/=s,o/=s,r/=s,[t,o,r])}function He(e,n){return e[0]*n[0]+e[1]*n[1]+e[2]*n[2]}function xr(e,n){return[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]]}function vr(e,n,t){if(!e.vertices||e.vertices.length<3)return null;let o=Xe(e.vertices,n,t),r=Je(o);return r?{pts:o,normal:r,planeD:He(r,o[0]),optimizable:br(e)}:null}function Pr(e,n){return!e||!n||!e.optimizable||!n.optimizable?!1:Rn(e,n)}function Rn(e,n){return!e||!n||He(e.normal,n.normal)<1-Vo?!1:Math.abs(e.planeD-n.planeD)<=zo}function yn(e,n){if(!e)return null;let t=n.directionalLight,o=n.ambientLight,r=t?.direction??It,s=t?.color??Ht,i=Math.max(0,t?.intensity??Vt),l=o?.color??zt,a=Math.max(0,o?.intensity??Ft),u=Math.hypot(r[0],r[1],r[2])||1,m=r[0]/u,d=r[1]/u,f=r[2]/u,g=i*Math.max(0,e.normal[0]*m+e.normal[1]*d+e.normal[2]*f),p=Ln(g,s,l,a);return p.r*.2126+p.g*.7152+p.b*.0722}function Er(e){let n=[...e],t=Math.abs(n[0])>ae?0:Math.abs(n[1])>ae?1:2;return n[t]<0&&(n[0]*=-1,n[1]*=-1,n[2]*=-1),`${n[0].toFixed(6)},${n[1].toFixed(6)},${n[2].toFixed(6)}`}function $e(e,n,t,o,r={}){let s=He(o,t),i=[o[0]-s*t[0],o[1]-s*t[1],o[2]-s*t[2]],l=Math.hypot(i[0],i[1],i[2]);if(l<=ae)return null;let a=[i[0]/l,i[1]/l,i[2]/l],u=[t[1]*a[2]-t[2]*a[1],t[2]*a[0]-t[0]*a[2],t[0]*a[1]-t[1]*a[0]],m=Math.hypot(u[0],u[1],u[2]);if(m<=ae)return null;let d=[u[0]/m,u[1]/m,u[2]/m],f=e.map(w=>{let O=w[0]-n[0],H=w[1]-n[1],V=w[2]-n[2];return[O*a[0]+H*a[1]+V*a[2],O*d[0]+H*d[1]+V*d[2]]}),g=r.boundsOrigin??n,p=n[0]-g[0],h=n[1]-g[1],b=n[2]-g[2],x=p*a[0]+h*a[1]+b*a[2],A=p*d[0]+h*d[1]+b*d[2],M=1/0,P=1/0,E=-1/0,k=-1/0;for(let[w,O]of f){let H=w+x,V=O+A;H<M&&(M=H),H>E&&(E=H),V<P&&(P=V),V>k&&(k=V)}let C=E-M,v=k-P;if(!Number.isFinite(C)||!Number.isFinite(v))return null;let B=r.snapBounds?Math.floor(M+ne):M,N=r.snapBounds?Math.floor(P+ne):P,Y=r.snapBounds?Math.ceil(E-ne):E,te=r.snapBounds?Math.ceil(k-ne):k,S=Math.max(1,r.snapBounds?Y-B:Math.ceil(C)),$=Math.max(1,r.snapBounds?te-N:Math.ceil(v));return{xAxis:a,yAxis:d,local2D:f,shiftX:x-B,shiftY:A-N,canvasW:S,canvasH:$,pixelArea:S*$,rawArea:C*v}}function Ar(e,n,t,o){let r=0,s=0;for(let i of e){let l=n[i];if(!l)return null;let a=$e(l.pts,l.pts[0],l.normal,t,{boundsOrigin:o,snapBounds:!0});if(!a)return null;r+=a.pixelArea,s+=a.rawArea}return{pixelArea:r,rawArea:s}}function Mr(e,n){let t=n[e[0]]?.pts[0];if(!t)return null;let o={pixelArea:0,rawArea:0},r=null,s=new Set;for(let i of e){let l=n[i];if(!l)continue;let a=[l.pts[1][0]-l.pts[0][0],l.pts[1][1]-l.pts[0][1],l.pts[1][2]-l.pts[0][2]],u=$e(l.pts,l.pts[0],l.normal,a);o&&u?(o.pixelArea+=u.pixelArea,o.rawArea+=u.rawArea):o=null;for(let m=0;m<l.pts.length;m++){let d=_n(l.pts[m],l.pts[(m+1)%l.pts.length]),f=$e(l.pts,l.pts[0],l.normal,d);if(!f)continue;let g=Er(f.xAxis);if(s.has(g))continue;s.add(g);let p=Ar(e,n,f.xAxis,t);p&&(!r||p.pixelArea<r.pixelArea||p.pixelArea===r.pixelArea&&p.rawArea<r.rawArea-ne)&&(r={xAxis:f.xAxis,...p})}}return r&&o&&(r.pixelArea<o.pixelArea||r.pixelArea===o.pixelArea&&r.rawArea<=o.rawArea+ne)?{xAxis:r.xAxis,boundsOrigin:t,seamEdges:new Set}:null}function Yt(e,n){let t=n.tileSize??Ot,o=n.layerElevation??t,r=e.map(d=>vr(d,t,o)),s=new Map,i=e.map(()=>new Set),l=e.map(()=>new Set);for(let d=0;d<e.length;d++){let f=e[d].vertices;if(!(!f||f.length<3))for(let g=0;g<f.length;g++){let p=yr(f[g],f[(g+1)%f.length]),h=s.get(p),b={polygon:d,edge:g};h?h.push(b):s.set(p,[b])}}let a=e.map(()=>new Set);for(let d of s.values())if(!(d.length<2))for(let f=0;f<d.length;f++)for(let g=f+1;g<d.length;g++){let p=d[f],h=d[g],b=p.polygon,x=h.polygon;if(e[b].texture&&e[x].texture&&(l[p.polygon].add(p.edge),l[h.polygon].add(h.edge)),Rn(r[b],r[x]))i[p.polygon].add(p.edge),i[h.polygon].add(h.edge);else{let A=yn(r[b],n),M=yn(r[x],n);A!==null&&M!==null&&(A<=M+cn&&i[p.polygon].add(p.edge),M<=A+cn&&i[h.polygon].add(h.edge))}Pr(r[b],r[x])&&(a[b].add(x),a[x].add(b))}let u=Array(e.length).fill(void 0),m=new Set;for(let d=0;d<e.length;d++){if(m.has(d)||!r[d]?.optimizable)continue;let f=[],g=[d];for(m.add(d);g.length>0;){let h=g.pop();f.push(h);for(let b of a[h])m.has(b)||(m.add(b),g.push(b))}if(f.length<2)continue;let p=Mr(f,r);if(p)for(let h of f)u[h]={xAxis:p.xAxis,boundsOrigin:p.boundsOrigin,seamEdges:i[h],textureEdgeRepairEdges:l[h]}}for(let d=0;d<e.length;d++)!u[d]&&(i[d].size>0||l[d].size>0)&&(u[d]={seamEdges:i[d],textureEdgeRepairEdges:l[d]});return u}function Cr(e){if(typeof e.toBlob=="function")return new Promise(n=>{e.toBlob(t=>{n(t?URL.createObjectURL(t):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}function bn(e,n,t,o){if(o.optimize&&o.fixedXAxis)return $e(e,n,t,o.fixedXAxis,{boundsOrigin:o.boundsOrigin,snapBounds:o.snapBounds});let r=null,s=o.optimize&&o.seamEdges&&o.seamEdges.size>0?Array.from(o.seamEdges):null,i=s??(o.optimize?e.map((l,a)=>a):[0]);for(let l of i){let a=(l+1)%e.length,u=s?_n(e[l],e[a]):[e[a][0]-e[l][0],e[a][1]-e[l][1],e[a][2]-e[l][2]],m=$e(e,n,t,u,{boundsOrigin:o.boundsOrigin,snapBounds:o.snapBounds});m&&(!r||m.pixelArea<r.pixelArea||m.pixelArea===r.pixelArea&&m.rawArea<r.rawArea-ne)&&(r=m)}return r}function Sr(e){if(e.local2D.length!==4)return!1;let n=[],t=[],o=(r,s)=>{for(let i of r)if(Math.abs(i-s)<=ne)return;r.push(s)};for(let[r,s]of e.local2D)o(n,r+e.shiftX),o(t,s+e.shiftY);if(n.length!==2||t.length!==2||(n.sort((r,s)=>r-s),t.sort((r,s)=>r-s),Math.abs(n[0])>ne||Math.abs(t[0])>ne||n[1]-n[0]<=ne||t[1]-t[0]<=ne))return!1;for(let[r,s]of e.local2D){let i=r+e.shiftX,l=s+e.shiftY,a=Math.abs(i-n[0])<=ne||Math.abs(i-n[1])<=ne,u=Math.abs(l-t[0])<=ne||Math.abs(l-t[1])<=ne;if(!a||!u)return!1}return!0}function kn(e,n){if(e.length<3||n.length<3)return null;let[t,o,r]=e,[s,i,l]=n,a=t[0],u=t[1],m=o[0],d=o[1],f=r[0],g=r[1],p=s[0],h=1-s[1],b=i[0],x=1-i[1],A=l[0],M=1-l[1],P=b-p,E=x-h,k=A-p,C=M-h,v=P*C-k*E;if(Math.abs(v)<=1e-9)return null;let B=m-a,N=f-a,Y=d-u,te=g-u,S={a:(B*C-N*E)/v,b:(P*N-k*B)/v,c:(Y*C-te*E)/v,d:(P*te-k*Y)/v,e:0,f:0};return S.e=a-S.a*p-S.b*h,S.f=u-S.c*p-S.d*h,S}function Dn(e){if(e.length===0)return null;let n=1/0,t=1/0,o=-1/0,r=-1/0;for(let s of e){let i=s[0],l=1-s[1];if(!Number.isFinite(i)||!Number.isFinite(l))return null;n=Math.min(n,i),o=Math.max(o,i),t=Math.min(t,l),r=Math.max(r,l)}return{minU:n,minV:t,maxU:o,maxV:r}}function wr(e,n,t,o,r,s,i,l){let u=Xe(e.vertices,n,t).map(f=>{let g=f[0]-o[0],p=f[1]-o[1],h=f[2]-o[2];return[g*r[0]+p*r[1]+h*r[2]+i,g*s[0]+p*s[1]+h*s[2]+l]}),m=kn(u,e.uvs),d=Dn(e.uvs);return!m&&!d?null:{screenPts:u.flatMap(([f,g])=>[f,g]),uvAffine:m,uvSampleRect:d}}function Ne(e,n){if(e.length<6||n<=0)return e;let t=0,o=0,r=e.length/2;for(let i=0;i<e.length;i+=2)t+=e[i],o+=e[i+1];t/=r,o/=r;let s=e.slice();for(let i=0;i<s.length;i+=2){let l=s[i]-t,a=s[i+1]-o,u=Math.hypot(l,a);u<=ne||(s[i]+=l/u*n,s[i+1]+=a/u*n)}return s}function Dt(e,n,t,o){for(let r=0;r<o.length;r+=2){let s=n+o[r],i=t+o[r+1];r===0?e.moveTo(s,i):e.lineTo(s,i)}e.closePath()}function Ut(e,n,t,o,r){let{vertices:s,texture:i,uvs:l}=e;if(!s||s.length<3)return null;let a=t.tileSize??Ot,u=t.layerElevation??a,m=Xe(s,a,u),d=m[0],f=m[1],g=[f[0]-d[0],f[1]-d[1],f[2]-d[2]];if(Math.hypot(g[0],g[1],g[2])===0)return null;let h=Je(m);if(!h)return null;let b=bn(m,d,h,{optimize:!1}),x=i||b&&Sr(b)?b:bn(m,d,h,{optimize:!0,fixedXAxis:r?.xAxis,boundsOrigin:r?.boundsOrigin,snapBounds:!!r,seamEdges:r?.seamEdges});if(!x)return null;let{xAxis:A,yAxis:M,local2D:P}=x,E=i&&r?.textureEdgeRepairEdges?.size?r.textureEdgeRepairEdges:null,k=!!(i&&E),C=x.shiftX,v=x.shiftY,B=x.canvasW,N=x.canvasH,Y=[];for(let[I,D]of P)Y.push(I+C,D+v);let te=d[0]-C*A[0]-v*M[0],S=d[1]-C*A[1]-v*M[1],$=d[2]-C*A[2]-v*M[2],w=Ae([A[0],A[1],A[2],0,M[0],M[1],M[2],0,h[0],h[1],h[2],0,te,S,$,1]),O=Ae([A[0]*B,A[1]*B,A[2]*B,0,M[0]*N,M[1]*N,M[2]*N,0,h[0],h[1],h[2],0,te,S,$,1]),H=Ae([A[0]*B/ve,A[1]*B/ve,A[2]*B/ve,0,M[0]*N/ve,M[1]*N/ve,M[2]*N/ve,0,h[0],h[1],h[2],0,te,S,$,1]),V=!i&&s.length===4?Jo(Y,A,M,h,te,S,$,o):null,j=t.directionalLight,ie=t.ambientLight,_=j?.direction??It,X=j?.color??Ht,U=Math.max(0,j?.intensity??Vt),oe=ie?.color??zt,re=Math.max(0,ie?.intensity??Ft),le=Math.hypot(_[0],_[1],_[2])||1,pe=_[0]/le,ce=_[1]/le,ue=_[2]/le,fe=U*Math.max(0,h[0]*pe+h[1]*ce+h[2]*ue),ge=Ln(fe,X,oe,re),c=Tn(e.color??"#cccccc",fe,X,oe,re),y=null,R=null;i&&l&&l.length>=3&&l.length===s.length&&(R=Dn(l),y=kn(P.map(([I,D])=>[I+C,D+v]),l));let T=i&&e.textureTriangles?.length?e.textureTriangles.map(I=>wr(I,a,u,d,A,M,C,v)).filter(I=>!!I):null;return{index:n,polygon:e,texture:i,tileSize:a,layerElevation:u,matrix:w,canonicalMatrix:O,atlasMatrix:H,projectiveMatrix:V,canvasW:B,canvasH:N,screenPts:Y,uvAffine:y,uvSampleRect:R,textureTriangles:T,textureEdgeRepairEdges:E,textureEdgeRepair:k,normal:h,textureTint:ge,shadedColor:c}}function et(e,n,t){if(e.texture||e.vertices.length!==3)return null;let o=t.tileSize??Ot,r=t.layerElevation??o,s=Xe(e.vertices,o,r),i=Je(s);if(!i)return null;let l=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(Z=>{let F=s[Z.a],K=s[Z.b];return{...Z,length:Math.hypot(K[0]-F[0],K[1]-F[1],K[2]-F[2])}}).sort((Z,F)=>F.length-Z.length),a=l[0].a,u=l[0].b,m=l[0].c,d=s[a],f=s[u],g=s[m],p=l[0].length;if(p<=ae)return null;let h=[(f[0]-d[0])/p,(f[1]-d[1])/p,(f[2]-d[2])/p],b=[g[0]-d[0],g[1]-d[1],g[2]-d[2]],x=He(b,h),A=[d[0]+h[0]*x,d[1]+h[1]*x,d[2]+h[2]*x],M=[A[0]-g[0],A[1]-g[1],A[2]-g[2]],P=Math.hypot(M[0],M[1],M[2]);if(P<=ae)return null;let E=[M[0]/P,M[1]/P,M[2]/P];if(He(xr(h,E),i)<0){let Z=u;if(u=a,a=Z,d=s[a],f=s[u],p=Math.hypot(f[0]-d[0],f[1]-d[1],f[2]-d[2]),p<=ae)return null;h=[(f[0]-d[0])/p,(f[1]-d[1])/p,(f[2]-d[2])/p];let F=[g[0]-d[0],g[1]-d[1],g[2]-d[2]];x=He(F,h),A=[d[0]+h[0]*x,d[1]+h[1]*x,d[2]+h[2]*x],M=[A[0]-g[0],A[1]-g[1],A[2]-g[2]];let K=Math.hypot(M[0],M[1],M[2]);if(K<=ae)return null;E=[M[0]/K,M[1]/K,M[2]/K]}let k=Math.max(0,Math.min(p,x)),C=Math.max(0,p-k),v=Nt([k,0,0,P,k+C,P],$o),B=[v[0],v[1]],N=[v[2],v[3]],Y=[v[4],v[5]],te=(N[1]+Y[1])/2,S=B[0]-N[0],$=Y[0]-B[0],w=te-B[1];if(S<=ae||$<=ae||w<=ae||!Number.isFinite(S+$+w))return null;let O=t.directionalLight,H=t.ambientLight,V=O?.direction??It,j=O?.color??Ht,ie=Math.max(0,O?.intensity??Vt),_=H?.color??zt,X=Math.max(0,H?.intensity??Ft),U=Math.hypot(V[0],V[1],V[2])||1,oe=V[0]/U,re=V[1]/U,le=V[2]/U,pe=ie*Math.max(0,i[0]*oe+i[1]*re+i[2]*le),ce=Tn(e.color??"#cccccc",pe,j,_,X),ue=t.textureLighting??"baked",fe=Me(e.color??"#cccccc"),ge=ce===t.solidPaintDefaults?.paintColor,c=ue==="dynamic"&&Xt(fe)===t.solidPaintDefaults?.dynamicColorKey,y=ue==="dynamic"||ge?"":`color:${ce};`,R=ue==="dynamic"?`--pnx:${i[0].toFixed(4)};--pny:${i[1].toFixed(4)};--pnz:${i[2].toFixed(4)};`+(c?"":`--psr:${(fe.r/255).toFixed(4)};--psg:${(fe.g/255).toFixed(4)};--psb:${(fe.b/255).toFixed(4)};`):"",T=([Z,F])=>[g[0]+(Z-k)*h[0]+F*E[0],g[1]+(Z-k)*h[1]+F*E[1],g[2]+(Z-k)*h[2]+F*E[2]],I=T(B),D=T([N[0],te]),z=T([Y[0],te]),G=we/2,ee=[(z[0]-D[0])/we,(z[1]-D[1])/we,(z[2]-D[2])/we],q=[I[0]-ee[0]*G,I[1]-ee[1]*G,I[2]-ee[2]*G],Q=[(D[0]-q[0])/we,(D[1]-q[1])/we,(D[2]-q[2])/we],L=`transform:matrix3d(${Ae([ee[0],ee[1],ee[2],0,Q[0],Q[1],Q[2],0,i[0],i[1],i[2],0,q[0],q[1],q[2],1])});`+y+R;return{index:n,polygon:e,styleText:L}}function qe(e,n=1){let t=Array(e.length).fill(null),o=[],r=dr(n),s=e.filter(a=>!!a).sort((a,u)=>u.canvasH-a.canvasH||u.canvasW-a.canvasW||a.index-u.index),i=()=>({width:r,height:r,entries:[],shelves:[]}),l=(a,u,m)=>{if(a.sealed)return null;for(let g of a.shelves)if(u.canvasH<=g.height&&g.x+u.canvasW+r<=Oe){let p={...u,pageIndex:m,x:g.x,y:g.y};return g.x+=u.canvasW+r*2,a.entries.push(p),a.width=Math.max(a.width,p.x+u.canvasW+r),p}let d=a.shelves.length===0?r:a.height+r;if(d+u.canvasH+r>Oe)return null;let f={...u,pageIndex:m,x:r,y:d};return a.shelves.push({x:r+u.canvasW+r*2,y:d,height:u.canvasH}),a.entries.push(f),a.width=Math.max(a.width,f.x+u.canvasW+r),a.height=Math.max(a.height,d+u.canvasH+r),f};for(let a of s){if(a.canvasW+r*2>Oe||a.canvasH+r*2>Oe){let d=o.length,f={...a,pageIndex:d,x:r,y:r};t[a.index]=f,o.push({width:a.canvasW+r*2,height:a.canvasH+r*2,entries:[f],shelves:[],sealed:!0});continue}let m=null;for(let d=0;d<o.length&&(m=l(o[d],a,d),!m);d++);if(!m){let d=i(),f=o.length;o.push(d),m=l(d,a,f)}m&&(t[a.index]=m)}return{entries:t,pages:o.map(({width:a,height:u,entries:m})=>({width:a,height:u,entries:m}))}}function Tr(e,n,t,o){xe(e,o),e.beginPath(),Dt(e,n.x,n.y,n.screenPts),e.clip(),xe(e,o),e.fillStyle=t==="dynamic"?n.polygon.color??"#cccccc":n.shadedColor,e.fillRect(n.x,n.y,n.canvasW,n.canvasH)}function De(e,n){return Math.max(0,Math.min(n,e))}function xn(e,n,t,o,r,s,i,l){let a=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,m=De(Math.min(t.minU,t.maxU)*a,a),d=De(Math.max(t.minU,t.maxU)*a,a),f=De(Math.min(t.minV,t.maxV)*u,u),g=De(Math.max(t.minV,t.maxV)*u,u),p=Math.floor(m),h=Math.floor(f),b=Math.ceil(d)-p,x=Math.ceil(g)-h;b<1&&(p=Math.floor(De((t.minU+t.maxU)/2*a,a-1)),b=1),x<1&&(h=Math.floor(De((t.minV+t.maxV)/2*u,u-1)),x=1),p=Math.max(0,Math.min(a-1,p)),h=Math.max(0,Math.min(u-1,h)),b=Math.max(1,Math.min(a-p,b)),x=Math.max(1,Math.min(u-h,x)),xe(e,l),e.drawImage(n,p,h,b,x,o,r,s,i)}function Lr(e,n,t,o,r,s){for(let i=0;i<o.length;i+=2){let l=n+o[i]+r,a=t+o[i+1]+s;i===0?e.moveTo(l,a):e.lineTo(l,a)}e.closePath()}function _r(e,n,t,o,r=0,s=0){if(n.textureTriangles?.length){let i=t.naturalWidth||t.width||1,l=t.naturalHeight||t.height||1;for(let a of n.textureTriangles){let u=Ne(a.screenPts,Fo);e.save(),xe(e,o),e.beginPath(),Lr(e,n.x,n.y,u,r,s),e.clip(),a.uvAffine?(xe(e,o,a.uvAffine.a/i,a.uvAffine.c/i,a.uvAffine.b/l,a.uvAffine.d/l,n.x+a.uvAffine.e+r,n.y+a.uvAffine.f+s),e.drawImage(t,0,0)):a.uvSampleRect&&xn(e,t,a.uvSampleRect,n.x+r,n.y+s,n.canvasW,n.canvasH,o),e.restore()}}else if(n.uvAffine){let i=t.naturalWidth||t.width||1,l=t.naturalHeight||t.height||1;xe(e,o,n.uvAffine.a/i,n.uvAffine.c/i,n.uvAffine.b/l,n.uvAffine.d/l,n.x+n.uvAffine.e+r,n.y+n.uvAffine.f+s),e.drawImage(t,0,0)}else n.uvSampleRect?xn(e,t,n.uvSampleRect,n.x+r,n.y+s,n.canvasW,n.canvasH,o):gr(e,t,n.x+r,n.y+s,n.canvasW,n.canvasH,o)}function Rr(e,n,t,o,r,s){let i=r-t,l=s-o,a=i*i+l*l;if(a<=ae)return Math.hypot(e-t,n-o);let u=Math.max(0,Math.min(1,((e-t)*i+(n-o)*l)/a));return Math.hypot(e-(t+i*u),n-(o+l*u))}function kr(e,n,t,o){let r=1/0,s=t.length/2;for(let i of o){if(i<0||i>=s)continue;let l=i*2,a=(i+1)%s*2;r=Math.min(r,Rr(e,n,t[l],t[l+1],t[a],t[a+1]))}return r}function Dr(e,n,t,o,r,s){let i=Math.max(0,o-s),l=Math.min(n-1,o+s),a=Math.max(0,r-s),u=Math.min(t-1,r+s),m=null,d=1/0;for(let f=a;f<=u;f++)for(let g=i;g<=l;g++){if(g===o&&f===r)continue;let p=g-o,h=f-r,b=p*p+h*h;if(b>s*s||b>=d)continue;let x=(f*n+g)*4;e[x+3]<No||(m=x,d=b)}return m}function Or(e,n,t){if(!n.textureEdgeRepair||!n.texture||!n.textureEdgeRepairEdges||n.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(n.x*t)),s=Math.max(0,Math.floor(n.y*t)),i=Math.max(1,Math.min(o.width-r,Math.ceil(n.canvasW*t))),l=Math.max(1,Math.min(o.height-s,Math.ceil(n.canvasH*t)));if(i<=0||l<=0)return;let a;try{a=e.getImageData(r,s,i,l)}catch{return}let u=a.data,m=new Uint8ClampedArray(u),d=Math.max(un,un/t),f=Math.max(2,Math.ceil(d*t)+1),g=!1;for(let p=0;p<l;p++)for(let h=0;h<i;h++){let b=(p*i+h)*4,x=u[b+3];if(x<Bo||x===255)continue;let A=(r+h+.5)/t-n.x,M=(s+p+.5)/t-n.y;if(kr(A,M,n.screenPts,n.textureEdgeRepairEdges)>d)continue;let P=Dr(m,i,l,h,p,f);P!==null&&(u[b]=m[P],u[b+1]=m[P+1],u[b+2]=m[P+2],u[b+3]=255,g=!0)}g&&e.putImageData(a,r,s)}async function Ir(e,n,t,o){let r=t.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let s=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),i=r.getContext("2d",s?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let l=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),a=new Map;await Promise.all(l.map(async m=>{a.set(m,await qo(m))}));for(let m of e.entries){let d=m.texture?a.get(m.texture):null;if(!m.texture){i.save(),Tr(i,m,n,o),i.restore();continue}d&&(i.save(),xe(i,o),i.beginPath(),Dt(i,m.x,m.y,m.screenPts),i.clip(),_r(i,m,d,o),i.restore()),m.texture&&n==="baked"&&(i.save(),xe(i,o),i.beginPath(),Dt(i,m.x,m.y,m.screenPts),i.clip(),hr(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),Or(i,m,o)}let u=await Cr(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:u}}async function On(e,n,t,o,r){let s=[];for(let i of e){if(r())break;s.push(await Ir(i,n,t,o))}return s}function In(e,n,t,o){if(!n.url)return;let r=`url(${n.url})`,s=o.canvasW||1,i=o.canvasH||1,l=Ee(o),a=`${Ie(-o.x/s*l)} ${Ie(-o.y/i*l)}`,u=`${Ie(n.width/s*l)} ${Ie(n.height/i*l)}`;t==="dynamic"?(J(e,"background-image",r),J(e,"background-position",a),J(e,"background-size",u)):J(e,"background",`${r} ${a} / ${u} no-repeat`),t==="dynamic"?(J(e,"mask-image",r),J(e,"mask-mode","alpha"),J(e,"mask-position",a),J(e,"mask-size",u),J(e,"mask-repeat","no-repeat"),J(e,"-webkit-mask-image",r),J(e,"-webkit-mask-position",a),J(e,"-webkit-mask-size",u),J(e,"-webkit-mask-repeat","no-repeat")):(de(e,"mask-image"),de(e,"mask-mode"),de(e,"mask-position"),de(e,"mask-size"),de(e,"mask-repeat"),de(e,"-webkit-mask-image"),de(e,"-webkit-mask-position"),de(e,"-webkit-mask-size"),de(e,"-webkit-mask-repeat"))}function Le(e,n){let t=Rt.get(e);if(t)for(let r of t)e.removeAttribute(`data-${r}`);let o=[];if(n.data)for(let[r,s]of Object.entries(n.data))e.setAttribute(`data-${r}`,String(s)),o.push(r);Rt.set(e,o)}function Hn(e,n,t,o=0,r=0){let s=e.matrix.split(",").map(f=>Number(f));if(s.length!==16||s.some(f=>!Number.isFinite(f)))return e.matrix;let i=s[0],l=s[1],a=s[2],u=s[4],m=s[5],d=s[6];return s[0]*=n,s[1]*=n,s[2]*=n,s[4]*=t,s[5]*=t,s[6]*=t,s[12]+=o*i+r*u,s[13]+=o*l+r*m,s[14]+=o*a+r*d,Ae(s)}function Hr(e,n){return Hn(e,n.width/pn,n.height/pn,n.minX,n.minY)}function Vr(e){return Hn(e,(e.canvasW||1)/kt,(e.canvasH||1)/kt)}function zr(e){let n=Bn(e);return[`transform:matrix3d(${Hr(e,n.bounds)})`,`border-shape:${Nn(n.points)}`].join(";")}function Fr(e,n){if(e.screenPts.length<6||n.vertices.length<3)return null;let t=e.tileSize,o=e.layerElevation,r=Xe(n.vertices,t,o),s=Je(r);if(!s)return null;let i=e.screenPts[0],l=e.screenPts[1],a=e.screenPts[2],u=e.screenPts[3],m=e.screenPts[4],d=e.screenPts[5],f=a-i,g=u-l,p=m-i,h=d-l,b=f*h-g*p;if(Math.abs(b)<=ae)return null;let x=r[0],A=r[1],M=r[2],P=[A[0]-x[0],A[1]-x[1],A[2]-x[2]],E=[M[0]-x[0],M[1]-x[1],M[2]-x[2]],k=[(P[0]*h-g*E[0])/b,(P[1]*h-g*E[1])/b,(P[2]*h-g*E[2])/b],C=[(f*E[0]-P[0]*p)/b,(f*E[1]-P[1]*p)/b,(f*E[2]-P[2]*p)/b],v=x[0]-k[0]*i-C[0]*l,B=x[1]-k[1]*i-C[1]*l,N=x[2]-k[2]*i-C[2]*l;return{normal:s,matrix:Ae([k[0]*e.canvasW/Ee(e),k[1]*e.canvasW/Ee(e),k[2]*e.canvasW/Ee(e),0,C[0]*e.canvasH/Ee(e),C[1]*e.canvasH/Ee(e),C[2]*e.canvasH/Ee(e),0,s[0],s[1],s[2],0,v,B,N,1])}}function Br(e,n,t,o){if(!n.texture||!t.texture||n.texture!==t.texture)return!1;let r=Fr(n,t);return r?(J(e,"transform",`matrix3d(${r.matrix})`),o==="dynamic"&&(J(e,"--pnx",r.normal[0].toFixed(4)),J(e,"--pny",r.normal[1].toFixed(4)),J(e,"--pnz",r.normal[2].toFixed(4))),Le(e,t),!0):!1}function Vn(e,n){J(e,"--pnx",n.normal[0].toFixed(4)),J(e,"--pny",n.normal[1].toFixed(4)),J(e,"--pnz",n.normal[2].toFixed(4))}function Nr(e){if(e.screenPts.length!==8)return null;let n=[],t=[],o=(r,s)=>{for(let i of r)if(Math.abs(i-s)<=ne)return;r.push(s)};for(let r=0;r<e.screenPts.length;r+=2)o(n,e.screenPts[r]),o(t,e.screenPts[r+1]);if(n.length!==2||t.length!==2||(n.sort((r,s)=>r-s),t.sort((r,s)=>r-s),Math.abs(n[0])>ne||Math.abs(t[0])>ne||n[1]-n[0]<=ne||t[1]-t[0]<=ne))return null;for(let r=0;r<e.screenPts.length;r+=2){let s=e.screenPts[r],i=e.screenPts[r+1],l=Math.abs(s-n[0])<=ne||Math.abs(s-n[1])<=ne,a=Math.abs(i-t[0])<=ne||Math.abs(i-t[1])<=ne;if(!l||!a)return null}return{left:n[0],top:t[0],width:n[1]-n[0],height:t[1]-t[0]}}function Te(e){return!!Nr(e)}function Qe(e){return!e.texture&&e.polygon.vertices.length===3}function Ve(e){return!e.texture&&!!e.projectiveMatrix&&!Te(e)}function Gt(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function tt(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";if(!t)return!0;let o=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(t);return!/\bVersion\/[\d.]+.*\bSafari\//.test(t)||o}function vn(e,n){e.set(n,(e.get(n)??0)+1)}function Pn(e){let n,t=1;for(let[o,r]of e)r>t&&(n=o,t=r);return n}function zn(e,n,t,o){let r=new Map,s=new Map,i=new Map,l=!o.has("b"),a=l,u=!o.has("u")&&tt(t),m=!o.has("i")&&Gt(t);for(let g of e)if(!(!g||g.texture)){if(n==="dynamic"){if(!(u&&Qe(g))&&!(l&&Te(g))&&!(a&&Ve(g))&&!m)continue;let p=Me(g.polygon.color??"#cccccc"),h=Xt(p);vn(s,h),i.has(h)||i.set(h,p);continue}!(u&&Qe(g))&&!(l&&Te(g))&&!(a&&Ve(g))&&!m||vn(r,g.shadedColor)}let d=Pn(r),f=Pn(s);return{paintColor:d,dynamicColorKey:f,dynamicColor:f?i.get(f):void 0}}function Fn(){return new Promise(e=>setTimeout(e,0))}async function Lt(e){return performance.now()-e<Ho?e:(await Fn(),performance.now())}function nt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{};let o=new Set(n.strategies?.disable??[]),r=Yt(e,n),s=$t(t),i=e.map((l,a)=>Ut(l,a,n,s,r[a]));return zn(i,n.textureLighting??"baked",t,o)}function $r(e,n,t){let o=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY,i=Number.NEGATIVE_INFINITY;for(let u=0;u<e.length;u+=2){let m=e[u],d=e[u+1];!Number.isFinite(m)||!Number.isFinite(d)||(o=Math.min(o,m),r=Math.min(r,d),s=Math.max(s,m),i=Math.max(i,d))}let l=s-o,a=i-r;return!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(l)||!Number.isFinite(a)||l<=ae||a<=ae?{minX:0,minY:0,width:n,height:t}:{minX:o,minY:r,width:l,height:a}}function Bn(e){let n=e.canvasW||1,t=e.canvasH||1,o=Tt>0?Nt(e.screenPts,Tt):e.screenPts,r=Tt>0?$r(o,n,t):{minX:0,minY:0,width:n,height:t},s=[];for(let i=0;i<o.length;i+=2){let l=Math.max(0,Math.min(100,(o[i]-r.minX)/r.width*100)),a=Math.max(0,Math.min(100,(o[i+1]-r.minY)/r.height*100));s.push([l,a])}return{bounds:r,points:s}}function Xr([e,n]){return`${je(e)} ${je(n)}`}function Yr(e){return`polygon(${e.map(Xr).join(",")})`}function Ur(e){if(tr(e))return"circle(0)";let n=0,t=0,o=Math.max(1,e.length);for(let[i,l]of e)n+=i,t+=l;let r=je(Math.max(0,Math.min(100,n/o))),s=je(Math.max(0,Math.min(100,t/o)));return`circle(0 at ${r} ${s})`}function Nn(e){return`${Yr(e)} ${Ur(e)}`}function $n(e){return Nn(Bn(e).points)}function Wt(e,n,t,o){if(t==="dynamic"){de(e,"color"),de(e,"background"),Vn(e,n);let r=Me(n.polygon.color??"#cccccc");Xt(r)===o?.dynamicColorKey?(de(e,"--psr"),de(e,"--psg"),de(e,"--psb")):(J(e,"--psr",(r.r/255).toFixed(4)),J(e,"--psg",(r.g/255).toFixed(4)),J(e,"--psb",(r.b/255).toFixed(4)))}else n.shadedColor!==o?.paintColor?(de(e,"background"),J(e,"color",n.shadedColor)):(de(e,"background"),de(e,"color"))}function Xn(e,n,t,o){let r=t.createElement("b");return r.setAttribute("style",`transform:matrix3d(${Vr(e)})`),Le(r,e.polygon),Wt(r,e,n,o),r}function Yn(e,n,t,o){let r=t.createElement("i");return r.setAttribute("style",zr(e)),Le(r,e.polygon),Wt(r,e,n,o),r}function Un(e,n,t,o){let r=t.createElement("b");return r.setAttribute("style",`transform:matrix3d(${e.projectiveMatrix})`),Le(r,e.polygon),Wt(r,e,n,o),r}function Gn(e,n,t){let o=t.createElement("s");o.setAttribute("style",`transform:matrix3d(${e.atlasMatrix})`),Le(o,e.polygon);let r=e.canvasW||1,s=e.canvasH||1,i=Ee(e);return J(o,"--polycss-atlas-size",`${i}px`),J(o,"background-position",`${Ie(-e.x/r*i)} ${Ie(-e.y/s*i)}`),J(o,"opacity","0"),n==="dynamic"&&Vn(o,e),o}function Wn(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};let o=n.textureLighting??"baked",r=new Set(n.strategies?.disable??[]),s=!r.has("b"),i=s,l=!r.has("u")&&tt(t),a=!r.has("i")&&Gt(t),u=Yt(e,n),m=$t(t),d=e.map((P,E)=>Ut(P,E,n,m,u[E])),f=d.map(P=>P&&l&&Qe(P)?et(P.polygon,P.index,n):null),g=d.map((P,E)=>P&&(P.texture||!(s&&Te(P))&&!f[E]&&!(i&&Ve(P))&&!a?P:null)),{packed:p,atlasScale:h}=wn(g,n.textureQuality,t),b=new Map,x=[],A=!1,M=[];for(let P=0;P<e.length;P++){let E=d[P],k=f[P];if(!E)continue;let C=p.entries[P];if(C){let v=Gn(C,o,t);b.set(P,v),x.push({polygonIndex:P,element:v,kind:"atlas",plan:C,dispose:()=>{}})}else if(!E.texture&&s&&Te(E)){let v=Xn(E,o,t,n.solidPaintDefaults);x.push({polygonIndex:P,element:v,kind:"solid",plan:E,dispose:()=>{}})}else if(!E.texture&&k){let v=jt(k,t);x.push({polygonIndex:P,element:v,kind:"triangle",plan:E,dispose:()=>{}})}else if(!E.texture&&i&&Ve(E)){let v=Un(E,o,t,n.solidPaintDefaults);x.push({polygonIndex:P,element:v,kind:"solid",plan:E,dispose:()=>{}})}else if(!E.texture&&a){let v=Yn(E,o,t,n.solidPaintDefaults);x.push({polygonIndex:P,element:v,kind:"border",plan:E,dispose:()=>{}})}}return x.sort((P,E)=>P.polygonIndex-E.polygonIndex),On(p.pages,o,t,h,()=>A).then(P=>{if(A){for(let E of P)E.url?.startsWith("blob:")&&URL.revokeObjectURL(E.url);return}M=P.flatMap(E=>E.url?.startsWith("blob:")?[E.url]:[]);for(let E=0;E<p.pages.length;E++){let k=p.pages[E],C=P[E];if(C)for(let v of k.entries){let B=b.get(v.index);!B||!C.url||(In(B,C,o,v),de(B,"opacity"))}}}).catch(()=>{if(!A)for(let P of b.values())J(P,"opacity","0.5"),J(P,"outline","1px dashed rgba(255, 0, 0, 0.6)")}),{rendered:x,dispose(){A=!0;for(let P of M)URL.revokeObjectURL(P);M=[]}}}async function jn(e,n={},t=()=>!1){let o=n.doc??(typeof document<"u"?document:null);if(!o||t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let r=n.textureLighting??"baked",s=new Set(n.strategies?.disable??[]),i=!s.has("b"),l=i,a=!s.has("u")&&tt(o),u=!s.has("i")&&Gt(o);if(await Fn(),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let m=Yt(e,n),d=$t(o),f=performance.now(),g=new Array(e.length);for(let C=0;C<e.length;C++)if(g[C]=Ut(e[C],C,n,d,m[C]),f=await Lt(f),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let p=n.solidPaintDefaults??zn(g,r,o,s),h=new Array(g.length),b=new Array(g.length);for(let C=0;C<g.length;C++){let v=g[C],B=v&&a&&Qe(v)?et(v.polygon,v.index,{...n,solidPaintDefaults:p}):null;if(h[C]=B,b[C]=v&&(v.texture||!(i&&Te(v))&&!B&&!(l&&Ve(v))&&!u?v:null),f=await Lt(f),t())return{rendered:[],solidPaintDefaults:p,dispose:()=>{}}}let{packed:x,atlasScale:A}=wn(b,n.textureQuality,o),M=new Map,P=[],E=!1,k=[];for(let C=0;C<e.length;C++){let v=g[C],B=h[C];if(!v)continue;let N=x.entries[C];if(N){let Y=Gn(N,r,o);M.set(C,Y),P.push({polygonIndex:C,element:Y,kind:"atlas",plan:N,dispose:()=>{}})}else if(!v.texture&&i&&Te(v)){let Y=Xn(v,r,o,p);P.push({polygonIndex:C,element:Y,kind:"solid",plan:v,dispose:()=>{}})}else if(!v.texture&&B){let Y=jt(B,o);P.push({polygonIndex:C,element:Y,kind:"triangle",plan:v,dispose:()=>{}})}else if(!v.texture&&l&&Ve(v)){let Y=Un(v,r,o,p);P.push({polygonIndex:C,element:Y,kind:"solid",plan:v,dispose:()=>{}})}else if(!v.texture&&u){let Y=Yn(v,r,o,p);P.push({polygonIndex:C,element:Y,kind:"border",plan:v,dispose:()=>{}})}if(f=await Lt(f),t()){for(let Y of P)Y.dispose();return{rendered:[],solidPaintDefaults:p,dispose:()=>{}}}}return P.sort((C,v)=>C.polygonIndex-v.polygonIndex),On(x.pages,r,o,A,()=>E||t()).then(C=>{if(E||t()){for(let v of C)v.url?.startsWith("blob:")&&URL.revokeObjectURL(v.url);return}k=C.flatMap(v=>v.url?.startsWith("blob:")?[v.url]:[]);for(let v=0;v<x.pages.length;v++){let B=x.pages[v],N=C[v];if(N)for(let Y of B.entries){let te=M.get(Y.index);!te||!N.url||(In(te,N,r,Y),de(te,"opacity"))}}}).catch(()=>{if(!(E||t()))for(let C of M.values())J(C,"opacity","0.5"),J(C,"outline","1px dashed rgba(255, 0, 0, 0.6)")}),{rendered:P,solidPaintDefaults:p,dispose(){E=!0;for(let C of k)URL.revokeObjectURL(C);k=[]}}}function Gr(e,n){let t=e.map((o,r)=>et(o,r,n));return t.some(o=>!o)?null:t}function Wr(e){e.style.backgroundImage="",e.style.backgroundPosition="",e.style.backgroundSize="",e.style.maskImage="",e.style.maskMode="",e.style.maskPosition="",e.style.maskSize="",e.style.maskRepeat="",e.style.removeProperty("-webkit-mask-image"),e.style.removeProperty("-webkit-mask-position"),e.style.removeProperty("-webkit-mask-size"),e.style.removeProperty("-webkit-mask-repeat")}function Zn(e,n){e.setAttribute("style",n.styleText),(n.polygon.data||Rt.get(e)?.length)&&Le(e,n.polygon)}function jt(e,n){let t=n.createElement("u");return Wr(t),Zn(t,e),Le(t,e.polygon),t}function Zt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};if(!tt(t))return null;let o=Gr(e,n);if(!o)return null;let r=[];for(let s of o){let i=jt(s,t);r.push({polygonIndex:s.index,element:i,kind:"triangle",dispose:()=>{}})}return r.sort((s,i)=>s.polygonIndex-i.polygonIndex),{rendered:r,dispose(){}}}function qn(e,n,t={}){if(e.length!==n.length)return!1;let o=t.textureLighting??"baked",r=[];for(let s=0;s<e.length;s++){let i=e[s];if(i.polygonIndex!==s)return!1;let l=n[s];if(!l)return!1;if(i.kind==="atlas"){if(!i.plan||!Br(i.element,i.plan,l,o))return!1;continue}if(i.kind==="triangle"){let a=et(l,s,t);if(!a)return!1;r[s]=a;continue}return!1}for(let s=0;s<e.length;s++){let i=e[s];if(i.kind==="triangle"){let l=r[s];if(!l)return!1;Zn(i.element,l)}}return!0}import{BASE_TILE as he,normalFacesCamera as jr,parsePureColor as Zr,rotateVec3 as Qn}from"@layoutit/polycss-core";var qr=[.4,-.7,.59],Qr="#ffffff",Kr=1,Jr="#ffffff",es=.4,Jn={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},ts=["t","b","bl","br","fr","fl"],ns=new Map([["0,0,1","t"],["0,0,-1","b"],["0,1,0","fl"],["0,-1,0","br"],["1,0,0","fr"],["-1,0,0","bl"]]);function Kn(e){let n=[];for(let t of ts)jr(Jn[t],e)&&n.push(t);return n.join("|")}function os(e,n,t){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==n&&(e.style.color=n,o.color=n),o.transform!==t&&(e.style.transform=t,o.transform=t)}function rs(e){let n=e.vertices;if(n.length<3)return null;let t=n[0],o=0,r=0,s=0;for(let l=1;l+1<n.length;l+=1){let a=n[l],u=n[l+1],m=a[1]-t[1],d=a[0]-t[0],f=a[2]-t[2],g=u[1]-t[1],p=u[0]-t[0],h=u[2]-t[2];o-=d*h-f*p,r-=f*g-m*h,s-=m*p-d*g}let i=Math.hypot(o,r,s);return i<=1e-9?null:[Math.round(o/i),Math.round(r/i),Math.round(s/i)]}function ss(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let n=rs(e),t=n?ns.get(n.join(",")):void 0;if(!t)return null;let o=1/0,r=1/0,s=1/0,i=-1/0,l=-1/0,a=-1/0;for(let d of e.vertices)o=Math.min(o,d[0]),r=Math.min(r,d[1]),s=Math.min(s,d[2]),i=Math.max(i,d[0]),l=Math.max(l,d[1]),a=Math.max(a,d[2]);let u=1e-6,m=e.color||"#cccccc";return Math.abs(a-s)<=u?{axis:"z",face:t,left:r*he,top:o*he,width:Math.max(0,(l-r)*he),height:Math.max(0,(i-o)*he),z:s*he,baseColor:m}:Math.abs(i-o)<=u?{axis:"x",face:t,left:r*he,top:s*he,width:Math.max(0,(l-r)*he),height:Math.max(0,(a-s)*he),z:-o*he,baseColor:m}:Math.abs(l-r)<=u?{axis:"y",face:t,left:s*he,top:o*he,width:Math.max(0,(a-s)*he),height:Math.max(0,(i-o)*he),z:-r*he,baseColor:m}:null}function qt(e){let n=Zr(e);return n?{r:n.rgb[0],g:n.rgb[1],b:n.rgb[2],alpha:n.alpha}:{r:255,g:255,b:255,alpha:1}}function is({r:e,g:n,b:t}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(n)}${o(t)}`}function Qt(e){return Math.round(Math.max(0,Math.min(255,e)))}function as(e,n,t,o){let r=qt(n),s=qt(t?.color??Qr),i=qt(o?.color??Jr),l=t?.direction??qr,a=Math.hypot(l[0],l[1],l[2])||1,u=l[0]/a,m=l[1]/a,d=l[2]/a,f=Math.max(0,t?.intensity??Kr)*Math.max(0,e[0]*u+e[1]*m+e[2]*d),g=Math.max(0,o?.intensity??es),p=i.r/255*g+s.r/255*f,h=i.g/255*g+s.g/255*f,b=i.b/255*g+s.b/255*f,x={r:r.r*p,g:r.g*h,b:r.b*b,alpha:r.alpha};return x.alpha<1?`rgba(${Qt(x.r)}, ${Qt(x.g)}, ${Qt(x.b)}, ${x.alpha})`:is(x)}function ls(e){if(!e?.length)return[];let n=[];for(let t=0;t<e.length;t+=1){let o=e[t],r=ss(o);if(!r||r.width<=0||r.height<=0)return[];n.push({...r,sourceIndex:t})}return n}function cs(e,n,t,o,r,s){return`matrix3d(${(e==="x"?[o,0,0,0,0,0,r,0,0,-1,0,0,n,-s,t,1]:e==="y"?[0,0,o,0,0,r,0,0,-1,0,0,0,-s,t,n,1]:[o,0,0,0,0,r,0,0,0,0,1,0,n,t,s,1]).map(l=>Number(l.toFixed(6))).join(",")})`}function us(e){return e.axis==="x"?[e.left+e.width/2,-e.z,e.top+e.height/2]:e.axis==="y"?[-e.z,e.top+e.height/2,e.left+e.width/2]:[e.left+e.width/2,e.top+e.height/2,e.z]}function ds(e,n){let t=us(e),o=n.meshRotation;o&&(t=Qn(t,o[0]??0,o[1]??0,o[2]??0));let[r,s]=Qn(t,n.rotX,0,n.rotY);return{x:r,y:s}}function ms(e,n,t){let o=e.filter(f=>n.has(f.face)).map(f=>({item:f,...ds(f,t)}));if(o.length===0)return[];let r=1/0,s=-1/0,i=1/0,l=-1/0;for(let f of o)r=Math.min(r,f.x),s=Math.max(s,f.x),i=Math.min(i,f.y),l=Math.max(l,f.y);let a=4,u=Math.max(1e-6,s-r),m=Math.max(1e-6,l-i),d=new Map;for(let f of o){let g=Math.min(a-1,Math.max(0,Math.floor((f.x-r)/u*a))),p=Math.min(a-1,Math.max(0,Math.floor((f.y-i)/m*a))),h=`${g}:${p}`,b=d.get(h);b||(b={tx:g,ty:p,sourceIndex:f.item.sourceIndex,items:[]},d.set(h,b)),b.items.push(f.item),b.sourceIndex=Math.min(b.sourceIndex,f.item.sourceIndex)}return Array.from(d.values()).sort((f,g)=>f.ty-g.ty||f.tx-g.tx||f.sourceIndex-g.sourceIndex).flatMap(f=>f.items)}function eo(e){let{doc:n,wrapper:t,polygons:o,directionalLight:r,ambientLight:s}=e,i=ls(o);if(i.length===0)return null;t.classList.add("polycss-voxel-mesh");let l=new Map,a=(p,h)=>{let b=`${p}|${h}`,x=l.get(b);if(x)return x;let A=as(Jn[p],h,r,s);return l.set(b,A),A},u=[],m="",d=0,f=p=>{let h=u[p];return h||(h=n.createElement("b"),u[p]=h),h.parentElement!==t&&t.appendChild(h),h},g=(p,h)=>{let b=new Set(p.split("|").filter(Boolean)),x=ms(i,b,h);d=0;for(let A of x){let M=f(d);os(M,a(A.face,A.baseColor),cs(A.axis,A.left,A.top,A.width,A.height,A.z)),d+=1}for(let A=d;A<u.length;A+=1)u[A]?.remove()};return{element:t,get brushCount(){return d},render(p){m=Kn(p),g(m,p)},syncCamera(p){let h=Kn(p);h!==m&&(m=h,g(h,p))},dispose(){for(let p of u)p.remove();t.classList.remove("polycss-voxel-mesh"),u.length=0,d=0,m=""}}}var to="polycss-styles";function no(e){let n=e??(typeof document<"u"?document:void 0);if(!n||n.getElementById(to))return;let t=n.createElement("style");t.id=to,t.textContent=ps,n.head.appendChild(t)}var ps=`
1
+ import{BASE_TILE as El,CAMERA_BACKFACE_CULL_EPS as wo,DEFAULT_SEAM_BLEED as Gr,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Tl,cameraCullNormalKey as Al,cameraCullVisibleSignature as Ml,clipPolygonToConvex2D as wl,computeSceneBbox as Ll,convexHull2D as Hr,ensureCcw2D as Lo,findOverlappingPolygonDuplicates as _l,inverseRotateVec3 as Ir,isAxisAlignedSurfaceNormal as Rl,isVoxelCameraCullableNormalGroups as Dl,normalFacesCamera as kl,optimizeMeshPolygons as Ol,parseHex as Fl,parseHexColor as _o,polygonCssSurfaceNormal as Vr,projectCssVertexToGround as Hl}from"@layoutit/polycss-core";import{packTextureAtlasPlansWithScaleCore as Ti}from"@layoutit/polycss-core";function Ai(e){if(!e)return!1;let t=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function $t(e,n,t){return Ti(e,n,Ai(t))}import{buildTextureEdgeRepairSets as ks,buildSeamBleedPolygonEdges as Os,buildSeamBleedPolygonSet as Fs}from"@layoutit/polycss-core";import{TEXTURE_TRIANGLE_BLEED as Mi,TEXTURE_EDGE_REPAIR_ALPHA_MIN as wi,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as Li,TEXTURE_EDGE_REPAIR_RADIUS as Yo}from"@layoutit/polycss-core";import{tintToCss as _i}from"@layoutit/polycss-core";import{expandClipPoints as Ri}from"@layoutit/polycss-core";import{BASIS_EPS as Di}from"@layoutit/polycss-core";var St=new Map;function ki(e){let n=St.get(e);return n||(n=new Promise((t,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>t(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),St.set(e,n),n.then(()=>{St.get(e)===n&&St.delete(e)},()=>{St.get(e)===n&&St.delete(e)})),n}function Ye(e,n,t=1,o=0,r=0,i=1,l=0,c=0){e.setTransform(t*n,o*n,r*n,i*n,l*n,c*n)}function Oi(e,n,t,o,r,i,l){Math.abs(i.r-1)<.001&&Math.abs(i.g-1)<.001&&Math.abs(i.b-1)<.001||(e.save(),Ye(e,l),e.globalCompositeOperation="multiply",e.fillStyle=_i(i),e.fillRect(n,t,o,r),e.restore())}function Fi(e,n,t,o,r,i,l){let c=n.naturalWidth||n.width||1,a=n.naturalHeight||n.height||1,m=Math.max(r/c,i/a),f=c*m,h=a*m;Ye(e,l),e.drawImage(n,t+(r-f)/2,o+(i-h)/2,f,h)}function Ct(e,n){return Math.max(0,Math.min(n,e))}function jo(e,n,t,o,r,i,l,c){let a=n.naturalWidth||n.width||1,m=n.naturalHeight||n.height||1,f=Ct(Math.min(t.minU,t.maxU)*a,a),h=Ct(Math.max(t.minU,t.maxU)*a,a),g=Ct(Math.min(t.minV,t.maxV)*m,m),x=Ct(Math.max(t.minV,t.maxV)*m,m),y=Math.floor(f),P=Math.floor(g),v=Math.ceil(h)-y,E=Math.ceil(x)-P;v<1&&(y=Math.floor(Ct((t.minU+t.maxU)/2*a,a-1)),v=1),E<1&&(P=Math.floor(Ct((t.minV+t.maxV)/2*m,m-1)),E=1),y=Math.max(0,Math.min(a-1,y)),P=Math.max(0,Math.min(m-1,P)),v=Math.max(1,Math.min(a-y,v)),E=Math.max(1,Math.min(m-P,E)),Ye(e,c),e.drawImage(n,y,P,v,E,o,r,i,l)}function qo(e){return e==="repeat"||e==="mirrored-repeat"}function Xo(e,n){return qo(e)?Math.floor(n):0}function Wo(e,n){return qo(e)?Math.ceil(n)-1:0}function Zo(e,n){return e==="mirrored-repeat"&&Math.abs(n%2)===1}function Qo(e,n,t,o,r,i,l){let c=r?Xo(i,r.minU):0,a=r?Wo(i,r.maxU):0,m=r?Xo(l,r.minV):0,f=r?Wo(l,r.maxV):0;for(let h=c;h<=a;h++)for(let g=m;g<=f;g++){let x=Zo(i,h),y=Zo(l,g);if(!x&&!y){e.drawImage(n,h*t,g*o);continue}e.save(),e.translate((x?h+1:h)*t,(y?g+1:g)*o),e.scale(x?-1:1,y?-1:1),e.drawImage(n,0,0),e.restore()}}function lo(e,n,t,o){for(let r=0;r<o.length;r+=2){let i=n+o[r],l=t+o[r+1];r===0?e.moveTo(i,l):e.lineTo(i,l)}e.closePath()}function un(e,n,t,o,r,i){for(let l=0;l<o.length;l+=2){let c=n+o[l]+r,a=t+o[l+1]+i;l===0?e.moveTo(c,a):e.lineTo(c,a)}e.closePath()}function Hi(e,n,t,o){Ye(e,o),e.beginPath(),lo(e,n.x,n.y,n.screenPts),e.clip(),Ye(e,o),e.fillStyle=t==="dynamic"?n.polygon.color??"#cccccc":n.shadedColor,e.fillRect(n.x,n.y,n.canvasW,n.canvasH)}function dn(e,n,t,o,r){n.polygon.textureAlphaMode==="opaque"&&(Ye(e,t),e.fillStyle=n.polygon.color??"#cccccc",e.fillRect(n.x+o,n.y+r,n.canvasW,n.canvasH))}function Ii(e,n,t,o,r=0,i=0){if(n.textureTriangles?.length){let l=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1;for(let a of n.textureTriangles){let m=Ri(a.screenPts,Mi);e.save(),Ye(e,o),e.beginPath(),un(e,n.x,n.y,m,r,i),e.clip(),dn(e,n,o,r,i),a.uvAffine?(Ye(e,o,a.uvAffine.a/l,a.uvAffine.c/l,a.uvAffine.b/c,a.uvAffine.d/c,n.x+a.uvAffine.e+r,n.y+a.uvAffine.f+i),Qo(e,t,l,c,a.uvSampleRect,n.polygon.textureWrap?.s,n.polygon.textureWrap?.t)):a.uvSampleRect&&jo(e,t,a.uvSampleRect,n.x+r,n.y+i,n.canvasW,n.canvasH,o),e.restore()}}else if(n.uvAffine){let l=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,a=n.polygon.textureAlphaMode==="opaque";a&&(e.save(),Ye(e,o),e.beginPath(),un(e,n.x,n.y,n.screenPts,r,i),e.clip(),dn(e,n,o,r,i)),Ye(e,o,n.uvAffine.a/l,n.uvAffine.c/l,n.uvAffine.b/c,n.uvAffine.d/c,n.x+n.uvAffine.e+r,n.y+n.uvAffine.f+i),Qo(e,t,l,c,n.uvSampleRect,n.polygon.textureWrap?.s,n.polygon.textureWrap?.t),a&&e.restore()}else if(n.uvSampleRect){let l=n.polygon.textureAlphaMode==="opaque";l&&(e.save(),Ye(e,o),e.beginPath(),un(e,n.x,n.y,n.screenPts,r,i),e.clip(),dn(e,n,o,r,i)),jo(e,t,n.uvSampleRect,n.x+r,n.y+i,n.canvasW,n.canvasH,o),l&&e.restore()}else{let l=n.polygon.textureAlphaMode==="opaque";l&&(e.save(),Ye(e,o),e.beginPath(),un(e,n.x,n.y,n.screenPts,r,i),e.clip(),dn(e,n,o,r,i)),Fi(e,t,n.x+r,n.y+i,n.canvasW,n.canvasH,o),l&&e.restore()}}function Vi(e,n,t,o,r,i){let l=r-t,c=i-o,a=l*l+c*c;if(a<=Di)return Math.hypot(e-t,n-o);let m=Math.max(0,Math.min(1,((e-t)*l+(n-o)*c)/a));return Math.hypot(e-(t+l*m),n-(o+c*m))}function zi(e,n,t,o){let r=1/0,i=t.length/2;for(let l of o){if(l<0||l>=i)continue;let c=l*2,a=(l+1)%i*2;r=Math.min(r,Vi(e,n,t[c],t[c+1],t[a],t[a+1]))}return r}function Bi(e,n,t,o,r,i){let l=Math.max(0,o-i),c=Math.min(n-1,o+i),a=Math.max(0,r-i),m=Math.min(t-1,r+i),f=null,h=1/0;for(let g=a;g<=m;g++)for(let x=l;x<=c;x++){if(x===o&&g===r)continue;let y=x-o,P=g-r,v=y*y+P*P;if(v>i*i||v>=h)continue;let E=(g*n+x)*4;e[E+3]<Li||(f=E,h=v)}return f}function Ni(e,n,t){if(!n.textureEdgeRepair||!n.texture||!n.textureEdgeRepairEdges||n.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(n.x*t)),i=Math.max(0,Math.floor(n.y*t)),l=Math.max(1,Math.min(o.width-r,Math.ceil(n.canvasW*t))),c=Math.max(1,Math.min(o.height-i,Math.ceil(n.canvasH*t)));if(l<=0||c<=0)return;let a;try{a=e.getImageData(r,i,l,c)}catch{return}let m=a.data,f=new Uint8ClampedArray(m),h=Math.max(Yo,Yo/t),g=Math.max(2,Math.ceil(h*t)+1),x=!1;for(let y=0;y<c;y++)for(let P=0;P<l;P++){let v=(y*l+P)*4,E=m[v+3];if(E<wi||E===255)continue;let H=(r+P+.5)/t-n.x,k=(i+y+.5)/t-n.y;if(zi(H,k,n.screenPts,n.textureEdgeRepairEdges)>h)continue;let N=Bi(f,l,c,P,y,g);N!==null&&(m[v]=f[N],m[v+1]=f[N+1],m[v+2]=f[N+2],m[v+3]=255,x=!0)}x&&e.putImageData(a,r,i)}function Ui(e){if(typeof e.toBlob=="function")return new Promise(n=>{e.toBlob(t=>{n(t?URL.createObjectURL(t):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}async function $i(e,n,t,o){let r=t.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let i=e.entries.some(f=>f.textureEdgeRepair&&f.texture&&f.textureEdgeRepairEdges&&f.textureEdgeRepairEdges.size>0),l=r.getContext("2d",i?{willReadFrequently:!0}:void 0);if(!l)return{width:e.width,height:e.height,url:null};let c=Array.from(new Set(e.entries.flatMap(f=>f.texture?[f.texture]:[]))),a=new Map;await Promise.all(c.map(async f=>{a.set(f,await ki(f))}));for(let f of e.entries){let h=f.texture?a.get(f.texture):null;if(!f.texture){l.save(),Hi(l,f,n,o),l.restore();continue}h&&(l.save(),Ye(l,o),l.beginPath(),lo(l,f.x,f.y,f.screenPts),l.clip(),Ii(l,f,h,o),l.restore()),f.texture&&n==="baked"&&(l.save(),Ye(l,o),l.beginPath(),lo(l,f.x,f.y,f.screenPts),l.clip(),Oi(l,f.x,f.y,f.canvasW,f.canvasH,f.textureTint,o),l.restore()),Ni(l,f,o)}let m=await Ui(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:m}}async function Gt(e,n,t,o,r){let i=[];for(let l of e){if(r())break;i.push(await $i(l,n,t,o))}return i}import{isFullRectSolid as ot,isSolidTrianglePlan as pt,isProjectiveQuadPlan as rt,fullRectBounds as Fc,safariCssProjectiveUnsupported as Ko,incrementCount as Hc,dominantCountKey as Ic,filterAtlasPlans as Vc,getSolidPaintDefaultsForPlansCore as Yi}from"@layoutit/polycss-core";import{parseHex as ji,rgbKey as Xi}from"@layoutit/polycss-core";import{computeTextureAtlasPlan as Uc,buildBasisHints as $c}from"@layoutit/polycss-core";import{resolveProjectiveQuadGuards as Gi}from"@layoutit/polycss-core";function Et(e){let t=e?.defaultView?.__polycssProjectiveQuadGuards;return Gi(t)}function Yt(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function Jo(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return t?!Ko(t):!0}function jt(e){let n=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!n?.supports?.("corner-top-left-shape","bevel")&&!!n.supports("corner-top-right-shape","bevel")&&!!n.supports("corner-bottom-right-shape","bevel")&&!!n.supports("corner-bottom-left-shape","bevel")}function Wi(e){let n=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!n?.supports?.("corner-top-left-shape","bevel")&&!!n.supports("corner-top-right-shape","bevel")}function Zi(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return/\bFirefox\//.test(t)}function it(e,n){return n?.disable?.includes("u")?null:Wi(e)?"corner-bevel":Jo(e)?Zi(e)?"border-large":"border":null}function Xt(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return t?!Ko(t):!0}function mn(e,n,t,o,r){let i=new Set(o?.disable??[]);return Yi(e,n,i,{solidTriangleSupported:Jo(t),projectiveQuadSupported:Xt(t),cornerShapeSupported:jt(t),borderShapeSupported:Yt(t)},ji,Xi,r)}import{ASYNC_RENDER_BUDGET_MS as Ps,DEFAULT_TILE as Ss,PROJECTIVE_QUAD_DENOM_EPS as Cs,PROJECTIVE_QUAD_MAX_WEIGHT_RATIO as Es,PROJECTIVE_QUAD_BLEED as Ts}from"@layoutit/polycss-core";import{buildBasisHints as Eo,buildSeamBleedPolygonEdges as As,computeTextureAtlasPlan as Kt}from"@layoutit/polycss-core";import{cornerShapeGeometryForPlan as qt}from"@layoutit/polycss-core";import{formatCssLength as pn,formatMatrix3dValues as qi,formatSolidQuadMatrix as Ki}from"@layoutit/polycss-core";import{shadePolygon as Ji}from"@layoutit/polycss-core";import{parseHex as er,rgbKey as tr}from"@layoutit/polycss-core";function Oe(e,n,t){let o=e.getAttribute("style")??"",r=`${n}:${t}`,i=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`(^|;)\\s*${i}\\s*:[^;]*`,"i"),c=l.test(o)?o.replace(l,(a,m)=>`${m}${r}`):`${o}${o.trim()&&!o.trim().endsWith(";")?";":""}${r}`;c!==o&&e.setAttribute("style",c)}function ft(e,n){let t=e.getAttribute("style")??"";if(!t||!t.toLowerCase().includes(n.toLowerCase()))return;let o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`^\\s*${o}\\s*:`,"i"),i=t.split(";").map(l=>l.trim()).filter(l=>l&&!r.test(l)).join(";");i?e.setAttribute("style",i):e.removeAttribute("style")}function Wt(e,n,t,o=!1){if(n==="dynamic"){let r=er(e.polygon.color??"#cccccc"),i=o?"":`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return tr(r)!==t?.dynamicColorKey&&(i+=`;--psr:${(r.r/255).toFixed(4)};--psg:${(r.g/255).toFixed(4)};--psb:${(r.b/255).toFixed(4)}`),i}return e.shadedColor&&e.shadedColor!==t?.paintColor?`;color:${e.shadedColor}`:""}function Qi(e,n){Oe(e,"--pnx",n.normal[0].toFixed(4)),Oe(e,"--pny",n.normal[1].toFixed(4)),Oe(e,"--pnz",n.normal[2].toFixed(4))}function Tt(e,n,t,o){if(t==="dynamic"){ft(e,"color"),ft(e,"background"),Qi(e,n);let r=er(n.polygon.color??"#cccccc");tr(r)===o?.dynamicColorKey?(ft(e,"--psr"),ft(e,"--psg"),ft(e,"--psb")):(Oe(e,"--psr",(r.r/255).toFixed(4)),Oe(e,"--psg",(r.g/255).toFixed(4)),Oe(e,"--psb",(r.b/255).toFixed(4)))}else n.shadedColor!==o?.paintColor?(ft(e,"background"),Oe(e,"color",n.shadedColor)):(ft(e,"background"),ft(e,"color"))}import{formatBorderShapeElementStyle as nr,formatCornerShapeElementStyle as or}from"@layoutit/polycss-core";import{atlasCanonicalSizeForEntry as gt}from"@layoutit/polycss-core";import{computeProjectiveQuadMatrix as es,stableBasisFromPlan as ts}from"@layoutit/polycss-core";import{DEFAULT_LIGHT_DIR as ns,DEFAULT_LIGHT_COLOR as os,DEFAULT_LIGHT_INTENSITY as rs,DEFAULT_AMBIENT_COLOR as is,DEFAULT_AMBIENT_INTENSITY as ss}from"@layoutit/polycss-core";var ao=new WeakMap,co=new WeakMap;function Fe(e,n){let t=ao.get(e),o=co.get(e);if(!n.data&&(!t||t.length===0)){e.__polycssHasDataAttrs=!1;return}let r=new Map;if(n.data)for(let[l,c]of Object.entries(n.data))r.set(l,String(c));if(t)for(let l of t)r.has(l)||e.removeAttribute(`data-${l}`);for(let[l,c]of r)o?.get(l)!==c&&e.setAttribute(`data-${l}`,c);let i=Array.from(r.keys());i.length>0?ao.set(e,i):ao.delete(e),r.size>0?co.set(e,r):co.delete(e),e.__polycssHasDataAttrs=i.length>0}function At(e){return e.__polycssHasDataAttrs===!0}function uo(e,n,t,o,r=t==="dynamic"){if(!n.url)return;let i=`url(${n.url})`,l=o.canvasW||1,c=o.canvasH||1,a=gt(o),m=`${pn(-o.x/l*a)} ${pn(-o.y/c*a)}`,f=`${pn(n.width/l*a)} ${pn(n.height/c*a)}`,h=`transform:matrix3d(${o.atlasMatrix});--polycss-atlas-size:${a}px`,g=`${h};--polycss-atlas-position:${m};--polycss-atlas-image-size:${f}`;if(t==="dynamic"){let x=r?`;--pnx:${o.normal[0].toFixed(4)};--pny:${o.normal[1].toFixed(4)};--pnz:${o.normal[2].toFixed(4)}`:"";e.setAttribute("style",g+`;--polycss-atlas-url:${i}`+x)}else e.setAttribute("style",h+`;background:${i} ${m} / ${f} no-repeat`)}function rr(e,n,t,o){if(n.texture){if(!t.texture||n.texture!==t.texture)return!1}else if(t.texture)return!1;let r=ir(n,t);return r?(e.style.visibility="",Oe(e,"transform",`matrix3d(${r.matrix})`),o==="dynamic"&&(Oe(e,"--pnx",r.normal[0].toFixed(4)),Oe(e,"--pny",r.normal[1].toFixed(4)),Oe(e,"--pnz",r.normal[2].toFixed(4))),Fe(e,t),!0):(e.style.visibility="hidden",Fe(e,t),!0)}function mo(e,n,t,o,r){if(o!=="baked")return{...e,polygon:n,normal:t};let i=r.directionalLight,l=r.ambientLight,c=i?.direction??ns,a=i?.color??os,m=Math.max(0,i?.intensity??rs),f=l?.color??is,h=Math.max(0,l?.intensity??ss),g=Math.hypot(c[0],c[1],c[2])||1,x=c[0]/g,y=c[1]/g,P=c[2]/g,v=m*Math.max(0,t[0]*x+t[1]*y+t[2]*P);return{...e,polygon:n,normal:t,shadedColor:Ji(n.color??"#cccccc",v,a,f,h)}}function ir(e,n){let t=sr(e,n);if(!t)return null;let{normal:o,xAxis:r,yAxis:i,tx:l,ty:c,tz:a}=t;return{normal:o,matrix:qi([r[0]*e.canvasW/gt(e),r[1]*e.canvasW/gt(e),r[2]*e.canvasW/gt(e),0,i[0]*e.canvasH/gt(e),i[1]*e.canvasH/gt(e),i[2]*e.canvasH/gt(e),0,o[0],o[1],o[2],0,l,c,a,1])}}var sr=ts;function ls(e,n,t){if(e.screenPts.length!==8||n.vertices.length!==4)return null;let o=sr(e,n);if(!o)return null;let r=es(e.screenPts,o.xAxis,o.yAxis,o.normal,o.tx,o.ty,o.tz,t);return r?{matrix:r,normal:o.normal}:null}function po(e,n,t,o,r=!1){let i=t.createElement("b");return i.setAttribute("style",`transform:matrix3d(${Ki(e)})`+Wt(e,n,o,r)),Fe(i,e.polygon),i}function fo(e,n,t,o,r=!1){let i=t.createElement("i");return i.setAttribute("style",nr(e)+Wt(e,n,o,r)),Fe(i,e.polygon),i}function go(e,n,t,o,r,i=!1){let l=o.createElement("u");return l.setAttribute("style",or(e,n)+Wt(e,t,r,i)),Fe(l,e.polygon),l}function ho(e,n,t,o,r=!1){let i=t.createElement("b");return i.setAttribute("style",`transform:matrix3d(${e.projectiveMatrix})`+Wt(e,n,o,r)),Fe(i,e.polygon),i}function lr(e,n,t,o,r,i,l){let c=n.projectiveMatrix?ls(n,t,i):ir(n,t);if(!c)return!1;let a=mo(n,t,c.normal,o,r);return e.style.visibility="",e.style.transform=`matrix3d(${c.matrix})`,Tt(e,a,o,l),Fe(e,a.polygon),!0}function ar(e,n,t,o){e.style.visibility="",e.setAttribute("style",nr(n)),Tt(e,n,t,o),Fe(e,n.polygon)}function cr(e,n,t,o,r){e.style.visibility="",e.setAttribute("style",or(n,t)),Tt(e,n,o,r),Oe(e,"background","currentColor"),Fe(e,n.polygon)}function yo(e,n,t,o=!1){let r=t.createElement("s"),i=gt(e),l=n==="dynamic"&&!o?`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`:"";return r.setAttribute("style",`transform:matrix3d(${e.atlasMatrix});--polycss-atlas-size:${i}px;opacity:0`+l),Fe(r,e.polygon),r}import{computeSolidTriangleColorPlan as Ms}from"@layoutit/polycss-core";import{computeSolidTrianglePlanFromCssPoints as as,computeSolidTrianglePlan as cs}from"@layoutit/polycss-core";function xt(e,n,t,o={}){let r=o.primitive!=null?void 0:(()=>{let i=t.doc??(typeof document<"u"?document:null);return i?it(i,t.strategies)??"border":"border"})();return cs(e,n,t,{...o,resolvedPrimitive:o.resolvedPrimitive??r})}function bo(e,n,t,o,r,i,l,c,a,m,f,h,g){let x=o.primitive!=null?void 0:(()=>{let y=t.doc??(typeof document<"u"?document:null);return y?it(y,t.strategies)??"border":"border"})();return as(e,n,t,{...o,resolvedPrimitive:o.resolvedPrimitive??x},r,i,l,c,a,m,f,h,g)}import{buildSeamBleedPolygonEdges as us,DEFAULT_TILE as su,SOLID_TRIANGLE_CORNER_CLASS as ds,SOLID_TRIANGLE_LARGE_BORDER_CLASS as ms}from"@layoutit/polycss-core";import{rgbEqual as ps,stepRgbToward as fs,rgbToCss as gs,colorErrorScore as hs}from"@layoutit/polycss-core";import{computeSolidTriangleColorPlan as ys}from"@layoutit/polycss-core";import{stableTriangleMatrixDecimals as ur}from"@layoutit/polycss-core";var bs=1.5;function dr(e,n){return us(e,{tileSize:n.tileSize,layerElevation:n.layerElevation,directionalLight:n.directionalLight,ambientLight:n.ambientLight})}function mr(e,n,t){return n?{...t,seamBleed:n.has(e)?bs:void 0,seamEdges:n.get(e)}:t}function vo(e){return{updatesDisabled:e.stableTriangleColorFreezeFrames===0,freezeFrames:Math.max(1,Math.floor(e.stableTriangleColorFreezeFrames??1)),colorFrame:Math.max(0,Math.floor(e.stableTriangleColorFrame??0)),maxStep:Math.max(0,Math.floor(e.stableTriangleColorMaxStep??0))}}function pr(e,n){return!n.updatesDisabled&&(n.freezeFrames<=1||(n.colorFrame+e)%n.freezeFrames===0)}function Mt(e,n,t,o,r,i){return t?i.updatesDisabled||o==="plan-only"||o==="transform-only"?!1:r==="adaptive"||e.__polycssSolidTriangleColor===void 0?!0:pr(n,i):!0}function xo(e,n){let t=e;t.__polycssSolidTrianglePrimitive!==n&&(e.classList.toggle(ds,n==="corner-bevel"),e.classList.toggle(ms,n==="border-large"),t.__polycssSolidTrianglePrimitive=n)}function Po(e){let n=e;n.__polycssSolidTriangleHidden&&(e.style.visibility="",n.__polycssSolidTriangleHidden=!1)}function Zt(e){let n=e;n.__polycssSolidTriangleHidden||(e.style.visibility="hidden",n.__polycssSolidTriangleHidden=!0)}function fn(e,n){e.setAttribute("style",n.styleText),xo(e,n.primitive);let t=e;t.__polycssSolidTriangleBasis=n.basis,t.__polycssSolidTriangleHidden=!1,n.colorComputed&&(t.__polycssSolidTriangleColor=n.bakedColor??"",t.__polycssSolidTriangleColorRgb=n.bakedRgb,t.__polycssSolidTriangleColorAlpha=n.bakedAlpha),t.__polycssSolidTriangleColorFrame=void 0,(n.polygon.data||At(e))&&Fe(e,n.polygon)}function fr(e,n,t,o){if(!n.colorComputed){(n.polygon.data||At(e))&&Fe(e,n.polygon);return}let r=e,i=n.bakedColor??"",l=n.bakedRgb,c=n.bakedAlpha??1,a=r.__polycssSolidTriangleColor,m=r.__polycssSolidTriangleColorRgb,f=r.__polycssSolidTriangleColorAlpha??1,h=o??pr(n.index,t);if(!t.updatesDisabled&&a!==i&&(a===void 0||h)){let g=i,x=l;if(t.maxStep>0&&m&&l&&f===c){let y=fs(m,l,t.maxStep);x=y,g=gs(y,c)}(g!==a||!ps(x,m))&&(e.style.color=g),r.__polycssSolidTriangleColor=g,r.__polycssSolidTriangleColorRgb=x,r.__polycssSolidTriangleColorAlpha=c,r.__polycssSolidTriangleColorFrame=t.colorFrame}(n.polygon.data||At(e))&&Fe(e,n.polygon)}function gn(e,n,t,o){let r=e;xo(e,n.primitive),r.__polycssSolidTriangleBasis!==n.basis&&(r.__polycssSolidTriangleBasis=n.basis),Po(e),e.style.transform=n.transformText,(n.colorComputed||n.polygon.data||At(e))&&fr(e,n,t,o)}function So(e,n,t,o){Po(e),fr(e,n,t,o)}function hn(e,n){let t=e;xo(e,n.primitive),t.__polycssSolidTriangleBasis!==n.basis&&(t.__polycssSolidTriangleBasis=n.basis),Po(e),e.style.transform=n.transformText,(n.polygon.data||At(e))&&Fe(e,n.polygon)}function vs(e,n){let t=n.stableTriangleColorBudget;if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t<=1?Math.max(1,Math.ceil(e*t)):Math.max(1,Math.floor(t));let o=Math.max(1,Math.floor(n.stableTriangleColorFreezeFrames??1));return Math.max(1,Math.ceil(e/o))}function gr(e,n,t){if(t.stableTriangleColorPolicy!=="adaptive")return null;if(t.stableTriangleColorFreezeFrames===0)return new Set;let o=Math.max(0,Math.floor(t.stableTriangleColorFrame??0)),r=Math.max(1,Math.floor(t.stableTriangleColorFreezeFrames??1));if(r<=1&&!Number.isFinite(t.stableTriangleColorBudget))return null;let i=vs(e.length,t),l=Math.max(1,Math.floor(t.stableTriangleColorMaxAge??Math.max(2,r*2))),c=[];for(let a=0;a<e.length;a++){let m=e[a],f=n[a];if(m.kind!=="triangle"||!f)continue;let h=m.element,g=h.__polycssSolidTriangleColor,x=f.bakedColor??"";if(g===x)continue;let y=h.__polycssSolidTriangleColorFrame??0,P=Math.max(0,o-y),v=hs(g,x);c.push({index:a,score:(P>=l?1e6:0)+v*1e4+P})}return c.length===0?new Set:(c.sort((a,m)=>m.score-a.score),new Set(c.slice(0,i).map(a=>a.index)))}function yn(e,n){let t=n.createElement("u");return fn(t,e),t}function xs(e,n){let t=n.createElement("u");return Zt(t),e.data&&Fe(t,e),t}function hr(e,n,t,o,r,i){let l=t,c=l.stableTriangleDebug,a=o&&r==="color-only";if(l.stableTriangleColorPolicy==="adaptive"||e.length!==n.length)return!1;let m=ur(l.stableTriangleMatrixDecimals),f=t.doc??(typeof document<"u"?document:null),h=f?it(f,t.strategies)??"border":"border";for(let x=0;x<e.length;x++){let y=e[x];if(y.kind!=="triangle"||y.polygonIndex!==x||!n[x])return!1}let g=dr(n,t);for(let x=0;x<e.length;x++){let y=e[x].element,P=n[x];if(a){if(Mt(y,x,o,c,l.stableTriangleColorPolicy,i)){let E=ys(P,x,t);if(!E)continue;So(y,E,i)}continue}let v=xt(P,x,mr(x,g,t),{basis:y.__polycssSolidTriangleBasis,matrixDecimals:m,primitive:h,includeColor:r!=="plan-only"&&r!=="transform-only"&&Mt(y,x,o,c,l.stableTriangleColorPolicy,i)});if(!v){Zt(y);continue}o&&r==="plan-only"||(o&&r==="transform-only"?hn(y,v):o?gn(y,v,i):fn(y,v))}return!0}function Qt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};let o=it(t,n.strategies);if(!o||e.some(c=>c.texture||c.vertices.length!==3))return null;let r=ur(n.stableTriangleMatrixDecimals),i=[],l=dr(e,n);for(let c=0;c<e.length;c+=1){let a=e[c],m=xt(a,c,mr(c,l,n),{matrixDecimals:r,primitive:o}),f=m?yn(m,t):xs(a,t);i.push({polygonIndex:c,element:f,kind:"triangle",dispose:()=>{}})}return{rendered:i,dispose(){}}}import{stableTriangleMatrixDecimals as yr}from"@layoutit/polycss-core";var br=1.5;function vr(){return new Promise(e=>setTimeout(e,0))}async function Co(e){return performance.now()-e<Ps?e:(await vr(),performance.now())}function xr(e,n){return e.seamBleedEdges?.size?{...n,seamBleed:br,seamEdges:e.seamBleedEdges}:{...n,seamBleed:void 0,seamEdges:void 0}}function Pr(e,n){return As(e,{tileSize:n.tileSize,layerElevation:n.layerElevation,directionalLight:n.directionalLight,ambientLight:n.ambientLight})}function Sr(e,n,t){return n?{...t,seamBleed:n.has(e)?br:void 0,seamEdges:n.get(e)}:t}function wt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{};let o=Eo(e,n),r=Et(t),i=e.map((l,c)=>Kt(l,c,n,r,o[c]));return mn(i,n.textureLighting??"baked",t,n.strategies)}function Jt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};let o=n.textureLighting??"baked",r=n,i=o==="dynamic"&&r.skipDynamicNormalVars===!0,l=new Set(n.strategies?.disable??[]),c=!l.has("b"),a=c&&Xt(t),m=it(t,n.strategies),f=m!==null,h=!l.has("i")&&jt(t),g=!l.has("i")&&Yt(t),x=Eo(e,n),y=Et(t),P=Pr(e,n),v=e.map((u,p)=>Kt(u,p,Sr(p,P,n),y,x[p])),E=n.solidPaintDefaults??(r.computeSolidPaintDefaults?mn(v,o,t,n.strategies):void 0),H=E?{...n,solidPaintDefaults:E}:n,k=v.map(u=>u&&f&&pt(u)?xt(u.polygon,u.index,xr(u,H),{primitive:m??void 0}):null),N=v.map(u=>u&&h&&!pt(u)&&!(c&&ot(u))&&!(a&&rt(u))?qt(u):null),R=v.map((u,p)=>u&&(u.texture||!(c&&ot(u))&&!k[p]&&!(a&&rt(u))&&!N[p]&&!g?u:null)),{packed:K,atlasScale:z}=$t(R,n.textureQuality,t),O=new Map,$=[],U=!1,ie=[];for(let u=0;u<e.length;u++){let p=v[u],C=k[u],A=N[u];if(!p)continue;let w=K.entries[u];if(w){let M=yo(w,o,t,i);O.set(u,M),$.push({polygonIndex:u,element:M,kind:"atlas",plan:w,dispose:()=>{}})}else if(!p.texture&&c&&ot(p)){let M=po(p,o,t,E,i);$.push({polygonIndex:u,element:M,kind:"solid",plan:p,dispose:()=>{}})}else if(!p.texture&&C){let M=yn(C,t);$.push({polygonIndex:u,element:M,kind:"triangle",plan:p,dispose:()=>{}})}else if(!p.texture&&a&&rt(p)){let M=ho(p,o,t,E,i);$.push({polygonIndex:u,element:M,kind:"solid",plan:p,dispose:()=>{}})}else if(!p.texture&&A){let M=go(p,A,o,t,E,i);$.push({polygonIndex:u,element:M,kind:"corner",plan:p,dispose:()=>{}})}else if(!p.texture&&g){let M=fo(p,o,t,E,i);$.push({polygonIndex:u,element:M,kind:"border",plan:p,dispose:()=>{}})}}return $.sort((u,p)=>u.polygonIndex-p.polygonIndex),Gt(K.pages,o,t,z,()=>U).then(u=>{if(U){for(let p of u)p.url?.startsWith("blob:")&&URL.revokeObjectURL(p.url);return}ie=u.flatMap(p=>p.url?.startsWith("blob:")?[p.url]:[]);for(let p=0;p<K.pages.length;p++){let C=K.pages[p],A=u[p];if(A)for(let w of C.entries){let M=O.get(w.index);!M||!A.url||uo(M,A,o,w,!i)}}}).catch(()=>{if(!U)for(let u of O.values())Oe(u,"opacity","0.5"),Oe(u,"outline","1px dashed rgba(255, 0, 0, 0.6)")}),{rendered:$,solidPaintDefaults:E??{},dispose(){U=!0;for(let u of ie)URL.revokeObjectURL(u);ie=[]}}}async function bn(e,n={},t=()=>!1){let o=n.doc??(typeof document<"u"?document:null);if(!o||t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let r=n.textureLighting??"baked",l=r==="dynamic"&&n.skipDynamicNormalVars===!0,c=new Set(n.strategies?.disable??[]),a=!c.has("b"),m=a&&Xt(o),f=it(o,n.strategies),h=f!==null,g=!c.has("i")&&jt(o),x=!c.has("i")&&Yt(o);if(await vr(),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let y=Eo(e,n),P=Et(o),v=Pr(e,n),E=performance.now(),H=new Array(e.length);for(let u=0;u<e.length;u++)if(H[u]=Kt(e[u],u,Sr(u,v,n),P,y[u]),E=await Co(E),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let k=n.solidPaintDefaults??mn(H,r,o,n.strategies),N=new Array(H.length),R=new Array(H.length),K=new Array(H.length);for(let u=0;u<H.length;u++){let p=H[u],C=p&&h&&pt(p)?xt(p.polygon,p.index,xr(p,{...n,solidPaintDefaults:k}),{primitive:f??void 0}):null;N[u]=C;let A=p&&g&&!pt(p)&&!(a&&ot(p))&&!(m&&rt(p))?qt(p):null;if(R[u]=A,K[u]=p&&(p.texture||!(a&&ot(p))&&!C&&!(m&&rt(p))&&!A&&!x?p:null),E=await Co(E),t())return{rendered:[],solidPaintDefaults:k,dispose:()=>{}}}let{packed:z,atlasScale:O}=$t(K,n.textureQuality,o),$=new Map,U=[],ie=!1,xe=[];for(let u=0;u<e.length;u++){let p=H[u],C=N[u],A=R[u];if(!p)continue;let w=z.entries[u];if(w){let M=yo(w,r,o,l);$.set(u,M),U.push({polygonIndex:u,element:M,kind:"atlas",plan:w,dispose:()=>{}})}else if(!p.texture&&a&&ot(p)){let M=po(p,r,o,k,l);U.push({polygonIndex:u,element:M,kind:"solid",plan:p,dispose:()=>{}})}else if(!p.texture&&C){let M=yn(C,o);U.push({polygonIndex:u,element:M,kind:"triangle",plan:p,dispose:()=>{}})}else if(!p.texture&&m&&rt(p)){let M=ho(p,r,o,k,l);U.push({polygonIndex:u,element:M,kind:"solid",plan:p,dispose:()=>{}})}else if(!p.texture&&A){let M=go(p,A,r,o,k,l);U.push({polygonIndex:u,element:M,kind:"corner",plan:p,dispose:()=>{}})}else if(!p.texture&&x){let M=fo(p,r,o,k,l);U.push({polygonIndex:u,element:M,kind:"border",plan:p,dispose:()=>{}})}if(E=await Co(E),t()){for(let M of U)M.dispose();return{rendered:[],solidPaintDefaults:k,dispose:()=>{}}}}return U.sort((u,p)=>u.polygonIndex-p.polygonIndex),Gt(z.pages,r,o,O,()=>ie||t()).then(u=>{if(ie||t()){for(let p of u)p.url?.startsWith("blob:")&&URL.revokeObjectURL(p.url);return}xe=u.flatMap(p=>p.url?.startsWith("blob:")?[p.url]:[]);for(let p=0;p<z.pages.length;p++){let C=z.pages[p],A=u[p];if(A)for(let w of C.entries){let M=$.get(w.index);!M||!A.url||uo(M,A,r,w,!l)}}}).catch(()=>{if(!(ie||t()))for(let u of $.values())Oe(u,"opacity","0.5"),Oe(u,"outline","1px dashed rgba(255, 0, 0, 0.6)")}),{rendered:U,solidPaintDefaults:k,dispose(){ie=!0;for(let u of xe)URL.revokeObjectURL(u);xe=[]}}}function vn(e,n,t,o={}){let r=o.textureLighting??"baked",i=o,l=i.optimizeStableTriangleStyle===!0&&r==="baked";if(!l||i.stableTriangleColorPolicy==="adaptive"||e.length!==t.polygonCount||n.length!==t.polygonCount||t.vertices.length<t.polygonCount*9)return!1;let c=i.stableTriangleDebug,a=i.stableTriangleUpdateMode??(c==="plan-only"||c==="transform-only"?c:"full");if(a==="color-only")return!1;let m=yr(i.stableTriangleMatrixDecimals),f=vo(i),h=o.tileSize??Ss,g=o.layerElevation??h,x=o.doc??(typeof document<"u"?document:null),y=x?it(x,o.strategies)??"border":"border";for(let v=0;v<e.length;v++){let E=e[v],H=n[v];if(E.kind!=="triangle"||E.polygonIndex!==v||!H||H.vertices.length!==3||H.texture||H.material?.texture)return!1}let P=t.vertices;for(let v=0;v<e.length;v++){let E=e[v].element,H=n[v],k=v*9,N=P[k+1]*h,R=P[k]*h,K=P[k+2]*g,z=P[k+4]*h,O=P[k+3]*h,$=P[k+5]*g,U=P[k+7]*h,ie=P[k+6]*h,xe=P[k+8]*g,u=bo(H,v,o,{basis:E.__polycssSolidTriangleBasis,matrixDecimals:m,primitive:y,color:t.colors?.[v],includeColor:a!=="plan-only"&&a!=="transform-only"&&Mt(E,v,l,c,i.stableTriangleColorPolicy,f)},N,R,K,z,O,$,U,ie,xe);if(!u){Zt(E);continue}a!=="plan-only"&&(a==="transform-only"?hn(E,u):gn(E,u,f))}return!0}function xn(e,n,t={}){if(e.length!==n.length)return!1;let o=t.doc??(typeof document<"u"?document:null),r=t.textureLighting??"baked",i=new Set(t.strategies?.disable??[]),l=!i.has("b"),c=!!o&&l&&Xt(o),a=!!o&&!i.has("i")&&jt(o),m=!!o&&!i.has("i")&&Yt(o),f=o?Et(o):{denomEps:Cs,maxWeightRatio:Es,bleed:Ts,disableGuards:!1},h=t.optimizeStableTriangleStyle===!0&&r==="baked",g=t,x=g.stableTriangleDebug,y=g.stableTriangleUpdateMode??(x==="plan-only"||x==="transform-only"?x:"full"),P=h&&y==="color-only",v=vo(g),E=yr(g.stableTriangleMatrixDecimals),H=o?it(o,t.strategies)??"border":"border";if(hr(e,n,t,h,y,v))return!0;let k=[],N=[],R=[];for(let z=0;z<e.length;z++){let O=e[z];if(O.polygonIndex!==z)return!1;let $=n[z];if(!$||P&&O.kind!=="triangle")return!1;if(O.kind==="atlas"){if(!O.plan||!rr(O.element,O.plan,$,r))return!1;continue}if(O.kind==="triangle"){let U=O.element;if(P){let xe=g.stableTriangleColorPolicy==="adaptive"||Mt(U,z,h,x,g.stableTriangleColorPolicy,v);N[z]=xe?Ms($,z,t):null;continue}let ie=xt($,z,t,{basis:U.__polycssSolidTriangleBasis,matrixDecimals:E,primitive:H,includeColor:y!=="plan-only"&&y!=="transform-only"&&Mt(U,z,h,x,g.stableTriangleColorPolicy,v)});if(!ie){k[z]=null;continue}k[z]=ie;continue}if(O.kind==="solid"){if(!O.plan||$.texture||$.vertices.length!==O.plan.polygon.vertices.length)return!1;R[z]=O.plan;continue}if(O.kind==="border"){let U=Kt($,z,t,f);if(!U||U.texture||!m||l&&ot(U)||c&&rt(U)||a&&qt(U))return!1;R[z]=U;continue}if(O.kind==="corner"){let U=Kt($,z,t,f);if(!U||U.texture||!a||pt(U)||l&&ot(U)||c&&rt(U)||!qt(U))return!1;R[z]=U;continue}return!1}let K=h&&y!=="plan-only"&&y!=="transform-only"?gr(e,P?N:k,g):null;for(let z=0;z<e.length;z++){let O=e[z];if(O.kind==="triangle"){if(P){let U=N[z];U&&So(O.element,U,v,K?.has(z));continue}let $=k[z];if(!$){Zt(O.element);continue}if(h&&y==="plan-only")continue;h&&y==="transform-only"?hn(O.element,$):h?gn(O.element,$,v,K?.has(z)):fn(O.element,$)}else if(O.kind==="solid"){let $=R[z];if(!$||!lr(O.element,$,n[z],r,t,f,g.solidPaintDefaults))return!1}else if(O.kind==="border"){let $=R[z];if(!$)return!1;ar(O.element,$,r,g.solidPaintDefaults)}else if(O.kind==="corner"){let $=R[z],U=$?qt($):null;if(!$||!U)return!1;cr(O.element,$,U,r,g.solidPaintDefaults)}}return!0}import{computeTextureAtlasPlanPublic as Hs}from"@layoutit/polycss-core";import{formatMatrix3d as Is,formatCssLengthPx as Vs,formatSolidQuadEntryMatrix as zs}from"@layoutit/polycss-core";import{formatBorderShapeEntryMatrix as Bs,cssBorderShapeForPlan as Ns}from"@layoutit/polycss-core";import{BASE_TILE as He,computeProjectiveQuadMatrix as Us,normalFacesCamera as $s,parsePureColor as Lr,PROJECTIVE_QUAD_BLEED as Gs,resolveProjectiveQuadGuards as Ys,rotateVec3 as Cr,SOLID_QUAD_CANONICAL_SIZE as js}from"@layoutit/polycss-core";var Xs=[.4,-.7,.59],Ws="#ffffff",Zs=1,Qs="#ffffff",qs=.4,_r=1,Ks=8,Js=Gs,ct=1e-6,el=Ys({bleed:0}),Rr={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},Mo=["t","b","bl","br","fr","fl"],tl=new Map([["0,0,1","t"],["0,0,-1","b"],["0,1,0","fl"],["0,-1,0","br"],["1,0,0","fr"],["-1,0,0","bl"]]);function Er(e){let n=[];for(let t of Mo)$s(Rr[t],e)&&n.push(t);return n.join("|")}function nl(e,n,t){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==n&&(e.style.color=n,o.color=n),o.transform!==t&&(e.style.transform=t,o.transform=t)}function ol(e){let n=e.vertices;if(n.length<3)return null;let t=n[0],o=0,r=0,i=0;for(let c=1;c+1<n.length;c+=1){let a=n[c],m=n[c+1],f=a[1]-t[1],h=a[0]-t[0],g=a[2]-t[2],x=m[1]-t[1],y=m[0]-t[0],P=m[2]-t[2];o-=h*P-g*y,r-=g*x-f*P,i-=f*y-h*x}let l=Math.hypot(o,r,i);return l<=1e-9?null:[Math.round(o/l),Math.round(r/l),Math.round(i/l)]}function rl(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let n=ol(e),t=n?tl.get(n.join(",")):void 0;if(!t)return null;let o=1/0,r=1/0,i=1/0,l=-1/0,c=-1/0,a=-1/0;for(let h of e.vertices)o=Math.min(o,h[0]),r=Math.min(r,h[1]),i=Math.min(i,h[2]),l=Math.max(l,h[0]),c=Math.max(c,h[1]),a=Math.max(a,h[2]);let m=1e-6,f=ul(e.color);return Math.abs(a-i)<=m?{axis:"z",face:t,left:r*He,top:o*He,width:Math.max(0,(c-r)*He),height:Math.max(0,(l-o)*He),z:i*He,baseColor:f,bleed:To()}:Math.abs(l-o)<=m?{axis:"x",face:t,left:r*He,top:i*He,width:Math.max(0,(c-r)*He),height:Math.max(0,(a-i)*He),z:-o*He,baseColor:f,bleed:To()}:Math.abs(c-r)<=m?{axis:"y",face:t,left:i*He,top:o*He,width:Math.max(0,(a-i)*He),height:Math.max(0,(l-o)*He),z:-r*He,baseColor:f,bleed:To()}:null}function To(){return{left:0,right:0,top:0,bottom:0}}function il(e){let n=o=>String(Number(o.toFixed(6))),t=`${e.item.baseColor}|${e.variableAxis}`;for(let o=0;o<3;o+=1)o!==e.variableAxis&&(t+=`|${o}:${n(e.fixed[o])}`);return t}function Tr(e){return[e[1]*He,e[0]*He,e[2]*He]}function Ar(e,n){return e.axis==="x"?[n[0],n[2]]:e.axis==="y"?[n[2],n[1]]:[n[0],n[1]]}function sl(e,n,t){let o=e.left,r=e.left+e.width,i=e.top,l=e.top+e.height;if(Math.abs(n[0]-t[0])<=ct){if(Math.abs(n[0]-o)<=ct)return"left";if(Math.abs(n[0]-r)<=ct)return"right"}if(Math.abs(n[1]-t[1])<=ct){if(Math.abs(n[1]-i)<=ct)return"top";if(Math.abs(n[1]-l)<=ct)return"bottom"}return null}function ll(e,n){let t=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-n[o])<=ct)){if(t!==null)return null;t=o}return t}function al(e,n,t){let o=n.vertices,r=Tr(o[t]),i=Tr(o[(t+1)%o.length]),l=sl(e,Ar(e,r),Ar(e,i));if(!l)return null;let c=ll(r,i);if(c===null)return null;let a=Math.min(r[c],i[c]),m=Math.max(r[c],i[c]);return m-a>ct?{item:e,side:l,variableAxis:c,fixed:r,start:a,end:m}:null}function Mr(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Js)}function cl(e,n){let t=new Map;for(let o of n){let r=e[o.sourceIndex];if(r)for(let i=0;i<r.vertices.length;i+=1){let l=al(o,r,i);if(!l)continue;let c=il(l),a=t.get(c);a?a.push(l):t.set(c,[l])}}for(let o of t.values()){if(o.length<2)continue;o.sort((i,l)=>i.start-l.start||i.end-l.end);let r=[];for(let i of o){r=r.filter(l=>l.end>i.start+ct);for(let l of r)l.item.sourceIndex!==i.item.sourceIndex&&(Mr(l),Mr(i));r.push(i)}}}function Ao(e){let n=Lr(e);return n?{r:n.rgb[0],g:n.rgb[1],b:n.rgb[2],alpha:n.alpha}:{r:255,g:255,b:255,alpha:1}}function ul(e){if(!e)return"#cccccc";let n=Lr(e);if(!n)return e;let t={r:n.rgb[0],g:n.rgb[1],b:n.rgb[2],alpha:n.alpha};if(t.alpha<1){let o=Math.round(Math.max(0,t.alpha)*1e3)/1e3;return`rgba(${Lt(t.r)}, ${Lt(t.g)}, ${Lt(t.b)}, ${o})`}return Dr(t)}function Dr({r:e,g:n,b:t}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(n)}${o(t)}`}function Lt(e){return Math.round(Math.max(0,Math.min(255,e)))}function dl(e,n,t,o){let r=Ao(n),i=Ao(t?.color??Ws),l=Ao(o?.color??Qs),c=t?.direction??Xs,a=Math.hypot(c[0],c[1],c[2])||1,m=c[0]/a,f=c[1]/a,h=c[2]/a,g=Math.max(0,t?.intensity??Zs)*Math.max(0,e[0]*m+e[1]*f+e[2]*h),x=Math.max(0,o?.intensity??qs),y=l.r/255*x+i.r/255*g,P=l.g/255*x+i.g/255*g,v=l.b/255*x+i.b/255*g,E={r:r.r*y,g:r.g*P,b:r.b*v,alpha:r.alpha};return E.alpha<1?`rgba(${Lt(E.r)}, ${Lt(E.g)}, ${Lt(E.b)}, ${E.alpha})`:Dr(E)}function ml(e){if(!e?.length)return[];let n=[];for(let t=0;t<e.length;t+=1){let o=e[t],r=rl(o);if(!r||r.width<=0||r.height<=0)return[];n.push({...r,sourceIndex:t})}return cl(e,n),n}function pl(e){return e.axis==="x"?{xAxis:[1,0,0],yAxis:[0,0,1],normal:[0,-1,0],tx:0,ty:-e.z,tz:0}:e.axis==="y"?{xAxis:[0,0,1],yAxis:[0,1,0],normal:[-1,0,0],tx:-e.z,ty:0,tz:0}:{xAxis:[1,0,0],yAxis:[0,1,0],normal:[0,0,1],tx:0,ty:0,tz:e.z}}function fl(e){let n=e.left,t=e.top,o=e.left+e.width,r=e.top+e.height;return[n,t,o,t,o,r,n,r]}function gl(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function hl(e,n){let t=e.split(",").map(Number);if(t.length!==16||t.some(r=>!Number.isFinite(r)))return null;let o=js/n;for(let r=0;r<8;r+=1)t[r]*=o;return`matrix3d(${t.map(r=>Number(r.toFixed(6))).join(",")})`}function wr(e,n){let t=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,i=e.height+e.bleed.top+e.bleed.bottom,l=e.z,c=r/n,a=i/n;return`matrix3d(${(e.axis==="x"?[c,0,0,0,0,0,a,0,0,-1,0,0,t,-l,o,1]:e.axis==="y"?[0,0,c,0,0,a,0,0,-1,0,0,0,-l,o,t,1]:[c,0,0,0,0,a,0,0,0,0,1,0,t,o,l,1]).map(f=>Number(f.toFixed(6))).join(",")})`}function yl(e,n){let{xAxis:t,yAxis:o,normal:r,tx:i,ty:l,tz:c}=pl(e),a=Us(fl(e),t,o,r,i,l,c,el,gl(e));return a?hl(a,n)??wr(e,n):wr(e,n)}function bl(e){let n=e.defaultView?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function vl(e){return bl(e)?Ks:_r}function xl(e){return e.axis==="x"?[e.left+e.width/2,-e.z,e.top+e.height/2]:e.axis==="y"?[-e.z,e.top+e.height/2,e.left+e.width/2]:[e.left+e.width/2,e.top+e.height/2,e.z]}function Pl(e,n){let t=xl(e),o=n.meshRotation;o&&(t=Cr(t,o[0]??0,o[1]??0,o[2]??0));let[r,i]=Cr(t,n.rotX,0,n.rotY);return{x:r,y:i}}function Sl(e,n,t){let o=e.filter(g=>n.has(g.face)).map(g=>({item:g,...Pl(g,t)}));if(o.length===0)return[];let r=1/0,i=-1/0,l=1/0,c=-1/0;for(let g of o)r=Math.min(r,g.x),i=Math.max(i,g.x),l=Math.min(l,g.y),c=Math.max(c,g.y);let a=4,m=Math.max(1e-6,i-r),f=Math.max(1e-6,c-l),h=new Map;for(let g of o){let x=Math.min(a-1,Math.max(0,Math.floor((g.x-r)/m*a))),y=Math.min(a-1,Math.max(0,Math.floor((g.y-l)/f*a))),P=`${x}:${y}`,v=h.get(P);v||(v={tx:x,ty:y,sourceIndex:g.item.sourceIndex,items:[]},h.set(P,v)),v.items.push(g.item),v.sourceIndex=Math.min(v.sourceIndex,g.item.sourceIndex)}return Array.from(h.values()).sort((g,x)=>g.ty-x.ty||g.tx-x.tx||g.sourceIndex-x.sourceIndex).flatMap(g=>g.items)}function kr(e){let{doc:n,wrapper:t,polygons:o,directionalLight:r,ambientLight:i}=e,l=ml(o);if(l.length===0)return null;let c=new Set(l.map(u=>u.face));t.classList.add("polycss-voxel-mesh");let a=vl(n);a!==_r&&t.style.setProperty("--polycss-voxel-primitive",`${a}px`);let m=new Map,f=(u,p)=>{let C=`${u}|${p}`,A=m.get(C);if(A)return A;let w=dl(Rr[u],p,r,i);return m.set(C,w),w},h=new Map,g=new Map,x=new Map,y=new Map;for(let u of l){let p=y.get(u.face);p||(p=[],y.set(u.face,p)),p.push(u)}let P="",v=0,E=new Set,H=u=>{let p=h.get(u.sourceIndex);return p||(p=n.createElement("b"),h.set(u.sourceIndex,p),nl(p,f(u.face,u.baseColor),yl(u,a))),p},k=u=>{let p=g.get(u);return p||(p=n.createElement("span"),p.className=`polycss-voxel-face polycss-voxel-face-${u}`,p.dataset.polycssVoxelFace=u,p.__polycssVoxelFaceHost=!0,g.set(u,p)),p},N=()=>{for(let u of Array.from(t.childNodes))if(!u.__polycssVoxelFaceHost)return u;return null},R=(u,p)=>{let C=p.map(M=>M.sourceIndex).join(",");if(x.get(u)===C)return;let A=k(u),w=n.createDocumentFragment();for(let M of p)w.appendChild(H(M));A.replaceChildren(w),x.set(u,C)},K=()=>{for(let u of Mo)c.has(u)&&R(u,y.get(u)??[])},z=u=>new Set(u.split("|").filter(Boolean)),O=u=>{let p=z(u);return Mo.filter(C=>p.has(C)&&c.has(C))},$=u=>{let p=0;for(let C of u)p+=y.get(C)?.length??0;return p},U=u=>{let p=new Set,C=[],A=new Map;for(let w of u){p.has(w.face)||(p.add(w.face),C.push(w.face));let M=A.get(w.face);M||(M=[],A.set(w.face,M)),M.push(w)}return{orderedFaces:C,itemsByFace:A}},ie=(u,p)=>{let C=new Set(u);for(let A of E){if(C.has(A))continue;let w=g.get(A);w?.parentNode===t&&t.removeChild(w)}if(p){let A=n.createDocumentFragment();for(let w of u)A.appendChild(k(w));t.insertBefore(A,N()),E=C;return}for(let A=0;A<u.length;A+=1){let w=u[A],M=k(w);if(M.parentNode===t)continue;let se=null;for(let he=A+1;he<u.length;he+=1){let _=g.get(u[he]);if(_?.parentNode===t){se=_;break}}t.insertBefore(M,se??N())}E=C},xe=(u,p,C)=>{if(!C){let he=O(u);ie(he,!1),v=$(he);return}let A=new Set(u.split("|").filter(Boolean)),w=Sl(l,A,p),{orderedFaces:M,itemsByFace:se}=U(w);for(let he of M)R(he,se.get(he)??[]);ie(M,!0),v=w.length};return K(),{get brushCount(){return v},render(u){P=Er(u),xe(P,u,!0)},syncCamera(u){let p=Er(u);p!==P&&(P=p,xe(p,u,!1))},dispose(){for(let u of g.values())u.remove();t.classList.remove("polycss-voxel-mesh"),t.style.removeProperty("--polycss-voxel-primitive"),h.clear(),g.clear(),x.clear(),v=0,E=new Set,P=""}}}var Or="polycss-styles";function Fr(e){let n=e??(typeof document<"u"?document:void 0);if(!n||n.getElementById(Or))return;let t=n.createElement("style");t.id=Or,t.textContent=Cl,n.head.appendChild(t)}var Cl=`
2
2
  /* \u2500\u2500 Scene container \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
3
3
 
4
4
  .polycss-scene,
@@ -8,6 +8,18 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
8
8
  box-sizing: border-box;
9
9
  }
10
10
 
11
+ /* Camera wrapper (mounted by createPolyCamera / PolyPerspectiveCamera /
12
+ PolyOrthographicCamera). Fills its parent so the scene inside has a
13
+ positioned, sized layout context for its top: 50% / left: 50% pin to
14
+ resolve against. Inline styles win on specificity if the user sizes
15
+ the camera explicitly. */
16
+ .polycss-camera {
17
+ position: relative;
18
+ display: block;
19
+ width: 100%;
20
+ height: 100%;
21
+ }
22
+
11
23
  .polycss-scene {
12
24
  position: absolute;
13
25
  top: 50%;
@@ -15,7 +27,6 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
15
27
  width: 0;
16
28
  height: 0;
17
29
  transform-style: preserve-3d;
18
- perspective: 8000px;
19
30
  /* Pin the scene as a composited layer. Without this, mobile Chrome
20
31
  re-rasterizes every descendant tile when the scene transform changes
21
32
  each animation frame, which overruns the raster budget on textured
@@ -26,8 +37,8 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
26
37
 
27
38
  /* \u2500\u2500 First-person controls perspective context \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
28
39
 
29
- /* PolyFirstPersonControls toggles this class on its host element (vanilla:
30
- scene.host; react/vue: the camera wrapper). FPV needs a real perspective
40
+ /* PolyFirstPersonControls toggles this class on the camera wrapper
41
+ (scene.cameraEl in vanilla; the camera wrapper div in react/vue). FPV needs a real perspective
31
42
  context so scene Z translation produces visible depth motion - without
32
43
  it, walking forward looks like a planar pan. The class wins over inline
33
44
  perspective styles (e.g. PolyOrthographicCamera's perspective: none)
@@ -81,11 +92,27 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
81
92
  height: 64px;
82
93
  }
83
94
 
84
- .polycss-mesh.polycss-voxel-mesh > b {
95
+ .polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face {
96
+ position: absolute;
97
+ display: block;
85
98
  top: 0;
86
99
  left: 0;
87
- width: 1px;
88
- height: 1px;
100
+ width: 0;
101
+ height: 0;
102
+ transform-style: preserve-3d;
103
+ transform-origin: 0 0;
104
+ margin: 0;
105
+ padding: 0;
106
+ font: inherit;
107
+ line-height: 0;
108
+ pointer-events: none;
109
+ }
110
+
111
+ .polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face > b {
112
+ top: 0;
113
+ left: 0;
114
+ width: var(--polycss-voxel-primitive, 1px);
115
+ height: var(--polycss-voxel-primitive, 1px);
89
116
  backface-visibility: visible;
90
117
  pointer-events: none;
91
118
  }
@@ -108,7 +135,22 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
108
135
  box-sizing: content-box;
109
136
  border: 0 solid transparent;
110
137
  border-color: transparent transparent currentColor transparent;
111
- border-width: 0 32px 64px 32px;
138
+ border-width: 0 16px 32px 16px;
139
+ }
140
+
141
+ .polycss-scene u.polycss-large-border-triangle {
142
+ border-width: 0 48px 96px 48px;
143
+ }
144
+
145
+ .polycss-scene u.polycss-corner-triangle {
146
+ width: 32px;
147
+ height: 32px;
148
+ background: currentColor;
149
+ border: 0;
150
+ border-top-left-radius: 50% 100%;
151
+ border-top-right-radius: 50% 100%;
152
+ corner-top-left-shape: bevel;
153
+ corner-top-right-shape: bevel;
112
154
  }
113
155
 
114
156
  /* <q> \u2014 dedicated shadow leaf. Same border-shape rendering trick as <i>
@@ -213,7 +255,7 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
213
255
  @property --clz { syntax: "<number>"; inherits: true; initial-value: 1; }
214
256
 
215
257
  /* Ground-plane position in CSS pixels along the CSS-Z axis (= world-Z, the
216
- up axis in polycss's world convention). Stored as a <number> so it can be
258
+ up axis in PolyCSS's world convention). Stored as a <number> so it can be
217
259
  used directly inside matrix3d() calc() expressions (matrix3d requires
218
260
  dimensionless entries \u2014 no px units).
219
261
  Set by recomputeShadowGround() from the min world-Z of casting meshes. */
@@ -311,6 +353,19 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
311
353
  + var(--plb) * var(--pli) * var(--plam)))
312
354
  );
313
355
  background-blend-mode: multiply;
356
+ background-image: var(--polycss-atlas-url);
357
+ background-position: var(--polycss-atlas-position);
358
+ background-repeat: no-repeat;
359
+ background-size: var(--polycss-atlas-image-size);
360
+ mask-image: var(--polycss-atlas-url);
361
+ mask-mode: alpha;
362
+ mask-position: var(--polycss-atlas-position);
363
+ mask-repeat: no-repeat;
364
+ mask-size: var(--polycss-atlas-image-size);
365
+ -webkit-mask-image: var(--polycss-atlas-url);
366
+ -webkit-mask-position: var(--polycss-atlas-position);
367
+ -webkit-mask-repeat: no-repeat;
368
+ -webkit-mask-size: var(--polycss-atlas-image-size);
314
369
  }
315
370
 
316
371
  .polycss-scene[data-polycss-lighting="dynamic"] b,
@@ -326,13 +381,13 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
326
381
  );
327
382
  }
328
383
 
329
- /* \u2500\u2500 Cast shadows (dynamic mode only) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
384
+ /* \u2500\u2500 Cast shadow projection (dynamic-mode CSS path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
330
385
 
331
386
  /*
332
387
  * Shadow projection matrix. Projects any 3D point P onto the horizontal
333
388
  * ground plane (cssZ \u2248 G) along the CSS-space light direction (--clx/y/z).
334
389
  *
335
- * In polycss's world convention world Z is up (red-green plane is the
390
+ * In PolyCSS's world convention world Z is up (red-green plane is the
336
391
  * floor in the axes helper). After the world\u2192CSS swap (Y\u2194X), world Z stays
337
392
  * as CSS Z, so the ground plane normal in CSS space is +cssZ.
338
393
  *
@@ -378,11 +433,12 @@ import{BASE_TILE as fs,CAMERA_BACKFACE_CULL_EPS as Kt,cameraCullNormalGroups as
378
433
  jump quickly to 1, giving a near-binary visibility decision with a
379
434
  smooth edge transition. Pure CSS calc \u2014 no JS at light-change time.
380
435
 
381
- The base layout / positioning / pseudo-element-strip rules for <q>
382
- live in the polygon-leaf section above. This rule only adds the
383
- dynamic-light Lambert gating, separated so it's easy to disable the
384
- gate for debugging by commenting out a single block. */
385
- .polycss-scene q {
436
+ Scoped to dynamic mode: baked-mode shadow leaves are dropped from the
437
+ DOM up-front by isBakedShadowCaster() and don't carry --pnx/--pny/--pnz,
438
+ so an unscoped gate would silently zero them via the @property
439
+ initial values. The base layout / positioning / pseudo-element-strip
440
+ rules for <q> live in the polygon-leaf section above. */
441
+ .polycss-scene[data-polycss-lighting="dynamic"] q {
386
442
  opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
387
443
  }
388
- `;var Es=750,As=8e3;var ot=65,rt=45,Ms=1,_e=fs;function Cs(e,n){let t=e?.disable??[],o=n?.disable??[];if(t.length!==o.length)return!1;for(let r of t)if(!o.includes(r))return!1;return!0}function so(e){let n=[];return e.position&&n.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&n.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):n.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&n.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&n.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&n.push(`rotateZ(${e.rotation[2]}deg)`)),n.length>0?n.join(" "):void 0}function Ss(e,n=[0,0,0],t=1){let o=e.rotX??ot,r=e.rotY??rt,s=(e.zoom??Ms)*t,i=(e.distance??0)*t,l=e.target??[0,0,0],a=l[0]+n[0],u=l[1]+n[1],m=l[2]+n[2],d=u*_e,f=a*_e,g=m*_e;return`${i!==0?`translateZ(${-i}px) `:""}scale(${s}) rotateX(${o}deg) rotate(${r}deg) translate3d(${-d}px, ${-f}px, ${-g}px)`}function ws(e){let n=e.trim();if(!n||n==="normal")return 1;let t=n.endsWith("%")?Number(n.slice(0,-1))/100:Number(n);return Number.isFinite(t)&&t>0?t:1}function Ts(e){let n=e.ownerDocument?.defaultView;if(!n)return 1;let t=1;for(let o=e;o;o=o.parentElement)t*=ws(n.getComputedStyle(o).getPropertyValue("zoom"));return Number.isFinite(t)&&t>0?t:1}function en(e,n){return n===1?e:e*n}function Ls(e,n){Math.abs(n-1)<1e-6?e.style.removeProperty("zoom"):e.style.setProperty("zoom",String(1/n))}var _s=.1;function Rs(e){if(e.vertices.length<3)return null;let n=e.vertices[0],t=0,o=0,r=0;for(let d=1;d+1<e.vertices.length;d++){let f=e.vertices[d],g=e.vertices[d+1],p=f[1]-n[1],h=f[0]-n[0],b=f[2]-n[2],x=g[1]-n[1],A=g[0]-n[0],M=g[2]-n[2];t-=h*M-b*A,o-=b*x-p*M,r-=p*A-h*x}let s=Math.hypot(t,o,r);if(s<1e-9)return null;t/=s,o/=s,r/=s;let i=1/_s,l=Math.round(t*i)/i,a=Math.round(o*i)/i,u=Math.round(r*i)/i,m=Math.hypot(l,a,u);return m<1e-9?null:{key:l+","+a+","+u,vec:[l/m,a/m,u/m]}}function io(e,n={}){if(!e||typeof e.appendChild!="function")throw new Error("createPolyScene: host must be an HTMLElement");e.ownerDocument&&no(e.ownerDocument),e.ownerDocument?.defaultView&&e.ownerDocument.defaultView.getComputedStyle(e).position==="static"&&(e.style.position="relative");let t={...n},o=Ts(e),r=[0,0,0],s=e.ownerDocument??document,i=s.createElement("div");i.className="polycss-scene",i.setAttribute("aria-hidden","true"),a(i,t),e.appendChild(i);let l=new Set;function a(c,y){Ls(c,o),c.style.transform=Ss(y,r,o),typeof y.perspective=="number"?c.style.perspective=`${en(y.perspective,o)}px`:y.perspective===!1?c.style.perspective=`${en(1e6,o)}px`:Math.abs(o-1)<1e-6?c.style.removeProperty("perspective"):c.style.perspective=`${en(As,o)}px`,u(c,y)}function u(c,y){let R=y.textureLighting==="dynamic";c.dataset.polycssLighting=y.textureLighting??"baked";let T=["--plx","--ply","--plz","--plr","--plg","--plb","--pli","--par","--pag","--pab","--pai","--clx","--cly","--clz"];if(!R){for(let me of T)c.style.removeProperty(me);return}let I=y.directionalLight?.direction??[.4,-.7,.59],D=Math.hypot(I[0],I[1],I[2])||1,z=I[0]/D,G=I[1]/D,ee=I[2]/D,q=Jt(y.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],Q=Jt(y.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],W=y.directionalLight?.intensity??1,L=y.ambientLight?.intensity??.4,Z=me=>(me/255).toFixed(4);c.style.setProperty("--plx",z.toFixed(4)),c.style.setProperty("--ply",G.toFixed(4)),c.style.setProperty("--plz",ee.toFixed(4)),c.style.setProperty("--plr",Z(q[0])),c.style.setProperty("--plg",Z(q[1])),c.style.setProperty("--plb",Z(q[2])),c.style.setProperty("--pli",W.toFixed(4)),c.style.setProperty("--par",Z(Q[0])),c.style.setProperty("--pag",Z(Q[1])),c.style.setProperty("--pab",Z(Q[2])),c.style.setProperty("--pai",L.toFixed(4));let F=ee,K=Math.sign(F||1)*Math.max(Math.abs(F),.01);c.style.setProperty("--clx",z.toFixed(4)),c.style.setProperty("--cly",G.toFixed(4)),c.style.setProperty("--clz",K.toFixed(4))}function m(c){c.voxelRenderer?.dispose(),c.voxelRenderer=void 0,h(c.rendered,c.disposeAtlas),c.disposeAtlas=void 0,c.rendered.length=0,c.cameraCullGroups.length=0,c.cameraCullSignature="",p(c);for(let y of Array.from(c.wrapper.children))y instanceof HTMLElement&&y.classList.contains("polycss-bucket")&&y.remove()}function d(c){for(let y of Array.from(c.wrapper.childNodes)){if(!(y instanceof HTMLElement))return y;if(y.classList.contains("polycss-bucket")||y.classList.contains("polycss-shadow"))continue;let R=y.tagName.toLowerCase();if(!(R==="b"||R==="i"||R==="s"||R==="u"||R==="q"))return y}return null}function f(c,y,R){R?.parentNode===c.wrapper?c.wrapper.insertBefore(y,R):c.wrapper.appendChild(y)}function g(c){return Array.from(c.children).some(y=>y instanceof HTMLElement&&y.classList.contains("polycss-bucket"))}function p(c){for(let y of c.shadowRendered)y.parentNode&&y.parentNode.removeChild(y);c.shadowRendered.length=0}function h(c,y){y?.();for(let R of c){try{R.dispose()}catch{}R.element.parentNode&&R.element.parentNode.removeChild(R.element)}}function b(c){for(let y of Array.from(c.wrapper.children))y instanceof HTMLElement&&y.classList.contains("polycss-bucket")&&y.remove();for(let y of c.rendered)y.element.parentNode&&y.element.parentNode.removeChild(y.element)}function x(c,y){let R=c.polygons[y.polygonIndex];return c.stableDom&&R?ro(R):y.plan?.normal??(R?ro(R):null)}function A(c){if(!C(c))return c.rendered;let y=M(c);return c.rendered.filter(R=>P(c,R,Kt,y))}function M(c){return{rotX:t.rotX??ot,rotY:t.rotY??rt,meshRotation:c.handle.transform.rotation}}function P(c,y,R=Kt,T=M(c)){let I=x(c,y);return I===null||Ps(I,T,R)}function E(c){c.cameraCullGroups=hs(c.rendered.map(y=>x(c,y)))}function k(c){return C(c)?gs(c.cameraCullGroups,M(c)):"all"}function C(c){return!c.excludeFromAutoCenter&&xs(c.cameraCullGroups)}function v(c){c.cameraCullSignature=C(c)?k(c):"all"}function B(c,y){let R=new Array(c.rendered.length),T=!1,I=M(c);for(let W=0;W<c.rendered.length;W+=1){let L=c.rendered[W],Z=P(c,L,y,I);R[W]=Z}let D=null,z=null,G=()=>{if(!(!D||!z)){if(D===z)D.remove();else{let W=s.createRange();W.setStartBefore(D),W.setEndAfter(z),W.deleteContents(),W.detach()}D=null,z=null,T=!0}};for(let W=0;W<c.rendered.length;W+=1){let L=c.rendered[W];!R[W]&&L.element.parentNode===c.wrapper?(z&&z.nextSibling===L.element||(G(),D=L.element),z=L.element):G()}G();let ee=W=>{for(let L=W;L<c.rendered.length;L+=1){let Z=c.rendered[L].element;if(Z.parentNode===c.wrapper)return Z}return d(c)},q=-1,Q=W=>{if(q<0)return;let L=s.createDocumentFragment();for(let Z=q;Z<W;Z+=1){let F=c.rendered[Z];S(c,F),L.appendChild(F.element)}f(c,L,ee(W)),q=-1,T=!0};for(let W=0;W<c.rendered.length;W+=1){let L=c.rendered[W];R[W]&&L.element.parentNode!==c.wrapper?q<0&&(q=W):Q(W)}return Q(c.rendered.length),T}function N(c,y=!1){if(c.voxelRenderer){c.voxelRenderer.syncCamera(M(c)),c.cameraCullSignature="voxel-direct";return}if(!C(c)){let I=c.cameraCullSignature!=="all";c.cameraCullSignature="all",I&&ie(c);return}if(g(c.wrapper)){Y(c,y);return}let R=k(c);if(!y&&R===c.cameraCullSignature)return;let T=B(c,Kt);c.cameraCullSignature=R,T&&j(c)}function Y(c,y=!1){let R=C(c)?k(c):"all";!y&&R===c.cameraCullSignature||ie(c)}function te(c,y){return x(c,y)}function S(c,y){if(t.textureLighting!=="dynamic")return;let R=te(c,y);R&&(y.element.style.setProperty("--pnx",R[0].toFixed(4)),y.element.style.setProperty("--pny",R[1].toFixed(4)),y.element.style.setProperty("--pnz",R[2].toFixed(4)))}function $(c){b(c);let y=s.createDocumentFragment(),R=t.textureLighting==="dynamic"&&!c.stableDom,T=new Map,I=[];for(let D of A(c)){let z=c.polygons[D.polygonIndex],G=R&&z?Rs(z):null;if(!G){I.push(D);continue}let ee=G.key+"|"+(z.color??""),q=T.get(ee);q||(q={vec:G.vec,items:[]},T.set(ee,q)),q.items.push(D)}for(let D of I)S(c,D),y.appendChild(D.element);for(let D of T.values()){if(D.items.length<2){for(let G of D.items)S(c,G),y.appendChild(G.element);continue}let z=s.createElement("div");z.className="polycss-bucket",z.style.setProperty("--pnx",String(D.vec[0])),z.style.setProperty("--pny",String(D.vec[1])),z.style.setProperty("--pnz",String(D.vec[2]));for(let G of D.items)z.appendChild(G.element),G.element.style.removeProperty("--pnx"),G.element.style.removeProperty("--pny"),G.element.style.removeProperty("--pnz");y.appendChild(z)}f(c,y,d(c)),v(c)}function w(){return new Promise(c=>setTimeout(c,0))}async function O(c,y){if(t.textureLighting==="dynamic"&&!c.stableDom)return $(c),!y();b(c);let T=s.createDocumentFragment(),I=d(c),D=0;for(let z of A(c)){if(y())return!1;S(c,z),T.appendChild(z.element),D++,D%Es===0&&(f(c,T,I),T=s.createDocumentFragment(),await w())}return T.childNodes.length>0&&f(c,T,I),v(c),!y()}function H(c,y){let R=t.textureLighting==="dynamic",T=t.directionalLight?.direction,I=y&&(y[0]!==0||y[1]!==0||y[2]!==0);if(!R||!I||!T){if(c.lightOverrideSignature==="clear")return;c.wrapper.style.removeProperty("--plx"),c.wrapper.style.removeProperty("--ply"),c.wrapper.style.removeProperty("--plz"),c.lightOverrideSignature="clear";return}let D=oo(T,y),z=Math.hypot(D[0],D[1],D[2])||1,G=(D[0]/z).toFixed(4),ee=(D[1]/z).toFixed(4),q=(D[2]/z).toFixed(4),Q=`${G}|${ee}|${q}`;c.lightOverrideSignature!==Q&&(c.wrapper.style.setProperty("--plx",G),c.wrapper.style.setProperty("--ply",ee),c.wrapper.style.setProperty("--plz",q),c.lightOverrideSignature=Q)}function V(c,y){y.paintColor?c.style.setProperty("--polycss-paint",y.paintColor):c.style.removeProperty("--polycss-paint"),y.dynamicColor?(c.style.setProperty("--psr",(y.dynamicColor.r/255).toFixed(4)),c.style.setProperty("--psg",(y.dynamicColor.g/255).toFixed(4)),c.style.setProperty("--psb",(y.dynamicColor.b/255).toFixed(4))):(c.style.removeProperty("--psr"),c.style.removeProperty("--psg"),c.style.removeProperty("--psb"))}function j(c){if(p(c),!c.castShadow||t.textureLighting!=="dynamic")return;let y=t.shadow?.color??"#000000",R=t.shadow?.opacity??.25,T=Jt(y)?.rgb??[0,0,0],I=T[0],D=T[1],z=T[2],G=`rgba(${I},${D},${z},${R})`,ee=bs(c.polygons,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.4}),q=s.createDocumentFragment();for(let W of A(c)){if(ee.has(W.polygonIndex))continue;let L=W.plan;if(!L)continue;let Z=`matrix3d(${L.matrix})`,F=s.createElement("q");F.className="polycss-shadow",F.style.transform=`var(--shadow-proj) ${Z}`,F.style.color=G,F.style.width=`${L.canvasW}px`,F.style.height=`${L.canvasH}px`,F.style.setProperty("border-shape",$n(L)),F.style.setProperty("--pnx",L.normal[0].toFixed(4)),F.style.setProperty("--pny",L.normal[1].toFixed(4)),F.style.setProperty("--pnz",L.normal[2].toFixed(4)),q.appendChild(F),c.shadowRendered.push(F)}let Q=c.wrapper.firstChild;Q?c.wrapper.insertBefore(q,Q):c.wrapper.appendChild(q)}function ie(c){if(c.voxelRenderer){c.voxelRenderer.render(M(c)),c.cameraCullSignature="voxel-direct";return}p(c),$(c),j(c)}function _(c){return!!c.voxelSource&&t.textureLighting!=="dynamic"&&!c.stableDom&&!c.castShadow}function X(c,y){m(c);let R=t.directionalLight,T=y?{...R,direction:y}:R;if(_(c)){let ee=eo({doc:s,wrapper:c.wrapper,polygons:c.parseResult.polygons,directionalLight:T,ambientLight:t.ambientLight});if(ee){c.voxelRenderer=ee,ee.render(M(c)),c.cameraCullSignature="voxel-direct";return}}let I={doc:s,directionalLight:T,ambientLight:t.ambientLight,textureLighting:t.textureLighting,textureQuality:t.textureQuality,strategies:t.strategies},D=nt(c.polygons,I);V(c.wrapper,D);let z={...I,solidPaintDefaults:D},G=(c.stableDom?Zt(c.polygons,z):null)??Wn(c.polygons,z);c.rendered=G.rendered,c.disposeAtlas=G.dispose,E(c),$(c),j(c)}function U(){if(t.textureLighting!=="dynamic"){i.style.removeProperty("--shadow-ground-cssz");return}let c=1/0;for(let T of l)if(!T.disposed&&T.castShadow)for(let I of T.polygons)for(let D of I.vertices)D[2]<c&&(c=D[2]);if(!Number.isFinite(c)){i.style.removeProperty("--shadow-ground-cssz");return}let y=t.shadow?.lift??.05,R=(c+y)*_e;i.style.setProperty("--shadow-ground-cssz",R.toFixed(3))}async function oe(c,y){m(c);let R={doc:s,directionalLight:t.directionalLight,ambientLight:t.ambientLight,textureLighting:t.textureLighting,textureQuality:t.textureQuality,strategies:t.strategies},T=c.stableDom?Zt(c.polygons,R):null;if(T){let z=nt(c.polygons,R);return V(c.wrapper,z),c.rendered=T.rendered,c.disposeAtlas=T.dispose,E(c),$(c),j(c),!y()}let I=await jn(c.polygons,R,y);if(y())return I.dispose(),!1;V(c.wrapper,I.solidPaintDefaults),c.rendered=I.rendered,c.disposeAtlas=I.dispose,E(c);let D=await O(c,y);return D&&j(c),D}function re(){let c=r,y=[0,0,0];if(t.autoCenter){let R=[];for(let T of l)!T.disposed&&!T.excludeFromAutoCenter&&R.push(...T.polygons);if(R.length>0){let T=ys(R);y=[(T.min[0]+T.max[0])/2,(T.min[1]+T.max[1])/2,(T.min[2]+T.max[2])/2]}}c[0]===y[0]&&c[1]===y[1]&&c[2]===y[2]||(r=y,a(i,t))}function le(c,y={}){let T=(i.ownerDocument??document).createElement("div");T.className="polycss-mesh",y.id&&T.setAttribute("data-poly-mesh-id",y.id);let I={...y},D=y.merge!==!1,z=!!y.stableDom,G=0,ee=so(I);ee&&(T.style.transform=ee);let q=(F,K)=>K?vs(F):F,Q=q(c.polygons,D);function W(F){if(F.length===0){T.style.removeProperty("--origin");return}let K=1/0,me=1/0,Pe=1/0,Se=-1/0,We=-1/0,wt=-1/0;for(let Lo of F)for(let ye of Lo.vertices)ye[0]<K&&(K=ye[0]),ye[0]>Se&&(Se=ye[0]),ye[1]<me&&(me=ye[1]),ye[1]>We&&(We=ye[1]),ye[2]<Pe&&(Pe=ye[2]),ye[2]>wt&&(wt=ye[2]);if(!Number.isFinite(K)){T.style.removeProperty("--origin");return}let So=(me+We)/2*_e,wo=(K+Se)/2*_e,To=(Pe+wt)/2*_e;T.style.setProperty("--origin",`${So}px ${wo}px ${To}px`)}W(Q),i.appendChild(T);let L={handle:void 0,wrapper:T,parseResult:c,rendered:[],shadowRendered:[],polygons:Q,voxelSource:c.voxelSource,disposed:!1,stableDom:z,excludeFromAutoCenter:!!y.excludeFromAutoCenter,castShadow:!!y.castShadow,cameraCullGroups:[],cameraCullSignature:"",lightOverrideSignature:"clear",bakedRotation:y.rotation?[...y.rotation]:[0,0,0]},Z={polygons:Q,element:T,id:y.id,get transform(){return I},remove(){G++,T.parentNode&&T.parentNode.removeChild(T),m(L),l.delete(L),re(),U()},setPolygons(F,K){G++,D=K?.merge??D,z=K?.stableDom??z,L.stableDom=z,L.voxelSource=void 0,L.polygons=q(F,D),Z.polygons=L.polygons,W(L.polygons);let me=K?.recomputeAutoCenter??!0;if(L.stableDom&&!g(L.wrapper)){let Pe={doc:s,directionalLight:t.directionalLight,ambientLight:t.ambientLight,textureLighting:t.textureLighting,textureQuality:t.textureQuality},Se=nt(L.polygons,Pe);if(V(L.wrapper,Se),qn(L.rendered,L.polygons,{...Pe,solidPaintDefaults:Se})){E(L),N(L,!0),me&&re();return}}X(L),me&&re()},updatePolygon(F,K){let me=typeof F=="number"?F:L.polygons.indexOf(F);me<0||me>=L.polygons.length||(L.voxelSource=void 0,Object.assign(L.polygons[me],K),X(L))},async setPolygonsChunked(F,K){let me=++G;D=K?.merge??D,z=K?.stableDom??z,L.stableDom=z,L.voxelSource=void 0,L.polygons=q(F,D),Z.polygons=L.polygons,W(L.polygons);let Pe=K?.recomputeAutoCenter??!0;if(!await oe(L,()=>L.disposed||me!==G)){m(L);return}Pe&&re()},setTransform(F){let K=L.castShadow;F.castShadow!==void 0&&(L.castShadow=!!F.castShadow),I={...I,...F};let me=so(I);T.style.transform=me??"",H(L,I.rotation),F.rotation!==void 0&&N(L),L.castShadow!==K&&(j(L),U())},dispose(){if(!L.disposed){L.disposed=!0,G++,T.parentNode&&T.parentNode.removeChild(T),m(L);try{c.dispose()}catch{}l.delete(L),re(),U()}},rebakeAtlas(){L.bakedRotation=I.rotation?[...I.rotation]:[0,0,0];let F=t.directionalLight?.direction??[.4,-.7,.59],K=oo(F,L.bakedRotation);X(L,K)},getPosition(){return I.position},getRotation(){return I.rotation},getScale(){return I.scale},getPolygons(){return Z.polygons}};return L.handle=Z,l.add(L),X(L),H(L,I.rotation),re(),U(),Z}function pe(c){let y=!!t.autoCenter,R=t.strategies,T=t.textureLighting,I=t.rotX??ot,D=t.rotY??rt;t={...t,...c},a(i,t);let z=!!t.autoCenter;for(let Q of l)H(Q,Q.handle.transform.rotation);let G=c.strategies!==void 0&&!Cs(c.strategies,R);if(G)for(let Q of l)X(Q);let ee=c.rotX!==void 0&&(t.rotX??ot)!==I||c.rotY!==void 0&&(t.rotY??rt)!==D;if(!G&&ee)for(let Q of l)N(Q);if(y!==z&&re(),c.textureLighting!==void 0&&T!==t.textureLighting){for(let Q of l)!G&&(Q.voxelSource||Q.voxelRenderer)?X(Q):j(Q);U()}}function ce(){return t}function ue(){let c=[];for(let y of l)c.push(y.handle);return c}function fe(c){let y=c;for(;y;){if(y instanceof HTMLElement&&y.classList.contains("polycss-mesh")){for(let R of l)if(R.wrapper===y)return R.handle;return null}y=y.parentElement}return null}function ge(){let c=Array.from(l);for(let y of c)try{y.handle.dispose()}catch{}i.parentNode&&i.parentNode.removeChild(i)}return{add:le,setOptions:pe,destroy:ge,host:e,getOptions:ce,meshes:ue,findMeshByElement:fe}}var ks=typeof HTMLElement<"u"?HTMLElement:class{},Ds=["perspective","rot-x","rot-y","zoom","directional-direction","directional-color","directional-intensity","ambient-color","ambient-intensity","texture-lighting","texture-quality","auto-center"];function Re(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function Os(e){return e==="false"?!1:Re(e)}function Is(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function Hs(e){if(e==="baked"||e==="dynamic")return e}function Vs(e){return e==="auto"?"auto":Re(e)}var be=class extends ks{constructor(){super(...arguments);this._scene=null}static get observedAttributes(){return[...Ds]}getScene(){return this._scene}_readOptions(){let t=this._readDirectionalLight(),o=this._readAmbientLight(),r={},s=Os(this.getAttribute("perspective"));s!==void 0&&(r.perspective=s);let i=Re(this.getAttribute("rot-x"));i!==void 0&&(r.rotX=i);let l=Re(this.getAttribute("rot-y"));l!==void 0&&(r.rotY=l);let a=Re(this.getAttribute("zoom"));a!==void 0&&(r.zoom=a),r.textureLighting=Hs(this.getAttribute("texture-lighting"))??"baked";let u=Vs(this.getAttribute("texture-quality"));return u!==void 0&&(r.textureQuality=u),r.autoCenter=this.hasAttribute("auto-center"),t&&(r.directionalLight=t),o&&(r.ambientLight=o),r}_readDirectionalLight(){let t=Is(this.getAttribute("directional-direction")),o=this.getAttribute("directional-color")||void 0,r=Re(this.getAttribute("directional-intensity"));if(!t&&!o&&r===void 0)return;let s={direction:t??[.4,-.7,.59]};return o&&(s.color=o),r!==void 0&&(s.intensity=r),s}_readAmbientLight(){let t=this.getAttribute("ambient-color")||void 0,o=Re(this.getAttribute("ambient-intensity"));if(!t&&o===void 0)return;let r={};return t&&(r.color=t),o!==void 0&&(r.intensity=o),r}connectedCallback(){this._scene||(this._scene=io(this,this._readOptions()),this.dispatchEvent(new CustomEvent("polycss:scene-ready",{bubbles:!1})))}disconnectedCallback(){this._scene&&(this._scene.destroy(),this._scene=null)}attributeChangedCallback(t,o,r){o!==r&&this._scene&&this._scene.setOptions(this._readOptions())}};import{computeSceneBbox as zs,loadMesh as Fs}from"@layoutit/polycss-core";var Bs=typeof HTMLElement<"u"?HTMLElement:class{},Ns=["src","mtl","position","scale","rotation","auto-center"];function Ye(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function ao(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return Ye(e)}}function $s(e){return e.closest("poly-scene")??null}function Xs(e){if(e.length===0)return e;let n=zs(e),t=(n.min[0]+n.max[0])/2,o=(n.min[1]+n.max[1])/2,r=(n.min[2]+n.max[2])/2;if(t===0&&o===0&&r===0)return e;let s=i=>[i[0]-t,i[1]-o,i[2]-r];return e.map(i=>({...i,vertices:i.vertices.map(s),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(l=>({...l,vertices:l.vertices.map(s)}))}:null}))}var ze=class extends Bs{constructor(){super(...arguments);this._handle=null;this._parseResult=null;this._loadToken=0}static get observedAttributes(){return[...Ns]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){if(o!==r){if(t==="src"||t==="mtl"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform({position:Ye(this.getAttribute("position")),scale:ao(this.getAttribute("scale")),rotation:Ye(this.getAttribute("rotation"))})}}_tearDown(){if(this._loadToken+=1,this._handle){try{this._handle.dispose()}catch{}this._handle=null}this._parseResult=null}async _maybeLoad(){let t=this.getAttribute("src");if(!t)return;let o=$s(this);if(!o)return;let r=++this._loadToken,s=this.getAttribute("mtl")||void 0,i;try{i=await Fs(t,s?{mtlUrl:s}:void 0)}catch(u){this.dispatchEvent(new CustomEvent("polycss:error",{detail:u,bubbles:!0}));return}if(r!==this._loadToken){try{i.dispose()}catch{}return}let l=o.getScene();if(!l){try{i.dispose()}catch{}return}this.hasAttribute("auto-center")&&(i={...i,polygons:Xs(i.polygons)}),this._parseResult=i,this._handle=l.add(i,{position:Ye(this.getAttribute("position")),scale:ao(this.getAttribute("scale")),rotation:Ye(this.getAttribute("rotation"))}),this.dispatchEvent(new CustomEvent("polycss:loaded",{detail:{polygons:this._handle.polygons},bubbles:!0}))}};var Ys=typeof HTMLElement<"u"?HTMLElement:class{},Us=["vertices","color","texture","uvs","position","scale","rotation"];function lo(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function tn(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function Gs(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return tn(e)}}function Ws(e){return e.closest("poly-scene")??null}var st=class extends Ys{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...Us]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){o!==r&&(this._tearDown(),this.isConnected&&this._mount())}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}_mount(){let t=Ws(this);if(!t)return;let o=t.getScene();if(!o)return;let r=lo(this.getAttribute("vertices"));if(!r||!Array.isArray(r)||r.length<3)return;let s=this.getAttribute("color")||void 0,i=this.getAttribute("texture")||void 0,l=lo(this.getAttribute("uvs"))??void 0,a={};for(let d of Array.from(this.attributes))d.name.startsWith("data-")&&(a[d.name.slice(5)]=d.value);let m={polygons:[{vertices:r,...s!==void 0?{color:s}:{},...i!==void 0?{texture:i}:{},...l!==void 0?{uvs:l}:{},...Object.keys(a).length>0?{data:a}:{}}],objectUrls:[],warnings:[],dispose:()=>{}};this._handle=o.add(m,{position:tn(this.getAttribute("position")),scale:Gs(this.getAttribute("scale")),rotation:tn(this.getAttribute("rotation"))})}};import{axesHelperPolygons as js}from"@layoutit/polycss-core";var Zs=typeof HTMLElement<"u"?HTMLElement:class{},qs=["size","thickness","negative","x-color","y-color","z-color"];function Qs(e){return e.closest("poly-scene")??null}function co(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}var it=class extends Zs{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...qs]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){o!==r&&this._handle&&this._remount()}_polygons(){return js({size:co(this.getAttribute("size")),thickness:co(this.getAttribute("thickness")),negative:this.hasAttribute("negative"),xColor:this.getAttribute("x-color")??void 0,yColor:this.getAttribute("y-color")??void 0,zColor:this.getAttribute("z-color")??void 0})}_mount(){let t=Qs(this);if(!t)return;let o=t.getScene();if(!o)return;let r={polygons:this._polygons(),objectUrls:[],dispose:()=>{},warnings:[]};this._handle=o.add(r,{excludeFromAutoCenter:!0})}_remount(){this._tearDown(),this._mount()}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}};import{octahedronPolygons as Ks}from"@layoutit/polycss-core";var Js=typeof HTMLElement<"u"?HTMLElement:class{},ei=["direction","target","distance","size","color"],nn=50,ti=5,ni=.35,oi="#ffd54a";function ri(e){return e.closest("poly-scene")??null}function uo(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function mo(e,n){if(e==null)return n;let t=parseFloat(e);return Number.isFinite(t)?t:n}var at=class extends Js{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...ei]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){if(o!==r&&this._handle){if(t==="size"||t==="color"){this._remount();return}this._handle.setTransform({position:this._meshPosition()})}}_meshPosition(){let t=uo(this.getAttribute("direction"));if(!t)return;let o=uo(this.getAttribute("target"))??[0,0,0],r=mo(this.getAttribute("distance"),ti),s=t[0],i=t[1],l=t[2],a=Math.hypot(s,i,l)||1,u=o[0]+i/a*r,m=o[1]+s/a*r,d=o[2]+l/a*r;return[m*nn,u*nn,d*nn]}_mount(){let t=ri(this);if(!t)return;let o=t.getScene();if(!o)return;let r=mo(this.getAttribute("size"),ni),s=this.getAttribute("color")??oi,i={polygons:Ks({center:[0,0,0],size:r,color:s}),objectUrls:[],dispose:()=>{},warnings:[]};this._handle=o.add(i,{position:this._meshPosition(),excludeFromAutoCenter:!0})}_remount(){this._tearDown(),this._mount()}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}};import{BASE_TILE as si}from"@layoutit/polycss-core";var lt={drag:!0,wheel:!0,dolly:!1,invert:!1,minZoom:.1,maxZoom:10,minDistance:0,maxDistance:1/0,animate:!1};function Fe(e,n){let t;return n.animate===!1?t=!1:n.animate?t={speed:n.animate.speed??.3,axis:n.animate.axis??"y",pauseOnInteraction:n.animate.pauseOnInteraction??!0}:t=e.animate,{drag:n.drag??e.drag,wheel:n.wheel??e.wheel,dolly:n.dolly??e.dolly,invert:n.invert??e.invert,minZoom:n.minZoom??e.minZoom,maxZoom:n.maxZoom??e.maxZoom,minDistance:n.minDistance??e.minDistance,maxDistance:n.maxDistance??e.maxDistance,animate:t}}function Ue(e){return e===!0?-1:e===!1?1:e}function ct(){let e=[],n=[],t=[];function o(i){return i==="change"?e:i==="start"?n:t}function r(i){if(e.length===0)return;let l={type:"change",camera:i()},a=e.slice();for(let u of a)try{u(l)}catch(m){console.error("[polycss] controls 'change' listener threw:",m)}}function s(i,l){let a=i==="start"?n:t;if(a.length===0)return;let u={type:i,camera:l()},m=a.slice();for(let d of m)try{d(u)}catch(f){console.error(`[polycss] controls '${i}' listener threw:`,f)}}return{changeListeners:e,startListeners:n,endListeners:t,listenerArray:o,emitChange:r,emitInteraction:s}}function ut(e){return()=>{let n=e.getOptions(),t=n.target??[0,0,0];return{rotX:n.rotX??0,rotY:n.rotY??0,zoom:n.zoom??1,target:[t[0],t[1],t[2]],distance:n.distance??0}}}function dt(e,n,t,o,r,s){let i=!1,l=null;return{onWheel:m=>{let d=n();if(!d.wheel||t())return;m.preventDefault();let f=m.deltaMode===1?16:m.deltaMode===2?100:1,g=m.deltaY*f;m.ctrlKey?g*=10:g*=3;let p=e.getOptions();if(d.dolly){let h=p.distance??0,b=Math.max(d.minDistance,Math.min(d.maxDistance,h+g*.05));e.setOptions({distance:b})}else{let h=Math.exp(-g*513e-6),b=p.zoom??1,x=Math.max(d.minZoom,Math.min(d.maxZoom,b*h));e.setOptions({zoom:x})}i||(i=!0,s("start",o)),r(o),l!==null&&clearTimeout(l),l=setTimeout(()=>{l=null,i=!1,s("end",o)},150)},teardown:()=>{l!==null&&(clearTimeout(l),l=null),i=!1}}}function mt(e,n,t,o,r,s,i){let l=null,a=0,u=g=>{if(l===null||o())return;let p=t();if(!p.animate){l=null;return}if(r())a=g;else{let h=Math.min(50,a?g-a:16.67);a=g;let b=p.animate.speed*(h/16.67),x=n.getOptions();if(p.animate.axis==="x"){let A=(((x.rotX??65)+b)%360+360)%360;n.setOptions({rotX:A})}else{let A=(((x.rotY??45)+b)%360+360)%360;n.setOptions({rotY:A})}i(s)}l=e.requestAnimationFrame(u)};return{start:()=>{l!==null||!t().animate||o()||(a=0,l=e.requestAnimationFrame(u))},stop:()=>{l!==null&&(e.cancelAnimationFrame(l),l=null)},isRunning:()=>l!==null}}function po(e,n={}){let t=Fe(lt,n),o=e.host,r=o.ownerDocument?.defaultView??globalThis,s=null,i={x:0,y:0},l=!1,a=!1,u=ct(),m=ut(e),{changeListeners:d,startListeners:f,endListeners:g,listenerArray:p,emitChange:h,emitInteraction:b}=u,x=mt(r,e,()=>t,()=>a,()=>l,m,h),A=w=>{if(!(!t.drag||a)&&s===null&&w.isPrimary!==!1){w.preventDefault(),s=w.pointerId,i={x:w.clientX,y:w.clientY},o.style.cursor="grabbing";try{w.target.setPointerCapture(w.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(l=!0),b("start",m)}},M=w=>{if(s===null||w.pointerId!==s||!t.drag||a)return;w.preventDefault();let O=w.clientX-i.x,H=w.clientY-i.y;i={x:w.clientX,y:w.clientY};let V=Ue(t.invert),j=O/4*V,ie=H/4*V,_=e.getOptions();if(w.shiftKey){let X=_.rotX??65,U=_.rotY??45,oe=Math.max(.01,_.zoom??1),re=Math.cos(X*Math.PI/180),le=re>=0?Math.max(.1,re):Math.min(-.1,re),pe=Math.cos(U*Math.PI/180),ce=Math.sin(U*Math.PI/180),ue=oe*si,fe=(O*ce-H*pe/le)/ue,ge=-(O*pe+H*ce/le)/ue,c=_.target??[0,0,0];e.setOptions({target:[c[0]+fe,c[1]+ge,c[2]]})}else{let X=Math.max(0,Math.min(100,(_.rotX??65)-ie)),U=(((_.rotY??45)-j)%360+360)%360;e.setOptions({rotX:X,rotY:U})}h(m)},P=w=>{if(s===w.pointerId){s=null,o.style.cursor=t.drag&&!a?"grab":"";try{w.target.releasePointerCapture(w.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(l=!1),b("end",m)}},E=dt(e,()=>t,()=>a,m,h,b);function k(){o.addEventListener("pointerdown",A),o.addEventListener("pointermove",M),o.addEventListener("pointerup",P),o.addEventListener("pointercancel",P),o.addEventListener("wheel",E.onWheel,{passive:!1}),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function C(){o.removeEventListener("pointerdown",A),o.removeEventListener("pointermove",M),o.removeEventListener("pointerup",P),o.removeEventListener("pointercancel",P),o.removeEventListener("wheel",E.onWheel),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",E.teardown()}k(),x.start();function v(w){let O=!!t.animate;t=Fe(t,w),!a&&s===null&&(o.style.cursor=t.drag?"grab":"");let H=!!t.animate;O&&!H?x.stop():!O&&H&&x.start()}function B(){a&&(a=!1,k(),x.start())}function N(){a||(a=!0,C(),x.stop(),s=null,l=!1,E.teardown())}function Y(){N(),d.length=0,f.length=0,g.length=0}function te(w,O){let H=p(w);H.includes(O)||H.push(O)}function S(w,O){let H=p(w),V=H.indexOf(O);V>=0&&H.splice(V,1)}function $(w,O){return p(w).includes(O)}return{update:v,resume:B,pause:N,destroy:Y,addEventListener:te,removeEventListener:S,hasEventListener:$}}function se(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function pt(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function Ce(e){if(e!==null)return!(e==="false"||e==="0")}function ft(e){if(e===null)return;if(e==="true")return!0;if(e==="false")return!1;let n=parseFloat(e);return Number.isFinite(n)?n:!0}function ht(e){if(e==="x"||e==="y")return e}var ii=typeof HTMLElement<"u"?HTMLElement:class{},ai=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],gt=class extends ii{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...ai]}_readAnimate(){let t=se(this.getAttribute("animate-speed")),o=ht(this.getAttribute("animate-axis")),r=this.getAttribute("animate-pause-on-interaction");if(this.hasAttribute("animate-speed")||this.hasAttribute("animate-axis")||this.hasAttribute("animate-pause-on-interaction"))return{...t!==void 0?{speed:t}:{},...o!==void 0?{axis:o}:{},...r!==null?{pauseOnInteraction:Ce(r)}:{}}}_readOptions(){let t={},o=Ce(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let r=Ce(this.getAttribute("wheel"));r!==void 0&&(t.wheel=r),this.hasAttribute("dolly")&&(t.dolly=!0);let s=se(this.getAttribute("min-distance"));s!==void 0&&(t.minDistance=s);let i=se(this.getAttribute("max-distance"));i!==void 0&&(t.maxDistance=i);let l=ft(this.getAttribute("invert"));l!==void 0&&(t.invert=l);let a=se(this.getAttribute("zoom-min")),u=se(this.getAttribute("zoom-max"));return a!==void 0&&(t.minZoom=a),u!==void 0&&(t.maxZoom=u),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof be)return t;t=t.parentNode}return null}_attach(){if(this._controls)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._controls=po(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls&&this._controls.update(this._readOptions())}};import{BASE_TILE as li}from"@layoutit/polycss-core";function fo(e,n={}){let t=Fe(lt,n),o=e.host,r=o.ownerDocument?.defaultView??globalThis,s=null,i={x:0,y:0},l=!1,a=!1,u=!1,m={x:0,y:0},d=ct(),f=ut(e),{changeListeners:g,startListeners:p,endListeners:h,listenerArray:b,emitChange:x,emitInteraction:A}=d,M=mt(r,e,()=>t,()=>a,()=>l,f,x),P=_=>{if(!(!t.drag||a)&&s===null&&_.isPrimary!==!1){_.preventDefault(),s=_.pointerId,i={x:_.clientX,y:_.clientY},o.style.cursor="grabbing";try{_.target.setPointerCapture(_.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(l=!0),A("start",f)}},E=_=>{if(s===null||_.pointerId!==s||!t.drag||a)return;_.preventDefault();let X=_.clientX-i.x,U=_.clientY-i.y;i={x:_.clientX,y:_.clientY};let oe=e.getOptions();if(_.shiftKey){let re=Ue(t.invert),le=X/4*re,pe=U/4*re,ce=Math.max(0,Math.min(100,(oe.rotX??65)-pe)),ue=(((oe.rotY??45)-le)%360+360)%360;e.setOptions({rotX:ce,rotY:ue})}else{let re=oe.rotX??65,le=oe.rotY??45,pe=Math.max(.01,oe.zoom??1),ce=Math.cos(re*Math.PI/180),ue=ce>=0?Math.max(.1,ce):Math.min(-.1,ce),fe=Math.cos(le*Math.PI/180),ge=Math.sin(le*Math.PI/180),c=pe*li,y=(X*ge-U*fe/ue)/c,R=-(X*fe+U*ge/ue)/c,T=oe.target??[0,0,0];e.setOptions({target:[T[0]+y,T[1]+R,T[2]]})}x(f)},k=_=>{if(s===_.pointerId){s=null,o.style.cursor=t.drag&&!a?"grab":"";try{_.target.releasePointerCapture(_.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(l=!1),A("end",f)}},C=_=>{_.preventDefault()},v=_=>{_.button===2&&(u=!0,m={x:_.clientX,y:_.clientY},t.animate&&t.animate.pauseOnInteraction&&(l=!0),A("start",f))},B=_=>{if(!u||!t.drag)return;let X=_.clientX-m.x,U=_.clientY-m.y;m={x:_.clientX,y:_.clientY};let oe=Ue(t.invert),re=X/4*oe,le=U/4*oe,pe=e.getOptions(),ce=Math.max(0,Math.min(100,(pe.rotX??65)-le)),ue=(((pe.rotY??45)-re)%360+360)%360;e.setOptions({rotX:ce,rotY:ue}),x(f)},N=_=>{_.button===2&&u&&(u=!1,A("end",f))},Y=dt(e,()=>t,()=>a,f,x,A);function te(){o.addEventListener("pointerdown",P),o.addEventListener("pointermove",E),o.addEventListener("pointerup",k),o.addEventListener("pointercancel",k),o.addEventListener("wheel",Y.onWheel,{passive:!1}),o.addEventListener("contextmenu",C),o.addEventListener("mousedown",v),o.addEventListener("mousemove",B),o.addEventListener("mouseup",N),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function S(){o.removeEventListener("pointerdown",P),o.removeEventListener("pointermove",E),o.removeEventListener("pointerup",k),o.removeEventListener("pointercancel",k),o.removeEventListener("wheel",Y.onWheel),o.removeEventListener("contextmenu",C),o.removeEventListener("mousedown",v),o.removeEventListener("mousemove",B),o.removeEventListener("mouseup",N),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",Y.teardown()}te(),M.start();function $(_){let X=!!t.animate;t=Fe(t,_),!a&&s===null&&(o.style.cursor=t.drag?"grab":"");let U=!!t.animate;X&&!U?M.stop():!X&&U&&M.start()}function w(){a&&(a=!1,te(),M.start())}function O(){a||(a=!0,S(),M.stop(),s=null,l=!1,u=!1,Y.teardown())}function H(){O(),g.length=0,p.length=0,h.length=0}function V(_,X){let U=b(_);U.includes(X)||U.push(X)}function j(_,X){let U=b(_),oe=U.indexOf(X);oe>=0&&U.splice(oe,1)}function ie(_,X){return b(_).includes(X)}return{update:$,resume:w,pause:O,destroy:H,addEventListener:V,removeEventListener:j,hasEventListener:ie}}var ci=typeof HTMLElement<"u"?HTMLElement:class{},ui=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],yt=class extends ci{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...ui]}_readAnimate(){let t=se(this.getAttribute("animate-speed")),o=ht(this.getAttribute("animate-axis")),r=this.getAttribute("animate-pause-on-interaction");if(this.hasAttribute("animate-speed")||this.hasAttribute("animate-axis")||this.hasAttribute("animate-pause-on-interaction"))return{...t!==void 0?{speed:t}:{},...o!==void 0?{axis:o}:{},...r!==null?{pauseOnInteraction:Ce(r)}:{}}}_readOptions(){let t={},o=Ce(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let r=Ce(this.getAttribute("wheel"));r!==void 0&&(t.wheel=r),this.hasAttribute("dolly")&&(t.dolly=!0);let s=se(this.getAttribute("min-distance"));s!==void 0&&(t.minDistance=s);let i=se(this.getAttribute("max-distance"));i!==void 0&&(t.maxDistance=i);let l=ft(this.getAttribute("invert"));l!==void 0&&(t.invert=l);let a=se(this.getAttribute("zoom-min")),u=se(this.getAttribute("zoom-max"));return a!==void 0&&(t.minZoom=a),u!==void 0&&(t.maxZoom=u),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof be)return t;t=t.parentNode}return null}_attach(){if(this._controls)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._controls=fo(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls&&this._controls.update(this._readOptions())}};import{createIsometricCamera as ho}from"@layoutit/polycss-core";var di=8e3;function on(e={}){let n={};e.zoom!==void 0&&(n.zoom=e.zoom),e.target!==void 0&&(n.target=e.target),e.rotX!==void 0&&(n.rotX=e.rotX),e.rotY!==void 0&&(n.rotY=e.rotY),e.distance!==void 0&&(n.distance=e.distance);let t=ho(n),o=`${e.perspective??di}px`;return{get state(){return t.state},update(r){t.update(r)},getStyle(r){return t.getStyle(r)},type:"perspective",perspectiveStyle:o}}function go(e={}){let n={};e.zoom!==void 0&&(n.zoom=e.zoom),e.target!==void 0&&(n.target=e.target),e.rotX!==void 0&&(n.rotX=e.rotX),e.rotY!==void 0&&(n.rotY=e.rotY),e.distance!==void 0&&(n.distance=e.distance);let t=ho(n);return{get state(){return t.state},update(o){t.update(o)},getStyle(o){return t.getStyle(o)},type:"orthographic",perspectiveStyle:"none"}}var mi=typeof HTMLElement<"u"?HTMLElement:class{},pi=["perspective","zoom","rot-x","rot-y","target","distance"],bt=class extends mi{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...pi]}getCamera(){return this._camera}_readOptions(){return{perspective:se(this.getAttribute("perspective")),zoom:se(this.getAttribute("zoom")),rotX:se(this.getAttribute("rot-x")),rotY:se(this.getAttribute("rot-y")),target:pt(this.getAttribute("target")),distance:se(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=on(t),this._wrapper=this.ownerDocument.createElement("div"),this._wrapper.className="polycss-camera",this._wrapper.style.perspective=this._camera.perspectiveStyle;this.firstChild;)this._wrapper.appendChild(this.firstChild);this.appendChild(this._wrapper),this.dispatchEvent(new CustomEvent("polycss:camera-ready",{bubbles:!1}))}_teardown(){if(this._wrapper){for(;this._wrapper.firstChild;)this.insertBefore(this._wrapper.firstChild,this._wrapper);this._wrapper.parentNode&&this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null}this._camera=null}connectedCallback(){this._mount()}disconnectedCallback(){this._teardown()}attributeChangedCallback(t,o,r){if(o===r||!this._camera||!this._wrapper)return;let s=this._readOptions();this._camera=on(s),this._wrapper.style.perspective=this._camera.perspectiveStyle}};var fi=typeof HTMLElement<"u"?HTMLElement:class{},hi=["zoom","rot-x","rot-y","target","distance"],xt=class extends fi{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...hi]}getCamera(){return this._camera}_readOptions(){return{zoom:se(this.getAttribute("zoom")),rotX:se(this.getAttribute("rot-x")),rotY:se(this.getAttribute("rot-y")),target:pt(this.getAttribute("target")),distance:se(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=go(t),this._wrapper=this.ownerDocument.createElement("div"),this._wrapper.className="polycss-camera",this._wrapper.style.perspective=this._camera.perspectiveStyle;this.firstChild;)this._wrapper.appendChild(this.firstChild);this.appendChild(this._wrapper),this.dispatchEvent(new CustomEvent("polycss:camera-ready",{bubbles:!1}))}_teardown(){if(this._wrapper){for(;this._wrapper.firstChild;)this.insertBefore(this._wrapper.firstChild,this._wrapper);this._wrapper.parentNode&&this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null}this._camera=null}connectedCallback(){this._mount()}disconnectedCallback(){this._teardown()}attributeChangedCallback(t,o,r){if(o===r||!this._camera)return;let s=this._readOptions();s.zoom!==void 0&&this._camera.update({zoom:s.zoom}),s.rotX!==void 0&&this._camera.update({rotX:s.rotX}),s.rotY!==void 0&&this._camera.update({rotY:s.rotY}),s.target!==void 0&&this._camera.update({target:s.target}),s.distance!==void 0&&this._camera.update({distance:s.distance})}};import{arrowPolygons as gi,eulerXYZFromQuat as yi,planePolygons as bi,quatFromAxisAngle as xi,quatFromEulerXYZ as vi,quatMultiply as Pi,ringQuadPolygons as Ei}from"@layoutit/polycss-core";var Pt="#ff3653",Et="#8adb00",At="#2c8fff",Be=50,yo=60,Ai=.6,Mi=.0125,Ci=.15,Si=.04,wi=1,bo=.02,rn=1.04,Ti=.1,Li=.25,Eo=1e-4,_i=.6,Ri=.8,ki=1,Ge={0:1,1:0,2:2},xo=[{cssAxis:0,sign:1,key:"x",color:Pt},{cssAxis:0,sign:-1,key:"-x",color:Pt},{cssAxis:1,sign:1,key:"y",color:Et},{cssAxis:1,sign:-1,key:"-y",color:Et},{cssAxis:2,sign:1,key:"z",color:At},{cssAxis:2,sign:-1,key:"-z",color:At}],vo=[{cssAxis:0,key:"x",color:Pt},{cssAxis:1,key:"y",color:Et},{cssAxis:2,key:"z",color:At}],Po=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:At},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Et},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Pt}];function sn(e,n,t,o){let r=t*Math.PI/180,s=o*Math.PI/180,i=[0,0,0];i[e]=n;let l=i[0]*Math.cos(s)-i[1]*Math.sin(s),a=i[0]*Math.sin(s)+i[1]*Math.cos(s),u=i[2];return a*Math.sin(r)+u*Math.cos(r)<0}function Di(e,n){let t=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!t)return e;let o=parseInt(t[1],16),r=parseInt(t[2],16),s=parseInt(t[3],16);return`rgba(${o}, ${r}, ${s}, ${n})`}function Mt(e,n){return!n||n<=0?e:Math.round(e/n)*n}function Oi(e){if(e.length===0)return[0,0,0];let n=1/0,t=1/0,o=1/0,r=-1/0,s=-1/0,i=-1/0;for(let l of e)for(let a of l.vertices)a[0]<n&&(n=a[0]),a[0]>r&&(r=a[0]),a[1]<t&&(t=a[1]),a[1]>s&&(s=a[1]),a[2]<o&&(o=a[2]),a[2]>i&&(i=a[2]);return Number.isFinite(n)?[(t+s)/2*Be,(n+r)/2*Be,(o+i)/2*Be]:[0,0,0]}function an(e){if(e.length===0)return yo;let n=1/0,t=1/0,o=1/0,r=-1/0,s=-1/0,i=-1/0;for(let a of e)for(let u of a.vertices)u[0]<n&&(n=u[0]),u[0]>r&&(r=u[0]),u[1]<t&&(t=u[1]),u[1]>s&&(s=u[1]),u[2]<o&&(o=u[2]),u[2]>i&&(i=u[2]);return Number.isFinite(n)?Math.max(r-n,s-t,i-o)*Be*Ai:yo}function vt(e,n,t){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let s=r.getBoundingClientRect();if(!(s.width<=0||s.height<=0)&&n>=s.left&&n<=s.right&&t>=s.top&&t<=s.bottom)return!0}return!1}function Ii(e){let{cssAxis:n,sign:t,shaftLengthCss:o,wrapper:r,target:s,startClientX:i,startClientY:l,translationSnap:a,onAxisDelta:u,onMouseDown:m,onMouseUp:d,onDraggingChanged:f}=e,g=o,p=[0,0,0];p[n]=t;let h=r.ownerDocument.createElement("div");h.style.position="absolute",h.style.left="0",h.style.top="0",h.style.width="0",h.style.height="0",h.style.transform=`translate3d(${p[0]*g}px, ${p[1]*g}px, ${p[2]*g}px)`,r.appendChild(h);let b=r.getBoundingClientRect(),x=h.getBoundingClientRect();r.removeChild(h);let A=(x.left-b.left)/g,M=(x.top-b.top)/g,P=A*A+M*M;if(P<Eo)return;m?.(),f?.(!0);let E=C=>{let v=C.clientX-i,B=C.clientY-l,N=(v*A+B*M)/P;N=Mt(N,a),u(N,p)},k=()=>{window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",k);let C=v=>{v.stopPropagation(),v.stopImmediatePropagation()};window.addEventListener("click",C,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",C,!0),0),d?.(),f?.(!1)};window.addEventListener("pointermove",E),window.addEventListener("pointerup",k),window.addEventListener("pointercancel",k)}function Hi(e){let{axisA:n,axisB:t,probeDistanceCss:o,wrapper:r,startClientX:s,startClientY:i,translationSnap:l,onPlaneDelta:a,onMouseDown:u,onMouseUp:m,onDraggingChanged:d}=e,f=[0,0,0];f[n]=1;let g=[0,0,0];g[t]=1;function p(P){let E=r.ownerDocument.createElement("div");E.style.position="absolute",E.style.left="0",E.style.top="0",E.style.width="0",E.style.height="0",E.style.transform=`translate3d(${P[0]*o}px, ${P[1]*o}px, ${P[2]*o}px)`,r.appendChild(E);let k=r.getBoundingClientRect(),C=E.getBoundingClientRect();return r.removeChild(E),{x:(C.left-k.left)/o,y:(C.top-k.top)/o}}let h=p(f),b=p(g),x=h.x*b.y-b.x*h.y;if(Math.abs(x)<Eo)return;u?.(),d?.(!0);let A=P=>{let E=P.clientX-s,k=P.clientY-i,C=(b.y*E-b.x*k)/x,v=(-h.y*E+h.x*k)/x;C=Mt(C,l),v=Mt(v,l),a(C,v,f,g)},M=()=>{window.removeEventListener("pointermove",A),window.removeEventListener("pointerup",M),window.removeEventListener("pointercancel",M);let P=E=>{E.stopPropagation(),E.stopImmediatePropagation()};window.addEventListener("click",P,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",P,!0),0),m?.(),d?.(!1)};window.addEventListener("pointermove",A),window.addEventListener("pointerup",M),window.addEventListener("pointercancel",M)}function Vi(e){let{cssAxis:n,wrapper:t,target:o,startClientX:r,startClientY:s,rotationSnap:i,onAngleDelta:l,onMouseDown:a,onMouseUp:u,onDraggingChanged:m}=e,d=t.getBoundingClientRect(),f=d.left,g=d.top,p=Math.atan2(s-g,r-f),h=0;a?.(),m?.(!0);let b=A=>{let M=Math.atan2(A.clientY-g,A.clientX-f),P=M-p;P>Math.PI?P-=2*Math.PI:P<-Math.PI&&(P+=2*Math.PI),h+=P,p=M;let E=h*180/Math.PI;E=Mt(E,i),l(E)},x=()=>{window.removeEventListener("pointermove",b),window.removeEventListener("pointerup",x),window.removeEventListener("pointercancel",x);let A=M=>{M.stopPropagation(),M.stopImmediatePropagation()};window.addEventListener("click",A,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",A,!0),0),u?.(),m?.(!1)};window.addEventListener("pointermove",b),window.addEventListener("pointerup",x),window.addEventListener("pointercancel",x)}function Ao(e,n={}){let t=null,o=n.mode??"translate",r=n.size??1,s={...n},i=new Map,l=null,a=null,u=[0,0,0];function m(){if(!t)return[0,0,0];let S=t.transform.position??[0,0,0];return[S[0]+u[0],S[1]+u[1],S[2]+u[2]]}function d(S){return a===S?ki:l===S?Ri:_i}function f(){for(let[S,$]of i){let w=g($.spec,d(S));$.handle.setPolygons(w,{recomputeAutoCenter:!1})}}function g(S,$){let O=an(t?.polygons??[])*r,H=O/Be,V=Di(S.color,$);if(S.kind==="arrow"){let _=e.getOptions(),X=sn(S.cssAxis,S.sign,_.rotX??65,_.rotY??45);return gi({axis:Ge[S.cssAxis],sign:S.sign,shaftLength:H,shaftHalfThickness:H*Mi,headLength:H*Ci,headHalfThickness:H*Si,color:V,shaft:!X})}if(S.kind==="plane"){let _=e.getOptions(),X=_.rotX??65,U=_.rotY??45,oe=Ge[S.perpAxis],re=(oe+1)%3,le=(oe+2)%3,pe=Ge[re],ce=Ge[le],ue=sn(pe,1,X,U)?-1:1,fe=sn(ce,1,X,U)?-1:1,ge=H*Li;return bi({axis:oe,size:H*Ti,offset:[ue*ge,fe*ge],color:V})}let ie=O*wi/Be*rn;return Ei({axis:Ge[S.cssAxis],outerRadius:ie,color:V})}function p(S){return S.kind==="arrow"?"polycss-transform-arrow":S.kind==="plane"?"polycss-transform-plane":"polycss-transform-ring"}function h(){if(o==="translate"){let S=xo.map(w=>({kind:"arrow",key:w.key,cssAxis:w.cssAxis,sign:w.sign,color:w.color})),$=Po.map(w=>({kind:"plane",key:w.key,perpAxis:w.perpAxis,axisA:w.axisA,axisB:w.axisB,color:w.color}));return[...S,...$]}return o==="rotate"?vo.map(S=>({kind:"ring",key:S.key,cssAxis:S.cssAxis,color:S.color})):[]}function b(){if(x(),!t)return;let S={x:s.showX!==!1,y:s.showY!==!1,z:s.showZ!==!1};function $(O){if(O.kind==="arrow"){let j=O.key.replace("-","")[0];return S[j]}if(O.kind==="ring")return S[O.key];let H=["x","y","z"][O.axisA],V=["x","y","z"][O.axisB];return S[H]&&S[V]}let w=m();for(let O of h()){if(!$(O))continue;let H=g(O,d(O.key)),V=e.add({polygons:H,objectUrls:[],warnings:[],dispose:()=>{}},{excludeFromAutoCenter:!0,id:`__poly-gizmo-${O.key}`,position:w}),j=p(O);if(V.element.classList.add("polycss-transform-gizmo",j,`${j}--${O.key}`),O.kind==="ring"){let ie=(1-bo)/rn,_=(1+bo)/rn;V.element.style.setProperty("--ring-inner-ratio",`${ie}`),V.element.style.setProperty("--ring-outer-ratio",`${_}`)}i.set(O.key,{handle:V,spec:O})}}function x(){for(let{handle:S}of i.values())S.remove();i.clear(),l=null,a=null}function A(){if(!t)return;let S=m();for(let{handle:$}of i.values())$.setTransform({position:S})}function M(){t&&(i.size===0?b():A())}function P(S){if(t=S,!S){u=[0,0,0],x();return}u=Oi(S.polygons),x(),b()}function E(){P(null)}function k(S){S!==o&&(o=S,t&&(x(),b()))}function C(S,$,w){if(!t||!v)return;let O=[v[0]+$*w[0],v[1]+$*w[1],v[2]+$*w[2]];t.setTransform({position:O}),A(),s.onObjectChange?.({object:t,position:O}),s.onChange?.()}let v=null,B=null,N=S=>{if(!t||s.enabled===!1)return;let $={x:s.showX!==!1,y:s.showY!==!1,z:s.showZ!==!1};if(o==="translate"){for(let w of Po){let O=["x","y","z"][w.axisA],H=["x","y","z"][w.axisB];if(!$[O]||!$[H])continue;let V=i.get(w.key);if(V&&vt(V.handle.element,S.clientX,S.clientY)){S.preventDefault(),S.stopPropagation(),a=w.key,f(),v=(t.transform.position??[0,0,0]).slice(),Hi({axisA:w.axisA,axisB:w.axisB,probeDistanceCss:an(t.polygons)*r,wrapper:V.handle.element,target:t,startClientX:S.clientX,startClientY:S.clientY,translationSnap:s.translationSnap??null,onPlaneDelta:(j,ie,_,X)=>{if(!t||!v)return;let U=[v[0]+j*_[0]+ie*X[0],v[1]+j*_[1]+ie*X[1],v[2]+j*_[2]+ie*X[2]];t.setTransform({position:U}),A(),s.onObjectChange?.({object:t,position:U}),s.onChange?.()},onMouseDown:s.onMouseDown,onMouseUp:s.onMouseUp,onDraggingChanged:j=>{j||(a=null,v=null,f()),s.onDraggingChanged?.(j)}});return}}for(let w of xo){let O=w.key.replace("-","")[0];if(!$[O])continue;let H=i.get(w.key);if(H&&vt(H.handle.element,S.clientX,S.clientY)){S.preventDefault(),S.stopPropagation(),a=w.key,f(),v=(t.transform.position??[0,0,0]).slice(),Ii({cssAxis:w.cssAxis,sign:w.sign,shaftLengthCss:an(t.polygons)*r,wrapper:H.handle.element,target:t,startClientX:S.clientX,startClientY:S.clientY,translationSnap:s.translationSnap??null,onAxisDelta:(V,j)=>C(w,V,j),onMouseDown:s.onMouseDown,onMouseUp:s.onMouseUp,onDraggingChanged:V=>{V||(a=null,v=null,f()),s.onDraggingChanged?.(V)}});return}}}else if(o==="rotate")for(let w of vo){if(!$[w.key])continue;let O=i.get(w.key);if(O&&vt(O.handle.element,S.clientX,S.clientY)){S.preventDefault(),S.stopPropagation(),a=w.key,f(),B=(t.transform.rotation??[0,0,0]).slice(),Vi({cssAxis:w.cssAxis,wrapper:O.handle.element,target:t,startClientX:S.clientX,startClientY:S.clientY,rotationSnap:s.rotationSnap??null,onAngleDelta:H=>{if(!t||!B)return;let V=w.cssAxis===0?-1:1,j=[0,0,0];j[w.cssAxis]=1;let ie=H*V*Math.PI/180,_=vi(B),X=xi(j,ie),U=yi(Pi(X,_));t.setTransform({rotation:U}),s.onObjectChange?.({object:t,rotation:U}),s.onChange?.()},onMouseDown:s.onMouseDown,onMouseUp:s.onMouseUp,onDraggingChanged:H=>{H||(a=null,B=null,f(),t?.rebakeAtlas()),s.onDraggingChanged?.(H)}});return}}};e.host.addEventListener("pointerdown",N,{capture:!0});let Y=S=>{if(!t||a||s.enabled===!1)return;let $=null;for(let[w,O]of i)if(vt(O.handle.element,S.clientX,S.clientY)){$=w;break}$!==l&&(l=$,f())};e.host.addEventListener("pointermove",Y);function te(){e.host.removeEventListener("pointerdown",N,{capture:!0}),e.host.removeEventListener("pointermove",Y),x()}return{attach:P,detach:E,setMode:k,update:M,destroy:te}}var zi=typeof HTMLElement<"u"?HTMLElement:class{},Fi=["mode","target","size","enabled"];function Mo(e){if(e==="translate"||e==="rotate")return e}var Ct=class extends zi{constructor(){super(...arguments);this._tc=null}static get observedAttributes(){return[...Fi]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof be)return t;t=t.parentNode}return null}_findTargetMesh(){let t=this.getAttribute("target");if(!t)return null;let o=this._findScene();if(!o)return null;let r=null;try{r=o.querySelector(`#${t}`)??o.querySelector(t)}catch{r=o.querySelector(`[id="${t}"]`)}return r instanceof ze?r:null}_readOptions(){let t={},o=Mo(this.getAttribute("mode"));o!==void 0&&(t.mode=o);let r=se(this.getAttribute("size"));r!==void 0&&(t.size=r);let s=this.getAttribute("enabled");return s!==null&&(t.enabled=s!=="false"&&s!=="0"),t.onObjectChange=i=>{this.dispatchEvent(new CustomEvent("polycss:object-change",{bubbles:!0,detail:{position:i.position,rotation:i.rotation}}))},t}_attach(){if(this._tc)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let s=()=>{t.removeEventListener("polycss:scene-ready",s),this._attach()};t.addEventListener("polycss:scene-ready",s)}return}this._tc=Ao(o,this._readOptions());let r=this._findTargetMesh();if(r){let s=r.getMeshHandle();s&&this._tc.attach(s)}}connectedCallback(){this._attach()}disconnectedCallback(){this._tc&&(this._tc.destroy(),this._tc=null)}attributeChangedCallback(t,o,r){if(o!==r&&this._tc){if(t==="mode"){let s=Mo(r);s&&this._tc.setMode(s)}else if(t==="target"){let s=this._findTargetMesh();this._tc.attach(s?s.getMeshHandle()??null:null)}}}};function Bi(e,n,t){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let s=r.getBoundingClientRect();if(!(s.width<=0||s.height<=0)&&n>=s.left&&n<=s.right&&t>=s.top&&t<=s.bottom)return!0}return!1}function Co(e,n={}){let t=[],o=new Set;n.onChange&&o.add(n.onChange);function r(){t=n.filter?n.filter(t):t;for(let h of o)try{h(t)}catch(b){console.error("[polycss/createSelect] onChange threw:",b)}}function s(p){t=p,r()}function i(p){n.multiple?t.includes(p)||(t=[...t,p]):t=[p],r()}function l(p){t.includes(p)&&(t=t.filter(h=>h!==p),r())}function a(p){t.includes(p)?t=t.filter(h=>h!==p):n.multiple?t=[...t,p]:t=[p],r()}function u(){t.length!==0&&(t=[],r())}function m(p){return t.includes(p)}function d(p,h){for(let b of e.meshes())if(!b.element.classList.contains("polycss-transform-gizmo")&&Bi(b.element,p,h))return b;return null}let f=p=>{let h=p.target;if(h?.closest(".polycss-transform-gizmo"))return;let b=e.findMeshByElement(h)??d(p.clientX,p.clientY);if(!b){n.onPointerMissed&&n.onPointerMissed(p),n.clearOnMiss!==!1&&u();return}n.multiple&&(p.shiftKey||p.metaKey||p.ctrlKey)?a(b):t.length===1&&t[0]===b?u():s([b])};e.host.addEventListener("click",f);function g(){e.host.removeEventListener("click",f),o.clear()}return{get selected(){return t},set:s,add:i,remove:l,toggle:a,clear:u,has:m,destroy:g}}var Ni=typeof HTMLElement<"u"?HTMLElement:class{},$i=["multiple","clear-on-miss"],St=class extends Ni{constructor(){super(...arguments);this._selection=null}static get observedAttributes(){return[...$i]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof be)return t;t=t.parentNode}return null}_readOptions(){return{multiple:this.hasAttribute("multiple"),clearOnMiss:!this.hasAttribute("clear-on-miss")||this.getAttribute("clear-on-miss")!=="false",onChange:t=>{this.dispatchEvent(new CustomEvent("polycss:select",{bubbles:!0,detail:{selected:t}}))}}}_attach(){if(this._selection)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._selection=Co(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._selection&&(this._selection.destroy(),this._selection=null)}attributeChangedCallback(t,o,r){o!==r&&(this._selection&&(this._selection.destroy(),this._selection=null),this._attach())}};typeof customElements<"u"&&(customElements.get("poly-scene")||customElements.define("poly-scene",be),customElements.get("poly-mesh")||customElements.define("poly-mesh",ze),customElements.get("poly-polygon")||customElements.define("poly-polygon",st),customElements.get("poly-axes-helper")||customElements.define("poly-axes-helper",it),customElements.get("poly-directional-light-helper")||customElements.define("poly-directional-light-helper",at),customElements.get("poly-orbit-controls")||customElements.define("poly-orbit-controls",gt),customElements.get("poly-map-controls")||customElements.define("poly-map-controls",yt),customElements.get("poly-perspective-camera")||customElements.define("poly-perspective-camera",bt),customElements.get("poly-orthographic-camera")||customElements.define("poly-orthographic-camera",xt),customElements.get("poly-transform-controls")||customElements.define("poly-transform-controls",Ct),customElements.get("poly-select")||customElements.define("poly-select",St));export{it as PolyAxesHelperElement,at as PolyDirectionalLightHelperElement,yt as PolyMapControlsElement,ze as PolyMeshElement,gt as PolyOrbitControlsElement,xt as PolyOrthographicCameraElement,bt as PolyPerspectiveCameraElement,st as PolyPolygonElement,be as PolySceneElement,St as PolySelectElement,Ct as PolyTransformControlsElement};
444
+ `;var Il=750;function zr(e){return!Object.prototype.hasOwnProperty.call(e,"seamBleed")||e.seamBleed!==void 0?e:{...e,seamBleed:Gr}}var Vl=1,We=El,zl=Symbol.for("polycss.animation.triangleFrameTarget"),Bl={key:"non-cullable",normal:[1,1,0]};function Br(){return[Bl]}function Nl(e,n){let t=e?.disable??[],o=n?.disable??[];if(t.length!==o.length)return!1;for(let r of t)if(!o.includes(r))return!1;return!0}function Ul(e,n){return e===n?!0:!e||!n?!1:e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2]}function $l(e,n){return e===n?!0:(e?.color??"#000000")===(n?.color??"#000000")&&(e?.opacity??.25)===(n?.opacity??.25)&&(e?.lift??.05)===(n?.lift??.05)&&(e?.maxExtend??2e3)===(n?.maxExtend??2e3)}function Nr(e){let n=[];return e.position&&n.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&n.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):n.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&n.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&n.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&n.push(`rotateZ(${e.rotation[2]}deg)`)),n.length>0?n.join(" "):void 0}function Ur(e,n=[0,0,0],t=1){let o=e.state,r=o.rotX,i=o.rotY,l=(o.zoom??Vl)*t,c=(o.distance??0)*t,a=o.target??[0,0,0],m=a[0]+n[0],f=a[1]+n[1],h=a[2]+n[2],g=f*We,x=m*We,y=h*We;return`${c!==0?`translateZ(${-c}px) `:""}scale(${l}) rotateX(${r}deg) rotate(${i}deg) translate3d(${-g}px, ${-x}px, ${-y}px)`}function Gl(e){let n=e.trim();if(!n||n==="normal")return 1;let t=n.endsWith("%")?Number(n.slice(0,-1))/100:Number(n);return Number.isFinite(t)&&t>0?t:1}function Yl(e){let n=e.ownerDocument?.defaultView;if(!n)return 1;let t=1;for(let o=e;o;o=o.parentElement)t*=Gl(n.getComputedStyle(o).getPropertyValue("zoom"));return Number.isFinite(t)&&t>0?t:1}function $r(e,n){return n===1?e:e*n}function jl(e,n){Math.abs(n-1)<1e-6?e.style.removeProperty("zoom"):e.style.setProperty("zoom",String(1/n))}var Xl=.1;function Wl(e){if(e.vertices.length<3)return null;let n=e.vertices[0],t=0,o=0,r=0;for(let h=1;h+1<e.vertices.length;h++){let g=e.vertices[h],x=e.vertices[h+1],y=g[1]-n[1],P=g[0]-n[0],v=g[2]-n[2],E=x[1]-n[1],H=x[0]-n[0],k=x[2]-n[2];t-=P*k-v*H,o-=v*E-y*k,r-=y*H-P*E}let i=Math.hypot(t,o,r);if(i<1e-9)return null;t/=i,o/=i,r/=i;let l=1/Xl,c=Math.round(t*l)/l,a=Math.round(o*l)/l,m=Math.round(r*l)/l,f=Math.hypot(c,a,m);return f<1e-9?null:{key:c+","+a+","+m,vec:[c/f,a/f,m/f]}}function Yr(e,n){if(!e||typeof e.appendChild!="function")throw new Error("createPolyScene: host must be an HTMLElement");if(!n?.camera)throw new Error("createPolyScene: a camera handle is required. Use createPolyCamera({...}) or createPolyPerspectiveCamera({...}) and pass as { camera }.");let t=n.camera;e.ownerDocument&&Fr(e.ownerDocument),e.ownerDocument?.defaultView&&e.ownerDocument.defaultView.getComputedStyle(e).position==="static"&&(e.style.position="relative");let{camera:o,...r}=n,i=zr({seamBleed:Gr,...r}),l=Yl(e),c=[0,0,0],a=e.ownerDocument??document,m=a.createElement("div");m.className="polycss-camera",z(m,i),e.appendChild(m);let f=a.createElement("div");f.className="polycss-scene",f.setAttribute("aria-hidden","true"),O(f,i),m.appendChild(f);let h=new Set,g=null,x=[];function y(){for(let s of x)s.parentNode&&s.parentNode.removeChild(s);x.length=0,k()}let P=new Map,v=new Map;function E(s){for(let d of s)d.svg&&d.svg.parentNode&&d.svg.parentNode.removeChild(d.svg),d.svg=null,d.path=null}function H(s){if(s){let d=P.get(s);d&&E(d),P.delete(s),v.delete(s)}else{for(let d of P.values())E(d);P.clear(),v.clear()}}function k(){for(let s of P.values())for(let d of s)d.svg&&d.visible&&(d.svg.style.display="none",d.visible=!1)}let N=new Map,R=new Map;function K(s){s?(N.delete(s),R.delete(s)):(N.clear(),R.clear())}function z(s,d){let S=t.perspectiveStyle;if(S==="none")s.style.perspective=`${$r(1e6,l)}px`;else{let T=parseFloat(S);Number.isFinite(T)&&(s.style.perspective=`${$r(T,l)}px`)}}function O(s,d){jl(s,l),s.style.transform=Ur(t,c,l),U(s,d)}function $(s){s.style.transform=Ur(t,c,l)}function U(s,d){let S=d.textureLighting==="dynamic";s.dataset.polycssLighting=d.textureLighting??"baked";let T=["--plx","--ply","--plz","--plr","--plg","--plb","--pli","--par","--pag","--pab","--pai","--clx","--cly","--clz"];if(!S){for(let Pe of T)s.style.removeProperty(Pe);return}let I=d.directionalLight?.direction??[.4,-.7,.59],V=Math.hypot(I[0],I[1],I[2])||1,F=I[0]/V,q=I[1]/V,Y=I[2]/V,B=_o(d.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],ee=_o(d.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],j=d.directionalLight?.intensity??1,b=d.ambientLight?.intensity??.4,J=Pe=>(Pe/255).toFixed(4);s.style.setProperty("--plx",F.toFixed(4)),s.style.setProperty("--ply",q.toFixed(4)),s.style.setProperty("--plz",Y.toFixed(4)),s.style.setProperty("--plr",J(B[0])),s.style.setProperty("--plg",J(B[1])),s.style.setProperty("--plb",J(B[2])),s.style.setProperty("--pli",j.toFixed(4)),s.style.setProperty("--par",J(ee[0])),s.style.setProperty("--pag",J(ee[1])),s.style.setProperty("--pab",J(ee[2])),s.style.setProperty("--pai",b.toFixed(4));let Ce=Y,Te=Math.sign(Ce||1)*Math.max(Math.abs(Ce),.01);s.style.setProperty("--clx",F.toFixed(4)),s.style.setProperty("--cly",q.toFixed(4)),s.style.setProperty("--clz",Te.toFixed(4))}function ie(s){s.voxelRenderer?.dispose(),s.voxelRenderer=void 0,C(s.rendered,s.disposeAtlas),s.disposeAtlas=void 0,s.rendered.length=0,s.renderedByPolygonIndex=[],s.cameraCullGroups=[],s.cameraCullSignature="",p(s);for(let d of Array.from(s.wrapper.children))d instanceof HTMLElement&&d.classList.contains("polycss-bucket")&&d.remove();s.hasBuckets=!1}function xe(s){for(let d of Array.from(s.wrapper.childNodes)){if(!(d instanceof HTMLElement))return d;if(d.classList.contains("polycss-bucket")||d.classList.contains("polycss-shadow"))continue;let S=d.tagName.toLowerCase();if(!(S==="b"||S==="i"||S==="s"||S==="u"||S==="q"))return d}return null}function u(s,d,S){S?.parentNode===s.wrapper?s.wrapper.insertBefore(d,S):s.wrapper.appendChild(d)}function p(s){for(let d of s.shadowRendered)d.parentNode&&d.parentNode.removeChild(d);s.shadowRendered.length=0,y()}function C(s,d){d?.();for(let S of s){try{S.dispose()}catch{}S.element.parentNode&&S.element.parentNode.removeChild(S.element)}}function A(s,d,S){s.rendered=d,s.renderedByPolygonIndex=[];for(let T of d)s.renderedByPolygonIndex[T.polygonIndex]=T;s.disposeAtlas=S}function w(s,d){let S=s.renderedByPolygonIndex[d];return S?.polygonIndex===d?S:void 0}function M(s){for(let d of Array.from(s.wrapper.children))d instanceof HTMLElement&&d.classList.contains("polycss-bucket")&&d.remove();s.hasBuckets=!1;for(let d of s.rendered)d.element.parentNode&&d.element.parentNode.removeChild(d.element)}function se(s,d){let S=s.polygons[d.polygonIndex];return s.stableDom&&S?Vr(S):d.plan?.normal??(S?Vr(S):null)}function he(s){if(!Ee(s))return s.rendered;let d=_(s);return s.rendered.filter(S=>ne(s,S,wo,d))}function _(s){return{rotX:t.state.rotX,rotY:t.state.rotY,meshRotation:s.handle.transform.rotation}}function ne(s,d,S=wo,T=_(s)){let I=se(s,d);return I===null||kl(I,T,S)}function oe(s){if(s.excludeFromAutoCenter){s.cameraCullGroups=[];return}let d=new Map;for(let S of s.rendered){let T=se(s,S);if(!T)continue;if(!Rl(T)){s.cameraCullGroups=Br();return}let I=Al(T);if(!d.has(I)&&(d.set(I,T),d.size>Tl)){s.cameraCullGroups=Br();return}}s.cameraCullGroups=Array.from(d,([S,T])=>({key:S,normal:T}))}function Se(s){return Ee(s)?Ml(s.cameraCullGroups,_(s)):"all"}function Ee(s){return!s.excludeFromAutoCenter&&Dl(s.cameraCullGroups)}function De(s){s.cameraCullSignature=Ee(s)?Se(s):"all"}function Ve(s,d){let S=new Array(s.rendered.length),T=!1,I=_(s);for(let j=0;j<s.rendered.length;j+=1){let b=s.rendered[j],J=ne(s,b,d,I);S[j]=J}let V=null,F=null,q=()=>{if(!(!V||!F)){if(V===F)V.remove();else{let j=a.createRange();j.setStartBefore(V),j.setEndAfter(F),j.deleteContents(),j.detach()}V=null,F=null,T=!0}};for(let j=0;j<s.rendered.length;j+=1){let b=s.rendered[j];!S[j]&&b.element.parentNode===s.wrapper?(F&&F.nextSibling===b.element||(q(),V=b.element),F=b.element):q()}q();let Y=j=>{for(let b=j;b<s.rendered.length;b+=1){let J=s.rendered[b].element;if(J.parentNode===s.wrapper)return J}return xe(s)},B=-1,ee=j=>{if(B<0)return;let b=a.createDocumentFragment();for(let J=B;J<j;J+=1){let Ce=s.rendered[J];Ue(s,Ce),b.appendChild(Ce.element)}u(s,b,Y(j)),B=-1,T=!0};for(let j=0;j<s.rendered.length;j+=1){let b=s.rendered[j];S[j]&&b.element.parentNode!==s.wrapper?B<0&&(B=j):ee(j)}return ee(s.rendered.length),T}function _e(s,d=!1){if(s.voxelRenderer){d?s.voxelRenderer.render(_(s)):s.voxelRenderer.syncCamera(_(s)),s.cameraCullSignature="voxel-direct";return}if(!Ee(s)){let I=s.cameraCullSignature!=="all";s.cameraCullSignature="all",I&&ke(s);return}if(s.hasBuckets){ze(s,d);return}let S=Se(s);if(!d&&S===s.cameraCullSignature)return;let T=Ve(s,wo);s.cameraCullSignature=S,T&&ae(s)}function ze(s,d=!1){let S=Ee(s)?Se(s):"all";!d&&S===s.cameraCullSignature||ke(s)}function Je(s,d){return se(s,d)}function Ue(s,d){if(i.textureLighting!=="dynamic")return;let S=Je(s,d);S&&(d.element.style.setProperty("--pnx",S[0].toFixed(4)),d.element.style.setProperty("--pny",S[1].toFixed(4)),d.element.style.setProperty("--pnz",S[2].toFixed(4)))}function Xe(s){M(s),s.hasBuckets=!1;let d=s.skipBucketNormalCleanupOnce;s.skipBucketNormalCleanupOnce=!1;let S=a.createDocumentFragment(),T=i.textureLighting==="dynamic"&&!s.stableDom,I=new Map,V=[];for(let F of he(s)){let q=s.polygons[F.polygonIndex],Y=T&&q?Wl(q):null;if(!Y){V.push(F);continue}let B=Y.key+"|"+(q.color??""),ee=I.get(B);ee||(ee={vec:Y.vec,items:[]},I.set(B,ee)),ee.items.push(F)}for(let F of V)Ue(s,F),S.appendChild(F.element);for(let F of I.values()){if(F.items.length<2){for(let Y of F.items)Ue(s,Y),S.appendChild(Y.element);continue}let q=a.createElement("div");q.className="polycss-bucket",s.hasBuckets=!0,q.style.setProperty("--pnx",String(F.vec[0])),q.style.setProperty("--pny",String(F.vec[1])),q.style.setProperty("--pnz",String(F.vec[2]));for(let Y of F.items)q.appendChild(Y.element),(!d||Y.kind==="triangle")&&(Y.element.style.removeProperty("--pnx"),Y.element.style.removeProperty("--pny"),Y.element.style.removeProperty("--pnz"));S.appendChild(q)}u(s,S,xe(s)),De(s)}function Ht(){return new Promise(s=>setTimeout(s,0))}async function It(s,d){if(i.textureLighting==="dynamic"&&!s.stableDom)return Xe(s),!d();M(s);let T=a.createDocumentFragment(),I=xe(s),V=0;for(let F of he(s)){if(d())return!1;Ue(s,F),T.appendChild(F.element),V++,V%Il===0&&(u(s,T,I),T=a.createDocumentFragment(),await Ht())}return T.childNodes.length>0&&u(s,T,I),De(s),!d()}function lt(s,d){let S=i.textureLighting==="dynamic",T=i.directionalLight?.direction,I=d&&(d[0]!==0||d[1]!==0||d[2]!==0);if(!S||!I||!T){if(s.lightOverrideSignature==="clear")return;s.wrapper.style.removeProperty("--plx"),s.wrapper.style.removeProperty("--ply"),s.wrapper.style.removeProperty("--plz"),s.lightOverrideSignature="clear";return}let V=Ir(T,d),F=Math.hypot(V[0],V[1],V[2])||1,q=(V[0]/F).toFixed(4),Y=(V[1]/F).toFixed(4),B=(V[2]/F).toFixed(4),ee=`${q}|${Y}|${B}`;s.lightOverrideSignature!==ee&&(s.wrapper.style.setProperty("--plx",q),s.wrapper.style.setProperty("--ply",Y),s.wrapper.style.setProperty("--plz",B),s.lightOverrideSignature=ee)}function ht(s,d){d.paintColor?s.style.setProperty("--polycss-paint",d.paintColor):s.style.getPropertyValue("--polycss-paint")&&s.style.removeProperty("--polycss-paint"),d.dynamicColor?(s.style.setProperty("--psr",(d.dynamicColor.r/255).toFixed(4)),s.style.setProperty("--psg",(d.dynamicColor.g/255).toFixed(4)),s.style.setProperty("--psb",(d.dynamicColor.b/255).toFixed(4))):(s.style.getPropertyValue("--psr")||s.style.getPropertyValue("--psg")||s.style.getPropertyValue("--psb"))&&(s.style.removeProperty("--psr"),s.style.removeProperty("--psg"),s.style.removeProperty("--psb"))}function eo(s,d){let S=Fl(d??"#cccccc");s.style.setProperty("--psr",(S.r/255).toFixed(4)),s.style.setProperty("--psg",(S.g/255).toFixed(4)),s.style.setProperty("--psb",(S.b/255).toFixed(4))}function to(s,d){if(!s.plan||s.kind==="atlas"||s.plan.texture)return!1;let S=i.textureLighting??"baked",T={directionalLight:i.directionalLight,ambientLight:i.ambientLight,textureLighting:S,textureQuality:i.textureQuality,seamBleed:i.seamBleed,strategies:i.strategies},I=mo(s.plan,d,s.plan.normal,S,T);return Tt(s.element,I,S),!0}function no(s,d,S){let T=s.polygons[d];if(!T)return!1;let I=w(s,d);if(!I)return!1;let V=i.textureLighting??"baked";return V==="dynamic"?(eo(I.element,S),!0):V==="baked"?to(I,T):!1}function G(s,d){let S=s.polygons[d];if(!S)return!1;let T=w(s,d);return T?(Fe(T.element,S),!0):!1}function ge(s,d,S){return!(S.length===0||!S.every(T=>T==="color"||T==="data")||S.includes("color")&&!no(s,d,s.polygons[d]?.color)||S.includes("data")&&!G(s,d))}function ae(s){we()}function we(){y();let s=[];for(let B of h)!B.disposed&&B.castShadow&&s.push(B);if(s.length===0)return;let d=i.shadow?.color??"#000000",S=i.shadow?.opacity??.25,T=_o(d)?.rgb??[0,0,0],I=T[0],V=T[1],F=T[2],q=i.directionalLight?.direction??[.4,-.7,.59],Y=new Map;for(let B of s)Y.set(B,_l(B.polygons,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.4,preserveDoubleSidedBackfaces:!1}));g!==null&&Vt(s,Y,q,g,I,V,F,S);for(let B of h)B.disposed||!B.receiveShadow||yt(s,Y,B,q,I,V,F,S)}function Vt(s,d,S,T,I,V,F,q){let Y=[],B=1/0,ee=1/0,j=-1/0,b=-1/0,J=1/0,Ce=1/0,Te=-1/0,Pe=-1/0;for(let ue of s){let de=ue.handle.transform.position??[0,0,0],fe=d.get(ue);for(let et of ue.rendered){if(fe.has(et.polygonIndex)||!et.plan)continue;let Bt=ue.polygons[et.polygonIndex];if(!Bt)continue;let ut=[];for(let dt of Bt.vertices){let Ae=[dt[1]*We+de[0],dt[0]*We+de[1],dt[2]*We+de[2]];Ae[0]<J&&(J=Ae[0]),Ae[1]<Ce&&(Ce=Ae[1]),Ae[0]>Te&&(Te=Ae[0]),Ae[1]>Pe&&(Pe=Ae[1]);let Le=Hl(Ae,S,T);ut.push(Le),Le[0]<B&&(B=Le[0]),Le[1]<ee&&(ee=Le[1]),Le[0]>j&&(j=Le[0]),Le[1]>b&&(b=Le[1])}let Be=ut.length>3?Hr(ut):ut;Be.length>=3&&Y.push(Be)}}if(Y.length===0)return;let me=i.shadow?.maxExtend??2e3,W=Math.max(B,J-me),ce=Math.max(ee,Ce-me),te=Math.min(j,Te+me),L=Math.min(b,Pe+me),D=te-W,Z=L-ce;if(!(D>0)||!(Z>0))return;let re="";for(let ue of Y){let de=Lo(ue);re+=`M${(de[0][0]-W).toFixed(3)},${(de[0][1]-ce).toFixed(3)}`;for(let fe=1;fe<de.length;fe++)re+=`L${(de[fe][0]-W).toFixed(3)},${(de[fe][1]-ce).toFixed(3)}`;re+="Z"}let pe="http://www.w3.org/2000/svg",X=a.createElementNS(pe,"svg");X.setAttribute("class","polycss-shadow polycss-shadow-svg"),X.setAttribute("width",String(D)),X.setAttribute("height",String(Z)),X.setAttribute("viewBox",`0 0 ${D} ${Z}`),X.setAttribute("style",`position:absolute;top:0;left:0;display:block;overflow:hidden;transform-origin:0 0;pointer-events:none;will-change:transform;transform:translate3d(${W.toFixed(3)}px,${ce.toFixed(3)}px,${T.toFixed(3)}px)`);let Q=a.createElementNS(pe,"path");Q.setAttribute("d",re);let ye=`rgb(${I},${V},${F})`;Q.setAttribute("fill",ye),Q.setAttribute("fill-rule","nonzero"),Q.setAttribute("stroke",ye),Q.setAttribute("stroke-width","2"),Q.setAttribute("stroke-linejoin","round"),Q.setAttribute("opacity",q.toFixed(4)),X.appendChild(Q),x.push(X);let be=f.firstChild;be?f.insertBefore(X,be):f.appendChild(X)}function zt(s,d,S){let T=[];for(let Y of s.polygons){if(Y.vertices.length<3)continue;let B=S(Y.vertices[0],d),ee=S(Y.vertices[1],d),j=S(Y.vertices[2],d),b=[ee[0]-B[0],ee[1]-B[1],ee[2]-B[2]],J=[j[0]-B[0],j[1]-B[1],j[2]-B[2]],Ce=J[1]*b[2]-J[2]*b[1],Te=J[2]*b[0]-J[0]*b[2],Pe=J[0]*b[1]-J[1]*b[0],me=Math.hypot(Ce,Te,Pe);if(me<1e-9)continue;let W=[Ce/me,Te/me,Pe/me],ce=Math.hypot(b[0],b[1],b[2]);if(ce<1e-9)continue;let te=[b[0]/ce,b[1]/ce,b[2]/ce],L=[W[1]*te[2]-W[2]*te[1],W[2]*te[0]-W[0]*te[2],W[0]*te[1]-W[1]*te[0]],D=W[0]*B[0]+W[1]*B[1]+W[2]*B[2];T.push({face:Y,O:B,n:W,u:te,v:L,offset:D})}let I=.001,V=.5,F=[];for(let Y of T){let B=!1;for(let ee of F){let j=ee.rep;if(!(1-(Y.n[0]*j.n[0]+Y.n[1]*j.n[1]+Y.n[2]*j.n[2])>I)&&!(Math.abs(Y.offset-j.offset)>V)){ee.faces.push(Y),B=!0;break}}B||F.push({rep:Y,faces:[Y]})}let q=[];for(let Y of F){let{O:B,n:ee,u:j,v:b}=Y.rep,J=[];for(let Te of Y.faces)for(let Pe of Te.face.vertices){let me=S(Pe,d),W=me[0]-B[0],ce=me[1]-B[1],te=me[2]-B[2];J.push([W*j[0]+ce*j[1]+te*j[2],W*b[0]+ce*b[1]+te*b[2]])}if(J.length<3)continue;let Ce=Hr(J);Ce.length<3||q.push({O:B,n:ee,u:j,v:b,outlineUv:Lo(Ce)})}return q}function yt(s,d,S,T,I,V,F,q){let Y=Math.hypot(T[0],T[1],T[2])||1,B=T[0]/Y,ee=T[1]/Y,j=T[2]/Y,b="http://www.w3.org/2000/svg",J=S.handle.transform.position??[0,0,0],Ce=(W,ce)=>[W[1]*We+ce[0],W[0]*We+ce[1],W[2]*We+ce[2]],Te=`${S.polygons.length}|${J.join(",")}`,Pe=P.get(S);(Pe===void 0||v.get(S)!==Te)&&(Pe=zt(S,J,Ce).map(ce=>{let{O:te,n:L,u:D,v:Z,outlineUv:re}=ce,pe=1/0,X=1/0,Q=-1/0,ye=-1/0;for(let Be of re)Be[0]<pe&&(pe=Be[0]),Be[1]<X&&(X=Be[1]),Be[0]>Q&&(Q=Be[0]),Be[1]>ye&&(ye=Be[1]);let be=Q-pe,ue=ye-X,de=5,fe=te[0]+pe*D[0]+X*Z[0]+de*L[0],et=te[1]+pe*D[1]+X*Z[1]+de*L[1],Re=te[2]+pe*D[2]+X*Z[2]+de*L[2],ut=`matrix3d(${[D[0],D[1],D[2],0,Z[0],Z[1],Z[2],0,L[0],L[1],L[2],0,fe,et,Re,1].map(Be=>Be.toFixed(4)).join(",")})`;return{O:te,n:L,u:D,v:Z,outlineUv:re,minU:pe,minV:X,width:be,height:ue,matrixCss:ut,svg:null,path:null,visible:!1}}),P.set(S,Pe),v.set(S,Te));let me=[];for(let W of s){if(W===S)continue;let ce=W.handle.transform.position??[0,0,0],te=`${W.polygons.length}|${ce.join(",")}`,L=N.get(W);if(L===void 0||R.get(W)!==te){let D=d.get(W);L=[];for(let Z of W.rendered){if(D.has(Z.polygonIndex)||!Z.plan)continue;let pe=W.polygons[Z.polygonIndex];if(!pe)continue;let X=pe.vertices.map(Re=>Ce(Re,ce)),Q=1/0,ye=1/0,be=1/0,ue=-1/0,de=-1/0,fe=-1/0;for(let Re of X)Re[0]<Q&&(Q=Re[0]),Re[0]>ue&&(ue=Re[0]),Re[1]<ye&&(ye=Re[1]),Re[1]>de&&(de=Re[1]),Re[2]<be&&(be=Re[2]),Re[2]>fe&&(fe=Re[2]);let et=[[Q,ye,be],[ue,ye,be],[Q,de,be],[ue,de,be],[Q,ye,fe],[ue,ye,fe],[Q,de,fe],[ue,de,fe]];L.push({wv:X,bboxCorners:et})}N.set(W,L),R.set(W,te)}for(let D of L)me.push(D)}for(let W of Pe){let{O:ce,n:te,u:L,v:D,outlineUv:Z,minU:re,minV:pe,width:X,height:Q,matrixCss:ye}=W,be=B*te[0]+ee*te[1]+j*te[2];if(be<=1e-6)continue;let ue=ve=>(ve[0]-ce[0])*te[0]+(ve[1]-ce[1])*te[1]+(ve[2]-ce[2])*te[2],de=(ve,qe,bt,vt)=>{let tt=bt/(bt-vt);return[ve[0]+tt*(qe[0]-ve[0]),ve[1]+tt*(qe[1]-ve[1]),ve[2]+tt*(qe[2]-ve[2])]},fe=ve=>{let qe=ve[0]-ce[0],bt=ve[1]-ce[1],vt=ve[2]-ce[2],tt=(qe*te[0]+bt*te[1]+vt*te[2])/be,Nt=ve[0]-tt*B,Ut=ve[1]-tt*ee,Pt=ve[2]-tt*j,nt=Nt-ce[0],mt=Ut-ce[1],Ge=Pt-ce[2];return[nt*L[0]+mt*L[1]+Ge*L[2],nt*D[0]+mt*D[1]+Ge*D[2]]},et=[],Re=re,Bt=pe,ut=W.minU+X,Be=W.minV+Q;for(let ve of me){let qe=ve.bboxCorners,bt=!1,vt=1/0,tt=1/0,Nt=-1/0,Ut=-1/0;for(let nt=0;nt<8;nt++){let mt=qe[nt];ue(mt)>=0&&(bt=!0);let Ge=fe(mt);Ge[0]<vt&&(vt=Ge[0]),Ge[0]>Nt&&(Nt=Ge[0]),Ge[1]<tt&&(tt=Ge[1]),Ge[1]>Ut&&(Ut=Ge[1])}if(!bt||Nt<Re||vt>ut||Ut<Bt||tt>Be)continue;let Pt=ve.wv;for(let nt=1;nt<Pt.length-1;nt++){let mt=Pt[0],Ge=Pt[nt],Bo=Pt[nt+1],vi=ue(mt),xi=ue(Ge),Pi=ue(Bo),an=[],No=[[mt,vi],[Ge,xi],[Bo,Pi]];for(let cn=0;cn<3;cn++){let[$o,so]=No[cn],[Ei,Go]=No[(cn+1)%3];so>=0&&an.push($o),so>=0!=Go>=0&&an.push(de($o,Ei,so,Go))}if(an.length<3)continue;let Si=an.map(fe),Ci=Lo(Si),Uo=wl(Ci,Z);Uo.length<3||et.push(Uo)}}if(et.length===0||!(X>0)||!(Q>0))continue;let dt="";for(let ve of et){dt+=`M${(ve[0][0]-re).toFixed(1)},${(ve[0][1]-pe).toFixed(1)}`;for(let qe=1;qe<ve.length;qe++)dt+=`L${(ve[qe][0]-re).toFixed(1)},${(ve[qe][1]-pe).toFixed(1)}`;dt+="Z"}let Ae=W.svg,Le=W.path;!Ae||!Le?(Ae=a.createElementNS(b,"svg"),Ae.setAttribute("class","polycss-shadow polycss-shadow-svg polycss-shadow-receiver"),Ae.setAttribute("width",String(X)),Ae.setAttribute("height",String(Q)),Ae.setAttribute("viewBox",`0 0 ${X} ${Q}`),Ae.setAttribute("style",`position:absolute;top:0;left:0;display:block;overflow:hidden;transform-origin:0 0;pointer-events:none;will-change:transform;transform:${ye}`),Le=a.createElementNS(b,"path"),Le.setAttribute("fill-rule","nonzero"),Ae.appendChild(Le),f.insertBefore(Ae,f.firstChild),W.svg=Ae,W.path=Le):W.visible||(Ae.style.display="block"),W.visible=!0,Le.setAttribute("d",dt);let Vo=`rgb(${I},${V},${F})`;Le.getAttribute("fill")!==Vo&&Le.setAttribute("fill",Vo);let zo=q.toFixed(4);Le.getAttribute("opacity")!==zo&&Le.setAttribute("opacity",zo)}}function ke(s){if(s.voxelRenderer){s.voxelRenderer.render(_(s)),s.cameraCullSignature="voxel-direct";return}p(s),Xe(s),ae(s)}function Qe(s){return!!s.voxelSource&&i.textureLighting!=="dynamic"&&!s.stableDom&&!s.castShadow}function Ie(s,d){ie(s);let S=i.directionalLight,T=d?{...S,direction:d}:S;if(Qe(s)){let F=kr({doc:a,wrapper:s.wrapper,polygons:s.parseResult.polygons,directionalLight:T,ambientLight:i.ambientLight});if(F){s.voxelRenderer=F,F.render(_(s)),s.cameraCullSignature="voxel-direct";return}}let I={doc:a,directionalLight:T,ambientLight:i.ambientLight,textureLighting:i.textureLighting,textureQuality:i.textureQuality,seamBleed:i.seamBleed,strategies:i.strategies},V=s.stableDom?(()=>{let F=wt(s.polygons,I);return ht(s.wrapper,F),Qt(s.polygons,{...I,solidPaintDefaults:F})??Jt(s.polygons,{...I,solidPaintDefaults:F})})():Jt(s.polygons,{...I,computeSolidPaintDefaults:!0,skipDynamicNormalVars:i.textureLighting==="dynamic"});s.stableDom||ht(s.wrapper,V.solidPaintDefaults??{}),A(s,V.rendered,V.dispose),s.skipBucketNormalCleanupOnce=i.textureLighting==="dynamic"&&!s.stableDom,oe(s),Xe(s),ae(s)}function $e(){let s=1/0,d=!1;for(let V of h)if(!V.disposed&&V.receiveShadow){d=!0;break}for(let V of h){if(V.disposed||!(d?V.receiveShadow:V.castShadow))continue;let q=V.handle.transform.position?.[2]??0;for(let Y of V.polygons)for(let B of Y.vertices){let ee=B[2]+q;ee<s&&(s=ee)}}if(!Number.isFinite(s)){let V=g!==null;g=null,V&&y();return}let S=i.shadow?.lift??.05,T=(s+S)*We,I=g;g=T,I!==T&&we()}async function oo(s,d){ie(s);let S={doc:a,directionalLight:i.directionalLight,ambientLight:i.ambientLight,textureLighting:i.textureLighting,textureQuality:i.textureQuality,seamBleed:i.seamBleed,strategies:i.strategies},T=s.stableDom?Qt(s.polygons,S):null;if(T){let F=wt(s.polygons,S);return ht(s.wrapper,F),A(s,T.rendered,T.dispose),oe(s),Xe(s),ae(s),!d()}let I=await bn(s.polygons,{...S,skipDynamicNormalVars:i.textureLighting==="dynamic"},d);if(d())return I.dispose(),!1;ht(s.wrapper,I.solidPaintDefaults),A(s,I.rendered,I.dispose),s.skipBucketNormalCleanupOnce=i.textureLighting==="dynamic"&&!s.stableDom,oe(s);let V=await It(s,d);return V&&ae(s),V}function at(){let s=c,d=[0,0,0];if(i.autoCenter){let S=[];for(let T of h)!T.disposed&&!T.excludeFromAutoCenter&&S.push(...T.polygons);if(S.length>0){let T=Ll(S);d=[(T.min[0]+T.max[0])/2,(T.min[1]+T.max[1])/2,(T.min[2]+T.max[2])/2]}}s[0]===d[0]&&s[1]===d[1]&&s[2]===d[2]||(c=d,O(f,i))}function ro(s,d={}){let T=(f.ownerDocument??document).createElement("div");T.className="polycss-mesh",d.id&&T.setAttribute("data-poly-mesh-id",d.id);let I={...d},V=d.merge!==!1,F=!!d.stableDom,q=0,Y=Nr(I);Y&&(T.style.transform=Y);let B=(L,D)=>s.voxelSource||!D?L:Ol(L,{meshResolution:d.meshResolution}),ee=B(s.polygons,V);function j(L){if(L.length===0){T.style.removeProperty("--origin");return}let D=1/0,Z=1/0,re=1/0,pe=-1/0,X=-1/0,Q=-1/0;for(let de of L)for(let fe of de.vertices)fe[0]<D&&(D=fe[0]),fe[0]>pe&&(pe=fe[0]),fe[1]<Z&&(Z=fe[1]),fe[1]>X&&(X=fe[1]),fe[2]<re&&(re=fe[2]),fe[2]>Q&&(Q=fe[2]);if(!Number.isFinite(D)){T.style.removeProperty("--origin");return}let ye=(Z+X)/2*We,be=(D+pe)/2*We,ue=(re+Q)/2*We;T.style.setProperty("--origin",`${ye}px ${be}px ${ue}px`)}j(ee),f.appendChild(T);let b={handle:void 0,wrapper:T,parseResult:s,rendered:[],renderedByPolygonIndex:[],shadowRendered:[],polygons:ee,voxelSource:s.voxelSource,disposed:!1,stableDom:F,hasBuckets:!1,skipBucketNormalCleanupOnce:!1,excludeFromAutoCenter:!!d.excludeFromAutoCenter,castShadow:!!d.castShadow,receiveShadow:!!d.receiveShadow,cameraCullGroups:[],cameraCullSignature:"",lightOverrideSignature:"clear",stableTriangleColorFrame:0,bakedRotation:d.rotation?[...d.rotation]:[0,0,0]},J=null,Ce=0,Te=-1,Pe=null;function me(){J=null,Pe=null,Te=-1}function W(){let L=J;if(!L||L.polygonCount!==b.polygons.length)return b.polygons;if(Pe&&Te===Ce)return Pe;let D=L.vertices,Z=new Array(L.polygonCount);for(let re=0;re<L.polygonCount;re++){let pe=b.polygons[re],X=re*9;Z[re]={...pe,color:L.colors?.[re]??pe.color,vertices:[[D[X],D[X+1],D[X+2]],[D[X+3],D[X+4],D[X+5]],[D[X+6],D[X+7],D[X+8]]]}}return Pe=Z,Te=Ce,Z}function ce(L,D){let Z=L?.stableTriangleUpdateMode==="color-only";b.stableTriangleColorFrame++;let re=b.stableDom&&!D;if(re||j(b.polygons),b.stableDom&&!b.hasBuckets){let pe={doc:a,directionalLight:i.directionalLight,ambientLight:i.ambientLight,textureLighting:i.textureLighting,textureQuality:i.textureQuality,seamBleed:i.seamBleed},X=b.rendered.length===b.polygons.length&&b.rendered.every(ue=>ue.kind==="triangle"),Q=b.stableDom&&!D,ye=X||Q?{}:wt(b.polygons,pe);X||ht(b.wrapper,ye);let be={...pe,solidPaintDefaults:ye,optimizeStableTriangleStyle:!0,stableTriangleDebug:L?.stableTriangleDebug,stableTriangleUpdateMode:L?.stableTriangleUpdateMode,stableTriangleColorPolicy:L?.stableTriangleColorPolicy,stableTriangleColorSteps:L?.stableTriangleColorSteps,stableTriangleColorFreezeFrames:L?.stableTriangleColorFreezeFrames,stableTriangleColorBudget:L?.stableTriangleColorBudget,stableTriangleColorMaxAge:L?.stableTriangleColorMaxAge,stableTriangleColorMaxStep:L?.stableTriangleColorMaxStep,stableTriangleMatrixDecimals:L?.stableTriangleMatrixDecimals,stableTriangleColorFrame:b.stableTriangleColorFrame};if(xn(b.rendered,b.polygons,be))return Z||(oe(b),_e(b,!0),D&&at()),!0}return re&&j(b.polygons),!1}let te={get polygons(){return W()},set polygons(L){me(),b.polygons=L},element:T,id:d.id,get transform(){return I},remove(){q++,T.parentNode&&T.parentNode.removeChild(T),ie(b),h.delete(b),H(b),K(b),at(),$e()},setPolygons(L,D){q++,V=D?.merge??V,F=D?.stableDom??F,b.stableDom=F,b.voxelSource=void 0,b.polygons=B(L,V),K(b),H(b),me(),te.polygons=b.polygons;let Z=D?.recomputeAutoCenter??!0;ce(D,Z)||(Ie(b),Z&&at())},[zl](L,D){let Z=D?.merge??V,re=D?.stableDom??F;if(!L.solidTriangles||!re||Z||d.meshResolution!==void 0||b.hasBuckets||L.polygonCount!==b.polygons.length||L.vertices.length<L.polygonCount*9||b.rendered.length!==L.polygonCount)return!1;for(let Q=0;Q<b.rendered.length;Q++){let ye=b.rendered[Q],be=b.polygons[Q];if(ye?.kind!=="triangle"||ye.polygonIndex!==Q||!be||be.vertices.length!==3||be.texture||be.material?.texture)return!1}let pe=D?.recomputeAutoCenter??!0;if(!pe){let Q=b.stableTriangleColorFrame+1,ye={doc:a,directionalLight:i.directionalLight,ambientLight:i.ambientLight,textureLighting:i.textureLighting,textureQuality:i.textureQuality,seamBleed:i.seamBleed,solidPaintDefaults:{},optimizeStableTriangleStyle:!0,stableTriangleDebug:D?.stableTriangleDebug,stableTriangleUpdateMode:D?.stableTriangleUpdateMode,stableTriangleColorPolicy:D?.stableTriangleColorPolicy,stableTriangleColorSteps:D?.stableTriangleColorSteps,stableTriangleColorFreezeFrames:D?.stableTriangleColorFreezeFrames??0,stableTriangleColorBudget:D?.stableTriangleColorBudget,stableTriangleColorMaxAge:D?.stableTriangleColorMaxAge,stableTriangleColorMaxStep:D?.stableTriangleColorMaxStep,stableTriangleMatrixDecimals:D?.stableTriangleMatrixDecimals,stableTriangleColorFrame:Q};if(vn(b.rendered,b.polygons,L,ye))return q++,V=Z,F=re,b.stableDom=F,b.voxelSource=void 0,b.stableTriangleColorFrame=Q,J=L,Ce++,Pe=null,Te=-1,Ee(b)?(oe(b),_e(b,!0)):De(b),!0}q++,V=Z,F=re,b.stableDom=F,b.voxelSource=void 0;let X=L.vertices;for(let Q=0;Q<L.polygonCount;Q++){let ye=b.polygons[Q],be=L.colors?.[Q];be&&(ye.color=be);let ue=ye.vertices,de=Q*9;ue[0][0]=X[de],ue[0][1]=X[de+1],ue[0][2]=X[de+2],ue[1][0]=X[de+3],ue[1][1]=X[de+4],ue[1][2]=X[de+5],ue[2][0]=X[de+6],ue[2][1]=X[de+7],ue[2][2]=X[de+8]}return me(),te.polygons=b.polygons,ce(D,pe)},updatePolygon(L,D){let Z=typeof L=="number"?L:b.polygons.indexOf(L);if(Z<0&&typeof L!="number"&&J&&(Z=W().indexOf(L)),Z<0||Z>=b.polygons.length)return;me(),b.voxelSource=void 0,Object.assign(b.polygons[Z],D);let re=Object.keys(D);ge(b,Z,re)||Ie(b)},async setPolygonsChunked(L,D){let Z=++q;V=D?.merge??V,F=D?.stableDom??F,b.stableDom=F,b.voxelSource=void 0,b.polygons=B(L,V),me(),te.polygons=b.polygons,j(b.polygons);let re=D?.recomputeAutoCenter??!0;if(!await oo(b,()=>b.disposed||Z!==q)){ie(b);return}re&&at()},setTransform(L){let D=b.castShadow,Z=b.receiveShadow;L.castShadow!==void 0&&(b.castShadow=!!L.castShadow),L.receiveShadow!==void 0&&(b.receiveShadow=!!L.receiveShadow),I={...I,...L};let re=Nr(I);T.style.transform=re??"",lt(b,I.rotation),L.rotation!==void 0&&_e(b,!0),b.castShadow!==D&&(ae(b),$e()),b.receiveShadow!==Z&&we(),L.position!==void 0&&($e(),we())},dispose(){if(!b.disposed){b.disposed=!0,q++,T.parentNode&&T.parentNode.removeChild(T),ie(b);try{s.dispose()}catch{}h.delete(b),at(),$e()}},rebakeAtlas(){b.bakedRotation=I.rotation?[...I.rotation]:[0,0,0];let L=i.directionalLight?.direction??[.4,-.7,.59],D=Ir(L,b.bakedRotation);Ie(b,D)},getPosition(){return I.position},getRotation(){return I.rotation},getScale(){return I.scale},getPolygons(){return te.polygons}};return b.handle=te,h.add(b),Ie(b),lt(b,I.rotation),at(),$e(),b.receiveShadow&&we(),te}function io(s){let d=!!i.autoCenter,S=i.strategies,T=i.seamBleed,I=i.textureLighting,V=i.directionalLight?.direction,F=i.shadow,q=zr(s);i={...i,...q},O(f,i);let Y=!!i.autoCenter;for(let me of h)lt(me,me.handle.transform.rotation);let B=s.strategies!==void 0&&!Nl(s.strategies,S),ee=Object.prototype.hasOwnProperty.call(s,"seamBleed")&&q.seamBleed!==T;if(B||ee)for(let me of h)Ie(me);d!==Y&&at();let j=s.textureLighting!==void 0&&I!==i.textureLighting,b=i.directionalLight?.direction,J=s.directionalLight!==void 0&&!Ul(V,b),Ce=i.shadow,Te=s.shadow!==void 0&&!$l(F,Ce),Pe=J||Te;if(j){for(let me of h)!B&&!ee&&(me.voxelSource||me.voxelRenderer)&&Ie(me);$e(),we()}else Pe&&we();Te&&s.shadow?.lift!==F?.lift&&$e()}function sn(){return i}function ln(){$(f);for(let s of h)_e(s)}function hi(){let s=[];for(let d of h)s.push(d.handle);return s}function yi(s){let d=s;for(;d;){if(d instanceof HTMLElement&&d.classList.contains("polycss-mesh")){for(let S of h)if(S.wrapper===d)return S.handle;return null}d=d.parentElement}return null}function bi(){let s=Array.from(h);for(let d of s)try{d.handle.dispose()}catch{}m.parentNode&&m.parentNode.removeChild(m)}return{add:ro,setOptions:io,destroy:bi,host:e,camera:t,cameraEl:m,applyCamera:ln,getOptions:sn,meshes:hi,findMeshByElement:yi}}import{createIsometricCamera as jr}from"@layoutit/polycss-core";var Zl=8e3;function en(e={}){let n={};e.zoom!==void 0&&(n.zoom=e.zoom),e.target!==void 0&&(n.target=e.target),e.rotX!==void 0&&(n.rotX=e.rotX),e.rotY!==void 0&&(n.rotY=e.rotY),e.distance!==void 0&&(n.distance=e.distance);let t=jr(n),o=`${e.perspective??Zl}px`;return{get state(){return t.state},update(r){t.update(r)},getStyle(r){return t.getStyle(r)},type:"perspective",perspectiveStyle:o}}function tn(e={}){let n={};e.zoom!==void 0&&(n.zoom=e.zoom),e.target!==void 0&&(n.target=e.target),e.rotX!==void 0&&(n.rotX=e.rotX),e.rotY!==void 0&&(n.rotY=e.rotY),e.distance!==void 0&&(n.distance=e.distance);let t=jr(n);return{get state(){return t.state},update(o){t.update(o)},getStyle(o){return t.getStyle(o)},type:"orthographic",perspectiveStyle:"none"}}var Ql=typeof HTMLElement<"u"?HTMLElement:class{},ql=["perspective","rot-x","rot-y","zoom","directional-direction","directional-color","directional-intensity","ambient-color","ambient-intensity","texture-lighting","texture-quality","auto-center"];function Ke(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function Kl(e){return e==="false"?!1:Ke(e)}function Ro(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function Jl(e){if(e==="baked"||e==="dynamic")return e}function ea(e){return e==="auto"?"auto":Ke(e)}function ta(e){return typeof e.getCamera=="function"}var je=class extends Ql{constructor(){super(...arguments);this._scene=null;this._implicitCamera=null}static get observedAttributes(){return[...ql]}getScene(){return this._scene}_findAncestorCamera(){let t=this.parentElement;for(;t;){if(ta(t)){let o=t.getCamera();if(o)return o}t=t.parentElement}return null}_buildImplicitCamera(){let t=Kl(this.getAttribute("perspective")),o=Ke(this.getAttribute("rot-x")),r=Ke(this.getAttribute("rot-y")),i=Ke(this.getAttribute("zoom")),l=Ke(this.getAttribute("distance")),c=Ro(this.getAttribute("target")),a={...o!==void 0?{rotX:o}:{},...r!==void 0?{rotY:r}:{},...i!==void 0?{zoom:i}:{},...l!==void 0?{distance:l}:{},...c!==void 0?{target:c}:{}};return t===!1?tn(a):t!==void 0?en({...a,perspective:t}):tn(a)}_readNonCameraOptions(){let t=this._readDirectionalLight(),o=this._readAmbientLight(),r={};r.textureLighting=Jl(this.getAttribute("texture-lighting"))??"baked";let i=ea(this.getAttribute("texture-quality"));return i!==void 0&&(r.textureQuality=i),r.autoCenter=this.hasAttribute("auto-center"),t&&(r.directionalLight=t),o&&(r.ambientLight=o),r}_readDirectionalLight(){let t=Ro(this.getAttribute("directional-direction")),o=this.getAttribute("directional-color")||void 0,r=Ke(this.getAttribute("directional-intensity"));if(!t&&!o&&r===void 0)return;let i={direction:t??[.4,-.7,.59]};return o&&(i.color=o),r!==void 0&&(i.intensity=r),i}_readAmbientLight(){let t=this.getAttribute("ambient-color")||void 0,o=Ke(this.getAttribute("ambient-intensity"));if(!t&&o===void 0)return;let r={};return t&&(r.color=t),o!==void 0&&(r.intensity=o),r}connectedCallback(){if(this._scene)return;let t=this._findAncestorCamera(),o;t?(o=t,this._implicitCamera=null):(this._implicitCamera=this._buildImplicitCamera(),o=this._implicitCamera),this._scene=Yr(this,{camera:o,...this._readNonCameraOptions()}),this.dispatchEvent(new CustomEvent("polycss:scene-ready",{bubbles:!1}))}disconnectedCallback(){this._scene&&(this._scene.destroy(),this._scene=null),this._implicitCamera=null}attributeChangedCallback(t,o,r){if(o!==r&&this._scene){if(this._implicitCamera&&["rot-x","rot-y","zoom","distance","target"].includes(t)){let l=Ke(this.getAttribute("rot-x")),c=Ke(this.getAttribute("rot-y")),a=Ke(this.getAttribute("zoom")),m=Ke(this.getAttribute("distance")),f=Ro(this.getAttribute("target"));l!==void 0&&this._implicitCamera.update({rotX:l}),c!==void 0&&this._implicitCamera.update({rotY:c}),a!==void 0&&this._implicitCamera.update({zoom:a}),m!==void 0&&this._implicitCamera.update({distance:m}),f!==void 0&&this._implicitCamera.update({target:f}),this._scene.applyCamera();return}this._scene.setOptions(this._readNonCameraOptions())}}};import{computeSceneBbox as na,loadMesh as oa}from"@layoutit/polycss-core";var ra=typeof HTMLElement<"u"?HTMLElement:class{},ia=["src","mtl","mesh-resolution","position","scale","rotation","auto-center"];function nn(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function Xr(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return nn(e)}}function sa(e){return e.closest("poly-scene")??null}function la(e){if(e.length===0)return e;let n=na(e),t=(n.min[0]+n.max[0])/2,o=(n.min[1]+n.max[1])/2,r=(n.min[2]+n.max[2])/2;if(t===0&&o===0&&r===0)return e;let i=l=>[l[0]-t,l[1]-o,l[2]-r];return e.map(l=>({...l,vertices:l.vertices.map(i),...l.textureTriangles?.length?{textureTriangles:l.textureTriangles.map(c=>({...c,vertices:c.vertices.map(i)}))}:null}))}var _t=class extends ra{constructor(){super(...arguments);this._handle=null;this._parseResult=null;this._loadToken=0}static get observedAttributes(){return[...ia]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){if(o!==r){if(t==="src"||t==="mtl"||t==="mesh-resolution"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform({position:nn(this.getAttribute("position")),scale:Xr(this.getAttribute("scale")),rotation:nn(this.getAttribute("rotation"))})}}_tearDown(){if(this._loadToken+=1,this._handle){try{this._handle.dispose()}catch{}this._handle=null}this._parseResult=null}async _maybeLoad(){let t=this.getAttribute("src");if(!t)return;let o=sa(this);if(!o)return;let r=++this._loadToken,i=this.getAttribute("mtl")||void 0,c=this.getAttribute("mesh-resolution")==="lossless"?"lossless":void 0,a;try{let h=i||c!==void 0?{...i?{mtlUrl:i}:{},...c!==void 0?{meshResolution:c}:{}}:void 0;a=await oa(t,h)}catch(h){this.dispatchEvent(new CustomEvent("polycss:error",{detail:h,bubbles:!0}));return}if(r!==this._loadToken){try{a.dispose()}catch{}return}let m=o.getScene();if(!m){try{a.dispose()}catch{}return}this.hasAttribute("auto-center")&&(a={...a,polygons:la(a.polygons)}),this._parseResult=a,this._handle=m.add(a,{position:nn(this.getAttribute("position")),scale:Xr(this.getAttribute("scale")),rotation:nn(this.getAttribute("rotation"))}),this.dispatchEvent(new CustomEvent("polycss:loaded",{detail:{polygons:this._handle.polygons},bubbles:!0}))}};var aa=typeof HTMLElement<"u"?HTMLElement:class{},ca=["vertices","color","texture","uvs","position","scale","rotation"];function Wr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Do(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function ua(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return Do(e)}}function da(e){return e.closest("poly-scene")??null}var Pn=class extends aa{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...ca]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){o!==r&&(this._tearDown(),this.isConnected&&this._mount())}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}_mount(){let t=da(this);if(!t)return;let o=t.getScene();if(!o)return;let r=Wr(this.getAttribute("vertices"));if(!r||!Array.isArray(r)||r.length<3)return;let i=this.getAttribute("color")||void 0,l=this.getAttribute("texture")||void 0,c=Wr(this.getAttribute("uvs"))??void 0,a={};for(let h of Array.from(this.attributes))h.name.startsWith("data-")&&(a[h.name.slice(5)]=h.value);let f={polygons:[{vertices:r,...i!==void 0?{color:i}:{},...l!==void 0?{texture:l}:{},...c!==void 0?{uvs:c}:{},...Object.keys(a).length>0?{data:a}:{}}],objectUrls:[],warnings:[],dispose:()=>{}};this._handle=o.add(f,{position:Do(this.getAttribute("position")),scale:ua(this.getAttribute("scale")),rotation:Do(this.getAttribute("rotation"))})}};import{axesHelperPolygons as ma}from"@layoutit/polycss-core";var pa=typeof HTMLElement<"u"?HTMLElement:class{},fa=["size","thickness","negative","x-color","y-color","z-color"];function ga(e){return e.closest("poly-scene")??null}function Zr(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}var Sn=class extends pa{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...fa]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){o!==r&&this._handle&&this._remount()}_polygons(){return ma({size:Zr(this.getAttribute("size")),thickness:Zr(this.getAttribute("thickness")),negative:this.hasAttribute("negative"),xColor:this.getAttribute("x-color")??void 0,yColor:this.getAttribute("y-color")??void 0,zColor:this.getAttribute("z-color")??void 0})}_mount(){let t=ga(this);if(!t)return;let o=t.getScene();if(!o)return;let r={polygons:this._polygons(),objectUrls:[],dispose:()=>{},warnings:[]};this._handle=o.add(r,{excludeFromAutoCenter:!0,merge:!1})}_remount(){this._tearDown(),this._mount()}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}};import{octahedronPolygons as ha}from"@layoutit/polycss-core";var ya=typeof HTMLElement<"u"?HTMLElement:class{},ba=["direction","target","distance","size","color"],ko=50,va=5,xa=.35,Pa="#ffd54a";function Sa(e){return e.closest("poly-scene")??null}function Qr(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function qr(e,n){if(e==null)return n;let t=parseFloat(e);return Number.isFinite(t)?t:n}var Cn=class extends ya{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...ba]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){if(o!==r&&this._handle){if(t==="size"||t==="color"){this._remount();return}this._handle.setTransform({position:this._meshPosition()})}}_meshPosition(){let t=Qr(this.getAttribute("direction"));if(!t)return;let o=Qr(this.getAttribute("target"))??[0,0,0],r=qr(this.getAttribute("distance"),va),i=t[0],l=t[1],c=t[2],a=Math.hypot(i,l,c)||1,m=o[0]+l/a*r,f=o[1]+i/a*r,h=o[2]+c/a*r;return[f*ko,m*ko,h*ko]}_mount(){let t=Sa(this);if(!t)return;let o=t.getScene();if(!o)return;let r=qr(this.getAttribute("size"),xa),i=this.getAttribute("color")??Pa,l={polygons:ha({center:[0,0,0],size:r,color:i}),objectUrls:[],dispose:()=>{},warnings:[]};this._handle=o.add(l,{position:this._meshPosition(),excludeFromAutoCenter:!0,merge:!1})}_remount(){this._tearDown(),this._mount()}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}};import{BASE_TILE as Ca}from"@layoutit/polycss-core";var En={drag:!0,wheel:!0,dolly:!1,invert:!1,minZoom:.1,maxZoom:10,minDistance:0,maxDistance:1/0,animate:!1};function Rt(e,n){let t;return n.animate===!1?t=!1:n.animate?t={speed:n.animate.speed??.3,axis:n.animate.axis??"y",pauseOnInteraction:n.animate.pauseOnInteraction??!0}:t=e.animate,{drag:n.drag??e.drag,wheel:n.wheel??e.wheel,dolly:n.dolly??e.dolly,invert:n.invert??e.invert,minZoom:n.minZoom??e.minZoom,maxZoom:n.maxZoom??e.maxZoom,minDistance:n.minDistance??e.minDistance,maxDistance:n.maxDistance??e.maxDistance,animate:t}}function on(e){return e===!0?-1:e===!1?1:e}function Dt(){let e=[],n=[],t=[];function o(l){return l==="change"?e:l==="start"?n:t}function r(l){if(e.length===0)return;let c={type:"change",camera:l()},a=e.slice();for(let m of a)try{m(c)}catch(f){console.error("[polycss] controls 'change' listener threw:",f)}}function i(l,c){let a=l==="start"?n:t;if(a.length===0)return;let m={type:l,camera:c()},f=a.slice();for(let h of f)try{h(m)}catch(g){console.error(`[polycss] controls '${l}' listener threw:`,g)}}return{changeListeners:e,startListeners:n,endListeners:t,listenerArray:o,emitChange:r,emitInteraction:i}}function kt(e){return()=>{let n=e.camera.state,t=n.target??[0,0,0];return{rotX:n.rotX??0,rotY:n.rotY??0,zoom:n.zoom??1,target:[t[0],t[1],t[2]],distance:n.distance??0}}}function Tn(e,n,t,o,r,i){let l=!1,c=null;return{onWheel:f=>{let h=n();if(!h.wheel||t())return;f.preventDefault();let g=f.deltaMode===1?16:f.deltaMode===2?100:1,x=f.deltaY*g;f.ctrlKey?x*=10:x*=3;let y=e.camera.state;if(h.dolly){let P=y.distance??0,v=Math.max(h.minDistance,Math.min(h.maxDistance,P+x*.05));e.camera.update({distance:v})}else{let P=Math.exp(-x*513e-6),v=y.zoom??1,E=Math.max(h.minZoom,Math.min(h.maxZoom,v*P));e.camera.update({zoom:E})}e.applyCamera(),l||(l=!0,i("start",o)),r(o),c!==null&&clearTimeout(c),c=setTimeout(()=>{c=null,l=!1,i("end",o)},150)},teardown:()=>{c!==null&&(clearTimeout(c),c=null),l=!1}}}function An(e,n,t,o,r,i,l){let c=null,a=0,m=x=>{if(c===null||o())return;let y=t();if(!y.animate){c=null;return}if(r())a=x;else{let P=Math.min(50,a?x-a:16.67);a=x;let v=y.animate.speed*(P/16.67),E=n.camera.state;if(y.animate.axis==="x"){let H=(((E.rotX??65)+v)%360+360)%360;n.camera.update({rotX:H})}else{let H=(((E.rotY??45)+v)%360+360)%360;n.camera.update({rotY:H})}n.applyCamera(),l(i)}c=e.requestAnimationFrame(m)};return{start:()=>{c!==null||!t().animate||o()||(a=0,c=e.requestAnimationFrame(m))},stop:()=>{c!==null&&(e.cancelAnimationFrame(c),c=null)},isRunning:()=>c!==null}}function Kr(e,n={}){let t=Rt(En,n),o=e.host,r=o.ownerDocument?.defaultView??globalThis,i=null,l={x:0,y:0},c=!1,a=!1,m=Dt(),f=kt(e),{changeListeners:h,startListeners:g,endListeners:x,listenerArray:y,emitChange:P,emitInteraction:v}=m,E=An(r,e,()=>t,()=>a,()=>c,f,P),H=C=>{if(!(!t.drag||a)&&i===null&&C.isPrimary!==!1){C.preventDefault(),i=C.pointerId,l={x:C.clientX,y:C.clientY},o.style.cursor="grabbing";try{C.target.setPointerCapture(C.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!0),v("start",f)}},k=C=>{if(i===null||C.pointerId!==i||!t.drag||a)return;C.preventDefault();let A=C.clientX-l.x,w=C.clientY-l.y;l={x:C.clientX,y:C.clientY};let M=on(t.invert),se=A/4*M,he=w/4*M,_=e.camera.state;if(C.shiftKey){let ne=_.rotX??65,oe=_.rotY??45,Se=Math.max(.01,_.zoom??1),Ee=Math.cos(ne*Math.PI/180),De=Ee>=0?Math.max(.1,Ee):Math.min(-.1,Ee),Ve=Math.cos(oe*Math.PI/180),_e=Math.sin(oe*Math.PI/180),ze=Se*Ca,Je=(A*_e-w*Ve/De)/ze,Ue=-(A*Ve+w*_e/De)/ze,Xe=_.target??[0,0,0];e.camera.update({target:[Xe[0]+Je,Xe[1]+Ue,Xe[2]]})}else{let ne=Math.max(0,Math.min(100,(_.rotX??65)-he)),oe=(((_.rotY??45)-se)%360+360)%360;e.camera.update({rotX:ne,rotY:oe})}e.applyCamera(),P(f)},N=C=>{if(i===C.pointerId){i=null,o.style.cursor=t.drag&&!a?"grab":"";try{C.target.releasePointerCapture(C.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!1),v("end",f)}},R=Tn(e,()=>t,()=>a,f,P,v);function K(){o.addEventListener("pointerdown",H),o.addEventListener("pointermove",k),o.addEventListener("pointerup",N),o.addEventListener("pointercancel",N),o.addEventListener("wheel",R.onWheel,{passive:!1}),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function z(){o.removeEventListener("pointerdown",H),o.removeEventListener("pointermove",k),o.removeEventListener("pointerup",N),o.removeEventListener("pointercancel",N),o.removeEventListener("wheel",R.onWheel),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",R.teardown()}K(),E.start();function O(C){let A=!!t.animate;t=Rt(t,C),!a&&i===null&&(o.style.cursor=t.drag?"grab":"");let w=!!t.animate;A&&!w?E.stop():!A&&w&&E.start()}function $(){a&&(a=!1,K(),E.start())}function U(){a||(a=!0,z(),E.stop(),i=null,c=!1,R.teardown())}function ie(){U(),h.length=0,g.length=0,x.length=0}function xe(C,A){let w=y(C);w.includes(A)||w.push(A)}function u(C,A){let w=y(C),M=w.indexOf(A);M>=0&&w.splice(M,1)}function p(C,A){return y(C).includes(A)}return{update:O,resume:$,pause:U,destroy:ie,addEventListener:xe,removeEventListener:u,hasEventListener:p}}function le(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function Mn(e){if(!e)return;let n=e.split(",").map(t=>parseFloat(t.trim()));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return[n[0],n[1],n[2]]}function Ne(e){if(e!==null)return!(e==="false"||e==="0")}function wn(e){if(e===null)return;if(e==="true")return!0;if(e==="false")return!1;let n=parseFloat(e);return Number.isFinite(n)?n:!0}function Ln(e){if(e==="x"||e==="y")return e}var Ea=typeof HTMLElement<"u"?HTMLElement:class{},Ta=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],_n=class extends Ea{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...Ta]}_readAnimate(){let t=le(this.getAttribute("animate-speed")),o=Ln(this.getAttribute("animate-axis")),r=this.getAttribute("animate-pause-on-interaction");if(this.hasAttribute("animate-speed")||this.hasAttribute("animate-axis")||this.hasAttribute("animate-pause-on-interaction"))return{...t!==void 0?{speed:t}:{},...o!==void 0?{axis:o}:{},...r!==null?{pauseOnInteraction:Ne(r)}:{}}}_readOptions(){let t={},o=Ne(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let r=Ne(this.getAttribute("wheel"));r!==void 0&&(t.wheel=r),this.hasAttribute("dolly")&&(t.dolly=!0);let i=le(this.getAttribute("min-distance"));i!==void 0&&(t.minDistance=i);let l=le(this.getAttribute("max-distance"));l!==void 0&&(t.maxDistance=l);let c=wn(this.getAttribute("invert"));c!==void 0&&(t.invert=c);let a=le(this.getAttribute("zoom-min")),m=le(this.getAttribute("zoom-max"));return a!==void 0&&(t.minZoom=a),m!==void 0&&(t.maxZoom=m),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof je)return t;t=t.parentNode}return null}_attach(){if(this._controls)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._controls=Kr(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls&&this._controls.update(this._readOptions())}};import{BASE_TILE as Aa}from"@layoutit/polycss-core";function Jr(e,n={}){let t=Rt(En,n),o=e.host,r=o.ownerDocument?.defaultView??globalThis,i=null,l={x:0,y:0},c=!1,a=!1,m=!1,f={x:0,y:0},h=Dt(),g=kt(e),{changeListeners:x,startListeners:y,endListeners:P,listenerArray:v,emitChange:E,emitInteraction:H}=h,k=An(r,e,()=>t,()=>a,()=>c,g,E),N=_=>{if(!(!t.drag||a)&&i===null&&_.isPrimary!==!1){_.preventDefault(),i=_.pointerId,l={x:_.clientX,y:_.clientY},o.style.cursor="grabbing";try{_.target.setPointerCapture(_.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!0),H("start",g)}},R=_=>{if(i===null||_.pointerId!==i||!t.drag||a)return;_.preventDefault();let ne=_.clientX-l.x,oe=_.clientY-l.y;l={x:_.clientX,y:_.clientY};let Se=e.camera.state;if(_.shiftKey){let Ee=on(t.invert),De=ne/4*Ee,Ve=oe/4*Ee,_e=Math.max(0,Math.min(100,(Se.rotX??65)-Ve)),ze=(((Se.rotY??45)-De)%360+360)%360;e.camera.update({rotX:_e,rotY:ze})}else{let Ee=Se.rotX??65,De=Se.rotY??45,Ve=Math.max(.01,Se.zoom??1),_e=Math.cos(Ee*Math.PI/180),ze=_e>=0?Math.max(.1,_e):Math.min(-.1,_e),Je=Math.cos(De*Math.PI/180),Ue=Math.sin(De*Math.PI/180),Xe=Ve*Aa,Ht=(ne*Ue-oe*Je/ze)/Xe,It=-(ne*Je+oe*Ue/ze)/Xe,lt=Se.target??[0,0,0];e.camera.update({target:[lt[0]+Ht,lt[1]+It,lt[2]]})}e.applyCamera(),E(g)},K=_=>{if(i===_.pointerId){i=null,o.style.cursor=t.drag&&!a?"grab":"";try{_.target.releasePointerCapture(_.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!1),H("end",g)}},z=_=>{_.preventDefault()},O=_=>{_.button===2&&(m=!0,f={x:_.clientX,y:_.clientY},t.animate&&t.animate.pauseOnInteraction&&(c=!0),H("start",g))},$=_=>{if(!m||!t.drag)return;let ne=_.clientX-f.x,oe=_.clientY-f.y;f={x:_.clientX,y:_.clientY};let Se=on(t.invert),Ee=ne/4*Se,De=oe/4*Se,Ve=e.camera.state,_e=Math.max(0,Math.min(100,(Ve.rotX??65)-De)),ze=(((Ve.rotY??45)-Ee)%360+360)%360;e.camera.update({rotX:_e,rotY:ze}),e.applyCamera(),E(g)},U=_=>{_.button===2&&m&&(m=!1,H("end",g))},ie=Tn(e,()=>t,()=>a,g,E,H);function xe(){o.addEventListener("pointerdown",N),o.addEventListener("pointermove",R),o.addEventListener("pointerup",K),o.addEventListener("pointercancel",K),o.addEventListener("wheel",ie.onWheel,{passive:!1}),o.addEventListener("contextmenu",z),o.addEventListener("mousedown",O),o.addEventListener("mousemove",$),o.addEventListener("mouseup",U),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function u(){o.removeEventListener("pointerdown",N),o.removeEventListener("pointermove",R),o.removeEventListener("pointerup",K),o.removeEventListener("pointercancel",K),o.removeEventListener("wheel",ie.onWheel),o.removeEventListener("contextmenu",z),o.removeEventListener("mousedown",O),o.removeEventListener("mousemove",$),o.removeEventListener("mouseup",U),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",ie.teardown()}xe(),k.start();function p(_){let ne=!!t.animate;t=Rt(t,_),!a&&i===null&&(o.style.cursor=t.drag?"grab":"");let oe=!!t.animate;ne&&!oe?k.stop():!ne&&oe&&k.start()}function C(){a&&(a=!1,xe(),k.start())}function A(){a||(a=!0,u(),k.stop(),i=null,c=!1,m=!1,ie.teardown())}function w(){A(),x.length=0,y.length=0,P.length=0}function M(_,ne){let oe=v(_);oe.includes(ne)||oe.push(ne)}function se(_,ne){let oe=v(_),Se=oe.indexOf(ne);Se>=0&&oe.splice(Se,1)}function he(_,ne){return v(_).includes(ne)}return{update:p,resume:C,pause:A,destroy:w,addEventListener:M,removeEventListener:se,hasEventListener:he}}var Ma=typeof HTMLElement<"u"?HTMLElement:class{},wa=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],Rn=class extends Ma{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...wa]}_readAnimate(){let t=le(this.getAttribute("animate-speed")),o=Ln(this.getAttribute("animate-axis")),r=this.getAttribute("animate-pause-on-interaction");if(this.hasAttribute("animate-speed")||this.hasAttribute("animate-axis")||this.hasAttribute("animate-pause-on-interaction"))return{...t!==void 0?{speed:t}:{},...o!==void 0?{axis:o}:{},...r!==null?{pauseOnInteraction:Ne(r)}:{}}}_readOptions(){let t={},o=Ne(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let r=Ne(this.getAttribute("wheel"));r!==void 0&&(t.wheel=r),this.hasAttribute("dolly")&&(t.dolly=!0);let i=le(this.getAttribute("min-distance"));i!==void 0&&(t.minDistance=i);let l=le(this.getAttribute("max-distance"));l!==void 0&&(t.maxDistance=l);let c=wn(this.getAttribute("invert"));c!==void 0&&(t.invert=c);let a=le(this.getAttribute("zoom-min")),m=le(this.getAttribute("zoom-max"));return a!==void 0&&(t.minZoom=a),m!==void 0&&(t.maxZoom=m),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof je)return t;t=t.parentNode}return null}_attach(){if(this._controls)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._controls=Jr(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls&&this._controls.update(this._readOptions())}};import{BASE_TILE as La}from"@layoutit/polycss-core";var _a={enabled:!0,lookEnabled:!0,moveEnabled:!0,jumpEnabled:!0,crouchEnabled:!0,lookSensitivity:.15,invertY:!1,moveSpeed:5,jumpVelocity:7,gravity:18,eyeHeight:1.7,crouchHeight:1,groundZ:0,minPitch:5,maxPitch:175};function ei(e,n){return{enabled:n.enabled??e.enabled,lookEnabled:n.lookEnabled??e.lookEnabled,moveEnabled:n.moveEnabled??e.moveEnabled,jumpEnabled:n.jumpEnabled??e.jumpEnabled,crouchEnabled:n.crouchEnabled??e.crouchEnabled,lookSensitivity:n.lookSensitivity??e.lookSensitivity,invertY:n.invertY??e.invertY,moveSpeed:n.moveSpeed??e.moveSpeed,jumpVelocity:n.jumpVelocity??e.jumpVelocity,gravity:n.gravity??e.gravity,eyeHeight:n.eyeHeight??e.eyeHeight,crouchHeight:n.crouchHeight??e.crouchHeight,groundZ:n.groundZ??e.groundZ,minPitch:n.minPitch??e.minPitch,maxPitch:n.maxPitch??e.maxPitch}}var ti=new Set(["KeyW","ArrowUp"]),ni=new Set(["KeyS","ArrowDown"]),oi=new Set(["KeyA","ArrowLeft"]),ri=new Set(["KeyD","ArrowRight"]),ii=new Set(["Space"]),Oo=new Set(["ControlLeft","ControlRight"]);function si(e,n={}){let t=ei(_a,n),o=e.host,r=e.cameraEl,i=o.ownerDocument??document,l=i.defaultView??globalThis,c=Dt(),a=kt(e),{changeListeners:m,startListeners:f,endListeners:h,listenerArray:g,emitChange:x,emitInteraction:y}=c,P=new Set,v=!1,E=!1,H=0,k=0,N=!1,R=[0,0,t.groundZ+t.eyeHeight];function K(G,ge){let ae=G*Math.PI/180,we=ge*Math.PI/180;return[-Math.sin(ae)*Math.cos(we),-Math.sin(ae)*Math.sin(we),-Math.cos(ae)]}function z(){let G=e.camera.perspectiveStyle,ge=G==="none"?0:parseFloat(G);return(Number.isFinite(ge)&&ge>0?ge:2e3)/La}function O(){let G=e.camera.state,ge=K(G.rotX??90,G.rotY??0),ae=z();return[R[0]+ge[0]*ae,R[1]+ge[1]*ae,R[2]+ge[2]*ae]}function $(){let G=O();e.camera.update({target:G}),e.applyCamera()}function U(){let G=e.camera.state.target??[0,0,0];R=[G[0],G[1],t.groundZ+t.eyeHeight],$()}let ie=()=>{if(!(!t.enabled||!t.lookEnabled||E||v))try{o.requestPointerLock()}catch{}},xe=()=>{let G=i.pointerLockElement===o;G!==v&&(v=G,v?(N=!0,y("start",a)):N&&(N=!1,y("end",a)))},u=G=>{if(!v||!t.enabled||!t.lookEnabled||E)return;let ge=G.movementX??0,ae=G.movementY??0;if(ge===0&&ae===0)return;let we=e.camera.state,Vt=t.lookSensitivity,zt=t.invertY?-1:1,yt=(((we.rotY??0)-ge*Vt)%360+360)%360,ke=(we.rotX??90)-ae*Vt*zt;ke<t.minPitch?ke=t.minPitch:ke>t.maxPitch&&(ke=t.maxPitch);let Qe=K(ke,yt),Ie=z(),$e=[R[0]+Qe[0]*Ie,R[1]+Qe[1]*Ie,R[2]+Qe[2]*Ie];e.camera.update({rotX:ke,rotY:yt,target:$e}),e.applyCamera(),x(a)},p=G=>ti.has(G)||ni.has(G)||oi.has(G)||ri.has(G)||ii.has(G)||Oo.has(G),C=G=>{if(!(!t.enabled||E)&&p(G.code)&&!(!v&&!t.moveEnabled)){if(ii.has(G.code)){if(!t.jumpEnabled)return;G.preventDefault(),!P.has(G.code)&&H===0&&k===0&&(H=t.jumpVelocity),P.add(G.code);return}Oo.has(G.code)&&!t.crouchEnabled||!t.moveEnabled&&!Oo.has(G.code)||(G.preventDefault(),P.add(G.code))}},A=G=>{p(G.code)&&P.delete(G.code)},w=()=>{P.clear()},M=null,se=0,he=.05,_=G=>{if(M===null||E)return;let ge=Math.min(he,se?(G-se)/1e3:.0167);if(se=G,t.enabled){let ae=!1,we=e.camera.state;if(t.moveEnabled){let ke=0,Qe=0;for(let Ie of P)ti.has(Ie)?ke+=1:ni.has(Ie)?ke-=1:ri.has(Ie)?Qe+=1:oi.has(Ie)&&(Qe-=1);if(ke!==0||Qe!==0){let $e=(we.rotY??0)*Math.PI/180,oo=-Math.cos($e),at=-Math.sin($e),ro=-Math.sin($e),io=Math.cos($e),sn=Math.hypot(ke,Qe)||1,ln=t.moveSpeed*ge;R[0]+=(oo*ke+ro*Qe)/sn*ln,R[1]+=(at*ke+io*Qe)/sn*ln,ae=!0}}let zt=t.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?t.crouchHeight:t.eyeHeight;t.jumpEnabled&&(H!==0||k>0)?(H-=t.gravity*ge,k+=H*ge,k<=0&&(k=0,H=0)):t.jumpEnabled||(k=0,H=0);let yt=t.groundZ+zt+k;if(Math.abs(R[2]-yt)>1e-4&&(R[2]=yt,ae=!0),ae){let ke=O();e.camera.update({target:ke}),e.applyCamera(),x(a)}}M=l.requestAnimationFrame(_)};function ne(){M!==null||E||(se=0,M=l.requestAnimationFrame(_))}function oe(){M!==null&&(l.cancelAnimationFrame(M),M=null)}function Se(){let ge=r.ownerDocument?.defaultView?.getComputedStyle(r).perspective??"",ae=parseFloat(ge),we=Number.isFinite(ae)&&ae>0?ae:2e3;r.style.setProperty("--polycss-fpv-perspective",`${we}px`),r.classList.add("polycss-fpv-host")}function Ee(){r.classList.remove("polycss-fpv-host"),r.style.removeProperty("--polycss-fpv-perspective")}function De(){o.addEventListener("click",ie),i.addEventListener("pointerlockchange",xe),i.addEventListener("mousemove",u),l.addEventListener("keydown",C),l.addEventListener("keyup",A),l.addEventListener("blur",w),o.style.cursor=t.lookEnabled?"crosshair":"",Se()}function Ve(){if(o.removeEventListener("click",ie),i.removeEventListener("pointerlockchange",xe),i.removeEventListener("mousemove",u),l.removeEventListener("keydown",C),l.removeEventListener("keyup",A),l.removeEventListener("blur",w),o.style.cursor="",P.clear(),v)try{i.exitPointerLock()}catch{}Ee()}U(),De(),ne();function _e(G){let ge=t.eyeHeight,ae=t.groundZ;t=ei(t,G),E||(o.style.cursor=t.lookEnabled?"crosshair":""),(t.eyeHeight!==ge||t.groundZ!==ae)&&(R[2]=t.groundZ+t.eyeHeight,$(),x(a))}function ze(){E&&(E=!1,De(),ne())}function Je(){E||(E=!0,Ve(),oe(),N&&(N=!1,y("end",a)))}function Ue(){Je(),m.length=0,f.length=0,h.length=0}function Xe(){if(!(!t.enabled||!t.lookEnabled||E))try{o.requestPointerLock()}catch{}}function Ht(){if(v)try{i.exitPointerLock()}catch{}}function It(){return v}function lt(G,ge){let ae=g(G);ae.includes(ge)||ae.push(ge)}function ht(G,ge){let ae=g(G),we=ae.indexOf(ge);we>=0&&ae.splice(we,1)}function eo(G,ge){return g(G).includes(ge)}function to(){return[R[0],R[1],R[2]]}function no(G){R[0]=G[0],R[1]=G[1],R[2]=G[2],$(),x(a)}return{update:_e,resume:ze,pause:Je,destroy:Ue,lock:Xe,unlock:Ht,isLocked:It,getOrigin:to,setOrigin:no,addEventListener:lt,removeEventListener:ht,hasEventListener:eo}}var Ra=typeof HTMLElement<"u"?HTMLElement:class{},Da=["enabled","look-enabled","move-enabled","jump-enabled","crouch-enabled","look-sensitivity","invert-y","move-speed","jump-velocity","gravity","eye-height","crouch-height","ground-z","min-pitch","max-pitch"],Dn=class extends Ra{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...Da]}_readOptions(){let t={},o=Ne(this.getAttribute("enabled"));o!==void 0&&(t.enabled=o);let r=Ne(this.getAttribute("look-enabled"));r!==void 0&&(t.lookEnabled=r);let i=Ne(this.getAttribute("move-enabled"));i!==void 0&&(t.moveEnabled=i);let l=Ne(this.getAttribute("jump-enabled"));l!==void 0&&(t.jumpEnabled=l);let c=Ne(this.getAttribute("crouch-enabled"));c!==void 0&&(t.crouchEnabled=c);let a=le(this.getAttribute("look-sensitivity"));if(a!==void 0&&(t.lookSensitivity=a),this.hasAttribute("invert-y")){let E=Ne(this.getAttribute("invert-y"));E!==void 0&&(t.invertY=E)}let m=le(this.getAttribute("move-speed"));m!==void 0&&(t.moveSpeed=m);let f=le(this.getAttribute("jump-velocity"));f!==void 0&&(t.jumpVelocity=f);let h=le(this.getAttribute("gravity"));h!==void 0&&(t.gravity=h);let g=le(this.getAttribute("eye-height"));g!==void 0&&(t.eyeHeight=g);let x=le(this.getAttribute("crouch-height"));x!==void 0&&(t.crouchHeight=x);let y=le(this.getAttribute("ground-z"));y!==void 0&&(t.groundZ=y);let P=le(this.getAttribute("min-pitch"));P!==void 0&&(t.minPitch=P);let v=le(this.getAttribute("max-pitch"));return v!==void 0&&(t.maxPitch=v),t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof je)return t;t=t.parentNode}return null}_attach(){if(this._controls)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._controls=si(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls&&this._controls.update(this._readOptions())}};var ka=typeof HTMLElement<"u"?HTMLElement:class{},Oa=["perspective","zoom","rot-x","rot-y","target","distance"],kn=class extends ka{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...Oa]}getCamera(){return this._camera}_readOptions(){return{perspective:le(this.getAttribute("perspective")),zoom:le(this.getAttribute("zoom")),rotX:le(this.getAttribute("rot-x")),rotY:le(this.getAttribute("rot-y")),target:Mn(this.getAttribute("target")),distance:le(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=en(t),this._wrapper=this.ownerDocument.createElement("div"),this._wrapper.className="polycss-camera",this._wrapper.style.perspective=this._camera.perspectiveStyle;this.firstChild;)this._wrapper.appendChild(this.firstChild);this.appendChild(this._wrapper),this.dispatchEvent(new CustomEvent("polycss:camera-ready",{bubbles:!1}))}_teardown(){if(this._wrapper){for(;this._wrapper.firstChild;)this.insertBefore(this._wrapper.firstChild,this._wrapper);this._wrapper.parentNode&&this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null}this._camera=null}connectedCallback(){this._mount()}disconnectedCallback(){this._teardown()}attributeChangedCallback(t,o,r){if(o===r||!this._camera||!this._wrapper)return;let i=this._readOptions();this._camera=en(i),this._wrapper.style.perspective=this._camera.perspectiveStyle}};var Fa=typeof HTMLElement<"u"?HTMLElement:class{},Ha=["zoom","rot-x","rot-y","target","distance"],Ot=class extends Fa{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...Ha]}getCamera(){return this._camera}_readOptions(){return{zoom:le(this.getAttribute("zoom")),rotX:le(this.getAttribute("rot-x")),rotY:le(this.getAttribute("rot-y")),target:Mn(this.getAttribute("target")),distance:le(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=tn(t),this._wrapper=this.ownerDocument.createElement("div"),this._wrapper.className="polycss-camera",this._wrapper.style.perspective=this._camera.perspectiveStyle;this.firstChild;)this._wrapper.appendChild(this.firstChild);this.appendChild(this._wrapper),this.dispatchEvent(new CustomEvent("polycss:camera-ready",{bubbles:!1}))}_teardown(){if(this._wrapper){for(;this._wrapper.firstChild;)this.insertBefore(this._wrapper.firstChild,this._wrapper);this._wrapper.parentNode&&this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null}this._camera=null}connectedCallback(){this._mount()}disconnectedCallback(){this._teardown()}attributeChangedCallback(t,o,r){if(o===r||!this._camera)return;let i=this._readOptions();i.zoom!==void 0&&this._camera.update({zoom:i.zoom}),i.rotX!==void 0&&this._camera.update({rotX:i.rotX}),i.rotY!==void 0&&this._camera.update({rotY:i.rotY}),i.target!==void 0&&this._camera.update({target:i.target}),i.distance!==void 0&&this._camera.update({distance:i.distance})}};var On=class extends Ot{};import{arrowPolygons as Ia,eulerXYZFromQuat as Va,planePolygons as za,quatFromAxisAngle as Ba,quatFromEulerXYZ as Na,quatMultiply as Ua,ringQuadPolygons as $a}from"@layoutit/polycss-core";var Hn="#ff3653",In="#8adb00",Vn="#2c8fff",Ft=50,li=60,Ga=.6,Ya=.0125,ja=.15,Xa=.04,Wa=1,ai=.02,Fo=1.04,Za=.1,Qa=.25,mi=1e-4,qa=.6,Ka=.8,Ja=1,rn={0:1,1:0,2:2},ci=[{cssAxis:0,sign:1,key:"x",color:Hn},{cssAxis:0,sign:-1,key:"-x",color:Hn},{cssAxis:1,sign:1,key:"y",color:In},{cssAxis:1,sign:-1,key:"-y",color:In},{cssAxis:2,sign:1,key:"z",color:Vn},{cssAxis:2,sign:-1,key:"-z",color:Vn}],ui=[{cssAxis:0,key:"x",color:Hn},{cssAxis:1,key:"y",color:In},{cssAxis:2,key:"z",color:Vn}],di=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Vn},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:In},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Hn}];function Ho(e,n,t,o){let r=t*Math.PI/180,i=o*Math.PI/180,l=[0,0,0];l[e]=n;let c=l[0]*Math.cos(i)-l[1]*Math.sin(i),a=l[0]*Math.sin(i)+l[1]*Math.cos(i),m=l[2];return a*Math.sin(r)+m*Math.cos(r)<0}function ec(e,n){let t=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!t)return e;let o=parseInt(t[1],16),r=parseInt(t[2],16),i=parseInt(t[3],16);return`rgba(${o}, ${r}, ${i}, ${n})`}function zn(e,n){return!n||n<=0?e:Math.round(e/n)*n}function tc(e){if(e.length===0)return[0,0,0];let n=1/0,t=1/0,o=1/0,r=-1/0,i=-1/0,l=-1/0;for(let c of e)for(let a of c.vertices)a[0]<n&&(n=a[0]),a[0]>r&&(r=a[0]),a[1]<t&&(t=a[1]),a[1]>i&&(i=a[1]),a[2]<o&&(o=a[2]),a[2]>l&&(l=a[2]);return Number.isFinite(n)?[(t+i)/2*Ft,(n+r)/2*Ft,(o+l)/2*Ft]:[0,0,0]}function Io(e){if(e.length===0)return li;let n=1/0,t=1/0,o=1/0,r=-1/0,i=-1/0,l=-1/0;for(let a of e)for(let m of a.vertices)m[0]<n&&(n=m[0]),m[0]>r&&(r=m[0]),m[1]<t&&(t=m[1]),m[1]>i&&(i=m[1]),m[2]<o&&(o=m[2]),m[2]>l&&(l=m[2]);return Number.isFinite(n)?Math.max(r-n,i-t,l-o)*Ft*Ga:li}function Fn(e,n,t){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let i=r.getBoundingClientRect();if(!(i.width<=0||i.height<=0)&&n>=i.left&&n<=i.right&&t>=i.top&&t<=i.bottom)return!0}return!1}function nc(e){let{cssAxis:n,sign:t,shaftLengthCss:o,wrapper:r,target:i,startClientX:l,startClientY:c,translationSnap:a,onAxisDelta:m,onMouseDown:f,onMouseUp:h,onDraggingChanged:g}=e,x=o,y=[0,0,0];y[n]=t;let P=r.ownerDocument.createElement("div");P.style.position="absolute",P.style.left="0",P.style.top="0",P.style.width="0",P.style.height="0",P.style.transform=`translate3d(${y[0]*x}px, ${y[1]*x}px, ${y[2]*x}px)`,r.appendChild(P);let v=r.getBoundingClientRect(),E=P.getBoundingClientRect();r.removeChild(P);let H=(E.left-v.left)/x,k=(E.top-v.top)/x,N=H*H+k*k;if(N<mi)return;f?.(),g?.(!0);let R=z=>{let O=z.clientX-l,$=z.clientY-c,U=(O*H+$*k)/N;U=zn(U,a),m(U,y)},K=()=>{window.removeEventListener("pointermove",R),window.removeEventListener("pointerup",K),window.removeEventListener("pointercancel",K);let z=O=>{O.stopPropagation(),O.stopImmediatePropagation()};window.addEventListener("click",z,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",z,!0),0),h?.(),g?.(!1)};window.addEventListener("pointermove",R),window.addEventListener("pointerup",K),window.addEventListener("pointercancel",K)}function oc(e){let{axisA:n,axisB:t,probeDistanceCss:o,wrapper:r,startClientX:i,startClientY:l,translationSnap:c,onPlaneDelta:a,onMouseDown:m,onMouseUp:f,onDraggingChanged:h}=e,g=[0,0,0];g[n]=1;let x=[0,0,0];x[t]=1;function y(N){let R=r.ownerDocument.createElement("div");R.style.position="absolute",R.style.left="0",R.style.top="0",R.style.width="0",R.style.height="0",R.style.transform=`translate3d(${N[0]*o}px, ${N[1]*o}px, ${N[2]*o}px)`,r.appendChild(R);let K=r.getBoundingClientRect(),z=R.getBoundingClientRect();return r.removeChild(R),{x:(z.left-K.left)/o,y:(z.top-K.top)/o}}let P=y(g),v=y(x),E=P.x*v.y-v.x*P.y;if(Math.abs(E)<mi)return;m?.(),h?.(!0);let H=N=>{let R=N.clientX-i,K=N.clientY-l,z=(v.y*R-v.x*K)/E,O=(-P.y*R+P.x*K)/E;z=zn(z,c),O=zn(O,c),a(z,O,g,x)},k=()=>{window.removeEventListener("pointermove",H),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",k);let N=R=>{R.stopPropagation(),R.stopImmediatePropagation()};window.addEventListener("click",N,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",N,!0),0),f?.(),h?.(!1)};window.addEventListener("pointermove",H),window.addEventListener("pointerup",k),window.addEventListener("pointercancel",k)}function rc(e){let{cssAxis:n,wrapper:t,target:o,startClientX:r,startClientY:i,rotationSnap:l,onAngleDelta:c,onMouseDown:a,onMouseUp:m,onDraggingChanged:f}=e,h=t.getBoundingClientRect(),g=h.left,x=h.top,y=Math.atan2(i-x,r-g),P=0;a?.(),f?.(!0);let v=H=>{let k=Math.atan2(H.clientY-x,H.clientX-g),N=k-y;N>Math.PI?N-=2*Math.PI:N<-Math.PI&&(N+=2*Math.PI),P+=N,y=k;let R=P*180/Math.PI;R=zn(R,l),c(R)},E=()=>{window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",E),window.removeEventListener("pointercancel",E);let H=k=>{k.stopPropagation(),k.stopImmediatePropagation()};window.addEventListener("click",H,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",H,!0),0),m?.(),f?.(!1)};window.addEventListener("pointermove",v),window.addEventListener("pointerup",E),window.addEventListener("pointercancel",E)}function pi(e,n={}){let t=null,o=n.mode??"translate",r=n.size??1,i={...n},l=new Map,c=null,a=null,m=[0,0,0];function f(){if(!t)return[0,0,0];let u=t.transform.position??[0,0,0];return[u[0]+m[0],u[1]+m[1],u[2]+m[2]]}function h(u){return a===u?Ja:c===u?Ka:qa}function g(){for(let[u,p]of l){let C=x(p.spec,h(u));p.handle.setPolygons(C,{recomputeAutoCenter:!1})}}function x(u,p){let A=Io(t?.polygons??[])*r,w=A/Ft,M=ec(u.color,p);if(u.kind==="arrow"){let _=e.camera.state,ne=Ho(u.cssAxis,u.sign,_.rotX??65,_.rotY??45);return Ia({axis:rn[u.cssAxis],sign:u.sign,shaftLength:w,shaftHalfThickness:w*Ya,headLength:w*ja,headHalfThickness:w*Xa,color:M,shaft:!ne})}if(u.kind==="plane"){let _=e.camera.state,ne=_.rotX??65,oe=_.rotY??45,Se=rn[u.perpAxis],Ee=(Se+1)%3,De=(Se+2)%3,Ve=rn[Ee],_e=rn[De],ze=Ho(Ve,1,ne,oe)?-1:1,Je=Ho(_e,1,ne,oe)?-1:1,Ue=w*Qa;return za({axis:Se,size:w*Za,offset:[ze*Ue,Je*Ue],color:M})}let he=A*Wa/Ft*Fo;return $a({axis:rn[u.cssAxis],outerRadius:he,color:M})}function y(u){return u.kind==="arrow"?"polycss-transform-arrow":u.kind==="plane"?"polycss-transform-plane":"polycss-transform-ring"}function P(){if(o==="translate"){let u=ci.map(C=>({kind:"arrow",key:C.key,cssAxis:C.cssAxis,sign:C.sign,color:C.color})),p=di.map(C=>({kind:"plane",key:C.key,perpAxis:C.perpAxis,axisA:C.axisA,axisB:C.axisB,color:C.color}));return[...u,...p]}return o==="rotate"?ui.map(u=>({kind:"ring",key:u.key,cssAxis:u.cssAxis,color:u.color})):[]}function v(){if(E(),!t)return;let u={x:i.showX!==!1,y:i.showY!==!1,z:i.showZ!==!1};function p(A){if(A.kind==="arrow"){let se=A.key.replace("-","")[0];return u[se]}if(A.kind==="ring")return u[A.key];let w=["x","y","z"][A.axisA],M=["x","y","z"][A.axisB];return u[w]&&u[M]}let C=f();for(let A of P()){if(!p(A))continue;let w=x(A,h(A.key)),M=e.add({polygons:w,objectUrls:[],warnings:[],dispose:()=>{}},{excludeFromAutoCenter:!0,id:`__poly-gizmo-${A.key}`,position:C}),se=y(A);if(M.element.classList.add("polycss-transform-gizmo",se,`${se}--${A.key}`),A.kind==="ring"){let he=(1-ai)/Fo,_=(1+ai)/Fo;M.element.style.setProperty("--ring-inner-ratio",`${he}`),M.element.style.setProperty("--ring-outer-ratio",`${_}`)}l.set(A.key,{handle:M,spec:A})}}function E(){for(let{handle:u}of l.values())u.remove();l.clear(),c=null,a=null}function H(){if(!t)return;let u=f();for(let{handle:p}of l.values())p.setTransform({position:u})}function k(){t&&(l.size===0?v():H())}function N(u){if(t=u,!u){m=[0,0,0],E();return}m=tc(u.polygons),E(),v()}function R(){N(null)}function K(u){u!==o&&(o=u,t&&(E(),v()))}function z(u,p,C){if(!t||!O)return;let A=[O[0]+p*C[0],O[1]+p*C[1],O[2]+p*C[2]];t.setTransform({position:A}),H(),i.onObjectChange?.({object:t,position:A}),i.onChange?.()}let O=null,$=null,U=u=>{if(!t||i.enabled===!1)return;let p={x:i.showX!==!1,y:i.showY!==!1,z:i.showZ!==!1};if(o==="translate"){for(let C of di){let A=["x","y","z"][C.axisA],w=["x","y","z"][C.axisB];if(!p[A]||!p[w])continue;let M=l.get(C.key);if(M&&Fn(M.handle.element,u.clientX,u.clientY)){u.preventDefault(),u.stopPropagation(),a=C.key,g(),O=(t.transform.position??[0,0,0]).slice(),oc({axisA:C.axisA,axisB:C.axisB,probeDistanceCss:Io(t.polygons)*r,wrapper:M.handle.element,target:t,startClientX:u.clientX,startClientY:u.clientY,translationSnap:i.translationSnap??null,onPlaneDelta:(se,he,_,ne)=>{if(!t||!O)return;let oe=[O[0]+se*_[0]+he*ne[0],O[1]+se*_[1]+he*ne[1],O[2]+se*_[2]+he*ne[2]];t.setTransform({position:oe}),H(),i.onObjectChange?.({object:t,position:oe}),i.onChange?.()},onMouseDown:i.onMouseDown,onMouseUp:i.onMouseUp,onDraggingChanged:se=>{se||(a=null,O=null,g()),i.onDraggingChanged?.(se)}});return}}for(let C of ci){let A=C.key.replace("-","")[0];if(!p[A])continue;let w=l.get(C.key);if(w&&Fn(w.handle.element,u.clientX,u.clientY)){u.preventDefault(),u.stopPropagation(),a=C.key,g(),O=(t.transform.position??[0,0,0]).slice(),nc({cssAxis:C.cssAxis,sign:C.sign,shaftLengthCss:Io(t.polygons)*r,wrapper:w.handle.element,target:t,startClientX:u.clientX,startClientY:u.clientY,translationSnap:i.translationSnap??null,onAxisDelta:(M,se)=>z(C,M,se),onMouseDown:i.onMouseDown,onMouseUp:i.onMouseUp,onDraggingChanged:M=>{M||(a=null,O=null,g()),i.onDraggingChanged?.(M)}});return}}}else if(o==="rotate")for(let C of ui){if(!p[C.key])continue;let A=l.get(C.key);if(A&&Fn(A.handle.element,u.clientX,u.clientY)){u.preventDefault(),u.stopPropagation(),a=C.key,g(),$=(t.transform.rotation??[0,0,0]).slice(),rc({cssAxis:C.cssAxis,wrapper:A.handle.element,target:t,startClientX:u.clientX,startClientY:u.clientY,rotationSnap:i.rotationSnap??null,onAngleDelta:w=>{if(!t||!$)return;let M=C.cssAxis===0?-1:1,se=[0,0,0];se[C.cssAxis]=1;let he=w*M*Math.PI/180,_=Na($),ne=Ba(se,he),oe=Va(Ua(ne,_));t.setTransform({rotation:oe}),i.onObjectChange?.({object:t,rotation:oe}),i.onChange?.()},onMouseDown:i.onMouseDown,onMouseUp:i.onMouseUp,onDraggingChanged:w=>{w||(a=null,$=null,g(),t?.rebakeAtlas()),i.onDraggingChanged?.(w)}});return}}};e.host.addEventListener("pointerdown",U,{capture:!0});let ie=u=>{if(!t||a||i.enabled===!1)return;let p=null;for(let[C,A]of l)if(Fn(A.handle.element,u.clientX,u.clientY)){p=C;break}p!==c&&(c=p,g())};e.host.addEventListener("pointermove",ie);function xe(){e.host.removeEventListener("pointerdown",U,{capture:!0}),e.host.removeEventListener("pointermove",ie),E()}return{attach:N,detach:R,setMode:K,update:k,destroy:xe}}var ic=typeof HTMLElement<"u"?HTMLElement:class{},sc=["mode","target","size","enabled"];function fi(e){if(e==="translate"||e==="rotate")return e}var Bn=class extends ic{constructor(){super(...arguments);this._tc=null}static get observedAttributes(){return[...sc]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof je)return t;t=t.parentNode}return null}_findTargetMesh(){let t=this.getAttribute("target");if(!t)return null;let o=this._findScene();if(!o)return null;let r=null;try{r=o.querySelector(`#${t}`)??o.querySelector(t)}catch{r=o.querySelector(`[id="${t}"]`)}return r instanceof _t?r:null}_readOptions(){let t={},o=fi(this.getAttribute("mode"));o!==void 0&&(t.mode=o);let r=le(this.getAttribute("size"));r!==void 0&&(t.size=r);let i=this.getAttribute("enabled");return i!==null&&(t.enabled=i!=="false"&&i!=="0"),t.onObjectChange=l=>{this.dispatchEvent(new CustomEvent("polycss:object-change",{bubbles:!0,detail:{position:l.position,rotation:l.rotation}}))},t}_attach(){if(this._tc)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let i=()=>{t.removeEventListener("polycss:scene-ready",i),this._attach()};t.addEventListener("polycss:scene-ready",i)}return}this._tc=pi(o,this._readOptions());let r=this._findTargetMesh();if(r){let i=r.getMeshHandle();i&&this._tc.attach(i)}}connectedCallback(){this._attach()}disconnectedCallback(){this._tc&&(this._tc.destroy(),this._tc=null)}attributeChangedCallback(t,o,r){if(o!==r&&this._tc){if(t==="mode"){let i=fi(r);i&&this._tc.setMode(i)}else if(t==="target"){let i=this._findTargetMesh();this._tc.attach(i?i.getMeshHandle()??null:null)}}}};function lc(e,n,t){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let i=r.getBoundingClientRect();if(!(i.width<=0||i.height<=0)&&n>=i.left&&n<=i.right&&t>=i.top&&t<=i.bottom)return!0}return!1}function gi(e,n={}){let t=[],o=new Set;n.onChange&&o.add(n.onChange);function r(){t=n.filter?n.filter(t):t;for(let P of o)try{P(t)}catch(v){console.error("[polycss/createSelect] onChange threw:",v)}}function i(y){t=y,r()}function l(y){n.multiple?t.includes(y)||(t=[...t,y]):t=[y],r()}function c(y){t.includes(y)&&(t=t.filter(P=>P!==y),r())}function a(y){t.includes(y)?t=t.filter(P=>P!==y):n.multiple?t=[...t,y]:t=[y],r()}function m(){t.length!==0&&(t=[],r())}function f(y){return t.includes(y)}function h(y,P){for(let v of e.meshes())if(!v.element.classList.contains("polycss-transform-gizmo")&&lc(v.element,y,P))return v;return null}let g=y=>{let P=y.target;if(P?.closest(".polycss-transform-gizmo"))return;let v=e.findMeshByElement(P)??h(y.clientX,y.clientY);if(!v){n.onPointerMissed&&n.onPointerMissed(y),n.clearOnMiss!==!1&&m();return}n.multiple&&(y.shiftKey||y.metaKey||y.ctrlKey)?a(v):t.length===1&&t[0]===v?m():i([v])};e.host.addEventListener("click",g);function x(){e.host.removeEventListener("click",g),o.clear()}return{get selected(){return t},set:i,add:l,remove:c,toggle:a,clear:m,has:f,destroy:x}}var ac=typeof HTMLElement<"u"?HTMLElement:class{},cc=["multiple","clear-on-miss"],Nn=class extends ac{constructor(){super(...arguments);this._selection=null}static get observedAttributes(){return[...cc]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof je)return t;t=t.parentNode}return null}_readOptions(){return{multiple:this.hasAttribute("multiple"),clearOnMiss:!this.hasAttribute("clear-on-miss")||this.getAttribute("clear-on-miss")!=="false",onChange:t=>{this.dispatchEvent(new CustomEvent("polycss:select",{bubbles:!0,detail:{selected:t}}))}}}_attach(){if(this._selection)return;let t=this._findScene(),o=t?.getScene();if(!o){if(t){let r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._selection=gi(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._selection&&(this._selection.destroy(),this._selection=null)}attributeChangedCallback(t,o,r){o!==r&&(this._selection&&(this._selection.destroy(),this._selection=null),this._attach())}};import{boxPolygons as uc,planePolygons as dc,ringPolygons as mc,octahedronPolygons as pc,spherePolygons as fc,tetrahedronPolygons as gc,icosahedronPolygons as hc,dodecahedronPolygons as yc,cylinderPolygons as bc,conePolygons as vc,torusPolygons as xc,computeSceneBbox as Pc}from"@layoutit/polycss-core";var Sc=typeof HTMLElement<"u"?HTMLElement:class{};function Cc(e){return e.closest("poly-scene")??null}function Me(e,n,t){let o=e.getAttribute(n);if(!o)return t;let r=parseFloat(o);return Number.isFinite(r)?r:t}function st(e,n,t){return e.getAttribute(n)??t}function Un(e,n){let t=e.getAttribute(n);if(!t)return;let o=t.split(",").map(r=>parseFloat(r.trim()));if(!(o.length!==3||o.some(r=>!Number.isFinite(r))))return[o[0],o[1],o[2]]}function Ec(e){if(e.length===0)return e;let n=Pc(e),t=(n.min[0]+n.max[0])/2,o=(n.min[1]+n.max[1])/2,r=(n.min[2]+n.max[2])/2;if(t===0&&o===0&&r===0)return e;let i=l=>[l[0]-t,l[1]-o,l[2]-r];return e.map(l=>({...l,vertices:l.vertices.map(i)}))}var Ze=class extends Sc{constructor(){super(...arguments);this._handle=null}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}_mount(){let t=Cc(this);if(!t)return;let o=t.getScene?.();if(!o)return;let r=this.buildPolygons();this.hasAttribute("auto-center")&&(r=Ec(r));let i={polygons:r,objectUrls:[],warnings:[],dispose:()=>{}};this._handle=o.add(i,{position:Un(this,"position"),scale:(()=>{let l=this.getAttribute("scale");if(!l)return;if(l.includes(","))return Un(this,"scale");let c=parseFloat(l);return Number.isFinite(c)?c:void 0})(),rotation:Un(this,"rotation"),merge:!1})}},$n=class extends Ze{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){let n=this.getAttribute("size"),t=n?parseFloat(n):void 0;return uc({size:t!==void 0&&Number.isFinite(t)?t:void 0,color:st(this,"color")})}},Gn=class extends Ze{static get observedAttributes(){return["axis","size","color","auto-center","position","scale","rotation"]}buildPolygons(){let n=Me(this,"axis",2);return dc({axis:n===0||n===1||n===2?n:2,size:Me(this,"size",.4),color:st(this,"color")})}},Yn=class extends Ze{static get observedAttributes(){return["axis","radius","segments","half-thickness","color","auto-center","position","scale","rotation"]}buildPolygons(){let n=Me(this,"axis",2),t=n===0||n===1||n===2?n:2,o=this.getAttribute("half-thickness");return mc({axis:t,radius:Me(this,"radius",50),segments:Me(this,"segments",32),halfThickness:o?parseFloat(o):void 0,color:st(this,"color")})}},jn=class extends Ze{static get observedAttributes(){return["size","color","center","auto-center","position","scale","rotation"]}buildPolygons(){return pc({center:Un(this,"center")??[0,0,0],size:Me(this,"size",50),color:st(this,"color")})}},Xn=class extends Ze{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){return gc({size:Me(this,"size",100),color:st(this,"color")})}},Wn=class extends Ze{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){return hc({size:Me(this,"size",100),color:st(this,"color")})}},Zn=class extends Ze{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){return yc({size:Me(this,"size",100),color:st(this,"color")})}},Qn=class extends Ze{static get observedAttributes(){return["radius","subdivisions","color","auto-center","position","scale","rotation"]}buildPolygons(){return fc({radius:Me(this,"radius",50),subdivisions:Me(this,"subdivisions",1),color:st(this,"color")})}},qn=class extends Ze{static get observedAttributes(){return["radius","radius-top","height","radial-segments","color","auto-center","position","scale","rotation"]}buildPolygons(){let n=this.getAttribute("radius-top");return bc({radius:Me(this,"radius",50),radiusTop:n?parseFloat(n):void 0,height:Me(this,"height",100),radialSegments:Me(this,"radial-segments",12),color:st(this,"color")})}},Kn=class extends Ze{static get observedAttributes(){return["radius","height","radial-segments","color","auto-center","position","scale","rotation"]}buildPolygons(){return vc({radius:Me(this,"radius",50),height:Me(this,"height",100),radialSegments:Me(this,"radial-segments",12),color:st(this,"color")})}},Jn=class extends Ze{static get observedAttributes(){return["radius","tube","radial-segments","tubular-segments","color","auto-center","position","scale","rotation"]}buildPolygons(){return xc({radius:Me(this,"radius",50),tube:Me(this,"tube",15),radialSegments:Me(this,"radial-segments",12),tubularSegments:Me(this,"tubular-segments",16),color:st(this,"color")})}};typeof customElements<"u"&&(customElements.get("poly-scene")||customElements.define("poly-scene",je),customElements.get("poly-mesh")||customElements.define("poly-mesh",_t),customElements.get("poly-polygon")||customElements.define("poly-polygon",Pn),customElements.get("poly-axes-helper")||customElements.define("poly-axes-helper",Sn),customElements.get("poly-directional-light-helper")||customElements.define("poly-directional-light-helper",Cn),customElements.get("poly-orbit-controls")||customElements.define("poly-orbit-controls",_n),customElements.get("poly-map-controls")||customElements.define("poly-map-controls",Rn),customElements.get("poly-first-person-controls")||customElements.define("poly-first-person-controls",Dn),customElements.get("poly-perspective-camera")||customElements.define("poly-perspective-camera",kn),customElements.get("poly-orthographic-camera")||customElements.define("poly-orthographic-camera",Ot),customElements.get("poly-camera")||customElements.define("poly-camera",On),customElements.get("poly-transform-controls")||customElements.define("poly-transform-controls",Bn),customElements.get("poly-select")||customElements.define("poly-select",Nn),customElements.get("poly-box")||customElements.define("poly-box",$n),customElements.get("poly-plane")||customElements.define("poly-plane",Gn),customElements.get("poly-ring")||customElements.define("poly-ring",Yn),customElements.get("poly-octahedron")||customElements.define("poly-octahedron",jn),customElements.get("poly-tetrahedron")||customElements.define("poly-tetrahedron",Xn),customElements.get("poly-sphere")||customElements.define("poly-sphere",Qn),customElements.get("poly-icosahedron")||customElements.define("poly-icosahedron",Wn),customElements.get("poly-dodecahedron")||customElements.define("poly-dodecahedron",Zn),customElements.get("poly-cylinder")||customElements.define("poly-cylinder",qn),customElements.get("poly-cone")||customElements.define("poly-cone",Kn),customElements.get("poly-torus")||customElements.define("poly-torus",Jn));export{Sn as PolyAxesHelperElement,$n as PolyBoxElement,On as PolyCameraElement,Kn as PolyConeElement,qn as PolyCylinderElement,Cn as PolyDirectionalLightHelperElement,Zn as PolyDodecahedronElement,Dn as PolyFirstPersonControlsElement,Wn as PolyIcosahedronElement,Rn as PolyMapControlsElement,_t as PolyMeshElement,jn as PolyOctahedronElement,_n as PolyOrbitControlsElement,Ot as PolyOrthographicCameraElement,kn as PolyPerspectiveCameraElement,Gn as PolyPlaneElement,Pn as PolyPolygonElement,Yn as PolyRingElement,je as PolySceneElement,Nn as PolySelectElement,Qn as PolySphereElement,Xn as PolyTetrahedronElement,Jn as PolyTorusElement,Bn as PolyTransformControlsElement};