@layoutit/polycss-vue 0.2.5 → 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/index.cjs +4 -4
- package/dist/index.d.cts +296 -4
- package/dist/index.d.ts +296 -4
- package/dist/index.js +4 -4
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{defineComponent as
|
|
1
|
+
import{defineComponent as Fa,h as Va,provide as za,computed as Ba}from"vue";import{ref as dn,shallowRef as Oa,watch as oo}from"vue";import{buildPolyCameraSceneTransform as ka,capturePolyCameraSnapshot as Da,createIsometricCamera as Ia}from"@layoutit/polycss-core";function cn(e){let t={cameraState:{...e}},n=new Set;function o(){for(let r of n)r()}return{getState(){return t},setState(r){t={...t,...r},o()},subscribe(r){return n.add(r),()=>n.delete(r)},updateCameraFromRef(r){return t={cameraState:{...r.state}},o(),!0},notifyAll(){o()}}}function mn(e,t,n,o){if(!e)return;let r=Da(t,{projection:n,perspectiveStyle:o});e.dataset.polycssCameraProjection=r.projection,e.dataset.polycssCameraPerspective=r.perspectiveStyle,e.dataset.polycssCameraAppliedPerspective=r.appliedPerspectiveStyle,e.dataset.polycssCameraZoom=String(r.state.zoom),e.dataset.polycssCameraDistance=String(r.state.distance),e.dataset.polycssCameraRotX=String(r.state.rotX),e.dataset.polycssCameraRotY=String(r.state.rotY),e.dataset.polycssCameraTarget=r.state.target.join(",")}function gt(e){let t=Ia({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),n=Oa(t),o=dn(null),r=dn(null),a=dn([0,0,0]),i=cn(t.state);oo(()=>({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance,projection:e.value.projection,perspectiveStyle:e.value.perspectiveStyle}),(s,d)=>{let m={};s.zoom!==void 0&&s.zoom!==d?.zoom&&(m.zoom=s.zoom),s.target!==void 0&&s.target!==d?.target&&(m.target=s.target),s.rotX!==void 0&&s.rotX!==d?.rotX&&(m.rotX=s.rotX),s.rotY!==void 0&&s.rotY!==d?.rotY&&(m.rotY=s.rotY),s.distance!==void 0&&s.distance!==d?.distance&&(m.distance=s.distance),Object.keys(m).length>0&&(t.update(m),l(),i.updateCameraFromRef(t),i.notifyAll()),mn(r.value,t,e.value.projection,e.value.perspectiveStyle)}),oo(r,s=>mn(s,t,e.value.projection,e.value.perspectiveStyle),{flush:"post"});function l(){let s=o.value;s&&(s.style.transform=ka(t.state,{autoCenterOffset:a.value}),mn(r.value,t,e.value.projection,e.value.perspectiveStyle))}return{store:i,cameraRef:n,sceneElRef:o,cameraElRef:r,autoCenterOffset:a,applyTransformDirect:l}}var ce=Symbol("polycss-camera");var Lt=Fa({name:"PolyOrthographicCamera",props:{zoom:{type:Number},target:{type:Array},rotX:{type:Number},rotY:{type:Number},distance:{type:Number},class:{type:String}},setup(e,{slots:t}){let n=Ba(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance,projection:"orthographic",perspectiveStyle:"none"})),{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:l,applyTransformDirect:s}=gt(n);return za(ce,{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:l,applyTransformDirect:s}),()=>Va("div",{ref:i,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:"1000000px"},"data-polycss-camera-projection":"orthographic","data-polycss-camera-perspective":"none","data-polycss-camera-applied-perspective":"1000000px","data-polycss-camera-zoom":r.value.state.zoom,"data-polycss-camera-distance":r.value.state.distance,"data-polycss-camera-rot-x":r.value.state.rotX,"data-polycss-camera-rot-y":r.value.state.rotY,"data-polycss-camera-target":r.value.state.target.join(",")},t.default?.())}});import{defineComponent as _a,h as Ha,provide as Na,computed as ja}from"vue";var ro=32e3,ao=_a({name:"PolyPerspectiveCamera",props:{zoom:{type:Number},target:{type:Array},rotX:{type:Number},rotY:{type:Number},distance:{type:Number},perspective:{type:Number,default:void 0},class:{type:String}},setup(e,{slots:t}){let n=ja(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance,projection:"perspective",perspectiveStyle:`${typeof e.perspective=="number"?e.perspective:ro}px`})),{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:l,applyTransformDirect:s}=gt(n);return Na(ce,{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:l,applyTransformDirect:s}),()=>{let d=`${typeof e.perspective=="number"?e.perspective:ro}px`;return Ha("div",{ref:i,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:d},"data-polycss-camera-projection":"perspective","data-polycss-camera-perspective":d,"data-polycss-camera-applied-perspective":d,"data-polycss-camera-zoom":r.value.state.zoom,"data-polycss-camera-distance":r.value.state.distance,"data-polycss-camera-rot-x":r.value.state.rotX,"data-polycss-camera-rot-y":r.value.state.rotY,"data-polycss-camera-target":r.value.state.target.join(",")},t.default?.())}}});import{defineComponent as Ui,h as Wi,inject as qi,provide as Gi,computed as be,ref as Zt,watch as qo,watchEffect as Go,onMounted as Zo,onUpdated as Zi,onBeforeUnmount as Ki}from"vue";import{DEFAULT_SEAM_BLEED as Ko,parseHexColor as Qo,resolvePolyTextureLeafGeometry as Qi,worldDirectionToCss as Ji}from"@layoutit/polycss-core";import{computed as Ya}from"vue";import{buildSceneContext as Xa,mergePolygons as $a}from"@layoutit/polycss-core";function Rt(e,t){return Ya(()=>{let{directionalLight:n}=t.value,o=Xa({polygons:e.value});return{polygons:$a(o.context.polygons),sceneBbox:o.context.sceneBbox}})}var io="polycss-styles";function _t(e=typeof document<"u"?document:null){if(!e||e.getElementById(io))return;let t=e.createElement("style");t.id=io,t.textContent=Ua,e.head.appendChild(t)}var Ua=`
|
|
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,
|
|
@@ -140,8 +140,8 @@ import{defineComponent as ha,h as Pa,provide as va,computed as xa}from"vue";impo
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
.polycss-scene s {
|
|
143
|
-
width: var(--polycss-atlas-size, 64px);
|
|
144
|
-
height: var(--polycss-atlas-size, 64px);
|
|
143
|
+
width: var(--polycss-atlas-width, var(--polycss-atlas-size, 64px));
|
|
144
|
+
height: var(--polycss-atlas-height, var(--polycss-atlas-size, 64px));
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
.polycss-scene u {
|
|
@@ -426,4 +426,4 @@ import{defineComponent as ha,h as Pa,provide as va,computed as xa}from"vue";impo
|
|
|
426
426
|
.polycss-scene[data-polycss-lighting="dynamic"] q {
|
|
427
427
|
opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
|
|
428
428
|
}
|
|
429
|
-
`;import{parsePureColor as fc}from"@layoutit/polycss-core";import{inject as Ra}from"vue";var Qt=Symbol("polycss/scene-context");function Nn(){return Ra(Qt,null)}import{isSolidTrianglePlan as it,isProjectiveQuadPlan as st,buildTextureEdgeRepairSets as Vt,buildSeamBleedPolygonEdges as _t,buildSeamBleedPolygonSet as pd,cssBorderShapeForPlan as yd}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as Oa,safariCssProjectiveUnsupported as Yn,parseHex as Da,rgbKey as ka}from"@layoutit/polycss-core";function Jt(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function en(e){if(jn(e))return!0;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function At(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")&&!!t.supports("corner-bottom-right-shape","bevel")&&!!t.supports("corner-bottom-left-shape","bevel")}function jn(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")}function rt(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function $n(e,t,n,o,r){let a=new Set(o?.disable??[]);return Oa(e,t,a,{solidTriangleSupported:en(n),projectiveQuadSupported:rt(n),cornerShapeSupported:At(n),borderShapeSupported:Jt(n)},Da,ka,r)}function tn(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let a=n.size>0?{disable:Array.from(n)}:void 0;return $n(e,t,r,a)}function je(e){let t=e??(typeof document<"u"?document:null);if(!t){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=typeof matchMedia<"u"?matchMedia:void 0;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}return Jt(t)}function $e(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=typeof CSS<"u"?CSS:void 0;if(n?.supports?.("corner-top-left-shape","bevel")&&n.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let r=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||r}return en(t)}import{filterAtlasPlans as Ia}from"@layoutit/polycss-core";function nn(e,t,n,o){let r=o??(typeof document<"u"?document:null);return Ia(e,t,n,{solidTriangleSupported:$e(o),projectiveQuadSupported:o?rt(o):!0,borderShapeSupported:je(o),cornerShapeSupported:r?At(r):!1})}import{packTextureAtlasPlansWithScaleCore as Fa}from"@layoutit/polycss-core";function Xn(e){if(!e)return!1;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function on(e,t,n){return Fa(e,t,Xn(n))}import{expandClipPoints as Va,TEXTURE_TRIANGLE_BLEED as _a,TEXTURE_EDGE_REPAIR_ALPHA_MIN as Ba,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as za,TEXTURE_EDGE_REPAIR_RADIUS as Un}from"@layoutit/polycss-core";var Xe=new Map;function Zn(e){let t=Xe.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),Xe.set(e,t),t.then(()=>{Xe.get(e)===t&&Xe.delete(e)},()=>{Xe.get(e)===t&&Xe.delete(e)})),t}function ye(e,t,n=1,o=0,r=0,a=1,i=0,u=0){e.setTransform(n*t,o*t,r*t,a*t,i*t,u*t)}function rn(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function an(e){let t=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(t*255)))}function Qn(e,t,n,o,r,a,i){let u=Math.round(t*i),s=Math.round(n*i),d=Math.max(1,Math.round(o*i)),m=Math.max(1,Math.round(r*i)),p=e.getImageData(u,s,d,m),l=p.data,h=a.r,y=a.g,P=a.b;for(let x=0;x<l.length;x+=4)l[x+3]!==0&&(l[x]=an(rn(l[x])*h),l[x+1]=an(rn(l[x+1])*y),l[x+2]=an(rn(l[x+2])*P));e.putImageData(p,u,s)}function Jn(e,t,n,o,r,a,i){let u=t.naturalWidth||t.width||1,s=t.naturalHeight||t.height||1,d=Math.max(r/u,a/s),m=u*d,p=s*d;ye(e,i),e.drawImage(t,n+(r-m)/2,o+(a-p)/2,m,p)}function at(e,t){return Math.max(0,Math.min(t,e))}function sn(e,t,n,o,r,a,i,u){let s=t.naturalWidth||t.width||1,d=t.naturalHeight||t.height||1,m=at(Math.min(n.minU,n.maxU)*s,s),p=at(Math.max(n.minU,n.maxU)*s,s),l=at(Math.min(n.minV,n.maxV)*d,d),h=at(Math.max(n.minV,n.maxV)*d,d),y=Math.floor(m),P=Math.floor(l),x=Math.ceil(p)-y,T=Math.ceil(h)-P;x<1&&(y=Math.floor(at((n.minU+n.maxU)/2*s,s-1)),x=1),T<1&&(P=Math.floor(at((n.minV+n.maxV)/2*d,d-1)),T=1),y=Math.max(0,Math.min(s-1,y)),P=Math.max(0,Math.min(d-1,P)),x=Math.max(1,Math.min(s-y,x)),T=Math.max(1,Math.min(d-P,T)),ye(e,u),e.drawImage(t,y,P,x,T,o,r,a,i)}function eo(e){return e==="repeat"||e==="mirrored-repeat"}function Wn(e,t){return eo(e)?Math.floor(t):0}function qn(e,t){return eo(e)?Math.ceil(t)-1:0}function Gn(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function Kn(e,t,n,o,r,a,i){let u=r?Wn(a,r.minU):0,s=r?qn(a,r.maxU):0,d=r?Wn(i,r.minV):0,m=r?qn(i,r.maxV):0;for(let p=u;p<=s;p++)for(let l=d;l<=m;l++){let h=Gn(a,p),y=Gn(i,l);if(!h&&!y){e.drawImage(t,p*n,l*o);continue}e.save(),e.translate((h?p+1:p)*n,(y?l+1:l)*o),e.scale(h?-1:1,y?-1:1),e.drawImage(t,0,0),e.restore()}}function Lt(e,t,n,o){for(let r=0;r<o.length;r+=2){let a=t+o[r],i=n+o[r+1];r===0?e.moveTo(a,i):e.lineTo(a,i)}e.closePath()}function Pt(e,t,n,o,r,a){for(let i=0;i<o.length;i+=2){let u=t+o[i]+r,s=n+o[i+1]+a;i===0?e.moveTo(u,s):e.lineTo(u,s)}e.closePath()}function to(e,t,n,o){ye(e,o),e.beginPath(),Lt(e,t.x,t.y,t.screenPts),e.clip(),ye(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function wt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(ye(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function no(e,t,n,o,r=0,a=0){if(t.textureTriangles?.length){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1;for(let s of t.textureTriangles){let d=Va(s.screenPts,_a);e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,d,r,a),e.clip(),wt(e,t,o,r,a),s.uvAffine?(ye(e,o,s.uvAffine.a/i,s.uvAffine.c/i,s.uvAffine.b/u,s.uvAffine.d/u,t.x+s.uvAffine.e+r,t.y+s.uvAffine.f+a),Kn(e,n,i,u,s.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):s.uvSampleRect&&sn(e,n,s.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,s=t.polygon.textureAlphaMode==="opaque";s&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),ye(e,o,t.uvAffine.a/i,t.uvAffine.c/i,t.uvAffine.b/u,t.uvAffine.d/u,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+a),Kn(e,n,i,u,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),s&&e.restore()}else if(t.uvSampleRect){let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),sn(e,n,t.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}else{let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),Jn(e,n,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}}function Ha(e,t,n,o,r,a){let i=r-n,u=a-o,s=i*i+u*u;if(s<=1e-9)return Math.hypot(e-n,t-o);let d=Math.max(0,Math.min(1,((e-n)*i+(t-o)*u)/s));return Math.hypot(e-(n+i*d),t-(o+u*d))}function Na(e,t,n,o){let r=1/0,a=n.length/2;for(let i of o){if(i<0||i>=a)continue;let u=i*2,s=(i+1)%a*2;r=Math.min(r,Ha(e,t,n[u],n[u+1],n[s],n[s+1]))}return r}function Ya(e,t,n,o,r,a){let i=Math.max(0,o-a),u=Math.min(t-1,o+a),s=Math.max(0,r-a),d=Math.min(n-1,r+a),m=null,p=1/0;for(let l=s;l<=d;l++)for(let h=i;h<=u;h++){if(h===o&&l===r)continue;let y=h-o,P=l-r,x=y*y+P*P;if(x>a*a||x>=p)continue;let T=(l*t+h)*4;e[T+3]<za||(m=T,p=x)}return m}function oo(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),a=Math.max(0,Math.floor(t.y*n)),i=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),u=Math.max(1,Math.min(o.height-a,Math.ceil(t.canvasH*n)));if(i<=0||u<=0)return;let s;try{s=e.getImageData(r,a,i,u)}catch{return}let d=s.data,m=new Uint8ClampedArray(d),p=Math.max(Un,Un/n),l=Math.max(2,Math.ceil(p*n)+1),h=!1;for(let y=0;y<u;y++)for(let P=0;P<i;P++){let x=(y*i+P)*4,T=d[x+3];if(T<Ba||T===255)continue;let M=(r+P+.5)/n-t.x,L=(a+y+.5)/n-t.y;if(Na(M,L,t.screenPts,t.textureEdgeRepairEdges)>p)continue;let g=Ya(m,i,u,P,y,l);g!==null&&(d[x]=m[g],d[x+1]=m[g+1],d[x+2]=m[g+2],d[x+3]=255,h=!0)}h&&e.putImageData(s,r,a)}function ro(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(n=>{t(n?URL.createObjectURL(n):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}async function ja(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let a=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),i=r.getContext("2d",a?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let u=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),s=new Map;await Promise.all(u.map(async m=>{s.set(m,await Zn(m))}));for(let m of e.entries){let p=m.texture?s.get(m.texture):null;if(!m.texture){i.save(),to(i,m,t,o),i.restore();continue}p&&(i.save(),ye(i,o),i.beginPath(),Lt(i,m.x,m.y,m.screenPts),i.clip(),no(i,m,p,o),i.restore()),m.texture&&t==="baked"&&(i.save(),ye(i,o),i.beginPath(),Lt(i,m.x,m.y,m.screenPts),i.clip(),Qn(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),oo(i,m,o)}let d=await ro(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:d}}async function Rt(e,t,n,o,r){let a=[];for(let i of e){if(r())break;a.push(await ja(i,t,n,o))}return a}import{isSolidTrianglePlan as $a,offsetConvexPolygonPointsByEdgeAmounts as Xa,parsePureColor as un,resolveSeamBleed as so,safePlanSeamBleedAmount as Ua}from"@layoutit/polycss-core";var lo=50,uo=[.4,-.7,.59],co="#ffffff",mo=1,po="#ffffff",yo=.4,Z=1e-9,vt=.75,fo=32,Wa=96,cn="0 48px 96px 48px",ao,io=fo;function qa(){let e=typeof CSS<"u"?CSS:void 0;return!!e?.supports?.("corner-top-left-shape","bevel")&&!!e.supports("corner-top-right-shape","bevel")}function dn(){if(qa())return"corner-bevel";let e=typeof navigator<"u"?navigator.userAgent:"";return/\bFirefox\//.test(e)?"border-large":"border"}function mn(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==ao&&(ao=e,io=/\bFirefox\//.test(e)?Wa:fo),io}function go(){return dn()==="border-large"?cn:void 0}function Ga(){let e=dn();if(e==="corner-bevel")return;let t=e==="border-large"?cn:void 0;return t?{borderWidth:t}:void 0}function ho(e){let t=dn();t==="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=t==="border-large"?cn:"")}function Re(e){let t=un(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function xt({r:e,g:t,b:n}){return`${e},${t},${n}`}function Ka(e){return un(e)?.alpha??1}function Dt({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function Po(e,t,n,o,r){let a=Re(e),i=Re(n),u=Re(o),s=u.r/255*r+i.r/255*t,d=u.g/255*r+i.g/255*t,m=u.b/255*r+i.b/255*t,p=Math.max(0,Math.min(255,Math.round(a.r*s))),l=Math.max(0,Math.min(255,Math.round(a.g*d))),h=Math.max(0,Math.min(255,Math.round(a.b*m))),y=Ka(e);return y<1?`rgba(${p}, ${l}, ${h}, ${y})`:Dt({r:p,g:l,b:h})}function vo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=un(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=i=>Math.max(0,Math.min(255,Math.round(Math.round(i/o)*o))),a={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${a.r}, ${a.g}, ${a.b}, ${n.alpha})`:Dt(a)}function xo(e,t,n){let o=(r,a)=>{if(r===a)return r;let i=a-r;return r+Math.sign(i)*Math.min(Math.abs(i),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function ln(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Za(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Qa(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let a=e[r],i=e[r+1],u=[a[0]-t[0],a[1]-t[1],a[2]-t[2]],s=[i[0]-t[0],i[1]-t[1],i[2]-t[2]];n[0]-=u[1]*s[2]-u[2]*s[1],n[1]-=u[2]*s[0]-u[0]*s[2],n[2]-=u[0]*s[1]-u[1]*s[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=Z?null:[n[0]/o,n[1]/o,n[2]/o]}function Ja(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],a=e[(n+2)%e.length],i=(r[0]-o[0])*(a[1]-r[1])-(r[1]-o[1])*(a[0]-r[0]);if(Math.abs(i)<=Z)return!1;let u=Math.sign(i);if(t===0)t=u;else if(u!==t)return!1}return!0}function ei(e){let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o[0]*r[1]-o[1]*r[0]}return t/2}function ti(e,t,n,o){let r=t[0]-e[0],a=t[1]-e[1],i=o[0]-n[0],u=o[1]-n[1],s=r*u-a*i;if(Math.abs(s)<=Z)return null;let d=n[0]-e[0],m=n[1]-e[1],p=(d*u-m*i)/s;return[e[0]+p*r,e[1]+p*a]}function Ot(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let i=0;i<e.length;i+=2)n+=e[i],o+=e[i+1];n/=r,o/=r;let a=e.slice();for(let i=0;i<a.length;i+=2){let u=a[i]-n,s=a[i+1]-o,d=Math.hypot(u,s);d<=Z||(a[i]+=u/d*t,a[i+1]+=s/d*t)}return a}function Ue(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let s=0;s<e.length;s+=2)n.push([e[s],e[s+1]]);if(!Ja(n))return Ot(e,t);let o=ei(n);if(Math.abs(o)<=Z)return Ot(e,t);let r=o>0?1:-1,a=[];for(let s=0;s<n.length;s++){let d=n[s],m=n[(s+1)%n.length],p=m[0]-d[0],l=m[1]-d[1],h=Math.hypot(p,l);if(h<=Z)return Ot(e,t);let y=r*(l/h)*t,P=r*(-p/h)*t;a.push({a:[d[0]+y,d[1]+P],b:[m[0]+y,m[1]+P]})}let i=[],u=Math.max(2,t*4);for(let s=0;s<n.length;s++){let d=a[(s+n.length-1)%n.length],m=a[s],p=ti(d.a,d.b,m.a,m.b);if(!p)return Ot(e,t);let l=n[s],h=p[0]-l[0],y=p[1]-l[1],P=Math.hypot(h,y);P>u?i.push(l[0]+h/P*u,l[1]+y/P*u):i.push(p[0],p[1])}return i}function ni(e,t,n,o){let r=e+t;if(o<=0||n<=Z||r<=Z||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=Z||i<=Z)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+d,y=n+m,P=-n*r;if(Math.abs(P)<=Z)return Ue([e,0,0,n,r,n],o);let x=p-h,T=l-y,M=(x*n+T*e)/P,L=h-M*t,g=y-M*n,w=-o*(e+a)/n,E=n+o,_=r+o*(t+i)/n,D=E,R=Math.max(2,o*4),N=L-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(L=e+N/H*R,g=Y/H*R);let b=Math.sqrt(w*w+o*o);b>R&&(w=w/b*R,E=n+o/b*R);let c=_-r,f=Math.sqrt(c*c+o*o);return f>R&&(_=r+c/f*R,D=n+o/f*R),[L,g,w,E,_,D]}function oi(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function ri(e,t,n,o,r){let a=e.seamBleedEdges;if(!a?.size)return null;let i=e.seamBleed===void 0?vt:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([s,d],m)=>{let p=oi(s,d),l=p!==void 0&&a.has(p)?e.seamBleedEdgeAmounts?.get(p)??so(i,vt):0;return Ua(r,m,l)})}function bo(e,t,n,o,r,a,i,u,s,d,m,p){let l=Math.round(e*1e3)/1e3||0,h=Math.round(t*1e3)/1e3||0,y=Math.round(n*1e3)/1e3||0,P=Math.round(o*1e3)/1e3||0,x=Math.round(r*1e3)/1e3||0,T=Math.round(a*1e3)/1e3||0,M=Math.round(i*1e3)/1e3||0,L=Math.round(u*1e3)/1e3||0,g=Math.round(s*1e3)/1e3||0,w=Math.round(d*1e3)/1e3||0,E=Math.round(m*1e3)/1e3||0,_=Math.round(p*1e3)/1e3||0;return`matrix3d(${l},${h},${y},0,${P},${x},${T},0,${M},${L},${g},0,${w},${E},${_},1)`}function ai(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function pn(e,t,n,o){if(!$a(e))return null;let r=e.tileSize,a=e.layerElevation,i=ai(e.polygon.vertices,r,a),u=Qa(i);if(!u)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(V=>{let X=i[V.a],G=i[V.b];return{...V,length:Math.hypot(G[0]-X[0],G[1]-X[1],G[2]-X[2])}}).sort((V,X)=>X.length-V.length),d=s[0].a,m=s[0].b,p=s[0].c,l=i[d],h=i[m],y=i[p],P=s[0].length;if(P<=Z)return null;let x=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P],T=[y[0]-l[0],y[1]-l[1],y[2]-l[2]],M=ln(T,x),L=[l[0]+x[0]*M,l[1]+x[1]*M,l[2]+x[2]*M],g=[L[0]-y[0],L[1]-y[1],L[2]-y[2]],w=Math.hypot(g[0],g[1],g[2]);if(w<=Z)return null;let E=[g[0]/w,g[1]/w,g[2]/w];if(ln(Za(x,E),u)<0){let V=m;if(m=d,d=V,l=i[d],h=i[m],P=Math.hypot(h[0]-l[0],h[1]-l[1],h[2]-l[2]),P<=Z)return null;x=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P];let X=[y[0]-l[0],y[1]-l[1],y[2]-l[2]];M=ln(X,x),L=[l[0]+x[0]*M,l[1]+x[1]*M,l[2]+x[2]*M],g=[L[0]-y[0],L[1]-y[1],L[2]-y[2]];let G=Math.hypot(g[0],g[1],g[2]);if(G<=Z)return null;E=[g[0]/G,g[1]/G,g[2]/G]}let _=mn(),D=Math.max(0,Math.min(P,M)),R=Math.max(0,P-D),N=[D,0,0,w,D+R,w],Y=ri(e,d,m,p,N),H=Y?Xa(N,Y):ni(D,R,w,so(e.seamBleed,vt)),b=[H[0],H[1]],c=[H[2],H[3]],f=[H[4],H[5]],v=(c[1]+f[1])/2,S=b[0]-c[0],C=f[0]-b[0],O=v-b[1];if(S<=Z||C<=Z||O<=Z||!Number.isFinite(S+C+O))return null;let k=t==="dynamic",A=Re(e.polygon.color??"#cccccc"),B=k&&xt(A)===o?.dynamicColorKey,W={color:k||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...k&&!B?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4),"--psr":(A.r/255).toFixed(4),"--psg":(A.g/255).toFixed(4),"--psb":(A.b/255).toFixed(4)}:k?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4)}:null},K=([V,X])=>[y[0]+(V-D)*x[0]+X*E[0],y[1]+(V-D)*x[1]+X*E[1],y[2]+(V-D)*x[2]+X*E[2]],q=K(b),$=K([c[0],v]),ee=K([f[0],v]),ne=_/2,ie=[(ee[0]-$[0])/_,(ee[1]-$[1])/_,(ee[2]-$[2])/_],J=[q[0]-ie[0]*ne,q[1]-ie[1]*ne,q[2]-ie[2]*ne],F=[($[0]-J[0])/_,($[1]-J[1])/_,($[2]-J[2])/_],U=[ie[0],ie[1],ie[2],0,F[0],F[1],F[2],0,u[0],u[1],u[2],0,J[0],J[1],J[2],1].map(V=>(Math.round(V*1e3)/1e3||0).toString()).join(","),j=Ga();return{transform:`matrix3d(${U})`,...j??{},...W}}function kt(e){if(!e)return!1;let{a:t,b:n,c:o}=e;return t===0&&n===1&&o===2||t===1&&n===2&&o===0||t===2&&n===0&&o===1}function ii(e,t,n,o){let r=e+t;if(o<=0||n<=Z||r<=Z||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=Z||i<=Z)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+d,y=n+m,P=-n*r;if(Math.abs(P)<=Z)return Ue([e,0,0,n,r,n],o);let x=p-h,T=l-y,M=(x*n+T*e)/P,L=h-M*t,g=y-M*n,w=-o*(e+a)/n,E=n+o,_=r+o*(t+i)/n,D=E,R=Math.max(2,o*4),N=L-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(L=e+N/H*R,g=Y/H*R);let b=Math.sqrt(w*w+o*o);b>R&&(w=w/b*R,E=n+o/b*R);let c=_-r,f=Math.sqrt(c*c+o*o);return f>R&&(_=r+c/f*R,D=n+o/f*R),[L,g,w,E,_,D]}function So(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=lo,r=o,a=e.vertices[0],i=e.vertices[1],u=e.vertices[2],s=a[1]*o,d=a[0]*o,m=a[2]*r,p=i[1]*o,l=i[0]*o,h=i[2]*r,y=u[1]*o,P=u[0]*o,x=u[2]*r,T=p-s,M=l-d,L=h-m,g=y-s,w=P-d,E=x-m,_=-(M*E-L*w),D=-(L*g-T*E),R=-(T*w-M*g),N=Math.sqrt(_*_+D*D+R*R);if(N<=Z)return null;_/=N,D/=N,R/=N;let Y=T*T+M*M+L*L,H=y-p,b=P-l,c=x-h,f=s-y,v=d-P,S=m-x,C=H*H+b*b+c*c,O=f*f+v*v+S*S,k=kt(n)?n.a:0,A=kt(n)?n.b:1,B=kt(n)?n.c:2,W=()=>n?So(e,t):null;if(!kt(n)){let Ye=Y;C>Ye&&(k=1,A=2,B=0,Ye=C),O>Ye&&(k=2,A=0,B=1)}let K=B===0?s:B===1?p:y,q=B===0?d:B===1?l:P,$=B===0?m:B===1?h:x,ee=k===0?s:k===1?p:y,ne=k===0?d:k===1?l:P,ie=k===0?m:k===1?h:x,J=A===0?s:A===1?p:y,F=A===0?d:A===1?l:P,U=A===0?m:A===1?h:x,j=J-ee,V=F-ne,X=U-ie,G=Math.sqrt(j*j+V*V+X*X);if(G<=Z)return W();let se=j/G,le=V/G,re=X/G,me=(K-ee)*se+(q-ne)*le+($-ie)*re,pe=ee+se*me-K,ce=ne+le*me-q,fe=ie+re*me-$,Q=Math.sqrt(pe*pe+ce*ce+fe*fe);if(Q<=Z)return W();pe/=Q,ce/=Q,fe/=Q;let z=Math.max(0,Math.min(G,me)),I=Math.max(0,G-z),ae=ii(z,I,Q,vt),he=ae[0],ze=ae[1],Pe=ae[2],be=ae[3],Fe=ae[4],tt=ae[5],Ve=(be+tt)/2,_e=he-Pe,Be=Fe-he,ft=Ve-ze;if(_e<=Z||Be<=Z||ft<=Z||!Number.isFinite(_e+Be+ft))return W();let Ae=1/mn(),He=_e+Be,Se=He*Ae,we=(Be-_e)*.5*Ae,Le=ft*Ae,nt=he-z-He*.5,Ne=ze,Ce=bo(se*Se,le*Se,re*Se,se*we+pe*Le,le*we+ce*Le,re*we+fe*Le,_,D,R,K+se*nt+pe*Ne,q+le*nt+ce*Ne,$+re*nt+fe*Ne),ve;if(Math.floor(t.colorFreezeFrames??1)!==0){let Ye=t.directionalLight,_n=t.ambientLight,De=Ye?.direction??uo,aa=Ye?.color??co,ia=Math.max(0,Ye?.intensity??mo),sa=_n?.color??po,la=Math.max(0,_n?.intensity??yo),Gt=Math.sqrt(De[0]*De[0]+De[1]*De[1]+De[2]*De[2])||1,ua=De[0]/Gt,ca=De[1]/Gt,da=De[2]/Gt,ma=ia*Math.max(0,_*ua+D*ca+R*da),Bn=Po(e.color??"#cccccc",ma,aa,sa,la);ve=t.colorSteps?vo(Bn,t.colorSteps):Bn}return{transform:Ce,borderWidth:go(),color:ve,basis:{a:k,b:A,c:B}}}function si(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function li(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let a=e.__polycssStableTriangleColor;if(!(a===void 0||si(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||a===n)return;let u=n,s=n?Re(n):void 0,d=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&d&&s&&n&&(s=xo(d,s,m),u=Dt(s)),e.style.color=u,e.__polycssStableTriangleColor=u,e.__polycssStableTriangleColorRgb=s}function yn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!$e())return!1;let o=Array.from(e.children).filter(a=>a instanceof HTMLElement&&a.localName==="u");if(o.length!==t.length)return!1;let r=t.map((a,i)=>So(a,n,o[i].__polycssStableTriangleBasis));if(r.some(a=>!a))return!1;for(let a=0;a<o.length;a+=1){let i=r[a],u=o[a];u.style.visibility&&(u.style.visibility=""),u.__polycssStableTriangleBasis=i.basis,ho(u),u.style.transform=i.transform,i.borderWidth!==void 0&&(u.style.borderWidth=i.borderWidth),i.color!==void 0&&li(u,a,i.color,n)}return!0}import{computeTextureAtlasPlanPublic as ui}from"@layoutit/polycss-core";function We(e,t,n={},o){return ui(e,t,n,void 0,o)}function fn(e,t,n){let o=new Set(n?.disable??[]);return tn(e,t,o)}import{computed as ge,getCurrentScope as ci,onScopeDispose as di,ref as Co,watch as mi}from"vue";function gn(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Mo(e){return e.flatMap(t=>t.url?.startsWith("blob:")?[t.url]:[])}function It(e){return e.map(t=>({width:t.width,height:t.height,url:null}))}function To(e){return e.length===0||typeof Image>"u"?Promise.resolve():Promise.all(e.map(t=>{let n=new Image;n.src=t;let o=n.decode?.();return o?o.catch(()=>{}):Promise.resolve()})).then(()=>{})}function qe(e){e.length!==0&&(typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>gn(e)):setTimeout(()=>gn(e),0))}function Ge(e,t,n=ge(()=>{}),o=ge(()=>{}),r=ge(()=>!1)){let a=ge(()=>new Set(o.value?.disable??[])),i=ge(()=>!a.value.has("b")),u=ge(()=>{let x=typeof document<"u"?document:null;return i.value&&(!x||rt(x))}),s=ge(()=>!a.value.has("u")&&$e()),d=ge(()=>!a.value.has("i")&&t.value!=="dynamic"&&je()),m=ge(()=>{let x=nn(e.value,t.value,a.value,typeof document<"u"?document:null);return on(x,n.value,typeof document<"u"?document:null)}),p=Co(It(m.value.packed.pages)),l=Co({plans:e.value,entries:m.value.packed.entries,pages:It(m.value.packed.pages)}),h=[],y=0,P=!1;return mi(()=>[m.value,t.value,r.value],([x,T,M],L,g)=>{let{packed:w,atlasScale:E}=x;if(M){let R=++y,N=e.value,Y=w.entries;if(w.pages.length===0||typeof document>"u"){qe(h),h=[],l.value={plans:N,entries:Y,pages:It(w.pages)};return}let H=()=>P||R!==y,b=[];Rt(w.pages,T,document,E,H).then(async c=>{if(b=Mo(c),await To(b),H()){qe(b);return}let f=h;h=b,b=[],qe(f),l.value={plans:N,entries:Y,pages:c}}).catch(()=>{});return}let _=!1,D=[];if(g(()=>{_=!0,qe(D)}),w.pages.length===0){qe(h),h=[],p.value.length!==0&&(p.value=[]);return}typeof document>"u"||(p.value.some(R=>R.url)||(p.value=It(w.pages)),Rt(w.pages,T,document,E,()=>_).then(async R=>{if(D=Mo(R),await To(D),_){qe(D);return}let N=h;h=D,D=[],qe(N),p.value=R}).catch(()=>{}))},{immediate:!0}),ci()&&di(()=>{P=!0,gn(h),h=[]}),{plans:ge(()=>r.value?l.value.plans:e.value),entries:ge(()=>r.value?l.value.entries:m.value.packed.entries),pages:ge(()=>r.value?l.value.pages:p.value),ready:ge(()=>{let x=r.value?l.value.pages:p.value;return x.length===0||x.every(T=>!!T.url)}),useFullRectSolid:i,useProjectiveQuad:u,useStableTriangle:s,useBorderShape:d}}import{h as pi}from"vue";function Ke({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=pn(e,t,i,n);if(!u)return null;let s=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,p])=>[`data-${m}`,String(p)])):{},d=o?.trim()||void 0;return pi("u",{class:d,style:{...u,...r},"data-poly-index":String(e.index),...s,...a})}import{h as yi}from"vue";import{isFullRectSolid as fi,cssBorderShapeForPlan as gi,formatSolidQuadEntryMatrix as hi,formatBorderShapeEntryMatrix as Pi}from"@layoutit/polycss-core";var vi=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function xi(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,a)=>{let i=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:a,order:vi.get(i)??Number.POSITIVE_INFINITY}}).sort((r,a)=>r.order-a.order||r.index-a.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function Ze({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto",forceBorderShape:u=!1}){let s=!e.texture&&fi(e),d=s&&u&&je(),m=!s||d?gi(e):null,p=t==="dynamic",l=Re(e.polygon.color??"#cccccc"),h=p&&xt(l)===n?.dynamicColorKey,P={transform:m?Pi(e):hi(e),color:p?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...p?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),...h?null:{"--psr":(l.r/255).toFixed(4),"--psg":(l.g/255).toFixed(4),"--psb":(l.b/255).toFixed(4)}}:null,...r},x=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,g])=>[`data-${L}`,String(g)])):{},T=o?.trim()||void 0,M=L=>{let g=L.el;g&&(m?g.style.setProperty("border-shape",m):g.style.removeProperty("border-shape"),xi(g))};return yi(s&&!d?"b":"i",{class:T,style:P,"data-poly-index":String(e.index),...x,...a,onVnodeMounted:M,onVnodeUpdated:M})}import{h as bi}from"vue";function Qe({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=t==="dynamic",s=Re(e.polygon.color??"#cccccc"),d=u&&xt(s)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:u?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...u&&!d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(s.r/255).toFixed(4),"--psg":(s.g/255).toFixed(4),"--psb":(s.b/255).toFixed(4)}:u?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([h,y])=>[`data-${h}`,String(y)])):{},l=o?.trim()||void 0;return bi("b",{class:l,style:m,"data-poly-index":String(e.index),...p,...a})}import{h as Si}from"vue";import{formatCornerShapeElementStyle as Ci,parseHex as Mi,rgbKey as Ti}from"@layoutit/polycss-core";function Ei(e,t,n){if(t==="dynamic"){let o=Mi(e.polygon.color??"#cccccc"),r=`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return Ti(o)!==n?.dynamicColorKey&&(r+=`;--psr:${(o.r/255).toFixed(4)};--psg:${(o.g/255).toFixed(4)};--psb:${(o.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function hn({entry:e,geometry:t,textureLighting:n,solidPaintDefaults:o,className:r,pointerEvents:a="auto"}){let i=Ci(e,t),u=Ei(e,n,o),s=a==="none"?";pointer-events:none":"",d=i+u+s,m=l=>{!l||!(l instanceof HTMLElement)||l.setAttribute("style",d)},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,h])=>[`data-${l}`,String(h)])):{};return Si("u",{class:r?.trim()||void 0,"data-poly-index":String(e.index),...p,onVnodeMounted:({el:l})=>m(l),onVnodeUpdated:({el:l})=>m(l)})}import{h as Ai}from"vue";import{formatMatrix3d as wi,formatCssLengthPx as Ft}from"@layoutit/polycss-core";var Li=64;function Je({entry:e,page:t,textureLighting:n,solidPaintDefaults:o,className:r,style:a,domAttrs:i,pointerEvents:u="auto"}){let s=n==="dynamic",d=e.atlasCanonicalSize??Li,m=e.canvasW||1,p=e.canvasH||1,l=t?`${Ft(-e.x/m*d)} ${Ft(-e.y/p*d)}`:void 0,h=t?`${Ft(t.width/m*d)} ${Ft(t.height/p*d)}`:void 0,y=s&&t?.url?`url(${t.url})`:void 0,P=!s&&t?.url?`url(${t.url}) ${l} / ${h} no-repeat`:void 0,x={transform:wi(e.atlasMatrix),"--polycss-atlas-size":`${d}px`,...s?{backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:l,backgroundSize:h}:{background:P},...s?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...s&&y?{maskImage:y,maskMode:"alpha",maskPosition:l,maskSize:h,maskRepeat:"no-repeat",WebkitMaskImage:y,WebkitMaskPosition:l,WebkitMaskSize:h,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:u==="none"?"none":void 0,...a},T=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,g])=>[`data-${L}`,String(g)])):{},M=r?.trim()||void 0;return Ai("s",{class:M,style:x,"data-poly-index":String(e.index),...T,...i})}var Oo=Ri({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},centerPolygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=Di(ue);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:a}=o,i=Bt(0),u=new Map,s={register(f,v){u.set(f,v),i.value++},unregister(f){u.delete(f),i.value++},version:i,getEntries(){return Array.from(u.values())}},d=new Set,m=Bt(!1),p={register(f){d.add(f),m.value=d.size>0},unregister(f){d.delete(f),m.value=d.size>0},hasAny:m},l=Bt(null),h=Bt(null),y=xe(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??Lo,shadow:e.shadow,shadowRegistry:s,receiverRegistry:p,groundCssZ:l.value,sceneEl:h.value}));ki(Qt,y),Eo(h,f=>{r.value=f});let P=!1;wo(()=>{P||typeof document<"u"&&(Et(document),P=!0)}),Eo(()=>e.debugShowBackfaces,f=>{let v=h.value;v&&v.classList.toggle("polycss-debug-show-backfaces",!!f)});let x=xe(()=>e.polygons??[]),T=xe(()=>e.centerPolygons??null),M=xe(()=>({directionalLight:e.directionalLight})),L=ht(x,M),g=xe(()=>T.value??x.value),w=ht(g,M);wo(()=>{r.value=h.value,a()}),Ii(a);let E=xe(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),_=xe(()=>{let f=e.textureLighting==="dynamic",v=f?void 0:e.directionalLight,S=f?void 0:e.ambientLight,C=Vt(L.value.polygons),O=e.seamBleed??Lo,k=O==="auto"||typeof O=="number"&&Number.isFinite(O)&&O>0?_t(L.value.polygons,{tileSize:E.value.tileSize,layerElevation:E.value.layerElevation,directionalLight:v,ambientLight:S}):null;return L.value.polygons.map((A,B)=>We(A,B,{tileSize:E.value.tileSize,layerElevation:E.value.layerElevation,directionalLight:v,ambientLight:S,seamBleed:k?.has(B)?O:void 0,seamEdges:k?.get(B),textureEdgeRepairEdges:C[B]}))}),D=xe(()=>e.textureLighting??"baked"),R=xe(()=>e.textureQuality),N=xe(()=>e.strategies),Y=Ge(_,D,R,N),H=xe(()=>{if(e.textureLighting!=="dynamic")return null;let f=e.directionalLight?.direction??[.4,-.7,.59],v=Vi(f),S=Math.hypot(v[0],v[1],v[2])||1,C=v[0]/S,O=v[1]/S,k=v[2]/S,A=Ro(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],B=Ro(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],W=e.directionalLight?.intensity??1,K=e.ambientLight?.intensity??.4,q=ne=>(ne/255).toFixed(4),$=k,ee=Math.sign($||1)*Math.max(Math.abs($),.01);return{"--plx":C.toFixed(2),"--ply":O.toFixed(2),"--plz":k.toFixed(2),"--clx":C.toFixed(2),"--cly":O.toFixed(2),"--clz":ee.toFixed(2),"--plr":q(A[0]),"--plg":q(A[1]),"--plb":q(A[2]),"--pli":W.toFixed(4),"--par":q(B[0]),"--pag":q(B[1]),"--pab":q(B[2]),"--pai":K.toFixed(4)}}),b=50;Ao(()=>{let f=h.value;i.value;let v=s.getEntries();if(v.length===0){f&&f.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let S=1/0;for(let k of v){let A=k();for(let B of A.polygons)for(let W of B.vertices){let K=W[2]+(A.position[2]??0);K<S&&(S=K)}}if(!Number.isFinite(S)){f&&f.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let C=e.shadow?.lift??.05,O=(S+C)*b;l.value!==O&&(l.value=O),f&&(e.textureLighting==="dynamic"?f.style.setProperty("--shadow-ground-cssz",O.toFixed(3)):f.style.removeProperty("--shadow-ground-cssz"))});let c=xe(()=>{if(!e.autoCenter)return[0,0,0];let f=w.value.sceneBbox;return[(f.min[0]+f.max[0])/2,(f.min[1]+f.max[1])/2,(f.min[2]+f.max[2])/2]});return Ao(()=>{o.autoCenterOffset.value=c.value}),Fi(()=>{}),()=>{let f=`polycss-scene${e.class?` ${e.class}`:""}`,v=E.value,S=Y.entries.value.map((O,k)=>{if(O)return Je({entry:O,page:Y.pages.value[O.pageIndex],textureLighting:v.textureLighting??"baked"});let A=_.value[k];return!A||A.texture?null:Y.useStableTriangle.value&&it(A)?Ke({entry:A,textureLighting:v.textureLighting??"baked"}):Y.useProjectiveQuad.value&&st(A)?Qe({entry:A,textureLighting:v.textureLighting??"baked"}):Y.useBorderShape.value||Y.useFullRectSolid.value?Ze({entry:A,textureLighting:v.textureLighting??"baked",forceBorderShape:!Y.useFullRectSolid.value}):null}),C=t.default?.()??[];return Oi("div",{ref:h,class:f,"data-polycss-lighting":v.textureLighting??"baked","aria-hidden":"true",style:{...H.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([O])=>O!=="style"&&O!=="class"))},[...S,...C])}}});import{defineComponent as Ms,h as Ie,Teleport as Ts,computed as oe,inject as Es,onMounted as As,onBeforeUnmount as Xo,ref as ct,watch as Ht,watchEffect as Uo}from"vue";import{buildBasisHints as ws,buildSharedEdgeMap as Ls,cornerShapeGeometryForPlan as Rs,worldDirectionalLightToCss as Os}from"@layoutit/polycss-core";import{BASE_TILE as Nt,buildPolyMeshTransform as Ds,computeReceiverShadowFaces as ks,computeSceneBbox as Is,DEFAULT_SEAM_BLEED as Fs,ensureCcw2D as Vs,inverseRotateVec3 as Wo,findOverlappingPolygonDuplicates as qo,optimizeMeshPolygons as _s,parseHexColor as Bs,prepareCasterEdgeOwners as zs,prepareCasterPolyItems as Hs,prepareReceiverFacePlanes as Ns,projectCssVertexToGround as Ys,worldDirectionToCss as Go}from"@layoutit/polycss-core";import{ref as bt,watch as _i,onUnmounted as Bi}from"vue";import{loadMesh as zi}from"@layoutit/polycss-core";var Do=[],Pn=[];function zt(e,t){let n=bt(Do),o=bt(void 0),r=bt(!!e.value),a=bt(null),i=bt(Pn),u=null;function s(){if(u){try{u.dispose()}catch{}u=null}}return _i(e,(d,m,p)=>{if(!d){s(),n.value=Do,o.value=void 0,r.value=!1,a.value=null,i.value=Pn;return}let l=!1;r.value=!0,a.value=null;let h=u;zi(d,t).then(y=>{if(l){try{y.dispose()}catch{}return}if(h)try{h.dispose()}catch{}u=y,n.value=y.polygons,o.value=y.voxelSource,r.value=!1,a.value=null,i.value=y.warnings??Pn}).catch(y=>{if(l)return;let P=y instanceof Error?y:new Error(String(y));r.value=!1,a.value=P}),p(()=>{l=!0})},{immediate:!0}),Bi(()=>{s()}),{polygons:n,voxelSource:o,loading:r,error:a,warnings:i,dispose:s}}import{BASE_TILE as de,computeProjectiveQuadMatrix as Hi,normalFacesCamera as Ni,parsePureColor as zo,PROJECTIVE_QUAD_BLEED as Yi,resolveProjectiveQuadGuards as ji,rotateVec3 as ko,shadePolygon as $i,SOLID_QUAD_CANONICAL_SIZE as Xi}from"@layoutit/polycss-core";var Ui=[.4,-.7,.59],Wi="#ffffff",qi=1,Gi="#ffffff",Ki=.4,Ho=1,Zi=8,Qi=Yi,ke=1e-6,Ji=ji({bleed:0}),No={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},bn=["t","b","bl","br","fr","fl"],es=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 Io(e){let t=[];for(let n of bn)Ni(No[n],e)&&t.push(n);return t.join("|")}function ts(e,t,n){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==t&&(e.style.color=t,o.color=t),o.transform!==n&&(e.style.transform=n,o.transform=n)}function ns(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,a=0;for(let u=1;u+1<t.length;u+=1){let s=t[u],d=t[u+1],m=s[1]-n[1],p=s[0]-n[0],l=s[2]-n[2],h=d[1]-n[1],y=d[0]-n[0],P=d[2]-n[2];o-=p*P-l*y,r-=l*h-m*P,a-=m*y-p*h}let i=Math.hypot(o,r,a);return i<=1e-9?null:[Math.round(o/i),Math.round(r/i),Math.round(a/i)]}function os(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=ns(e),n=t?es.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,a=1/0,i=-1/0,u=-1/0,s=-1/0;for(let p of e.vertices)o=Math.min(o,p[0]),r=Math.min(r,p[1]),a=Math.min(a,p[2]),i=Math.max(i,p[0]),u=Math.max(u,p[1]),s=Math.max(s,p[2]);let d=1e-6,m=cs(e.color);return Math.abs(s-a)<=d?{axis:"z",face:n,left:r*de,top:o*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(i-o)*de),z:a*de,baseColor:m,bleed:vn()}:Math.abs(i-o)<=d?{axis:"x",face:n,left:r*de,top:a*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(s-a)*de),z:-o*de,baseColor:m,bleed:vn()}:Math.abs(u-r)<=d?{axis:"y",face:n,left:a*de,top:o*de,width:Math.max(0,(s-a)*de),height:Math.max(0,(i-o)*de),z:-r*de,baseColor:m,bleed:vn()}:null}function vn(){return{left:0,right:0,top:0,bottom:0}}function rs(e){let t=o=>String(Number(o.toFixed(6))),n=`${e.item.baseColor}|${e.variableAxis}`;for(let o=0;o<3;o+=1)o!==e.variableAxis&&(n+=`|${o}:${t(e.fixed[o])}`);return n}function Fo(e){return[e[1]*de,e[0]*de,e[2]*de]}function Vo(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function as(e,t,n){let o=e.left,r=e.left+e.width,a=e.top,i=e.top+e.height;if(Math.abs(t[0]-n[0])<=ke){if(Math.abs(t[0]-o)<=ke)return"left";if(Math.abs(t[0]-r)<=ke)return"right"}if(Math.abs(t[1]-n[1])<=ke){if(Math.abs(t[1]-a)<=ke)return"top";if(Math.abs(t[1]-i)<=ke)return"bottom"}return null}function is(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=ke)){if(n!==null)return null;n=o}return n}function ss(e,t,n){let o=t.vertices,r=Fo(o[n]),a=Fo(o[(n+1)%o.length]),i=as(e,Vo(e,r),Vo(e,a));if(!i)return null;let u=is(r,a);if(u===null)return null;let s=Math.min(r[u],a[u]),d=Math.max(r[u],a[u]);return d-s>ke?{item:e,side:i,variableAxis:u,fixed:r,start:s,end:d}:null}function _o(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Qi)}function ls(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let a=0;a<r.vertices.length;a+=1){let i=ss(o,r,a);if(!i)continue;let u=rs(i),s=n.get(u);s?s.push(i):n.set(u,[i])}}for(let o of n.values()){if(o.length<2)continue;o.sort((a,i)=>a.start-i.start||a.end-i.end);let r=[];for(let a of o){r=r.filter(i=>i.end>a.start+ke);for(let i of r)i.item.sourceIndex!==a.item.sourceIndex&&(_o(i),_o(a));r.push(a)}}}function us(e){let t=zo(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha}:{r:255,g:255,b:255,alpha:1}}function cs(e){if(!e)return"#cccccc";let t=zo(e);if(!t)return e;let n={r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha};if(n.alpha<1){let o=Math.round(Math.max(0,n.alpha)*1e3)/1e3;return`rgba(${xn(n.r)}, ${xn(n.g)}, ${xn(n.b)}, ${o})`}return ds(n)}function ds({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function xn(e){return Math.round(Math.max(0,Math.min(255,e)))}function ms(e,t,n,o){let r=n?.direction??Ui,a=Math.hypot(r[0],r[1],r[2])||1,i=r[0]/a,u=r[1]/a,s=r[2]/a,d=Math.max(0,n?.intensity??qi)*Math.max(0,e[0]*i+e[1]*u+e[2]*s),m=Math.max(0,o?.intensity??Ki),p=n?.color??Wi,l=o?.color??Gi,h=$i(t,d,p,l,m),y=us(t);if(y.alpha>=1)return h;let P=parseInt(h.slice(1,3),16),x=parseInt(h.slice(3,5),16),T=parseInt(h.slice(5,7),16);return`rgba(${P}, ${x}, ${T}, ${y.alpha})`}function ps(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=os(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return ls(e,t),t}function ys(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 fs(e){let t=e.left,n=e.top,o=e.left+e.width,r=e.top+e.height;return[t,n,o,n,o,r,t,r]}function gs(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function hs(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=Xi/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function Bo(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,a=e.height+e.bleed.top+e.bleed.bottom,i=e.z,u=r/t,s=a/t;return`matrix3d(${(e.axis==="x"?[u,0,0,0,0,0,s,0,0,-1,0,0,n,-i,o,1]:e.axis==="y"?[0,0,u,0,0,s,0,0,-1,0,0,0,-i,o,n,1]:[u,0,0,0,0,s,0,0,0,0,1,0,n,o,i,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function Ps(e,t){let{xAxis:n,yAxis:o,normal:r,tx:a,ty:i,tz:u}=ys(e),s=Hi(fs(e),n,o,r,a,i,u,Ji,gs(e));return s?hs(s,t)??Bo(e,t):Bo(e,t)}function vs(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function xs(e){return vs(e)?Zi:Ho}function bs(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 Ss(e,t){let n=bs(e),o=t.meshRotation;o&&(n=ko(n,o[0]??0,o[1]??0,o[2]??0));let[r,a]=ko(n,t.rotX,0,t.rotY);return{x:r,y:a}}function Cs(e,t,n){let o=e.filter(l=>t.has(l.face)).map(l=>({item:l,...Ss(l,n)}));if(o.length===0)return[];let r=1/0,a=-1/0,i=1/0,u=-1/0;for(let l of o)r=Math.min(r,l.x),a=Math.max(a,l.x),i=Math.min(i,l.y),u=Math.max(u,l.y);let s=4,d=Math.max(1e-6,a-r),m=Math.max(1e-6,u-i),p=new Map;for(let l of o){let h=Math.min(s-1,Math.max(0,Math.floor((l.x-r)/d*s))),y=Math.min(s-1,Math.max(0,Math.floor((l.y-i)/m*s))),P=`${h}:${y}`,x=p.get(P);x||(x={tx:h,ty:y,sourceIndex:l.item.sourceIndex,items:[]},p.set(P,x)),x.items.push(l.item),x.sourceIndex=Math.min(x.sourceIndex,l.item.sourceIndex)}return Array.from(p.values()).sort((l,h)=>l.ty-h.ty||l.tx-h.tx||l.sourceIndex-h.sourceIndex).flatMap(l=>l.items)}function Yo(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:a}=e,i=ps(o);if(i.length===0)return null;let u=new Set(i.map(b=>b.face));n.classList.add("polycss-voxel-mesh");let s=xs(t);s!==Ho&&n.style.setProperty("--polycss-voxel-primitive",`${s}px`);let d=new Map,m=(b,c)=>{let f=`${b}|${c}`,v=d.get(f);if(v)return v;let S=ms(No[b],c,r,a);return d.set(f,S),S},p=new Map,l=new Map,h=new Map,y=new Map;for(let b of i){let c=y.get(b.face);c||(c=[],y.set(b.face,c)),c.push(b)}let P="",x=0,T=new Set,M=b=>{let c=p.get(b.sourceIndex);return c||(c=t.createElement("b"),p.set(b.sourceIndex,c),ts(c,m(b.face,b.baseColor),Ps(b,s))),c},L=b=>{let c=l.get(b);return c||(c=t.createElement("span"),c.className=`polycss-voxel-face polycss-voxel-face-${b}`,c.dataset.polycssVoxelFace=b,c.__polycssVoxelFaceHost=!0,l.set(b,c)),c},g=()=>{for(let b of Array.from(n.childNodes))if(!b.__polycssVoxelFaceHost)return b;return null},w=(b,c)=>{let f=c.map(C=>C.sourceIndex).join(",");if(h.get(b)===f)return;let v=L(b),S=t.createDocumentFragment();for(let C of c)S.appendChild(M(C));v.replaceChildren(S),h.set(b,f)},E=()=>{for(let b of bn)u.has(b)&&w(b,y.get(b)??[])},_=b=>new Set(b.split("|").filter(Boolean)),D=b=>{let c=_(b);return bn.filter(f=>c.has(f)&&u.has(f))},R=b=>{let c=0;for(let f of b)c+=y.get(f)?.length??0;return c},N=b=>{let c=new Set,f=[],v=new Map;for(let S of b){c.has(S.face)||(c.add(S.face),f.push(S.face));let C=v.get(S.face);C||(C=[],v.set(S.face,C)),C.push(S)}return{orderedFaces:f,itemsByFace:v}},Y=(b,c)=>{let f=new Set(b);for(let v of T){if(f.has(v))continue;let S=l.get(v);S?.parentNode===n&&n.removeChild(S)}if(c){let v=t.createDocumentFragment();for(let S of b)v.appendChild(L(S));n.insertBefore(v,g()),T=f;return}for(let v=0;v<b.length;v+=1){let S=b[v],C=L(S);if(C.parentNode===n)continue;let O=null;for(let k=v+1;k<b.length;k+=1){let A=l.get(b[k]);if(A?.parentNode===n){O=A;break}}n.insertBefore(C,O??g())}T=f},H=(b,c,f)=>{if(!f){let k=D(b);Y(k,!1),x=R(k);return}let v=new Set(b.split("|").filter(Boolean)),S=Cs(i,v,c),{orderedFaces:C,itemsByFace:O}=N(S);for(let k of C)w(k,O.get(k)??[]);Y(C,!0),x=S.length};return E(),{get brushCount(){return x},render(b){P=Io(b),H(P,b,!0)},syncCamera(b){let c=Io(b);c!==P&&(P=c,H(c,b,!1))},dispose(){for(let b of l.values())b.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),p.clear(),l.clear(),h.clear(),x=0,T=new Set,P=""}}}var Sn=new WeakMap;function jo(e,t){Sn.set(e,t)}function $o(e){Sn.delete(e)}function lt(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=Sn.get(t);if(n)return n}t=t.parentElement}return null}function ut(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let a=r.getBoundingClientRect();if(!(a.width<=0||a.height<=0)&&t>=a.left&&t<=a.right&&n>=a.top&&n<=a.bottom)return!0}return!1}function Cn(e,t,n){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let r of o){if(n&&!n(r))continue;let a=lt(r);if(a&&ut(r,e,t))return a}return null}var Ko=new WeakMap,Zo=new WeakMap;function js(e){let t={};return e.paintColor&&(t["--polycss-paint"]=e.paintColor),e.dynamicColor&&(t["--psr"]=(e.dynamicColor.r/255).toFixed(4),t["--psg"]=(e.dynamicColor.g/255).toFixed(4),t["--psb"]=(e.dynamicColor.b/255).toFixed(4)),Object.keys(t).length>0?t:null}function Qo(e){if(e.length===0)return e;let t=Is(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let a=i=>[i[0]-n,i[1]-o,i[2]-r];return e.map(i=>({...i,vertices:i.vertices.map(a),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(u=>({...u,vertices:u.vertices.map(a)}))}:null}))}var te=Ms({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},voxelSource:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},atomicAtlas:{type:Boolean,default:!1},onFrameReady:{type:Function,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},merge:{type:Boolean,default:!0},meshResolution:{type:String,default:void 0},parseOptions:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=oe(()=>e.src??""),a=oe(()=>{let F={...e.parseOptions??{}};return e.mtl&&(F.mtlUrl=e.mtl),e.meshResolution!==void 0&&(F.meshResolution=e.meshResolution),Object.keys(F).length>0?F:void 0}),i=zt(r,a.value),u=oe(()=>e.src?i.polygons.value:e.polygons??[]),s=ct(null),d=null;Ht(u,()=>{s.value=null,d=null});let m=oe(()=>s.value??u.value),p=oe(()=>e.merge?_s(m.value,e.meshResolution!==void 0?{meshResolution:e.meshResolution}:void 0):m.value),l=oe(()=>e.autoCenter?Qo(p.value):p.value),h=!t.polygon,y=Nn(),P=Es(ue,null),x=ct(0),T;Uo(F=>{T?.(),T=P?.store.subscribe(()=>{x.value++}),F(()=>{T?.(),T=void 0})});let M=oe(()=>e.textureLighting??y?.value.textureLighting??"baked"),L=oe(()=>y?.value.strategies),g=oe(()=>e.seamBleed??y?.value.seamBleed??Fs),w=oe(()=>y?.value.directionalLight),E=oe(()=>y?.value.ambientLight),_=oe(()=>e.src?i.voxelSource.value:e.voxelSource??void 0),D=oe(()=>!!(_.value&&s.value===null&&!t.polygon&&!t.default&&M.value==="baked"&&!e.castShadow)),R=oe(()=>{if(M.value!=="dynamic")return null;let F=e.rotation;if(!F||F[0]===0&&F[1]===0&&F[2]===0)return null;let U=y?.value.directionalLight?.direction;if(!U)return null;let j=Wo(U,F),V=Math.hypot(j[0],j[1],j[2])||1;return{"--plx":(j[0]/V).toFixed(2),"--ply":(j[1]/V).toFixed(2),"--plz":(j[2]/V).toFixed(2)}}),N=ct(e.rotation),Y=ct(0),H=oe(()=>{let F=w.value;if(!F)return F;let U=Os(F);return N.value?{...U,direction:Wo(U.direction,N.value)}:U}),b=void 0,c=oe(()=>{if(!h||D.value)return[];let F=Vt(l.value),U=g.value==="auto"||typeof g.value=="number"&&Number.isFinite(g.value)&&g.value>0?_t(l.value,{directionalLight:H.value,ambientLight:E.value}):null,j=ws(l.value,{directionalLight:H.value,ambientLight:E.value});return l.value.map((V,X)=>We(V,X,{directionalLight:H.value,ambientLight:E.value,seamBleed:U?.has(X)?g.value:void 0,seamEdges:U?.get(X),textureEdgeRepairEdges:F[X],lightOccludedPolyIndices:b},j[X]))}),f=oe(()=>e.textureQuality),v=oe(()=>e.atomicAtlas),S=Ge(c,M,f,L,v),C=oe(()=>h?fn(S.plans.value,M.value,L.value):{});Ht(()=>S.entries.value,()=>{e.atomicAtlas&&S.ready.value&&e.onFrameReady?.()},{flush:"sync"});let O=oe(()=>js(C.value)),k=oe(()=>{if(!e.castShadow||y?.value.receiverRegistry?.hasAny.value)return null;let F=y?.value,U=F?.groundCssZ??null;if(U===null)return null;let j=F?.shadow,V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=e.position?.[2]??0,se=U-G*Nt,le=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),re=[],me=1/0,pe=1/0,ce=-1/0,fe=-1/0,Q=1/0,z=1/0,I=-1/0,ae=-1/0,he=l.value,ze=c.value;for(let Se=0;Se<he.length;Se++){if(le.has(Se)||!ze[Se])continue;let Le=he[Se],nt=[];for(let Ne of Le.vertices){let Ce=[Ne[1]*Nt,Ne[0]*Nt,Ne[2]*Nt];Ce[0]<Q&&(Q=Ce[0]),Ce[1]<z&&(z=Ce[1]),Ce[0]>I&&(I=Ce[0]),Ce[1]>ae&&(ae=Ce[1]);let ve=Ys(Ce,X,se);nt.push(ve),ve[0]<me&&(me=ve[0]),ve[1]<pe&&(pe=ve[1]),ve[0]>ce&&(ce=ve[0]),ve[1]>fe&&(fe=ve[1])}re.push(nt)}if(re.length===0)return null;let Pe=j?.maxExtend??2e3,be=Math.max(me,Q-Pe),Fe=Math.max(pe,z-Pe),tt=Math.min(ce,I+Pe),Ve=Math.min(fe,ae+Pe),_e=tt-be,Be=Ve-Fe;if(!(_e>0)||!(Be>0))return null;let ft=j?.color??"#000000",Vn=j?.opacity??.25,Ae=Bs(ft)?.rgb??[0,0,0],He="";for(let Se of re){let we=Vs(Se);He+=`M${(we[0][0]-be).toFixed(3)},${(we[0][1]-Fe).toFixed(3)}`;for(let Le=1;Le<we.length;Le++)He+=`L${(we[Le][0]-be).toFixed(3)},${(we[Le][1]-Fe).toFixed(3)}`;He+="Z"}return Ie("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(_e),height:String(Be),viewBox:`0 0 ${_e} ${Be}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${be.toFixed(3)}px,${Fe.toFixed(3)}px,${se.toFixed(3)}px)`}},[Ie("path",{d:He,fill:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"fill-rule":"nonzero",stroke:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"stroke-width":"3","stroke-linejoin":"round",opacity:Vn.toFixed(4)})])}),A=oe(()=>e.receiveShadow?Ls(l.value):void 0),B=oe(()=>{if(!e.receiveShadow)return[];let F=y?.value,U=F?.shadowRegistry;if(!U)return[];U.version.value,x.value;let j=U.getEntries();if(j.length===0)return[];let V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=F?.shadow?.lift??.001,se=Ns(l.value,e.position??[0,0,0],e.scale,new Set,G,e.rotation);if(se.length===0)return[];let le=[],re=0,me=A.value;for(let Q of j){let z=Q(),I=z.renderedPolygonIndices,ae=Hs(z.polygons,z.position,z.scale,I?Pe=>I.has(Pe):()=>!0,z.rotation??null),he=z.polygons===l.value,ze;if(!he&&z.polygons.length>=40){let Pe=z.rotation??null,be=z.position,Fe=JSON.stringify(z.scale??null),tt=`${be[0]},${be[1]},${be[2]}|${Pe?Pe.join(","):"n"}|${Fe}`,Ve=Ko.get(z.polygons);(Ve===void 0||Zo.get(z.polygons)!==tt)&&(Ve=zs(z.polygons,be,z.scale,Pe),Ko.set(z.polygons,Ve),Zo.set(z.polygons,tt)),ze=Ve}le.push({id:Symbol(`caster-${re++}`),items:ae,selfShadowEdgeMap:he?me:void 0,edgeOwners:ze,casterPolygonCount:z.polygons.length})}let pe=P?.store.getState().cameraState,ce={rotX:pe?.rotX??65,rotY:pe?.rotY??45,meshRotation:e.rotation};return ks({receiverPlanes:se,receiverPolygons:l.value,receiverHasTexture:l.value.some(Q=>Q.texture!==void 0),casters:le,lightDir:X,cameraRot:ce,ambientLight:F?.ambientLight,directionalLight:F?.directionalLight,shadow:{color:F?.shadow?.color,opacity:F?.shadow?.opacity??.25,maxExtend:F?.shadow?.maxExtend}}).map(Q=>Ie("svg",{key:`receiver-${Q.faceIndex}`,class:"polycss-shadow polycss-shadow-svg polycss-shadow-receiver","data-poly-shadow-type":"receiver","data-poly-shadow-receiver-face":String(Q.faceIndex),"data-poly-shadow-receiver-polys":JSON.stringify(Q.memberPolyIndices),width:String(Q.width),height:String(Q.height),viewBox:`0 0 ${Q.width} ${Q.height}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:Q.matrixCss}},Q.paths.map((z,I)=>Ie("path",{key:I,d:z.d,fill:Q.fill,stroke:Q.fill,"stroke-width":"3","stroke-linejoin":"round",opacity:Q.opacity.toFixed(4),"data-poly-shadow-caster-polys":JSON.stringify(z.casterPolygonIndices)}))))}),W=Symbol();Ht(()=>e.castShadow,(F,U,j)=>{let V=y?.value.shadowRegistry;V&&(F?V.register(W,()=>{let X=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),G=new Set,se=c.value;for(let le=0;le<se.length;le++)se[le]&&!X.has(le)&&G.add(le);return{polygons:l.value,position:e.position??[0,0,0],scale:e.scale,rotation:e.rotation,renderedPolygonIndices:G}}):V.unregister(W),j(()=>V.unregister(W)))},{immediate:!0});let K=Symbol();Ht(()=>e.receiveShadow,(F,U,j)=>{let V=y?.value.receiverRegistry;V&&(F?V.register(K):V.unregister(K),j(()=>V.unregister(K)))},{immediate:!0}),Xo(()=>{y?.value.shadowRegistry?.unregister(W),y?.value.receiverRegistry?.unregister(K)});let q=ct(null),$={get element(){return q.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>d??l.value,setPolygons(F){let U=e.autoCenter?Qo(F):F;d=U;let j=q.value,V=j&&h&&yn(j,U,{directionalLight:H.value,ambientLight:E.value,textureLighting:M.value,strategies:L.value,seamBleed:g.value,colorFrame:++Y.value,colorFreezeFrames:0});s.value=F.slice()},updatePolygon(F,U){let j=d??l.value,V=typeof F=="number"?F:j.indexOf(F);V<0||V>=j.length||(Object.assign(j[V],U),s.value=j.slice(),d=null)},rebakeAtlas:()=>{N.value=e.rotation}};o($),As(()=>{q.value&&jo(q.value,$)}),Xo(()=>{q.value&&$o(q.value)});let ee=ct(null);Uo(F=>{let U=q.value;if(ee.value?.dispose(),ee.value=null,!D.value||!U)return;let j=Yo({doc:U.ownerDocument,wrapper:U,polygons:l.value,directionalLight:H.value,ambientLight:E.value});if(!j)return;let V=()=>{let G=P?.store.getState().cameraState;return{rotX:G?.rotX??65,rotY:G?.rotY??45,meshRotation:e.rotation}};ee.value=j,j.render(V());let X=P?.store.subscribe(()=>{j.syncCamera(V())});F(()=>{X?.(),j.dispose(),ee.value===j&&(ee.value=null)})});let ne=null;function ie(F,U,j){let V=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let re=document.elementsFromPoint(U,j),me=new Set;for(let pe of re){let ce=lt(pe);ce&&!me.has(ce)&&(me.add(ce),V.push({object:ce}))}}let X=0,G=0,se=P?.cameraElRef.value;if(se){let re=se.getBoundingClientRect();re.width>0&&re.height>0&&(X=(U-re.left)/re.width*2-1,G=-((j-re.top)/re.height*2-1))}let le=0;return ne&&(le=Math.hypot(U-ne.x,j-ne.y)),{object:V[0]?.object??$,eventObject:$,intersections:V,pointer:{x:X,y:G},delta:le,nativeEvent:F,stopPropagation:()=>F.stopPropagation()}}function J(F,U,j,V){F&&F(ie(U,j,V))}return()=>{let U={transform:Ds({position:e.position,scale:e.scale,rotation:e.rotation}),...R.value??void 0,...n.style,...O.value??void 0},j=Object.fromEntries(Object.entries(n).filter(([z])=>z!=="style"&&z!=="class")),V=`polycss-mesh${D.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,X={};e.onClick&&(X.onClick=z=>{let I=z;J(e.onClick,I,I.clientX,I.clientY)}),e.onContextMenu&&(X.onContextmenu=z=>{let I=z;J(e.onContextMenu,I,I.clientX,I.clientY)}),e.onDoubleClick&&(X.onDblclick=z=>{let I=z;J(e.onDoubleClick,I,I.clientX,I.clientY)}),e.onWheel&&(X.onWheel=z=>{let I=z;J(e.onWheel,I,I.clientX,I.clientY)}),X.onPointerdown=z=>{let I=z;ne={x:I.clientX,y:I.clientY},J(e.onPointerDown,I,I.clientX,I.clientY)},X.onPointerup=z=>{let I=z;J(e.onPointerUp,I,I.clientX,I.clientY),ne=null},e.onPointerMove&&(X.onPointermove=z=>{let I=z;J(e.onPointerMove,I,I.clientX,I.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(X.onPointerenter=z=>{let I=z;J(e.onPointerOver,I,I.clientX,I.clientY),J(e.onPointerEnter,I,I.clientX,I.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(X.onPointerleave=z=>{let I=z;J(e.onPointerOut,I,I.clientX,I.clientY),J(e.onPointerLeave,I,I.clientX,I.clientY)}),e.onPointerCancel&&(X.onPointercancel=z=>{let I=z;J(e.onPointerCancel,I,I.clientX,I.clientY),ne=null});let G=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:U,...G,...X,...j},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:U,...G,...X,...j},t.error?.({error:i.error.value})??[]);let se=l.value,le=t.polygon?se.map((z,I)=>Ie("template",{key:I},t.polygon?.({polygon:z,index:I}))):D.value?[]:S.entries.value.map((z,I)=>{if(z)return Je({entry:z,page:S.pages.value[z.pageIndex],textureLighting:M.value,solidPaintDefaults:C.value});let ae=S.plans.value[I];if(!ae||ae.texture)return null;if(st(ae))return Qe({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});if(it(ae))return Ke({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});let he=L.value?.disable?.includes("i")?null:Rs(ae);return he?hn({entry:ae,geometry:he,textureLighting:M.value,solidPaintDefaults:C.value}):Ze({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value,forceBorderShape:!S.useFullRectSolid.value})}),re=t.default?.()??[],me=k.value,pe=me?[me]:[],ce=B.value,fe=y?.value?.sceneEl??null,Q=fe&&ce.length>0?[Ie(Ts,{to:fe},ce)]:[];return Ie("div",{ref:q,class:V,style:U,...G,...X,...j},[...pe,...Q,...le,...re])}}});import{defineComponent as $s,h as Jo,computed as Mn}from"vue";import{BASE_TILE as St}from"@layoutit/polycss-core";function Xs(e,t,n,o,r){let a=typeof n=="number"?n:n?.[0]??1,i=typeof n=="number"?n:n?.[1]??1,u=typeof n=="number"?n:n?.[2]??1,s=a!==1||i!==1||u!==1,d=!!t&&(!!t[0]||!!t[1]||!!t[2]),m=(e?.[1]??0)*St,p=(e?.[0]??0)*St,l=(e?.[2]??0)*St,h=[];return h.push(`translate3d(${m}px, ${p}px, ${l}px)`),d&&(t[0]&&h.push(`rotateY(${-t[0]}deg)`),t[1]&&h.push(`rotateX(${-t[1]}deg)`),t[2]&&h.push(`rotateZ(${-t[2]}deg)`)),s&&h.push(`scale3d(${a}, ${i}, ${u})`),h.push(`translate(${-o/2}px, ${-r/2}px)`),h.join(" ")}var er=$s({name:"PolyIframe",props:{src:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},position:{type:Array,default:void 0},rotation:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},allow:{type:String,default:void 0},sandbox:{type:String,default:void 0},loading:{type:String,default:void 0},referrerpolicy:{type:String,default:void 0},title:{type:String,default:void 0},class:{type:String,default:void 0},style:{type:Object,default:void 0}},setup(e){let t=Mn(()=>e.width*St),n=Mn(()=>e.height*St),o=Mn(()=>Xs(e.position,e.rotation,e.scale,t.value,n.value));return()=>{let r={position:"absolute",left:"0",top:"0",transformOrigin:"0 0",transformStyle:"preserve-3d",transform:o.value,...e.style??{}},a={src:e.src,style:{width:`${t.value}px`,height:`${n.value}px`,border:"0",display:"block",background:"#000"}};return e.allow&&(a.allow=e.allow),e.sandbox&&(a.sandbox=e.sandbox),e.loading&&(a.loading=e.loading),e.referrerpolicy&&(a.referrerpolicy=e.referrerpolicy),e.title&&(a.title=e.title),Jo("div",{class:e.class?`polycss-iframe ${e.class}`:"polycss-iframe",style:r},[Jo("iframe",a)])}}});import{defineComponent as Us,h as Ws,computed as qs}from"vue";var tr=Us({name:"PolyGround",props:{size:{type:Number,default:6},z:{type:Number,default:0},center:{type:Array,default:()=>[0,0]},color:{type:String,default:"#7d848e"},class:{type:String,default:void 0}},setup(e){let t=qs(()=>{let n=e.size/2,[o,r]=e.center;return[{vertices:[[o-n,r-n,e.z],[o+n,r-n,e.z],[o+n,r+n,e.z],[o-n,r+n,e.z]],color:e.color}]});return()=>Ws(te,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as nr}from"vue";function Gs(e){return typeof e=="function"?nr(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):nr(()=>({texture:e.texture,key:e.key}))}import{computed as dt,defineComponent as Ks,h as or}from"vue";var Zs=4;function Yt(e,t=Zs){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function Qs(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,a)=>r-a),n=[...new Set(e.map(r=>r[1]))].sort((r,a)=>r-a);if(t.length!==2||n.length!==2)return null;let o=new Set([`${t[0]},${n[0]}`,`${t[0]},${n[1]}`,`${t[1]},${n[0]}`,`${t[1]},${n[1]}`]);for(let r of e)if(!o.has(`${r[0]},${r[1]}`))return null;return{u0:t[0],u1:t[1],v0:n[0],v1:n[1]}}function Js({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let{u0:u,u1:s,v0:d,v1:m}=n,p=s-u,l=m-d,h=1/p,y=1/l,P=Math.max(d,m),x=u/p,T=(1-P)/l,M={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Yt(h)} ${Yt(y)}`,backgroundPosition:`${Yt(-x)} ${Yt(-T)}`,pointerEvents:i==="none"?"none":void 0,...r},L=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([w,E])=>[`data-${w}`,String(E)])):{},g=o?.trim()||void 0;return or("i",{class:g,style:M,...L,...a})}var rr=Ks({name:"Poly",inheritAttrs:!1,props:{vertices:{type:Array,required:!0},color:{type:String},texture:{type:String},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},material:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},context:{type:Object,default:void 0},baseColor:{type:String},pointerEvents:{type:String,default:"auto"}},setup(e,{attrs:t}){let n=dt(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=dt(()=>e.textureQuality??e.context?.textureQuality),r=dt(()=>e.material?.texture??e.texture),a=dt(()=>e.material&&e.uvs?Qs(e.uvs):null),i=dt(()=>{let d=e.context?.tileSize??50;return We({vertices:e.vertices,color:e.baseColor??e.color,texture:r.value,uvs:e.uvs,data:e.data},0,{tileSize:d,layerElevation:e.context?.layerElevation??d,directionalLight:e.context?.directionalLight})}),u=dt(()=>a.value?[]:[i.value]),s=Ge(u,n,o);return()=>{let d=i.value,m=s.entries.value[0],p=[];e.position&&p.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&p.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):p.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&p.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&p.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&p.push(`rotateZ(${e.rotation[2]}deg)`));let l=p.length>0?p.join(" "):void 0,h={};if(e.data)for(let[T,M]of Object.entries(e.data))h[`data-${T}`]=String(M);let y={...t,...h},P=Object.fromEntries(Object.entries(y).filter(([T])=>T!=="class"&&T!=="style")),x;return a.value&&e.material&&d?x=Js({plan:d,material:e.material,uvRect:a.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):m?x=Je({entry:m,page:s.pages.value[m.pageIndex],textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):d&&!d.texture&&(x=it(d)?Ke({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):st(d)?Qe({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):Ze({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"})),x?l?or("div",{class:"polycss-poly-wrapper",style:{transform:l,position:"absolute",transformStyle:"preserve-3d"}},[x]):x:null}}});import{computed as Me,defineComponent as Te,h as Ee}from"vue";import{boxPolygons as el,planePolygons as tl,ringPolygons as nl,octahedronPolygons as ol,spherePolygons as rl,tetrahedronPolygons as al,icosahedronPolygons as il,dodecahedronPolygons as sl,cylinderPolygons as ll,conePolygons as ul,torusPolygons as cl}from"@layoutit/polycss-core";var ar=Te({name:"PolyBox",props:{size:{type:[Number,Array],default:void 0},center:{type:Array,default:void 0},min:{type:Array,default:void 0},max:{type:Array,default:void 0},color:{type:String,default:void 0},texture:{type:String,default:void 0},material:{type:Object,default:void 0},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},faces:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>el({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture,material:e.material,uvs:e.uvs,data:e.data,faces:e.faces}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ir=Te({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,default:void 0},offset:{type:[Number,Array],default:void 0},along:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>tl({axis:e.axis,size:e.size,offset:e.offset,along:e.along,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),sr=Te({name:"PolyRing",props:{axis:{type:Number,required:!0},radius:{type:Number,required:!0},halfThickness:{type:Number,default:void 0},segments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>nl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),lr=Te({name:"PolyOctahedron",props:{center:{type:Array,required:!0},size:{type:Number,required:!0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ol({center:e.center,size:e.size,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ur=Te({name:"PolyTetrahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>al({size:e.size,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),cr=Te({name:"PolyIcosahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>il({size:e.size,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),dr=Te({name:"PolyDodecahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>sl({size:e.size,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),mr=Te({name:"PolySphere",props:{radius:{type:Number,default:void 0},subdivisions:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>rl({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),pr=Te({name:"PolyCylinder",props:{radius:{type:Number,default:void 0},radiusTop:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ll({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),yr=Te({name:"PolyCone",props:{radius:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ul({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),fr=Te({name:"PolyTorus",props:{radius:{type:Number,default:void 0},tube:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},tubularSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>cl({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>Ee(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as dl,inject as ml,onMounted as pl,onBeforeUnmount as yl,watch as Tn,ref as fl}from"vue";import{BASE_TILE as gr}from"@layoutit/polycss-core";var gl=150,hr=4,hl=513e-6,Pl=10,vl=3,Pr=16.67,xl=50,vr=.1,xr=10,br=0,Sr=5e3,bl=.3,Sl=.05;function Cl(e){return e===!0?-1:e===void 0||e===!1?1:e}function Ml(e,t,n,o,r){let a=Cl(r),i=e/hr*a,u=t/hr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Cr(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*gr),s=-t/(a*gr*i),d=-r*Math.PI/180,m=Math.cos(d),p=Math.sin(d);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var Mr=dl({name:"PolyOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:vr},maxZoom:{type:Number,default:xr},minDistance:{type:Number,default:br},maxDistance:{type:Number,default:Sr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=ml(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},d=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=fl(!1),y=null,P=null,x=null;function T(){let g=a.value;if(!g)return;let w=!1,E={x:0,y:0},_=c=>{if(e.drag&&p===null&&c.isPrimary!==!1){c.preventDefault(),p=c.pointerId,l={x:c.clientX,y:c.clientY},g.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),d()}},D=c=>{if(p===null||c.pointerId!==p||!e.drag)return;c.preventDefault();let f=c.clientX-l.x,v=c.clientY-l.y;l={x:c.clientX,y:c.clientY};let S=r.value,C=S.state;if(c.shiftKey){let{dWorldX:O,dWorldY:k}=Cr(f,v,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}else{let{rotX:O,rotY:k}=Ml(f,v,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}i(),o.updateCameraFromRef(S),s()},R=c=>{if(p===c.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}h.value=!1,m()}},N=c=>{c.preventDefault()},Y=c=>{c.button===2&&(w=!0,E={x:c.clientX,y:c.clientY})},H=c=>{if(!w||!e.drag)return;let f=c.clientX-E.x,v=c.clientY-E.y;E={x:c.clientX,y:c.clientY};let S=r.value,C=S.state,{dWorldX:O,dWorldY:k}=Cr(f,v,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]}),i(),o.updateCameraFromRef(S),s()},b=c=>{c.button===2&&w&&(w=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),y=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let w=!1,E=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Pl:N*=vl;let Y=r.value;if(e.dolly){let H=e.minDistance??br,b=e.maxDistance??Sr,c=Math.max(H,Math.min(b,Y.state.distance+N*Sl));Y.update({distance:c})}else{let H=Math.exp(-N*hl),b=e.minZoom??vr,c=e.maxZoom??xr,f=Math.max(b,Math.min(c,Y.state.zoom*H));Y.update({zoom:f})}i(),o.updateCameraFromRef(Y),w||(w=!0,d()),s(),E!==null&&clearTimeout(E),E=setTimeout(()=>{E=null,w=!1,m()},gl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),E!==null&&clearTimeout(E)}}function L(){let g=null,w=!1,E=0,_=D=>{if(w)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)E=D;else{let N=Math.min(xl,E?D-E:Pr);E=D;let H=(R.speed??bl)*(N/Pr),b=r.value,c=b.state;if(R.axis==="x"){let f=((c.rotX+H)%360+360)%360;b.update({rotX:f})}else{let f=((c.rotY+H)%360+360)%360;b.update({rotY:f})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),x=()=>{w=!0,g!==null&&cancelAnimationFrame(g),x=null}}return pl(()=>{e.drag&&T(),e.wheel&&M(),e.animate&&L()}),yl(()=>{y?.(),P?.(),x?.(),y=null,P=null}),Tn(()=>e.drag,g=>{g&&!y&&T(),!g&&y&&(y(),y=null)}),Tn(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),Tn(()=>!!e.animate,g=>{g&&!x&&L(),!g&&x&&x()}),()=>null}});import{defineComponent as Tl,inject as El,onMounted as Al,onBeforeUnmount as wl,watch as En,ref as Ll}from"vue";import{BASE_TILE as Tr}from"@layoutit/polycss-core";var Rl=150,Er=4,Ol=513e-6,Dl=10,kl=3,Ar=16.67,Il=50,wr=.1,Lr=10,Rr=0,Or=5e3,Fl=.3,Vl=.05;function _l(e){return e===!0?-1:e===void 0||e===!1?1:e}function Dr(e,t,n,o,r){let a=_l(r),i=e/Er*a,u=t/Er*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Bl(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*Tr),s=-t/(a*Tr*i),d=-r*Math.PI/180,m=Math.cos(d),p=Math.sin(d);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var kr=Tl({name:"PolyMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:wr},maxZoom:{type:Number,default:Lr},minDistance:{type:Number,default:Rr},maxDistance:{type:Number,default:Or},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=El(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},d=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=Ll(!1),y=null,P=null,x=null;function T(){let g=a.value;if(!g)return;let w=!1,E={x:0,y:0},_=c=>{if(e.drag&&p===null&&c.isPrimary!==!1){c.preventDefault(),p=c.pointerId,l={x:c.clientX,y:c.clientY},g.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),d()}},D=c=>{if(p===null||c.pointerId!==p||!e.drag)return;c.preventDefault();let f=c.clientX-l.x,v=c.clientY-l.y;l={x:c.clientX,y:c.clientY};let S=r.value,C=S.state;if(c.shiftKey){let{rotX:O,rotY:k}=Dr(f,v,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}else{let{dWorldX:O,dWorldY:k}=Bl(f,v,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}i(),o.updateCameraFromRef(S),s()},R=c=>{if(p===c.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}h.value=!1,m()}},N=c=>{c.preventDefault()},Y=c=>{c.button===2&&(w=!0,E={x:c.clientX,y:c.clientY})},H=c=>{if(!w||!e.drag)return;let f=c.clientX-E.x,v=c.clientY-E.y;E={x:c.clientX,y:c.clientY};let S=r.value,C=S.state,{rotX:O,rotY:k}=Dr(f,v,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k}),i(),o.updateCameraFromRef(S),s()},b=c=>{c.button===2&&w&&(w=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),y=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let w=!1,E=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Dl:N*=kl;let Y=r.value;if(e.dolly){let H=e.minDistance??Rr,b=e.maxDistance??Or,c=Math.max(H,Math.min(b,Y.state.distance+N*Vl));Y.update({distance:c})}else{let H=Math.exp(-N*Ol),b=e.minZoom??wr,c=e.maxZoom??Lr,f=Math.max(b,Math.min(c,Y.state.zoom*H));Y.update({zoom:f})}i(),o.updateCameraFromRef(Y),w||(w=!0,d()),s(),E!==null&&clearTimeout(E),E=setTimeout(()=>{E=null,w=!1,m()},Rl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),E!==null&&clearTimeout(E)}}function L(){let g=null,w=!1,E=0,_=D=>{if(w)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)E=D;else{let N=Math.min(Il,E?D-E:Ar);E=D;let H=(R.speed??Fl)*(N/Ar),b=r.value,c=b.state;if(R.axis==="x"){let f=((c.rotX+H)%360+360)%360;b.update({rotX:f})}else{let f=((c.rotY+H)%360+360)%360;b.update({rotY:f})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),x=()=>{w=!0,g!==null&&cancelAnimationFrame(g),x=null}}return Al(()=>{e.drag&&T(),e.wheel&&M(),e.animate&&L()}),wl(()=>{y?.(),P?.(),x?.(),y=null,P=null}),En(()=>e.drag,g=>{g&&!y&&T(),!g&&y&&(y(),y=null)}),En(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),En(()=>!!e.animate,g=>{g&&!x&&L(),!g&&x&&x()}),()=>null}});import{defineComponent as zl,h as jt,inject as Ir,onBeforeUnmount as Fr,onMounted as An,ref as Ct,computed as mt}from"vue";import{arrowPolygons as Hl,eulerXYZFromQuat as Nl,planePolygons as Yl,quatFromAxisAngle as jl,quatFromEulerXYZ as $l,quatMultiply as Xl,ringQuadPolygons as Ul}from"@layoutit/polycss-core";var $t="#ff3653",Xt="#8adb00",Ut="#2c8fff",Wl=.6,ql=.8,Gl=1,Oe=50,Vr=60,Kl=.6,Zl=.0125,Ql=.15,Jl=.04,eu=1,_r=.02,wn=1.04,tu=.1,nu=.25,$r=1e-4,Mt={0:1,1:0,2:2},Br=[{cssAxis:0,sign:1,key:"x",color:$t},{cssAxis:0,sign:-1,key:"-x",color:$t},{cssAxis:1,sign:1,key:"y",color:Xt},{cssAxis:1,sign:-1,key:"-y",color:Xt},{cssAxis:2,sign:1,key:"z",color:Ut},{cssAxis:2,sign:-1,key:"-z",color:Ut}],zr=[{cssAxis:0,key:"x",color:$t},{cssAxis:1,key:"y",color:Xt},{cssAxis:2,key:"z",color:Ut}],Hr=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Ut},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Xt},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:$t}];function Ln(e,t){let n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!n)return e;let o=parseInt(n[1],16),r=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${o}, ${r}, ${a}, ${t})`}function Wt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function ou(e){return e.replace("-","")[0]}function Rn(e,t,n,o){let r=n*Math.PI/180,a=o*Math.PI/180,i=[0,0,0];i[e]=t;let u=i[0]*Math.sin(a)+i[1]*Math.cos(a),s=i[2];return u*Math.sin(r)+s*Math.cos(r)<0}function ru(e){if(e.length===0)return Vr;let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?Math.max(r-t,a-n,i-o)*Oe*Kl:Vr}function au(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?[(n+a)/2*Oe,(t+r)/2*Oe,(o+i)/2*Oe]:[0,0,0]}function Nr(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),a=o.getBoundingClientRect();e.wrapper.removeChild(o);let i=(a.left-r.left)/t,u=(a.top-r.top)/t,s=i*i+u*u;if(s<$r)return;let d=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=l=>{let h=l.clientX-e.startClientX,y=l.clientY-e.startClientY,P=(h*i+y*u)/s;P=Wt(P,e.translationSnap);let x=[d[0]+P*n[0],d[1]+P*n[1],d[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:x}),e.onChange?.()},p=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p);let l=h=>{h.stopPropagation(),h.stopImmediatePropagation()};window.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",l,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p)}function Yr(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(p){let l=e.wrapper.ownerDocument.createElement("div");l.style.position="absolute",l.style.left="0",l.style.top="0",l.style.width="0",l.style.height="0",l.style.transform=`translate3d(${p[0]*o}px, ${p[1]*o}px, ${p[2]*o}px)`,e.wrapper.appendChild(l);let h=e.wrapper.getBoundingClientRect(),y=l.getBoundingClientRect();return e.wrapper.removeChild(l),{x:(y.left-h.left)/o,y:(y.top-h.top)/o}}let a=r(t),i=r(n),u=a.x*i.y-i.x*a.y;if(Math.abs(u)<$r)return;let s=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let d=p=>{let l=p.clientX-e.startClientX,h=p.clientY-e.startClientY,y=(i.y*l-i.x*h)/u,P=(-a.y*l+a.x*h)/u;y=Wt(y,e.translationSnap),P=Wt(P,e.translationSnap);let x=[s[0]+y*t[0]+P*n[0],s[1]+y*t[1]+P*n[1],s[2]+y*t[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:x}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",d),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",d),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function jr(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),a=0,i=e.target.getRotation()??[0,0,0],u=$l(i);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let s=m=>{let p=Math.atan2(m.clientY-o,m.clientX-n),l=p-r;l>Math.PI?l-=2*Math.PI:l<-Math.PI&&(l+=2*Math.PI),a+=l,r=p;let h=a*180/Math.PI;h=Wt(h,e.rotationSnap);let y=[0,0,0];y[e.cssAxis]=1;let P=jl(y,h*Math.PI/180),x=Nl(Xl(P,u));e.onObjectChange?.({object:e.target,rotation:x}),e.onChange?.()},d=()=>{window.removeEventListener("pointermove",s),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d);let m=p=>{p.stopPropagation(),p.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",s),window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d)}function iu(e){return!!e&&typeof e=="object"&&"value"in e}function su(e){return e?iu(e)?e.value??null:e:null}var Xr=zl({name:"PolyTransformControls",props:{object:{type:null,default:null},mode:{type:String,default:"translate"},space:{type:String,default:"world"},size:{type:Number,default:1},showX:{type:Boolean,default:!0},showY:{type:Boolean,default:!0},showZ:{type:Boolean,default:!0},translationSnap:{type:Number,default:null},rotationSnap:{type:Number,default:null},enabled:{type:Boolean,default:!0}},emits:{change:()=>!0,objectChange:e=>!0,mouseDown:()=>!0,mouseUp:()=>!0,draggingChanged:e=>!0},setup(e,{emit:t}){let n=Ct(null),o=Ct(null),r=Ct(new Map),a=mt(()=>su(e.object)),i=Ct(0);An(()=>{i.value++});let u=Ct(0),s=Ir(ue,void 0),d=null;An(()=>{let c=s?.store;c&&(d=c.subscribe(()=>{u.value++}))}),Fr(()=>{d?.()});function m(){u.value;let c=s?.store.getState().cameraState;return{rotX:c?.rotX??65,rotY:c?.rotY??45}}let p=mt(()=>(i.value,ru(a.value?.getPolygons()??[]))),l=mt(()=>p.value*e.size);function h(c){return o.value===c?Gl:n.value===c?ql:Wl}function y(){t("change")}function P(c){t("objectChange",c)}function x(c){t("draggingChanged",c)}function T(){t("mouseDown")}function M(){t("mouseUp")}let L=Ir(ue,void 0),g=null;An(()=>{let c=L?.cameraElRef.value;if(!c)return;let f=v=>{let S=a.value;if(!S||!e.enabled||v.target?.closest(".polycss-transform-gizmo"))return;let O={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let A of Hr){let B=["x","y","z"][A.axisA],W=["x","y","z"][A.axisB];if(!O[B]||!O[W])continue;let K=document.querySelector(`.polycss-transform-plane--${A.key}`);if(!K||!ut(K,v.clientX,v.clientY))continue;v.preventDefault(),v.stopPropagation();let q=K.closest("[data-poly-transform-controls]");if(!q)return;o.value=A.key,Yr({axisA:A.axisA,axisB:A.axisB,probeDistanceCss:l.value,wrapper:q,target:S,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:T,onMouseUp:M,onDraggingChanged:$=>{$||(o.value=null),x($)}});return}let k=e.mode==="translate"?Br:zr;for(let A of k){let B=A.key.replace("-","")[0];if(!O[B])continue;let W=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${A.key}`);if(!W||!(e.mode==="rotate"?ut(W,v.clientX,v.clientY):ut(W,v.clientX,v.clientY)))continue;v.preventDefault(),v.stopPropagation();let q=W.closest("[data-poly-transform-controls]");if(!q)return;if(o.value=A.key,e.mode==="translate"){let $=A;Nr({cssAxis:$.cssAxis,sign:$.sign,shaftLengthCss:l.value,wrapper:q,target:S,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:T,onMouseUp:M,onDraggingChanged:ee=>{ee||(o.value=null),x(ee)}})}else jr({cssAxis:A.cssAxis,wrapper:q,target:S,startClientX:v.clientX,startClientY:v.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:P,onMouseDown:T,onMouseUp:M,onDraggingChanged:$=>{$||(o.value=null),x($)}});return}};c.addEventListener("pointerdown",f),g=()=>c.removeEventListener("pointerdown",f)}),Fr(()=>{g?.()});let w=mt(()=>{if(e.mode!=="translate")return[];i.value;let f=l.value/Oe,{rotX:v,rotY:S}=m();return Br.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[ou(C.key)]).map(C=>{let O=h(C.key),k=Rn(C.cssAxis,C.sign,v,S);return{spec:C,polygons:Hl({axis:Mt[C.cssAxis],sign:C.sign,shaftLength:f,shaftHalfThickness:f*Zl,headLength:f*Ql,headHalfThickness:f*Jl,color:Ln(C.color,O),shaft:!k})}})}),E=mt(()=>{if(e.mode!=="translate")return[];i.value;let f=l.value/Oe,v={x:e.showX,y:e.showY,z:e.showZ},S=["x","y","z"],{rotX:C,rotY:O}=m(),k=f*nu;return Hr.filter(A=>v[S[A.axisA]]&&v[S[A.axisB]]).map(A=>{let B=h(A.key),W=Mt[A.perpAxis],K=(W+1)%3,q=(W+2)%3,$=Mt[K],ee=Mt[q],ne=Rn($,1,C,O)?-1:1,ie=Rn(ee,1,C,O)?-1:1;return{spec:A,polygons:Yl({axis:W,size:f*tu,offset:[ne*k,ie*k],color:Ln(A.color,B)})}})}),_=mt(()=>{if(e.mode!=="rotate")return[];i.value;let v=l.value*eu/Oe*wn;return zr.filter(S=>({x:e.showX,y:e.showY,z:e.showZ})[S.key]).map(S=>{let C=h(S.key);return{spec:S,polygons:Ul({axis:Mt[S.cssAxis],outerRadius:v,color:Ln(S.color,C)})}})}),D=(1-_r)/wn,R=(1+_r)/wn;function N(c){return f=>{if(!e.enabled)return;let v=a.value;if(!v)return;f.stopPropagation();let C=f.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,Nr({cssAxis:c.cssAxis,sign:c.sign,shaftLengthCss:l.value,wrapper:C,target:v,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:T,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),x(O)}}))}}function Y(c){return f=>{if(!e.enabled)return;let v=a.value;if(!v)return;f.stopPropagation();let C=f.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,Yr({axisA:c.axisA,axisB:c.axisB,probeDistanceCss:l.value,wrapper:C,target:v,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:T,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),x(O)}}))}}function H(c){return f=>{if(!e.enabled)return;let v=a.value;if(!v)return;let S=f.eventObject.element;f.stopPropagation();let C=S?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,jr({cssAxis:c.cssAxis,wrapper:C,target:v,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:P,onMouseDown:T,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),x(O)}}))}}function b(c){return{onPointerOver:()=>{n.value=c},onPointerOut:()=>{n.value===c&&(n.value=null)}}}return()=>{let c=a.value;if(!c)return null;let f=c.getPosition()??[0,0,0],v=au(c.getPolygons()),S=f[1]*Oe+v[0],C=f[0]*Oe+v[1],O=f[2]*Oe+v[2],k={transform:`translate3d(${S}px, ${C}px, ${O}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},A=e.mode==="translate"?[...w.value.map(({spec:B,polygons:W})=>jt(te,{key:`arrow-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${B.key}`,textureLighting:"baked",onPointerDown:N(B),...b(B.key)})),...E.value.map(({spec:B,polygons:W})=>jt(te,{key:`plane-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${B.key}`,textureLighting:"baked",onPointerDown:Y(B),...b(B.key)}))]:_.value.map(({spec:B,polygons:W})=>jt(te,{key:B.key,polygons:W,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${B.key}`,style:{"--ring-inner-ratio":D,"--ring-outer-ratio":R},textureLighting:"baked",onPointerDown:H(B),...b(B.key)}));return jt("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:k},A)}}});import{defineComponent as lu,inject as uu,onMounted as cu,onBeforeUnmount as du,watch as mu}from"vue";import{BASE_TILE as pu}from"@layoutit/polycss-core";var yu={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 On(e,t){return{enabled:t.enabled??e.enabled,lookEnabled:t.lookEnabled??e.lookEnabled,moveEnabled:t.moveEnabled??e.moveEnabled,jumpEnabled:t.jumpEnabled??e.jumpEnabled,crouchEnabled:t.crouchEnabled??e.crouchEnabled,lookSensitivity:t.lookSensitivity??e.lookSensitivity,invertY:t.invertY??e.invertY,moveSpeed:t.moveSpeed??e.moveSpeed,jumpVelocity:t.jumpVelocity??e.jumpVelocity,gravity:t.gravity??e.gravity,eyeHeight:t.eyeHeight??e.eyeHeight,crouchHeight:t.crouchHeight??e.crouchHeight,groundZ:t.groundZ??e.groundZ,minPitch:t.minPitch??e.minPitch,maxPitch:t.maxPitch??e.maxPitch}}var Wr=new Set(["KeyW","ArrowUp"]),qr=new Set(["KeyS","ArrowDown"]),Gr=new Set(["KeyA","ArrowLeft"]),Kr=new Set(["KeyD","ArrowRight"]),Zr=new Set(["Space"]),Dn=new Set(["ControlLeft","ControlRight"]);function Ur(e){return Wr.has(e)||qr.has(e)||Gr.has(e)||Kr.has(e)||Zr.has(e)||Dn.has(e)}function fu(){return{change:[],start:[],end:[]}}function pt(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Qr=lu({name:"PolyFirstPersonControls",props:{enabled:{type:Boolean,default:!0},lookEnabled:{type:Boolean,default:!0},moveEnabled:{type:Boolean,default:!0},jumpEnabled:{type:Boolean,default:!0},crouchEnabled:{type:Boolean,default:!0},lookSensitivity:{type:Number,default:.15},invertY:{type:Boolean,default:!1},moveSpeed:{type:Number,default:5},jumpVelocity:{type:Number,default:7},gravity:{type:Number,default:18},eyeHeight:{type:Number,default:1.7},crouchHeight:{type:Number,default:1},groundZ:{type:Number,default:0},minPitch:{type:Number,default:5},maxPitch:{type:Number,default:175}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t,expose:n}){let o=uu(ue,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:a,cameraElRef:i,applyTransformDirect:u}=o,s=On(yu,e),d=[0,0,0],m=null,p=0,l=!1,h=!1,y=!1,P=new Set,x=0,T=0,M=fu();function L(c,f){let v=c*Math.PI/180,S=f*Math.PI/180;return[-Math.sin(v)*Math.cos(S),-Math.sin(v)*Math.sin(S),-Math.cos(v)]}function g(){let c=i.value,f=c?getComputedStyle(c).perspective:"",v=parseFloat(f);return(Number.isFinite(v)&&v>0?v:32e3)/pu}function w(){let c=a.value.state,f=L(c.rotX??90,c.rotY??0),v=g();return[d[0]+f[0]*v,d[1]+f[1]*v,d[2]+f[2]*v]}function E(){let c=w(),f=a.value;f.update({target:c}),u(),r.updateCameraFromRef(f)}let _=.05;function D(c){if(m===null||l)return;let f=Math.min(_,p?(c-p)/1e3:.0167);if(p=c,s.enabled){let v=!1,S=a.value.state;if(s.moveEnabled){let A=0,B=0;for(let W of P)Wr.has(W)?A+=1:qr.has(W)?A-=1:Kr.has(W)?B+=1:Gr.has(W)&&(B-=1);if(A!==0||B!==0){let K=(S.rotY??0)*Math.PI/180,q=-Math.cos(K),$=-Math.sin(K),ee=-Math.sin(K),ne=Math.cos(K),ie=Math.hypot(A,B)||1,J=s.moveSpeed*f;d[0]+=(q*A+ee*B)/ie*J,d[1]+=($*A+ne*B)/ie*J,v=!0}}let O=s.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?s.crouchHeight:s.eyeHeight;s.jumpEnabled&&(x!==0||T>0)?(x-=s.gravity*f,T+=x*f,T<=0&&(T=0,x=0)):s.jumpEnabled||(T=0,x=0);let k=s.groundZ+O+T;if(Math.abs(d[2]-k)>1e-4&&(d[2]=k,v=!0),v){let A=w(),B=a.value;B.update({target:A}),u(),r.updateCameraFromRef(B),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}}}m=requestAnimationFrame(D)}function R(){m!==null||l||(p=0,m=requestAnimationFrame(D))}function N(){m!==null&&(cancelAnimationFrame(m),m=null)}let Y=null;function H(){let c=i.value;if(!c)return;let f=c.ownerDocument??document,v=f.defaultView??globalThis,S=()=>{if(!(!s.enabled||!s.lookEnabled||l||h))try{c.requestPointerLock()}catch{}},C=()=>{let $=f.pointerLockElement===c;if($!==h){if(h=$,$){y=!0,pt(M,"start");try{t("interaction-start",[d[0],d[1],d[2]])}catch{}}else if(y){y=!1,pt(M,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}}},O=$=>{if(!h||l||!s.enabled||!s.lookEnabled)return;let ee=$.movementX??0,ne=$.movementY??0;if(ee===0&&ne===0)return;let ie=a.value,J=ie.state,F=s.lookSensitivity,U=s.invertY?-1:1,j=(((J.rotY??0)-ee*F)%360+360)%360,V=(J.rotX??90)-ne*F*U;V<s.minPitch?V=s.minPitch:V>s.maxPitch&&(V=s.maxPitch);let X=L(V,j),G=g(),se=[d[0]+X[0]*G,d[1]+X[1]*G,d[2]+X[2]*G];ie.update({rotX:V,rotY:j,target:se}),u(),r.updateCameraFromRef(ie),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},k=$=>{if(!(!s.enabled||l)&&Ur($.code)&&!(!h&&!s.moveEnabled)){if(Zr.has($.code)){if(!s.jumpEnabled)return;$.preventDefault(),!P.has($.code)&&x===0&&T===0&&(x=s.jumpVelocity),P.add($.code);return}Dn.has($.code)&&!s.crouchEnabled||!s.moveEnabled&&!Dn.has($.code)||($.preventDefault(),P.add($.code))}},A=$=>{Ur($.code)&&P.delete($.code)},B=()=>{P.clear()};c.addEventListener("click",S),f.addEventListener("pointerlockchange",C),f.addEventListener("mousemove",O),v.addEventListener("keydown",k),v.addEventListener("keyup",A),v.addEventListener("blur",B);let W=v.getComputedStyle(c).perspective,K=parseFloat(W),q=Number.isFinite(K)&&K>0?K:2e3;c.style.setProperty("--polycss-fpv-perspective",`${q}px`),c.classList.add("polycss-fpv-host"),Y=()=>{if(c.removeEventListener("click",S),f.removeEventListener("pointerlockchange",C),f.removeEventListener("mousemove",O),v.removeEventListener("keydown",k),v.removeEventListener("keyup",A),v.removeEventListener("blur",B),c.style.cursor="",c.classList.remove("polycss-fpv-host"),c.style.removeProperty("--polycss-fpv-perspective"),P.clear(),h)try{f.exitPointerLock()}catch{}}}n({update(c){s=On(s,c);let f=i.value;f&&!l&&(f.style.cursor=s.lookEnabled?"crosshair":"")},resume(){if(!l)return;l=!1;let c=i.value;c&&(c.style.cursor=s.lookEnabled?"crosshair":""),R()},pause(){if(l)return;l=!0,N();let c=i.value;if(c&&(c.style.cursor=""),y){y=!1,pt(M,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}},destroy(){l=!0,N()},lock(){if(!s.enabled||!s.lookEnabled||l)return;let c=i.value;try{c?.requestPointerLock()}catch{}},unlock(){if(h){let c=i.value;try{c?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return h},getOrigin(){return[d[0],d[1],d[2]]},setOrigin(c){d[0]=c[0],d[1]=c[1],d[2]=c[2],E(),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},addEventListener(c,f){let v=M[c];v.includes(f)||v.push(f)},removeEventListener(c,f){let v=M[c],S=v.indexOf(f);S>=0&&v.splice(S,1)},hasEventListener(c,f){return M[c].includes(f)}}),cu(()=>{let c=i.value;if(!c)return;l=!1,h=!1,y=!1,P.clear(),x=0,T=0;let v=a.value.state.target??[0,0,0];d[0]=v[0],d[1]=v[1],d[2]=s.groundZ+s.eyeHeight,E(),c.style.cursor=s.lookEnabled?"crosshair":"",H(),R()}),du(()=>{l=!0,N(),Y?.(),Y=null});let b=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let c of b)mu(()=>e[c],()=>{s=On(s,e);let f=i.value;f&&!l&&(f.style.cursor=s.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as gu,h as hu,inject as kn,onBeforeUnmount as Pu,onMounted as vu,provide as xu,reactive as bu,ref as Su,computed as Cu}from"vue";var Tt=Symbol("polycss.selection"),Jr=gu({name:"PolySelect",props:{multiple:{type:Boolean,default:!1},clearOnMiss:{type:Boolean,default:!0},filter:{type:Function,default:void 0}},emits:{change:e=>!0,pointerMissed:e=>!0},setup(e,{emit:t,slots:n}){let o=bu({selected:[]}),r=Cu(()=>o.selected);function a(m){let p=e.filter?e.filter(m):m;o.selected=p,t("change",p)}let i={get selected(){return o.selected},set:m=>a(m),add:m=>{e.multiple?o.selected.includes(m)||a([...o.selected,m]):a([m])},remove:m=>{o.selected.includes(m)&&a(o.selected.filter(p=>p!==m))},toggle:m=>{o.selected.includes(m)?a(o.selected.filter(p=>p!==m)):e.multiple?a([...o.selected,m]):a([m])},clear:()=>a([]),has:m=>o.selected.includes(m)};xu(Tt,{selected:r,api:i});let u=kn(ue,void 0),s=(m,p)=>Cn(m,p,l=>!l.closest("[data-poly-transform-controls]")),d=null;return vu(()=>{let m=u?.cameraElRef.value;if(!m)return;let p=l=>{if(l.target?.closest("[data-poly-transform-controls]"))return;let y=lt(l.target)??s(l.clientX,l.clientY);if(!y){t("pointerMissed",l),e.clearOnMiss&&a([]);return}e.multiple&&(l.shiftKey||l.metaKey||l.ctrlKey)?i.toggle(y):o.selected.length===1&&o.selected[0]===y?a([]):a([y])};m.addEventListener("click",p),d=()=>m.removeEventListener("click",p)}),Pu(()=>{d?.()}),()=>hu("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function ea(){let e=kn(Tt,void 0);return e?e.selected:Su([])}function ta(){let e=kn(Tt,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Mu,h as Tu,computed as Eu}from"vue";import{axesHelperPolygons as Au}from"@layoutit/polycss-core";var na=Mu({name:"PolyAxesHelper",props:{size:{type:Number,default:void 0},thickness:{type:Number,default:void 0},negative:{type:Boolean,default:void 0},xColor:{type:String,default:void 0},yColor:{type:String,default:void 0},zColor:{type:String,default:void 0}},setup(e){let t=Eu(()=>Au({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Tu(te,{polygons:t.value,merge:!1})}});import{defineComponent as wu,h as Lu,computed as In}from"vue";import{octahedronPolygons as Ru}from"@layoutit/polycss-core";var oa=wu({name:"PolyDirectionalLightHelper",props:{light:{type:Object,required:!0},target:{type:Array,default:void 0},distance:{type:Number,default:5},size:{type:Number,default:.35},color:{type:String,default:void 0}},setup(e){let t=In(()=>e.color??e.light.color??"#ffd54a"),n=In(()=>Ru({center:[0,0,0],size:e.size,color:t.value})),o=In(()=>{let r=e.light.direction,a=r[0],i=r[1],u=r[2],s=Math.hypot(a,i,u)||1,d=e.target?.[0]??0,m=e.target?.[1]??0,p=e.target?.[2]??0;return[d+a/s*e.distance,m+i/s*e.distance,p+u/s*e.distance]});return()=>Lu(te,{polygons:n.value,position:o.value,merge:!1})}});var Fn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},Ou={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Fn,bucketCount:0};function Du(e){return typeof e=="number"?{polygonCount:e}:e??{}}function yt(e,t){return e.querySelectorAll(t).length}function ku(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function Iu(e,t){if(!t)return[e];let n=[];return ku(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Fu(e,t){let n=Du(t);if(!e)return{...Ou,surfaceLeafCounts:{...Fn},polygonCount:n.polygonCount??0};let o=Iu(e,n.scopeSelector),r={...Fn},a=0,i=0;for(let s of o)r.quad+=yt(s,"b"),r.clippedSolid+=yt(s,"i"),r.atlas+=yt(s,"s"),r.stableTriangle+=yt(s,"u"),a+=yt(s,"q, .polycss-shadow-svg"),i+=yt(s,".polycss-bucket");let u=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??u,mountedPolygonLeafCount:u,shadowLeafCount:a,surfaceLeafCounts:r,bucketCount:i}}import{ref as ra,watch as Vu,onUnmounted as _u,computed as qt}from"vue";import{createPolyAnimationMixer as Bu}from"@layoutit/polycss-core";function et(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function zu(e,t,n){let o=ra(null),r=null,a=null,i=null,u=ra(0);function s(){return n==null?o.value:et(n)??o.value}function d(){a!==null&&(cancelAnimationFrame(a),a=null),i=null}function m(){d(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,u.value++)}function p(){if(a!==null)return;function M(L){if(i===null){i=L,a=requestAnimationFrame(M);return}let g=(L-i)/1e3;i=L,r?.update(g),a=requestAnimationFrame(M)}a=requestAnimationFrame(M)}function l(){m();let M=et(e),L=et(t);if(!M||M.length===0||!L)return;let g=s();g&&(r=Bu(g,L),u.value++,p())}let h=Vu(()=>{let M=et(e),L=et(t),g=n!=null?et(n):o.value;return{c:M,ctrl:L,r:g}},()=>l(),{immediate:!0,deep:!1});_u(()=>{h(),m()});let y=qt(()=>et(e)??[]),P=qt(()=>y.value.map(M=>M.name)),x=qt(()=>(u.value,r)),T=qt(()=>{u.value;let M=y.value,L={};for(let g of M)Object.defineProperty(L,g.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(g.name)}catch{return null}}});return L});return{ref:o,mixer:x,clips:y,names:P,actions:T}}import{CAMERA_BACKFACE_CULL_EPS as Bp,VOXEL_CAMERA_CULL_AXIS_EPS as zp,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Hp,normalizePolygons as Np,mergePolygons as Yp,coverPlanarPolygons as jp,optimizeMeshPolygons as $p,optimizeMeshParseResult as Xp,simplifyTriangleMeshPolygons as Up,repairMeshSeams as Wp,seamFacetSplitPolygons as qp,seamFacetSplitReport as Gp,seamOverlapDiagnostics as Kp,seamOverlapPolygons as Zp,seamOverlapReport as Qp,cullInteriorPolygons as Jp,cameraCullNormalGroups as ey,cameraCullNormalGroupsFromPolygons as ty,cameraCullNormalKey as ny,cameraCullVisibleSignature as oy,cameraFacingDepth as ry,isAxisAlignedSurfaceNormal as ay,isVoxelCameraCullableNormalGroups as iy,normalFacesCamera as sy,polygonCssSurfaceNormal as ly,polygonFacesCamera as uy,parseObj as cy,parseMtl as dy,parseGltf as my,parseStl as py,bakeSolidTextureSamples as yy,bakeSolidTextureSampledPolygons as fy,loadMesh as gy,createIsometricCamera as hy,parseVox as Py,polygonFaces as vy,computeTexturePaintMetrics as xy,computeShapeLighting as by,parseColor as Sy,parsePureColor as Cy,parseHexColor as My,parseRgbColor as Ty,formatColor as Ey,clampChannel as Ay,shadeColor as wy,rotateVec3 as Ly,inverseRotateVec3 as Ry,axesHelperPolygons as Oy,boxPolygons as Dy,arrowPolygons as ky,ringPolygons as Iy,octahedronPolygons as Fy,tetrahedronPolygons as Vy,icosahedronPolygons as _y,dodecahedronPolygons as By,cylinderPolygons as zy,conePolygons as Hy,torusPolygons as Ny,planePolygons as Yy,buildSceneContext as jy,buildPolyMeshTransform as $y,buildPolySceneTransform as Xy,computeSceneBbox as Uy,BASE_TILE as Wy,DEFAULT_CAMERA_STATE as qy,DEFAULT_PROJECTION as Gy,normalizeInvertMultiplier as Ky,createPolyAnimationMixer as Zy,optimizeAnimatedMeshPolygons as Qy,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as Jy,DEFAULT_SEAM_OVERLAP_OPTIONS as ef,LoopOnce as tf,LoopRepeat as nf,LoopPingPong as of,cssDistanceToWorld as rf,cssPositionToWorld as af,worldDistanceToCss as sf,worldDirectionToCss as lf,worldDirectionalLightToCss as uf,worldPositionToCss as cf}from"@layoutit/polycss-core";export{Wy as BASE_TILE,Bp as CAMERA_BACKFACE_CULL_EPS,qy as DEFAULT_CAMERA_STATE,Gy as DEFAULT_PROJECTION,Jy as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,ef as DEFAULT_SEAM_OVERLAP_OPTIONS,tf as LoopOnce,of as LoopPingPong,nf as LoopRepeat,rr as Poly,na as PolyAxesHelper,ar as PolyBox,gt as PolyCamera,ue as PolyCameraContextKey,yr as PolyCone,pr as PolyCylinder,oa as PolyDirectionalLightHelper,dr as PolyDodecahedron,Qr as PolyFirstPersonControls,tr as PolyGround,cr as PolyIcosahedron,er as PolyIframe,kr as PolyMapControls,te as PolyMesh,lr as PolyOctahedron,Mr as PolyOrbitControls,gt as PolyOrthographicCamera,zn as PolyPerspectiveCamera,ir as PolyPlane,sr as PolyRing,Oo as PolyScene,Jr as PolySelect,Tt as PolySelectionContextKey,mr as PolySphere,ur as PolyTetrahedron,fr as PolyTorus,Xr as PolyTransformControls,zp as VOXEL_CAMERA_CULL_AXIS_EPS,Hp as VOXEL_CAMERA_CULL_NORMAL_LIMIT,ky as arrowPolygons,Oy as axesHelperPolygons,fy as bakeSolidTextureSampledPolygons,yy as bakeSolidTextureSamples,Dy as boxPolygons,$y as buildPolyMeshTransform,Xy as buildPolySceneTransform,jy as buildSceneContext,ey as cameraCullNormalGroups,ty as cameraCullNormalGroupsFromPolygons,ny as cameraCullNormalKey,oy as cameraCullVisibleSignature,ry as cameraFacingDepth,Ay as clampChannel,Fu as collectPolyRenderStats,Uy as computeSceneBbox,by as computeShapeLighting,xy as computeTexturePaintMetrics,Hy as conePolygons,jp as coverPlanarPolygons,hy as createIsometricCamera,Zy as createPolyAnimationMixer,Jp as cullInteriorPolygons,zy as cylinderPolygons,By as dodecahedronPolygons,Cn as findMeshUnderPoint,lt as findPolyMeshHandle,Ey as formatColor,_y as icosahedronPolygons,Et as injectPolyBaseStyles,Ry as inverseRotateVec3,ay as isAxisAlignedSurfaceNormal,iy as isVoxelCameraCullableNormalGroups,gy as loadMesh,Yp as mergePolygons,sy as normalFacesCamera,Ky as normalizeInvertMultiplier,Np as normalizePolygons,Fy as octahedronPolygons,Qy as optimizeAnimatedMeshPolygons,Xp as optimizeMeshParseResult,$p as optimizeMeshPolygons,Sy as parseColor,my as parseGltf,My as parseHexColor,dy as parseMtl,cy as parseObj,Cy as parsePureColor,Ty as parseRgbColor,py as parseStl,Py as parseVox,Yy as planePolygons,ut as pointInMeshElement,rf as polyCssDistanceToWorld,af as polyCssPositionToWorld,ly as polygonCssSurfaceNormal,vy as polygonFaces,uy as polygonFacesCamera,Wp as repairMeshSeams,Iy as ringPolygons,Ly as rotateVec3,qp as seamFacetSplitPolygons,Gp as seamFacetSplitReport,Kp as seamOverlapDiagnostics,Zp as seamOverlapPolygons,Qp as seamOverlapReport,wy as shadeColor,Up as simplifyTriangleMeshPolygons,Vy as tetrahedronPolygons,Ny as torusPolygons,zu as usePolyAnimation,ot as usePolyCamera,Gs as usePolyMaterial,zt as usePolyMesh,ht as usePolySceneContext,ea as usePolySelect,ta as usePolySelectionApi,lf as worldDirectionToPolyCss,uf as worldDirectionalLightToPolyCss,sf as worldDistanceToPolyCss,cf as worldPositionToPolyCss};
|
|
429
|
+
`;import{parsePureColor as Xc}from"@layoutit/polycss-core";import{inject as Wa}from"vue";var pn=Symbol("polycss/scene-context");function so(){return Wa(pn,null)}import{isSolidTrianglePlan as xt,isProjectiveQuadPlan as bt,buildTextureEdgeRepairSets as qt,buildSeamBleedPolygonEdges as Gt,buildSeamBleedPolygonSet as jd,cssBorderShapeForPlan as Yd}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as qa,safariCssProjectiveUnsupported as lo,parseHex as Ga,rgbKey as Za}from"@layoutit/polycss-core";function yn(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function fn(e){if(uo(e))return!0;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!lo(n):!0}function Ht(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")&&!!t.supports("corner-bottom-right-shape","bevel")&&!!t.supports("corner-bottom-left-shape","bevel")}function uo(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")}function ht(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!lo(n):!0}function co(e,t,n,o,r){let a=new Set(o?.disable??[]);return qa(e,t,a,{solidTriangleSupported:fn(n),projectiveQuadSupported:ht(n),cornerShapeSupported:Ht(n),borderShapeSupported:yn(n)},Ga,Za,r)}function gn(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let a=n.size>0?{disable:Array.from(n)}:void 0;return co(e,t,r,a)}function nt(e){let t=e??(typeof document<"u"?document:null);if(!t){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=typeof matchMedia<"u"?matchMedia:void 0;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}return yn(t)}function ot(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=typeof CSS<"u"?CSS:void 0;if(n?.supports?.("corner-top-left-shape","bevel")&&n.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let r=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||r}return fn(t)}import{filterAtlasPlans as Ka}from"@layoutit/polycss-core";function hn(e,t,n,o,r,a,i){let l=o??(typeof document<"u"?document:null);return Ka(e,t,n,{solidTriangleSupported:ot(o),projectiveQuadSupported:o?ht(o):!0,borderShapeSupported:nt(o),cornerShapeSupported:l?Ht(l):!1,textureBackend:r,textureImageRendering:a,textureProjection:i})}import{packTextureAtlasPlansWithScaleCore as Qa}from"@layoutit/polycss-core";function mo(e){if(!e)return!1;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function Pn(e,t,n,o){return Qa(e,t,mo(n),o)}import{expandClipPoints as Ja,TEXTURE_TRIANGLE_BLEED as ei,TEXTURE_EDGE_REPAIR_ALPHA_MIN as ti,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as ni,TEXTURE_EDGE_REPAIR_RADIUS as po}from"@layoutit/polycss-core";var rt=new Map;function Po(e){let t=rt.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),rt.set(e,t),t.then(()=>{rt.get(e)===t&&rt.delete(e)},()=>{rt.get(e)===t&&rt.delete(e)})),t}function Ce(e,t,n=1,o=0,r=0,a=1,i=0,l=0){e.setTransform(n*t,o*t,r*t,a*t,i*t,l*t)}function xn(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function bn(e){let t=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(t*255)))}function xo(e,t,n,o,r,a,i){let l=Math.round(t*i),s=Math.round(n*i),d=Math.max(1,Math.round(o*i)),m=Math.max(1,Math.round(r*i)),f=e.getImageData(l,s,d,m),u=f.data,g=a.r,p=a.g,h=a.b;for(let x=0;x<u.length;x+=4)u[x+3]!==0&&(u[x]=bn(xn(u[x])*g),u[x+1]=bn(xn(u[x+1])*p),u[x+2]=bn(xn(u[x+2])*h));e.putImageData(f,l,s)}function bo(e,t,n,o,r,a,i){let l=t.naturalWidth||t.width||1,s=t.naturalHeight||t.height||1,d=Math.max(r/l,a/s),m=l*d,f=s*d;Ce(e,i),e.drawImage(t,n+(r-m)/2,o+(a-f)/2,m,f)}function Pt(e,t){return Math.max(0,Math.min(t,e))}function vn(e,t,n,o,r,a,i,l){let s=t.naturalWidth||t.width||1,d=t.naturalHeight||t.height||1,m=Pt(Math.min(n.minU,n.maxU)*s,s),f=Pt(Math.max(n.minU,n.maxU)*s,s),u=Pt(Math.min(n.minV,n.maxV)*d,d),g=Pt(Math.max(n.minV,n.maxV)*d,d),p=Math.floor(m),h=Math.floor(u),x=Math.ceil(f)-p,E=Math.ceil(g)-h;x<1&&(p=Math.floor(Pt((n.minU+n.maxU)/2*s,s-1)),x=1),E<1&&(h=Math.floor(Pt((n.minV+n.maxV)/2*d,d-1)),E=1),p=Math.max(0,Math.min(s-1,p)),h=Math.max(0,Math.min(d-1,h)),x=Math.max(1,Math.min(s-p,x)),E=Math.max(1,Math.min(d-h,E)),Ce(e,l),e.drawImage(t,p,h,x,E,o,r,a,i)}function vo(e){return e==="repeat"||e==="mirrored-repeat"}function yo(e,t){return vo(e)?Math.floor(t):0}function fo(e,t){return vo(e)?Math.ceil(t)-1:0}function go(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function ho(e,t,n,o,r,a,i){let l=r?yo(a,r.minU):0,s=r?fo(a,r.maxU):0,d=r?yo(i,r.minV):0,m=r?fo(i,r.maxV):0;for(let f=l;f<=s;f++)for(let u=d;u<=m;u++){let g=go(a,f),p=go(i,u);if(!g&&!p){e.drawImage(t,f*n,u*o);continue}e.save(),e.translate((g?f+1:f)*n,(p?u+1:u)*o),e.scale(g?-1:1,p?-1:1),e.drawImage(t,0,0),e.restore()}}function jt(e,t,n,o){for(let r=0;r<o.length;r+=2){let a=t+o[r],i=n+o[r+1];r===0?e.moveTo(a,i):e.lineTo(a,i)}e.closePath()}function wt(e,t,n,o,r,a){for(let i=0;i<o.length;i+=2){let l=t+o[i]+r,s=n+o[i+1]+a;i===0?e.moveTo(l,s):e.lineTo(l,s)}e.closePath()}function So(e,t,n,o){Ce(e,o),e.beginPath(),jt(e,t.x,t.y,t.screenPts),e.clip(),Ce(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function Nt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(Ce(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function Co(e,t,n,o,r=0,a=0){if(t.textureTriangles?.length){let i=n.naturalWidth||n.width||1,l=n.naturalHeight||n.height||1;for(let s of t.textureTriangles){let d=Ja(s.screenPts,ei);e.save(),Ce(e,o),e.beginPath(),wt(e,t.x,t.y,d,r,a),e.clip(),Nt(e,t,o,r,a),s.uvAffine?(Ce(e,o,s.uvAffine.a/i,s.uvAffine.c/i,s.uvAffine.b/l,s.uvAffine.d/l,t.x+s.uvAffine.e+r,t.y+s.uvAffine.f+a),ho(e,n,i,l,s.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):s.uvSampleRect&&vn(e,n,s.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let i=n.naturalWidth||n.width||1,l=n.naturalHeight||n.height||1,s=t.polygon.textureAlphaMode==="opaque";s&&(e.save(),Ce(e,o),e.beginPath(),wt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Nt(e,t,o,r,a)),Ce(e,o,t.uvAffine.a/i,t.uvAffine.c/i,t.uvAffine.b/l,t.uvAffine.d/l,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+a),ho(e,n,i,l,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),s&&e.restore()}else if(t.uvSampleRect){let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),Ce(e,o),e.beginPath(),wt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Nt(e,t,o,r,a)),vn(e,n,t.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}else{let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),Ce(e,o),e.beginPath(),wt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Nt(e,t,o,r,a)),bo(e,n,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}}function oi(e,t,n,o,r,a){let i=r-n,l=a-o,s=i*i+l*l;if(s<=1e-9)return Math.hypot(e-n,t-o);let d=Math.max(0,Math.min(1,((e-n)*i+(t-o)*l)/s));return Math.hypot(e-(n+i*d),t-(o+l*d))}function ri(e,t,n,o){let r=1/0,a=n.length/2;for(let i of o){if(i<0||i>=a)continue;let l=i*2,s=(i+1)%a*2;r=Math.min(r,oi(e,t,n[l],n[l+1],n[s],n[s+1]))}return r}function ai(e,t,n,o,r,a){let i=Math.max(0,o-a),l=Math.min(t-1,o+a),s=Math.max(0,r-a),d=Math.min(n-1,r+a),m=null,f=1/0;for(let u=s;u<=d;u++)for(let g=i;g<=l;g++){if(g===o&&u===r)continue;let p=g-o,h=u-r,x=p*p+h*h;if(x>a*a||x>=f)continue;let E=(u*t+g)*4;e[E+3]<ni||(m=E,f=x)}return m}function To(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),a=Math.max(0,Math.floor(t.y*n)),i=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),l=Math.max(1,Math.min(o.height-a,Math.ceil(t.canvasH*n)));if(i<=0||l<=0)return;let s;try{s=e.getImageData(r,a,i,l)}catch{return}let d=s.data,m=new Uint8ClampedArray(d),f=Math.max(po,po/n),u=Math.max(2,Math.ceil(f*n)+1),g=!1;for(let p=0;p<l;p++)for(let h=0;h<i;h++){let x=(p*i+h)*4,E=d[x+3];if(E<ti||E===255)continue;let S=(r+h+.5)/n-t.x,L=(a+p+.5)/n-t.y;if(ri(S,L,t.screenPts,t.textureEdgeRepairEdges)>f)continue;let y=ai(m,i,l,h,p,u);y!==null&&(d[x]=m[y],d[x+1]=m[y+1],d[x+2]=m[y+2],d[x+3]=255,g=!0)}g&&e.putImageData(s,r,a)}function Mo(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(n=>{t(n?URL.createObjectURL(n):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}async function ii(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let a=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),i=r.getContext("2d",a?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let l=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),s=new Map;await Promise.all(l.map(async m=>{s.set(m,await Po(m))}));for(let m of e.entries){let f=m.texture?s.get(m.texture):null;if(!m.texture){i.save(),So(i,m,t,o),i.restore();continue}f&&(i.save(),Ce(i,o),i.beginPath(),jt(i,m.x,m.y,m.screenPts),i.clip(),Co(i,m,f,o),i.restore()),m.texture&&t==="baked"&&(i.save(),Ce(i,o),i.beginPath(),jt(i,m.x,m.y,m.screenPts),i.clip(),xo(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),To(i,m,o)}let d=await Mo(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:d}}async function Yt(e,t,n,o,r){let a=[];for(let i of e){if(r())break;a.push(await ii(i,t,n,o))}return a}import{isSolidTrianglePlan as si,offsetConvexPolygonPointsByEdgeAmounts as li,parsePureColor as Cn,resolveSeamBleed as Lo,safePlanSeamBleedAmount as ui}from"@layoutit/polycss-core";var Ro=50,wo=[.4,-.7,.59],Oo="#ffffff",ko=1,Do="#ffffff",Io=.4,J=1e-9,Ot=.75,Fo=32,ci=96,Tn="0 48px 96px 48px",Eo,Ao=Fo;function di(){let e=typeof CSS<"u"?CSS:void 0;return!!e?.supports?.("corner-top-left-shape","bevel")&&!!e.supports("corner-top-right-shape","bevel")}function Mn(){if(di())return"corner-bevel";let e=typeof navigator<"u"?navigator.userAgent:"";return/\bFirefox\//.test(e)?"border-large":"border"}function En(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==Eo&&(Eo=e,Ao=/\bFirefox\//.test(e)?ci:Fo),Ao}function Vo(){return Mn()==="border-large"?Tn:void 0}function mi(){let e=Mn();if(e==="corner-bevel")return;let t=e==="border-large"?Tn:void 0;return t?{borderWidth:t}:void 0}function zo(e){let t=Mn();t==="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=t==="border-large"?Tn:"")}function je(e){let t=Cn(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function kt({r:e,g:t,b:n}){return`${e},${t},${n}`}function pi(e){return Cn(e)?.alpha??1}function $t({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function Bo(e,t,n,o,r){let a=je(e),i=je(n),l=je(o),s=l.r/255*r+i.r/255*t,d=l.g/255*r+i.g/255*t,m=l.b/255*r+i.b/255*t,f=Math.max(0,Math.min(255,Math.round(a.r*s))),u=Math.max(0,Math.min(255,Math.round(a.g*d))),g=Math.max(0,Math.min(255,Math.round(a.b*m))),p=pi(e);return p<1?`rgba(${f}, ${u}, ${g}, ${p})`:$t({r:f,g:u,b:g})}function _o(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=Cn(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=i=>Math.max(0,Math.min(255,Math.round(Math.round(i/o)*o))),a={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${a.r}, ${a.g}, ${a.b}, ${n.alpha})`:$t(a)}function Ho(e,t,n){let o=(r,a)=>{if(r===a)return r;let i=a-r;return r+Math.sign(i)*Math.min(Math.abs(i),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function Sn(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function yi(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function fi(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let a=e[r],i=e[r+1],l=[a[0]-t[0],a[1]-t[1],a[2]-t[2]],s=[i[0]-t[0],i[1]-t[1],i[2]-t[2]];n[0]-=l[1]*s[2]-l[2]*s[1],n[1]-=l[2]*s[0]-l[0]*s[2],n[2]-=l[0]*s[1]-l[1]*s[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=J?null:[n[0]/o,n[1]/o,n[2]/o]}function gi(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],a=e[(n+2)%e.length],i=(r[0]-o[0])*(a[1]-r[1])-(r[1]-o[1])*(a[0]-r[0]);if(Math.abs(i)<=J)return!1;let l=Math.sign(i);if(t===0)t=l;else if(l!==t)return!1}return!0}function hi(e){let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o[0]*r[1]-o[1]*r[0]}return t/2}function Pi(e,t,n,o){let r=t[0]-e[0],a=t[1]-e[1],i=o[0]-n[0],l=o[1]-n[1],s=r*l-a*i;if(Math.abs(s)<=J)return null;let d=n[0]-e[0],m=n[1]-e[1],f=(d*l-m*i)/s;return[e[0]+f*r,e[1]+f*a]}function Xt(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let i=0;i<e.length;i+=2)n+=e[i],o+=e[i+1];n/=r,o/=r;let a=e.slice();for(let i=0;i<a.length;i+=2){let l=a[i]-n,s=a[i+1]-o,d=Math.hypot(l,s);d<=J||(a[i]+=l/d*t,a[i+1]+=s/d*t)}return a}function at(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let s=0;s<e.length;s+=2)n.push([e[s],e[s+1]]);if(!gi(n))return Xt(e,t);let o=hi(n);if(Math.abs(o)<=J)return Xt(e,t);let r=o>0?1:-1,a=[];for(let s=0;s<n.length;s++){let d=n[s],m=n[(s+1)%n.length],f=m[0]-d[0],u=m[1]-d[1],g=Math.hypot(f,u);if(g<=J)return Xt(e,t);let p=r*(u/g)*t,h=r*(-f/g)*t;a.push({a:[d[0]+p,d[1]+h],b:[m[0]+p,m[1]+h]})}let i=[],l=Math.max(2,t*4);for(let s=0;s<n.length;s++){let d=a[(s+n.length-1)%n.length],m=a[s],f=Pi(d.a,d.b,m.a,m.b);if(!f)return Xt(e,t);let u=n[s],g=f[0]-u[0],p=f[1]-u[1],h=Math.hypot(g,p);h>l?i.push(u[0]+g/h*l,u[1]+p/h*l):i.push(f[0],f[1])}return i}function xi(e,t,n,o){let r=e+t;if(o<=0||n<=J||r<=J||!Number.isFinite(e+t+n+o))return at([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=J||i<=J)return at([e,0,0,n,r,n],o);let l=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,f=e+l,u=s,g=r+d,p=n+m,h=-n*r;if(Math.abs(h)<=J)return at([e,0,0,n,r,n],o);let x=f-g,E=u-p,S=(x*n+E*e)/h,L=g-S*t,y=p-S*n,w=-o*(e+a)/n,O=n+o,V=r+o*(t+i)/n,z=O,k=Math.max(2,o*4),X=L-e,j=y,N=Math.sqrt(X*X+j*j);N>k&&(L=e+X/N*k,y=j/N*k);let b=Math.sqrt(w*w+o*o);b>k&&(w=w/b*k,O=n+o/b*k);let c=V-r,P=Math.sqrt(c*c+o*o);return P>k&&(V=r+c/P*k,z=n+o/P*k),[L,y,w,O,V,z]}function bi(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function vi(e,t,n,o,r){let a=e.seamBleedEdges;if(!a?.size)return null;let i=e.seamBleed===void 0?Ot:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([s,d],m)=>{let f=bi(s,d),u=f!==void 0&&a.has(f)?e.seamBleedEdgeAmounts?.get(f)??Lo(i,Ot):0;return ui(r,m,u)})}function No(e,t,n,o,r,a,i,l,s,d,m,f){let u=Math.round(e*1e3)/1e3||0,g=Math.round(t*1e3)/1e3||0,p=Math.round(n*1e3)/1e3||0,h=Math.round(o*1e3)/1e3||0,x=Math.round(r*1e3)/1e3||0,E=Math.round(a*1e3)/1e3||0,S=Math.round(i*1e3)/1e3||0,L=Math.round(l*1e3)/1e3||0,y=Math.round(s*1e3)/1e3||0,w=Math.round(d*1e3)/1e3||0,O=Math.round(m*1e3)/1e3||0,V=Math.round(f*1e3)/1e3||0;return`matrix3d(${u},${g},${p},0,${h},${x},${E},0,${S},${L},${y},0,${w},${O},${V},1)`}function Si(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function An(e,t,n,o){if(!si(e))return null;let r=e.tileSize,a=e.layerElevation,i=Si(e.polygon.vertices,r,a),l=fi(i);if(!l)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(ee=>{let Q=i[ee.a],ae=i[ee.b];return{...ee,length:Math.hypot(ae[0]-Q[0],ae[1]-Q[1],ae[2]-Q[2])}}).sort((ee,Q)=>Q.length-ee.length),d=s[0].a,m=s[0].b,f=s[0].c,u=i[d],g=i[m],p=i[f],h=s[0].length;if(h<=J)return null;let x=[(g[0]-u[0])/h,(g[1]-u[1])/h,(g[2]-u[2])/h],E=[p[0]-u[0],p[1]-u[1],p[2]-u[2]],S=Sn(E,x),L=[u[0]+x[0]*S,u[1]+x[1]*S,u[2]+x[2]*S],y=[L[0]-p[0],L[1]-p[1],L[2]-p[2]],w=Math.hypot(y[0],y[1],y[2]);if(w<=J)return null;let O=[y[0]/w,y[1]/w,y[2]/w];if(Sn(yi(x,O),l)<0){let ee=m;if(m=d,d=ee,u=i[d],g=i[m],h=Math.hypot(g[0]-u[0],g[1]-u[1],g[2]-u[2]),h<=J)return null;x=[(g[0]-u[0])/h,(g[1]-u[1])/h,(g[2]-u[2])/h];let Q=[p[0]-u[0],p[1]-u[1],p[2]-u[2]];S=Sn(Q,x),L=[u[0]+x[0]*S,u[1]+x[1]*S,u[2]+x[2]*S],y=[L[0]-p[0],L[1]-p[1],L[2]-p[2]];let ae=Math.hypot(y[0],y[1],y[2]);if(ae<=J)return null;O=[y[0]/ae,y[1]/ae,y[2]/ae]}let V=En(),z=Math.max(0,Math.min(h,S)),k=Math.max(0,h-z),X=[z,0,0,w,z+k,w],j=vi(e,d,m,f,X),N=j?li(X,j):xi(z,k,w,Lo(e.seamBleed,Ot)),b=[N[0],N[1]],c=[N[2],N[3]],P=[N[4],N[5]],v=(c[1]+P[1])/2,C=b[0]-c[0],T=P[0]-b[0],M=v-b[1];if(C<=J||T<=J||M<=J||!Number.isFinite(C+T+M))return null;let A=t==="dynamic",D=je(e.polygon.color??"#cccccc"),_=A&&kt(D)===o?.dynamicColorKey,H={color:A||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...A&&!_?{"--pnx":l[0].toFixed(4),"--pny":l[1].toFixed(4),"--pnz":l[2].toFixed(4),"--psr":(D.r/255).toFixed(4),"--psg":(D.g/255).toFixed(4),"--psb":(D.b/255).toFixed(4)}:A?{"--pnx":l[0].toFixed(4),"--pny":l[1].toFixed(4),"--pnz":l[2].toFixed(4)}:null},q=([ee,Q])=>[p[0]+(ee-z)*x[0]+Q*O[0],p[1]+(ee-z)*x[1]+Q*O[1],p[2]+(ee-z)*x[2]+Q*O[2]],$=q(b),F=q([c[0],v]),ne=q([P[0],v]),ue=V/2,oe=[(ne[0]-F[0])/V,(ne[1]-F[1])/V,(ne[2]-F[2])/V],de=[$[0]-oe[0]*ue,$[1]-oe[1]*ue,$[2]-oe[2]*ue],Te=[(F[0]-de[0])/V,(F[1]-de[1])/V,(F[2]-de[2])/V],Oe=[oe[0],oe[1],oe[2],0,Te[0],Te[1],Te[2],0,l[0],l[1],l[2],0,de[0],de[1],de[2],1].map(ee=>(Math.round(ee*1e3)/1e3||0).toString()).join(","),Me=mi();return{transform:`matrix3d(${Oe})`,...Me??{},...H}}function Ut(e){if(!e)return!1;let{a:t,b:n,c:o}=e;return t===0&&n===1&&o===2||t===1&&n===2&&o===0||t===2&&n===0&&o===1}function Ci(e,t,n,o){let r=e+t;if(o<=0||n<=J||r<=J||!Number.isFinite(e+t+n+o))return at([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=J||i<=J)return at([e,0,0,n,r,n],o);let l=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,f=e+l,u=s,g=r+d,p=n+m,h=-n*r;if(Math.abs(h)<=J)return at([e,0,0,n,r,n],o);let x=f-g,E=u-p,S=(x*n+E*e)/h,L=g-S*t,y=p-S*n,w=-o*(e+a)/n,O=n+o,V=r+o*(t+i)/n,z=O,k=Math.max(2,o*4),X=L-e,j=y,N=Math.sqrt(X*X+j*j);N>k&&(L=e+X/N*k,y=j/N*k);let b=Math.sqrt(w*w+o*o);b>k&&(w=w/b*k,O=n+o/b*k);let c=V-r,P=Math.sqrt(c*c+o*o);return P>k&&(V=r+c/P*k,z=n+o/P*k),[L,y,w,O,V,z]}function jo(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=Ro,r=o,a=e.vertices[0],i=e.vertices[1],l=e.vertices[2],s=a[1]*o,d=a[0]*o,m=a[2]*r,f=i[1]*o,u=i[0]*o,g=i[2]*r,p=l[1]*o,h=l[0]*o,x=l[2]*r,E=f-s,S=u-d,L=g-m,y=p-s,w=h-d,O=x-m,V=-(S*O-L*w),z=-(L*y-E*O),k=-(E*w-S*y),X=Math.sqrt(V*V+z*z+k*k);if(X<=J)return null;V/=X,z/=X,k/=X;let j=E*E+S*S+L*L,N=p-f,b=h-u,c=x-g,P=s-p,v=d-h,C=m-x,T=N*N+b*b+c*c,M=P*P+v*v+C*C,A=Ut(n)?n.a:0,D=Ut(n)?n.b:1,_=Ut(n)?n.c:2,H=()=>n?jo(e,t):null;if(!Ut(n)){let ge=j;T>ge&&(A=1,D=2,_=0,ge=T),M>ge&&(A=2,D=0,_=1)}let q=_===0?s:_===1?f:p,$=_===0?d:_===1?u:h,F=_===0?m:_===1?g:x,ne=A===0?s:A===1?f:p,ue=A===0?d:A===1?u:h,oe=A===0?m:A===1?g:x,de=D===0?s:D===1?f:p,Te=D===0?d:D===1?u:h,Oe=D===0?m:D===1?g:x,Me=de-ne,ee=Te-ue,Q=Oe-oe,ae=Math.sqrt(Me*Me+ee*ee+Q*Q);if(ae<=J)return H();let Ee=Me/ae,Re=ee/ae,et=Q/ae,ye=(q-ne)*Ee+($-ue)*Re+(F-oe)*et,R=ne+Ee*ye-q,Y=ue+Re*ye-$,B=oe+et*ye-F,U=Math.sqrt(R*R+Y*Y+B*B);if(U<=J)return H();R/=U,Y/=U,B/=U;let W=Math.max(0,Math.min(ae,ye)),me=Math.max(0,ae-W),le=Ci(W,me,U,Ot),fe=le[0],re=le[1],Ae=le[2],ke=le[3],ve=le[4],De=le[5],_e=(ke+De)/2,G=fe-Ae,I=ve-fe,ie=_e-re;if(G<=J||I<=J||ie<=J||!Number.isFinite(G+I+ie))return H();let Ue=1/En(),Z=G+I,K=Z*Ue,Le=(I-G)*.5*Ue,We=ie*Ue,Ze=fe-W-Z*.5,He=re,Ke=No(Ee*K,Re*K,et*K,Ee*Le+R*We,Re*Le+Y*We,et*Le+B*We,V,z,k,q+Ee*Ze+R*He,$+Re*Ze+Y*He,F+et*Ze+B*He),Ne;if(Math.floor(t.colorFreezeFrames??1)!==0){let ge=t.directionalLight,xe=t.ambientLight,he=ge?.direction??wo,Se=ge?.color??Oo,Qe=Math.max(0,ge?.intensity??ko),Je=xe?.color??Do,Bt=Math.max(0,xe?.intensity??Io),tt=Math.sqrt(he[0]*he[0]+he[1]*he[1]+he[2]*he[2])||1,Ie=he[0]/tt,Fe=he[1]/tt,Ra=he[2]/tt,wa=Qe*Math.max(0,V*Ie+z*Fe+k*Ra),no=Bo(e.color??"#cccccc",wa,Se,Je,Bt);Ne=t.colorSteps?_o(no,t.colorSteps):no}return{transform:Ke,borderWidth:Vo(),color:Ne,basis:{a:A,b:D,c:_}}}function Ti(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function Mi(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let a=e.__polycssStableTriangleColor;if(!(a===void 0||Ti(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||a===n)return;let l=n,s=n?je(n):void 0,d=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&d&&s&&n&&(s=Ho(d,s,m),l=$t(s)),e.style.color=l,e.__polycssStableTriangleColor=l,e.__polycssStableTriangleColorRgb=s}function Ln(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!ot())return!1;let o=Array.from(e.children).filter(a=>a instanceof HTMLElement&&a.localName==="u");if(o.length!==t.length)return!1;let r=t.map((a,i)=>jo(a,n,o[i].__polycssStableTriangleBasis));if(r.some(a=>!a))return!1;for(let a=0;a<o.length;a+=1){let i=r[a],l=o[a];l.style.visibility&&(l.style.visibility=""),l.__polycssStableTriangleBasis=i.basis,zo(l),l.style.transform=i.transform,i.borderWidth!==void 0&&(l.style.borderWidth=i.borderWidth),i.color!==void 0&&Mi(l,a,i.color,n)}return!0}import{computeTextureAtlasPlanPublic as Ei}from"@layoutit/polycss-core";function it(e,t,n={},o){return Ei(e,t,n,void 0,o)}function Rn(e,t,n){let o=new Set(n?.disable??[]);return gn(e,t,o)}import{computed as Pe,getCurrentScope as Ai,onScopeDispose as Li,ref as Yo,watch as Ri}from"vue";function wn(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Xo(e){return e.flatMap(t=>t.url?.startsWith("blob:")?[t.url]:[])}function Wt(e){return e.map(t=>({width:t.width,height:t.height,url:null}))}function $o(e){return e.length===0||typeof Image>"u"?Promise.resolve():Promise.all(e.map(t=>{let n=new Image;n.src=t;let o=n.decode?.();return o?o.catch(()=>{}):Promise.resolve()})).then(()=>{})}function st(e){e.length!==0&&(typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>wn(e)):setTimeout(()=>wn(e),0))}function lt(e,t,n=Pe(()=>{}),o=Pe(()=>{}),r=Pe(()=>{}),a=Pe(()=>{}),i=Pe(()=>{}),l=Pe(()=>{}),s=Pe(()=>!1)){let d=Pe(()=>new Set(l.value?.disable??[])),m=Pe(()=>!d.value.has("b")),f=Pe(()=>{let y=typeof document<"u"?document:null;return m.value&&(!y||ht(y))}),u=Pe(()=>!d.value.has("u")&&ot()),g=Pe(()=>!d.value.has("i")&&t.value!=="dynamic"&&nt()),p=Pe(()=>{let y=hn(e.value,t.value,d.value,typeof document<"u"?document:null,r.value,a.value,i.value);return Pn(y,n.value,typeof document<"u"?document:null,o.value)}),h=Yo(Wt(p.value.packed.pages)),x=Yo({plans:e.value,entries:p.value.packed.entries,pages:Wt(p.value.packed.pages)}),E=[],S=0,L=!1;return Ri(()=>[p.value,t.value,s.value],([y,w,O],V,z)=>{let{packed:k,atlasScale:X}=y;if(O){let b=++S,c=e.value,P=k.entries;if(k.pages.length===0||typeof document>"u"){st(E),E=[],x.value={plans:c,entries:P,pages:Wt(k.pages)};return}let v=()=>L||b!==S,C=[];Yt(k.pages,w,document,X,v).then(async T=>{if(C=Xo(T),await $o(C),v()){st(C);return}let M=E;E=C,C=[],st(M),x.value={plans:c,entries:P,pages:T}}).catch(()=>{});return}let j=!1,N=[];if(z(()=>{j=!0,st(N)}),k.pages.length===0){st(E),E=[],h.value.length!==0&&(h.value=[]);return}typeof document>"u"||(h.value.some(b=>b.url)||(h.value=Wt(k.pages)),Yt(k.pages,w,document,X,()=>j).then(async b=>{if(N=Xo(b),await $o(N),j){st(N);return}let c=E;E=N,N=[],st(c),h.value=b}).catch(()=>{}))},{immediate:!0}),Ai()&&Li(()=>{L=!0,wn(E),E=[]}),{plans:Pe(()=>s.value?x.value.plans:e.value),entries:Pe(()=>s.value?x.value.entries:p.value.packed.entries),pages:Pe(()=>s.value?x.value.pages:h.value),ready:Pe(()=>{let y=s.value?x.value.pages:h.value;return y.length===0||y.every(w=>!!w.url)}),useFullRectSolid:m,useProjectiveQuad:f,useStableTriangle:u,useBorderShape:g}}import{h as wi}from"vue";function ut({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let l=An(e,t,i,n);if(!l)return null;let s=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,f])=>[`data-${m}`,String(f)])):{},d=o?.trim()||void 0;return wi("u",{class:d,style:{...l,...r},"data-poly-index":String(e.index),...s,...a})}import{h as Oi}from"vue";import{isFullRectSolid as ki,cssBorderShapeForPlan as Di,formatSolidQuadEntryMatrix as Ii,formatBorderShapeEntryMatrix as Fi}from"@layoutit/polycss-core";var Vi=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function zi(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,a)=>{let i=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:a,order:Vi.get(i)??Number.POSITIVE_INFINITY}}).sort((r,a)=>r.order-a.order||r.index-a.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function ct({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto",forceBorderShape:l=!1}){let s=!e.texture&&ki(e),d=s&&l&&nt(),m=!s||d?Di(e):null,f=t==="dynamic",u=je(e.polygon.color??"#cccccc"),g=f&&kt(u)===n?.dynamicColorKey,h={transform:m?Fi(e):Ii(e),color:f?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...f?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),...g?null:{"--psr":(u.r/255).toFixed(4),"--psg":(u.g/255).toFixed(4),"--psb":(u.b/255).toFixed(4)}}:null,...r},x=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,y])=>[`data-${L}`,String(y)])):{},E=o?.trim()||void 0,S=L=>{let y=L.el;y&&(m?y.style.setProperty("border-shape",m):y.style.removeProperty("border-shape"),zi(y))};return Oi(s&&!d?"b":"i",{class:E,style:h,"data-poly-index":String(e.index),...x,...a,onVnodeMounted:S,onVnodeUpdated:S})}import{h as Bi}from"vue";function dt({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let l=t==="dynamic",s=je(e.polygon.color??"#cccccc"),d=l&&kt(s)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:l?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...l&&!d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(s.r/255).toFixed(4),"--psg":(s.g/255).toFixed(4),"--psb":(s.b/255).toFixed(4)}:l?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},f=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([g,p])=>[`data-${g}`,String(p)])):{},u=o?.trim()||void 0;return Bi("b",{class:u,style:m,"data-poly-index":String(e.index),...f,...a})}import{h as _i}from"vue";import{formatCornerShapeElementStyle as Hi,parseHex as Ni,rgbKey as ji}from"@layoutit/polycss-core";function Yi(e,t,n){if(t==="dynamic"){let o=Ni(e.polygon.color??"#cccccc"),r=`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return ji(o)!==n?.dynamicColorKey&&(r+=`;--psr:${(o.r/255).toFixed(4)};--psg:${(o.g/255).toFixed(4)};--psb:${(o.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function On({entry:e,geometry:t,textureLighting:n,solidPaintDefaults:o,className:r,pointerEvents:a="auto"}){let i=Hi(e,t),l=Yi(e,n,o),s=a==="none"?";pointer-events:none":"",d=i+l+s,m=u=>{!u||!(u instanceof HTMLElement)||u.setAttribute("style",d)},f=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([u,g])=>[`data-${u}`,String(g)])):{};return _i("u",{class:r?.trim()||void 0,"data-poly-index":String(e.index),...f,onVnodeMounted:({el:u})=>m(u),onVnodeUpdated:({el:u})=>m(u)})}import{h as Uo}from"vue";import{formatMatrix3d as Wo,formatCssLengthPx as we,resolvePolyTextureImageRendering as Xi}from"@layoutit/polycss-core";var $i=64;function mt({entry:e,page:t,textureLighting:n,textureImageRendering:o,solidPaintDefaults:r,className:a,style:i,domAttrs:l,pointerEvents:s="auto"}){let d=n==="dynamic",m=Xi(e.polygon,o),f=e.atlasCanonicalSize??$i,u=e.atlasLeafWidth??f,g=e.atlasLeafHeight??f,p=e.canvasW||1,h=e.canvasH||1,x=t?`${we(-e.x/p*u)} ${we(-e.y/h*g)}`:void 0,E=t?`${we(t.width/p*u)} ${we(t.height/h*g)}`:void 0,S=d&&t?.url?`url(${t.url})`:void 0,L={transform:Wo(e.atlasMatrix),"--polycss-atlas-size":`${f}px`,"--polycss-atlas-width":we(u),"--polycss-atlas-height":we(g),"--polycss-atlas-leaf-sizing":e.atlasLeafSizing??"canonical",backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:x,backgroundSize:E,backgroundRepeat:t?.url?"no-repeat":void 0,imageRendering:m==="pixelated"?"pixelated":void 0,...d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...d&&S?{maskImage:S,maskMode:"alpha",maskPosition:x,maskSize:E,maskRepeat:"no-repeat",WebkitMaskImage:S,WebkitMaskPosition:x,WebkitMaskSize:E,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:s==="none"?"none":void 0,...i},y=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([O,V])=>[`data-${O}`,String(V)])):{},w=a?.trim()||void 0;return Uo("s",{class:w,style:L,"data-poly-index":String(e.index),"data-polycss-leaf":"polygon","data-polycss-texture-backend":"atlas","data-polycss-texture-leaf-sizing":e.atlasLeafSizing??"canonical","data-polycss-texture-ready":t?.url?"true":"false","data-polycss-texture-image-rendering":m,"data-polycss-texture-projection":"affine","data-polycss-texture-lighting":n,"data-polycss-texture-leaf-width":String(u),"data-polycss-texture-leaf-height":String(g),"data-polycss-double-sided":e.polygon.doubleSided?"true":void 0,...y,...l})}function pt({plan:e,geometry:t,className:n,style:o,domAttrs:r,pointerEvents:a="auto"}){let i={transform:Wo(t.matrix),"--polycss-atlas-width":we(t.leafWidth),"--polycss-atlas-height":we(t.leafHeight),"--polycss-atlas-leaf-sizing":"image",backgroundImage:`url(${t.url})`,backgroundPosition:`${we(t.backgroundPosition[0])} ${we(t.backgroundPosition[1])}`,backgroundSize:`${we(t.backgroundSize[0])} ${we(t.backgroundSize[1])}`,backgroundRepeat:"no-repeat",backgroundBlendMode:"normal",maskImage:"none",WebkitMaskImage:"none",imageRendering:t.imageRendering==="pixelated"?"pixelated":void 0,"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),pointerEvents:a==="none"?"none":void 0,...o},l=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([d,m])=>[`data-${d}`,String(m)])):{},s=n?.trim()||void 0;return Uo("s",{class:s,style:i,"data-poly-index":String(e.index),"data-polycss-leaf":"polygon","data-polycss-texture-backend":"image","data-polycss-texture-leaf-sizing":"image","data-polycss-texture-ready":"true","data-polycss-texture-image-rendering":t.imageRendering,"data-polycss-texture-projection":t.projection,"data-polycss-texture-lighting":t.lighting,"data-polycss-texture-leaf-width":String(t.leafWidth),"data-polycss-texture-leaf-height":String(t.leafHeight),"data-polycss-double-sided":e.polygon.doubleSided?"true":void 0,"data-polycss-texture-source-x":String(t.sourceRect.x),"data-polycss-texture-source-y":String(t.sourceRect.y),"data-polycss-texture-source-width":String(t.sourceRect.width),"data-polycss-texture-source-height":String(t.sourceRect.height),...l,...r})}var Jo=Ui({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},centerPolygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},pointLights:{type:Array,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},textureLeafSizing:{type:String,default:void 0},textureImageRendering:{type:String,default:void 0},textureBackend:{type:String,default:void 0},textureProjection:{type:String,default:void 0},seamBleed:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=qi(ce);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:a}=o,i=Zt(0),l=new Map,s={register(M,A){l.set(M,A),i.value++},unregister(M){l.delete(M),i.value++},version:i,getEntries(){return Array.from(l.values())}},d=new Set,m=Zt(!1),f={register(M){d.add(M),m.value=d.size>0},unregister(M){d.delete(M),m.value=d.size>0},hasAny:m},u=Zt(null),g=Zt(null),p=be(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,pointLights:e.pointLights,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??Ko,textureLeafSizing:e.textureLeafSizing,textureImageRendering:e.textureImageRendering,textureBackend:e.textureBackend,textureProjection:e.textureProjection,shadow:e.shadow,shadowRegistry:s,receiverRegistry:f,groundCssZ:u.value,sceneEl:g.value}));Gi(pn,p),qo(g,M=>{r.value=M});let h=!1;Zo(()=>{h||typeof document<"u"&&(_t(document),h=!0)}),qo(()=>e.debugShowBackfaces,M=>{let A=g.value;A&&A.classList.toggle("polycss-debug-show-backfaces",!!M)});let x=be(()=>e.polygons??[]),E=be(()=>e.centerPolygons??null),S=be(()=>({directionalLight:e.directionalLight})),L=Rt(x,S),y=be(()=>E.value??x.value),w=Rt(y,S);Zo(()=>{r.value=g.value,a()}),Zi(a);let O=be(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality,textureLeafSizing:e.textureLeafSizing,textureImageRendering:e.textureImageRendering})),V=be(()=>{let M=e.textureLighting==="dynamic",A=M?void 0:e.directionalLight,D=M?void 0:e.ambientLight,_=M?void 0:e.pointLights,H=qt(L.value.polygons),q=e.seamBleed??Ko,$=q==="auto"||typeof q=="number"&&Number.isFinite(q)&&q>0?Gt(L.value.polygons,{tileSize:O.value.tileSize,layerElevation:O.value.layerElevation,directionalLight:A,ambientLight:D}):null;return L.value.polygons.map((F,ne)=>it(F,ne,{tileSize:O.value.tileSize,layerElevation:O.value.layerElevation,directionalLight:A,pointLights:_,ambientLight:D,seamBleed:$?.has(ne)?q:void 0,seamEdges:$?.get(ne),textureEdgeRepairEdges:H[ne]}))}),z=be(()=>e.textureLighting??"baked"),k=be(()=>e.textureQuality),X=be(()=>e.textureLeafSizing),j=be(()=>e.textureBackend),N=be(()=>e.textureImageRendering),b=be(()=>e.textureProjection),c=be(()=>e.strategies),P=lt(V,z,k,X,j,N,b,c),v=be(()=>{if(e.textureLighting!=="dynamic")return null;let M=e.directionalLight?.direction??[.4,-.7,.59],A=Ji(M),D=Math.hypot(A[0],A[1],A[2])||1,_=A[0]/D,H=A[1]/D,q=A[2]/D,$=Qo(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],F=Qo(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],ne=e.directionalLight?.intensity??1,ue=e.ambientLight?.intensity??.4,oe=Oe=>(Oe/255).toFixed(4),de=q,Te=Math.sign(de||1)*Math.max(Math.abs(de),.01);return{"--plx":_.toFixed(2),"--ply":H.toFixed(2),"--plz":q.toFixed(2),"--clx":_.toFixed(2),"--cly":H.toFixed(2),"--clz":Te.toFixed(2),"--plr":oe($[0]),"--plg":oe($[1]),"--plb":oe($[2]),"--pli":ne.toFixed(4),"--par":oe(F[0]),"--pag":oe(F[1]),"--pab":oe(F[2]),"--pai":ue.toFixed(4)}}),C=50;Go(()=>{let M=g.value;i.value;let A=s.getEntries();if(A.length===0){M&&M.style.removeProperty("--shadow-ground-cssz"),u.value!==null&&(u.value=null);return}let D=1/0;for(let q of A){let $=q();for(let F of $.polygons)for(let ne of F.vertices){let ue=ne[2]+($.position[2]??0);ue<D&&(D=ue)}}if(!Number.isFinite(D)){M&&M.style.removeProperty("--shadow-ground-cssz"),u.value!==null&&(u.value=null);return}let _=e.shadow?.lift??.05,H=(D+_)*C;u.value!==H&&(u.value=H),M&&(e.textureLighting==="dynamic"?M.style.setProperty("--shadow-ground-cssz",H.toFixed(3)):M.style.removeProperty("--shadow-ground-cssz"))});let T=be(()=>{if(!e.autoCenter)return[0,0,0];let M=w.value.sceneBbox;return[(M.min[0]+M.max[0])/2,(M.min[1]+M.max[1])/2,(M.min[2]+M.max[2])/2]});return Go(()=>{o.autoCenterOffset.value=T.value}),Ki(()=>{}),()=>{let M=`polycss-scene${e.class?` ${e.class}`:""}`,A=O.value,D=P.entries.value.map((H,q)=>{if(H)return mt({entry:H,page:P.pages.value[H.pageIndex],textureLighting:A.textureLighting??"baked",textureImageRendering:e.textureImageRendering});let $=V.value[q],F=$?Qi($,{imageRendering:e.textureImageRendering,backend:e.textureBackend,projection:e.textureProjection}):null;return $&&F?pt({plan:$,geometry:F}):!$||$.texture?null:P.useStableTriangle.value&&xt($)?ut({entry:$,textureLighting:A.textureLighting??"baked"}):P.useProjectiveQuad.value&&bt($)?dt({entry:$,textureLighting:A.textureLighting??"baked"}):P.useBorderShape.value||P.useFullRectSolid.value?ct({entry:$,textureLighting:A.textureLighting??"baked",forceBorderShape:!P.useFullRectSolid.value}):null}),_=t.default?.()??[];return Wi("div",{ref:g,class:M,"data-polycss-lighting":A.textureLighting??"baked","aria-hidden":"true",style:{...v.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([H])=>H!=="style"&&H!=="class"))},[...D,..._])}}});import{defineComponent as Ns,h as Ye,Teleport as js,computed as te,inject as Ys,onMounted as Xs,onBeforeUnmount as Bn,ref as Ct,shallowRef as $s,watch as Tt,watchEffect as pr}from"vue";import{buildBasisHints as Us,buildSharedEdgeMap as Ws,cornerShapeGeometryForPlan as qs,resolvePolyTextureLeafGeometry as Gs,worldDirectionalLightToCss as Zs}from"@layoutit/polycss-core";import{BASE_TILE as Qt,buildParametricCasterOverride as Ks,buildPolyMeshTransform as Qs,computeMergedReceiverShadows as Js,computeSceneBbox as el,DEFAULT_SEAM_BLEED as tl,ensureCcw2D as nl,inverseRotateVec3 as _n,findOverlappingPolygonDuplicates as yr,optimizeMeshPolygons as ol,parseHexColor as rl,prepareCasterEdgeOwners as al,prepareCasterPolyItems as il,prepareReceiverFacePlanes as sl,projectCssVertexToGround as ll,worldDirectionToCss as fr,worldPositionToCss as ul}from"@layoutit/polycss-core";import{ref as Dt,watch as es,onUnmounted as ts}from"vue";import{loadMesh as ns}from"@layoutit/polycss-core";var er=[],kn=[];function Kt(e,t){let n=Dt(er),o=Dt(void 0),r=Dt(!!e.value),a=Dt(null),i=Dt(kn),l=null;function s(){if(l){try{l.dispose()}catch{}l=null}}return es(e,(d,m,f)=>{if(!d){s(),n.value=er,o.value=void 0,r.value=!1,a.value=null,i.value=kn;return}let u=!1;r.value=!0,a.value=null;let g=l;ns(d,t).then(p=>{if(u){try{p.dispose()}catch{}return}if(g)try{g.dispose()}catch{}l=p,n.value=p.polygons,o.value=p.voxelSource,r.value=!1,a.value=null,i.value=p.warnings??kn}).catch(p=>{if(u)return;let h=p instanceof Error?p:new Error(String(p));r.value=!1,a.value=h}),f(()=>{u=!0})},{immediate:!0}),ts(()=>{s()}),{polygons:n,voxelSource:o,loading:r,error:a,warnings:i,dispose:s}}import{BASE_TILE as pe,computeProjectiveQuadMatrix as os,normalFacesCamera as rs,parsePureColor as sr,PROJECTIVE_QUAD_BLEED as as,resolveProjectiveQuadGuards as is,rotateVec3 as tr,shadePolygon as ss,SOLID_QUAD_CANONICAL_SIZE as ls}from"@layoutit/polycss-core";var us=[.4,-.7,.59],cs="#ffffff",ds=1,ms="#ffffff",ps=.4,lr=1,ys=8,fs=as,qe=1e-6,gs=is({bleed:0}),ur={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},Fn=["t","b","bl","br","fr","fl"],hs=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 nr(e){let t=[];for(let n of Fn)rs(ur[n],e)&&t.push(n);return t.join("|")}function Ps(e,t,n){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==t&&(e.style.color=t,o.color=t),o.transform!==n&&(e.style.transform=n,o.transform=n)}function xs(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,a=0;for(let l=1;l+1<t.length;l+=1){let s=t[l],d=t[l+1],m=s[1]-n[1],f=s[0]-n[0],u=s[2]-n[2],g=d[1]-n[1],p=d[0]-n[0],h=d[2]-n[2];o-=f*h-u*p,r-=u*g-m*h,a-=m*p-f*g}let i=Math.hypot(o,r,a);return i<=1e-9?null:[Math.round(o/i),Math.round(r/i),Math.round(a/i)]}function bs(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=xs(e),n=t?hs.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,a=1/0,i=-1/0,l=-1/0,s=-1/0;for(let f of e.vertices)o=Math.min(o,f[0]),r=Math.min(r,f[1]),a=Math.min(a,f[2]),i=Math.max(i,f[0]),l=Math.max(l,f[1]),s=Math.max(s,f[2]);let d=1e-6,m=As(e.color);return Math.abs(s-a)<=d?{axis:"z",face:n,left:r*pe,top:o*pe,width:Math.max(0,(l-r)*pe),height:Math.max(0,(i-o)*pe),z:a*pe,baseColor:m,bleed:Dn()}:Math.abs(i-o)<=d?{axis:"x",face:n,left:r*pe,top:a*pe,width:Math.max(0,(l-r)*pe),height:Math.max(0,(s-a)*pe),z:-o*pe,baseColor:m,bleed:Dn()}:Math.abs(l-r)<=d?{axis:"y",face:n,left:a*pe,top:o*pe,width:Math.max(0,(s-a)*pe),height:Math.max(0,(i-o)*pe),z:-r*pe,baseColor:m,bleed:Dn()}:null}function Dn(){return{left:0,right:0,top:0,bottom:0}}function vs(e){let t=o=>String(Number(o.toFixed(6))),n=`${e.item.baseColor}|${e.variableAxis}`;for(let o=0;o<3;o+=1)o!==e.variableAxis&&(n+=`|${o}:${t(e.fixed[o])}`);return n}function or(e){return[e[1]*pe,e[0]*pe,e[2]*pe]}function rr(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function Ss(e,t,n){let o=e.left,r=e.left+e.width,a=e.top,i=e.top+e.height;if(Math.abs(t[0]-n[0])<=qe){if(Math.abs(t[0]-o)<=qe)return"left";if(Math.abs(t[0]-r)<=qe)return"right"}if(Math.abs(t[1]-n[1])<=qe){if(Math.abs(t[1]-a)<=qe)return"top";if(Math.abs(t[1]-i)<=qe)return"bottom"}return null}function Cs(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=qe)){if(n!==null)return null;n=o}return n}function Ts(e,t,n){let o=t.vertices,r=or(o[n]),a=or(o[(n+1)%o.length]),i=Ss(e,rr(e,r),rr(e,a));if(!i)return null;let l=Cs(r,a);if(l===null)return null;let s=Math.min(r[l],a[l]),d=Math.max(r[l],a[l]);return d-s>qe?{item:e,side:i,variableAxis:l,fixed:r,start:s,end:d}:null}function ar(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],fs)}function Ms(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let a=0;a<r.vertices.length;a+=1){let i=Ts(o,r,a);if(!i)continue;let l=vs(i),s=n.get(l);s?s.push(i):n.set(l,[i])}}for(let o of n.values()){if(o.length<2)continue;o.sort((a,i)=>a.start-i.start||a.end-i.end);let r=[];for(let a of o){r=r.filter(i=>i.end>a.start+qe);for(let i of r)i.item.sourceIndex!==a.item.sourceIndex&&(ar(i),ar(a));r.push(a)}}}function Es(e){let t=sr(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha}:{r:255,g:255,b:255,alpha:1}}function As(e){if(!e)return"#cccccc";let t=sr(e);if(!t)return e;let n={r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha};if(n.alpha<1){let o=Math.round(Math.max(0,n.alpha)*1e3)/1e3;return`rgba(${In(n.r)}, ${In(n.g)}, ${In(n.b)}, ${o})`}return Ls(n)}function Ls({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function In(e){return Math.round(Math.max(0,Math.min(255,e)))}function Rs(e,t,n,o){let r=n?.direction??us,a=Math.hypot(r[0],r[1],r[2])||1,i=r[0]/a,l=r[1]/a,s=r[2]/a,d=Math.max(0,n?.intensity??ds)*Math.max(0,e[0]*i+e[1]*l+e[2]*s),m=Math.max(0,o?.intensity??ps),f=n?.color??cs,u=o?.color??ms,g=ss(t,d,f,u,m),p=Es(t);if(p.alpha>=1)return g;let h=parseInt(g.slice(1,3),16),x=parseInt(g.slice(3,5),16),E=parseInt(g.slice(5,7),16);return`rgba(${h}, ${x}, ${E}, ${p.alpha})`}function ws(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=bs(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return Ms(e,t),t}function Os(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 ks(e){let t=e.left,n=e.top,o=e.left+e.width,r=e.top+e.height;return[t,n,o,n,o,r,t,r]}function Ds(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function Is(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=ls/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function ir(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,a=e.height+e.bleed.top+e.bleed.bottom,i=e.z,l=r/t,s=a/t;return`matrix3d(${(e.axis==="x"?[l,0,0,0,0,0,s,0,0,-1,0,0,n,-i,o,1]:e.axis==="y"?[0,0,l,0,0,s,0,0,-1,0,0,0,-i,o,n,1]:[l,0,0,0,0,s,0,0,0,0,1,0,n,o,i,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function Fs(e,t){let{xAxis:n,yAxis:o,normal:r,tx:a,ty:i,tz:l}=Os(e),s=os(ks(e),n,o,r,a,i,l,gs,Ds(e));return s?Is(s,t)??ir(e,t):ir(e,t)}function Vs(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function zs(e){return Vs(e)?ys:lr}function Bs(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 _s(e,t){let n=Bs(e),o=t.meshRotation;o&&(n=tr(n,o[0]??0,o[1]??0,o[2]??0));let[r,a]=tr(n,t.rotX,0,t.rotY);return{x:r,y:a}}function Hs(e,t,n){let o=e.filter(u=>t.has(u.face)).map(u=>({item:u,..._s(u,n)}));if(o.length===0)return[];let r=1/0,a=-1/0,i=1/0,l=-1/0;for(let u of o)r=Math.min(r,u.x),a=Math.max(a,u.x),i=Math.min(i,u.y),l=Math.max(l,u.y);let s=4,d=Math.max(1e-6,a-r),m=Math.max(1e-6,l-i),f=new Map;for(let u of o){let g=Math.min(s-1,Math.max(0,Math.floor((u.x-r)/d*s))),p=Math.min(s-1,Math.max(0,Math.floor((u.y-i)/m*s))),h=`${g}:${p}`,x=f.get(h);x||(x={tx:g,ty:p,sourceIndex:u.item.sourceIndex,items:[]},f.set(h,x)),x.items.push(u.item),x.sourceIndex=Math.min(x.sourceIndex,u.item.sourceIndex)}return Array.from(f.values()).sort((u,g)=>u.ty-g.ty||u.tx-g.tx||u.sourceIndex-g.sourceIndex).flatMap(u=>u.items)}function cr(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:a}=e,i=ws(o);if(i.length===0)return null;let l=new Set(i.map(b=>b.face));n.classList.add("polycss-voxel-mesh");let s=zs(t);s!==lr&&n.style.setProperty("--polycss-voxel-primitive",`${s}px`);let d=new Map,m=(b,c)=>{let P=`${b}|${c}`,v=d.get(P);if(v)return v;let C=Rs(ur[b],c,r,a);return d.set(P,C),C},f=new Map,u=new Map,g=new Map,p=new Map;for(let b of i){let c=p.get(b.face);c||(c=[],p.set(b.face,c)),c.push(b)}let h="",x=0,E=new Set,S=b=>{let c=f.get(b.sourceIndex);return c||(c=t.createElement("b"),f.set(b.sourceIndex,c),Ps(c,m(b.face,b.baseColor),Fs(b,s))),c},L=b=>{let c=u.get(b);return c||(c=t.createElement("span"),c.className=`polycss-voxel-face polycss-voxel-face-${b}`,c.dataset.polycssVoxelFace=b,c.__polycssVoxelFaceHost=!0,u.set(b,c)),c},y=()=>{for(let b of Array.from(n.childNodes))if(!b.__polycssVoxelFaceHost)return b;return null},w=(b,c)=>{let P=c.map(T=>T.sourceIndex).join(",");if(g.get(b)===P)return;let v=L(b),C=t.createDocumentFragment();for(let T of c)C.appendChild(S(T));v.replaceChildren(C),g.set(b,P)},O=()=>{for(let b of Fn)l.has(b)&&w(b,p.get(b)??[])},V=b=>new Set(b.split("|").filter(Boolean)),z=b=>{let c=V(b);return Fn.filter(P=>c.has(P)&&l.has(P))},k=b=>{let c=0;for(let P of b)c+=p.get(P)?.length??0;return c},X=b=>{let c=new Set,P=[],v=new Map;for(let C of b){c.has(C.face)||(c.add(C.face),P.push(C.face));let T=v.get(C.face);T||(T=[],v.set(C.face,T)),T.push(C)}return{orderedFaces:P,itemsByFace:v}},j=(b,c)=>{let P=new Set(b);for(let v of E){if(P.has(v))continue;let C=u.get(v);C?.parentNode===n&&n.removeChild(C)}if(c){let v=t.createDocumentFragment();for(let C of b)v.appendChild(L(C));n.insertBefore(v,y()),E=P;return}for(let v=0;v<b.length;v+=1){let C=b[v],T=L(C);if(T.parentNode===n)continue;let M=null;for(let A=v+1;A<b.length;A+=1){let D=u.get(b[A]);if(D?.parentNode===n){M=D;break}}n.insertBefore(T,M??y())}E=P},N=(b,c,P)=>{if(!P){let A=z(b);j(A,!1),x=k(A);return}let v=new Set(b.split("|").filter(Boolean)),C=Hs(i,v,c),{orderedFaces:T,itemsByFace:M}=X(C);for(let A of T)w(A,M.get(A)??[]);j(T,!0),x=C.length};return O(),{get brushCount(){return x},render(b){h=nr(b),N(h,b,!0)},syncCamera(b){let c=nr(b);c!==h&&(h=c,N(c,b,!1))},dispose(){for(let b of u.values())b.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),f.clear(),u.clear(),g.clear(),x=0,E=new Set,h=""}}}var Vn=new WeakMap;function dr(e,t){Vn.set(e,t)}function mr(e){Vn.delete(e)}function vt(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=Vn.get(t);if(n)return n}t=t.parentElement}return null}function St(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let a=r.getBoundingClientRect();if(!(a.width<=0||a.height<=0)&&t>=a.left&&t<=a.right&&n>=a.top&&n<=a.bottom)return!0}return!1}function zn(e,t,n){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let r of o){if(n&&!n(r))continue;let a=vt(r);if(a&&St(r,e,t))return a}return null}var gr=new WeakMap,hr=new WeakMap;function cl(e){let t={};return e.paintColor&&(t["--polycss-paint"]=e.paintColor),e.dynamicColor&&(t["--psr"]=(e.dynamicColor.r/255).toFixed(4),t["--psg"]=(e.dynamicColor.g/255).toFixed(4),t["--psb"]=(e.dynamicColor.b/255).toFixed(4)),Object.keys(t).length>0?t:null}function Pr(e){if(e.length===0)return e;let t=el(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let a=i=>[i[0]-n,i[1]-o,i[2]-r];return e.map(i=>({...i,vertices:i.vertices.map(a),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(l=>({...l,vertices:l.vertices.map(a)}))}:null}))}var se=Ns({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},voxelSource:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},textureLeafSizing:{type:String,default:void 0},textureImageRendering:{type:String,default:void 0},textureBackend:{type:String,default:void 0},textureProjection:{type:String,default:void 0},seamBleed:{type:[Number,String],default:void 0},atomicAtlas:{type:Boolean,default:!1},onFrameReady:{type:Function,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},shadowDefinition:{type:Number,default:void 0},merge:{type:Boolean,default:!0},meshResolution:{type:String,default:void 0},parseOptions:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=te(()=>e.src??""),a=te(()=>{let R={...e.parseOptions??{}};return e.mtl&&(R.mtlUrl=e.mtl),e.meshResolution!==void 0&&(R.meshResolution=e.meshResolution),Object.keys(R).length>0?R:void 0}),i=Kt(r,a.value),l=te(()=>e.src?i.polygons.value:e.polygons??[]),s=Ct(null),d=null;Tt(l,()=>{s.value=null,d=null});let m=te(()=>s.value??l.value),f=te(()=>e.merge?ol(m.value,e.meshResolution!==void 0?{meshResolution:e.meshResolution}:void 0):m.value),u=te(()=>e.autoCenter?Pr(f.value):f.value),g=!t.polygon,p=so(),h=Ys(ce,null),x=Ct(0),E;pr(R=>{E?.(),E=h?.store.subscribe(()=>{x.value++}),R(()=>{E?.(),E=void 0})});let S=te(()=>e.textureLighting??p?.value.textureLighting??"baked"),L=te(()=>p?.value.strategies),y=te(()=>e.seamBleed??p?.value.seamBleed??tl),w=te(()=>e.textureLeafSizing??p?.value.textureLeafSizing),O=te(()=>e.textureImageRendering??p?.value.textureImageRendering),V=te(()=>e.textureBackend??p?.value.textureBackend),z=te(()=>e.textureProjection??p?.value.textureProjection),k=te(()=>p?.value.directionalLight),X=te(()=>p?.value.pointLights),j=te(()=>p?.value.ambientLight),N=te(()=>e.src?i.voxelSource.value:e.voxelSource??void 0),b=te(()=>!!(N.value&&s.value===null&&!t.polygon&&!t.default&&S.value==="baked"&&!e.castShadow)),c=te(()=>{if(S.value!=="dynamic")return null;let R=e.rotation;if(!R||R[0]===0&&R[1]===0&&R[2]===0)return null;let Y=p?.value.directionalLight?.direction;if(!Y)return null;let B=_n(Y,R),U=Math.hypot(B[0],B[1],B[2])||1;return{"--plx":(B[0]/U).toFixed(2),"--ply":(B[1]/U).toFixed(2),"--plz":(B[2]/U).toFixed(2)}}),P=Ct(e.rotation),v=Ct(0),C=te(()=>{let R=k.value;if(!R)return R;let Y=Zs(R);return P.value?{...Y,direction:_n(Y.direction,P.value)}:Y}),T=te(()=>{let R=X.value;if(!R||R.length===0)return;let Y=e.position??[0,0,0],B=P.value??[0,0,0],U=B[0]!==0||B[1]!==0||B[2]!==0;return R.map(W=>{let me=[W.position[0]-Y[0],W.position[1]-Y[1],W.position[2]-Y[2]],le=U?_n(me,B):me;return{...W,position:le}})}),M=void 0,A=te(()=>{if(!g||b.value)return[];let R=qt(u.value),Y=y.value==="auto"||typeof y.value=="number"&&Number.isFinite(y.value)&&y.value>0?Gt(u.value,{directionalLight:C.value,ambientLight:j.value}):null,B=Us(u.value,{directionalLight:C.value,ambientLight:j.value});return u.value.map((U,W)=>it(U,W,{directionalLight:C.value,pointLights:T.value,ambientLight:j.value,seamBleed:Y?.has(W)?y.value:void 0,seamEdges:Y?.get(W),textureEdgeRepairEdges:R[W],lightOccludedPolyIndices:M},B[W]))}),D=te(()=>e.textureQuality),_=te(()=>e.atomicAtlas),H=lt(A,S,D,w,V,O,z,L,_),q=[],$=()=>{let R=q.splice(0);for(let Y of R)Y()};Tt(()=>H.ready.value,R=>{R&&$()},{immediate:!0}),Bn($);let F=te(()=>g?Rn(H.plans.value,S.value,L.value):{});Tt(()=>H.entries.value,()=>{e.atomicAtlas&&H.ready.value&&e.onFrameReady?.()},{flush:"sync"});let ne=te(()=>cl(F.value)),ue=te(()=>{if(!e.castShadow||p?.value.receiverRegistry?.hasAny.value)return null;let R=p?.value,Y=R?.groundCssZ??null;if(Y===null)return null;let B=R?.shadow,U=R?.directionalLight?.direction??[.4,-.7,.59],W=fr(U),me=e.position?.[2]??0,le=Y-me*Qt,fe=yr(u.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),re=[],Ae=1/0,ke=1/0,ve=-1/0,De=-1/0,_e=1/0,G=1/0,I=-1/0,ie=-1/0,Ge=u.value,Ue=A.value;for(let Se=0;Se<Ge.length;Se++){if(fe.has(Se)||!Ue[Se])continue;let Je=Ge[Se],Bt=[];for(let tt of Je.vertices){let Ie=[tt[1]*Qt,tt[0]*Qt,tt[2]*Qt];Ie[0]<_e&&(_e=Ie[0]),Ie[1]<G&&(G=Ie[1]),Ie[0]>I&&(I=Ie[0]),Ie[1]>ie&&(ie=Ie[1]);let Fe=ll(Ie,W,le);Bt.push(Fe),Fe[0]<Ae&&(Ae=Fe[0]),Fe[1]<ke&&(ke=Fe[1]),Fe[0]>ve&&(ve=Fe[0]),Fe[1]>De&&(De=Fe[1])}re.push(Bt)}if(re.length===0)return null;let Z=B?.maxExtend??2e3,K=Math.max(Ae,_e-Z),Le=Math.max(ke,G-Z),We=Math.min(ve,I+Z),Ze=Math.min(De,ie+Z),He=We-K,Ke=Ze-Le;if(!(He>0)||!(Ke>0))return null;let Ne=B?.color??"#000000",ge=B?.opacity??.25,xe=rl(Ne)?.rgb??[0,0,0],he="";for(let Se of re){let Qe=nl(Se);he+=`M${(Qe[0][0]-K).toFixed(3)},${(Qe[0][1]-Le).toFixed(3)}`;for(let Je=1;Je<Qe.length;Je++)he+=`L${(Qe[Je][0]-K).toFixed(3)},${(Qe[Je][1]-Le).toFixed(3)}`;he+="Z"}return Ye("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(He),height:String(Ke),viewBox:`0 0 ${He} ${Ke}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${K.toFixed(3)}px,${Le.toFixed(3)}px,${le.toFixed(3)}px)`}},[Ye("path",{d:he,fill:`rgb(${xe[0]},${xe[1]},${xe[2]})`,"fill-rule":"nonzero",stroke:`rgb(${xe[0]},${xe[1]},${xe[2]})`,"stroke-width":"3","stroke-linejoin":"round",opacity:ge.toFixed(4)})])}),oe=te(()=>e.receiveShadow?Ws(u.value):void 0),de=te(()=>{if(!e.receiveShadow)return[];let R=p?.value,Y=R?.shadowRegistry;if(!Y)return[];Y.version.value,x.value;let B=Y.getEntries();if(B.length===0)return[];let U=R?.directionalLight?.direction??[.4,-.7,.59],W=fr(U),le=S.value==="dynamic"?[]:R?.pointLights??[],fe=le.map(Z=>({position:ul(Z.position),color:Z.color,intensity:Z.intensity})),re=le.map((Z,K)=>Z.castShadow?K:-1).filter(Z=>Z>=0),Ae=!!R?.directionalLight?.direction&&(R.directionalLight.intensity??1)>0,ke=re.length>0,ve=R?.shadow?.lift??.001,De=sl(u.value,e.position??[0,0,0],e.scale,new Set,ve,e.rotation);if(De.length===0)return[];let _e=[],G=0,I=oe.value;for(let Z of B){let K=Z(),Le=il(K.polygons,K.position,K.scale,()=>!0,K.rotation??null),We=K.polygons===u.value,Ze;if(!We&&(K.polygons.length>=40||ke)){let Ne=K.rotation??null,ge=K.position,xe=JSON.stringify(K.scale??null),he=`${ge[0]},${ge[1]},${ge[2]}|${Ne?Ne.join(","):"n"}|${xe}`,Se=gr.get(K.polygons);(Se===void 0||hr.get(K.polygons)!==he)&&(Se=al(K.polygons,ge,K.scale,Ne),gr.set(K.polygons,Se),hr.set(K.polygons,he)),Ze=Se}let He,Ke;if(R?.shadow?.parametric){let Ne=K.shadowDefinition??R.shadow.definition??16,ge=Ks({polysWorldVerts:Le.map(xe=>xe.wv),lightDir:W,definition:Ne,isSelf:We,style:R.shadow.style,pointLights:re.map(xe=>({position:fe[xe].position,index:xe}))});He=ge.overrideSilhouette,Ke=ge.overridePointSilhouettes}_e.push({id:Symbol(`caster-${G++}`),items:Le,selfShadowEdgeMap:We?I:void 0,edgeOwners:Ze,casterPolygonCount:K.polygons.length,overrideSilhouette:He,overridePointSilhouettes:Ke})}let ie=h?.store.getState().cameraState,Ge={rotX:ie?.rotX??65,rotY:ie?.rotY??45,meshRotation:e.rotation};return Js({receiverPlanes:De,receiverPolygons:u.value,receiverHasTexture:u.value.some(Z=>Z.texture!==void 0),casters:_e,lightDir:W,runDirectional:Ae,pointPasses:re.map(Z=>({lightPos:fe[Z].position,index:Z})),allPointLights:fe,cameraRot:Ge,ambientLight:R?.ambientLight,directionalLight:R?.directionalLight,shadow:{color:R?.shadow?.color,opacity:R?.shadow?.opacity??.25,maxExtend:R?.shadow?.maxExtend}}).map(Z=>Ye("svg",{key:`receiver-${Z.faceIndex}`,class:"polycss-shadow polycss-shadow-svg polycss-shadow-receiver","data-poly-shadow-type":"receiver","data-poly-shadow-receiver-face":String(Z.faceIndex),"data-poly-shadow-receiver-polys":JSON.stringify(Z.memberPolyIndices),width:String(Z.width),height:String(Z.height),viewBox:`0 0 ${Z.width} ${Z.height}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",opacity:String(Z.svgOpacity),transform:Z.matrixCss}},[...Z.baseFill&&Z.baseD?[Ye("path",{d:Z.baseD,fill:Z.baseFill,"fill-rule":"nonzero"})]:[],...Z.layers.map((K,Le)=>Ye("path",{key:Le,d:K.d,fill:K.fill,"fill-rule":"nonzero",...K.opacity!==1?{opacity:K.opacity.toFixed(4)}:{},...K.multiply?{style:{mixBlendMode:"multiply"}}:{}}))]))}),Te=$s(u.value),Oe=-1;Tt(u,R=>{let Y=p?.value.shadow?.followAnimation??!1,B=R.length!==Oe;Oe>=0&&!Y&&!B||(Oe=R.length,Te.value=R)},{immediate:!0});let Me=Symbol();Tt(()=>e.castShadow,(R,Y,B)=>{let U=p?.value.shadowRegistry;U&&(R?U.register(Me,()=>{let W=Te.value,me=yr(W,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),le=new Set,fe=A.value;for(let re=0;re<fe.length;re++)fe[re]&&!me.has(re)&&le.add(re);return{polygons:W,position:e.position??[0,0,0],scale:e.scale,rotation:e.rotation,renderedPolygonIndices:le,shadowDefinition:e.shadowDefinition}}):U.unregister(Me),B(()=>U.unregister(Me)))},{immediate:!0});let ee=Symbol();Tt(()=>e.receiveShadow,(R,Y,B)=>{let U=p?.value.receiverRegistry;U&&(R?U.register(ee):U.unregister(ee),B(()=>U.unregister(ee)))},{immediate:!0}),Bn(()=>{p?.value.shadowRegistry?.unregister(Me),p?.value.receiverRegistry?.unregister(ee)});let Q=Ct(null),ae={get element(){return Q.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>d??u.value,setPolygons(R){let Y=e.autoCenter?Pr(R):R;d=Y;let B=Q.value,U=B&&g&&Ln(B,Y,{directionalLight:C.value,ambientLight:j.value,textureLighting:S.value,strategies:L.value,seamBleed:y.value,colorFrame:++v.value,colorFreezeFrames:0});s.value=R.slice()},updatePolygon(R,Y){let B=d??u.value,U=typeof R=="number"?R:B.indexOf(R);U<0||U>=B.length||(Object.assign(B[U],Y),s.value=B.slice(),d=null)},rebakeAtlas:()=>{P.value=e.rotation},whenTexturesReady(){return H.ready.value?Promise.resolve():new Promise(R=>{q.push(R)})}};o(ae),Xs(()=>{Q.value&&dr(Q.value,ae)}),Bn(()=>{Q.value&&mr(Q.value)});let Ee=Ct(null);pr(R=>{let Y=Q.value;if(Ee.value?.dispose(),Ee.value=null,!b.value||!Y)return;let B=cr({doc:Y.ownerDocument,wrapper:Y,polygons:u.value,directionalLight:C.value,ambientLight:j.value});if(!B)return;let U=()=>{let me=h?.store.getState().cameraState;return{rotX:me?.rotX??65,rotY:me?.rotY??45,meshRotation:e.rotation}};Ee.value=B,B.render(U());let W=h?.store.subscribe(()=>{B.syncCamera(U())});R(()=>{W?.(),B.dispose(),Ee.value===B&&(Ee.value=null)})});let Re=null;function et(R,Y,B){let U=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let re=document.elementsFromPoint(Y,B),Ae=new Set;for(let ke of re){let ve=vt(ke);ve&&!Ae.has(ve)&&(Ae.add(ve),U.push({object:ve}))}}let W=0,me=0,le=h?.cameraElRef.value;if(le){let re=le.getBoundingClientRect();re.width>0&&re.height>0&&(W=(Y-re.left)/re.width*2-1,me=-((B-re.top)/re.height*2-1))}let fe=0;return Re&&(fe=Math.hypot(Y-Re.x,B-Re.y)),{object:U[0]?.object??ae,eventObject:ae,intersections:U,pointer:{x:W,y:me},delta:fe,nativeEvent:R,stopPropagation:()=>R.stopPropagation()}}function ye(R,Y,B,U){R&&R(et(Y,B,U))}return()=>{let Y={transform:Qs({position:e.position,scale:e.scale,rotation:e.rotation}),...c.value??void 0,...n.style,...ne.value??void 0},B=Object.fromEntries(Object.entries(n).filter(([G])=>G!=="style"&&G!=="class")),U=`polycss-mesh${b.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,W={};e.onClick&&(W.onClick=G=>{let I=G;ye(e.onClick,I,I.clientX,I.clientY)}),e.onContextMenu&&(W.onContextmenu=G=>{let I=G;ye(e.onContextMenu,I,I.clientX,I.clientY)}),e.onDoubleClick&&(W.onDblclick=G=>{let I=G;ye(e.onDoubleClick,I,I.clientX,I.clientY)}),e.onWheel&&(W.onWheel=G=>{let I=G;ye(e.onWheel,I,I.clientX,I.clientY)}),W.onPointerdown=G=>{let I=G;Re={x:I.clientX,y:I.clientY},ye(e.onPointerDown,I,I.clientX,I.clientY)},W.onPointerup=G=>{let I=G;ye(e.onPointerUp,I,I.clientX,I.clientY),Re=null},e.onPointerMove&&(W.onPointermove=G=>{let I=G;ye(e.onPointerMove,I,I.clientX,I.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(W.onPointerenter=G=>{let I=G;ye(e.onPointerOver,I,I.clientX,I.clientY),ye(e.onPointerEnter,I,I.clientX,I.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(W.onPointerleave=G=>{let I=G;ye(e.onPointerOut,I,I.clientX,I.clientY),ye(e.onPointerLeave,I,I.clientX,I.clientY)}),e.onPointerCancel&&(W.onPointercancel=G=>{let I=G;ye(e.onPointerCancel,I,I.clientX,I.clientY),Re=null});let me=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return Ye("div",{ref:Q,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:Y,...me,...W,...B},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return Ye("div",{ref:Q,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:Y,...me,...W,...B},t.error?.({error:i.error.value})??[]);let le=u.value,fe=t.polygon?le.map((G,I)=>Ye("template",{key:I},t.polygon?.({polygon:G,index:I}))):b.value?[]:H.entries.value.map((G,I)=>{if(G)return mt({entry:G,page:H.pages.value[G.pageIndex],textureLighting:S.value,textureImageRendering:O.value,solidPaintDefaults:F.value});let ie=H.plans.value[I],Ge=ie?Gs(ie,{imageRendering:O.value,backend:V.value,projection:z.value}):null;if(ie&&Ge)return pt({plan:ie,geometry:Ge});if(!ie||ie.texture)return null;if(bt(ie))return dt({entry:ie,textureLighting:S.value,solidPaintDefaults:F.value});if(xt(ie))return ut({entry:ie,textureLighting:S.value,solidPaintDefaults:F.value});let Ue=L.value?.disable?.includes("i")?null:qs(ie);return Ue?On({entry:ie,geometry:Ue,textureLighting:S.value,solidPaintDefaults:F.value}):ct({entry:ie,textureLighting:S.value,solidPaintDefaults:F.value,forceBorderShape:!H.useFullRectSolid.value})}),re=t.default?.()??[],Ae=ue.value,ke=Ae?[Ae]:[],ve=de.value,De=p?.value?.sceneEl??null,_e=De&&ve.length>0?[Ye(js,{to:De},ve)]:[];return Ye("div",{ref:Q,class:U,style:Y,...me,...W,...B},[...ke,..._e,...fe,...re])}}});import{defineComponent as dl,h as xr,computed as Hn}from"vue";import{BASE_TILE as It}from"@layoutit/polycss-core";function ml(e,t,n,o,r){let a=typeof n=="number"?n:n?.[0]??1,i=typeof n=="number"?n:n?.[1]??1,l=typeof n=="number"?n:n?.[2]??1,s=a!==1||i!==1||l!==1,d=!!t&&(!!t[0]||!!t[1]||!!t[2]),m=(e?.[1]??0)*It,f=(e?.[0]??0)*It,u=(e?.[2]??0)*It,g=[];return g.push(`translate3d(${m}px, ${f}px, ${u}px)`),d&&(t[0]&&g.push(`rotateY(${-t[0]}deg)`),t[1]&&g.push(`rotateX(${-t[1]}deg)`),t[2]&&g.push(`rotateZ(${-t[2]}deg)`)),s&&g.push(`scale3d(${a}, ${i}, ${l})`),g.push(`translate(${-o/2}px, ${-r/2}px)`),g.join(" ")}var br=dl({name:"PolyIframe",props:{src:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},position:{type:Array,default:void 0},rotation:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},allow:{type:String,default:void 0},sandbox:{type:String,default:void 0},loading:{type:String,default:void 0},referrerpolicy:{type:String,default:void 0},title:{type:String,default:void 0},class:{type:String,default:void 0},style:{type:Object,default:void 0}},setup(e){let t=Hn(()=>e.width*It),n=Hn(()=>e.height*It),o=Hn(()=>ml(e.position,e.rotation,e.scale,t.value,n.value));return()=>{let r={position:"absolute",left:"0",top:"0",transformOrigin:"0 0",transformStyle:"preserve-3d",transform:o.value,...e.style??{}},a={src:e.src,style:{width:`${t.value}px`,height:`${n.value}px`,border:"0",display:"block",background:"#000"}};return e.allow&&(a.allow=e.allow),e.sandbox&&(a.sandbox=e.sandbox),e.loading&&(a.loading=e.loading),e.referrerpolicy&&(a.referrerpolicy=e.referrerpolicy),e.title&&(a.title=e.title),xr("div",{class:e.class?`polycss-iframe ${e.class}`:"polycss-iframe",style:r},[xr("iframe",a)])}}});import{defineComponent as pl,h as yl,computed as fl}from"vue";var vr=pl({name:"PolyGround",props:{size:{type:Number,default:6},z:{type:Number,default:0},center:{type:Array,default:()=>[0,0]},color:{type:String,default:"#7d848e"},class:{type:String,default:void 0}},setup(e){let t=fl(()=>{let n=e.size/2,[o,r]=e.center;return[{vertices:[[o-n,r-n,e.z],[o+n,r-n,e.z],[o+n,r+n,e.z],[o-n,r+n,e.z]],color:e.color}]});return()=>yl(se,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as Sr}from"vue";function gl(e){return typeof e=="function"?Sr(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):Sr(()=>({texture:e.texture,key:e.key}))}import{computed as Xe,defineComponent as hl,h as Cr}from"vue";import{resolvePolyTextureLeafGeometry as Pl}from"@layoutit/polycss-core";var xl=4;function Jt(e,t=xl){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function bl(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,a)=>r-a),n=[...new Set(e.map(r=>r[1]))].sort((r,a)=>r-a);if(t.length!==2||n.length!==2)return null;let o=new Set([`${t[0]},${n[0]}`,`${t[0]},${n[1]}`,`${t[1]},${n[0]}`,`${t[1]},${n[1]}`]);for(let r of e)if(!o.has(`${r[0]},${r[1]}`))return null;return{u0:t[0],u1:t[1],v0:n[0],v1:n[1]}}function vl({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto",imageRendering:l}){let{u0:s,u1:d,v0:m,v1:f}=n,u=d-s,g=f-m,p=1/u,h=1/g,x=Math.max(m,f),E=s/u,S=(1-x)/g,L={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Jt(p)} ${Jt(h)}`,backgroundPosition:`${Jt(-E)} ${Jt(-S)}`,backgroundRepeat:"no-repeat",imageRendering:l==="pixelated"?"pixelated":void 0,pointerEvents:i==="none"?"none":void 0,...r},y=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([O,V])=>[`data-${O}`,String(V)])):{},w=o?.trim()||void 0;return Cr("i",{class:w,style:L,"data-poly-index":String(e.index),"data-polycss-leaf":"polygon","data-polycss-texture-backend":"image","data-polycss-texture-ready":"true","data-polycss-texture-image-rendering":l??"auto","data-polycss-texture-projection":"affine","data-polycss-texture-lighting":"source","data-polycss-double-sided":e.polygon.doubleSided?"true":void 0,...y,...a})}var Tr=hl({name:"Poly",inheritAttrs:!1,props:{vertices:{type:Array,required:!0},color:{type:String},texture:{type:String},textureImageSource:{type:Object,default:void 0},texturePresentation:{type:Object,default:void 0},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},doubleSided:{type:Boolean,default:void 0},material:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},textureLeafSizing:{type:String,default:void 0},textureImageRendering:{type:String,default:void 0},textureBackend:{type:String,default:void 0},textureProjection:{type:String,default:void 0},context:{type:Object,default:void 0},baseColor:{type:String},pointerEvents:{type:String,default:"auto"}},setup(e,{attrs:t}){let n=Xe(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=Xe(()=>e.textureQuality??e.context?.textureQuality),r=Xe(()=>e.textureLeafSizing??e.context?.textureLeafSizing),a=Xe(()=>e.textureImageRendering??e.context?.textureImageRendering),i=Xe(()=>e.textureBackend??e.context?.textureBackend),l=Xe(()=>e.textureProjection??e.context?.textureProjection),s=Xe(()=>e.material?.texture??e.texture),d=Xe(()=>e.material&&e.uvs?bl(e.uvs):null),m=Xe(()=>{let g=e.context?.tileSize??50;return it({vertices:e.vertices,color:e.baseColor??e.color,texture:s.value,textureImageSource:e.textureImageSource,texturePresentation:e.texturePresentation,uvs:e.uvs,data:e.data,doubleSided:e.doubleSided,material:e.material},0,{tileSize:g,layerElevation:e.context?.layerElevation??g,directionalLight:e.context?.directionalLight})}),f=Xe(()=>d.value?[]:[m.value]),u=lt(f,n,o,r,i,a,l);return()=>{let g=m.value,p=u.entries.value[0],h=[];e.position&&h.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&h.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):h.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&h.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&h.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&h.push(`rotateZ(${e.rotation[2]}deg)`));let x=h.length>0?h.join(" "):void 0,E={};if(e.data)for(let[w,O]of Object.entries(e.data))E[`data-${w}`]=String(O);let S={...t,...E},L=Object.fromEntries(Object.entries(S).filter(([w])=>w!=="class"&&w!=="style")),y;if(d.value&&e.material&&g)y=vl({plan:g,material:e.material,uvRect:d.value,className:S.class??void 0,style:S.style,domAttrs:L,pointerEvents:e.pointerEvents??"auto",imageRendering:a.value});else if(p)y=mt({entry:p,page:u.pages.value[p.pageIndex],textureLighting:n.value,textureImageRendering:a.value,className:S.class??void 0,style:S.style,domAttrs:L,pointerEvents:e.pointerEvents??"auto"});else{let w=g?Pl(g,{imageRendering:a.value,backend:i.value,projection:l.value}):null;g&&w&&(y=pt({plan:g,geometry:w,className:S.class??void 0,style:S.style,domAttrs:L,pointerEvents:e.pointerEvents??"auto"}))}return!y&&g&&!g.texture&&(y=xt(g)?ut({entry:g,textureLighting:n.value,className:S.class??void 0,style:S.style,domAttrs:L,pointerEvents:e.pointerEvents??"auto"}):bt(g)?dt({entry:g,textureLighting:n.value,className:S.class??void 0,style:S.style,domAttrs:L,pointerEvents:e.pointerEvents??"auto"}):ct({entry:g,textureLighting:n.value,className:S.class??void 0,style:S.style,domAttrs:L,pointerEvents:e.pointerEvents??"auto"})),y?x?Cr("div",{class:"polycss-poly-wrapper",style:{transform:x,position:"absolute",transformStyle:"preserve-3d"}},[y]):y:null}}});import{computed as Ve,defineComponent as ze,h as Be}from"vue";import{boxPolygons as Sl,planePolygons as Cl,ringPolygons as Tl,octahedronPolygons as Ml,spherePolygons as El,tetrahedronPolygons as Al,icosahedronPolygons as Ll,dodecahedronPolygons as Rl,cylinderPolygons as wl,conePolygons as Ol,torusPolygons as kl}from"@layoutit/polycss-core";var Mr=ze({name:"PolyBox",props:{size:{type:[Number,Array],default:void 0},center:{type:Array,default:void 0},min:{type:Array,default:void 0},max:{type:Array,default:void 0},color:{type:String,default:void 0},texture:{type:String,default:void 0},material:{type:Object,default:void 0},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},faces:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Sl({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture,material:e.material,uvs:e.uvs,data:e.data,faces:e.faces}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Er=ze({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,default:void 0},offset:{type:[Number,Array],default:void 0},along:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Cl({axis:e.axis,size:e.size,offset:e.offset,along:e.along,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Ar=ze({name:"PolyRing",props:{axis:{type:Number,required:!0},radius:{type:Number,required:!0},halfThickness:{type:Number,default:void 0},segments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Tl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Lr=ze({name:"PolyOctahedron",props:{center:{type:Array,required:!0},size:{type:Number,required:!0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Ml({center:e.center,size:e.size,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Rr=ze({name:"PolyTetrahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Al({size:e.size,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),wr=ze({name:"PolyIcosahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Ll({size:e.size,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Or=ze({name:"PolyDodecahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Rl({size:e.size,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),kr=ze({name:"PolySphere",props:{radius:{type:Number,default:void 0},subdivisions:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>El({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Dr=ze({name:"PolyCylinder",props:{radius:{type:Number,default:void 0},radiusTop:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>wl({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Ir=ze({name:"PolyCone",props:{radius:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>Ol({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Fr=ze({name:"PolyTorus",props:{radius:{type:Number,default:void 0},tube:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},tubularSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Ve(()=>kl({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>Be(se,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as Dl,inject as Il,onMounted as Fl,onBeforeUnmount as Vl,watch as Nn,ref as zl}from"vue";import{BASE_TILE as Vr}from"@layoutit/polycss-core";var Bl=150,zr=4,_l=513e-6,Hl=10,Nl=3,Br=16.67,jl=50,_r=.1,Hr=10,Nr=0,jr=5e3,Yl=.3,Xl=.05;function $l(e){return e===!0?-1:e===void 0||e===!1?1:e}function Ul(e,t,n,o,r){let a=$l(r),i=e/zr*a,l=t/zr*a;return{rotX:n-l,rotY:((o-i)%360+360)%360}}function Yr(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),l=-e/(a*Vr),s=-t/(a*Vr*i),d=-r*Math.PI/180,m=Math.cos(d),f=Math.sin(d);return{dWorldX:s*m-l*f,dWorldY:s*f+l*m}}var Xr=Dl({name:"PolyOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:_r},maxZoom:{type:Number,default:Hr},minDistance:{type:Number,default:Nr},maxDistance:{type:Number,default:jr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Il(ce,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,l=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",l())},d=()=>{t("interaction-start",l())},m=()=>{t("interaction-end",l())},f=null,u={x:0,y:0},g=zl(!1),p=null,h=null,x=null;function E(){let y=a.value;if(!y)return;let w=!1,O={x:0,y:0},V=c=>{if(e.drag&&f===null&&c.isPrimary!==!1){c.preventDefault(),f=c.pointerId,u={x:c.clientX,y:c.clientY},y.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(g.value=!0),d()}},z=c=>{if(f===null||c.pointerId!==f||!e.drag)return;c.preventDefault();let P=c.clientX-u.x,v=c.clientY-u.y;u={x:c.clientX,y:c.clientY};let C=r.value,T=C.state;if(c.shiftKey){let{dWorldX:M,dWorldY:A}=Yr(P,v,T.zoom,T.rotX,T.rotY);C.update({target:[T.target[0]+M,T.target[1]+A,T.target[2]]})}else{let{rotX:M,rotY:A}=Ul(P,v,T.rotX,T.rotY,e.invert);C.update({rotX:M,rotY:A})}i(),o.updateCameraFromRef(C),s()},k=c=>{if(f===c.pointerId){f=null,y.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}g.value=!1,m()}},X=c=>{c.preventDefault()},j=c=>{c.button===2&&(w=!0,O={x:c.clientX,y:c.clientY})},N=c=>{if(!w||!e.drag)return;let P=c.clientX-O.x,v=c.clientY-O.y;O={x:c.clientX,y:c.clientY};let C=r.value,T=C.state,{dWorldX:M,dWorldY:A}=Yr(P,v,T.zoom,T.rotX,T.rotY);C.update({target:[T.target[0]+M,T.target[1]+A,T.target[2]]}),i(),o.updateCameraFromRef(C),s()},b=c=>{c.button===2&&w&&(w=!1,m())};y.style.cursor="grab",y.style.touchAction="none",y.style.userSelect="none",y.addEventListener("pointerdown",V),y.addEventListener("pointermove",z),y.addEventListener("pointerup",k),y.addEventListener("pointercancel",k),y.addEventListener("contextmenu",X),y.addEventListener("mousedown",j),y.addEventListener("mousemove",N),y.addEventListener("mouseup",b),p=()=>{y.removeEventListener("pointerdown",V),y.removeEventListener("pointermove",z),y.removeEventListener("pointerup",k),y.removeEventListener("pointercancel",k),y.removeEventListener("contextmenu",X),y.removeEventListener("mousedown",j),y.removeEventListener("mousemove",N),y.removeEventListener("mouseup",b),y.style.cursor="",y.style.touchAction="",y.style.userSelect=""}}function S(){let y=a.value;if(!y)return;let w=!1,O=null,V=z=>{if(!e.wheel)return;z.preventDefault();let k=z.deltaMode===1?16:z.deltaMode===2?100:1,X=z.deltaY*k;z.ctrlKey?X*=Hl:X*=Nl;let j=r.value;if(e.dolly){let N=e.minDistance??Nr,b=e.maxDistance??jr,c=Math.max(N,Math.min(b,j.state.distance+X*Xl));j.update({distance:c})}else{let N=Math.exp(-X*_l),b=e.minZoom??_r,c=e.maxZoom??Hr,P=Math.max(b,Math.min(c,j.state.zoom*N));j.update({zoom:P})}i(),o.updateCameraFromRef(j),w||(w=!0,d()),s(),O!==null&&clearTimeout(O),O=setTimeout(()=>{O=null,w=!1,m()},Bl)};y.addEventListener("wheel",V,{passive:!1}),h=()=>{y.removeEventListener("wheel",V),O!==null&&clearTimeout(O)}}function L(){let y=null,w=!1,O=0,V=z=>{if(w)return;let k=e.animate;if(!k){y=requestAnimationFrame(V);return}if(g.value)O=z;else{let X=Math.min(jl,O?z-O:Br);O=z;let N=(k.speed??Yl)*(X/Br),b=r.value,c=b.state;if(k.axis==="x"){let P=((c.rotX+N)%360+360)%360;b.update({rotX:P})}else{let P=((c.rotY+N)%360+360)%360;b.update({rotY:P})}i(),o.updateCameraFromRef(b),s()}y=requestAnimationFrame(V)};y=requestAnimationFrame(V),x=()=>{w=!0,y!==null&&cancelAnimationFrame(y),x=null}}return Fl(()=>{e.drag&&E(),e.wheel&&S(),e.animate&&L()}),Vl(()=>{p?.(),h?.(),x?.(),p=null,h=null}),Nn(()=>e.drag,y=>{y&&!p&&E(),!y&&p&&(p(),p=null)}),Nn(()=>e.wheel,y=>{y&&!h&&S(),!y&&h&&(h(),h=null)}),Nn(()=>!!e.animate,y=>{y&&!x&&L(),!y&&x&&x()}),()=>null}});import{defineComponent as Wl,inject as ql,onMounted as Gl,onBeforeUnmount as Zl,watch as jn,ref as Kl}from"vue";import{BASE_TILE as $r}from"@layoutit/polycss-core";var Ql=150,Ur=4,Jl=513e-6,eu=10,tu=3,Wr=16.67,nu=50,qr=.1,Gr=10,Zr=0,Kr=5e3,ou=.3,ru=.05;function au(e){return e===!0?-1:e===void 0||e===!1?1:e}function Qr(e,t,n,o,r){let a=au(r),i=e/Ur*a,l=t/Ur*a;return{rotX:n-l,rotY:((o-i)%360+360)%360}}function iu(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),l=-e/(a*$r),s=-t/(a*$r*i),d=-r*Math.PI/180,m=Math.cos(d),f=Math.sin(d);return{dWorldX:s*m-l*f,dWorldY:s*f+l*m}}var Jr=Wl({name:"PolyMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:qr},maxZoom:{type:Number,default:Gr},minDistance:{type:Number,default:Zr},maxDistance:{type:Number,default:Kr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=ql(ce,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,l=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",l())},d=()=>{t("interaction-start",l())},m=()=>{t("interaction-end",l())},f=null,u={x:0,y:0},g=Kl(!1),p=null,h=null,x=null;function E(){let y=a.value;if(!y)return;let w=!1,O={x:0,y:0},V=c=>{if(e.drag&&f===null&&c.isPrimary!==!1){c.preventDefault(),f=c.pointerId,u={x:c.clientX,y:c.clientY},y.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(g.value=!0),d()}},z=c=>{if(f===null||c.pointerId!==f||!e.drag)return;c.preventDefault();let P=c.clientX-u.x,v=c.clientY-u.y;u={x:c.clientX,y:c.clientY};let C=r.value,T=C.state;if(c.shiftKey){let{rotX:M,rotY:A}=Qr(P,v,T.rotX,T.rotY,e.invert);C.update({rotX:M,rotY:A})}else{let{dWorldX:M,dWorldY:A}=iu(P,v,T.zoom,T.rotX,T.rotY);C.update({target:[T.target[0]+M,T.target[1]+A,T.target[2]]})}i(),o.updateCameraFromRef(C),s()},k=c=>{if(f===c.pointerId){f=null,y.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}g.value=!1,m()}},X=c=>{c.preventDefault()},j=c=>{c.button===2&&(w=!0,O={x:c.clientX,y:c.clientY})},N=c=>{if(!w||!e.drag)return;let P=c.clientX-O.x,v=c.clientY-O.y;O={x:c.clientX,y:c.clientY};let C=r.value,T=C.state,{rotX:M,rotY:A}=Qr(P,v,T.rotX,T.rotY,e.invert);C.update({rotX:M,rotY:A}),i(),o.updateCameraFromRef(C),s()},b=c=>{c.button===2&&w&&(w=!1,m())};y.style.cursor="grab",y.style.touchAction="none",y.style.userSelect="none",y.addEventListener("pointerdown",V),y.addEventListener("pointermove",z),y.addEventListener("pointerup",k),y.addEventListener("pointercancel",k),y.addEventListener("contextmenu",X),y.addEventListener("mousedown",j),y.addEventListener("mousemove",N),y.addEventListener("mouseup",b),p=()=>{y.removeEventListener("pointerdown",V),y.removeEventListener("pointermove",z),y.removeEventListener("pointerup",k),y.removeEventListener("pointercancel",k),y.removeEventListener("contextmenu",X),y.removeEventListener("mousedown",j),y.removeEventListener("mousemove",N),y.removeEventListener("mouseup",b),y.style.cursor="",y.style.touchAction="",y.style.userSelect=""}}function S(){let y=a.value;if(!y)return;let w=!1,O=null,V=z=>{if(!e.wheel)return;z.preventDefault();let k=z.deltaMode===1?16:z.deltaMode===2?100:1,X=z.deltaY*k;z.ctrlKey?X*=eu:X*=tu;let j=r.value;if(e.dolly){let N=e.minDistance??Zr,b=e.maxDistance??Kr,c=Math.max(N,Math.min(b,j.state.distance+X*ru));j.update({distance:c})}else{let N=Math.exp(-X*Jl),b=e.minZoom??qr,c=e.maxZoom??Gr,P=Math.max(b,Math.min(c,j.state.zoom*N));j.update({zoom:P})}i(),o.updateCameraFromRef(j),w||(w=!0,d()),s(),O!==null&&clearTimeout(O),O=setTimeout(()=>{O=null,w=!1,m()},Ql)};y.addEventListener("wheel",V,{passive:!1}),h=()=>{y.removeEventListener("wheel",V),O!==null&&clearTimeout(O)}}function L(){let y=null,w=!1,O=0,V=z=>{if(w)return;let k=e.animate;if(!k){y=requestAnimationFrame(V);return}if(g.value)O=z;else{let X=Math.min(nu,O?z-O:Wr);O=z;let N=(k.speed??ou)*(X/Wr),b=r.value,c=b.state;if(k.axis==="x"){let P=((c.rotX+N)%360+360)%360;b.update({rotX:P})}else{let P=((c.rotY+N)%360+360)%360;b.update({rotY:P})}i(),o.updateCameraFromRef(b),s()}y=requestAnimationFrame(V)};y=requestAnimationFrame(V),x=()=>{w=!0,y!==null&&cancelAnimationFrame(y),x=null}}return Gl(()=>{e.drag&&E(),e.wheel&&S(),e.animate&&L()}),Zl(()=>{p?.(),h?.(),x?.(),p=null,h=null}),jn(()=>e.drag,y=>{y&&!p&&E(),!y&&p&&(p(),p=null)}),jn(()=>e.wheel,y=>{y&&!h&&S(),!y&&h&&(h(),h=null)}),jn(()=>!!e.animate,y=>{y&&!x&&L(),!y&&x&&x()}),()=>null}});import{defineComponent as su,h as en,inject as ea,onBeforeUnmount as ta,onMounted as Yn,ref as Ft,computed as Mt}from"vue";import{arrowPolygons as lu,eulerXYZFromQuat as uu,planePolygons as cu,quatFromAxisAngle as du,quatFromEulerXYZ as mu,quatMultiply as pu,ringQuadPolygons as yu}from"@layoutit/polycss-core";var tn="#ff3653",nn="#8adb00",on="#2c8fff",fu=.6,gu=.8,hu=1,$e=50,na=60,Pu=.6,xu=.0125,bu=.15,vu=.04,Su=1,oa=.02,Xn=1.04,Cu=.1,Tu=.25,ca=1e-4,Vt={0:1,1:0,2:2},ra=[{cssAxis:0,sign:1,key:"x",color:tn},{cssAxis:0,sign:-1,key:"-x",color:tn},{cssAxis:1,sign:1,key:"y",color:nn},{cssAxis:1,sign:-1,key:"-y",color:nn},{cssAxis:2,sign:1,key:"z",color:on},{cssAxis:2,sign:-1,key:"-z",color:on}],aa=[{cssAxis:0,key:"x",color:tn},{cssAxis:1,key:"y",color:nn},{cssAxis:2,key:"z",color:on}],ia=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:on},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:nn},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:tn}];function $n(e,t){let n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!n)return e;let o=parseInt(n[1],16),r=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${o}, ${r}, ${a}, ${t})`}function rn(e,t){return!t||t<=0?e:Math.round(e/t)*t}function Mu(e){return e.replace("-","")[0]}function Un(e,t,n,o){let r=n*Math.PI/180,a=o*Math.PI/180,i=[0,0,0];i[e]=t;let l=i[0]*Math.sin(a)+i[1]*Math.cos(a),s=i[2];return l*Math.sin(r)+s*Math.cos(r)<0}function Eu(e){if(e.length===0)return na;let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let l of e)for(let s of l.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?Math.max(r-t,a-n,i-o)*$e*Pu:na}function Au(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let l of e)for(let s of l.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?[(n+a)/2*$e,(t+r)/2*$e,(o+i)/2*$e]:[0,0,0]}function sa(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),a=o.getBoundingClientRect();e.wrapper.removeChild(o);let i=(a.left-r.left)/t,l=(a.top-r.top)/t,s=i*i+l*l;if(s<ca)return;let d=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=u=>{let g=u.clientX-e.startClientX,p=u.clientY-e.startClientY,h=(g*i+p*l)/s;h=rn(h,e.translationSnap);let x=[d[0]+h*n[0],d[1]+h*n[1],d[2]+h*n[2]];e.onObjectChange?.({object:e.target,position:x}),e.onChange?.()},f=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",f),window.removeEventListener("pointercancel",f);let u=g=>{g.stopPropagation(),g.stopImmediatePropagation()};window.addEventListener("click",u,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",u,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",f),window.addEventListener("pointercancel",f)}function la(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(f){let u=e.wrapper.ownerDocument.createElement("div");u.style.position="absolute",u.style.left="0",u.style.top="0",u.style.width="0",u.style.height="0",u.style.transform=`translate3d(${f[0]*o}px, ${f[1]*o}px, ${f[2]*o}px)`,e.wrapper.appendChild(u);let g=e.wrapper.getBoundingClientRect(),p=u.getBoundingClientRect();return e.wrapper.removeChild(u),{x:(p.left-g.left)/o,y:(p.top-g.top)/o}}let a=r(t),i=r(n),l=a.x*i.y-i.x*a.y;if(Math.abs(l)<ca)return;let s=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let d=f=>{let u=f.clientX-e.startClientX,g=f.clientY-e.startClientY,p=(i.y*u-i.x*g)/l,h=(-a.y*u+a.x*g)/l;p=rn(p,e.translationSnap),h=rn(h,e.translationSnap);let x=[s[0]+p*t[0]+h*n[0],s[1]+p*t[1]+h*n[1],s[2]+p*t[2]+h*n[2]];e.onObjectChange?.({object:e.target,position:x}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",d),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",d),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function ua(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),a=0,i=e.target.getRotation()??[0,0,0],l=mu(i);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let s=m=>{let f=Math.atan2(m.clientY-o,m.clientX-n),u=f-r;u>Math.PI?u-=2*Math.PI:u<-Math.PI&&(u+=2*Math.PI),a+=u,r=f;let g=a*180/Math.PI;g=rn(g,e.rotationSnap);let p=[0,0,0];p[e.cssAxis]=1;let h=du(p,g*Math.PI/180),x=uu(pu(h,l));e.onObjectChange?.({object:e.target,rotation:x}),e.onChange?.()},d=()=>{window.removeEventListener("pointermove",s),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d);let m=f=>{f.stopPropagation(),f.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",s),window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d)}function Lu(e){return!!e&&typeof e=="object"&&"value"in e}function Ru(e){return e?Lu(e)?e.value??null:e:null}var da=su({name:"PolyTransformControls",props:{object:{type:null,default:null},mode:{type:String,default:"translate"},space:{type:String,default:"world"},size:{type:Number,default:1},showX:{type:Boolean,default:!0},showY:{type:Boolean,default:!0},showZ:{type:Boolean,default:!0},translationSnap:{type:Number,default:null},rotationSnap:{type:Number,default:null},enabled:{type:Boolean,default:!0}},emits:{change:()=>!0,objectChange:e=>!0,mouseDown:()=>!0,mouseUp:()=>!0,draggingChanged:e=>!0},setup(e,{emit:t}){let n=Ft(null),o=Ft(null),r=Ft(new Map),a=Mt(()=>Ru(e.object)),i=Ft(0);Yn(()=>{i.value++});let l=Ft(0),s=ea(ce,void 0),d=null;Yn(()=>{let c=s?.store;c&&(d=c.subscribe(()=>{l.value++}))}),ta(()=>{d?.()});function m(){l.value;let c=s?.store.getState().cameraState;return{rotX:c?.rotX??65,rotY:c?.rotY??45}}let f=Mt(()=>(i.value,Eu(a.value?.getPolygons()??[]))),u=Mt(()=>f.value*e.size);function g(c){return o.value===c?hu:n.value===c?gu:fu}function p(){t("change")}function h(c){t("objectChange",c)}function x(c){t("draggingChanged",c)}function E(){t("mouseDown")}function S(){t("mouseUp")}let L=ea(ce,void 0),y=null;Yn(()=>{let c=L?.cameraElRef.value;if(!c)return;let P=v=>{let C=a.value;if(!C||!e.enabled||v.target?.closest(".polycss-transform-gizmo"))return;let M={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let D of ia){let _=["x","y","z"][D.axisA],H=["x","y","z"][D.axisB];if(!M[_]||!M[H])continue;let q=document.querySelector(`.polycss-transform-plane--${D.key}`);if(!q||!St(q,v.clientX,v.clientY))continue;v.preventDefault(),v.stopPropagation();let $=q.closest("[data-poly-transform-controls]");if(!$)return;o.value=D.key,la({axisA:D.axisA,axisB:D.axisB,probeDistanceCss:u.value,wrapper:$,target:C,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:F=>{F||(o.value=null),x(F)}});return}let A=e.mode==="translate"?ra:aa;for(let D of A){let _=D.key.replace("-","")[0];if(!M[_])continue;let H=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${D.key}`);if(!H||!(e.mode==="rotate"?St(H,v.clientX,v.clientY):St(H,v.clientX,v.clientY)))continue;v.preventDefault(),v.stopPropagation();let $=H.closest("[data-poly-transform-controls]");if(!$)return;if(o.value=D.key,e.mode==="translate"){let F=D;sa({cssAxis:F.cssAxis,sign:F.sign,shaftLengthCss:u.value,wrapper:$,target:C,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:ne=>{ne||(o.value=null),x(ne)}})}else ua({cssAxis:D.cssAxis,wrapper:$,target:C,startClientX:v.clientX,startClientY:v.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:F=>{F||(o.value=null),x(F)}});return}};c.addEventListener("pointerdown",P),y=()=>c.removeEventListener("pointerdown",P)}),ta(()=>{y?.()});let w=Mt(()=>{if(e.mode!=="translate")return[];i.value;let P=u.value/$e,{rotX:v,rotY:C}=m();return ra.filter(T=>({x:e.showX,y:e.showY,z:e.showZ})[Mu(T.key)]).map(T=>{let M=g(T.key),A=Un(T.cssAxis,T.sign,v,C);return{spec:T,polygons:lu({axis:Vt[T.cssAxis],sign:T.sign,shaftLength:P,shaftHalfThickness:P*xu,headLength:P*bu,headHalfThickness:P*vu,color:$n(T.color,M),shaft:!A})}})}),O=Mt(()=>{if(e.mode!=="translate")return[];i.value;let P=u.value/$e,v={x:e.showX,y:e.showY,z:e.showZ},C=["x","y","z"],{rotX:T,rotY:M}=m(),A=P*Tu;return ia.filter(D=>v[C[D.axisA]]&&v[C[D.axisB]]).map(D=>{let _=g(D.key),H=Vt[D.perpAxis],q=(H+1)%3,$=(H+2)%3,F=Vt[q],ne=Vt[$],ue=Un(F,1,T,M)?-1:1,oe=Un(ne,1,T,M)?-1:1;return{spec:D,polygons:cu({axis:H,size:P*Cu,offset:[ue*A,oe*A],color:$n(D.color,_)})}})}),V=Mt(()=>{if(e.mode!=="rotate")return[];i.value;let v=u.value*Su/$e*Xn;return aa.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[C.key]).map(C=>{let T=g(C.key);return{spec:C,polygons:yu({axis:Vt[C.cssAxis],outerRadius:v,color:$n(C.color,T)})}})}),z=(1-oa)/Xn,k=(1+oa)/Xn;function X(c){return P=>{if(!e.enabled)return;let v=a.value;if(!v)return;P.stopPropagation();let T=P.eventObject.element?.closest("[data-poly-transform-controls]");T&&(o.value=c.key,sa({cssAxis:c.cssAxis,sign:c.sign,shaftLengthCss:u.value,wrapper:T,target:v,startClientX:P.nativeEvent.clientX,startClientY:P.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:M=>{M||(o.value=null),x(M)}}))}}function j(c){return P=>{if(!e.enabled)return;let v=a.value;if(!v)return;P.stopPropagation();let T=P.eventObject.element?.closest("[data-poly-transform-controls]");T&&(o.value=c.key,la({axisA:c.axisA,axisB:c.axisB,probeDistanceCss:u.value,wrapper:T,target:v,startClientX:P.nativeEvent.clientX,startClientY:P.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:M=>{M||(o.value=null),x(M)}}))}}function N(c){return P=>{if(!e.enabled)return;let v=a.value;if(!v)return;let C=P.eventObject.element;P.stopPropagation();let T=C?.closest("[data-poly-transform-controls]");T&&(o.value=c.key,ua({cssAxis:c.cssAxis,wrapper:T,target:v,startClientX:P.nativeEvent.clientX,startClientY:P.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:M=>{M||(o.value=null),x(M)}}))}}function b(c){return{onPointerOver:()=>{n.value=c},onPointerOut:()=>{n.value===c&&(n.value=null)}}}return()=>{let c=a.value;if(!c)return null;let P=c.getPosition()??[0,0,0],v=Au(c.getPolygons()),C=P[1]*$e+v[0],T=P[0]*$e+v[1],M=P[2]*$e+v[2],A={transform:`translate3d(${C}px, ${T}px, ${M}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},D=e.mode==="translate"?[...w.value.map(({spec:_,polygons:H})=>en(se,{key:`arrow-${_.key}`,polygons:H,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${_.key}`,textureLighting:"baked",onPointerDown:X(_),...b(_.key)})),...O.value.map(({spec:_,polygons:H})=>en(se,{key:`plane-${_.key}`,polygons:H,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${_.key}`,textureLighting:"baked",onPointerDown:j(_),...b(_.key)}))]:V.value.map(({spec:_,polygons:H})=>en(se,{key:_.key,polygons:H,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${_.key}`,style:{"--ring-inner-ratio":z,"--ring-outer-ratio":k},textureLighting:"baked",onPointerDown:N(_),...b(_.key)}));return en("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:A},D)}}});import{defineComponent as wu,inject as Ou,onMounted as ku,onBeforeUnmount as Du,watch as Iu}from"vue";import{BASE_TILE as Fu}from"@layoutit/polycss-core";var Vu={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 Wn(e,t){return{enabled:t.enabled??e.enabled,lookEnabled:t.lookEnabled??e.lookEnabled,moveEnabled:t.moveEnabled??e.moveEnabled,jumpEnabled:t.jumpEnabled??e.jumpEnabled,crouchEnabled:t.crouchEnabled??e.crouchEnabled,lookSensitivity:t.lookSensitivity??e.lookSensitivity,invertY:t.invertY??e.invertY,moveSpeed:t.moveSpeed??e.moveSpeed,jumpVelocity:t.jumpVelocity??e.jumpVelocity,gravity:t.gravity??e.gravity,eyeHeight:t.eyeHeight??e.eyeHeight,crouchHeight:t.crouchHeight??e.crouchHeight,groundZ:t.groundZ??e.groundZ,minPitch:t.minPitch??e.minPitch,maxPitch:t.maxPitch??e.maxPitch}}var pa=new Set(["KeyW","ArrowUp"]),ya=new Set(["KeyS","ArrowDown"]),fa=new Set(["KeyA","ArrowLeft"]),ga=new Set(["KeyD","ArrowRight"]),ha=new Set(["Space"]),qn=new Set(["ControlLeft","ControlRight"]);function ma(e){return pa.has(e)||ya.has(e)||fa.has(e)||ga.has(e)||ha.has(e)||qn.has(e)}function zu(){return{change:[],start:[],end:[]}}function Et(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Pa=wu({name:"PolyFirstPersonControls",props:{enabled:{type:Boolean,default:!0},lookEnabled:{type:Boolean,default:!0},moveEnabled:{type:Boolean,default:!0},jumpEnabled:{type:Boolean,default:!0},crouchEnabled:{type:Boolean,default:!0},lookSensitivity:{type:Number,default:.15},invertY:{type:Boolean,default:!1},moveSpeed:{type:Number,default:5},jumpVelocity:{type:Number,default:7},gravity:{type:Number,default:18},eyeHeight:{type:Number,default:1.7},crouchHeight:{type:Number,default:1},groundZ:{type:Number,default:0},minPitch:{type:Number,default:5},maxPitch:{type:Number,default:175}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t,expose:n}){let o=Ou(ce,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:a,cameraElRef:i,applyTransformDirect:l}=o,s=Wn(Vu,e),d=[0,0,0],m=null,f=0,u=!1,g=!1,p=!1,h=new Set,x=0,E=0,S=zu();function L(c,P){let v=c*Math.PI/180,C=P*Math.PI/180;return[-Math.sin(v)*Math.cos(C),-Math.sin(v)*Math.sin(C),-Math.cos(v)]}function y(){let c=i.value,P=c?getComputedStyle(c).perspective:"",v=parseFloat(P);return(Number.isFinite(v)&&v>0?v:32e3)/Fu}function w(){let c=a.value.state,P=L(c.rotX??90,c.rotY??0),v=y();return[d[0]+P[0]*v,d[1]+P[1]*v,d[2]+P[2]*v]}function O(){let c=w(),P=a.value;P.update({target:c}),l(),r.updateCameraFromRef(P)}let V=.05;function z(c){if(m===null||u)return;let P=Math.min(V,f?(c-f)/1e3:.0167);if(f=c,s.enabled){let v=!1,C=a.value.state;if(s.moveEnabled){let D=0,_=0;for(let H of h)pa.has(H)?D+=1:ya.has(H)?D-=1:ga.has(H)?_+=1:fa.has(H)&&(_-=1);if(D!==0||_!==0){let q=(C.rotY??0)*Math.PI/180,$=-Math.cos(q),F=-Math.sin(q),ne=-Math.sin(q),ue=Math.cos(q),oe=Math.hypot(D,_)||1,de=s.moveSpeed*P;d[0]+=($*D+ne*_)/oe*de,d[1]+=(F*D+ue*_)/oe*de,v=!0}}let M=s.crouchEnabled&&(h.has("ControlLeft")||h.has("ControlRight"))?s.crouchHeight:s.eyeHeight;s.jumpEnabled&&(x!==0||E>0)?(x-=s.gravity*P,E+=x*P,E<=0&&(E=0,x=0)):s.jumpEnabled||(E=0,x=0);let A=s.groundZ+M+E;if(Math.abs(d[2]-A)>1e-4&&(d[2]=A,v=!0),v){let D=w(),_=a.value;_.update({target:D}),l(),r.updateCameraFromRef(_),Et(S,"change");try{t("change",[d[0],d[1],d[2]])}catch{}}}m=requestAnimationFrame(z)}function k(){m!==null||u||(f=0,m=requestAnimationFrame(z))}function X(){m!==null&&(cancelAnimationFrame(m),m=null)}let j=null;function N(){let c=i.value;if(!c)return;let P=c.ownerDocument??document,v=P.defaultView??globalThis,C=()=>{if(!(!s.enabled||!s.lookEnabled||u||g))try{c.requestPointerLock()}catch{}},T=()=>{let F=P.pointerLockElement===c;if(F!==g){if(g=F,F){p=!0,Et(S,"start");try{t("interaction-start",[d[0],d[1],d[2]])}catch{}}else if(p){p=!1,Et(S,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}}},M=F=>{if(!g||u||!s.enabled||!s.lookEnabled)return;let ne=F.movementX??0,ue=F.movementY??0;if(ne===0&&ue===0)return;let oe=a.value,de=oe.state,Te=s.lookSensitivity,Oe=s.invertY?-1:1,Me=(((de.rotY??0)-ne*Te)%360+360)%360,ee=(de.rotX??90)-ue*Te*Oe;ee<s.minPitch?ee=s.minPitch:ee>s.maxPitch&&(ee=s.maxPitch);let Q=L(ee,Me),ae=y(),Ee=[d[0]+Q[0]*ae,d[1]+Q[1]*ae,d[2]+Q[2]*ae];oe.update({rotX:ee,rotY:Me,target:Ee}),l(),r.updateCameraFromRef(oe),Et(S,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},A=F=>{if(!(!s.enabled||u)&&ma(F.code)&&!(!g&&!s.moveEnabled)){if(ha.has(F.code)){if(!s.jumpEnabled)return;F.preventDefault(),!h.has(F.code)&&x===0&&E===0&&(x=s.jumpVelocity),h.add(F.code);return}qn.has(F.code)&&!s.crouchEnabled||!s.moveEnabled&&!qn.has(F.code)||(F.preventDefault(),h.add(F.code))}},D=F=>{ma(F.code)&&h.delete(F.code)},_=()=>{h.clear()};c.addEventListener("click",C),P.addEventListener("pointerlockchange",T),P.addEventListener("mousemove",M),v.addEventListener("keydown",A),v.addEventListener("keyup",D),v.addEventListener("blur",_);let H=v.getComputedStyle(c).perspective,q=parseFloat(H),$=Number.isFinite(q)&&q>0?q:2e3;c.style.setProperty("--polycss-fpv-perspective",`${$}px`),c.classList.add("polycss-fpv-host"),j=()=>{if(c.removeEventListener("click",C),P.removeEventListener("pointerlockchange",T),P.removeEventListener("mousemove",M),v.removeEventListener("keydown",A),v.removeEventListener("keyup",D),v.removeEventListener("blur",_),c.style.cursor="",c.classList.remove("polycss-fpv-host"),c.style.removeProperty("--polycss-fpv-perspective"),h.clear(),g)try{P.exitPointerLock()}catch{}}}n({update(c){s=Wn(s,c);let P=i.value;P&&!u&&(P.style.cursor=s.lookEnabled?"crosshair":"")},resume(){if(!u)return;u=!1;let c=i.value;c&&(c.style.cursor=s.lookEnabled?"crosshair":""),k()},pause(){if(u)return;u=!0,X();let c=i.value;if(c&&(c.style.cursor=""),p){p=!1,Et(S,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}},destroy(){u=!0,X()},lock(){if(!s.enabled||!s.lookEnabled||u)return;let c=i.value;try{c?.requestPointerLock()}catch{}},unlock(){if(g){let c=i.value;try{c?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return g},getOrigin(){return[d[0],d[1],d[2]]},setOrigin(c){d[0]=c[0],d[1]=c[1],d[2]=c[2],O(),Et(S,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},addEventListener(c,P){let v=S[c];v.includes(P)||v.push(P)},removeEventListener(c,P){let v=S[c],C=v.indexOf(P);C>=0&&v.splice(C,1)},hasEventListener(c,P){return S[c].includes(P)}}),ku(()=>{let c=i.value;if(!c)return;u=!1,g=!1,p=!1,h.clear(),x=0,E=0;let v=a.value.state.target??[0,0,0];d[0]=v[0],d[1]=v[1],d[2]=s.groundZ+s.eyeHeight,O(),c.style.cursor=s.lookEnabled?"crosshair":"",N(),k()}),Du(()=>{u=!0,X(),j?.(),j=null});let b=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let c of b)Iu(()=>e[c],()=>{s=Wn(s,e);let P=i.value;P&&!u&&(P.style.cursor=s.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as Bu,h as _u,inject as Gn,onBeforeUnmount as Hu,onMounted as Nu,provide as ju,reactive as Yu,ref as Xu,computed as $u}from"vue";var zt=Symbol("polycss.selection"),xa=Bu({name:"PolySelect",props:{multiple:{type:Boolean,default:!1},clearOnMiss:{type:Boolean,default:!0},filter:{type:Function,default:void 0}},emits:{change:e=>!0,pointerMissed:e=>!0},setup(e,{emit:t,slots:n}){let o=Yu({selected:[]}),r=$u(()=>o.selected);function a(m){let f=e.filter?e.filter(m):m;o.selected=f,t("change",f)}let i={get selected(){return o.selected},set:m=>a(m),add:m=>{e.multiple?o.selected.includes(m)||a([...o.selected,m]):a([m])},remove:m=>{o.selected.includes(m)&&a(o.selected.filter(f=>f!==m))},toggle:m=>{o.selected.includes(m)?a(o.selected.filter(f=>f!==m)):e.multiple?a([...o.selected,m]):a([m])},clear:()=>a([]),has:m=>o.selected.includes(m)};ju(zt,{selected:r,api:i});let l=Gn(ce,void 0),s=(m,f)=>zn(m,f,u=>!u.closest("[data-poly-transform-controls]")),d=null;return Nu(()=>{let m=l?.cameraElRef.value;if(!m)return;let f=u=>{if(u.target?.closest("[data-poly-transform-controls]"))return;let p=vt(u.target)??s(u.clientX,u.clientY);if(!p){t("pointerMissed",u),e.clearOnMiss&&a([]);return}e.multiple&&(u.shiftKey||u.metaKey||u.ctrlKey)?i.toggle(p):o.selected.length===1&&o.selected[0]===p?a([]):a([p])};m.addEventListener("click",f),d=()=>m.removeEventListener("click",f)}),Hu(()=>{d?.()}),()=>_u("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function ba(){let e=Gn(zt,void 0);return e?e.selected:Xu([])}function va(){let e=Gn(zt,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Uu,h as Wu,computed as qu}from"vue";import{axesHelperPolygons as Gu}from"@layoutit/polycss-core";var Sa=Uu({name:"PolyAxesHelper",props:{size:{type:Number,default:void 0},thickness:{type:Number,default:void 0},negative:{type:Boolean,default:void 0},xColor:{type:String,default:void 0},yColor:{type:String,default:void 0},zColor:{type:String,default:void 0}},setup(e){let t=qu(()=>Gu({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Wu(se,{polygons:t.value,merge:!1})}});import{defineComponent as Zu,h as Ku,computed as Zn}from"vue";import{octahedronPolygons as Qu}from"@layoutit/polycss-core";var Ca=Zu({name:"PolyDirectionalLightHelper",props:{light:{type:Object,required:!0},target:{type:Array,default:void 0},distance:{type:Number,default:5},size:{type:Number,default:.35},color:{type:String,default:void 0}},setup(e){let t=Zn(()=>e.color??e.light.color??"#ffd54a"),n=Zn(()=>Qu({center:[0,0,0],size:e.size,color:t.value})),o=Zn(()=>{let r=e.light.direction,a=r[0],i=r[1],l=r[2],s=Math.hypot(a,i,l)||1,d=e.target?.[0]??0,m=e.target?.[1]??0,f=e.target?.[2]??0;return[d+a/s*e.distance,m+i/s*e.distance,f+l/s*e.distance]});return()=>Ku(se,{polygons:n.value,position:o.value,merge:!1})}});var Kn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},Qn={ready:!0,textureLeafCount:0,readyTextureLeafCount:0,pendingTextureLeafCount:0,atlasTextureLeafCount:0,imageTextureLeafCount:0};function Jn(){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 eo(){return{runtimeAtlasUrlCount:0,snapshotAtlasCount:0,snapshotBackgroundCount:0,selfContained:!0}}function an(){return{rootFound:!1,projection:"unknown",perspectiveStyle:"",appliedPerspectiveStyle:""}}var Ju={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Kn,textureReadiness:Qn,textureStats:Jn(),snapshotStats:eo(),cameraStats:an(),bucketCount:0};function sn(e){return typeof e=="number"?{polygonCount:e}:e??{}}function yt(e,t){return e.querySelectorAll(t).length}function Ta(e,t){return(Ea(e,t)?1:0)+yt(e,t)}function Ma(e){if(!e)return!1;let t=/url\((?:"([^"]*)"|'([^']*)'|([^)]*))\)/g,n;for(;n=t.exec(e);){let o=(n[1]??n[2]??n[3]??"").trim();if(o&&!o.startsWith("data:"))return!0}return!1}function ec(e){let t=0,n=e instanceof HTMLElement?e:null;n&&Ma(n.getAttribute("style"))&&t++;for(let o of Array.from(e.querySelectorAll("[style]")))o instanceof HTMLElement&&Ma(o.getAttribute("style"))&&t++;return t}function Ea(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function ln(e,t){if(!t)return[e];let n=[];return Ea(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function tc(e){switch(e.toLowerCase()){case"b":return"quad";case"i":return"clippedSolid";case"s":return"atlas";case"u":return"stableTriangle";default:return null}}function nc(e){if(e==null||e==="")return;let t=Number.parseInt(e,10);return Number.isFinite(t)?t:void 0}function At(e){if(e==null||e==="")return;let t=Number(e);return Number.isFinite(t)?t:void 0}function oc(e){if(e==null||e==="")return;let t=e.split(",").map(n=>Number(n));if(!(t.length!==3||t.some(n=>!Number.isFinite(n))))return t}function rc(e){return e==="orthographic"||e==="perspective"?e:"unknown"}function ac(e,t){if(!t)return;let n=e.getAttribute("data-polycss-texture-ready");return n==="true"?!0:n==="false"?!1:e.style.opacity!=="0"}function to(e,t){if(!e)return[];let n=sn(t),o=[];for(let r of ln(e,n.scopeSelector))for(let a of Array.from(r.querySelectorAll("b,i,s,u"))){let i=a,l=tc(i.tagName);if(!l)continue;let s=i.getAttribute("data-polycss-texture-backend")??(l==="atlas"?"atlas":void 0),d=ac(i,s);o.push({element:i,strategy:l,polygonIndex:nc(i.getAttribute("data-poly-index")),textureBackend:s,textureReady:d,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:At(i.getAttribute("data-polycss-texture-leaf-width")),textureLeafHeight:At(i.getAttribute("data-polycss-texture-leaf-height")),doubleSided:i.getAttribute("data-polycss-double-sided")==="true"})}return o}function Aa(e,t){let n={...Qn};for(let o of to(e,t))o.textureBackend&&(n.textureLeafCount++,o.textureBackend==="image"?n.imageTextureLeafCount++:n.atlasTextureLeafCount++,o.textureReady===!1?n.pendingTextureLeafCount++:n.readyTextureLeafCount++);return n.ready=n.pendingTextureLeafCount===0,n}function ic(e,t){let n=Jn(),o=!1,r=!1;for(let a of to(e,t))if(a.textureBackend){switch(n.leafCount++,a.textureBackend==="image"?n.imageCount++:n.atlasCount++,a.textureReady===!1&&n.pendingCount++,a.textureLeafSizing){case"canonical":case"local":case"raster":case"image":n.sizingCounts[a.textureLeafSizing]++;break;default:n.sizingCounts.unknown++;break}switch(a.textureImageRendering){case"auto":case"pixelated":n.imageRenderingCounts[a.textureImageRendering]++;break;default:n.imageRenderingCounts.unknown++;break}switch(a.textureProjection){case"affine":case"projective":case"fallback":n.projectionCounts[a.textureProjection]++;break;default:n.projectionCounts.unknown++;break}typeof a.textureLeafWidth=="number"&&(n.minLeafWidth=o?Math.min(n.minLeafWidth,a.textureLeafWidth):a.textureLeafWidth,n.maxLeafWidth=o?Math.max(n.maxLeafWidth,a.textureLeafWidth):a.textureLeafWidth,o=!0),typeof a.textureLeafHeight=="number"&&(n.minLeafHeight=r?Math.min(n.minLeafHeight,a.textureLeafHeight):a.textureLeafHeight,n.maxLeafHeight=r?Math.max(n.maxLeafHeight,a.textureLeafHeight):a.textureLeafHeight,r=!0),a.doubleSided&&n.doubleSidedCount++}return n.pendingCount=Math.min(n.pendingCount,n.leafCount),n.ready=n.pendingCount===0,n}function sc(e,t){let n=eo();if(!e)return n;let o=sn(t);for(let r of ln(e,o.scopeSelector))n.runtimeAtlasUrlCount+=ec(r),n.snapshotAtlasCount+=Ta(r,"[data-polycss-snapshot-atlas]"),n.snapshotBackgroundCount+=Ta(r,"[data-polycss-snapshot-bg]");return n.selfContained=n.runtimeAtlasUrlCount===0,n}function lc(e){let t=e instanceof HTMLElement?e:null;if(t){if(t.classList.contains("polycss-camera"))return t;let o=t.closest(".polycss-camera");if(o instanceof HTMLElement)return o}let n=e.querySelector(".polycss-camera");return n instanceof HTMLElement?n:null}function uc(e,t){if(!e)return an();let n=sn(t),o=null;for(let r of ln(e,n.scopeSelector))if(o=lc(r),o)break;return o?{rootFound:!0,projection:rc(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:At(o.getAttribute("data-polycss-camera-zoom")),distance:At(o.getAttribute("data-polycss-camera-distance")),rotX:At(o.getAttribute("data-polycss-camera-rot-x")),rotY:At(o.getAttribute("data-polycss-camera-rot-y")),target:oc(o.getAttribute("data-polycss-camera-target"))}:an()}function cc(e,t){let n=sn(t);if(!e)return{...Ju,surfaceLeafCounts:{...Kn},textureReadiness:{...Qn},textureStats:Jn(),snapshotStats:eo(),cameraStats:an(),polygonCount:n.polygonCount??0};let o=ln(e,n.scopeSelector),r={...Kn},a=0,i=0;for(let s of o)r.quad+=yt(s,"b"),r.clippedSolid+=yt(s,"i"),r.atlas+=yt(s,"s"),r.stableTriangle+=yt(s,"u"),a+=yt(s,"q, .polycss-shadow-svg"),i+=yt(s,".polycss-bucket");let l=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??l,mountedPolygonLeafCount:l,shadowLeafCount:a,surfaceLeafCounts:r,textureReadiness:Aa(e,n),textureStats:ic(e,n),snapshotStats:sc(e,n),cameraStats:uc(e,n),bucketCount:i}}import{ref as La,watch as dc,onUnmounted as mc,computed as un}from"vue";import{createPolyAnimationMixer as pc}from"@layoutit/polycss-core";function ft(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function yc(e,t,n){let o=La(null),r=null,a=null,i=null,l=La(0);function s(){return n==null?o.value:ft(n)??o.value}function d(){a!==null&&(cancelAnimationFrame(a),a=null),i=null}function m(){d(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,l.value++)}function f(){if(a!==null)return;function S(L){if(i===null){i=L,a=requestAnimationFrame(S);return}let y=(L-i)/1e3;i=L,r?.update(y),a=requestAnimationFrame(S)}a=requestAnimationFrame(S)}function u(){m();let S=ft(e),L=ft(t);if(!S||S.length===0||!L)return;let y=s();y&&(r=pc(y,L),l.value++,f())}let g=dc(()=>{let S=ft(e),L=ft(t),y=n!=null?ft(n):o.value;return{c:S,ctrl:L,r:y}},()=>u(),{immediate:!0,deep:!1});mc(()=>{g(),m()});let p=un(()=>ft(e)??[]),h=un(()=>p.value.map(S=>S.name)),x=un(()=>(l.value,r)),E=un(()=>{l.value;let S=p.value,L={};for(let y of S)Object.defineProperty(L,y.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(y.name)}catch{return null}}});return L});return{ref:o,mixer:x,clips:p,names:h,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as yy,VOXEL_CAMERA_CULL_AXIS_EPS as fy,VOXEL_CAMERA_CULL_NORMAL_LIMIT as gy,normalizePolygons as hy,mergePolygons as Py,coverPlanarPolygons as xy,optimizeMeshPolygons as by,optimizeMeshParseResult as vy,simplifyTriangleMeshPolygons as Sy,repairMeshSeams as Cy,seamFacetSplitPolygons as Ty,seamFacetSplitReport as My,seamOverlapDiagnostics as Ey,seamOverlapPolygons as Ay,seamOverlapReport as Ly,cullInteriorPolygons as Ry,cameraCullNormalGroups as wy,cameraCullNormalGroupsFromPolygons as Oy,cameraCullNormalKey as ky,cameraCullVisibleSignature as Dy,cameraFacingDepth as Iy,isAxisAlignedSurfaceNormal as Fy,isVoxelCameraCullableNormalGroups as Vy,normalFacesCamera as zy,polygonCssSurfaceNormal as By,polygonFacesCamera as _y,parseObj as Hy,parseMtl as Ny,parseGltf as jy,parseStl as Yy,bakeSolidTextureSamples as Xy,bakeSolidTextureSampledPolygons as $y,loadMesh as Uy,createIsometricCamera as Wy,parseVox as qy,polygonFaces as Gy,computeTexturePaintMetrics as Zy,computeShapeLighting as Ky,parseColor as Qy,parsePureColor as Jy,parseHexColor as ef,parseRgbColor as tf,formatColor as nf,clampChannel as of,shadeColor as rf,rotateVec3 as af,inverseRotateVec3 as sf,axesHelperPolygons as lf,boxPolygons as uf,arrowPolygons as cf,ringPolygons as df,octahedronPolygons as mf,tetrahedronPolygons as pf,icosahedronPolygons as yf,dodecahedronPolygons as ff,cylinderPolygons as gf,conePolygons as hf,torusPolygons as Pf,planePolygons as xf,buildSceneContext as bf,buildPolyMeshTransform as vf,buildPolySceneTransform as Sf,computeSceneBbox as Cf,cssDistanceToWorld as Tf,cssPositionToWorld as Mf,polyCssDistanceToWorld as Ef,polyCssPositionToWorld as Af,worldDirectionToCss as Lf,worldDirectionToPolyCss as Rf,worldDirectionalLightToCss as wf,worldDirectionalLightToPolyCss as Of,worldDistanceToCss as kf,worldDistanceToPolyCss as Df,worldPositionToCss as If,worldPositionToPolyCss as Ff,BASE_TILE as Vf,DEFAULT_CAMERA_STATE as zf,DEFAULT_PROJECTION as Bf,normalizeInvertMultiplier as _f,buildPolyCameraSceneTransform as Hf,capturePolyCameraSnapshot as Nf,polyCameraTargetToCss as jf,resolvePolyCameraAppliedPerspectiveStyle as Yf,createPolyAnimationMixer as Xf,optimizeAnimatedMeshPolygons as $f,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as Uf,DEFAULT_SEAM_OVERLAP_OPTIONS as Wf,LoopOnce as qf,LoopRepeat as Gf,LoopPingPong as Zf}from"@layoutit/polycss-core";export{Vf as BASE_TILE,yy as CAMERA_BACKFACE_CULL_EPS,zf as DEFAULT_CAMERA_STATE,Bf as DEFAULT_PROJECTION,Uf as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,Wf as DEFAULT_SEAM_OVERLAP_OPTIONS,qf as LoopOnce,Zf as LoopPingPong,Gf as LoopRepeat,Tr as Poly,Sa as PolyAxesHelper,Mr as PolyBox,Lt as PolyCamera,ce as PolyCameraContextKey,Ir as PolyCone,Dr as PolyCylinder,Ca as PolyDirectionalLightHelper,Or as PolyDodecahedron,Pa as PolyFirstPersonControls,vr as PolyGround,wr as PolyIcosahedron,br as PolyIframe,Jr as PolyMapControls,se as PolyMesh,Lr as PolyOctahedron,Xr as PolyOrbitControls,Lt as PolyOrthographicCamera,ao as PolyPerspectiveCamera,Er as PolyPlane,Ar as PolyRing,Jo as PolyScene,xa as PolySelect,zt as PolySelectionContextKey,kr as PolySphere,Rr as PolyTetrahedron,Fr as PolyTorus,da as PolyTransformControls,fy as VOXEL_CAMERA_CULL_AXIS_EPS,gy as VOXEL_CAMERA_CULL_NORMAL_LIMIT,cf as arrowPolygons,lf as axesHelperPolygons,$y as bakeSolidTextureSampledPolygons,Xy as bakeSolidTextureSamples,uf as boxPolygons,Hf as buildPolyCameraSceneTransform,vf as buildPolyMeshTransform,Sf as buildPolySceneTransform,bf as buildSceneContext,wy as cameraCullNormalGroups,Oy as cameraCullNormalGroupsFromPolygons,ky as cameraCullNormalKey,Dy as cameraCullVisibleSignature,Iy as cameraFacingDepth,Nf as capturePolyCameraSnapshot,of as clampChannel,cc as collectPolyRenderStats,Aa as collectPolyTextureReadiness,Cf as computeSceneBbox,Ky as computeShapeLighting,Zy as computeTexturePaintMetrics,hf as conePolygons,xy as coverPlanarPolygons,Wy as createIsometricCamera,Xf as createPolyAnimationMixer,Tf as cssDistanceToWorld,Mf as cssPositionToWorld,Ry as cullInteriorPolygons,gf as cylinderPolygons,ff as dodecahedronPolygons,zn as findMeshUnderPoint,vt as findPolyMeshHandle,nf as formatColor,yf as icosahedronPolygons,_t as injectPolyBaseStyles,sf as inverseRotateVec3,Fy as isAxisAlignedSurfaceNormal,Vy as isVoxelCameraCullableNormalGroups,Uy as loadMesh,Py as mergePolygons,zy as normalFacesCamera,_f as normalizeInvertMultiplier,hy as normalizePolygons,mf as octahedronPolygons,$f as optimizeAnimatedMeshPolygons,vy as optimizeMeshParseResult,by as optimizeMeshPolygons,Qy as parseColor,jy as parseGltf,ef as parseHexColor,Ny as parseMtl,Hy as parseObj,Jy as parsePureColor,tf as parseRgbColor,Yy as parseStl,qy as parseVox,xf as planePolygons,St as pointInMeshElement,jf as polyCameraTargetToCss,Ef as polyCssDistanceToWorld,Af as polyCssPositionToWorld,By as polygonCssSurfaceNormal,Gy as polygonFaces,_y as polygonFacesCamera,to as queryPolyLeaves,Cy as repairMeshSeams,Yf as resolvePolyCameraAppliedPerspectiveStyle,df as ringPolygons,af as rotateVec3,Ty as seamFacetSplitPolygons,My as seamFacetSplitReport,Ey as seamOverlapDiagnostics,Ay as seamOverlapPolygons,Ly as seamOverlapReport,rf as shadeColor,Sy as simplifyTriangleMeshPolygons,pf as tetrahedronPolygons,Pf as torusPolygons,yc as usePolyAnimation,gt as usePolyCamera,gl as usePolyMaterial,Kt as usePolyMesh,Rt as usePolySceneContext,ba as usePolySelect,va as usePolySelectionApi,Lf as worldDirectionToCss,Rf as worldDirectionToPolyCss,wf as worldDirectionalLightToCss,Of as worldDirectionalLightToPolyCss,kf as worldDistanceToCss,Df as worldDistanceToPolyCss,If as worldPositionToCss,Ff as worldPositionToPolyCss};
|