@layoutit/polycss-vue 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +48 -1
- package/dist/index.d.ts +48 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{defineComponent as Fa,h as Va,provide as za,computed as Ba}from"vue";import{ref 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,
|
|
@@ -426,4 +426,4 @@ import{defineComponent as Fa,h as Va,provide as za,computed as Ba}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 Nc}from"@layoutit/polycss-core";import{inject as Wa}from"vue";var cn=Symbol("polycss/scene-context");function oo(){return Wa(cn,null)}import{isSolidTrianglePlan as pt,isProjectiveQuadPlan as yt,buildTextureEdgeRepairSets as Xt,buildSeamBleedPolygonEdges as $t,buildSeamBleedPolygonSet as _d,cssBorderShapeForPlan as Hd}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as qa,safariCssProjectiveUnsupported as ro,parseHex as Ga,rgbKey as Za}from"@layoutit/polycss-core";function dn(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 mn(e){if(ao(e))return!0;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!ro(n):!0}function Vt(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 ao(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 dt(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!ro(n):!0}function io(e,t,n,o,r){let a=new Set(o?.disable??[]);return qa(e,t,a,{solidTriangleSupported:mn(n),projectiveQuadSupported:dt(n),cornerShapeSupported:Vt(n),borderShapeSupported:dn(n)},Ga,Za,r)}function pn(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 io(e,t,r,a)}function Ge(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 dn(t)}function Ze(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 mn(t)}import{filterAtlasPlans as Ka}from"@layoutit/polycss-core";function yn(e,t,n,o,r,a,i){let l=o??(typeof document<"u"?document:null);return Ka(e,t,n,{solidTriangleSupported:Ze(o),projectiveQuadSupported:o?dt(o):!0,borderShapeSupported:Ge(o),cornerShapeSupported:l?Vt(l):!1,textureBackend:r,textureImageRendering:a,textureProjection:i})}import{packTextureAtlasPlansWithScaleCore as Qa}from"@layoutit/polycss-core";function so(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 fn(e,t,n,o){return Qa(e,t,so(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 lo}from"@layoutit/polycss-core";var Ke=new Map;function yo(e){let t=Ke.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}),Ke.set(e,t),t.then(()=>{Ke.get(e)===t&&Ke.delete(e)},()=>{Ke.get(e)===t&&Ke.delete(e)})),t}function Se(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 gn(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function hn(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 fo(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,y=a.g,h=a.b;for(let x=0;x<u.length;x+=4)u[x+3]!==0&&(u[x]=hn(gn(u[x])*g),u[x+1]=hn(gn(u[x+1])*y),u[x+2]=hn(gn(u[x+2])*h));e.putImageData(f,l,s)}function go(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;Se(e,i),e.drawImage(t,n+(r-m)/2,o+(a-f)/2,m,f)}function mt(e,t){return Math.max(0,Math.min(t,e))}function Pn(e,t,n,o,r,a,i,l){let s=t.naturalWidth||t.width||1,d=t.naturalHeight||t.height||1,m=mt(Math.min(n.minU,n.maxU)*s,s),f=mt(Math.max(n.minU,n.maxU)*s,s),u=mt(Math.min(n.minV,n.maxV)*d,d),g=mt(Math.max(n.minV,n.maxV)*d,d),y=Math.floor(m),h=Math.floor(u),x=Math.ceil(f)-y,E=Math.ceil(g)-h;x<1&&(y=Math.floor(mt((n.minU+n.maxU)/2*s,s-1)),x=1),E<1&&(h=Math.floor(mt((n.minV+n.maxV)/2*d,d-1)),E=1),y=Math.max(0,Math.min(s-1,y)),h=Math.max(0,Math.min(d-1,h)),x=Math.max(1,Math.min(s-y,x)),E=Math.max(1,Math.min(d-h,E)),Se(e,l),e.drawImage(t,y,h,x,E,o,r,a,i)}function ho(e){return e==="repeat"||e==="mirrored-repeat"}function uo(e,t){return ho(e)?Math.floor(t):0}function co(e,t){return ho(e)?Math.ceil(t)-1:0}function mo(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function po(e,t,n,o,r,a,i){let l=r?uo(a,r.minU):0,s=r?co(a,r.maxU):0,d=r?uo(i,r.minV):0,m=r?co(i,r.maxV):0;for(let f=l;f<=s;f++)for(let u=d;u<=m;u++){let g=mo(a,f),y=mo(i,u);if(!g&&!y){e.drawImage(t,f*n,u*o);continue}e.save(),e.translate((g?f+1:f)*n,(y?u+1:u)*o),e.scale(g?-1:1,y?-1:1),e.drawImage(t,0,0),e.restore()}}function Bt(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 Et(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 Po(e,t,n,o){Se(e,o),e.beginPath(),Bt(e,t.x,t.y,t.screenPts),e.clip(),Se(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function zt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(Se(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function xo(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(),Se(e,o),e.beginPath(),Et(e,t.x,t.y,d,r,a),e.clip(),zt(e,t,o,r,a),s.uvAffine?(Se(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),po(e,n,i,l,s.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):s.uvSampleRect&&Pn(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(),Se(e,o),e.beginPath(),Et(e,t.x,t.y,t.screenPts,r,a),e.clip(),zt(e,t,o,r,a)),Se(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),po(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(),Se(e,o),e.beginPath(),Et(e,t.x,t.y,t.screenPts,r,a),e.clip(),zt(e,t,o,r,a)),Pn(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(),Se(e,o),e.beginPath(),Et(e,t.x,t.y,t.screenPts,r,a),e.clip(),zt(e,t,o,r,a)),go(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 y=g-o,h=u-r,x=y*y+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 bo(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(lo,lo/n),u=Math.max(2,Math.ceil(f*n)+1),g=!1;for(let y=0;y<l;y++)for(let h=0;h<i;h++){let x=(y*i+h)*4,E=d[x+3];if(E<ti||E===255)continue;let S=(r+h+.5)/n-t.x,A=(a+y+.5)/n-t.y;if(ri(S,A,t.screenPts,t.textureEdgeRepairEdges)>f)continue;let p=ai(m,i,l,h,y,u);p!==null&&(d[x]=m[p],d[x+1]=m[p+1],d[x+2]=m[p+2],d[x+3]=255,g=!0)}g&&e.putImageData(s,r,a)}function vo(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 yo(m))}));for(let m of e.entries){let f=m.texture?s.get(m.texture):null;if(!m.texture){i.save(),Po(i,m,t,o),i.restore();continue}f&&(i.save(),Se(i,o),i.beginPath(),Bt(i,m.x,m.y,m.screenPts),i.clip(),xo(i,m,f,o),i.restore()),m.texture&&t==="baked"&&(i.save(),Se(i,o),i.beginPath(),Bt(i,m.x,m.y,m.screenPts),i.clip(),fo(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),bo(i,m,o)}let d=await vo(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:d}}async function _t(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 bn,resolveSeamBleed as To,safePlanSeamBleedAmount as ui}from"@layoutit/polycss-core";var Mo=50,Eo=[.4,-.7,.59],Ao="#ffffff",Lo=1,Ro="#ffffff",wo=.4,J=1e-9,At=.75,Oo=32,ci=96,vn="0 48px 96px 48px",So,Co=Oo;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 Sn(){if(di())return"corner-bevel";let e=typeof navigator<"u"?navigator.userAgent:"";return/\bFirefox\//.test(e)?"border-large":"border"}function Cn(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==So&&(So=e,Co=/\bFirefox\//.test(e)?ci:Oo),Co}function ko(){return Sn()==="border-large"?vn:void 0}function mi(){let e=Sn();if(e==="corner-bevel")return;let t=e==="border-large"?vn:void 0;return t?{borderWidth:t}:void 0}function Do(e){let t=Sn();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"?vn:"")}function Be(e){let t=bn(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function Lt({r:e,g:t,b:n}){return`${e},${t},${n}`}function pi(e){return bn(e)?.alpha??1}function Nt({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 Io(e,t,n,o,r){let a=Be(e),i=Be(n),l=Be(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))),y=pi(e);return y<1?`rgba(${f}, ${u}, ${g}, ${y})`:Nt({r:f,g:u,b:g})}function Fo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=bn(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})`:Nt(a)}function Vo(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 xn(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 Ht(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 Qe(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 Ht(e,t);let o=hi(n);if(Math.abs(o)<=J)return Ht(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 Ht(e,t);let y=r*(u/g)*t,h=r*(-f/g)*t;a.push({a:[d[0]+y,d[1]+h],b:[m[0]+y,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 Ht(e,t);let u=n[s],g=f[0]-u[0],y=f[1]-u[1],h=Math.hypot(g,y);h>l?i.push(u[0]+g/h*l,u[1]+y/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 Qe([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 Qe([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,y=n+m,h=-n*r;if(Math.abs(h)<=J)return Qe([e,0,0,n,r,n],o);let x=f-g,E=u-y,S=(x*n+E*e)/h,A=g-S*t,p=y-S*n,L=-o*(e+a)/n,R=n+o,F=r+o*(t+i)/n,V=R,k=Math.max(2,o*4),N=A-e,X=p,B=Math.sqrt(N*N+X*X);B>k&&(A=e+N/B*k,p=X/B*k);let v=Math.sqrt(L*L+o*o);v>k&&(L=L/v*k,R=n+o/v*k);let c=F-r,P=Math.sqrt(c*c+o*o);return P>k&&(F=r+c/P*k,V=n+o/P*k),[A,p,L,R,F,V]}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?At: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)??To(i,At):0;return ui(r,m,u)})}function zo(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,y=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,A=Math.round(l*1e3)/1e3||0,p=Math.round(s*1e3)/1e3||0,L=Math.round(d*1e3)/1e3||0,R=Math.round(m*1e3)/1e3||0,F=Math.round(f*1e3)/1e3||0;return`matrix3d(${u},${g},${y},0,${h},${x},${E},0,${S},${A},${p},0,${L},${R},${F},1)`}function Si(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function Tn(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(Q=>{let le=i[Q.a],Z=i[Q.b];return{...Q,length:Math.hypot(Z[0]-le[0],Z[1]-le[1],Z[2]-le[2])}}).sort((Q,le)=>le.length-Q.length),d=s[0].a,m=s[0].b,f=s[0].c,u=i[d],g=i[m],y=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=[y[0]-u[0],y[1]-u[1],y[2]-u[2]],S=xn(E,x),A=[u[0]+x[0]*S,u[1]+x[1]*S,u[2]+x[2]*S],p=[A[0]-y[0],A[1]-y[1],A[2]-y[2]],L=Math.hypot(p[0],p[1],p[2]);if(L<=J)return null;let R=[p[0]/L,p[1]/L,p[2]/L];if(xn(yi(x,R),l)<0){let Q=m;if(m=d,d=Q,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 le=[y[0]-u[0],y[1]-u[1],y[2]-u[2]];S=xn(le,x),A=[u[0]+x[0]*S,u[1]+x[1]*S,u[2]+x[2]*S],p=[A[0]-y[0],A[1]-y[1],A[2]-y[2]];let Z=Math.hypot(p[0],p[1],p[2]);if(Z<=J)return null;R=[p[0]/Z,p[1]/Z,p[2]/Z]}let F=Cn(),V=Math.max(0,Math.min(h,S)),k=Math.max(0,h-V),N=[V,0,0,L,V+k,L],X=vi(e,d,m,f,N),B=X?li(N,X):xi(V,k,L,To(e.seamBleed,At)),v=[B[0],B[1]],c=[B[2],B[3]],P=[B[4],B[5]],b=(c[1]+P[1])/2,C=v[0]-c[0],T=P[0]-v[0],M=b-v[1];if(C<=J||T<=J||M<=J||!Number.isFinite(C+T+M))return null;let w=t==="dynamic",O=Be(e.polygon.color??"#cccccc"),_=w&&Lt(O)===o?.dynamicColorKey,j={color:w||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...w&&!_?{"--pnx":l[0].toFixed(4),"--pny":l[1].toFixed(4),"--pnz":l[2].toFixed(4),"--psr":(O.r/255).toFixed(4),"--psg":(O.g/255).toFixed(4),"--psb":(O.b/255).toFixed(4)}:w?{"--pnx":l[0].toFixed(4),"--pny":l[1].toFixed(4),"--pnz":l[2].toFixed(4)}:null},q=([Q,le])=>[y[0]+(Q-V)*x[0]+le*R[0],y[1]+(Q-V)*x[1]+le*R[1],y[2]+(Q-V)*x[2]+le*R[2]],U=q(v),z=q([c[0],b]),oe=q([P[0],b]),ie=F/2,K=[(oe[0]-z[0])/F,(oe[1]-z[1])/F,(oe[2]-z[2])/F],re=[U[0]-K[0]*ie,U[1]-K[1]*ie,U[2]-K[2]*ie],se=[(z[0]-re[0])/F,(z[1]-re[1])/F,(z[2]-re[2])/F],Me=[K[0],K[1],K[2],0,se[0],se[1],se[2],0,l[0],l[1],l[2],0,re[0],re[1],re[2],1].map(Q=>(Math.round(Q*1e3)/1e3||0).toString()).join(","),be=mi();return{transform:`matrix3d(${Me})`,...be??{},...j}}function jt(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 Qe([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 Qe([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,y=n+m,h=-n*r;if(Math.abs(h)<=J)return Qe([e,0,0,n,r,n],o);let x=f-g,E=u-y,S=(x*n+E*e)/h,A=g-S*t,p=y-S*n,L=-o*(e+a)/n,R=n+o,F=r+o*(t+i)/n,V=R,k=Math.max(2,o*4),N=A-e,X=p,B=Math.sqrt(N*N+X*X);B>k&&(A=e+N/B*k,p=X/B*k);let v=Math.sqrt(L*L+o*o);v>k&&(L=L/v*k,R=n+o/v*k);let c=F-r,P=Math.sqrt(c*c+o*o);return P>k&&(F=r+c/P*k,V=n+o/P*k),[A,p,L,R,F,V]}function Bo(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=Mo,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,y=l[1]*o,h=l[0]*o,x=l[2]*r,E=f-s,S=u-d,A=g-m,p=y-s,L=h-d,R=x-m,F=-(S*R-A*L),V=-(A*p-E*R),k=-(E*L-S*p),N=Math.sqrt(F*F+V*V+k*k);if(N<=J)return null;F/=N,V/=N,k/=N;let X=E*E+S*S+A*A,B=y-f,v=h-u,c=x-g,P=s-y,b=d-h,C=m-x,T=B*B+v*v+c*c,M=P*P+b*b+C*C,w=jt(n)?n.a:0,O=jt(n)?n.b:1,_=jt(n)?n.c:2,j=()=>n?Bo(e,t):null;if(!jt(n)){let ve=X;T>ve&&(w=1,O=2,_=0,ve=T),M>ve&&(w=2,O=0,_=1)}let q=_===0?s:_===1?f:y,U=_===0?d:_===1?u:h,z=_===0?m:_===1?g:x,oe=w===0?s:w===1?f:y,ie=w===0?d:w===1?u:h,K=w===0?m:w===1?g:x,re=O===0?s:O===1?f:y,se=O===0?d:O===1?u:h,Me=O===0?m:O===1?g:x,be=re-oe,Q=se-ie,le=Me-K,Z=Math.sqrt(be*be+Q*Q+le*le);if(Z<=J)return j();let D=be/Z,$=Q/Z,Y=le/Z,W=(q-oe)*D+(U-ie)*$+(z-K)*Y,G=oe+D*W-q,ae=ie+$*W-U,pe=K+Y*W-z,ue=Math.sqrt(G*G+ae*ae+pe*pe);if(ue<=J)return j();G/=ue,ae/=ue,pe/=ue;let me=Math.max(0,Math.min(Z,W)),Ce=Math.max(0,Z-me),fe=Ci(me,Ce,ue,At),ge=fe[0],Ie=fe[1],te=fe[2],H=fe[3],I=fe[4],ce=fe[5],Fe=(H+ce)/2,Ee=ge-te,xe=I-ge,Te=Fe-Ie;if(Ee<=J||xe<=J||Te<=J||!Number.isFinite(Ee+xe+Te))return j();let $e=1/Cn(),Ne=Ee+xe,We=Ne*$e,qe=(xe-Ee)*.5*$e,vt=Te*$e,St=ge-me-Ne*.5,Ve=Ie,ut=zo(D*We,$*We,Y*We,D*qe+G*vt,$*qe+ae*vt,Y*qe+pe*vt,F,V,k,q+D*St+G*Ve,U+$*St+ae*Ve,z+Y*St+pe*Ve),ze;if(Math.floor(t.colorFreezeFrames??1)!==0){let ve=t.directionalLight,je=t.ambientLight,Ae=ve?.direction??Eo,Ct=ve?.color??Ao,Re=Math.max(0,ve?.intensity??Lo),we=je?.color??Ro,Ea=Math.max(0,je?.intensity??wo),an=Math.sqrt(Ae[0]*Ae[0]+Ae[1]*Ae[1]+Ae[2]*Ae[2])||1,Aa=Ae[0]/an,La=Ae[1]/an,Ra=Ae[2]/an,wa=Re*Math.max(0,F*Aa+V*La+k*Ra),Qn=Io(e.color??"#cccccc",wa,Ct,we,Ea);ze=t.colorSteps?Fo(Qn,t.colorSteps):Qn}return{transform:ut,borderWidth:ko(),color:ze,basis:{a:w,b:O,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?Be(n):void 0,d=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&d&&s&&n&&(s=Vo(d,s,m),l=Nt(s)),e.style.color=l,e.__polycssStableTriangleColor=l,e.__polycssStableTriangleColorRgb=s}function Mn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!Ze())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)=>Bo(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,Do(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 Je(e,t,n={},o){return Ei(e,t,n,void 0,o)}function En(e,t,n){let o=new Set(n?.disable??[]);return pn(e,t,o)}import{computed as he,getCurrentScope as Ai,onScopeDispose as Li,ref as _o,watch as Ri}from"vue";function An(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Ho(e){return e.flatMap(t=>t.url?.startsWith("blob:")?[t.url]:[])}function Yt(e){return e.map(t=>({width:t.width,height:t.height,url:null}))}function No(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 et(e){e.length!==0&&(typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>An(e)):setTimeout(()=>An(e),0))}function tt(e,t,n=he(()=>{}),o=he(()=>{}),r=he(()=>{}),a=he(()=>{}),i=he(()=>{}),l=he(()=>{}),s=he(()=>!1)){let d=he(()=>new Set(l.value?.disable??[])),m=he(()=>!d.value.has("b")),f=he(()=>{let p=typeof document<"u"?document:null;return m.value&&(!p||dt(p))}),u=he(()=>!d.value.has("u")&&Ze()),g=he(()=>!d.value.has("i")&&t.value!=="dynamic"&&Ge()),y=he(()=>{let p=yn(e.value,t.value,d.value,typeof document<"u"?document:null,r.value,a.value,i.value);return fn(p,n.value,typeof document<"u"?document:null,o.value)}),h=_o(Yt(y.value.packed.pages)),x=_o({plans:e.value,entries:y.value.packed.entries,pages:Yt(y.value.packed.pages)}),E=[],S=0,A=!1;return Ri(()=>[y.value,t.value,s.value],([p,L,R],F,V)=>{let{packed:k,atlasScale:N}=p;if(R){let v=++S,c=e.value,P=k.entries;if(k.pages.length===0||typeof document>"u"){et(E),E=[],x.value={plans:c,entries:P,pages:Yt(k.pages)};return}let b=()=>A||v!==S,C=[];_t(k.pages,L,document,N,b).then(async T=>{if(C=Ho(T),await No(C),b()){et(C);return}let M=E;E=C,C=[],et(M),x.value={plans:c,entries:P,pages:T}}).catch(()=>{});return}let X=!1,B=[];if(V(()=>{X=!0,et(B)}),k.pages.length===0){et(E),E=[],h.value.length!==0&&(h.value=[]);return}typeof document>"u"||(h.value.some(v=>v.url)||(h.value=Yt(k.pages)),_t(k.pages,L,document,N,()=>X).then(async v=>{if(B=Ho(v),await No(B),X){et(B);return}let c=E;E=B,B=[],et(c),h.value=v}).catch(()=>{}))},{immediate:!0}),Ai()&&Li(()=>{A=!0,An(E),E=[]}),{plans:he(()=>s.value?x.value.plans:e.value),entries:he(()=>s.value?x.value.entries:y.value.packed.entries),pages:he(()=>s.value?x.value.pages:h.value),ready:he(()=>{let p=s.value?x.value.pages:h.value;return p.length===0||p.every(L=>!!L.url)}),useFullRectSolid:m,useProjectiveQuad:f,useStableTriangle:u,useBorderShape:g}}import{h as wi}from"vue";function nt({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let l=Tn(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 ot({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&&Ge(),m=!s||d?Di(e):null,f=t==="dynamic",u=Be(e.polygon.color??"#cccccc"),g=f&&Lt(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(([A,p])=>[`data-${A}`,String(p)])):{},E=o?.trim()||void 0,S=A=>{let p=A.el;p&&(m?p.style.setProperty("border-shape",m):p.style.removeProperty("border-shape"),zi(p))};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 rt({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let l=t==="dynamic",s=Be(e.polygon.color??"#cccccc"),d=l&&Lt(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,y])=>[`data-${g}`,String(y)])):{},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 Ln({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 jo}from"vue";import{formatMatrix3d as Yo,formatCssLengthPx as Le,resolvePolyTextureImageRendering as Xi}from"@layoutit/polycss-core";var $i=64;function at({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,y=e.canvasW||1,h=e.canvasH||1,x=t?`${Le(-e.x/y*u)} ${Le(-e.y/h*g)}`:void 0,E=t?`${Le(t.width/y*u)} ${Le(t.height/h*g)}`:void 0,S=d&&t?.url?`url(${t.url})`:void 0,A={transform:Yo(e.atlasMatrix),"--polycss-atlas-size":`${f}px`,"--polycss-atlas-width":Le(u),"--polycss-atlas-height":Le(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},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([R,F])=>[`data-${R}`,String(F)])):{},L=a?.trim()||void 0;return jo("s",{class:L,style:A,"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,...p,...l})}function it({plan:e,geometry:t,className:n,style:o,domAttrs:r,pointerEvents:a="auto"}){let i={transform:Yo(t.matrix),"--polycss-atlas-width":Le(t.leafWidth),"--polycss-atlas-height":Le(t.leafHeight),"--polycss-atlas-leaf-sizing":"image",backgroundImage:`url(${t.url})`,backgroundPosition:`${Le(t.backgroundPosition[0])} ${Le(t.backgroundPosition[1])}`,backgroundSize:`${Le(t.backgroundSize[0])} ${Le(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 jo("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 Go=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},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(de);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:a}=o,i=Ut(0),l=new Map,s={register(M,w){l.set(M,w),i.value++},unregister(M){l.delete(M),i.value++},version:i,getEntries(){return Array.from(l.values())}},d=new Set,m=Ut(!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=Ut(null),g=Ut(null),y=Pe(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??Wo,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(cn,y),Xo(g,M=>{r.value=M});let h=!1;Uo(()=>{h||typeof document<"u"&&(Ft(document),h=!0)}),Xo(()=>e.debugShowBackfaces,M=>{let w=g.value;w&&w.classList.toggle("polycss-debug-show-backfaces",!!M)});let x=Pe(()=>e.polygons??[]),E=Pe(()=>e.centerPolygons??null),S=Pe(()=>({directionalLight:e.directionalLight})),A=Mt(x,S),p=Pe(()=>E.value??x.value),L=Mt(p,S);Uo(()=>{r.value=g.value,a()}),Zi(a);let R=Pe(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality,textureLeafSizing:e.textureLeafSizing,textureImageRendering:e.textureImageRendering})),F=Pe(()=>{let M=e.textureLighting==="dynamic",w=M?void 0:e.directionalLight,O=M?void 0:e.ambientLight,_=Xt(A.value.polygons),j=e.seamBleed??Wo,q=j==="auto"||typeof j=="number"&&Number.isFinite(j)&&j>0?$t(A.value.polygons,{tileSize:R.value.tileSize,layerElevation:R.value.layerElevation,directionalLight:w,ambientLight:O}):null;return A.value.polygons.map((U,z)=>Je(U,z,{tileSize:R.value.tileSize,layerElevation:R.value.layerElevation,directionalLight:w,ambientLight:O,seamBleed:q?.has(z)?j:void 0,seamEdges:q?.get(z),textureEdgeRepairEdges:_[z]}))}),V=Pe(()=>e.textureLighting??"baked"),k=Pe(()=>e.textureQuality),N=Pe(()=>e.textureLeafSizing),X=Pe(()=>e.textureBackend),B=Pe(()=>e.textureImageRendering),v=Pe(()=>e.textureProjection),c=Pe(()=>e.strategies),P=tt(F,V,k,N,X,B,v,c),b=Pe(()=>{if(e.textureLighting!=="dynamic")return null;let M=e.directionalLight?.direction??[.4,-.7,.59],w=Ji(M),O=Math.hypot(w[0],w[1],w[2])||1,_=w[0]/O,j=w[1]/O,q=w[2]/O,U=qo(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],z=qo(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],oe=e.directionalLight?.intensity??1,ie=e.ambientLight?.intensity??.4,K=Me=>(Me/255).toFixed(4),re=q,se=Math.sign(re||1)*Math.max(Math.abs(re),.01);return{"--plx":_.toFixed(2),"--ply":j.toFixed(2),"--plz":q.toFixed(2),"--clx":_.toFixed(2),"--cly":j.toFixed(2),"--clz":se.toFixed(2),"--plr":K(U[0]),"--plg":K(U[1]),"--plb":K(U[2]),"--pli":oe.toFixed(4),"--par":K(z[0]),"--pag":K(z[1]),"--pab":K(z[2]),"--pai":ie.toFixed(4)}}),C=50;$o(()=>{let M=g.value;i.value;let w=s.getEntries();if(w.length===0){M&&M.style.removeProperty("--shadow-ground-cssz"),u.value!==null&&(u.value=null);return}let O=1/0;for(let q of w){let U=q();for(let z of U.polygons)for(let oe of z.vertices){let ie=oe[2]+(U.position[2]??0);ie<O&&(O=ie)}}if(!Number.isFinite(O)){M&&M.style.removeProperty("--shadow-ground-cssz"),u.value!==null&&(u.value=null);return}let _=e.shadow?.lift??.05,j=(O+_)*C;u.value!==j&&(u.value=j),M&&(e.textureLighting==="dynamic"?M.style.setProperty("--shadow-ground-cssz",j.toFixed(3)):M.style.removeProperty("--shadow-ground-cssz"))});let T=Pe(()=>{if(!e.autoCenter)return[0,0,0];let M=L.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 $o(()=>{o.autoCenterOffset.value=T.value}),Ki(()=>{}),()=>{let M=`polycss-scene${e.class?` ${e.class}`:""}`,w=R.value,O=P.entries.value.map((j,q)=>{if(j)return at({entry:j,page:P.pages.value[j.pageIndex],textureLighting:w.textureLighting??"baked",textureImageRendering:e.textureImageRendering});let U=F.value[q],z=U?Qi(U,{imageRendering:e.textureImageRendering,backend:e.textureBackend,projection:e.textureProjection}):null;return U&&z?it({plan:U,geometry:z}):!U||U.texture?null:P.useStableTriangle.value&&pt(U)?nt({entry:U,textureLighting:w.textureLighting??"baked"}):P.useProjectiveQuad.value&&yt(U)?rt({entry:U,textureLighting:w.textureLighting??"baked"}):P.useBorderShape.value||P.useFullRectSolid.value?ot({entry:U,textureLighting:w.textureLighting??"baked",forceBorderShape:!P.useFullRectSolid.value}):null}),_=t.default?.()??[];return Wi("div",{ref:g,class:M,"data-polycss-lighting":w.textureLighting??"baked","aria-hidden":"true",style:{...b.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([j])=>j!=="style"&&j!=="class"))},[...O,..._])}}});import{defineComponent as Ns,h as Xe,Teleport as js,computed as ee,inject as Ys,onMounted as Xs,onBeforeUnmount as Fn,ref as ht,watch as wt,watchEffect as ur}from"vue";import{buildBasisHints as $s,buildSharedEdgeMap as Us,cornerShapeGeometryForPlan as Ws,resolvePolyTextureLeafGeometry as qs,worldDirectionalLightToCss as Gs}from"@layoutit/polycss-core";import{BASE_TILE as qt,buildPolyMeshTransform as Zs,computeReceiverShadowFaces as Ks,computeSceneBbox as Qs,DEFAULT_SEAM_BLEED as Js,ensureCcw2D as el,inverseRotateVec3 as cr,findOverlappingPolygonDuplicates as dr,optimizeMeshPolygons as tl,parseHexColor as nl,prepareCasterEdgeOwners as ol,prepareCasterPolyItems as rl,prepareReceiverFacePlanes as al,projectCssVertexToGround as il,worldDirectionToCss as mr}from"@layoutit/polycss-core";import{ref as Rt,watch as es,onUnmounted as ts}from"vue";import{loadMesh as ns}from"@layoutit/polycss-core";var Zo=[],Rn=[];function Wt(e,t){let n=Rt(Zo),o=Rt(void 0),r=Rt(!!e.value),a=Rt(null),i=Rt(Rn),l=null;function s(){if(l){try{l.dispose()}catch{}l=null}}return es(e,(d,m,f)=>{if(!d){s(),n.value=Zo,o.value=void 0,r.value=!1,a.value=null,i.value=Rn;return}let u=!1;r.value=!0,a.value=null;let g=l;ns(d,t).then(y=>{if(u){try{y.dispose()}catch{}return}if(g)try{g.dispose()}catch{}l=y,n.value=y.polygons,o.value=y.voxelSource,r.value=!1,a.value=null,i.value=y.warnings??Rn}).catch(y=>{if(u)return;let h=y instanceof Error?y:new Error(String(y));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 ye,computeProjectiveQuadMatrix as os,normalFacesCamera as rs,parsePureColor as or,PROJECTIVE_QUAD_BLEED as as,resolveProjectiveQuadGuards as is,rotateVec3 as Ko,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,rr=1,ys=8,fs=as,Ye=1e-6,gs=is({bleed:0}),ar={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},kn=["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 Qo(e){let t=[];for(let n of kn)rs(ar[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],y=d[0]-n[0],h=d[2]-n[2];o-=f*h-u*y,r-=u*g-m*h,a-=m*y-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*ye,top:o*ye,width:Math.max(0,(l-r)*ye),height:Math.max(0,(i-o)*ye),z:a*ye,baseColor:m,bleed:wn()}:Math.abs(i-o)<=d?{axis:"x",face:n,left:r*ye,top:a*ye,width:Math.max(0,(l-r)*ye),height:Math.max(0,(s-a)*ye),z:-o*ye,baseColor:m,bleed:wn()}:Math.abs(l-r)<=d?{axis:"y",face:n,left:a*ye,top:o*ye,width:Math.max(0,(s-a)*ye),height:Math.max(0,(i-o)*ye),z:-r*ye,baseColor:m,bleed:wn()}:null}function wn(){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 Jo(e){return[e[1]*ye,e[0]*ye,e[2]*ye]}function er(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])<=Ye){if(Math.abs(t[0]-o)<=Ye)return"left";if(Math.abs(t[0]-r)<=Ye)return"right"}if(Math.abs(t[1]-n[1])<=Ye){if(Math.abs(t[1]-a)<=Ye)return"top";if(Math.abs(t[1]-i)<=Ye)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])<=Ye)){if(n!==null)return null;n=o}return n}function Ts(e,t,n){let o=t.vertices,r=Jo(o[n]),a=Jo(o[(n+1)%o.length]),i=Ss(e,er(e,r),er(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>Ye?{item:e,side:i,variableAxis:l,fixed:r,start:s,end:d}:null}function tr(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+Ye);for(let i of r)i.item.sourceIndex!==a.item.sourceIndex&&(tr(i),tr(a));r.push(a)}}}function Es(e){let t=or(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=or(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(${On(n.r)}, ${On(n.g)}, ${On(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 On(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),y=Es(t);if(y.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}, ${y.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 nr(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)??nr(e,t):nr(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:rr}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=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 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))),y=Math.min(s-1,Math.max(0,Math.floor((u.y-i)/m*s))),h=`${g}:${y}`,x=f.get(h);x||(x={tx:g,ty:y,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 ir(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(v=>v.face));n.classList.add("polycss-voxel-mesh");let s=zs(t);s!==rr&&n.style.setProperty("--polycss-voxel-primitive",`${s}px`);let d=new Map,m=(v,c)=>{let P=`${v}|${c}`,b=d.get(P);if(b)return b;let C=Rs(ar[v],c,r,a);return d.set(P,C),C},f=new Map,u=new Map,g=new Map,y=new Map;for(let v of i){let c=y.get(v.face);c||(c=[],y.set(v.face,c)),c.push(v)}let h="",x=0,E=new Set,S=v=>{let c=f.get(v.sourceIndex);return c||(c=t.createElement("b"),f.set(v.sourceIndex,c),Ps(c,m(v.face,v.baseColor),Fs(v,s))),c},A=v=>{let c=u.get(v);return c||(c=t.createElement("span"),c.className=`polycss-voxel-face polycss-voxel-face-${v}`,c.dataset.polycssVoxelFace=v,c.__polycssVoxelFaceHost=!0,u.set(v,c)),c},p=()=>{for(let v of Array.from(n.childNodes))if(!v.__polycssVoxelFaceHost)return v;return null},L=(v,c)=>{let P=c.map(T=>T.sourceIndex).join(",");if(g.get(v)===P)return;let b=A(v),C=t.createDocumentFragment();for(let T of c)C.appendChild(S(T));b.replaceChildren(C),g.set(v,P)},R=()=>{for(let v of kn)l.has(v)&&L(v,y.get(v)??[])},F=v=>new Set(v.split("|").filter(Boolean)),V=v=>{let c=F(v);return kn.filter(P=>c.has(P)&&l.has(P))},k=v=>{let c=0;for(let P of v)c+=y.get(P)?.length??0;return c},N=v=>{let c=new Set,P=[],b=new Map;for(let C of v){c.has(C.face)||(c.add(C.face),P.push(C.face));let T=b.get(C.face);T||(T=[],b.set(C.face,T)),T.push(C)}return{orderedFaces:P,itemsByFace:b}},X=(v,c)=>{let P=new Set(v);for(let b of E){if(P.has(b))continue;let C=u.get(b);C?.parentNode===n&&n.removeChild(C)}if(c){let b=t.createDocumentFragment();for(let C of v)b.appendChild(A(C));n.insertBefore(b,p()),E=P;return}for(let b=0;b<v.length;b+=1){let C=v[b],T=A(C);if(T.parentNode===n)continue;let M=null;for(let w=b+1;w<v.length;w+=1){let O=u.get(v[w]);if(O?.parentNode===n){M=O;break}}n.insertBefore(T,M??p())}E=P},B=(v,c,P)=>{if(!P){let w=V(v);X(w,!1),x=k(w);return}let b=new Set(v.split("|").filter(Boolean)),C=Hs(i,b,c),{orderedFaces:T,itemsByFace:M}=N(C);for(let w of T)L(w,M.get(w)??[]);X(T,!0),x=C.length};return R(),{get brushCount(){return x},render(v){h=Qo(v),B(h,v,!0)},syncCamera(v){let c=Qo(v);c!==h&&(h=c,B(c,v,!1))},dispose(){for(let v of u.values())v.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 Dn=new WeakMap;function sr(e,t){Dn.set(e,t)}function lr(e){Dn.delete(e)}function ft(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=Dn.get(t);if(n)return n}t=t.parentElement}return null}function gt(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 In(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=ft(r);if(a&>(r,e,t))return a}return null}var pr=new WeakMap,yr=new WeakMap;function sl(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 fr(e){if(e.length===0)return e;let t=Qs(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 ne=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},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=ee(()=>e.src??""),a=ee(()=>{let D={...e.parseOptions??{}};return e.mtl&&(D.mtlUrl=e.mtl),e.meshResolution!==void 0&&(D.meshResolution=e.meshResolution),Object.keys(D).length>0?D:void 0}),i=Wt(r,a.value),l=ee(()=>e.src?i.polygons.value:e.polygons??[]),s=ht(null),d=null;wt(l,()=>{s.value=null,d=null});let m=ee(()=>s.value??l.value),f=ee(()=>e.merge?tl(m.value,e.meshResolution!==void 0?{meshResolution:e.meshResolution}:void 0):m.value),u=ee(()=>e.autoCenter?fr(f.value):f.value),g=!t.polygon,y=oo(),h=Ys(de,null),x=ht(0),E;ur(D=>{E?.(),E=h?.store.subscribe(()=>{x.value++}),D(()=>{E?.(),E=void 0})});let S=ee(()=>e.textureLighting??y?.value.textureLighting??"baked"),A=ee(()=>y?.value.strategies),p=ee(()=>e.seamBleed??y?.value.seamBleed??Js),L=ee(()=>e.textureLeafSizing??y?.value.textureLeafSizing),R=ee(()=>e.textureImageRendering??y?.value.textureImageRendering),F=ee(()=>e.textureBackend??y?.value.textureBackend),V=ee(()=>e.textureProjection??y?.value.textureProjection),k=ee(()=>y?.value.directionalLight),N=ee(()=>y?.value.ambientLight),X=ee(()=>e.src?i.voxelSource.value:e.voxelSource??void 0),B=ee(()=>!!(X.value&&s.value===null&&!t.polygon&&!t.default&&S.value==="baked"&&!e.castShadow)),v=ee(()=>{if(S.value!=="dynamic")return null;let D=e.rotation;if(!D||D[0]===0&&D[1]===0&&D[2]===0)return null;let $=y?.value.directionalLight?.direction;if(!$)return null;let Y=cr($,D),W=Math.hypot(Y[0],Y[1],Y[2])||1;return{"--plx":(Y[0]/W).toFixed(2),"--ply":(Y[1]/W).toFixed(2),"--plz":(Y[2]/W).toFixed(2)}}),c=ht(e.rotation),P=ht(0),b=ee(()=>{let D=k.value;if(!D)return D;let $=Gs(D);return c.value?{...$,direction:cr($.direction,c.value)}:$}),C=void 0,T=ee(()=>{if(!g||B.value)return[];let D=Xt(u.value),$=p.value==="auto"||typeof p.value=="number"&&Number.isFinite(p.value)&&p.value>0?$t(u.value,{directionalLight:b.value,ambientLight:N.value}):null,Y=$s(u.value,{directionalLight:b.value,ambientLight:N.value});return u.value.map((W,G)=>Je(W,G,{directionalLight:b.value,ambientLight:N.value,seamBleed:$?.has(G)?p.value:void 0,seamEdges:$?.get(G),textureEdgeRepairEdges:D[G],lightOccludedPolyIndices:C},Y[G]))}),M=ee(()=>e.textureQuality),w=ee(()=>e.atomicAtlas),O=tt(T,S,M,L,F,R,V,A,w),_=[],j=()=>{let D=_.splice(0);for(let $ of D)$()};wt(()=>O.ready.value,D=>{D&&j()},{immediate:!0}),Fn(j);let q=ee(()=>g?En(O.plans.value,S.value,A.value):{});wt(()=>O.entries.value,()=>{e.atomicAtlas&&O.ready.value&&e.onFrameReady?.()},{flush:"sync"});let U=ee(()=>sl(q.value)),z=ee(()=>{if(!e.castShadow||y?.value.receiverRegistry?.hasAny.value)return null;let D=y?.value,$=D?.groundCssZ??null;if($===null)return null;let Y=D?.shadow,W=D?.directionalLight?.direction??[.4,-.7,.59],G=mr(W),ae=e.position?.[2]??0,pe=$-ae*qt,ue=dr(u.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),me=[],Ce=1/0,fe=1/0,ge=-1/0,Ie=-1/0,te=1/0,H=1/0,I=-1/0,ce=-1/0,Fe=u.value,Ee=T.value;for(let ze=0;ze<Fe.length;ze++){if(ue.has(ze)||!Ee[ze])continue;let je=Fe[ze],Ae=[];for(let Ct of je.vertices){let Re=[Ct[1]*qt,Ct[0]*qt,Ct[2]*qt];Re[0]<te&&(te=Re[0]),Re[1]<H&&(H=Re[1]),Re[0]>I&&(I=Re[0]),Re[1]>ce&&(ce=Re[1]);let we=il(Re,G,pe);Ae.push(we),we[0]<Ce&&(Ce=we[0]),we[1]<fe&&(fe=we[1]),we[0]>ge&&(ge=we[0]),we[1]>Ie&&(Ie=we[1])}me.push(Ae)}if(me.length===0)return null;let xe=Y?.maxExtend??2e3,Te=Math.max(Ce,te-xe),Ue=Math.max(fe,H-xe),$e=Math.min(ge,I+xe),Ne=Math.min(Ie,ce+xe),We=$e-Te,qe=Ne-Ue;if(!(We>0)||!(qe>0))return null;let vt=Y?.color??"#000000",St=Y?.opacity??.25,Ve=nl(vt)?.rgb??[0,0,0],ut="";for(let ze of me){let ve=el(ze);ut+=`M${(ve[0][0]-Te).toFixed(3)},${(ve[0][1]-Ue).toFixed(3)}`;for(let je=1;je<ve.length;je++)ut+=`L${(ve[je][0]-Te).toFixed(3)},${(ve[je][1]-Ue).toFixed(3)}`;ut+="Z"}return Xe("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(We),height:String(qe),viewBox:`0 0 ${We} ${qe}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${Te.toFixed(3)}px,${Ue.toFixed(3)}px,${pe.toFixed(3)}px)`}},[Xe("path",{d:ut,fill:`rgb(${Ve[0]},${Ve[1]},${Ve[2]})`,"fill-rule":"nonzero",stroke:`rgb(${Ve[0]},${Ve[1]},${Ve[2]})`,"stroke-width":"3","stroke-linejoin":"round",opacity:St.toFixed(4)})])}),oe=ee(()=>e.receiveShadow?Us(u.value):void 0),ie=ee(()=>{if(!e.receiveShadow)return[];let D=y?.value,$=D?.shadowRegistry;if(!$)return[];$.version.value,x.value;let Y=$.getEntries();if(Y.length===0)return[];let W=D?.directionalLight?.direction??[.4,-.7,.59],G=mr(W),ae=D?.shadow?.lift??.001,pe=al(u.value,e.position??[0,0,0],e.scale,new Set,ae,e.rotation);if(pe.length===0)return[];let ue=[],me=0,Ce=oe.value;for(let te of Y){let H=te(),I=H.renderedPolygonIndices,ce=rl(H.polygons,H.position,H.scale,I?xe=>I.has(xe):()=>!0,H.rotation??null),Fe=H.polygons===u.value,Ee;if(!Fe&&H.polygons.length>=40){let xe=H.rotation??null,Te=H.position,Ue=JSON.stringify(H.scale??null),$e=`${Te[0]},${Te[1]},${Te[2]}|${xe?xe.join(","):"n"}|${Ue}`,Ne=pr.get(H.polygons);(Ne===void 0||yr.get(H.polygons)!==$e)&&(Ne=ol(H.polygons,Te,H.scale,xe),pr.set(H.polygons,Ne),yr.set(H.polygons,$e)),Ee=Ne}ue.push({id:Symbol(`caster-${me++}`),items:ce,selfShadowEdgeMap:Fe?Ce:void 0,edgeOwners:Ee,casterPolygonCount:H.polygons.length})}let fe=h?.store.getState().cameraState,ge={rotX:fe?.rotX??65,rotY:fe?.rotY??45,meshRotation:e.rotation};return Ks({receiverPlanes:pe,receiverPolygons:u.value,receiverHasTexture:u.value.some(te=>te.texture!==void 0),casters:ue,lightDir:G,cameraRot:ge,ambientLight:D?.ambientLight,directionalLight:D?.directionalLight,shadow:{color:D?.shadow?.color,opacity:D?.shadow?.opacity??.25,maxExtend:D?.shadow?.maxExtend}}).map(te=>Xe("svg",{key:`receiver-${te.faceIndex}`,class:"polycss-shadow polycss-shadow-svg polycss-shadow-receiver","data-poly-shadow-type":"receiver","data-poly-shadow-receiver-face":String(te.faceIndex),"data-poly-shadow-receiver-polys":JSON.stringify(te.memberPolyIndices),width:String(te.width),height:String(te.height),viewBox:`0 0 ${te.width} ${te.height}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:te.matrixCss}},te.paths.map((H,I)=>Xe("path",{key:I,d:H.d,fill:te.fill,stroke:te.fill,"stroke-width":"3","stroke-linejoin":"round",opacity:te.opacity.toFixed(4),"data-poly-shadow-caster-polys":JSON.stringify(H.casterPolygonIndices)}))))}),K=Symbol();wt(()=>e.castShadow,(D,$,Y)=>{let W=y?.value.shadowRegistry;W&&(D?W.register(K,()=>{let G=dr(u.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),ae=new Set,pe=T.value;for(let ue=0;ue<pe.length;ue++)pe[ue]&&!G.has(ue)&&ae.add(ue);return{polygons:u.value,position:e.position??[0,0,0],scale:e.scale,rotation:e.rotation,renderedPolygonIndices:ae}}):W.unregister(K),Y(()=>W.unregister(K)))},{immediate:!0});let re=Symbol();wt(()=>e.receiveShadow,(D,$,Y)=>{let W=y?.value.receiverRegistry;W&&(D?W.register(re):W.unregister(re),Y(()=>W.unregister(re)))},{immediate:!0}),Fn(()=>{y?.value.shadowRegistry?.unregister(K),y?.value.receiverRegistry?.unregister(re)});let se=ht(null),Me={get element(){return se.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>d??u.value,setPolygons(D){let $=e.autoCenter?fr(D):D;d=$;let Y=se.value,W=Y&&g&&Mn(Y,$,{directionalLight:b.value,ambientLight:N.value,textureLighting:S.value,strategies:A.value,seamBleed:p.value,colorFrame:++P.value,colorFreezeFrames:0});s.value=D.slice()},updatePolygon(D,$){let Y=d??u.value,W=typeof D=="number"?D:Y.indexOf(D);W<0||W>=Y.length||(Object.assign(Y[W],$),s.value=Y.slice(),d=null)},rebakeAtlas:()=>{c.value=e.rotation},whenTexturesReady(){return O.ready.value?Promise.resolve():new Promise(D=>{_.push(D)})}};o(Me),Xs(()=>{se.value&&sr(se.value,Me)}),Fn(()=>{se.value&&lr(se.value)});let be=ht(null);ur(D=>{let $=se.value;if(be.value?.dispose(),be.value=null,!B.value||!$)return;let Y=ir({doc:$.ownerDocument,wrapper:$,polygons:u.value,directionalLight:b.value,ambientLight:N.value});if(!Y)return;let W=()=>{let ae=h?.store.getState().cameraState;return{rotX:ae?.rotX??65,rotY:ae?.rotY??45,meshRotation:e.rotation}};be.value=Y,Y.render(W());let G=h?.store.subscribe(()=>{Y.syncCamera(W())});D(()=>{G?.(),Y.dispose(),be.value===Y&&(be.value=null)})});let Q=null;function le(D,$,Y){let W=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let me=document.elementsFromPoint($,Y),Ce=new Set;for(let fe of me){let ge=ft(fe);ge&&!Ce.has(ge)&&(Ce.add(ge),W.push({object:ge}))}}let G=0,ae=0,pe=h?.cameraElRef.value;if(pe){let me=pe.getBoundingClientRect();me.width>0&&me.height>0&&(G=($-me.left)/me.width*2-1,ae=-((Y-me.top)/me.height*2-1))}let ue=0;return Q&&(ue=Math.hypot($-Q.x,Y-Q.y)),{object:W[0]?.object??Me,eventObject:Me,intersections:W,pointer:{x:G,y:ae},delta:ue,nativeEvent:D,stopPropagation:()=>D.stopPropagation()}}function Z(D,$,Y,W){D&&D(le($,Y,W))}return()=>{let $={transform:Zs({position:e.position,scale:e.scale,rotation:e.rotation}),...v.value??void 0,...n.style,...U.value??void 0},Y=Object.fromEntries(Object.entries(n).filter(([H])=>H!=="style"&&H!=="class")),W=`polycss-mesh${B.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,G={};e.onClick&&(G.onClick=H=>{let I=H;Z(e.onClick,I,I.clientX,I.clientY)}),e.onContextMenu&&(G.onContextmenu=H=>{let I=H;Z(e.onContextMenu,I,I.clientX,I.clientY)}),e.onDoubleClick&&(G.onDblclick=H=>{let I=H;Z(e.onDoubleClick,I,I.clientX,I.clientY)}),e.onWheel&&(G.onWheel=H=>{let I=H;Z(e.onWheel,I,I.clientX,I.clientY)}),G.onPointerdown=H=>{let I=H;Q={x:I.clientX,y:I.clientY},Z(e.onPointerDown,I,I.clientX,I.clientY)},G.onPointerup=H=>{let I=H;Z(e.onPointerUp,I,I.clientX,I.clientY),Q=null},e.onPointerMove&&(G.onPointermove=H=>{let I=H;Z(e.onPointerMove,I,I.clientX,I.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(G.onPointerenter=H=>{let I=H;Z(e.onPointerOver,I,I.clientX,I.clientY),Z(e.onPointerEnter,I,I.clientX,I.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(G.onPointerleave=H=>{let I=H;Z(e.onPointerOut,I,I.clientX,I.clientY),Z(e.onPointerLeave,I,I.clientX,I.clientY)}),e.onPointerCancel&&(G.onPointercancel=H=>{let I=H;Z(e.onPointerCancel,I,I.clientX,I.clientY),Q=null});let ae=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return Xe("div",{ref:se,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:$,...ae,...G,...Y},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return Xe("div",{ref:se,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:$,...ae,...G,...Y},t.error?.({error:i.error.value})??[]);let pe=u.value,ue=t.polygon?pe.map((H,I)=>Xe("template",{key:I},t.polygon?.({polygon:H,index:I}))):B.value?[]:O.entries.value.map((H,I)=>{if(H)return at({entry:H,page:O.pages.value[H.pageIndex],textureLighting:S.value,textureImageRendering:R.value,solidPaintDefaults:q.value});let ce=O.plans.value[I],Fe=ce?qs(ce,{imageRendering:R.value,backend:F.value,projection:V.value}):null;if(ce&&Fe)return it({plan:ce,geometry:Fe});if(!ce||ce.texture)return null;if(yt(ce))return rt({entry:ce,textureLighting:S.value,solidPaintDefaults:q.value});if(pt(ce))return nt({entry:ce,textureLighting:S.value,solidPaintDefaults:q.value});let Ee=A.value?.disable?.includes("i")?null:Ws(ce);return Ee?Ln({entry:ce,geometry:Ee,textureLighting:S.value,solidPaintDefaults:q.value}):ot({entry:ce,textureLighting:S.value,solidPaintDefaults:q.value,forceBorderShape:!O.useFullRectSolid.value})}),me=t.default?.()??[],Ce=z.value,fe=Ce?[Ce]:[],ge=ie.value,Ie=y?.value?.sceneEl??null,te=Ie&&ge.length>0?[Xe(js,{to:Ie},ge)]:[];return Xe("div",{ref:se,class:W,style:$,...ae,...G,...Y},[...fe,...te,...ue,...me])}}});import{defineComponent as ll,h as gr,computed as Vn}from"vue";import{BASE_TILE as Ot}from"@layoutit/polycss-core";function ul(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)*Ot,f=(e?.[0]??0)*Ot,u=(e?.[2]??0)*Ot,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 hr=ll({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=Vn(()=>e.width*Ot),n=Vn(()=>e.height*Ot),o=Vn(()=>ul(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),gr("div",{class:e.class?`polycss-iframe ${e.class}`:"polycss-iframe",style:r},[gr("iframe",a)])}}});import{defineComponent as cl,h as dl,computed as ml}from"vue";var Pr=cl({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=ml(()=>{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()=>dl(ne,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as xr}from"vue";function pl(e){return typeof e=="function"?xr(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):xr(()=>({texture:e.texture,key:e.key}))}import{computed as _e,defineComponent as yl,h as br}from"vue";import{resolvePolyTextureLeafGeometry as fl}from"@layoutit/polycss-core";var gl=4;function Gt(e,t=gl){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function hl(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 Pl({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,y=1/u,h=1/g,x=Math.max(m,f),E=s/u,S=(1-x)/g,A={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Gt(y)} ${Gt(h)}`,backgroundPosition:`${Gt(-E)} ${Gt(-S)}`,backgroundRepeat:"no-repeat",imageRendering:l==="pixelated"?"pixelated":void 0,pointerEvents:i==="none"?"none":void 0,...r},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([R,F])=>[`data-${R}`,String(F)])):{},L=o?.trim()||void 0;return br("i",{class:L,style:A,"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,...p,...a})}var vr=yl({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=_e(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=_e(()=>e.textureQuality??e.context?.textureQuality),r=_e(()=>e.textureLeafSizing??e.context?.textureLeafSizing),a=_e(()=>e.textureImageRendering??e.context?.textureImageRendering),i=_e(()=>e.textureBackend??e.context?.textureBackend),l=_e(()=>e.textureProjection??e.context?.textureProjection),s=_e(()=>e.material?.texture??e.texture),d=_e(()=>e.material&&e.uvs?hl(e.uvs):null),m=_e(()=>{let g=e.context?.tileSize??50;return Je({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=_e(()=>d.value?[]:[m.value]),u=tt(f,n,o,r,i,a,l);return()=>{let g=m.value,y=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[L,R]of Object.entries(e.data))E[`data-${L}`]=String(R);let S={...t,...E},A=Object.fromEntries(Object.entries(S).filter(([L])=>L!=="class"&&L!=="style")),p;if(d.value&&e.material&&g)p=Pl({plan:g,material:e.material,uvRect:d.value,className:S.class??void 0,style:S.style,domAttrs:A,pointerEvents:e.pointerEvents??"auto",imageRendering:a.value});else if(y)p=at({entry:y,page:u.pages.value[y.pageIndex],textureLighting:n.value,textureImageRendering:a.value,className:S.class??void 0,style:S.style,domAttrs:A,pointerEvents:e.pointerEvents??"auto"});else{let L=g?fl(g,{imageRendering:a.value,backend:i.value,projection:l.value}):null;g&&L&&(p=it({plan:g,geometry:L,className:S.class??void 0,style:S.style,domAttrs:A,pointerEvents:e.pointerEvents??"auto"}))}return!p&&g&&!g.texture&&(p=pt(g)?nt({entry:g,textureLighting:n.value,className:S.class??void 0,style:S.style,domAttrs:A,pointerEvents:e.pointerEvents??"auto"}):yt(g)?rt({entry:g,textureLighting:n.value,className:S.class??void 0,style:S.style,domAttrs:A,pointerEvents:e.pointerEvents??"auto"}):ot({entry:g,textureLighting:n.value,className:S.class??void 0,style:S.style,domAttrs:A,pointerEvents:e.pointerEvents??"auto"})),p?x?br("div",{class:"polycss-poly-wrapper",style:{transform:x,position:"absolute",transformStyle:"preserve-3d"}},[p]):p:null}}});import{computed as Oe,defineComponent as ke,h as De}from"vue";import{boxPolygons as xl,planePolygons as bl,ringPolygons as vl,octahedronPolygons as Sl,spherePolygons as Cl,tetrahedronPolygons as Tl,icosahedronPolygons as Ml,dodecahedronPolygons as El,cylinderPolygons as Al,conePolygons as Ll,torusPolygons as Rl}from"@layoutit/polycss-core";var Sr=ke({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=Oe(()=>xl({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()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Cr=ke({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=Oe(()=>bl({axis:e.axis,size:e.size,offset:e.offset,along:e.along,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Tr=ke({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=Oe(()=>vl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Mr=ke({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=Oe(()=>Sl({center:e.center,size:e.size,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Er=ke({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=Oe(()=>Tl({size:e.size,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Ar=ke({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=Oe(()=>Ml({size:e.size,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Lr=ke({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=Oe(()=>El({size:e.size,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Rr=ke({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=Oe(()=>Cl({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),wr=ke({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=Oe(()=>Al({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Or=ke({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=Oe(()=>Ll({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),kr=ke({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=Oe(()=>Rl({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>De(ne,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as wl,inject as Ol,onMounted as kl,onBeforeUnmount as Dl,watch as zn,ref as Il}from"vue";import{BASE_TILE as Dr}from"@layoutit/polycss-core";var Fl=150,Ir=4,Vl=513e-6,zl=10,Bl=3,Fr=16.67,_l=50,Vr=.1,zr=10,Br=0,_r=5e3,Hl=.3,Nl=.05;function jl(e){return e===!0?-1:e===void 0||e===!1?1:e}function Yl(e,t,n,o,r){let a=jl(r),i=e/Ir*a,l=t/Ir*a;return{rotX:n-l,rotY:((o-i)%360+360)%360}}function Hr(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),l=-e/(a*Dr),s=-t/(a*Dr*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 Nr=wl({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:zr},minDistance:{type:Number,default:Br},maxDistance:{type:Number,default:_r},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Ol(de,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=Il(!1),y=null,h=null,x=null;function E(){let p=a.value;if(!p)return;let L=!1,R={x:0,y:0},F=c=>{if(e.drag&&f===null&&c.isPrimary!==!1){c.preventDefault(),f=c.pointerId,u={x:c.clientX,y:c.clientY},p.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(g.value=!0),d()}},V=c=>{if(f===null||c.pointerId!==f||!e.drag)return;c.preventDefault();let P=c.clientX-u.x,b=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:w}=Hr(P,b,T.zoom,T.rotX,T.rotY);C.update({target:[T.target[0]+M,T.target[1]+w,T.target[2]]})}else{let{rotX:M,rotY:w}=Yl(P,b,T.rotX,T.rotY,e.invert);C.update({rotX:M,rotY:w})}i(),o.updateCameraFromRef(C),s()},k=c=>{if(f===c.pointerId){f=null,p.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}g.value=!1,m()}},N=c=>{c.preventDefault()},X=c=>{c.button===2&&(L=!0,R={x:c.clientX,y:c.clientY})},B=c=>{if(!L||!e.drag)return;let P=c.clientX-R.x,b=c.clientY-R.y;R={x:c.clientX,y:c.clientY};let C=r.value,T=C.state,{dWorldX:M,dWorldY:w}=Hr(P,b,T.zoom,T.rotX,T.rotY);C.update({target:[T.target[0]+M,T.target[1]+w,T.target[2]]}),i(),o.updateCameraFromRef(C),s()},v=c=>{c.button===2&&L&&(L=!1,m())};p.style.cursor="grab",p.style.touchAction="none",p.style.userSelect="none",p.addEventListener("pointerdown",F),p.addEventListener("pointermove",V),p.addEventListener("pointerup",k),p.addEventListener("pointercancel",k),p.addEventListener("contextmenu",N),p.addEventListener("mousedown",X),p.addEventListener("mousemove",B),p.addEventListener("mouseup",v),y=()=>{p.removeEventListener("pointerdown",F),p.removeEventListener("pointermove",V),p.removeEventListener("pointerup",k),p.removeEventListener("pointercancel",k),p.removeEventListener("contextmenu",N),p.removeEventListener("mousedown",X),p.removeEventListener("mousemove",B),p.removeEventListener("mouseup",v),p.style.cursor="",p.style.touchAction="",p.style.userSelect=""}}function S(){let p=a.value;if(!p)return;let L=!1,R=null,F=V=>{if(!e.wheel)return;V.preventDefault();let k=V.deltaMode===1?16:V.deltaMode===2?100:1,N=V.deltaY*k;V.ctrlKey?N*=zl:N*=Bl;let X=r.value;if(e.dolly){let B=e.minDistance??Br,v=e.maxDistance??_r,c=Math.max(B,Math.min(v,X.state.distance+N*Nl));X.update({distance:c})}else{let B=Math.exp(-N*Vl),v=e.minZoom??Vr,c=e.maxZoom??zr,P=Math.max(v,Math.min(c,X.state.zoom*B));X.update({zoom:P})}i(),o.updateCameraFromRef(X),L||(L=!0,d()),s(),R!==null&&clearTimeout(R),R=setTimeout(()=>{R=null,L=!1,m()},Fl)};p.addEventListener("wheel",F,{passive:!1}),h=()=>{p.removeEventListener("wheel",F),R!==null&&clearTimeout(R)}}function A(){let p=null,L=!1,R=0,F=V=>{if(L)return;let k=e.animate;if(!k){p=requestAnimationFrame(F);return}if(g.value)R=V;else{let N=Math.min(_l,R?V-R:Fr);R=V;let B=(k.speed??Hl)*(N/Fr),v=r.value,c=v.state;if(k.axis==="x"){let P=((c.rotX+B)%360+360)%360;v.update({rotX:P})}else{let P=((c.rotY+B)%360+360)%360;v.update({rotY:P})}i(),o.updateCameraFromRef(v),s()}p=requestAnimationFrame(F)};p=requestAnimationFrame(F),x=()=>{L=!0,p!==null&&cancelAnimationFrame(p),x=null}}return kl(()=>{e.drag&&E(),e.wheel&&S(),e.animate&&A()}),Dl(()=>{y?.(),h?.(),x?.(),y=null,h=null}),zn(()=>e.drag,p=>{p&&!y&&E(),!p&&y&&(y(),y=null)}),zn(()=>e.wheel,p=>{p&&!h&&S(),!p&&h&&(h(),h=null)}),zn(()=>!!e.animate,p=>{p&&!x&&A(),!p&&x&&x()}),()=>null}});import{defineComponent as Xl,inject as $l,onMounted as Ul,onBeforeUnmount as Wl,watch as Bn,ref as ql}from"vue";import{BASE_TILE as jr}from"@layoutit/polycss-core";var Gl=150,Yr=4,Zl=513e-6,Kl=10,Ql=3,Xr=16.67,Jl=50,$r=.1,Ur=10,Wr=0,qr=5e3,eu=.3,tu=.05;function nu(e){return e===!0?-1:e===void 0||e===!1?1:e}function Gr(e,t,n,o,r){let a=nu(r),i=e/Yr*a,l=t/Yr*a;return{rotX:n-l,rotY:((o-i)%360+360)%360}}function ou(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),l=-e/(a*jr),s=-t/(a*jr*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 Zr=Xl({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:$r},maxZoom:{type:Number,default:Ur},minDistance:{type:Number,default:Wr},maxDistance:{type:Number,default:qr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=$l(de,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=ql(!1),y=null,h=null,x=null;function E(){let p=a.value;if(!p)return;let L=!1,R={x:0,y:0},F=c=>{if(e.drag&&f===null&&c.isPrimary!==!1){c.preventDefault(),f=c.pointerId,u={x:c.clientX,y:c.clientY},p.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(g.value=!0),d()}},V=c=>{if(f===null||c.pointerId!==f||!e.drag)return;c.preventDefault();let P=c.clientX-u.x,b=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:w}=Gr(P,b,T.rotX,T.rotY,e.invert);C.update({rotX:M,rotY:w})}else{let{dWorldX:M,dWorldY:w}=ou(P,b,T.zoom,T.rotX,T.rotY);C.update({target:[T.target[0]+M,T.target[1]+w,T.target[2]]})}i(),o.updateCameraFromRef(C),s()},k=c=>{if(f===c.pointerId){f=null,p.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}g.value=!1,m()}},N=c=>{c.preventDefault()},X=c=>{c.button===2&&(L=!0,R={x:c.clientX,y:c.clientY})},B=c=>{if(!L||!e.drag)return;let P=c.clientX-R.x,b=c.clientY-R.y;R={x:c.clientX,y:c.clientY};let C=r.value,T=C.state,{rotX:M,rotY:w}=Gr(P,b,T.rotX,T.rotY,e.invert);C.update({rotX:M,rotY:w}),i(),o.updateCameraFromRef(C),s()},v=c=>{c.button===2&&L&&(L=!1,m())};p.style.cursor="grab",p.style.touchAction="none",p.style.userSelect="none",p.addEventListener("pointerdown",F),p.addEventListener("pointermove",V),p.addEventListener("pointerup",k),p.addEventListener("pointercancel",k),p.addEventListener("contextmenu",N),p.addEventListener("mousedown",X),p.addEventListener("mousemove",B),p.addEventListener("mouseup",v),y=()=>{p.removeEventListener("pointerdown",F),p.removeEventListener("pointermove",V),p.removeEventListener("pointerup",k),p.removeEventListener("pointercancel",k),p.removeEventListener("contextmenu",N),p.removeEventListener("mousedown",X),p.removeEventListener("mousemove",B),p.removeEventListener("mouseup",v),p.style.cursor="",p.style.touchAction="",p.style.userSelect=""}}function S(){let p=a.value;if(!p)return;let L=!1,R=null,F=V=>{if(!e.wheel)return;V.preventDefault();let k=V.deltaMode===1?16:V.deltaMode===2?100:1,N=V.deltaY*k;V.ctrlKey?N*=Kl:N*=Ql;let X=r.value;if(e.dolly){let B=e.minDistance??Wr,v=e.maxDistance??qr,c=Math.max(B,Math.min(v,X.state.distance+N*tu));X.update({distance:c})}else{let B=Math.exp(-N*Zl),v=e.minZoom??$r,c=e.maxZoom??Ur,P=Math.max(v,Math.min(c,X.state.zoom*B));X.update({zoom:P})}i(),o.updateCameraFromRef(X),L||(L=!0,d()),s(),R!==null&&clearTimeout(R),R=setTimeout(()=>{R=null,L=!1,m()},Gl)};p.addEventListener("wheel",F,{passive:!1}),h=()=>{p.removeEventListener("wheel",F),R!==null&&clearTimeout(R)}}function A(){let p=null,L=!1,R=0,F=V=>{if(L)return;let k=e.animate;if(!k){p=requestAnimationFrame(F);return}if(g.value)R=V;else{let N=Math.min(Jl,R?V-R:Xr);R=V;let B=(k.speed??eu)*(N/Xr),v=r.value,c=v.state;if(k.axis==="x"){let P=((c.rotX+B)%360+360)%360;v.update({rotX:P})}else{let P=((c.rotY+B)%360+360)%360;v.update({rotY:P})}i(),o.updateCameraFromRef(v),s()}p=requestAnimationFrame(F)};p=requestAnimationFrame(F),x=()=>{L=!0,p!==null&&cancelAnimationFrame(p),x=null}}return Ul(()=>{e.drag&&E(),e.wheel&&S(),e.animate&&A()}),Wl(()=>{y?.(),h?.(),x?.(),y=null,h=null}),Bn(()=>e.drag,p=>{p&&!y&&E(),!p&&y&&(y(),y=null)}),Bn(()=>e.wheel,p=>{p&&!h&&S(),!p&&h&&(h(),h=null)}),Bn(()=>!!e.animate,p=>{p&&!x&&A(),!p&&x&&x()}),()=>null}});import{defineComponent as ru,h as Zt,inject as Kr,onBeforeUnmount as Qr,onMounted as _n,ref as kt,computed as Pt}from"vue";import{arrowPolygons as au,eulerXYZFromQuat as iu,planePolygons as su,quatFromAxisAngle as lu,quatFromEulerXYZ as uu,quatMultiply as cu,ringQuadPolygons as du}from"@layoutit/polycss-core";var Kt="#ff3653",Qt="#8adb00",Jt="#2c8fff",mu=.6,pu=.8,yu=1,He=50,Jr=60,fu=.6,gu=.0125,hu=.15,Pu=.04,xu=1,ea=.02,Hn=1.04,bu=.1,vu=.25,sa=1e-4,Dt={0:1,1:0,2:2},ta=[{cssAxis:0,sign:1,key:"x",color:Kt},{cssAxis:0,sign:-1,key:"-x",color:Kt},{cssAxis:1,sign:1,key:"y",color:Qt},{cssAxis:1,sign:-1,key:"-y",color:Qt},{cssAxis:2,sign:1,key:"z",color:Jt},{cssAxis:2,sign:-1,key:"-z",color:Jt}],na=[{cssAxis:0,key:"x",color:Kt},{cssAxis:1,key:"y",color:Qt},{cssAxis:2,key:"z",color:Jt}],oa=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Jt},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Qt},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Kt}];function Nn(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 en(e,t){return!t||t<=0?e:Math.round(e/t)*t}function Su(e){return e.replace("-","")[0]}function jn(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 Cu(e){if(e.length===0)return Jr;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)*He*fu:Jr}function Tu(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*He,(t+r)/2*He,(o+i)/2*He]:[0,0,0]}function ra(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<sa)return;let d=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=u=>{let g=u.clientX-e.startClientX,y=u.clientY-e.startClientY,h=(g*i+y*l)/s;h=en(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 aa(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(),y=u.getBoundingClientRect();return e.wrapper.removeChild(u),{x:(y.left-g.left)/o,y:(y.top-g.top)/o}}let a=r(t),i=r(n),l=a.x*i.y-i.x*a.y;if(Math.abs(l)<sa)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,y=(i.y*u-i.x*g)/l,h=(-a.y*u+a.x*g)/l;y=en(y,e.translationSnap),h=en(h,e.translationSnap);let x=[s[0]+y*t[0]+h*n[0],s[1]+y*t[1]+h*n[1],s[2]+y*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 ia(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=uu(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=en(g,e.rotationSnap);let y=[0,0,0];y[e.cssAxis]=1;let h=lu(y,g*Math.PI/180),x=iu(cu(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 Mu(e){return!!e&&typeof e=="object"&&"value"in e}function Eu(e){return e?Mu(e)?e.value??null:e:null}var la=ru({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=kt(null),o=kt(null),r=kt(new Map),a=Pt(()=>Eu(e.object)),i=kt(0);_n(()=>{i.value++});let l=kt(0),s=Kr(de,void 0),d=null;_n(()=>{let c=s?.store;c&&(d=c.subscribe(()=>{l.value++}))}),Qr(()=>{d?.()});function m(){l.value;let c=s?.store.getState().cameraState;return{rotX:c?.rotX??65,rotY:c?.rotY??45}}let f=Pt(()=>(i.value,Cu(a.value?.getPolygons()??[]))),u=Pt(()=>f.value*e.size);function g(c){return o.value===c?yu:n.value===c?pu:mu}function y(){t("change")}function h(c){t("objectChange",c)}function x(c){t("draggingChanged",c)}function E(){t("mouseDown")}function S(){t("mouseUp")}let A=Kr(de,void 0),p=null;_n(()=>{let c=A?.cameraElRef.value;if(!c)return;let P=b=>{let C=a.value;if(!C||!e.enabled||b.target?.closest(".polycss-transform-gizmo"))return;let M={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let O of oa){let _=["x","y","z"][O.axisA],j=["x","y","z"][O.axisB];if(!M[_]||!M[j])continue;let q=document.querySelector(`.polycss-transform-plane--${O.key}`);if(!q||!gt(q,b.clientX,b.clientY))continue;b.preventDefault(),b.stopPropagation();let U=q.closest("[data-poly-transform-controls]");if(!U)return;o.value=O.key,aa({axisA:O.axisA,axisB:O.axisB,probeDistanceCss:u.value,wrapper:U,target:C,startClientX:b.clientX,startClientY:b.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:z=>{z||(o.value=null),x(z)}});return}let w=e.mode==="translate"?ta:na;for(let O of w){let _=O.key.replace("-","")[0];if(!M[_])continue;let j=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${O.key}`);if(!j||!(e.mode==="rotate"?gt(j,b.clientX,b.clientY):gt(j,b.clientX,b.clientY)))continue;b.preventDefault(),b.stopPropagation();let U=j.closest("[data-poly-transform-controls]");if(!U)return;if(o.value=O.key,e.mode==="translate"){let z=O;ra({cssAxis:z.cssAxis,sign:z.sign,shaftLengthCss:u.value,wrapper:U,target:C,startClientX:b.clientX,startClientY:b.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:oe=>{oe||(o.value=null),x(oe)}})}else ia({cssAxis:O.cssAxis,wrapper:U,target:C,startClientX:b.clientX,startClientY:b.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:z=>{z||(o.value=null),x(z)}});return}};c.addEventListener("pointerdown",P),p=()=>c.removeEventListener("pointerdown",P)}),Qr(()=>{p?.()});let L=Pt(()=>{if(e.mode!=="translate")return[];i.value;let P=u.value/He,{rotX:b,rotY:C}=m();return ta.filter(T=>({x:e.showX,y:e.showY,z:e.showZ})[Su(T.key)]).map(T=>{let M=g(T.key),w=jn(T.cssAxis,T.sign,b,C);return{spec:T,polygons:au({axis:Dt[T.cssAxis],sign:T.sign,shaftLength:P,shaftHalfThickness:P*gu,headLength:P*hu,headHalfThickness:P*Pu,color:Nn(T.color,M),shaft:!w})}})}),R=Pt(()=>{if(e.mode!=="translate")return[];i.value;let P=u.value/He,b={x:e.showX,y:e.showY,z:e.showZ},C=["x","y","z"],{rotX:T,rotY:M}=m(),w=P*vu;return oa.filter(O=>b[C[O.axisA]]&&b[C[O.axisB]]).map(O=>{let _=g(O.key),j=Dt[O.perpAxis],q=(j+1)%3,U=(j+2)%3,z=Dt[q],oe=Dt[U],ie=jn(z,1,T,M)?-1:1,K=jn(oe,1,T,M)?-1:1;return{spec:O,polygons:su({axis:j,size:P*bu,offset:[ie*w,K*w],color:Nn(O.color,_)})}})}),F=Pt(()=>{if(e.mode!=="rotate")return[];i.value;let b=u.value*xu/He*Hn;return na.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[C.key]).map(C=>{let T=g(C.key);return{spec:C,polygons:du({axis:Dt[C.cssAxis],outerRadius:b,color:Nn(C.color,T)})}})}),V=(1-ea)/Hn,k=(1+ea)/Hn;function N(c){return P=>{if(!e.enabled)return;let b=a.value;if(!b)return;P.stopPropagation();let T=P.eventObject.element?.closest("[data-poly-transform-controls]");T&&(o.value=c.key,ra({cssAxis:c.cssAxis,sign:c.sign,shaftLengthCss:u.value,wrapper:T,target:b,startClientX:P.nativeEvent.clientX,startClientY:P.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:M=>{M||(o.value=null),x(M)}}))}}function X(c){return P=>{if(!e.enabled)return;let b=a.value;if(!b)return;P.stopPropagation();let T=P.eventObject.element?.closest("[data-poly-transform-controls]");T&&(o.value=c.key,aa({axisA:c.axisA,axisB:c.axisB,probeDistanceCss:u.value,wrapper:T,target:b,startClientX:P.nativeEvent.clientX,startClientY:P.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:M=>{M||(o.value=null),x(M)}}))}}function B(c){return P=>{if(!e.enabled)return;let b=a.value;if(!b)return;let C=P.eventObject.element;P.stopPropagation();let T=C?.closest("[data-poly-transform-controls]");T&&(o.value=c.key,ia({cssAxis:c.cssAxis,wrapper:T,target:b,startClientX:P.nativeEvent.clientX,startClientY:P.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:h,onMouseDown:E,onMouseUp:S,onDraggingChanged:M=>{M||(o.value=null),x(M)}}))}}function v(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],b=Tu(c.getPolygons()),C=P[1]*He+b[0],T=P[0]*He+b[1],M=P[2]*He+b[2],w={transform:`translate3d(${C}px, ${T}px, ${M}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},O=e.mode==="translate"?[...L.value.map(({spec:_,polygons:j})=>Zt(ne,{key:`arrow-${_.key}`,polygons:j,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${_.key}`,textureLighting:"baked",onPointerDown:N(_),...v(_.key)})),...R.value.map(({spec:_,polygons:j})=>Zt(ne,{key:`plane-${_.key}`,polygons:j,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${_.key}`,textureLighting:"baked",onPointerDown:X(_),...v(_.key)}))]:F.value.map(({spec:_,polygons:j})=>Zt(ne,{key:_.key,polygons:j,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${_.key}`,style:{"--ring-inner-ratio":V,"--ring-outer-ratio":k},textureLighting:"baked",onPointerDown:B(_),...v(_.key)}));return Zt("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:w},O)}}});import{defineComponent as Au,inject as Lu,onMounted as Ru,onBeforeUnmount as wu,watch as Ou}from"vue";import{BASE_TILE as ku}from"@layoutit/polycss-core";var Du={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 Yn(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 ca=new Set(["KeyW","ArrowUp"]),da=new Set(["KeyS","ArrowDown"]),ma=new Set(["KeyA","ArrowLeft"]),pa=new Set(["KeyD","ArrowRight"]),ya=new Set(["Space"]),Xn=new Set(["ControlLeft","ControlRight"]);function ua(e){return ca.has(e)||da.has(e)||ma.has(e)||pa.has(e)||ya.has(e)||Xn.has(e)}function Iu(){return{change:[],start:[],end:[]}}function xt(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var fa=Au({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=Lu(de,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=Yn(Du,e),d=[0,0,0],m=null,f=0,u=!1,g=!1,y=!1,h=new Set,x=0,E=0,S=Iu();function A(c,P){let b=c*Math.PI/180,C=P*Math.PI/180;return[-Math.sin(b)*Math.cos(C),-Math.sin(b)*Math.sin(C),-Math.cos(b)]}function p(){let c=i.value,P=c?getComputedStyle(c).perspective:"",b=parseFloat(P);return(Number.isFinite(b)&&b>0?b:32e3)/ku}function L(){let c=a.value.state,P=A(c.rotX??90,c.rotY??0),b=p();return[d[0]+P[0]*b,d[1]+P[1]*b,d[2]+P[2]*b]}function R(){let c=L(),P=a.value;P.update({target:c}),l(),r.updateCameraFromRef(P)}let F=.05;function V(c){if(m===null||u)return;let P=Math.min(F,f?(c-f)/1e3:.0167);if(f=c,s.enabled){let b=!1,C=a.value.state;if(s.moveEnabled){let O=0,_=0;for(let j of h)ca.has(j)?O+=1:da.has(j)?O-=1:pa.has(j)?_+=1:ma.has(j)&&(_-=1);if(O!==0||_!==0){let q=(C.rotY??0)*Math.PI/180,U=-Math.cos(q),z=-Math.sin(q),oe=-Math.sin(q),ie=Math.cos(q),K=Math.hypot(O,_)||1,re=s.moveSpeed*P;d[0]+=(U*O+oe*_)/K*re,d[1]+=(z*O+ie*_)/K*re,b=!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 w=s.groundZ+M+E;if(Math.abs(d[2]-w)>1e-4&&(d[2]=w,b=!0),b){let O=L(),_=a.value;_.update({target:O}),l(),r.updateCameraFromRef(_),xt(S,"change");try{t("change",[d[0],d[1],d[2]])}catch{}}}m=requestAnimationFrame(V)}function k(){m!==null||u||(f=0,m=requestAnimationFrame(V))}function N(){m!==null&&(cancelAnimationFrame(m),m=null)}let X=null;function B(){let c=i.value;if(!c)return;let P=c.ownerDocument??document,b=P.defaultView??globalThis,C=()=>{if(!(!s.enabled||!s.lookEnabled||u||g))try{c.requestPointerLock()}catch{}},T=()=>{let z=P.pointerLockElement===c;if(z!==g){if(g=z,z){y=!0,xt(S,"start");try{t("interaction-start",[d[0],d[1],d[2]])}catch{}}else if(y){y=!1,xt(S,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}}},M=z=>{if(!g||u||!s.enabled||!s.lookEnabled)return;let oe=z.movementX??0,ie=z.movementY??0;if(oe===0&&ie===0)return;let K=a.value,re=K.state,se=s.lookSensitivity,Me=s.invertY?-1:1,be=(((re.rotY??0)-oe*se)%360+360)%360,Q=(re.rotX??90)-ie*se*Me;Q<s.minPitch?Q=s.minPitch:Q>s.maxPitch&&(Q=s.maxPitch);let le=A(Q,be),Z=p(),D=[d[0]+le[0]*Z,d[1]+le[1]*Z,d[2]+le[2]*Z];K.update({rotX:Q,rotY:be,target:D}),l(),r.updateCameraFromRef(K),xt(S,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},w=z=>{if(!(!s.enabled||u)&&ua(z.code)&&!(!g&&!s.moveEnabled)){if(ya.has(z.code)){if(!s.jumpEnabled)return;z.preventDefault(),!h.has(z.code)&&x===0&&E===0&&(x=s.jumpVelocity),h.add(z.code);return}Xn.has(z.code)&&!s.crouchEnabled||!s.moveEnabled&&!Xn.has(z.code)||(z.preventDefault(),h.add(z.code))}},O=z=>{ua(z.code)&&h.delete(z.code)},_=()=>{h.clear()};c.addEventListener("click",C),P.addEventListener("pointerlockchange",T),P.addEventListener("mousemove",M),b.addEventListener("keydown",w),b.addEventListener("keyup",O),b.addEventListener("blur",_);let j=b.getComputedStyle(c).perspective,q=parseFloat(j),U=Number.isFinite(q)&&q>0?q:2e3;c.style.setProperty("--polycss-fpv-perspective",`${U}px`),c.classList.add("polycss-fpv-host"),X=()=>{if(c.removeEventListener("click",C),P.removeEventListener("pointerlockchange",T),P.removeEventListener("mousemove",M),b.removeEventListener("keydown",w),b.removeEventListener("keyup",O),b.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=Yn(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,N();let c=i.value;if(c&&(c.style.cursor=""),y){y=!1,xt(S,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}},destroy(){u=!0,N()},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],R(),xt(S,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},addEventListener(c,P){let b=S[c];b.includes(P)||b.push(P)},removeEventListener(c,P){let b=S[c],C=b.indexOf(P);C>=0&&b.splice(C,1)},hasEventListener(c,P){return S[c].includes(P)}}),Ru(()=>{let c=i.value;if(!c)return;u=!1,g=!1,y=!1,h.clear(),x=0,E=0;let b=a.value.state.target??[0,0,0];d[0]=b[0],d[1]=b[1],d[2]=s.groundZ+s.eyeHeight,R(),c.style.cursor=s.lookEnabled?"crosshair":"",B(),k()}),wu(()=>{u=!0,N(),X?.(),X=null});let v=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let c of v)Ou(()=>e[c],()=>{s=Yn(s,e);let P=i.value;P&&!u&&(P.style.cursor=s.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as Fu,h as Vu,inject as $n,onBeforeUnmount as zu,onMounted as Bu,provide as _u,reactive as Hu,ref as Nu,computed as ju}from"vue";var It=Symbol("polycss.selection"),ga=Fu({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=Hu({selected:[]}),r=ju(()=>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)};_u(It,{selected:r,api:i});let l=$n(de,void 0),s=(m,f)=>In(m,f,u=>!u.closest("[data-poly-transform-controls]")),d=null;return Bu(()=>{let m=l?.cameraElRef.value;if(!m)return;let f=u=>{if(u.target?.closest("[data-poly-transform-controls]"))return;let y=ft(u.target)??s(u.clientX,u.clientY);if(!y){t("pointerMissed",u),e.clearOnMiss&&a([]);return}e.multiple&&(u.shiftKey||u.metaKey||u.ctrlKey)?i.toggle(y):o.selected.length===1&&o.selected[0]===y?a([]):a([y])};m.addEventListener("click",f),d=()=>m.removeEventListener("click",f)}),zu(()=>{d?.()}),()=>Vu("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function ha(){let e=$n(It,void 0);return e?e.selected:Nu([])}function Pa(){let e=$n(It,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Yu,h as Xu,computed as $u}from"vue";import{axesHelperPolygons as Uu}from"@layoutit/polycss-core";var xa=Yu({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=$u(()=>Uu({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Xu(ne,{polygons:t.value,merge:!1})}});import{defineComponent as Wu,h as qu,computed as Un}from"vue";import{octahedronPolygons as Gu}from"@layoutit/polycss-core";var ba=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=Un(()=>e.color??e.light.color??"#ffd54a"),n=Un(()=>Gu({center:[0,0,0],size:e.size,color:t.value})),o=Un(()=>{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()=>qu(ne,{polygons:n.value,position:o.value,merge:!1})}});var Wn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},qn={ready:!0,textureLeafCount:0,readyTextureLeafCount:0,pendingTextureLeafCount:0,atlasTextureLeafCount:0,imageTextureLeafCount:0};function Gn(){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 Zn(){return{runtimeAtlasUrlCount:0,snapshotAtlasCount:0,snapshotBackgroundCount:0,selfContained:!0}}function tn(){return{rootFound:!1,projection:"unknown",perspectiveStyle:"",appliedPerspectiveStyle:""}}var Zu={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Wn,textureReadiness:qn,textureStats:Gn(),snapshotStats:Zn(),cameraStats:tn(),bucketCount:0};function nn(e){return typeof e=="number"?{polygonCount:e}:e??{}}function st(e,t){return e.querySelectorAll(t).length}function va(e,t){return(Ca(e,t)?1:0)+st(e,t)}function Sa(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 Ku(e){let t=0,n=e instanceof HTMLElement?e:null;n&&Sa(n.getAttribute("style"))&&t++;for(let o of Array.from(e.querySelectorAll("[style]")))o instanceof HTMLElement&&Sa(o.getAttribute("style"))&&t++;return t}function Ca(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function on(e,t){if(!t)return[e];let n=[];return Ca(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Qu(e){switch(e.toLowerCase()){case"b":return"quad";case"i":return"clippedSolid";case"s":return"atlas";case"u":return"stableTriangle";default:return null}}function Ju(e){if(e==null||e==="")return;let t=Number.parseInt(e,10);return Number.isFinite(t)?t:void 0}function bt(e){if(e==null||e==="")return;let t=Number(e);return Number.isFinite(t)?t:void 0}function ec(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 tc(e){return e==="orthographic"||e==="perspective"?e:"unknown"}function nc(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 Kn(e,t){if(!e)return[];let n=nn(t),o=[];for(let r of on(e,n.scopeSelector))for(let a of Array.from(r.querySelectorAll("b,i,s,u"))){let i=a,l=Qu(i.tagName);if(!l)continue;let s=i.getAttribute("data-polycss-texture-backend")??(l==="atlas"?"atlas":void 0),d=nc(i,s);o.push({element:i,strategy:l,polygonIndex:Ju(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:bt(i.getAttribute("data-polycss-texture-leaf-width")),textureLeafHeight:bt(i.getAttribute("data-polycss-texture-leaf-height")),doubleSided:i.getAttribute("data-polycss-double-sided")==="true"})}return o}function Ta(e,t){let n={...qn};for(let o of Kn(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 oc(e,t){let n=Gn(),o=!1,r=!1;for(let a of Kn(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 rc(e,t){let n=Zn();if(!e)return n;let o=nn(t);for(let r of on(e,o.scopeSelector))n.runtimeAtlasUrlCount+=Ku(r),n.snapshotAtlasCount+=va(r,"[data-polycss-snapshot-atlas]"),n.snapshotBackgroundCount+=va(r,"[data-polycss-snapshot-bg]");return n.selfContained=n.runtimeAtlasUrlCount===0,n}function ac(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 ic(e,t){if(!e)return tn();let n=nn(t),o=null;for(let r of on(e,n.scopeSelector))if(o=ac(r),o)break;return o?{rootFound:!0,projection:tc(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:bt(o.getAttribute("data-polycss-camera-zoom")),distance:bt(o.getAttribute("data-polycss-camera-distance")),rotX:bt(o.getAttribute("data-polycss-camera-rot-x")),rotY:bt(o.getAttribute("data-polycss-camera-rot-y")),target:ec(o.getAttribute("data-polycss-camera-target"))}:tn()}function sc(e,t){let n=nn(t);if(!e)return{...Zu,surfaceLeafCounts:{...Wn},textureReadiness:{...qn},textureStats:Gn(),snapshotStats:Zn(),cameraStats:tn(),polygonCount:n.polygonCount??0};let o=on(e,n.scopeSelector),r={...Wn},a=0,i=0;for(let s of o)r.quad+=st(s,"b"),r.clippedSolid+=st(s,"i"),r.atlas+=st(s,"s"),r.stableTriangle+=st(s,"u"),a+=st(s,"q, .polycss-shadow-svg"),i+=st(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:Ta(e,n),textureStats:oc(e,n),snapshotStats:rc(e,n),cameraStats:ic(e,n),bucketCount:i}}import{ref as Ma,watch as lc,onUnmounted as uc,computed as rn}from"vue";import{createPolyAnimationMixer as cc}from"@layoutit/polycss-core";function lt(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function dc(e,t,n){let o=Ma(null),r=null,a=null,i=null,l=Ma(0);function s(){return n==null?o.value:lt(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(A){if(i===null){i=A,a=requestAnimationFrame(S);return}let p=(A-i)/1e3;i=A,r?.update(p),a=requestAnimationFrame(S)}a=requestAnimationFrame(S)}function u(){m();let S=lt(e),A=lt(t);if(!S||S.length===0||!A)return;let p=s();p&&(r=cc(p,A),l.value++,f())}let g=lc(()=>{let S=lt(e),A=lt(t),p=n!=null?lt(n):o.value;return{c:S,ctrl:A,r:p}},()=>u(),{immediate:!0,deep:!1});uc(()=>{g(),m()});let y=rn(()=>lt(e)??[]),h=rn(()=>y.value.map(S=>S.name)),x=rn(()=>(l.value,r)),E=rn(()=>{l.value;let S=y.value,A={};for(let p of S)Object.defineProperty(A,p.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(p.name)}catch{return null}}});return A});return{ref:o,mixer:x,clips:y,names:h,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as dy,VOXEL_CAMERA_CULL_AXIS_EPS as my,VOXEL_CAMERA_CULL_NORMAL_LIMIT as py,normalizePolygons as yy,mergePolygons as fy,coverPlanarPolygons as gy,optimizeMeshPolygons as hy,optimizeMeshParseResult as Py,simplifyTriangleMeshPolygons as xy,repairMeshSeams as by,seamFacetSplitPolygons as vy,seamFacetSplitReport as Sy,seamOverlapDiagnostics as Cy,seamOverlapPolygons as Ty,seamOverlapReport as My,cullInteriorPolygons as Ey,cameraCullNormalGroups as Ay,cameraCullNormalGroupsFromPolygons as Ly,cameraCullNormalKey as Ry,cameraCullVisibleSignature as wy,cameraFacingDepth as Oy,isAxisAlignedSurfaceNormal as ky,isVoxelCameraCullableNormalGroups as Dy,normalFacesCamera as Iy,polygonCssSurfaceNormal as Fy,polygonFacesCamera as Vy,parseObj as zy,parseMtl as By,parseGltf as _y,parseStl as Hy,bakeSolidTextureSamples as Ny,bakeSolidTextureSampledPolygons as jy,loadMesh as Yy,createIsometricCamera as Xy,parseVox as $y,polygonFaces as Uy,computeTexturePaintMetrics as Wy,computeShapeLighting as qy,parseColor as Gy,parsePureColor as Zy,parseHexColor as Ky,parseRgbColor as Qy,formatColor as Jy,clampChannel as ef,shadeColor as tf,rotateVec3 as nf,inverseRotateVec3 as of,axesHelperPolygons as rf,boxPolygons as af,arrowPolygons as sf,ringPolygons as lf,octahedronPolygons as uf,tetrahedronPolygons as cf,icosahedronPolygons as df,dodecahedronPolygons as mf,cylinderPolygons as pf,conePolygons as yf,torusPolygons as ff,planePolygons as gf,buildSceneContext as hf,buildPolyMeshTransform as Pf,buildPolySceneTransform as xf,computeSceneBbox as bf,cssDistanceToWorld as vf,cssPositionToWorld as Sf,polyCssDistanceToWorld as Cf,polyCssPositionToWorld as Tf,worldDirectionToCss as Mf,worldDirectionToPolyCss as Ef,worldDirectionalLightToCss as Af,worldDirectionalLightToPolyCss as Lf,worldDistanceToCss as Rf,worldDistanceToPolyCss as wf,worldPositionToCss as Of,worldPositionToPolyCss as kf,BASE_TILE as Df,DEFAULT_CAMERA_STATE as If,DEFAULT_PROJECTION as Ff,normalizeInvertMultiplier as Vf,buildPolyCameraSceneTransform as zf,capturePolyCameraSnapshot as Bf,polyCameraTargetToCss as _f,resolvePolyCameraAppliedPerspectiveStyle as Hf,createPolyAnimationMixer as Nf,optimizeAnimatedMeshPolygons as jf,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as Yf,DEFAULT_SEAM_OVERLAP_OPTIONS as Xf,LoopOnce as $f,LoopRepeat as Uf,LoopPingPong as Wf}from"@layoutit/polycss-core";export{Df as BASE_TILE,dy as CAMERA_BACKFACE_CULL_EPS,If as DEFAULT_CAMERA_STATE,Ff as DEFAULT_PROJECTION,Yf as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,Xf as DEFAULT_SEAM_OVERLAP_OPTIONS,$f as LoopOnce,Wf as LoopPingPong,Uf as LoopRepeat,vr as Poly,xa as PolyAxesHelper,Sr as PolyBox,Tt as PolyCamera,de as PolyCameraContextKey,Or as PolyCone,wr as PolyCylinder,ba as PolyDirectionalLightHelper,Lr as PolyDodecahedron,fa as PolyFirstPersonControls,Pr as PolyGround,Ar as PolyIcosahedron,hr as PolyIframe,Zr as PolyMapControls,ne as PolyMesh,Mr as PolyOctahedron,Nr as PolyOrbitControls,Tt as PolyOrthographicCamera,to as PolyPerspectiveCamera,Cr as PolyPlane,Tr as PolyRing,Go as PolyScene,ga as PolySelect,It as PolySelectionContextKey,Rr as PolySphere,Er as PolyTetrahedron,kr as PolyTorus,la as PolyTransformControls,my as VOXEL_CAMERA_CULL_AXIS_EPS,py as VOXEL_CAMERA_CULL_NORMAL_LIMIT,sf as arrowPolygons,rf as axesHelperPolygons,jy as bakeSolidTextureSampledPolygons,Ny as bakeSolidTextureSamples,af as boxPolygons,zf as buildPolyCameraSceneTransform,Pf as buildPolyMeshTransform,xf as buildPolySceneTransform,hf as buildSceneContext,Ay as cameraCullNormalGroups,Ly as cameraCullNormalGroupsFromPolygons,Ry as cameraCullNormalKey,wy as cameraCullVisibleSignature,Oy as cameraFacingDepth,Bf as capturePolyCameraSnapshot,ef as clampChannel,sc as collectPolyRenderStats,Ta as collectPolyTextureReadiness,bf as computeSceneBbox,qy as computeShapeLighting,Wy as computeTexturePaintMetrics,yf as conePolygons,gy as coverPlanarPolygons,Xy as createIsometricCamera,Nf as createPolyAnimationMixer,vf as cssDistanceToWorld,Sf as cssPositionToWorld,Ey as cullInteriorPolygons,pf as cylinderPolygons,mf as dodecahedronPolygons,In as findMeshUnderPoint,ft as findPolyMeshHandle,Jy as formatColor,df as icosahedronPolygons,Ft as injectPolyBaseStyles,of as inverseRotateVec3,ky as isAxisAlignedSurfaceNormal,Dy as isVoxelCameraCullableNormalGroups,Yy as loadMesh,fy as mergePolygons,Iy as normalFacesCamera,Vf as normalizeInvertMultiplier,yy as normalizePolygons,uf as octahedronPolygons,jf as optimizeAnimatedMeshPolygons,Py as optimizeMeshParseResult,hy as optimizeMeshPolygons,Gy as parseColor,_y as parseGltf,Ky as parseHexColor,By as parseMtl,zy as parseObj,Zy as parsePureColor,Qy as parseRgbColor,Hy as parseStl,$y as parseVox,gf as planePolygons,gt as pointInMeshElement,_f as polyCameraTargetToCss,Cf as polyCssDistanceToWorld,Tf as polyCssPositionToWorld,Fy as polygonCssSurfaceNormal,Uy as polygonFaces,Vy as polygonFacesCamera,Kn as queryPolyLeaves,by as repairMeshSeams,Hf as resolvePolyCameraAppliedPerspectiveStyle,lf as ringPolygons,nf as rotateVec3,vy as seamFacetSplitPolygons,Sy as seamFacetSplitReport,Cy as seamOverlapDiagnostics,Ty as seamOverlapPolygons,My as seamOverlapReport,tf as shadeColor,xy as simplifyTriangleMeshPolygons,cf as tetrahedronPolygons,ff as torusPolygons,dc as usePolyAnimation,ct as usePolyCamera,pl as usePolyMaterial,Wt as usePolyMesh,Mt as usePolySceneContext,ha as usePolySelect,Pa as usePolySelectionApi,Mf as worldDirectionToCss,Ef as worldDirectionToPolyCss,Af as worldDirectionalLightToCss,Lf as worldDirectionalLightToPolyCss,Rf as worldDistanceToCss,wf as worldDistanceToPolyCss,Of as worldPositionToCss,kf 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};
|