@layoutit/polycss-vue 0.2.2 → 0.2.4
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 -0
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -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 ha,h as Pa,provide as va,computed as xa}from"vue";import{ref as Kt,shallowRef as pa,watch as
|
|
1
|
+
import{defineComponent as ha,h as Pa,provide as va,computed as xa}from"vue";import{ref as Kt,shallowRef as pa,watch as ya}from"vue";import{createIsometricCamera as fa,BASE_TILE as ga}from"@layoutit/polycss-core";function Zt(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 ot(e){let t=fa({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),n=pa(t),o=Kt(null),r=Kt(null),a=Kt([0,0,0]),i=Zt(t.state);ya(()=>({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),(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),u(),i.updateCameraFromRef(t),i.notifyAll())});function u(){let s=o.value;if(!s)return;let d=t.state,m=ga,p=a.value,l=d.target[0]+p[0],h=d.target[1]+p[1],y=d.target[2]+p[2],P=h*m,v=l*m,E=y*m,M=d.zoom/m,A=d.distance!==0?`translateZ(${-d.distance}px) `:"";s.style.transform=`${A}scale(${M}) rotateX(${d.rotX}deg) rotate(${d.rotY}deg) translate3d(${-P}px, ${-v}px, ${-E}px)`}return{store:i,cameraRef:n,sceneElRef:o,cameraElRef:r,autoCenterOffset:a,applyTransformDirect:u}}var ue=Symbol("polycss-camera");var gt=ha({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=xa(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}=ot(n);return va(ue,{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}),()=>Pa("div",{ref:i,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:"1000000px"}},t.default?.())}});import{defineComponent as ba,h as Sa,provide as Ca,computed as Ma}from"vue";var Ea=32e3,zn=ba({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=Ma(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}=ot(n);return Ca(ue,{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}),()=>{let d=`${typeof e.perspective=="number"?e.perspective:Ea}px`;return Sa("div",{ref:i,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:d}},t.default?.())}}});import{defineComponent as Ri,h as Oi,inject as Di,provide as ki,computed as xe,ref as Bt,watch as To,watchEffect as Ao,onMounted as wo,onUpdated as Ii,onBeforeUnmount as Fi}from"vue";import{DEFAULT_SEAM_BLEED as Lo,parseHexColor as Ro,worldDirectionToCss as Vi}from"@layoutit/polycss-core";import{computed as Ta}from"vue";import{buildSceneContext as Aa,mergePolygons as wa}from"@layoutit/polycss-core";function ht(e,t){return Ta(()=>{let{directionalLight:n}=t.value,o=Aa({polygons:e.value});return{polygons:wa(o.context.polygons),sceneBbox:o.context.sceneBbox}})}var Hn="polycss-styles";function Tt(e=typeof document<"u"?document:null){if(!e||e.getElementById(Hn))return;let t=e.createElement("style");t.id=Hn,t.textContent=La,e.head.appendChild(t)}var La=`
|
|
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 ha,h as Pa,provide as va,computed as xa}from"vue";impo
|
|
|
426
426
|
.polycss-scene[data-polycss-lighting="dynamic"] q {
|
|
427
427
|
opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
|
|
428
428
|
}
|
|
429
|
-
`;import{parsePureColor as yc}from"@layoutit/polycss-core";import{inject as Ra}from"vue";var Qt=Symbol("polycss/scene-context");function Nn(){return Ra(Qt,null)}import{isSolidTrianglePlan as st,isProjectiveQuadPlan as lt,buildTextureEdgeRepairSets as _t,buildSeamBleedPolygonEdges as Bt,buildSeamBleedPolygonSet as pd,cssBorderShapeForPlan as fd}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as Oa,safariCssProjectiveUnsupported as Yn,parseHex as Da,rgbKey as ka}from"@layoutit/polycss-core";function Jt(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function en(e){if($n(e))return!0;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function wt(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 $n(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 at(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function jn(e,t,n,o,r){let a=new Set(o?.disable??[]);return Oa(e,t,a,{solidTriangleSupported:en(n),projectiveQuadSupported:at(n),cornerShapeSupported:wt(n),borderShapeSupported:Jt(n)},Da,ka,r)}function tn(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let a=n.size>0?{disable:Array.from(n)}:void 0;return jn(e,t,r,a)}function $e(e){let t=e??(typeof document<"u"?document:null);if(!t){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=typeof matchMedia<"u"?matchMedia:void 0;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}return Jt(t)}function je(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=typeof CSS<"u"?CSS:void 0;if(n?.supports?.("corner-top-left-shape","bevel")&&n.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let r=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||r}return en(t)}import{filterAtlasPlans as Ia}from"@layoutit/polycss-core";function nn(e,t,n,o){let r=o??(typeof document<"u"?document:null);return Ia(e,t,n,{solidTriangleSupported:je(o),projectiveQuadSupported:o?at(o):!0,borderShapeSupported:$e(o),cornerShapeSupported:r?wt(r):!1})}import{packTextureAtlasPlansWithScaleCore as Fa}from"@layoutit/polycss-core";function Xn(e){if(!e)return!1;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function on(e,t,n){return Fa(e,t,Xn(n))}import{expandClipPoints as Va,TEXTURE_TRIANGLE_BLEED as _a,TEXTURE_EDGE_REPAIR_ALPHA_MIN as Ba,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as za,TEXTURE_EDGE_REPAIR_RADIUS as Un}from"@layoutit/polycss-core";var Xe=new Map;function Kn(e){let t=Xe.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),Xe.set(e,t),t.then(()=>{Xe.get(e)===t&&Xe.delete(e)},()=>{Xe.get(e)===t&&Xe.delete(e)})),t}function fe(e,t,n=1,o=0,r=0,a=1,i=0,u=0){e.setTransform(n*t,o*t,r*t,a*t,i*t,u*t)}function rn(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function an(e){let t=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(t*255)))}function Qn(e,t,n,o,r,a,i){let u=Math.round(t*i),s=Math.round(n*i),c=Math.max(1,Math.round(o*i)),m=Math.max(1,Math.round(r*i)),p=e.getImageData(u,s,c,m),l=p.data,h=a.r,f=a.g,P=a.b;for(let v=0;v<l.length;v+=4)l[v+3]!==0&&(l[v]=an(rn(l[v])*h),l[v+1]=an(rn(l[v+1])*f),l[v+2]=an(rn(l[v+2])*P));e.putImageData(p,u,s)}function Jn(e,t,n,o,r,a,i){let u=t.naturalWidth||t.width||1,s=t.naturalHeight||t.height||1,c=Math.max(r/u,a/s),m=u*c,p=s*c;fe(e,i),e.drawImage(t,n+(r-m)/2,o+(a-p)/2,m,p)}function it(e,t){return Math.max(0,Math.min(t,e))}function sn(e,t,n,o,r,a,i,u){let s=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,m=it(Math.min(n.minU,n.maxU)*s,s),p=it(Math.max(n.minU,n.maxU)*s,s),l=it(Math.min(n.minV,n.maxV)*c,c),h=it(Math.max(n.minV,n.maxV)*c,c),f=Math.floor(m),P=Math.floor(l),v=Math.ceil(p)-f,E=Math.ceil(h)-P;v<1&&(f=Math.floor(it((n.minU+n.maxU)/2*s,s-1)),v=1),E<1&&(P=Math.floor(it((n.minV+n.maxV)/2*c,c-1)),E=1),f=Math.max(0,Math.min(s-1,f)),P=Math.max(0,Math.min(c-1,P)),v=Math.max(1,Math.min(s-f,v)),E=Math.max(1,Math.min(c-P,E)),fe(e,u),e.drawImage(t,f,P,v,E,o,r,a,i)}function eo(e){return e==="repeat"||e==="mirrored-repeat"}function Wn(e,t){return eo(e)?Math.floor(t):0}function qn(e,t){return eo(e)?Math.ceil(t)-1:0}function Gn(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function Zn(e,t,n,o,r,a,i){let u=r?Wn(a,r.minU):0,s=r?qn(a,r.maxU):0,c=r?Wn(i,r.minV):0,m=r?qn(i,r.maxV):0;for(let p=u;p<=s;p++)for(let l=c;l<=m;l++){let h=Gn(a,p),f=Gn(i,l);if(!h&&!f){e.drawImage(t,p*n,l*o);continue}e.save(),e.translate((h?p+1:p)*n,(f?l+1:l)*o),e.scale(h?-1:1,f?-1:1),e.drawImage(t,0,0),e.restore()}}function Rt(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 vt(e,t,n,o,r,a){for(let i=0;i<o.length;i+=2){let u=t+o[i]+r,s=n+o[i+1]+a;i===0?e.moveTo(u,s):e.lineTo(u,s)}e.closePath()}function to(e,t,n,o){fe(e,o),e.beginPath(),Rt(e,t.x,t.y,t.screenPts),e.clip(),fe(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function Lt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(fe(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function no(e,t,n,o,r=0,a=0){if(t.textureTriangles?.length){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1;for(let s of t.textureTriangles){let c=Va(s.screenPts,_a);e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,c,r,a),e.clip(),Lt(e,t,o,r,a),s.uvAffine?(fe(e,o,s.uvAffine.a/i,s.uvAffine.c/i,s.uvAffine.b/u,s.uvAffine.d/u,t.x+s.uvAffine.e+r,t.y+s.uvAffine.f+a),Zn(e,n,i,u,s.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):s.uvSampleRect&&sn(e,n,s.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,s=t.polygon.textureAlphaMode==="opaque";s&&(e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Lt(e,t,o,r,a)),fe(e,o,t.uvAffine.a/i,t.uvAffine.c/i,t.uvAffine.b/u,t.uvAffine.d/u,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+a),Zn(e,n,i,u,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),s&&e.restore()}else if(t.uvSampleRect){let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Lt(e,t,o,r,a)),sn(e,n,t.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}else{let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Lt(e,t,o,r,a)),Jn(e,n,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}}function Ha(e,t,n,o,r,a){let i=r-n,u=a-o,s=i*i+u*u;if(s<=1e-9)return Math.hypot(e-n,t-o);let c=Math.max(0,Math.min(1,((e-n)*i+(t-o)*u)/s));return Math.hypot(e-(n+i*c),t-(o+u*c))}function Na(e,t,n,o){let r=1/0,a=n.length/2;for(let i of o){if(i<0||i>=a)continue;let u=i*2,s=(i+1)%a*2;r=Math.min(r,Ha(e,t,n[u],n[u+1],n[s],n[s+1]))}return r}function Ya(e,t,n,o,r,a){let i=Math.max(0,o-a),u=Math.min(t-1,o+a),s=Math.max(0,r-a),c=Math.min(n-1,r+a),m=null,p=1/0;for(let l=s;l<=c;l++)for(let h=i;h<=u;h++){if(h===o&&l===r)continue;let f=h-o,P=l-r,v=f*f+P*P;if(v>a*a||v>=p)continue;let E=(l*t+h)*4;e[E+3]<za||(m=E,p=v)}return m}function oo(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),a=Math.max(0,Math.floor(t.y*n)),i=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),u=Math.max(1,Math.min(o.height-a,Math.ceil(t.canvasH*n)));if(i<=0||u<=0)return;let s;try{s=e.getImageData(r,a,i,u)}catch{return}let c=s.data,m=new Uint8ClampedArray(c),p=Math.max(Un,Un/n),l=Math.max(2,Math.ceil(p*n)+1),h=!1;for(let f=0;f<u;f++)for(let P=0;P<i;P++){let v=(f*i+P)*4,E=c[v+3];if(E<Ba||E===255)continue;let M=(r+P+.5)/n-t.x,A=(a+f+.5)/n-t.y;if(Na(M,A,t.screenPts,t.textureEdgeRepairEdges)>p)continue;let g=Ya(m,i,u,P,f,l);g!==null&&(c[v]=m[g],c[v+1]=m[g+1],c[v+2]=m[g+2],c[v+3]=255,h=!0)}h&&e.putImageData(s,r,a)}function ro(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(n=>{t(n?URL.createObjectURL(n):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}async function $a(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let a=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),i=r.getContext("2d",a?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let u=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),s=new Map;await Promise.all(u.map(async m=>{s.set(m,await Kn(m))}));for(let m of e.entries){let p=m.texture?s.get(m.texture):null;if(!m.texture){i.save(),to(i,m,t,o),i.restore();continue}p&&(i.save(),fe(i,o),i.beginPath(),Rt(i,m.x,m.y,m.screenPts),i.clip(),no(i,m,p,o),i.restore()),m.texture&&t==="baked"&&(i.save(),fe(i,o),i.beginPath(),Rt(i,m.x,m.y,m.screenPts),i.clip(),Qn(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),oo(i,m,o)}let c=await ro(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:c}}async function Ot(e,t,n,o,r){let a=[];for(let i of e){if(r())break;a.push(await $a(i,t,n,o))}return a}import{isSolidTrianglePlan as ja,offsetConvexPolygonPointsByEdgeAmounts as Xa,parsePureColor as un,resolveSeamBleed as so,safePlanSeamBleedAmount as Ua}from"@layoutit/polycss-core";var lo=50,uo=[.4,-.7,.59],co="#ffffff",mo=1,po="#ffffff",fo=.4,K=1e-9,xt=.75,yo=32,Wa=96,cn="0 48px 96px 48px",ao,io=yo;function qa(){let e=typeof CSS<"u"?CSS:void 0;return!!e?.supports?.("corner-top-left-shape","bevel")&&!!e.supports("corner-top-right-shape","bevel")}function dn(){if(qa())return"corner-bevel";let e=typeof navigator<"u"?navigator.userAgent:"";return/\bFirefox\//.test(e)?"border-large":"border"}function mn(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==ao&&(ao=e,io=/\bFirefox\//.test(e)?Wa:yo),io}function go(){return dn()==="border-large"?cn:void 0}function Ga(){let e=dn();if(e==="corner-bevel")return;let t=e==="border-large"?cn:void 0;return t?{borderWidth:t}:void 0}function ho(e){let t=dn();t==="corner-bevel"?(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderWidth="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape")):(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape"),e.style.borderWidth=t==="border-large"?cn:"")}function Re(e){let t=un(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function bt({r:e,g:t,b:n}){return`${e},${t},${n}`}function Za(e){return un(e)?.alpha??1}function kt({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function Po(e,t,n,o,r){let a=Re(e),i=Re(n),u=Re(o),s=u.r/255*r+i.r/255*t,c=u.g/255*r+i.g/255*t,m=u.b/255*r+i.b/255*t,p=Math.max(0,Math.min(255,Math.round(a.r*s))),l=Math.max(0,Math.min(255,Math.round(a.g*c))),h=Math.max(0,Math.min(255,Math.round(a.b*m))),f=Za(e);return f<1?`rgba(${p}, ${l}, ${h}, ${f})`:kt({r:p,g:l,b:h})}function vo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=un(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=i=>Math.max(0,Math.min(255,Math.round(Math.round(i/o)*o))),a={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${a.r}, ${a.g}, ${a.b}, ${n.alpha})`:kt(a)}function xo(e,t,n){let o=(r,a)=>{if(r===a)return r;let i=a-r;return r+Math.sign(i)*Math.min(Math.abs(i),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function ln(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Ka(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Qa(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let a=e[r],i=e[r+1],u=[a[0]-t[0],a[1]-t[1],a[2]-t[2]],s=[i[0]-t[0],i[1]-t[1],i[2]-t[2]];n[0]-=u[1]*s[2]-u[2]*s[1],n[1]-=u[2]*s[0]-u[0]*s[2],n[2]-=u[0]*s[1]-u[1]*s[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=K?null:[n[0]/o,n[1]/o,n[2]/o]}function Ja(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],a=e[(n+2)%e.length],i=(r[0]-o[0])*(a[1]-r[1])-(r[1]-o[1])*(a[0]-r[0]);if(Math.abs(i)<=K)return!1;let u=Math.sign(i);if(t===0)t=u;else if(u!==t)return!1}return!0}function ei(e){let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o[0]*r[1]-o[1]*r[0]}return t/2}function ti(e,t,n,o){let r=t[0]-e[0],a=t[1]-e[1],i=o[0]-n[0],u=o[1]-n[1],s=r*u-a*i;if(Math.abs(s)<=K)return null;let c=n[0]-e[0],m=n[1]-e[1],p=(c*u-m*i)/s;return[e[0]+p*r,e[1]+p*a]}function Dt(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let i=0;i<e.length;i+=2)n+=e[i],o+=e[i+1];n/=r,o/=r;let a=e.slice();for(let i=0;i<a.length;i+=2){let u=a[i]-n,s=a[i+1]-o,c=Math.hypot(u,s);c<=K||(a[i]+=u/c*t,a[i+1]+=s/c*t)}return a}function Ue(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let s=0;s<e.length;s+=2)n.push([e[s],e[s+1]]);if(!Ja(n))return Dt(e,t);let o=ei(n);if(Math.abs(o)<=K)return Dt(e,t);let r=o>0?1:-1,a=[];for(let s=0;s<n.length;s++){let c=n[s],m=n[(s+1)%n.length],p=m[0]-c[0],l=m[1]-c[1],h=Math.hypot(p,l);if(h<=K)return Dt(e,t);let f=r*(l/h)*t,P=r*(-p/h)*t;a.push({a:[c[0]+f,c[1]+P],b:[m[0]+f,m[1]+P]})}let i=[],u=Math.max(2,t*4);for(let s=0;s<n.length;s++){let c=a[(s+n.length-1)%n.length],m=a[s],p=ti(c.a,c.b,m.a,m.b);if(!p)return Dt(e,t);let l=n[s],h=p[0]-l[0],f=p[1]-l[1],P=Math.hypot(h,f);P>u?i.push(l[0]+h/P*u,l[1]+f/P*u):i.push(p[0],p[1])}return i}function ni(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,c=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+c,f=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-f,M=(v*n+E*e)/P,A=h-M*t,g=f-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let d=_-r,y=Math.sqrt(d*d+o*o);return y>R&&(_=r+d/y*R,D=n+o/y*R),[A,g,L,T,_,D]}function oi(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function ri(e,t,n,o,r){let a=e.seamBleedEdges;if(!a?.size)return null;let i=e.seamBleed===void 0?xt:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([s,c],m)=>{let p=oi(s,c),l=p!==void 0&&a.has(p)?e.seamBleedEdgeAmounts?.get(p)??so(i,xt):0;return Ua(r,m,l)})}function bo(e,t,n,o,r,a,i,u,s,c,m,p){let l=Math.round(e*1e3)/1e3||0,h=Math.round(t*1e3)/1e3||0,f=Math.round(n*1e3)/1e3||0,P=Math.round(o*1e3)/1e3||0,v=Math.round(r*1e3)/1e3||0,E=Math.round(a*1e3)/1e3||0,M=Math.round(i*1e3)/1e3||0,A=Math.round(u*1e3)/1e3||0,g=Math.round(s*1e3)/1e3||0,L=Math.round(c*1e3)/1e3||0,T=Math.round(m*1e3)/1e3||0,_=Math.round(p*1e3)/1e3||0;return`matrix3d(${l},${h},${f},0,${P},${v},${E},0,${M},${A},${g},0,${L},${T},${_},1)`}function ai(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function pn(e,t,n,o){if(!ja(e))return null;let r=e.tileSize,a=e.layerElevation,i=ai(e.polygon.vertices,r,a),u=Qa(i);if(!u)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(V=>{let X=i[V.a],G=i[V.b];return{...V,length:Math.hypot(G[0]-X[0],G[1]-X[1],G[2]-X[2])}}).sort((V,X)=>X.length-V.length),c=s[0].a,m=s[0].b,p=s[0].c,l=i[c],h=i[m],f=i[p],P=s[0].length;if(P<=K)return null;let v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P],E=[f[0]-l[0],f[1]-l[1],f[2]-l[2]],M=ln(E,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-f[0],A[1]-f[1],A[2]-f[2]],L=Math.hypot(g[0],g[1],g[2]);if(L<=K)return null;let T=[g[0]/L,g[1]/L,g[2]/L];if(ln(Ka(v,T),u)<0){let V=m;if(m=c,c=V,l=i[c],h=i[m],P=Math.hypot(h[0]-l[0],h[1]-l[1],h[2]-l[2]),P<=K)return null;v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P];let X=[f[0]-l[0],f[1]-l[1],f[2]-l[2]];M=ln(X,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-f[0],A[1]-f[1],A[2]-f[2]];let G=Math.hypot(g[0],g[1],g[2]);if(G<=K)return null;T=[g[0]/G,g[1]/G,g[2]/G]}let _=mn(),D=Math.max(0,Math.min(P,M)),R=Math.max(0,P-D),N=[D,0,0,L,D+R,L],Y=ri(e,c,m,p,N),H=Y?Xa(N,Y):ni(D,R,L,so(e.seamBleed,xt)),b=[H[0],H[1]],d=[H[2],H[3]],y=[H[4],H[5]],x=(d[1]+y[1])/2,S=b[0]-d[0],C=y[0]-b[0],O=x-b[1];if(S<=K||C<=K||O<=K||!Number.isFinite(S+C+O))return null;let k=t==="dynamic",w=Re(e.polygon.color??"#cccccc"),B=k&&bt(w)===o?.dynamicColorKey,W={color:k||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...k&&!B?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4),"--psr":(w.r/255).toFixed(4),"--psg":(w.g/255).toFixed(4),"--psb":(w.b/255).toFixed(4)}:k?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4)}:null},Z=([V,X])=>[f[0]+(V-D)*v[0]+X*T[0],f[1]+(V-D)*v[1]+X*T[1],f[2]+(V-D)*v[2]+X*T[2]],q=Z(b),j=Z([d[0],x]),ee=Z([y[0],x]),ne=_/2,ie=[(ee[0]-j[0])/_,(ee[1]-j[1])/_,(ee[2]-j[2])/_],J=[q[0]-ie[0]*ne,q[1]-ie[1]*ne,q[2]-ie[2]*ne],F=[(j[0]-J[0])/_,(j[1]-J[1])/_,(j[2]-J[2])/_],U=[ie[0],ie[1],ie[2],0,F[0],F[1],F[2],0,u[0],u[1],u[2],0,J[0],J[1],J[2],1].map(V=>(Math.round(V*1e3)/1e3||0).toString()).join(","),$=Ga();return{transform:`matrix3d(${U})`,...$??{},...W}}function It(e){if(!e)return!1;let{a:t,b:n,c:o}=e;return t===0&&n===1&&o===2||t===1&&n===2&&o===0||t===2&&n===0&&o===1}function ii(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,c=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+c,f=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-f,M=(v*n+E*e)/P,A=h-M*t,g=f-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let d=_-r,y=Math.sqrt(d*d+o*o);return y>R&&(_=r+d/y*R,D=n+o/y*R),[A,g,L,T,_,D]}function So(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=lo,r=o,a=e.vertices[0],i=e.vertices[1],u=e.vertices[2],s=a[1]*o,c=a[0]*o,m=a[2]*r,p=i[1]*o,l=i[0]*o,h=i[2]*r,f=u[1]*o,P=u[0]*o,v=u[2]*r,E=p-s,M=l-c,A=h-m,g=f-s,L=P-c,T=v-m,_=-(M*T-A*L),D=-(A*g-E*T),R=-(E*L-M*g),N=Math.sqrt(_*_+D*D+R*R);if(N<=K)return null;_/=N,D/=N,R/=N;let Y=E*E+M*M+A*A,H=f-p,b=P-l,d=v-h,y=s-f,x=c-P,S=m-v,C=H*H+b*b+d*d,O=y*y+x*x+S*S,k=It(n)?n.a:0,w=It(n)?n.b:1,B=It(n)?n.c:2,W=()=>n?So(e,t):null;if(!It(n)){let Ye=Y;C>Ye&&(k=1,w=2,B=0,Ye=C),O>Ye&&(k=2,w=0,B=1)}let Z=B===0?s:B===1?p:f,q=B===0?c:B===1?l:P,j=B===0?m:B===1?h:v,ee=k===0?s:k===1?p:f,ne=k===0?c:k===1?l:P,ie=k===0?m:k===1?h:v,J=w===0?s:w===1?p:f,F=w===0?c:w===1?l:P,U=w===0?m:w===1?h:v,$=J-ee,V=F-ne,X=U-ie,G=Math.sqrt($*$+V*V+X*X);if(G<=K)return W();let se=$/G,le=V/G,re=X/G,me=(Z-ee)*se+(q-ne)*le+(j-ie)*re,pe=ee+se*me-Z,ce=ne+le*me-q,ye=ie+re*me-j,Q=Math.sqrt(pe*pe+ce*ce+ye*ye);if(Q<=K)return W();pe/=Q,ce/=Q,ye/=Q;let z=Math.max(0,Math.min(G,me)),I=Math.max(0,G-z),ae=ii(z,I,Q,xt),he=ae[0],ze=ae[1],Pe=ae[2],be=ae[3],Fe=ae[4],nt=ae[5],Ve=(be+nt)/2,_e=he-Pe,Be=Fe-he,gt=Ve-ze;if(_e<=K||Be<=K||gt<=K||!Number.isFinite(_e+Be+gt))return W();let Ae=1/mn(),He=_e+Be,Se=He*Ae,we=(Be-_e)*.5*Ae,Le=gt*Ae,ot=he-z-He*.5,Ne=ze,Ce=bo(se*Se,le*Se,re*Se,se*we+pe*Le,le*we+ce*Le,re*we+ye*Le,_,D,R,Z+se*ot+pe*Ne,q+le*ot+ce*Ne,j+re*ot+ye*Ne),ve;if(Math.floor(t.colorFreezeFrames??1)!==0){let Ye=t.directionalLight,_n=t.ambientLight,De=Ye?.direction??uo,aa=Ye?.color??co,ia=Math.max(0,Ye?.intensity??mo),sa=_n?.color??po,la=Math.max(0,_n?.intensity??fo),Gt=Math.sqrt(De[0]*De[0]+De[1]*De[1]+De[2]*De[2])||1,ua=De[0]/Gt,ca=De[1]/Gt,da=De[2]/Gt,ma=ia*Math.max(0,_*ua+D*ca+R*da),Bn=Po(e.color??"#cccccc",ma,aa,sa,la);ve=t.colorSteps?vo(Bn,t.colorSteps):Bn}return{transform:Ce,borderWidth:go(),color:ve,basis:{a:k,b:w,c:B}}}function si(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function li(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let a=e.__polycssStableTriangleColor;if(!(a===void 0||si(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||a===n)return;let u=n,s=n?Re(n):void 0,c=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&c&&s&&n&&(s=xo(c,s,m),u=kt(s)),e.style.color=u,e.__polycssStableTriangleColor=u,e.__polycssStableTriangleColorRgb=s}function fn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!je())return!1;let o=Array.from(e.children).filter(a=>a instanceof HTMLElement&&a.localName==="u");if(o.length!==t.length)return!1;let r=t.map((a,i)=>So(a,n,o[i].__polycssStableTriangleBasis));if(r.some(a=>!a))return!1;for(let a=0;a<o.length;a+=1){let i=r[a],u=o[a];u.style.visibility&&(u.style.visibility=""),u.__polycssStableTriangleBasis=i.basis,ho(u),u.style.transform=i.transform,i.borderWidth!==void 0&&(u.style.borderWidth=i.borderWidth),i.color!==void 0&&li(u,a,i.color,n)}return!0}import{computeTextureAtlasPlanPublic as ui}from"@layoutit/polycss-core";function We(e,t,n={},o){return ui(e,t,n,void 0,o)}function yn(e,t,n){let o=new Set(n?.disable??[]);return tn(e,t,o)}import{computed as ge,getCurrentScope as ci,onScopeDispose as di,ref as Co,watch as mi}from"vue";function gn(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Mo(e){return e.flatMap(t=>t.url?.startsWith("blob:")?[t.url]:[])}function Ft(e){return e.map(t=>({width:t.width,height:t.height,url:null}))}function Eo(e){return e.length===0||typeof Image>"u"?Promise.resolve():Promise.all(e.map(t=>{let n=new Image;n.src=t;let o=n.decode?.();return o?o.catch(()=>{}):Promise.resolve()})).then(()=>{})}function qe(e){e.length!==0&&(typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>gn(e)):setTimeout(()=>gn(e),0))}function Ge(e,t,n=ge(()=>{}),o=ge(()=>{}),r=ge(()=>!1)){let a=ge(()=>new Set(o.value?.disable??[])),i=ge(()=>!a.value.has("b")),u=ge(()=>{let v=typeof document<"u"?document:null;return i.value&&(!v||at(v))}),s=ge(()=>!a.value.has("u")&&je()),c=ge(()=>!a.value.has("i")&&t.value!=="dynamic"&&$e()),m=ge(()=>{let v=nn(e.value,t.value,a.value,typeof document<"u"?document:null);return on(v,n.value,typeof document<"u"?document:null)}),p=Co(Ft(m.value.packed.pages)),l=Co({plans:e.value,entries:m.value.packed.entries,pages:Ft(m.value.packed.pages)}),h=[],f=0,P=!1;return mi(()=>[m.value,t.value,r.value],([v,E,M],A,g)=>{let{packed:L,atlasScale:T}=v;if(M){let R=++f,N=e.value,Y=L.entries;if(L.pages.length===0||typeof document>"u"){qe(h),h=[],l.value={plans:N,entries:Y,pages:Ft(L.pages)};return}let H=()=>P||R!==f,b=[];Ot(L.pages,E,document,T,H).then(async d=>{if(b=Mo(d),await Eo(b),H()){qe(b);return}let y=h;h=b,b=[],qe(y),l.value={plans:N,entries:Y,pages:d}}).catch(()=>{});return}let _=!1,D=[];if(g(()=>{_=!0,qe(D)}),L.pages.length===0){qe(h),h=[],p.value.length!==0&&(p.value=[]);return}typeof document>"u"||(p.value.some(R=>R.url)||(p.value=Ft(L.pages)),Ot(L.pages,E,document,T,()=>_).then(async R=>{if(D=Mo(R),await Eo(D),_){qe(D);return}let N=h;h=D,D=[],qe(N),p.value=R}).catch(()=>{}))},{immediate:!0}),ci()&&di(()=>{P=!0,gn(h),h=[]}),{plans:ge(()=>r.value?l.value.plans:e.value),entries:ge(()=>r.value?l.value.entries:m.value.packed.entries),pages:ge(()=>r.value?l.value.pages:p.value),ready:ge(()=>{let v=r.value?l.value.pages:p.value;return v.length===0||v.every(E=>!!E.url)}),useFullRectSolid:i,useProjectiveQuad:u,useStableTriangle:s,useBorderShape:c}}import{h as pi}from"vue";function Ze({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=pn(e,t,i,n);if(!u)return null;let s=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,p])=>[`data-${m}`,String(p)])):{},c=o?.trim()||void 0;return pi("u",{class:c,style:{...u,...r},"data-poly-index":String(e.index),...s,...a})}import{h as fi}from"vue";import{isFullRectSolid as yi,cssBorderShapeForPlan as gi,formatSolidQuadEntryMatrix as hi,formatBorderShapeEntryMatrix as Pi}from"@layoutit/polycss-core";var vi=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function xi(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,a)=>{let i=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:a,order:vi.get(i)??Number.POSITIVE_INFINITY}}).sort((r,a)=>r.order-a.order||r.index-a.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function Ke({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto",forceBorderShape:u=!1}){let s=!e.texture&&yi(e),c=s&&u&&$e(),m=!s||c?gi(e):null,p=t==="dynamic",l=Re(e.polygon.color??"#cccccc"),h=p&&bt(l)===n?.dynamicColorKey,P={transform:m?Pi(e):hi(e),color:p?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...p?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),...h?null:{"--psr":(l.r/255).toFixed(4),"--psg":(l.g/255).toFixed(4),"--psb":(l.b/255).toFixed(4)}}:null,...r},v=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},E=o?.trim()||void 0,M=A=>{let g=A.el;g&&(m?g.style.setProperty("border-shape",m):g.style.removeProperty("border-shape"),xi(g))};return fi(s&&!c?"b":"i",{class:E,style:P,"data-poly-index":String(e.index),...v,...a,onVnodeMounted:M,onVnodeUpdated:M})}import{h as bi}from"vue";function Qe({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=t==="dynamic",s=Re(e.polygon.color??"#cccccc"),c=u&&bt(s)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:u?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...u&&!c?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(s.r/255).toFixed(4),"--psg":(s.g/255).toFixed(4),"--psb":(s.b/255).toFixed(4)}:u?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([h,f])=>[`data-${h}`,String(f)])):{},l=o?.trim()||void 0;return bi("b",{class:l,style:m,"data-poly-index":String(e.index),...p,...a})}import{h as Si}from"vue";import{formatCornerShapeElementStyle as Ci,parseHex as Mi,rgbKey as Ei}from"@layoutit/polycss-core";function Ti(e,t,n){if(t==="dynamic"){let o=Mi(e.polygon.color??"#cccccc"),r=`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return Ei(o)!==n?.dynamicColorKey&&(r+=`;--psr:${(o.r/255).toFixed(4)};--psg:${(o.g/255).toFixed(4)};--psb:${(o.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function hn({entry:e,geometry:t,textureLighting:n,solidPaintDefaults:o,className:r,pointerEvents:a="auto"}){let i=Ci(e,t),u=Ti(e,n,o),s=a==="none"?";pointer-events:none":"",c=i+u+s,m=l=>{!l||!(l instanceof HTMLElement)||l.setAttribute("style",c)},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,h])=>[`data-${l}`,String(h)])):{};return Si("u",{class:r?.trim()||void 0,"data-poly-index":String(e.index),...p,onVnodeMounted:({el:l})=>m(l),onVnodeUpdated:({el:l})=>m(l)})}import{h as Ai}from"vue";import{formatMatrix3d as wi,formatCssLengthPx as Vt}from"@layoutit/polycss-core";var Li=64;function Je({entry:e,page:t,textureLighting:n,solidPaintDefaults:o,className:r,style:a,domAttrs:i,pointerEvents:u="auto"}){let s=n==="dynamic",c=e.atlasCanonicalSize??Li,m=e.canvasW||1,p=e.canvasH||1,l=t?`${Vt(-e.x/m*c)} ${Vt(-e.y/p*c)}`:void 0,h=t?`${Vt(t.width/m*c)} ${Vt(t.height/p*c)}`:void 0,f=s&&t?.url?`url(${t.url})`:void 0,P=!s&&t?.url?`url(${t.url}) ${l} / ${h} no-repeat`:void 0,v={transform:wi(e.atlasMatrix),"--polycss-atlas-size":`${c}px`,...s?{backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:l,backgroundSize:h}:{background:P},...s?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...s&&f?{maskImage:f,maskMode:"alpha",maskPosition:l,maskSize:h,maskRepeat:"no-repeat",WebkitMaskImage:f,WebkitMaskPosition:l,WebkitMaskSize:h,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:u==="none"?"none":void 0,...a},E=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},M=r?.trim()||void 0;return Ai("s",{class:M,style:v,"data-poly-index":String(e.index),...E,...i})}var Oo=Ri({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},centerPolygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=Di(ue);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:a}=o,i=zt(0),u=new Map,s={register(y,x){u.set(y,x),i.value++},unregister(y){u.delete(y),i.value++},version:i,getEntries(){return Array.from(u.values())}},c=new Set,m=zt(!1),p={register(y){c.add(y),m.value=c.size>0},unregister(y){c.delete(y),m.value=c.size>0},hasAny:m},l=zt(null),h=zt(null),f=xe(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??Lo,shadow:e.shadow,shadowRegistry:s,receiverRegistry:p,groundCssZ:l.value,sceneEl:h.value}));ki(Qt,f),To(h,y=>{r.value=y});let P=!1;wo(()=>{P||typeof document<"u"&&(At(document),P=!0)}),To(()=>e.debugShowBackfaces,y=>{let x=h.value;x&&x.classList.toggle("polycss-debug-show-backfaces",!!y)});let v=xe(()=>e.polygons??[]),E=xe(()=>e.centerPolygons??null),M=xe(()=>({directionalLight:e.directionalLight})),A=Pt(v,M),g=xe(()=>E.value??v.value),L=Pt(g,M);wo(()=>{r.value=h.value,a()}),Ii(a);let T=xe(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),_=xe(()=>{let y=e.textureLighting==="dynamic",x=y?void 0:e.directionalLight,S=y?void 0:e.ambientLight,C=_t(A.value.polygons),O=e.seamBleed??Lo,k=O==="auto"||typeof O=="number"&&Number.isFinite(O)&&O>0?Bt(A.value.polygons,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S}):null;return A.value.polygons.map((w,B)=>We(w,B,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S,seamBleed:k?.has(B)?O:void 0,seamEdges:k?.get(B),textureEdgeRepairEdges:C[B]}))}),D=xe(()=>e.textureLighting??"baked"),R=xe(()=>e.textureQuality),N=xe(()=>e.strategies),Y=Ge(_,D,R,N),H=xe(()=>{if(e.textureLighting!=="dynamic")return null;let y=e.directionalLight?.direction??[.4,-.7,.59],x=Vi(y),S=Math.hypot(x[0],x[1],x[2])||1,C=x[0]/S,O=x[1]/S,k=x[2]/S,w=Ro(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],B=Ro(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],W=e.directionalLight?.intensity??1,Z=e.ambientLight?.intensity??.4,q=ne=>(ne/255).toFixed(4),j=k,ee=Math.sign(j||1)*Math.max(Math.abs(j),.01);return{"--plx":C.toFixed(2),"--ply":O.toFixed(2),"--plz":k.toFixed(2),"--clx":C.toFixed(2),"--cly":O.toFixed(2),"--clz":ee.toFixed(2),"--plr":q(w[0]),"--plg":q(w[1]),"--plb":q(w[2]),"--pli":W.toFixed(4),"--par":q(B[0]),"--pag":q(B[1]),"--pab":q(B[2]),"--pai":Z.toFixed(4)}}),b=50;Ao(()=>{let y=h.value;i.value;let x=s.getEntries();if(x.length===0){y&&y.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let S=1/0;for(let k of x){let w=k();for(let B of w.polygons)for(let W of B.vertices){let Z=W[2]+(w.position[2]??0);Z<S&&(S=Z)}}if(!Number.isFinite(S)){y&&y.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let C=e.shadow?.lift??.05,O=(S+C)*b;l.value!==O&&(l.value=O),y&&(e.textureLighting==="dynamic"?y.style.setProperty("--shadow-ground-cssz",O.toFixed(3)):y.style.removeProperty("--shadow-ground-cssz"))});let d=xe(()=>{if(!e.autoCenter)return[0,0,0];let y=L.value.sceneBbox;return[(y.min[0]+y.max[0])/2,(y.min[1]+y.max[1])/2,(y.min[2]+y.max[2])/2]});return Ao(()=>{o.autoCenterOffset.value=d.value}),Fi(()=>{}),()=>{let y=`polycss-scene${e.class?` ${e.class}`:""}`,x=T.value,S=Y.entries.value.map((O,k)=>{if(O)return Je({entry:O,page:Y.pages.value[O.pageIndex],textureLighting:x.textureLighting??"baked"});let w=_.value[k];return!w||w.texture?null:Y.useStableTriangle.value&&st(w)?Ze({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useProjectiveQuad.value&<(w)?Qe({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useBorderShape.value||Y.useFullRectSolid.value?Ke({entry:w,textureLighting:x.textureLighting??"baked",forceBorderShape:!Y.useFullRectSolid.value}):null}),C=t.default?.()??[];return Oi("div",{ref:h,class:y,"data-polycss-lighting":x.textureLighting??"baked","aria-hidden":"true",style:{...H.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([O])=>O!=="style"&&O!=="class"))},[...S,...C])}}});import{defineComponent as Ms,h as Ie,Teleport as Es,computed as oe,inject as Ts,onMounted as As,onBeforeUnmount as Xo,ref as dt,watch as Nt,watchEffect as Uo}from"vue";import{buildBasisHints as ws,buildSharedEdgeMap as Ls,cornerShapeGeometryForPlan as Rs,worldDirectionalLightToCss as Os}from"@layoutit/polycss-core";import{BASE_TILE as et,computeReceiverShadowFaces as Ds,computeSceneBbox as ks,DEFAULT_SEAM_BLEED as Is,ensureCcw2D as Fs,inverseRotateVec3 as Wo,findOverlappingPolygonDuplicates as qo,optimizeMeshPolygons as Vs,parseHexColor as _s,prepareCasterEdgeOwners as Bs,prepareCasterPolyItems as zs,prepareReceiverFacePlanes as Hs,projectCssVertexToGround as Ns,worldDirectionToCss as Go}from"@layoutit/polycss-core";import{ref as St,watch as _i,onUnmounted as Bi}from"vue";import{loadMesh as zi}from"@layoutit/polycss-core";var Do=[],Pn=[];function Ht(e,t){let n=St(Do),o=St(void 0),r=St(!!e.value),a=St(null),i=St(Pn),u=null;function s(){if(u){try{u.dispose()}catch{}u=null}}return _i(e,(c,m,p)=>{if(!c){s(),n.value=Do,o.value=void 0,r.value=!1,a.value=null,i.value=Pn;return}let l=!1;r.value=!0,a.value=null;let h=u;zi(c,t).then(f=>{if(l){try{f.dispose()}catch{}return}if(h)try{h.dispose()}catch{}u=f,n.value=f.polygons,o.value=f.voxelSource,r.value=!1,a.value=null,i.value=f.warnings??Pn}).catch(f=>{if(l)return;let P=f instanceof Error?f:new Error(String(f));r.value=!1,a.value=P}),p(()=>{l=!0})},{immediate:!0}),Bi(()=>{s()}),{polygons:n,voxelSource:o,loading:r,error:a,warnings:i,dispose:s}}import{BASE_TILE as de,computeProjectiveQuadMatrix as Hi,normalFacesCamera as Ni,parsePureColor as zo,PROJECTIVE_QUAD_BLEED as Yi,resolveProjectiveQuadGuards as $i,rotateVec3 as ko,shadePolygon as ji,SOLID_QUAD_CANONICAL_SIZE as Xi}from"@layoutit/polycss-core";var Ui=[.4,-.7,.59],Wi="#ffffff",qi=1,Gi="#ffffff",Zi=.4,Ho=1,Ki=8,Qi=Yi,ke=1e-6,Ji=$i({bleed:0}),No={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},bn=["t","b","bl","br","fr","fl"],es=new Map([["0,0,1","t"],["0,0,-1","b"],["0,1,0","fl"],["0,-1,0","br"],["1,0,0","fr"],["-1,0,0","bl"]]);function Io(e){let t=[];for(let n of bn)Ni(No[n],e)&&t.push(n);return t.join("|")}function ts(e,t,n){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==t&&(e.style.color=t,o.color=t),o.transform!==n&&(e.style.transform=n,o.transform=n)}function ns(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,a=0;for(let u=1;u+1<t.length;u+=1){let s=t[u],c=t[u+1],m=s[1]-n[1],p=s[0]-n[0],l=s[2]-n[2],h=c[1]-n[1],f=c[0]-n[0],P=c[2]-n[2];o-=p*P-l*f,r-=l*h-m*P,a-=m*f-p*h}let i=Math.hypot(o,r,a);return i<=1e-9?null:[Math.round(o/i),Math.round(r/i),Math.round(a/i)]}function os(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=ns(e),n=t?es.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,a=1/0,i=-1/0,u=-1/0,s=-1/0;for(let p of e.vertices)o=Math.min(o,p[0]),r=Math.min(r,p[1]),a=Math.min(a,p[2]),i=Math.max(i,p[0]),u=Math.max(u,p[1]),s=Math.max(s,p[2]);let c=1e-6,m=cs(e.color);return Math.abs(s-a)<=c?{axis:"z",face:n,left:r*de,top:o*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(i-o)*de),z:a*de,baseColor:m,bleed:vn()}:Math.abs(i-o)<=c?{axis:"x",face:n,left:r*de,top:a*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(s-a)*de),z:-o*de,baseColor:m,bleed:vn()}:Math.abs(u-r)<=c?{axis:"y",face:n,left:a*de,top:o*de,width:Math.max(0,(s-a)*de),height:Math.max(0,(i-o)*de),z:-r*de,baseColor:m,bleed:vn()}:null}function vn(){return{left:0,right:0,top:0,bottom:0}}function rs(e){let t=o=>String(Number(o.toFixed(6))),n=`${e.item.baseColor}|${e.variableAxis}`;for(let o=0;o<3;o+=1)o!==e.variableAxis&&(n+=`|${o}:${t(e.fixed[o])}`);return n}function Fo(e){return[e[1]*de,e[0]*de,e[2]*de]}function Vo(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function as(e,t,n){let o=e.left,r=e.left+e.width,a=e.top,i=e.top+e.height;if(Math.abs(t[0]-n[0])<=ke){if(Math.abs(t[0]-o)<=ke)return"left";if(Math.abs(t[0]-r)<=ke)return"right"}if(Math.abs(t[1]-n[1])<=ke){if(Math.abs(t[1]-a)<=ke)return"top";if(Math.abs(t[1]-i)<=ke)return"bottom"}return null}function is(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=ke)){if(n!==null)return null;n=o}return n}function ss(e,t,n){let o=t.vertices,r=Fo(o[n]),a=Fo(o[(n+1)%o.length]),i=as(e,Vo(e,r),Vo(e,a));if(!i)return null;let u=is(r,a);if(u===null)return null;let s=Math.min(r[u],a[u]),c=Math.max(r[u],a[u]);return c-s>ke?{item:e,side:i,variableAxis:u,fixed:r,start:s,end:c}:null}function _o(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Qi)}function ls(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let a=0;a<r.vertices.length;a+=1){let i=ss(o,r,a);if(!i)continue;let u=rs(i),s=n.get(u);s?s.push(i):n.set(u,[i])}}for(let o of n.values()){if(o.length<2)continue;o.sort((a,i)=>a.start-i.start||a.end-i.end);let r=[];for(let a of o){r=r.filter(i=>i.end>a.start+ke);for(let i of r)i.item.sourceIndex!==a.item.sourceIndex&&(_o(i),_o(a));r.push(a)}}}function us(e){let t=zo(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha}:{r:255,g:255,b:255,alpha:1}}function cs(e){if(!e)return"#cccccc";let t=zo(e);if(!t)return e;let n={r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha};if(n.alpha<1){let o=Math.round(Math.max(0,n.alpha)*1e3)/1e3;return`rgba(${xn(n.r)}, ${xn(n.g)}, ${xn(n.b)}, ${o})`}return ds(n)}function ds({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function xn(e){return Math.round(Math.max(0,Math.min(255,e)))}function ms(e,t,n,o){let r=n?.direction??Ui,a=Math.hypot(r[0],r[1],r[2])||1,i=r[0]/a,u=r[1]/a,s=r[2]/a,c=Math.max(0,n?.intensity??qi)*Math.max(0,e[0]*i+e[1]*u+e[2]*s),m=Math.max(0,o?.intensity??Zi),p=n?.color??Wi,l=o?.color??Gi,h=ji(t,c,p,l,m),f=us(t);if(f.alpha>=1)return h;let P=parseInt(h.slice(1,3),16),v=parseInt(h.slice(3,5),16),E=parseInt(h.slice(5,7),16);return`rgba(${P}, ${v}, ${E}, ${f.alpha})`}function ps(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=os(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return ls(e,t),t}function fs(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 ys(e){let t=e.left,n=e.top,o=e.left+e.width,r=e.top+e.height;return[t,n,o,n,o,r,t,r]}function gs(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function hs(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=Xi/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function Bo(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,a=e.height+e.bleed.top+e.bleed.bottom,i=e.z,u=r/t,s=a/t;return`matrix3d(${(e.axis==="x"?[u,0,0,0,0,0,s,0,0,-1,0,0,n,-i,o,1]:e.axis==="y"?[0,0,u,0,0,s,0,0,-1,0,0,0,-i,o,n,1]:[u,0,0,0,0,s,0,0,0,0,1,0,n,o,i,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function Ps(e,t){let{xAxis:n,yAxis:o,normal:r,tx:a,ty:i,tz:u}=fs(e),s=Hi(ys(e),n,o,r,a,i,u,Ji,gs(e));return s?hs(s,t)??Bo(e,t):Bo(e,t)}function vs(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function xs(e){return vs(e)?Ki:Ho}function bs(e){return e.axis==="x"?[e.left+e.width/2,-e.z,e.top+e.height/2]:e.axis==="y"?[-e.z,e.top+e.height/2,e.left+e.width/2]:[e.left+e.width/2,e.top+e.height/2,e.z]}function Ss(e,t){let n=bs(e),o=t.meshRotation;o&&(n=ko(n,o[0]??0,o[1]??0,o[2]??0));let[r,a]=ko(n,t.rotX,0,t.rotY);return{x:r,y:a}}function Cs(e,t,n){let o=e.filter(l=>t.has(l.face)).map(l=>({item:l,...Ss(l,n)}));if(o.length===0)return[];let r=1/0,a=-1/0,i=1/0,u=-1/0;for(let l of o)r=Math.min(r,l.x),a=Math.max(a,l.x),i=Math.min(i,l.y),u=Math.max(u,l.y);let s=4,c=Math.max(1e-6,a-r),m=Math.max(1e-6,u-i),p=new Map;for(let l of o){let h=Math.min(s-1,Math.max(0,Math.floor((l.x-r)/c*s))),f=Math.min(s-1,Math.max(0,Math.floor((l.y-i)/m*s))),P=`${h}:${f}`,v=p.get(P);v||(v={tx:h,ty:f,sourceIndex:l.item.sourceIndex,items:[]},p.set(P,v)),v.items.push(l.item),v.sourceIndex=Math.min(v.sourceIndex,l.item.sourceIndex)}return Array.from(p.values()).sort((l,h)=>l.ty-h.ty||l.tx-h.tx||l.sourceIndex-h.sourceIndex).flatMap(l=>l.items)}function Yo(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:a}=e,i=ps(o);if(i.length===0)return null;let u=new Set(i.map(b=>b.face));n.classList.add("polycss-voxel-mesh");let s=xs(t);s!==Ho&&n.style.setProperty("--polycss-voxel-primitive",`${s}px`);let c=new Map,m=(b,d)=>{let y=`${b}|${d}`,x=c.get(y);if(x)return x;let S=ms(No[b],d,r,a);return c.set(y,S),S},p=new Map,l=new Map,h=new Map,f=new Map;for(let b of i){let d=f.get(b.face);d||(d=[],f.set(b.face,d)),d.push(b)}let P="",v=0,E=new Set,M=b=>{let d=p.get(b.sourceIndex);return d||(d=t.createElement("b"),p.set(b.sourceIndex,d),ts(d,m(b.face,b.baseColor),Ps(b,s))),d},A=b=>{let d=l.get(b);return d||(d=t.createElement("span"),d.className=`polycss-voxel-face polycss-voxel-face-${b}`,d.dataset.polycssVoxelFace=b,d.__polycssVoxelFaceHost=!0,l.set(b,d)),d},g=()=>{for(let b of Array.from(n.childNodes))if(!b.__polycssVoxelFaceHost)return b;return null},L=(b,d)=>{let y=d.map(C=>C.sourceIndex).join(",");if(h.get(b)===y)return;let x=A(b),S=t.createDocumentFragment();for(let C of d)S.appendChild(M(C));x.replaceChildren(S),h.set(b,y)},T=()=>{for(let b of bn)u.has(b)&&L(b,f.get(b)??[])},_=b=>new Set(b.split("|").filter(Boolean)),D=b=>{let d=_(b);return bn.filter(y=>d.has(y)&&u.has(y))},R=b=>{let d=0;for(let y of b)d+=f.get(y)?.length??0;return d},N=b=>{let d=new Set,y=[],x=new Map;for(let S of b){d.has(S.face)||(d.add(S.face),y.push(S.face));let C=x.get(S.face);C||(C=[],x.set(S.face,C)),C.push(S)}return{orderedFaces:y,itemsByFace:x}},Y=(b,d)=>{let y=new Set(b);for(let x of E){if(y.has(x))continue;let S=l.get(x);S?.parentNode===n&&n.removeChild(S)}if(d){let x=t.createDocumentFragment();for(let S of b)x.appendChild(A(S));n.insertBefore(x,g()),E=y;return}for(let x=0;x<b.length;x+=1){let S=b[x],C=A(S);if(C.parentNode===n)continue;let O=null;for(let k=x+1;k<b.length;k+=1){let w=l.get(b[k]);if(w?.parentNode===n){O=w;break}}n.insertBefore(C,O??g())}E=y},H=(b,d,y)=>{if(!y){let k=D(b);Y(k,!1),v=R(k);return}let x=new Set(b.split("|").filter(Boolean)),S=Cs(i,x,d),{orderedFaces:C,itemsByFace:O}=N(S);for(let k of C)L(k,O.get(k)??[]);Y(C,!0),v=S.length};return T(),{get brushCount(){return v},render(b){P=Io(b),H(P,b,!0)},syncCamera(b){let d=Io(b);d!==P&&(P=d,H(d,b,!1))},dispose(){for(let b of l.values())b.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),p.clear(),l.clear(),h.clear(),v=0,E=new Set,P=""}}}var Sn=new WeakMap;function $o(e,t){Sn.set(e,t)}function jo(e){Sn.delete(e)}function ut(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=Sn.get(t);if(n)return n}t=t.parentElement}return null}function ct(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let a=r.getBoundingClientRect();if(!(a.width<=0||a.height<=0)&&t>=a.left&&t<=a.right&&n>=a.top&&n<=a.bottom)return!0}return!1}function Cn(e,t,n){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let r of o){if(n&&!n(r))continue;let a=ut(r);if(a&&ct(r,e,t))return a}return null}var Zo=new WeakMap,Ko=new WeakMap;function Ys(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 $s(e,t,n){let o=typeof t=="number"?t:t?.[0]??1,r=typeof t=="number"?t:t?.[1]??1,a=typeof t=="number"?t:t?.[2]??1,i=o!==1||r!==1||a!==1,u=!!n&&(!!n[0]||!!n[1]||!!n[2]),s=e?[e[1]*et,e[0]*et,e[2]*et]:[0,0,0],c=[];return(s[0]!==0||s[1]!==0||s[2]!==0)&&c.push(`translate3d(${s[0]}px, ${s[1]}px, ${s[2]}px)`),u&&(n[0]&&c.push(`rotateY(${-n[0]}deg)`),n[1]&&c.push(`rotateX(${-n[1]}deg)`),n[2]&&c.push(`rotateZ(${-n[2]}deg)`)),i&&c.push(`scale3d(${o}, ${r}, ${a})`),c.length>0?c.join(" "):void 0}function Qo(e){if(e.length===0)return e;let t=ks(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let a=i=>[i[0]-n,i[1]-o,i[2]-r];return e.map(i=>({...i,vertices:i.vertices.map(a),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(u=>({...u,vertices:u.vertices.map(a)}))}:null}))}var te=Ms({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},voxelSource:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},atomicAtlas:{type:Boolean,default:!1},onFrameReady:{type:Function,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},merge:{type:Boolean,default:!0},meshResolution:{type:String,default:void 0},parseOptions:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=oe(()=>e.src??""),a=oe(()=>{let F={...e.parseOptions??{}};return e.mtl&&(F.mtlUrl=e.mtl),e.meshResolution!==void 0&&(F.meshResolution=e.meshResolution),Object.keys(F).length>0?F:void 0}),i=Ht(r,a.value),u=oe(()=>e.src?i.polygons.value:e.polygons??[]),s=dt(null),c=null;Nt(u,()=>{s.value=null,c=null});let m=oe(()=>s.value??u.value),p=oe(()=>e.merge?Vs(m.value,e.meshResolution!==void 0?{meshResolution:e.meshResolution}:void 0):m.value),l=oe(()=>e.autoCenter?Qo(p.value):p.value),h=!t.polygon,f=Nn(),P=Ts(ue,null),v=dt(0),E;Uo(F=>{E?.(),E=P?.store.subscribe(()=>{v.value++}),F(()=>{E?.(),E=void 0})});let M=oe(()=>e.textureLighting??f?.value.textureLighting??"baked"),A=oe(()=>f?.value.strategies),g=oe(()=>e.seamBleed??f?.value.seamBleed??Is),L=oe(()=>f?.value.directionalLight),T=oe(()=>f?.value.ambientLight),_=oe(()=>e.src?i.voxelSource.value:e.voxelSource??void 0),D=oe(()=>!!(_.value&&s.value===null&&!t.polygon&&!t.default&&M.value==="baked"&&!e.castShadow)),R=oe(()=>{if(M.value!=="dynamic")return null;let F=e.rotation;if(!F||F[0]===0&&F[1]===0&&F[2]===0)return null;let U=f?.value.directionalLight?.direction;if(!U)return null;let $=Wo(U,F),V=Math.hypot($[0],$[1],$[2])||1;return{"--plx":($[0]/V).toFixed(2),"--ply":($[1]/V).toFixed(2),"--plz":($[2]/V).toFixed(2)}}),N=dt(e.rotation),Y=dt(0),H=oe(()=>{let F=L.value;if(!F)return F;let U=Os(F);return N.value?{...U,direction:Wo(U.direction,N.value)}:U}),b=void 0,d=oe(()=>{if(!h||D.value)return[];let F=_t(l.value),U=g.value==="auto"||typeof g.value=="number"&&Number.isFinite(g.value)&&g.value>0?Bt(l.value,{directionalLight:H.value,ambientLight:T.value}):null,$=ws(l.value,{directionalLight:H.value,ambientLight:T.value});return l.value.map((V,X)=>We(V,X,{directionalLight:H.value,ambientLight:T.value,seamBleed:U?.has(X)?g.value:void 0,seamEdges:U?.get(X),textureEdgeRepairEdges:F[X],lightOccludedPolyIndices:b},$[X]))}),y=oe(()=>e.textureQuality),x=oe(()=>e.atomicAtlas),S=Ge(d,M,y,A,x),C=oe(()=>h?yn(S.plans.value,M.value,A.value):{});Nt(()=>S.entries.value,()=>{e.atomicAtlas&&S.ready.value&&e.onFrameReady?.()},{flush:"sync"});let O=oe(()=>Ys(C.value)),k=oe(()=>{if(!e.castShadow||f?.value.receiverRegistry?.hasAny.value)return null;let F=f?.value,U=F?.groundCssZ??null;if(U===null)return null;let $=F?.shadow,V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=e.position?.[2]??0,se=U-G*et,le=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),re=[],me=1/0,pe=1/0,ce=-1/0,ye=-1/0,Q=1/0,z=1/0,I=-1/0,ae=-1/0,he=l.value,ze=d.value;for(let Se=0;Se<he.length;Se++){if(le.has(Se)||!ze[Se])continue;let Le=he[Se],ot=[];for(let Ne of Le.vertices){let Ce=[Ne[1]*et,Ne[0]*et,Ne[2]*et];Ce[0]<Q&&(Q=Ce[0]),Ce[1]<z&&(z=Ce[1]),Ce[0]>I&&(I=Ce[0]),Ce[1]>ae&&(ae=Ce[1]);let ve=Ns(Ce,X,se);ot.push(ve),ve[0]<me&&(me=ve[0]),ve[1]<pe&&(pe=ve[1]),ve[0]>ce&&(ce=ve[0]),ve[1]>ye&&(ye=ve[1])}re.push(ot)}if(re.length===0)return null;let Pe=$?.maxExtend??2e3,be=Math.max(me,Q-Pe),Fe=Math.max(pe,z-Pe),nt=Math.min(ce,I+Pe),Ve=Math.min(ye,ae+Pe),_e=nt-be,Be=Ve-Fe;if(!(_e>0)||!(Be>0))return null;let gt=$?.color??"#000000",Vn=$?.opacity??.25,Ae=_s(gt)?.rgb??[0,0,0],He="";for(let Se of re){let we=Fs(Se);He+=`M${(we[0][0]-be).toFixed(3)},${(we[0][1]-Fe).toFixed(3)}`;for(let Le=1;Le<we.length;Le++)He+=`L${(we[Le][0]-be).toFixed(3)},${(we[Le][1]-Fe).toFixed(3)}`;He+="Z"}return Ie("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(_e),height:String(Be),viewBox:`0 0 ${_e} ${Be}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${be.toFixed(3)}px,${Fe.toFixed(3)}px,${se.toFixed(3)}px)`}},[Ie("path",{d:He,fill:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"fill-rule":"nonzero",stroke:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"stroke-width":"3","stroke-linejoin":"round",opacity:Vn.toFixed(4)})])}),w=oe(()=>e.receiveShadow?Ls(l.value):void 0),B=oe(()=>{if(!e.receiveShadow)return[];let F=f?.value,U=F?.shadowRegistry;if(!U)return[];U.version.value,v.value;let $=U.getEntries();if($.length===0)return[];let V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=F?.shadow?.lift??.001,se=Hs(l.value,e.position??[0,0,0],e.scale,new Set,G,e.rotation);if(se.length===0)return[];let le=[],re=0,me=w.value;for(let Q of $){let z=Q(),I=z.renderedPolygonIndices,ae=zs(z.polygons,z.position,z.scale,I?Pe=>I.has(Pe):()=>!0,z.rotation??null),he=z.polygons===l.value,ze;if(!he&&z.polygons.length>=40){let Pe=z.rotation??null,be=z.position,Fe=JSON.stringify(z.scale??null),nt=`${be[0]},${be[1]},${be[2]}|${Pe?Pe.join(","):"n"}|${Fe}`,Ve=Zo.get(z.polygons);(Ve===void 0||Ko.get(z.polygons)!==nt)&&(Ve=Bs(z.polygons,be,z.scale,Pe),Zo.set(z.polygons,Ve),Ko.set(z.polygons,nt)),ze=Ve}le.push({id:Symbol(`caster-${re++}`),items:ae,selfShadowEdgeMap:he?me:void 0,edgeOwners:ze,casterPolygonCount:z.polygons.length})}let pe=P?.store.getState().cameraState,ce={rotX:pe?.rotX??65,rotY:pe?.rotY??45,meshRotation:e.rotation};return Ds({receiverPlanes:se,receiverPolygons:l.value,receiverHasTexture:l.value.some(Q=>Q.texture!==void 0),casters:le,lightDir:X,cameraRot:ce,ambientLight:F?.ambientLight,directionalLight:F?.directionalLight,shadow:{color:F?.shadow?.color,opacity:F?.shadow?.opacity??.25,maxExtend:F?.shadow?.maxExtend}}).map(Q=>Ie("svg",{key:`receiver-${Q.faceIndex}`,class:"polycss-shadow polycss-shadow-svg polycss-shadow-receiver","data-poly-shadow-type":"receiver","data-poly-shadow-receiver-face":String(Q.faceIndex),"data-poly-shadow-receiver-polys":JSON.stringify(Q.memberPolyIndices),width:String(Q.width),height:String(Q.height),viewBox:`0 0 ${Q.width} ${Q.height}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:Q.matrixCss}},Q.paths.map((z,I)=>Ie("path",{key:I,d:z.d,fill:Q.fill,stroke:Q.fill,"stroke-width":"3","stroke-linejoin":"round",opacity:Q.opacity.toFixed(4),"data-poly-shadow-caster-polys":JSON.stringify(z.casterPolygonIndices)}))))}),W=Symbol();Nt(()=>e.castShadow,(F,U,$)=>{let V=f?.value.shadowRegistry;V&&(F?V.register(W,()=>{let X=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),G=new Set,se=d.value;for(let le=0;le<se.length;le++)se[le]&&!X.has(le)&&G.add(le);return{polygons:l.value,position:e.position??[0,0,0],scale:e.scale,rotation:e.rotation,renderedPolygonIndices:G}}):V.unregister(W),$(()=>V.unregister(W)))},{immediate:!0});let Z=Symbol();Nt(()=>e.receiveShadow,(F,U,$)=>{let V=f?.value.receiverRegistry;V&&(F?V.register(Z):V.unregister(Z),$(()=>V.unregister(Z)))},{immediate:!0}),Xo(()=>{f?.value.shadowRegistry?.unregister(W),f?.value.receiverRegistry?.unregister(Z)});let q=dt(null),j={get element(){return q.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>c??l.value,setPolygons(F){let U=e.autoCenter?Qo(F):F;c=U;let $=q.value,V=$&&h&&fn($,U,{directionalLight:H.value,ambientLight:T.value,textureLighting:M.value,strategies:A.value,seamBleed:g.value,colorFrame:++Y.value,colorFreezeFrames:0});s.value=F.slice()},updatePolygon(F,U){let $=c??l.value,V=typeof F=="number"?F:$.indexOf(F);V<0||V>=$.length||(Object.assign($[V],U),s.value=$.slice(),c=null)},rebakeAtlas:()=>{N.value=e.rotation}};o(j),As(()=>{q.value&&$o(q.value,j)}),Xo(()=>{q.value&&jo(q.value)});let ee=dt(null);Uo(F=>{let U=q.value;if(ee.value?.dispose(),ee.value=null,!D.value||!U)return;let $=Yo({doc:U.ownerDocument,wrapper:U,polygons:l.value,directionalLight:H.value,ambientLight:T.value});if(!$)return;let V=()=>{let G=P?.store.getState().cameraState;return{rotX:G?.rotX??65,rotY:G?.rotY??45,meshRotation:e.rotation}};ee.value=$,$.render(V());let X=P?.store.subscribe(()=>{$.syncCamera(V())});F(()=>{X?.(),$.dispose(),ee.value===$&&(ee.value=null)})});let ne=null;function ie(F,U,$){let V=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let re=document.elementsFromPoint(U,$),me=new Set;for(let pe of re){let ce=ut(pe);ce&&!me.has(ce)&&(me.add(ce),V.push({object:ce}))}}let X=0,G=0,se=P?.cameraElRef.value;if(se){let re=se.getBoundingClientRect();re.width>0&&re.height>0&&(X=(U-re.left)/re.width*2-1,G=-(($-re.top)/re.height*2-1))}let le=0;return ne&&(le=Math.hypot(U-ne.x,$-ne.y)),{object:V[0]?.object??j,eventObject:j,intersections:V,pointer:{x:X,y:G},delta:le,nativeEvent:F,stopPropagation:()=>F.stopPropagation()}}function J(F,U,$,V){F&&F(ie(U,$,V))}return()=>{let U={transform:$s(e.position,e.scale,e.rotation),...R.value??void 0,...n.style,...O.value??void 0},$=Object.fromEntries(Object.entries(n).filter(([z])=>z!=="style"&&z!=="class")),V=`polycss-mesh${D.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,X={};e.onClick&&(X.onClick=z=>{let I=z;J(e.onClick,I,I.clientX,I.clientY)}),e.onContextMenu&&(X.onContextmenu=z=>{let I=z;J(e.onContextMenu,I,I.clientX,I.clientY)}),e.onDoubleClick&&(X.onDblclick=z=>{let I=z;J(e.onDoubleClick,I,I.clientX,I.clientY)}),e.onWheel&&(X.onWheel=z=>{let I=z;J(e.onWheel,I,I.clientX,I.clientY)}),X.onPointerdown=z=>{let I=z;ne={x:I.clientX,y:I.clientY},J(e.onPointerDown,I,I.clientX,I.clientY)},X.onPointerup=z=>{let I=z;J(e.onPointerUp,I,I.clientX,I.clientY),ne=null},e.onPointerMove&&(X.onPointermove=z=>{let I=z;J(e.onPointerMove,I,I.clientX,I.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(X.onPointerenter=z=>{let I=z;J(e.onPointerOver,I,I.clientX,I.clientY),J(e.onPointerEnter,I,I.clientX,I.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(X.onPointerleave=z=>{let I=z;J(e.onPointerOut,I,I.clientX,I.clientY),J(e.onPointerLeave,I,I.clientX,I.clientY)}),e.onPointerCancel&&(X.onPointercancel=z=>{let I=z;J(e.onPointerCancel,I,I.clientX,I.clientY),ne=null});let G=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:U,...G,...X,...$},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:U,...G,...X,...$},t.error?.({error:i.error.value})??[]);let se=l.value,le=t.polygon?se.map((z,I)=>Ie("template",{key:I},t.polygon?.({polygon:z,index:I}))):D.value?[]:S.entries.value.map((z,I)=>{if(z)return Je({entry:z,page:S.pages.value[z.pageIndex],textureLighting:M.value,solidPaintDefaults:C.value});let ae=S.plans.value[I];if(!ae||ae.texture)return null;if(lt(ae))return Qe({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});if(st(ae))return Ze({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});let he=A.value?.disable?.includes("i")?null:Rs(ae);return he?hn({entry:ae,geometry:he,textureLighting:M.value,solidPaintDefaults:C.value}):Ke({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value,forceBorderShape:!S.useFullRectSolid.value})}),re=t.default?.()??[],me=k.value,pe=me?[me]:[],ce=B.value,ye=f?.value?.sceneEl??null,Q=ye&&ce.length>0?[Ie(Es,{to:ye},ce)]:[];return Ie("div",{ref:q,class:V,style:U,...G,...X,...$},[...pe,...Q,...le,...re])}}});import{defineComponent as js,h as Jo,computed as Mn}from"vue";import{BASE_TILE as Ct}from"@layoutit/polycss-core";function Xs(e,t,n,o,r){let a=typeof n=="number"?n:n?.[0]??1,i=typeof n=="number"?n:n?.[1]??1,u=typeof n=="number"?n:n?.[2]??1,s=a!==1||i!==1||u!==1,c=!!t&&(!!t[0]||!!t[1]||!!t[2]),m=(e?.[1]??0)*Ct,p=(e?.[0]??0)*Ct,l=(e?.[2]??0)*Ct,h=[];return h.push(`translate3d(${m}px, ${p}px, ${l}px)`),c&&(t[0]&&h.push(`rotateY(${-t[0]}deg)`),t[1]&&h.push(`rotateX(${-t[1]}deg)`),t[2]&&h.push(`rotateZ(${-t[2]}deg)`)),s&&h.push(`scale3d(${a}, ${i}, ${u})`),h.push(`translate(${-o/2}px, ${-r/2}px)`),h.join(" ")}var er=js({name:"PolyIframe",props:{src:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},position:{type:Array,default:void 0},rotation:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},allow:{type:String,default:void 0},sandbox:{type:String,default:void 0},loading:{type:String,default:void 0},referrerpolicy:{type:String,default:void 0},title:{type:String,default:void 0},class:{type:String,default:void 0},style:{type:Object,default:void 0}},setup(e){let t=Mn(()=>e.width*Ct),n=Mn(()=>e.height*Ct),o=Mn(()=>Xs(e.position,e.rotation,e.scale,t.value,n.value));return()=>{let r={position:"absolute",left:"0",top:"0",transformOrigin:"0 0",transformStyle:"preserve-3d",transform:o.value,...e.style??{}},a={src:e.src,style:{width:`${t.value}px`,height:`${n.value}px`,border:"0",display:"block",background:"#000"}};return e.allow&&(a.allow=e.allow),e.sandbox&&(a.sandbox=e.sandbox),e.loading&&(a.loading=e.loading),e.referrerpolicy&&(a.referrerpolicy=e.referrerpolicy),e.title&&(a.title=e.title),Jo("div",{class:e.class?`polycss-iframe ${e.class}`:"polycss-iframe",style:r},[Jo("iframe",a)])}}});import{defineComponent as Us,h as Ws,computed as qs}from"vue";var tr=Us({name:"PolyGround",props:{size:{type:Number,default:6},z:{type:Number,default:0},center:{type:Array,default:()=>[0,0]},color:{type:String,default:"#7d848e"},class:{type:String,default:void 0}},setup(e){let t=qs(()=>{let n=e.size/2,[o,r]=e.center;return[{vertices:[[o-n,r-n,e.z],[o+n,r-n,e.z],[o+n,r+n,e.z],[o-n,r+n,e.z]],color:e.color}]});return()=>Ws(te,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as nr}from"vue";function Gs(e){return typeof e=="function"?nr(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):nr(()=>({texture:e.texture,key:e.key}))}import{computed as mt,defineComponent as Zs,h as or}from"vue";var Ks=4;function Yt(e,t=Ks){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function Qs(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,a)=>r-a),n=[...new Set(e.map(r=>r[1]))].sort((r,a)=>r-a);if(t.length!==2||n.length!==2)return null;let o=new Set([`${t[0]},${n[0]}`,`${t[0]},${n[1]}`,`${t[1]},${n[0]}`,`${t[1]},${n[1]}`]);for(let r of e)if(!o.has(`${r[0]},${r[1]}`))return null;return{u0:t[0],u1:t[1],v0:n[0],v1:n[1]}}function Js({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let{u0:u,u1:s,v0:c,v1:m}=n,p=s-u,l=m-c,h=1/p,f=1/l,P=Math.max(c,m),v=u/p,E=(1-P)/l,M={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Yt(h)} ${Yt(f)}`,backgroundPosition:`${Yt(-v)} ${Yt(-E)}`,pointerEvents:i==="none"?"none":void 0,...r},A=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,T])=>[`data-${L}`,String(T)])):{},g=o?.trim()||void 0;return or("i",{class:g,style:M,...A,...a})}var rr=Zs({name:"Poly",inheritAttrs:!1,props:{vertices:{type:Array,required:!0},color:{type:String},texture:{type:String},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},material:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},context:{type:Object,default:void 0},baseColor:{type:String},pointerEvents:{type:String,default:"auto"}},setup(e,{attrs:t}){let n=mt(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=mt(()=>e.textureQuality??e.context?.textureQuality),r=mt(()=>e.material?.texture??e.texture),a=mt(()=>e.material&&e.uvs?Qs(e.uvs):null),i=mt(()=>{let c=e.context?.tileSize??50;return We({vertices:e.vertices,color:e.baseColor??e.color,texture:r.value,uvs:e.uvs,data:e.data},0,{tileSize:c,layerElevation:e.context?.layerElevation??c,directionalLight:e.context?.directionalLight})}),u=mt(()=>a.value?[]:[i.value]),s=Ge(u,n,o);return()=>{let c=i.value,m=s.entries.value[0],p=[];e.position&&p.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&p.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):p.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&p.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&p.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&p.push(`rotateZ(${e.rotation[2]}deg)`));let l=p.length>0?p.join(" "):void 0,h={};if(e.data)for(let[E,M]of Object.entries(e.data))h[`data-${E}`]=String(M);let f={...t,...h},P=Object.fromEntries(Object.entries(f).filter(([E])=>E!=="class"&&E!=="style")),v;return a.value&&e.material&&c?v=Js({plan:c,material:e.material,uvRect:a.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):m?v=Je({entry:m,page:s.pages.value[m.pageIndex],textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):c&&!c.texture&&(v=st(c)?Ze({entry:c,textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):lt(c)?Qe({entry:c,textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):Ke({entry:c,textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"})),v?l?or("div",{class:"polycss-poly-wrapper",style:{transform:l,position:"absolute",transformStyle:"preserve-3d"}},[v]):v:null}}});import{computed as Me,defineComponent as Ee,h as Te}from"vue";import{boxPolygons as el,planePolygons as tl,ringPolygons as nl,octahedronPolygons as ol,spherePolygons as rl,tetrahedronPolygons as al,icosahedronPolygons as il,dodecahedronPolygons as sl,cylinderPolygons as ll,conePolygons as ul,torusPolygons as cl}from"@layoutit/polycss-core";var ar=Ee({name:"PolyBox",props:{size:{type:[Number,Array],default:void 0},center:{type:Array,default:void 0},min:{type:Array,default:void 0},max:{type:Array,default:void 0},color:{type:String,default:void 0},texture:{type:String,default:void 0},material:{type:Object,default:void 0},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},faces:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>el({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture,material:e.material,uvs:e.uvs,data:e.data,faces:e.faces}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ir=Ee({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,default:void 0},offset:{type:[Number,Array],default:void 0},along:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>tl({axis:e.axis,size:e.size,offset:e.offset,along:e.along,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),sr=Ee({name:"PolyRing",props:{axis:{type:Number,required:!0},radius:{type:Number,required:!0},halfThickness:{type:Number,default:void 0},segments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>nl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),lr=Ee({name:"PolyOctahedron",props:{center:{type:Array,required:!0},size:{type:Number,required:!0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ol({center:e.center,size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ur=Ee({name:"PolyTetrahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>al({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),cr=Ee({name:"PolyIcosahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>il({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),dr=Ee({name:"PolyDodecahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>sl({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),mr=Ee({name:"PolySphere",props:{radius:{type:Number,default:void 0},subdivisions:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>rl({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),pr=Ee({name:"PolyCylinder",props:{radius:{type:Number,default:void 0},radiusTop:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ll({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),fr=Ee({name:"PolyCone",props:{radius:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ul({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),yr=Ee({name:"PolyTorus",props:{radius:{type:Number,default:void 0},tube:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},tubularSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>cl({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as dl,inject as ml,onMounted as pl,onBeforeUnmount as fl,watch as En,ref as yl}from"vue";import{BASE_TILE as gr}from"@layoutit/polycss-core";var gl=150,hr=4,hl=513e-6,Pl=10,vl=3,Pr=16.67,xl=50,vr=.1,xr=10,br=0,Sr=5e3,bl=.3,Sl=.05;function Cl(e){return e===!0?-1:e===void 0||e===!1?1:e}function Ml(e,t,n,o,r){let a=Cl(r),i=e/hr*a,u=t/hr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Cr(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*gr),s=-t/(a*gr*i),c=-r*Math.PI/180,m=Math.cos(c),p=Math.sin(c);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var Mr=dl({name:"PolyOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:vr},maxZoom:{type:Number,default:xr},minDistance:{type:Number,default:br},maxDistance:{type:Number,default:Sr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=ml(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=yl(!1),f=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=d=>{if(e.drag&&p===null&&d.isPrimary!==!1){d.preventDefault(),p=d.pointerId,l={x:d.clientX,y:d.clientY},g.style.cursor="grabbing";try{d.target.setPointerCapture(d.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},D=d=>{if(p===null||d.pointerId!==p||!e.drag)return;d.preventDefault();let y=d.clientX-l.x,x=d.clientY-l.y;l={x:d.clientX,y:d.clientY};let S=r.value,C=S.state;if(d.shiftKey){let{dWorldX:O,dWorldY:k}=Cr(y,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}else{let{rotX:O,rotY:k}=Ml(y,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}i(),o.updateCameraFromRef(S),s()},R=d=>{if(p===d.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{d.target.releasePointerCapture(d.pointerId)}catch{}h.value=!1,m()}},N=d=>{d.preventDefault()},Y=d=>{d.button===2&&(L=!0,T={x:d.clientX,y:d.clientY})},H=d=>{if(!L||!e.drag)return;let y=d.clientX-T.x,x=d.clientY-T.y;T={x:d.clientX,y:d.clientY};let S=r.value,C=S.state,{dWorldX:O,dWorldY:k}=Cr(y,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]}),i(),o.updateCameraFromRef(S),s()},b=d=>{d.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),f=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Pl:N*=vl;let Y=r.value;if(e.dolly){let H=e.minDistance??br,b=e.maxDistance??Sr,d=Math.max(H,Math.min(b,Y.state.distance+N*Sl));Y.update({distance:d})}else{let H=Math.exp(-N*hl),b=e.minZoom??vr,d=e.maxZoom??xr,y=Math.max(b,Math.min(d,Y.state.zoom*H));Y.update({zoom:y})}i(),o.updateCameraFromRef(Y),L||(L=!0,c()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},gl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(xl,T?D-T:Pr);T=D;let H=(R.speed??bl)*(N/Pr),b=r.value,d=b.state;if(R.axis==="x"){let y=((d.rotX+H)%360+360)%360;b.update({rotX:y})}else{let y=((d.rotY+H)%360+360)%360;b.update({rotY:y})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return pl(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),fl(()=>{f?.(),P?.(),v?.(),f=null,P=null}),En(()=>e.drag,g=>{g&&!f&&E(),!g&&f&&(f(),f=null)}),En(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),En(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as El,inject as Tl,onMounted as Al,onBeforeUnmount as wl,watch as Tn,ref as Ll}from"vue";import{BASE_TILE as Er}from"@layoutit/polycss-core";var Rl=150,Tr=4,Ol=513e-6,Dl=10,kl=3,Ar=16.67,Il=50,wr=.1,Lr=10,Rr=0,Or=5e3,Fl=.3,Vl=.05;function _l(e){return e===!0?-1:e===void 0||e===!1?1:e}function Dr(e,t,n,o,r){let a=_l(r),i=e/Tr*a,u=t/Tr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Bl(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*Er),s=-t/(a*Er*i),c=-r*Math.PI/180,m=Math.cos(c),p=Math.sin(c);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var kr=El({name:"PolyMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:wr},maxZoom:{type:Number,default:Lr},minDistance:{type:Number,default:Rr},maxDistance:{type:Number,default:Or},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Tl(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=Ll(!1),f=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=d=>{if(e.drag&&p===null&&d.isPrimary!==!1){d.preventDefault(),p=d.pointerId,l={x:d.clientX,y:d.clientY},g.style.cursor="grabbing";try{d.target.setPointerCapture(d.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},D=d=>{if(p===null||d.pointerId!==p||!e.drag)return;d.preventDefault();let y=d.clientX-l.x,x=d.clientY-l.y;l={x:d.clientX,y:d.clientY};let S=r.value,C=S.state;if(d.shiftKey){let{rotX:O,rotY:k}=Dr(y,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}else{let{dWorldX:O,dWorldY:k}=Bl(y,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}i(),o.updateCameraFromRef(S),s()},R=d=>{if(p===d.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{d.target.releasePointerCapture(d.pointerId)}catch{}h.value=!1,m()}},N=d=>{d.preventDefault()},Y=d=>{d.button===2&&(L=!0,T={x:d.clientX,y:d.clientY})},H=d=>{if(!L||!e.drag)return;let y=d.clientX-T.x,x=d.clientY-T.y;T={x:d.clientX,y:d.clientY};let S=r.value,C=S.state,{rotX:O,rotY:k}=Dr(y,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k}),i(),o.updateCameraFromRef(S),s()},b=d=>{d.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),f=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Dl:N*=kl;let Y=r.value;if(e.dolly){let H=e.minDistance??Rr,b=e.maxDistance??Or,d=Math.max(H,Math.min(b,Y.state.distance+N*Vl));Y.update({distance:d})}else{let H=Math.exp(-N*Ol),b=e.minZoom??wr,d=e.maxZoom??Lr,y=Math.max(b,Math.min(d,Y.state.zoom*H));Y.update({zoom:y})}i(),o.updateCameraFromRef(Y),L||(L=!0,c()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},Rl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(Il,T?D-T:Ar);T=D;let H=(R.speed??Fl)*(N/Ar),b=r.value,d=b.state;if(R.axis==="x"){let y=((d.rotX+H)%360+360)%360;b.update({rotX:y})}else{let y=((d.rotY+H)%360+360)%360;b.update({rotY:y})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return Al(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),wl(()=>{f?.(),P?.(),v?.(),f=null,P=null}),Tn(()=>e.drag,g=>{g&&!f&&E(),!g&&f&&(f(),f=null)}),Tn(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),Tn(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as zl,h as $t,inject as Ir,onBeforeUnmount as Fr,onMounted as An,ref as Mt,computed as pt}from"vue";import{arrowPolygons as Hl,eulerXYZFromQuat as Nl,planePolygons as Yl,quatFromAxisAngle as $l,quatFromEulerXYZ as jl,quatMultiply as Xl,ringQuadPolygons as Ul}from"@layoutit/polycss-core";var jt="#ff3653",Xt="#8adb00",Ut="#2c8fff",Wl=.6,ql=.8,Gl=1,Oe=50,Vr=60,Zl=.6,Kl=.0125,Ql=.15,Jl=.04,eu=1,_r=.02,wn=1.04,tu=.1,nu=.25,jr=1e-4,Et={0:1,1:0,2:2},Br=[{cssAxis:0,sign:1,key:"x",color:jt},{cssAxis:0,sign:-1,key:"-x",color:jt},{cssAxis:1,sign:1,key:"y",color:Xt},{cssAxis:1,sign:-1,key:"-y",color:Xt},{cssAxis:2,sign:1,key:"z",color:Ut},{cssAxis:2,sign:-1,key:"-z",color:Ut}],zr=[{cssAxis:0,key:"x",color:jt},{cssAxis:1,key:"y",color:Xt},{cssAxis:2,key:"z",color:Ut}],Hr=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Ut},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Xt},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:jt}];function Ln(e,t){let n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!n)return e;let o=parseInt(n[1],16),r=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${o}, ${r}, ${a}, ${t})`}function Wt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function ou(e){return e.replace("-","")[0]}function Rn(e,t,n,o){let r=n*Math.PI/180,a=o*Math.PI/180,i=[0,0,0];i[e]=t;let u=i[0]*Math.sin(a)+i[1]*Math.cos(a),s=i[2];return u*Math.sin(r)+s*Math.cos(r)<0}function ru(e){if(e.length===0)return Vr;let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?Math.max(r-t,a-n,i-o)*Oe*Zl:Vr}function au(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?[(n+a)/2*Oe,(t+r)/2*Oe,(o+i)/2*Oe]:[0,0,0]}function Nr(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),a=o.getBoundingClientRect();e.wrapper.removeChild(o);let i=(a.left-r.left)/t,u=(a.top-r.top)/t,s=i*i+u*u;if(s<jr)return;let c=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=l=>{let h=l.clientX-e.startClientX,f=l.clientY-e.startClientY,P=(h*i+f*u)/s;P=Wt(P,e.translationSnap);let v=[c[0]+P*n[0],c[1]+P*n[1],c[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},p=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p);let l=h=>{h.stopPropagation(),h.stopImmediatePropagation()};window.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",l,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p)}function Yr(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(p){let l=e.wrapper.ownerDocument.createElement("div");l.style.position="absolute",l.style.left="0",l.style.top="0",l.style.width="0",l.style.height="0",l.style.transform=`translate3d(${p[0]*o}px, ${p[1]*o}px, ${p[2]*o}px)`,e.wrapper.appendChild(l);let h=e.wrapper.getBoundingClientRect(),f=l.getBoundingClientRect();return e.wrapper.removeChild(l),{x:(f.left-h.left)/o,y:(f.top-h.top)/o}}let a=r(t),i=r(n),u=a.x*i.y-i.x*a.y;if(Math.abs(u)<jr)return;let s=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let c=p=>{let l=p.clientX-e.startClientX,h=p.clientY-e.startClientY,f=(i.y*l-i.x*h)/u,P=(-a.y*l+a.x*h)/u;f=Wt(f,e.translationSnap),P=Wt(P,e.translationSnap);let v=[s[0]+f*t[0]+P*n[0],s[1]+f*t[1]+P*n[1],s[2]+f*t[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",c),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function $r(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),a=0,i=e.target.getRotation()??[0,0,0],u=jl(i);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let s=m=>{let p=Math.atan2(m.clientY-o,m.clientX-n),l=p-r;l>Math.PI?l-=2*Math.PI:l<-Math.PI&&(l+=2*Math.PI),a+=l,r=p;let h=a*180/Math.PI;h=Wt(h,e.rotationSnap);let f=[0,0,0];f[e.cssAxis]=1;let P=$l(f,h*Math.PI/180),v=Nl(Xl(P,u));e.onObjectChange?.({object:e.target,rotation:v}),e.onChange?.()},c=()=>{window.removeEventListener("pointermove",s),window.removeEventListener("pointerup",c),window.removeEventListener("pointercancel",c);let m=p=>{p.stopPropagation(),p.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",s),window.addEventListener("pointerup",c),window.addEventListener("pointercancel",c)}function iu(e){return!!e&&typeof e=="object"&&"value"in e}function su(e){return e?iu(e)?e.value??null:e:null}var Xr=zl({name:"PolyTransformControls",props:{object:{type:null,default:null},mode:{type:String,default:"translate"},space:{type:String,default:"world"},size:{type:Number,default:1},showX:{type:Boolean,default:!0},showY:{type:Boolean,default:!0},showZ:{type:Boolean,default:!0},translationSnap:{type:Number,default:null},rotationSnap:{type:Number,default:null},enabled:{type:Boolean,default:!0}},emits:{change:()=>!0,objectChange:e=>!0,mouseDown:()=>!0,mouseUp:()=>!0,draggingChanged:e=>!0},setup(e,{emit:t}){let n=Mt(null),o=Mt(null),r=Mt(new Map),a=pt(()=>su(e.object)),i=Mt(0);An(()=>{i.value++});let u=Mt(0),s=Ir(ue,void 0),c=null;An(()=>{let d=s?.store;d&&(c=d.subscribe(()=>{u.value++}))}),Fr(()=>{c?.()});function m(){u.value;let d=s?.store.getState().cameraState;return{rotX:d?.rotX??65,rotY:d?.rotY??45}}let p=pt(()=>(i.value,ru(a.value?.getPolygons()??[]))),l=pt(()=>p.value*e.size);function h(d){return o.value===d?Gl:n.value===d?ql:Wl}function f(){t("change")}function P(d){t("objectChange",d)}function v(d){t("draggingChanged",d)}function E(){t("mouseDown")}function M(){t("mouseUp")}let A=Ir(ue,void 0),g=null;An(()=>{let d=A?.cameraElRef.value;if(!d)return;let y=x=>{let S=a.value;if(!S||!e.enabled||x.target?.closest(".polycss-transform-gizmo"))return;let O={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let w of Hr){let B=["x","y","z"][w.axisA],W=["x","y","z"][w.axisB];if(!O[B]||!O[W])continue;let Z=document.querySelector(`.polycss-transform-plane--${w.key}`);if(!Z||!ct(Z,x.clientX,x.clientY))continue;x.preventDefault(),x.stopPropagation();let q=Z.closest("[data-poly-transform-controls]");if(!q)return;o.value=w.key,Yr({axisA:w.axisA,axisB:w.axisB,probeDistanceCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:j=>{j||(o.value=null),v(j)}});return}let k=e.mode==="translate"?Br:zr;for(let w of k){let B=w.key.replace("-","")[0];if(!O[B])continue;let W=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${w.key}`);if(!W||!(e.mode==="rotate"?ct(W,x.clientX,x.clientY):ct(W,x.clientX,x.clientY)))continue;x.preventDefault(),x.stopPropagation();let q=W.closest("[data-poly-transform-controls]");if(!q)return;if(o.value=w.key,e.mode==="translate"){let j=w;Nr({cssAxis:j.cssAxis,sign:j.sign,shaftLengthCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:ee=>{ee||(o.value=null),v(ee)}})}else $r({cssAxis:w.cssAxis,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,rotationSnap:e.rotationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:j=>{j||(o.value=null),v(j)}});return}};d.addEventListener("pointerdown",y),g=()=>d.removeEventListener("pointerdown",y)}),Fr(()=>{g?.()});let L=pt(()=>{if(e.mode!=="translate")return[];i.value;let y=l.value/Oe,{rotX:x,rotY:S}=m();return Br.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[ou(C.key)]).map(C=>{let O=h(C.key),k=Rn(C.cssAxis,C.sign,x,S);return{spec:C,polygons:Hl({axis:Et[C.cssAxis],sign:C.sign,shaftLength:y,shaftHalfThickness:y*Kl,headLength:y*Ql,headHalfThickness:y*Jl,color:Ln(C.color,O),shaft:!k})}})}),T=pt(()=>{if(e.mode!=="translate")return[];i.value;let y=l.value/Oe,x={x:e.showX,y:e.showY,z:e.showZ},S=["x","y","z"],{rotX:C,rotY:O}=m(),k=y*nu;return Hr.filter(w=>x[S[w.axisA]]&&x[S[w.axisB]]).map(w=>{let B=h(w.key),W=Et[w.perpAxis],Z=(W+1)%3,q=(W+2)%3,j=Et[Z],ee=Et[q],ne=Rn(j,1,C,O)?-1:1,ie=Rn(ee,1,C,O)?-1:1;return{spec:w,polygons:Yl({axis:W,size:y*tu,offset:[ne*k,ie*k],color:Ln(w.color,B)})}})}),_=pt(()=>{if(e.mode!=="rotate")return[];i.value;let x=l.value*eu/Oe*wn;return zr.filter(S=>({x:e.showX,y:e.showY,z:e.showZ})[S.key]).map(S=>{let C=h(S.key);return{spec:S,polygons:Ul({axis:Et[S.cssAxis],outerRadius:x,color:Ln(S.color,C)})}})}),D=(1-_r)/wn,R=(1+_r)/wn;function N(d){return y=>{if(!e.enabled)return;let x=a.value;if(!x)return;y.stopPropagation();let C=y.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=d.key,Nr({cssAxis:d.cssAxis,sign:d.sign,shaftLengthCss:l.value,wrapper:C,target:x,startClientX:y.nativeEvent.clientX,startClientY:y.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function Y(d){return y=>{if(!e.enabled)return;let x=a.value;if(!x)return;y.stopPropagation();let C=y.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=d.key,Yr({axisA:d.axisA,axisB:d.axisB,probeDistanceCss:l.value,wrapper:C,target:x,startClientX:y.nativeEvent.clientX,startClientY:y.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function H(d){return y=>{if(!e.enabled)return;let x=a.value;if(!x)return;let S=y.eventObject.element;y.stopPropagation();let C=S?.closest("[data-poly-transform-controls]");C&&(o.value=d.key,$r({cssAxis:d.cssAxis,wrapper:C,target:x,startClientX:y.nativeEvent.clientX,startClientY:y.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function b(d){return{onPointerOver:()=>{n.value=d},onPointerOut:()=>{n.value===d&&(n.value=null)}}}return()=>{let d=a.value;if(!d)return null;let y=d.getPosition()??[0,0,0],x=au(d.getPolygons()),S=y[1]*Oe+x[0],C=y[0]*Oe+x[1],O=y[2]*Oe+x[2],k={transform:`translate3d(${S}px, ${C}px, ${O}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},w=e.mode==="translate"?[...L.value.map(({spec:B,polygons:W})=>$t(te,{key:`arrow-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${B.key}`,textureLighting:"baked",onPointerDown:N(B),...b(B.key)})),...T.value.map(({spec:B,polygons:W})=>$t(te,{key:`plane-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${B.key}`,textureLighting:"baked",onPointerDown:Y(B),...b(B.key)}))]:_.value.map(({spec:B,polygons:W})=>$t(te,{key:B.key,polygons:W,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${B.key}`,style:{"--ring-inner-ratio":D,"--ring-outer-ratio":R},textureLighting:"baked",onPointerDown:H(B),...b(B.key)}));return $t("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:k},w)}}});import{defineComponent as lu,inject as uu,onMounted as cu,onBeforeUnmount as du,watch as mu}from"vue";import{BASE_TILE as pu}from"@layoutit/polycss-core";var fu={enabled:!0,lookEnabled:!0,moveEnabled:!0,jumpEnabled:!0,crouchEnabled:!0,lookSensitivity:.15,invertY:!1,moveSpeed:5,jumpVelocity:7,gravity:18,eyeHeight:1.7,crouchHeight:1,groundZ:0,minPitch:5,maxPitch:175};function On(e,t){return{enabled:t.enabled??e.enabled,lookEnabled:t.lookEnabled??e.lookEnabled,moveEnabled:t.moveEnabled??e.moveEnabled,jumpEnabled:t.jumpEnabled??e.jumpEnabled,crouchEnabled:t.crouchEnabled??e.crouchEnabled,lookSensitivity:t.lookSensitivity??e.lookSensitivity,invertY:t.invertY??e.invertY,moveSpeed:t.moveSpeed??e.moveSpeed,jumpVelocity:t.jumpVelocity??e.jumpVelocity,gravity:t.gravity??e.gravity,eyeHeight:t.eyeHeight??e.eyeHeight,crouchHeight:t.crouchHeight??e.crouchHeight,groundZ:t.groundZ??e.groundZ,minPitch:t.minPitch??e.minPitch,maxPitch:t.maxPitch??e.maxPitch}}var Wr=new Set(["KeyW","ArrowUp"]),qr=new Set(["KeyS","ArrowDown"]),Gr=new Set(["KeyA","ArrowLeft"]),Zr=new Set(["KeyD","ArrowRight"]),Kr=new Set(["Space"]),Dn=new Set(["ControlLeft","ControlRight"]);function Ur(e){return Wr.has(e)||qr.has(e)||Gr.has(e)||Zr.has(e)||Kr.has(e)||Dn.has(e)}function yu(){return{change:[],start:[],end:[]}}function ft(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Qr=lu({name:"PolyFirstPersonControls",props:{enabled:{type:Boolean,default:!0},lookEnabled:{type:Boolean,default:!0},moveEnabled:{type:Boolean,default:!0},jumpEnabled:{type:Boolean,default:!0},crouchEnabled:{type:Boolean,default:!0},lookSensitivity:{type:Number,default:.15},invertY:{type:Boolean,default:!1},moveSpeed:{type:Number,default:5},jumpVelocity:{type:Number,default:7},gravity:{type:Number,default:18},eyeHeight:{type:Number,default:1.7},crouchHeight:{type:Number,default:1},groundZ:{type:Number,default:0},minPitch:{type:Number,default:5},maxPitch:{type:Number,default:175}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t,expose:n}){let o=uu(ue,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:a,cameraElRef:i,applyTransformDirect:u}=o,s=On(fu,e),c=[0,0,0],m=null,p=0,l=!1,h=!1,f=!1,P=new Set,v=0,E=0,M=yu();function A(d,y){let x=d*Math.PI/180,S=y*Math.PI/180;return[-Math.sin(x)*Math.cos(S),-Math.sin(x)*Math.sin(S),-Math.cos(x)]}function g(){let d=i.value,y=d?getComputedStyle(d).perspective:"",x=parseFloat(y);return(Number.isFinite(x)&&x>0?x:32e3)/pu}function L(){let d=a.value.state,y=A(d.rotX??90,d.rotY??0),x=g();return[c[0]+y[0]*x,c[1]+y[1]*x,c[2]+y[2]*x]}function T(){let d=L(),y=a.value;y.update({target:d}),u(),r.updateCameraFromRef(y)}let _=.05;function D(d){if(m===null||l)return;let y=Math.min(_,p?(d-p)/1e3:.0167);if(p=d,s.enabled){let x=!1,S=a.value.state;if(s.moveEnabled){let w=0,B=0;for(let W of P)Wr.has(W)?w+=1:qr.has(W)?w-=1:Zr.has(W)?B+=1:Gr.has(W)&&(B-=1);if(w!==0||B!==0){let Z=(S.rotY??0)*Math.PI/180,q=-Math.cos(Z),j=-Math.sin(Z),ee=-Math.sin(Z),ne=Math.cos(Z),ie=Math.hypot(w,B)||1,J=s.moveSpeed*y;c[0]+=(q*w+ee*B)/ie*J,c[1]+=(j*w+ne*B)/ie*J,x=!0}}let O=s.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?s.crouchHeight:s.eyeHeight;s.jumpEnabled&&(v!==0||E>0)?(v-=s.gravity*y,E+=v*y,E<=0&&(E=0,v=0)):s.jumpEnabled||(E=0,v=0);let k=s.groundZ+O+E;if(Math.abs(c[2]-k)>1e-4&&(c[2]=k,x=!0),x){let w=L(),B=a.value;B.update({target:w}),u(),r.updateCameraFromRef(B),ft(M,"change");try{t("change",[c[0],c[1],c[2]])}catch{}}}m=requestAnimationFrame(D)}function R(){m!==null||l||(p=0,m=requestAnimationFrame(D))}function N(){m!==null&&(cancelAnimationFrame(m),m=null)}let Y=null;function H(){let d=i.value;if(!d)return;let y=d.ownerDocument??document,x=y.defaultView??globalThis,S=()=>{if(!(!s.enabled||!s.lookEnabled||l||h))try{d.requestPointerLock()}catch{}},C=()=>{let j=y.pointerLockElement===d;if(j!==h){if(h=j,j){f=!0,ft(M,"start");try{t("interaction-start",[c[0],c[1],c[2]])}catch{}}else if(f){f=!1,ft(M,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}}},O=j=>{if(!h||l||!s.enabled||!s.lookEnabled)return;let ee=j.movementX??0,ne=j.movementY??0;if(ee===0&&ne===0)return;let ie=a.value,J=ie.state,F=s.lookSensitivity,U=s.invertY?-1:1,$=(((J.rotY??0)-ee*F)%360+360)%360,V=(J.rotX??90)-ne*F*U;V<s.minPitch?V=s.minPitch:V>s.maxPitch&&(V=s.maxPitch);let X=A(V,$),G=g(),se=[c[0]+X[0]*G,c[1]+X[1]*G,c[2]+X[2]*G];ie.update({rotX:V,rotY:$,target:se}),u(),r.updateCameraFromRef(ie),ft(M,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},k=j=>{if(!(!s.enabled||l)&&Ur(j.code)&&!(!h&&!s.moveEnabled)){if(Kr.has(j.code)){if(!s.jumpEnabled)return;j.preventDefault(),!P.has(j.code)&&v===0&&E===0&&(v=s.jumpVelocity),P.add(j.code);return}Dn.has(j.code)&&!s.crouchEnabled||!s.moveEnabled&&!Dn.has(j.code)||(j.preventDefault(),P.add(j.code))}},w=j=>{Ur(j.code)&&P.delete(j.code)},B=()=>{P.clear()};d.addEventListener("click",S),y.addEventListener("pointerlockchange",C),y.addEventListener("mousemove",O),x.addEventListener("keydown",k),x.addEventListener("keyup",w),x.addEventListener("blur",B);let W=x.getComputedStyle(d).perspective,Z=parseFloat(W),q=Number.isFinite(Z)&&Z>0?Z:2e3;d.style.setProperty("--polycss-fpv-perspective",`${q}px`),d.classList.add("polycss-fpv-host"),Y=()=>{if(d.removeEventListener("click",S),y.removeEventListener("pointerlockchange",C),y.removeEventListener("mousemove",O),x.removeEventListener("keydown",k),x.removeEventListener("keyup",w),x.removeEventListener("blur",B),d.style.cursor="",d.classList.remove("polycss-fpv-host"),d.style.removeProperty("--polycss-fpv-perspective"),P.clear(),h)try{y.exitPointerLock()}catch{}}}n({update(d){s=On(s,d);let y=i.value;y&&!l&&(y.style.cursor=s.lookEnabled?"crosshair":"")},resume(){if(!l)return;l=!1;let d=i.value;d&&(d.style.cursor=s.lookEnabled?"crosshair":""),R()},pause(){if(l)return;l=!0,N();let d=i.value;if(d&&(d.style.cursor=""),f){f=!1,ft(M,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}},destroy(){l=!0,N()},lock(){if(!s.enabled||!s.lookEnabled||l)return;let d=i.value;try{d?.requestPointerLock()}catch{}},unlock(){if(h){let d=i.value;try{d?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return h},getOrigin(){return[c[0],c[1],c[2]]},setOrigin(d){c[0]=d[0],c[1]=d[1],c[2]=d[2],T(),ft(M,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},addEventListener(d,y){let x=M[d];x.includes(y)||x.push(y)},removeEventListener(d,y){let x=M[d],S=x.indexOf(y);S>=0&&x.splice(S,1)},hasEventListener(d,y){return M[d].includes(y)}}),cu(()=>{let d=i.value;if(!d)return;l=!1,h=!1,f=!1,P.clear(),v=0,E=0;let x=a.value.state.target??[0,0,0];c[0]=x[0],c[1]=x[1],c[2]=s.groundZ+s.eyeHeight,T(),d.style.cursor=s.lookEnabled?"crosshair":"",H(),R()}),du(()=>{l=!0,N(),Y?.(),Y=null});let b=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let d of b)mu(()=>e[d],()=>{s=On(s,e);let y=i.value;y&&!l&&(y.style.cursor=s.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as gu,h as hu,inject as kn,onBeforeUnmount as Pu,onMounted as vu,provide as xu,reactive as bu,ref as Su,computed as Cu}from"vue";var Tt=Symbol("polycss.selection"),Jr=gu({name:"PolySelect",props:{multiple:{type:Boolean,default:!1},clearOnMiss:{type:Boolean,default:!0},filter:{type:Function,default:void 0}},emits:{change:e=>!0,pointerMissed:e=>!0},setup(e,{emit:t,slots:n}){let o=bu({selected:[]}),r=Cu(()=>o.selected);function a(m){let p=e.filter?e.filter(m):m;o.selected=p,t("change",p)}let i={get selected(){return o.selected},set:m=>a(m),add:m=>{e.multiple?o.selected.includes(m)||a([...o.selected,m]):a([m])},remove:m=>{o.selected.includes(m)&&a(o.selected.filter(p=>p!==m))},toggle:m=>{o.selected.includes(m)?a(o.selected.filter(p=>p!==m)):e.multiple?a([...o.selected,m]):a([m])},clear:()=>a([]),has:m=>o.selected.includes(m)};xu(Tt,{selected:r,api:i});let u=kn(ue,void 0),s=(m,p)=>Cn(m,p,l=>!l.closest("[data-poly-transform-controls]")),c=null;return vu(()=>{let m=u?.cameraElRef.value;if(!m)return;let p=l=>{if(l.target?.closest("[data-poly-transform-controls]"))return;let f=ut(l.target)??s(l.clientX,l.clientY);if(!f){t("pointerMissed",l),e.clearOnMiss&&a([]);return}e.multiple&&(l.shiftKey||l.metaKey||l.ctrlKey)?i.toggle(f):o.selected.length===1&&o.selected[0]===f?a([]):a([f])};m.addEventListener("click",p),c=()=>m.removeEventListener("click",p)}),Pu(()=>{c?.()}),()=>hu("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function ea(){let e=kn(Tt,void 0);return e?e.selected:Su([])}function ta(){let e=kn(Tt,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Mu,h as Eu,computed as Tu}from"vue";import{axesHelperPolygons as Au}from"@layoutit/polycss-core";var na=Mu({name:"PolyAxesHelper",props:{size:{type:Number,default:void 0},thickness:{type:Number,default:void 0},negative:{type:Boolean,default:void 0},xColor:{type:String,default:void 0},yColor:{type:String,default:void 0},zColor:{type:String,default:void 0}},setup(e){let t=Tu(()=>Au({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Eu(te,{polygons:t.value,merge:!1})}});import{defineComponent as wu,h as Lu,computed as In}from"vue";import{octahedronPolygons as Ru}from"@layoutit/polycss-core";var oa=wu({name:"PolyDirectionalLightHelper",props:{light:{type:Object,required:!0},target:{type:Array,default:void 0},distance:{type:Number,default:5},size:{type:Number,default:.35},color:{type:String,default:void 0}},setup(e){let t=In(()=>e.color??e.light.color??"#ffd54a"),n=In(()=>Ru({center:[0,0,0],size:e.size,color:t.value})),o=In(()=>{let r=e.light.direction,a=r[0],i=r[1],u=r[2],s=Math.hypot(a,i,u)||1,c=e.target?.[0]??0,m=e.target?.[1]??0,p=e.target?.[2]??0;return[c+a/s*e.distance,m+i/s*e.distance,p+u/s*e.distance]});return()=>Lu(te,{polygons:n.value,position:o.value,merge:!1})}});var Fn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},Ou={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Fn,bucketCount:0};function Du(e){return typeof e=="number"?{polygonCount:e}:e??{}}function yt(e,t){return e.querySelectorAll(t).length}function ku(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function Iu(e,t){if(!t)return[e];let n=[];return ku(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Fu(e,t){let n=Du(t);if(!e)return{...Ou,surfaceLeafCounts:{...Fn},polygonCount:n.polygonCount??0};let o=Iu(e,n.scopeSelector),r={...Fn},a=0,i=0;for(let s of o)r.quad+=yt(s,"b"),r.clippedSolid+=yt(s,"i"),r.atlas+=yt(s,"s"),r.stableTriangle+=yt(s,"u"),a+=yt(s,"q, .polycss-shadow-svg"),i+=yt(s,".polycss-bucket");let u=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??u,mountedPolygonLeafCount:u,shadowLeafCount:a,surfaceLeafCounts:r,bucketCount:i}}import{ref as ra,watch as Vu,onUnmounted as _u,computed as qt}from"vue";import{createPolyAnimationMixer as Bu}from"@layoutit/polycss-core";function tt(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function zu(e,t,n){let o=ra(null),r=null,a=null,i=null,u=ra(0);function s(){return n==null?o.value:tt(n)??o.value}function c(){a!==null&&(cancelAnimationFrame(a),a=null),i=null}function m(){c(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,u.value++)}function p(){if(a!==null)return;function M(A){if(i===null){i=A,a=requestAnimationFrame(M);return}let g=(A-i)/1e3;i=A,r?.update(g),a=requestAnimationFrame(M)}a=requestAnimationFrame(M)}function l(){m();let M=tt(e),A=tt(t);if(!M||M.length===0||!A)return;let g=s();g&&(r=Bu(g,A),u.value++,p())}let h=Vu(()=>{let M=tt(e),A=tt(t),g=n!=null?tt(n):o.value;return{c:M,ctrl:A,r:g}},()=>l(),{immediate:!0,deep:!1});_u(()=>{h(),m()});let f=qt(()=>tt(e)??[]),P=qt(()=>f.value.map(M=>M.name)),v=qt(()=>(u.value,r)),E=qt(()=>{u.value;let M=f.value,A={};for(let g of M)Object.defineProperty(A,g.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(g.name)}catch{return null}}});return A});return{ref:o,mixer:v,clips:f,names:P,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as Bp,VOXEL_CAMERA_CULL_AXIS_EPS as zp,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Hp,normalizePolygons as Np,mergePolygons as Yp,coverPlanarPolygons as $p,optimizeMeshPolygons as jp,optimizeMeshParseResult as Xp,simplifyTriangleMeshPolygons as Up,repairMeshSeams as Wp,seamFacetSplitPolygons as qp,seamFacetSplitReport as Gp,seamOverlapDiagnostics as Zp,seamOverlapPolygons as Kp,seamOverlapReport as Qp,cullInteriorPolygons as Jp,cameraCullNormalGroups as ef,cameraCullNormalGroupsFromPolygons as tf,cameraCullNormalKey as nf,cameraCullVisibleSignature as of,cameraFacingDepth as rf,isAxisAlignedSurfaceNormal as af,isVoxelCameraCullableNormalGroups as sf,normalFacesCamera as lf,polygonCssSurfaceNormal as uf,polygonFacesCamera as cf,parseObj as df,parseMtl as mf,parseGltf as pf,parseStl as ff,bakeSolidTextureSamples as yf,bakeSolidTextureSampledPolygons as gf,loadMesh as hf,createIsometricCamera as Pf,parseVox as vf,polygonFaces as xf,computeTexturePaintMetrics as bf,computeShapeLighting as Sf,parseColor as Cf,parsePureColor as Mf,parseHexColor as Ef,parseRgbColor as Tf,formatColor as Af,clampChannel as wf,shadeColor as Lf,rotateVec3 as Rf,inverseRotateVec3 as Of,axesHelperPolygons as Df,boxPolygons as kf,arrowPolygons as If,ringPolygons as Ff,octahedronPolygons as Vf,tetrahedronPolygons as _f,icosahedronPolygons as Bf,dodecahedronPolygons as zf,cylinderPolygons as Hf,conePolygons as Nf,torusPolygons as Yf,planePolygons as $f,buildSceneContext as jf,computeSceneBbox as Xf,BASE_TILE as Uf,DEFAULT_CAMERA_STATE as Wf,DEFAULT_PROJECTION as qf,normalizeInvertMultiplier as Gf,createPolyAnimationMixer as Zf,optimizeAnimatedMeshPolygons as Kf,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as Qf,DEFAULT_SEAM_OVERLAP_OPTIONS as Jf,LoopOnce as ey,LoopRepeat as ty,LoopPingPong as ny}from"@layoutit/polycss-core";export{Uf as BASE_TILE,Bp as CAMERA_BACKFACE_CULL_EPS,Wf as DEFAULT_CAMERA_STATE,qf as DEFAULT_PROJECTION,Qf as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,Jf as DEFAULT_SEAM_OVERLAP_OPTIONS,ey as LoopOnce,ny as LoopPingPong,ty as LoopRepeat,rr as Poly,na as PolyAxesHelper,ar as PolyBox,ht as PolyCamera,ue as PolyCameraContextKey,fr as PolyCone,pr as PolyCylinder,oa as PolyDirectionalLightHelper,dr as PolyDodecahedron,Qr as PolyFirstPersonControls,tr as PolyGround,cr as PolyIcosahedron,er as PolyIframe,kr as PolyMapControls,te as PolyMesh,lr as PolyOctahedron,Mr as PolyOrbitControls,ht as PolyOrthographicCamera,zn as PolyPerspectiveCamera,ir as PolyPlane,sr as PolyRing,Oo as PolyScene,Jr as PolySelect,Tt as PolySelectionContextKey,mr as PolySphere,ur as PolyTetrahedron,yr as PolyTorus,Xr as PolyTransformControls,zp as VOXEL_CAMERA_CULL_AXIS_EPS,Hp as VOXEL_CAMERA_CULL_NORMAL_LIMIT,If as arrowPolygons,Df as axesHelperPolygons,gf as bakeSolidTextureSampledPolygons,yf as bakeSolidTextureSamples,kf as boxPolygons,jf as buildSceneContext,ef as cameraCullNormalGroups,tf as cameraCullNormalGroupsFromPolygons,nf as cameraCullNormalKey,of as cameraCullVisibleSignature,rf as cameraFacingDepth,wf as clampChannel,Fu as collectPolyRenderStats,Xf as computeSceneBbox,Sf as computeShapeLighting,bf as computeTexturePaintMetrics,Nf as conePolygons,$p as coverPlanarPolygons,Pf as createIsometricCamera,Zf as createPolyAnimationMixer,Jp as cullInteriorPolygons,Hf as cylinderPolygons,zf as dodecahedronPolygons,Cn as findMeshUnderPoint,ut as findPolyMeshHandle,Af as formatColor,Bf as icosahedronPolygons,At as injectPolyBaseStyles,Of as inverseRotateVec3,af as isAxisAlignedSurfaceNormal,sf as isVoxelCameraCullableNormalGroups,hf as loadMesh,Yp as mergePolygons,lf as normalFacesCamera,Gf as normalizeInvertMultiplier,Np as normalizePolygons,Vf as octahedronPolygons,Kf as optimizeAnimatedMeshPolygons,Xp as optimizeMeshParseResult,jp as optimizeMeshPolygons,Cf as parseColor,pf as parseGltf,Ef as parseHexColor,mf as parseMtl,df as parseObj,Mf as parsePureColor,Tf as parseRgbColor,ff as parseStl,vf as parseVox,$f as planePolygons,ct as pointInMeshElement,uf as polygonCssSurfaceNormal,xf as polygonFaces,cf as polygonFacesCamera,Wp as repairMeshSeams,Ff as ringPolygons,Rf as rotateVec3,qp as seamFacetSplitPolygons,Gp as seamFacetSplitReport,Zp as seamOverlapDiagnostics,Kp as seamOverlapPolygons,Qp as seamOverlapReport,Lf as shadeColor,Up as simplifyTriangleMeshPolygons,_f as tetrahedronPolygons,Yf as torusPolygons,zu as usePolyAnimation,rt as usePolyCamera,Gs as usePolyMaterial,Ht as usePolyMesh,Pt as usePolySceneContext,ea as usePolySelect,ta as usePolySelectionApi};
|
|
429
|
+
`;import{parsePureColor as fc}from"@layoutit/polycss-core";import{inject as Ra}from"vue";var Qt=Symbol("polycss/scene-context");function Nn(){return Ra(Qt,null)}import{isSolidTrianglePlan as it,isProjectiveQuadPlan as st,buildTextureEdgeRepairSets as Vt,buildSeamBleedPolygonEdges as _t,buildSeamBleedPolygonSet as pd,cssBorderShapeForPlan as yd}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as Oa,safariCssProjectiveUnsupported as Yn,parseHex as Da,rgbKey as ka}from"@layoutit/polycss-core";function Jt(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function en(e){if(jn(e))return!0;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function At(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")&&!!t.supports("corner-bottom-right-shape","bevel")&&!!t.supports("corner-bottom-left-shape","bevel")}function jn(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")}function rt(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function $n(e,t,n,o,r){let a=new Set(o?.disable??[]);return Oa(e,t,a,{solidTriangleSupported:en(n),projectiveQuadSupported:rt(n),cornerShapeSupported:At(n),borderShapeSupported:Jt(n)},Da,ka,r)}function tn(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let a=n.size>0?{disable:Array.from(n)}:void 0;return $n(e,t,r,a)}function je(e){let t=e??(typeof document<"u"?document:null);if(!t){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=typeof matchMedia<"u"?matchMedia:void 0;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}return Jt(t)}function $e(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=typeof CSS<"u"?CSS:void 0;if(n?.supports?.("corner-top-left-shape","bevel")&&n.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let r=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||r}return en(t)}import{filterAtlasPlans as Ia}from"@layoutit/polycss-core";function nn(e,t,n,o){let r=o??(typeof document<"u"?document:null);return Ia(e,t,n,{solidTriangleSupported:$e(o),projectiveQuadSupported:o?rt(o):!0,borderShapeSupported:je(o),cornerShapeSupported:r?At(r):!1})}import{packTextureAtlasPlansWithScaleCore as Fa}from"@layoutit/polycss-core";function Xn(e){if(!e)return!1;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function on(e,t,n){return Fa(e,t,Xn(n))}import{expandClipPoints as Va,TEXTURE_TRIANGLE_BLEED as _a,TEXTURE_EDGE_REPAIR_ALPHA_MIN as Ba,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as za,TEXTURE_EDGE_REPAIR_RADIUS as Un}from"@layoutit/polycss-core";var Xe=new Map;function Kn(e){let t=Xe.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),Xe.set(e,t),t.then(()=>{Xe.get(e)===t&&Xe.delete(e)},()=>{Xe.get(e)===t&&Xe.delete(e)})),t}function ye(e,t,n=1,o=0,r=0,a=1,i=0,u=0){e.setTransform(n*t,o*t,r*t,a*t,i*t,u*t)}function rn(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function an(e){let t=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(t*255)))}function Qn(e,t,n,o,r,a,i){let u=Math.round(t*i),s=Math.round(n*i),d=Math.max(1,Math.round(o*i)),m=Math.max(1,Math.round(r*i)),p=e.getImageData(u,s,d,m),l=p.data,h=a.r,y=a.g,P=a.b;for(let v=0;v<l.length;v+=4)l[v+3]!==0&&(l[v]=an(rn(l[v])*h),l[v+1]=an(rn(l[v+1])*y),l[v+2]=an(rn(l[v+2])*P));e.putImageData(p,u,s)}function Jn(e,t,n,o,r,a,i){let u=t.naturalWidth||t.width||1,s=t.naturalHeight||t.height||1,d=Math.max(r/u,a/s),m=u*d,p=s*d;ye(e,i),e.drawImage(t,n+(r-m)/2,o+(a-p)/2,m,p)}function at(e,t){return Math.max(0,Math.min(t,e))}function sn(e,t,n,o,r,a,i,u){let s=t.naturalWidth||t.width||1,d=t.naturalHeight||t.height||1,m=at(Math.min(n.minU,n.maxU)*s,s),p=at(Math.max(n.minU,n.maxU)*s,s),l=at(Math.min(n.minV,n.maxV)*d,d),h=at(Math.max(n.minV,n.maxV)*d,d),y=Math.floor(m),P=Math.floor(l),v=Math.ceil(p)-y,E=Math.ceil(h)-P;v<1&&(y=Math.floor(at((n.minU+n.maxU)/2*s,s-1)),v=1),E<1&&(P=Math.floor(at((n.minV+n.maxV)/2*d,d-1)),E=1),y=Math.max(0,Math.min(s-1,y)),P=Math.max(0,Math.min(d-1,P)),v=Math.max(1,Math.min(s-y,v)),E=Math.max(1,Math.min(d-P,E)),ye(e,u),e.drawImage(t,y,P,v,E,o,r,a,i)}function eo(e){return e==="repeat"||e==="mirrored-repeat"}function Wn(e,t){return eo(e)?Math.floor(t):0}function qn(e,t){return eo(e)?Math.ceil(t)-1:0}function Gn(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function Zn(e,t,n,o,r,a,i){let u=r?Wn(a,r.minU):0,s=r?qn(a,r.maxU):0,d=r?Wn(i,r.minV):0,m=r?qn(i,r.maxV):0;for(let p=u;p<=s;p++)for(let l=d;l<=m;l++){let h=Gn(a,p),y=Gn(i,l);if(!h&&!y){e.drawImage(t,p*n,l*o);continue}e.save(),e.translate((h?p+1:p)*n,(y?l+1:l)*o),e.scale(h?-1:1,y?-1:1),e.drawImage(t,0,0),e.restore()}}function Lt(e,t,n,o){for(let r=0;r<o.length;r+=2){let a=t+o[r],i=n+o[r+1];r===0?e.moveTo(a,i):e.lineTo(a,i)}e.closePath()}function Pt(e,t,n,o,r,a){for(let i=0;i<o.length;i+=2){let u=t+o[i]+r,s=n+o[i+1]+a;i===0?e.moveTo(u,s):e.lineTo(u,s)}e.closePath()}function to(e,t,n,o){ye(e,o),e.beginPath(),Lt(e,t.x,t.y,t.screenPts),e.clip(),ye(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function wt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(ye(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function no(e,t,n,o,r=0,a=0){if(t.textureTriangles?.length){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1;for(let s of t.textureTriangles){let d=Va(s.screenPts,_a);e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,d,r,a),e.clip(),wt(e,t,o,r,a),s.uvAffine?(ye(e,o,s.uvAffine.a/i,s.uvAffine.c/i,s.uvAffine.b/u,s.uvAffine.d/u,t.x+s.uvAffine.e+r,t.y+s.uvAffine.f+a),Zn(e,n,i,u,s.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):s.uvSampleRect&&sn(e,n,s.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,s=t.polygon.textureAlphaMode==="opaque";s&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),ye(e,o,t.uvAffine.a/i,t.uvAffine.c/i,t.uvAffine.b/u,t.uvAffine.d/u,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+a),Zn(e,n,i,u,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),s&&e.restore()}else if(t.uvSampleRect){let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),sn(e,n,t.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}else{let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),Jn(e,n,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}}function Ha(e,t,n,o,r,a){let i=r-n,u=a-o,s=i*i+u*u;if(s<=1e-9)return Math.hypot(e-n,t-o);let d=Math.max(0,Math.min(1,((e-n)*i+(t-o)*u)/s));return Math.hypot(e-(n+i*d),t-(o+u*d))}function Na(e,t,n,o){let r=1/0,a=n.length/2;for(let i of o){if(i<0||i>=a)continue;let u=i*2,s=(i+1)%a*2;r=Math.min(r,Ha(e,t,n[u],n[u+1],n[s],n[s+1]))}return r}function Ya(e,t,n,o,r,a){let i=Math.max(0,o-a),u=Math.min(t-1,o+a),s=Math.max(0,r-a),d=Math.min(n-1,r+a),m=null,p=1/0;for(let l=s;l<=d;l++)for(let h=i;h<=u;h++){if(h===o&&l===r)continue;let y=h-o,P=l-r,v=y*y+P*P;if(v>a*a||v>=p)continue;let E=(l*t+h)*4;e[E+3]<za||(m=E,p=v)}return m}function oo(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),a=Math.max(0,Math.floor(t.y*n)),i=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),u=Math.max(1,Math.min(o.height-a,Math.ceil(t.canvasH*n)));if(i<=0||u<=0)return;let s;try{s=e.getImageData(r,a,i,u)}catch{return}let d=s.data,m=new Uint8ClampedArray(d),p=Math.max(Un,Un/n),l=Math.max(2,Math.ceil(p*n)+1),h=!1;for(let y=0;y<u;y++)for(let P=0;P<i;P++){let v=(y*i+P)*4,E=d[v+3];if(E<Ba||E===255)continue;let M=(r+P+.5)/n-t.x,A=(a+y+.5)/n-t.y;if(Na(M,A,t.screenPts,t.textureEdgeRepairEdges)>p)continue;let g=Ya(m,i,u,P,y,l);g!==null&&(d[v]=m[g],d[v+1]=m[g+1],d[v+2]=m[g+2],d[v+3]=255,h=!0)}h&&e.putImageData(s,r,a)}function ro(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(n=>{t(n?URL.createObjectURL(n):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}async function ja(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let a=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),i=r.getContext("2d",a?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let u=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),s=new Map;await Promise.all(u.map(async m=>{s.set(m,await Kn(m))}));for(let m of e.entries){let p=m.texture?s.get(m.texture):null;if(!m.texture){i.save(),to(i,m,t,o),i.restore();continue}p&&(i.save(),ye(i,o),i.beginPath(),Lt(i,m.x,m.y,m.screenPts),i.clip(),no(i,m,p,o),i.restore()),m.texture&&t==="baked"&&(i.save(),ye(i,o),i.beginPath(),Lt(i,m.x,m.y,m.screenPts),i.clip(),Qn(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),oo(i,m,o)}let d=await ro(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:d}}async function Rt(e,t,n,o,r){let a=[];for(let i of e){if(r())break;a.push(await ja(i,t,n,o))}return a}import{isSolidTrianglePlan as $a,offsetConvexPolygonPointsByEdgeAmounts as Xa,parsePureColor as un,resolveSeamBleed as so,safePlanSeamBleedAmount as Ua}from"@layoutit/polycss-core";var lo=50,uo=[.4,-.7,.59],co="#ffffff",mo=1,po="#ffffff",yo=.4,K=1e-9,vt=.75,fo=32,Wa=96,cn="0 48px 96px 48px",ao,io=fo;function qa(){let e=typeof CSS<"u"?CSS:void 0;return!!e?.supports?.("corner-top-left-shape","bevel")&&!!e.supports("corner-top-right-shape","bevel")}function dn(){if(qa())return"corner-bevel";let e=typeof navigator<"u"?navigator.userAgent:"";return/\bFirefox\//.test(e)?"border-large":"border"}function mn(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==ao&&(ao=e,io=/\bFirefox\//.test(e)?Wa:fo),io}function go(){return dn()==="border-large"?cn:void 0}function Ga(){let e=dn();if(e==="corner-bevel")return;let t=e==="border-large"?cn:void 0;return t?{borderWidth:t}:void 0}function ho(e){let t=dn();t==="corner-bevel"?(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderWidth="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape")):(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape"),e.style.borderWidth=t==="border-large"?cn:"")}function Re(e){let t=un(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function xt({r:e,g:t,b:n}){return`${e},${t},${n}`}function Za(e){return un(e)?.alpha??1}function Dt({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function Po(e,t,n,o,r){let a=Re(e),i=Re(n),u=Re(o),s=u.r/255*r+i.r/255*t,d=u.g/255*r+i.g/255*t,m=u.b/255*r+i.b/255*t,p=Math.max(0,Math.min(255,Math.round(a.r*s))),l=Math.max(0,Math.min(255,Math.round(a.g*d))),h=Math.max(0,Math.min(255,Math.round(a.b*m))),y=Za(e);return y<1?`rgba(${p}, ${l}, ${h}, ${y})`:Dt({r:p,g:l,b:h})}function vo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=un(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=i=>Math.max(0,Math.min(255,Math.round(Math.round(i/o)*o))),a={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${a.r}, ${a.g}, ${a.b}, ${n.alpha})`:Dt(a)}function xo(e,t,n){let o=(r,a)=>{if(r===a)return r;let i=a-r;return r+Math.sign(i)*Math.min(Math.abs(i),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function ln(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Ka(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Qa(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let a=e[r],i=e[r+1],u=[a[0]-t[0],a[1]-t[1],a[2]-t[2]],s=[i[0]-t[0],i[1]-t[1],i[2]-t[2]];n[0]-=u[1]*s[2]-u[2]*s[1],n[1]-=u[2]*s[0]-u[0]*s[2],n[2]-=u[0]*s[1]-u[1]*s[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=K?null:[n[0]/o,n[1]/o,n[2]/o]}function Ja(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],a=e[(n+2)%e.length],i=(r[0]-o[0])*(a[1]-r[1])-(r[1]-o[1])*(a[0]-r[0]);if(Math.abs(i)<=K)return!1;let u=Math.sign(i);if(t===0)t=u;else if(u!==t)return!1}return!0}function ei(e){let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o[0]*r[1]-o[1]*r[0]}return t/2}function ti(e,t,n,o){let r=t[0]-e[0],a=t[1]-e[1],i=o[0]-n[0],u=o[1]-n[1],s=r*u-a*i;if(Math.abs(s)<=K)return null;let d=n[0]-e[0],m=n[1]-e[1],p=(d*u-m*i)/s;return[e[0]+p*r,e[1]+p*a]}function Ot(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let i=0;i<e.length;i+=2)n+=e[i],o+=e[i+1];n/=r,o/=r;let a=e.slice();for(let i=0;i<a.length;i+=2){let u=a[i]-n,s=a[i+1]-o,d=Math.hypot(u,s);d<=K||(a[i]+=u/d*t,a[i+1]+=s/d*t)}return a}function Ue(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let s=0;s<e.length;s+=2)n.push([e[s],e[s+1]]);if(!Ja(n))return Ot(e,t);let o=ei(n);if(Math.abs(o)<=K)return Ot(e,t);let r=o>0?1:-1,a=[];for(let s=0;s<n.length;s++){let d=n[s],m=n[(s+1)%n.length],p=m[0]-d[0],l=m[1]-d[1],h=Math.hypot(p,l);if(h<=K)return Ot(e,t);let y=r*(l/h)*t,P=r*(-p/h)*t;a.push({a:[d[0]+y,d[1]+P],b:[m[0]+y,m[1]+P]})}let i=[],u=Math.max(2,t*4);for(let s=0;s<n.length;s++){let d=a[(s+n.length-1)%n.length],m=a[s],p=ti(d.a,d.b,m.a,m.b);if(!p)return Ot(e,t);let l=n[s],h=p[0]-l[0],y=p[1]-l[1],P=Math.hypot(h,y);P>u?i.push(l[0]+h/P*u,l[1]+y/P*u):i.push(p[0],p[1])}return i}function ni(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+d,y=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-y,M=(v*n+E*e)/P,A=h-M*t,g=y-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let c=_-r,f=Math.sqrt(c*c+o*o);return f>R&&(_=r+c/f*R,D=n+o/f*R),[A,g,L,T,_,D]}function oi(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function ri(e,t,n,o,r){let a=e.seamBleedEdges;if(!a?.size)return null;let i=e.seamBleed===void 0?vt:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([s,d],m)=>{let p=oi(s,d),l=p!==void 0&&a.has(p)?e.seamBleedEdgeAmounts?.get(p)??so(i,vt):0;return Ua(r,m,l)})}function bo(e,t,n,o,r,a,i,u,s,d,m,p){let l=Math.round(e*1e3)/1e3||0,h=Math.round(t*1e3)/1e3||0,y=Math.round(n*1e3)/1e3||0,P=Math.round(o*1e3)/1e3||0,v=Math.round(r*1e3)/1e3||0,E=Math.round(a*1e3)/1e3||0,M=Math.round(i*1e3)/1e3||0,A=Math.round(u*1e3)/1e3||0,g=Math.round(s*1e3)/1e3||0,L=Math.round(d*1e3)/1e3||0,T=Math.round(m*1e3)/1e3||0,_=Math.round(p*1e3)/1e3||0;return`matrix3d(${l},${h},${y},0,${P},${v},${E},0,${M},${A},${g},0,${L},${T},${_},1)`}function ai(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function pn(e,t,n,o){if(!$a(e))return null;let r=e.tileSize,a=e.layerElevation,i=ai(e.polygon.vertices,r,a),u=Qa(i);if(!u)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(V=>{let X=i[V.a],G=i[V.b];return{...V,length:Math.hypot(G[0]-X[0],G[1]-X[1],G[2]-X[2])}}).sort((V,X)=>X.length-V.length),d=s[0].a,m=s[0].b,p=s[0].c,l=i[d],h=i[m],y=i[p],P=s[0].length;if(P<=K)return null;let v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P],E=[y[0]-l[0],y[1]-l[1],y[2]-l[2]],M=ln(E,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-y[0],A[1]-y[1],A[2]-y[2]],L=Math.hypot(g[0],g[1],g[2]);if(L<=K)return null;let T=[g[0]/L,g[1]/L,g[2]/L];if(ln(Ka(v,T),u)<0){let V=m;if(m=d,d=V,l=i[d],h=i[m],P=Math.hypot(h[0]-l[0],h[1]-l[1],h[2]-l[2]),P<=K)return null;v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P];let X=[y[0]-l[0],y[1]-l[1],y[2]-l[2]];M=ln(X,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-y[0],A[1]-y[1],A[2]-y[2]];let G=Math.hypot(g[0],g[1],g[2]);if(G<=K)return null;T=[g[0]/G,g[1]/G,g[2]/G]}let _=mn(),D=Math.max(0,Math.min(P,M)),R=Math.max(0,P-D),N=[D,0,0,L,D+R,L],Y=ri(e,d,m,p,N),H=Y?Xa(N,Y):ni(D,R,L,so(e.seamBleed,vt)),b=[H[0],H[1]],c=[H[2],H[3]],f=[H[4],H[5]],x=(c[1]+f[1])/2,S=b[0]-c[0],C=f[0]-b[0],O=x-b[1];if(S<=K||C<=K||O<=K||!Number.isFinite(S+C+O))return null;let k=t==="dynamic",w=Re(e.polygon.color??"#cccccc"),B=k&&xt(w)===o?.dynamicColorKey,W={color:k||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...k&&!B?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4),"--psr":(w.r/255).toFixed(4),"--psg":(w.g/255).toFixed(4),"--psb":(w.b/255).toFixed(4)}:k?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4)}:null},Z=([V,X])=>[y[0]+(V-D)*v[0]+X*T[0],y[1]+(V-D)*v[1]+X*T[1],y[2]+(V-D)*v[2]+X*T[2]],q=Z(b),$=Z([c[0],x]),ee=Z([f[0],x]),ne=_/2,ie=[(ee[0]-$[0])/_,(ee[1]-$[1])/_,(ee[2]-$[2])/_],J=[q[0]-ie[0]*ne,q[1]-ie[1]*ne,q[2]-ie[2]*ne],F=[($[0]-J[0])/_,($[1]-J[1])/_,($[2]-J[2])/_],U=[ie[0],ie[1],ie[2],0,F[0],F[1],F[2],0,u[0],u[1],u[2],0,J[0],J[1],J[2],1].map(V=>(Math.round(V*1e3)/1e3||0).toString()).join(","),j=Ga();return{transform:`matrix3d(${U})`,...j??{},...W}}function kt(e){if(!e)return!1;let{a:t,b:n,c:o}=e;return t===0&&n===1&&o===2||t===1&&n===2&&o===0||t===2&&n===0&&o===1}function ii(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+d,y=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-y,M=(v*n+E*e)/P,A=h-M*t,g=y-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let c=_-r,f=Math.sqrt(c*c+o*o);return f>R&&(_=r+c/f*R,D=n+o/f*R),[A,g,L,T,_,D]}function So(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=lo,r=o,a=e.vertices[0],i=e.vertices[1],u=e.vertices[2],s=a[1]*o,d=a[0]*o,m=a[2]*r,p=i[1]*o,l=i[0]*o,h=i[2]*r,y=u[1]*o,P=u[0]*o,v=u[2]*r,E=p-s,M=l-d,A=h-m,g=y-s,L=P-d,T=v-m,_=-(M*T-A*L),D=-(A*g-E*T),R=-(E*L-M*g),N=Math.sqrt(_*_+D*D+R*R);if(N<=K)return null;_/=N,D/=N,R/=N;let Y=E*E+M*M+A*A,H=y-p,b=P-l,c=v-h,f=s-y,x=d-P,S=m-v,C=H*H+b*b+c*c,O=f*f+x*x+S*S,k=kt(n)?n.a:0,w=kt(n)?n.b:1,B=kt(n)?n.c:2,W=()=>n?So(e,t):null;if(!kt(n)){let Ye=Y;C>Ye&&(k=1,w=2,B=0,Ye=C),O>Ye&&(k=2,w=0,B=1)}let Z=B===0?s:B===1?p:y,q=B===0?d:B===1?l:P,$=B===0?m:B===1?h:v,ee=k===0?s:k===1?p:y,ne=k===0?d:k===1?l:P,ie=k===0?m:k===1?h:v,J=w===0?s:w===1?p:y,F=w===0?d:w===1?l:P,U=w===0?m:w===1?h:v,j=J-ee,V=F-ne,X=U-ie,G=Math.sqrt(j*j+V*V+X*X);if(G<=K)return W();let se=j/G,le=V/G,re=X/G,me=(Z-ee)*se+(q-ne)*le+($-ie)*re,pe=ee+se*me-Z,ce=ne+le*me-q,fe=ie+re*me-$,Q=Math.sqrt(pe*pe+ce*ce+fe*fe);if(Q<=K)return W();pe/=Q,ce/=Q,fe/=Q;let z=Math.max(0,Math.min(G,me)),I=Math.max(0,G-z),ae=ii(z,I,Q,vt),he=ae[0],ze=ae[1],Pe=ae[2],be=ae[3],Fe=ae[4],tt=ae[5],Ve=(be+tt)/2,_e=he-Pe,Be=Fe-he,ft=Ve-ze;if(_e<=K||Be<=K||ft<=K||!Number.isFinite(_e+Be+ft))return W();let Ae=1/mn(),He=_e+Be,Se=He*Ae,we=(Be-_e)*.5*Ae,Le=ft*Ae,nt=he-z-He*.5,Ne=ze,Ce=bo(se*Se,le*Se,re*Se,se*we+pe*Le,le*we+ce*Le,re*we+fe*Le,_,D,R,Z+se*nt+pe*Ne,q+le*nt+ce*Ne,$+re*nt+fe*Ne),ve;if(Math.floor(t.colorFreezeFrames??1)!==0){let Ye=t.directionalLight,_n=t.ambientLight,De=Ye?.direction??uo,aa=Ye?.color??co,ia=Math.max(0,Ye?.intensity??mo),sa=_n?.color??po,la=Math.max(0,_n?.intensity??yo),Gt=Math.sqrt(De[0]*De[0]+De[1]*De[1]+De[2]*De[2])||1,ua=De[0]/Gt,ca=De[1]/Gt,da=De[2]/Gt,ma=ia*Math.max(0,_*ua+D*ca+R*da),Bn=Po(e.color??"#cccccc",ma,aa,sa,la);ve=t.colorSteps?vo(Bn,t.colorSteps):Bn}return{transform:Ce,borderWidth:go(),color:ve,basis:{a:k,b:w,c:B}}}function si(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function li(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let a=e.__polycssStableTriangleColor;if(!(a===void 0||si(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||a===n)return;let u=n,s=n?Re(n):void 0,d=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&d&&s&&n&&(s=xo(d,s,m),u=Dt(s)),e.style.color=u,e.__polycssStableTriangleColor=u,e.__polycssStableTriangleColorRgb=s}function yn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!$e())return!1;let o=Array.from(e.children).filter(a=>a instanceof HTMLElement&&a.localName==="u");if(o.length!==t.length)return!1;let r=t.map((a,i)=>So(a,n,o[i].__polycssStableTriangleBasis));if(r.some(a=>!a))return!1;for(let a=0;a<o.length;a+=1){let i=r[a],u=o[a];u.style.visibility&&(u.style.visibility=""),u.__polycssStableTriangleBasis=i.basis,ho(u),u.style.transform=i.transform,i.borderWidth!==void 0&&(u.style.borderWidth=i.borderWidth),i.color!==void 0&&li(u,a,i.color,n)}return!0}import{computeTextureAtlasPlanPublic as ui}from"@layoutit/polycss-core";function We(e,t,n={},o){return ui(e,t,n,void 0,o)}function fn(e,t,n){let o=new Set(n?.disable??[]);return tn(e,t,o)}import{computed as ge,getCurrentScope as ci,onScopeDispose as di,ref as Co,watch as mi}from"vue";function gn(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Mo(e){return e.flatMap(t=>t.url?.startsWith("blob:")?[t.url]:[])}function It(e){return e.map(t=>({width:t.width,height:t.height,url:null}))}function Eo(e){return e.length===0||typeof Image>"u"?Promise.resolve():Promise.all(e.map(t=>{let n=new Image;n.src=t;let o=n.decode?.();return o?o.catch(()=>{}):Promise.resolve()})).then(()=>{})}function qe(e){e.length!==0&&(typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>gn(e)):setTimeout(()=>gn(e),0))}function Ge(e,t,n=ge(()=>{}),o=ge(()=>{}),r=ge(()=>!1)){let a=ge(()=>new Set(o.value?.disable??[])),i=ge(()=>!a.value.has("b")),u=ge(()=>{let v=typeof document<"u"?document:null;return i.value&&(!v||rt(v))}),s=ge(()=>!a.value.has("u")&&$e()),d=ge(()=>!a.value.has("i")&&t.value!=="dynamic"&&je()),m=ge(()=>{let v=nn(e.value,t.value,a.value,typeof document<"u"?document:null);return on(v,n.value,typeof document<"u"?document:null)}),p=Co(It(m.value.packed.pages)),l=Co({plans:e.value,entries:m.value.packed.entries,pages:It(m.value.packed.pages)}),h=[],y=0,P=!1;return mi(()=>[m.value,t.value,r.value],([v,E,M],A,g)=>{let{packed:L,atlasScale:T}=v;if(M){let R=++y,N=e.value,Y=L.entries;if(L.pages.length===0||typeof document>"u"){qe(h),h=[],l.value={plans:N,entries:Y,pages:It(L.pages)};return}let H=()=>P||R!==y,b=[];Rt(L.pages,E,document,T,H).then(async c=>{if(b=Mo(c),await Eo(b),H()){qe(b);return}let f=h;h=b,b=[],qe(f),l.value={plans:N,entries:Y,pages:c}}).catch(()=>{});return}let _=!1,D=[];if(g(()=>{_=!0,qe(D)}),L.pages.length===0){qe(h),h=[],p.value.length!==0&&(p.value=[]);return}typeof document>"u"||(p.value.some(R=>R.url)||(p.value=It(L.pages)),Rt(L.pages,E,document,T,()=>_).then(async R=>{if(D=Mo(R),await Eo(D),_){qe(D);return}let N=h;h=D,D=[],qe(N),p.value=R}).catch(()=>{}))},{immediate:!0}),ci()&&di(()=>{P=!0,gn(h),h=[]}),{plans:ge(()=>r.value?l.value.plans:e.value),entries:ge(()=>r.value?l.value.entries:m.value.packed.entries),pages:ge(()=>r.value?l.value.pages:p.value),ready:ge(()=>{let v=r.value?l.value.pages:p.value;return v.length===0||v.every(E=>!!E.url)}),useFullRectSolid:i,useProjectiveQuad:u,useStableTriangle:s,useBorderShape:d}}import{h as pi}from"vue";function Ze({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=pn(e,t,i,n);if(!u)return null;let s=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,p])=>[`data-${m}`,String(p)])):{},d=o?.trim()||void 0;return pi("u",{class:d,style:{...u,...r},"data-poly-index":String(e.index),...s,...a})}import{h as yi}from"vue";import{isFullRectSolid as fi,cssBorderShapeForPlan as gi,formatSolidQuadEntryMatrix as hi,formatBorderShapeEntryMatrix as Pi}from"@layoutit/polycss-core";var vi=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function xi(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,a)=>{let i=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:a,order:vi.get(i)??Number.POSITIVE_INFINITY}}).sort((r,a)=>r.order-a.order||r.index-a.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function Ke({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto",forceBorderShape:u=!1}){let s=!e.texture&&fi(e),d=s&&u&&je(),m=!s||d?gi(e):null,p=t==="dynamic",l=Re(e.polygon.color??"#cccccc"),h=p&&xt(l)===n?.dynamicColorKey,P={transform:m?Pi(e):hi(e),color:p?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...p?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),...h?null:{"--psr":(l.r/255).toFixed(4),"--psg":(l.g/255).toFixed(4),"--psb":(l.b/255).toFixed(4)}}:null,...r},v=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},E=o?.trim()||void 0,M=A=>{let g=A.el;g&&(m?g.style.setProperty("border-shape",m):g.style.removeProperty("border-shape"),xi(g))};return yi(s&&!d?"b":"i",{class:E,style:P,"data-poly-index":String(e.index),...v,...a,onVnodeMounted:M,onVnodeUpdated:M})}import{h as bi}from"vue";function Qe({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=t==="dynamic",s=Re(e.polygon.color??"#cccccc"),d=u&&xt(s)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:u?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...u&&!d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(s.r/255).toFixed(4),"--psg":(s.g/255).toFixed(4),"--psb":(s.b/255).toFixed(4)}:u?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([h,y])=>[`data-${h}`,String(y)])):{},l=o?.trim()||void 0;return bi("b",{class:l,style:m,"data-poly-index":String(e.index),...p,...a})}import{h as Si}from"vue";import{formatCornerShapeElementStyle as Ci,parseHex as Mi,rgbKey as Ei}from"@layoutit/polycss-core";function Ti(e,t,n){if(t==="dynamic"){let o=Mi(e.polygon.color??"#cccccc"),r=`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return Ei(o)!==n?.dynamicColorKey&&(r+=`;--psr:${(o.r/255).toFixed(4)};--psg:${(o.g/255).toFixed(4)};--psb:${(o.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function hn({entry:e,geometry:t,textureLighting:n,solidPaintDefaults:o,className:r,pointerEvents:a="auto"}){let i=Ci(e,t),u=Ti(e,n,o),s=a==="none"?";pointer-events:none":"",d=i+u+s,m=l=>{!l||!(l instanceof HTMLElement)||l.setAttribute("style",d)},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,h])=>[`data-${l}`,String(h)])):{};return Si("u",{class:r?.trim()||void 0,"data-poly-index":String(e.index),...p,onVnodeMounted:({el:l})=>m(l),onVnodeUpdated:({el:l})=>m(l)})}import{h as Ai}from"vue";import{formatMatrix3d as wi,formatCssLengthPx as Ft}from"@layoutit/polycss-core";var Li=64;function Je({entry:e,page:t,textureLighting:n,solidPaintDefaults:o,className:r,style:a,domAttrs:i,pointerEvents:u="auto"}){let s=n==="dynamic",d=e.atlasCanonicalSize??Li,m=e.canvasW||1,p=e.canvasH||1,l=t?`${Ft(-e.x/m*d)} ${Ft(-e.y/p*d)}`:void 0,h=t?`${Ft(t.width/m*d)} ${Ft(t.height/p*d)}`:void 0,y=s&&t?.url?`url(${t.url})`:void 0,P=!s&&t?.url?`url(${t.url}) ${l} / ${h} no-repeat`:void 0,v={transform:wi(e.atlasMatrix),"--polycss-atlas-size":`${d}px`,...s?{backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:l,backgroundSize:h}:{background:P},...s?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...s&&y?{maskImage:y,maskMode:"alpha",maskPosition:l,maskSize:h,maskRepeat:"no-repeat",WebkitMaskImage:y,WebkitMaskPosition:l,WebkitMaskSize:h,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:u==="none"?"none":void 0,...a},E=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},M=r?.trim()||void 0;return Ai("s",{class:M,style:v,"data-poly-index":String(e.index),...E,...i})}var Oo=Ri({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},centerPolygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=Di(ue);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:a}=o,i=Bt(0),u=new Map,s={register(f,x){u.set(f,x),i.value++},unregister(f){u.delete(f),i.value++},version:i,getEntries(){return Array.from(u.values())}},d=new Set,m=Bt(!1),p={register(f){d.add(f),m.value=d.size>0},unregister(f){d.delete(f),m.value=d.size>0},hasAny:m},l=Bt(null),h=Bt(null),y=xe(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??Lo,shadow:e.shadow,shadowRegistry:s,receiverRegistry:p,groundCssZ:l.value,sceneEl:h.value}));ki(Qt,y),To(h,f=>{r.value=f});let P=!1;wo(()=>{P||typeof document<"u"&&(Tt(document),P=!0)}),To(()=>e.debugShowBackfaces,f=>{let x=h.value;x&&x.classList.toggle("polycss-debug-show-backfaces",!!f)});let v=xe(()=>e.polygons??[]),E=xe(()=>e.centerPolygons??null),M=xe(()=>({directionalLight:e.directionalLight})),A=ht(v,M),g=xe(()=>E.value??v.value),L=ht(g,M);wo(()=>{r.value=h.value,a()}),Ii(a);let T=xe(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),_=xe(()=>{let f=e.textureLighting==="dynamic",x=f?void 0:e.directionalLight,S=f?void 0:e.ambientLight,C=Vt(A.value.polygons),O=e.seamBleed??Lo,k=O==="auto"||typeof O=="number"&&Number.isFinite(O)&&O>0?_t(A.value.polygons,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S}):null;return A.value.polygons.map((w,B)=>We(w,B,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S,seamBleed:k?.has(B)?O:void 0,seamEdges:k?.get(B),textureEdgeRepairEdges:C[B]}))}),D=xe(()=>e.textureLighting??"baked"),R=xe(()=>e.textureQuality),N=xe(()=>e.strategies),Y=Ge(_,D,R,N),H=xe(()=>{if(e.textureLighting!=="dynamic")return null;let f=e.directionalLight?.direction??[.4,-.7,.59],x=Vi(f),S=Math.hypot(x[0],x[1],x[2])||1,C=x[0]/S,O=x[1]/S,k=x[2]/S,w=Ro(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],B=Ro(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],W=e.directionalLight?.intensity??1,Z=e.ambientLight?.intensity??.4,q=ne=>(ne/255).toFixed(4),$=k,ee=Math.sign($||1)*Math.max(Math.abs($),.01);return{"--plx":C.toFixed(2),"--ply":O.toFixed(2),"--plz":k.toFixed(2),"--clx":C.toFixed(2),"--cly":O.toFixed(2),"--clz":ee.toFixed(2),"--plr":q(w[0]),"--plg":q(w[1]),"--plb":q(w[2]),"--pli":W.toFixed(4),"--par":q(B[0]),"--pag":q(B[1]),"--pab":q(B[2]),"--pai":Z.toFixed(4)}}),b=50;Ao(()=>{let f=h.value;i.value;let x=s.getEntries();if(x.length===0){f&&f.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let S=1/0;for(let k of x){let w=k();for(let B of w.polygons)for(let W of B.vertices){let Z=W[2]+(w.position[2]??0);Z<S&&(S=Z)}}if(!Number.isFinite(S)){f&&f.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let C=e.shadow?.lift??.05,O=(S+C)*b;l.value!==O&&(l.value=O),f&&(e.textureLighting==="dynamic"?f.style.setProperty("--shadow-ground-cssz",O.toFixed(3)):f.style.removeProperty("--shadow-ground-cssz"))});let c=xe(()=>{if(!e.autoCenter)return[0,0,0];let f=L.value.sceneBbox;return[(f.min[0]+f.max[0])/2,(f.min[1]+f.max[1])/2,(f.min[2]+f.max[2])/2]});return Ao(()=>{o.autoCenterOffset.value=c.value}),Fi(()=>{}),()=>{let f=`polycss-scene${e.class?` ${e.class}`:""}`,x=T.value,S=Y.entries.value.map((O,k)=>{if(O)return Je({entry:O,page:Y.pages.value[O.pageIndex],textureLighting:x.textureLighting??"baked"});let w=_.value[k];return!w||w.texture?null:Y.useStableTriangle.value&&it(w)?Ze({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useProjectiveQuad.value&&st(w)?Qe({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useBorderShape.value||Y.useFullRectSolid.value?Ke({entry:w,textureLighting:x.textureLighting??"baked",forceBorderShape:!Y.useFullRectSolid.value}):null}),C=t.default?.()??[];return Oi("div",{ref:h,class:f,"data-polycss-lighting":x.textureLighting??"baked","aria-hidden":"true",style:{...H.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([O])=>O!=="style"&&O!=="class"))},[...S,...C])}}});import{defineComponent as Ms,h as Ie,Teleport as Es,computed as oe,inject as Ts,onMounted as As,onBeforeUnmount as Xo,ref as ct,watch as Ht,watchEffect as Uo}from"vue";import{buildBasisHints as ws,buildSharedEdgeMap as Ls,cornerShapeGeometryForPlan as Rs,worldDirectionalLightToCss as Os}from"@layoutit/polycss-core";import{BASE_TILE as Nt,buildPolyMeshTransform as Ds,computeReceiverShadowFaces as ks,computeSceneBbox as Is,DEFAULT_SEAM_BLEED as Fs,ensureCcw2D as Vs,inverseRotateVec3 as Wo,findOverlappingPolygonDuplicates as qo,optimizeMeshPolygons as _s,parseHexColor as Bs,prepareCasterEdgeOwners as zs,prepareCasterPolyItems as Hs,prepareReceiverFacePlanes as Ns,projectCssVertexToGround as Ys,worldDirectionToCss as Go}from"@layoutit/polycss-core";import{ref as bt,watch as _i,onUnmounted as Bi}from"vue";import{loadMesh as zi}from"@layoutit/polycss-core";var Do=[],Pn=[];function zt(e,t){let n=bt(Do),o=bt(void 0),r=bt(!!e.value),a=bt(null),i=bt(Pn),u=null;function s(){if(u){try{u.dispose()}catch{}u=null}}return _i(e,(d,m,p)=>{if(!d){s(),n.value=Do,o.value=void 0,r.value=!1,a.value=null,i.value=Pn;return}let l=!1;r.value=!0,a.value=null;let h=u;zi(d,t).then(y=>{if(l){try{y.dispose()}catch{}return}if(h)try{h.dispose()}catch{}u=y,n.value=y.polygons,o.value=y.voxelSource,r.value=!1,a.value=null,i.value=y.warnings??Pn}).catch(y=>{if(l)return;let P=y instanceof Error?y:new Error(String(y));r.value=!1,a.value=P}),p(()=>{l=!0})},{immediate:!0}),Bi(()=>{s()}),{polygons:n,voxelSource:o,loading:r,error:a,warnings:i,dispose:s}}import{BASE_TILE as de,computeProjectiveQuadMatrix as Hi,normalFacesCamera as Ni,parsePureColor as zo,PROJECTIVE_QUAD_BLEED as Yi,resolveProjectiveQuadGuards as ji,rotateVec3 as ko,shadePolygon as $i,SOLID_QUAD_CANONICAL_SIZE as Xi}from"@layoutit/polycss-core";var Ui=[.4,-.7,.59],Wi="#ffffff",qi=1,Gi="#ffffff",Zi=.4,Ho=1,Ki=8,Qi=Yi,ke=1e-6,Ji=ji({bleed:0}),No={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},bn=["t","b","bl","br","fr","fl"],es=new Map([["0,0,1","t"],["0,0,-1","b"],["0,1,0","fl"],["0,-1,0","br"],["1,0,0","fr"],["-1,0,0","bl"]]);function Io(e){let t=[];for(let n of bn)Ni(No[n],e)&&t.push(n);return t.join("|")}function ts(e,t,n){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==t&&(e.style.color=t,o.color=t),o.transform!==n&&(e.style.transform=n,o.transform=n)}function ns(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,a=0;for(let u=1;u+1<t.length;u+=1){let s=t[u],d=t[u+1],m=s[1]-n[1],p=s[0]-n[0],l=s[2]-n[2],h=d[1]-n[1],y=d[0]-n[0],P=d[2]-n[2];o-=p*P-l*y,r-=l*h-m*P,a-=m*y-p*h}let i=Math.hypot(o,r,a);return i<=1e-9?null:[Math.round(o/i),Math.round(r/i),Math.round(a/i)]}function os(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=ns(e),n=t?es.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,a=1/0,i=-1/0,u=-1/0,s=-1/0;for(let p of e.vertices)o=Math.min(o,p[0]),r=Math.min(r,p[1]),a=Math.min(a,p[2]),i=Math.max(i,p[0]),u=Math.max(u,p[1]),s=Math.max(s,p[2]);let d=1e-6,m=cs(e.color);return Math.abs(s-a)<=d?{axis:"z",face:n,left:r*de,top:o*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(i-o)*de),z:a*de,baseColor:m,bleed:vn()}:Math.abs(i-o)<=d?{axis:"x",face:n,left:r*de,top:a*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(s-a)*de),z:-o*de,baseColor:m,bleed:vn()}:Math.abs(u-r)<=d?{axis:"y",face:n,left:a*de,top:o*de,width:Math.max(0,(s-a)*de),height:Math.max(0,(i-o)*de),z:-r*de,baseColor:m,bleed:vn()}:null}function vn(){return{left:0,right:0,top:0,bottom:0}}function rs(e){let t=o=>String(Number(o.toFixed(6))),n=`${e.item.baseColor}|${e.variableAxis}`;for(let o=0;o<3;o+=1)o!==e.variableAxis&&(n+=`|${o}:${t(e.fixed[o])}`);return n}function Fo(e){return[e[1]*de,e[0]*de,e[2]*de]}function Vo(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function as(e,t,n){let o=e.left,r=e.left+e.width,a=e.top,i=e.top+e.height;if(Math.abs(t[0]-n[0])<=ke){if(Math.abs(t[0]-o)<=ke)return"left";if(Math.abs(t[0]-r)<=ke)return"right"}if(Math.abs(t[1]-n[1])<=ke){if(Math.abs(t[1]-a)<=ke)return"top";if(Math.abs(t[1]-i)<=ke)return"bottom"}return null}function is(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=ke)){if(n!==null)return null;n=o}return n}function ss(e,t,n){let o=t.vertices,r=Fo(o[n]),a=Fo(o[(n+1)%o.length]),i=as(e,Vo(e,r),Vo(e,a));if(!i)return null;let u=is(r,a);if(u===null)return null;let s=Math.min(r[u],a[u]),d=Math.max(r[u],a[u]);return d-s>ke?{item:e,side:i,variableAxis:u,fixed:r,start:s,end:d}:null}function _o(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Qi)}function ls(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let a=0;a<r.vertices.length;a+=1){let i=ss(o,r,a);if(!i)continue;let u=rs(i),s=n.get(u);s?s.push(i):n.set(u,[i])}}for(let o of n.values()){if(o.length<2)continue;o.sort((a,i)=>a.start-i.start||a.end-i.end);let r=[];for(let a of o){r=r.filter(i=>i.end>a.start+ke);for(let i of r)i.item.sourceIndex!==a.item.sourceIndex&&(_o(i),_o(a));r.push(a)}}}function us(e){let t=zo(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha}:{r:255,g:255,b:255,alpha:1}}function cs(e){if(!e)return"#cccccc";let t=zo(e);if(!t)return e;let n={r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha};if(n.alpha<1){let o=Math.round(Math.max(0,n.alpha)*1e3)/1e3;return`rgba(${xn(n.r)}, ${xn(n.g)}, ${xn(n.b)}, ${o})`}return ds(n)}function ds({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function xn(e){return Math.round(Math.max(0,Math.min(255,e)))}function ms(e,t,n,o){let r=n?.direction??Ui,a=Math.hypot(r[0],r[1],r[2])||1,i=r[0]/a,u=r[1]/a,s=r[2]/a,d=Math.max(0,n?.intensity??qi)*Math.max(0,e[0]*i+e[1]*u+e[2]*s),m=Math.max(0,o?.intensity??Zi),p=n?.color??Wi,l=o?.color??Gi,h=$i(t,d,p,l,m),y=us(t);if(y.alpha>=1)return h;let P=parseInt(h.slice(1,3),16),v=parseInt(h.slice(3,5),16),E=parseInt(h.slice(5,7),16);return`rgba(${P}, ${v}, ${E}, ${y.alpha})`}function ps(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=os(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return ls(e,t),t}function ys(e){return e.axis==="x"?{xAxis:[1,0,0],yAxis:[0,0,1],normal:[0,-1,0],tx:0,ty:-e.z,tz:0}:e.axis==="y"?{xAxis:[0,0,1],yAxis:[0,1,0],normal:[-1,0,0],tx:-e.z,ty:0,tz:0}:{xAxis:[1,0,0],yAxis:[0,1,0],normal:[0,0,1],tx:0,ty:0,tz:e.z}}function fs(e){let t=e.left,n=e.top,o=e.left+e.width,r=e.top+e.height;return[t,n,o,n,o,r,t,r]}function gs(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function hs(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=Xi/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function Bo(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,a=e.height+e.bleed.top+e.bleed.bottom,i=e.z,u=r/t,s=a/t;return`matrix3d(${(e.axis==="x"?[u,0,0,0,0,0,s,0,0,-1,0,0,n,-i,o,1]:e.axis==="y"?[0,0,u,0,0,s,0,0,-1,0,0,0,-i,o,n,1]:[u,0,0,0,0,s,0,0,0,0,1,0,n,o,i,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function Ps(e,t){let{xAxis:n,yAxis:o,normal:r,tx:a,ty:i,tz:u}=ys(e),s=Hi(fs(e),n,o,r,a,i,u,Ji,gs(e));return s?hs(s,t)??Bo(e,t):Bo(e,t)}function vs(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function xs(e){return vs(e)?Ki:Ho}function bs(e){return e.axis==="x"?[e.left+e.width/2,-e.z,e.top+e.height/2]:e.axis==="y"?[-e.z,e.top+e.height/2,e.left+e.width/2]:[e.left+e.width/2,e.top+e.height/2,e.z]}function Ss(e,t){let n=bs(e),o=t.meshRotation;o&&(n=ko(n,o[0]??0,o[1]??0,o[2]??0));let[r,a]=ko(n,t.rotX,0,t.rotY);return{x:r,y:a}}function Cs(e,t,n){let o=e.filter(l=>t.has(l.face)).map(l=>({item:l,...Ss(l,n)}));if(o.length===0)return[];let r=1/0,a=-1/0,i=1/0,u=-1/0;for(let l of o)r=Math.min(r,l.x),a=Math.max(a,l.x),i=Math.min(i,l.y),u=Math.max(u,l.y);let s=4,d=Math.max(1e-6,a-r),m=Math.max(1e-6,u-i),p=new Map;for(let l of o){let h=Math.min(s-1,Math.max(0,Math.floor((l.x-r)/d*s))),y=Math.min(s-1,Math.max(0,Math.floor((l.y-i)/m*s))),P=`${h}:${y}`,v=p.get(P);v||(v={tx:h,ty:y,sourceIndex:l.item.sourceIndex,items:[]},p.set(P,v)),v.items.push(l.item),v.sourceIndex=Math.min(v.sourceIndex,l.item.sourceIndex)}return Array.from(p.values()).sort((l,h)=>l.ty-h.ty||l.tx-h.tx||l.sourceIndex-h.sourceIndex).flatMap(l=>l.items)}function Yo(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:a}=e,i=ps(o);if(i.length===0)return null;let u=new Set(i.map(b=>b.face));n.classList.add("polycss-voxel-mesh");let s=xs(t);s!==Ho&&n.style.setProperty("--polycss-voxel-primitive",`${s}px`);let d=new Map,m=(b,c)=>{let f=`${b}|${c}`,x=d.get(f);if(x)return x;let S=ms(No[b],c,r,a);return d.set(f,S),S},p=new Map,l=new Map,h=new Map,y=new Map;for(let b of i){let c=y.get(b.face);c||(c=[],y.set(b.face,c)),c.push(b)}let P="",v=0,E=new Set,M=b=>{let c=p.get(b.sourceIndex);return c||(c=t.createElement("b"),p.set(b.sourceIndex,c),ts(c,m(b.face,b.baseColor),Ps(b,s))),c},A=b=>{let c=l.get(b);return c||(c=t.createElement("span"),c.className=`polycss-voxel-face polycss-voxel-face-${b}`,c.dataset.polycssVoxelFace=b,c.__polycssVoxelFaceHost=!0,l.set(b,c)),c},g=()=>{for(let b of Array.from(n.childNodes))if(!b.__polycssVoxelFaceHost)return b;return null},L=(b,c)=>{let f=c.map(C=>C.sourceIndex).join(",");if(h.get(b)===f)return;let x=A(b),S=t.createDocumentFragment();for(let C of c)S.appendChild(M(C));x.replaceChildren(S),h.set(b,f)},T=()=>{for(let b of bn)u.has(b)&&L(b,y.get(b)??[])},_=b=>new Set(b.split("|").filter(Boolean)),D=b=>{let c=_(b);return bn.filter(f=>c.has(f)&&u.has(f))},R=b=>{let c=0;for(let f of b)c+=y.get(f)?.length??0;return c},N=b=>{let c=new Set,f=[],x=new Map;for(let S of b){c.has(S.face)||(c.add(S.face),f.push(S.face));let C=x.get(S.face);C||(C=[],x.set(S.face,C)),C.push(S)}return{orderedFaces:f,itemsByFace:x}},Y=(b,c)=>{let f=new Set(b);for(let x of E){if(f.has(x))continue;let S=l.get(x);S?.parentNode===n&&n.removeChild(S)}if(c){let x=t.createDocumentFragment();for(let S of b)x.appendChild(A(S));n.insertBefore(x,g()),E=f;return}for(let x=0;x<b.length;x+=1){let S=b[x],C=A(S);if(C.parentNode===n)continue;let O=null;for(let k=x+1;k<b.length;k+=1){let w=l.get(b[k]);if(w?.parentNode===n){O=w;break}}n.insertBefore(C,O??g())}E=f},H=(b,c,f)=>{if(!f){let k=D(b);Y(k,!1),v=R(k);return}let x=new Set(b.split("|").filter(Boolean)),S=Cs(i,x,c),{orderedFaces:C,itemsByFace:O}=N(S);for(let k of C)L(k,O.get(k)??[]);Y(C,!0),v=S.length};return T(),{get brushCount(){return v},render(b){P=Io(b),H(P,b,!0)},syncCamera(b){let c=Io(b);c!==P&&(P=c,H(c,b,!1))},dispose(){for(let b of l.values())b.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),p.clear(),l.clear(),h.clear(),v=0,E=new Set,P=""}}}var Sn=new WeakMap;function jo(e,t){Sn.set(e,t)}function $o(e){Sn.delete(e)}function lt(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=Sn.get(t);if(n)return n}t=t.parentElement}return null}function ut(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let a=r.getBoundingClientRect();if(!(a.width<=0||a.height<=0)&&t>=a.left&&t<=a.right&&n>=a.top&&n<=a.bottom)return!0}return!1}function Cn(e,t,n){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let r of o){if(n&&!n(r))continue;let a=lt(r);if(a&&ut(r,e,t))return a}return null}var Zo=new WeakMap,Ko=new WeakMap;function js(e){let t={};return e.paintColor&&(t["--polycss-paint"]=e.paintColor),e.dynamicColor&&(t["--psr"]=(e.dynamicColor.r/255).toFixed(4),t["--psg"]=(e.dynamicColor.g/255).toFixed(4),t["--psb"]=(e.dynamicColor.b/255).toFixed(4)),Object.keys(t).length>0?t:null}function Qo(e){if(e.length===0)return e;let t=Is(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let a=i=>[i[0]-n,i[1]-o,i[2]-r];return e.map(i=>({...i,vertices:i.vertices.map(a),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(u=>({...u,vertices:u.vertices.map(a)}))}:null}))}var te=Ms({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},voxelSource:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},atomicAtlas:{type:Boolean,default:!1},onFrameReady:{type:Function,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},merge:{type:Boolean,default:!0},meshResolution:{type:String,default:void 0},parseOptions:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=oe(()=>e.src??""),a=oe(()=>{let F={...e.parseOptions??{}};return e.mtl&&(F.mtlUrl=e.mtl),e.meshResolution!==void 0&&(F.meshResolution=e.meshResolution),Object.keys(F).length>0?F:void 0}),i=zt(r,a.value),u=oe(()=>e.src?i.polygons.value:e.polygons??[]),s=ct(null),d=null;Ht(u,()=>{s.value=null,d=null});let m=oe(()=>s.value??u.value),p=oe(()=>e.merge?_s(m.value,e.meshResolution!==void 0?{meshResolution:e.meshResolution}:void 0):m.value),l=oe(()=>e.autoCenter?Qo(p.value):p.value),h=!t.polygon,y=Nn(),P=Ts(ue,null),v=ct(0),E;Uo(F=>{E?.(),E=P?.store.subscribe(()=>{v.value++}),F(()=>{E?.(),E=void 0})});let M=oe(()=>e.textureLighting??y?.value.textureLighting??"baked"),A=oe(()=>y?.value.strategies),g=oe(()=>e.seamBleed??y?.value.seamBleed??Fs),L=oe(()=>y?.value.directionalLight),T=oe(()=>y?.value.ambientLight),_=oe(()=>e.src?i.voxelSource.value:e.voxelSource??void 0),D=oe(()=>!!(_.value&&s.value===null&&!t.polygon&&!t.default&&M.value==="baked"&&!e.castShadow)),R=oe(()=>{if(M.value!=="dynamic")return null;let F=e.rotation;if(!F||F[0]===0&&F[1]===0&&F[2]===0)return null;let U=y?.value.directionalLight?.direction;if(!U)return null;let j=Wo(U,F),V=Math.hypot(j[0],j[1],j[2])||1;return{"--plx":(j[0]/V).toFixed(2),"--ply":(j[1]/V).toFixed(2),"--plz":(j[2]/V).toFixed(2)}}),N=ct(e.rotation),Y=ct(0),H=oe(()=>{let F=L.value;if(!F)return F;let U=Os(F);return N.value?{...U,direction:Wo(U.direction,N.value)}:U}),b=void 0,c=oe(()=>{if(!h||D.value)return[];let F=Vt(l.value),U=g.value==="auto"||typeof g.value=="number"&&Number.isFinite(g.value)&&g.value>0?_t(l.value,{directionalLight:H.value,ambientLight:T.value}):null,j=ws(l.value,{directionalLight:H.value,ambientLight:T.value});return l.value.map((V,X)=>We(V,X,{directionalLight:H.value,ambientLight:T.value,seamBleed:U?.has(X)?g.value:void 0,seamEdges:U?.get(X),textureEdgeRepairEdges:F[X],lightOccludedPolyIndices:b},j[X]))}),f=oe(()=>e.textureQuality),x=oe(()=>e.atomicAtlas),S=Ge(c,M,f,A,x),C=oe(()=>h?fn(S.plans.value,M.value,A.value):{});Ht(()=>S.entries.value,()=>{e.atomicAtlas&&S.ready.value&&e.onFrameReady?.()},{flush:"sync"});let O=oe(()=>js(C.value)),k=oe(()=>{if(!e.castShadow||y?.value.receiverRegistry?.hasAny.value)return null;let F=y?.value,U=F?.groundCssZ??null;if(U===null)return null;let j=F?.shadow,V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=e.position?.[2]??0,se=U-G*Nt,le=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),re=[],me=1/0,pe=1/0,ce=-1/0,fe=-1/0,Q=1/0,z=1/0,I=-1/0,ae=-1/0,he=l.value,ze=c.value;for(let Se=0;Se<he.length;Se++){if(le.has(Se)||!ze[Se])continue;let Le=he[Se],nt=[];for(let Ne of Le.vertices){let Ce=[Ne[1]*Nt,Ne[0]*Nt,Ne[2]*Nt];Ce[0]<Q&&(Q=Ce[0]),Ce[1]<z&&(z=Ce[1]),Ce[0]>I&&(I=Ce[0]),Ce[1]>ae&&(ae=Ce[1]);let ve=Ys(Ce,X,se);nt.push(ve),ve[0]<me&&(me=ve[0]),ve[1]<pe&&(pe=ve[1]),ve[0]>ce&&(ce=ve[0]),ve[1]>fe&&(fe=ve[1])}re.push(nt)}if(re.length===0)return null;let Pe=j?.maxExtend??2e3,be=Math.max(me,Q-Pe),Fe=Math.max(pe,z-Pe),tt=Math.min(ce,I+Pe),Ve=Math.min(fe,ae+Pe),_e=tt-be,Be=Ve-Fe;if(!(_e>0)||!(Be>0))return null;let ft=j?.color??"#000000",Vn=j?.opacity??.25,Ae=Bs(ft)?.rgb??[0,0,0],He="";for(let Se of re){let we=Vs(Se);He+=`M${(we[0][0]-be).toFixed(3)},${(we[0][1]-Fe).toFixed(3)}`;for(let Le=1;Le<we.length;Le++)He+=`L${(we[Le][0]-be).toFixed(3)},${(we[Le][1]-Fe).toFixed(3)}`;He+="Z"}return Ie("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(_e),height:String(Be),viewBox:`0 0 ${_e} ${Be}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${be.toFixed(3)}px,${Fe.toFixed(3)}px,${se.toFixed(3)}px)`}},[Ie("path",{d:He,fill:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"fill-rule":"nonzero",stroke:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"stroke-width":"3","stroke-linejoin":"round",opacity:Vn.toFixed(4)})])}),w=oe(()=>e.receiveShadow?Ls(l.value):void 0),B=oe(()=>{if(!e.receiveShadow)return[];let F=y?.value,U=F?.shadowRegistry;if(!U)return[];U.version.value,v.value;let j=U.getEntries();if(j.length===0)return[];let V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=F?.shadow?.lift??.001,se=Ns(l.value,e.position??[0,0,0],e.scale,new Set,G,e.rotation);if(se.length===0)return[];let le=[],re=0,me=w.value;for(let Q of j){let z=Q(),I=z.renderedPolygonIndices,ae=Hs(z.polygons,z.position,z.scale,I?Pe=>I.has(Pe):()=>!0,z.rotation??null),he=z.polygons===l.value,ze;if(!he&&z.polygons.length>=40){let Pe=z.rotation??null,be=z.position,Fe=JSON.stringify(z.scale??null),tt=`${be[0]},${be[1]},${be[2]}|${Pe?Pe.join(","):"n"}|${Fe}`,Ve=Zo.get(z.polygons);(Ve===void 0||Ko.get(z.polygons)!==tt)&&(Ve=zs(z.polygons,be,z.scale,Pe),Zo.set(z.polygons,Ve),Ko.set(z.polygons,tt)),ze=Ve}le.push({id:Symbol(`caster-${re++}`),items:ae,selfShadowEdgeMap:he?me:void 0,edgeOwners:ze,casterPolygonCount:z.polygons.length})}let pe=P?.store.getState().cameraState,ce={rotX:pe?.rotX??65,rotY:pe?.rotY??45,meshRotation:e.rotation};return ks({receiverPlanes:se,receiverPolygons:l.value,receiverHasTexture:l.value.some(Q=>Q.texture!==void 0),casters:le,lightDir:X,cameraRot:ce,ambientLight:F?.ambientLight,directionalLight:F?.directionalLight,shadow:{color:F?.shadow?.color,opacity:F?.shadow?.opacity??.25,maxExtend:F?.shadow?.maxExtend}}).map(Q=>Ie("svg",{key:`receiver-${Q.faceIndex}`,class:"polycss-shadow polycss-shadow-svg polycss-shadow-receiver","data-poly-shadow-type":"receiver","data-poly-shadow-receiver-face":String(Q.faceIndex),"data-poly-shadow-receiver-polys":JSON.stringify(Q.memberPolyIndices),width:String(Q.width),height:String(Q.height),viewBox:`0 0 ${Q.width} ${Q.height}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:Q.matrixCss}},Q.paths.map((z,I)=>Ie("path",{key:I,d:z.d,fill:Q.fill,stroke:Q.fill,"stroke-width":"3","stroke-linejoin":"round",opacity:Q.opacity.toFixed(4),"data-poly-shadow-caster-polys":JSON.stringify(z.casterPolygonIndices)}))))}),W=Symbol();Ht(()=>e.castShadow,(F,U,j)=>{let V=y?.value.shadowRegistry;V&&(F?V.register(W,()=>{let X=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),G=new Set,se=c.value;for(let le=0;le<se.length;le++)se[le]&&!X.has(le)&&G.add(le);return{polygons:l.value,position:e.position??[0,0,0],scale:e.scale,rotation:e.rotation,renderedPolygonIndices:G}}):V.unregister(W),j(()=>V.unregister(W)))},{immediate:!0});let Z=Symbol();Ht(()=>e.receiveShadow,(F,U,j)=>{let V=y?.value.receiverRegistry;V&&(F?V.register(Z):V.unregister(Z),j(()=>V.unregister(Z)))},{immediate:!0}),Xo(()=>{y?.value.shadowRegistry?.unregister(W),y?.value.receiverRegistry?.unregister(Z)});let q=ct(null),$={get element(){return q.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>d??l.value,setPolygons(F){let U=e.autoCenter?Qo(F):F;d=U;let j=q.value,V=j&&h&&yn(j,U,{directionalLight:H.value,ambientLight:T.value,textureLighting:M.value,strategies:A.value,seamBleed:g.value,colorFrame:++Y.value,colorFreezeFrames:0});s.value=F.slice()},updatePolygon(F,U){let j=d??l.value,V=typeof F=="number"?F:j.indexOf(F);V<0||V>=j.length||(Object.assign(j[V],U),s.value=j.slice(),d=null)},rebakeAtlas:()=>{N.value=e.rotation}};o($),As(()=>{q.value&&jo(q.value,$)}),Xo(()=>{q.value&&$o(q.value)});let ee=ct(null);Uo(F=>{let U=q.value;if(ee.value?.dispose(),ee.value=null,!D.value||!U)return;let j=Yo({doc:U.ownerDocument,wrapper:U,polygons:l.value,directionalLight:H.value,ambientLight:T.value});if(!j)return;let V=()=>{let G=P?.store.getState().cameraState;return{rotX:G?.rotX??65,rotY:G?.rotY??45,meshRotation:e.rotation}};ee.value=j,j.render(V());let X=P?.store.subscribe(()=>{j.syncCamera(V())});F(()=>{X?.(),j.dispose(),ee.value===j&&(ee.value=null)})});let ne=null;function ie(F,U,j){let V=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let re=document.elementsFromPoint(U,j),me=new Set;for(let pe of re){let ce=lt(pe);ce&&!me.has(ce)&&(me.add(ce),V.push({object:ce}))}}let X=0,G=0,se=P?.cameraElRef.value;if(se){let re=se.getBoundingClientRect();re.width>0&&re.height>0&&(X=(U-re.left)/re.width*2-1,G=-((j-re.top)/re.height*2-1))}let le=0;return ne&&(le=Math.hypot(U-ne.x,j-ne.y)),{object:V[0]?.object??$,eventObject:$,intersections:V,pointer:{x:X,y:G},delta:le,nativeEvent:F,stopPropagation:()=>F.stopPropagation()}}function J(F,U,j,V){F&&F(ie(U,j,V))}return()=>{let U={transform:Ds({position:e.position,scale:e.scale,rotation:e.rotation}),...R.value??void 0,...n.style,...O.value??void 0},j=Object.fromEntries(Object.entries(n).filter(([z])=>z!=="style"&&z!=="class")),V=`polycss-mesh${D.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,X={};e.onClick&&(X.onClick=z=>{let I=z;J(e.onClick,I,I.clientX,I.clientY)}),e.onContextMenu&&(X.onContextmenu=z=>{let I=z;J(e.onContextMenu,I,I.clientX,I.clientY)}),e.onDoubleClick&&(X.onDblclick=z=>{let I=z;J(e.onDoubleClick,I,I.clientX,I.clientY)}),e.onWheel&&(X.onWheel=z=>{let I=z;J(e.onWheel,I,I.clientX,I.clientY)}),X.onPointerdown=z=>{let I=z;ne={x:I.clientX,y:I.clientY},J(e.onPointerDown,I,I.clientX,I.clientY)},X.onPointerup=z=>{let I=z;J(e.onPointerUp,I,I.clientX,I.clientY),ne=null},e.onPointerMove&&(X.onPointermove=z=>{let I=z;J(e.onPointerMove,I,I.clientX,I.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(X.onPointerenter=z=>{let I=z;J(e.onPointerOver,I,I.clientX,I.clientY),J(e.onPointerEnter,I,I.clientX,I.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(X.onPointerleave=z=>{let I=z;J(e.onPointerOut,I,I.clientX,I.clientY),J(e.onPointerLeave,I,I.clientX,I.clientY)}),e.onPointerCancel&&(X.onPointercancel=z=>{let I=z;J(e.onPointerCancel,I,I.clientX,I.clientY),ne=null});let G=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:U,...G,...X,...j},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:U,...G,...X,...j},t.error?.({error:i.error.value})??[]);let se=l.value,le=t.polygon?se.map((z,I)=>Ie("template",{key:I},t.polygon?.({polygon:z,index:I}))):D.value?[]:S.entries.value.map((z,I)=>{if(z)return Je({entry:z,page:S.pages.value[z.pageIndex],textureLighting:M.value,solidPaintDefaults:C.value});let ae=S.plans.value[I];if(!ae||ae.texture)return null;if(st(ae))return Qe({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});if(it(ae))return Ze({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});let he=A.value?.disable?.includes("i")?null:Rs(ae);return he?hn({entry:ae,geometry:he,textureLighting:M.value,solidPaintDefaults:C.value}):Ke({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value,forceBorderShape:!S.useFullRectSolid.value})}),re=t.default?.()??[],me=k.value,pe=me?[me]:[],ce=B.value,fe=y?.value?.sceneEl??null,Q=fe&&ce.length>0?[Ie(Es,{to:fe},ce)]:[];return Ie("div",{ref:q,class:V,style:U,...G,...X,...j},[...pe,...Q,...le,...re])}}});import{defineComponent as $s,h as Jo,computed as Mn}from"vue";import{BASE_TILE as St}from"@layoutit/polycss-core";function Xs(e,t,n,o,r){let a=typeof n=="number"?n:n?.[0]??1,i=typeof n=="number"?n:n?.[1]??1,u=typeof n=="number"?n:n?.[2]??1,s=a!==1||i!==1||u!==1,d=!!t&&(!!t[0]||!!t[1]||!!t[2]),m=(e?.[1]??0)*St,p=(e?.[0]??0)*St,l=(e?.[2]??0)*St,h=[];return h.push(`translate3d(${m}px, ${p}px, ${l}px)`),d&&(t[0]&&h.push(`rotateY(${-t[0]}deg)`),t[1]&&h.push(`rotateX(${-t[1]}deg)`),t[2]&&h.push(`rotateZ(${-t[2]}deg)`)),s&&h.push(`scale3d(${a}, ${i}, ${u})`),h.push(`translate(${-o/2}px, ${-r/2}px)`),h.join(" ")}var er=$s({name:"PolyIframe",props:{src:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},position:{type:Array,default:void 0},rotation:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},allow:{type:String,default:void 0},sandbox:{type:String,default:void 0},loading:{type:String,default:void 0},referrerpolicy:{type:String,default:void 0},title:{type:String,default:void 0},class:{type:String,default:void 0},style:{type:Object,default:void 0}},setup(e){let t=Mn(()=>e.width*St),n=Mn(()=>e.height*St),o=Mn(()=>Xs(e.position,e.rotation,e.scale,t.value,n.value));return()=>{let r={position:"absolute",left:"0",top:"0",transformOrigin:"0 0",transformStyle:"preserve-3d",transform:o.value,...e.style??{}},a={src:e.src,style:{width:`${t.value}px`,height:`${n.value}px`,border:"0",display:"block",background:"#000"}};return e.allow&&(a.allow=e.allow),e.sandbox&&(a.sandbox=e.sandbox),e.loading&&(a.loading=e.loading),e.referrerpolicy&&(a.referrerpolicy=e.referrerpolicy),e.title&&(a.title=e.title),Jo("div",{class:e.class?`polycss-iframe ${e.class}`:"polycss-iframe",style:r},[Jo("iframe",a)])}}});import{defineComponent as Us,h as Ws,computed as qs}from"vue";var tr=Us({name:"PolyGround",props:{size:{type:Number,default:6},z:{type:Number,default:0},center:{type:Array,default:()=>[0,0]},color:{type:String,default:"#7d848e"},class:{type:String,default:void 0}},setup(e){let t=qs(()=>{let n=e.size/2,[o,r]=e.center;return[{vertices:[[o-n,r-n,e.z],[o+n,r-n,e.z],[o+n,r+n,e.z],[o-n,r+n,e.z]],color:e.color}]});return()=>Ws(te,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as nr}from"vue";function Gs(e){return typeof e=="function"?nr(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):nr(()=>({texture:e.texture,key:e.key}))}import{computed as dt,defineComponent as Zs,h as or}from"vue";var Ks=4;function Yt(e,t=Ks){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function Qs(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,a)=>r-a),n=[...new Set(e.map(r=>r[1]))].sort((r,a)=>r-a);if(t.length!==2||n.length!==2)return null;let o=new Set([`${t[0]},${n[0]}`,`${t[0]},${n[1]}`,`${t[1]},${n[0]}`,`${t[1]},${n[1]}`]);for(let r of e)if(!o.has(`${r[0]},${r[1]}`))return null;return{u0:t[0],u1:t[1],v0:n[0],v1:n[1]}}function Js({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let{u0:u,u1:s,v0:d,v1:m}=n,p=s-u,l=m-d,h=1/p,y=1/l,P=Math.max(d,m),v=u/p,E=(1-P)/l,M={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Yt(h)} ${Yt(y)}`,backgroundPosition:`${Yt(-v)} ${Yt(-E)}`,pointerEvents:i==="none"?"none":void 0,...r},A=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,T])=>[`data-${L}`,String(T)])):{},g=o?.trim()||void 0;return or("i",{class:g,style:M,...A,...a})}var rr=Zs({name:"Poly",inheritAttrs:!1,props:{vertices:{type:Array,required:!0},color:{type:String},texture:{type:String},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},material:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},context:{type:Object,default:void 0},baseColor:{type:String},pointerEvents:{type:String,default:"auto"}},setup(e,{attrs:t}){let n=dt(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=dt(()=>e.textureQuality??e.context?.textureQuality),r=dt(()=>e.material?.texture??e.texture),a=dt(()=>e.material&&e.uvs?Qs(e.uvs):null),i=dt(()=>{let d=e.context?.tileSize??50;return We({vertices:e.vertices,color:e.baseColor??e.color,texture:r.value,uvs:e.uvs,data:e.data},0,{tileSize:d,layerElevation:e.context?.layerElevation??d,directionalLight:e.context?.directionalLight})}),u=dt(()=>a.value?[]:[i.value]),s=Ge(u,n,o);return()=>{let d=i.value,m=s.entries.value[0],p=[];e.position&&p.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&p.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):p.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&p.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&p.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&p.push(`rotateZ(${e.rotation[2]}deg)`));let l=p.length>0?p.join(" "):void 0,h={};if(e.data)for(let[E,M]of Object.entries(e.data))h[`data-${E}`]=String(M);let y={...t,...h},P=Object.fromEntries(Object.entries(y).filter(([E])=>E!=="class"&&E!=="style")),v;return a.value&&e.material&&d?v=Js({plan:d,material:e.material,uvRect:a.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):m?v=Je({entry:m,page:s.pages.value[m.pageIndex],textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):d&&!d.texture&&(v=it(d)?Ze({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):st(d)?Qe({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):Ke({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"})),v?l?or("div",{class:"polycss-poly-wrapper",style:{transform:l,position:"absolute",transformStyle:"preserve-3d"}},[v]):v:null}}});import{computed as Me,defineComponent as Ee,h as Te}from"vue";import{boxPolygons as el,planePolygons as tl,ringPolygons as nl,octahedronPolygons as ol,spherePolygons as rl,tetrahedronPolygons as al,icosahedronPolygons as il,dodecahedronPolygons as sl,cylinderPolygons as ll,conePolygons as ul,torusPolygons as cl}from"@layoutit/polycss-core";var ar=Ee({name:"PolyBox",props:{size:{type:[Number,Array],default:void 0},center:{type:Array,default:void 0},min:{type:Array,default:void 0},max:{type:Array,default:void 0},color:{type:String,default:void 0},texture:{type:String,default:void 0},material:{type:Object,default:void 0},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},faces:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>el({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture,material:e.material,uvs:e.uvs,data:e.data,faces:e.faces}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ir=Ee({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,default:void 0},offset:{type:[Number,Array],default:void 0},along:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>tl({axis:e.axis,size:e.size,offset:e.offset,along:e.along,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),sr=Ee({name:"PolyRing",props:{axis:{type:Number,required:!0},radius:{type:Number,required:!0},halfThickness:{type:Number,default:void 0},segments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>nl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),lr=Ee({name:"PolyOctahedron",props:{center:{type:Array,required:!0},size:{type:Number,required:!0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ol({center:e.center,size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ur=Ee({name:"PolyTetrahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>al({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),cr=Ee({name:"PolyIcosahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>il({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),dr=Ee({name:"PolyDodecahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>sl({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),mr=Ee({name:"PolySphere",props:{radius:{type:Number,default:void 0},subdivisions:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>rl({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),pr=Ee({name:"PolyCylinder",props:{radius:{type:Number,default:void 0},radiusTop:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ll({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),yr=Ee({name:"PolyCone",props:{radius:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ul({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),fr=Ee({name:"PolyTorus",props:{radius:{type:Number,default:void 0},tube:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},tubularSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>cl({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as dl,inject as ml,onMounted as pl,onBeforeUnmount as yl,watch as En,ref as fl}from"vue";import{BASE_TILE as gr}from"@layoutit/polycss-core";var gl=150,hr=4,hl=513e-6,Pl=10,vl=3,Pr=16.67,xl=50,vr=.1,xr=10,br=0,Sr=5e3,bl=.3,Sl=.05;function Cl(e){return e===!0?-1:e===void 0||e===!1?1:e}function Ml(e,t,n,o,r){let a=Cl(r),i=e/hr*a,u=t/hr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Cr(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*gr),s=-t/(a*gr*i),d=-r*Math.PI/180,m=Math.cos(d),p=Math.sin(d);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var Mr=dl({name:"PolyOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:vr},maxZoom:{type:Number,default:xr},minDistance:{type:Number,default:br},maxDistance:{type:Number,default:Sr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=ml(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},d=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=fl(!1),y=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=c=>{if(e.drag&&p===null&&c.isPrimary!==!1){c.preventDefault(),p=c.pointerId,l={x:c.clientX,y:c.clientY},g.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),d()}},D=c=>{if(p===null||c.pointerId!==p||!e.drag)return;c.preventDefault();let f=c.clientX-l.x,x=c.clientY-l.y;l={x:c.clientX,y:c.clientY};let S=r.value,C=S.state;if(c.shiftKey){let{dWorldX:O,dWorldY:k}=Cr(f,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}else{let{rotX:O,rotY:k}=Ml(f,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}i(),o.updateCameraFromRef(S),s()},R=c=>{if(p===c.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}h.value=!1,m()}},N=c=>{c.preventDefault()},Y=c=>{c.button===2&&(L=!0,T={x:c.clientX,y:c.clientY})},H=c=>{if(!L||!e.drag)return;let f=c.clientX-T.x,x=c.clientY-T.y;T={x:c.clientX,y:c.clientY};let S=r.value,C=S.state,{dWorldX:O,dWorldY:k}=Cr(f,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]}),i(),o.updateCameraFromRef(S),s()},b=c=>{c.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),y=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Pl:N*=vl;let Y=r.value;if(e.dolly){let H=e.minDistance??br,b=e.maxDistance??Sr,c=Math.max(H,Math.min(b,Y.state.distance+N*Sl));Y.update({distance:c})}else{let H=Math.exp(-N*hl),b=e.minZoom??vr,c=e.maxZoom??xr,f=Math.max(b,Math.min(c,Y.state.zoom*H));Y.update({zoom:f})}i(),o.updateCameraFromRef(Y),L||(L=!0,d()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},gl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(xl,T?D-T:Pr);T=D;let H=(R.speed??bl)*(N/Pr),b=r.value,c=b.state;if(R.axis==="x"){let f=((c.rotX+H)%360+360)%360;b.update({rotX:f})}else{let f=((c.rotY+H)%360+360)%360;b.update({rotY:f})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return pl(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),yl(()=>{y?.(),P?.(),v?.(),y=null,P=null}),En(()=>e.drag,g=>{g&&!y&&E(),!g&&y&&(y(),y=null)}),En(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),En(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as El,inject as Tl,onMounted as Al,onBeforeUnmount as wl,watch as Tn,ref as Ll}from"vue";import{BASE_TILE as Er}from"@layoutit/polycss-core";var Rl=150,Tr=4,Ol=513e-6,Dl=10,kl=3,Ar=16.67,Il=50,wr=.1,Lr=10,Rr=0,Or=5e3,Fl=.3,Vl=.05;function _l(e){return e===!0?-1:e===void 0||e===!1?1:e}function Dr(e,t,n,o,r){let a=_l(r),i=e/Tr*a,u=t/Tr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Bl(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*Er),s=-t/(a*Er*i),d=-r*Math.PI/180,m=Math.cos(d),p=Math.sin(d);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var kr=El({name:"PolyMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:wr},maxZoom:{type:Number,default:Lr},minDistance:{type:Number,default:Rr},maxDistance:{type:Number,default:Or},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Tl(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},d=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=Ll(!1),y=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=c=>{if(e.drag&&p===null&&c.isPrimary!==!1){c.preventDefault(),p=c.pointerId,l={x:c.clientX,y:c.clientY},g.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),d()}},D=c=>{if(p===null||c.pointerId!==p||!e.drag)return;c.preventDefault();let f=c.clientX-l.x,x=c.clientY-l.y;l={x:c.clientX,y:c.clientY};let S=r.value,C=S.state;if(c.shiftKey){let{rotX:O,rotY:k}=Dr(f,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}else{let{dWorldX:O,dWorldY:k}=Bl(f,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}i(),o.updateCameraFromRef(S),s()},R=c=>{if(p===c.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}h.value=!1,m()}},N=c=>{c.preventDefault()},Y=c=>{c.button===2&&(L=!0,T={x:c.clientX,y:c.clientY})},H=c=>{if(!L||!e.drag)return;let f=c.clientX-T.x,x=c.clientY-T.y;T={x:c.clientX,y:c.clientY};let S=r.value,C=S.state,{rotX:O,rotY:k}=Dr(f,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k}),i(),o.updateCameraFromRef(S),s()},b=c=>{c.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),y=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Dl:N*=kl;let Y=r.value;if(e.dolly){let H=e.minDistance??Rr,b=e.maxDistance??Or,c=Math.max(H,Math.min(b,Y.state.distance+N*Vl));Y.update({distance:c})}else{let H=Math.exp(-N*Ol),b=e.minZoom??wr,c=e.maxZoom??Lr,f=Math.max(b,Math.min(c,Y.state.zoom*H));Y.update({zoom:f})}i(),o.updateCameraFromRef(Y),L||(L=!0,d()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},Rl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(Il,T?D-T:Ar);T=D;let H=(R.speed??Fl)*(N/Ar),b=r.value,c=b.state;if(R.axis==="x"){let f=((c.rotX+H)%360+360)%360;b.update({rotX:f})}else{let f=((c.rotY+H)%360+360)%360;b.update({rotY:f})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return Al(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),wl(()=>{y?.(),P?.(),v?.(),y=null,P=null}),Tn(()=>e.drag,g=>{g&&!y&&E(),!g&&y&&(y(),y=null)}),Tn(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),Tn(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as zl,h as jt,inject as Ir,onBeforeUnmount as Fr,onMounted as An,ref as Ct,computed as mt}from"vue";import{arrowPolygons as Hl,eulerXYZFromQuat as Nl,planePolygons as Yl,quatFromAxisAngle as jl,quatFromEulerXYZ as $l,quatMultiply as Xl,ringQuadPolygons as Ul}from"@layoutit/polycss-core";var $t="#ff3653",Xt="#8adb00",Ut="#2c8fff",Wl=.6,ql=.8,Gl=1,Oe=50,Vr=60,Zl=.6,Kl=.0125,Ql=.15,Jl=.04,eu=1,_r=.02,wn=1.04,tu=.1,nu=.25,$r=1e-4,Mt={0:1,1:0,2:2},Br=[{cssAxis:0,sign:1,key:"x",color:$t},{cssAxis:0,sign:-1,key:"-x",color:$t},{cssAxis:1,sign:1,key:"y",color:Xt},{cssAxis:1,sign:-1,key:"-y",color:Xt},{cssAxis:2,sign:1,key:"z",color:Ut},{cssAxis:2,sign:-1,key:"-z",color:Ut}],zr=[{cssAxis:0,key:"x",color:$t},{cssAxis:1,key:"y",color:Xt},{cssAxis:2,key:"z",color:Ut}],Hr=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Ut},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Xt},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:$t}];function Ln(e,t){let n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!n)return e;let o=parseInt(n[1],16),r=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${o}, ${r}, ${a}, ${t})`}function Wt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function ou(e){return e.replace("-","")[0]}function Rn(e,t,n,o){let r=n*Math.PI/180,a=o*Math.PI/180,i=[0,0,0];i[e]=t;let u=i[0]*Math.sin(a)+i[1]*Math.cos(a),s=i[2];return u*Math.sin(r)+s*Math.cos(r)<0}function ru(e){if(e.length===0)return Vr;let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?Math.max(r-t,a-n,i-o)*Oe*Zl:Vr}function au(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?[(n+a)/2*Oe,(t+r)/2*Oe,(o+i)/2*Oe]:[0,0,0]}function Nr(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),a=o.getBoundingClientRect();e.wrapper.removeChild(o);let i=(a.left-r.left)/t,u=(a.top-r.top)/t,s=i*i+u*u;if(s<$r)return;let d=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=l=>{let h=l.clientX-e.startClientX,y=l.clientY-e.startClientY,P=(h*i+y*u)/s;P=Wt(P,e.translationSnap);let v=[d[0]+P*n[0],d[1]+P*n[1],d[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},p=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p);let l=h=>{h.stopPropagation(),h.stopImmediatePropagation()};window.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",l,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p)}function Yr(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(p){let l=e.wrapper.ownerDocument.createElement("div");l.style.position="absolute",l.style.left="0",l.style.top="0",l.style.width="0",l.style.height="0",l.style.transform=`translate3d(${p[0]*o}px, ${p[1]*o}px, ${p[2]*o}px)`,e.wrapper.appendChild(l);let h=e.wrapper.getBoundingClientRect(),y=l.getBoundingClientRect();return e.wrapper.removeChild(l),{x:(y.left-h.left)/o,y:(y.top-h.top)/o}}let a=r(t),i=r(n),u=a.x*i.y-i.x*a.y;if(Math.abs(u)<$r)return;let s=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let d=p=>{let l=p.clientX-e.startClientX,h=p.clientY-e.startClientY,y=(i.y*l-i.x*h)/u,P=(-a.y*l+a.x*h)/u;y=Wt(y,e.translationSnap),P=Wt(P,e.translationSnap);let v=[s[0]+y*t[0]+P*n[0],s[1]+y*t[1]+P*n[1],s[2]+y*t[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",d),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",d),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function jr(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),a=0,i=e.target.getRotation()??[0,0,0],u=$l(i);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let s=m=>{let p=Math.atan2(m.clientY-o,m.clientX-n),l=p-r;l>Math.PI?l-=2*Math.PI:l<-Math.PI&&(l+=2*Math.PI),a+=l,r=p;let h=a*180/Math.PI;h=Wt(h,e.rotationSnap);let y=[0,0,0];y[e.cssAxis]=1;let P=jl(y,h*Math.PI/180),v=Nl(Xl(P,u));e.onObjectChange?.({object:e.target,rotation:v}),e.onChange?.()},d=()=>{window.removeEventListener("pointermove",s),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d);let m=p=>{p.stopPropagation(),p.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",s),window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d)}function iu(e){return!!e&&typeof e=="object"&&"value"in e}function su(e){return e?iu(e)?e.value??null:e:null}var Xr=zl({name:"PolyTransformControls",props:{object:{type:null,default:null},mode:{type:String,default:"translate"},space:{type:String,default:"world"},size:{type:Number,default:1},showX:{type:Boolean,default:!0},showY:{type:Boolean,default:!0},showZ:{type:Boolean,default:!0},translationSnap:{type:Number,default:null},rotationSnap:{type:Number,default:null},enabled:{type:Boolean,default:!0}},emits:{change:()=>!0,objectChange:e=>!0,mouseDown:()=>!0,mouseUp:()=>!0,draggingChanged:e=>!0},setup(e,{emit:t}){let n=Ct(null),o=Ct(null),r=Ct(new Map),a=mt(()=>su(e.object)),i=Ct(0);An(()=>{i.value++});let u=Ct(0),s=Ir(ue,void 0),d=null;An(()=>{let c=s?.store;c&&(d=c.subscribe(()=>{u.value++}))}),Fr(()=>{d?.()});function m(){u.value;let c=s?.store.getState().cameraState;return{rotX:c?.rotX??65,rotY:c?.rotY??45}}let p=mt(()=>(i.value,ru(a.value?.getPolygons()??[]))),l=mt(()=>p.value*e.size);function h(c){return o.value===c?Gl:n.value===c?ql:Wl}function y(){t("change")}function P(c){t("objectChange",c)}function v(c){t("draggingChanged",c)}function E(){t("mouseDown")}function M(){t("mouseUp")}let A=Ir(ue,void 0),g=null;An(()=>{let c=A?.cameraElRef.value;if(!c)return;let f=x=>{let S=a.value;if(!S||!e.enabled||x.target?.closest(".polycss-transform-gizmo"))return;let O={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let w of Hr){let B=["x","y","z"][w.axisA],W=["x","y","z"][w.axisB];if(!O[B]||!O[W])continue;let Z=document.querySelector(`.polycss-transform-plane--${w.key}`);if(!Z||!ut(Z,x.clientX,x.clientY))continue;x.preventDefault(),x.stopPropagation();let q=Z.closest("[data-poly-transform-controls]");if(!q)return;o.value=w.key,Yr({axisA:w.axisA,axisB:w.axisB,probeDistanceCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:$=>{$||(o.value=null),v($)}});return}let k=e.mode==="translate"?Br:zr;for(let w of k){let B=w.key.replace("-","")[0];if(!O[B])continue;let W=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${w.key}`);if(!W||!(e.mode==="rotate"?ut(W,x.clientX,x.clientY):ut(W,x.clientX,x.clientY)))continue;x.preventDefault(),x.stopPropagation();let q=W.closest("[data-poly-transform-controls]");if(!q)return;if(o.value=w.key,e.mode==="translate"){let $=w;Nr({cssAxis:$.cssAxis,sign:$.sign,shaftLengthCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:ee=>{ee||(o.value=null),v(ee)}})}else jr({cssAxis:w.cssAxis,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:$=>{$||(o.value=null),v($)}});return}};c.addEventListener("pointerdown",f),g=()=>c.removeEventListener("pointerdown",f)}),Fr(()=>{g?.()});let L=mt(()=>{if(e.mode!=="translate")return[];i.value;let f=l.value/Oe,{rotX:x,rotY:S}=m();return Br.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[ou(C.key)]).map(C=>{let O=h(C.key),k=Rn(C.cssAxis,C.sign,x,S);return{spec:C,polygons:Hl({axis:Mt[C.cssAxis],sign:C.sign,shaftLength:f,shaftHalfThickness:f*Kl,headLength:f*Ql,headHalfThickness:f*Jl,color:Ln(C.color,O),shaft:!k})}})}),T=mt(()=>{if(e.mode!=="translate")return[];i.value;let f=l.value/Oe,x={x:e.showX,y:e.showY,z:e.showZ},S=["x","y","z"],{rotX:C,rotY:O}=m(),k=f*nu;return Hr.filter(w=>x[S[w.axisA]]&&x[S[w.axisB]]).map(w=>{let B=h(w.key),W=Mt[w.perpAxis],Z=(W+1)%3,q=(W+2)%3,$=Mt[Z],ee=Mt[q],ne=Rn($,1,C,O)?-1:1,ie=Rn(ee,1,C,O)?-1:1;return{spec:w,polygons:Yl({axis:W,size:f*tu,offset:[ne*k,ie*k],color:Ln(w.color,B)})}})}),_=mt(()=>{if(e.mode!=="rotate")return[];i.value;let x=l.value*eu/Oe*wn;return zr.filter(S=>({x:e.showX,y:e.showY,z:e.showZ})[S.key]).map(S=>{let C=h(S.key);return{spec:S,polygons:Ul({axis:Mt[S.cssAxis],outerRadius:x,color:Ln(S.color,C)})}})}),D=(1-_r)/wn,R=(1+_r)/wn;function N(c){return f=>{if(!e.enabled)return;let x=a.value;if(!x)return;f.stopPropagation();let C=f.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,Nr({cssAxis:c.cssAxis,sign:c.sign,shaftLengthCss:l.value,wrapper:C,target:x,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function Y(c){return f=>{if(!e.enabled)return;let x=a.value;if(!x)return;f.stopPropagation();let C=f.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,Yr({axisA:c.axisA,axisB:c.axisB,probeDistanceCss:l.value,wrapper:C,target:x,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function H(c){return f=>{if(!e.enabled)return;let x=a.value;if(!x)return;let S=f.eventObject.element;f.stopPropagation();let C=S?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,jr({cssAxis:c.cssAxis,wrapper:C,target:x,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function b(c){return{onPointerOver:()=>{n.value=c},onPointerOut:()=>{n.value===c&&(n.value=null)}}}return()=>{let c=a.value;if(!c)return null;let f=c.getPosition()??[0,0,0],x=au(c.getPolygons()),S=f[1]*Oe+x[0],C=f[0]*Oe+x[1],O=f[2]*Oe+x[2],k={transform:`translate3d(${S}px, ${C}px, ${O}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},w=e.mode==="translate"?[...L.value.map(({spec:B,polygons:W})=>jt(te,{key:`arrow-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${B.key}`,textureLighting:"baked",onPointerDown:N(B),...b(B.key)})),...T.value.map(({spec:B,polygons:W})=>jt(te,{key:`plane-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${B.key}`,textureLighting:"baked",onPointerDown:Y(B),...b(B.key)}))]:_.value.map(({spec:B,polygons:W})=>jt(te,{key:B.key,polygons:W,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${B.key}`,style:{"--ring-inner-ratio":D,"--ring-outer-ratio":R},textureLighting:"baked",onPointerDown:H(B),...b(B.key)}));return jt("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:k},w)}}});import{defineComponent as lu,inject as uu,onMounted as cu,onBeforeUnmount as du,watch as mu}from"vue";import{BASE_TILE as pu}from"@layoutit/polycss-core";var yu={enabled:!0,lookEnabled:!0,moveEnabled:!0,jumpEnabled:!0,crouchEnabled:!0,lookSensitivity:.15,invertY:!1,moveSpeed:5,jumpVelocity:7,gravity:18,eyeHeight:1.7,crouchHeight:1,groundZ:0,minPitch:5,maxPitch:175};function On(e,t){return{enabled:t.enabled??e.enabled,lookEnabled:t.lookEnabled??e.lookEnabled,moveEnabled:t.moveEnabled??e.moveEnabled,jumpEnabled:t.jumpEnabled??e.jumpEnabled,crouchEnabled:t.crouchEnabled??e.crouchEnabled,lookSensitivity:t.lookSensitivity??e.lookSensitivity,invertY:t.invertY??e.invertY,moveSpeed:t.moveSpeed??e.moveSpeed,jumpVelocity:t.jumpVelocity??e.jumpVelocity,gravity:t.gravity??e.gravity,eyeHeight:t.eyeHeight??e.eyeHeight,crouchHeight:t.crouchHeight??e.crouchHeight,groundZ:t.groundZ??e.groundZ,minPitch:t.minPitch??e.minPitch,maxPitch:t.maxPitch??e.maxPitch}}var Wr=new Set(["KeyW","ArrowUp"]),qr=new Set(["KeyS","ArrowDown"]),Gr=new Set(["KeyA","ArrowLeft"]),Zr=new Set(["KeyD","ArrowRight"]),Kr=new Set(["Space"]),Dn=new Set(["ControlLeft","ControlRight"]);function Ur(e){return Wr.has(e)||qr.has(e)||Gr.has(e)||Zr.has(e)||Kr.has(e)||Dn.has(e)}function fu(){return{change:[],start:[],end:[]}}function pt(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Qr=lu({name:"PolyFirstPersonControls",props:{enabled:{type:Boolean,default:!0},lookEnabled:{type:Boolean,default:!0},moveEnabled:{type:Boolean,default:!0},jumpEnabled:{type:Boolean,default:!0},crouchEnabled:{type:Boolean,default:!0},lookSensitivity:{type:Number,default:.15},invertY:{type:Boolean,default:!1},moveSpeed:{type:Number,default:5},jumpVelocity:{type:Number,default:7},gravity:{type:Number,default:18},eyeHeight:{type:Number,default:1.7},crouchHeight:{type:Number,default:1},groundZ:{type:Number,default:0},minPitch:{type:Number,default:5},maxPitch:{type:Number,default:175}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t,expose:n}){let o=uu(ue,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:a,cameraElRef:i,applyTransformDirect:u}=o,s=On(yu,e),d=[0,0,0],m=null,p=0,l=!1,h=!1,y=!1,P=new Set,v=0,E=0,M=fu();function A(c,f){let x=c*Math.PI/180,S=f*Math.PI/180;return[-Math.sin(x)*Math.cos(S),-Math.sin(x)*Math.sin(S),-Math.cos(x)]}function g(){let c=i.value,f=c?getComputedStyle(c).perspective:"",x=parseFloat(f);return(Number.isFinite(x)&&x>0?x:32e3)/pu}function L(){let c=a.value.state,f=A(c.rotX??90,c.rotY??0),x=g();return[d[0]+f[0]*x,d[1]+f[1]*x,d[2]+f[2]*x]}function T(){let c=L(),f=a.value;f.update({target:c}),u(),r.updateCameraFromRef(f)}let _=.05;function D(c){if(m===null||l)return;let f=Math.min(_,p?(c-p)/1e3:.0167);if(p=c,s.enabled){let x=!1,S=a.value.state;if(s.moveEnabled){let w=0,B=0;for(let W of P)Wr.has(W)?w+=1:qr.has(W)?w-=1:Zr.has(W)?B+=1:Gr.has(W)&&(B-=1);if(w!==0||B!==0){let Z=(S.rotY??0)*Math.PI/180,q=-Math.cos(Z),$=-Math.sin(Z),ee=-Math.sin(Z),ne=Math.cos(Z),ie=Math.hypot(w,B)||1,J=s.moveSpeed*f;d[0]+=(q*w+ee*B)/ie*J,d[1]+=($*w+ne*B)/ie*J,x=!0}}let O=s.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?s.crouchHeight:s.eyeHeight;s.jumpEnabled&&(v!==0||E>0)?(v-=s.gravity*f,E+=v*f,E<=0&&(E=0,v=0)):s.jumpEnabled||(E=0,v=0);let k=s.groundZ+O+E;if(Math.abs(d[2]-k)>1e-4&&(d[2]=k,x=!0),x){let w=L(),B=a.value;B.update({target:w}),u(),r.updateCameraFromRef(B),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}}}m=requestAnimationFrame(D)}function R(){m!==null||l||(p=0,m=requestAnimationFrame(D))}function N(){m!==null&&(cancelAnimationFrame(m),m=null)}let Y=null;function H(){let c=i.value;if(!c)return;let f=c.ownerDocument??document,x=f.defaultView??globalThis,S=()=>{if(!(!s.enabled||!s.lookEnabled||l||h))try{c.requestPointerLock()}catch{}},C=()=>{let $=f.pointerLockElement===c;if($!==h){if(h=$,$){y=!0,pt(M,"start");try{t("interaction-start",[d[0],d[1],d[2]])}catch{}}else if(y){y=!1,pt(M,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}}},O=$=>{if(!h||l||!s.enabled||!s.lookEnabled)return;let ee=$.movementX??0,ne=$.movementY??0;if(ee===0&&ne===0)return;let ie=a.value,J=ie.state,F=s.lookSensitivity,U=s.invertY?-1:1,j=(((J.rotY??0)-ee*F)%360+360)%360,V=(J.rotX??90)-ne*F*U;V<s.minPitch?V=s.minPitch:V>s.maxPitch&&(V=s.maxPitch);let X=A(V,j),G=g(),se=[d[0]+X[0]*G,d[1]+X[1]*G,d[2]+X[2]*G];ie.update({rotX:V,rotY:j,target:se}),u(),r.updateCameraFromRef(ie),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},k=$=>{if(!(!s.enabled||l)&&Ur($.code)&&!(!h&&!s.moveEnabled)){if(Kr.has($.code)){if(!s.jumpEnabled)return;$.preventDefault(),!P.has($.code)&&v===0&&E===0&&(v=s.jumpVelocity),P.add($.code);return}Dn.has($.code)&&!s.crouchEnabled||!s.moveEnabled&&!Dn.has($.code)||($.preventDefault(),P.add($.code))}},w=$=>{Ur($.code)&&P.delete($.code)},B=()=>{P.clear()};c.addEventListener("click",S),f.addEventListener("pointerlockchange",C),f.addEventListener("mousemove",O),x.addEventListener("keydown",k),x.addEventListener("keyup",w),x.addEventListener("blur",B);let W=x.getComputedStyle(c).perspective,Z=parseFloat(W),q=Number.isFinite(Z)&&Z>0?Z:2e3;c.style.setProperty("--polycss-fpv-perspective",`${q}px`),c.classList.add("polycss-fpv-host"),Y=()=>{if(c.removeEventListener("click",S),f.removeEventListener("pointerlockchange",C),f.removeEventListener("mousemove",O),x.removeEventListener("keydown",k),x.removeEventListener("keyup",w),x.removeEventListener("blur",B),c.style.cursor="",c.classList.remove("polycss-fpv-host"),c.style.removeProperty("--polycss-fpv-perspective"),P.clear(),h)try{f.exitPointerLock()}catch{}}}n({update(c){s=On(s,c);let f=i.value;f&&!l&&(f.style.cursor=s.lookEnabled?"crosshair":"")},resume(){if(!l)return;l=!1;let c=i.value;c&&(c.style.cursor=s.lookEnabled?"crosshair":""),R()},pause(){if(l)return;l=!0,N();let c=i.value;if(c&&(c.style.cursor=""),y){y=!1,pt(M,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}},destroy(){l=!0,N()},lock(){if(!s.enabled||!s.lookEnabled||l)return;let c=i.value;try{c?.requestPointerLock()}catch{}},unlock(){if(h){let c=i.value;try{c?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return h},getOrigin(){return[d[0],d[1],d[2]]},setOrigin(c){d[0]=c[0],d[1]=c[1],d[2]=c[2],T(),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},addEventListener(c,f){let x=M[c];x.includes(f)||x.push(f)},removeEventListener(c,f){let x=M[c],S=x.indexOf(f);S>=0&&x.splice(S,1)},hasEventListener(c,f){return M[c].includes(f)}}),cu(()=>{let c=i.value;if(!c)return;l=!1,h=!1,y=!1,P.clear(),v=0,E=0;let x=a.value.state.target??[0,0,0];d[0]=x[0],d[1]=x[1],d[2]=s.groundZ+s.eyeHeight,T(),c.style.cursor=s.lookEnabled?"crosshair":"",H(),R()}),du(()=>{l=!0,N(),Y?.(),Y=null});let b=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let c of b)mu(()=>e[c],()=>{s=On(s,e);let f=i.value;f&&!l&&(f.style.cursor=s.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as gu,h as hu,inject as kn,onBeforeUnmount as Pu,onMounted as vu,provide as xu,reactive as bu,ref as Su,computed as Cu}from"vue";var Et=Symbol("polycss.selection"),Jr=gu({name:"PolySelect",props:{multiple:{type:Boolean,default:!1},clearOnMiss:{type:Boolean,default:!0},filter:{type:Function,default:void 0}},emits:{change:e=>!0,pointerMissed:e=>!0},setup(e,{emit:t,slots:n}){let o=bu({selected:[]}),r=Cu(()=>o.selected);function a(m){let p=e.filter?e.filter(m):m;o.selected=p,t("change",p)}let i={get selected(){return o.selected},set:m=>a(m),add:m=>{e.multiple?o.selected.includes(m)||a([...o.selected,m]):a([m])},remove:m=>{o.selected.includes(m)&&a(o.selected.filter(p=>p!==m))},toggle:m=>{o.selected.includes(m)?a(o.selected.filter(p=>p!==m)):e.multiple?a([...o.selected,m]):a([m])},clear:()=>a([]),has:m=>o.selected.includes(m)};xu(Et,{selected:r,api:i});let u=kn(ue,void 0),s=(m,p)=>Cn(m,p,l=>!l.closest("[data-poly-transform-controls]")),d=null;return vu(()=>{let m=u?.cameraElRef.value;if(!m)return;let p=l=>{if(l.target?.closest("[data-poly-transform-controls]"))return;let y=lt(l.target)??s(l.clientX,l.clientY);if(!y){t("pointerMissed",l),e.clearOnMiss&&a([]);return}e.multiple&&(l.shiftKey||l.metaKey||l.ctrlKey)?i.toggle(y):o.selected.length===1&&o.selected[0]===y?a([]):a([y])};m.addEventListener("click",p),d=()=>m.removeEventListener("click",p)}),Pu(()=>{d?.()}),()=>hu("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function ea(){let e=kn(Et,void 0);return e?e.selected:Su([])}function ta(){let e=kn(Et,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Mu,h as Eu,computed as Tu}from"vue";import{axesHelperPolygons as Au}from"@layoutit/polycss-core";var na=Mu({name:"PolyAxesHelper",props:{size:{type:Number,default:void 0},thickness:{type:Number,default:void 0},negative:{type:Boolean,default:void 0},xColor:{type:String,default:void 0},yColor:{type:String,default:void 0},zColor:{type:String,default:void 0}},setup(e){let t=Tu(()=>Au({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Eu(te,{polygons:t.value,merge:!1})}});import{defineComponent as wu,h as Lu,computed as In}from"vue";import{octahedronPolygons as Ru}from"@layoutit/polycss-core";var oa=wu({name:"PolyDirectionalLightHelper",props:{light:{type:Object,required:!0},target:{type:Array,default:void 0},distance:{type:Number,default:5},size:{type:Number,default:.35},color:{type:String,default:void 0}},setup(e){let t=In(()=>e.color??e.light.color??"#ffd54a"),n=In(()=>Ru({center:[0,0,0],size:e.size,color:t.value})),o=In(()=>{let r=e.light.direction,a=r[0],i=r[1],u=r[2],s=Math.hypot(a,i,u)||1,d=e.target?.[0]??0,m=e.target?.[1]??0,p=e.target?.[2]??0;return[d+a/s*e.distance,m+i/s*e.distance,p+u/s*e.distance]});return()=>Lu(te,{polygons:n.value,position:o.value,merge:!1})}});var Fn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},Ou={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Fn,bucketCount:0};function Du(e){return typeof e=="number"?{polygonCount:e}:e??{}}function yt(e,t){return e.querySelectorAll(t).length}function ku(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function Iu(e,t){if(!t)return[e];let n=[];return ku(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Fu(e,t){let n=Du(t);if(!e)return{...Ou,surfaceLeafCounts:{...Fn},polygonCount:n.polygonCount??0};let o=Iu(e,n.scopeSelector),r={...Fn},a=0,i=0;for(let s of o)r.quad+=yt(s,"b"),r.clippedSolid+=yt(s,"i"),r.atlas+=yt(s,"s"),r.stableTriangle+=yt(s,"u"),a+=yt(s,"q, .polycss-shadow-svg"),i+=yt(s,".polycss-bucket");let u=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??u,mountedPolygonLeafCount:u,shadowLeafCount:a,surfaceLeafCounts:r,bucketCount:i}}import{ref as ra,watch as Vu,onUnmounted as _u,computed as qt}from"vue";import{createPolyAnimationMixer as Bu}from"@layoutit/polycss-core";function et(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function zu(e,t,n){let o=ra(null),r=null,a=null,i=null,u=ra(0);function s(){return n==null?o.value:et(n)??o.value}function d(){a!==null&&(cancelAnimationFrame(a),a=null),i=null}function m(){d(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,u.value++)}function p(){if(a!==null)return;function M(A){if(i===null){i=A,a=requestAnimationFrame(M);return}let g=(A-i)/1e3;i=A,r?.update(g),a=requestAnimationFrame(M)}a=requestAnimationFrame(M)}function l(){m();let M=et(e),A=et(t);if(!M||M.length===0||!A)return;let g=s();g&&(r=Bu(g,A),u.value++,p())}let h=Vu(()=>{let M=et(e),A=et(t),g=n!=null?et(n):o.value;return{c:M,ctrl:A,r:g}},()=>l(),{immediate:!0,deep:!1});_u(()=>{h(),m()});let y=qt(()=>et(e)??[]),P=qt(()=>y.value.map(M=>M.name)),v=qt(()=>(u.value,r)),E=qt(()=>{u.value;let M=y.value,A={};for(let g of M)Object.defineProperty(A,g.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(g.name)}catch{return null}}});return A});return{ref:o,mixer:v,clips:y,names:P,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as Bp,VOXEL_CAMERA_CULL_AXIS_EPS as zp,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Hp,normalizePolygons as Np,mergePolygons as Yp,coverPlanarPolygons as jp,optimizeMeshPolygons as $p,optimizeMeshParseResult as Xp,simplifyTriangleMeshPolygons as Up,repairMeshSeams as Wp,seamFacetSplitPolygons as qp,seamFacetSplitReport as Gp,seamOverlapDiagnostics as Zp,seamOverlapPolygons as Kp,seamOverlapReport as Qp,cullInteriorPolygons as Jp,cameraCullNormalGroups as ey,cameraCullNormalGroupsFromPolygons as ty,cameraCullNormalKey as ny,cameraCullVisibleSignature as oy,cameraFacingDepth as ry,isAxisAlignedSurfaceNormal as ay,isVoxelCameraCullableNormalGroups as iy,normalFacesCamera as sy,polygonCssSurfaceNormal as ly,polygonFacesCamera as uy,parseObj as cy,parseMtl as dy,parseGltf as my,parseStl as py,bakeSolidTextureSamples as yy,bakeSolidTextureSampledPolygons as fy,loadMesh as gy,createIsometricCamera as hy,parseVox as Py,polygonFaces as vy,computeTexturePaintMetrics as xy,computeShapeLighting as by,parseColor as Sy,parsePureColor as Cy,parseHexColor as My,parseRgbColor as Ey,formatColor as Ty,clampChannel as Ay,shadeColor as wy,rotateVec3 as Ly,inverseRotateVec3 as Ry,axesHelperPolygons as Oy,boxPolygons as Dy,arrowPolygons as ky,ringPolygons as Iy,octahedronPolygons as Fy,tetrahedronPolygons as Vy,icosahedronPolygons as _y,dodecahedronPolygons as By,cylinderPolygons as zy,conePolygons as Hy,torusPolygons as Ny,planePolygons as Yy,buildSceneContext as jy,buildPolyMeshTransform as $y,computeSceneBbox as Xy,BASE_TILE as Uy,DEFAULT_CAMERA_STATE as Wy,DEFAULT_PROJECTION as qy,normalizeInvertMultiplier as Gy,createPolyAnimationMixer as Zy,optimizeAnimatedMeshPolygons as Ky,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as Qy,DEFAULT_SEAM_OVERLAP_OPTIONS as Jy,LoopOnce as ef,LoopRepeat as tf,LoopPingPong as nf,cssDistanceToWorld as of,cssPositionToWorld as rf,worldDistanceToCss as af,worldDirectionToCss as sf,worldPositionToCss as lf}from"@layoutit/polycss-core";export{Uy as BASE_TILE,Bp as CAMERA_BACKFACE_CULL_EPS,Wy as DEFAULT_CAMERA_STATE,qy as DEFAULT_PROJECTION,Qy as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,Jy as DEFAULT_SEAM_OVERLAP_OPTIONS,ef as LoopOnce,nf as LoopPingPong,tf as LoopRepeat,rr as Poly,na as PolyAxesHelper,ar as PolyBox,gt as PolyCamera,ue as PolyCameraContextKey,yr as PolyCone,pr as PolyCylinder,oa as PolyDirectionalLightHelper,dr as PolyDodecahedron,Qr as PolyFirstPersonControls,tr as PolyGround,cr as PolyIcosahedron,er as PolyIframe,kr as PolyMapControls,te as PolyMesh,lr as PolyOctahedron,Mr as PolyOrbitControls,gt as PolyOrthographicCamera,zn as PolyPerspectiveCamera,ir as PolyPlane,sr as PolyRing,Oo as PolyScene,Jr as PolySelect,Et as PolySelectionContextKey,mr as PolySphere,ur as PolyTetrahedron,fr as PolyTorus,Xr as PolyTransformControls,zp as VOXEL_CAMERA_CULL_AXIS_EPS,Hp as VOXEL_CAMERA_CULL_NORMAL_LIMIT,ky as arrowPolygons,Oy as axesHelperPolygons,fy as bakeSolidTextureSampledPolygons,yy as bakeSolidTextureSamples,Dy as boxPolygons,$y as buildPolyMeshTransform,jy as buildSceneContext,ey as cameraCullNormalGroups,ty as cameraCullNormalGroupsFromPolygons,ny as cameraCullNormalKey,oy as cameraCullVisibleSignature,ry as cameraFacingDepth,Ay as clampChannel,Fu as collectPolyRenderStats,Xy as computeSceneBbox,by as computeShapeLighting,xy as computeTexturePaintMetrics,Hy as conePolygons,jp as coverPlanarPolygons,hy as createIsometricCamera,Zy as createPolyAnimationMixer,Jp as cullInteriorPolygons,zy as cylinderPolygons,By as dodecahedronPolygons,Cn as findMeshUnderPoint,lt as findPolyMeshHandle,Ty as formatColor,_y as icosahedronPolygons,Tt as injectPolyBaseStyles,Ry as inverseRotateVec3,ay as isAxisAlignedSurfaceNormal,iy as isVoxelCameraCullableNormalGroups,gy as loadMesh,Yp as mergePolygons,sy as normalFacesCamera,Gy as normalizeInvertMultiplier,Np as normalizePolygons,Fy as octahedronPolygons,Ky as optimizeAnimatedMeshPolygons,Xp as optimizeMeshParseResult,$p as optimizeMeshPolygons,Sy as parseColor,my as parseGltf,My as parseHexColor,dy as parseMtl,cy as parseObj,Cy as parsePureColor,Ey as parseRgbColor,py as parseStl,Py as parseVox,Yy as planePolygons,ut as pointInMeshElement,of as polyCssDistanceToWorld,rf as polyCssPositionToWorld,ly as polygonCssSurfaceNormal,vy as polygonFaces,uy as polygonFacesCamera,Wp as repairMeshSeams,Iy as ringPolygons,Ly as rotateVec3,qp as seamFacetSplitPolygons,Gp as seamFacetSplitReport,Zp as seamOverlapDiagnostics,Kp as seamOverlapPolygons,Qp as seamOverlapReport,wy as shadeColor,Up as simplifyTriangleMeshPolygons,Vy as tetrahedronPolygons,Ny as torusPolygons,zu as usePolyAnimation,ot as usePolyCamera,Gs as usePolyMaterial,zt as usePolyMesh,ht as usePolySceneContext,ea as usePolySelect,ta as usePolySelectionApi,sf as worldDirectionToPolyCss,af as worldDistanceToPolyCss,lf as worldPositionToPolyCss};
|