@layoutit/polycss 0.2.6 → 0.2.7
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/README.md +1 -2
- package/dist/{PolyShapeElements-YDkJX2Fz.d.cts → PolyShapeElements-LEK_aL9q.d.cts} +56 -1
- package/dist/{PolyShapeElements-YDkJX2Fz.d.ts → PolyShapeElements-LEK_aL9q.d.ts} +56 -1
- package/dist/elements.cjs +2 -2
- package/dist/elements.d.cts +1 -1
- package/dist/elements.d.ts +1 -1
- package/dist/elements.js +2 -2
- package/dist/index.cjs +20 -20
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +20 -20
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{CAMERA_BACKFACE_CULL_EPS as Ho,DEFAULT_SEAM_BLEED as ni,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Ql,cameraCullNormalKey as Kl,cameraCullVisibleSignature as Jl,computeSceneBbox as ec,computeLightVisibility as tc,capturePolyCameraSnapshot as nc,findOverlappingPolygonDuplicates as Ks,inverseRotateVec3 as Fo,isAxisAlignedSurfaceNormal as oc,isVoxelCameraCullableNormalGroups as rc,normalFacesCamera as sc,optimizeMeshPolygons as ic,parseHexColor as ac,polygonCssSurfaceNormal as Js}from"@layoutit/polycss-core";import{packTextureAtlasPlansWithScaleCore as Bi}from"@layoutit/polycss-core";function Vi(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 Et(e,n,t,o){return Bi(e,n,Vi(t),o)}import{buildTextureEdgeRepairSets as ss,buildSeamBleedPolygonEdges as Va,buildSeamBleedPolygonSet as Na}from"@layoutit/polycss-core";import{TEXTURE_TRIANGLE_BLEED as Ni,TEXTURE_EDGE_REPAIR_ALPHA_MIN as ji,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as $i,TEXTURE_EDGE_REPAIR_RADIUS as wr}from"@layoutit/polycss-core";import{expandClipPoints as Ui}from"@layoutit/polycss-core";import{BASIS_EPS as Wi}from"@layoutit/polycss-core";var At=new Map;function Gi(e){let n=At.get(e);return n||(n=new Promise((t,o)=>{let s=new Image;s.decoding="async",s.crossOrigin="anonymous",s.onload=()=>t(s),s.onerror=()=>o(new Error(`texture load failed: ${e}`)),s.src=e}),At.set(e,n),n.then(()=>{At.get(e)===n&&At.delete(e)},()=>{At.get(e)===n&&At.delete(e)})),n}function _e(e,n,t=1,o=0,s=0,r=1,i=0,c=0){e.setTransform(t*n,o*n,s*n,r*n,i*n,c*n)}function Qn(e){let n=e/255;return n<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Kn(e){let n=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(n*255)))}function Yi(e,n,t,o,s,r,i){let c=Math.round(n*i),l=Math.round(t*i),u=Math.max(1,Math.round(o*i)),d=Math.max(1,Math.round(s*i)),P=e.getImageData(c,l,u,d),f=P.data,b=r.r,x=r.g,v=r.b;for(let y=0;y<f.length;y+=4)f[y+3]!==0&&(f[y]=Kn(Qn(f[y])*b),f[y+1]=Kn(Qn(f[y+1])*x),f[y+2]=Kn(Qn(f[y+2])*v));e.putImageData(P,c,l)}function Xi(e,n,t,o,s,r,i){let c=n.naturalWidth||n.width||1,l=n.naturalHeight||n.height||1,u=Math.max(s/c,r/l),d=c*u,P=l*u;_e(e,i),e.drawImage(n,t+(s-d)/2,o+(r-P)/2,d,P)}function wt(e,n){return Math.max(0,Math.min(n,e))}function Mr(e,n,t,o,s,r,i,c){let l=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,d=wt(Math.min(t.minU,t.maxU)*l,l),P=wt(Math.max(t.minU,t.maxU)*l,l),f=wt(Math.min(t.minV,t.maxV)*u,u),b=wt(Math.max(t.minV,t.maxV)*u,u),x=Math.floor(d),v=Math.floor(f),y=Math.ceil(P)-x,C=Math.ceil(b)-v;y<1&&(x=Math.floor(wt((t.minU+t.maxU)/2*l,l-1)),y=1),C<1&&(v=Math.floor(wt((t.minV+t.maxV)/2*u,u-1)),C=1),x=Math.max(0,Math.min(l-1,x)),v=Math.max(0,Math.min(u-1,v)),y=Math.max(1,Math.min(l-x,y)),C=Math.max(1,Math.min(u-v,C)),_e(e,c),e.drawImage(n,x,v,y,C,o,s,r,i)}function Or(e){return e==="repeat"||e==="mirrored-repeat"}function Lr(e,n){return Or(e)?Math.floor(n):0}function Rr(e,n){return Or(e)?Math.ceil(n)-1:0}function kr(e,n){return e==="mirrored-repeat"&&Math.abs(n%2)===1}function _r(e,n,t,o,s,r,i){let c=s?Lr(r,s.minU):0,l=s?Rr(r,s.maxU):0,u=s?Lr(i,s.minV):0,d=s?Rr(i,s.maxV):0;for(let P=c;P<=l;P++)for(let f=u;f<=d;f++){let b=kr(r,P),x=kr(i,f);if(!b&&!x){e.drawImage(n,P*t,f*o);continue}e.save(),e.translate((b?P+1:P)*t,(x?f+1:f)*o),e.scale(b?-1:1,x?-1:1),e.drawImage(n,0,0),e.restore()}}function Jn(e,n,t,o){for(let s=0;s<o.length;s+=2){let r=n+o[s],i=t+o[s+1];s===0?e.moveTo(r,i):e.lineTo(r,i)}e.closePath()}function yn(e,n,t,o,s,r){for(let i=0;i<o.length;i+=2){let c=n+o[i]+s,l=t+o[i+1]+r;i===0?e.moveTo(c,l):e.lineTo(c,l)}e.closePath()}function qi(e,n,t,o){_e(e,o),e.beginPath(),Jn(e,n.x,n.y,n.screenPts),e.clip(),_e(e,o),e.fillStyle=t==="dynamic"?n.polygon.color??"#cccccc":n.shadedColor,e.fillRect(n.x,n.y,n.canvasW,n.canvasH)}function bn(e,n,t,o,s){n.polygon.textureAlphaMode==="opaque"&&(_e(e,t),e.fillStyle=n.polygon.color??"#cccccc",e.fillRect(n.x+o,n.y+s,n.canvasW,n.canvasH))}function Zi(e,n,t,o,s=0,r=0){if(n.textureTriangles?.length){let i=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1;for(let l of n.textureTriangles){let u=Ui(l.screenPts,Ni*(n.bleedRatio??1));e.save(),_e(e,o),e.beginPath(),yn(e,n.x,n.y,u,s,r),e.clip(),bn(e,n,o,s,r),l.uvAffine?(_e(e,o,l.uvAffine.a/i,l.uvAffine.c/i,l.uvAffine.b/c,l.uvAffine.d/c,n.x+l.uvAffine.e+s,n.y+l.uvAffine.f+r),_r(e,t,i,c,l.uvSampleRect,n.polygon.textureWrap?.s,n.polygon.textureWrap?.t)):l.uvSampleRect&&Mr(e,t,l.uvSampleRect,n.x+s,n.y+r,n.canvasW,n.canvasH,o),e.restore()}}else if(n.uvAffine){let i=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,l=n.polygon.textureAlphaMode==="opaque";l&&(e.save(),_e(e,o),e.beginPath(),yn(e,n.x,n.y,n.screenPts,s,r),e.clip(),bn(e,n,o,s,r)),_e(e,o,n.uvAffine.a/i,n.uvAffine.c/i,n.uvAffine.b/c,n.uvAffine.d/c,n.x+n.uvAffine.e+s,n.y+n.uvAffine.f+r),_r(e,t,i,c,n.uvSampleRect,n.polygon.textureWrap?.s,n.polygon.textureWrap?.t),l&&e.restore()}else if(n.uvSampleRect){let i=n.polygon.textureAlphaMode==="opaque";i&&(e.save(),_e(e,o),e.beginPath(),yn(e,n.x,n.y,n.screenPts,s,r),e.clip(),bn(e,n,o,s,r)),Mr(e,t,n.uvSampleRect,n.x+s,n.y+r,n.canvasW,n.canvasH,o),i&&e.restore()}else{let i=n.polygon.textureAlphaMode==="opaque";i&&(e.save(),_e(e,o),e.beginPath(),yn(e,n.x,n.y,n.screenPts,s,r),e.clip(),bn(e,n,o,s,r)),Xi(e,t,n.x+s,n.y+r,n.canvasW,n.canvasH,o),i&&e.restore()}}function Qi(e,n,t,o,s,r){let i=s-t,c=r-o,l=i*i+c*c;if(l<=Wi)return Math.hypot(e-t,n-o);let u=Math.max(0,Math.min(1,((e-t)*i+(n-o)*c)/l));return Math.hypot(e-(t+i*u),n-(o+c*u))}function Ki(e,n,t,o){let s=1/0,r=t.length/2;for(let i of o){if(i<0||i>=r)continue;let c=i*2,l=(i+1)%r*2;s=Math.min(s,Qi(e,n,t[c],t[c+1],t[l],t[l+1]))}return s}function Ji(e,n,t,o,s,r){let i=Math.max(0,o-r),c=Math.min(n-1,o+r),l=Math.max(0,s-r),u=Math.min(t-1,s+r),d=null,P=1/0;for(let f=l;f<=u;f++)for(let b=i;b<=c;b++){if(b===o&&f===s)continue;let x=b-o,v=f-s,y=x*x+v*v;if(y>r*r||y>=P)continue;let C=(f*n+b)*4;e[C+3]<$i||(d=C,P=y)}return d}function ea(e,n,t){if(!n.textureEdgeRepair||!n.texture||!n.textureEdgeRepairEdges||n.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let s=Math.max(0,Math.floor(n.x*t)),r=Math.max(0,Math.floor(n.y*t)),i=Math.max(1,Math.min(o.width-s,Math.ceil(n.canvasW*t))),c=Math.max(1,Math.min(o.height-r,Math.ceil(n.canvasH*t)));if(i<=0||c<=0)return;let l;try{l=e.getImageData(s,r,i,c)}catch{return}let u=l.data,d=new Uint8ClampedArray(u),P=Math.max(wr,wr/t),f=Math.max(2,Math.ceil(P*t)+1),b=!1;for(let x=0;x<c;x++)for(let v=0;v<i;v++){let y=(x*i+v)*4,C=u[y+3];if(C<ji||C===255)continue;let O=(s+v+.5)/t-n.x,k=(r+x+.5)/t-n.y;if(Ki(O,k,n.screenPts,n.textureEdgeRepairEdges)>P)continue;let j=Ji(d,i,c,v,x,f);j!==null&&(u[y]=d[j],u[y+1]=d[j+1],u[y+2]=d[j+2],u[y+3]=255,b=!0)}b&&e.putImageData(l,s,r)}function ta(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 na(e,n,t,o){let s=t.createElement("canvas");s.width=Math.max(1,Math.ceil(e.width*o)),s.height=Math.max(1,Math.ceil(e.height*o));let r=e.entries.some(d=>d.textureEdgeRepair&&d.texture&&d.textureEdgeRepairEdges&&d.textureEdgeRepairEdges.size>0),i=s.getContext("2d",r?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let c=Array.from(new Set(e.entries.flatMap(d=>d.texture?[d.texture]:[]))),l=new Map;await Promise.all(c.map(async d=>{l.set(d,await Gi(d))}));for(let d of e.entries){let P=d.texture?l.get(d.texture):null;if(!d.texture){i.save(),qi(i,d,n,o),i.restore();continue}P&&(i.save(),_e(i,o),i.beginPath(),Jn(i,d.x,d.y,d.screenPts),i.clip(),Zi(i,d,P,o),i.restore()),d.texture&&n==="baked"&&(i.save(),_e(i,o),i.beginPath(),Jn(i,d.x,d.y,d.screenPts),i.clip(),Yi(i,d.x,d.y,d.canvasW,d.canvasH,d.textureTint,o),i.restore()),ea(i,d,o)}let u=await ta(s);return s.width=1,s.height=1,{width:e.width,height:e.height,url:u}}async function Mt(e,n,t,o,s){let r=[];for(let i of e){if(s())break;r.push(await na(i,n,t,o))}return r}import{isFullRectSolid as Be,isSolidTrianglePlan as Ke,isProjectiveQuadPlan as Ve,fullRectBounds as ip,safariCssProjectiveUnsupported as Dr,incrementCount as ap,dominantCountKey as lp,filterAtlasPlans as ra,getSolidPaintDefaultsForPlansCore as sa}from"@layoutit/polycss-core";import{parseHex as ia,rgbKey as aa}from"@layoutit/polycss-core";import{computeTextureAtlasPlan as pp,buildBasisHints as mp}from"@layoutit/polycss-core";import{resolveProjectiveQuadGuards as oa}from"@layoutit/polycss-core";function Lt(e,n){let o=e?.defaultView?.__polycssProjectiveQuadGuards,s=n&&o?{...n,...o}:o??n;return oa(s)}function Rt(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 s=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return s?s("(pointer: fine)").matches&&s("(hover: hover)").matches:!0}function eo(e){if(Ir(e))return!0;let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return t?!Dr(t):!0}function Wt(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 Ir(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 la(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return/\bFirefox\//.test(t)}function Ne(e,n){return n?.disable?.includes("u")?null:Ir(e)?"corner-bevel":eo(e)?la(e)?"border-large":"border":null}function kt(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return t?!Dr(t):!0}function Gt(e,n,t,o,s){let r=new Set(o?.disable??[]);return sa(e,n,r,{solidTriangleSupported:eo(t),projectiveQuadSupported:kt(t),cornerShapeSupported:Wt(t),borderShapeSupported:Rt(t)},ia,aa,s)}function to(e,n,t=new Set,o){let s=o??(typeof document<"u"?document:null);if(!s)return{};let r=t.size>0?{disable:Array.from(t)}:void 0;return Gt(e,n,s,r)}function xn(e){let n=e??(typeof document<"u"?document:null);if(!n){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let s=typeof matchMedia<"u"?matchMedia:void 0;return s?s("(pointer: fine)").matches&&s("(hover: hover)").matches:!0}return Rt(n)}function Pn(e){let n=e??(typeof document<"u"?document:null);if(!n){let t=typeof CSS<"u"?CSS:void 0;if(t?.supports?.("corner-top-left-shape","bevel")&&t.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let s=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||s}return eo(n)}function no(e,n,t,o){let s=o??(typeof document<"u"?document:null);return ra(e,n,t,{solidTriangleSupported:Pn(o),projectiveQuadSupported:s?kt(s):!0,borderShapeSupported:xn(o)})}import{ASYNC_RENDER_BUDGET_MS as Da,DEFAULT_SEAM_BLEED as Kr,DEFAULT_TILE as Ia,PROJECTIVE_QUAD_DENOM_EPS as Ha,PROJECTIVE_QUAD_MAX_WEIGHT_RATIO as Fa,PROJECTIVE_QUAD_BLEED as Qr,resolveBleedRatio as Eo}from"@layoutit/polycss-core";import{buildBasisHints as Ao,buildSeamBleedPolygonEdges as za,computeTextureAtlasPlan as en,resolvePolyTextureLeafGeometry as Jr}from"@layoutit/polycss-core";import{cornerShapeGeometryForPlan as Jt}from"@layoutit/polycss-core";import{formatCssLength as Me,formatMatrix3dValues as ua,formatSolidQuadMatrix as da,resolvePolyTextureImageRendering as pa}from"@layoutit/polycss-core";import{shadePolygon as ma}from"@layoutit/polycss-core";import{parseHex as Hr,rgbKey as Fr}from"@layoutit/polycss-core";function Pe(e,n,t){let o=e.getAttribute("style")??"",s=`${n}:${t}`,r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`(^|;)\\s*${r}\\s*:[^;]*`,"i"),c=i.test(o)?o.replace(i,(l,u)=>`${u}${s}`):`${o}${o.trim()&&!o.trim().endsWith(";")?";":""}${s}`;c!==o&&e.setAttribute("style",c)}function ot(e,n){let t=e.getAttribute("style")??"";if(!t||!t.toLowerCase().includes(n.toLowerCase()))return;let o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`^\\s*${o}\\s*:`,"i"),r=t.split(";").map(i=>i.trim()).filter(i=>i&&!s.test(i)).join(";");r?e.setAttribute("style",r):e.removeAttribute("style")}function Yt(e,n,t,o=!1){if(n==="dynamic"){let s=Hr(e.polygon.color??"#cccccc"),r=o?"":`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return Fr(s)!==t?.dynamicColorKey&&(r+=`;--psr:${(s.r/255).toFixed(4)};--psg:${(s.g/255).toFixed(4)};--psb:${(s.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function ca(e,n){Pe(e,"--pnx",n.normal[0].toFixed(4)),Pe(e,"--pny",n.normal[1].toFixed(4)),Pe(e,"--pnz",n.normal[2].toFixed(4))}function _t(e,n,t,o){if(t==="dynamic"){ot(e,"color"),ot(e,"background"),ca(e,n);let s=Hr(n.polygon.color??"#cccccc");Fr(s)===o?.dynamicColorKey?(ot(e,"--psr"),ot(e,"--psg"),ot(e,"--psb")):(Pe(e,"--psr",(s.r/255).toFixed(4)),Pe(e,"--psg",(s.g/255).toFixed(4)),Pe(e,"--psb",(s.b/255).toFixed(4)))}else n.shadedColor!==o?.paintColor?(ot(e,"background"),Pe(e,"color",n.shadedColor)):(ot(e,"background"),ot(e,"color"))}import{formatBorderShapeElementStyle as zr,formatCornerShapeElementStyle as Br}from"@layoutit/polycss-core";import{atlasCanonicalSizeForEntry as Sn}from"@layoutit/polycss-core";import{computeProjectiveQuadMatrix as fa,stableBasisFromPlan as ga}from"@layoutit/polycss-core";import{DEFAULT_LIGHT_DIR as ha,DEFAULT_LIGHT_COLOR as ya,DEFAULT_LIGHT_INTENSITY as ba,DEFAULT_AMBIENT_COLOR as xa,DEFAULT_AMBIENT_INTENSITY as Pa}from"@layoutit/polycss-core";var Vr="polycss-corner-shape-solid";function Xt(e){return e.atlasLeafWidth??Sn(e)}function qt(e){return e.atlasLeafHeight??Sn(e)}function Nr(e,n){return pa(e.polygon,n)}function vn(e){return e==="pixelated"?";image-rendering:pixelated":""}function so(e,n,t,o,s,r,i,c,l){e.setAttribute("data-polycss-leaf","polygon"),e.setAttribute("data-polycss-texture-backend",n),e.setAttribute("data-polycss-texture-ready",t?"true":"false"),e.setAttribute("data-polycss-texture-image-rendering",o),s?e.setAttribute("data-polycss-texture-leaf-sizing",s):e.removeAttribute("data-polycss-texture-leaf-sizing"),r?e.setAttribute("data-polycss-texture-projection",r):e.removeAttribute("data-polycss-texture-projection"),i?e.setAttribute("data-polycss-texture-lighting",i):e.removeAttribute("data-polycss-texture-lighting"),typeof c=="number"?e.setAttribute("data-polycss-texture-leaf-width",String(c)):e.removeAttribute("data-polycss-texture-leaf-width"),typeof l=="number"?e.setAttribute("data-polycss-texture-leaf-height",String(l)):e.removeAttribute("data-polycss-texture-leaf-height")}var oo=new WeakMap,ro=new WeakMap;function ye(e,n,t){let o=oo.get(e),s=ro.get(e),r=typeof t=="number";if(!n.data&&!r&&(!o||o.length===0)){e.__polycssHasDataAttrs=!1;return}let i=new Map;if(n.data)for(let[l,u]of Object.entries(n.data))i.set(l,String(u));if(n.doubleSided===!0&&i.set("polycss-double-sided","true"),r&&i.set("poly-index",String(t)),o)for(let l of o)i.has(l)||e.removeAttribute(`data-${l}`);for(let[l,u]of i)s?.get(l)!==u&&e.setAttribute(`data-${l}`,u);let c=Array.from(i.keys());c.length>0?oo.set(e,c):oo.delete(e),i.size>0?ro.set(e,i):ro.delete(e),e.__polycssHasDataAttrs=c.length>0}function Ot(e){return e.__polycssHasDataAttrs===!0}function io(e,n,t,o,s=t==="dynamic",r){if(!n.url)return;let i=Nr(o,r),c=`url(${n.url})`,l=o.canvasW||1,u=o.canvasH||1,d=Sn(o),P=Xt(o),f=qt(o),b=`${Me(-o.x/l*P)} ${Me(-o.y/u*f)}`,x=`${Me(n.width/l*P)} ${Me(n.height/u*f)}`,v=`transform:matrix3d(${o.atlasMatrix});--polycss-atlas-size:${d}px;--polycss-atlas-width:${Me(P)};--polycss-atlas-height:${Me(f)};--polycss-atlas-leaf-sizing:${o.atlasLeafSizing??"canonical"}`,y=`${v};--polycss-atlas-position:${b};--polycss-atlas-image-size:${x}`;if(t==="dynamic"){let C=s?`;--pnx:${o.normal[0].toFixed(4)};--pny:${o.normal[1].toFixed(4)};--pnz:${o.normal[2].toFixed(4)}`:"";e.setAttribute("style",y+`;--polycss-atlas-url:${c}`+C+vn(i))}else e.setAttribute("style",v+`;background-image:${c};background-position:${b};background-size:${x};background-repeat:no-repeat;--pnx:${o.normal[0].toFixed(4)};--pny:${o.normal[1].toFixed(4)};--pnz:${o.normal[2].toFixed(4)}`+vn(i));so(e,"atlas",!0,i,o.atlasLeafSizing??"canonical","affine",t,P,f)}function jr(e,n,t,o){if(n.texture){if(!t.texture||n.texture!==t.texture)return!1}else if(t.texture)return!1;let s=$r(n,t);return s?(e.style.visibility="",Pe(e,"transform",`matrix3d(${s.matrix})`),o==="dynamic"&&(Pe(e,"--pnx",s.normal[0].toFixed(4)),Pe(e,"--pny",s.normal[1].toFixed(4)),Pe(e,"--pnz",s.normal[2].toFixed(4))),ye(e,t,n.index),!0):(e.style.visibility="hidden",ye(e,t,n.index),!0)}function ao(e,n,t,o,s){if(o!=="baked")return{...e,polygon:n,normal:t};let r=s.directionalLight,i=s.ambientLight,c=r?.direction??ha,l=r?.color??ya,u=Math.max(0,r?.intensity??ba),d=i?.color??xa,P=Math.max(0,i?.intensity??Pa),f=Math.hypot(c[0],c[1],c[2])||1,b=c[0]/f,x=c[1]/f,v=c[2]/f,C=s.lightOccludedPolyIndices?.has(e.index)??!1?0:u*Math.max(0,t[0]*b+t[1]*x+t[2]*v);return{...e,polygon:n,normal:t,shadedColor:ma(n.color??"#cccccc",C,l,d,P)}}function $r(e,n){let t=Ur(e,n);if(!t)return null;let{normal:o,xAxis:s,yAxis:r,tx:i,ty:c,tz:l}=t;return{normal:o,matrix:ua([s[0]*e.canvasW/Xt(e),s[1]*e.canvasW/Xt(e),s[2]*e.canvasW/Xt(e),0,r[0]*e.canvasH/qt(e),r[1]*e.canvasH/qt(e),r[2]*e.canvasH/qt(e),0,o[0],o[1],o[2],0,i,c,l,1])}}var Ur=ga;function va(e,n,t){if(e.screenPts.length!==8||n.vertices.length!==4)return null;let o=Ur(e,n);if(!o)return null;let s=fa(e.screenPts,o.xAxis,o.yAxis,o.normal,o.tx,o.ty,o.tz,t);return s?{matrix:s,normal:o.normal}:null}function lo(e,n,t,o,s=!1){let r=t.createElement("b");return r.setAttribute("style",`transform:matrix3d(${da(e)})`+Yt(e,n,o,s)),ye(r,e.polygon,e.index),r}function co(e,n,t,o,s=!1){let r=t.createElement("i");return r.setAttribute("style",zr(e)+Yt(e,n,o,s)),ye(r,e.polygon,e.index),r}function uo(e,n,t,o,s,r=!1){let i=o.createElement("u");return i.className=Vr,i.setAttribute("style",Br(e,n)+Yt(e,t,s,r)),ye(i,e.polygon,e.index),i}function po(e,n,t,o,s=!1){let r=t.createElement("b");return r.setAttribute("style",`transform:matrix3d(${e.projectiveMatrix})`+Yt(e,n,o,s)),ye(r,e.polygon,e.index),r}function Wr(e,n,t,o,s,r,i){let c=n.projectiveMatrix?va(n,t,r):$r(n,t);if(!c)return!1;let l=ao(n,t,c.normal,o,s);return e.style.visibility="",e.style.transform=`matrix3d(${c.matrix})`,_t(e,l,o,i),ye(e,l.polygon,l.index),!0}function Gr(e,n,t,o){e.style.visibility="",e.setAttribute("style",zr(n)),_t(e,n,t,o),ye(e,n.polygon,n.index)}function Yr(e,n,t,o,s){e.style.visibility="",e.className=Vr,e.setAttribute("style",Br(n,t)),_t(e,n,o,s),Pe(e,"background","currentColor"),ye(e,n.polygon,n.index)}function mo(e,n,t,o=!1,s){let r=t.createElement("s"),i=Nr(e,s),c=Sn(e),l=Xt(e),u=qt(e),d=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:${c}px;--polycss-atlas-width:${Me(l)};--polycss-atlas-height:${Me(u)};--polycss-atlas-leaf-sizing:${e.atlasLeafSizing??"canonical"};opacity:0`+d+vn(i)),so(r,"atlas",!1,i,e.atlasLeafSizing??"canonical","affine",n,l,u),ye(r,e.polygon,e.index),r}function fo(e,n,t,o=!1){let s=t.createElement("s"),r=o?"":`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return s.setAttribute("style",`transform:matrix3d(${n.matrix});--polycss-atlas-width:${Me(n.leafWidth)};--polycss-atlas-height:${Me(n.leafHeight)};--polycss-atlas-leaf-sizing:image;background-image:url(${n.url});background-position:${Me(n.backgroundPosition[0])} ${Me(n.backgroundPosition[1])};background-size:${Me(n.backgroundSize[0])} ${Me(n.backgroundSize[1])};background-repeat:no-repeat;background-blend-mode:normal;mask-image:none;-webkit-mask-image:none`+r+vn(n.imageRendering)),so(s,"image",!0,n.imageRendering,"image",n.projection,n.lighting,n.leafWidth,n.leafHeight),s.setAttribute("data-polycss-texture-source-x",String(n.sourceRect.x)),s.setAttribute("data-polycss-texture-source-y",String(n.sourceRect.y)),s.setAttribute("data-polycss-texture-source-width",String(n.sourceRect.width)),s.setAttribute("data-polycss-texture-source-height",String(n.sourceRect.height)),ye(s,e.polygon,e.index),s}import{computeSolidTriangleColorPlan as Ba}from"@layoutit/polycss-core";import{computeSolidTrianglePlanFromCssPoints as Sa,computeSolidTrianglePlan as Ca}from"@layoutit/polycss-core";function rt(e,n,t,o={}){let s=o.primitive!=null?void 0:(()=>{let r=t.doc??(typeof document<"u"?document:null);return r?Ne(r,t.strategies)??"border":"border"})();return Ca(e,n,t,{...o,resolvedPrimitive:o.resolvedPrimitive??s})}function go(e,n,t,o,s,r,i,c,l,u,d,P,f){let b=o.primitive!=null?void 0:(()=>{let x=t.doc??(typeof document<"u"?document:null);return x?Ne(x,t.strategies)??"border":"border"})();return Sa(e,n,t,{...o,resolvedPrimitive:o.resolvedPrimitive??b},s,r,i,c,l,u,d,P,f)}import{buildSeamBleedPolygonEdges as Ta,DEFAULT_SEAM_BLEED as Ea,DEFAULT_TILE as Rp,resolveBleedRatio as Aa}from"@layoutit/polycss-core";import{rgbEqual as wa,stepRgbToward as Ma,rgbToCss as La,colorErrorScore as Ra}from"@layoutit/polycss-core";import{computeSolidTriangleColorPlan as Xr}from"@layoutit/polycss-core";import{stableTriangleMatrixDecimals as ho}from"@layoutit/polycss-core";var ka="0 48px 96px 48px";function yo(e,n){return Ta(e,{tileSize:n.tileSize,layerElevation:n.layerElevation,directionalLight:n.directionalLight,ambientLight:n.ambientLight})}function bo(e,n,t){let o=Aa(t.seamBleed),s=Ea*o,r={...t,bleedRatio:o};return n&&s>0?{...r,seamBleed:n.has(e)?s:void 0,seamEdges:n.get(e)}:r}function Cn(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 qr(e,n){return!n.updatesDisabled&&(n.freezeFrames<=1||(n.colorFrame+e)%n.freezeFrames===0)}function st(e,n,t,o,s,r){return t?r.updatesDisabled||o==="plan-only"||o==="transform-only"?!1:s==="adaptive"||e.__polycssSolidTriangleColor===void 0?!0:qr(n,r):!0}function xo(e,n){let t=e;t.__polycssSolidTrianglePrimitive!==n&&(n==="corner-bevel"?(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderWidth="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape")):(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape"),e.style.borderWidth=n==="border-large"?ka:""),t.__polycssSolidTrianglePrimitive=n)}function Po(e){let n=e;n.__polycssSolidTriangleHidden&&(e.style.visibility="",n.__polycssSolidTriangleHidden=!1)}function Dt(e){let n=e;n.__polycssSolidTriangleHidden||(e.style.visibility="hidden",n.__polycssSolidTriangleHidden=!0)}function Zt(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||Ot(e))&&ye(e,n.polygon)}function Zr(e,n,t,o){if(!n.colorComputed){(n.polygon.data||Ot(e))&&ye(e,n.polygon);return}let s=e,r=n.bakedColor??"",i=n.bakedRgb,c=n.bakedAlpha??1,l=s.__polycssSolidTriangleColor,u=s.__polycssSolidTriangleColorRgb,d=s.__polycssSolidTriangleColorAlpha??1,P=o??qr(n.index,t);if(!t.updatesDisabled&&l!==r&&(l===void 0||P)){let f=r,b=i;if(t.maxStep>0&&u&&i&&d===c){let x=Ma(u,i,t.maxStep);b=x,f=La(x,c)}(f!==l||!wa(b,u))&&(e.style.color=f),s.__polycssSolidTriangleColor=f,s.__polycssSolidTriangleColorRgb=b,s.__polycssSolidTriangleColorAlpha=c,s.__polycssSolidTriangleColorFrame=t.colorFrame}(n.polygon.data||Ot(e))&&ye(e,n.polygon)}function Qt(e,n,t,o){let s=e;xo(e,n.primitive),s.__polycssSolidTriangleBasis!==n.basis&&(s.__polycssSolidTriangleBasis=n.basis),Po(e),e.style.transform=n.transformText,(n.colorComputed||n.polygon.data||Ot(e))&&Zr(e,n,t,o)}function Tn(e,n,t,o){Po(e),Zr(e,n,t,o)}function Kt(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||Ot(e))&&ye(e,n.polygon)}function _a(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 vo(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)),s=Math.max(1,Math.floor(t.stableTriangleColorFreezeFrames??1));if(s<=1&&!Number.isFinite(t.stableTriangleColorBudget))return null;let r=_a(e.length,t),i=Math.max(1,Math.floor(t.stableTriangleColorMaxAge??Math.max(2,s*2))),c=[];for(let l=0;l<e.length;l++){let u=e[l],d=n[l];if(u.kind!=="triangle"||!d)continue;let P=u.element,f=P.__polycssSolidTriangleColor,b=d.bakedColor??"";if(f===b)continue;let x=P.__polycssSolidTriangleColorFrame??0,v=Math.max(0,o-x),y=Ra(f,b);c.push({index:l,score:(v>=i?1e6:0)+y*1e4+v})}return c.length===0?new Set:(c.sort((l,u)=>u.score-l.score),new Set(c.slice(0,r).map(l=>l.index)))}function En(e,n){let t=n.createElement("u");return Zt(t,e),ye(t,e.polygon,e.index),t}function Oa(e,n,t){let o=t.createElement("u");return Dt(o),ye(o,e,n),o}function So(e,n,t,o,s,r){let i=t,c=i.stableTriangleDebug,l=o&&s==="color-only";if(i.stableTriangleColorPolicy==="adaptive"||e.length!==n.length)return!1;let u=ho(i.stableTriangleMatrixDecimals),d=t.doc??(typeof document<"u"?document:null),P=d?Ne(d,t.strategies)??"border":"border";for(let b=0;b<e.length;b++){let x=e[b];if(x.kind!=="triangle"||x.polygonIndex!==b||!n[b])return!1}let f=yo(n,t);for(let b=0;b<e.length;b++){let x=e[b].element,v=n[b];if(l){if(st(x,b,o,c,i.stableTriangleColorPolicy,r)){let C=Xr(v,b,t);if(!C)continue;Tn(x,C,r)}continue}let y=rt(v,b,bo(b,f,t),{basis:x.__polycssSolidTriangleBasis,matrixDecimals:u,primitive:P,includeColor:s!=="plan-only"&&s!=="transform-only"&&st(x,b,o,c,i.stableTriangleColorPolicy,r)});if(!y){Dt(x);continue}o&&s==="plan-only"||(o&&s==="transform-only"?Kt(x,y):o?Qt(x,y,r):Zt(x,y))}return!0}function It(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};let o=Ne(t,n.strategies);if(!o||e.some(c=>c.texture||c.vertices.length!==3))return null;let s=ho(n.stableTriangleMatrixDecimals),r=[],i=yo(e,n);for(let c=0;c<e.length;c+=1){let l=e[c],u=rt(l,c,bo(c,i,n),{matrixDecimals:s,primitive:o}),d=u?En(u,t):Oa(l,c,t);r.push({polygonIndex:c,element:d,kind:"triangle",dispose:()=>{}})}return{rendered:r,dispose(){}}}function Co(e,n,t={}){let o=t.doc??(typeof document<"u"?document:null);if(!o)return{rendered:e,dispose:()=>{}};let s=Ne(o,t.strategies);if(!s||e.some(y=>y.kind!=="triangle")||n.length!==e.length)return null;for(let y=0;y<e.length;y++)if(e[y].polygonIndex!==y)return null;let r=t.optimizeStableTriangleStyle===!0&&(t.textureLighting??"baked")==="baked",i=t,c=i.stableTriangleDebug,l=i.stableTriangleUpdateMode??(c==="plan-only"||c==="transform-only"?c:"full"),u=r&&l==="color-only",d=Cn(i),P=ho(i.stableTriangleMatrixDecimals);if(So(e,n,t,r,l,d))return{rendered:e,dispose(){}};let f=new Array(e.length),b=new Array(e.length),x=yo(n,t);for(let y=0;y<e.length;y++){let C=e[y].element;if(u){let O=i.stableTriangleColorPolicy==="adaptive"||st(C,y,r,c,i.stableTriangleColorPolicy,d);b[y]=O?Xr(n[y],y,t):null;continue}f[y]=rt(n[y],y,bo(y,x,t),{basis:C.__polycssSolidTriangleBasis,matrixDecimals:P,primitive:s,includeColor:l!=="plan-only"&&l!=="transform-only"&&st(C,y,r,c,i.stableTriangleColorPolicy,d)})}let v=r&&l!=="plan-only"&&l!=="transform-only"?vo(e,u?b:f,i):null;for(let y=0;y<e.length;y++){if(u){let O=b[y];O&&Tn(e[y].element,O,d,v?.has(y));continue}let C=f[y];if(!C){Dt(e[y].element);continue}r&&l==="plan-only"||(r&&l==="transform-only"?Kt(e[y].element,C):r?Qt(e[y].element,C,d,v?.has(y)):Zt(e[y].element,C))}return{rendered:e,dispose(){}}}import{stableTriangleMatrixDecimals as es}from"@layoutit/polycss-core";function ts(){return new Promise(e=>setTimeout(e,0))}async function To(e){return performance.now()-e<Da?e:(await ts(),performance.now())}function ns(e,n){let t=Eo(n.seamBleed),o=Kr*t,s={...n,bleedRatio:t};return e.seamBleedEdges?.size&&o>0?{...s,seamBleed:o,seamEdges:e.seamBleedEdges}:{...s,seamBleed:void 0,seamEdges:void 0}}function os(e,n){return za(e,{tileSize:n.tileSize,layerElevation:n.layerElevation,directionalLight:n.directionalLight,ambientLight:n.ambientLight})}function rs(e,n,t){let o=Eo(t.seamBleed),s=Kr*o,r={...t,bleedRatio:o};return n&&s>0?{...r,seamBleed:n.has(e)?s:void 0,seamEdges:n.get(e)}:r}function mt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{};let o=Ao(e,n),s=Lt(t),r=e.map((i,c)=>en(i,c,n,s,o[c]));return Gt(r,n.textureLighting??"baked",t,n.strategies)}function ft(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};let o=n.textureLighting??"baked",s=n,r=o==="dynamic"&&s.skipDynamicNormalVars===!0,i=new Set(n.strategies?.disable??[]),c=!i.has("b"),l=c&&kt(t),u=Ne(t,n.strategies),d=u!==null,P=!i.has("i")&&Wt(t),f=!i.has("i")&&Rt(t),b=Ao(e,n),x=Lt(t),v=os(e,n),y=e.map((p,g)=>en(p,g,rs(g,v,n),x,b[g])),C=n.solidPaintDefaults??(s.computeSolidPaintDefaults?Gt(y,o,t,n.strategies):void 0),O=C?{...n,solidPaintDefaults:C}:n,k=y.map(p=>p&&d&&Ke(p)?rt(p.polygon,p.index,ns(p,O),{primitive:u??void 0}):null),j=y.map(p=>p&&P&&!Ke(p)&&!(c&&Be(p))&&!(l&&Ve(p))?Jt(p):null),D=y.map(p=>p?Jr(p,{imageRendering:n.textureImageRendering,backend:n.textureBackend,projection:n.textureProjection,allowProjective:l,projectiveQuadGuards:x}):null),Z=y.map((p,g)=>D[g]?null:p&&(p.texture||!(c&&Be(p))&&!k[g]&&!(l&&Ve(p))&&!j[g]&&!f?p:null)),{packed:J,atlasScale:_}=Et(Z,n.textureQuality,t,n.textureLeafSizing),V=new Map,B=[],z=!1,A=[];for(let p=0;p<e.length;p++){let g=y[p],L=k[p],R=j[p],H=D[p];if(!g)continue;let Q=J.entries[p];if(Q){let T=mo(Q,o,t,r,n.textureImageRendering);V.set(p,T),B.push({polygonIndex:p,element:T,kind:"atlas",plan:Q,dispose:()=>{}})}else if(H){let T=fo(g,H,t,r);B.push({polygonIndex:p,element:T,kind:"image",plan:g,dispose:()=>{}})}else if(!g.texture&&c&&Be(g)){let T=lo(g,o,t,C,r);B.push({polygonIndex:p,element:T,kind:"solid",plan:g,dispose:()=>{}})}else if(!g.texture&&L){let T=En(L,t);B.push({polygonIndex:p,element:T,kind:"triangle",plan:g,dispose:()=>{}})}else if(!g.texture&&l&&Ve(g)){let T=po(g,o,t,C,r);B.push({polygonIndex:p,element:T,kind:"solid",plan:g,dispose:()=>{}})}else if(!g.texture&&R){let T=uo(g,R,o,t,C,r);B.push({polygonIndex:p,element:T,kind:"corner",plan:g,dispose:()=>{}})}else if(!g.texture&&f){let T=co(g,o,t,C,r);B.push({polygonIndex:p,element:T,kind:"border",plan:g,dispose:()=>{}})}}B.sort((p,g)=>p.polygonIndex-g.polygonIndex);let h=Mt(J.pages,o,t,_,()=>z).then(p=>{if(z){for(let g of p)g.url?.startsWith("blob:")&&URL.revokeObjectURL(g.url);return}A=p.flatMap(g=>g.url?.startsWith("blob:")?[g.url]:[]);for(let g=0;g<J.pages.length;g++){let L=J.pages[g],R=p[g];if(R)for(let H of L.entries){let Q=V.get(H.index);!Q||!R.url||io(Q,R,o,H,!0,n.textureImageRendering)}}}).catch(()=>{if(!z)for(let p of V.values())Pe(p,"opacity","0.5"),Pe(p,"outline","1px dashed rgba(255, 0, 0, 0.6)")});return{rendered:B,solidPaintDefaults:C??{},pagesReady:h,dispose(){z=!0;for(let p of A)URL.revokeObjectURL(p);A=[]}}}async function tn(e,n={},t=()=>!1){let o=n.doc??(typeof document<"u"?document:null);if(!o||t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let s=n.textureLighting??"baked",i=s==="dynamic"&&n.skipDynamicNormalVars===!0,c=new Set(n.strategies?.disable??[]),l=!c.has("b"),u=l&&kt(o),d=Ne(o,n.strategies),P=d!==null,f=!c.has("i")&&Wt(o),b=!c.has("i")&&Rt(o);if(await ts(),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let x=Ao(e,n),v=Lt(o),y=os(e,n),C=performance.now(),O=new Array(e.length);for(let p=0;p<e.length;p++)if(O[p]=en(e[p],p,rs(p,y,n),v,x[p]),C=await To(C),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let k=n.solidPaintDefaults??Gt(O,s,o,n.strategies),j=new Array(O.length),D=new Array(O.length),Z=new Array(O.length),J=new Array(O.length);for(let p=0;p<O.length;p++){let g=O[p],L=g&&P&&Ke(g)?rt(g.polygon,g.index,ns(g,{...n,solidPaintDefaults:k}),{primitive:d??void 0}):null;j[p]=L;let R=g&&f&&!Ke(g)&&!(l&&Be(g))&&!(u&&Ve(g))?Jt(g):null;D[p]=R;let H=g?Jr(g,{imageRendering:n.textureImageRendering,backend:n.textureBackend,projection:n.textureProjection,allowProjective:u,projectiveQuadGuards:v}):null;if(Z[p]=H,J[p]=H?null:g&&(g.texture||!(l&&Be(g))&&!L&&!(u&&Ve(g))&&!R&&!b?g:null),C=await To(C),t())return{rendered:[],solidPaintDefaults:k,dispose:()=>{}}}let{packed:_,atlasScale:V}=Et(J,n.textureQuality,o,n.textureLeafSizing),B=new Map,z=[],A=!1,h=[];for(let p=0;p<e.length;p++){let g=O[p],L=j[p],R=D[p],H=Z[p];if(!g)continue;let Q=_.entries[p];if(Q){let T=mo(Q,s,o,i,n.textureImageRendering);B.set(p,T),z.push({polygonIndex:p,element:T,kind:"atlas",plan:Q,dispose:()=>{}})}else if(H){let T=fo(g,H,o,i);z.push({polygonIndex:p,element:T,kind:"image",plan:g,dispose:()=>{}})}else if(!g.texture&&l&&Be(g)){let T=lo(g,s,o,k,i);z.push({polygonIndex:p,element:T,kind:"solid",plan:g,dispose:()=>{}})}else if(!g.texture&&L){let T=En(L,o);z.push({polygonIndex:p,element:T,kind:"triangle",plan:g,dispose:()=>{}})}else if(!g.texture&&u&&Ve(g)){let T=po(g,s,o,k,i);z.push({polygonIndex:p,element:T,kind:"solid",plan:g,dispose:()=>{}})}else if(!g.texture&&R){let T=uo(g,R,s,o,k,i);z.push({polygonIndex:p,element:T,kind:"corner",plan:g,dispose:()=>{}})}else if(!g.texture&&b){let T=co(g,s,o,k,i);z.push({polygonIndex:p,element:T,kind:"border",plan:g,dispose:()=>{}})}if(C=await To(C),t()){for(let T of z)T.dispose();return{rendered:[],solidPaintDefaults:k,dispose:()=>{}}}}z.sort((p,g)=>p.polygonIndex-g.polygonIndex);let E=Mt(_.pages,s,o,V,()=>A||t()).then(p=>{if(A||t()){for(let g of p)g.url?.startsWith("blob:")&&URL.revokeObjectURL(g.url);return}h=p.flatMap(g=>g.url?.startsWith("blob:")?[g.url]:[]);for(let g=0;g<_.pages.length;g++){let L=_.pages[g],R=p[g];if(R)for(let H of L.entries){let Q=B.get(H.index);!Q||!R.url||io(Q,R,s,H,!0,n.textureImageRendering)}}}).catch(()=>{if(!(A||t()))for(let p of B.values())Pe(p,"opacity","0.5"),Pe(p,"outline","1px dashed rgba(255, 0, 0, 0.6)")});return{rendered:z,solidPaintDefaults:k,pagesReady:E,dispose(){A=!0;for(let p of h)URL.revokeObjectURL(p);h=[]}}}function nn(e,n,t,o={}){let s=o.textureLighting??"baked",r=o,i=r.optimizeStableTriangleStyle===!0&&s==="baked";if(!i||r.stableTriangleColorPolicy==="adaptive"||e.length!==t.polygonCount||n.length!==t.polygonCount||t.vertices.length<t.polygonCount*9)return!1;let c=r.stableTriangleDebug,l=r.stableTriangleUpdateMode??(c==="plan-only"||c==="transform-only"?c:"full");if(l==="color-only")return!1;let u=es(r.stableTriangleMatrixDecimals),d=Cn(r),P=o.tileSize??Ia,f=o.layerElevation??P,b=o.doc??(typeof document<"u"?document:null),x=b?Ne(b,o.strategies)??"border":"border";for(let y=0;y<e.length;y++){let C=e[y],O=n[y];if(C.kind!=="triangle"||C.polygonIndex!==y||!O||O.vertices.length!==3||O.texture||O.material?.texture)return!1}let v=t.vertices;for(let y=0;y<e.length;y++){let C=e[y].element,O=n[y],k=y*9,j=v[k+1]*P,D=v[k]*P,Z=v[k+2]*f,J=v[k+4]*P,_=v[k+3]*P,V=v[k+5]*f,B=v[k+7]*P,z=v[k+6]*P,A=v[k+8]*f,h=go(O,y,o,{basis:C.__polycssSolidTriangleBasis,matrixDecimals:u,primitive:x,color:t.colors?.[y],includeColor:l!=="plan-only"&&l!=="transform-only"&&st(C,y,i,c,r.stableTriangleColorPolicy,d)},j,D,Z,J,_,V,B,z,A);if(!h){Dt(C);continue}l!=="plan-only"&&(l==="transform-only"?Kt(C,h):Qt(C,h,d))}return!0}function on(e,n,t={}){if(e.length!==n.length)return!1;let o=t,s=t.doc??(typeof document<"u"?document:null),r=t.textureLighting??"baked",i=new Set(t.strategies?.disable??[]),c=!i.has("b"),l=!!s&&c&&kt(s),u=!!s&&!i.has("i")&&Wt(s),d=!!s&&!i.has("i")&&Rt(s),P=Eo(o.seamBleed),f=s?Lt(s,{bleed:Qr*P}):{denomEps:Ha,maxWeightRatio:Fa,bleed:Qr*P,disableGuards:!1},b=o.optimizeStableTriangleStyle===!0&&r==="baked",x=o.stableTriangleDebug,v=o.stableTriangleUpdateMode??(x==="plan-only"||x==="transform-only"?x:"full"),y=b&&v==="color-only",C=Cn(o),O=es(o.stableTriangleMatrixDecimals),k=s?Ne(s,t.strategies)??"border":"border";if(So(e,n,t,b,v,C))return!0;let j=[],D=[],Z=[];for(let _=0;_<e.length;_++){let V=e[_];if(V.polygonIndex!==_)return!1;let B=n[_];if(!B||y&&V.kind!=="triangle")return!1;if(V.kind==="atlas"){if(!V.plan||!jr(V.element,V.plan,B,r))return!1;continue}if(V.kind==="triangle"){let z=V.element;if(y){let h=o.stableTriangleColorPolicy==="adaptive"||st(z,_,b,x,o.stableTriangleColorPolicy,C);D[_]=h?Ba(B,_,t):null;continue}let A=rt(B,_,t,{basis:z.__polycssSolidTriangleBasis,matrixDecimals:O,primitive:k,includeColor:v!=="plan-only"&&v!=="transform-only"&&st(z,_,b,x,o.stableTriangleColorPolicy,C)});if(!A){j[_]=null;continue}j[_]=A;continue}if(V.kind==="solid"){if(!V.plan||B.texture||B.vertices.length!==V.plan.polygon.vertices.length)return!1;Z[_]=V.plan;continue}if(V.kind==="border"){let z=en(B,_,t,f);if(!z||z.texture||!d||c&&Be(z)||l&&Ve(z)||u&&Jt(z))return!1;Z[_]=z;continue}if(V.kind==="corner"){let z=en(B,_,t,f);if(!z||z.texture||!u||Ke(z)||c&&Be(z)||l&&Ve(z)||!Jt(z))return!1;Z[_]=z;continue}return!1}let J=b&&v!=="plan-only"&&v!=="transform-only"?vo(e,y?D:j,o):null;for(let _=0;_<e.length;_++){let V=e[_];if(V.kind==="triangle"){if(y){let z=D[_];z&&Tn(V.element,z,C,J?.has(_));continue}let B=j[_];if(!B){Dt(V.element);continue}if(b&&v==="plan-only")continue;b&&v==="transform-only"?Kt(V.element,B):b?Qt(V.element,B,C,J?.has(_)):Zt(V.element,B)}else if(V.kind==="solid"){let B=Z[_];if(!B||!Wr(V.element,B,n[_],r,t,f,o.solidPaintDefaults))return!1}else if(V.kind==="border"){let B=Z[_];if(!B)return!1;Gr(V.element,B,r,o.solidPaintDefaults)}else if(V.kind==="corner"){let B=Z[_],z=B?Jt(B):null;if(!B||!z)return!1;Yr(V.element,B,z,r,o.solidPaintDefaults)}}return!0}import{computeTextureAtlasPlanPublic as is}from"@layoutit/polycss-core";import{formatMatrix3d as as,formatCssLengthPx as ls,formatSolidQuadEntryMatrix as cs}from"@layoutit/polycss-core";import{formatBorderShapeEntryMatrix as us,cssBorderShapeForPlan as ds}from"@layoutit/polycss-core";import{BASE_TILE as ve,computeProjectiveQuadMatrix as ja,normalFacesCamera as $a,parsePureColor as ys,PROJECTIVE_QUAD_BLEED as Ua,resolveProjectiveQuadGuards as Wa,rotateVec3 as Ga,rotateVec3InWrapperCssFrame as Ya,shadePolygon as Xa,SOLID_QUAD_CANONICAL_SIZE as qa}from"@layoutit/polycss-core";var Za=[.4,-.7,.59],Qa="#ffffff",Ka=1,Ja="#ffffff",el=.4,bs=1,tl=8,nl=Ua,Je=1e-6,ol=Wa({bleed:0}),xs={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},Lo=["t","b","bl","br","fr","fl"],rl=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 ps(e){let n=[];for(let t of Lo)$a(xs[t],e)&&n.push(t);return n.join("|")}function sl(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 il(e){let n=e.vertices;if(n.length<3)return null;let t=n[0],o=0,s=0,r=0;for(let c=1;c+1<n.length;c+=1){let l=n[c],u=n[c+1],d=l[1]-t[1],P=l[0]-t[0],f=l[2]-t[2],b=u[1]-t[1],x=u[0]-t[0],v=u[2]-t[2];o-=P*v-f*x,s-=f*b-d*v,r-=d*x-P*b}let i=Math.hypot(o,s,r);return i<=1e-9?null:[Math.round(o/i),Math.round(s/i),Math.round(r/i)]}function al(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let n=il(e),t=n?rl.get(n.join(",")):void 0;if(!t)return null;let o=1/0,s=1/0,r=1/0,i=-1/0,c=-1/0,l=-1/0;for(let P of e.vertices)o=Math.min(o,P[0]),s=Math.min(s,P[1]),r=Math.min(r,P[2]),i=Math.max(i,P[0]),c=Math.max(c,P[1]),l=Math.max(l,P[2]);let u=1e-6,d=fl(e.color);return Math.abs(l-r)<=u?{axis:"z",face:t,left:s*ve,top:o*ve,width:Math.max(0,(c-s)*ve),height:Math.max(0,(i-o)*ve),z:r*ve,baseColor:d,bleed:wo()}:Math.abs(i-o)<=u?{axis:"x",face:t,left:s*ve,top:r*ve,width:Math.max(0,(c-s)*ve),height:Math.max(0,(l-r)*ve),z:-o*ve,baseColor:d,bleed:wo()}:Math.abs(c-s)<=u?{axis:"y",face:t,left:r*ve,top:o*ve,width:Math.max(0,(l-r)*ve),height:Math.max(0,(i-o)*ve),z:-s*ve,baseColor:d,bleed:wo()}:null}function wo(){return{left:0,right:0,top:0,bottom:0}}function ll(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 ms(e){return[e[1]*ve,e[0]*ve,e[2]*ve]}function fs(e,n){return e.axis==="x"?[n[0],n[2]]:e.axis==="y"?[n[2],n[1]]:[n[0],n[1]]}function cl(e,n,t){let o=e.left,s=e.left+e.width,r=e.top,i=e.top+e.height;if(Math.abs(n[0]-t[0])<=Je){if(Math.abs(n[0]-o)<=Je)return"left";if(Math.abs(n[0]-s)<=Je)return"right"}if(Math.abs(n[1]-t[1])<=Je){if(Math.abs(n[1]-r)<=Je)return"top";if(Math.abs(n[1]-i)<=Je)return"bottom"}return null}function ul(e,n){let t=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-n[o])<=Je)){if(t!==null)return null;t=o}return t}function dl(e,n,t){let o=n.vertices,s=ms(o[t]),r=ms(o[(t+1)%o.length]),i=cl(e,fs(e,s),fs(e,r));if(!i)return null;let c=ul(s,r);if(c===null)return null;let l=Math.min(s[c],r[c]),u=Math.max(s[c],r[c]);return u-l>Je?{item:e,side:i,variableAxis:c,fixed:s,start:l,end:u}:null}function gs(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],nl)}function pl(e,n){let t=new Map;for(let o of n){let s=e[o.sourceIndex];if(s)for(let r=0;r<s.vertices.length;r+=1){let i=dl(o,s,r);if(!i)continue;let c=ll(i),l=t.get(c);l?l.push(i):t.set(c,[i])}}for(let o of t.values()){if(o.length<2)continue;o.sort((r,i)=>r.start-i.start||r.end-i.end);let s=[];for(let r of o){s=s.filter(i=>i.end>r.start+Je);for(let i of s)i.item.sourceIndex!==r.item.sourceIndex&&(gs(i),gs(r));s.push(r)}}}function ml(e){let n=ys(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 fl(e){if(!e)return"#cccccc";let n=ys(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(${Mo(t.r)}, ${Mo(t.g)}, ${Mo(t.b)}, ${o})`}return gl(t)}function gl({r:e,g:n,b:t}){let o=s=>Math.round(Math.max(0,Math.min(255,s))).toString(16).padStart(2,"0");return`#${o(e)}${o(n)}${o(t)}`}function Mo(e){return Math.round(Math.max(0,Math.min(255,e)))}function hl(e,n,t,o){let s=t?.direction??Za,r=Math.hypot(s[0],s[1],s[2])||1,i=s[0]/r,c=s[1]/r,l=s[2]/r,u=Math.max(0,t?.intensity??Ka)*Math.max(0,e[0]*i+e[1]*c+e[2]*l),d=Math.max(0,o?.intensity??el),P=t?.color??Qa,f=o?.color??Ja,b=Xa(n,u,P,f,d),x=ml(n);if(x.alpha>=1)return b;let v=parseInt(b.slice(1,3),16),y=parseInt(b.slice(3,5),16),C=parseInt(b.slice(5,7),16);return`rgba(${v}, ${y}, ${C}, ${x.alpha})`}function yl(e){if(!e?.length)return[];let n=[];for(let t=0;t<e.length;t+=1){let o=e[t],s=al(o);if(!s||s.width<=0||s.height<=0)return[];n.push({...s,sourceIndex:t})}return pl(e,n),n}function bl(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 xl(e){let n=e.left,t=e.top,o=e.left+e.width,s=e.top+e.height;return[n,t,o,t,o,s,n,s]}function Pl(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function vl(e,n){let t=e.split(",").map(Number);if(t.length!==16||t.some(s=>!Number.isFinite(s)))return null;let o=qa/n;for(let s=0;s<8;s+=1)t[s]*=o;return`matrix3d(${t.map(s=>Number(s.toFixed(6))).join(",")})`}function hs(e,n){let t=e.left-e.bleed.left,o=e.top-e.bleed.top,s=e.width+e.bleed.left+e.bleed.right,r=e.height+e.bleed.top+e.bleed.bottom,i=e.z,c=s/n,l=r/n;return`matrix3d(${(e.axis==="x"?[c,0,0,0,0,0,l,0,0,-1,0,0,t,-i,o,1]:e.axis==="y"?[0,0,c,0,0,l,0,0,-1,0,0,0,-i,o,t,1]:[c,0,0,0,0,l,0,0,0,0,1,0,t,o,i,1]).map(d=>Number(d.toFixed(6))).join(",")})`}function Sl(e,n){let{xAxis:t,yAxis:o,normal:s,tx:r,ty:i,tz:c}=bl(e),l=ja(xl(e),t,o,s,r,i,c,ol,Pl(e));return l?vl(l,n)??hs(e,n):hs(e,n)}function Cl(e){let n=e.defaultView?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function Tl(e){return Cl(e)?tl:bs}function El(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 Al(e,n){let t=El(e),o=n.meshRotation;o&&(t=Ya(t,o));let[s,r]=Ga(t,n.rotX,0,n.rotY);return{x:s,y:r}}function wl(e,n,t){let o=e.filter(f=>n.has(f.face)).map(f=>({item:f,...Al(f,t)}));if(o.length===0)return[];let s=1/0,r=-1/0,i=1/0,c=-1/0;for(let f of o)s=Math.min(s,f.x),r=Math.max(r,f.x),i=Math.min(i,f.y),c=Math.max(c,f.y);let l=4,u=Math.max(1e-6,r-s),d=Math.max(1e-6,c-i),P=new Map;for(let f of o){let b=Math.min(l-1,Math.max(0,Math.floor((f.x-s)/u*l))),x=Math.min(l-1,Math.max(0,Math.floor((f.y-i)/d*l))),v=`${b}:${x}`,y=P.get(v);y||(y={tx:b,ty:x,sourceIndex:f.item.sourceIndex,items:[]},P.set(v,y)),y.items.push(f.item),y.sourceIndex=Math.min(y.sourceIndex,f.item.sourceIndex)}return Array.from(P.values()).sort((f,b)=>f.ty-b.ty||f.tx-b.tx||f.sourceIndex-b.sourceIndex).flatMap(f=>f.items)}function Ps(e){let{doc:n,wrapper:t,polygons:o,directionalLight:s,ambientLight:r}=e,i=yl(o);if(i.length===0)return null;let c=new Set(i.map(h=>h.face));t.classList.add("polycss-voxel-mesh");let l=Tl(n);l!==bs&&t.style.setProperty("--polycss-voxel-primitive",`${l}px`);let u=new Map,d=(h,E)=>{let p=`${h}|${E}`,g=u.get(p);if(g)return g;let L=hl(xs[h],E,s,r);return u.set(p,L),L},P=new Map,f=new Map,b=new Map,x=new Map;for(let h of i){let E=x.get(h.face);E||(E=[],x.set(h.face,E)),E.push(h)}let v="",y=0,C=new Set,O=h=>{let E=P.get(h.sourceIndex);return E||(E=n.createElement("b"),P.set(h.sourceIndex,E),sl(E,d(h.face,h.baseColor),Sl(h,l))),E},k=h=>{let E=f.get(h);return E||(E=n.createElement("span"),E.className=`polycss-voxel-face polycss-voxel-face-${h}`,E.dataset.polycssVoxelFace=h,E.__polycssVoxelFaceHost=!0,f.set(h,E)),E},j=()=>{for(let h of Array.from(t.childNodes))if(!h.__polycssVoxelFaceHost)return h;return null},D=(h,E)=>{let p=E.map(R=>R.sourceIndex).join(",");if(b.get(h)===p)return;let g=k(h),L=n.createDocumentFragment();for(let R of E)L.appendChild(O(R));g.replaceChildren(L),b.set(h,p)},Z=()=>{for(let h of Lo)c.has(h)&&D(h,x.get(h)??[])},J=h=>new Set(h.split("|").filter(Boolean)),_=h=>{let E=J(h);return Lo.filter(p=>E.has(p)&&c.has(p))},V=h=>{let E=0;for(let p of h)E+=x.get(p)?.length??0;return E},B=h=>{let E=new Set,p=[],g=new Map;for(let L of h){E.has(L.face)||(E.add(L.face),p.push(L.face));let R=g.get(L.face);R||(R=[],g.set(L.face,R)),R.push(L)}return{orderedFaces:p,itemsByFace:g}},z=(h,E)=>{let p=new Set(h);for(let g of C){if(p.has(g))continue;let L=f.get(g);L?.parentNode===t&&t.removeChild(L)}if(E){let g=n.createDocumentFragment();for(let L of h)g.appendChild(k(L));t.insertBefore(g,j()),C=p;return}for(let g=0;g<h.length;g+=1){let L=h[g],R=k(L);if(R.parentNode===t)continue;let H=null;for(let Q=g+1;Q<h.length;Q+=1){let T=f.get(h[Q]);if(T?.parentNode===t){H=T;break}}t.insertBefore(R,H??j())}C=p},A=(h,E,p)=>{if(!p){let Q=_(h);z(Q,!1),y=V(Q);return}let g=new Set(h.split("|").filter(Boolean)),L=wl(i,g,E),{orderedFaces:R,itemsByFace:H}=B(L);for(let Q of R)D(Q,H.get(Q)??[]);z(R,!0),y=L.length};return Z(),{get brushCount(){return y},render(h){v=ps(h),A(v,h,!0)},syncCamera(h){let E=ps(h);E!==v&&(v=E,A(E,h,!1))},dispose(){for(let h of f.values())h.remove();t.classList.remove("polycss-voxel-mesh"),t.style.removeProperty("--polycss-voxel-primitive"),P.clear(),f.clear(),b.clear(),y=0,C=new Set,v=""}}}var vs="polycss-styles";function Ro(e){let n=e??(typeof document<"u"?document:void 0);if(!n||n.getElementById(vs))return;let t=n.createElement("style");t.id=vs,t.textContent=Ml,n.head.appendChild(t)}var Ml=`
|
|
1
|
+
import{CAMERA_BACKFACE_CULL_EPS as zo,DEFAULT_SEAM_BLEED as ss,VOXEL_CAMERA_CULL_NORMAL_LIMIT as ac,cameraCullNormalKey as lc,cameraCullVisibleSignature as cc,computeSceneBbox as uc,computeLightVisibility as dc,capturePolyCameraSnapshot as pc,findOverlappingPolygonDuplicates as ns,inverseRotateVec3 as In,isAxisAlignedSurfaceNormal as mc,isVoxelCameraCullableNormalGroups as fc,normalFacesCamera as gc,optimizeMeshPolygons as hc,parseHexColor as yc,polygonCssSurfaceNormal as os}from"@layoutit/polycss-core";import{packTextureAtlasPlansWithScaleCore as Ys}from"@layoutit/polycss-core";function Xs(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 wt(e,n,t,o){return Ys(e,n,Xs(t),o)}import{buildTextureEdgeRepairSets as si,buildSeamBleedPolygonEdges as Xa,buildSeamBleedPolygonSet as qa}from"@layoutit/polycss-core";import{TEXTURE_TRIANGLE_BLEED as qs,TEXTURE_EDGE_REPAIR_ALPHA_MIN as Zs,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as Qs,TEXTURE_EDGE_REPAIR_RADIUS as Mr}from"@layoutit/polycss-core";import{expandClipPoints as Ks}from"@layoutit/polycss-core";import{BASIS_EPS as Js}from"@layoutit/polycss-core";var Mt=new Map;function ea(e){let n=Mt.get(e);return n||(n=new Promise((t,o)=>{let i=new Image;i.decoding="async",i.crossOrigin="anonymous",i.onload=()=>t(i),i.onerror=()=>o(new Error(`texture load failed: ${e}`)),i.src=e}),Mt.set(e,n),n.then(()=>{Mt.get(e)===n&&Mt.delete(e)},()=>{Mt.get(e)===n&&Mt.delete(e)})),n}function De(e,n,t=1,o=0,i=0,r=1,s=0,c=0){e.setTransform(t*n,o*n,i*n,r*n,s*n,c*n)}function eo(e){let n=e/255;return n<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function to(e){let n=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(n*255)))}function ta(e,n,t,o,i,r,s){let c=Math.round(n*s),l=Math.round(t*s),d=Math.max(1,Math.round(o*s)),p=Math.max(1,Math.round(i*s)),y=e.getImageData(c,l,d,p),g=y.data,b=r.r,x=r.g,v=r.b;for(let h=0;h<g.length;h+=4)g[h+3]!==0&&(g[h]=to(eo(g[h])*b),g[h+1]=to(eo(g[h+1])*x),g[h+2]=to(eo(g[h+2])*v));e.putImageData(y,c,l)}function na(e,n,t,o,i,r,s){let c=n.naturalWidth||n.width||1,l=n.naturalHeight||n.height||1,d=Math.max(i/c,r/l),p=c*d,y=l*d;De(e,s),e.drawImage(n,t+(i-p)/2,o+(r-y)/2,p,y)}function Lt(e,n){return Math.max(0,Math.min(n,e))}function Lr(e,n,t,o,i,r,s,c){let l=n.naturalWidth||n.width||1,d=n.naturalHeight||n.height||1,p=Lt(Math.min(t.minU,t.maxU)*l,l),y=Lt(Math.max(t.minU,t.maxU)*l,l),g=Lt(Math.min(t.minV,t.maxV)*d,d),b=Lt(Math.max(t.minV,t.maxV)*d,d),x=Math.floor(p),v=Math.floor(g),h=Math.ceil(y)-x,C=Math.ceil(b)-v;h<1&&(x=Math.floor(Lt((t.minU+t.maxU)/2*l,l-1)),h=1),C<1&&(v=Math.floor(Lt((t.minV+t.maxV)/2*d,d-1)),C=1),x=Math.max(0,Math.min(l-1,x)),v=Math.max(0,Math.min(d-1,v)),h=Math.max(1,Math.min(l-x,h)),C=Math.max(1,Math.min(d-v,C)),De(e,c),e.drawImage(n,x,v,h,C,o,i,r,s)}function Dr(e){return e==="repeat"||e==="mirrored-repeat"}function Rr(e,n){return Dr(e)?Math.floor(n):0}function kr(e,n){return Dr(e)?Math.ceil(n)-1:0}function _r(e,n){return e==="mirrored-repeat"&&Math.abs(n%2)===1}function Or(e,n,t,o,i,r,s){let c=i?Rr(r,i.minU):0,l=i?kr(r,i.maxU):0,d=i?Rr(s,i.minV):0,p=i?kr(s,i.maxV):0;for(let y=c;y<=l;y++)for(let g=d;g<=p;g++){let b=_r(r,y),x=_r(s,g);if(!b&&!x){e.drawImage(n,y*t,g*o);continue}e.save(),e.translate((b?y+1:y)*t,(x?g+1:g)*o),e.scale(b?-1:1,x?-1:1),e.drawImage(n,0,0),e.restore()}}function no(e,n,t,o){for(let i=0;i<o.length;i+=2){let r=n+o[i],s=t+o[i+1];i===0?e.moveTo(r,s):e.lineTo(r,s)}e.closePath()}function Sn(e,n,t,o,i,r){for(let s=0;s<o.length;s+=2){let c=n+o[s]+i,l=t+o[s+1]+r;s===0?e.moveTo(c,l):e.lineTo(c,l)}e.closePath()}function oa(e,n,t,o){De(e,o),e.beginPath(),no(e,n.x,n.y,n.screenPts),e.clip(),De(e,o),e.fillStyle=t==="dynamic"?n.polygon.color??"#cccccc":n.shadedColor,e.fillRect(n.x,n.y,n.canvasW,n.canvasH)}function Cn(e,n,t,o,i){n.polygon.textureAlphaMode==="opaque"&&(De(e,t),e.fillStyle=n.polygon.color??"#cccccc",e.fillRect(n.x+o,n.y+i,n.canvasW,n.canvasH))}function ra(e,n,t,o,i=0,r=0){if(n.textureTriangles?.length){let s=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1;for(let l of n.textureTriangles){let d=Ks(l.screenPts,qs*(n.bleedRatio??1));e.save(),De(e,o),e.beginPath(),Sn(e,n.x,n.y,d,i,r),e.clip(),Cn(e,n,o,i,r),l.uvAffine?(De(e,o,l.uvAffine.a/s,l.uvAffine.c/s,l.uvAffine.b/c,l.uvAffine.d/c,n.x+l.uvAffine.e+i,n.y+l.uvAffine.f+r),Or(e,t,s,c,l.uvSampleRect,n.polygon.textureWrap?.s,n.polygon.textureWrap?.t)):l.uvSampleRect&&Lr(e,t,l.uvSampleRect,n.x+i,n.y+r,n.canvasW,n.canvasH,o),e.restore()}}else if(n.uvAffine){let s=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,l=n.polygon.textureAlphaMode==="opaque";l&&(e.save(),De(e,o),e.beginPath(),Sn(e,n.x,n.y,n.screenPts,i,r),e.clip(),Cn(e,n,o,i,r)),De(e,o,n.uvAffine.a/s,n.uvAffine.c/s,n.uvAffine.b/c,n.uvAffine.d/c,n.x+n.uvAffine.e+i,n.y+n.uvAffine.f+r),Or(e,t,s,c,n.uvSampleRect,n.polygon.textureWrap?.s,n.polygon.textureWrap?.t),l&&e.restore()}else if(n.uvSampleRect){let s=n.polygon.textureAlphaMode==="opaque";s&&(e.save(),De(e,o),e.beginPath(),Sn(e,n.x,n.y,n.screenPts,i,r),e.clip(),Cn(e,n,o,i,r)),Lr(e,t,n.uvSampleRect,n.x+i,n.y+r,n.canvasW,n.canvasH,o),s&&e.restore()}else{let s=n.polygon.textureAlphaMode==="opaque";s&&(e.save(),De(e,o),e.beginPath(),Sn(e,n.x,n.y,n.screenPts,i,r),e.clip(),Cn(e,n,o,i,r)),na(e,t,n.x+i,n.y+r,n.canvasW,n.canvasH,o),s&&e.restore()}}function ia(e,n,t,o,i,r){let s=i-t,c=r-o,l=s*s+c*c;if(l<=Js)return Math.hypot(e-t,n-o);let d=Math.max(0,Math.min(1,((e-t)*s+(n-o)*c)/l));return Math.hypot(e-(t+s*d),n-(o+c*d))}function sa(e,n,t,o){let i=1/0,r=t.length/2;for(let s of o){if(s<0||s>=r)continue;let c=s*2,l=(s+1)%r*2;i=Math.min(i,ia(e,n,t[c],t[c+1],t[l],t[l+1]))}return i}function aa(e,n,t,o,i,r){let s=Math.max(0,o-r),c=Math.min(n-1,o+r),l=Math.max(0,i-r),d=Math.min(t-1,i+r),p=null,y=1/0;for(let g=l;g<=d;g++)for(let b=s;b<=c;b++){if(b===o&&g===i)continue;let x=b-o,v=g-i,h=x*x+v*v;if(h>r*r||h>=y)continue;let C=(g*n+b)*4;e[C+3]<Qs||(p=C,y=h)}return p}function la(e,n,t){if(!n.textureEdgeRepair||!n.texture||!n.textureEdgeRepairEdges||n.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let i=Math.max(0,Math.floor(n.x*t)),r=Math.max(0,Math.floor(n.y*t)),s=Math.max(1,Math.min(o.width-i,Math.ceil(n.canvasW*t))),c=Math.max(1,Math.min(o.height-r,Math.ceil(n.canvasH*t)));if(s<=0||c<=0)return;let l;try{l=e.getImageData(i,r,s,c)}catch{return}let d=l.data,p=new Uint8ClampedArray(d),y=Math.max(Mr,Mr/t),g=Math.max(2,Math.ceil(y*t)+1),b=!1;for(let x=0;x<c;x++)for(let v=0;v<s;v++){let h=(x*s+v)*4,C=d[h+3];if(C<Zs||C===255)continue;let R=(i+v+.5)/t-n.x,I=(r+x+.5)/t-n.y;if(sa(R,I,n.screenPts,n.textureEdgeRepairEdges)>y)continue;let z=aa(p,s,c,v,x,g);z!==null&&(d[h]=p[z],d[h+1]=p[z+1],d[h+2]=p[z+2],d[h+3]=255,b=!0)}b&&e.putImageData(l,i,r)}function ca(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 ua(e,n,t,o){let i=t.createElement("canvas");i.width=Math.max(1,Math.ceil(e.width*o)),i.height=Math.max(1,Math.ceil(e.height*o));let r=e.entries.some(p=>p.textureEdgeRepair&&p.texture&&p.textureEdgeRepairEdges&&p.textureEdgeRepairEdges.size>0),s=i.getContext("2d",r?{willReadFrequently:!0}:void 0);if(!s)return{width:e.width,height:e.height,url:null};let c=Array.from(new Set(e.entries.flatMap(p=>p.texture?[p.texture]:[]))),l=new Map;await Promise.all(c.map(async p=>{l.set(p,await ea(p))}));for(let p of e.entries){let y=p.texture?l.get(p.texture):null;if(!p.texture){s.save(),oa(s,p,n,o),s.restore();continue}y&&(s.save(),De(s,o),s.beginPath(),no(s,p.x,p.y,p.screenPts),s.clip(),ra(s,p,y,o),s.restore()),p.texture&&n==="baked"&&(s.save(),De(s,o),s.beginPath(),no(s,p.x,p.y,p.screenPts),s.clip(),ta(s,p.x,p.y,p.canvasW,p.canvasH,p.textureTint,o),s.restore()),la(s,p,o)}let d=await ca(i);return i.width=1,i.height=1,{width:e.width,height:e.height,url:d}}async function Rt(e,n,t,o,i){let r=[];for(let s of e){if(i())break;r.push(await ua(s,n,t,o))}return r}import{isFullRectSolid as je,isSolidTrianglePlan as rt,isProjectiveQuadPlan as $e,fullRectBounds as hp,safariCssProjectiveUnsupported as Ir,incrementCount as yp,dominantCountKey as bp,filterAtlasPlans as pa,getSolidPaintDefaultsForPlansCore as ma}from"@layoutit/polycss-core";import{parseHex as fa,rgbKey as ga}from"@layoutit/polycss-core";import{computeTextureAtlasPlan as Sp,buildBasisHints as Cp}from"@layoutit/polycss-core";import{resolveProjectiveQuadGuards as da}from"@layoutit/polycss-core";function kt(e,n){let o=e?.defaultView?.__polycssProjectiveQuadGuards,i=n&&o?{...n,...o}:o??n;return da(i)}function _t(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 i=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return i?i("(pointer: fine)").matches&&i("(hover: hover)").matches:!0}function oo(e){if(Hr(e))return!0;let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return t?!Ir(t):!0}function qt(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 Hr(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 ha(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return/\bFirefox\//.test(t)}function We(e,n){return n?.disable?.includes("u")?null:Hr(e)?"corner-bevel":oo(e)?ha(e)?"border-large":"border":null}function Ot(e){let t=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return t?!Ir(t):!0}function Zt(e,n,t,o,i){let r=new Set(o?.disable??[]);return ma(e,n,r,{solidTriangleSupported:oo(t),projectiveQuadSupported:Ot(t),cornerShapeSupported:qt(t),borderShapeSupported:_t(t)},fa,ga,i)}function ro(e,n,t=new Set,o){let i=o??(typeof document<"u"?document:null);if(!i)return{};let r=t.size>0?{disable:Array.from(t)}:void 0;return Zt(e,n,i,r)}function Tn(e){let n=e??(typeof document<"u"?document:null);if(!n){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let i=typeof matchMedia<"u"?matchMedia:void 0;return i?i("(pointer: fine)").matches&&i("(hover: hover)").matches:!0}return _t(n)}function En(e){let n=e??(typeof document<"u"?document:null);if(!n){let t=typeof CSS<"u"?CSS:void 0;if(t?.supports?.("corner-top-left-shape","bevel")&&t.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let i=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||i}return oo(n)}function io(e,n,t,o){let i=o??(typeof document<"u"?document:null);return pa(e,n,t,{solidTriangleSupported:En(o),projectiveQuadSupported:i?Ot(i):!0,borderShapeSupported:Tn(o)})}import{ASYNC_RENDER_BUDGET_MS as ja,DEFAULT_SEAM_BLEED as Jr,DEFAULT_TILE as $a,PROJECTIVE_QUAD_DENOM_EPS as Wa,PROJECTIVE_QUAD_MAX_WEIGHT_RATIO as Ua,PROJECTIVE_QUAD_BLEED as Kr,resolveBleedRatio as Mo}from"@layoutit/polycss-core";import{buildBasisHints as Lo,buildSeamBleedPolygonEdges as Ga,computeTextureAtlasPlan as rn,resolvePolyTextureLeafGeometry as ei}from"@layoutit/polycss-core";import{cornerShapeGeometryForPlan as on}from"@layoutit/polycss-core";import{formatCssLength as ke,formatMatrix3dValues as ba,formatSolidQuadMatrix as xa,resolvePolyTextureImageRendering as Pa}from"@layoutit/polycss-core";import{shadePolygon as va}from"@layoutit/polycss-core";import{parseHex as Fr,rgbKey as zr}from"@layoutit/polycss-core";function Se(e,n,t){let o=e.getAttribute("style")??"",i=`${n}:${t}`,r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`(^|;)\\s*${r}\\s*:[^;]*`,"i"),c=s.test(o)?o.replace(s,(l,d)=>`${d}${i}`):`${o}${o.trim()&&!o.trim().endsWith(";")?";":""}${i}`;c!==o&&e.setAttribute("style",c)}function dt(e,n){let t=e.getAttribute("style")??"";if(!t||!t.toLowerCase().includes(n.toLowerCase()))return;let o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`^\\s*${o}\\s*:`,"i"),r=t.split(";").map(s=>s.trim()).filter(s=>s&&!i.test(s)).join(";");r?e.setAttribute("style",r):e.removeAttribute("style")}function Qt(e,n,t,o=!1){if(n==="dynamic"){let i=Fr(e.polygon.color??"#cccccc"),r=o?"":`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return zr(i)!==t?.dynamicColorKey&&(r+=`;--psr:${(i.r/255).toFixed(4)};--psg:${(i.g/255).toFixed(4)};--psb:${(i.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function ya(e,n){Se(e,"--pnx",n.normal[0].toFixed(4)),Se(e,"--pny",n.normal[1].toFixed(4)),Se(e,"--pnz",n.normal[2].toFixed(4))}function Dt(e,n,t,o){if(t==="dynamic"){dt(e,"color"),dt(e,"background"),ya(e,n);let i=Fr(n.polygon.color??"#cccccc");zr(i)===o?.dynamicColorKey?(dt(e,"--psr"),dt(e,"--psg"),dt(e,"--psb")):(Se(e,"--psr",(i.r/255).toFixed(4)),Se(e,"--psg",(i.g/255).toFixed(4)),Se(e,"--psb",(i.b/255).toFixed(4)))}else n.shadedColor!==o?.paintColor?(dt(e,"background"),Se(e,"color",n.shadedColor)):(dt(e,"background"),dt(e,"color"))}import{formatBorderShapeElementStyle as Br,formatCornerShapeElementStyle as Vr}from"@layoutit/polycss-core";import{atlasCanonicalSizeForEntry as wn}from"@layoutit/polycss-core";import{computeProjectiveQuadMatrix as Sa,stableBasisFromPlan as Ca}from"@layoutit/polycss-core";import{DEFAULT_LIGHT_DIR as Ta,DEFAULT_LIGHT_COLOR as Ea,DEFAULT_LIGHT_INTENSITY as Aa,DEFAULT_AMBIENT_COLOR as wa,DEFAULT_AMBIENT_INTENSITY as Ma}from"@layoutit/polycss-core";var Nr="polycss-corner-shape-solid";function Kt(e){return e.atlasLeafWidth??wn(e)}function Jt(e){return e.atlasLeafHeight??wn(e)}function jr(e,n){return Pa(e.polygon,n)}function An(e){return e==="pixelated"?";image-rendering:pixelated":""}function lo(e,n,t,o,i,r,s,c,l){e.setAttribute("data-polycss-leaf","polygon"),e.setAttribute("data-polycss-texture-backend",n),e.setAttribute("data-polycss-texture-ready",t?"true":"false"),e.setAttribute("data-polycss-texture-image-rendering",o),i?e.setAttribute("data-polycss-texture-leaf-sizing",i):e.removeAttribute("data-polycss-texture-leaf-sizing"),r?e.setAttribute("data-polycss-texture-projection",r):e.removeAttribute("data-polycss-texture-projection"),s?e.setAttribute("data-polycss-texture-lighting",s):e.removeAttribute("data-polycss-texture-lighting"),typeof c=="number"?e.setAttribute("data-polycss-texture-leaf-width",String(c)):e.removeAttribute("data-polycss-texture-leaf-width"),typeof l=="number"?e.setAttribute("data-polycss-texture-leaf-height",String(l)):e.removeAttribute("data-polycss-texture-leaf-height")}var so=new WeakMap,ao=new WeakMap;function ve(e,n,t){let o=so.get(e),i=ao.get(e),r=typeof t=="number";if(!n.data&&!r&&(!o||o.length===0)){e.__polycssHasDataAttrs=!1;return}let s=new Map;if(n.data)for(let[l,d]of Object.entries(n.data))s.set(l,String(d));if(n.doubleSided===!0&&s.set("polycss-double-sided","true"),r&&s.set("poly-index",String(t)),o)for(let l of o)s.has(l)||e.removeAttribute(`data-${l}`);for(let[l,d]of s)i?.get(l)!==d&&e.setAttribute(`data-${l}`,d);let c=Array.from(s.keys());c.length>0?so.set(e,c):so.delete(e),s.size>0?ao.set(e,s):ao.delete(e),e.__polycssHasDataAttrs=c.length>0}function It(e){return e.__polycssHasDataAttrs===!0}function co(e,n,t,o,i=t==="dynamic",r){if(!n.url)return;let s=jr(o,r),c=`url(${n.url})`,l=o.canvasW||1,d=o.canvasH||1,p=wn(o),y=Kt(o),g=Jt(o),b=`${ke(-o.x/l*y)} ${ke(-o.y/d*g)}`,x=`${ke(n.width/l*y)} ${ke(n.height/d*g)}`,v=`transform:matrix3d(${o.atlasMatrix});--polycss-atlas-size:${p}px;--polycss-atlas-width:${ke(y)};--polycss-atlas-height:${ke(g)};--polycss-atlas-leaf-sizing:${o.atlasLeafSizing??"canonical"}`,h=`${v};--polycss-atlas-position:${b};--polycss-atlas-image-size:${x}`;if(t==="dynamic"){let C=i?`;--pnx:${o.normal[0].toFixed(4)};--pny:${o.normal[1].toFixed(4)};--pnz:${o.normal[2].toFixed(4)}`:"";e.setAttribute("style",h+`;--polycss-atlas-url:${c}`+C+An(s))}else e.setAttribute("style",v+`;background-image:${c};background-position:${b};background-size:${x};background-repeat:no-repeat;--pnx:${o.normal[0].toFixed(4)};--pny:${o.normal[1].toFixed(4)};--pnz:${o.normal[2].toFixed(4)}`+An(s));lo(e,"atlas",!0,s,o.atlasLeafSizing??"canonical","affine",t,y,g)}function $r(e,n,t,o){if(n.texture){if(!t.texture||n.texture!==t.texture)return!1}else if(t.texture)return!1;let i=Wr(n,t);return i?(e.style.visibility="",Se(e,"transform",`matrix3d(${i.matrix})`),o==="dynamic"&&(Se(e,"--pnx",i.normal[0].toFixed(4)),Se(e,"--pny",i.normal[1].toFixed(4)),Se(e,"--pnz",i.normal[2].toFixed(4))),ve(e,t,n.index),!0):(e.style.visibility="hidden",ve(e,t,n.index),!0)}function uo(e,n,t,o,i){if(o!=="baked")return{...e,polygon:n,normal:t};let r=i.directionalLight,s=i.ambientLight,c=r?.direction??Ta,l=r?.color??Ea,d=Math.max(0,r?.intensity??Aa),p=s?.color??wa,y=Math.max(0,s?.intensity??Ma),g=Math.hypot(c[0],c[1],c[2])||1,b=c[0]/g,x=c[1]/g,v=c[2]/g,C=i.lightOccludedPolyIndices?.has(e.index)??!1?0:d*Math.max(0,t[0]*b+t[1]*x+t[2]*v);return{...e,polygon:n,normal:t,shadedColor:va(n.color??"#cccccc",C,l,p,y)}}function Wr(e,n){let t=Ur(e,n);if(!t)return null;let{normal:o,xAxis:i,yAxis:r,tx:s,ty:c,tz:l}=t;return{normal:o,matrix:ba([i[0]*e.canvasW/Kt(e),i[1]*e.canvasW/Kt(e),i[2]*e.canvasW/Kt(e),0,r[0]*e.canvasH/Jt(e),r[1]*e.canvasH/Jt(e),r[2]*e.canvasH/Jt(e),0,o[0],o[1],o[2],0,s,c,l,1])}}var Ur=Ca;function La(e,n,t){if(e.screenPts.length!==8||n.vertices.length!==4)return null;let o=Ur(e,n);if(!o)return null;let i=Sa(e.screenPts,o.xAxis,o.yAxis,o.normal,o.tx,o.ty,o.tz,t);return i?{matrix:i,normal:o.normal}:null}function po(e,n,t,o,i=!1){let r=t.createElement("b");return r.setAttribute("style",`transform:matrix3d(${xa(e)})`+Qt(e,n,o,i)),ve(r,e.polygon,e.index),r}function mo(e,n,t,o,i=!1){let r=t.createElement("i");return r.setAttribute("style",Br(e)+Qt(e,n,o,i)),ve(r,e.polygon,e.index),r}function fo(e,n,t,o,i,r=!1){let s=o.createElement("u");return s.className=Nr,s.setAttribute("style",Vr(e,n)+Qt(e,t,i,r)),ve(s,e.polygon,e.index),s}function go(e,n,t,o,i=!1){let r=t.createElement("b");return r.setAttribute("style",`transform:matrix3d(${e.projectiveMatrix})`+Qt(e,n,o,i)),ve(r,e.polygon,e.index),r}function Gr(e,n,t,o,i,r,s){let c=n.projectiveMatrix?La(n,t,r):Wr(n,t);if(!c)return!1;let l=uo(n,t,c.normal,o,i);return e.style.visibility="",e.style.transform=`matrix3d(${c.matrix})`,Dt(e,l,o,s),ve(e,l.polygon,l.index),!0}function Yr(e,n,t,o){e.style.visibility="",e.setAttribute("style",Br(n)),Dt(e,n,t,o),ve(e,n.polygon,n.index)}function Xr(e,n,t,o,i){e.style.visibility="",e.className=Nr,e.setAttribute("style",Vr(n,t)),Dt(e,n,o,i),Se(e,"background","currentColor"),ve(e,n.polygon,n.index)}function ho(e,n,t,o=!1,i){let r=t.createElement("s"),s=jr(e,i),c=wn(e),l=Kt(e),d=Jt(e),p=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:${c}px;--polycss-atlas-width:${ke(l)};--polycss-atlas-height:${ke(d)};--polycss-atlas-leaf-sizing:${e.atlasLeafSizing??"canonical"};opacity:0`+p+An(s)),lo(r,"atlas",!1,s,e.atlasLeafSizing??"canonical","affine",n,l,d),ve(r,e.polygon,e.index),r}function yo(e,n,t,o=!1){let i=t.createElement("s"),r=o?"":`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return i.setAttribute("style",`transform:matrix3d(${n.matrix});--polycss-atlas-width:${ke(n.leafWidth)};--polycss-atlas-height:${ke(n.leafHeight)};--polycss-atlas-leaf-sizing:image;background-image:url(${n.url});background-position:${ke(n.backgroundPosition[0])} ${ke(n.backgroundPosition[1])};background-size:${ke(n.backgroundSize[0])} ${ke(n.backgroundSize[1])};background-repeat:no-repeat;background-blend-mode:normal;mask-image:none;-webkit-mask-image:none`+r+An(n.imageRendering)),lo(i,"image",!0,n.imageRendering,"image",n.projection,n.lighting,n.leafWidth,n.leafHeight),i.setAttribute("data-polycss-texture-source-x",String(n.sourceRect.x)),i.setAttribute("data-polycss-texture-source-y",String(n.sourceRect.y)),i.setAttribute("data-polycss-texture-source-width",String(n.sourceRect.width)),i.setAttribute("data-polycss-texture-source-height",String(n.sourceRect.height)),ve(i,e.polygon,e.index),i}import{computeSolidTriangleColorPlan as Ya}from"@layoutit/polycss-core";import{computeSolidTrianglePlanFromCssPoints as Ra,computeSolidTrianglePlan as ka}from"@layoutit/polycss-core";function pt(e,n,t,o={}){let i=o.primitive!=null?void 0:(()=>{let r=t.doc??(typeof document<"u"?document:null);return r?We(r,t.strategies)??"border":"border"})();return ka(e,n,t,{...o,resolvedPrimitive:o.resolvedPrimitive??i})}function bo(e,n,t,o,i,r,s,c,l,d,p,y,g){let b=o.primitive!=null?void 0:(()=>{let x=t.doc??(typeof document<"u"?document:null);return x?We(x,t.strategies)??"border":"border"})();return Ra(e,n,t,{...o,resolvedPrimitive:o.resolvedPrimitive??b},i,r,s,c,l,d,p,y,g)}import{buildSeamBleedPolygonEdges as _a,DEFAULT_SEAM_BLEED as Oa,DEFAULT_TILE as Vp,resolveBleedRatio as Da}from"@layoutit/polycss-core";import{rgbEqual as Ia,stepRgbToward as Ha,rgbToCss as Fa,colorErrorScore as za}from"@layoutit/polycss-core";import{computeSolidTriangleColorPlan as qr}from"@layoutit/polycss-core";import{stableTriangleMatrixDecimals as xo}from"@layoutit/polycss-core";var Ba="0 48px 96px 48px";function Po(e,n){return _a(e,{tileSize:n.tileSize,layerElevation:n.layerElevation,directionalLight:n.directionalLight,ambientLight:n.ambientLight})}function vo(e,n,t){let o=Da(t.seamBleed),i=Oa*o,r={...t,bleedRatio:o};return n&&i>0?{...r,seamBleed:n.has(e)?i:void 0,seamEdges:n.get(e)}:r}function Mn(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 Zr(e,n){return!n.updatesDisabled&&(n.freezeFrames<=1||(n.colorFrame+e)%n.freezeFrames===0)}function mt(e,n,t,o,i,r){return t?r.updatesDisabled||o==="plan-only"||o==="transform-only"?!1:i==="adaptive"||e.__polycssSolidTriangleColor===void 0?!0:Zr(n,r):!0}function So(e,n){let t=e;t.__polycssSolidTrianglePrimitive!==n&&(n==="corner-bevel"?(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderWidth="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape")):(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape"),e.style.borderWidth=n==="border-large"?Ba:""),t.__polycssSolidTrianglePrimitive=n)}function Co(e){let n=e;n.__polycssSolidTriangleHidden&&(e.style.visibility="",n.__polycssSolidTriangleHidden=!1)}function Ht(e){let n=e;n.__polycssSolidTriangleHidden||(e.style.visibility="hidden",n.__polycssSolidTriangleHidden=!0)}function en(e,n){e.setAttribute("style",n.styleText),So(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||It(e))&&ve(e,n.polygon)}function Qr(e,n,t,o){if(!n.colorComputed){(n.polygon.data||It(e))&&ve(e,n.polygon);return}let i=e,r=n.bakedColor??"",s=n.bakedRgb,c=n.bakedAlpha??1,l=i.__polycssSolidTriangleColor,d=i.__polycssSolidTriangleColorRgb,p=i.__polycssSolidTriangleColorAlpha??1,y=o??Zr(n.index,t);if(!t.updatesDisabled&&l!==r&&(l===void 0||y)){let g=r,b=s;if(t.maxStep>0&&d&&s&&p===c){let x=Ha(d,s,t.maxStep);b=x,g=Fa(x,c)}(g!==l||!Ia(b,d))&&(e.style.color=g),i.__polycssSolidTriangleColor=g,i.__polycssSolidTriangleColorRgb=b,i.__polycssSolidTriangleColorAlpha=c,i.__polycssSolidTriangleColorFrame=t.colorFrame}(n.polygon.data||It(e))&&ve(e,n.polygon)}function tn(e,n,t,o){let i=e;So(e,n.primitive),i.__polycssSolidTriangleBasis!==n.basis&&(i.__polycssSolidTriangleBasis=n.basis),Co(e),e.style.transform=n.transformText,(n.colorComputed||n.polygon.data||It(e))&&Qr(e,n,t,o)}function Ln(e,n,t,o){Co(e),Qr(e,n,t,o)}function nn(e,n){let t=e;So(e,n.primitive),t.__polycssSolidTriangleBasis!==n.basis&&(t.__polycssSolidTriangleBasis=n.basis),Co(e),e.style.transform=n.transformText,(n.polygon.data||It(e))&&ve(e,n.polygon)}function Va(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 To(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)),i=Math.max(1,Math.floor(t.stableTriangleColorFreezeFrames??1));if(i<=1&&!Number.isFinite(t.stableTriangleColorBudget))return null;let r=Va(e.length,t),s=Math.max(1,Math.floor(t.stableTriangleColorMaxAge??Math.max(2,i*2))),c=[];for(let l=0;l<e.length;l++){let d=e[l],p=n[l];if(d.kind!=="triangle"||!p)continue;let y=d.element,g=y.__polycssSolidTriangleColor,b=p.bakedColor??"";if(g===b)continue;let x=y.__polycssSolidTriangleColorFrame??0,v=Math.max(0,o-x),h=za(g,b);c.push({index:l,score:(v>=s?1e6:0)+h*1e4+v})}return c.length===0?new Set:(c.sort((l,d)=>d.score-l.score),new Set(c.slice(0,r).map(l=>l.index)))}function Rn(e,n){let t=n.createElement("u");return en(t,e),ve(t,e.polygon,e.index),t}function Na(e,n,t){let o=t.createElement("u");return Ht(o),ve(o,e,n),o}function Eo(e,n,t,o,i,r){let s=t,c=s.stableTriangleDebug,l=o&&i==="color-only";if(s.stableTriangleColorPolicy==="adaptive"||e.length!==n.length)return!1;let d=xo(s.stableTriangleMatrixDecimals),p=t.doc??(typeof document<"u"?document:null),y=p?We(p,t.strategies)??"border":"border";for(let b=0;b<e.length;b++){let x=e[b];if(x.kind!=="triangle"||x.polygonIndex!==b||!n[b])return!1}let g=Po(n,t);for(let b=0;b<e.length;b++){let x=e[b].element,v=n[b];if(l){if(mt(x,b,o,c,s.stableTriangleColorPolicy,r)){let C=qr(v,b,t);if(!C)continue;Ln(x,C,r)}continue}let h=pt(v,b,vo(b,g,t),{basis:x.__polycssSolidTriangleBasis,matrixDecimals:d,primitive:y,includeColor:i!=="plan-only"&&i!=="transform-only"&&mt(x,b,o,c,s.stableTriangleColorPolicy,r)});if(!h){Ht(x);continue}o&&i==="plan-only"||(o&&i==="transform-only"?nn(x,h):o?tn(x,h,r):en(x,h))}return!0}function Ft(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};let o=We(t,n.strategies);if(!o||e.some(c=>c.texture||c.vertices.length!==3))return null;let i=xo(n.stableTriangleMatrixDecimals),r=[],s=Po(e,n);for(let c=0;c<e.length;c+=1){let l=e[c],d=pt(l,c,vo(c,s,n),{matrixDecimals:i,primitive:o}),p=d?Rn(d,t):Na(l,c,t);r.push({polygonIndex:c,element:p,kind:"triangle",dispose:()=>{}})}return{rendered:r,dispose(){}}}function Ao(e,n,t={}){let o=t.doc??(typeof document<"u"?document:null);if(!o)return{rendered:e,dispose:()=>{}};let i=We(o,t.strategies);if(!i||e.some(h=>h.kind!=="triangle")||n.length!==e.length)return null;for(let h=0;h<e.length;h++)if(e[h].polygonIndex!==h)return null;let r=t.optimizeStableTriangleStyle===!0&&(t.textureLighting??"baked")==="baked",s=t,c=s.stableTriangleDebug,l=s.stableTriangleUpdateMode??(c==="plan-only"||c==="transform-only"?c:"full"),d=r&&l==="color-only",p=Mn(s),y=xo(s.stableTriangleMatrixDecimals);if(Eo(e,n,t,r,l,p))return{rendered:e,dispose(){}};let g=new Array(e.length),b=new Array(e.length),x=Po(n,t);for(let h=0;h<e.length;h++){let C=e[h].element;if(d){let R=s.stableTriangleColorPolicy==="adaptive"||mt(C,h,r,c,s.stableTriangleColorPolicy,p);b[h]=R?qr(n[h],h,t):null;continue}g[h]=pt(n[h],h,vo(h,x,t),{basis:C.__polycssSolidTriangleBasis,matrixDecimals:y,primitive:i,includeColor:l!=="plan-only"&&l!=="transform-only"&&mt(C,h,r,c,s.stableTriangleColorPolicy,p)})}let v=r&&l!=="plan-only"&&l!=="transform-only"?To(e,d?b:g,s):null;for(let h=0;h<e.length;h++){if(d){let R=b[h];R&&Ln(e[h].element,R,p,v?.has(h));continue}let C=g[h];if(!C){Ht(e[h].element);continue}r&&l==="plan-only"||(r&&l==="transform-only"?nn(e[h].element,C):r?tn(e[h].element,C,p,v?.has(h)):en(e[h].element,C))}return{rendered:e,dispose(){}}}import{stableTriangleMatrixDecimals as ti}from"@layoutit/polycss-core";function ni(){return new Promise(e=>setTimeout(e,0))}async function wo(e){return performance.now()-e<ja?e:(await ni(),performance.now())}function oi(e,n){let t=Mo(n.seamBleed),o=Jr*t,i={...n,bleedRatio:t};return e.seamBleedEdges?.size&&o>0?{...i,seamBleed:o,seamEdges:e.seamBleedEdges}:{...i,seamBleed:void 0,seamEdges:void 0}}function ri(e,n){return Ga(e,{tileSize:n.tileSize,layerElevation:n.layerElevation,directionalLight:n.directionalLight,ambientLight:n.ambientLight})}function ii(e,n,t){let o=Mo(t.seamBleed),i=Jr*o,r={...t,bleedRatio:o};return n&&i>0?{...r,seamBleed:n.has(e)?i:void 0,seamEdges:n.get(e)}:r}function bt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{};let o=Lo(e,n),i=kt(t),r=e.map((s,c)=>rn(s,c,n,i,o[c]));return Zt(r,n.textureLighting??"baked",t,n.strategies)}function xt(e,n={}){let t=n.doc??(typeof document<"u"?document:null);if(!t)return{rendered:[],dispose:()=>{}};let o=n.textureLighting??"baked",i=n,r=o==="dynamic"&&i.skipDynamicNormalVars===!0,s=new Set(n.strategies?.disable??[]),c=!s.has("b"),l=c&&Ot(t),d=We(t,n.strategies),p=d!==null,y=!s.has("i")&&qt(t),g=!s.has("i")&&_t(t),b=Lo(e,n),x=kt(t),v=ri(e,n),h=e.map((u,m)=>rn(u,m,ii(m,v,n),x,b[m])),C=n.solidPaintDefaults??(i.computeSolidPaintDefaults?Zt(h,o,t,n.strategies):void 0),R=C?{...n,solidPaintDefaults:C}:n,I=h.map(u=>u&&p&&rt(u)?pt(u.polygon,u.index,oi(u,R),{primitive:d??void 0}):null),z=h.map(u=>u&&y&&!rt(u)&&!(c&&je(u))&&!(l&&$e(u))?on(u):null),D=h.map(u=>u?ei(u,{imageRendering:n.textureImageRendering,backend:n.textureBackend,projection:n.textureProjection,allowProjective:l,projectiveQuadGuards:x}):null),X=h.map((u,m)=>D[m]?null:u&&(u.texture||!(c&&je(u))&&!I[m]&&!(l&&$e(u))&&!z[m]&&!g?u:null)),{packed:q,atlasScale:M}=wt(X,n.textureQuality,t,n.textureLeafSizing),V=new Map,B=[],F=!1,re=[];for(let u=0;u<e.length;u++){let m=h[u],A=I[u],k=z[u],N=D[u];if(!m)continue;let Y=q.entries[u];if(Y){let w=ho(Y,o,t,r,n.textureImageRendering);V.set(u,w),B.push({polygonIndex:u,element:w,kind:"atlas",plan:Y,dispose:()=>{}})}else if(N){let w=yo(m,N,t,r);B.push({polygonIndex:u,element:w,kind:"image",plan:m,dispose:()=>{}})}else if(!m.texture&&c&&je(m)){let w=po(m,o,t,C,r);B.push({polygonIndex:u,element:w,kind:"solid",plan:m,dispose:()=>{}})}else if(!m.texture&&A){let w=Rn(A,t);B.push({polygonIndex:u,element:w,kind:"triangle",plan:m,dispose:()=>{}})}else if(!m.texture&&l&&$e(m)){let w=go(m,o,t,C,r);B.push({polygonIndex:u,element:w,kind:"solid",plan:m,dispose:()=>{}})}else if(!m.texture&&k){let w=fo(m,k,o,t,C,r);B.push({polygonIndex:u,element:w,kind:"corner",plan:m,dispose:()=>{}})}else if(!m.texture&&g){let w=mo(m,o,t,C,r);B.push({polygonIndex:u,element:w,kind:"border",plan:m,dispose:()=>{}})}}B.sort((u,m)=>u.polygonIndex-m.polygonIndex);let P=Rt(q.pages,o,t,M,()=>F).then(u=>{if(F){for(let m of u)m.url?.startsWith("blob:")&&URL.revokeObjectURL(m.url);return}re=u.flatMap(m=>m.url?.startsWith("blob:")?[m.url]:[]);for(let m=0;m<q.pages.length;m++){let A=q.pages[m],k=u[m];if(k)for(let N of A.entries){let Y=V.get(N.index);!Y||!k.url||co(Y,k,o,N,!0,n.textureImageRendering)}}}).catch(()=>{if(!F)for(let u of V.values())Se(u,"opacity","0.5"),Se(u,"outline","1px dashed rgba(255, 0, 0, 0.6)")});return{rendered:B,solidPaintDefaults:C??{},pagesReady:P,dispose(){F=!0;for(let u of re)URL.revokeObjectURL(u);re=[]}}}async function sn(e,n={},t=()=>!1){let o=n.doc??(typeof document<"u"?document:null);if(!o||t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let i=n.textureLighting??"baked",s=i==="dynamic"&&n.skipDynamicNormalVars===!0,c=new Set(n.strategies?.disable??[]),l=!c.has("b"),d=l&&Ot(o),p=We(o,n.strategies),y=p!==null,g=!c.has("i")&&qt(o),b=!c.has("i")&&_t(o);if(await ni(),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let x=Lo(e,n),v=kt(o),h=ri(e,n),C=performance.now(),R=new Array(e.length);for(let u=0;u<e.length;u++)if(R[u]=rn(e[u],u,ii(u,h,n),v,x[u]),C=await wo(C),t())return{rendered:[],solidPaintDefaults:{},dispose:()=>{}};let I=n.solidPaintDefaults??Zt(R,i,o,n.strategies),z=new Array(R.length),D=new Array(R.length),X=new Array(R.length),q=new Array(R.length);for(let u=0;u<R.length;u++){let m=R[u],A=m&&y&&rt(m)?pt(m.polygon,m.index,oi(m,{...n,solidPaintDefaults:I}),{primitive:p??void 0}):null;z[u]=A;let k=m&&g&&!rt(m)&&!(l&&je(m))&&!(d&&$e(m))?on(m):null;D[u]=k;let N=m?ei(m,{imageRendering:n.textureImageRendering,backend:n.textureBackend,projection:n.textureProjection,allowProjective:d,projectiveQuadGuards:v}):null;if(X[u]=N,q[u]=N?null:m&&(m.texture||!(l&&je(m))&&!A&&!(d&&$e(m))&&!k&&!b?m:null),C=await wo(C),t())return{rendered:[],solidPaintDefaults:I,dispose:()=>{}}}let{packed:M,atlasScale:V}=wt(q,n.textureQuality,o,n.textureLeafSizing),B=new Map,F=[],re=!1,P=[];for(let u=0;u<e.length;u++){let m=R[u],A=z[u],k=D[u],N=X[u];if(!m)continue;let Y=M.entries[u];if(Y){let w=ho(Y,i,o,s,n.textureImageRendering);B.set(u,w),F.push({polygonIndex:u,element:w,kind:"atlas",plan:Y,dispose:()=>{}})}else if(N){let w=yo(m,N,o,s);F.push({polygonIndex:u,element:w,kind:"image",plan:m,dispose:()=>{}})}else if(!m.texture&&l&&je(m)){let w=po(m,i,o,I,s);F.push({polygonIndex:u,element:w,kind:"solid",plan:m,dispose:()=>{}})}else if(!m.texture&&A){let w=Rn(A,o);F.push({polygonIndex:u,element:w,kind:"triangle",plan:m,dispose:()=>{}})}else if(!m.texture&&d&&$e(m)){let w=go(m,i,o,I,s);F.push({polygonIndex:u,element:w,kind:"solid",plan:m,dispose:()=>{}})}else if(!m.texture&&k){let w=fo(m,k,i,o,I,s);F.push({polygonIndex:u,element:w,kind:"corner",plan:m,dispose:()=>{}})}else if(!m.texture&&b){let w=mo(m,i,o,I,s);F.push({polygonIndex:u,element:w,kind:"border",plan:m,dispose:()=>{}})}if(C=await wo(C),t()){for(let w of F)w.dispose();return{rendered:[],solidPaintDefaults:I,dispose:()=>{}}}}F.sort((u,m)=>u.polygonIndex-m.polygonIndex);let L=Rt(M.pages,i,o,V,()=>re||t()).then(u=>{if(re||t()){for(let m of u)m.url?.startsWith("blob:")&&URL.revokeObjectURL(m.url);return}P=u.flatMap(m=>m.url?.startsWith("blob:")?[m.url]:[]);for(let m=0;m<M.pages.length;m++){let A=M.pages[m],k=u[m];if(k)for(let N of A.entries){let Y=B.get(N.index);!Y||!k.url||co(Y,k,i,N,!0,n.textureImageRendering)}}}).catch(()=>{if(!(re||t()))for(let u of B.values())Se(u,"opacity","0.5"),Se(u,"outline","1px dashed rgba(255, 0, 0, 0.6)")});return{rendered:F,solidPaintDefaults:I,pagesReady:L,dispose(){re=!0;for(let u of P)URL.revokeObjectURL(u);P=[]}}}function an(e,n,t,o={}){let i=o.textureLighting??"baked",r=o,s=r.optimizeStableTriangleStyle===!0&&i==="baked";if(!s||r.stableTriangleColorPolicy==="adaptive"||e.length!==t.polygonCount||n.length!==t.polygonCount||t.vertices.length<t.polygonCount*9)return!1;let c=r.stableTriangleDebug,l=r.stableTriangleUpdateMode??(c==="plan-only"||c==="transform-only"?c:"full");if(l==="color-only")return!1;let d=ti(r.stableTriangleMatrixDecimals),p=Mn(r),y=o.tileSize??$a,g=o.layerElevation??y,b=o.doc??(typeof document<"u"?document:null),x=b?We(b,o.strategies)??"border":"border";for(let h=0;h<e.length;h++){let C=e[h],R=n[h];if(C.kind!=="triangle"||C.polygonIndex!==h||!R||R.vertices.length!==3||R.texture||R.material?.texture)return!1}let v=t.vertices;for(let h=0;h<e.length;h++){let C=e[h].element,R=n[h],I=h*9,z=v[I+1]*y,D=v[I]*y,X=v[I+2]*g,q=v[I+4]*y,M=v[I+3]*y,V=v[I+5]*g,B=v[I+7]*y,F=v[I+6]*y,re=v[I+8]*g,P=bo(R,h,o,{basis:C.__polycssSolidTriangleBasis,matrixDecimals:d,primitive:x,color:t.colors?.[h],includeColor:l!=="plan-only"&&l!=="transform-only"&&mt(C,h,s,c,r.stableTriangleColorPolicy,p)},z,D,X,q,M,V,B,F,re);if(!P){Ht(C);continue}l!=="plan-only"&&(l==="transform-only"?nn(C,P):tn(C,P,p))}return!0}function ln(e,n,t={}){if(e.length!==n.length)return!1;let o=t,i=t.doc??(typeof document<"u"?document:null),r=t.textureLighting??"baked",s=new Set(t.strategies?.disable??[]),c=!s.has("b"),l=!!i&&c&&Ot(i),d=!!i&&!s.has("i")&&qt(i),p=!!i&&!s.has("i")&&_t(i),y=Mo(o.seamBleed),g=i?kt(i,{bleed:Kr*y}):{denomEps:Wa,maxWeightRatio:Ua,bleed:Kr*y,disableGuards:!1},b=o.optimizeStableTriangleStyle===!0&&r==="baked",x=o.stableTriangleDebug,v=o.stableTriangleUpdateMode??(x==="plan-only"||x==="transform-only"?x:"full"),h=b&&v==="color-only",C=Mn(o),R=ti(o.stableTriangleMatrixDecimals),I=i?We(i,t.strategies)??"border":"border";if(Eo(e,n,t,b,v,C))return!0;let z=[],D=[],X=[];for(let M=0;M<e.length;M++){let V=e[M];if(V.polygonIndex!==M)return!1;let B=n[M];if(!B||h&&V.kind!=="triangle")return!1;if(V.kind==="atlas"){if(!V.plan||!$r(V.element,V.plan,B,r))return!1;continue}if(V.kind==="triangle"){let F=V.element;if(h){let P=o.stableTriangleColorPolicy==="adaptive"||mt(F,M,b,x,o.stableTriangleColorPolicy,C);D[M]=P?Ya(B,M,t):null;continue}let re=pt(B,M,t,{basis:F.__polycssSolidTriangleBasis,matrixDecimals:R,primitive:I,includeColor:v!=="plan-only"&&v!=="transform-only"&&mt(F,M,b,x,o.stableTriangleColorPolicy,C)});if(!re){z[M]=null;continue}z[M]=re;continue}if(V.kind==="solid"){if(!V.plan||B.texture||B.vertices.length!==V.plan.polygon.vertices.length)return!1;X[M]=V.plan;continue}if(V.kind==="border"){let F=rn(B,M,t,g);if(!F||F.texture||!p||c&&je(F)||l&&$e(F)||d&&on(F))return!1;X[M]=F;continue}if(V.kind==="corner"){let F=rn(B,M,t,g);if(!F||F.texture||!d||rt(F)||c&&je(F)||l&&$e(F)||!on(F))return!1;X[M]=F;continue}return!1}let q=b&&v!=="plan-only"&&v!=="transform-only"?To(e,h?D:z,o):null;for(let M=0;M<e.length;M++){let V=e[M];if(V.kind==="triangle"){if(h){let F=D[M];F&&Ln(V.element,F,C,q?.has(M));continue}let B=z[M];if(!B){Ht(V.element);continue}if(b&&v==="plan-only")continue;b&&v==="transform-only"?nn(V.element,B):b?tn(V.element,B,C,q?.has(M)):en(V.element,B)}else if(V.kind==="solid"){let B=X[M];if(!B||!Gr(V.element,B,n[M],r,t,g,o.solidPaintDefaults))return!1}else if(V.kind==="border"){let B=X[M];if(!B)return!1;Yr(V.element,B,r,o.solidPaintDefaults)}else if(V.kind==="corner"){let B=X[M],F=B?on(B):null;if(!B||!F)return!1;Xr(V.element,B,F,r,o.solidPaintDefaults)}}return!0}import{computeTextureAtlasPlanPublic as ai}from"@layoutit/polycss-core";import{formatMatrix3d as li,formatCssLengthPx as ci,formatSolidQuadEntryMatrix as ui}from"@layoutit/polycss-core";import{formatBorderShapeEntryMatrix as di,cssBorderShapeForPlan as pi}from"@layoutit/polycss-core";import{BASE_TILE as Ce,computeProjectiveQuadMatrix as Za,normalFacesCamera as Qa,parsePureColor as bi,PROJECTIVE_QUAD_BLEED as Ka,resolveProjectiveQuadGuards as Ja,rotateVec3 as el,rotateVec3InWrapperCssFrame as tl,shadePolygon as nl,SOLID_QUAD_CANONICAL_SIZE as ol}from"@layoutit/polycss-core";var rl=[.4,-.7,.59],il="#ffffff",sl=1,al="#ffffff",ll=.4,xi=1,cl=8,ul=Ka,it=1e-6,dl=Ja({bleed:0}),Pi={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},_o=["t","b","bl","br","fr","fl"],pl=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 mi(e){let n=[];for(let t of _o)Qa(Pi[t],e)&&n.push(t);return n.join("|")}function ml(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 fl(e){let n=e.vertices;if(n.length<3)return null;let t=n[0],o=0,i=0,r=0;for(let c=1;c+1<n.length;c+=1){let l=n[c],d=n[c+1],p=l[1]-t[1],y=l[0]-t[0],g=l[2]-t[2],b=d[1]-t[1],x=d[0]-t[0],v=d[2]-t[2];o-=y*v-g*x,i-=g*b-p*v,r-=p*x-y*b}let s=Math.hypot(o,i,r);return s<=1e-9?null:[Math.round(o/s),Math.round(i/s),Math.round(r/s)]}function gl(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let n=fl(e),t=n?pl.get(n.join(",")):void 0;if(!t)return null;let o=1/0,i=1/0,r=1/0,s=-1/0,c=-1/0,l=-1/0;for(let y of e.vertices)o=Math.min(o,y[0]),i=Math.min(i,y[1]),r=Math.min(r,y[2]),s=Math.max(s,y[0]),c=Math.max(c,y[1]),l=Math.max(l,y[2]);let d=1e-6,p=Sl(e.color);return Math.abs(l-r)<=d?{axis:"z",face:t,left:i*Ce,top:o*Ce,width:Math.max(0,(c-i)*Ce),height:Math.max(0,(s-o)*Ce),z:r*Ce,baseColor:p,bleed:Ro()}:Math.abs(s-o)<=d?{axis:"x",face:t,left:i*Ce,top:r*Ce,width:Math.max(0,(c-i)*Ce),height:Math.max(0,(l-r)*Ce),z:-o*Ce,baseColor:p,bleed:Ro()}:Math.abs(c-i)<=d?{axis:"y",face:t,left:r*Ce,top:o*Ce,width:Math.max(0,(l-r)*Ce),height:Math.max(0,(s-o)*Ce),z:-i*Ce,baseColor:p,bleed:Ro()}:null}function Ro(){return{left:0,right:0,top:0,bottom:0}}function hl(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 fi(e){return[e[1]*Ce,e[0]*Ce,e[2]*Ce]}function gi(e,n){return e.axis==="x"?[n[0],n[2]]:e.axis==="y"?[n[2],n[1]]:[n[0],n[1]]}function yl(e,n,t){let o=e.left,i=e.left+e.width,r=e.top,s=e.top+e.height;if(Math.abs(n[0]-t[0])<=it){if(Math.abs(n[0]-o)<=it)return"left";if(Math.abs(n[0]-i)<=it)return"right"}if(Math.abs(n[1]-t[1])<=it){if(Math.abs(n[1]-r)<=it)return"top";if(Math.abs(n[1]-s)<=it)return"bottom"}return null}function bl(e,n){let t=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-n[o])<=it)){if(t!==null)return null;t=o}return t}function xl(e,n,t){let o=n.vertices,i=fi(o[t]),r=fi(o[(t+1)%o.length]),s=yl(e,gi(e,i),gi(e,r));if(!s)return null;let c=bl(i,r);if(c===null)return null;let l=Math.min(i[c],r[c]),d=Math.max(i[c],r[c]);return d-l>it?{item:e,side:s,variableAxis:c,fixed:i,start:l,end:d}:null}function hi(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],ul)}function Pl(e,n){let t=new Map;for(let o of n){let i=e[o.sourceIndex];if(i)for(let r=0;r<i.vertices.length;r+=1){let s=xl(o,i,r);if(!s)continue;let c=hl(s),l=t.get(c);l?l.push(s):t.set(c,[s])}}for(let o of t.values()){if(o.length<2)continue;o.sort((r,s)=>r.start-s.start||r.end-s.end);let i=[];for(let r of o){i=i.filter(s=>s.end>r.start+it);for(let s of i)s.item.sourceIndex!==r.item.sourceIndex&&(hi(s),hi(r));i.push(r)}}}function vl(e){let n=bi(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 Sl(e){if(!e)return"#cccccc";let n=bi(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(${ko(t.r)}, ${ko(t.g)}, ${ko(t.b)}, ${o})`}return Cl(t)}function Cl({r:e,g:n,b:t}){let o=i=>Math.round(Math.max(0,Math.min(255,i))).toString(16).padStart(2,"0");return`#${o(e)}${o(n)}${o(t)}`}function ko(e){return Math.round(Math.max(0,Math.min(255,e)))}function Tl(e,n,t,o){let i=t?.direction??rl,r=Math.hypot(i[0],i[1],i[2])||1,s=i[0]/r,c=i[1]/r,l=i[2]/r,d=Math.max(0,t?.intensity??sl)*Math.max(0,e[0]*s+e[1]*c+e[2]*l),p=Math.max(0,o?.intensity??ll),y=t?.color??il,g=o?.color??al,b=nl(n,d,y,g,p),x=vl(n);if(x.alpha>=1)return b;let v=parseInt(b.slice(1,3),16),h=parseInt(b.slice(3,5),16),C=parseInt(b.slice(5,7),16);return`rgba(${v}, ${h}, ${C}, ${x.alpha})`}function El(e){if(!e?.length)return[];let n=[];for(let t=0;t<e.length;t+=1){let o=e[t],i=gl(o);if(!i||i.width<=0||i.height<=0)return[];n.push({...i,sourceIndex:t})}return Pl(e,n),n}function Al(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 wl(e){let n=e.left,t=e.top,o=e.left+e.width,i=e.top+e.height;return[n,t,o,t,o,i,n,i]}function Ml(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function Ll(e,n){let t=e.split(",").map(Number);if(t.length!==16||t.some(i=>!Number.isFinite(i)))return null;let o=ol/n;for(let i=0;i<8;i+=1)t[i]*=o;return`matrix3d(${t.map(i=>Number(i.toFixed(6))).join(",")})`}function yi(e,n){let t=e.left-e.bleed.left,o=e.top-e.bleed.top,i=e.width+e.bleed.left+e.bleed.right,r=e.height+e.bleed.top+e.bleed.bottom,s=e.z,c=i/n,l=r/n;return`matrix3d(${(e.axis==="x"?[c,0,0,0,0,0,l,0,0,-1,0,0,t,-s,o,1]:e.axis==="y"?[0,0,c,0,0,l,0,0,-1,0,0,0,-s,o,t,1]:[c,0,0,0,0,l,0,0,0,0,1,0,t,o,s,1]).map(p=>Number(p.toFixed(6))).join(",")})`}function Rl(e,n){let{xAxis:t,yAxis:o,normal:i,tx:r,ty:s,tz:c}=Al(e),l=Za(wl(e),t,o,i,r,s,c,dl,Ml(e));return l?Ll(l,n)??yi(e,n):yi(e,n)}function kl(e){let n=e.defaultView?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function _l(e){return kl(e)?cl:xi}function Ol(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 Dl(e,n){let t=Ol(e),o=n.meshRotation;o&&(t=tl(t,o));let[i,r]=el(t,n.rotX,0,n.rotY);return{x:i,y:r}}function Il(e,n,t){let o=e.filter(g=>n.has(g.face)).map(g=>({item:g,...Dl(g,t)}));if(o.length===0)return[];let i=1/0,r=-1/0,s=1/0,c=-1/0;for(let g of o)i=Math.min(i,g.x),r=Math.max(r,g.x),s=Math.min(s,g.y),c=Math.max(c,g.y);let l=4,d=Math.max(1e-6,r-i),p=Math.max(1e-6,c-s),y=new Map;for(let g of o){let b=Math.min(l-1,Math.max(0,Math.floor((g.x-i)/d*l))),x=Math.min(l-1,Math.max(0,Math.floor((g.y-s)/p*l))),v=`${b}:${x}`,h=y.get(v);h||(h={tx:b,ty:x,sourceIndex:g.item.sourceIndex,items:[]},y.set(v,h)),h.items.push(g.item),h.sourceIndex=Math.min(h.sourceIndex,g.item.sourceIndex)}return Array.from(y.values()).sort((g,b)=>g.ty-b.ty||g.tx-b.tx||g.sourceIndex-b.sourceIndex).flatMap(g=>g.items)}function vi(e){let{doc:n,wrapper:t,polygons:o,directionalLight:i,ambientLight:r}=e,s=El(o);if(s.length===0)return null;let c=new Set(s.map(P=>P.face));t.classList.add("polycss-voxel-mesh");let l=_l(n);l!==xi&&t.style.setProperty("--polycss-voxel-primitive",`${l}px`);let d=new Map,p=(P,L)=>{let u=`${P}|${L}`,m=d.get(u);if(m)return m;let A=Tl(Pi[P],L,i,r);return d.set(u,A),A},y=new Map,g=new Map,b=new Map,x=new Map;for(let P of s){let L=x.get(P.face);L||(L=[],x.set(P.face,L)),L.push(P)}let v="",h=0,C=new Set,R=P=>{let L=y.get(P.sourceIndex);return L||(L=n.createElement("b"),y.set(P.sourceIndex,L),ml(L,p(P.face,P.baseColor),Rl(P,l))),L},I=P=>{let L=g.get(P);return L||(L=n.createElement("span"),L.className=`polycss-voxel-face polycss-voxel-face-${P}`,L.dataset.polycssVoxelFace=P,L.__polycssVoxelFaceHost=!0,g.set(P,L)),L},z=()=>{for(let P of Array.from(t.childNodes))if(!P.__polycssVoxelFaceHost)return P;return null},D=(P,L)=>{let u=L.map(k=>k.sourceIndex).join(",");if(b.get(P)===u)return;let m=I(P),A=n.createDocumentFragment();for(let k of L)A.appendChild(R(k));m.replaceChildren(A),b.set(P,u)},X=()=>{for(let P of _o)c.has(P)&&D(P,x.get(P)??[])},q=P=>new Set(P.split("|").filter(Boolean)),M=P=>{let L=q(P);return _o.filter(u=>L.has(u)&&c.has(u))},V=P=>{let L=0;for(let u of P)L+=x.get(u)?.length??0;return L},B=P=>{let L=new Set,u=[],m=new Map;for(let A of P){L.has(A.face)||(L.add(A.face),u.push(A.face));let k=m.get(A.face);k||(k=[],m.set(A.face,k)),k.push(A)}return{orderedFaces:u,itemsByFace:m}},F=(P,L)=>{let u=new Set(P);for(let m of C){if(u.has(m))continue;let A=g.get(m);A?.parentNode===t&&t.removeChild(A)}if(L){let m=n.createDocumentFragment();for(let A of P)m.appendChild(I(A));t.insertBefore(m,z()),C=u;return}for(let m=0;m<P.length;m+=1){let A=P[m],k=I(A);if(k.parentNode===t)continue;let N=null;for(let Y=m+1;Y<P.length;Y+=1){let w=g.get(P[Y]);if(w?.parentNode===t){N=w;break}}t.insertBefore(k,N??z())}C=u},re=(P,L,u)=>{if(!u){let Y=M(P);F(Y,!1),h=V(Y);return}let m=new Set(P.split("|").filter(Boolean)),A=Il(s,m,L),{orderedFaces:k,itemsByFace:N}=B(A);for(let Y of k)D(Y,N.get(Y)??[]);F(k,!0),h=A.length};return X(),{get brushCount(){return h},render(P){v=mi(P),re(v,P,!0)},syncCamera(P){let L=mi(P);L!==v&&(v=L,re(L,P,!1))},dispose(){for(let P of g.values())P.remove();t.classList.remove("polycss-voxel-mesh"),t.style.removeProperty("--polycss-voxel-primitive"),y.clear(),g.clear(),b.clear(),h=0,C=new Set,v=""}}}var Si="polycss-styles";function Oo(e){let n=e??(typeof document<"u"?document:void 0);if(!n||n.getElementById(Si))return;let t=n.createElement("style");t.id=Si,t.textContent=Hl,n.head.appendChild(t)}var Hl=`
|
|
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,
|
|
@@ -516,7 +516,7 @@ import{CAMERA_BACKFACE_CULL_EPS as Ho,DEFAULT_SEAM_BLEED as ni,VOXEL_CAMERA_CULL
|
|
|
516
516
|
.polycss-scene[data-polycss-lighting="dynamic"] q {
|
|
517
517
|
opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
|
|
518
518
|
}
|
|
519
|
-
`;import{BASE_TILE as Ll,buildPolyCameraSceneTransform as Rl,buildPolyMeshTransform as kl,worldDirectionToCss as _l,worldDirectionalLightToCss as Ol,worldPositionToCss as ym}from"@layoutit/polycss-core";var rn=Ll,Dl=.1;function sn(e){return _l(e)}function it(e){return Ol(e)}function An(e){return kl(e)}function ko(e,n=[0,0,0],t=1){return Rl(e.state,{autoCenterOffset:n,layoutScale:t})}function Il(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 Ss(e){let n=e.ownerDocument?.defaultView;if(!n)return 1;let t=1;for(let o=e;o;o=o.parentElement)t*=Il(n.getComputedStyle(o).getPropertyValue("zoom"));return Number.isFinite(t)&&t>0?t:1}function Cs(e,n){Math.abs(n-1)<1e-6?e.style.removeProperty("zoom"):e.style.setProperty("zoom",String(1/n))}function Ts(e){if(e.vertices.length<3)return null;let n=e.vertices[0],t=0,o=0,s=0;for(let P=1;P+1<e.vertices.length;P++){let f=e.vertices[P],b=e.vertices[P+1],x=f[1]-n[1],v=f[0]-n[0],y=f[2]-n[2],C=b[1]-n[1],O=b[0]-n[0],k=b[2]-n[2];t-=v*k-y*O,o-=y*C-x*k,s-=x*O-v*C}let r=Math.hypot(t,o,s);if(r<1e-9)return null;t/=r,o/=r,s/=r;let i=1/Dl,c=Math.round(t*i)/i,l=Math.round(o*i)/i,u=Math.round(s*i)/i,d=Math.hypot(c,l,u);return d<1e-9?null:{key:c+","+l+","+u,vec:[c/d,l/d,u/d]}}function Es(e,n){let t=e?.disable??[],o=n?.disable??[];if(t.length!==o.length)return!1;for(let s of t)if(!o.includes(s))return!1;return!0}function As(e,n){return e===n?!0:!e||!n?!1:e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2]}function ws(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)}import{parseHex as Rs,parseHexColor as Ms,parsePureColor as Hl}from"@layoutit/polycss-core";var Fl=["--plx","--ply","--plz","--plr","--plg","--plb","--pli","--par","--pag","--pab","--pai","--clx","--cly","--clz"],Ht="--polycss-light-preview-active",Ls=`var(${Ht}, 0)`,zl="max(0, calc(var(--pnx, 0) * var(--plx, 0) + var(--pny, 0) * var(--ply, 0) + var(--pnz, 1) * var(--plz, 1)))",_o=(e,n,t)=>`calc(255 * max(0, 1.055 * pow(min(1, pow((var(${e}, 1) + 0.055) / 1.055, 2.4) * (pow((var(${n}, 1) + 0.055) / 1.055, 2.4) * var(--pai, 0.4) + pow((var(${t}, 1) + 0.055) / 1.055, 2.4) * var(--pli, 1) * var(--plam, 0)) / 3.14159265), 0.4167) - 0.055))`,Bl=_o("--psr","--par","--plr"),Vl=_o("--psg","--pag","--plg"),Nl=_o("--psb","--pab","--plb");function ue(e,n,t){return e.style.getPropertyValue(n)===t?!1:(e.style.setProperty(n,t),!0)}function gt(e){for(let n of Fl)e.style.getPropertyValue(n)&&e.style.removeProperty(n)}function wn(e,n){let t=n.directionalLight?.direction??[.4,-.7,.59],o=sn(t),s=Math.hypot(o[0],o[1],o[2])||1,r=o[0]/s,i=o[1]/s,c=o[2]/s,l=Ms(n.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],u=Ms(n.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],d=n.directionalLight?.intensity??1,P=n.ambientLight?.intensity??.4,f=v=>(v/255).toFixed(4);ue(e,"--plx",r.toFixed(2)),ue(e,"--ply",i.toFixed(2)),ue(e,"--plz",c.toFixed(2)),ue(e,"--plr",f(l[0])),ue(e,"--plg",f(l[1])),ue(e,"--plb",f(l[2])),ue(e,"--pli",d.toFixed(4)),ue(e,"--par",f(u[0])),ue(e,"--pag",f(u[1])),ue(e,"--pab",f(u[2])),ue(e,"--pai",P.toFixed(4));let b=c,x=Math.sign(b||1)*Math.max(Math.abs(b),.01);ue(e,"--clx",r.toFixed(2)),ue(e,"--cly",i.toFixed(2)),ue(e,"--clz",x.toFixed(2))}function ks(e,n){let t=n.textureLighting==="dynamic";if(e.dataset.polycssLighting=n.textureLighting??"baked",!t){gt(e);return}wn(e,n)}function ht(e,n){n.paintColor?e.style.setProperty("--polycss-paint",n.paintColor):e.style.getPropertyValue("--polycss-paint")&&e.style.removeProperty("--polycss-paint"),n.dynamicColor?(e.style.setProperty("--psr",(n.dynamicColor.r/255).toFixed(4)),e.style.setProperty("--psg",(n.dynamicColor.g/255).toFixed(4)),e.style.setProperty("--psb",(n.dynamicColor.b/255).toFixed(4))):(e.style.getPropertyValue("--psr")||e.style.getPropertyValue("--psg")||e.style.getPropertyValue("--psb"))&&(e.style.removeProperty("--psr"),e.style.removeProperty("--psg"),e.style.removeProperty("--psb"))}function _s(e,n){let t=Rs(n??"#cccccc");e.style.setProperty("--psr",(t.r/255).toFixed(4)),e.style.setProperty("--psg",(t.g/255).toFixed(4)),e.style.setProperty("--psb",(t.b/255).toFixed(4))}function Oo(e,n,t){if(!e.plan||e.kind==="atlas"||e.plan.texture)return!1;let o=t.textureLighting??"baked",s={directionalLight:it(t.directionalLight),ambientLight:t.ambientLight,textureLighting:o,textureQuality:t.textureQuality,seamBleed:t.seamBleed,strategies:t.strategies},r=ao(e.plan,n,e.plan.normal,o,s);return _t(e.element,r,o),o==="baked"&&$l(e.element),!0}function jl(e){let n=Hl(e)??{rgb:[255,255,255],alpha:1},[t,o,s]=n.rgb,r=(c,l)=>`calc(${c} * (1 - ${Ls}) + var(${l}, ${c}) * ${Ls})`,i=n.alpha<1?` / ${n.alpha}`:"";return`rgb(${r(t,"--polycss-preview-r")} ${r(o,"--polycss-preview-g")} ${r(s,"--polycss-preview-b")}${i})`}function Os(e,n,t){if(!e.plan||e.kind==="atlas"||e.plan.texture)return!1;let o=e.element,s=e.plan.normal,r=Rs(n.color??"#cccccc"),i=!1;return i=ue(o,"--pnx",s[0].toFixed(4))||i,i=ue(o,"--pny",s[1].toFixed(4))||i,i=ue(o,"--pnz",s[2].toFixed(4))||i,i=ue(o,"--psr",(r.r/255).toFixed(4))||i,i=ue(o,"--psg",(r.g/255).toFixed(4))||i,i=ue(o,"--psb",(r.b/255).toFixed(4))||i,i=ue(o,"--plam",zl)||i,i=ue(o,"--polycss-preview-r",Bl)||i,i=ue(o,"--polycss-preview-g",Vl)||i,i=ue(o,"--polycss-preview-b",Nl)||i,i=ue(o,"--polycss-paint",jl(t))||i,o.style.getPropertyValue("color")&&(o.style.removeProperty("color"),i=!0),i}function $l(e){e.style.removeProperty("--pnx"),e.style.removeProperty("--pny"),e.style.removeProperty("--pnz"),e.style.removeProperty("--psr"),e.style.removeProperty("--psg"),e.style.removeProperty("--psb"),e.style.removeProperty("--plam"),e.style.removeProperty("--polycss-preview-r"),e.style.removeProperty("--polycss-preview-g"),e.style.removeProperty("--polycss-preview-b"),e.style.removeProperty("--polycss-paint")}var Ul="http://www.w3.org/2000/svg",Mn=class{constructor(){this.groundSvg=null;this.groundVisible=!1;this.currentGroundCssZ=null;this.shadowRoot=null}};function Ds(e,n,t){let o=e.shadowRoot;if(o||(o=n.createElement("div"),o.setAttribute("class","polycss-shadows"),o.style.position="absolute",o.style.top="0",o.style.left="0",o.style.width="0",o.style.height="0",o.style.transformStyle="preserve-3d",o.style.pointerEvents="none",e.shadowRoot=o),o.parentNode!==t){let s=t.firstChild;s?t.insertBefore(o,s):t.appendChild(o)}return o}function Is(e){e.groundSvg?.parentNode&&e.groundSvg.parentNode.removeChild(e.groundSvg),e.groundSvg=null,e.groundVisible=!1}function Hs(e){e.groundSvg&&e.groundVisible&&(e.groundSvg.style.display="none",e.groundVisible=!1)}function Fs(e,n,t,o){let s=[],r=e.firstChild;for(let i=0;i<t;i++){let c=r;c&&c.tagName==="path"?r=c.nextSibling:(c=n.createElementNS(Ul,"path"),c.setAttribute("fill-rule","nonzero"),o&&(c.setAttribute("stroke-width","0.5"),c.setAttribute("stroke-linejoin","round")),e.insertBefore(c,r)),s.push(c)}for(;r;){let i=r.nextSibling;e.removeChild(r),r=i}return s}function zs(e){return{host:e.host,doc:e.doc,cameraEl:e.cameraEl,sceneEl:e.sceneEl,camera:e.camera,layoutScale:e.layoutScale,options:{current:e.options},meshes:new Set,meshAutoCounter:{next:0},autoCenter:{offset:[0,0,0]},bboxCenterCssCache:{value:null},shadowSvgState:new Mn,receiverShadowCache:new Map,receiverShadowCacheKey:new Map,casterItemsCache:new Map,casterItemsCacheKey:new Map}}import{buildSharedEdgeMap as Wl,computeReceiverShadowFaces as Gl,meshScaleVec3 as Us,prepareCasterEdgeOwners as Yl,prepareCasterPolyItems as Xl,prepareReceiverFacePlanes as ql}from"@layoutit/polycss-core";function Bs(e){for(let n of e)n.svg&&n.svg.parentNode&&n.svg.parentNode.removeChild(n.svg),n.svg=null}function Vs(e,n){if(n){let t=e.receiverShadowCache.get(n);t&&Bs(t),e.receiverShadowCache.delete(n),e.receiverShadowCacheKey.delete(n)}else{for(let t of e.receiverShadowCache.values())Bs(t);e.receiverShadowCache.clear(),e.receiverShadowCacheKey.clear()}}function Ns(e,n){n?(e.casterItemsCache.delete(n),e.casterItemsCacheKey.delete(n)):(e.casterItemsCache.clear(),e.casterItemsCacheKey.clear())}function js(e){Is(e.shadowSvgState),$s(e)}function Do(e){return e.handle.id??e.autoMeshId}var Zl="http://www.w3.org/2000/svg",Ln=new WeakMap,Ws=new WeakMap,Gs=new WeakMap,Ys=new WeakMap,Xs=new WeakMap;function qs(e){let n=Ln.get(e);return n||(n=new Map,Ln.set(e,n)),n}function Io(e){let n=Ln.get(e);if(n){for(let t of n.values())t.svg&&t.svg.parentNode&&t.svg.parentNode.removeChild(t.svg);n.clear(),Ln.delete(e)}}function $s(e){for(let n of e.meshes)Io(n)}function Zs(e,n,t,o,s,r,i,c,l,u){let d=e.options.current,{receiverShadowCache:P,receiverShadowCacheKey:f,casterItemsCache:b,casterItemsCacheKey:x}=e,v=o.handle.transform.position??[0,0,0],y=o.handle.transform.rotation??[0,0,0],C=o.polygons.some(A=>A.texture!==void 0),O=Us(o.handle.transform.scale),k=o.bboxCenterCss,j=d.shadow?.lift??.001,D=`${o.polygons.length}|${s.size}|${v.join(",")}|${y.join(",")}|${O.join(",")}|${k?k.join(","):"n"}|${j}`,Z=P.get(o);if(Z===void 0||f.get(o)!==D){Z=ql(o.polygons,v,o.handle.transform.scale,s,j,y),P.set(o,Z),f.set(o,D);let A=qs(o);for(let h of A.values())h.svg&&h.svg.parentNode&&h.svg.parentNode.removeChild(h.svg);A.clear()}let J=[];for(let A of n){let h=A.handle.transform.position??[0,0,0],E=A.handle.transform.rotation??[0,0,0],p=Us(A.handle.transform.scale),g=A.bboxCenterCss,L=`${A.polygons.length}|${h.join(",")}|${E.join(",")}|${p.join(",")}|${g?g.join(","):"n"}`,R=b.get(A);if(R===void 0||x.get(A)!==L){let T=t.get(A),G=new Set;for(let q of A.rendered)q.plan&&!T.has(q.polygonIndex)&&G.add(q.polygonIndex);R=Xl(A.polygons,h,A.handle.transform.scale,q=>G.has(q),E),b.set(A,R),x.set(A,L)}let H;if(A===o){let T=Ws.get(A);(T===void 0||Gs.get(A)!==A.polygons)&&(T=Wl(A.polygons),Ws.set(A,T),Gs.set(A,A.polygons)),H=T}let Q;if(A!==o&&A.polygons.length>=40){let T=Ys.get(A);(T===void 0||Xs.get(A)!==L)&&(T=Yl(A.polygons,h,A.handle.transform.scale,E),Ys.set(A,T),Xs.set(A,L)),Q=T}J.push({id:A,items:R,selfShadowEdgeMap:H,edgeOwners:Q,casterPolygonCount:A.polygons.length})}let _={rotX:e.camera.state.rotX,rotY:e.camera.state.rotY,meshRotation:o.handle.transform.rotation},V=Gl({receiverPlanes:Z,receiverPolygons:o.polygons,receiverHasTexture:C,casters:J,lightDir:r,cameraRot:_,ambientLight:d.ambientLight,directionalLight:d.directionalLight,shadow:{color:d.shadow?.color,opacity:u,maxExtend:d.shadow?.maxExtend}}),B=qs(o),z=new Set;for(let A of V){z.add(A.faceIndex);let h=B.get(A.faceIndex);h||(h={svg:null,visible:!1,width:-1,height:-1,matrixCss:""},B.set(A.faceIndex,h));let E=h.svg;E?(h.visible||(E.style.display="block"),(h.width!==A.width||h.height!==A.height)&&(E.setAttribute("width",String(A.width)),E.setAttribute("height",String(A.height)),E.setAttribute("viewBox",`0 0 ${A.width} ${A.height}`),h.width=A.width,h.height=A.height),h.matrixCss!==A.matrixCss&&(E.style.transform=A.matrixCss,h.matrixCss=A.matrixCss)):(E=e.doc.createElementNS(Zl,"svg"),E.setAttribute("class","polycss-shadow polycss-shadow-svg polycss-shadow-receiver"),d.debugShadowAttrs&&(E.setAttribute("data-poly-shadow-type","receiver"),E.setAttribute("data-poly-shadow-receiver",Do(o)),E.setAttribute("data-poly-shadow-receiver-face",String(A.faceIndex)),E.setAttribute("data-poly-shadow-receiver-polys",JSON.stringify(A.memberPolyIndices))),E.setAttribute("width",String(A.width)),E.setAttribute("height",String(A.height)),E.setAttribute("viewBox",`0 0 ${A.width} ${A.height}`),E.setAttribute("style",`position:absolute;top:0;left:0;display:block;overflow:hidden;transform-origin:0 0;pointer-events:none;will-change:transform;transform:${A.matrixCss}`),Ds(e.shadowSvgState,e.doc,e.sceneEl).appendChild(E),h.svg=E,h.width=A.width,h.height=A.height,h.matrixCss=A.matrixCss),h.visible=!0;let p=Fs(E,e.doc,A.paths.length,!0),g=A.opacity.toFixed(4),L=[],R=!!d.debugShadowAttrs;for(let H=0;H<A.paths.length;H++){let Q=A.paths[H],T=R?Do(Q.casterId):"";R&&L.push(T);let G=p[H];if(G.setAttribute("d",Q.d),G.getAttribute("fill")!==A.fill&&G.setAttribute("fill",A.fill),G.getAttribute("stroke")!==A.fill&&G.setAttribute("stroke",A.fill),G.getAttribute("opacity")!==g&&G.setAttribute("opacity",g),R){G.getAttribute("data-poly-shadow-caster")!==T&&G.setAttribute("data-poly-shadow-caster",T);let q=JSON.stringify(Q.casterPolygonIndices);G.getAttribute("data-poly-shadow-caster-polys")!==q&&G.setAttribute("data-poly-shadow-caster-polys",q)}}if(R){let H=L.join(" ");E.getAttribute("data-poly-shadow-casters")!==H&&E.setAttribute("data-poly-shadow-casters",H)}}for(let[A,h]of B)z.has(A)||h.svg&&h.visible&&(h.svg.style.display="none",h.visible=!1)}var Qs=Symbol.for("polycss.animation.triangleFrameTarget");var lc=750;var Rn=Promise.resolve();function ei(e){return!Object.prototype.hasOwnProperty.call(e,"seamBleed")||e.seamBleed!==void 0?e:{...e,seamBleed:ni}}var cc={key:"non-cullable",normal:[1,1,0]};function ti(){return[cc]}function zo(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&&Ro(e.ownerDocument),e.ownerDocument?.defaultView&&e.ownerDocument.defaultView.getComputedStyle(e).position==="static"&&(e.style.position="relative");let{camera:o,...s}=n,r=ei({seamBleed:ni,...s}),i=Ss(e),c=[0,0,0],l=e.ownerDocument??document,u=l.createElement("div");u.className="polycss-camera",Z(u,r),e.appendChild(u);let d=l.createElement("div");d.className="polycss-scene",d.setAttribute("aria-hidden","true"),J(d,r),u.appendChild(d);let P=zs({host:e,doc:l,cameraEl:u,sceneEl:d,camera:t,layoutScale:i,options:r}),f=P.meshes,b=new WeakMap,x=P.shadowSvgState,v=()=>Hs(x),y=()=>js(P),C=null;function O(a){if(!a)return null;let m=Math.hypot(a[0],a[1],a[2]);if(!Number.isFinite(m)||m<=0)return null;let S=Math.round(a[0]/m*100)/100,w=Math.round(a[1]/m*100)/100,U=Math.round(a[2]/m*100)/100;return`${S}|${w}|${U}`}function k(){C=null}let j=a=>Vs(P,a),D=a=>Ns(P,a);function Z(a,m){let S=nc(t);a.style.perspective=S.appliedPerspectiveStyle,a.dataset.polycssCameraProjection=S.projection,a.dataset.polycssCameraPerspective=S.perspectiveStyle,a.dataset.polycssCameraAppliedPerspective=S.appliedPerspectiveStyle,a.dataset.polycssCameraZoom=String(S.state.zoom),a.dataset.polycssCameraDistance=String(S.state.distance),a.dataset.polycssCameraRotX=String(S.state.rotX),a.dataset.polycssCameraRotY=String(S.state.rotY),a.dataset.polycssCameraTarget=S.state.target.join(",")}function J(a,m){Cs(a,i),a.style.transform=ko(t,c,i),ks(a,m)}function _(a){a.style.transform=ko(t,c,i)}function V(a){a.textureReadyPromise=Rn,a.voxelRenderer?.dispose(),a.voxelRenderer=void 0,h(a.rendered,a.disposeAtlas),a.disposeAtlas=void 0,a.rendered.length=0,a.renderedByPolygonIndex=[],a.cameraCullGroups=[],a.cameraCullSignature="",a.solidLightingPreviewPrepared=!1,a.solidLightingPreviewActive=!1,A(a);for(let m of Array.from(a.wrapper.children))m instanceof HTMLElement&&m.classList.contains("polycss-bucket")&&m.remove();a.hasBuckets=!1}function B(a){for(let m of Array.from(a.wrapper.childNodes)){if(!(m instanceof HTMLElement))return m;if(m.classList.contains("polycss-bucket")||m.classList.contains("polycss-shadow"))continue;let S=m.tagName.toLowerCase();if(!(S==="b"||S==="i"||S==="s"||S==="u"||S==="q"))return m}return null}function z(a,m,S){S?.parentNode===a.wrapper?a.wrapper.insertBefore(m,S):a.wrapper.appendChild(m)}function A(a){for(let m of a.shadowRendered)m.parentNode&&m.parentNode.removeChild(m);a.shadowRendered.length=0,y()}function h(a,m){m?.();for(let S of a){try{S.dispose()}catch{}S.element.parentNode&&S.element.parentNode.removeChild(S.element)}}function E(a,m,S,w){a.rendered=m,a.renderedByPolygonIndex=[];for(let U of m)a.renderedByPolygonIndex[U.polygonIndex]=U;a.disposeAtlas=S,a.textureReadyPromise=w?w.catch(()=>{}):Rn,a.solidLightingPreviewPrepared=!1}function p(a,m){let S=a.renderedByPolygonIndex[m];return S?.polygonIndex===m?S:void 0}function g(a){for(let m of Array.from(a.wrapper.children))m instanceof HTMLElement&&m.classList.contains("polycss-bucket")&&m.remove();a.hasBuckets=!1;for(let m of a.rendered)m.element.parentNode&&m.element.parentNode.removeChild(m.element)}function L(a,m){let S=a.polygons[m.polygonIndex];return a.stableDom&&S?Js(S):m.plan?.normal??(S?Js(S):null)}function R(a){if(!q(a))return a.rendered;let m=H(a);return a.rendered.filter(S=>Q(a,S,Ho,m))}function H(a){return{rotX:t.state.rotX,rotY:t.state.rotY,meshRotation:a.handle.transform.rotation}}function Q(a,m,S=Ho,w=H(a)){let U=L(a,m);return U===null||sc(U,w,S)}function T(a){if(a.excludeFromAutoCenter){a.cameraCullGroups=[];return}let m=new Map;for(let S of a.rendered){let w=L(a,S);if(!w)continue;if(!oc(w)){a.cameraCullGroups=ti();return}let U=Kl(w);if(!m.has(U)&&(m.set(U,w),m.size>Ql)){a.cameraCullGroups=ti();return}}a.cameraCullGroups=Array.from(m,([S,w])=>({key:S,normal:w}))}function G(a){return q(a)?Jl(a.cameraCullGroups,H(a)):"all"}function q(a){return!a.excludeFromAutoCenter&&rc(a.cameraCullGroups)}function re(a){a.cameraCullSignature=q(a)?G(a):"all"}function fe(a,m){let S=new Array(a.rendered.length),w=!1,U=H(a);for(let K=0;K<a.rendered.length;K+=1){let oe=a.rendered[K],ee=Q(a,oe,m,U);S[K]=ee}let N=null,I=null,W=()=>{if(!(!N||!I)){if(N===I)N.remove();else{let K=l.createRange();K.setStartBefore(N),K.setEndAfter(I),K.deleteContents(),K.detach()}N=null,I=null,w=!0}};for(let K=0;K<a.rendered.length;K+=1){let oe=a.rendered[K];!S[K]&&oe.element.parentNode===a.wrapper?(I&&I.nextSibling===oe.element||(W(),N=oe.element),I=oe.element):W()}W();let Y=K=>{for(let oe=K;oe<a.rendered.length;oe+=1){let ee=a.rendered[oe].element;if(ee.parentNode===a.wrapper)return ee}return B(a)},ae=-1,ne=K=>{if(ae<0)return;let oe=l.createDocumentFragment();for(let ee=ae;ee<K;ee+=1){let Le=a.rendered[ee];be(a,Le),oe.appendChild(Le.element)}z(a,oe,Y(K)),ae=-1,w=!0};for(let K=0;K<a.rendered.length;K+=1){let oe=a.rendered[K];S[K]&&oe.element.parentNode!==a.wrapper?ae<0&&(ae=K):ne(K)}return ne(a.rendered.length),w}function de(a,m=!1){if(a.voxelRenderer){m?a.voxelRenderer.render(H(a)):a.voxelRenderer.syncCamera(H(a)),a.cameraCullSignature="voxel-direct";return}if(!q(a)){let U=a.cameraCullSignature!=="all";a.cameraCullSignature="all",U&&xe(a);return}if(a.hasBuckets){pe(a,m);return}let S=G(a);if(!m&&S===a.cameraCullSignature)return;let w=fe(a,Ho);a.cameraCullSignature=S,w&&Ue(a)}function pe(a,m=!1){let S=q(a)?G(a):"all";!m&&S===a.cameraCullSignature||xe(a)}function Ce(a,m){return L(a,m)}function be(a,m){if(r.textureLighting!=="dynamic")return;let S=Ce(a,m);S&&(m.element.style.setProperty("--pnx",S[0].toFixed(4)),m.element.style.setProperty("--pny",S[1].toFixed(4)),m.element.style.setProperty("--pnz",S[2].toFixed(4)))}function Ae(a){g(a),a.hasBuckets=!1;let m=a.skipBucketNormalCleanupOnce;a.skipBucketNormalCleanupOnce=!1;let S=l.createDocumentFragment(),w=r.textureLighting==="dynamic"&&!a.stableDom,U=new Map,N=[];for(let I of R(a)){let W=a.polygons[I.polygonIndex],Y=w&&W?Ts(W):null;if(!Y){N.push(I);continue}let ae=Y.key+"|"+(W.color??""),ne=U.get(ae);ne||(ne={vec:Y.vec,items:[]},U.set(ae,ne)),ne.items.push(I)}for(let I of N)be(a,I),S.appendChild(I.element);for(let I of U.values()){if(I.items.length<2){for(let Y of I.items)be(a,Y),S.appendChild(Y.element);continue}let W=l.createElement("div");W.className="polycss-bucket",a.hasBuckets=!0,W.style.setProperty("--pnx",String(I.vec[0])),W.style.setProperty("--pny",String(I.vec[1])),W.style.setProperty("--pnz",String(I.vec[2]));for(let Y of I.items)W.appendChild(Y.element),(!m||Y.kind==="triangle")&&(Y.element.style.removeProperty("--pnx"),Y.element.style.removeProperty("--pny"),Y.element.style.removeProperty("--pnz"));S.appendChild(W)}z(a,S,B(a)),re(a)}function $e(){return new Promise(a=>setTimeout(a,0))}async function qe(a,m){if(r.textureLighting==="dynamic"&&!a.stableDom)return Ae(a),!m();g(a);let w=l.createDocumentFragment(),U=B(a),N=0;for(let I of R(a)){if(m())return!1;be(a,I),w.appendChild(I.element),N++,N%lc===0&&(z(a,w,U),w=l.createDocumentFragment(),await $e())}return w.childNodes.length>0&&z(a,w,U),re(a),!m()}function at(a,m){let S=r.textureLighting==="dynamic",w=r.directionalLight?.direction,U=m&&(m[0]!==0||m[1]!==0||m[2]!==0);if(!S||!U||!w){if(a.lightOverrideSignature==="clear")return;a.wrapper.style.removeProperty("--plx"),a.wrapper.style.removeProperty("--ply"),a.wrapper.style.removeProperty("--plz"),a.lightOverrideSignature="clear";return}let N=Fo(w,m),I=sn(N),W=Math.hypot(I[0],I[1],I[2])||1,Y=(I[0]/W).toFixed(2),ae=(I[1]/W).toFixed(2),ne=(I[2]/W).toFixed(2),K=`${Y}|${ae}|${ne}`;a.lightOverrideSignature!==K&&(a.wrapper.style.setProperty("--plx",Y),a.wrapper.style.setProperty("--ply",ae),a.wrapper.style.setProperty("--plz",ne),a.lightOverrideSignature=K)}function vt(a){let m=!1;for(let S of a.rendered){if(!S.plan||S.kind==="atlas"||S.plan.texture)continue;let w=a.polygons[S.polygonIndex];w&&(m=Oo(S,w,r)||m)}return a.solidLightingPreviewPrepared=!1,a.solidLightingPreviewActive=!1,m}function lt(a){if((r.textureLighting??"baked")!=="baked")return!1;let m=!1;for(let S of a.rendered){if(!S.plan||S.kind==="atlas"||S.plan.texture)continue;let w=a.polygons[S.polygonIndex];w&&(Os(S,w,S.plan.shadedColor),m=!0)}return a.solidLightingPreviewPrepared=m,m}function Un(a){return(r.textureLighting??"baked")!=="baked"||!a.solidLightingPreviewPrepared&&!lt(a)?!1:(a.solidLightingPreviewActive=!0,!0)}function Wn(a){return a.kind==="atlas"||!!a.plan?.texture}function Gn(){if((r.textureLighting??"baked")!=="baked")return!1;let a=!1;for(let m of f)a=vt(m)||a,m.rendered.some(Wn)&&(Ut(m),a=!0);d.style.removeProperty(Ht);for(let m of f)gt(m.wrapper),m.solidLightingPreviewActive=!1;return gt(d),a}function Yn(){d.style.removeProperty(Ht);for(let a of f)a.solidLightingPreviewActive&&(vt(a),gt(a.wrapper));(r.textureLighting??"baked")!=="dynamic"&&(gt(d),k(),Te())}function $(a,m){let S=a.handle.transform.rotation,w=m.directionalLight?.direction??r.directionalLight?.direction;if(!(S&&(S[0]!==0||S[1]!==0||S[2]!==0))||!w){gt(a.wrapper);return}let N=Fo(w,S);wn(a.wrapper,{...r,...m,directionalLight:{...r.directionalLight,...m.directionalLight,direction:N}})}function se(a){if((r.textureLighting??"baked")!=="baked")return!1;wn(d,{...r,...a}),!a.skipShadows&&a.directionalLight?.direction&&Te(a.directionalLight.direction);let m=!1;for(let S of f)$(S,a),m=Un(S)||m;return m?ue(d,Ht,"1"):d.style.removeProperty(Ht),m}function ie(a,m,S){let w=a.polygons[m];if(!w)return!1;let U=p(a,m);if(!U)return!1;let N=r.textureLighting??"baked";return N==="dynamic"?(_s(U.element,S),!0):N==="baked"?Oo(U,w,r):!1}function we(a,m){let S=a.polygons[m];if(!S)return!1;let w=p(a,m);return w?(ye(w.element,S,m),!0):!1}function $t(a,m,S){return!(S.length===0||!S.every(w=>w==="color"||w==="data")||S.includes("color")&&!ie(a,m,a.polygons[m]?.color)||S.includes("data")&&!we(a,m))}function Ue(a){k(),Te()}function Te(a){let m=[];for(let ee of f)!ee.disposed&&ee.castShadow&&m.push(ee);if(m.length===0){y(),C=null;return}let S=r.shadow?.color??"#000000",w=r.shadow?.opacity??.25,U=ac(S)?.rgb??[0,0,0],N=U[0],I=U[1],W=U[2],Y=a??r.directionalLight?.direction??[.4,-.7,.59],ae=sn(Y),ne=O(ae);if(ne!==null&&ne===C)return;let K=new Map;for(let ee of m)K.set(ee,Ks(ee.polygons,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}));let oe=new Map;for(let ee of f)ee.disposed||!ee.receiveShadow||oe.set(ee,new Set);v();for(let ee of f)ee.disposed||!ee.receiveShadow||Zs(P,m,K,ee,oe.get(ee)??new Set,ae,N,I,W,w);C=ne}function xe(a){if(a.voxelRenderer){a.voxelRenderer.render(H(a)),a.cameraCullSignature="voxel-direct";return}A(a),Ae(a),Ue(a)}function Ie(a,m){if(!m||!a.polygons||a.polygons.length<2)return;let S=Math.hypot(m[0],m[1],m[2]);if(!Number.isFinite(S)||S<=0)return;let w=m[0]/S,U=m[1]/S,N=m[2]/S,I=K=>Math.round(K*1e3)/1e3,W=`${I(w)},${I(U)},${I(N)}`,Y=a.lightOcclusionCache;if(Y&&Y.polygons===a.polygons&&Y.lightDirKey===W)return Y.occluded;let ae=Y&&Y.polygons===a.polygons?Y.dedupDropped:Ks(a.polygons,{normalTolerance:.1,distanceTolerance:.12,overlapFraction:.98,preserveDoubleSidedBackfaces:!1}),ne=tc(a.polygons,[w,U,N],ae);return a.lightOcclusionCache={polygons:a.polygons,lightDirKey:W,occluded:ne,dedupDropped:ae},ne}function He(a){return!!a.voxelSource&&r.textureLighting!=="dynamic"&&!a.stableDom&&!a.castShadow}function Se(a,m){V(a);let S=r.directionalLight,w=m?{...S,direction:m}:S,U=it(w),N=void 0;if(He(a)){let Y=Ps({doc:l,wrapper:a.wrapper,polygons:a.parseResult.polygons,directionalLight:U,ambientLight:r.ambientLight});if(Y){a.voxelRenderer=Y,Y.render(H(a)),a.cameraCullSignature="voxel-direct",a.textureReadyPromise=Rn;return}}let I={doc:l,directionalLight:U,ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,strategies:r.strategies,lightOccludedPolyIndices:N},W=a.stableDom?(()=>{let Y=mt(a.polygons,I);return ht(a.wrapper,Y),It(a.polygons,{...I,solidPaintDefaults:Y})??ft(a.polygons,{...I,solidPaintDefaults:Y})})():ft(a.polygons,{...I,computeSolidPaintDefaults:!0,skipDynamicNormalVars:r.textureLighting==="dynamic"});a.stableDom||ht(a.wrapper,W.solidPaintDefaults??{}),E(a,W.rendered,W.dispose,W.pagesReady),a.skipBucketNormalCleanupOnce=r.textureLighting==="dynamic"&&!a.stableDom,T(a),Ae(a),Ue(a)}function Ut(a,m){if(a.rendered.length===0||a.voxelRenderer||a.stableDom||He(a)){Se(a,m);return}if(a.rendered[0]?.element.parentNode===null){Se(a,m);return}let S=r.directionalLight,w=m?{...S,direction:m}:S,U=it(w),N={doc:l,directionalLight:U,ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,strategies:r.strategies,computeSolidPaintDefaults:!0,skipDynamicNormalVars:r.textureLighting==="dynamic"},I=ft(a.polygons,N),W=()=>{a.rebakeInFlight=!1;let ne=a.rebakeQueuedLightDir;ne!==null&&(a.rebakeQueuedLightDir=null,Ut(a,ne))},Y=()=>{if(a.disposed){I.dispose(),W();return}if(I.rendered.length!==a.rendered.length){I.dispose(),Se(a,m),W();return}for(let oe of I.rendered){let ee=a.renderedByPolygonIndex[oe.polygonIndex];if(!ee)continue;let Le=oe.element.getAttribute("style");Le!==null&&ee.element.setAttribute("style",Le)}let ne=I.solidPaintDefaults;ne&&ht(a.wrapper,ne);let K=a.disposeAtlas;a.disposeAtlas=I.dispose,K&&(typeof requestAnimationFrame=="function"?ee=>{requestAnimationFrame(ee)}:ee=>{setTimeout(ee,0)})(K),Ue(a),W()},ae=I.pagesReady;ae&&typeof ae.then=="function"?(a.textureReadyPromise=ae.catch(()=>{}),ae.then(()=>qn(I.rendered)).then(Zn).then(Y,()=>{I.dispose(),a.disposed||Se(a,m),W()})):Y()}function Xn(a,m){if(a.rebakeInFlight){a.rebakeQueuedLightDir=m;return}a.rebakeInFlight=!0,Ut(a,m)}function qn(a){let m=new Set;for(let S of a){let w=S.element.getAttribute("style")??"",U=/url\((blob:[^)]+)\)/g,N;for(;(N=U.exec(w))!==null;)m.add(N[1])}return Array.from(m)}function Zn(a){return a.length===0||typeof Image>"u"?Promise.resolve():Promise.all(a.map(m=>{let S=new Image;S.src=m;let w=S.decode?.();return w?w.catch(()=>{}):Promise.resolve()})).then(()=>{})}function Ze(){let a=1/0,m=!1;for(let N of f)if(!N.disposed&&N.receiveShadow){m=!0;break}for(let N of f){if(N.disposed||!(m?N.receiveShadow:N.castShadow))continue;let W=N.handle.transform.position?.[2]??0;for(let Y of N.polygons)for(let ae of Y.vertices){let ne=ae[2]+W;ne<a&&(a=ne)}}if(!Number.isFinite(a)){let N=x.currentGroundCssZ!==null;x.currentGroundCssZ=null,N&&(y(),k());return}let S=r.shadow?.lift??.05,w=(a+S)*rn,U=x.currentGroundCssZ;x.currentGroundCssZ=w,U!==w&&(k(),Te())}async function gn(a,m){V(a);let S=it(r.directionalLight),w={doc:l,directionalLight:S,ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,strategies:r.strategies,lightOccludedPolyIndices:void 0},U=a.stableDom?It(a.polygons,w):null;if(U){let W=mt(a.polygons,w);return ht(a.wrapper,W),E(a,U.rendered,U.dispose,U.pagesReady),T(a),Ae(a),Ue(a),!m()}let N=await tn(a.polygons,{...w,skipDynamicNormalVars:r.textureLighting==="dynamic"},m);if(m())return N.dispose(),!1;ht(a.wrapper,N.solidPaintDefaults),E(a,N.rendered,N.dispose,N.pagesReady),a.skipBucketNormalCleanupOnce=r.textureLighting==="dynamic"&&!a.stableDom,T(a);let I=await qe(a,m);return I&&Ue(a),I}function ct(){let a=c,m=[0,0,0];if(r.autoCenter){let S=[];for(let w of f)!w.disposed&&!w.excludeFromAutoCenter&&S.push(...w.polygons);if(S.length>0){let w=ec(S);m=[(w.min[0]+w.max[0])/2,(w.min[1]+w.max[1])/2,(w.min[2]+w.max[2])/2]}}a[0]===m[0]&&a[1]===m[1]&&a[2]===m[2]||(c=m,P.autoCenter.offset=m,J(d,r))}function ki(a,m={}){let w=(d.ownerDocument??document).createElement("div");w.className="polycss-mesh",m.id&&w.setAttribute("data-poly-mesh-id",m.id);let U=`polycss-mesh-${P.meshAutoCounter.next++}`;w.setAttribute("data-poly-mesh-index",U);let N={...m},I=m.merge!==!1,W=!!m.stableDom,Y=0,ae=An(N);ae&&(w.style.transform=ae);let ne=(F,X)=>a.voxelSource?F:X?ic(F,{meshResolution:m.meshResolution}):(W||m.excludeFromAutoCenter,F),K=ne(a.polygons,I),oe=null;function ee(){let F=An(N);w.style.transform=F??""}function Le(F){if(F.length===0){oe=null,Qe&&(Qe.bboxCenterCss=null),ee();return}let X=1/0,le=1/0,me=1/0,Re=-1/0,ce=-1/0,he=-1/0;for(let Ge of F)for(let ze of Ge.vertices)ze[0]<X&&(X=ze[0]),ze[0]>Re&&(Re=ze[0]),ze[1]<le&&(le=ze[1]),ze[1]>ce&&(ce=ze[1]),ze[2]<me&&(me=ze[2]),ze[2]>he&&(he=ze[2]);if(!Number.isFinite(X)){oe=null,Qe&&(Qe.bboxCenterCss=null),ee();return}let Fe=(le+ce)/2*rn,We=(X+Re)/2*rn,ke=(me+he)/2*rn;oe=[Fe,We,ke],Qe&&(Qe.bboxCenterCss=oe),ee()}let Qe=null;Le(K),d.appendChild(w);let M={handle:void 0,wrapper:w,parseResult:a,rendered:[],renderedByPolygonIndex:[],shadowRendered:[],polygons:K,voxelSource:a.voxelSource,disposed:!1,stableDom:W,hasBuckets:!1,skipBucketNormalCleanupOnce:!1,excludeFromAutoCenter:!!m.excludeFromAutoCenter,castShadow:!!m.castShadow,bboxCenterCss:oe,receiveShadow:!!m.receiveShadow,cameraCullGroups:[],cameraCullSignature:"",lightOverrideSignature:"clear",stableTriangleColorFrame:0,solidLightingPreviewPrepared:!1,solidLightingPreviewActive:!1,bakedRotation:m.rotation?[...m.rotation]:[0,0,0],autoMeshId:U,rebakeInFlight:!1,rebakeQueuedLightDir:null,textureReadyPromise:Rn},ut=null,St=0,Ct=-1,dt=null;function pt(){ut=null,dt=null,Ct=-1}function hn(){let F=ut;if(!F||F.polygonCount!==M.polygons.length)return M.polygons;if(dt&&Ct===St)return dt;let X=F.vertices,le=new Array(F.polygonCount);for(let me=0;me<F.polygonCount;me++){let Re=M.polygons[me],ce=me*9;le[me]={...Re,color:F.colors?.[me]??Re.color,vertices:[[X[ce],X[ce+1],X[ce+2]],[X[ce+3],X[ce+4],X[ce+5]],[X[ce+6],X[ce+7],X[ce+8]]]}}return dt=le,Ct=St,le}function Tt(F,X){let le=F?.stableTriangleUpdateMode==="color-only";M.stableTriangleColorFrame++;let me=M.stableDom&&!X;if(me||Le(M.polygons),M.stableDom&&!M.hasBuckets){let Re={doc:l,directionalLight:it(r.directionalLight),ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed},ce=M.rendered.length===M.polygons.length&&M.rendered.every(ke=>ke.kind==="triangle"),he=M.stableDom&&!X,Fe=ce||he?{}:mt(M.polygons,Re);ce||ht(M.wrapper,Fe);let We={...Re,solidPaintDefaults:Fe,optimizeStableTriangleStyle:!0,stableTriangleDebug:F?.stableTriangleDebug,stableTriangleUpdateMode:F?.stableTriangleUpdateMode,stableTriangleColorPolicy:F?.stableTriangleColorPolicy,stableTriangleColorSteps:F?.stableTriangleColorSteps,stableTriangleColorFreezeFrames:F?.stableTriangleColorFreezeFrames,stableTriangleColorBudget:F?.stableTriangleColorBudget,stableTriangleColorMaxAge:F?.stableTriangleColorMaxAge,stableTriangleColorMaxStep:F?.stableTriangleColorMaxStep,stableTriangleMatrixDecimals:F?.stableTriangleMatrixDecimals,stableTriangleColorFrame:M.stableTriangleColorFrame};if(on(M.rendered,M.polygons,We))return le||(T(M),de(M,!0),X&&ct()),!0}return me&&Le(M.polygons),!1}let nt={get polygons(){return hn()},set polygons(F){pt(),M.polygons=F},element:w,id:m.id,get transform(){return N},remove(){Y++,w.parentNode&&w.parentNode.removeChild(w),V(M),f.delete(M),b.delete(w),j(M),D(M),ct(),Ze()},setPolygons(F,X){Y++,I=X?.merge??I,W=X?.stableDom??W,M.stableDom=W,M.voxelSource=void 0,M.polygons=ne(F,I),D(M),j(M),pt(),nt.polygons=M.polygons;let le=X?.recomputeAutoCenter??!0;Tt(X,le)||(Se(M),le&&ct())},[Qs](F,X){let le=X?.merge??I,me=X?.stableDom??W;if(!F.solidTriangles||!me||le||m.meshResolution!==void 0||M.hasBuckets||F.polygonCount!==M.polygons.length||F.vertices.length<F.polygonCount*9||M.rendered.length!==F.polygonCount)return!1;for(let he=0;he<M.rendered.length;he++){let Fe=M.rendered[he],We=M.polygons[he];if(Fe?.kind!=="triangle"||Fe.polygonIndex!==he||!We||We.vertices.length!==3||We.texture||We.material?.texture)return!1}let Re=X?.recomputeAutoCenter??!0;if(!Re){let he=M.stableTriangleColorFrame+1,Fe={doc:l,directionalLight:it(r.directionalLight),ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,solidPaintDefaults:{},optimizeStableTriangleStyle:!0,stableTriangleDebug:X?.stableTriangleDebug,stableTriangleUpdateMode:X?.stableTriangleUpdateMode,stableTriangleColorPolicy:X?.stableTriangleColorPolicy,stableTriangleColorSteps:X?.stableTriangleColorSteps,stableTriangleColorFreezeFrames:X?.stableTriangleColorFreezeFrames??0,stableTriangleColorBudget:X?.stableTriangleColorBudget,stableTriangleColorMaxAge:X?.stableTriangleColorMaxAge,stableTriangleColorMaxStep:X?.stableTriangleColorMaxStep,stableTriangleMatrixDecimals:X?.stableTriangleMatrixDecimals,stableTriangleColorFrame:he};if(nn(M.rendered,M.polygons,F,Fe))return Y++,I=le,W=me,M.stableDom=W,M.voxelSource=void 0,M.stableTriangleColorFrame=he,ut=F,St++,dt=null,Ct=-1,q(M)?(T(M),de(M,!0)):re(M),!0}Y++,I=le,W=me,M.stableDom=W,M.voxelSource=void 0;let ce=F.vertices;for(let he=0;he<F.polygonCount;he++){let Fe=M.polygons[he],We=F.colors?.[he];We&&(Fe.color=We);let ke=Fe.vertices,Ge=he*9;ke[0][0]=ce[Ge],ke[0][1]=ce[Ge+1],ke[0][2]=ce[Ge+2],ke[1][0]=ce[Ge+3],ke[1][1]=ce[Ge+4],ke[1][2]=ce[Ge+5],ke[2][0]=ce[Ge+6],ke[2][1]=ce[Ge+7],ke[2][2]=ce[Ge+8]}return pt(),nt.polygons=M.polygons,Tt(X,Re)},updatePolygon(F,X){let le=typeof F=="number"?F:M.polygons.indexOf(F);if(le<0&&typeof F!="number"&&ut&&(le=hn().indexOf(F)),le<0||le>=M.polygons.length)return;pt(),M.voxelSource=void 0,Object.assign(M.polygons[le],X);let me=Object.keys(X);$t(M,le,me)||Se(M)},async setPolygonsChunked(F,X){let le=++Y;I=X?.merge??I,W=X?.stableDom??W,M.stableDom=W,M.voxelSource=void 0,M.polygons=ne(F,I),pt(),nt.polygons=M.polygons,Le(M.polygons);let me=X?.recomputeAutoCenter??!0;if(!await gn(M,()=>M.disposed||le!==Y)){V(M);return}me&&ct()},setTransform(F){let X=M.castShadow,le=M.receiveShadow;F.castShadow!==void 0&&(M.castShadow=!!F.castShadow),F.receiveShadow!==void 0&&(M.receiveShadow=!!F.receiveShadow),N={...N,...F};let me=An(N);w.style.transform=me??"",at(M,N.rotation),F.rotation!==void 0&&de(M,!0),M.castShadow!==X&&(M.voxelSource&&Se(M),Ue(M),Ze()),M.receiveShadow!==le&&(M.receiveShadow||Io(M),k(),Te()),(F.position!==void 0||F.scale!==void 0)&&(M.castShadow||M.receiveShadow)&&(Ze(),k(),Te())},dispose(){if(!M.disposed){M.disposed=!0,Y++,w.parentNode&&w.parentNode.removeChild(w),V(M);try{a.dispose()}catch{}f.delete(M),b.delete(w),ct(),Ze()}},rebakeAtlas(){M.bakedRotation=N.rotation?[...N.rotation]:[0,0,0];let F=r.directionalLight?.direction??[.4,-.7,.59],X=Fo(F,M.bakedRotation);Xn(M,X)},whenTexturesReady(){return M.textureReadyPromise},getPosition(){return N.position},getRotation(){return N.rotation},getScale(){return N.scale},getPolygons(){return nt.polygons}};return M.handle=nt,Qe=M,b.set(w,M),f.add(M),Se(M),at(M,N.rotation),ct(),Ze(),M.receiveShadow&&(k(),Te()),nt}function _i(a){let m=!!r.autoCenter,S=r.strategies,w=r.seamBleed,U=r.textureLeafSizing,N=r.textureImageRendering,I=r.textureBackend,W=r.textureProjection,Y=r.textureLighting,ae=r.directionalLight?.direction,ne=r.shadow,K=ei(a);r={...r,...K},P.options.current=r,J(d,r);let oe=!!r.autoCenter;for(let F of f)at(F,F.handle.transform.rotation);let ee=a.strategies!==void 0&&!Es(a.strategies,S),Le=Object.prototype.hasOwnProperty.call(a,"seamBleed")&&K.seamBleed!==w,Qe=Object.prototype.hasOwnProperty.call(a,"textureLeafSizing")&&K.textureLeafSizing!==U,M=Object.prototype.hasOwnProperty.call(a,"textureImageRendering")&&K.textureImageRendering!==N,ut=Object.prototype.hasOwnProperty.call(a,"textureBackend")&&K.textureBackend!==I,St=Object.prototype.hasOwnProperty.call(a,"textureProjection")&&K.textureProjection!==W;if(ee||Le||Qe||M||ut||St)for(let F of f)Se(F);m!==oe&&ct();let Ct=a.textureLighting!==void 0&&Y!==r.textureLighting,dt=r.directionalLight?.direction,pt=a.directionalLight!==void 0&&!As(ae,dt),hn=r.shadow,Tt=a.shadow!==void 0&&!ws(ne,hn),nt=pt||Tt;if(Ct){if(!ee&&!Le&&!Qe&&!M&&!ut&&!St)for(let F of f)Se(F);Ze(),k(),Te()}else nt&&(Tt&&k(),Te());Tt&&a.shadow?.lift!==ne?.lift&&Ze()}function Oi(){return r}function Di(){Z(u,r),_(d);for(let a of f)de(a)}function Ii(){let a=[];for(let m of f)a.push(m.handle);return a}function Hi(){return Promise.all(Array.from(f,a=>a.handle.whenTexturesReady())).then(()=>{})}function Fi(a){let m=a;for(;m;){if(m instanceof HTMLElement){let S=b.get(m);if(S&&!S.disposed)return S.handle;if(m.classList.contains("polycss-mesh"))return null}m=m.parentElement}return null}function zi(){let a=Array.from(f);for(let m of a)try{m.handle.dispose()}catch{}u.parentNode&&u.parentNode.removeChild(u)}return{add:ki,setOptions:_i,destroy:zi,host:e,camera:t,cameraEl:u,sceneElement:d,applyCamera:Di,getOptions:Oi,meshes:Ii,whenTexturesReady:Hi,findMeshByElement:Fi,previewBakedSolidLighting:se,commitBakedSolidLighting:Gn,clearBakedSolidLightingPreview:Yn}}import{buildPolyMeshTransform as vg,buildPolySceneTransform as Sg,cssDistanceToWorld as Cg,cssDistanceToWorld as Tg,cssPositionToWorld as Eg,cssPositionToWorld as Ag,worldDistanceToCss as wg,worldDistanceToCss as Mg,worldDirectionalLightToCss as Lg,worldDirectionToPolyCss as Rg,worldPositionToPolyCss as kg}from"@layoutit/polycss-core";import{createIsometricCamera as oi}from"@layoutit/polycss-core";var uc=32e3;function an(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=oi(n),o=`${e.perspective??uc}px`;return{get state(){return t.state},update(s){t.update(s)},getStyle(s){return t.getStyle(s)},type:"perspective",perspectiveStyle:o}}function yt(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=oi(n);return{get state(){return t.state},update(o){t.update(o)},getStyle(o){return t.getStyle(o)},type:"orthographic",perspectiveStyle:"none"}}var dc=yt;import{BASE_TILE as pc}from"@layoutit/polycss-core";var kn={drag:!0,wheel:!0,dolly:!1,invert:!1,minZoom:.1,maxZoom:10,minDistance:0,maxDistance:1/0,animate:!1};function Ft(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 ln(e){return e===!0?-1:e===!1?1:e}function zt(){let e=[],n=[],t=[];function o(i){return i==="change"?e:i==="start"?n:t}function s(i){if(e.length===0)return;let c={type:"change",camera:i()},l=e.slice();for(let u of l)try{u(c)}catch(d){console.error("[polycss] controls 'change' listener threw:",d)}}function r(i,c){let l=i==="start"?n:t;if(l.length===0)return;let u={type:i,camera:c()},d=l.slice();for(let P of d)try{P(u)}catch(f){console.error(`[polycss] controls '${i}' listener threw:`,f)}}return{changeListeners:e,startListeners:n,endListeners:t,listenerArray:o,emitChange:s,emitInteraction:r}}function Bt(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 _n(e,n,t,o,s,r){let i=!1,c=null;return{onWheel:d=>{let P=n();if(!P.wheel||t())return;d.preventDefault();let f=d.deltaMode===1?16:d.deltaMode===2?100:1,b=d.deltaY*f;d.ctrlKey?b*=10:b*=3;let x=e.camera.state;if(P.dolly){let v=x.distance??0,y=Math.max(P.minDistance,Math.min(P.maxDistance,v+b*.05));e.camera.update({distance:y})}else{let v=Math.exp(-b*513e-6),y=x.zoom??1,C=Math.max(P.minZoom,Math.min(P.maxZoom,y*v));e.camera.update({zoom:C})}e.applyCamera(),i||(i=!0,r("start",o)),s(o),c!==null&&clearTimeout(c),c=setTimeout(()=>{c=null,i=!1,r("end",o)},150)},teardown:()=>{c!==null&&(clearTimeout(c),c=null),i=!1}}}function On(e,n,t,o,s,r,i){let c=null,l=0,u=b=>{if(c===null||o())return;let x=t();if(!x.animate){c=null;return}if(s())l=b;else{let v=Math.min(50,l?b-l:16.67);l=b;let y=x.animate.speed*(v/16.67),C=n.camera.state;if(x.animate.axis==="x"){let O=(((C.rotX??65)+y)%360+360)%360;n.camera.update({rotX:O})}else{let O=(((C.rotY??45)+y)%360+360)%360;n.camera.update({rotY:O})}n.applyCamera(),i(r)}c=e.requestAnimationFrame(u)};return{start:()=>{c!==null||!t().animate||o()||(l=0,c=e.requestAnimationFrame(u))},stop:()=>{c!==null&&(e.cancelAnimationFrame(c),c=null)},isRunning:()=>c!==null}}function Bo(e,n={}){let t=Ft(kn,n),o=e.host,s=o.ownerDocument?.defaultView??globalThis,r=null,i={x:0,y:0},c=!1,l=!1,u=zt(),d=Bt(e),{changeListeners:P,startListeners:f,endListeners:b,listenerArray:x,emitChange:v,emitInteraction:y}=u,C=On(s,e,()=>t,()=>l,()=>c,d,v),O=p=>{if(!(!t.drag||l)&&r===null&&p.isPrimary!==!1){p.preventDefault(),r=p.pointerId,i={x:p.clientX,y:p.clientY},o.style.cursor="grabbing";try{p.target.setPointerCapture(p.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!0),y("start",d)}},k=p=>{if(r===null||p.pointerId!==r||!t.drag||l)return;p.preventDefault();let g=p.clientX-i.x,L=p.clientY-i.y;i={x:p.clientX,y:p.clientY};let R=ln(t.invert),H=g/4*R,Q=L/4*R,T=e.camera.state;if(p.shiftKey){let G=T.rotX??65,q=T.rotY??45,re=Math.max(.01,T.zoom??1),fe=Math.cos(G*Math.PI/180),de=fe>=0?Math.max(.1,fe):Math.min(-.1,fe),pe=Math.cos(q*Math.PI/180),Ce=Math.sin(q*Math.PI/180),be=re*pc,Ae=(g*Ce-L*pe/de)/be,$e=-(g*pe+L*Ce/de)/be,qe=T.target??[0,0,0];e.camera.update({target:[qe[0]+Ae,qe[1]+$e,qe[2]]})}else{let G=Math.max(0,Math.min(89,(T.rotX??65)-Q)),q=(((T.rotY??45)-H)%360+360)%360;e.camera.update({rotX:G,rotY:q})}e.applyCamera(),v(d)},j=p=>{if(r===p.pointerId){r=null,o.style.cursor=t.drag&&!l?"grab":"";try{p.target.releasePointerCapture(p.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!1),y("end",d)}},D=_n(e,()=>t,()=>l,d,v,y);function Z(){o.addEventListener("pointerdown",O),o.addEventListener("pointermove",k),o.addEventListener("pointerup",j),o.addEventListener("pointercancel",j),o.addEventListener("wheel",D.onWheel,{passive:!1}),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function J(){o.removeEventListener("pointerdown",O),o.removeEventListener("pointermove",k),o.removeEventListener("pointerup",j),o.removeEventListener("pointercancel",j),o.removeEventListener("wheel",D.onWheel),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",D.teardown()}Z(),C.start();function _(p){let g=!!t.animate;t=Ft(t,p),!l&&r===null&&(o.style.cursor=t.drag?"grab":"");let L=!!t.animate;g&&!L?C.stop():!g&&L&&C.start()}function V(){l&&(l=!1,Z(),C.start())}function B(){l||(l=!0,J(),C.stop(),r=null,c=!1,D.teardown())}function z(){B(),P.length=0,f.length=0,b.length=0}function A(p,g){let L=x(p);L.includes(g)||L.push(g)}function h(p,g){let L=x(p),R=L.indexOf(g);R>=0&&L.splice(R,1)}function E(p,g){return x(p).includes(g)}return{update:_,resume:V,pause:B,destroy:z,addEventListener:A,removeEventListener:h,hasEventListener:E}}import{BASE_TILE as mc}from"@layoutit/polycss-core";function Vo(e,n={}){let t=Ft(kn,n),o=e.host,s=o.ownerDocument?.defaultView??globalThis,r=null,i={x:0,y:0},c=!1,l=!1,u=!1,d={x:0,y:0},P=zt(),f=Bt(e),{changeListeners:b,startListeners:x,endListeners:v,listenerArray:y,emitChange:C,emitInteraction:O}=P,k=On(s,e,()=>t,()=>l,()=>c,f,C),j=T=>{if(!(!t.drag||l)&&r===null&&T.isPrimary!==!1){T.preventDefault(),r=T.pointerId,i={x:T.clientX,y:T.clientY},o.style.cursor="grabbing";try{T.target.setPointerCapture(T.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!0),O("start",f)}},D=T=>{if(r===null||T.pointerId!==r||!t.drag||l)return;T.preventDefault();let G=T.clientX-i.x,q=T.clientY-i.y;i={x:T.clientX,y:T.clientY};let re=e.camera.state;if(T.shiftKey){let fe=ln(t.invert),de=G/4*fe,pe=q/4*fe,Ce=(re.rotX??65)-pe,be=(((re.rotY??45)-de)%360+360)%360;e.camera.update({rotX:Ce,rotY:be})}else{let fe=re.rotX??65,de=re.rotY??45,pe=Math.max(.01,re.zoom??1),Ce=Math.cos(fe*Math.PI/180),be=Ce>=0?Math.max(.1,Ce):Math.min(-.1,Ce),Ae=Math.cos(de*Math.PI/180),$e=Math.sin(de*Math.PI/180),qe=pe*mc,at=(G*$e-q*Ae/be)/qe,vt=-(G*Ae+q*$e/be)/qe,lt=re.target??[0,0,0];e.camera.update({target:[lt[0]+at,lt[1]+vt,lt[2]]})}e.applyCamera(),C(f)},Z=T=>{if(r===T.pointerId){r=null,o.style.cursor=t.drag&&!l?"grab":"";try{T.target.releasePointerCapture(T.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!1),O("end",f)}},J=T=>{T.preventDefault()},_=T=>{T.button===2&&(u=!0,d={x:T.clientX,y:T.clientY},t.animate&&t.animate.pauseOnInteraction&&(c=!0),O("start",f))},V=T=>{if(!u||!t.drag)return;let G=T.clientX-d.x,q=T.clientY-d.y;d={x:T.clientX,y:T.clientY};let re=ln(t.invert),fe=G/4*re,de=q/4*re,pe=e.camera.state,Ce=(pe.rotX??65)-de,be=(((pe.rotY??45)-fe)%360+360)%360;e.camera.update({rotX:Ce,rotY:be}),e.applyCamera(),C(f)},B=T=>{T.button===2&&u&&(u=!1,O("end",f))},z=_n(e,()=>t,()=>l,f,C,O);function A(){o.addEventListener("pointerdown",j),o.addEventListener("pointermove",D),o.addEventListener("pointerup",Z),o.addEventListener("pointercancel",Z),o.addEventListener("wheel",z.onWheel,{passive:!1}),o.addEventListener("contextmenu",J),o.addEventListener("mousedown",_),o.addEventListener("mousemove",V),o.addEventListener("mouseup",B),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function h(){o.removeEventListener("pointerdown",j),o.removeEventListener("pointermove",D),o.removeEventListener("pointerup",Z),o.removeEventListener("pointercancel",Z),o.removeEventListener("wheel",z.onWheel),o.removeEventListener("contextmenu",J),o.removeEventListener("mousedown",_),o.removeEventListener("mousemove",V),o.removeEventListener("mouseup",B),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",z.teardown()}A(),k.start();function E(T){let G=!!t.animate;t=Ft(t,T),!l&&r===null&&(o.style.cursor=t.drag?"grab":"");let q=!!t.animate;G&&!q?k.stop():!G&&q&&k.start()}function p(){l&&(l=!1,A(),k.start())}function g(){l||(l=!0,h(),k.stop(),r=null,c=!1,u=!1,z.teardown())}function L(){g(),b.length=0,x.length=0,v.length=0}function R(T,G){let q=y(T);q.includes(G)||q.push(G)}function H(T,G){let q=y(T),re=q.indexOf(G);re>=0&&q.splice(re,1)}function Q(T,G){return y(T).includes(G)}return{update:E,resume:p,pause:g,destroy:L,addEventListener:R,removeEventListener:H,hasEventListener:Q}}import{BASE_TILE as fc}from"@layoutit/polycss-core";var gc={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 ri(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 si=new Set(["KeyW","ArrowUp"]),ii=new Set(["KeyS","ArrowDown"]),ai=new Set(["KeyA","ArrowLeft"]),li=new Set(["KeyD","ArrowRight"]),ci=new Set(["Space"]),No=new Set(["ControlLeft","ControlRight"]);function jo(e,n={}){let t=ri(gc,n),o=e.host,s=e.cameraEl,r=o.ownerDocument??document,i=r.defaultView??globalThis,c=zt(),l=Bt(e),{changeListeners:u,startListeners:d,endListeners:P,listenerArray:f,emitChange:b,emitInteraction:x}=c,v=new Set,y=!1,C=!1,O=0,k=0,j=!1,D=[0,0,t.groundZ+t.eyeHeight];function Z($,se){let ie=$*Math.PI/180,we=se*Math.PI/180;return[-Math.sin(ie)*Math.cos(we),-Math.sin(ie)*Math.sin(we),-Math.cos(ie)]}function J(){let $=e.camera.perspectiveStyle,se=$==="none"?0:parseFloat($);return(Number.isFinite(se)&&se>0?se:2e3)/fc}function _(){let $=e.camera.state,se=Z($.rotX??90,$.rotY??0),ie=J();return[D[0]+se[0]*ie,D[1]+se[1]*ie,D[2]+se[2]*ie]}function V(){let $=_();e.camera.update({target:$}),e.applyCamera()}function B(){let $=e.camera.state.target??[0,0,0];D=[$[0],$[1],t.groundZ+t.eyeHeight],V()}let z=()=>{if(!(!t.enabled||!t.lookEnabled||C||y))try{o.requestPointerLock()}catch{}},A=()=>{let $=r.pointerLockElement===o;$!==y&&(y=$,y?(j=!0,x("start",l)):j&&(j=!1,x("end",l)))},h=$=>{if(!y||!t.enabled||!t.lookEnabled||C)return;let se=$.movementX??0,ie=$.movementY??0;if(se===0&&ie===0)return;let we=e.camera.state,$t=t.lookSensitivity,Ue=t.invertY?-1:1,Te=(((we.rotY??0)-se*$t)%360+360)%360,xe=(we.rotX??90)-ie*$t*Ue;xe<t.minPitch?xe=t.minPitch:xe>t.maxPitch&&(xe=t.maxPitch);let Ie=Z(xe,Te),He=J(),Se=[D[0]+Ie[0]*He,D[1]+Ie[1]*He,D[2]+Ie[2]*He];e.camera.update({rotX:xe,rotY:Te,target:Se}),e.applyCamera(),b(l)},E=$=>si.has($)||ii.has($)||ai.has($)||li.has($)||ci.has($)||No.has($),p=$=>{if(!(!t.enabled||C)&&E($.code)&&!(!y&&!t.moveEnabled)){if(ci.has($.code)){if(!t.jumpEnabled)return;$.preventDefault(),!v.has($.code)&&O===0&&k===0&&(O=t.jumpVelocity),v.add($.code);return}No.has($.code)&&!t.crouchEnabled||!t.moveEnabled&&!No.has($.code)||($.preventDefault(),v.add($.code))}},g=$=>{E($.code)&&v.delete($.code)},L=()=>{v.clear()},R=null,H=0,Q=.05,T=$=>{if(R===null||C)return;let se=Math.min(Q,H?($-H)/1e3:.0167);if(H=$,t.enabled){let ie=!1,we=e.camera.state;if(t.moveEnabled){let xe=0,Ie=0;for(let He of v)si.has(He)?xe+=1:ii.has(He)?xe-=1:li.has(He)?Ie+=1:ai.has(He)&&(Ie-=1);if(xe!==0||Ie!==0){let Se=(we.rotY??0)*Math.PI/180,Ut=-Math.cos(Se),Xn=-Math.sin(Se),qn=-Math.sin(Se),Zn=Math.cos(Se),Ze=Math.hypot(xe,Ie)||1,gn=t.moveSpeed*se;D[0]+=(Ut*xe+qn*Ie)/Ze*gn,D[1]+=(Xn*xe+Zn*Ie)/Ze*gn,ie=!0}}let Ue=t.crouchEnabled&&(v.has("ControlLeft")||v.has("ControlRight"))?t.crouchHeight:t.eyeHeight;t.jumpEnabled&&(O!==0||k>0)?(O-=t.gravity*se,k+=O*se,k<=0&&(k=0,O=0)):t.jumpEnabled||(k=0,O=0);let Te=t.groundZ+Ue+k;if(Math.abs(D[2]-Te)>1e-4&&(D[2]=Te,ie=!0),ie){let xe=_();e.camera.update({target:xe}),e.applyCamera(),b(l)}}R=i.requestAnimationFrame(T)};function G(){R!==null||C||(H=0,R=i.requestAnimationFrame(T))}function q(){R!==null&&(i.cancelAnimationFrame(R),R=null)}function re(){let se=s.ownerDocument?.defaultView?.getComputedStyle(s).perspective??"",ie=parseFloat(se),we=Number.isFinite(ie)&&ie>0?ie:2e3;s.style.setProperty("--polycss-fpv-perspective",`${we}px`),s.classList.add("polycss-fpv-host")}function fe(){s.classList.remove("polycss-fpv-host"),s.style.removeProperty("--polycss-fpv-perspective")}function de(){o.addEventListener("click",z),r.addEventListener("pointerlockchange",A),r.addEventListener("mousemove",h),i.addEventListener("keydown",p),i.addEventListener("keyup",g),i.addEventListener("blur",L),o.style.cursor=t.lookEnabled?"crosshair":"",re()}function pe(){if(o.removeEventListener("click",z),r.removeEventListener("pointerlockchange",A),r.removeEventListener("mousemove",h),i.removeEventListener("keydown",p),i.removeEventListener("keyup",g),i.removeEventListener("blur",L),o.style.cursor="",v.clear(),y)try{r.exitPointerLock()}catch{}fe()}B(),de(),G();function Ce($){let se=t.eyeHeight,ie=t.groundZ;t=ri(t,$),C||(o.style.cursor=t.lookEnabled?"crosshair":""),(t.eyeHeight!==se||t.groundZ!==ie)&&(D[2]=t.groundZ+t.eyeHeight,V(),b(l))}function be(){C&&(C=!1,de(),G())}function Ae(){C||(C=!0,pe(),q(),j&&(j=!1,x("end",l)))}function $e(){Ae(),u.length=0,d.length=0,P.length=0}function qe(){if(!(!t.enabled||!t.lookEnabled||C))try{o.requestPointerLock()}catch{}}function at(){if(y)try{r.exitPointerLock()}catch{}}function vt(){return y}function lt($,se){let ie=f($);ie.includes(se)||ie.push(se)}function Un($,se){let ie=f($),we=ie.indexOf(se);we>=0&&ie.splice(we,1)}function Wn($,se){return f($).includes(se)}function Gn(){return[D[0],D[1],D[2]]}function Yn($){D[0]=$[0],D[1]=$[1],D[2]=$[2],V(),b(l)}return{update:Ce,resume:be,pause:Ae,destroy:$e,lock:qe,unlock:at,isLocked:vt,getOrigin:Gn,setOrigin:Yn,addEventListener:lt,removeEventListener:Un,hasEventListener:Wn}}function Vt(e,n,t){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let s of o){let r=s.getBoundingClientRect();if(!(r.width<=0||r.height<=0)&&n>=r.left&&n<=r.right&&t>=r.top&&t<=r.bottom)return!0}return!1}function ui(e,n,t,o){for(let s of e)if(!(o&&!o(s))&&Vt(s.element,n,t))return s;return null}function $o(e,n={}){let t=[],o=new Set;n.onChange&&o.add(n.onChange);function s(){t=n.filter?n.filter(t):t;for(let v of o)try{v(t)}catch(y){console.error("[polycss/createSelect] onChange threw:",y)}}function r(x){t=x,s()}function i(x){n.multiple?t.includes(x)||(t=[...t,x]):t=[x],s()}function c(x){t.includes(x)&&(t=t.filter(v=>v!==x),s())}function l(x){t.includes(x)?t=t.filter(v=>v!==x):n.multiple?t=[...t,x]:t=[x],s()}function u(){t.length!==0&&(t=[],s())}function d(x){return t.includes(x)}function P(x,v){return ui(e.meshes(),x,v,y=>!y.element.classList.contains("polycss-transform-gizmo"))}let f=x=>{let v=x.target;if(v?.closest(".polycss-transform-gizmo"))return;let y=e.findMeshByElement(v)??P(x.clientX,x.clientY);if(!y){n.onPointerMissed&&n.onPointerMissed(x),n.clearOnMiss!==!1&&u();return}n.multiple&&(x.shiftKey||x.metaKey||x.ctrlKey)?l(y):t.length===1&&t[0]===y?u():r([y])};e.host.addEventListener("click",f);function b(){e.host.removeEventListener("click",f),o.clear()}return{get selected(){return t},set:r,add:i,remove:c,toggle:l,clear:u,has:d,destroy:b}}import{arrowPolygons as hc,eulerXYZFromQuat as yc,planePolygons as bc,quatFromAxisAngle as xc,quatFromEulerXYZ as Pc,quatMultiply as vc,ringQuadPolygons as Sc,rotateVec3 as Uo}from"@layoutit/polycss-core";var Dn="#ff3653",In="#8adb00",Hn="#2c8fff",Nt=50,di=60,Cc=.6,Tc=.0125,Ec=.15,Ac=.04,wc=1,pi=.02,Wo=1.04,Mc=.1,Lc=.25,hi=1e-4,Rc=.6,kc=.8,_c=1,et={0:1,1:0,2:2},mi=[{cssAxis:0,sign:1,key:"x",color:Dn},{cssAxis:0,sign:-1,key:"-x",color:Dn},{cssAxis:1,sign:1,key:"y",color:In},{cssAxis:1,sign:-1,key:"-y",color:In},{cssAxis:2,sign:1,key:"z",color:Hn},{cssAxis:2,sign:-1,key:"-z",color:Hn}],fi=[{cssAxis:0,key:"x",color:Dn},{cssAxis:1,key:"y",color:In},{cssAxis:2,key:"z",color:Hn}],gi=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Hn},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:In},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Dn}];function Go(e,n,t,o){let s=t*Math.PI/180,r=o*Math.PI/180,i=[0,0,0];i[e]=n;let c=i[0]*Math.cos(r)-i[1]*Math.sin(r),l=i[0]*Math.sin(r)+i[1]*Math.cos(r),u=i[2];return l*Math.sin(s)+u*Math.cos(s)<0}function Oc(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),s=parseInt(t[2],16),r=parseInt(t[3],16);return`rgba(${o}, ${s}, ${r}, ${n})`}function Fn(e,n){return!n||n<=0?e:Math.round(e/n)*n}function Dc(e){if(e.length===0)return[0,0,0];let n=1/0,t=1/0,o=1/0,s=-1/0,r=-1/0,i=-1/0;for(let c of e)for(let l of c.vertices)l[0]<n&&(n=l[0]),l[0]>s&&(s=l[0]),l[1]<t&&(t=l[1]),l[1]>r&&(r=l[1]),l[2]<o&&(o=l[2]),l[2]>i&&(i=l[2]);return Number.isFinite(n)?[(n+s)/2,(t+r)/2,(o+i)/2]:[0,0,0]}function Yo(e){if(e.length===0)return di;let n=1/0,t=1/0,o=1/0,s=-1/0,r=-1/0,i=-1/0;for(let l of e)for(let u of l.vertices)u[0]<n&&(n=u[0]),u[0]>s&&(s=u[0]),u[1]<t&&(t=u[1]),u[1]>r&&(r=u[1]),u[2]<o&&(o=u[2]),u[2]>i&&(i=u[2]);return Number.isFinite(n)?Math.max(s-n,r-t,i-o)*Nt*Cc:di}function Ic(e){let{cssAxis:n,sign:t,shaftLengthCss:o,wrapper:s,target:r,startClientX:i,startClientY:c,translationSnap:l,onAxisDelta:u,onMouseDown:d,onMouseUp:P,onDraggingChanged:f}=e,b=o,x=[0,0,0];x[n]=t;let v=s.ownerDocument.createElement("div");v.style.position="absolute",v.style.left="0",v.style.top="0",v.style.width="0",v.style.height="0",v.style.transform=`translate3d(${x[0]*b}px, ${x[1]*b}px, ${x[2]*b}px)`,s.appendChild(v);let y=s.getBoundingClientRect(),C=v.getBoundingClientRect();s.removeChild(v);let O=(C.left-y.left)/b,k=(C.top-y.top)/b,j=O*O+k*k;if(j<hi)return;d?.(),f?.(!0);let D=J=>{let _=J.clientX-i,V=J.clientY-c,B=(_*O+V*k)/j;B=Fn(B,l),u(B,x)},Z=()=>{window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",Z),window.removeEventListener("pointercancel",Z);let J=_=>{_.stopPropagation(),_.stopImmediatePropagation()};window.addEventListener("click",J,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",J,!0),0),P?.(),f?.(!1)};window.addEventListener("pointermove",D),window.addEventListener("pointerup",Z),window.addEventListener("pointercancel",Z)}function Hc(e){let{axisA:n,axisB:t,probeDistanceCss:o,wrapper:s,startClientX:r,startClientY:i,translationSnap:c,onPlaneDelta:l,onMouseDown:u,onMouseUp:d,onDraggingChanged:P}=e,f=[0,0,0];f[n]=1;let b=[0,0,0];b[t]=1;function x(j){let D=s.ownerDocument.createElement("div");D.style.position="absolute",D.style.left="0",D.style.top="0",D.style.width="0",D.style.height="0",D.style.transform=`translate3d(${j[0]*o}px, ${j[1]*o}px, ${j[2]*o}px)`,s.appendChild(D);let Z=s.getBoundingClientRect(),J=D.getBoundingClientRect();return s.removeChild(D),{x:(J.left-Z.left)/o,y:(J.top-Z.top)/o}}let v=x(f),y=x(b),C=v.x*y.y-y.x*v.y;if(Math.abs(C)<hi)return;u?.(),P?.(!0);let O=j=>{let D=j.clientX-r,Z=j.clientY-i,J=(y.y*D-y.x*Z)/C,_=(-v.y*D+v.x*Z)/C;J=Fn(J,c),_=Fn(_,c),l(J,_,f,b)},k=()=>{window.removeEventListener("pointermove",O),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",k);let j=D=>{D.stopPropagation(),D.stopImmediatePropagation()};window.addEventListener("click",j,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",j,!0),0),d?.(),P?.(!1)};window.addEventListener("pointermove",O),window.addEventListener("pointerup",k),window.addEventListener("pointercancel",k)}function Fc(e){let{cssAxis:n,wrapper:t,target:o,startClientX:s,startClientY:r,rotationSnap:i,onAngleDelta:c,onMouseDown:l,onMouseUp:u,onDraggingChanged:d}=e,P=t.getBoundingClientRect(),f=P.left,b=P.top,x=Math.atan2(r-b,s-f),v=0;l?.(),d?.(!0);let y=O=>{let k=Math.atan2(O.clientY-b,O.clientX-f),j=k-x;j>Math.PI?j-=2*Math.PI:j<-Math.PI&&(j+=2*Math.PI),v+=j,x=k;let D=v*180/Math.PI;D=Fn(D,i),c(D)},C=()=>{window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",C),window.removeEventListener("pointercancel",C);let O=k=>{k.stopPropagation(),k.stopImmediatePropagation()};window.addEventListener("click",O,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",O,!0),0),u?.(),d?.(!1)};window.addEventListener("pointermove",y),window.addEventListener("pointerup",C),window.addEventListener("pointercancel",C)}function Xo(e,n={}){let t=null,o=n.mode??"translate",s=n.size??1,r={...n},i=new Map,c=null,l=null,u=[0,0,0];function d(){if(!t)return[0,0,0];let h=t.transform.position??[0,0,0],E=t.transform.rotation??[0,0,0],p=typeof t.transform.scale=="number"?t.transform.scale:t.transform.scale?.[0]??1,g=Uo(u,E[0],E[1],E[2]);return[h[0]+p*g[0],h[1]+p*g[1],h[2]+p*g[2]]}function P(h){return l===h?_c:c===h?kc:Rc}function f(){for(let[h,E]of i){let p=b(E.spec,P(h));E.handle.setPolygons(p,{recomputeAutoCenter:!1})}}function b(h,E){let g=Yo(t?.polygons??[])*s,L=g/Nt,R=Oc(h.color,E);if(h.kind==="arrow"){let T=e.camera.state,G=Go(h.cssAxis,h.sign,T.rotX??65,T.rotY??45);return hc({axis:et[h.cssAxis],sign:h.sign,shaftLength:L,shaftHalfThickness:L*Tc,headLength:L*Ec,headHalfThickness:L*Ac,color:R,shaft:!G})}if(h.kind==="plane"){let T=e.camera.state,G=T.rotX??65,q=T.rotY??45,re=et[h.perpAxis],fe=(re+1)%3,de=(re+2)%3,pe=et[fe],Ce=et[de],be=Go(pe,1,G,q)?-1:1,Ae=Go(Ce,1,G,q)?-1:1,$e=L*Lc;return bc({axis:re,size:L*Mc,offset:[be*$e,Ae*$e],color:R})}let Q=g*wc/Nt*Wo;return Sc({axis:et[h.cssAxis],outerRadius:Q,color:R})}function x(h){return h.kind==="arrow"?"polycss-transform-arrow":h.kind==="plane"?"polycss-transform-plane":"polycss-transform-ring"}function v(){if(o==="translate"){let h=mi.map(p=>({kind:"arrow",key:p.key,cssAxis:p.cssAxis,sign:p.sign,color:p.color})),E=gi.map(p=>({kind:"plane",key:p.key,perpAxis:p.perpAxis,axisA:p.axisA,axisB:p.axisB,color:p.color}));return[...h,...E]}return o==="rotate"?fi.map(h=>({kind:"ring",key:h.key,cssAxis:h.cssAxis,color:h.color})):[]}function y(){if(C(),!t)return;let h={x:r.showX!==!1,y:r.showY!==!1,z:r.showZ!==!1};function E(g){if(g.kind==="arrow"){let H=g.key.replace("-","")[0];return h[H]}if(g.kind==="ring")return h[g.key];let L=["x","y","z"][g.axisA],R=["x","y","z"][g.axisB];return h[L]&&h[R]}let p=d();for(let g of v()){if(!E(g))continue;let L=b(g,P(g.key)),R=e.add({polygons:L,objectUrls:[],warnings:[],dispose:()=>{}},{excludeFromAutoCenter:!0,id:`__poly-gizmo-${g.key}`,position:p}),H=x(g);if(R.element.classList.add("polycss-transform-gizmo",H,`${H}--${g.key}`),g.kind==="ring"){let Q=(1-pi)/Wo,T=(1+pi)/Wo;R.element.style.setProperty("--ring-inner-ratio",`${Q}`),R.element.style.setProperty("--ring-outer-ratio",`${T}`)}i.set(g.key,{handle:R,spec:g})}}function C(){for(let{handle:h}of i.values())h.remove();i.clear(),c=null,l=null}function O(){if(!t)return;let h=d();for(let{handle:E}of i.values())E.setTransform({position:h})}function k(){t&&(i.size===0?y():O())}function j(h){if(t=h,!h){u=[0,0,0],C();return}u=Dc(h.polygons),C(),y()}function D(){j(null)}function Z(h){h!==o&&(o=h,t&&(C(),y()))}function J(h,E,p){if(!t||!_)return;let g=p[h.cssAxis],L=et[h.cssAxis],R=E*g/Nt,H=_.slice();H[L]=_[L]+R,t.setTransform({position:H}),O(),r.onObjectChange?.({object:t,position:H}),r.onChange?.()}let _=null,V=null,B=h=>{if(!t||r.enabled===!1)return;let E={x:r.showX!==!1,y:r.showY!==!1,z:r.showZ!==!1};if(o==="translate"){for(let p of gi){let g=["x","y","z"][p.axisA],L=["x","y","z"][p.axisB];if(!E[g]||!E[L])continue;let R=i.get(p.key);if(R&&Vt(R.handle.element,h.clientX,h.clientY)){h.preventDefault(),h.stopPropagation(),l=p.key,f(),_=(t.transform.position??[0,0,0]).slice(),Hc({axisA:p.axisA,axisB:p.axisB,probeDistanceCss:Yo(t.polygons)*s,wrapper:R.handle.element,target:t,startClientX:h.clientX,startClientY:h.clientY,translationSnap:r.translationSnap??null,onPlaneDelta:(H,Q,T,G)=>{if(!t||!_)return;let q=T[p.axisA],re=G[p.axisB],fe=et[p.axisA],de=et[p.axisB],pe=_.slice();pe[fe]+=H*q/Nt,pe[de]+=Q*re/Nt,t.setTransform({position:pe}),O(),r.onObjectChange?.({object:t,position:pe}),r.onChange?.()},onMouseDown:r.onMouseDown,onMouseUp:r.onMouseUp,onDraggingChanged:H=>{H||(l=null,_=null,f()),r.onDraggingChanged?.(H)}});return}}for(let p of mi){let g=p.key.replace("-","")[0];if(!E[g])continue;let L=i.get(p.key);if(L&&Vt(L.handle.element,h.clientX,h.clientY)){h.preventDefault(),h.stopPropagation(),l=p.key,f(),_=(t.transform.position??[0,0,0]).slice(),Ic({cssAxis:p.cssAxis,sign:p.sign,shaftLengthCss:Yo(t.polygons)*s,wrapper:L.handle.element,target:t,startClientX:h.clientX,startClientY:h.clientY,translationSnap:r.translationSnap??null,onAxisDelta:(R,H)=>J(p,R,H),onMouseDown:r.onMouseDown,onMouseUp:r.onMouseUp,onDraggingChanged:R=>{R||(l=null,_=null,f()),r.onDraggingChanged?.(R)}});return}}}else if(o==="rotate")for(let p of fi){if(!E[p.key])continue;let g=i.get(p.key);if(g&&Vt(g.handle.element,h.clientX,h.clientY)){h.preventDefault(),h.stopPropagation(),l=p.key,f(),V=(t.transform.rotation??[0,0,0]).slice(),_=(t.transform.position??[0,0,0]).slice(),Fc({cssAxis:p.cssAxis,wrapper:g.handle.element,target:t,startClientX:h.clientX,startClientY:h.clientY,rotationSnap:r.rotationSnap??null,onAngleDelta:L=>{if(!t||!V||!_)return;let R=et[p.cssAxis],H=[0,0,0];H[R]=1;let Q=-L*Math.PI/180,T=Pc(V),G=xc(H,Q),q=yc(vc(G,T)),re=typeof t.transform.scale=="number"?t.transform.scale:t.transform.scale?.[0]??1,fe=Uo(u,V[0],V[1],V[2]),de=Uo(u,q[0],q[1],q[2]),pe=[_[0]+re*(fe[0]-de[0]),_[1]+re*(fe[1]-de[1]),_[2]+re*(fe[2]-de[2])];t.setTransform({rotation:q,position:pe}),O(),r.onObjectChange?.({object:t,rotation:q,position:pe}),r.onChange?.()},onMouseDown:r.onMouseDown,onMouseUp:r.onMouseUp,onDraggingChanged:L=>{L||(l=null,V=null,_=null,f(),t?.rebakeAtlas()),r.onDraggingChanged?.(L)}});return}}};e.host.addEventListener("pointerdown",B,{capture:!0});let z=h=>{if(!t||l||r.enabled===!1)return;let E=null;for(let[p,g]of i)if(Vt(g.handle.element,h.clientX,h.clientY)){E=p;break}E!==c&&(c=E,f())};e.host.addEventListener("pointermove",z);function A(){e.host.removeEventListener("pointerdown",B,{capture:!0}),e.host.removeEventListener("pointermove",z),C()}return{attach:j,detach:D,setMode:Z,update:k,destroy:A}}var zc=typeof HTMLElement<"u"?HTMLElement:class{},Bc=["perspective","rot-x","rot-y","zoom","directional-direction","directional-color","directional-intensity","ambient-color","ambient-intensity","texture-lighting","texture-quality","texture-leaf-sizing","texture-image-rendering","texture-backend","texture-projection","auto-center"];function je(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function Vc(e){return e==="false"?!1:je(e)}function qo(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 Nc(e){if(e==="baked"||e==="dynamic")return e}function jc(e){return e==="auto"?"auto":je(e)}function $c(e){if(e==="canonical"||e==="local"||e==="raster")return e}function Uc(e){if(e==="auto"||e==="pixelated")return e}function Wc(e){if(e==="auto"||e==="atlas"||e==="image")return e}function Gc(e){if(e==="affine"||e==="projective")return e}function Yc(e){return typeof e.getCamera=="function"}var Oe=class extends zc{constructor(){super(...arguments);this._scene=null;this._implicitCamera=null}static get observedAttributes(){return[...Bc]}getScene(){return this._scene}_findAncestorCamera(){let t=this.parentElement;for(;t;){if(Yc(t)){let o=t.getCamera();if(o)return o}t=t.parentElement}return null}_buildImplicitCamera(){let t=Vc(this.getAttribute("perspective")),o=je(this.getAttribute("rot-x")),s=je(this.getAttribute("rot-y")),r=je(this.getAttribute("zoom")),i=je(this.getAttribute("distance")),c=qo(this.getAttribute("target")),l={...o!==void 0?{rotX:o}:{},...s!==void 0?{rotY:s}:{},...r!==void 0?{zoom:r}:{},...i!==void 0?{distance:i}:{},...c!==void 0?{target:c}:{}};return t===!1?yt(l):t!==void 0?an({...l,perspective:t}):yt(l)}_readNonCameraOptions(){let t=this._readDirectionalLight(),o=this._readAmbientLight(),s={};s.textureLighting=Nc(this.getAttribute("texture-lighting"))??"baked";let r=jc(this.getAttribute("texture-quality"));r!==void 0&&(s.textureQuality=r),s.textureLeafSizing=$c(this.getAttribute("texture-leaf-sizing"))??"canonical";let i=Uc(this.getAttribute("texture-image-rendering"));i!==void 0&&(s.textureImageRendering=i);let c=Wc(this.getAttribute("texture-backend"));c!==void 0&&(s.textureBackend=c);let l=Gc(this.getAttribute("texture-projection"));return l!==void 0&&(s.textureProjection=l),s.autoCenter=this.hasAttribute("auto-center"),t&&(s.directionalLight=t),o&&(s.ambientLight=o),s}_readDirectionalLight(){let t=qo(this.getAttribute("directional-direction")),o=this.getAttribute("directional-color")||void 0,s=je(this.getAttribute("directional-intensity"));if(!t&&!o&&s===void 0)return;let r={direction:t??[.4,-.7,.59]};return o&&(r.color=o),s!==void 0&&(r.intensity=s),r}_readAmbientLight(){let t=this.getAttribute("ambient-color")||void 0,o=je(this.getAttribute("ambient-intensity"));if(!t&&o===void 0)return;let s={};return t&&(s.color=t),o!==void 0&&(s.intensity=o),s}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=zo(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,s){if(o!==s&&this._scene){if(this._implicitCamera&&["rot-x","rot-y","zoom","distance","target"].includes(t)){let i=je(this.getAttribute("rot-x")),c=je(this.getAttribute("rot-y")),l=je(this.getAttribute("zoom")),u=je(this.getAttribute("distance")),d=qo(this.getAttribute("target"));i!==void 0&&this._implicitCamera.update({rotX:i}),c!==void 0&&this._implicitCamera.update({rotY:c}),l!==void 0&&this._implicitCamera.update({zoom:l}),u!==void 0&&this._implicitCamera.update({distance:u}),d!==void 0&&this._implicitCamera.update({target:d}),this._scene.applyCamera();return}this._scene.setOptions(this._readNonCameraOptions())}}};import{computeSceneBbox as Xc,loadMesh as qc}from"@layoutit/polycss-core";var Zc=typeof HTMLElement<"u"?HTMLElement:class{},Qc=["src","mtl","mesh-resolution","position","scale","rotation","auto-center","cast-shadow","receive-shadow","target-size","default-color","palette","include-objects","exclude-objects"];function cn(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 yi(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return cn(e)}}function Zo(e){if(!e)return;let n=e.split(",").map(t=>t.trim()).filter(t=>t.length>0);return n.length>0?n:void 0}function Kc(e){let n=e.getAttribute("target-size"),t=e.getAttribute("default-color"),o=Zo(e.getAttribute("palette")),s=Zo(e.getAttribute("include-objects")),r=Zo(e.getAttribute("exclude-objects")),i=n!==null?parseFloat(n):NaN,c={};return Number.isFinite(i)&&(c.targetSize=i),t&&(c.defaultColor=t),o&&(c.palette=o),s&&(c.includeObjects=s),r&&(c.excludeObjects=r),Object.keys(c).length>0?c:void 0}function Jc(e){return e.closest("poly-scene")??null}function eu(e){if(e.length===0)return e;let n=Xc(e),t=(n.min[0]+n.max[0])/2,o=(n.min[1]+n.max[1])/2,s=(n.min[2]+n.max[2])/2;if(t===0&&o===0&&s===0)return e;let r=i=>[i[0]-t,i[1]-o,i[2]-s];return e.map(i=>({...i,vertices:i.vertices.map(r),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(c=>({...c,vertices:c.vertices.map(r)}))}:null}))}var un=class extends Zc{constructor(){super(...arguments);this._handle=null;this._parseResult=null;this._loadToken=0}static get observedAttributes(){return[...Qc]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,s){if(o!==s){if(t==="src"||t==="mtl"||t==="mesh-resolution"||t==="target-size"||t==="default-color"||t==="palette"||t==="include-objects"||t==="exclude-objects"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform({position:cn(this.getAttribute("position")),scale:yi(this.getAttribute("scale")),rotation:cn(this.getAttribute("rotation")),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow")})}}_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=Jc(this);if(!o)return;let s=++this._loadToken,r=this.getAttribute("mtl")||void 0,c=this.getAttribute("mesh-resolution")==="lossless"?"lossless":void 0,l=Kc(this),u;try{let f=r||c!==void 0||l?{...r?{mtlUrl:r}:{},...c!==void 0?{meshResolution:c}:{},...l?{objOptions:l}:{}}:void 0;u=await qc(t,f)}catch(f){this.dispatchEvent(new CustomEvent("polycss:error",{detail:f,bubbles:!0}));return}if(s!==this._loadToken){try{u.dispose()}catch{}return}let d=o.getScene();if(!d){try{u.dispose()}catch{}return}this.hasAttribute("auto-center")&&(u={...u,polygons:eu(u.polygons)}),this._parseResult=u,this._handle=d.add(u,{position:cn(this.getAttribute("position")),scale:yi(this.getAttribute("scale")),rotation:cn(this.getAttribute("rotation")),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow")}),this.dispatchEvent(new CustomEvent("polycss:loaded",{detail:{polygons:this._handle.polygons},bubbles:!0}))}};import{BASE_TILE as dn}from"@layoutit/polycss-core";var tu=typeof HTMLElement<"u"?HTMLElement:class{},nu=["src","width","height","position","rotation","scale","allow","loading","referrerpolicy","sandbox","title"];function Qo(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 ou(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return Qo(e)}}function bi(e,n){if(e===null)return n;let t=parseFloat(e);return Number.isFinite(t)?t:n}function ru(e){let n=e.closest("poly-scene");return n?n.querySelector(".polycss-scene"):null}function su(e,n,t,o,s){let r=typeof t=="number"?t:t?.[0]??1,i=typeof t=="number"?t:t?.[1]??1,c=typeof t=="number"?t:t?.[2]??1,l=r!==1||i!==1||c!==1,u=!!n&&(!!n[0]||!!n[1]||!!n[2]),d=(e?.[1]??0)*dn,P=(e?.[0]??0)*dn,f=(e?.[2]??0)*dn,b=[];return b.push(`translate3d(${d}px, ${P}px, ${f}px)`),u&&(n[0]&&b.push(`rotateY(${-n[0]}deg)`),n[1]&&b.push(`rotateX(${-n[1]}deg)`),n[2]&&b.push(`rotateZ(${-n[2]}deg)`)),l&&b.push(`scale3d(${r}, ${i}, ${c})`),b.push(`translate(${-o/2}px, ${-s/2}px)`),b.join(" ")}var Ko=class extends tu{constructor(){super(...arguments);this._wrapper=null;this._iframe=null}static get observedAttributes(){return[...nu]}getIframeElement(){return this._iframe}connectedCallback(){this._mount()}disconnectedCallback(){this._teardown()}attributeChangedCallback(t,o,s){if(o!==s&&!(!this._wrapper||!this._iframe)){if(t==="src"){this._iframe.src=this.getAttribute("src")??"";return}if(t==="allow"||t==="loading"||t==="referrerpolicy"||t==="sandbox"||t==="title"){let r=this.getAttribute(t);r===null?this._iframe.removeAttribute(t):this._iframe.setAttribute(t,r);return}this._applyGeometry()}}_mount(){let t=ru(this);if(!t)return;let o=this.ownerDocument;if(!o)return;let s=o.createElement("div");s.className="polycss-iframe",s.style.position="absolute",s.style.left="0",s.style.top="0",s.style.transformOrigin="0 0",s.style.transformStyle="preserve-3d";let r=o.createElement("iframe");r.style.display="block",r.style.border="0",r.style.background="#000";let i=this.getAttribute("src");i&&(r.src=i);let c=this.getAttribute("allow");c&&r.setAttribute("allow",c);for(let l of["loading","referrerpolicy","sandbox","title"]){let u=this.getAttribute(l);u!==null&&r.setAttribute(l,u)}s.appendChild(r),t.appendChild(s),this._wrapper=s,this._iframe=r,this._applyGeometry()}_applyGeometry(){if(!this._wrapper||!this._iframe)return;let t=bi(this.getAttribute("width"),16),o=bi(this.getAttribute("height"),9),s=t*dn,r=o*dn;this._iframe.style.width=`${s}px`,this._iframe.style.height=`${r}px`;let i=Qo(this.getAttribute("position")),c=Qo(this.getAttribute("rotation")),l=ou(this.getAttribute("scale"));this._wrapper.style.transform=su(i,c,l,s,r)}_teardown(){this._wrapper?.parentNode&&this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null,this._iframe=null}};var iu=typeof HTMLElement<"u"?HTMLElement:class{},au=["vertices","color","texture","uvs","position","scale","rotation"];function xi(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Jo(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 lu(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return Jo(e)}}function cu(e){return e.closest("poly-scene")??null}var er=class extends iu{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...au]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,s){o!==s&&(this._tearDown(),this.isConnected&&this._mount())}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}_mount(){let t=cu(this);if(!t)return;let o=t.getScene();if(!o)return;let s=xi(this.getAttribute("vertices"));if(!s||!Array.isArray(s)||s.length<3)return;let r=this.getAttribute("color")||void 0,i=this.getAttribute("texture")||void 0,c=xi(this.getAttribute("uvs"))??void 0,l={};for(let P of Array.from(this.attributes))P.name.startsWith("data-")&&(l[P.name.slice(5)]=P.value);let d={polygons:[{vertices:s,...r!==void 0?{color:r}:{},...i!==void 0?{texture:i}:{},...c!==void 0?{uvs:c}:{},...Object.keys(l).length>0?{data:l}:{}}],objectUrls:[],warnings:[],dispose:()=>{}};this._handle=o.add(d,{position:Jo(this.getAttribute("position")),scale:lu(this.getAttribute("scale")),rotation:Jo(this.getAttribute("rotation"))})}};function te(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function zn(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 Ee(e){if(e!==null)return!(e==="false"||e==="0")}function Bn(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 Vn(e){if(e==="x"||e==="y")return e}var uu=typeof HTMLElement<"u"?HTMLElement:class{},du=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],tr=class extends uu{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...du]}getControls(){return this._controls}_readAnimate(){let t=te(this.getAttribute("animate-speed")),o=Vn(this.getAttribute("animate-axis")),s=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}:{},...s!==null?{pauseOnInteraction:Ee(s)}:{}}}_readOptions(){let t={},o=Ee(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let s=Ee(this.getAttribute("wheel"));s!==void 0&&(t.wheel=s),this.hasAttribute("dolly")&&(t.dolly=!0);let r=te(this.getAttribute("min-distance"));r!==void 0&&(t.minDistance=r);let i=te(this.getAttribute("max-distance"));i!==void 0&&(t.maxDistance=i);let c=Bn(this.getAttribute("invert"));c!==void 0&&(t.invert=c);let l=te(this.getAttribute("zoom-min")),u=te(this.getAttribute("zoom-max"));return l!==void 0&&(t.minZoom=l),u!==void 0&&(t.maxZoom=u),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Oe)return t;t=t.parentNode}return null}_attach(){if(this._controls)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._controls=Bo(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,s){o!==s&&this._controls&&this._controls.update(this._readOptions())}};var pu=typeof HTMLElement<"u"?HTMLElement:class{},mu=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],nr=class extends pu{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...mu]}_readAnimate(){let t=te(this.getAttribute("animate-speed")),o=Vn(this.getAttribute("animate-axis")),s=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}:{},...s!==null?{pauseOnInteraction:Ee(s)}:{}}}_readOptions(){let t={},o=Ee(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let s=Ee(this.getAttribute("wheel"));s!==void 0&&(t.wheel=s),this.hasAttribute("dolly")&&(t.dolly=!0);let r=te(this.getAttribute("min-distance"));r!==void 0&&(t.minDistance=r);let i=te(this.getAttribute("max-distance"));i!==void 0&&(t.maxDistance=i);let c=Bn(this.getAttribute("invert"));c!==void 0&&(t.invert=c);let l=te(this.getAttribute("zoom-min")),u=te(this.getAttribute("zoom-max"));return l!==void 0&&(t.minZoom=l),u!==void 0&&(t.maxZoom=u),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Oe)return t;t=t.parentNode}return null}_attach(){if(this._controls)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._controls=Vo(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,s){o!==s&&this._controls&&this._controls.update(this._readOptions())}};var fu=typeof HTMLElement<"u"?HTMLElement:class{},gu=["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"],or=class extends fu{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...gu]}_readOptions(){let t={},o=Ee(this.getAttribute("enabled"));o!==void 0&&(t.enabled=o);let s=Ee(this.getAttribute("look-enabled"));s!==void 0&&(t.lookEnabled=s);let r=Ee(this.getAttribute("move-enabled"));r!==void 0&&(t.moveEnabled=r);let i=Ee(this.getAttribute("jump-enabled"));i!==void 0&&(t.jumpEnabled=i);let c=Ee(this.getAttribute("crouch-enabled"));c!==void 0&&(t.crouchEnabled=c);let l=te(this.getAttribute("look-sensitivity"));if(l!==void 0&&(t.lookSensitivity=l),this.hasAttribute("invert-y")){let C=Ee(this.getAttribute("invert-y"));C!==void 0&&(t.invertY=C)}let u=te(this.getAttribute("move-speed"));u!==void 0&&(t.moveSpeed=u);let d=te(this.getAttribute("jump-velocity"));d!==void 0&&(t.jumpVelocity=d);let P=te(this.getAttribute("gravity"));P!==void 0&&(t.gravity=P);let f=te(this.getAttribute("eye-height"));f!==void 0&&(t.eyeHeight=f);let b=te(this.getAttribute("crouch-height"));b!==void 0&&(t.crouchHeight=b);let x=te(this.getAttribute("ground-z"));x!==void 0&&(t.groundZ=x);let v=te(this.getAttribute("min-pitch"));v!==void 0&&(t.minPitch=v);let y=te(this.getAttribute("max-pitch"));return y!==void 0&&(t.maxPitch=y),t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Oe)return t;t=t.parentNode}return null}_attach(){if(this._controls)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._controls=jo(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,s){o!==s&&this._controls&&this._controls.update(this._readOptions())}};var hu=typeof HTMLElement<"u"?HTMLElement:class{},yu=["perspective","zoom","rot-x","rot-y","target","distance"],rr=class extends hu{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...yu]}getCamera(){return this._camera}_readOptions(){return{perspective:te(this.getAttribute("perspective")),zoom:te(this.getAttribute("zoom")),rotX:te(this.getAttribute("rot-x")),rotY:te(this.getAttribute("rot-y")),target:zn(this.getAttribute("target")),distance:te(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=an(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,s){if(o===s||!this._camera||!this._wrapper)return;let r=this._readOptions();if(t==="perspective"){let l=r.perspective!==void 0?`${r.perspective}px`:"32000px";this._wrapper.style.perspective=l;return}this._camera.update({rotX:r.rotX,rotY:r.rotY,zoom:r.zoom,target:r.target,distance:r.distance}),this.querySelector("poly-scene")?.getScene?.()?.applyCamera()}};var bu=typeof HTMLElement<"u"?HTMLElement:class{},xu=["zoom","rot-x","rot-y","target","distance"],pn=class extends bu{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...xu]}getCamera(){return this._camera}_readOptions(){return{zoom:te(this.getAttribute("zoom")),rotX:te(this.getAttribute("rot-x")),rotY:te(this.getAttribute("rot-y")),target:zn(this.getAttribute("target")),distance:te(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=yt(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,s){if(o===s||!this._camera)return;let r=this._readOptions();r.zoom!==void 0&&this._camera.update({zoom:r.zoom}),r.rotX!==void 0&&this._camera.update({rotX:r.rotX}),r.rotY!==void 0&&this._camera.update({rotY:r.rotY}),r.target!==void 0&&this._camera.update({target:r.target}),r.distance!==void 0&&this._camera.update({distance:r.distance}),this.querySelector("poly-scene")?.getScene?.()?.applyCamera()}};var sr=class extends pn{};var Pu=typeof HTMLElement<"u"?HTMLElement:class{},vu=["mode","target","size","enabled"];function Pi(e){if(e==="translate"||e==="rotate")return e}var ir=class extends Pu{constructor(){super(...arguments);this._tc=null}static get observedAttributes(){return[...vu]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Oe)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 s=null;try{s=o.querySelector(`#${t}`)??o.querySelector(t)}catch{s=o.querySelector(`[id="${t}"]`)}return s instanceof un?s:null}_readOptions(){let t={},o=Pi(this.getAttribute("mode"));o!==void 0&&(t.mode=o);let s=te(this.getAttribute("size"));s!==void 0&&(t.size=s);let r=this.getAttribute("enabled");return r!==null&&(t.enabled=r!=="false"&&r!=="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 r=()=>{t.removeEventListener("polycss:scene-ready",r),this._attach()};t.addEventListener("polycss:scene-ready",r)}return}this._tc=Xo(o,this._readOptions());let s=this._findTargetMesh();if(s){let r=s.getMeshHandle();r&&this._tc.attach(r)}}connectedCallback(){this._attach()}disconnectedCallback(){this._tc&&(this._tc.destroy(),this._tc=null)}attributeChangedCallback(t,o,s){if(o!==s&&this._tc){if(t==="mode"){let r=Pi(s);r&&this._tc.setMode(r)}else if(t==="target"){let r=this._findTargetMesh();this._tc.attach(r?r.getMeshHandle()??null:null)}}}};var Su=typeof HTMLElement<"u"?HTMLElement:class{},Cu=["multiple","clear-on-miss"],ar=class extends Su{constructor(){super(...arguments);this._selection=null}static get observedAttributes(){return[...Cu]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Oe)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 s=()=>{t.removeEventListener("polycss:scene-ready",s),this._attach()};t.addEventListener("polycss:scene-ready",s)}return}this._selection=$o(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._selection&&(this._selection.destroy(),this._selection=null)}attributeChangedCallback(t,o,s){o!==s&&(this._selection&&(this._selection.destroy(),this._selection=null),this._attach())}};var lr={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},cr={ready:!0,textureLeafCount:0,readyTextureLeafCount:0,pendingTextureLeafCount:0,atlasTextureLeafCount:0,imageTextureLeafCount:0};function ur(){return{ready:!0,leafCount:0,atlasCount:0,imageCount:0,pendingCount:0,sizingCounts:{canonical:0,local:0,raster:0,image:0,unknown:0},imageRenderingCounts:{auto:0,pixelated:0,unknown:0},projectionCounts:{affine:0,projective:0,fallback:0,unknown:0},minLeafWidth:0,maxLeafWidth:0,minLeafHeight:0,maxLeafHeight:0,doubleSidedCount:0}}function dr(){return{runtimeAtlasUrlCount:0,snapshotAtlasCount:0,snapshotBackgroundCount:0,selfContained:!0}}function Nn(){return{rootFound:!1,projection:"unknown",perspectiveStyle:"",appliedPerspectiveStyle:""}}var Tu={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:lr,textureReadiness:cr,textureStats:ur(),snapshotStats:dr(),cameraStats:Nn(),bucketCount:0};function jn(e){return typeof e=="number"?{polygonCount:e}:e??{}}function bt(e,n){return e.querySelectorAll(n).length}function vi(e,n){return(Ci(e,n)?1:0)+bt(e,n)}function Si(e){if(!e)return!1;let n=/url\((?:"([^"]*)"|'([^']*)'|([^)]*))\)/g,t;for(;t=n.exec(e);){let o=(t[1]??t[2]??t[3]??"").trim();if(o&&!o.startsWith("data:"))return!0}return!1}function Eu(e){let n=0,t=e instanceof HTMLElement?e:null;t&&Si(t.getAttribute("style"))&&n++;for(let o of Array.from(e.querySelectorAll("[style]")))o instanceof HTMLElement&&Si(o.getAttribute("style"))&&n++;return n}function Ci(e,n){let t=e;return typeof t.matches=="function"&&t.matches(n)}function $n(e,n){if(!n)return[e];let t=[];return Ci(e,n)&&t.push(e),t.push(...Array.from(e.querySelectorAll(n))),t}function Au(e){switch(e.toLowerCase()){case"b":return"quad";case"i":return"clippedSolid";case"s":return"atlas";case"u":return"stableTriangle";default:return null}}function wu(e){if(e==null||e==="")return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function jt(e){if(e==null||e==="")return;let n=Number(e);return Number.isFinite(n)?n:void 0}function Mu(e){if(e==null||e==="")return;let n=e.split(",").map(t=>Number(t));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return n}function Lu(e){return e==="orthographic"||e==="perspective"?e:"unknown"}function Ru(e,n){if(!n)return;let t=e.getAttribute("data-polycss-texture-ready");return t==="true"?!0:t==="false"?!1:e.style.opacity!=="0"}function pr(e,n){if(!e)return[];let t=jn(n),o=[];for(let s of $n(e,t.scopeSelector))for(let r of Array.from(s.querySelectorAll("b,i,s,u"))){let i=r,c=Au(i.tagName);if(!c)continue;let l=i.getAttribute("data-polycss-texture-backend")??(c==="atlas"?"atlas":void 0),u=Ru(i,l);o.push({element:i,strategy:c,polygonIndex:wu(i.getAttribute("data-poly-index")),textureBackend:l,textureReady:u,textureLeafSizing:i.getAttribute("data-polycss-texture-leaf-sizing")??void 0,textureImageRendering:i.getAttribute("data-polycss-texture-image-rendering")??void 0,textureProjection:i.getAttribute("data-polycss-texture-projection")??void 0,textureLeafWidth:jt(i.getAttribute("data-polycss-texture-leaf-width")),textureLeafHeight:jt(i.getAttribute("data-polycss-texture-leaf-height")),doubleSided:i.getAttribute("data-polycss-double-sided")==="true"})}return o}function Ti(e,n){let t={...cr};for(let o of pr(e,n))o.textureBackend&&(t.textureLeafCount++,o.textureBackend==="image"?t.imageTextureLeafCount++:t.atlasTextureLeafCount++,o.textureReady===!1?t.pendingTextureLeafCount++:t.readyTextureLeafCount++);return t.ready=t.pendingTextureLeafCount===0,t}function ku(e,n){let t=ur(),o=!1,s=!1;for(let r of pr(e,n))if(r.textureBackend){switch(t.leafCount++,r.textureBackend==="image"?t.imageCount++:t.atlasCount++,r.textureReady===!1&&t.pendingCount++,r.textureLeafSizing){case"canonical":case"local":case"raster":case"image":t.sizingCounts[r.textureLeafSizing]++;break;default:t.sizingCounts.unknown++;break}switch(r.textureImageRendering){case"auto":case"pixelated":t.imageRenderingCounts[r.textureImageRendering]++;break;default:t.imageRenderingCounts.unknown++;break}switch(r.textureProjection){case"affine":case"projective":case"fallback":t.projectionCounts[r.textureProjection]++;break;default:t.projectionCounts.unknown++;break}typeof r.textureLeafWidth=="number"&&(t.minLeafWidth=o?Math.min(t.minLeafWidth,r.textureLeafWidth):r.textureLeafWidth,t.maxLeafWidth=o?Math.max(t.maxLeafWidth,r.textureLeafWidth):r.textureLeafWidth,o=!0),typeof r.textureLeafHeight=="number"&&(t.minLeafHeight=s?Math.min(t.minLeafHeight,r.textureLeafHeight):r.textureLeafHeight,t.maxLeafHeight=s?Math.max(t.maxLeafHeight,r.textureLeafHeight):r.textureLeafHeight,s=!0),r.doubleSided&&t.doubleSidedCount++}return t.pendingCount=Math.min(t.pendingCount,t.leafCount),t.ready=t.pendingCount===0,t}function _u(e,n){let t=dr();if(!e)return t;let o=jn(n);for(let s of $n(e,o.scopeSelector))t.runtimeAtlasUrlCount+=Eu(s),t.snapshotAtlasCount+=vi(s,"[data-polycss-snapshot-atlas]"),t.snapshotBackgroundCount+=vi(s,"[data-polycss-snapshot-bg]");return t.selfContained=t.runtimeAtlasUrlCount===0,t}function Ou(e){let n=e instanceof HTMLElement?e:null;if(n){if(n.classList.contains("polycss-camera"))return n;let o=n.closest(".polycss-camera");if(o instanceof HTMLElement)return o}let t=e.querySelector(".polycss-camera");return t instanceof HTMLElement?t:null}function Du(e,n){if(!e)return Nn();let t=jn(n),o=null;for(let s of $n(e,t.scopeSelector))if(o=Ou(s),o)break;return o?{rootFound:!0,projection:Lu(o.getAttribute("data-polycss-camera-projection")),perspectiveStyle:o.getAttribute("data-polycss-camera-perspective")??"",appliedPerspectiveStyle:o.getAttribute("data-polycss-camera-applied-perspective")??o.style.perspective??"",zoom:jt(o.getAttribute("data-polycss-camera-zoom")),distance:jt(o.getAttribute("data-polycss-camera-distance")),rotX:jt(o.getAttribute("data-polycss-camera-rot-x")),rotY:jt(o.getAttribute("data-polycss-camera-rot-y")),target:Mu(o.getAttribute("data-polycss-camera-target"))}:Nn()}function Iu(e,n){let t=jn(n);if(!e)return{...Tu,surfaceLeafCounts:{...lr},textureReadiness:{...cr},textureStats:ur(),snapshotStats:dr(),cameraStats:Nn(),polygonCount:t.polygonCount??0};let o=$n(e,t.scopeSelector),s={...lr},r=0,i=0;for(let l of o)s.quad+=bt(l,"b"),s.clippedSolid+=bt(l,"i"),s.atlas+=bt(l,"s"),s.stableTriangle+=bt(l,"u"),r+=bt(l,"q, .polycss-shadow-svg"),i+=bt(l,".polycss-bucket");let c=s.quad+s.clippedSolid+s.atlas+s.stableTriangle;return{polygonCount:t.polygonCount??c,mountedPolygonLeafCount:c,shadowLeafCount:r,surfaceLeafCounts:s,textureReadiness:Ti(e,t),textureStats:ku(e,t),snapshotStats:_u(e,t),cameraStats:Du(e,t),bucketCount:i}}var xt=class extends Error{constructor(n,t,o){super(t),this.name="PolySceneSnapshotError",this.code=n,this.url=o,Object.setPrototypeOf(this,new.target.prototype)}},Hu=`
|
|
519
|
+
`;import{BASE_TILE as Fl,buildPolyCameraSceneTransform as zl,buildPolyMeshTransform as Bl,worldDirectionToCss as Vl,worldDirectionalLightToCss as Nl,worldPositionToCss as jl}from"@layoutit/polycss-core";var cn=Fl,$l=.1;function Ci(e){return jl(e)}function un(e){return Vl(e)}function ft(e){return Nl(e)}function kn(e){return Bl(e)}function Do(e,n=[0,0,0],t=1){return zl(e.state,{autoCenterOffset:n,layoutScale:t})}function Wl(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 Ti(e){let n=e.ownerDocument?.defaultView;if(!n)return 1;let t=1;for(let o=e;o;o=o.parentElement)t*=Wl(n.getComputedStyle(o).getPropertyValue("zoom"));return Number.isFinite(t)&&t>0?t:1}function Ei(e,n){Math.abs(n-1)<1e-6?e.style.removeProperty("zoom"):e.style.setProperty("zoom",String(1/n))}function Ai(e){if(e.vertices.length<3)return null;let n=e.vertices[0],t=0,o=0,i=0;for(let y=1;y+1<e.vertices.length;y++){let g=e.vertices[y],b=e.vertices[y+1],x=g[1]-n[1],v=g[0]-n[0],h=g[2]-n[2],C=b[1]-n[1],R=b[0]-n[0],I=b[2]-n[2];t-=v*I-h*R,o-=h*C-x*I,i-=x*R-v*C}let r=Math.hypot(t,o,i);if(r<1e-9)return null;t/=r,o/=r,i/=r;let s=1/$l,c=Math.round(t*s)/s,l=Math.round(o*s)/s,d=Math.round(i*s)/s,p=Math.hypot(c,l,d);return p<1e-9?null:{key:c+","+l+","+d,vec:[c/p,l/p,d/p]}}function wi(e,n){let t=e?.disable??[],o=n?.disable??[];if(t.length!==o.length)return!1;for(let i of t)if(!o.includes(i))return!1;return!0}function Mi(e,n){return e===n?!0:!e||!n?!1:e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2]}function Li(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)&&(e?.parametric??!1)===(n?.parametric??!1)&&(e?.definition??16)===(n?.definition??16)&&(e?.dragDefinition??-1)===(n?.dragDefinition??-1)&&(e?.style??"vector")===(n?.style??"vector")&&(e?.followAnimation??!1)===(n?.followAnimation??!1)}import{parseHex as _i,parseHexColor as Ri,parsePureColor as Ul}from"@layoutit/polycss-core";var Gl=["--plx","--ply","--plz","--plr","--plg","--plb","--pli","--par","--pag","--pab","--pai","--clx","--cly","--clz"],zt="--polycss-light-preview-active",ki=`var(${zt}, 0)`,Yl="max(0, calc(var(--pnx, 0) * var(--plx, 0) + var(--pny, 0) * var(--ply, 0) + var(--pnz, 1) * var(--plz, 1)))",Io=(e,n,t)=>`calc(255 * max(0, 1.055 * pow(min(1, pow((var(${e}, 1) + 0.055) / 1.055, 2.4) * (pow((var(${n}, 1) + 0.055) / 1.055, 2.4) * var(--pai, 0.4) + pow((var(${t}, 1) + 0.055) / 1.055, 2.4) * var(--pli, 1) * var(--plam, 0)) / 3.14159265), 0.4167) - 0.055))`,Xl=Io("--psr","--par","--plr"),ql=Io("--psg","--pag","--plg"),Zl=Io("--psb","--pab","--plb");function me(e,n,t){return e.style.getPropertyValue(n)===t?!1:(e.style.setProperty(n,t),!0)}function Pt(e){for(let n of Gl)e.style.getPropertyValue(n)&&e.style.removeProperty(n)}function _n(e,n){let t=n.directionalLight?.direction??[.4,-.7,.59],o=un(t),i=Math.hypot(o[0],o[1],o[2])||1,r=o[0]/i,s=o[1]/i,c=o[2]/i,l=Ri(n.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],d=Ri(n.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],p=n.directionalLight?.intensity??1,y=n.ambientLight?.intensity??.4,g=v=>(v/255).toFixed(4);me(e,"--plx",r.toFixed(2)),me(e,"--ply",s.toFixed(2)),me(e,"--plz",c.toFixed(2)),me(e,"--plr",g(l[0])),me(e,"--plg",g(l[1])),me(e,"--plb",g(l[2])),me(e,"--pli",p.toFixed(4)),me(e,"--par",g(d[0])),me(e,"--pag",g(d[1])),me(e,"--pab",g(d[2])),me(e,"--pai",y.toFixed(4));let b=c,x=Math.sign(b||1)*Math.max(Math.abs(b),.01);me(e,"--clx",r.toFixed(2)),me(e,"--cly",s.toFixed(2)),me(e,"--clz",x.toFixed(2))}function Oi(e,n){let t=n.textureLighting==="dynamic";if(e.dataset.polycssLighting=n.textureLighting??"baked",!t){Pt(e);return}_n(e,n)}function vt(e,n){n.paintColor?e.style.setProperty("--polycss-paint",n.paintColor):e.style.getPropertyValue("--polycss-paint")&&e.style.removeProperty("--polycss-paint"),n.dynamicColor?(e.style.setProperty("--psr",(n.dynamicColor.r/255).toFixed(4)),e.style.setProperty("--psg",(n.dynamicColor.g/255).toFixed(4)),e.style.setProperty("--psb",(n.dynamicColor.b/255).toFixed(4))):(e.style.getPropertyValue("--psr")||e.style.getPropertyValue("--psg")||e.style.getPropertyValue("--psb"))&&(e.style.removeProperty("--psr"),e.style.removeProperty("--psg"),e.style.removeProperty("--psb"))}function Di(e,n){let t=_i(n??"#cccccc");e.style.setProperty("--psr",(t.r/255).toFixed(4)),e.style.setProperty("--psg",(t.g/255).toFixed(4)),e.style.setProperty("--psb",(t.b/255).toFixed(4))}function Ho(e,n,t){if(!e.plan||e.kind==="atlas"||e.plan.texture)return!1;let o=t.textureLighting??"baked",i={directionalLight:ft(t.directionalLight),ambientLight:t.ambientLight,textureLighting:o,textureQuality:t.textureQuality,seamBleed:t.seamBleed,strategies:t.strategies},r=uo(e.plan,n,e.plan.normal,o,i);return Dt(e.element,r,o),o==="baked"&&Kl(e.element),!0}function Ql(e){let n=Ul(e)??{rgb:[255,255,255],alpha:1},[t,o,i]=n.rgb,r=(c,l)=>`calc(${c} * (1 - ${ki}) + var(${l}, ${c}) * ${ki})`,s=n.alpha<1?` / ${n.alpha}`:"";return`rgb(${r(t,"--polycss-preview-r")} ${r(o,"--polycss-preview-g")} ${r(i,"--polycss-preview-b")}${s})`}function Ii(e,n,t){if(!e.plan||e.kind==="atlas"||e.plan.texture)return!1;let o=e.element,i=e.plan.normal,r=_i(n.color??"#cccccc"),s=!1;return s=me(o,"--pnx",i[0].toFixed(4))||s,s=me(o,"--pny",i[1].toFixed(4))||s,s=me(o,"--pnz",i[2].toFixed(4))||s,s=me(o,"--psr",(r.r/255).toFixed(4))||s,s=me(o,"--psg",(r.g/255).toFixed(4))||s,s=me(o,"--psb",(r.b/255).toFixed(4))||s,s=me(o,"--plam",Yl)||s,s=me(o,"--polycss-preview-r",Xl)||s,s=me(o,"--polycss-preview-g",ql)||s,s=me(o,"--polycss-preview-b",Zl)||s,s=me(o,"--polycss-paint",Ql(t))||s,o.style.getPropertyValue("color")&&(o.style.removeProperty("color"),s=!0),s}function Kl(e){e.style.removeProperty("--pnx"),e.style.removeProperty("--pny"),e.style.removeProperty("--pnz"),e.style.removeProperty("--psr"),e.style.removeProperty("--psg"),e.style.removeProperty("--psb"),e.style.removeProperty("--plam"),e.style.removeProperty("--polycss-preview-r"),e.style.removeProperty("--polycss-preview-g"),e.style.removeProperty("--polycss-preview-b"),e.style.removeProperty("--polycss-paint")}var On=class{constructor(){this.groundSvg=null;this.groundVisible=!1;this.currentGroundCssZ=null;this.shadowRoot=null}};function Hi(e,n,t){let o=e.shadowRoot;if(o||(o=n.createElement("div"),o.setAttribute("class","polycss-shadows"),o.style.position="absolute",o.style.top="0",o.style.left="0",o.style.width="0",o.style.height="0",o.style.transformStyle="preserve-3d",o.style.pointerEvents="none",e.shadowRoot=o),o.parentNode!==t){let i=t.firstChild;i?t.insertBefore(o,i):t.appendChild(o)}return o}function Fi(e){e.groundSvg?.parentNode&&e.groundSvg.parentNode.removeChild(e.groundSvg),e.groundSvg=null,e.groundVisible=!1}function zi(e){e.groundSvg&&e.groundVisible&&(e.groundSvg.style.display="none",e.groundVisible=!1)}function Bi(e){return{host:e.host,doc:e.doc,cameraEl:e.cameraEl,sceneEl:e.sceneEl,camera:e.camera,layoutScale:e.layoutScale,options:{current:e.options},meshes:new Set,meshAutoCounter:{next:0},autoCenter:{offset:[0,0,0]},bboxCenterCssCache:{value:null},shadowSvgState:new On,receiverShadowCache:new Map,receiverShadowCacheKey:new Map,casterItemsCache:new Map,casterItemsCacheKey:new Map,shadowDragActive:!1}}import{buildParametricCasterOverride as Jl,buildSharedEdgeMap as ec,computeMergedReceiverShadows as tc,meshScaleVec3 as Gi,prepareCasterEdgeOwners as nc,prepareCasterPolyItems as oc,prepareReceiverFacePlanes as rc}from"@layoutit/polycss-core";function Vi(e){for(let n of e)n.svg&&n.svg.parentNode&&n.svg.parentNode.removeChild(n.svg),n.svg=null}function Ni(e,n){if(n){let t=e.receiverShadowCache.get(n);t&&Vi(t),e.receiverShadowCache.delete(n),e.receiverShadowCacheKey.delete(n)}else{for(let t of e.receiverShadowCache.values())Vi(t);e.receiverShadowCache.clear(),e.receiverShadowCacheKey.clear()}}function ji(e,n){n?(e.casterItemsCache.delete(n),e.casterItemsCacheKey.delete(n)):(e.casterItemsCache.clear(),e.casterItemsCacheKey.clear())}function $i(e){Fi(e.shadowSvgState),Ui(e)}function Wi(e){return e.handle.id??e.autoMeshId}var Ki="http://www.w3.org/2000/svg",Dn=new WeakMap,Yi=new WeakMap,Xi=new WeakMap,qi=new WeakMap,Zi=new WeakMap;function ic(e){let n=Dn.get(e);return n||(n=new Map,Dn.set(e,n)),n}function sc(e,n){let t=ic(e),o=t.get(n);return o||(o=new Map,t.set(n,o)),o}function Ji(e){let n=Dn.get(e);if(n){for(let t of n.values()){for(let o of t.values())o.svg&&o.svg.parentNode&&o.svg.parentNode.removeChild(o.svg);t.clear()}n.clear()}}function Fo(e){Ji(e),Dn.delete(e)}function Ui(e){for(let n of e.meshes)Fo(n)}function es(e,n,t,o,i,r,s,c,l,d,p){let y=e.options.current,{receiverShadowCache:g,receiverShadowCacheKey:b,casterItemsCache:x,casterItemsCacheKey:v}=e,h=o.handle.transform.position??[0,0,0],C=o.handle.transform.rotation??[0,0,0],R=o.polygons.some(u=>u.texture!==void 0),I=Gi(o.handle.transform.scale),z=o.bboxCenterCss,D=y.shadow?.lift??.001,X=`${o.polygons.length}|${i.size}|${h.join(",")}|${C.join(",")}|${I.join(",")}|${z?z.join(","):"n"}|${D}`,q=g.get(o);(q===void 0||b.get(o)!==X)&&(q=rc(o.polygons,h,o.handle.transform.scale,i,D,C),g.set(o,q),b.set(o,X),Ji(o));let M=[];for(let u of n){let m=u.handle.transform.position??[0,0,0],A=u.handle.transform.rotation??[0,0,0],k=Gi(u.handle.transform.scale),N=u.bboxCenterCss,Y=`${u.polygons.length}|${m.join(",")}|${A.join(",")}|${k.join(",")}|${N?N.join(","):"n"}`,w=x.get(u);(w===void 0||v.get(u)!==Y)&&(w=oc(u.polygons,m,u.handle.transform.scale,()=>!0,A),x.set(u,w),v.set(u,Y));let K;if(u===o){let Q=Yi.get(u);(Q===void 0||Xi.get(u)!==u.polygons)&&(Q=ec(u.polygons),Yi.set(u,Q),Xi.set(u,u.polygons)),K=Q}let J;if(u!==o&&(u.polygons.length>=40||p.points.length>0)){let Q=qi.get(u);(Q===void 0||Zi.get(u)!==Y)&&(Q=nc(u.polygons,m,u.handle.transform.scale,A),qi.set(u,Q),Zi.set(u,Y)),J=Q}let ee,fe;if(y.shadow?.parametric){let Q=u.shadowDefinition??y.shadow.definition??16,pe=e.shadowDragActive?Math.min(Q,y.shadow.dragDefinition??Q):Q,he=Jl({polysWorldVerts:w.map(be=>be.wv),lightDir:r,definition:pe,isSelf:u===o,style:y.shadow.style,pointLights:p.points.map(be=>({position:be.lightPos,index:be.index}))});ee=he.overrideSilhouette,fe=he.overridePointSilhouettes}M.push({id:u,items:w,selfShadowEdgeMap:K,edgeOwners:J,casterPolygonCount:u.polygons.length,overrideSilhouette:ee,overridePointSilhouettes:fe})}let V={rotX:e.camera.state.rotX,rotY:e.camera.state.rotY,meshRotation:o.handle.transform.rotation},B=tc({receiverPlanes:q,receiverPolygons:o.polygons,receiverHasTexture:R,casters:M,lightDir:r,runDirectional:p.runDirectional,pointPasses:p.points,allPointLights:p.allPointLights,cameraRot:V,ambientLight:y.ambientLight,directionalLight:y.directionalLight,shadow:{color:y.shadow?.color,opacity:d,maxExtend:y.shadow?.maxExtend}}),F=sc(o,"m"),re=new Set,P=!!y.debugShadowAttrs,L=Hi(e.shadowSvgState,e.doc,e.sceneEl);for(let u of B){re.add(u.faceIndex);let m=F.get(u.faceIndex);m||(m={svg:null,visible:!1,width:-1,height:-1,matrixCss:""},F.set(u.faceIndex,m));let A=m.svg;A||(A=e.doc.createElementNS(Ki,"svg"),A.setAttribute("class","polycss-shadow polycss-shadow-svg polycss-shadow-receiver"),L.appendChild(A),m.svg=A),m.visible||(A.style.display="block"),m.visible=!0,(m.width!==u.width||m.height!==u.height)&&(A.setAttribute("width",String(u.width)),A.setAttribute("height",String(u.height)),A.setAttribute("viewBox",`0 0 ${u.width} ${u.height}`),m.width=u.width,m.height=u.height);let k=`position:absolute;top:0;left:0;display:block;overflow:hidden;transform-origin:0 0;pointer-events:none;will-change:transform;opacity:${u.svgOpacity.toFixed(4)};transform:${u.matrixCss}`;for(m.matrixCss!==k&&(A.setAttribute("style",k),m.matrixCss=k),P&&(A.setAttribute("data-poly-shadow-type","receiver"),A.setAttribute("data-poly-shadow-receiver",Wi(o)),A.setAttribute("data-poly-shadow-receiver-face",String(u.faceIndex)),A.setAttribute("data-poly-shadow-receiver-polys",JSON.stringify(u.memberPolyIndices)),A.setAttribute("data-poly-shadow-layers",String(u.layers.length)));A.firstChild;)A.removeChild(A.firstChild);u.baseFill&&u.baseD&&A.appendChild(Qi(e.doc,u.baseD,u.baseFill,!1,1));for(let N of u.layers)A.appendChild(Qi(e.doc,N.d,N.fill,N.multiply,N.opacity))}for(let[u,m]of F)re.has(u)||m.svg&&m.visible&&(m.svg.style.display="none",m.visible=!1)}function Qi(e,n,t,o,i){let r=e.createElementNS(Ki,"path");return r.setAttribute("d",n),r.setAttribute("fill",t),r.setAttribute("fill-rule","nonzero"),i!==1&&r.setAttribute("opacity",i.toFixed(4)),o&&(r.style.mixBlendMode="multiply"),r}var ts=Symbol.for("polycss.animation.triangleFrameTarget");var bc=750;var Hn=Promise.resolve();function rs(e){return!Object.prototype.hasOwnProperty.call(e,"seamBleed")||e.seamBleed!==void 0?e:{...e,seamBleed:ss}}var xc={key:"non-cullable",normal:[1,1,0]};function is(){return[xc]}function Bo(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&&Oo(e.ownerDocument),e.ownerDocument?.defaultView&&e.ownerDocument.defaultView.getComputedStyle(e).position==="static"&&(e.style.position="relative");let{camera:o,...i}=n,r=rs({seamBleed:ss,...i}),s=Ti(e),c=[0,0,0],l=e.ownerDocument??document,d=l.createElement("div");d.className="polycss-camera",F(d,r),e.appendChild(d);let p=l.createElement("div");p.className="polycss-scene",p.setAttribute("aria-hidden","true"),re(p,r),d.appendChild(p);let y=Bi({host:e,doc:l,cameraEl:d,sceneEl:p,camera:t,layoutScale:s,options:r}),g=y.meshes,b=new WeakMap,x=y.shadowSvgState,v=()=>zi(x),h=()=>$i(y),C=null,R=null,I=140,z=0,D=80;function X(a){if(!r.shadow?.followAnimation||!a.castShadow&&!a.receiveShadow)return;let f=typeof performance<"u"?performance.now():Date.now();f-z<D||(z=f,M(),Re())}function q(a){if(!a)return null;let f=Math.hypot(a[0],a[1],a[2]);if(!Number.isFinite(f)||f<=0)return null;let S=Math.round(a[0]/f*100)/100,E=Math.round(a[1]/f*100)/100,j=Math.round(a[2]/f*100)/100;return`${S}|${E}|${j}`}function M(){C=null}let V=a=>Ni(y,a),B=a=>ji(y,a);function F(a,f){let S=pc(t);a.style.perspective=S.appliedPerspectiveStyle,a.dataset.polycssCameraProjection=S.projection,a.dataset.polycssCameraPerspective=S.perspectiveStyle,a.dataset.polycssCameraAppliedPerspective=S.appliedPerspectiveStyle,a.dataset.polycssCameraZoom=String(S.state.zoom),a.dataset.polycssCameraDistance=String(S.state.distance),a.dataset.polycssCameraRotX=String(S.state.rotX),a.dataset.polycssCameraRotY=String(S.state.rotY),a.dataset.polycssCameraTarget=S.state.target.join(",")}function re(a,f){Ei(a,s),a.style.transform=Do(t,c,s),Oi(a,f)}function P(a){a.style.transform=Do(t,c,s)}function L(a){a.textureReadyPromise=Hn,a.voxelRenderer?.dispose(),a.voxelRenderer=void 0,k(a.rendered,a.disposeAtlas),a.disposeAtlas=void 0,a.rendered.length=0,a.renderedByPolygonIndex=[],a.cameraCullGroups=[],a.cameraCullSignature="",a.solidLightingPreviewPrepared=!1,a.solidLightingPreviewActive=!1,A(a);for(let f of Array.from(a.wrapper.children))f instanceof HTMLElement&&f.classList.contains("polycss-bucket")&&f.remove();a.hasBuckets=!1}function u(a){for(let f of Array.from(a.wrapper.childNodes)){if(!(f instanceof HTMLElement))return f;if(f.classList.contains("polycss-bucket")||f.classList.contains("polycss-shadow"))continue;let S=f.tagName.toLowerCase();if(!(S==="b"||S==="i"||S==="s"||S==="u"||S==="q"))return f}return null}function m(a,f,S){S?.parentNode===a.wrapper?a.wrapper.insertBefore(f,S):a.wrapper.appendChild(f)}function A(a){for(let f of a.shadowRendered)f.parentNode&&f.parentNode.removeChild(f);a.shadowRendered.length=0,h()}function k(a,f){f?.();for(let S of a){try{S.dispose()}catch{}S.element.parentNode&&S.element.parentNode.removeChild(S.element)}}function N(a,f,S,E){a.rendered=f,a.renderedByPolygonIndex=[];for(let j of f)a.renderedByPolygonIndex[j.polygonIndex]=j;a.disposeAtlas=S,a.textureReadyPromise=E?E.catch(()=>{}):Hn,a.solidLightingPreviewPrepared=!1}function Y(a,f){let S=a.renderedByPolygonIndex[f];return S?.polygonIndex===f?S:void 0}function w(a){for(let f of Array.from(a.wrapper.children))f instanceof HTMLElement&&f.classList.contains("polycss-bucket")&&f.remove();a.hasBuckets=!1;for(let f of a.rendered)f.element.parentNode&&f.element.parentNode.removeChild(f.element)}function K(a,f){let S=a.polygons[f.polygonIndex];return a.stableDom&&S?os(S):f.plan?.normal??(S?os(S):null)}function J(a){if(!he(a))return a.rendered;let f=ee(a);return a.rendered.filter(S=>fe(a,S,zo,f))}function ee(a){return{rotX:t.state.rotX,rotY:t.state.rotY,meshRotation:a.handle.transform.rotation}}function fe(a,f,S=zo,E=ee(a)){let j=K(a,f);return j===null||gc(j,E,S)}function Q(a){if(a.excludeFromAutoCenter){a.cameraCullGroups=[];return}let f=new Map;for(let S of a.rendered){let E=K(a,S);if(!E)continue;if(!mc(E)){a.cameraCullGroups=is();return}let j=lc(E);if(!f.has(j)&&(f.set(j,E),f.size>ac)){a.cameraCullGroups=is();return}}a.cameraCullGroups=Array.from(f,([S,E])=>({key:S,normal:E}))}function pe(a){return he(a)?cc(a.cameraCullGroups,ee(a)):"all"}function he(a){return!a.excludeFromAutoCenter&&fc(a.cameraCullGroups)}function be(a){a.cameraCullSignature=he(a)?pe(a):"all"}function Ge(a,f){let S=new Array(a.rendered.length),E=!1,j=ee(a);for(let Z=0;Z<a.rendered.length;Z+=1){let ie=a.rendered[Z],ye=fe(a,ie,f,j);S[Z]=ye}let H=null,_=null,$=()=>{if(!(!H||!_)){if(H===_)H.remove();else{let Z=l.createRange();Z.setStartBefore(H),Z.setEndAfter(_),Z.deleteContents(),Z.detach()}H=null,_=null,E=!0}};for(let Z=0;Z<a.rendered.length;Z+=1){let ie=a.rendered[Z];!S[Z]&&ie.element.parentNode===a.wrapper?(_&&_.nextSibling===ie.element||($(),H=ie.element),_=ie.element):$()}$();let G=Z=>{for(let ie=Z;ie<a.rendered.length;ie+=1){let ye=a.rendered[ie].element;if(ye.parentNode===a.wrapper)return ye}return u(a)},ue=-1,ae=Z=>{if(ue<0)return;let ie=l.createDocumentFragment();for(let ye=ue;ye<Z;ye+=1){let Pe=a.rendered[ye];lt(a,Pe),ie.appendChild(Pe.element)}m(a,ie,G(Z)),ue=-1,E=!0};for(let Z=0;Z<a.rendered.length;Z+=1){let ie=a.rendered[Z];S[Z]&&ie.element.parentNode!==a.wrapper?ue<0&&(ue=Z):ae(Z)}return ae(a.rendered.length),E}function we(a,f=!1){if(a.voxelRenderer){f?a.voxelRenderer.render(ee(a)):a.voxelRenderer.syncCamera(ee(a)),a.cameraCullSignature="voxel-direct";return}if(!he(a)){let j=a.cameraCullSignature!=="all";a.cameraCullSignature="all",j&&Pn(a);return}if(a.hasBuckets){Je(a,f);return}let S=pe(a);if(!f&&S===a.cameraCullSignature)return;let E=Ge(a,zo);a.cameraCullSignature=S,E&&Le(a)}function Je(a,f=!1){let S=he(a)?pe(a):"all";!f&&S===a.cameraCullSignature||Pn(a)}function Ut(a,f){return K(a,f)}function lt(a,f){if(r.textureLighting!=="dynamic")return;let S=Ut(a,f);S&&(f.element.style.setProperty("--pnx",S[0].toFixed(4)),f.element.style.setProperty("--pny",S[1].toFixed(4)),f.element.style.setProperty("--pnz",S[2].toFixed(4)))}function et(a){w(a),a.hasBuckets=!1;let f=a.skipBucketNormalCleanupOnce;a.skipBucketNormalCleanupOnce=!1;let S=l.createDocumentFragment(),E=r.textureLighting==="dynamic"&&!a.stableDom,j=new Map,H=[];for(let _ of J(a)){let $=a.polygons[_.polygonIndex],G=E&&$?Ai($):null;if(!G){H.push(_);continue}let ue=G.key+"|"+($.color??""),ae=j.get(ue);ae||(ae={vec:G.vec,items:[]},j.set(ue,ae)),ae.items.push(_)}for(let _ of H)lt(a,_),S.appendChild(_.element);for(let _ of j.values()){if(_.items.length<2){for(let G of _.items)lt(a,G),S.appendChild(G.element);continue}let $=l.createElement("div");$.className="polycss-bucket",a.hasBuckets=!0,$.style.setProperty("--pnx",String(_.vec[0])),$.style.setProperty("--pny",String(_.vec[1])),$.style.setProperty("--pnz",String(_.vec[2]));for(let G of _.items)$.appendChild(G.element),(!f||G.kind==="triangle")&&(G.element.style.removeProperty("--pnx"),G.element.style.removeProperty("--pny"),G.element.style.removeProperty("--pnz"));S.appendChild($)}m(a,S,u(a)),be(a)}function Zn(){return new Promise(a=>setTimeout(a,0))}async function Qn(a,f){if(r.textureLighting==="dynamic"&&!a.stableDom)return et(a),!f();w(a);let E=l.createDocumentFragment(),j=u(a),H=0;for(let _ of J(a)){if(f())return!1;lt(a,_),E.appendChild(_.element),H++,H%bc===0&&(m(a,E,j),E=l.createDocumentFragment(),await Zn())}return E.childNodes.length>0&&m(a,E,j),be(a),!f()}function Gt(a,f){let S=r.textureLighting==="dynamic",E=r.directionalLight?.direction,j=f&&(f[0]!==0||f[1]!==0||f[2]!==0);if(!S||!j||!E){if(a.lightOverrideSignature==="clear")return;a.wrapper.style.removeProperty("--plx"),a.wrapper.style.removeProperty("--ply"),a.wrapper.style.removeProperty("--plz"),a.lightOverrideSignature="clear";return}let H=In(E,f),_=un(H),$=Math.hypot(_[0],_[1],_[2])||1,G=(_[0]/$).toFixed(2),ue=(_[1]/$).toFixed(2),ae=(_[2]/$).toFixed(2),Z=`${G}|${ue}|${ae}`;a.lightOverrideSignature!==Z&&(a.wrapper.style.setProperty("--plx",G),a.wrapper.style.setProperty("--ply",ue),a.wrapper.style.setProperty("--plz",ae),a.lightOverrideSignature=Z)}function xn(a){let f=!1;for(let S of a.rendered){if(!S.plan||S.kind==="atlas"||S.plan.texture)continue;let E=a.polygons[S.polygonIndex];E&&(f=Ho(S,E,r)||f)}return a.solidLightingPreviewPrepared=!1,a.solidLightingPreviewActive=!1,f}function W(a){if((r.textureLighting??"baked")!=="baked")return!1;let f=!1;for(let S of a.rendered){if(!S.plan||S.kind==="atlas"||S.plan.texture)continue;let E=a.polygons[S.polygonIndex];E&&(Ii(S,E,S.plan.shadedColor),f=!0)}return a.solidLightingPreviewPrepared=f,f}function le(a){return(r.textureLighting??"baked")!=="baked"||!a.solidLightingPreviewPrepared&&!W(a)?!1:(a.solidLightingPreviewActive=!0,!0)}function ce(a){return a.kind==="atlas"||!!a.plan?.texture}function Me(){if((r.textureLighting??"baked")!=="baked")return!1;let a=!1;for(let f of g)a=xn(f)||a,f.rendered.some(ce)&&(Jn(f),a=!0);p.style.removeProperty(zt);for(let f of g)Pt(f.wrapper),f.solidLightingPreviewActive=!1;return Pt(p),a}function Yt(){p.style.removeProperty(zt);for(let a of g)a.solidLightingPreviewActive&&(xn(a),Pt(a.wrapper));(r.textureLighting??"baked")!=="dynamic"&&(Pt(p),M(),Re())}function Xt(a,f){let S=a.handle.transform.rotation,E=f.directionalLight?.direction??r.directionalLight?.direction;if(!(S&&(S[0]!==0||S[1]!==0||S[2]!==0))||!E){Pt(a.wrapper);return}let H=In(E,S);_n(a.wrapper,{...r,...f,directionalLight:{...r.directionalLight,...f.directionalLight,direction:H}})}function gt(a){if((r.textureLighting??"baked")!=="baked")return!1;_n(p,{...r,...a}),!a.skipShadows&&a.directionalLight?.direction&&Re(a.directionalLight.direction,{progressive:!0});let f=!1;for(let S of g)Xt(S,a),f=le(S)||f;return f?me(p,zt,"1"):p.style.removeProperty(zt),f}function Te(a,f,S){let E=a.polygons[f];if(!E)return!1;let j=Y(a,f);if(!j)return!1;let H=r.textureLighting??"baked";return H==="dynamic"?(Di(j.element,S),!0):H==="baked"?Ho(j,E,r):!1}function Fe(a,f){let S=a.polygons[f];if(!S)return!1;let E=Y(a,f);return E?(ve(E.element,S,f),!0):!1}function Ye(a,f,S){return!(S.length===0||!S.every(E=>E==="color"||E==="data")||S.includes("color")&&!Te(a,f,a.polygons[f]?.color)||S.includes("data")&&!Fe(a,f))}function Le(a){M(),Re()}function Re(a,f){let S=r.shadow,E=!!f?.progressive&&!!S?.parametric&&S?.dragDefinition!=null&&S.dragDefinition<(S.definition??16);y.shadowDragActive=E,E&&(R&&clearTimeout(R),R=setTimeout(()=>{R=null,y.shadowDragActive=!1,M(),Re()},I));let j=[];for(let te of g)!te.disposed&&te.castShadow&&j.push(te);if(j.length===0){h(),C=null;return}let H=r.shadow?.color??"#000000",_=r.shadow?.opacity??.25,$=yc(H)?.rgb??[0,0,0],G=$[0],ue=$[1],ae=$[2],Z=a??r.directionalLight?.direction??[.4,-.7,.59],ie=un(Z),ye=r.textureLighting==="dynamic"?[]:r.pointLights??[],Pe=ye.map(te=>({position:Ci(te.position),color:te.color,intensity:te.intensity})),ze=ye.map((te,O)=>te.castShadow?O:-1).filter(te=>te>=0),T=ze.map(te=>Pe[te].position),tt=r.directionalLight,ct=!!tt?.direction&&(tt.intensity??1)>0,nt=q(ie),Xe=T.map(te=>`${Math.round(te[0])},${Math.round(te[1])},${Math.round(te[2])}`).join(";"),Be=nt===null&&Xe===""?null:`${nt??""}|${Xe}`;if(Be!==null&&Be===C)return;let ut=new Map;for(let te of j)ut.set(te,ns(te.polygons,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}));let ot=new Map;for(let te of g)te.disposed||!te.receiveShadow||ot.set(te,new Set);v();for(let te of g){if(te.disposed||!te.receiveShadow)continue;let O=ot.get(te)??new Set;es(y,j,ut,te,O,ie,G,ue,ae,_,{runDirectional:ct,points:T.map((U,se)=>({lightPos:U,index:ze[se]})),allPointLights:Pe})}C=Be}function Pn(a){if(a.voxelRenderer){a.voxelRenderer.render(ee(a)),a.cameraCullSignature="voxel-direct";return}A(a),et(a),Le(a)}function Kn(a,f){if(!f||!a.polygons||a.polygons.length<2)return;let S=Math.hypot(f[0],f[1],f[2]);if(!Number.isFinite(S)||S<=0)return;let E=f[0]/S,j=f[1]/S,H=f[2]/S,_=Z=>Math.round(Z*1e3)/1e3,$=`${_(E)},${_(j)},${_(H)}`,G=a.lightOcclusionCache;if(G&&G.polygons===a.polygons&&G.lightDirKey===$)return G.occluded;let ue=G&&G.polygons===a.polygons?G.dedupDropped:ns(a.polygons,{normalTolerance:.1,distanceTolerance:.12,overlapFraction:.98,preserveDoubleSidedBackfaces:!1}),ae=dc(a.polygons,[E,j,H],ue);return a.lightOcclusionCache={polygons:a.polygons,lightDirKey:$,occluded:ae,dedupDropped:ue},ae}function vn(a){return!!a.voxelSource&&r.textureLighting!=="dynamic"&&!a.stableDom&&!a.castShadow}function At(a){let f=r.pointLights;if(!f||f.length===0)return;let S=a.handle.transform.position??[0,0,0],E=a.handle.transform.rotation??[0,0,0],j=E[0]!==0||E[1]!==0||E[2]!==0;return f.map(H=>{let _=[H.position[0]-S[0],H.position[1]-S[1],H.position[2]-S[2]],$=j?In(_,E):_;return{...H,position:$}})}function _e(a,f){L(a);let S=r.directionalLight,E=f?{...S,direction:f}:S,j=ft(E),H=void 0;if(vn(a)){let G=vi({doc:l,wrapper:a.wrapper,polygons:a.parseResult.polygons,directionalLight:j,ambientLight:r.ambientLight});if(G){a.voxelRenderer=G,G.render(ee(a)),a.cameraCullSignature="voxel-direct",a.textureReadyPromise=Hn;return}}let _={doc:l,directionalLight:j,pointLights:At(a),ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,strategies:r.strategies,lightOccludedPolyIndices:H},$=a.stableDom?(()=>{let G=bt(a.polygons,_);return vt(a.wrapper,G),Ft(a.polygons,{..._,solidPaintDefaults:G})??xt(a.polygons,{..._,solidPaintDefaults:G})})():xt(a.polygons,{..._,computeSolidPaintDefaults:!0,skipDynamicNormalVars:r.textureLighting==="dynamic"});a.stableDom||vt(a.wrapper,$.solidPaintDefaults??{}),N(a,$.rendered,$.dispose,$.pagesReady),a.skipBucketNormalCleanupOnce=r.textureLighting==="dynamic"&&!a.stableDom,Q(a),et(a),Le(a)}function Jn(a,f){if(a.rendered.length===0||a.voxelRenderer||a.stableDom||vn(a)){_e(a,f);return}if(a.rendered[0]?.element.parentNode===null){_e(a,f);return}let S=r.directionalLight,E=f?{...S,direction:f}:S,j=ft(E),H={doc:l,directionalLight:j,pointLights:At(a),ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,strategies:r.strategies,computeSolidPaintDefaults:!0,skipDynamicNormalVars:r.textureLighting==="dynamic"},_=xt(a.polygons,H),$=()=>{a.rebakeInFlight=!1;let ae=a.rebakeQueuedLightDir;ae!==null&&(a.rebakeQueuedLightDir=null,Jn(a,ae))},G=()=>{if(a.disposed){_.dispose(),$();return}if(_.rendered.length!==a.rendered.length){_.dispose(),_e(a,f),$();return}for(let ie of _.rendered){let ye=a.renderedByPolygonIndex[ie.polygonIndex];if(!ye)continue;let Pe=ie.element.getAttribute("style");Pe!==null&&ye.element.setAttribute("style",Pe)}let ae=_.solidPaintDefaults;ae&&vt(a.wrapper,ae);let Z=a.disposeAtlas;a.disposeAtlas=_.dispose,Z&&(typeof requestAnimationFrame=="function"?ye=>{requestAnimationFrame(ye)}:ye=>{setTimeout(ye,0)})(Z),Le(a),$()},ue=_.pagesReady;ue&&typeof ue.then=="function"?(a.textureReadyPromise=ue.catch(()=>{}),ue.then(()=>Hs(_.rendered)).then(Fs).then(G,()=>{_.dispose(),a.disposed||_e(a,f),$()})):G()}function Is(a,f){if(a.rebakeInFlight){a.rebakeQueuedLightDir=f;return}a.rebakeInFlight=!0,Jn(a,f)}function Hs(a){let f=new Set;for(let S of a){let E=S.element.getAttribute("style")??"",j=/url\((blob:[^)]+)\)/g,H;for(;(H=j.exec(E))!==null;)f.add(H[1])}return Array.from(f)}function Fs(a){return a.length===0||typeof Image>"u"?Promise.resolve():Promise.all(a.map(f=>{let S=new Image;S.src=f;let E=S.decode?.();return E?E.catch(()=>{}):Promise.resolve()})).then(()=>{})}function ht(){let a=1/0,f=!1;for(let H of g)if(!H.disposed&&H.receiveShadow){f=!0;break}for(let H of g){if(H.disposed||!(f?H.receiveShadow:H.castShadow))continue;let $=H.handle.transform.position?.[2]??0;for(let G of H.polygons)for(let ue of G.vertices){let ae=ue[2]+$;ae<a&&(a=ae)}}if(!Number.isFinite(a)){let H=x.currentGroundCssZ!==null;x.currentGroundCssZ=null,H&&(h(),M());return}let S=r.shadow?.lift??.05,E=(a+S)*cn,j=x.currentGroundCssZ;x.currentGroundCssZ=E,j!==E&&(M(),Re())}async function zs(a,f){L(a);let S=ft(r.directionalLight),E={doc:l,directionalLight:S,pointLights:At(a),ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,strategies:r.strategies,lightOccludedPolyIndices:void 0},j=a.stableDom?Ft(a.polygons,E):null;if(j){let $=bt(a.polygons,E);return vt(a.wrapper,$),N(a,j.rendered,j.dispose,j.pagesReady),Q(a),et(a),Le(a),!f()}let H=await sn(a.polygons,{...E,skipDynamicNormalVars:r.textureLighting==="dynamic"},f);if(f())return H.dispose(),!1;vt(a.wrapper,H.solidPaintDefaults),N(a,H.rendered,H.dispose,H.pagesReady),a.skipBucketNormalCleanupOnce=r.textureLighting==="dynamic"&&!a.stableDom,Q(a);let _=await Qn(a,f);return _&&Le(a),_}function yt(){let a=c,f=[0,0,0];if(r.autoCenter){let S=[];for(let E of g)!E.disposed&&!E.excludeFromAutoCenter&&S.push(...E.polygons);if(S.length>0){let E=uc(S);f=[(E.min[0]+E.max[0])/2,(E.min[1]+E.max[1])/2,(E.min[2]+E.max[2])/2]}}a[0]===f[0]&&a[1]===f[1]&&a[2]===f[2]||(c=f,y.autoCenter.offset=f,re(p,r))}function Bs(a,f={}){let E=(p.ownerDocument??document).createElement("div");E.className="polycss-mesh",f.id&&E.setAttribute("data-poly-mesh-id",f.id);let j=`polycss-mesh-${y.meshAutoCounter.next++}`;E.setAttribute("data-poly-mesh-index",j);let H={...f},_=f.merge!==!1,$=!!f.stableDom,G=0,ue=kn(H);ue&&(E.style.transform=ue);let ae=(O,U)=>a.voxelSource?O:U?hc(O,{meshResolution:f.meshResolution}):($||f.excludeFromAutoCenter,O),Z=ae(a.polygons,_),ie=null;function ye(){let O=kn(H);E.style.transform=O??""}function Pe(O){if(O.length===0){ie=null,ze&&(ze.bboxCenterCss=null),ye();return}let U=1/0,se=1/0,de=1/0,Ee=-1/0,ne=-1/0,ge=-1/0;for(let Ze of O)for(let Ne of Ze.vertices)Ne[0]<U&&(U=Ne[0]),Ne[0]>Ee&&(Ee=Ne[0]),Ne[1]<se&&(se=Ne[1]),Ne[1]>ne&&(ne=Ne[1]),Ne[2]<de&&(de=Ne[2]),Ne[2]>ge&&(ge=Ne[2]);if(!Number.isFinite(U)){ie=null,ze&&(ze.bboxCenterCss=null),ye();return}let Ve=(se+ne)/2*cn,qe=(U+Ee)/2*cn,Oe=(de+ge)/2*cn;ie=[Ve,qe,Oe],ze&&(ze.bboxCenterCss=ie),ye()}let ze=null;Pe(Z),p.appendChild(E);let T={handle:void 0,wrapper:E,parseResult:a,rendered:[],renderedByPolygonIndex:[],shadowRendered:[],polygons:Z,voxelSource:a.voxelSource,disposed:!1,stableDom:$,hasBuckets:!1,skipBucketNormalCleanupOnce:!1,excludeFromAutoCenter:!!f.excludeFromAutoCenter,castShadow:!!f.castShadow,bboxCenterCss:ie,receiveShadow:!!f.receiveShadow,shadowDefinition:f.shadowDefinition,cameraCullGroups:[],cameraCullSignature:"",lightOverrideSignature:"clear",stableTriangleColorFrame:0,solidLightingPreviewPrepared:!1,solidLightingPreviewActive:!1,bakedRotation:f.rotation?[...f.rotation]:[0,0,0],autoMeshId:j,rebakeInFlight:!1,rebakeQueuedLightDir:null,textureReadyPromise:Hn},tt=null,ct=0,nt=-1,Xe=null;function Be(){tt=null,Xe=null,nt=-1}function ut(){let O=tt;if(!O||O.polygonCount!==T.polygons.length)return T.polygons;if(Xe&&nt===ct)return Xe;let U=O.vertices,se=new Array(O.polygonCount);for(let de=0;de<O.polygonCount;de++){let Ee=T.polygons[de],ne=de*9;se[de]={...Ee,color:O.colors?.[de]??Ee.color,vertices:[[U[ne],U[ne+1],U[ne+2]],[U[ne+3],U[ne+4],U[ne+5]],[U[ne+6],U[ne+7],U[ne+8]]]}}return Xe=se,nt=ct,se}function ot(O,U){let se=O?.stableTriangleUpdateMode==="color-only";T.stableTriangleColorFrame++;let de=T.stableDom&&!U;if(de||Pe(T.polygons),T.stableDom&&!T.hasBuckets){let Ee={doc:l,directionalLight:ft(r.directionalLight),ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed},ne=T.rendered.length===T.polygons.length&&T.rendered.every(Oe=>Oe.kind==="triangle"),ge=T.stableDom&&!U,Ve=ne||ge?{}:bt(T.polygons,Ee);ne||vt(T.wrapper,Ve);let qe={...Ee,solidPaintDefaults:Ve,optimizeStableTriangleStyle:!0,stableTriangleDebug:O?.stableTriangleDebug,stableTriangleUpdateMode:O?.stableTriangleUpdateMode,stableTriangleColorPolicy:O?.stableTriangleColorPolicy,stableTriangleColorSteps:O?.stableTriangleColorSteps,stableTriangleColorFreezeFrames:O?.stableTriangleColorFreezeFrames,stableTriangleColorBudget:O?.stableTriangleColorBudget,stableTriangleColorMaxAge:O?.stableTriangleColorMaxAge,stableTriangleColorMaxStep:O?.stableTriangleColorMaxStep,stableTriangleMatrixDecimals:O?.stableTriangleMatrixDecimals,stableTriangleColorFrame:T.stableTriangleColorFrame};if(ln(T.rendered,T.polygons,qe))return se||(Q(T),we(T,!0),U&&yt()),!0}return de&&Pe(T.polygons),!1}let te={get polygons(){return ut()},set polygons(O){Be(),T.polygons=O},element:E,id:f.id,get transform(){return H},remove(){G++,E.parentNode&&E.parentNode.removeChild(E),L(T),g.delete(T),b.delete(E),V(T),B(T),yt(),ht()},setPolygons(O,U){G++,_=U?.merge??_,$=U?.stableDom??$,T.stableDom=$,T.voxelSource=void 0,T.polygons=ae(O,_),B(T),V(T),Be(),te.polygons=T.polygons;let se=U?.recomputeAutoCenter??!0;X(T),!ot(U,se)&&(_e(T),se&&yt())},[ts](O,U){let se=U?.merge??_,de=U?.stableDom??$;if(!O.solidTriangles||!de||se||f.meshResolution!==void 0||T.hasBuckets||O.polygonCount!==T.polygons.length||O.vertices.length<O.polygonCount*9||T.rendered.length!==O.polygonCount)return!1;for(let ge=0;ge<T.rendered.length;ge++){let Ve=T.rendered[ge],qe=T.polygons[ge];if(Ve?.kind!=="triangle"||Ve.polygonIndex!==ge||!qe||qe.vertices.length!==3||qe.texture||qe.material?.texture)return!1}let Ee=U?.recomputeAutoCenter??!0;if(!Ee){let ge=T.stableTriangleColorFrame+1,Ve={doc:l,directionalLight:ft(r.directionalLight),ambientLight:r.ambientLight,textureLighting:r.textureLighting,textureQuality:r.textureQuality,textureLeafSizing:r.textureLeafSizing,textureImageRendering:r.textureImageRendering,textureBackend:r.textureBackend,textureProjection:r.textureProjection,seamBleed:r.seamBleed,solidPaintDefaults:{},optimizeStableTriangleStyle:!0,stableTriangleDebug:U?.stableTriangleDebug,stableTriangleUpdateMode:U?.stableTriangleUpdateMode,stableTriangleColorPolicy:U?.stableTriangleColorPolicy,stableTriangleColorSteps:U?.stableTriangleColorSteps,stableTriangleColorFreezeFrames:U?.stableTriangleColorFreezeFrames??0,stableTriangleColorBudget:U?.stableTriangleColorBudget,stableTriangleColorMaxAge:U?.stableTriangleColorMaxAge,stableTriangleColorMaxStep:U?.stableTriangleColorMaxStep,stableTriangleMatrixDecimals:U?.stableTriangleMatrixDecimals,stableTriangleColorFrame:ge};if(an(T.rendered,T.polygons,O,Ve))return G++,_=se,$=de,T.stableDom=$,T.voxelSource=void 0,T.stableTriangleColorFrame=ge,tt=O,ct++,Xe=null,nt=-1,he(T)?(Q(T),we(T,!0)):be(T),!0}G++,_=se,$=de,T.stableDom=$,T.voxelSource=void 0;let ne=O.vertices;for(let ge=0;ge<O.polygonCount;ge++){let Ve=T.polygons[ge],qe=O.colors?.[ge];qe&&(Ve.color=qe);let Oe=Ve.vertices,Ze=ge*9;Oe[0][0]=ne[Ze],Oe[0][1]=ne[Ze+1],Oe[0][2]=ne[Ze+2],Oe[1][0]=ne[Ze+3],Oe[1][1]=ne[Ze+4],Oe[1][2]=ne[Ze+5],Oe[2][0]=ne[Ze+6],Oe[2][1]=ne[Ze+7],Oe[2][2]=ne[Ze+8]}return Be(),te.polygons=T.polygons,ot(U,Ee)},updatePolygon(O,U){let se=typeof O=="number"?O:T.polygons.indexOf(O);if(se<0&&typeof O!="number"&&tt&&(se=ut().indexOf(O)),se<0||se>=T.polygons.length)return;Be(),T.voxelSource=void 0,Object.assign(T.polygons[se],U);let de=Object.keys(U);Ye(T,se,de)||_e(T)},async setPolygonsChunked(O,U){let se=++G;_=U?.merge??_,$=U?.stableDom??$,T.stableDom=$,T.voxelSource=void 0,T.polygons=ae(O,_),Be(),te.polygons=T.polygons,Pe(T.polygons);let de=U?.recomputeAutoCenter??!0;if(!await zs(T,()=>T.disposed||se!==G)){L(T);return}de&&yt()},setTransform(O){let U=T.castShadow,se=T.receiveShadow,de=T.shadowDefinition;O.castShadow!==void 0&&(T.castShadow=!!O.castShadow),O.receiveShadow!==void 0&&(T.receiveShadow=!!O.receiveShadow),O.shadowDefinition!==void 0&&(T.shadowDefinition=O.shadowDefinition),H={...H,...O};let Ee=kn(H);E.style.transform=Ee??"",Gt(T,H.rotation),O.rotation!==void 0&&we(T,!0),T.castShadow!==U&&(T.voxelSource&&_e(T),Le(T),ht()),T.receiveShadow!==se&&(T.receiveShadow||Fo(T),M(),Re()),(O.position!==void 0||O.scale!==void 0)&&(T.castShadow||T.receiveShadow)&&(ht(),M(),Re()),T.shadowDefinition!==de&&(T.castShadow||T.receiveShadow)&&(M(),Re())},dispose(){if(!T.disposed){T.disposed=!0,G++,E.parentNode&&E.parentNode.removeChild(E),L(T);try{a.dispose()}catch{}g.delete(T),b.delete(E),yt(),ht()}},rebakeAtlas(){T.bakedRotation=H.rotation?[...H.rotation]:[0,0,0];let O=r.directionalLight?.direction??[.4,-.7,.59],U=In(O,T.bakedRotation);Is(T,U)},whenTexturesReady(){return T.textureReadyPromise},getPosition(){return H.position},getRotation(){return H.rotation},getScale(){return H.scale},getPolygons(){return te.polygons}};return T.handle=te,ze=T,b.set(E,T),g.add(T),_e(T),Gt(T,H.rotation),yt(),ht(),T.receiveShadow&&(M(),Re()),te}function Vs(a){let f=!!r.autoCenter,S=r.strategies,E=r.seamBleed,j=r.textureLeafSizing,H=r.textureImageRendering,_=r.textureBackend,$=r.textureProjection,G=r.textureLighting,ue=r.directionalLight?.direction,ae=r.directionalLight?.intensity,Z=r.directionalLight?.color,ie=r.shadow,ye=r.pointLights,Pe=rs(a);r={...r,...Pe},y.options.current=r,re(p,r);let ze=!!r.autoCenter;for(let ne of g)Gt(ne,ne.handle.transform.rotation);let T=a.strategies!==void 0&&!wi(a.strategies,S),tt=Object.prototype.hasOwnProperty.call(a,"seamBleed")&&Pe.seamBleed!==E,ct=Object.prototype.hasOwnProperty.call(a,"textureLeafSizing")&&Pe.textureLeafSizing!==j,nt=Object.prototype.hasOwnProperty.call(a,"textureImageRendering")&&Pe.textureImageRendering!==H,Xe=Object.prototype.hasOwnProperty.call(a,"textureBackend")&&Pe.textureBackend!==_,Be=Object.prototype.hasOwnProperty.call(a,"textureProjection")&&Pe.textureProjection!==$,ut=ne=>(ne??[]).map(ge=>`${ge.position.join(",")}|${ge.color??""}|${ge.intensity??1}|${ge.castShadow?1:0}`).join(";"),ot=Object.prototype.hasOwnProperty.call(a,"pointLights")&&ut(r.pointLights)!==ut(ye);if(T||tt||ct||nt||Xe||Be||ot)for(let ne of g)_e(ne);f!==ze&&yt();let te=a.textureLighting!==void 0&&G!==r.textureLighting,O=r.directionalLight,U=a.directionalLight!==void 0&&(!Mi(ue,O?.direction)||(ae??1)!==(O?.intensity??1)||(Z??"#ffffff")!==(O?.color??"#ffffff")),se=r.shadow,de=a.shadow!==void 0&&!Li(ie,se),Ee=U||de||ot;if(te){if(!T&&!tt&&!ct&&!nt&&!Xe&&!Be)for(let ne of g)_e(ne);ht(),M(),Re()}else Ee&&((de||U)&&M(),Re(void 0,{progressive:(U||ot)&&!de}));de&&a.shadow?.lift!==ie?.lift&&ht()}function Ns(){return r}function js(){F(d,r),P(p);for(let a of g)we(a)}function $s(){let a=[];for(let f of g)a.push(f.handle);return a}function Ws(){return Promise.all(Array.from(g,a=>a.handle.whenTexturesReady())).then(()=>{})}function Us(a){let f=a;for(;f;){if(f instanceof HTMLElement){let S=b.get(f);if(S&&!S.disposed)return S.handle;if(f.classList.contains("polycss-mesh"))return null}f=f.parentElement}return null}function Gs(){R&&(clearTimeout(R),R=null);let a=Array.from(g);for(let f of a)try{f.handle.dispose()}catch{}d.parentNode&&d.parentNode.removeChild(d)}return{add:Bs,setOptions:Vs,destroy:Gs,host:e,camera:t,cameraEl:d,sceneElement:p,applyCamera:js,getOptions:Ns,meshes:$s,whenTexturesReady:Ws,findMeshByElement:Us,previewBakedSolidLighting:gt,commitBakedSolidLighting:Me,clearBakedSolidLightingPreview:Yt}}import{buildPolyMeshTransform as Rg,buildPolySceneTransform as kg,cssDistanceToWorld as _g,cssDistanceToWorld as Og,cssPositionToWorld as Dg,cssPositionToWorld as Ig,worldDistanceToCss as Hg,worldDistanceToCss as Fg,worldDirectionalLightToCss as zg,worldDirectionToPolyCss as Bg,worldPositionToPolyCss as Vg}from"@layoutit/polycss-core";import{createIsometricCamera as as}from"@layoutit/polycss-core";var Pc=32e3;function dn(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=as(n),o=`${e.perspective??Pc}px`;return{get state(){return t.state},update(i){t.update(i)},getStyle(i){return t.getStyle(i)},type:"perspective",perspectiveStyle:o}}function St(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=as(n);return{get state(){return t.state},update(o){t.update(o)},getStyle(o){return t.getStyle(o)},type:"orthographic",perspectiveStyle:"none"}}var vc=St;import{BASE_TILE as Sc}from"@layoutit/polycss-core";var Fn={drag:!0,wheel:!0,dolly:!1,invert:!1,minZoom:.1,maxZoom:10,minDistance:0,maxDistance:1/0,animate:!1};function Bt(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 pn(e){return e===!0?-1:e===!1?1:e}function Vt(){let e=[],n=[],t=[];function o(s){return s==="change"?e:s==="start"?n:t}function i(s){if(e.length===0)return;let c={type:"change",camera:s()},l=e.slice();for(let d of l)try{d(c)}catch(p){console.error("[polycss] controls 'change' listener threw:",p)}}function r(s,c){let l=s==="start"?n:t;if(l.length===0)return;let d={type:s,camera:c()},p=l.slice();for(let y of p)try{y(d)}catch(g){console.error(`[polycss] controls '${s}' listener threw:`,g)}}return{changeListeners:e,startListeners:n,endListeners:t,listenerArray:o,emitChange:i,emitInteraction:r}}function Nt(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 zn(e,n,t,o,i,r){let s=!1,c=null;return{onWheel:p=>{let y=n();if(!y.wheel||t())return;p.preventDefault();let g=p.deltaMode===1?16:p.deltaMode===2?100:1,b=p.deltaY*g;p.ctrlKey?b*=10:b*=3;let x=e.camera.state;if(y.dolly){let v=x.distance??0,h=Math.max(y.minDistance,Math.min(y.maxDistance,v+b*.05));e.camera.update({distance:h})}else{let v=Math.exp(-b*513e-6),h=x.zoom??1,C=Math.max(y.minZoom,Math.min(y.maxZoom,h*v));e.camera.update({zoom:C})}e.applyCamera(),s||(s=!0,r("start",o)),i(o),c!==null&&clearTimeout(c),c=setTimeout(()=>{c=null,s=!1,r("end",o)},150)},teardown:()=>{c!==null&&(clearTimeout(c),c=null),s=!1}}}function Bn(e,n,t,o,i,r,s){let c=null,l=0,d=b=>{if(c===null||o())return;let x=t();if(!x.animate){c=null;return}if(i())l=b;else{let v=Math.min(50,l?b-l:16.67);l=b;let h=x.animate.speed*(v/16.67),C=n.camera.state;if(x.animate.axis==="x"){let R=(((C.rotX??65)+h)%360+360)%360;n.camera.update({rotX:R})}else{let R=(((C.rotY??45)+h)%360+360)%360;n.camera.update({rotY:R})}n.applyCamera(),s(r)}c=e.requestAnimationFrame(d)};return{start:()=>{c!==null||!t().animate||o()||(l=0,c=e.requestAnimationFrame(d))},stop:()=>{c!==null&&(e.cancelAnimationFrame(c),c=null)},isRunning:()=>c!==null}}function Vo(e,n={}){let t=Bt(Fn,n),o=e.host,i=o.ownerDocument?.defaultView??globalThis,r=null,s={x:0,y:0},c=!1,l=!1,d=Vt(),p=Nt(e),{changeListeners:y,startListeners:g,endListeners:b,listenerArray:x,emitChange:v,emitInteraction:h}=d,C=Bn(i,e,()=>t,()=>l,()=>c,p,v),R=u=>{if(!(!t.drag||l)&&r===null&&u.isPrimary!==!1){u.preventDefault(),r=u.pointerId,s={x:u.clientX,y:u.clientY},o.style.cursor="grabbing";try{u.target.setPointerCapture(u.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!0),h("start",p)}},I=u=>{if(r===null||u.pointerId!==r||!t.drag||l)return;u.preventDefault();let m=u.clientX-s.x,A=u.clientY-s.y;s={x:u.clientX,y:u.clientY};let k=pn(t.invert),N=m/4*k,Y=A/4*k,w=e.camera.state;if(u.shiftKey){let K=w.rotX??65,J=w.rotY??45,ee=Math.max(.01,w.zoom??1),fe=Math.cos(K*Math.PI/180),Q=fe>=0?Math.max(.1,fe):Math.min(-.1,fe),pe=Math.cos(J*Math.PI/180),he=Math.sin(J*Math.PI/180),be=ee*Sc,Ge=(m*he-A*pe/Q)/be,we=-(m*pe+A*he/Q)/be,Je=w.target??[0,0,0];e.camera.update({target:[Je[0]+Ge,Je[1]+we,Je[2]]})}else{let K=Math.max(0,Math.min(89,(w.rotX??65)-Y)),J=(((w.rotY??45)-N)%360+360)%360;e.camera.update({rotX:K,rotY:J})}e.applyCamera(),v(p)},z=u=>{if(r===u.pointerId){r=null,o.style.cursor=t.drag&&!l?"grab":"";try{u.target.releasePointerCapture(u.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!1),h("end",p)}},D=zn(e,()=>t,()=>l,p,v,h);function X(){o.addEventListener("pointerdown",R),o.addEventListener("pointermove",I),o.addEventListener("pointerup",z),o.addEventListener("pointercancel",z),o.addEventListener("wheel",D.onWheel,{passive:!1}),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function q(){o.removeEventListener("pointerdown",R),o.removeEventListener("pointermove",I),o.removeEventListener("pointerup",z),o.removeEventListener("pointercancel",z),o.removeEventListener("wheel",D.onWheel),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",D.teardown()}X(),C.start();function M(u){let m=!!t.animate;t=Bt(t,u),!l&&r===null&&(o.style.cursor=t.drag?"grab":"");let A=!!t.animate;m&&!A?C.stop():!m&&A&&C.start()}function V(){l&&(l=!1,X(),C.start())}function B(){l||(l=!0,q(),C.stop(),r=null,c=!1,D.teardown())}function F(){B(),y.length=0,g.length=0,b.length=0}function re(u,m){let A=x(u);A.includes(m)||A.push(m)}function P(u,m){let A=x(u),k=A.indexOf(m);k>=0&&A.splice(k,1)}function L(u,m){return x(u).includes(m)}return{update:M,resume:V,pause:B,destroy:F,addEventListener:re,removeEventListener:P,hasEventListener:L}}import{BASE_TILE as Cc}from"@layoutit/polycss-core";function No(e,n={}){let t=Bt(Fn,n),o=e.host,i=o.ownerDocument?.defaultView??globalThis,r=null,s={x:0,y:0},c=!1,l=!1,d=!1,p={x:0,y:0},y=Vt(),g=Nt(e),{changeListeners:b,startListeners:x,endListeners:v,listenerArray:h,emitChange:C,emitInteraction:R}=y,I=Bn(i,e,()=>t,()=>l,()=>c,g,C),z=w=>{if(!(!t.drag||l)&&r===null&&w.isPrimary!==!1){w.preventDefault(),r=w.pointerId,s={x:w.clientX,y:w.clientY},o.style.cursor="grabbing";try{w.target.setPointerCapture(w.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!0),R("start",g)}},D=w=>{if(r===null||w.pointerId!==r||!t.drag||l)return;w.preventDefault();let K=w.clientX-s.x,J=w.clientY-s.y;s={x:w.clientX,y:w.clientY};let ee=e.camera.state;if(w.shiftKey){let fe=pn(t.invert),Q=K/4*fe,pe=J/4*fe,he=(ee.rotX??65)-pe,be=(((ee.rotY??45)-Q)%360+360)%360;e.camera.update({rotX:he,rotY:be})}else{let fe=ee.rotX??65,Q=ee.rotY??45,pe=Math.max(.01,ee.zoom??1),he=Math.cos(fe*Math.PI/180),be=he>=0?Math.max(.1,he):Math.min(-.1,he),Ge=Math.cos(Q*Math.PI/180),we=Math.sin(Q*Math.PI/180),Je=pe*Cc,Ut=(K*we-J*Ge/be)/Je,lt=-(K*Ge+J*we/be)/Je,et=ee.target??[0,0,0];e.camera.update({target:[et[0]+Ut,et[1]+lt,et[2]]})}e.applyCamera(),C(g)},X=w=>{if(r===w.pointerId){r=null,o.style.cursor=t.drag&&!l?"grab":"";try{w.target.releasePointerCapture(w.pointerId)}catch{}t.animate&&t.animate.pauseOnInteraction&&(c=!1),R("end",g)}},q=w=>{w.preventDefault()},M=w=>{w.button===2&&(d=!0,p={x:w.clientX,y:w.clientY},t.animate&&t.animate.pauseOnInteraction&&(c=!0),R("start",g))},V=w=>{if(!d||!t.drag)return;let K=w.clientX-p.x,J=w.clientY-p.y;p={x:w.clientX,y:w.clientY};let ee=pn(t.invert),fe=K/4*ee,Q=J/4*ee,pe=e.camera.state,he=(pe.rotX??65)-Q,be=(((pe.rotY??45)-fe)%360+360)%360;e.camera.update({rotX:he,rotY:be}),e.applyCamera(),C(g)},B=w=>{w.button===2&&d&&(d=!1,R("end",g))},F=zn(e,()=>t,()=>l,g,C,R);function re(){o.addEventListener("pointerdown",z),o.addEventListener("pointermove",D),o.addEventListener("pointerup",X),o.addEventListener("pointercancel",X),o.addEventListener("wheel",F.onWheel,{passive:!1}),o.addEventListener("contextmenu",q),o.addEventListener("mousedown",M),o.addEventListener("mousemove",V),o.addEventListener("mouseup",B),o.style.cursor=t.drag?"grab":"",o.style.touchAction="none",o.style.userSelect="none"}function P(){o.removeEventListener("pointerdown",z),o.removeEventListener("pointermove",D),o.removeEventListener("pointerup",X),o.removeEventListener("pointercancel",X),o.removeEventListener("wheel",F.onWheel),o.removeEventListener("contextmenu",q),o.removeEventListener("mousedown",M),o.removeEventListener("mousemove",V),o.removeEventListener("mouseup",B),o.style.cursor="",o.style.touchAction="",o.style.userSelect="",F.teardown()}re(),I.start();function L(w){let K=!!t.animate;t=Bt(t,w),!l&&r===null&&(o.style.cursor=t.drag?"grab":"");let J=!!t.animate;K&&!J?I.stop():!K&&J&&I.start()}function u(){l&&(l=!1,re(),I.start())}function m(){l||(l=!0,P(),I.stop(),r=null,c=!1,d=!1,F.teardown())}function A(){m(),b.length=0,x.length=0,v.length=0}function k(w,K){let J=h(w);J.includes(K)||J.push(K)}function N(w,K){let J=h(w),ee=J.indexOf(K);ee>=0&&J.splice(ee,1)}function Y(w,K){return h(w).includes(K)}return{update:L,resume:u,pause:m,destroy:A,addEventListener:k,removeEventListener:N,hasEventListener:Y}}import{BASE_TILE as Tc}from"@layoutit/polycss-core";var Ec={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 ls(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 cs=new Set(["KeyW","ArrowUp"]),us=new Set(["KeyS","ArrowDown"]),ds=new Set(["KeyA","ArrowLeft"]),ps=new Set(["KeyD","ArrowRight"]),ms=new Set(["Space"]),jo=new Set(["ControlLeft","ControlRight"]);function $o(e,n={}){let t=ls(Ec,n),o=e.host,i=e.cameraEl,r=o.ownerDocument??document,s=r.defaultView??globalThis,c=Vt(),l=Nt(e),{changeListeners:d,startListeners:p,endListeners:y,listenerArray:g,emitChange:b,emitInteraction:x}=c,v=new Set,h=!1,C=!1,R=0,I=0,z=!1,D=[0,0,t.groundZ+t.eyeHeight];function X(W,le){let ce=W*Math.PI/180,Me=le*Math.PI/180;return[-Math.sin(ce)*Math.cos(Me),-Math.sin(ce)*Math.sin(Me),-Math.cos(ce)]}function q(){let W=e.camera.perspectiveStyle,le=W==="none"?0:parseFloat(W);return(Number.isFinite(le)&&le>0?le:2e3)/Tc}function M(){let W=e.camera.state,le=X(W.rotX??90,W.rotY??0),ce=q();return[D[0]+le[0]*ce,D[1]+le[1]*ce,D[2]+le[2]*ce]}function V(){let W=M();e.camera.update({target:W}),e.applyCamera()}function B(){let W=e.camera.state.target??[0,0,0];D=[W[0],W[1],t.groundZ+t.eyeHeight],V()}let F=()=>{if(!(!t.enabled||!t.lookEnabled||C||h))try{o.requestPointerLock()}catch{}},re=()=>{let W=r.pointerLockElement===o;W!==h&&(h=W,h?(z=!0,x("start",l)):z&&(z=!1,x("end",l)))},P=W=>{if(!h||!t.enabled||!t.lookEnabled||C)return;let le=W.movementX??0,ce=W.movementY??0;if(le===0&&ce===0)return;let Me=e.camera.state,Yt=t.lookSensitivity,Xt=t.invertY?-1:1,gt=(((Me.rotY??0)-le*Yt)%360+360)%360,Te=(Me.rotX??90)-ce*Yt*Xt;Te<t.minPitch?Te=t.minPitch:Te>t.maxPitch&&(Te=t.maxPitch);let Fe=X(Te,gt),Ye=q(),Le=[D[0]+Fe[0]*Ye,D[1]+Fe[1]*Ye,D[2]+Fe[2]*Ye];e.camera.update({rotX:Te,rotY:gt,target:Le}),e.applyCamera(),b(l)},L=W=>cs.has(W)||us.has(W)||ds.has(W)||ps.has(W)||ms.has(W)||jo.has(W),u=W=>{if(!(!t.enabled||C)&&L(W.code)&&!(!h&&!t.moveEnabled)){if(ms.has(W.code)){if(!t.jumpEnabled)return;W.preventDefault(),!v.has(W.code)&&R===0&&I===0&&(R=t.jumpVelocity),v.add(W.code);return}jo.has(W.code)&&!t.crouchEnabled||!t.moveEnabled&&!jo.has(W.code)||(W.preventDefault(),v.add(W.code))}},m=W=>{L(W.code)&&v.delete(W.code)},A=()=>{v.clear()},k=null,N=0,Y=.05,w=W=>{if(k===null||C)return;let le=Math.min(Y,N?(W-N)/1e3:.0167);if(N=W,t.enabled){let ce=!1,Me=e.camera.state;if(t.moveEnabled){let Te=0,Fe=0;for(let Ye of v)cs.has(Ye)?Te+=1:us.has(Ye)?Te-=1:ps.has(Ye)?Fe+=1:ds.has(Ye)&&(Fe-=1);if(Te!==0||Fe!==0){let Le=(Me.rotY??0)*Math.PI/180,Re=-Math.cos(Le),Pn=-Math.sin(Le),Kn=-Math.sin(Le),vn=Math.cos(Le),At=Math.hypot(Te,Fe)||1,_e=t.moveSpeed*le;D[0]+=(Re*Te+Kn*Fe)/At*_e,D[1]+=(Pn*Te+vn*Fe)/At*_e,ce=!0}}let Xt=t.crouchEnabled&&(v.has("ControlLeft")||v.has("ControlRight"))?t.crouchHeight:t.eyeHeight;t.jumpEnabled&&(R!==0||I>0)?(R-=t.gravity*le,I+=R*le,I<=0&&(I=0,R=0)):t.jumpEnabled||(I=0,R=0);let gt=t.groundZ+Xt+I;if(Math.abs(D[2]-gt)>1e-4&&(D[2]=gt,ce=!0),ce){let Te=M();e.camera.update({target:Te}),e.applyCamera(),b(l)}}k=s.requestAnimationFrame(w)};function K(){k!==null||C||(N=0,k=s.requestAnimationFrame(w))}function J(){k!==null&&(s.cancelAnimationFrame(k),k=null)}function ee(){let le=i.ownerDocument?.defaultView?.getComputedStyle(i).perspective??"",ce=parseFloat(le),Me=Number.isFinite(ce)&&ce>0?ce:2e3;i.style.setProperty("--polycss-fpv-perspective",`${Me}px`),i.classList.add("polycss-fpv-host")}function fe(){i.classList.remove("polycss-fpv-host"),i.style.removeProperty("--polycss-fpv-perspective")}function Q(){o.addEventListener("click",F),r.addEventListener("pointerlockchange",re),r.addEventListener("mousemove",P),s.addEventListener("keydown",u),s.addEventListener("keyup",m),s.addEventListener("blur",A),o.style.cursor=t.lookEnabled?"crosshair":"",ee()}function pe(){if(o.removeEventListener("click",F),r.removeEventListener("pointerlockchange",re),r.removeEventListener("mousemove",P),s.removeEventListener("keydown",u),s.removeEventListener("keyup",m),s.removeEventListener("blur",A),o.style.cursor="",v.clear(),h)try{r.exitPointerLock()}catch{}fe()}B(),Q(),K();function he(W){let le=t.eyeHeight,ce=t.groundZ;t=ls(t,W),C||(o.style.cursor=t.lookEnabled?"crosshair":""),(t.eyeHeight!==le||t.groundZ!==ce)&&(D[2]=t.groundZ+t.eyeHeight,V(),b(l))}function be(){C&&(C=!1,Q(),K())}function Ge(){C||(C=!0,pe(),J(),z&&(z=!1,x("end",l)))}function we(){Ge(),d.length=0,p.length=0,y.length=0}function Je(){if(!(!t.enabled||!t.lookEnabled||C))try{o.requestPointerLock()}catch{}}function Ut(){if(h)try{r.exitPointerLock()}catch{}}function lt(){return h}function et(W,le){let ce=g(W);ce.includes(le)||ce.push(le)}function Zn(W,le){let ce=g(W),Me=ce.indexOf(le);Me>=0&&ce.splice(Me,1)}function Qn(W,le){return g(W).includes(le)}function Gt(){return[D[0],D[1],D[2]]}function xn(W){D[0]=W[0],D[1]=W[1],D[2]=W[2],V(),b(l)}return{update:he,resume:be,pause:Ge,destroy:we,lock:Je,unlock:Ut,isLocked:lt,getOrigin:Gt,setOrigin:xn,addEventListener:et,removeEventListener:Zn,hasEventListener:Qn}}function jt(e,n,t){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let i of o){let r=i.getBoundingClientRect();if(!(r.width<=0||r.height<=0)&&n>=r.left&&n<=r.right&&t>=r.top&&t<=r.bottom)return!0}return!1}function fs(e,n,t,o){for(let i of e)if(!(o&&!o(i))&&jt(i.element,n,t))return i;return null}function Wo(e,n={}){let t=[],o=new Set;n.onChange&&o.add(n.onChange);function i(){t=n.filter?n.filter(t):t;for(let v of o)try{v(t)}catch(h){console.error("[polycss/createSelect] onChange threw:",h)}}function r(x){t=x,i()}function s(x){n.multiple?t.includes(x)||(t=[...t,x]):t=[x],i()}function c(x){t.includes(x)&&(t=t.filter(v=>v!==x),i())}function l(x){t.includes(x)?t=t.filter(v=>v!==x):n.multiple?t=[...t,x]:t=[x],i()}function d(){t.length!==0&&(t=[],i())}function p(x){return t.includes(x)}function y(x,v){return fs(e.meshes(),x,v,h=>!h.element.classList.contains("polycss-transform-gizmo"))}let g=x=>{let v=x.target;if(v?.closest(".polycss-transform-gizmo"))return;let h=e.findMeshByElement(v)??y(x.clientX,x.clientY);if(!h){n.onPointerMissed&&n.onPointerMissed(x),n.clearOnMiss!==!1&&d();return}n.multiple&&(x.shiftKey||x.metaKey||x.ctrlKey)?l(h):t.length===1&&t[0]===h?d():r([h])};e.host.addEventListener("click",g);function b(){e.host.removeEventListener("click",g),o.clear()}return{get selected(){return t},set:r,add:s,remove:c,toggle:l,clear:d,has:p,destroy:b}}import{arrowPolygons as Ac,eulerXYZFromQuat as wc,planePolygons as Mc,quatFromAxisAngle as Lc,quatFromEulerXYZ as Rc,quatMultiply as kc,ringQuadPolygons as _c,rotateVec3 as Uo}from"@layoutit/polycss-core";var Vn="#ff3653",Nn="#8adb00",jn="#2c8fff",$t=50,gs=60,Oc=.6,Dc=.0125,Ic=.15,Hc=.04,Fc=1,hs=.02,Go=1.04,zc=.1,Bc=.25,Ps=1e-4,Vc=.6,Nc=.8,jc=1,st={0:1,1:0,2:2},ys=[{cssAxis:0,sign:1,key:"x",color:Vn},{cssAxis:0,sign:-1,key:"-x",color:Vn},{cssAxis:1,sign:1,key:"y",color:Nn},{cssAxis:1,sign:-1,key:"-y",color:Nn},{cssAxis:2,sign:1,key:"z",color:jn},{cssAxis:2,sign:-1,key:"-z",color:jn}],bs=[{cssAxis:0,key:"x",color:Vn},{cssAxis:1,key:"y",color:Nn},{cssAxis:2,key:"z",color:jn}],xs=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:jn},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Nn},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Vn}];function Yo(e,n,t,o){let i=t*Math.PI/180,r=o*Math.PI/180,s=[0,0,0];s[e]=n;let c=s[0]*Math.cos(r)-s[1]*Math.sin(r),l=s[0]*Math.sin(r)+s[1]*Math.cos(r),d=s[2];return l*Math.sin(i)+d*Math.cos(i)<0}function $c(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),i=parseInt(t[2],16),r=parseInt(t[3],16);return`rgba(${o}, ${i}, ${r}, ${n})`}function $n(e,n){return!n||n<=0?e:Math.round(e/n)*n}function Wc(e){if(e.length===0)return[0,0,0];let n=1/0,t=1/0,o=1/0,i=-1/0,r=-1/0,s=-1/0;for(let c of e)for(let l of c.vertices)l[0]<n&&(n=l[0]),l[0]>i&&(i=l[0]),l[1]<t&&(t=l[1]),l[1]>r&&(r=l[1]),l[2]<o&&(o=l[2]),l[2]>s&&(s=l[2]);return Number.isFinite(n)?[(n+i)/2,(t+r)/2,(o+s)/2]:[0,0,0]}function Xo(e){if(e.length===0)return gs;let n=1/0,t=1/0,o=1/0,i=-1/0,r=-1/0,s=-1/0;for(let l of e)for(let d of l.vertices)d[0]<n&&(n=d[0]),d[0]>i&&(i=d[0]),d[1]<t&&(t=d[1]),d[1]>r&&(r=d[1]),d[2]<o&&(o=d[2]),d[2]>s&&(s=d[2]);return Number.isFinite(n)?Math.max(i-n,r-t,s-o)*$t*Oc:gs}function Uc(e){let{cssAxis:n,sign:t,shaftLengthCss:o,wrapper:i,target:r,startClientX:s,startClientY:c,translationSnap:l,onAxisDelta:d,onMouseDown:p,onMouseUp:y,onDraggingChanged:g}=e,b=o,x=[0,0,0];x[n]=t;let v=i.ownerDocument.createElement("div");v.style.position="absolute",v.style.left="0",v.style.top="0",v.style.width="0",v.style.height="0",v.style.transform=`translate3d(${x[0]*b}px, ${x[1]*b}px, ${x[2]*b}px)`,i.appendChild(v);let h=i.getBoundingClientRect(),C=v.getBoundingClientRect();i.removeChild(v);let R=(C.left-h.left)/b,I=(C.top-h.top)/b,z=R*R+I*I;if(z<Ps)return;p?.(),g?.(!0);let D=q=>{let M=q.clientX-s,V=q.clientY-c,B=(M*R+V*I)/z;B=$n(B,l),d(B,x)},X=()=>{window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",X),window.removeEventListener("pointercancel",X);let q=M=>{M.stopPropagation(),M.stopImmediatePropagation()};window.addEventListener("click",q,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",q,!0),0),y?.(),g?.(!1)};window.addEventListener("pointermove",D),window.addEventListener("pointerup",X),window.addEventListener("pointercancel",X)}function Gc(e){let{axisA:n,axisB:t,probeDistanceCss:o,wrapper:i,startClientX:r,startClientY:s,translationSnap:c,onPlaneDelta:l,onMouseDown:d,onMouseUp:p,onDraggingChanged:y}=e,g=[0,0,0];g[n]=1;let b=[0,0,0];b[t]=1;function x(z){let D=i.ownerDocument.createElement("div");D.style.position="absolute",D.style.left="0",D.style.top="0",D.style.width="0",D.style.height="0",D.style.transform=`translate3d(${z[0]*o}px, ${z[1]*o}px, ${z[2]*o}px)`,i.appendChild(D);let X=i.getBoundingClientRect(),q=D.getBoundingClientRect();return i.removeChild(D),{x:(q.left-X.left)/o,y:(q.top-X.top)/o}}let v=x(g),h=x(b),C=v.x*h.y-h.x*v.y;if(Math.abs(C)<Ps)return;d?.(),y?.(!0);let R=z=>{let D=z.clientX-r,X=z.clientY-s,q=(h.y*D-h.x*X)/C,M=(-v.y*D+v.x*X)/C;q=$n(q,c),M=$n(M,c),l(q,M,g,b)},I=()=>{window.removeEventListener("pointermove",R),window.removeEventListener("pointerup",I),window.removeEventListener("pointercancel",I);let z=D=>{D.stopPropagation(),D.stopImmediatePropagation()};window.addEventListener("click",z,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",z,!0),0),p?.(),y?.(!1)};window.addEventListener("pointermove",R),window.addEventListener("pointerup",I),window.addEventListener("pointercancel",I)}function Yc(e){let{cssAxis:n,wrapper:t,target:o,startClientX:i,startClientY:r,rotationSnap:s,onAngleDelta:c,onMouseDown:l,onMouseUp:d,onDraggingChanged:p}=e,y=t.getBoundingClientRect(),g=y.left,b=y.top,x=Math.atan2(r-b,i-g),v=0;l?.(),p?.(!0);let h=R=>{let I=Math.atan2(R.clientY-b,R.clientX-g),z=I-x;z>Math.PI?z-=2*Math.PI:z<-Math.PI&&(z+=2*Math.PI),v+=z,x=I;let D=v*180/Math.PI;D=$n(D,s),c(D)},C=()=>{window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",C),window.removeEventListener("pointercancel",C);let R=I=>{I.stopPropagation(),I.stopImmediatePropagation()};window.addEventListener("click",R,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",R,!0),0),d?.(),p?.(!1)};window.addEventListener("pointermove",h),window.addEventListener("pointerup",C),window.addEventListener("pointercancel",C)}function qo(e,n={}){let t=null,o=n.mode??"translate",i=n.size??1,r={...n},s=new Map,c=null,l=null,d=[0,0,0];function p(){if(!t)return[0,0,0];let P=t.transform.position??[0,0,0],L=t.transform.rotation??[0,0,0],u=typeof t.transform.scale=="number"?t.transform.scale:t.transform.scale?.[0]??1,m=Uo(d,L[0],L[1],L[2]);return[P[0]+u*m[0],P[1]+u*m[1],P[2]+u*m[2]]}function y(P){return l===P?jc:c===P?Nc:Vc}function g(){for(let[P,L]of s){let u=b(L.spec,y(P));L.handle.setPolygons(u,{recomputeAutoCenter:!1})}}function b(P,L){let m=Xo(t?.polygons??[])*i,A=m/$t,k=$c(P.color,L);if(P.kind==="arrow"){let w=e.camera.state,K=Yo(P.cssAxis,P.sign,w.rotX??65,w.rotY??45);return Ac({axis:st[P.cssAxis],sign:P.sign,shaftLength:A,shaftHalfThickness:A*Dc,headLength:A*Ic,headHalfThickness:A*Hc,color:k,shaft:!K})}if(P.kind==="plane"){let w=e.camera.state,K=w.rotX??65,J=w.rotY??45,ee=st[P.perpAxis],fe=(ee+1)%3,Q=(ee+2)%3,pe=st[fe],he=st[Q],be=Yo(pe,1,K,J)?-1:1,Ge=Yo(he,1,K,J)?-1:1,we=A*Bc;return Mc({axis:ee,size:A*zc,offset:[be*we,Ge*we],color:k})}let Y=m*Fc/$t*Go;return _c({axis:st[P.cssAxis],outerRadius:Y,color:k})}function x(P){return P.kind==="arrow"?"polycss-transform-arrow":P.kind==="plane"?"polycss-transform-plane":"polycss-transform-ring"}function v(){if(o==="translate"){let P=ys.map(u=>({kind:"arrow",key:u.key,cssAxis:u.cssAxis,sign:u.sign,color:u.color})),L=xs.map(u=>({kind:"plane",key:u.key,perpAxis:u.perpAxis,axisA:u.axisA,axisB:u.axisB,color:u.color}));return[...P,...L]}return o==="rotate"?bs.map(P=>({kind:"ring",key:P.key,cssAxis:P.cssAxis,color:P.color})):[]}function h(){if(C(),!t)return;let P={x:r.showX!==!1,y:r.showY!==!1,z:r.showZ!==!1};function L(m){if(m.kind==="arrow"){let N=m.key.replace("-","")[0];return P[N]}if(m.kind==="ring")return P[m.key];let A=["x","y","z"][m.axisA],k=["x","y","z"][m.axisB];return P[A]&&P[k]}let u=p();for(let m of v()){if(!L(m))continue;let A=b(m,y(m.key)),k=e.add({polygons:A,objectUrls:[],warnings:[],dispose:()=>{}},{excludeFromAutoCenter:!0,id:`__poly-gizmo-${m.key}`,position:u}),N=x(m);if(k.element.classList.add("polycss-transform-gizmo",N,`${N}--${m.key}`),m.kind==="ring"){let Y=(1-hs)/Go,w=(1+hs)/Go;k.element.style.setProperty("--ring-inner-ratio",`${Y}`),k.element.style.setProperty("--ring-outer-ratio",`${w}`)}s.set(m.key,{handle:k,spec:m})}}function C(){for(let{handle:P}of s.values())P.remove();s.clear(),c=null,l=null}function R(){if(!t)return;let P=p();for(let{handle:L}of s.values())L.setTransform({position:P})}function I(){t&&(s.size===0?h():R())}function z(P){if(t=P,!P){d=[0,0,0],C();return}d=Wc(P.polygons),C(),h()}function D(){z(null)}function X(P){P!==o&&(o=P,t&&(C(),h()))}function q(P,L,u){if(!t||!M)return;let m=u[P.cssAxis],A=st[P.cssAxis],k=L*m/$t,N=M.slice();N[A]=M[A]+k,t.setTransform({position:N}),R(),r.onObjectChange?.({object:t,position:N}),r.onChange?.()}let M=null,V=null,B=P=>{if(!t||r.enabled===!1)return;let L={x:r.showX!==!1,y:r.showY!==!1,z:r.showZ!==!1};if(o==="translate"){for(let u of xs){let m=["x","y","z"][u.axisA],A=["x","y","z"][u.axisB];if(!L[m]||!L[A])continue;let k=s.get(u.key);if(k&&jt(k.handle.element,P.clientX,P.clientY)){P.preventDefault(),P.stopPropagation(),l=u.key,g(),M=(t.transform.position??[0,0,0]).slice(),Gc({axisA:u.axisA,axisB:u.axisB,probeDistanceCss:Xo(t.polygons)*i,wrapper:k.handle.element,target:t,startClientX:P.clientX,startClientY:P.clientY,translationSnap:r.translationSnap??null,onPlaneDelta:(N,Y,w,K)=>{if(!t||!M)return;let J=w[u.axisA],ee=K[u.axisB],fe=st[u.axisA],Q=st[u.axisB],pe=M.slice();pe[fe]+=N*J/$t,pe[Q]+=Y*ee/$t,t.setTransform({position:pe}),R(),r.onObjectChange?.({object:t,position:pe}),r.onChange?.()},onMouseDown:r.onMouseDown,onMouseUp:r.onMouseUp,onDraggingChanged:N=>{N||(l=null,M=null,g()),r.onDraggingChanged?.(N)}});return}}for(let u of ys){let m=u.key.replace("-","")[0];if(!L[m])continue;let A=s.get(u.key);if(A&&jt(A.handle.element,P.clientX,P.clientY)){P.preventDefault(),P.stopPropagation(),l=u.key,g(),M=(t.transform.position??[0,0,0]).slice(),Uc({cssAxis:u.cssAxis,sign:u.sign,shaftLengthCss:Xo(t.polygons)*i,wrapper:A.handle.element,target:t,startClientX:P.clientX,startClientY:P.clientY,translationSnap:r.translationSnap??null,onAxisDelta:(k,N)=>q(u,k,N),onMouseDown:r.onMouseDown,onMouseUp:r.onMouseUp,onDraggingChanged:k=>{k||(l=null,M=null,g()),r.onDraggingChanged?.(k)}});return}}}else if(o==="rotate")for(let u of bs){if(!L[u.key])continue;let m=s.get(u.key);if(m&&jt(m.handle.element,P.clientX,P.clientY)){P.preventDefault(),P.stopPropagation(),l=u.key,g(),V=(t.transform.rotation??[0,0,0]).slice(),M=(t.transform.position??[0,0,0]).slice(),Yc({cssAxis:u.cssAxis,wrapper:m.handle.element,target:t,startClientX:P.clientX,startClientY:P.clientY,rotationSnap:r.rotationSnap??null,onAngleDelta:A=>{if(!t||!V||!M)return;let k=st[u.cssAxis],N=[0,0,0];N[k]=1;let Y=-A*Math.PI/180,w=Rc(V),K=Lc(N,Y),J=wc(kc(K,w)),ee=typeof t.transform.scale=="number"?t.transform.scale:t.transform.scale?.[0]??1,fe=Uo(d,V[0],V[1],V[2]),Q=Uo(d,J[0],J[1],J[2]),pe=[M[0]+ee*(fe[0]-Q[0]),M[1]+ee*(fe[1]-Q[1]),M[2]+ee*(fe[2]-Q[2])];t.setTransform({rotation:J,position:pe}),R(),r.onObjectChange?.({object:t,rotation:J,position:pe}),r.onChange?.()},onMouseDown:r.onMouseDown,onMouseUp:r.onMouseUp,onDraggingChanged:A=>{A||(l=null,V=null,M=null,g(),t?.rebakeAtlas()),r.onDraggingChanged?.(A)}});return}}};e.host.addEventListener("pointerdown",B,{capture:!0});let F=P=>{if(!t||l||r.enabled===!1)return;let L=null;for(let[u,m]of s)if(jt(m.handle.element,P.clientX,P.clientY)){L=u;break}L!==c&&(c=L,g())};e.host.addEventListener("pointermove",F);function re(){e.host.removeEventListener("pointerdown",B,{capture:!0}),e.host.removeEventListener("pointermove",F),C()}return{attach:z,detach:D,setMode:X,update:I,destroy:re}}var Xc=typeof HTMLElement<"u"?HTMLElement:class{},qc=["perspective","rot-x","rot-y","zoom","directional-direction","directional-color","directional-intensity","ambient-color","ambient-intensity","texture-lighting","texture-quality","texture-leaf-sizing","texture-image-rendering","texture-backend","texture-projection","auto-center"];function Ue(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function Zc(e){return e==="false"?!1:Ue(e)}function Zo(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 Qc(e){if(e==="baked"||e==="dynamic")return e}function Kc(e){return e==="auto"?"auto":Ue(e)}function Jc(e){if(e==="canonical"||e==="local"||e==="raster")return e}function eu(e){if(e==="auto"||e==="pixelated")return e}function tu(e){if(e==="auto"||e==="atlas"||e==="image")return e}function nu(e){if(e==="affine"||e==="projective")return e}function ou(e){return typeof e.getCamera=="function"}var Ie=class extends Xc{constructor(){super(...arguments);this._scene=null;this._implicitCamera=null}static get observedAttributes(){return[...qc]}getScene(){return this._scene}_findAncestorCamera(){let t=this.parentElement;for(;t;){if(ou(t)){let o=t.getCamera();if(o)return o}t=t.parentElement}return null}_buildImplicitCamera(){let t=Zc(this.getAttribute("perspective")),o=Ue(this.getAttribute("rot-x")),i=Ue(this.getAttribute("rot-y")),r=Ue(this.getAttribute("zoom")),s=Ue(this.getAttribute("distance")),c=Zo(this.getAttribute("target")),l={...o!==void 0?{rotX:o}:{},...i!==void 0?{rotY:i}:{},...r!==void 0?{zoom:r}:{},...s!==void 0?{distance:s}:{},...c!==void 0?{target:c}:{}};return t===!1?St(l):t!==void 0?dn({...l,perspective:t}):St(l)}_readNonCameraOptions(){let t=this._readDirectionalLight(),o=this._readAmbientLight(),i={};i.textureLighting=Qc(this.getAttribute("texture-lighting"))??"baked";let r=Kc(this.getAttribute("texture-quality"));r!==void 0&&(i.textureQuality=r),i.textureLeafSizing=Jc(this.getAttribute("texture-leaf-sizing"))??"canonical";let s=eu(this.getAttribute("texture-image-rendering"));s!==void 0&&(i.textureImageRendering=s);let c=tu(this.getAttribute("texture-backend"));c!==void 0&&(i.textureBackend=c);let l=nu(this.getAttribute("texture-projection"));return l!==void 0&&(i.textureProjection=l),i.autoCenter=this.hasAttribute("auto-center"),t&&(i.directionalLight=t),o&&(i.ambientLight=o),i}_readDirectionalLight(){let t=Zo(this.getAttribute("directional-direction")),o=this.getAttribute("directional-color")||void 0,i=Ue(this.getAttribute("directional-intensity"));if(!t&&!o&&i===void 0)return;let r={direction:t??[.4,-.7,.59]};return o&&(r.color=o),i!==void 0&&(r.intensity=i),r}_readAmbientLight(){let t=this.getAttribute("ambient-color")||void 0,o=Ue(this.getAttribute("ambient-intensity"));if(!t&&o===void 0)return;let i={};return t&&(i.color=t),o!==void 0&&(i.intensity=o),i}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=Bo(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,i){if(o!==i&&this._scene){if(this._implicitCamera&&["rot-x","rot-y","zoom","distance","target"].includes(t)){let s=Ue(this.getAttribute("rot-x")),c=Ue(this.getAttribute("rot-y")),l=Ue(this.getAttribute("zoom")),d=Ue(this.getAttribute("distance")),p=Zo(this.getAttribute("target"));s!==void 0&&this._implicitCamera.update({rotX:s}),c!==void 0&&this._implicitCamera.update({rotY:c}),l!==void 0&&this._implicitCamera.update({zoom:l}),d!==void 0&&this._implicitCamera.update({distance:d}),p!==void 0&&this._implicitCamera.update({target:p}),this._scene.applyCamera();return}this._scene.setOptions(this._readNonCameraOptions())}}};import{computeSceneBbox as ru,loadMesh as iu}from"@layoutit/polycss-core";var su=typeof HTMLElement<"u"?HTMLElement:class{},au=["src","mtl","mesh-resolution","position","scale","rotation","auto-center","cast-shadow","receive-shadow","target-size","default-color","palette","include-objects","exclude-objects"];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 vs(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return mn(e)}}function Qo(e){if(!e)return;let n=e.split(",").map(t=>t.trim()).filter(t=>t.length>0);return n.length>0?n:void 0}function lu(e){let n=e.getAttribute("target-size"),t=e.getAttribute("default-color"),o=Qo(e.getAttribute("palette")),i=Qo(e.getAttribute("include-objects")),r=Qo(e.getAttribute("exclude-objects")),s=n!==null?parseFloat(n):NaN,c={};return Number.isFinite(s)&&(c.targetSize=s),t&&(c.defaultColor=t),o&&(c.palette=o),i&&(c.includeObjects=i),r&&(c.excludeObjects=r),Object.keys(c).length>0?c:void 0}function cu(e){return e.closest("poly-scene")??null}function uu(e){if(e.length===0)return e;let n=ru(e),t=(n.min[0]+n.max[0])/2,o=(n.min[1]+n.max[1])/2,i=(n.min[2]+n.max[2])/2;if(t===0&&o===0&&i===0)return e;let r=s=>[s[0]-t,s[1]-o,s[2]-i];return e.map(s=>({...s,vertices:s.vertices.map(r),...s.textureTriangles?.length?{textureTriangles:s.textureTriangles.map(c=>({...c,vertices:c.vertices.map(r)}))}:null}))}var fn=class extends su{constructor(){super(...arguments);this._handle=null;this._parseResult=null;this._loadToken=0}static get observedAttributes(){return[...au]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,i){if(o!==i){if(t==="src"||t==="mtl"||t==="mesh-resolution"||t==="target-size"||t==="default-color"||t==="palette"||t==="include-objects"||t==="exclude-objects"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform({position:mn(this.getAttribute("position")),scale:vs(this.getAttribute("scale")),rotation:mn(this.getAttribute("rotation")),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow")})}}_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=cu(this);if(!o)return;let i=++this._loadToken,r=this.getAttribute("mtl")||void 0,c=this.getAttribute("mesh-resolution")==="lossless"?"lossless":void 0,l=lu(this),d;try{let g=r||c!==void 0||l?{...r?{mtlUrl:r}:{},...c!==void 0?{meshResolution:c}:{},...l?{objOptions:l}:{}}:void 0;d=await iu(t,g)}catch(g){this.dispatchEvent(new CustomEvent("polycss:error",{detail:g,bubbles:!0}));return}if(i!==this._loadToken){try{d.dispose()}catch{}return}let p=o.getScene();if(!p){try{d.dispose()}catch{}return}this.hasAttribute("auto-center")&&(d={...d,polygons:uu(d.polygons)}),this._parseResult=d,this._handle=p.add(d,{position:mn(this.getAttribute("position")),scale:vs(this.getAttribute("scale")),rotation:mn(this.getAttribute("rotation")),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow")}),this.dispatchEvent(new CustomEvent("polycss:loaded",{detail:{polygons:this._handle.polygons},bubbles:!0}))}};import{BASE_TILE as gn}from"@layoutit/polycss-core";var du=typeof HTMLElement<"u"?HTMLElement:class{},pu=["src","width","height","position","rotation","scale","allow","loading","referrerpolicy","sandbox","title"];function Ko(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 mu(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return Ko(e)}}function Ss(e,n){if(e===null)return n;let t=parseFloat(e);return Number.isFinite(t)?t:n}function fu(e){let n=e.closest("poly-scene");return n?n.querySelector(".polycss-scene"):null}function gu(e,n,t,o,i){let r=typeof t=="number"?t:t?.[0]??1,s=typeof t=="number"?t:t?.[1]??1,c=typeof t=="number"?t:t?.[2]??1,l=r!==1||s!==1||c!==1,d=!!n&&(!!n[0]||!!n[1]||!!n[2]),p=(e?.[1]??0)*gn,y=(e?.[0]??0)*gn,g=(e?.[2]??0)*gn,b=[];return b.push(`translate3d(${p}px, ${y}px, ${g}px)`),d&&(n[0]&&b.push(`rotateY(${-n[0]}deg)`),n[1]&&b.push(`rotateX(${-n[1]}deg)`),n[2]&&b.push(`rotateZ(${-n[2]}deg)`)),l&&b.push(`scale3d(${r}, ${s}, ${c})`),b.push(`translate(${-o/2}px, ${-i/2}px)`),b.join(" ")}var Jo=class extends du{constructor(){super(...arguments);this._wrapper=null;this._iframe=null}static get observedAttributes(){return[...pu]}getIframeElement(){return this._iframe}connectedCallback(){this._mount()}disconnectedCallback(){this._teardown()}attributeChangedCallback(t,o,i){if(o!==i&&!(!this._wrapper||!this._iframe)){if(t==="src"){this._iframe.src=this.getAttribute("src")??"";return}if(t==="allow"||t==="loading"||t==="referrerpolicy"||t==="sandbox"||t==="title"){let r=this.getAttribute(t);r===null?this._iframe.removeAttribute(t):this._iframe.setAttribute(t,r);return}this._applyGeometry()}}_mount(){let t=fu(this);if(!t)return;let o=this.ownerDocument;if(!o)return;let i=o.createElement("div");i.className="polycss-iframe",i.style.position="absolute",i.style.left="0",i.style.top="0",i.style.transformOrigin="0 0",i.style.transformStyle="preserve-3d";let r=o.createElement("iframe");r.style.display="block",r.style.border="0",r.style.background="#000";let s=this.getAttribute("src");s&&(r.src=s);let c=this.getAttribute("allow");c&&r.setAttribute("allow",c);for(let l of["loading","referrerpolicy","sandbox","title"]){let d=this.getAttribute(l);d!==null&&r.setAttribute(l,d)}i.appendChild(r),t.appendChild(i),this._wrapper=i,this._iframe=r,this._applyGeometry()}_applyGeometry(){if(!this._wrapper||!this._iframe)return;let t=Ss(this.getAttribute("width"),16),o=Ss(this.getAttribute("height"),9),i=t*gn,r=o*gn;this._iframe.style.width=`${i}px`,this._iframe.style.height=`${r}px`;let s=Ko(this.getAttribute("position")),c=Ko(this.getAttribute("rotation")),l=mu(this.getAttribute("scale"));this._wrapper.style.transform=gu(s,c,l,i,r)}_teardown(){this._wrapper?.parentNode&&this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null,this._iframe=null}};var hu=typeof HTMLElement<"u"?HTMLElement:class{},yu=["vertices","color","texture","uvs","position","scale","rotation"];function Cs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function er(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 bu(e){if(e){if(!e.includes(",")){let n=parseFloat(e);return Number.isFinite(n)?n:void 0}return er(e)}}function xu(e){return e.closest("poly-scene")??null}var tr=class extends hu{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return[...yu]}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,i){o!==i&&(this._tearDown(),this.isConnected&&this._mount())}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}_mount(){let t=xu(this);if(!t)return;let o=t.getScene();if(!o)return;let i=Cs(this.getAttribute("vertices"));if(!i||!Array.isArray(i)||i.length<3)return;let r=this.getAttribute("color")||void 0,s=this.getAttribute("texture")||void 0,c=Cs(this.getAttribute("uvs"))??void 0,l={};for(let y of Array.from(this.attributes))y.name.startsWith("data-")&&(l[y.name.slice(5)]=y.value);let p={polygons:[{vertices:i,...r!==void 0?{color:r}:{},...s!==void 0?{texture:s}:{},...c!==void 0?{uvs:c}:{},...Object.keys(l).length>0?{data:l}:{}}],objectUrls:[],warnings:[],dispose:()=>{}};this._handle=o.add(p,{position:er(this.getAttribute("position")),scale:bu(this.getAttribute("scale")),rotation:er(this.getAttribute("rotation"))})}};function oe(e){if(e==null)return;let n=parseFloat(e);return Number.isFinite(n)?n:void 0}function Wn(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 Ae(e){if(e!==null)return!(e==="false"||e==="0")}function Un(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 Gn(e){if(e==="x"||e==="y")return e}var Pu=typeof HTMLElement<"u"?HTMLElement:class{},vu=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],nr=class extends Pu{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...vu]}getControls(){return this._controls}_readAnimate(){let t=oe(this.getAttribute("animate-speed")),o=Gn(this.getAttribute("animate-axis")),i=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}:{},...i!==null?{pauseOnInteraction:Ae(i)}:{}}}_readOptions(){let t={},o=Ae(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let i=Ae(this.getAttribute("wheel"));i!==void 0&&(t.wheel=i),this.hasAttribute("dolly")&&(t.dolly=!0);let r=oe(this.getAttribute("min-distance"));r!==void 0&&(t.minDistance=r);let s=oe(this.getAttribute("max-distance"));s!==void 0&&(t.maxDistance=s);let c=Un(this.getAttribute("invert"));c!==void 0&&(t.invert=c);let l=oe(this.getAttribute("zoom-min")),d=oe(this.getAttribute("zoom-max"));return l!==void 0&&(t.minZoom=l),d!==void 0&&(t.maxZoom=d),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Ie)return t;t=t.parentNode}return null}_attach(){if(this._controls)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._controls=Vo(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,i){o!==i&&this._controls&&this._controls.update(this._readOptions())}};var Su=typeof HTMLElement<"u"?HTMLElement:class{},Cu=["drag","wheel","dolly","min-distance","max-distance","invert","zoom-min","zoom-max","animate-speed","animate-axis","animate-pause-on-interaction"],or=class extends Su{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...Cu]}_readAnimate(){let t=oe(this.getAttribute("animate-speed")),o=Gn(this.getAttribute("animate-axis")),i=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}:{},...i!==null?{pauseOnInteraction:Ae(i)}:{}}}_readOptions(){let t={},o=Ae(this.getAttribute("drag"));o!==void 0&&(t.drag=o);let i=Ae(this.getAttribute("wheel"));i!==void 0&&(t.wheel=i),this.hasAttribute("dolly")&&(t.dolly=!0);let r=oe(this.getAttribute("min-distance"));r!==void 0&&(t.minDistance=r);let s=oe(this.getAttribute("max-distance"));s!==void 0&&(t.maxDistance=s);let c=Un(this.getAttribute("invert"));c!==void 0&&(t.invert=c);let l=oe(this.getAttribute("zoom-min")),d=oe(this.getAttribute("zoom-max"));return l!==void 0&&(t.minZoom=l),d!==void 0&&(t.maxZoom=d),t.animate=this._readAnimate()??!1,t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Ie)return t;t=t.parentNode}return null}_attach(){if(this._controls)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._controls=No(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,i){o!==i&&this._controls&&this._controls.update(this._readOptions())}};var Tu=typeof HTMLElement<"u"?HTMLElement:class{},Eu=["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"],rr=class extends Tu{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return[...Eu]}_readOptions(){let t={},o=Ae(this.getAttribute("enabled"));o!==void 0&&(t.enabled=o);let i=Ae(this.getAttribute("look-enabled"));i!==void 0&&(t.lookEnabled=i);let r=Ae(this.getAttribute("move-enabled"));r!==void 0&&(t.moveEnabled=r);let s=Ae(this.getAttribute("jump-enabled"));s!==void 0&&(t.jumpEnabled=s);let c=Ae(this.getAttribute("crouch-enabled"));c!==void 0&&(t.crouchEnabled=c);let l=oe(this.getAttribute("look-sensitivity"));if(l!==void 0&&(t.lookSensitivity=l),this.hasAttribute("invert-y")){let C=Ae(this.getAttribute("invert-y"));C!==void 0&&(t.invertY=C)}let d=oe(this.getAttribute("move-speed"));d!==void 0&&(t.moveSpeed=d);let p=oe(this.getAttribute("jump-velocity"));p!==void 0&&(t.jumpVelocity=p);let y=oe(this.getAttribute("gravity"));y!==void 0&&(t.gravity=y);let g=oe(this.getAttribute("eye-height"));g!==void 0&&(t.eyeHeight=g);let b=oe(this.getAttribute("crouch-height"));b!==void 0&&(t.crouchHeight=b);let x=oe(this.getAttribute("ground-z"));x!==void 0&&(t.groundZ=x);let v=oe(this.getAttribute("min-pitch"));v!==void 0&&(t.minPitch=v);let h=oe(this.getAttribute("max-pitch"));return h!==void 0&&(t.maxPitch=h),t}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Ie)return t;t=t.parentNode}return null}_attach(){if(this._controls)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._controls=$o(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,i){o!==i&&this._controls&&this._controls.update(this._readOptions())}};var Au=typeof HTMLElement<"u"?HTMLElement:class{},wu=["perspective","zoom","rot-x","rot-y","target","distance"],ir=class extends Au{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...wu]}getCamera(){return this._camera}_readOptions(){return{perspective:oe(this.getAttribute("perspective")),zoom:oe(this.getAttribute("zoom")),rotX:oe(this.getAttribute("rot-x")),rotY:oe(this.getAttribute("rot-y")),target:Wn(this.getAttribute("target")),distance:oe(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=dn(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,i){if(o===i||!this._camera||!this._wrapper)return;let r=this._readOptions();if(t==="perspective"){let l=r.perspective!==void 0?`${r.perspective}px`:"32000px";this._wrapper.style.perspective=l;return}this._camera.update({rotX:r.rotX,rotY:r.rotY,zoom:r.zoom,target:r.target,distance:r.distance}),this.querySelector("poly-scene")?.getScene?.()?.applyCamera()}};var Mu=typeof HTMLElement<"u"?HTMLElement:class{},Lu=["zoom","rot-x","rot-y","target","distance"],hn=class extends Mu{constructor(){super(...arguments);this._camera=null;this._wrapper=null}static get observedAttributes(){return[...Lu]}getCamera(){return this._camera}_readOptions(){return{zoom:oe(this.getAttribute("zoom")),rotX:oe(this.getAttribute("rot-x")),rotY:oe(this.getAttribute("rot-y")),target:Wn(this.getAttribute("target")),distance:oe(this.getAttribute("distance"))}}_mount(){if(this._camera)return;let t=this._readOptions();for(this._camera=St(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,i){if(o===i||!this._camera)return;let r=this._readOptions();r.zoom!==void 0&&this._camera.update({zoom:r.zoom}),r.rotX!==void 0&&this._camera.update({rotX:r.rotX}),r.rotY!==void 0&&this._camera.update({rotY:r.rotY}),r.target!==void 0&&this._camera.update({target:r.target}),r.distance!==void 0&&this._camera.update({distance:r.distance}),this.querySelector("poly-scene")?.getScene?.()?.applyCamera()}};var sr=class extends hn{};var Ru=typeof HTMLElement<"u"?HTMLElement:class{},ku=["mode","target","size","enabled"];function Ts(e){if(e==="translate"||e==="rotate")return e}var ar=class extends Ru{constructor(){super(...arguments);this._tc=null}static get observedAttributes(){return[...ku]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Ie)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 i=null;try{i=o.querySelector(`#${t}`)??o.querySelector(t)}catch{i=o.querySelector(`[id="${t}"]`)}return i instanceof fn?i:null}_readOptions(){let t={},o=Ts(this.getAttribute("mode"));o!==void 0&&(t.mode=o);let i=oe(this.getAttribute("size"));i!==void 0&&(t.size=i);let r=this.getAttribute("enabled");return r!==null&&(t.enabled=r!=="false"&&r!=="0"),t.onObjectChange=s=>{this.dispatchEvent(new CustomEvent("polycss:object-change",{bubbles:!0,detail:{position:s.position,rotation:s.rotation}}))},t}_attach(){if(this._tc)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._tc=qo(o,this._readOptions());let i=this._findTargetMesh();if(i){let r=i.getMeshHandle();r&&this._tc.attach(r)}}connectedCallback(){this._attach()}disconnectedCallback(){this._tc&&(this._tc.destroy(),this._tc=null)}attributeChangedCallback(t,o,i){if(o!==i&&this._tc){if(t==="mode"){let r=Ts(i);r&&this._tc.setMode(r)}else if(t==="target"){let r=this._findTargetMesh();this._tc.attach(r?r.getMeshHandle()??null:null)}}}};var _u=typeof HTMLElement<"u"?HTMLElement:class{},Ou=["multiple","clear-on-miss"],lr=class extends _u{constructor(){super(...arguments);this._selection=null}static get observedAttributes(){return[...Ou]}_findScene(){let t=this.parentNode;for(;t;){if(t instanceof Ie)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 i=()=>{t.removeEventListener("polycss:scene-ready",i),this._attach()};t.addEventListener("polycss:scene-ready",i)}return}this._selection=Wo(o,this._readOptions())}connectedCallback(){this._attach()}disconnectedCallback(){this._selection&&(this._selection.destroy(),this._selection=null)}attributeChangedCallback(t,o,i){o!==i&&(this._selection&&(this._selection.destroy(),this._selection=null),this._attach())}};var cr={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},ur={ready:!0,textureLeafCount:0,readyTextureLeafCount:0,pendingTextureLeafCount:0,atlasTextureLeafCount:0,imageTextureLeafCount:0};function dr(){return{ready:!0,leafCount:0,atlasCount:0,imageCount:0,pendingCount:0,sizingCounts:{canonical:0,local:0,raster:0,image:0,unknown:0},imageRenderingCounts:{auto:0,pixelated:0,unknown:0},projectionCounts:{affine:0,projective:0,fallback:0,unknown:0},minLeafWidth:0,maxLeafWidth:0,minLeafHeight:0,maxLeafHeight:0,doubleSidedCount:0}}function pr(){return{runtimeAtlasUrlCount:0,snapshotAtlasCount:0,snapshotBackgroundCount:0,selfContained:!0}}function Yn(){return{rootFound:!1,projection:"unknown",perspectiveStyle:"",appliedPerspectiveStyle:""}}var Du={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:cr,textureReadiness:ur,textureStats:dr(),snapshotStats:pr(),cameraStats:Yn(),bucketCount:0};function Xn(e){return typeof e=="number"?{polygonCount:e}:e??{}}function Ct(e,n){return e.querySelectorAll(n).length}function Es(e,n){return(ws(e,n)?1:0)+Ct(e,n)}function As(e){if(!e)return!1;let n=/url\((?:"([^"]*)"|'([^']*)'|([^)]*))\)/g,t;for(;t=n.exec(e);){let o=(t[1]??t[2]??t[3]??"").trim();if(o&&!o.startsWith("data:"))return!0}return!1}function Iu(e){let n=0,t=e instanceof HTMLElement?e:null;t&&As(t.getAttribute("style"))&&n++;for(let o of Array.from(e.querySelectorAll("[style]")))o instanceof HTMLElement&&As(o.getAttribute("style"))&&n++;return n}function ws(e,n){let t=e;return typeof t.matches=="function"&&t.matches(n)}function qn(e,n){if(!n)return[e];let t=[];return ws(e,n)&&t.push(e),t.push(...Array.from(e.querySelectorAll(n))),t}function Hu(e){switch(e.toLowerCase()){case"b":return"quad";case"i":return"clippedSolid";case"s":return"atlas";case"u":return"stableTriangle";default:return null}}function Fu(e){if(e==null||e==="")return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function Wt(e){if(e==null||e==="")return;let n=Number(e);return Number.isFinite(n)?n:void 0}function zu(e){if(e==null||e==="")return;let n=e.split(",").map(t=>Number(t));if(!(n.length!==3||n.some(t=>!Number.isFinite(t))))return n}function Bu(e){return e==="orthographic"||e==="perspective"?e:"unknown"}function Vu(e,n){if(!n)return;let t=e.getAttribute("data-polycss-texture-ready");return t==="true"?!0:t==="false"?!1:e.style.opacity!=="0"}function mr(e,n){if(!e)return[];let t=Xn(n),o=[];for(let i of qn(e,t.scopeSelector))for(let r of Array.from(i.querySelectorAll("b,i,s,u"))){let s=r,c=Hu(s.tagName);if(!c)continue;let l=s.getAttribute("data-polycss-texture-backend")??(c==="atlas"?"atlas":void 0),d=Vu(s,l);o.push({element:s,strategy:c,polygonIndex:Fu(s.getAttribute("data-poly-index")),textureBackend:l,textureReady:d,textureLeafSizing:s.getAttribute("data-polycss-texture-leaf-sizing")??void 0,textureImageRendering:s.getAttribute("data-polycss-texture-image-rendering")??void 0,textureProjection:s.getAttribute("data-polycss-texture-projection")??void 0,textureLeafWidth:Wt(s.getAttribute("data-polycss-texture-leaf-width")),textureLeafHeight:Wt(s.getAttribute("data-polycss-texture-leaf-height")),doubleSided:s.getAttribute("data-polycss-double-sided")==="true"})}return o}function Ms(e,n){let t={...ur};for(let o of mr(e,n))o.textureBackend&&(t.textureLeafCount++,o.textureBackend==="image"?t.imageTextureLeafCount++:t.atlasTextureLeafCount++,o.textureReady===!1?t.pendingTextureLeafCount++:t.readyTextureLeafCount++);return t.ready=t.pendingTextureLeafCount===0,t}function Nu(e,n){let t=dr(),o=!1,i=!1;for(let r of mr(e,n))if(r.textureBackend){switch(t.leafCount++,r.textureBackend==="image"?t.imageCount++:t.atlasCount++,r.textureReady===!1&&t.pendingCount++,r.textureLeafSizing){case"canonical":case"local":case"raster":case"image":t.sizingCounts[r.textureLeafSizing]++;break;default:t.sizingCounts.unknown++;break}switch(r.textureImageRendering){case"auto":case"pixelated":t.imageRenderingCounts[r.textureImageRendering]++;break;default:t.imageRenderingCounts.unknown++;break}switch(r.textureProjection){case"affine":case"projective":case"fallback":t.projectionCounts[r.textureProjection]++;break;default:t.projectionCounts.unknown++;break}typeof r.textureLeafWidth=="number"&&(t.minLeafWidth=o?Math.min(t.minLeafWidth,r.textureLeafWidth):r.textureLeafWidth,t.maxLeafWidth=o?Math.max(t.maxLeafWidth,r.textureLeafWidth):r.textureLeafWidth,o=!0),typeof r.textureLeafHeight=="number"&&(t.minLeafHeight=i?Math.min(t.minLeafHeight,r.textureLeafHeight):r.textureLeafHeight,t.maxLeafHeight=i?Math.max(t.maxLeafHeight,r.textureLeafHeight):r.textureLeafHeight,i=!0),r.doubleSided&&t.doubleSidedCount++}return t.pendingCount=Math.min(t.pendingCount,t.leafCount),t.ready=t.pendingCount===0,t}function ju(e,n){let t=pr();if(!e)return t;let o=Xn(n);for(let i of qn(e,o.scopeSelector))t.runtimeAtlasUrlCount+=Iu(i),t.snapshotAtlasCount+=Es(i,"[data-polycss-snapshot-atlas]"),t.snapshotBackgroundCount+=Es(i,"[data-polycss-snapshot-bg]");return t.selfContained=t.runtimeAtlasUrlCount===0,t}function $u(e){let n=e instanceof HTMLElement?e:null;if(n){if(n.classList.contains("polycss-camera"))return n;let o=n.closest(".polycss-camera");if(o instanceof HTMLElement)return o}let t=e.querySelector(".polycss-camera");return t instanceof HTMLElement?t:null}function Wu(e,n){if(!e)return Yn();let t=Xn(n),o=null;for(let i of qn(e,t.scopeSelector))if(o=$u(i),o)break;return o?{rootFound:!0,projection:Bu(o.getAttribute("data-polycss-camera-projection")),perspectiveStyle:o.getAttribute("data-polycss-camera-perspective")??"",appliedPerspectiveStyle:o.getAttribute("data-polycss-camera-applied-perspective")??o.style.perspective??"",zoom:Wt(o.getAttribute("data-polycss-camera-zoom")),distance:Wt(o.getAttribute("data-polycss-camera-distance")),rotX:Wt(o.getAttribute("data-polycss-camera-rot-x")),rotY:Wt(o.getAttribute("data-polycss-camera-rot-y")),target:zu(o.getAttribute("data-polycss-camera-target"))}:Yn()}function Uu(e,n){let t=Xn(n);if(!e)return{...Du,surfaceLeafCounts:{...cr},textureReadiness:{...ur},textureStats:dr(),snapshotStats:pr(),cameraStats:Yn(),polygonCount:t.polygonCount??0};let o=qn(e,t.scopeSelector),i={...cr},r=0,s=0;for(let l of o)i.quad+=Ct(l,"b"),i.clippedSolid+=Ct(l,"i"),i.atlas+=Ct(l,"s"),i.stableTriangle+=Ct(l,"u"),r+=Ct(l,"q, .polycss-shadow-svg"),s+=Ct(l,".polycss-bucket");let c=i.quad+i.clippedSolid+i.atlas+i.stableTriangle;return{polygonCount:t.polygonCount??c,mountedPolygonLeafCount:c,shadowLeafCount:r,surfaceLeafCounts:i,textureReadiness:Ms(e,t),textureStats:Nu(e,t),snapshotStats:ju(e,t),cameraStats:Wu(e,t),bucketCount:s}}var Tt=class extends Error{constructor(n,t,o){super(t),this.name="PolySceneSnapshotError",this.code=n,this.url=o,Object.setPrototypeOf(this,new.target.prototype)}},Gu=`
|
|
520
520
|
html,
|
|
521
521
|
body {
|
|
522
522
|
width: 100%;
|
|
@@ -528,10 +528,10 @@ body {
|
|
|
528
528
|
position: relative;
|
|
529
529
|
overflow: hidden;
|
|
530
530
|
}
|
|
531
|
-
`,
|
|
532
|
-
`)}function
|
|
533
|
-
`)}function
|
|
534
|
-
`)}function
|
|
531
|
+
`,fr=["b","i","s","u"],Yu=["b","i","u"],Xu=["--plx","--ply","--plz","--plr","--plg","--plb","--pli","--par","--pag","--pab","--pai","--pnx","--pny","--pnz","--psr","--psg","--psb","--plam","--polycss-light-preview-active","--polycss-preview-r","--polycss-preview-g","--polycss-preview-b"],qu=["--clx","--cly","--clz","--shadow-ground-cssz"],Zu=["--polycss-atlas-size","--polycss-atlas-width","--polycss-atlas-height","--polycss-atlas-leaf-sizing","--polycss-atlas-url","--polycss-atlas-position","--polycss-atlas-image-size"],Qu=["--polycss-atlas-size","--polycss-atlas-width","--polycss-atlas-height","--polycss-atlas-leaf-sizing"];function Ku(e){return!!e&&typeof e.querySelector=="function"&&typeof e.cloneNode=="function"}function Ju(e){let n=e.closest(".polycss-camera");if(n)return n;let t=e.closest(".polycss-scene");return t?t.closest(".polycss-camera")??t:e.querySelector(".polycss-camera")??e.querySelector(".polycss-scene")}function bn(e){return[e,...Array.from(e.querySelectorAll("*"))]}function at(e,n){return e.matches(n)||!!e.querySelector(n)}function Ls(e,n){return e.tagName.toLowerCase()===n||!!e.querySelector(n)}function ed(e){let n=fr.filter(o=>Ls(e,o)),t=Yu.filter(o=>n.includes(o));return{hasCamera:at(e,".polycss-camera"),hasScene:at(e,".polycss-scene"),hasMesh:at(e,".polycss-mesh"),hasFpvHost:at(e,".polycss-fpv-host"),hasBucket:at(e,".polycss-bucket"),hasVoxelMesh:at(e,".polycss-voxel-mesh"),hasTransformGizmo:at(e,".polycss-transform-gizmo"),hasTransformRing:at(e,".polycss-transform-ring"),hasDynamicLighting:at(e,'.polycss-scene[data-polycss-lighting="dynamic"]'),hasQ:Ls(e,"q"),leafTags:n,solidLeafTags:t}}function yn(e,n=".polycss-scene "){return e.map(t=>`${n}${t}`).join(`,
|
|
532
|
+
`)}function td(e){return e.map(n=>`.polycss-scene[data-polycss-lighting="dynamic"] :not(.polycss-bucket) > ${n}`).join(`,
|
|
533
|
+
`)}function nd(e){let n=['@property --plx { syntax: "<number>"; inherits: true; initial-value: 0; }','@property --ply { syntax: "<number>"; inherits: true; initial-value: 0; }','@property --plz { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --plr { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --plg { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --plb { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --pli { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --par { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --pag { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --pab { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --pai { syntax: "<number>"; inherits: true; initial-value: 0.4; }','@property --pnx { syntax: "<number>"; inherits: true; initial-value: 0; }','@property --pny { syntax: "<number>"; inherits: true; initial-value: 0; }','@property --pnz { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --psr { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --psg { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --psb { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --plam { syntax: "<number>"; inherits: true; initial-value: 0; }'];return e&&n.push('@property --clx { syntax: "<number>"; inherits: true; initial-value: 0.01; }','@property --cly { syntax: "<number>"; inherits: true; initial-value: 0; }','@property --clz { syntax: "<number>"; inherits: true; initial-value: 1; }','@property --shadow-ground-cssz { syntax: "<number>"; inherits: true; initial-value: 0; }'),n.join(`
|
|
534
|
+
`)}function od(e){let n=[nd(e.hasQ)];return e.hasBucket&&n.push(`
|
|
535
535
|
.polycss-scene[data-polycss-lighting="dynamic"] .polycss-bucket {
|
|
536
536
|
--plam: max(0, calc(
|
|
537
537
|
var(--pnx) * var(--plx) +
|
|
@@ -540,7 +540,7 @@ body {
|
|
|
540
540
|
));
|
|
541
541
|
}
|
|
542
542
|
`),e.leafTags.length>0&&n.push(`
|
|
543
|
-
${
|
|
543
|
+
${td(e.leafTags)} {
|
|
544
544
|
--plam: max(0, calc(
|
|
545
545
|
var(--pnx) * var(--plx) +
|
|
546
546
|
var(--pny) * var(--ply) +
|
|
@@ -574,7 +574,7 @@ ${Wu(e.leafTags)} {
|
|
|
574
574
|
-webkit-mask-size: var(--polycss-atlas-image-size);
|
|
575
575
|
}
|
|
576
576
|
`),e.solidLeafTags.length>0&&n.push(`
|
|
577
|
-
${
|
|
577
|
+
${yn(e.solidLeafTags)} {
|
|
578
578
|
color: rgb(
|
|
579
579
|
calc(255 * var(--psr) * (var(--par) * var(--pai)
|
|
580
580
|
+ var(--plr) * var(--pli) * var(--plam)))
|
|
@@ -604,7 +604,7 @@ ${mn(e.solidLeafTags)} {
|
|
|
604
604
|
opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
|
|
605
605
|
}
|
|
606
606
|
`),n.join(`
|
|
607
|
-
`)}function
|
|
607
|
+
`)}function rd(e){let n=[Gu];if(e.hasScene&&n.push(`
|
|
608
608
|
.polycss-scene,
|
|
609
609
|
.polycss-scene *,
|
|
610
610
|
.polycss-scene *::before,
|
|
@@ -643,7 +643,7 @@ ${mn(e.solidLeafTags)} {
|
|
|
643
643
|
transform-style: preserve-3d;
|
|
644
644
|
}
|
|
645
645
|
`),e.leafTags.length>0&&n.push(`
|
|
646
|
-
${
|
|
646
|
+
${yn(e.leafTags)} {
|
|
647
647
|
position: absolute;
|
|
648
648
|
display: block;
|
|
649
649
|
transform-origin: 0 0;
|
|
@@ -659,7 +659,7 @@ ${mn(e.leafTags)} {
|
|
|
659
659
|
background-repeat: no-repeat;
|
|
660
660
|
}
|
|
661
661
|
`),e.solidLeafTags.length>0&&!e.hasDynamicLighting&&n.push(`
|
|
662
|
-
${
|
|
662
|
+
${yn(e.solidLeafTags)} {
|
|
663
663
|
color: currentColor;
|
|
664
664
|
}
|
|
665
665
|
`),e.leafTags.includes("b")&&n.push(`
|
|
@@ -766,13 +766,13 @@ ${mn(e.solidLeafTags)} {
|
|
|
766
766
|
.polycss-scene q::after {
|
|
767
767
|
content: none;
|
|
768
768
|
}
|
|
769
|
-
`),e.hasTransformGizmo){let t=e.leafTags.length>0?e.leafTags:
|
|
770
|
-
${
|
|
769
|
+
`),e.hasTransformGizmo){let t=e.leafTags.length>0?e.leafTags:fr;n.push(`
|
|
770
|
+
${yn(t,".polycss-mesh.polycss-transform-gizmo ")} {
|
|
771
771
|
backface-visibility: visible;
|
|
772
772
|
transition: color 150ms ease-out, border-color 150ms ease-out, background-color 150ms ease-out;
|
|
773
773
|
}
|
|
774
|
-
`)}if(e.hasTransformRing){let t=e.leafTags.length>0?e.leafTags:
|
|
775
|
-
${
|
|
774
|
+
`)}if(e.hasTransformRing){let t=e.leafTags.length>0?e.leafTags:fr;n.push(`
|
|
775
|
+
${yn(t,".polycss-mesh.polycss-transform-ring ")} {
|
|
776
776
|
--ring-inner-r: calc(var(--ring-inner-ratio, 0.92) * 50%);
|
|
777
777
|
--ring-outer-r: calc(var(--ring-outer-ratio, 1) * 50%);
|
|
778
778
|
-webkit-mask: radial-gradient(circle at 50% 50%,
|
|
@@ -788,12 +788,12 @@ ${mn(t,".polycss-mesh.polycss-transform-ring ")} {
|
|
|
788
788
|
black var(--ring-outer-r),
|
|
789
789
|
transparent var(--ring-outer-r));
|
|
790
790
|
}
|
|
791
|
-
`)}return e.hasDynamicLighting&&n.push(
|
|
791
|
+
`)}return e.hasDynamicLighting&&n.push(od(e)),n.map(t=>t.trim()).filter(Boolean).join(`
|
|
792
792
|
|
|
793
|
-
`)}function
|
|
794
|
-
${l.property}: url("${
|
|
793
|
+
`)}function hr(e){let n=e.style;return n&&typeof n.getPropertyValue=="function"?n:null}function ks(e){let n=e.getAttribute("style");n!==null&&n.trim()===""&&e.removeAttribute("style")}function id(e,n){let t=e;for(;t;){let o=hr(t)?.getPropertyValue(n).trim();if(o)return o;t=t.parentElement}return""}function sd(e,n,t){let o=bn(e),i=bn(n);for(let r=0;r<i.length;r++){let s=o[r],c=i[r];if(!s||!c)continue;let l=hr(c);if(!l)continue;if(c.classList.contains("polycss-mesh")){let p=l.getPropertyValue("--origin").trim();p&&(l.setProperty("transform-origin",p),l.removeProperty("--origin"))}let d=c.tagName.toLowerCase();if(d==="s"){let p=l.getPropertyValue("--polycss-atlas-size").trim(),y=l.getPropertyValue("--polycss-atlas-width").trim()||p,g=l.getPropertyValue("--polycss-atlas-height").trim()||p;if(y&&l.setProperty("width",y),g&&l.setProperty("height",g),t.hasDynamicLighting)for(let b of Qu)l.removeProperty(b);else for(let b of Zu)l.removeProperty(b)}else if(d==="b"||d==="i"||d==="u"){let p=id(s,"--polycss-paint"),y=t.hasDynamicLighting?"":s.ownerDocument.defaultView?.getComputedStyle(s).color;y?l.setProperty("color",y):p&&!l.getPropertyValue("color")&&l.setProperty("color",p)}if(!t.hasDynamicLighting)for(let p of Xu)l.removeProperty(p);if(!t.hasQ)for(let p of qu)l.removeProperty(p);l.removeProperty("will-change"),l.removeProperty("--polycss-paint"),ks(c)}}function ad(e){for(let n of Array.from(e.querySelectorAll("script")))n.remove();for(let n of bn(e))for(let t of Array.from(n.attributes))t.name.toLowerCase().startsWith("on")&&n.removeAttribute(t.name)}function _s(e){let n=e.trim();return n===""||n.startsWith("#")||/^data:/i.test(n)}function ld(e,n){return/^data:/i.test(e.trim())?e.trim():Os(e,n.baseUrl)}function Rs(e){let n=/url\(\s*(?:(["'])(.*?)\1|([^)]*?))\s*\)/i.exec(e);return(n?.[2]??n?.[3]??"").trim()||null}function cd(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\a ")}function Os(e,n){try{return new URL(e,n).href}catch{throw new Tt("ASSET_INLINE_FAILED",`exportPolySceneSnapshot: could not resolve asset URL "${e}".`,e)}}function ud(e){let n=(()=>{try{return new URL(e).pathname.toLowerCase()}catch{return e.toLowerCase()}})();return n.endsWith(".jpg")||n.endsWith(".jpeg")?"image/jpeg":n.endsWith(".png")?"image/png":n.endsWith(".webp")?"image/webp":n.endsWith(".gif")?"image/gif":n.endsWith(".svg")?"image/svg+xml":n.endsWith(".avif")?"image/avif":"application/octet-stream"}function dd(e){let n=new Uint8Array(e),t=32768,o="";for(let i=0;i<n.length;i+=t){let r=n.subarray(i,i+t);o+=String.fromCharCode(...r)}return btoa(o)}function pd(e){return/^(blob|filesystem):/i.test(e.trim())}function md(e){return new Promise((n,t)=>{let o=new XMLHttpRequest;o.open("GET",e,!0),o.responseType="blob",o.onload=()=>{o.status===0||o.status>=200&&o.status<300?n(o.response):t(new Error(`XHR ${o.status}`))},o.onerror=()=>t(new Error("XHR request failed")),o.send()})}async function fd(e){let n=pd(e);try{if(typeof fetch!="function")throw new Error("fetch is not available");let t=await fetch(e,n?void 0:{credentials:"same-origin"});if(!t.ok)throw new Error(`HTTP ${t.status}`);return await t.blob()}catch(t){if(n&&typeof XMLHttpRequest=="function")return md(e);throw t}}async function Ds(e,n){if(_s(e))return e;let t=Os(e,n.baseUrl),o=n.cache.get(t);if(o)return o;let i=(async()=>{try{let r=await fd(t),s=r.type||ud(t),c=dd(await r.arrayBuffer());return`data:${s};base64,${c}`}catch{throw new Tt("ASSET_INLINE_FAILED",`exportPolySceneSnapshot: could not inline asset "${t}".`,t)}})();return n.cache.set(t,i),i}async function gr(e,n){let t=/url\(\s*(?:(["'])(.*?)\1|([^)]*?))\s*\)/gi,o="",i=0,r;for(;(r=t.exec(e))!==null;){o+=e.slice(i,r.index);let s=(r[2]??r[3]??"").trim(),c=await Ds(s,n);o+=_s(s)?r[0]:`url("${c}")`,i=t.lastIndex}return o+e.slice(i)}async function gd(e,n){for(let t of bn(e)){let o=t.getAttribute("style");o&&t.setAttribute("style",await gr(o,n))}for(let t of Array.from(e.querySelectorAll("style")))t.textContent=await gr(t.textContent??"",n)}function hd(e){return{position:e.getPropertyValue("background-position").trim(),size:e.getPropertyValue("background-size").trim(),repeat:e.getPropertyValue("background-repeat").trim()}}function yd(e,n){n.position&&e.setProperty("background-position",n.position),n.size&&e.setProperty("background-size",n.size),n.repeat&&e.setProperty("background-repeat",n.repeat)}async function bd(e,n){let t=[],o=new Map,i=new Map,r=async l=>{let d=ld(l,n),p=o.get(d);if(p)return p;let y=`a${o.size}`;return o.set(d,y),i.set(d,await Ds(l,n)),y},s=l=>{for(let[d,p]of o)if(p===l)return i.get(d)??"";return""};for(let l of bn(e)){let d=hr(l);if(!d||l.tagName.toLowerCase()!=="s")continue;let p=Rs(d.getPropertyValue("--polycss-atlas-url"));if(p&&!p.startsWith("#")){let v=await r(p),h="data-polycss-snapshot-atlas";l.setAttribute(h,v),d.removeProperty("--polycss-atlas-url"),t.push({attr:h,value:v,property:"--polycss-atlas-url",dataUrl:s(v)})}let y=Rs(d.getPropertyValue("background-image"));if(!y||y.startsWith("#"))continue;let g=await r(y),b="data-polycss-snapshot-bg",x=hd(d);l.setAttribute(b,g),d.removeProperty("background"),d.removeProperty("background-image"),yd(d,x),t.push({attr:b,value:g,property:"background-image",dataUrl:s(g)}),ks(l)}let c=new Set;return t.filter(l=>{let d=`${l.attr}|${l.value}|${l.property}`;return c.has(d)?!1:(c.add(d),!0)}).map(l=>`.polycss-scene [${l.attr}="${l.value}"] {
|
|
794
|
+
${l.property}: url("${cd(l.dataUrl)}");
|
|
795
795
|
}`).join(`
|
|
796
796
|
|
|
797
|
-
`)}function
|
|
797
|
+
`)}function xd(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Pd(e){return e.replace(/<\/style/gi,"<\\/style")}function vd(e){return e.baseURI||e.URL||e.defaultView?.location.href||"http://localhost/"}async function Sd(e){if(!Ku(e))throw new Tt("INVALID_TARGET","exportPolySceneSnapshot: target must be an Element.");let n=Ju(e);if(!n)throw new Tt("SCENE_NOT_FOUND","exportPolySceneSnapshot: target is not inside and does not contain a rendered PolyCSS scene.");let t=e.ownerDocument,o={baseUrl:vd(t),cache:new Map},i=n.cloneNode(!0),r=ed(i);sd(n,i,r),ad(i);let s=await bd(i,o);await gd(i,o);let c=await gr([rd(r),s].filter(Boolean).join(`
|
|
798
798
|
|
|
799
|
-
`),o);return["<!doctype html>","<html>","<head>",'<meta charset="utf-8">',t.title?`<title>${
|
|
799
|
+
`),o);return["<!doctype html>","<html>","<head>",'<meta charset="utf-8">',t.title?`<title>${xd(t.title)}</title>`:"",`<style>${Pd(c)}</style>`,"</head>","<body>",i.outerHTML,"</body>","</html>"].filter(Boolean).join("")}import{boxPolygons as Cd,planePolygons as Td,ringPolygons as Ed,octahedronPolygons as Ad,spherePolygons as wd,tetrahedronPolygons as Md,icosahedronPolygons as Ld,dodecahedronPolygons as Rd,cylinderPolygons as kd,conePolygons as _d,torusPolygons as Od}from"@layoutit/polycss-core";function Qe(e){return{polygons:e,objectUrls:[],warnings:[],dispose:()=>{}}}function Dd(e={}){return Qe(Cd(e))}function Id(e){return Qe(Td(e))}function Hd(e){return Qe(Ed(e))}function Fd(e){return Qe(Ad(e))}function zd(e={}){return Qe(wd(e))}function Bd(e={}){return Qe(Md(e))}function Vd(e={}){return Qe(Ld(e))}function Nd(e={}){return Qe(Rd(e))}function jd(e={}){return Qe(kd(e))}function $d(e={}){return Qe(_d(e))}function Wd(e={}){return Qe(Od(e))}import{boxPolygons as Ud,planePolygons as Gd,ringPolygons as Yd,octahedronPolygons as Xd,spherePolygons as qd,tetrahedronPolygons as Zd,icosahedronPolygons as Qd,dodecahedronPolygons as Kd,cylinderPolygons as Jd,conePolygons as ep,torusPolygons as tp,computeSceneBbox as np}from"@layoutit/polycss-core";var op=typeof HTMLElement<"u"?HTMLElement:class{};function rp(e){return e.closest("poly-scene")??null}function xe(e,n,t){let o=e.getAttribute(n);if(!o)return t;let i=parseFloat(o);return Number.isFinite(i)?i:t}function Ke(e,n,t){return e.getAttribute(n)??t}function Et(e,n){let t=e.getAttribute(n);if(!t)return;let o=t.split(",").map(i=>parseFloat(i.trim()));if(!(o.length!==3||o.some(i=>!Number.isFinite(i))))return[o[0],o[1],o[2]]}function ip(e){if(e.length===0)return e;let n=np(e),t=(n.min[0]+n.max[0])/2,o=(n.min[1]+n.max[1])/2,i=(n.min[2]+n.max[2])/2;if(t===0&&o===0&&i===0)return e;let r=s=>[s[0]-t,s[1]-o,s[2]-i];return e.map(s=>({...s,vertices:s.vertices.map(r)}))}var He=class extends op{constructor(){super(...arguments);this._handle=null}connectedCallback(){this._mount()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,i){if(o!==i&&this._handle){if(t==="position"||t==="scale"||t==="rotation"||t==="cast-shadow"||t==="receive-shadow"){this._handle.setTransform({position:Et(this,"position"),scale:(()=>{let r=this.getAttribute("scale");if(!r)return;if(r.includes(","))return Et(this,"scale");let s=parseFloat(r);return Number.isFinite(s)?s:void 0})(),rotation:Et(this,"rotation"),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow")});return}this._tearDown(),this._mount()}}_tearDown(){if(this._handle){try{this._handle.dispose()}catch{}this._handle=null}}_mount(){let t=rp(this);if(!t)return;let o=t.getScene?.();if(!o)return;let i=this.buildPolygons();this.hasAttribute("auto-center")&&(i=ip(i));let r={polygons:i,objectUrls:[],warnings:[],dispose:()=>{}};this._handle=o.add(r,{position:Et(this,"position"),scale:(()=>{let s=this.getAttribute("scale");if(!s)return;if(s.includes(","))return Et(this,"scale");let c=parseFloat(s);return Number.isFinite(c)?c:void 0})(),rotation:Et(this,"rotation"),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow"),excludeFromAutoCenter:this.hasAttribute("exclude-from-auto-center"),merge:!1})}},yr=class extends He{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){let n=this.getAttribute("size"),t=n?parseFloat(n):void 0;return Ud({size:t!==void 0&&Number.isFinite(t)?t:void 0,color:Ke(this,"color")})}},br=class extends He{static get observedAttributes(){return["axis","size","offset","color","auto-center","position","scale","rotation","cast-shadow","receive-shadow"]}buildPolygons(){let n=xe(this,"axis",2),t=n===0||n===1||n===2?n:2,o=this.getAttribute("offset"),i=o===null?0:parseFloat(o);return Gd({axis:t,size:xe(this,"size",.4),offset:Number.isFinite(i)?i:0,color:Ke(this,"color")})}},xr=class extends He{static get observedAttributes(){return["axis","radius","segments","half-thickness","color","auto-center","position","scale","rotation"]}buildPolygons(){let n=xe(this,"axis",2),t=n===0||n===1||n===2?n:2,o=this.getAttribute("half-thickness");return Yd({axis:t,radius:xe(this,"radius",50),segments:xe(this,"segments",32),halfThickness:o?parseFloat(o):void 0,color:Ke(this,"color")})}},Pr=class extends He{static get observedAttributes(){return["size","color","center","auto-center","position","scale","rotation"]}buildPolygons(){return Xd({center:Et(this,"center")??[0,0,0],size:xe(this,"size",50),color:Ke(this,"color")})}},vr=class extends He{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){return Zd({size:xe(this,"size",100),color:Ke(this,"color")})}},Sr=class extends He{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){return Qd({size:xe(this,"size",100),color:Ke(this,"color")})}},Cr=class extends He{static get observedAttributes(){return["size","color","auto-center","position","scale","rotation"]}buildPolygons(){return Kd({size:xe(this,"size",100),color:Ke(this,"color")})}},Tr=class extends He{static get observedAttributes(){return["radius","subdivisions","color","auto-center","position","scale","rotation"]}buildPolygons(){return qd({radius:xe(this,"radius",50),subdivisions:xe(this,"subdivisions",1),color:Ke(this,"color")})}},Er=class extends He{static get observedAttributes(){return["radius","radius-top","height","radial-segments","color","auto-center","position","scale","rotation"]}buildPolygons(){let n=this.getAttribute("radius-top");return Jd({radius:xe(this,"radius",50),radiusTop:n?parseFloat(n):void 0,height:xe(this,"height",100),radialSegments:xe(this,"radial-segments",12),color:Ke(this,"color")})}},Ar=class extends He{static get observedAttributes(){return["radius","height","radial-segments","color","auto-center","position","scale","rotation"]}buildPolygons(){return ep({radius:xe(this,"radius",50),height:xe(this,"height",100),radialSegments:xe(this,"radial-segments",12),color:Ke(this,"color")})}},wr=class extends He{static get observedAttributes(){return["radius","tube","radial-segments","tubular-segments","color","auto-center","position","scale","rotation"]}buildPolygons(){return tp({radius:xe(this,"radius",50),tube:xe(this,"tube",15),radialSegments:xe(this,"radial-segments",12),tubularSegments:xe(this,"tubular-segments",16),color:Ke(this,"color")})}};export*from"@layoutit/polycss-core";export{yr as PolyBoxElement,sr as PolyCameraElement,Ar as PolyConeElement,Er as PolyCylinderElement,Cr as PolyDodecahedronElement,rr as PolyFirstPersonControlsElement,Sr as PolyIcosahedronElement,Jo as PolyIframeElement,or as PolyMapControlsElement,fn as PolyMeshElement,Pr as PolyOctahedronElement,nr as PolyOrbitControlsElement,hn as PolyOrthographicCameraElement,ir as PolyPerspectiveCameraElement,br as PolyPlaneElement,tr as PolyPolygonElement,xr as PolyRingElement,Ie as PolySceneElement,Tt as PolySceneSnapshotError,lr as PolySelectElement,Tr as PolySphereElement,vr as PolyTetrahedronElement,wr as PolyTorusElement,ar as PolyTransformControlsElement,Rt as buildAtlasPages,Rg as buildPolyMeshTransform,kg as buildPolySceneTransform,si as buildTextureEdgeRepairSets,Uu as collectPolyRenderStats,Ms as collectPolyTextureReadiness,ai as computeTextureAtlasPlanPublic,Dd as createPolyBox,vc as createPolyCamera,$d as createPolyCone,jd as createPolyCylinder,Nd as createPolyDodecahedron,$o as createPolyFirstPersonControls,Vd as createPolyIcosahedron,No as createPolyMapControls,Fd as createPolyOctahedron,Vo as createPolyOrbitControls,St as createPolyOrthographicCamera,dn as createPolyPerspectiveCamera,Id as createPolyPlane,Hd as createPolyRing,Bo as createPolyScene,zd as createPolySphere,Bd as createPolyTetrahedron,Wd as createPolyTorus,Wo as createSelect,qo as createTransformControls,pi as cssBorderShapeForPlan,_g as cssDistanceToWorld,Dg as cssPositionToWorld,Sd as exportPolySceneSnapshot,io as filterAtlasPlans,di as formatBorderShapeEntryMatrix,ci as formatCssLengthPx,li as formatMatrix3d,ui as formatSolidQuadEntryMatrix,bt as getSolidPaintDefaults,ro as getSolidPaintDefaultsFromPlans,Oo as injectPolyBaseStyles,Tn as isBorderShapeSupported,je as isFullRectSolid,$e as isProjectiveQuadPlan,rt as isSolidTrianglePlan,En as isSolidTriangleSupported,wt as packTextureAtlasPlansWithScale,Og as polyCssDistanceToWorld,Ig as polyCssPositionToWorld,mr as queryPolyLeaves,Ft as renderPolygonsWithStableTriangles,xt as renderPolygonsWithTextureAtlas,sn as renderPolygonsWithTextureAtlasAsync,ln as updatePolygonsWithStableTopology,Ao as updatePolygonsWithStableTriangles,an as updateStableTriangleFrame,Bg as worldDirectionToPolyCss,zg as worldDirectionalLightToPolyCss,Hg as worldDistanceToCss,Fg as worldDistanceToPolyCss,Vg as worldPositionToPolyCss};
|