@layoutit/polycss-vue 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -144
- package/dist/index.cjs +69 -7
- package/dist/index.d.cts +1107 -116
- package/dist/index.d.ts +1107 -116
- package/dist/index.js +69 -7
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{defineComponent as
|
|
1
|
+
import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";import{ref as Nt,shallowRef as qr,watch as Gr}from"vue";import{createIsometricCamera as Zr,BASE_TILE as Kr}from"@layoutit/polycss-core";function Ht(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 Ne(e){let t=Zr({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),n=qr(t),o=Nt(null),r=Nt(null),i=Nt([0,0,0]),a=Ht(t.state);Gr(()=>({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),(l,c)=>{let m={};l.zoom!==void 0&&l.zoom!==c?.zoom&&(m.zoom=l.zoom),l.target!==void 0&&l.target!==c?.target&&(m.target=l.target),l.rotX!==void 0&&l.rotX!==c?.rotX&&(m.rotX=l.rotX),l.rotY!==void 0&&l.rotY!==c?.rotY&&(m.rotY=l.rotY),l.distance!==void 0&&l.distance!==c?.distance&&(m.distance=l.distance),Object.keys(m).length>0&&(t.update(m),u(),a.updateCameraFromRef(t),a.notifyAll())});function u(){let l=o.value;if(!l)return;let c=t.state,m=Kr,f=i.value,d=c.target[0]+f[0],h=c.target[1]+f[1],p=c.target[2]+f[2],P=h*m,x=d*m,T=p*m,A=c.distance!==0?`translateZ(${-c.distance}px) `:"";l.style.transform=`${A}scale(${c.zoom}) rotateX(${c.rotX}deg) rotate(${c.rotY}deg) translate3d(${-P}px, ${-x}px, ${-T}px)`}return{store:a,cameraRef:n,sceneElRef:o,cameraElRef:r,autoCenterOffset:i,applyTransformDirect:u}}var ee=Symbol("polycss-camera");var tt=Qr({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=ta(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}=Ne(n);return ea(ee,{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}),()=>Jr("div",{ref:a,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:"none"}},t.default?.())}});import{defineComponent as na,h as oa,provide as ra,computed as aa}from"vue";var ia=8e3,Ln=na({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=aa(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}=Ne(n);return ra(ee,{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}),()=>{let c=`${typeof e.perspective=="number"?e.perspective:ia}px`;return oa("div",{ref:a,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:c}},t.default?.())}}});import{defineComponent as li,h as si,inject as ui,provide as ci,computed as xe,ref as on,watch as co,watchEffect as mo,onMounted as fo,onUpdated as di,onBeforeUnmount as mi}from"vue";import{DEFAULT_SEAM_BLEED as po,parseHexColor as yo}from"@layoutit/polycss-core";import{computed as la}from"vue";import{buildSceneContext as sa,mergePolygons as ua}from"@layoutit/polycss-core";function dt(e,t){return la(()=>{let{directionalLight:n}=t.value,o=sa({polygons:e.value});return{polygons:ua(o.context.polygons),sceneBbox:o.context.sceneBbox}})}var wn="polycss-styles";function mt(e=typeof document<"u"?document:null){if(!e||e.getElementById(wn))return;let t=e.createElement("style");t.id=wn,t.textContent=ca,e.head.appendChild(t)}var ca=`
|
|
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,
|
|
@@ -16,6 +16,13 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
|
|
|
16
16
|
height: 0;
|
|
17
17
|
transform-style: preserve-3d;
|
|
18
18
|
perspective: none;
|
|
19
|
+
/* Promote the scene to its own GPU compositing layer. Without this the
|
|
20
|
+
browser re-rasterizes every descendant leaf when the scene transform
|
|
21
|
+
updates each animation frame, causing visible flicker on solid-shape
|
|
22
|
+
meshes (triangles, quads) that have no opacity:0 loading phase to
|
|
23
|
+
hide the re-paint. Matches the same declaration in the vanilla
|
|
24
|
+
polycss stylesheet. */
|
|
25
|
+
will-change: transform;
|
|
19
26
|
}
|
|
20
27
|
|
|
21
28
|
/* \u2500\u2500 Camera wrapper (perspective + interactive drag) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
@@ -93,6 +100,31 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
|
|
|
93
100
|
height: 64px;
|
|
94
101
|
}
|
|
95
102
|
|
|
103
|
+
.polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face {
|
|
104
|
+
position: absolute;
|
|
105
|
+
display: block;
|
|
106
|
+
top: 0;
|
|
107
|
+
left: 0;
|
|
108
|
+
width: 0;
|
|
109
|
+
height: 0;
|
|
110
|
+
transform-style: preserve-3d;
|
|
111
|
+
transform-origin: 0 0;
|
|
112
|
+
margin: 0;
|
|
113
|
+
padding: 0;
|
|
114
|
+
font: inherit;
|
|
115
|
+
line-height: 0;
|
|
116
|
+
pointer-events: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face > b {
|
|
120
|
+
top: 0;
|
|
121
|
+
left: 0;
|
|
122
|
+
width: var(--polycss-voxel-primitive, 1px);
|
|
123
|
+
height: var(--polycss-voxel-primitive, 1px);
|
|
124
|
+
backface-visibility: visible;
|
|
125
|
+
pointer-events: none;
|
|
126
|
+
}
|
|
127
|
+
|
|
96
128
|
.polycss-scene i {
|
|
97
129
|
width: 16px;
|
|
98
130
|
height: 16px;
|
|
@@ -111,7 +143,22 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
|
|
|
111
143
|
box-sizing: content-box;
|
|
112
144
|
border: 0 solid transparent;
|
|
113
145
|
border-color: transparent transparent currentColor transparent;
|
|
114
|
-
border-width: 0 32px
|
|
146
|
+
border-width: 0 16px 32px 16px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.polycss-scene u.polycss-large-border-triangle {
|
|
150
|
+
border-width: 0 48px 96px 48px;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.polycss-scene u.polycss-corner-triangle {
|
|
154
|
+
width: 32px;
|
|
155
|
+
height: 32px;
|
|
156
|
+
background: currentColor;
|
|
157
|
+
border: 0;
|
|
158
|
+
border-top-left-radius: 50% 100%;
|
|
159
|
+
border-top-right-radius: 50% 100%;
|
|
160
|
+
corner-top-left-shape: bevel;
|
|
161
|
+
corner-top-right-shape: bevel;
|
|
115
162
|
}
|
|
116
163
|
|
|
117
164
|
/* \u2500\u2500 Dynamic lighting cascade vars (scene root \u2192 polygons) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
@@ -140,7 +187,7 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
|
|
|
140
187
|
@property --clz { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
141
188
|
|
|
142
189
|
/* Ground-plane position in CSS pixels along the CSS-Z axis (= world-Z, the
|
|
143
|
-
up axis in
|
|
190
|
+
up axis in PolyCSS's world convention). Stored as a <number> so it can be
|
|
144
191
|
used directly inside matrix3d() calc() expressions (matrix3d requires
|
|
145
192
|
dimensionless entries \u2014 no px units).
|
|
146
193
|
Set from the min world-Z of casting meshes. */
|
|
@@ -186,6 +233,19 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
|
|
|
186
233
|
var(--pnz) * var(--plz))))
|
|
187
234
|
);
|
|
188
235
|
background-blend-mode: multiply;
|
|
236
|
+
background-image: var(--polycss-atlas-url);
|
|
237
|
+
background-position: var(--polycss-atlas-position);
|
|
238
|
+
background-repeat: no-repeat;
|
|
239
|
+
background-size: var(--polycss-atlas-image-size);
|
|
240
|
+
mask-image: var(--polycss-atlas-url);
|
|
241
|
+
mask-mode: alpha;
|
|
242
|
+
mask-position: var(--polycss-atlas-position);
|
|
243
|
+
mask-repeat: no-repeat;
|
|
244
|
+
mask-size: var(--polycss-atlas-image-size);
|
|
245
|
+
-webkit-mask-image: var(--polycss-atlas-url);
|
|
246
|
+
-webkit-mask-position: var(--polycss-atlas-position);
|
|
247
|
+
-webkit-mask-repeat: no-repeat;
|
|
248
|
+
-webkit-mask-size: var(--polycss-atlas-image-size);
|
|
189
249
|
}
|
|
190
250
|
|
|
191
251
|
.polycss-scene[data-polycss-lighting="dynamic"] b,
|
|
@@ -209,7 +269,7 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
|
|
|
209
269
|
);
|
|
210
270
|
}
|
|
211
271
|
|
|
212
|
-
/* \u2500\u2500 Cast
|
|
272
|
+
/* \u2500\u2500 Cast shadow projection (dynamic-mode CSS path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
213
273
|
|
|
214
274
|
/* <q> \u2014 dedicated shadow leaf. Same border-shape rendering trick as <i>
|
|
215
275
|
(border-color: currentColor fills the polygon outline) but with its
|
|
@@ -293,8 +353,10 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
|
|
|
293
353
|
/* <q> shadow leaf \u2014 Lambert-gated opacity. Polygons facing the light cast
|
|
294
354
|
full shadow; polygons facing away cast zero shadow. The * 10 multiplier
|
|
295
355
|
sharpens the cutoff so small positive Lambert values jump quickly to 1,
|
|
296
|
-
giving a near-binary visibility decision with a smooth edge transition.
|
|
297
|
-
|
|
356
|
+
giving a near-binary visibility decision with a smooth edge transition.
|
|
357
|
+
Scoped to dynamic mode: baked-mode shadow leaves are dropped up-front
|
|
358
|
+
by isBakedShadowCaster() and don't carry --pnx/--pny/--pnz. */
|
|
359
|
+
.polycss-scene[data-polycss-lighting="dynamic"] q {
|
|
298
360
|
opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
|
|
299
361
|
}
|
|
300
|
-
`;import{parsePureColor as Ss}from"@layoutit/polycss-core";import{inject as Ho}from"vue";var st=Symbol("polycss/scene-context");function Vt(){return Ho(st,null)}import{computed as te,h as Xe,onBeforeUnmount as Io,ref as Vo,watch as Fo}from"vue";import{parsePureColor as Kt}from"@layoutit/polycss-core";var zo=50,No=[.4,-.7,.59],jo="#ffffff",Yo=1,Uo="#ffffff",Xo=.4,he=4096,Ft=1,$o=.1,Bo=1,Gt=he*he,Wo=Gt*3,ut=2048,Zo=4*1024*1024,Ko=16*1024*1024,Go=.995,ne=.001,qo=.75,Qo=1,Jo=250,zt=1.5,qt=3,er=2,tr=4,dt=64,de=64,ae=64,nr=128,Nt=50,jt=1e-7,Yt=16,or=.05,rr=4,ar=.6,G=1e-9,ir=.6,pe=new Map;function sr(e){let t=pe.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),pe.set(e,t),t.then(()=>{pe.get(e)===t&&pe.delete(e)},()=>{pe.get(e)===t&&pe.delete(e)})),t}function $e(e){let t=typeof e=="string"?Number(e):e;return t===void 0||!Number.isFinite(t)?1:Math.min(Bo,Math.max($o,t))}function Be(e,t){let n=e.toFixed(t).replace(/\.?0+$/,"");return Object.is(Number(n),-0)?"0":n}function Ne(e,t=tr){let n=Be(e,t);return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function mt(e,t=qt){return`matrix3d(${e.split(",").map(n=>{let o=Number(n.trim());return Number.isFinite(o)?Be(o,t):n.trim()}).join(",")})`}function Ye(e,t=er){let n=Be(e,t);return Number(n)===0?"0":`${n}%`}function lr(e,t,n,o,r,i){let s=(e-n)*(i-o)-(t-o)*(r-n);return Math.abs(s)>jt?!1:(e-n)*(e-r)+(t-o)*(t-i)<=jt}function cr(e,t=Nt,n=Nt){let o=!1;for(let r=0,i=e.length-1;r<e.length;i=r++){let[s,d]=e[r],[a,c]=e[i];if(lr(t,n,s,d,a,c))return!0;d>n!=c>n&&t<(a-s)*(n-d)/(c-d)+s&&(o=!o)}return o}function Qt(e){return e.reduce((t,n)=>t+n.width*n.height,0)}function ur(e,t){let n=Qt(e);if(n<=0)return 1;let o=Math.max(1,...e.map(s=>Math.max(s.width,s.height))),r=ut/o,i=Math.sqrt(t/(n*4));return $e(Math.min(r,i))}function Jt(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 dr(e){return Jt(e)?Zo:Ko}function mr(e,t){return e!==void 0&&e!=="auto"||Jt(t)?ae:nr}function fr(e,t){let n=e.matrix.split(",").map(o=>Number(o));return n.length!==16||n.some(o=>!Number.isFinite(o))?e.canonicalMatrix:(n[0]*=e.canvasW/t,n[1]*=e.canvasW/t,n[2]*=e.canvasW/t,n[4]*=e.canvasH/t,n[5]*=e.canvasH/t,n[6]*=e.canvasH/t,n.join(","))}function Ut(e,t){for(let n of e.entries)n&&(n.atlasCanonicalSize=t,n.atlasMatrix=fr(n,t));return e}function yr(e,t){let n=Qt(e),o=.5;return n<=Gt?o=1:n<=Wo&&(o=.75),$e(Math.min(o,ur(e,t)))}function pr(e,t){return e.reduce((n,o)=>Math.max(n,Math.ceil(o.width*t),Math.ceil(o.height*t)),0)}function gr(e,t){return e.reduce((n,o)=>n+Math.ceil(o.width*t)*Math.ceil(o.height*t)*4,0)}function hr(e,t,n){let o=pr(e,t),r=gr(e,t),i=o>ut?ut/o:1,s=r>n?Math.sqrt(n/r):1;return Math.min(i,s)}function vr(e,t,n){let o=yr(t.pages,n),r=o===1?t:Ue(e,o);for(let i=0;i<4;i++){let s=hr(r.pages,o,n);if(s>=1)break;let d=$e(o*s*Go);if(d>=o)break;o=d,r=Ue(e,o)}return{packed:r,atlasScale:o}}function Pr(e,t,n){let o=mr(t,n);if(t!==void 0&&t!=="auto"){let s=$e(t);return{packed:Ut(Ue(e,s),o),atlasScale:s,atlasCanonicalSize:o}}let r=Ue(e,1),i=vr(e,r,dr(n));return{packed:Ut(i.packed,o),atlasScale:i.atlasScale,atlasCanonicalSize:o}}function br(e){return Math.max(Ft,Math.ceil(Ft/e))}function ie(e,t,n=1,o=0,r=0,i=1,s=0,d=0){e.setTransform(n*t,o*t,r*t,i*t,s*t,d*t)}function le(e){let t=Kt(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function ft({r:e,g:t,b:n}){return`${e},${t},${n}`}function xr(e){return Kt(e)?.alpha??1}function Oe(e){if(e.screenPts.length!==8)return!1;let t=[],n=[],o=(r,i)=>{for(let s of r)if(Math.abs(s-i)<=ne)return;r.push(i)};for(let r=0;r<e.screenPts.length;r+=2)o(t,e.screenPts[r]),o(n,e.screenPts[r+1]);if(t.length!==2||n.length!==2||(t.sort((r,i)=>r-i),n.sort((r,i)=>r-i),Math.abs(t[0])>ne||Math.abs(n[0])>ne||t[1]-t[0]<=ne||n[1]-n[0]<=ne))return!1;for(let r=0;r<e.screenPts.length;r+=2){let i=e.screenPts[r],s=e.screenPts[r+1],d=Math.abs(i-t[0])<=ne||Math.abs(i-t[1])<=ne,a=Math.abs(s-n[0])<=ne||Math.abs(s-n[1])<=ne;if(!d||!a)return!1}return!0}function oe(e){return!e.texture&&e.polygon.vertices.length===3}function De(e){return!e.texture&&!!e.projectiveMatrix&&!Oe(e)}function yt(){if(!!!globalThis.CSS?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let t=globalThis.matchMedia;return typeof t!="function"?!0:t("(pointer: fine)").matches&&t("(hover: hover)").matches}function en(){let e=(typeof window<"u"?window.navigator:globalThis.navigator)?.userAgent??"";if(!e)return!0;let t=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(e);return!/\bVersion\/[\d.]+.*\bSafari\//.test(e)||t}function Xt(e,t){e.set(t,(e.get(t)??0)+1)}function $t(e){let t,n=1;for(let[o,r]of e)r>n&&(t=o,n=r);return t}var Cr=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function Er(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,i)=>{let s=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:i,order:Cr.get(s)??Number.POSITIVE_INFINITY}}).sort((r,i)=>r.order-i.order||r.index-i.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function tn(e,t){let n=new Map,o=new Map,r=new Map,i=en(),s=t!=="dynamic"&&yt();for(let c of e)if(!(!c||c.texture)){if(t==="dynamic"){if(!(i&&oe(c))&&!Oe(c))continue;let l=le(c.polygon.color??"#cccccc"),m=ft(l);Xt(o,m),r.has(m)||r.set(m,l);continue}!(i&&oe(c))&&!Oe(c)&&!s||Xt(n,c.shadedColor)}let d=$t(n),a=$t(o);return{paintColor:d,dynamicColorKey:a,dynamicColor:a?r.get(a):void 0}}function Mr(e){let t=[],n=e.canvasW||1,o=e.canvasH||1;for(let r=0;r<e.screenPts.length;r+=2){let i=Math.max(0,Math.min(100,e.screenPts[r]/n*100)),s=Math.max(0,Math.min(100,e.screenPts[r+1]/o*100));t.push([i,s])}return t}function Ar([e,t]){return`${Ye(e)} ${Ye(t)}`}function Sr(e){return`polygon(${e.map(Ar).join(",")})`}function Tr(e){if(cr(e))return"circle(0)";let t=0,n=0,o=Math.max(1,e.length);for(let[s,d]of e)t+=s,n+=d;let r=Ye(Math.max(0,Math.min(100,t/o))),i=Ye(Math.max(0,Math.min(100,n/o)));return`circle(0 at ${r} ${i})`}function pt(e){let t=Mr(e);return`${Sr(t)} ${Tr(t)}`}function nn(e,t=qt){return e.map(n=>Be(n,t)).join(",")}function on(e,t,n){let o=e.matrix.split(",").map(r=>Number(r));return o.length!==16||o.some(r=>!Number.isFinite(r))?e.matrix:(o[0]*=t,o[1]*=t,o[2]*=t,o[4]*=n,o[5]*=n,o[6]*=n,nn(o))}function wr(e){return on(e,(e.canvasW||1)/Yt,(e.canvasH||1)/Yt)}function Lr(e){return on(e,(e.canvasW||1)/dt,(e.canvasH||1)/dt)}function rn(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],i=e[(n+2)%e.length],s=(r[0]-o[0])*(i[1]-r[1])-(r[1]-o[1])*(i[0]-r[0]);if(Math.abs(s)<=G)return!1;let d=Math.sign(s);if(t===0)t=d;else if(d!==t)return!1}return!0}function Rr(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 Or(e,t,n,o){let r=t[0]-e[0],i=t[1]-e[1],s=o[0]-n[0],d=o[1]-n[1],a=r*d-i*s;if(Math.abs(a)<=G)return null;let c=n[0]-e[0],l=n[1]-e[1],m=(c*d-l*s)/a;return[e[0]+m*r,e[1]+m*i]}function an(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let a=0;a<e.length;a+=2)n.push([e[a],e[a+1]]);if(!rn(n))return Re(e,t);let o=Rr(n);if(Math.abs(o)<=G)return Re(e,t);let r=o>0?1:-1,i=[];for(let a=0;a<n.length;a++){let c=n[a],l=n[(a+1)%n.length],m=l[0]-c[0],f=l[1]-c[1],y=Math.hypot(m,f);if(y<=G)return Re(e,t);let p=r*(f/y)*t,b=r*(-m/y)*t;i.push({a:[c[0]+p,c[1]+b],b:[l[0]+p,l[1]+b]})}let s=[],d=Math.max(2,t*4);for(let a=0;a<n.length;a++){let c=i[(a+n.length-1)%n.length],l=i[a],m=Or(c.a,c.b,l.a,l.b);if(!m)return Re(e,t);let f=n[a],y=m[0]-f[0],p=m[1]-f[1],b=Math.hypot(y,p);b>d?s.push(f[0]+y/b*d,f[1]+p/b*d):s.push(m[0],m[1])}return s}function Bt(e){if(e.length!==4||!rn(e))return null;let[t,n,o,r]=e,i=t[0]-n[0]+o[0]-r[0],s=t[1]-n[1]+o[1]-r[1],d=n[0]-o[0],a=r[0]-o[0],c=n[1]-o[1],l=r[1]-o[1],m=d*l-c*a;if(Math.abs(m)<=G)return null;let f=(i*l-s*a)/m,y=(d*s-c*i)/m,p=[1,1+f,1+f+y,1+y];if(p.some(E=>!Number.isFinite(E)||E<=or))return null;let b=Math.min(...p);return Math.max(...p)/b>rr?null:{g:f,h:y,w1:1+f,w3:1+y}}function Dr(e,t,n,o,r,i,s){if(e.length!==8)return null;let d=[[e[0],e[1]],[e[2],e[3]],[e[4],e[5]],[e[6],e[7]]];if(!Bt(d))return null;let a=an(e,ar),c=[[a[0],a[1]],[a[2],a[3]],[a[4],a[5]],[a[6],a[7]]],l=Bt(c);if(!l)return null;let{g:m,h:f,w1:y,w3:p}=l,[b,P,,E]=c,C=([H,M])=>[r+H*t[0]+M*n[0],i+H*t[1]+M*n[1],s+H*t[2]+M*n[2]],w=C(b),g=C(P),L=C(E),O=[g[0]*y-w[0],g[1]*y-w[1],g[2]*y-w[2]],N=[L[0]*p-w[0],L[1]*p-w[1],L[2]*p-w[2]],_=[O[0],O[1],O[2],m,N[0],N[1],N[2],f,o[0],o[1],o[2],0,w[0],w[1],w[2],1];for(let H=0;H<8;H+=1)_[H]/=dt;return _.join(",")}function kr(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function Wt(e){return`${e[0]},${e[1]},${e[2]}`}function _r(e,t){let n=Wt(e),o=Wt(t);return n<o?`${n}|${o}`:`${o}|${n}`}function We(e){let t=new Map;for(let o=0;o<e.length;o++){let r=e[o].vertices;if(!(!r||r.length<3||!e[o].texture))for(let i=0;i<r.length;i++){let s=_r(r[i],r[(i+1)%r.length]),d={polygon:o,edge:i},a=t.get(s);a?a.push(d):t.set(s,[d])}}let n=e.map(()=>new Set);for(let o of t.values())if(!(o.length<2))for(let r=0;r<o.length;r++)for(let i=r+1;i<o.length;i++)n[o[r].polygon].add(o[r].edge),n[o[i].polygon].add(o[i].edge);return n.map(o=>o.size>0?o:void 0)}function Hr(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 i=e[r],s=e[r+1],d=[i[0]-t[0],i[1]-t[1],i[2]-t[2]],a=[s[0]-t[0],s[1]-t[1],s[2]-t[2]];n[0]-=d[1]*a[2]-d[2]*a[1],n[1]-=d[2]*a[0]-d[0]*a[2],n[2]-=d[0]*a[1]-d[1]*a[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=G?null:[n[0]/o,n[1]/o,n[2]/o]}function lt(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Ir(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 Vr(e,t,n,o){if(!oe(e))return null;let r=kr(e.polygon.vertices,e.tileSize,e.layerElevation),i=Hr(r);if(!i)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(S=>{let U=r[S.a],B=r[S.b];return{...S,length:Math.hypot(B[0]-U[0],B[1]-U[1],B[2]-U[2])}}).sort((S,U)=>U.length-S.length),d=s[0].a,a=s[0].b,c=s[0].c,l=r[d],m=r[a],f=r[c],y=s[0].length;if(y<=G)return null;let p=[(m[0]-l[0])/y,(m[1]-l[1])/y,(m[2]-l[2])/y],b=[f[0]-l[0],f[1]-l[1],f[2]-l[2]],P=lt(b,p),E=[l[0]+p[0]*P,l[1]+p[1]*P,l[2]+p[2]*P],C=[E[0]-f[0],E[1]-f[1],E[2]-f[2]],w=Math.hypot(C[0],C[1],C[2]);if(w<=G)return null;let g=[C[0]/w,C[1]/w,C[2]/w];if(lt(Ir(p,g),i)<0){let S=a;if(a=d,d=S,l=r[d],m=r[a],y=Math.hypot(m[0]-l[0],m[1]-l[1],m[2]-l[2]),y<=G)return null;p=[(m[0]-l[0])/y,(m[1]-l[1])/y,(m[2]-l[2])/y];let U=[f[0]-l[0],f[1]-l[1],f[2]-l[2]];P=lt(U,p),E=[l[0]+p[0]*P,l[1]+p[1]*P,l[2]+p[2]*P],C=[E[0]-f[0],E[1]-f[1],E[2]-f[2]];let B=Math.hypot(C[0],C[1],C[2]);if(B<=G)return null;g=[C[0]/B,C[1]/B,C[2]/B]}let L=Math.max(0,Math.min(y,P)),O=Math.max(0,y-L),N=an([L,0,0,w,L+O,w],ir),_=[N[0],N[1]],H=[N[2],N[3]],M=[N[4],N[5]],D=(H[1]+M[1])/2,V=_[0]-H[0],I=M[0]-_[0],u=D-_[1];if(V<=G||I<=G||u<=G||!Number.isFinite(V+I+u))return null;let h=t==="dynamic",v=le(e.polygon.color??"#cccccc"),A=h&&ft(v)===o?.dynamicColorKey,x={color:h||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...h&&!A?{"--pnx":i[0].toFixed(4),"--pny":i[1].toFixed(4),"--pnz":i[2].toFixed(4),"--psr":(v.r/255).toFixed(4),"--psg":(v.g/255).toFixed(4),"--psb":(v.b/255).toFixed(4)}:h?{"--pnx":i[0].toFixed(4),"--pny":i[1].toFixed(4),"--pnz":i[2].toFixed(4)}:null},T=([S,U])=>[f[0]+(S-L)*p[0]+U*g[0],f[1]+(S-L)*p[1]+U*g[1],f[2]+(S-L)*p[2]+U*g[2]],j=T(_),R=T([H[0],D]),k=T([M[0],D]),Y=de/2,X=[(k[0]-R[0])/de,(k[1]-R[1])/de,(k[2]-R[2])/de],$=[j[0]-X[0]*Y,j[1]-X[1]*Y,j[2]-X[2]*Y],z=[(R[0]-$[0])/de,(R[1]-$[1])/de,(R[2]-$[2])/de];return{transform:`matrix3d(${nn([X[0],X[1],X[2],0,z[0],z[1],z[2],0,i[0],i[1],i[2],0,$[0],$[1],$[2],1])})`,...x}}function Fr({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 zr(e,t,n,o,r){let i=le(e),s=le(n),d=le(o),a=d.r/255*r+s.r/255*t,c=d.g/255*r+s.g/255*t,l=d.b/255*r+s.b/255*t,m=Math.max(0,Math.min(255,Math.round(i.r*a))),f=Math.max(0,Math.min(255,Math.round(i.g*c))),y=Math.max(0,Math.min(255,Math.round(i.b*l))),p=xr(e);return p<1?`rgba(${m}, ${f}, ${y}, ${p})`:Fr({r:m,g:f,b:y})}function Nr(e,t,n,o){let r=le(t),i=le(n);return{r:i.r/255*o+r.r/255*e,g:i.g/255*o+r.g/255*e,b:i.b/255*o+r.b/255*e}}function jr({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(1,r))*255);return`rgb(${o(e)} ${o(t)} ${o(n)})`}function Yr(e,t,n,o,r,i,s){Math.abs(i.r-1)<.001&&Math.abs(i.g-1)<.001&&Math.abs(i.b-1)<.001||(e.save(),ie(e,s),e.globalCompositeOperation="multiply",e.fillStyle=jr(i),e.fillRect(t,n,o,r),e.restore())}function Ur(e,t,n,o,r,i,s){let d=t.naturalWidth||t.width||1,a=t.naturalHeight||t.height||1,c=Math.max(r/d,i/a),l=d*c,m=a*c;ie(e,s),e.drawImage(t,n+(r-l)/2,o+(i-m)/2,l,m)}function sn(e,t){if(e.length<3||t.length<3)return null;let[n,o,r]=e,[i,s,d]=t,a=n[0],c=n[1],l=o[0],m=o[1],f=r[0],y=r[1],p=i[0],b=1-i[1],P=s[0],E=1-s[1],C=d[0],w=1-d[1],g=P-p,L=E-b,O=C-p,N=w-b,_=g*N-O*L;if(Math.abs(_)<=1e-9)return null;let H=l-a,M=f-a,D=m-c,V=y-c,I={a:(H*N-M*L)/_,b:(g*M-O*H)/_,c:(D*N-V*L)/_,d:(g*V-O*D)/_,e:0,f:0};return I.e=a-I.a*p-I.b*b,I.f=c-I.c*p-I.d*b,I}function ln(e){if(e.length===0)return null;let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of e){let s=i[0],d=1-i[1];if(!Number.isFinite(s)||!Number.isFinite(d))return null;t=Math.min(t,s),o=Math.max(o,s),n=Math.min(n,d),r=Math.max(r,d)}return{minU:t,minV:n,maxU:o,maxV:r}}function Xr(e,t,n,o,r,i,s,d){let a=e.vertices.map(m=>{let f=[m[1]*t,m[0]*t,m[2]*n],y=f[0]-o[0],p=f[1]-o[1],b=f[2]-o[2];return[y*r[0]+p*r[1]+b*r[2]+s,y*i[0]+p*i[1]+b*i[2]+d]}),c=sn(a,e.uvs),l=ln(e.uvs);return!c&&!l?null:{screenPts:a.flatMap(([m,f])=>[m,f]),uvAffine:c,uvSampleRect:l}}function Re(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let s=0;s<e.length;s+=2)n+=e[s],o+=e[s+1];n/=r,o/=r;let i=e.slice();for(let s=0;s<i.length;s+=2){let d=i[s]-n,a=i[s+1]-o,c=Math.hypot(d,a);c<=ne||(i[s]+=d/c*t,i[s+1]+=a/c*t)}return i}function ct(e,t,n,o){for(let r=0;r<o.length;r+=2){let i=t+o[r],s=n+o[r+1];r===0?e.moveTo(i,s):e.lineTo(i,s)}e.closePath()}function ge(e,t){return Math.max(0,Math.min(t,e))}function Zt(e,t,n,o,r,i,s,d){let a=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,l=ge(Math.min(n.minU,n.maxU)*a,a),m=ge(Math.max(n.minU,n.maxU)*a,a),f=ge(Math.min(n.minV,n.maxV)*c,c),y=ge(Math.max(n.minV,n.maxV)*c,c),p=Math.floor(l),b=Math.floor(f),P=Math.ceil(m)-p,E=Math.ceil(y)-b;P<1&&(p=Math.floor(ge((n.minU+n.maxU)/2*a,a-1)),P=1),E<1&&(b=Math.floor(ge((n.minV+n.maxV)/2*c,c-1)),E=1),p=Math.max(0,Math.min(a-1,p)),b=Math.max(0,Math.min(c-1,b)),P=Math.max(1,Math.min(a-p,P)),E=Math.max(1,Math.min(c-b,E)),ie(e,d),e.drawImage(t,p,b,P,E,o,r,i,s)}function $r(e,t,n,o,r,i){for(let s=0;s<o.length;s+=2){let d=t+o[s]+r,a=n+o[s+1]+i;s===0?e.moveTo(d,a):e.lineTo(d,a)}e.closePath()}function Br(e,t,n,o,r=0,i=0){if(t.textureTriangles?.length){let s=n.naturalWidth||n.width||1,d=n.naturalHeight||n.height||1;for(let a of t.textureTriangles){let c=Re(a.screenPts,qo);e.save(),ie(e,o),e.beginPath(),$r(e,t.x,t.y,c,r,i),e.clip(),a.uvAffine?(ie(e,o,a.uvAffine.a/s,a.uvAffine.c/s,a.uvAffine.b/d,a.uvAffine.d/d,t.x+a.uvAffine.e+r,t.y+a.uvAffine.f+i),e.drawImage(n,0,0)):a.uvSampleRect&&Zt(e,n,a.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let s=n.naturalWidth||n.width||1,d=n.naturalHeight||n.height||1;ie(e,o,t.uvAffine.a/s,t.uvAffine.c/s,t.uvAffine.b/d,t.uvAffine.d/d,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+i),e.drawImage(n,0,0)}else t.uvSampleRect?Zt(e,n,t.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o):Ur(e,n,t.x+r,t.y+i,t.canvasW,t.canvasH,o)}function Wr(e,t,n,o,r,i){let s=r-n,d=i-o,a=s*s+d*d;if(a<=G)return Math.hypot(e-n,t-o);let c=Math.max(0,Math.min(1,((e-n)*s+(t-o)*d)/a));return Math.hypot(e-(n+s*c),t-(o+d*c))}function Zr(e,t,n,o){let r=1/0,i=n.length/2;for(let s of o){if(s<0||s>=i)continue;let d=s*2,a=(s+1)%i*2;r=Math.min(r,Wr(e,t,n[d],n[d+1],n[a],n[a+1]))}return r}function Kr(e,t,n,o,r,i){let s=Math.max(0,o-i),d=Math.min(t-1,o+i),a=Math.max(0,r-i),c=Math.min(n-1,r+i),l=null,m=1/0;for(let f=a;f<=c;f++)for(let y=s;y<=d;y++){if(y===o&&f===r)continue;let p=y-o,b=f-r,P=p*p+b*b;if(P>i*i||P>=m)continue;let E=(f*t+y)*4;e[E+3]<Jo||(l=E,m=P)}return l}function Gr(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)),i=Math.max(0,Math.floor(t.y*n)),s=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),d=Math.max(1,Math.min(o.height-i,Math.ceil(t.canvasH*n)));if(s<=0||d<=0)return;let a;try{a=e.getImageData(r,i,s,d)}catch{return}let c=a.data,l=new Uint8ClampedArray(c),m=Math.max(zt,zt/n),f=Math.max(2,Math.ceil(m*n)+1),y=!1;for(let p=0;p<d;p++)for(let b=0;b<s;b++){let P=(p*s+b)*4,E=c[P+3];if(E<Qo||E===255)continue;let C=(r+b+.5)/n-t.x,w=(i+p+.5)/n-t.y;if(Zr(C,w,t.screenPts,t.textureEdgeRepairEdges)>m)continue;let g=Kr(l,s,d,b,p,f);g!==null&&(c[P]=l[g],c[P+1]=l[g+1],c[P+2]=l[g+2],c[P+3]=255,y=!0)}y&&e.putImageData(a,r,i)}function qr(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)}}function ve(e,t,n={}){let{vertices:o,texture:r,uvs:i}=e;if(!o||o.length<3)return null;let s=n.tileSize??zo,d=n.layerElevation??s,a=Z=>[Z[1]*s,Z[0]*s,Z[2]*d],c=o.map(a),l=c[0],m=c[1],f=c[2],y=[m[0]-l[0],m[1]-l[1],m[2]-l[2]],p=[f[0]-l[0],f[1]-l[1],f[2]-l[2]],b=Math.hypot(y[0],y[1],y[2]);if(b===0)return null;let P=[y[0]/b,y[1]/b,y[2]/b],E=-(y[1]*p[2]-y[2]*p[1]),C=-(y[2]*p[0]-y[0]*p[2]),w=-(y[0]*p[1]-y[1]*p[0]),g=Math.hypot(E,C,w);if(g===0)return null;E/=g,C/=g,w/=g;let L=[C*P[2]-w*P[1],w*P[0]-E*P[2],E*P[1]-C*P[0]],O=c.map(Z=>{let J=Z[0]-l[0],Ve=Z[1]-l[1],_t=Z[2]-l[2];return[J*P[0]+Ve*P[1]+_t*P[2],J*L[0]+Ve*L[1]+_t*L[2]]}),N=1/0,_=1/0,H=-1/0,M=-1/0;for(let[Z,J]of O)Z<N&&(N=Z),Z>H&&(H=Z),J<_&&(_=J),J>M&&(M=J);let D=H-N,V=M-_;if(!Number.isFinite(D)||!Number.isFinite(V))return null;let I=r&&n.textureEdgeRepairEdges?.size?n.textureEdgeRepairEdges:null,u=!!(r&&I),h=-N,v=-_,A=[];for(let Z=0;Z<O.length;Z++){let[J,Ve]=O[Z];A.push(J+h,Ve+v)}let x=Math.max(1,Math.ceil(D)),T=Math.max(1,Math.ceil(V)),j=l[0]-h*P[0]-v*L[0],R=l[1]-h*P[1]-v*L[1],k=l[2]-h*P[2]-v*L[2],Y=[P[0],P[1],P[2],0,L[0],L[1],L[2],0,E,C,w,0,j,R,k,1].join(","),X=[P[0]*x,P[1]*x,P[2]*x,0,L[0]*T,L[1]*T,L[2]*T,0,E,C,w,0,j,R,k,1].join(","),$=[P[0]*x/ae,P[1]*x/ae,P[2]*x/ae,0,L[0]*T/ae,L[1]*T/ae,L[2]*T/ae,0,E,C,w,0,j,R,k,1].join(","),z=[E,C,w],F=!r&&o.length===4?Dr(A,P,L,z,j,R,k):null,S=n.directionalLight,U=n.ambientLight,B=S?.direction??No,re=S?.color??jo,ce=Math.max(0,S?.intensity??Yo),se=U?.color??Uo,W=Math.max(0,U?.intensity??Xo),ue=Math.hypot(B[0],B[1],B[2])||1,we=B[0]/ue,rt=B[1]/ue,yo=B[2]/ue,Ot=ce*Math.max(0,E*we+C*rt+w*yo),po=Nr(Ot,re,se,W),go=zr(e.color??"#cccccc",Ot,re,se,W),Dt=null,kt=null;r&&i&&i.length>=3&&i.length===o.length&&(kt=ln(i),Dt=sn(O.map(([Z,J])=>[Z+h,J+v]),i));let ho=r&&e.textureTriangles?.length?e.textureTriangles.map(Z=>Xr(Z,s,d,l,P,L,h,v)).filter(Z=>!!Z):null;return{index:t,polygon:e,texture:r,tileSize:s,layerElevation:d,matrix:Y,canonicalMatrix:X,atlasMatrix:$,projectiveMatrix:F,canvasW:x,canvasH:T,screenPts:A,uvAffine:Dt,uvSampleRect:kt,textureTriangles:ho,textureEdgeRepairEdges:I,textureEdgeRepair:u,normal:z,textureTint:po,shadedColor:go}}function Ue(e,t=1){let n=Array(e.length).fill(null),o=[],r=br(t),i=e.filter(a=>!!a).sort((a,c)=>c.canvasH-a.canvasH||c.canvasW-a.canvasW||a.index-c.index),s=()=>({width:r,height:r,entries:[],shelves:[]}),d=(a,c,l)=>{if(a.sealed)return null;for(let y of a.shelves)if(c.canvasH<=y.height&&y.x+c.canvasW+r<=he){let p={...c,pageIndex:l,x:y.x,y:y.y};return y.x+=c.canvasW+r,a.entries.push(p),a.width=Math.max(a.width,p.x+c.canvasW+r),p}let m=a.shelves.length===0?r:a.height;if(m+c.canvasH+r>he)return null;let f={...c,pageIndex:l,x:r,y:m};return a.shelves.push({x:r+c.canvasW+r,y:m,height:c.canvasH}),a.entries.push(f),a.width=Math.max(a.width,f.x+c.canvasW+r),a.height=Math.max(a.height,m+c.canvasH+r),f};for(let a of i){if(a.canvasW+r*2>he||a.canvasH+r*2>he){let m=o.length,f={...a,pageIndex:m,x:r,y:r};n[a.index]=f,o.push({width:a.canvasW+r*2,height:a.canvasH+r*2,entries:[f],shelves:[],sealed:!0});continue}let l=null;for(let m=0;m<o.length&&(l=d(o[m],a,m),!l);m++);if(!l){let m=s(),f=o.length;o.push(m),l=d(m,a,f)}l&&(n[a.index]=l)}return{entries:n,pages:o.map(({width:a,height:c,entries:l})=>({width:a,height:c,entries:l}))}}async function Qr(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 i=e.entries.some(l=>l.textureEdgeRepair&&l.texture&&l.textureEdgeRepairEdges&&l.textureEdgeRepairEdges.size>0),s=r.getContext("2d",i?{willReadFrequently:!0}:void 0);if(!s)return{width:e.width,height:e.height,url:null};let d=Array.from(new Set(e.entries.flatMap(l=>l.texture?[l.texture]:[]))),a=new Map;await Promise.all(d.map(async l=>{a.set(l,await sr(l))}));for(let l of e.entries){let m=l.texture?a.get(l.texture):null;if(!l.texture){s.save(),ie(s,o),s.beginPath(),ct(s,l.x,l.y,l.screenPts),s.clip(),s.fillStyle=t==="dynamic"?l.polygon.color??"#cccccc":l.shadedColor,s.fillRect(l.x,l.y,l.canvasW,l.canvasH),s.restore();continue}m&&(s.save(),ie(s,o),s.beginPath(),ct(s,l.x,l.y,l.screenPts),s.clip(),Br(s,l,m,o),s.restore()),l.texture&&t==="baked"&&(s.save(),ie(s,o),s.beginPath(),ct(s,l.x,l.y,l.screenPts),s.clip(),Yr(s,l.x,l.y,l.canvasW,l.canvasH,l.textureTint,o),s.restore()),Gr(s,l,o)}let c=await qr(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:c}}async function Jr(e,t,n,o,r){let i=[];for(let s of e){if(r())break;i.push(await Qr(s,t,n,o))}return i}function je(e){for(let t of e)URL.revokeObjectURL(t)}function Pe(e,t,n=te(()=>{}),o=te(()=>{})){let r=te(()=>new Set(o.value?.disable??[])),i=te(()=>!r.value.has("b")),s=te(()=>i.value),d=te(()=>!r.value.has("u")&&en()),a=te(()=>!r.value.has("i")&&t.value!=="dynamic"&&yt()),c=te(()=>{let f=e.value.map(y=>!y||y.texture?y:d.value&&oe(y)||i.value&&Oe(y)||s.value&&De(y)||t.value!=="dynamic"&&a.value?null:y);return Pr(f,n.value,typeof document<"u"?document:null)}),l=Vo(c.value.packed.pages.map(f=>({width:f.width,height:f.height,url:null}))),m=[];return Fo(()=>[c.value,t.value],([f,y],p,b)=>{let{packed:P,atlasScale:E}=f,C=!1;je(m),m=[],l.value=P.pages.map(w=>({width:w.width,height:w.height,url:null})),b(()=>{C=!0,je(m),m=[]}),!(P.pages.length===0||typeof document>"u")&&Jr(P.pages,y,document,E,()=>C).then(w=>{if(C){je(w.flatMap(g=>g.url?.startsWith("blob:")?[g.url]:[]));return}m=w.flatMap(g=>g.url?.startsWith("blob:")?[g.url]:[]),l.value=w}).catch(()=>{C||(l.value=P.pages.map(w=>({width:w.width,height:w.height,url:null})))})},{immediate:!0}),Io(()=>{je(m),m=[]}),{entries:te(()=>c.value.packed.entries),pages:l,ready:te(()=>l.value.length===0||l.value.every(f=>!!f.url)),useFullRectSolid:i,useProjectiveQuad:s,useStableTriangle:d,useBorderShape:a}}function be({entry:e,page:t,textureLighting:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let d=n==="dynamic",a=e.atlasCanonicalSize??ae,c=e.canvasW||1,l=e.canvasH||1,m=t?`${Ne(-e.x/c*a)} ${Ne(-e.y/l*a)}`:void 0,f=t?`${Ne(t.width/c*a)} ${Ne(t.height/l*a)}`:void 0,y=d&&t?.url?`url(${t.url})`:void 0,p=!d&&t?.url?`url(${t.url}) ${m} / ${f} no-repeat`:void 0,b={transform:mt(e.atlasMatrix),"--polycss-atlas-size":`${a}px`,background:p,backgroundImage:d&&t?.url?`url(${t.url})`:void 0,backgroundPosition:d?m:void 0,backgroundSize:d?f:void 0,...d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...d&&y?{maskImage:y,maskMode:"alpha",maskPosition:m,maskSize:f,maskRepeat:"no-repeat",WebkitMaskImage:y,WebkitMaskPosition:m,WebkitMaskSize:f,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:s==="none"?"none":void 0,...r},P=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([C,w])=>[`data-${C}`,String(w)])):{},E=o?.trim()||void 0;return Xe("s",{class:E,style:b,...P,...i})}function xe({entry:e,solidPaintDefaults:t,className:n,style:o,domAttrs:r,pointerEvents:i="auto",forceBorderShape:s=!1}){let d=Oe(e),a=d&&s&&yt(),c=!d||a?pt(e):null,l=e.shadedColor===t?.paintColor,m=mt(c?wr(e):Lr(e)),f=d?{transform:m,color:l?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...o}:{transform:m,color:l?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...o},y=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([P,E])=>[`data-${P}`,String(E)])):{},p=n?.trim()||void 0,b=P=>{let E=P.el;E&&(c?E.style.setProperty("border-shape",c):E.style.removeProperty("border-shape"),Er(E))};return Xe(d&&!a?"b":"i",{class:p,style:f,...y,...r,onVnodeMounted:b,onVnodeUpdated:b})}function Ze({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let d=t==="dynamic",a=le(e.polygon.color??"#cccccc"),c=d&&ft(a)===n?.dynamicColorKey,l={transform:mt(e.projectiveMatrix),color:d||e.shadedColor===n?.paintColor?void 0:e.shadedColor,pointerEvents:s==="none"?"none":void 0,...d&&!c?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(a.r/255).toFixed(4),"--psg":(a.g/255).toFixed(4),"--psb":(a.b/255).toFixed(4)}:d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},m=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([y,p])=>[`data-${y}`,String(p)])):{},f=o?.trim()||void 0;return Xe("b",{class:f,style:l,...m,...i})}function Ce({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let d=Vr(e,t,s,n);if(!d)return null;let a=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,m])=>[`data-${l}`,String(m)])):{},c=o?.trim()||void 0;return Xe("u",{class:c,style:{...d,...r},...a,...i})}var fn=ea({name:"PolyScene",inheritAttrs:!1,props:{polygons:{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},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=na(K);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{store:r,sceneElRef:i}=o,s=cn(0),d=new Map,a={register(M,D){d.set(M,D),s.value++},unregister(M){d.delete(M),s.value++},version:s,getEntries(){return Array.from(d.values())}},c=ee(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,shadow:e.shadow,shadowRegistry:a}));oa(st,c);let l=r.getState().cameraState,m=cn(null);un(m,M=>{i.value=M});let f=!1;ra(()=>{f||typeof document<"u"&&(ze(document),f=!0)}),un(()=>e.debugShowBackfaces,M=>{let D=m.value;D&&D.classList.toggle("polycss-debug-show-backfaces",!!M)});let y=ee(()=>e.polygons??[]),p=ee(()=>({directionalLight:e.directionalLight})),b=Fe(y,p),P=ee(()=>{let M=l,D=o.autoCenterOffset.value,V=ia,I=M.target[0]+D[0],u=M.target[1]+D[1],h=M.target[2]+D[2],v=u*V,A=I*V,x=h*V;return{transform:`${M.distance!==0?`translateZ(${-M.distance}px) `:""}scale(${M.zoom}) rotateX(${M.rotX}deg) rotate(${M.rotY}deg) translate3d(${-v}px, ${-A}px, ${-x}px)`}}),E=ee(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),C=ee(()=>{let M=e.textureLighting==="dynamic",D=M?void 0:e.directionalLight,V=M?void 0:e.ambientLight,I=We(b.value.polygons);return b.value.polygons.map((u,h)=>ve(u,h,{tileSize:E.value.tileSize,layerElevation:E.value.layerElevation,directionalLight:D,ambientLight:V,textureEdgeRepairEdges:I[h]}))}),w=ee(()=>e.textureLighting??"baked"),g=ee(()=>e.textureQuality),L=ee(()=>e.strategies),O=Pe(C,w,g,L),N=ee(()=>{if(e.textureLighting!=="dynamic")return null;let M=e.directionalLight?.direction??[.4,-.7,.59],D=Math.hypot(M[0],M[1],M[2])||1,V=M[0]/D,I=M[1]/D,u=M[2]/D,h=mn(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],v=mn(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],A=e.directionalLight?.intensity??1,x=e.ambientLight?.intensity??.4,T=k=>(k/255).toFixed(4),j=u,R=Math.sign(j||1)*Math.max(Math.abs(j),.01);return{"--plx":V.toFixed(4),"--ply":I.toFixed(4),"--plz":u.toFixed(4),"--clx":V.toFixed(4),"--cly":I.toFixed(4),"--clz":R.toFixed(4),"--plr":T(h[0]),"--plg":T(h[1]),"--plb":T(h[2]),"--pli":A.toFixed(4),"--par":T(v[0]),"--pag":T(v[1]),"--pab":T(v[2]),"--pai":x.toFixed(4)}}),_=50;dn(()=>{let M=m.value;if(!M)return;if(e.textureLighting!=="dynamic"){M.style.removeProperty("--shadow-ground-cssz");return}s.value;let D=a.getEntries();if(D.length===0){M.style.removeProperty("--shadow-ground-cssz");return}let V=1/0;for(let u of D)for(let h of u())for(let v of h.vertices)v[2]<V&&(V=v[2]);if(!Number.isFinite(V)){M.style.removeProperty("--shadow-ground-cssz");return}let I=e.shadow?.lift??.05;M.style.setProperty("--shadow-ground-cssz",((V+I)*_).toFixed(3))});let H=ee(()=>{if(!e.autoCenter)return[0,0,0];let M=b.value.sceneBbox;return[(M.min[0]+M.max[0])/2,(M.min[1]+M.max[1])/2,(M.min[2]+M.max[2])/2]});return dn(()=>{o.autoCenterOffset.value=H.value}),aa(()=>{}),()=>{let M=`polycss-scene${e.class?` ${e.class}`:""}`,D=E.value,V=O.entries.value.map((u,h)=>{if(u)return be({entry:u,page:O.pages.value[u.pageIndex],textureLighting:D.textureLighting??"baked"});let v=C.value[h];return!v||v.texture?null:O.useStableTriangle.value&&oe(v)?Ce({entry:v,textureLighting:D.textureLighting??"baked"}):O.useProjectiveQuad.value&&De(v)?Ze({entry:v,textureLighting:D.textureLighting??"baked"}):O.useBorderShape.value||O.useFullRectSolid.value?xe({entry:v,forceBorderShape:!O.useFullRectSolid.value}):null}),I=t.default?.()??[];return ta("div",{ref:m,class:M,"data-polycss-lighting":D.textureLighting??"baked","aria-hidden":"true",style:{...P.value,...N.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([u])=>u!=="style"&&u!=="class"))},[...V,...I])}}});import{defineComponent as ua,h as ke,computed as q,inject as da,onMounted as ma,onBeforeUnmount as hn,ref as Pt,watch as vn}from"vue";import{computeSceneBbox as fa,inverseRotateVec3 as Pn,findOverlappingPolygonDuplicates as ya,parseHexColor as pa}from"@layoutit/polycss-core";import{ref as Ke,watch as sa,onUnmounted as la}from"vue";import{loadMesh as ca}from"@layoutit/polycss-core";var yn=[],gt=[];function Ge(e,t){let n=Ke(yn),o=Ke(!!e.value),r=Ke(null),i=Ke(gt),s=null;function d(){if(s){try{s.dispose()}catch{}s=null}}return sa(e,(a,c,l)=>{if(!a){d(),n.value=yn,o.value=!1,r.value=null,i.value=gt;return}let m=!1;o.value=!0,r.value=null;let f=s;ca(a,t).then(y=>{if(m){try{y.dispose()}catch{}return}if(f)try{f.dispose()}catch{}s=y,n.value=y.polygons,o.value=!1,r.value=null,i.value=y.warnings??gt}).catch(y=>{if(m)return;let p=y instanceof Error?y:new Error(String(y));o.value=!1,r.value=p}),l(()=>{m=!0})},{immediate:!0}),la(()=>{d()}),{polygons:n,loading:o,error:r,warnings:i,dispose:d}}var ht=new WeakMap;function pn(e,t){ht.set(e,t)}function gn(e){ht.delete(e)}function Ee(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=ht.get(t);if(n)return n}t=t.parentElement}return null}function Me(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let i=r.getBoundingClientRect();if(!(i.width<=0||i.height<=0)&&t>=i.left&&t<=i.right&&n>=i.top&&n<=i.bottom)return!0}return!1}function vt(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 i=Ee(r);if(i&&Me(r,e,t))return i}return null}function ga(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 ha(e,t,n){let o=[];return e&&o.push(`translate3d(${e[0]}px, ${e[1]}px, ${e[2]}px)`),t!==void 0&&(typeof t=="number"?t!==1&&o.push(`scale3d(${t}, ${t}, ${t})`):o.push(`scale3d(${t[0]}, ${t[1]}, ${t[2]})`)),n&&(n[0]&&o.push(`rotateX(${n[0]}deg)`),n[1]&&o.push(`rotateY(${n[1]}deg)`),n[2]&&o.push(`rotateZ(${n[2]}deg)`)),o.length>0?o.join(" "):void 0}function va(e){if(e.length===0)return e;let t=fa(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 i=s=>[s[0]-n,s[1]-o,s[2]-r];return e.map(s=>({...s,vertices:s.vertices.map(i),...s.textureTriangles?.length?{textureTriangles:s.textureTriangles.map(d=>({...d,vertices:d.vertices.map(i)}))}:null}))}var Q=ua({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},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},castShadow:{type:Boolean,default:!1},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=q(()=>e.src??""),i=q(()=>e.mtl?{mtlUrl:e.mtl}:void 0),s=Ge(r,i.value),d=q(()=>e.src?s.polygons.value:e.polygons??[]),a=Pt(null);vn(d,()=>{a.value=null});let c=q(()=>a.value??d.value),l=q(()=>e.autoCenter?va(c.value):c.value),m=!t.polygon,f=Vt(),y=q(()=>e.textureLighting??f?.value.textureLighting??"baked"),p=q(()=>y.value==="dynamic"?void 0:f?.value.directionalLight),b=q(()=>y.value==="dynamic"?void 0:f?.value.ambientLight),P=q(()=>{if(y.value!=="dynamic")return null;let h=e.rotation;if(!h||h[0]===0&&h[1]===0&&h[2]===0)return null;let v=f?.value.directionalLight?.direction;if(!v)return null;let A=Pn(v,h),x=Math.hypot(A[0],A[1],A[2])||1;return{"--plx":(A[0]/x).toFixed(4),"--ply":(A[1]/x).toFixed(4),"--plz":(A[2]/x).toFixed(4)}}),E=Pt(e.rotation),C=q(()=>{if(!m)return[];let h=p.value,v=h&&E.value?{...h,direction:Pn(h.direction,E.value)}:h,A=We(l.value);return l.value.map((x,T)=>ve(x,T,{directionalLight:v,ambientLight:b.value,textureEdgeRepairEdges:A[T]}))}),w=q(()=>e.textureQuality),g=Pe(C,y,w),L=q(()=>m?tn(C.value,y.value):{}),O=q(()=>ga(L.value)),N=q(()=>{if(!e.castShadow||y.value!=="dynamic")return[];let h=f?.value.shadow,v=h?.color??"#000000",A=h?.opacity??.25,x=pa(v)?.rgb??[0,0,0],T=`rgba(${x[0]},${x[1]},${x[2]},${A})`,j=C.value;if(j.length===0)return[];let R=ya(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.4});return j.map((k,Y)=>{if(!k||R.has(Y))return null;let X=`matrix3d(${k.matrix})`,$=pt(k),z={transform:`var(--shadow-proj) ${X}`,color:T,width:`${k.canvasW}px`,height:`${k.canvasH}px`,"--pnx":k.normal[0].toFixed(4),"--pny":k.normal[1].toFixed(4),"--pnz":k.normal[2].toFixed(4)},F=S=>{let U=S.el;U&&U.style.setProperty("border-shape",$)};return ke("q",{class:"polycss-shadow",style:z,onVnodeMounted:F,onVnodeUpdated:F})})}),_=Symbol();vn(()=>[e.castShadow,y.value],([h,v],A,x)=>{let T=f?.value.shadowRegistry;T&&(h&&v==="dynamic"?T.register(_,()=>l.value):T.unregister(_),x(()=>T.unregister(_)))},{immediate:!0}),hn(()=>{f?.value.shadowRegistry?.unregister(_)});let H=Pt(null),M={get element(){return H.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>l.value,updatePolygon(h,v){let A=l.value,x=typeof h=="number"?h:A.indexOf(h);x<0||x>=A.length||(Object.assign(A[x],v),a.value=A.slice())},rebakeAtlas:()=>{E.value=e.rotation}};o(M),ma(()=>{H.value&&pn(H.value,M)}),hn(()=>{H.value&&gn(H.value)});let D=da(K,null),V=null;function I(h,v,A){let x=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let Y=document.elementsFromPoint(v,A),X=new Set;for(let $ of Y){let z=Ee($);z&&!X.has(z)&&(X.add(z),x.push({object:z}))}}let T=0,j=0,R=D?.cameraElRef.value;if(R){let Y=R.getBoundingClientRect();Y.width>0&&Y.height>0&&(T=(v-Y.left)/Y.width*2-1,j=-((A-Y.top)/Y.height*2-1))}let k=0;return V&&(k=Math.hypot(v-V.x,A-V.y)),{object:x[0]?.object??M,eventObject:M,intersections:x,pointer:{x:T,y:j},delta:k,nativeEvent:h,stopPropagation:()=>h.stopPropagation()}}function u(h,v,A,x){h&&h(I(v,A,x))}return()=>{let h=ha(e.position,e.scale,e.rotation),v=l.value,A;if(v.length>0){let F=1/0,S=1/0,U=1/0,B=-1/0,re=-1/0,ce=-1/0;for(let se of v)for(let W of se.vertices)W[0]<F&&(F=W[0]),W[0]>B&&(B=W[0]),W[1]<S&&(S=W[1]),W[1]>re&&(re=W[1]),W[2]<U&&(U=W[2]),W[2]>ce&&(ce=W[2]);Number.isFinite(F)&&(A=`${(S+re)/2*50}px ${(F+B)/2*50}px ${(U+ce)/2*50}px`)}let x={transform:h,...A?{transformOrigin:A}:null,...P.value??void 0,...n.style,...O.value??void 0},T=Object.fromEntries(Object.entries(n).filter(([F])=>F!=="style"&&F!=="class")),j=`polycss-mesh${e.class?` ${e.class}`:""}`,R={};e.onClick&&(R.onClick=F=>{let S=F;u(e.onClick,S,S.clientX,S.clientY)}),e.onContextMenu&&(R.onContextmenu=F=>{let S=F;u(e.onContextMenu,S,S.clientX,S.clientY)}),e.onDoubleClick&&(R.onDblclick=F=>{let S=F;u(e.onDoubleClick,S,S.clientX,S.clientY)}),e.onWheel&&(R.onWheel=F=>{let S=F;u(e.onWheel,S,S.clientX,S.clientY)}),R.onPointerdown=F=>{let S=F;V={x:S.clientX,y:S.clientY},u(e.onPointerDown,S,S.clientX,S.clientY)},R.onPointerup=F=>{let S=F;u(e.onPointerUp,S,S.clientX,S.clientY),V=null},e.onPointerMove&&(R.onPointermove=F=>{let S=F;u(e.onPointerMove,S,S.clientX,S.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(R.onPointerenter=F=>{let S=F;u(e.onPointerOver,S,S.clientX,S.clientY),u(e.onPointerEnter,S,S.clientX,S.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(R.onPointerleave=F=>{let S=F;u(e.onPointerOut,S,S.clientX,S.clientY),u(e.onPointerLeave,S,S.clientX,S.clientY)}),e.onPointerCancel&&(R.onPointercancel=F=>{let S=F;u(e.onPointerCancel,S,S.clientX,S.clientY),V=null});let k=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&s.loading.value&&s.polygons.value.length===0)return ke("div",{ref:H,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:x,...k,...R,...T},t.fallback?.()??[]);if(e.src&&s.error.value&&s.polygons.value.length===0)return ke("div",{ref:H,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:x,...k,...R,...T},t.error?.({error:s.error.value})??[]);let Y=l.value,X=t.polygon?Y.map((F,S)=>ke("template",{key:S},t.polygon?.({polygon:F,index:S}))):g.entries.value.map((F,S)=>{if(F)return be({entry:F,page:g.pages.value[F.pageIndex],textureLighting:y.value});let U=C.value[S];return!U||U.texture?null:oe(U)?Ce({entry:U,textureLighting:y.value,solidPaintDefaults:L.value}):xe({entry:U,solidPaintDefaults:L.value})}),$=t.default?.()??[],z=N.value;return ke("div",{ref:H,class:j,style:x,...k,...R,...T},[...z,...X,...$])}}});import{defineComponent as Pa,h as ba,computed as xa}from"vue";var bn=Pa({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=xa(()=>{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()=>ba(Q,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as xn}from"vue";function Ca(e){return typeof e=="function"?xn(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):xn(()=>({texture:e.texture,key:e.key}))}import{computed as Ae,defineComponent as Ea,h as Cn}from"vue";var Ma=4;function qe(e,t=Ma){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function Aa(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,i)=>r-i),n=[...new Set(e.map(r=>r[1]))].sort((r,i)=>r-i);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 Sa({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let{u0:d,u1:a,v0:c,v1:l}=n,m=a-d,f=l-c,y=1/m,p=1/f,b=Math.max(c,l),P=d/m,E=(1-b)/f,C={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${qe(y)} ${qe(p)}`,backgroundPosition:`${qe(-P)} ${qe(-E)}`,pointerEvents:s==="none"?"none":void 0,...r},w=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,O])=>[`data-${L}`,String(O)])):{},g=o?.trim()||void 0;return Cn("i",{class:g,style:C,...w,...i})}var En=Ea({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=Ae(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=Ae(()=>e.textureQuality??e.context?.textureQuality),r=Ae(()=>e.material?.texture??e.texture),i=Ae(()=>e.material&&e.uvs?Aa(e.uvs):null),s=Ae(()=>{let c=e.context?.tileSize??50;return ve({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})}),d=Ae(()=>i.value?[]:[s.value]),a=Pe(d,n,o);return()=>{let c=s.value,l=a.entries.value[0],m=[];e.position&&m.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&&m.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):m.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&m.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&m.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&m.push(`rotateZ(${e.rotation[2]}deg)`));let f=m.length>0?m.join(" "):void 0,y={};if(e.data)for(let[E,C]of Object.entries(e.data))y[`data-${E}`]=String(C);let p={...t,...y},b=Object.fromEntries(Object.entries(p).filter(([E])=>E!=="class"&&E!=="style")),P;return i.value&&e.material&&c?P=Sa({plan:c,material:e.material,uvRect:i.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):l?P=be({entry:l,page:a.pages.value[l.pageIndex],textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):c&&!c.texture&&(P=oe(c)?Ce({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):De(c)?Ze({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):xe({entry:c,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"})),P?f?Cn("div",{class:"polycss-poly-wrapper",style:{transform:f,position:"absolute",transformStyle:"preserve-3d"}},[P]):P:null}}});import{defineComponent as Ta,inject as wa,onMounted as La,onBeforeUnmount as Ra,watch as bt,ref as Oa}from"vue";import{BASE_TILE as Mn}from"@layoutit/polycss-core";var Da=150,An=4,ka=513e-6,_a=10,Ha=3,Sn=16.67,Ia=50,Tn=.1,wn=10,Ln=0,Rn=5e3,Va=.3,Fa=.05;function za(e){return e===!0?-1:e===void 0||e===!1?1:e}function Na(e,t,n,o,r){let i=za(r),s=e/An*i,d=t/An*i;return{rotX:Math.max(0,Math.min(100,n-d)),rotY:((o-s)%360+360)%360}}function On(e,t,n,o,r){let i=Math.max(.01,n),s=Math.max(.1,Math.cos(o*Math.PI/180)),d=-e/(i*Mn),a=-t/(i*Mn*s),c=-r*Math.PI/180,l=Math.cos(c),m=Math.sin(c);return{dWorldX:a*l-d*m,dWorldY:a*m+d*l}}var Dn=Ta({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:Tn},maxZoom:{type:Number,default:wn},minDistance:{type:Number,default:Ln},maxDistance:{type:Number,default:Rn},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=wa(K,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:s}=n,d=()=>({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}),a=()=>{t("change",d())},c=()=>{t("interaction-start",d())},l=()=>{t("interaction-end",d())},m=null,f={x:0,y:0},y=Oa(!1),p=null,b=null,P=null;function E(){let g=i.value;if(!g)return;let L=!1,O={x:0,y:0},N=u=>{if(e.drag&&m===null&&u.isPrimary!==!1){u.preventDefault(),m=u.pointerId,f={x:u.clientX,y:u.clientY},g.style.cursor="grabbing";try{u.target.setPointerCapture(u.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(y.value=!0),c()}},_=u=>{if(m===null||u.pointerId!==m||!e.drag)return;u.preventDefault();let h=u.clientX-f.x,v=u.clientY-f.y;f={x:u.clientX,y:u.clientY};let A=r.value,x=A.state;if(u.shiftKey){let{dWorldX:T,dWorldY:j}=On(h,v,x.zoom,x.rotX,x.rotY);A.update({target:[x.target[0]+T,x.target[1]+j,x.target[2]]})}else{let{rotX:T,rotY:j}=Na(h,v,x.rotX,x.rotY,e.invert);A.update({rotX:T,rotY:j})}s(),o.updateCameraFromRef(A),a()},H=u=>{if(m===u.pointerId){m=null,g.style.cursor=e.drag?"grab":"";try{u.target.releasePointerCapture(u.pointerId)}catch{}y.value=!1,l()}},M=u=>{u.preventDefault()},D=u=>{u.button===2&&(L=!0,O={x:u.clientX,y:u.clientY})},V=u=>{if(!L||!e.drag)return;let h=u.clientX-O.x,v=u.clientY-O.y;O={x:u.clientX,y:u.clientY};let A=r.value,x=A.state,{dWorldX:T,dWorldY:j}=On(h,v,x.zoom,x.rotX,x.rotY);A.update({target:[x.target[0]+T,x.target[1]+j,x.target[2]]}),s(),o.updateCameraFromRef(A),a()},I=u=>{u.button===2&&L&&(L=!1,l())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",N),g.addEventListener("pointermove",_),g.addEventListener("pointerup",H),g.addEventListener("pointercancel",H),g.addEventListener("contextmenu",M),g.addEventListener("mousedown",D),g.addEventListener("mousemove",V),g.addEventListener("mouseup",I),p=()=>{g.removeEventListener("pointerdown",N),g.removeEventListener("pointermove",_),g.removeEventListener("pointerup",H),g.removeEventListener("pointercancel",H),g.removeEventListener("contextmenu",M),g.removeEventListener("mousedown",D),g.removeEventListener("mousemove",V),g.removeEventListener("mouseup",I),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function C(){let g=i.value;if(!g)return;let L=!1,O=null,N=_=>{if(!e.wheel)return;_.preventDefault();let H=_.deltaMode===1?16:_.deltaMode===2?100:1,M=_.deltaY*H;_.ctrlKey?M*=_a:M*=Ha;let D=r.value;if(e.dolly){let V=e.minDistance??Ln,I=e.maxDistance??Rn,u=Math.max(V,Math.min(I,D.state.distance+M*Fa));D.update({distance:u})}else{let V=Math.exp(-M*ka),I=e.minZoom??Tn,u=e.maxZoom??wn,h=Math.max(I,Math.min(u,D.state.zoom*V));D.update({zoom:h})}s(),o.updateCameraFromRef(D),L||(L=!0,c()),a(),O!==null&&clearTimeout(O),O=setTimeout(()=>{O=null,L=!1,l()},Da)};g.addEventListener("wheel",N,{passive:!1}),b=()=>{g.removeEventListener("wheel",N),O!==null&&clearTimeout(O)}}function w(){let g=null,L=!1,O=0,N=_=>{if(L)return;let H=e.animate;if(!H){g=requestAnimationFrame(N);return}if(y.value)O=_;else{let M=Math.min(Ia,O?_-O:Sn);O=_;let V=(H.speed??Va)*(M/Sn),I=r.value,u=I.state;if(H.axis==="x"){let h=((u.rotX+V)%360+360)%360;I.update({rotX:h})}else{let h=((u.rotY+V)%360+360)%360;I.update({rotY:h})}s(),o.updateCameraFromRef(I),a()}g=requestAnimationFrame(N)};g=requestAnimationFrame(N),P=()=>{L=!0,g!==null&&cancelAnimationFrame(g),P=null}}return La(()=>{e.drag&&E(),e.wheel&&C(),e.animate&&w()}),Ra(()=>{p?.(),b?.(),P?.(),p=null,b=null}),bt(()=>e.drag,g=>{g&&!p&&E(),!g&&p&&(p(),p=null)}),bt(()=>e.wheel,g=>{g&&!b&&C(),!g&&b&&(b(),b=null)}),bt(()=>!!e.animate,g=>{g&&!P&&w(),!g&&P&&P()}),()=>null}});import{defineComponent as ja,inject as Ya,onMounted as Ua,onBeforeUnmount as Xa,watch as xt,ref as $a}from"vue";import{BASE_TILE as kn}from"@layoutit/polycss-core";var Ba=150,_n=4,Wa=513e-6,Za=10,Ka=3,Hn=16.67,Ga=50,In=.1,Vn=10,Fn=0,zn=5e3,qa=.3,Qa=.05;function Ja(e){return e===!0?-1:e===void 0||e===!1?1:e}function Nn(e,t,n,o,r){let i=Ja(r),s=e/_n*i,d=t/_n*i;return{rotX:Math.max(0,Math.min(100,n-d)),rotY:((o-s)%360+360)%360}}function ei(e,t,n,o,r){let i=Math.max(.01,n),s=Math.max(.1,Math.cos(o*Math.PI/180)),d=-e/(i*kn),a=-t/(i*kn*s),c=-r*Math.PI/180,l=Math.cos(c),m=Math.sin(c);return{dWorldX:a*l-d*m,dWorldY:a*m+d*l}}var jn=ja({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:In},maxZoom:{type:Number,default:Vn},minDistance:{type:Number,default:Fn},maxDistance:{type:Number,default:zn},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Ya(K,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:s}=n,d=()=>({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}),a=()=>{t("change",d())},c=()=>{t("interaction-start",d())},l=()=>{t("interaction-end",d())},m=null,f={x:0,y:0},y=$a(!1),p=null,b=null,P=null;function E(){let g=i.value;if(!g)return;let L=!1,O={x:0,y:0},N=u=>{if(e.drag&&m===null&&u.isPrimary!==!1){u.preventDefault(),m=u.pointerId,f={x:u.clientX,y:u.clientY},g.style.cursor="grabbing";try{u.target.setPointerCapture(u.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(y.value=!0),c()}},_=u=>{if(m===null||u.pointerId!==m||!e.drag)return;u.preventDefault();let h=u.clientX-f.x,v=u.clientY-f.y;f={x:u.clientX,y:u.clientY};let A=r.value,x=A.state;if(u.shiftKey){let{rotX:T,rotY:j}=Nn(h,v,x.rotX,x.rotY,e.invert);A.update({rotX:T,rotY:j})}else{let{dWorldX:T,dWorldY:j}=ei(h,v,x.zoom,x.rotX,x.rotY);A.update({target:[x.target[0]+T,x.target[1]+j,x.target[2]]})}s(),o.updateCameraFromRef(A),a()},H=u=>{if(m===u.pointerId){m=null,g.style.cursor=e.drag?"grab":"";try{u.target.releasePointerCapture(u.pointerId)}catch{}y.value=!1,l()}},M=u=>{u.preventDefault()},D=u=>{u.button===2&&(L=!0,O={x:u.clientX,y:u.clientY})},V=u=>{if(!L||!e.drag)return;let h=u.clientX-O.x,v=u.clientY-O.y;O={x:u.clientX,y:u.clientY};let A=r.value,x=A.state,{rotX:T,rotY:j}=Nn(h,v,x.rotX,x.rotY,e.invert);A.update({rotX:T,rotY:j}),s(),o.updateCameraFromRef(A),a()},I=u=>{u.button===2&&L&&(L=!1,l())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",N),g.addEventListener("pointermove",_),g.addEventListener("pointerup",H),g.addEventListener("pointercancel",H),g.addEventListener("contextmenu",M),g.addEventListener("mousedown",D),g.addEventListener("mousemove",V),g.addEventListener("mouseup",I),p=()=>{g.removeEventListener("pointerdown",N),g.removeEventListener("pointermove",_),g.removeEventListener("pointerup",H),g.removeEventListener("pointercancel",H),g.removeEventListener("contextmenu",M),g.removeEventListener("mousedown",D),g.removeEventListener("mousemove",V),g.removeEventListener("mouseup",I),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function C(){let g=i.value;if(!g)return;let L=!1,O=null,N=_=>{if(!e.wheel)return;_.preventDefault();let H=_.deltaMode===1?16:_.deltaMode===2?100:1,M=_.deltaY*H;_.ctrlKey?M*=Za:M*=Ka;let D=r.value;if(e.dolly){let V=e.minDistance??Fn,I=e.maxDistance??zn,u=Math.max(V,Math.min(I,D.state.distance+M*Qa));D.update({distance:u})}else{let V=Math.exp(-M*Wa),I=e.minZoom??In,u=e.maxZoom??Vn,h=Math.max(I,Math.min(u,D.state.zoom*V));D.update({zoom:h})}s(),o.updateCameraFromRef(D),L||(L=!0,c()),a(),O!==null&&clearTimeout(O),O=setTimeout(()=>{O=null,L=!1,l()},Ba)};g.addEventListener("wheel",N,{passive:!1}),b=()=>{g.removeEventListener("wheel",N),O!==null&&clearTimeout(O)}}function w(){let g=null,L=!1,O=0,N=_=>{if(L)return;let H=e.animate;if(!H){g=requestAnimationFrame(N);return}if(y.value)O=_;else{let M=Math.min(Ga,O?_-O:Hn);O=_;let V=(H.speed??qa)*(M/Hn),I=r.value,u=I.state;if(H.axis==="x"){let h=((u.rotX+V)%360+360)%360;I.update({rotX:h})}else{let h=((u.rotY+V)%360+360)%360;I.update({rotY:h})}s(),o.updateCameraFromRef(I),a()}g=requestAnimationFrame(N)};g=requestAnimationFrame(N),P=()=>{L=!0,g!==null&&cancelAnimationFrame(g),P=null}}return Ua(()=>{e.drag&&E(),e.wheel&&C(),e.animate&&w()}),Xa(()=>{p?.(),b?.(),P?.(),p=null,b=null}),xt(()=>e.drag,g=>{g&&!p&&E(),!g&&p&&(p(),p=null)}),xt(()=>e.wheel,g=>{g&&!b&&C(),!g&&b&&(b(),b=null)}),xt(()=>!!e.animate,g=>{g&&!P&&w(),!g&&P&&P()}),()=>null}});import{defineComponent as ti,h as Qe,inject as Yn,onBeforeUnmount as Un,onMounted as Ct,ref as _e,computed as Se}from"vue";import{arrowPolygons as ni,eulerXYZFromQuat as oi,planePolygons as ri,quatFromAxisAngle as ai,quatFromEulerXYZ as ii,quatMultiply as si,ringQuadPolygons as li}from"@layoutit/polycss-core";var Je="#ff3653",et="#8adb00",tt="#2c8fff",ci=.6,ui=.8,di=1,me=50,Xn=60,mi=.6,fi=.0125,yi=.15,pi=.04,gi=1,$n=.02,Et=1.04,hi=.1,vi=.25,Qn=1e-4,He={0:1,1:0,2:2},Bn=[{cssAxis:0,sign:1,key:"x",color:Je},{cssAxis:0,sign:-1,key:"-x",color:Je},{cssAxis:1,sign:1,key:"y",color:et},{cssAxis:1,sign:-1,key:"-y",color:et},{cssAxis:2,sign:1,key:"z",color:tt},{cssAxis:2,sign:-1,key:"-z",color:tt}],Wn=[{cssAxis:0,key:"x",color:Je},{cssAxis:1,key:"y",color:et},{cssAxis:2,key:"z",color:tt}],Zn=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:tt},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:et},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Je}];function Mt(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),i=parseInt(n[3],16);return`rgba(${o}, ${r}, ${i}, ${t})`}function nt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function Pi(e){return e.replace("-","")[0]}function At(e,t,n,o){let r=n*Math.PI/180,i=o*Math.PI/180,s=[0,0,0];s[e]=t;let d=s[0]*Math.sin(i)+s[1]*Math.cos(i),a=s[2];return d*Math.sin(r)+a*Math.cos(r)<0}function bi(e){if(e.length===0)return Xn;let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,s=-1/0;for(let d of e)for(let a of d.vertices)a[0]<t&&(t=a[0]),a[0]>r&&(r=a[0]),a[1]<n&&(n=a[1]),a[1]>i&&(i=a[1]),a[2]<o&&(o=a[2]),a[2]>s&&(s=a[2]);return Number.isFinite(t)?Math.max(r-t,i-n,s-o)*me*mi:Xn}function xi(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,s=-1/0;for(let d of e)for(let a of d.vertices)a[0]<t&&(t=a[0]),a[0]>r&&(r=a[0]),a[1]<n&&(n=a[1]),a[1]>i&&(i=a[1]),a[2]<o&&(o=a[2]),a[2]>s&&(s=a[2]);return Number.isFinite(t)?[(n+i)/2*me,(t+r)/2*me,(o+s)/2*me]:[0,0,0]}function Kn(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(),i=o.getBoundingClientRect();e.wrapper.removeChild(o);let s=(i.left-r.left)/t,d=(i.top-r.top)/t,a=s*s+d*d;if(a<Qn)return;let c=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let l=f=>{let y=f.clientX-e.startClientX,p=f.clientY-e.startClientY,b=(y*s+p*d)/a;b=nt(b,e.translationSnap);let P=[c[0]+b*n[0],c[1]+b*n[1],c[2]+b*n[2]];e.onObjectChange?.({object:e.target,position:P}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m);let f=y=>{y.stopPropagation(),y.stopImmediatePropagation()};window.addEventListener("click",f,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",f,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",l),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function Gn(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(m){let f=e.wrapper.ownerDocument.createElement("div");f.style.position="absolute",f.style.left="0",f.style.top="0",f.style.width="0",f.style.height="0",f.style.transform=`translate3d(${m[0]*o}px, ${m[1]*o}px, ${m[2]*o}px)`,e.wrapper.appendChild(f);let y=e.wrapper.getBoundingClientRect(),p=f.getBoundingClientRect();return e.wrapper.removeChild(f),{x:(p.left-y.left)/o,y:(p.top-y.top)/o}}let i=r(t),s=r(n),d=i.x*s.y-s.x*i.y;if(Math.abs(d)<Qn)return;let a=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let c=m=>{let f=m.clientX-e.startClientX,y=m.clientY-e.startClientY,p=(s.y*f-s.x*y)/d,b=(-i.y*f+i.x*y)/d;p=nt(p,e.translationSnap),b=nt(b,e.translationSnap);let P=[a[0]+p*t[0]+b*n[0],a[1]+p*t[1]+b*n[1],a[2]+p*t[2]+b*n[2]];e.onObjectChange?.({object:e.target,position:P}),e.onChange?.()},l=()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",c),window.addEventListener("pointerup",l),window.addEventListener("pointercancel",l)}function qn(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),i=0,s=e.target.getRotation()??[0,0,0],d=ii(s);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let a=l=>{let m=Math.atan2(l.clientY-o,l.clientX-n),f=m-r;f>Math.PI?f-=2*Math.PI:f<-Math.PI&&(f+=2*Math.PI),i+=f,r=m;let y=i*180/Math.PI;y=nt(y,e.rotationSnap);let p=[0,0,0];p[e.cssAxis]=1;let b=ai(p,y*Math.PI/180),P=oi(si(b,d));e.onObjectChange?.({object:e.target,rotation:P}),e.onChange?.()},c=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",c),window.removeEventListener("pointercancel",c);let l=m=>{m.stopPropagation(),m.stopImmediatePropagation()};window.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",l,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",a),window.addEventListener("pointerup",c),window.addEventListener("pointercancel",c)}function Ci(e){return!!e&&typeof e=="object"&&"value"in e}function Ei(e){return e?Ci(e)?e.value??null:e:null}var Jn=ti({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=_e(null),o=_e(null),r=_e(new Map),i=Se(()=>Ei(e.object)),s=_e(0);Ct(()=>{s.value++});let d=_e(0),a=Yn(K,void 0),c=null;Ct(()=>{let u=a?.store;u&&(c=u.subscribe(()=>{d.value++}))}),Un(()=>{c?.()});function l(){d.value;let u=a?.store.getState().cameraState;return{rotX:u?.rotX??65,rotY:u?.rotY??45}}let m=Se(()=>(s.value,bi(i.value?.getPolygons()??[]))),f=Se(()=>m.value*e.size);function y(u){return o.value===u?di:n.value===u?ui:ci}function p(){t("change")}function b(u){t("objectChange",u)}function P(u){t("draggingChanged",u)}function E(){t("mouseDown")}function C(){t("mouseUp")}let w=Yn(K,void 0),g=null;Ct(()=>{let u=w?.cameraElRef.value;if(!u)return;let h=v=>{let A=i.value;if(!A||!e.enabled||v.target?.closest(".polycss-transform-gizmo"))return;let T={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let R of Zn){let k=["x","y","z"][R.axisA],Y=["x","y","z"][R.axisB];if(!T[k]||!T[Y])continue;let X=document.querySelector(`.polycss-transform-plane--${R.key}`);if(!X||!Me(X,v.clientX,v.clientY))continue;v.preventDefault(),v.stopPropagation();let $=X.closest("[data-poly-transform-controls]");if(!$)return;o.value=R.key,Gn({axisA:R.axisA,axisB:R.axisB,probeDistanceCss:f.value,wrapper:$,target:A,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:z=>{z||(o.value=null),P(z)}});return}let j=e.mode==="translate"?Bn:Wn;for(let R of j){let k=R.key.replace("-","")[0];if(!T[k])continue;let Y=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${R.key}`);if(!Y||!(e.mode==="rotate"?Me(Y,v.clientX,v.clientY):Me(Y,v.clientX,v.clientY)))continue;v.preventDefault(),v.stopPropagation();let $=Y.closest("[data-poly-transform-controls]");if(!$)return;if(o.value=R.key,e.mode==="translate"){let z=R;Kn({cssAxis:z.cssAxis,sign:z.sign,shaftLengthCss:f.value,wrapper:$,target:A,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:F=>{F||(o.value=null),P(F)}})}else qn({cssAxis:R.cssAxis,wrapper:$,target:A,startClientX:v.clientX,startClientY:v.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:z=>{z||(o.value=null),P(z)}});return}};u.addEventListener("pointerdown",h),g=()=>u.removeEventListener("pointerdown",h)}),Un(()=>{g?.()});let L=Se(()=>{if(e.mode!=="translate")return[];s.value;let h=f.value/me,{rotX:v,rotY:A}=l();return Bn.filter(x=>({x:e.showX,y:e.showY,z:e.showZ})[Pi(x.key)]).map(x=>{let T=y(x.key),j=At(x.cssAxis,x.sign,v,A);return{spec:x,polygons:ni({axis:He[x.cssAxis],sign:x.sign,shaftLength:h,shaftHalfThickness:h*fi,headLength:h*yi,headHalfThickness:h*pi,color:Mt(x.color,T),shaft:!j})}})}),O=Se(()=>{if(e.mode!=="translate")return[];s.value;let h=f.value/me,v={x:e.showX,y:e.showY,z:e.showZ},A=["x","y","z"],{rotX:x,rotY:T}=l(),j=h*vi;return Zn.filter(R=>v[A[R.axisA]]&&v[A[R.axisB]]).map(R=>{let k=y(R.key),Y=He[R.perpAxis],X=(Y+1)%3,$=(Y+2)%3,z=He[X],F=He[$],S=At(z,1,x,T)?-1:1,U=At(F,1,x,T)?-1:1;return{spec:R,polygons:ri({axis:Y,size:h*hi,offset:[S*j,U*j],color:Mt(R.color,k)})}})}),N=Se(()=>{if(e.mode!=="rotate")return[];s.value;let v=f.value*gi/me*Et;return Wn.filter(A=>({x:e.showX,y:e.showY,z:e.showZ})[A.key]).map(A=>{let x=y(A.key);return{spec:A,polygons:li({axis:He[A.cssAxis],outerRadius:v,color:Mt(A.color,x)})}})}),_=(1-$n)/Et,H=(1+$n)/Et;function M(u){return h=>{if(!e.enabled)return;let v=i.value;if(!v)return;h.stopPropagation();let x=h.eventObject.element?.closest("[data-poly-transform-controls]");x&&(o.value=u.key,Kn({cssAxis:u.cssAxis,sign:u.sign,shaftLengthCss:f.value,wrapper:x,target:v,startClientX:h.nativeEvent.clientX,startClientY:h.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:T=>{T||(o.value=null),P(T)}}))}}function D(u){return h=>{if(!e.enabled)return;let v=i.value;if(!v)return;h.stopPropagation();let x=h.eventObject.element?.closest("[data-poly-transform-controls]");x&&(o.value=u.key,Gn({axisA:u.axisA,axisB:u.axisB,probeDistanceCss:f.value,wrapper:x,target:v,startClientX:h.nativeEvent.clientX,startClientY:h.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:T=>{T||(o.value=null),P(T)}}))}}function V(u){return h=>{if(!e.enabled)return;let v=i.value;if(!v)return;let A=h.eventObject.element;h.stopPropagation();let x=A?.closest("[data-poly-transform-controls]");x&&(o.value=u.key,qn({cssAxis:u.cssAxis,wrapper:x,target:v,startClientX:h.nativeEvent.clientX,startClientY:h.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:T=>{T||(o.value=null),P(T)}}))}}function I(u){return{onPointerOver:()=>{n.value=u},onPointerOut:()=>{n.value===u&&(n.value=null)}}}return()=>{let u=i.value;if(!u)return null;let h=u.getPosition()??[0,0,0],v=xi(u.getPolygons()),A=h[0]+v[0],x=h[1]+v[1],T=h[2]+v[2],j={transform:`translate3d(${A}px, ${x}px, ${T}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},R=e.mode==="translate"?[...L.value.map(({spec:k,polygons:Y})=>Qe(Q,{key:`arrow-${k.key}`,polygons:Y,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${k.key}`,textureLighting:"baked",onPointerDown:M(k),...I(k.key)})),...O.value.map(({spec:k,polygons:Y})=>Qe(Q,{key:`plane-${k.key}`,polygons:Y,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${k.key}`,textureLighting:"baked",onPointerDown:D(k),...I(k.key)}))]:N.value.map(({spec:k,polygons:Y})=>Qe(Q,{key:k.key,polygons:Y,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${k.key}`,style:{"--ring-inner-ratio":_,"--ring-outer-ratio":H},textureLighting:"baked",onPointerDown:V(k),...I(k.key)}));return Qe("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:j},R)}}});import{defineComponent as Mi,inject as Ai,onMounted as Si,onBeforeUnmount as Ti,watch as wi}from"vue";import{BASE_TILE as Li}from"@layoutit/polycss-core";var Ri={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 St(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 to=new Set(["KeyW","ArrowUp"]),no=new Set(["KeyS","ArrowDown"]),oo=new Set(["KeyA","ArrowLeft"]),ro=new Set(["KeyD","ArrowRight"]),ao=new Set(["Space"]),Tt=new Set(["ControlLeft","ControlRight"]);function eo(e){return to.has(e)||no.has(e)||oo.has(e)||ro.has(e)||ao.has(e)||Tt.has(e)}function Oi(){return{change:[],start:[],end:[]}}function Te(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var io=Mi({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=Ai(K,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:i,cameraElRef:s,applyTransformDirect:d}=o,a=St(Ri,e),c=[0,0,0],l=null,m=0,f=!1,y=!1,p=!1,b=new Set,P=0,E=0,C=Oi();function w(u,h){let v=u*Math.PI/180,A=h*Math.PI/180;return[-Math.sin(v)*Math.cos(A),-Math.sin(v)*Math.sin(A),-Math.cos(v)]}function g(){let u=s.value,h=u?getComputedStyle(u).perspective:"",v=parseFloat(h);return(Number.isFinite(v)&&v>0?v:8e3)/Li}function L(){let u=i.value.state,h=w(u.rotX??90,u.rotY??0),v=g();return[c[0]+h[0]*v,c[1]+h[1]*v,c[2]+h[2]*v]}function O(){let u=L(),h=i.value;h.update({target:u}),d(),r.updateCameraFromRef(h)}let N=.05;function _(u){if(l===null||f)return;let h=Math.min(N,m?(u-m)/1e3:.0167);if(m=u,a.enabled){let v=!1,A=i.value.state;if(a.moveEnabled){let R=0,k=0;for(let Y of b)to.has(Y)?R+=1:no.has(Y)?R-=1:ro.has(Y)?k+=1:oo.has(Y)&&(k-=1);if(R!==0||k!==0){let X=(A.rotY??0)*Math.PI/180,$=-Math.cos(X),z=-Math.sin(X),F=-Math.sin(X),S=Math.cos(X),U=Math.hypot(R,k)||1,B=a.moveSpeed*h;c[0]+=($*R+F*k)/U*B,c[1]+=(z*R+S*k)/U*B,v=!0}}let T=a.crouchEnabled&&(b.has("ControlLeft")||b.has("ControlRight"))?a.crouchHeight:a.eyeHeight;a.jumpEnabled&&(P!==0||E>0)?(P-=a.gravity*h,E+=P*h,E<=0&&(E=0,P=0)):a.jumpEnabled||(E=0,P=0);let j=a.groundZ+T+E;if(Math.abs(c[2]-j)>1e-4&&(c[2]=j,v=!0),v){let R=L(),k=i.value;k.update({target:R}),d(),r.updateCameraFromRef(k),Te(C,"change");try{t("change",[c[0],c[1],c[2]])}catch{}}}l=requestAnimationFrame(_)}function H(){l!==null||f||(m=0,l=requestAnimationFrame(_))}function M(){l!==null&&(cancelAnimationFrame(l),l=null)}let D=null;function V(){let u=s.value;if(!u)return;let h=u.ownerDocument??document,v=h.defaultView??globalThis,A=()=>{if(!(!a.enabled||!a.lookEnabled||f||y))try{u.requestPointerLock()}catch{}},x=()=>{let z=h.pointerLockElement===u;if(z!==y){if(y=z,z){p=!0,Te(C,"start");try{t("interaction-start",[c[0],c[1],c[2]])}catch{}}else if(p){p=!1,Te(C,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}}},T=z=>{if(!y||f||!a.enabled||!a.lookEnabled)return;let F=z.movementX??0,S=z.movementY??0;if(F===0&&S===0)return;let U=i.value,B=U.state,re=a.lookSensitivity,ce=a.invertY?-1:1,se=(((B.rotY??0)-F*re)%360+360)%360,W=(B.rotX??90)-S*re*ce;W<a.minPitch?W=a.minPitch:W>a.maxPitch&&(W=a.maxPitch);let ue=w(W,se),we=g(),rt=[c[0]+ue[0]*we,c[1]+ue[1]*we,c[2]+ue[2]*we];U.update({rotX:W,rotY:se,target:rt}),d(),r.updateCameraFromRef(U),Te(C,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},j=z=>{if(!(!a.enabled||f)&&eo(z.code)&&!(!y&&!a.moveEnabled)){if(ao.has(z.code)){if(!a.jumpEnabled)return;z.preventDefault(),!b.has(z.code)&&P===0&&E===0&&(P=a.jumpVelocity),b.add(z.code);return}Tt.has(z.code)&&!a.crouchEnabled||!a.moveEnabled&&!Tt.has(z.code)||(z.preventDefault(),b.add(z.code))}},R=z=>{eo(z.code)&&b.delete(z.code)},k=()=>{b.clear()};u.addEventListener("click",A),h.addEventListener("pointerlockchange",x),h.addEventListener("mousemove",T),v.addEventListener("keydown",j),v.addEventListener("keyup",R),v.addEventListener("blur",k);let Y=v.getComputedStyle(u).perspective,X=parseFloat(Y),$=Number.isFinite(X)&&X>0?X:2e3;u.style.setProperty("--polycss-fpv-perspective",`${$}px`),u.classList.add("polycss-fpv-host"),D=()=>{if(u.removeEventListener("click",A),h.removeEventListener("pointerlockchange",x),h.removeEventListener("mousemove",T),v.removeEventListener("keydown",j),v.removeEventListener("keyup",R),v.removeEventListener("blur",k),u.style.cursor="",u.classList.remove("polycss-fpv-host"),u.style.removeProperty("--polycss-fpv-perspective"),b.clear(),y)try{h.exitPointerLock()}catch{}}}n({update(u){a=St(a,u);let h=s.value;h&&!f&&(h.style.cursor=a.lookEnabled?"crosshair":"")},resume(){if(!f)return;f=!1;let u=s.value;u&&(u.style.cursor=a.lookEnabled?"crosshair":""),H()},pause(){if(f)return;f=!0,M();let u=s.value;if(u&&(u.style.cursor=""),p){p=!1,Te(C,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}},destroy(){f=!0,M()},lock(){if(!a.enabled||!a.lookEnabled||f)return;let u=s.value;try{u?.requestPointerLock()}catch{}},unlock(){if(y){let u=s.value;try{u?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return y},getOrigin(){return[c[0],c[1],c[2]]},setOrigin(u){c[0]=u[0],c[1]=u[1],c[2]=u[2],O(),Te(C,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},addEventListener(u,h){let v=C[u];v.includes(h)||v.push(h)},removeEventListener(u,h){let v=C[u],A=v.indexOf(h);A>=0&&v.splice(A,1)},hasEventListener(u,h){return C[u].includes(h)}}),Si(()=>{let u=s.value;if(!u)return;f=!1,y=!1,p=!1,b.clear(),P=0,E=0;let v=i.value.state.target??[0,0,0];c[0]=v[0],c[1]=v[1],c[2]=a.groundZ+a.eyeHeight,O(),u.style.cursor=a.lookEnabled?"crosshair":"",V(),H()}),Ti(()=>{f=!0,M(),D?.(),D=null});let I=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let u of I)wi(()=>e[u],()=>{a=St(a,e);let h=s.value;h&&!f&&(h.style.cursor=a.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as Di,h as ki,inject as wt,onBeforeUnmount as _i,onMounted as Hi,provide as Ii,reactive as Vi,ref as Fi,computed as zi}from"vue";var Ie=Symbol("polycss.selection"),so=Di({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=Vi({selected:[]}),r=zi(()=>o.selected);function i(l){let m=e.filter?e.filter(l):l;o.selected=m,t("change",m)}let s={get selected(){return o.selected},set:l=>i(l),add:l=>{e.multiple?o.selected.includes(l)||i([...o.selected,l]):i([l])},remove:l=>{o.selected.includes(l)&&i(o.selected.filter(m=>m!==l))},toggle:l=>{o.selected.includes(l)?i(o.selected.filter(m=>m!==l)):e.multiple?i([...o.selected,l]):i([l])},clear:()=>i([]),has:l=>o.selected.includes(l)};Ii(Ie,{selected:r,api:s});let d=wt(K,void 0),a=(l,m)=>vt(l,m,f=>!f.closest("[data-poly-transform-controls]")),c=null;return Hi(()=>{let l=d?.cameraElRef.value;if(!l)return;let m=f=>{if(f.target?.closest("[data-poly-transform-controls]"))return;let p=Ee(f.target)??a(f.clientX,f.clientY);if(!p){t("pointerMissed",f),e.clearOnMiss&&i([]);return}e.multiple&&(f.shiftKey||f.metaKey||f.ctrlKey)?s.toggle(p):o.selected.length===1&&o.selected[0]===p?i([]):i([p])};l.addEventListener("click",m),c=()=>l.removeEventListener("click",m)}),_i(()=>{c?.()}),()=>ki("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function lo(){let e=wt(Ie,void 0);return e?e.selected:Fi([])}function co(){let e=wt(Ie,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Ni,h as ji,computed as Yi}from"vue";import{axesHelperPolygons as Ui}from"@layoutit/polycss-core";var uo=Ni({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=Yi(()=>Ui({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>ji(Q,{polygons:t.value})}});import{defineComponent as Xi,h as $i,computed as Lt}from"vue";import{octahedronPolygons as Bi}from"@layoutit/polycss-core";var Rt=50,mo=Xi({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=Lt(()=>e.color??e.light.color??"#ffd54a"),n=Lt(()=>Bi({center:[0,0,0],size:e.size,color:t.value})),o=Lt(()=>{let r=e.light.direction,i=r[0],s=r[1],d=r[2],a=Math.hypot(i,s,d)||1,c=e.target?.[0]??0,l=e.target?.[1]??0,m=e.target?.[2]??0,f=c+s/a*e.distance,y=l+i/a*e.distance,p=m+d/a*e.distance;return[y*Rt,f*Rt,p*Rt]});return()=>$i(Q,{polygons:n.value,position:o.value})}});import{ref as fo,watch as Wi,onUnmounted as Zi,computed as ot}from"vue";import{createPolyAnimationMixer as Ki}from"@layoutit/polycss-core";function fe(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function Gi(e,t,n){let o=fo(null),r=null,i=null,s=null,d=fo(0);function a(){return n==null?o.value:fe(n)??o.value}function c(){i!==null&&(cancelAnimationFrame(i),i=null),s=null}function l(){c(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,d.value++)}function m(){if(i!==null)return;function C(w){if(s===null){s=w,i=requestAnimationFrame(C);return}let g=(w-s)/1e3;s=w,r?.update(g),i=requestAnimationFrame(C)}i=requestAnimationFrame(C)}function f(){l();let C=fe(e),w=fe(t);if(!C||C.length===0||!w)return;let g=a();g&&(r=Ki(g,w),d.value++,m())}let y=Wi(()=>{let C=fe(e),w=fe(t),g=n!=null?fe(n):o.value;return{c:C,ctrl:w,r:g}},()=>f(),{immediate:!0,deep:!1});Zi(()=>{y(),l()});let p=ot(()=>fe(e)??[]),b=ot(()=>p.value.map(C=>C.name)),P=ot(()=>(d.value,r)),E=ot(()=>{d.value;let C=p.value,w={};for(let g of C)Object.defineProperty(w,g.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(g.name)}catch{return null}}});return w});return{ref:o,mixer:P,clips:p,names:b,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as Rc,VOXEL_CAMERA_CULL_AXIS_EPS as Oc,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Dc,normalizePolygons as kc,mergePolygons as _c,coverPlanarPolygons as Hc,optimizeMeshPolygons as Ic,cullInteriorPolygons as Vc,cameraCullNormalGroups as Fc,cameraCullNormalGroupsFromPolygons as zc,cameraCullNormalKey as Nc,cameraCullVisibleSignature as jc,cameraFacingDepth as Yc,isAxisAlignedSurfaceNormal as Uc,isVoxelCameraCullableNormalGroups as Xc,normalFacesCamera as $c,polygonCssSurfaceNormal as Bc,polygonFacesCamera as Wc,parseObj as Zc,parseMtl as Kc,parseGltf as Gc,bakeSolidTextureSamples as qc,bakeSolidTextureSampledPolygons as Qc,loadMesh as Jc,createIsometricCamera as eu,parseVox as tu,polygonFaces as nu,computeTexturePaintMetrics as ou,computeShapeLighting as ru,parseColor as au,parsePureColor as iu,parseHexColor as su,parseRgbColor as lu,formatColor as cu,clampChannel as uu,shadeColor as du,rotateVec3 as mu,inverseRotateVec3 as fu,axesHelperPolygons as yu,boxPolygons as pu,arrowPolygons as gu,ringPolygons as hu,octahedronPolygons as vu,buildSceneContext as Pu,computeSceneBbox as bu,BASE_TILE as xu,DEFAULT_CAMERA_STATE as Cu,DEFAULT_PROJECTION as Eu,normalizeInvertMultiplier as Mu,createPolyAnimationMixer as Au,LoopOnce as Su,LoopRepeat as Tu,LoopPingPong as wu}from"@layoutit/polycss-core";export{xu as BASE_TILE,Rc as CAMERA_BACKFACE_CULL_EPS,Cu as DEFAULT_CAMERA_STATE,Eu as DEFAULT_PROJECTION,Su as LoopOnce,wu as LoopPingPong,Tu as LoopRepeat,En as Poly,uo as PolyAxesHelper,Le as PolyCamera,K as PolyCameraContextKey,mo as PolyDirectionalLightHelper,io as PolyFirstPersonControls,bn as PolyGround,jn as PolyMapControls,Q as PolyMesh,Dn as PolyOrbitControls,Ht as PolyOrthographicCamera,Le as PolyPerspectiveCamera,fn as PolyScene,so as PolySelect,Ie as PolySelectionContextKey,Jn as PolyTransformControls,Oc as VOXEL_CAMERA_CULL_AXIS_EPS,Dc as VOXEL_CAMERA_CULL_NORMAL_LIMIT,gu as arrowPolygons,yu as axesHelperPolygons,Qc as bakeSolidTextureSampledPolygons,qc as bakeSolidTextureSamples,pu as boxPolygons,Pu as buildSceneContext,Fc as cameraCullNormalGroups,zc as cameraCullNormalGroupsFromPolygons,Nc as cameraCullNormalKey,jc as cameraCullVisibleSignature,Yc as cameraFacingDepth,uu as clampChannel,bu as computeSceneBbox,ru as computeShapeLighting,ou as computeTexturePaintMetrics,Hc as coverPlanarPolygons,eu as createIsometricCamera,Au as createPolyAnimationMixer,Vc as cullInteriorPolygons,vt as findMeshUnderPoint,Ee as findPolyMeshHandle,cu as formatColor,ze as injectPolyBaseStyles,fu as inverseRotateVec3,Uc as isAxisAlignedSurfaceNormal,Xc as isVoxelCameraCullableNormalGroups,Jc as loadMesh,_c as mergePolygons,$c as normalFacesCamera,Mu as normalizeInvertMultiplier,kc as normalizePolygons,vu as octahedronPolygons,Ic as optimizeMeshPolygons,au as parseColor,Gc as parseGltf,su as parseHexColor,Kc as parseMtl,Zc as parseObj,iu as parsePureColor,lu as parseRgbColor,tu as parseVox,Me as pointInMeshElement,Bc as polygonCssSurfaceNormal,nu as polygonFaces,Wc as polygonFacesCamera,hu as ringPolygons,mu as rotateVec3,du as shadeColor,Gi as usePolyAnimation,ye as usePolyCamera,Ca as usePolyMaterial,Ge as usePolyMesh,Fe as usePolySceneContext,lo as usePolySelect,co as usePolySelectionApi};
|
|
362
|
+
`;import{parsePureColor as ku}from"@layoutit/polycss-core";import{inject as da}from"vue";var Yt=Symbol("polycss/scene-context");function Rn(){return da(Yt,null)}import{isSolidTrianglePlan as Xe,isProjectiveQuadPlan as je,buildTextureEdgeRepairSets as vt,buildSeamBleedPolygonEdges as St,buildSeamBleedPolygonSet as Ac,cssBorderShapeForPlan as Lc}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as ma,safariCssProjectiveUnsupported as Dn,parseHex as fa,rgbKey as pa}from"@layoutit/polycss-core";function Xt(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 jt(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Dn(n):!0}function On(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 kn(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Dn(n):!0}function In(e,t,n,o,r){let i=new Set(o?.disable??[]);return ma(e,t,i,{solidTriangleSupported:jt(n),projectiveQuadSupported:kn(n),cornerShapeSupported:On(n),borderShapeSupported:Xt(n)},fa,pa,r)}function $t(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let i=n.size>0?{disable:Array.from(n)}:void 0;return In(e,t,r,i)}function we(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 Xt(t)}function Re(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!n)return!0;let o=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(n);return!/\bVersion\/[\d.]+.*\bSafari\//.test(n)||o}return jt(t)}import{filterAtlasPlans as ya}from"@layoutit/polycss-core";function Ut(e,t,n,o){return ya(e,t,n,{solidTriangleSupported:Re(o),borderShapeSupported:we(o)})}import{packTextureAtlasPlansWithScaleCore as ga}from"@layoutit/polycss-core";function Fn(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 Wt(e,t,n){return ga(e,t,Fn(n))}import{expandClipPoints as ha,tintToCss as Pa,TEXTURE_TRIANGLE_BLEED as xa,TEXTURE_EDGE_REPAIR_ALPHA_MIN as ba,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as va,TEXTURE_EDGE_REPAIR_RADIUS as Vn}from"@layoutit/polycss-core";var De=new Map;function Nn(e){let t=De.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}),De.set(e,t),t.then(()=>{De.get(e)===t&&De.delete(e)},()=>{De.get(e)===t&&De.delete(e)})),t}function ae(e,t,n=1,o=0,r=0,i=1,a=0,u=0){e.setTransform(n*t,o*t,r*t,i*t,a*t,u*t)}function Yn(e,t,n,o,r,i,a){Math.abs(i.r-1)<.001&&Math.abs(i.g-1)<.001&&Math.abs(i.b-1)<.001||(e.save(),ae(e,a),e.globalCompositeOperation="multiply",e.fillStyle=Pa(i),e.fillRect(t,n,o,r),e.restore())}function Xn(e,t,n,o,r,i,a){let u=t.naturalWidth||t.width||1,l=t.naturalHeight||t.height||1,c=Math.max(r/u,i/l),m=u*c,f=l*c;ae(e,a),e.drawImage(t,n+(r-m)/2,o+(i-f)/2,m,f)}function Ye(e,t){return Math.max(0,Math.min(t,e))}function qt(e,t,n,o,r,i,a,u){let l=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,m=Ye(Math.min(n.minU,n.maxU)*l,l),f=Ye(Math.max(n.minU,n.maxU)*l,l),d=Ye(Math.min(n.minV,n.maxV)*c,c),h=Ye(Math.max(n.minV,n.maxV)*c,c),p=Math.floor(m),P=Math.floor(d),x=Math.ceil(f)-p,T=Math.ceil(h)-P;x<1&&(p=Math.floor(Ye((n.minU+n.maxU)/2*l,l-1)),x=1),T<1&&(P=Math.floor(Ye((n.minV+n.maxV)/2*c,c-1)),T=1),p=Math.max(0,Math.min(l-1,p)),P=Math.max(0,Math.min(c-1,P)),x=Math.max(1,Math.min(l-p,x)),T=Math.max(1,Math.min(c-P,T)),ae(e,u),e.drawImage(t,p,P,x,T,o,r,i,a)}function jn(e){return e==="repeat"||e==="mirrored-repeat"}function _n(e,t){return jn(e)?Math.floor(t):0}function Bn(e,t){return jn(e)?Math.ceil(t)-1:0}function zn(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function Hn(e,t,n,o,r,i,a){let u=r?_n(i,r.minU):0,l=r?Bn(i,r.maxU):0,c=r?_n(a,r.minV):0,m=r?Bn(a,r.maxV):0;for(let f=u;f<=l;f++)for(let d=c;d<=m;d++){let h=zn(i,f),p=zn(a,d);if(!h&&!p){e.drawImage(t,f*n,d*o);continue}e.save(),e.translate((h?f+1:f)*n,(p?d+1:d)*o),e.scale(h?-1:1,p?-1:1),e.drawImage(t,0,0),e.restore()}}function pt(e,t,n,o){for(let r=0;r<o.length;r+=2){let i=t+o[r],a=n+o[r+1];r===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath()}function nt(e,t,n,o,r,i){for(let a=0;a<o.length;a+=2){let u=t+o[a]+r,l=n+o[a+1]+i;a===0?e.moveTo(u,l):e.lineTo(u,l)}e.closePath()}function $n(e,t,n,o){ae(e,o),e.beginPath(),pt(e,t.x,t.y,t.screenPts),e.clip(),ae(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function ft(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(ae(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function Un(e,t,n,o,r=0,i=0){if(t.textureTriangles?.length){let a=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1;for(let l of t.textureTriangles){let c=ha(l.screenPts,xa);e.save(),ae(e,o),e.beginPath(),nt(e,t.x,t.y,c,r,i),e.clip(),ft(e,t,o,r,i),l.uvAffine?(ae(e,o,l.uvAffine.a/a,l.uvAffine.c/a,l.uvAffine.b/u,l.uvAffine.d/u,t.x+l.uvAffine.e+r,t.y+l.uvAffine.f+i),Hn(e,n,a,u,l.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):l.uvSampleRect&&qt(e,n,l.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let a=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,l=t.polygon.textureAlphaMode==="opaque";l&&(e.save(),ae(e,o),e.beginPath(),nt(e,t.x,t.y,t.screenPts,r,i),e.clip(),ft(e,t,o,r,i)),ae(e,o,t.uvAffine.a/a,t.uvAffine.c/a,t.uvAffine.b/u,t.uvAffine.d/u,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+i),Hn(e,n,a,u,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),l&&e.restore()}else if(t.uvSampleRect){let a=t.polygon.textureAlphaMode==="opaque";a&&(e.save(),ae(e,o),e.beginPath(),nt(e,t.x,t.y,t.screenPts,r,i),e.clip(),ft(e,t,o,r,i)),qt(e,n,t.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o),a&&e.restore()}else{let a=t.polygon.textureAlphaMode==="opaque";a&&(e.save(),ae(e,o),e.beginPath(),nt(e,t.x,t.y,t.screenPts,r,i),e.clip(),ft(e,t,o,r,i)),Xn(e,n,t.x+r,t.y+i,t.canvasW,t.canvasH,o),a&&e.restore()}}function Sa(e,t,n,o,r,i){let a=r-n,u=i-o,l=a*a+u*u;if(l<=1e-9)return Math.hypot(e-n,t-o);let c=Math.max(0,Math.min(1,((e-n)*a+(t-o)*u)/l));return Math.hypot(e-(n+a*c),t-(o+u*c))}function Ca(e,t,n,o){let r=1/0,i=n.length/2;for(let a of o){if(a<0||a>=i)continue;let u=a*2,l=(a+1)%i*2;r=Math.min(r,Sa(e,t,n[u],n[u+1],n[l],n[l+1]))}return r}function Ea(e,t,n,o,r,i){let a=Math.max(0,o-i),u=Math.min(t-1,o+i),l=Math.max(0,r-i),c=Math.min(n-1,r+i),m=null,f=1/0;for(let d=l;d<=c;d++)for(let h=a;h<=u;h++){if(h===o&&d===r)continue;let p=h-o,P=d-r,x=p*p+P*P;if(x>i*i||x>=f)continue;let T=(d*t+h)*4;e[T+3]<va||(m=T,f=x)}return m}function Wn(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)),i=Math.max(0,Math.floor(t.y*n)),a=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),u=Math.max(1,Math.min(o.height-i,Math.ceil(t.canvasH*n)));if(a<=0||u<=0)return;let l;try{l=e.getImageData(r,i,a,u)}catch{return}let c=l.data,m=new Uint8ClampedArray(c),f=Math.max(Vn,Vn/n),d=Math.max(2,Math.ceil(f*n)+1),h=!1;for(let p=0;p<u;p++)for(let P=0;P<a;P++){let x=(p*a+P)*4,T=c[x+3];if(T<ba||T===255)continue;let A=(r+P+.5)/n-t.x,L=(i+p+.5)/n-t.y;if(Ca(A,L,t.screenPts,t.textureEdgeRepairEdges)>f)continue;let y=Ea(m,a,u,P,p,d);y!==null&&(c[x]=m[y],c[x+1]=m[y+1],c[x+2]=m[y+2],c[x+3]=255,h=!0)}h&&e.putImageData(l,r,i)}function qn(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 Ma(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 i=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),a=r.getContext("2d",i?{willReadFrequently:!0}:void 0);if(!a)return{width:e.width,height:e.height,url:null};let u=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),l=new Map;await Promise.all(u.map(async m=>{l.set(m,await Nn(m))}));for(let m of e.entries){let f=m.texture?l.get(m.texture):null;if(!m.texture){a.save(),$n(a,m,t,o),a.restore();continue}f&&(a.save(),ae(a,o),a.beginPath(),pt(a,m.x,m.y,m.screenPts),a.clip(),Un(a,m,f,o),a.restore()),m.texture&&t==="baked"&&(a.save(),ae(a,o),a.beginPath(),pt(a,m.x,m.y,m.screenPts),a.clip(),Yn(a,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),a.restore()),Wn(a,m,o)}let c=await qn(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:c}}async function Gt(e,t,n,o,r){let i=[];for(let a of e){if(r())break;i.push(await Ma(a,t,n,o))}return i}import{isSolidTrianglePlan as Ta,offsetConvexPolygonPointsByEdgeAmounts as Aa,parsePureColor as Kt,resolveSeamBleed as Kn,safePlanSeamBleedAmount as La}from"@layoutit/polycss-core";var Qn=50,Jn=[.4,-.7,.59],eo="#ffffff",to=1,no="#ffffff",oo=.4,q=1e-9;var ot=.75,ro=32,ao=96,wa="0 48px 96px 48px",Gn,Zn=ro;function gt(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==Gn&&(Gn=e,Zn=/\bFirefox\//.test(e)?ao:ro),Zn}function Qt(){return gt()===ao?wa:void 0}function Ae(e){let t=Kt(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function Jt({r:e,g:t,b:n}){return`${e},${t},${n}`}function Ra(e){return Kt(e)?.alpha??1}function ht({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function io(e,t,n,o,r){let i=Ae(e),a=Ae(n),u=Ae(o),l=u.r/255*r+a.r/255*t,c=u.g/255*r+a.g/255*t,m=u.b/255*r+a.b/255*t,f=Math.max(0,Math.min(255,Math.round(i.r*l))),d=Math.max(0,Math.min(255,Math.round(i.g*c))),h=Math.max(0,Math.min(255,Math.round(i.b*m))),p=Ra(e);return p<1?`rgba(${f}, ${d}, ${h}, ${p})`:ht({r:f,g:d,b:h})}function lo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=Kt(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=a=>Math.max(0,Math.min(255,Math.round(Math.round(a/o)*o))),i={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${i.r}, ${i.g}, ${i.b}, ${n.alpha})`:ht(i)}function so(e,t,n){let o=(r,i)=>{if(r===i)return r;let a=i-r;return r+Math.sign(a)*Math.min(Math.abs(a),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function Zt(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Da(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 Oa(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 i=e[r],a=e[r+1],u=[i[0]-t[0],i[1]-t[1],i[2]-t[2]],l=[a[0]-t[0],a[1]-t[1],a[2]-t[2]];n[0]-=u[1]*l[2]-u[2]*l[1],n[1]-=u[2]*l[0]-u[0]*l[2],n[2]-=u[0]*l[1]-u[1]*l[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=q?null:[n[0]/o,n[1]/o,n[2]/o]}function ka(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],i=e[(n+2)%e.length],a=(r[0]-o[0])*(i[1]-r[1])-(r[1]-o[1])*(i[0]-r[0]);if(Math.abs(a)<=q)return!1;let u=Math.sign(a);if(t===0)t=u;else if(u!==t)return!1}return!0}function Ia(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 Fa(e,t,n,o){let r=t[0]-e[0],i=t[1]-e[1],a=o[0]-n[0],u=o[1]-n[1],l=r*u-i*a;if(Math.abs(l)<=q)return null;let c=n[0]-e[0],m=n[1]-e[1],f=(c*u-m*a)/l;return[e[0]+f*r,e[1]+f*i]}function yt(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let a=0;a<e.length;a+=2)n+=e[a],o+=e[a+1];n/=r,o/=r;let i=e.slice();for(let a=0;a<i.length;a+=2){let u=i[a]-n,l=i[a+1]-o,c=Math.hypot(u,l);c<=q||(i[a]+=u/c*t,i[a+1]+=l/c*t)}return i}function Oe(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let l=0;l<e.length;l+=2)n.push([e[l],e[l+1]]);if(!ka(n))return yt(e,t);let o=Ia(n);if(Math.abs(o)<=q)return yt(e,t);let r=o>0?1:-1,i=[];for(let l=0;l<n.length;l++){let c=n[l],m=n[(l+1)%n.length],f=m[0]-c[0],d=m[1]-c[1],h=Math.hypot(f,d);if(h<=q)return yt(e,t);let p=r*(d/h)*t,P=r*(-f/h)*t;i.push({a:[c[0]+p,c[1]+P],b:[m[0]+p,m[1]+P]})}let a=[],u=Math.max(2,t*4);for(let l=0;l<n.length;l++){let c=i[(l+n.length-1)%n.length],m=i[l],f=Fa(c.a,c.b,m.a,m.b);if(!f)return yt(e,t);let d=n[l],h=f[0]-d[0],p=f[1]-d[1],P=Math.hypot(h,p);P>u?a.push(d[0]+h/P*u,d[1]+p/P*u):a.push(f[0],f[1])}return a}function Va(e,t,n,o){let r=e+t;if(o<=0||n<=q||r<=q||!Number.isFinite(e+t+n+o))return Oe([e,0,0,n,r,n],o);let i=Math.sqrt(e*e+n*n),a=Math.sqrt(t*t+n*n);if(i<=q||a<=q)return Oe([e,0,0,n,r,n],o);let u=-o*n/i,l=-o*e/i,c=o*n/a,m=-o*t/a,f=e+u,d=l,h=r+c,p=n+m,P=-n*r;if(Math.abs(P)<=q)return Oe([e,0,0,n,r,n],o);let x=f-h,T=d-p,A=(x*n+T*e)/P,L=h-A*t,y=p-A*n,w=-o*(e+i)/n,k=n+o,B=r+o*(t+a)/n,V=k,S=Math.max(2,o*4),O=L-e,F=y,H=Math.sqrt(O*O+F*F);H>S&&(L=e+O/H*S,y=F/H*S);let b=Math.sqrt(w*w+o*o);b>S&&(w=w/b*S,k=n+o/b*S);let s=B-r,g=Math.sqrt(s*s+o*o);return g>S&&(B=r+s/g*S,V=n+o/g*S),[L,y,w,k,B,V]}function _a(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function Ba(e,t,n,o,r){let i=e.seamBleedEdges;if(!i?.size)return null;let a=e.seamBleed===void 0?ot:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([l,c],m)=>{let f=_a(l,c),d=f!==void 0&&i.has(f)?e.seamBleedEdgeAmounts?.get(f)??Kn(a,ot):0;return La(r,m,d)})}function za(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function en(e,t,n,o){if(!Ta(e))return null;let r=e.tileSize,i=e.layerElevation,a=za(e.polygon.vertices,r,i),u=Oa(a);if(!u)return null;let l=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(U=>{let K=a[U.a],X=a[U.b];return{...U,length:Math.hypot(X[0]-K[0],X[1]-K[1],X[2]-K[2])}}).sort((U,K)=>K.length-U.length),c=l[0].a,m=l[0].b,f=l[0].c,d=a[c],h=a[m],p=a[f],P=l[0].length;if(P<=q)return null;let x=[(h[0]-d[0])/P,(h[1]-d[1])/P,(h[2]-d[2])/P],T=[p[0]-d[0],p[1]-d[1],p[2]-d[2]],A=Zt(T,x),L=[d[0]+x[0]*A,d[1]+x[1]*A,d[2]+x[2]*A],y=[L[0]-p[0],L[1]-p[1],L[2]-p[2]],w=Math.hypot(y[0],y[1],y[2]);if(w<=q)return null;let k=[y[0]/w,y[1]/w,y[2]/w];if(Zt(Da(x,k),u)<0){let U=m;if(m=c,c=U,d=a[c],h=a[m],P=Math.hypot(h[0]-d[0],h[1]-d[1],h[2]-d[2]),P<=q)return null;x=[(h[0]-d[0])/P,(h[1]-d[1])/P,(h[2]-d[2])/P];let K=[p[0]-d[0],p[1]-d[1],p[2]-d[2]];A=Zt(K,x),L=[d[0]+x[0]*A,d[1]+x[1]*A,d[2]+x[2]*A],y=[L[0]-p[0],L[1]-p[1],L[2]-p[2]];let X=Math.hypot(y[0],y[1],y[2]);if(X<=q)return null;k=[y[0]/X,y[1]/X,y[2]/X]}let B=gt(),V=Math.max(0,Math.min(P,A)),S=Math.max(0,P-V),O=[V,0,0,w,V+S,w],F=Ba(e,c,m,f,O),H=F?Aa(O,F):Va(V,S,w,Kn(e.seamBleed,ot)),b=[H[0],H[1]],s=[H[2],H[3]],g=[H[4],H[5]],v=(s[1]+g[1])/2,M=b[0]-s[0],C=g[0]-b[0],z=v-b[1];if(M<=q||C<=q||z<=q||!Number.isFinite(M+C+z))return null;let N=t==="dynamic",D=Ae(e.polygon.color??"#cccccc"),E=N&&Jt(D)===o?.dynamicColorKey,_={color:N||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...N&&!E?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4),"--psr":(D.r/255).toFixed(4),"--psg":(D.g/255).toFixed(4),"--psb":(D.b/255).toFixed(4)}:N?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4)}:null},I=([U,K])=>[p[0]+(U-V)*x[0]+K*k[0],p[1]+(U-V)*x[1]+K*k[1],p[2]+(U-V)*x[2]+K*k[2]],j=I(b),Y=I([s[0],v]),G=I([g[0],v]),$=B/2,W=[(G[0]-Y[0])/B,(G[1]-Y[1])/B,(G[2]-Y[2])/B],Z=[j[0]-W[0]*$,j[1]-W[1]*$,j[2]-W[2]*$],re=[(Y[0]-Z[0])/B,(Y[1]-Z[1])/B,(Y[2]-Z[2])/B];return{transform:`matrix3d(${[W[0],W[1],W[2],0,re[0],re[1],re[2],0,u[0],u[1],u[2],0,Z[0],Z[1],Z[2],1].map(U=>(Math.round(U*1e3)/1e3||0).toString()).join(",")})`,borderWidth:Qt(),..._}}function Pt(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 Ha(e,t,n,o){let r=e+t;if(o<=0||n<=q||r<=q||!Number.isFinite(e+t+n+o))return Oe([e,0,0,n,r,n],o);let i=Math.sqrt(e*e+n*n),a=Math.sqrt(t*t+n*n);if(i<=q||a<=q)return Oe([e,0,0,n,r,n],o);let u=-o*n/i,l=-o*e/i,c=o*n/a,m=-o*t/a,f=e+u,d=l,h=r+c,p=n+m,P=-n*r;if(Math.abs(P)<=q)return Oe([e,0,0,n,r,n],o);let x=f-h,T=d-p,A=(x*n+T*e)/P,L=h-A*t,y=p-A*n,w=-o*(e+i)/n,k=n+o,B=r+o*(t+a)/n,V=k,S=Math.max(2,o*4),O=L-e,F=y,H=Math.sqrt(O*O+F*F);H>S&&(L=e+O/H*S,y=F/H*S);let b=Math.sqrt(w*w+o*o);b>S&&(w=w/b*S,k=n+o/b*S);let s=B-r,g=Math.sqrt(s*s+o*o);return g>S&&(B=r+s/g*S,V=n+o/g*S),[L,y,w,k,B,V]}function Na(e,t,n,o,r,i,a,u,l,c,m,f){let d=Math.round(e*1e3)/1e3||0,h=Math.round(t*1e3)/1e3||0,p=Math.round(n*1e3)/1e3||0,P=Math.round(o*1e3)/1e3||0,x=Math.round(r*1e3)/1e3||0,T=Math.round(i*1e3)/1e3||0,A=Math.round(a*1e3)/1e3||0,L=Math.round(u*1e3)/1e3||0,y=Math.round(l*1e3)/1e3||0,w=Math.round(c*1e3)/1e3||0,k=Math.round(m*1e3)/1e3||0,B=Math.round(f*1e3)/1e3||0;return`matrix3d(${d},${h},${p},0,${P},${x},${T},0,${A},${L},${y},0,${w},${k},${B},1)`}function uo(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=Qn,r=o,i=e.vertices[0],a=e.vertices[1],u=e.vertices[2],l=i[1]*o,c=i[0]*o,m=i[2]*r,f=a[1]*o,d=a[0]*o,h=a[2]*r,p=u[1]*o,P=u[0]*o,x=u[2]*r,T=f-l,A=d-c,L=h-m,y=p-l,w=P-c,k=x-m,B=-(A*k-L*w),V=-(L*y-T*k),S=-(T*w-A*y),O=Math.sqrt(B*B+V*V+S*S);if(O<=q)return null;B/=O,V/=O,S/=O;let F=T*T+A*A+L*L,H=p-f,b=P-d,s=x-h,g=l-p,v=c-P,M=m-x,C=H*H+b*b+s*s,z=g*g+v*v+M*M,N=Pt(n)?n.a:0,D=Pt(n)?n.b:1,E=Pt(n)?n.c:2,_=()=>n?uo(e,t):null;if(!Pt(n)){let Le=F;C>Le&&(N=1,D=2,E=0,Le=C),z>Le&&(N=2,D=0,E=1)}let I=E===0?l:E===1?f:p,j=E===0?c:E===1?d:P,Y=E===0?m:E===1?h:x,G=N===0?l:N===1?f:p,$=N===0?c:N===1?d:P,W=N===0?m:N===1?h:x,Z=D===0?l:D===1?f:p,re=D===0?c:D===1?d:P,de=D===0?m:D===1?h:x,U=Z-G,K=re-$,X=de-W,R=Math.sqrt(U*U+K*K+X*X);if(R<=q)return _();let J=U/R,ie=K/R,le=X/R,ue=(I-G)*J+(j-$)*ie+(Y-W)*le,ge=G+J*ue-I,te=$+ie*ue-j,be=W+le*ue-Y,ve=Math.sqrt(ge*ge+te*te+be*be);if(ve<=q)return _();ge/=ve,te/=ve,be/=ve;let Je=Math.max(0,Math.min(R,ue)),Dt=Math.max(0,R-Je),ce=Ha(Je,Dt,ve,ot),Ee=ce[0],he=ce[1],Me=ce[2],Te=ce[3],ut=ce[4],et=ce[5],me=(Te+et)/2,se=Ee-Me,ct=ut-Ee,Ot=me-he;if(se<=q||ct<=q||Ot<=q||!Number.isFinite(se+ct+Ot))return _();let kt=1/gt(),En=se+ct,It=En*kt,Ft=(ct-se)*.5*kt,Vt=Ot*kt,_t=Ee-Je-En*.5,Bt=he,zr=Na(J*It,ie*It,le*It,J*Ft+ge*Vt,ie*Ft+te*Vt,le*Ft+be*Vt,B,V,S,I+J*_t+ge*Bt,j+ie*_t+te*Bt,Y+le*_t+be*Bt),Mn;if(Math.floor(t.colorFreezeFrames??1)!==0){let Le=t.directionalLight,Tn=t.ambientLight,Se=Le?.direction??Jn,Hr=Le?.color??eo,Nr=Math.max(0,Le?.intensity??to),Yr=Tn?.color??no,Xr=Math.max(0,Tn?.intensity??oo),zt=Math.sqrt(Se[0]*Se[0]+Se[1]*Se[1]+Se[2]*Se[2])||1,jr=Se[0]/zt,$r=Se[1]/zt,Ur=Se[2]/zt,Wr=Nr*Math.max(0,B*jr+V*$r+S*Ur),An=io(e.color??"#cccccc",Wr,Hr,Yr,Xr);Mn=t.colorSteps?lo(An,t.colorSteps):An}return{transform:zr,borderWidth:Qt(),color:Mn,basis:{a:N,b:D,c:E}}}function Ya(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function Xa(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let i=e.__polycssStableTriangleColor;if(!(i===void 0||Ya(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||i===n)return;let u=n,l=n?Ae(n):void 0,c=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&c&&l&&n&&(l=so(c,l,m),u=ht(l)),e.style.color=u,e.__polycssStableTriangleColor=u,e.__polycssStableTriangleColorRgb=l}function tn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!Re())return!1;let o=Array.from(e.children).filter(i=>i instanceof HTMLElement&&i.localName==="u");if(o.length!==t.length)return!1;let r=t.map((i,a)=>uo(i,n,o[a].__polycssStableTriangleBasis));if(r.some(i=>!i))return!1;for(let i=0;i<o.length;i+=1){let a=r[i],u=o[i];u.style.visibility&&(u.style.visibility=""),u.__polycssStableTriangleBasis=a.basis,u.style.transform=a.transform,a.borderWidth!==void 0&&(u.style.borderWidth=a.borderWidth),a.color!==void 0&&Xa(u,i,a.color,n)}return!0}import{computeTextureAtlasPlanPublic as ja}from"@layoutit/polycss-core";function ke(e,t,n={}){return ja(e,t,n)}function nn(e,t,n){let o=new Set(n?.disable??[]);return $t(e,t,o)}import{computed as Pe,getCurrentScope as $a,onScopeDispose as Ua,ref as Wa,watch as qa}from"vue";function xt(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Ie(e,t,n=Pe(()=>{}),o=Pe(()=>{})){let r=Pe(()=>new Set(o.value?.disable??[])),i=Pe(()=>!r.value.has("b")),a=Pe(()=>i.value),u=Pe(()=>!r.value.has("u")&&Re()),l=Pe(()=>!r.value.has("i")&&t.value!=="dynamic"&&we()),c=Pe(()=>{let d=Ut(e.value,t.value,r.value,typeof document<"u"?document:null);return Wt(d,n.value,typeof document<"u"?document:null)}),m=Wa(c.value.packed.pages.map(d=>({width:d.width,height:d.height,url:null}))),f=[];return qa(()=>[c.value,t.value],([d,h],p,P)=>{let{packed:x,atlasScale:T}=d,A=!1;xt(f),f=[],m.value=x.pages.map(L=>({width:L.width,height:L.height,url:null})),P(()=>{A=!0,xt(f),f=[]}),!(x.pages.length===0||typeof document>"u")&&Gt(x.pages,h,document,T,()=>A).then(L=>{if(A){xt(L.flatMap(y=>y.url?.startsWith("blob:")?[y.url]:[]));return}f=L.flatMap(y=>y.url?.startsWith("blob:")?[y.url]:[]),m.value=L}).catch(()=>{A||(m.value=x.pages.map(L=>({width:L.width,height:L.height,url:null})))})},{immediate:!0}),$a()&&Ua(()=>{xt(f),f=[]}),{entries:Pe(()=>c.value.packed.entries),pages:m,ready:Pe(()=>m.value.length===0||m.value.every(d=>!!d.url)),useFullRectSolid:i,useProjectiveQuad:a,useStableTriangle:u,useBorderShape:l}}import{h as Ga}from"vue";function Fe({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:a="auto"}){let u=en(e,t,a,n);if(!u)return null;let l=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,f])=>[`data-${m}`,String(f)])):{},c=o?.trim()||void 0;return Ga("u",{class:c,style:{...u,...r},...l,...i})}import{h as Za}from"vue";import{isFullRectSolid as Ka,cssBorderShapeForPlan as Qa,formatSolidQuadEntryMatrix as Ja,formatBorderShapeEntryMatrix as ei}from"@layoutit/polycss-core";var ti=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function ni(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,i)=>{let a=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:i,order:ti.get(a)??Number.POSITIVE_INFINITY}}).sort((r,i)=>r.order-i.order||r.index-i.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function Ve({entry:e,solidPaintDefaults:t,className:n,style:o,domAttrs:r,pointerEvents:i="auto",forceBorderShape:a=!1}){let u=!e.texture&&Ka(e),l=u&&a&&we(),c=!u||l?Qa(e):null,m=e.shadedColor===t?.paintColor,d={transform:c?ei(e):Ja(e),color:m?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...o},h=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([x,T])=>[`data-${x}`,String(T)])):{},p=n?.trim()||void 0,P=x=>{let T=x.el;T&&(c?T.style.setProperty("border-shape",c):T.style.removeProperty("border-shape"),ni(T))};return Za(u&&!l?"b":"i",{class:p,style:d,...h,...r,onVnodeMounted:P,onVnodeUpdated:P})}import{h as oi}from"vue";function _e({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:a="auto"}){let u=t==="dynamic",l=Ae(e.polygon.color??"#cccccc"),c=u&&Jt(l)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:u||e.shadedColor===n?.paintColor?void 0:e.shadedColor,pointerEvents:a==="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":(l.r/255).toFixed(4),"--psg":(l.g/255).toFixed(4),"--psb":(l.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},f=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([h,p])=>[`data-${h}`,String(p)])):{},d=o?.trim()||void 0;return oi("b",{class:d,style:m,...f,...i})}import{h as ri}from"vue";import{formatMatrix3d as ai,formatCssLengthPx as bt}from"@layoutit/polycss-core";var ii=64;function Be({entry:e,page:t,textureLighting:n,solidPaintDefaults:o,className:r,style:i,domAttrs:a,pointerEvents:u="auto"}){let l=n==="dynamic",c=e.atlasCanonicalSize??ii,m=e.canvasW||1,f=e.canvasH||1,d=t?`${bt(-e.x/m*c)} ${bt(-e.y/f*c)}`:void 0,h=t?`${bt(t.width/m*c)} ${bt(t.height/f*c)}`:void 0,p=l&&t?.url?`url(${t.url})`:void 0,P=!l&&t?.url?`url(${t.url}) ${d} / ${h} no-repeat`:void 0,x={transform:ai(e.atlasMatrix),"--polycss-atlas-size":`${c}px`,...l?{backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:d,backgroundSize:h}:{background:P},...l?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...l&&p?{maskImage:p,maskMode:"alpha",maskPosition:d,maskSize:h,maskRepeat:"no-repeat",WebkitMaskImage:p,WebkitMaskPosition:d,WebkitMaskSize:h,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:u==="none"?"none":void 0,...i},T=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,y])=>[`data-${L}`,String(y)])):{},A=r?.trim()||void 0;return ri("s",{class:A,style:x,...T,...a})}var go=li({name:"PolyScene",inheritAttrs:!1,props:{polygons:{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=ui(ee);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:i}=o,a=on(0),u=new Map,l={register(S,O){u.set(S,O),a.value++},unregister(S){u.delete(S),a.value++},version:a,getEntries(){return Array.from(u.values())}},c=on(null),m=xe(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??po,shadow:e.shadow,shadowRegistry:l,groundCssZ:c.value}));ci(Yt,m);let f=on(null);co(f,S=>{r.value=S});let d=!1;fo(()=>{d||typeof document<"u"&&(mt(document),d=!0)}),co(()=>e.debugShowBackfaces,S=>{let O=f.value;O&&O.classList.toggle("polycss-debug-show-backfaces",!!S)});let h=xe(()=>e.polygons??[]),p=xe(()=>({directionalLight:e.directionalLight})),P=dt(h,p);fo(()=>{r.value=f.value,i()}),di(i);let x=xe(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),T=xe(()=>{let S=e.textureLighting==="dynamic",O=S?void 0:e.directionalLight,F=S?void 0:e.ambientLight,H=vt(P.value.polygons),b=e.seamBleed??po,s=b==="auto"||typeof b=="number"&&Number.isFinite(b)&&b>0?St(P.value.polygons,{tileSize:x.value.tileSize,layerElevation:x.value.layerElevation,directionalLight:O,ambientLight:F}):null;return P.value.polygons.map((g,v)=>ke(g,v,{tileSize:x.value.tileSize,layerElevation:x.value.layerElevation,directionalLight:O,ambientLight:F,seamBleed:s?.has(v)?b:void 0,seamEdges:s?.get(v),textureEdgeRepairEdges:H[v]}))}),A=xe(()=>e.textureLighting??"baked"),L=xe(()=>e.textureQuality),y=xe(()=>e.strategies),w=Ie(T,A,L,y),k=xe(()=>{if(e.textureLighting!=="dynamic")return null;let S=e.directionalLight?.direction??[.4,-.7,.59],O=Math.hypot(S[0],S[1],S[2])||1,F=S[0]/O,H=S[1]/O,b=S[2]/O,s=yo(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],g=yo(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],v=e.directionalLight?.intensity??1,M=e.ambientLight?.intensity??.4,C=D=>(D/255).toFixed(4),z=b,N=Math.sign(z||1)*Math.max(Math.abs(z),.01);return{"--plx":F.toFixed(4),"--ply":H.toFixed(4),"--plz":b.toFixed(4),"--clx":F.toFixed(4),"--cly":H.toFixed(4),"--clz":N.toFixed(4),"--plr":C(s[0]),"--plg":C(s[1]),"--plb":C(s[2]),"--pli":v.toFixed(4),"--par":C(g[0]),"--pag":C(g[1]),"--pab":C(g[2]),"--pai":M.toFixed(4)}}),B=50;mo(()=>{let S=f.value;a.value;let O=l.getEntries();if(O.length===0){S&&S.style.removeProperty("--shadow-ground-cssz"),c.value!==null&&(c.value=null);return}let F=1/0;for(let s of O)for(let g of s())for(let v of g.vertices)v[2]<F&&(F=v[2]);if(!Number.isFinite(F)){S&&S.style.removeProperty("--shadow-ground-cssz"),c.value!==null&&(c.value=null);return}let H=e.shadow?.lift??.05,b=(F+H)*B;c.value!==b&&(c.value=b),S&&(e.textureLighting==="dynamic"?S.style.setProperty("--shadow-ground-cssz",b.toFixed(3)):S.style.removeProperty("--shadow-ground-cssz"))});let V=xe(()=>{if(!e.autoCenter)return[0,0,0];let S=P.value.sceneBbox;return[(S.min[0]+S.max[0])/2,(S.min[1]+S.max[1])/2,(S.min[2]+S.max[2])/2]});return mo(()=>{o.autoCenterOffset.value=V.value}),mi(()=>{}),()=>{let S=`polycss-scene${e.class?` ${e.class}`:""}`,O=x.value,F=w.entries.value.map((b,s)=>{if(b)return Be({entry:b,page:w.pages.value[b.pageIndex],textureLighting:O.textureLighting??"baked"});let g=T.value[s];return!g||g.texture?null:w.useStableTriangle.value&&Xe(g)?Fe({entry:g,textureLighting:O.textureLighting??"baked"}):w.useProjectiveQuad.value&&je(g)?_e({entry:g,textureLighting:O.textureLighting??"baked"}):w.useBorderShape.value||w.useFullRectSolid.value?Ve({entry:g,forceBorderShape:!w.useFullRectSolid.value}):null}),H=t.default?.()??[];return si("div",{ref:f,class:S,"data-polycss-lighting":O.textureLighting??"baked","aria-hidden":"true",style:{...k.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([b])=>b!=="style"&&b!=="class"))},[...F,...H])}}});import{defineComponent as Ki,h as qe,computed as oe,inject as Qi,onMounted as Ji,onBeforeUnmount as Do,ref as at,watch as Oo,watchEffect as el}from"vue";import{BASE_TILE as dn,computeSceneBbox as tl,DEFAULT_SEAM_BLEED as nl,ensureCcw2D as ol,inverseRotateVec3 as ko,findOverlappingPolygonDuplicates as rl,parseHexColor as al,projectCssVertexToGround as il}from"@layoutit/polycss-core";import{ref as rt,watch as fi,onUnmounted as pi}from"vue";import{loadMesh as yi}from"@layoutit/polycss-core";var ho=[],rn=[];function Ct(e,t){let n=rt(ho),o=rt(void 0),r=rt(!!e.value),i=rt(null),a=rt(rn),u=null;function l(){if(u){try{u.dispose()}catch{}u=null}}return fi(e,(c,m,f)=>{if(!c){l(),n.value=ho,o.value=void 0,r.value=!1,i.value=null,a.value=rn;return}let d=!1;r.value=!0,i.value=null;let h=u;yi(c,t).then(p=>{if(d){try{p.dispose()}catch{}return}if(h)try{h.dispose()}catch{}u=p,n.value=p.polygons,o.value=p.voxelSource,r.value=!1,i.value=null,a.value=p.warnings??rn}).catch(p=>{if(d)return;let P=p instanceof Error?p:new Error(String(p));r.value=!1,i.value=P}),f(()=>{d=!0})},{immediate:!0}),pi(()=>{l()}),{polygons:n,voxelSource:o,loading:r,error:i,warnings:a,dispose:l}}import{BASE_TILE as ne,computeProjectiveQuadMatrix as gi,normalFacesCamera as hi,parsePureColor as Eo,PROJECTIVE_QUAD_BLEED as Pi,resolveProjectiveQuadGuards as xi,rotateVec3 as Po,SOLID_QUAD_CANONICAL_SIZE as bi}from"@layoutit/polycss-core";var vi=[.4,-.7,.59],Si="#ffffff",Ci=1,Ei="#ffffff",Mi=.4,Mo=1,Ti=8,Ai=Pi,Ce=1e-6,Li=xi({bleed:0}),To={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},sn=["t","b","bl","br","fr","fl"],wi=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 xo(e){let t=[];for(let n of sn)hi(To[n],e)&&t.push(n);return t.join("|")}function Ri(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 Di(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,i=0;for(let u=1;u+1<t.length;u+=1){let l=t[u],c=t[u+1],m=l[1]-n[1],f=l[0]-n[0],d=l[2]-n[2],h=c[1]-n[1],p=c[0]-n[0],P=c[2]-n[2];o-=f*P-d*p,r-=d*h-m*P,i-=m*p-f*h}let a=Math.hypot(o,r,i);return a<=1e-9?null:[Math.round(o/a),Math.round(r/a),Math.round(i/a)]}function Oi(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=Di(e),n=t?wi.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,i=1/0,a=-1/0,u=-1/0,l=-1/0;for(let f of e.vertices)o=Math.min(o,f[0]),r=Math.min(r,f[1]),i=Math.min(i,f[2]),a=Math.max(a,f[0]),u=Math.max(u,f[1]),l=Math.max(l,f[2]);let c=1e-6,m=Bi(e.color);return Math.abs(l-i)<=c?{axis:"z",face:n,left:r*ne,top:o*ne,width:Math.max(0,(u-r)*ne),height:Math.max(0,(a-o)*ne),z:i*ne,baseColor:m,bleed:an()}:Math.abs(a-o)<=c?{axis:"x",face:n,left:r*ne,top:i*ne,width:Math.max(0,(u-r)*ne),height:Math.max(0,(l-i)*ne),z:-o*ne,baseColor:m,bleed:an()}:Math.abs(u-r)<=c?{axis:"y",face:n,left:i*ne,top:o*ne,width:Math.max(0,(l-i)*ne),height:Math.max(0,(a-o)*ne),z:-r*ne,baseColor:m,bleed:an()}:null}function an(){return{left:0,right:0,top:0,bottom:0}}function ki(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 bo(e){return[e[1]*ne,e[0]*ne,e[2]*ne]}function vo(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function Ii(e,t,n){let o=e.left,r=e.left+e.width,i=e.top,a=e.top+e.height;if(Math.abs(t[0]-n[0])<=Ce){if(Math.abs(t[0]-o)<=Ce)return"left";if(Math.abs(t[0]-r)<=Ce)return"right"}if(Math.abs(t[1]-n[1])<=Ce){if(Math.abs(t[1]-i)<=Ce)return"top";if(Math.abs(t[1]-a)<=Ce)return"bottom"}return null}function Fi(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=Ce)){if(n!==null)return null;n=o}return n}function Vi(e,t,n){let o=t.vertices,r=bo(o[n]),i=bo(o[(n+1)%o.length]),a=Ii(e,vo(e,r),vo(e,i));if(!a)return null;let u=Fi(r,i);if(u===null)return null;let l=Math.min(r[u],i[u]),c=Math.max(r[u],i[u]);return c-l>Ce?{item:e,side:a,variableAxis:u,fixed:r,start:l,end:c}:null}function So(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Ai)}function _i(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let i=0;i<r.vertices.length;i+=1){let a=Vi(o,r,i);if(!a)continue;let u=ki(a),l=n.get(u);l?l.push(a):n.set(u,[a])}}for(let o of n.values()){if(o.length<2)continue;o.sort((i,a)=>i.start-a.start||i.end-a.end);let r=[];for(let i of o){r=r.filter(a=>a.end>i.start+Ce);for(let a of r)a.item.sourceIndex!==i.item.sourceIndex&&(So(a),So(i));r.push(i)}}}function ln(e){let t=Eo(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 Bi(e){if(!e)return"#cccccc";let t=Eo(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(${$e(n.r)}, ${$e(n.g)}, ${$e(n.b)}, ${o})`}return Ao(n)}function Ao({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 $e(e){return Math.round(Math.max(0,Math.min(255,e)))}function zi(e,t,n,o){let r=ln(t),i=ln(n?.color??Si),a=ln(o?.color??Ei),u=n?.direction??vi,l=Math.hypot(u[0],u[1],u[2])||1,c=u[0]/l,m=u[1]/l,f=u[2]/l,d=Math.max(0,n?.intensity??Ci)*Math.max(0,e[0]*c+e[1]*m+e[2]*f),h=Math.max(0,o?.intensity??Mi),p=a.r/255*h+i.r/255*d,P=a.g/255*h+i.g/255*d,x=a.b/255*h+i.b/255*d,T={r:r.r*p,g:r.g*P,b:r.b*x,alpha:r.alpha};return T.alpha<1?`rgba(${$e(T.r)}, ${$e(T.g)}, ${$e(T.b)}, ${T.alpha})`:Ao(T)}function Hi(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=Oi(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return _i(e,t),t}function Ni(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 Yi(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 Xi(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function ji(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=bi/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function Co(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,i=e.height+e.bleed.top+e.bleed.bottom,a=e.z,u=r/t,l=i/t;return`matrix3d(${(e.axis==="x"?[u,0,0,0,0,0,l,0,0,-1,0,0,n,-a,o,1]:e.axis==="y"?[0,0,u,0,0,l,0,0,-1,0,0,0,-a,o,n,1]:[u,0,0,0,0,l,0,0,0,0,1,0,n,o,a,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function $i(e,t){let{xAxis:n,yAxis:o,normal:r,tx:i,ty:a,tz:u}=Ni(e),l=gi(Yi(e),n,o,r,i,a,u,Li,Xi(e));return l?ji(l,t)??Co(e,t):Co(e,t)}function Ui(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function Wi(e){return Ui(e)?Ti:Mo}function qi(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 Gi(e,t){let n=qi(e),o=t.meshRotation;o&&(n=Po(n,o[0]??0,o[1]??0,o[2]??0));let[r,i]=Po(n,t.rotX,0,t.rotY);return{x:r,y:i}}function Zi(e,t,n){let o=e.filter(d=>t.has(d.face)).map(d=>({item:d,...Gi(d,n)}));if(o.length===0)return[];let r=1/0,i=-1/0,a=1/0,u=-1/0;for(let d of o)r=Math.min(r,d.x),i=Math.max(i,d.x),a=Math.min(a,d.y),u=Math.max(u,d.y);let l=4,c=Math.max(1e-6,i-r),m=Math.max(1e-6,u-a),f=new Map;for(let d of o){let h=Math.min(l-1,Math.max(0,Math.floor((d.x-r)/c*l))),p=Math.min(l-1,Math.max(0,Math.floor((d.y-a)/m*l))),P=`${h}:${p}`,x=f.get(P);x||(x={tx:h,ty:p,sourceIndex:d.item.sourceIndex,items:[]},f.set(P,x)),x.items.push(d.item),x.sourceIndex=Math.min(x.sourceIndex,d.item.sourceIndex)}return Array.from(f.values()).sort((d,h)=>d.ty-h.ty||d.tx-h.tx||d.sourceIndex-h.sourceIndex).flatMap(d=>d.items)}function Lo(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:i}=e,a=Hi(o);if(a.length===0)return null;let u=new Set(a.map(b=>b.face));n.classList.add("polycss-voxel-mesh");let l=Wi(t);l!==Mo&&n.style.setProperty("--polycss-voxel-primitive",`${l}px`);let c=new Map,m=(b,s)=>{let g=`${b}|${s}`,v=c.get(g);if(v)return v;let M=zi(To[b],s,r,i);return c.set(g,M),M},f=new Map,d=new Map,h=new Map,p=new Map;for(let b of a){let s=p.get(b.face);s||(s=[],p.set(b.face,s)),s.push(b)}let P="",x=0,T=new Set,A=b=>{let s=f.get(b.sourceIndex);return s||(s=t.createElement("b"),f.set(b.sourceIndex,s),Ri(s,m(b.face,b.baseColor),$i(b,l))),s},L=b=>{let s=d.get(b);return s||(s=t.createElement("span"),s.className=`polycss-voxel-face polycss-voxel-face-${b}`,s.dataset.polycssVoxelFace=b,s.__polycssVoxelFaceHost=!0,d.set(b,s)),s},y=()=>{for(let b of Array.from(n.childNodes))if(!b.__polycssVoxelFaceHost)return b;return null},w=(b,s)=>{let g=s.map(C=>C.sourceIndex).join(",");if(h.get(b)===g)return;let v=L(b),M=t.createDocumentFragment();for(let C of s)M.appendChild(A(C));v.replaceChildren(M),h.set(b,g)},k=()=>{for(let b of sn)u.has(b)&&w(b,p.get(b)??[])},B=b=>new Set(b.split("|").filter(Boolean)),V=b=>{let s=B(b);return sn.filter(g=>s.has(g)&&u.has(g))},S=b=>{let s=0;for(let g of b)s+=p.get(g)?.length??0;return s},O=b=>{let s=new Set,g=[],v=new Map;for(let M of b){s.has(M.face)||(s.add(M.face),g.push(M.face));let C=v.get(M.face);C||(C=[],v.set(M.face,C)),C.push(M)}return{orderedFaces:g,itemsByFace:v}},F=(b,s)=>{let g=new Set(b);for(let v of T){if(g.has(v))continue;let M=d.get(v);M?.parentNode===n&&n.removeChild(M)}if(s){let v=t.createDocumentFragment();for(let M of b)v.appendChild(L(M));n.insertBefore(v,y()),T=g;return}for(let v=0;v<b.length;v+=1){let M=b[v],C=L(M);if(C.parentNode===n)continue;let z=null;for(let N=v+1;N<b.length;N+=1){let D=d.get(b[N]);if(D?.parentNode===n){z=D;break}}n.insertBefore(C,z??y())}T=g},H=(b,s,g)=>{if(!g){let N=V(b);F(N,!1),x=S(N);return}let v=new Set(b.split("|").filter(Boolean)),M=Zi(a,v,s),{orderedFaces:C,itemsByFace:z}=O(M);for(let N of C)w(N,z.get(N)??[]);F(C,!0),x=M.length};return k(),{get brushCount(){return x},render(b){P=xo(b),H(P,b,!0)},syncCamera(b){let s=xo(b);s!==P&&(P=s,H(s,b,!1))},dispose(){for(let b of d.values())b.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),f.clear(),d.clear(),h.clear(),x=0,T=new Set,P=""}}}var un=new WeakMap;function wo(e,t){un.set(e,t)}function Ro(e){un.delete(e)}function Ue(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=un.get(t);if(n)return n}t=t.parentElement}return null}function We(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let i=r.getBoundingClientRect();if(!(i.width<=0||i.height<=0)&&t>=i.left&&t<=i.right&&n>=i.top&&n<=i.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 i=Ue(r);if(i&&We(r,e,t))return i}return null}function ll(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 sl(e,t,n){let o=[];return e&&o.push(`translate3d(${e[0]}px, ${e[1]}px, ${e[2]}px)`),t!==void 0&&(typeof t=="number"?t!==1&&o.push(`scale3d(${t}, ${t}, ${t})`):o.push(`scale3d(${t[0]}, ${t[1]}, ${t[2]})`)),n&&(n[0]&&o.push(`rotateX(${n[0]}deg)`),n[1]&&o.push(`rotateY(${n[1]}deg)`),n[2]&&o.push(`rotateZ(${n[2]}deg)`)),o.length>0?o.join(" "):void 0}function Io(e){if(e.length===0)return e;let t=tl(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 i=a=>[a[0]-n,a[1]-o,a[2]-r];return e.map(a=>({...a,vertices:a.vertices.map(i),...a.textureTriangles?.length?{textureTriangles:a.textureTriangles.map(u=>({...u,vertices:u.vertices.map(i)}))}:null}))}var Q=Ki({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},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},castShadow:{type:Boolean,default:!1},meshResolution:{type:String,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??""),i=oe(()=>{let E={};return e.mtl&&(E.mtlUrl=e.mtl),e.meshResolution!==void 0&&(E.meshResolution=e.meshResolution),Object.keys(E).length>0?E:void 0}),a=Ct(r,i.value),u=oe(()=>e.src?a.polygons.value:e.polygons??[]),l=at(null),c=null;Oo(u,()=>{l.value=null,c=null});let m=oe(()=>l.value??u.value),f=oe(()=>e.autoCenter?Io(m.value):m.value),d=!t.polygon,h=Rn(),p=oe(()=>e.textureLighting??h?.value.textureLighting??"baked"),P=oe(()=>h?.value.strategies),x=oe(()=>e.seamBleed??h?.value.seamBleed??nl),T=oe(()=>p.value==="dynamic"?void 0:h?.value.directionalLight),A=oe(()=>p.value==="dynamic"?void 0:h?.value.ambientLight),L=oe(()=>!!(e.src&&a.voxelSource.value&&l.value===null&&!t.polygon&&!t.default&&p.value==="baked"&&!e.castShadow)),y=oe(()=>{if(p.value!=="dynamic")return null;let E=e.rotation;if(!E||E[0]===0&&E[1]===0&&E[2]===0)return null;let _=h?.value.directionalLight?.direction;if(!_)return null;let I=ko(_,E),j=Math.hypot(I[0],I[1],I[2])||1;return{"--plx":(I[0]/j).toFixed(4),"--ply":(I[1]/j).toFixed(4),"--plz":(I[2]/j).toFixed(4)}}),w=at(e.rotation),k=at(0),B=oe(()=>{let E=T.value;return!E||!w.value?E:{...E,direction:ko(E.direction,w.value)}}),V=oe(()=>{if(!d||L.value)return[];let E=vt(f.value),_=x.value==="auto"||typeof x.value=="number"&&Number.isFinite(x.value)&&x.value>0?St(f.value,{directionalLight:B.value,ambientLight:A.value}):null;return f.value.map((I,j)=>ke(I,j,{directionalLight:B.value,ambientLight:A.value,seamBleed:_?.has(j)?x.value:void 0,seamEdges:_?.get(j),textureEdgeRepairEdges:E[j]}))}),S=oe(()=>e.textureQuality),O=Ie(V,p,S,P),F=oe(()=>d?nn(V.value,p.value,P.value):{}),H=oe(()=>ll(F.value)),b=oe(()=>{if(!e.castShadow)return null;let E=h?.value,_=E?.groundCssZ??null;if(_===null)return null;let I=E?.shadow,j=E?.directionalLight?.direction??[.4,-.7,.59],Y=rl(f.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.4,preserveDoubleSidedBackfaces:!1}),G=[],$=1/0,W=1/0,Z=-1/0,re=-1/0,de=1/0,U=1/0,K=-1/0,X=-1/0,R=f.value,J=V.value;for(let he=0;he<R.length;he++){if(Y.has(he)||!J[he])continue;let Te=R[he],ut=[];for(let et of Te.vertices){let me=[et[1]*dn,et[0]*dn,et[2]*dn];me[0]<de&&(de=me[0]),me[1]<U&&(U=me[1]),me[0]>K&&(K=me[0]),me[1]>X&&(X=me[1]);let se=il(me,j,_);ut.push(se),se[0]<$&&($=se[0]),se[1]<W&&(W=se[1]),se[0]>Z&&(Z=se[0]),se[1]>re&&(re=se[1])}G.push(ut)}if(G.length===0)return null;let ie=I?.maxExtend??2e3,le=Math.max($,de-ie),ue=Math.max(W,U-ie),ge=Math.min(Z,K+ie),te=Math.min(re,X+ie),be=ge-le,ve=te-ue;if(!(be>0)||!(ve>0))return null;let Je=I?.color??"#000000",Dt=I?.opacity??.25,ce=al(Je)?.rgb??[0,0,0],Ee="";for(let he of G){let Me=ol(he);Ee+=`M${(Me[0][0]-le).toFixed(3)},${(Me[0][1]-ue).toFixed(3)}`;for(let Te=1;Te<Me.length;Te++)Ee+=`L${(Me[Te][0]-le).toFixed(3)},${(Me[Te][1]-ue).toFixed(3)}`;Ee+="Z"}return qe("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(be),height:String(ve),viewBox:`0 0 ${be} ${ve}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${le.toFixed(3)}px,${ue.toFixed(3)}px,${_.toFixed(3)}px)`}},[qe("path",{d:Ee,fill:`rgb(${ce[0]},${ce[1]},${ce[2]})`,"fill-rule":"nonzero",stroke:`rgb(${ce[0]},${ce[1]},${ce[2]})`,"stroke-width":"2","stroke-linejoin":"round",opacity:Dt.toFixed(4)})])}),s=Symbol();Oo(()=>e.castShadow,(E,_,I)=>{let j=h?.value.shadowRegistry;j&&(E?j.register(s,()=>f.value):j.unregister(s),I(()=>j.unregister(s)))},{immediate:!0}),Do(()=>{h?.value.shadowRegistry?.unregister(s)});let g=at(null),v={get element(){return g.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>c??f.value,setPolygons(E){let _=e.autoCenter?Io(E):E;c=_;let I=g.value;I&&d&&tn(I,_,{directionalLight:B.value,ambientLight:A.value,textureLighting:p.value,strategies:P.value,seamBleed:x.value,colorFrame:++k.value,colorFreezeFrames:0})||(l.value=E.slice())},updatePolygon(E,_){let I=c??f.value,j=typeof E=="number"?E:I.indexOf(E);j<0||j>=I.length||(Object.assign(I[j],_),l.value=I.slice(),c=null)},rebakeAtlas:()=>{w.value=e.rotation}};o(v),Ji(()=>{g.value&&wo(g.value,v)}),Do(()=>{g.value&&Ro(g.value)});let M=Qi(ee,null),C=at(null);el(E=>{let _=g.value;if(C.value?.dispose(),C.value=null,!L.value||!_)return;let I=Lo({doc:_.ownerDocument,wrapper:_,polygons:f.value,directionalLight:B.value,ambientLight:A.value});if(!I)return;let j=()=>{let G=M?.store.getState().cameraState;return{rotX:G?.rotX??65,rotY:G?.rotY??45,meshRotation:e.rotation}};C.value=I,I.render(j());let Y=M?.store.subscribe(()=>{I.syncCamera(j())});E(()=>{Y?.(),I.dispose(),C.value===I&&(C.value=null)})});let z=null;function N(E,_,I){let j=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let Z=document.elementsFromPoint(_,I),re=new Set;for(let de of Z){let U=Ue(de);U&&!re.has(U)&&(re.add(U),j.push({object:U}))}}let Y=0,G=0,$=M?.cameraElRef.value;if($){let Z=$.getBoundingClientRect();Z.width>0&&Z.height>0&&(Y=(_-Z.left)/Z.width*2-1,G=-((I-Z.top)/Z.height*2-1))}let W=0;return z&&(W=Math.hypot(_-z.x,I-z.y)),{object:j[0]?.object??v,eventObject:v,intersections:j,pointer:{x:Y,y:G},delta:W,nativeEvent:E,stopPropagation:()=>E.stopPropagation()}}function D(E,_,I,j){E&&E(N(_,I,j))}return()=>{let E=sl(e.position,e.scale,e.rotation),_=f.value,I;if(_.length>0){let X=1/0,R=1/0,J=1/0,ie=-1/0,le=-1/0,ue=-1/0;for(let ge of _)for(let te of ge.vertices)te[0]<X&&(X=te[0]),te[0]>ie&&(ie=te[0]),te[1]<R&&(R=te[1]),te[1]>le&&(le=te[1]),te[2]<J&&(J=te[2]),te[2]>ue&&(ue=te[2]);Number.isFinite(X)&&(I=`${(R+le)/2*50}px ${(X+ie)/2*50}px ${(J+ue)/2*50}px`)}let j={transform:E,...I?{transformOrigin:I}:null,...y.value??void 0,...n.style,...H.value??void 0},Y=Object.fromEntries(Object.entries(n).filter(([X])=>X!=="style"&&X!=="class")),G=`polycss-mesh${L.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,$={};e.onClick&&($.onClick=X=>{let R=X;D(e.onClick,R,R.clientX,R.clientY)}),e.onContextMenu&&($.onContextmenu=X=>{let R=X;D(e.onContextMenu,R,R.clientX,R.clientY)}),e.onDoubleClick&&($.onDblclick=X=>{let R=X;D(e.onDoubleClick,R,R.clientX,R.clientY)}),e.onWheel&&($.onWheel=X=>{let R=X;D(e.onWheel,R,R.clientX,R.clientY)}),$.onPointerdown=X=>{let R=X;z={x:R.clientX,y:R.clientY},D(e.onPointerDown,R,R.clientX,R.clientY)},$.onPointerup=X=>{let R=X;D(e.onPointerUp,R,R.clientX,R.clientY),z=null},e.onPointerMove&&($.onPointermove=X=>{let R=X;D(e.onPointerMove,R,R.clientX,R.clientY)}),(e.onPointerOver||e.onPointerEnter)&&($.onPointerenter=X=>{let R=X;D(e.onPointerOver,R,R.clientX,R.clientY),D(e.onPointerEnter,R,R.clientX,R.clientY)}),(e.onPointerOut||e.onPointerLeave)&&($.onPointerleave=X=>{let R=X;D(e.onPointerOut,R,R.clientX,R.clientY),D(e.onPointerLeave,R,R.clientX,R.clientY)}),e.onPointerCancel&&($.onPointercancel=X=>{let R=X;D(e.onPointerCancel,R,R.clientX,R.clientY),z=null});let W=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&a.loading.value&&a.polygons.value.length===0)return qe("div",{ref:g,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:j,...W,...$,...Y},t.fallback?.()??[]);if(e.src&&a.error.value&&a.polygons.value.length===0)return qe("div",{ref:g,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:j,...W,...$,...Y},t.error?.({error:a.error.value})??[]);let Z=f.value,re=t.polygon?Z.map((X,R)=>qe("template",{key:R},t.polygon?.({polygon:X,index:R}))):L.value?[]:O.entries.value.map((X,R)=>{if(X)return Be({entry:X,page:O.pages.value[X.pageIndex],textureLighting:p.value,solidPaintDefaults:F.value});let J=V.value[R];return!J||J.texture?null:je(J)?_e({entry:J,textureLighting:p.value,solidPaintDefaults:F.value}):Xe(J)?Fe({entry:J,textureLighting:p.value,solidPaintDefaults:F.value}):Ve({entry:J,solidPaintDefaults:F.value})}),de=t.default?.()??[],U=b.value,K=U?[U]:[];return qe("div",{ref:g,class:G,style:j,...W,...$,...Y},[...K,...re,...de])}}});import{defineComponent as ul,h as cl,computed as dl}from"vue";var Fo=ul({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=dl(()=>{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()=>cl(Q,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as Vo}from"vue";function ml(e){return typeof e=="function"?Vo(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):Vo(()=>({texture:e.texture,key:e.key}))}import{computed as Ge,defineComponent as fl,h as _o}from"vue";var pl=4;function Et(e,t=pl){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function yl(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,i)=>r-i),n=[...new Set(e.map(r=>r[1]))].sort((r,i)=>r-i);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 gl({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:i,pointerEvents:a="auto"}){let{u0:u,u1:l,v0:c,v1:m}=n,f=l-u,d=m-c,h=1/f,p=1/d,P=Math.max(c,m),x=u/f,T=(1-P)/d,A={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Et(h)} ${Et(p)}`,backgroundPosition:`${Et(-x)} ${Et(-T)}`,pointerEvents:a==="none"?"none":void 0,...r},L=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([w,k])=>[`data-${w}`,String(k)])):{},y=o?.trim()||void 0;return _o("i",{class:y,style:A,...L,...i})}var Bo=fl({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=Ge(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=Ge(()=>e.textureQuality??e.context?.textureQuality),r=Ge(()=>e.material?.texture??e.texture),i=Ge(()=>e.material&&e.uvs?yl(e.uvs):null),a=Ge(()=>{let c=e.context?.tileSize??50;return ke({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=Ge(()=>i.value?[]:[a.value]),l=Ie(u,n,o);return()=>{let c=a.value,m=l.entries.value[0],f=[];e.position&&f.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&&f.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):f.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&f.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&f.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&f.push(`rotateZ(${e.rotation[2]}deg)`));let d=f.length>0?f.join(" "):void 0,h={};if(e.data)for(let[T,A]of Object.entries(e.data))h[`data-${T}`]=String(A);let p={...t,...h},P=Object.fromEntries(Object.entries(p).filter(([T])=>T!=="class"&&T!=="style")),x;return i.value&&e.material&&c?x=gl({plan:c,material:e.material,uvRect:i.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):m?x=Be({entry:m,page:l.pages.value[m.pageIndex],textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):c&&!c.texture&&(x=Xe(c)?Fe({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):je(c)?_e({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):Ve({entry:c,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"})),x?d?_o("div",{class:"polycss-poly-wrapper",style:{transform:d,position:"absolute",transformStyle:"preserve-3d"}},[x]):x:null}}});import{computed as fe,defineComponent as pe,h as ye}from"vue";import{boxPolygons as hl,planePolygons as Pl,ringPolygons as xl,octahedronPolygons as bl,spherePolygons as vl,tetrahedronPolygons as Sl,icosahedronPolygons as Cl,dodecahedronPolygons as El,cylinderPolygons as Ml,conePolygons as Tl,torusPolygons as Al}from"@layoutit/polycss-core";var zo=pe({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},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=fe(()=>hl({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Ho=pe({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,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=fe(()=>Pl({axis:e.axis,size:e.size,along:e.along,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),No=pe({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=fe(()=>xl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Yo=pe({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=fe(()=>bl({center:e.center,size:e.size,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Xo=pe({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=fe(()=>Sl({size:e.size,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),jo=pe({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=fe(()=>Cl({size:e.size,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),$o=pe({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=fe(()=>El({size:e.size,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Uo=pe({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=fe(()=>vl({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Wo=pe({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=fe(()=>Ml({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),qo=pe({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=fe(()=>Tl({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Go=pe({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=fe(()=>Al({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>ye(Q,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as Ll,inject as wl,onMounted as Rl,onBeforeUnmount as Dl,watch as mn,ref as Ol}from"vue";import{BASE_TILE as Zo}from"@layoutit/polycss-core";var kl=150,Ko=4,Il=513e-6,Fl=10,Vl=3,Qo=16.67,_l=50,Jo=.1,er=10,tr=0,nr=5e3,Bl=.3,zl=.05;function Hl(e){return e===!0?-1:e===void 0||e===!1?1:e}function Nl(e,t,n,o,r){let i=Hl(r),a=e/Ko*i,u=t/Ko*i;return{rotX:Math.max(0,Math.min(100,n-u)),rotY:((o-a)%360+360)%360}}function or(e,t,n,o,r){let i=Math.max(.01,n),a=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(i*Zo),l=-t/(i*Zo*a),c=-r*Math.PI/180,m=Math.cos(c),f=Math.sin(c);return{dWorldX:l*m-u*f,dWorldY:l*f+u*m}}var rr=Ll({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:Jo},maxZoom:{type:Number,default:er},minDistance:{type:Number,default:tr},maxDistance:{type:Number,default:nr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=wl(ee,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:a}=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}),l=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},f=null,d={x:0,y:0},h=Ol(!1),p=null,P=null,x=null;function T(){let y=i.value;if(!y)return;let w=!1,k={x:0,y:0},B=s=>{if(e.drag&&f===null&&s.isPrimary!==!1){s.preventDefault(),f=s.pointerId,d={x:s.clientX,y:s.clientY},y.style.cursor="grabbing";try{s.target.setPointerCapture(s.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},V=s=>{if(f===null||s.pointerId!==f||!e.drag)return;s.preventDefault();let g=s.clientX-d.x,v=s.clientY-d.y;d={x:s.clientX,y:s.clientY};let M=r.value,C=M.state;if(s.shiftKey){let{dWorldX:z,dWorldY:N}=or(g,v,C.zoom,C.rotX,C.rotY);M.update({target:[C.target[0]+z,C.target[1]+N,C.target[2]]})}else{let{rotX:z,rotY:N}=Nl(g,v,C.rotX,C.rotY,e.invert);M.update({rotX:z,rotY:N})}a(),o.updateCameraFromRef(M),l()},S=s=>{if(f===s.pointerId){f=null,y.style.cursor=e.drag?"grab":"";try{s.target.releasePointerCapture(s.pointerId)}catch{}h.value=!1,m()}},O=s=>{s.preventDefault()},F=s=>{s.button===2&&(w=!0,k={x:s.clientX,y:s.clientY})},H=s=>{if(!w||!e.drag)return;let g=s.clientX-k.x,v=s.clientY-k.y;k={x:s.clientX,y:s.clientY};let M=r.value,C=M.state,{dWorldX:z,dWorldY:N}=or(g,v,C.zoom,C.rotX,C.rotY);M.update({target:[C.target[0]+z,C.target[1]+N,C.target[2]]}),a(),o.updateCameraFromRef(M),l()},b=s=>{s.button===2&&w&&(w=!1,m())};y.style.cursor="grab",y.style.touchAction="none",y.style.userSelect="none",y.addEventListener("pointerdown",B),y.addEventListener("pointermove",V),y.addEventListener("pointerup",S),y.addEventListener("pointercancel",S),y.addEventListener("contextmenu",O),y.addEventListener("mousedown",F),y.addEventListener("mousemove",H),y.addEventListener("mouseup",b),p=()=>{y.removeEventListener("pointerdown",B),y.removeEventListener("pointermove",V),y.removeEventListener("pointerup",S),y.removeEventListener("pointercancel",S),y.removeEventListener("contextmenu",O),y.removeEventListener("mousedown",F),y.removeEventListener("mousemove",H),y.removeEventListener("mouseup",b),y.style.cursor="",y.style.touchAction="",y.style.userSelect=""}}function A(){let y=i.value;if(!y)return;let w=!1,k=null,B=V=>{if(!e.wheel)return;V.preventDefault();let S=V.deltaMode===1?16:V.deltaMode===2?100:1,O=V.deltaY*S;V.ctrlKey?O*=Fl:O*=Vl;let F=r.value;if(e.dolly){let H=e.minDistance??tr,b=e.maxDistance??nr,s=Math.max(H,Math.min(b,F.state.distance+O*zl));F.update({distance:s})}else{let H=Math.exp(-O*Il),b=e.minZoom??Jo,s=e.maxZoom??er,g=Math.max(b,Math.min(s,F.state.zoom*H));F.update({zoom:g})}a(),o.updateCameraFromRef(F),w||(w=!0,c()),l(),k!==null&&clearTimeout(k),k=setTimeout(()=>{k=null,w=!1,m()},kl)};y.addEventListener("wheel",B,{passive:!1}),P=()=>{y.removeEventListener("wheel",B),k!==null&&clearTimeout(k)}}function L(){let y=null,w=!1,k=0,B=V=>{if(w)return;let S=e.animate;if(!S){y=requestAnimationFrame(B);return}if(h.value)k=V;else{let O=Math.min(_l,k?V-k:Qo);k=V;let H=(S.speed??Bl)*(O/Qo),b=r.value,s=b.state;if(S.axis==="x"){let g=((s.rotX+H)%360+360)%360;b.update({rotX:g})}else{let g=((s.rotY+H)%360+360)%360;b.update({rotY:g})}a(),o.updateCameraFromRef(b),l()}y=requestAnimationFrame(B)};y=requestAnimationFrame(B),x=()=>{w=!0,y!==null&&cancelAnimationFrame(y),x=null}}return Rl(()=>{e.drag&&T(),e.wheel&&A(),e.animate&&L()}),Dl(()=>{p?.(),P?.(),x?.(),p=null,P=null}),mn(()=>e.drag,y=>{y&&!p&&T(),!y&&p&&(p(),p=null)}),mn(()=>e.wheel,y=>{y&&!P&&A(),!y&&P&&(P(),P=null)}),mn(()=>!!e.animate,y=>{y&&!x&&L(),!y&&x&&x()}),()=>null}});import{defineComponent as Yl,inject as Xl,onMounted as jl,onBeforeUnmount as $l,watch as fn,ref as Ul}from"vue";import{BASE_TILE as ar}from"@layoutit/polycss-core";var Wl=150,ir=4,ql=513e-6,Gl=10,Zl=3,lr=16.67,Kl=50,sr=.1,ur=10,cr=0,dr=5e3,Ql=.3,Jl=.05;function es(e){return e===!0?-1:e===void 0||e===!1?1:e}function mr(e,t,n,o,r){let i=es(r),a=e/ir*i,u=t/ir*i;return{rotX:Math.max(0,Math.min(100,n-u)),rotY:((o-a)%360+360)%360}}function ts(e,t,n,o,r){let i=Math.max(.01,n),a=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(i*ar),l=-t/(i*ar*a),c=-r*Math.PI/180,m=Math.cos(c),f=Math.sin(c);return{dWorldX:l*m-u*f,dWorldY:l*f+u*m}}var fr=Yl({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:sr},maxZoom:{type:Number,default:ur},minDistance:{type:Number,default:cr},maxDistance:{type:Number,default:dr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Xl(ee,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:a}=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}),l=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},f=null,d={x:0,y:0},h=Ul(!1),p=null,P=null,x=null;function T(){let y=i.value;if(!y)return;let w=!1,k={x:0,y:0},B=s=>{if(e.drag&&f===null&&s.isPrimary!==!1){s.preventDefault(),f=s.pointerId,d={x:s.clientX,y:s.clientY},y.style.cursor="grabbing";try{s.target.setPointerCapture(s.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},V=s=>{if(f===null||s.pointerId!==f||!e.drag)return;s.preventDefault();let g=s.clientX-d.x,v=s.clientY-d.y;d={x:s.clientX,y:s.clientY};let M=r.value,C=M.state;if(s.shiftKey){let{rotX:z,rotY:N}=mr(g,v,C.rotX,C.rotY,e.invert);M.update({rotX:z,rotY:N})}else{let{dWorldX:z,dWorldY:N}=ts(g,v,C.zoom,C.rotX,C.rotY);M.update({target:[C.target[0]+z,C.target[1]+N,C.target[2]]})}a(),o.updateCameraFromRef(M),l()},S=s=>{if(f===s.pointerId){f=null,y.style.cursor=e.drag?"grab":"";try{s.target.releasePointerCapture(s.pointerId)}catch{}h.value=!1,m()}},O=s=>{s.preventDefault()},F=s=>{s.button===2&&(w=!0,k={x:s.clientX,y:s.clientY})},H=s=>{if(!w||!e.drag)return;let g=s.clientX-k.x,v=s.clientY-k.y;k={x:s.clientX,y:s.clientY};let M=r.value,C=M.state,{rotX:z,rotY:N}=mr(g,v,C.rotX,C.rotY,e.invert);M.update({rotX:z,rotY:N}),a(),o.updateCameraFromRef(M),l()},b=s=>{s.button===2&&w&&(w=!1,m())};y.style.cursor="grab",y.style.touchAction="none",y.style.userSelect="none",y.addEventListener("pointerdown",B),y.addEventListener("pointermove",V),y.addEventListener("pointerup",S),y.addEventListener("pointercancel",S),y.addEventListener("contextmenu",O),y.addEventListener("mousedown",F),y.addEventListener("mousemove",H),y.addEventListener("mouseup",b),p=()=>{y.removeEventListener("pointerdown",B),y.removeEventListener("pointermove",V),y.removeEventListener("pointerup",S),y.removeEventListener("pointercancel",S),y.removeEventListener("contextmenu",O),y.removeEventListener("mousedown",F),y.removeEventListener("mousemove",H),y.removeEventListener("mouseup",b),y.style.cursor="",y.style.touchAction="",y.style.userSelect=""}}function A(){let y=i.value;if(!y)return;let w=!1,k=null,B=V=>{if(!e.wheel)return;V.preventDefault();let S=V.deltaMode===1?16:V.deltaMode===2?100:1,O=V.deltaY*S;V.ctrlKey?O*=Gl:O*=Zl;let F=r.value;if(e.dolly){let H=e.minDistance??cr,b=e.maxDistance??dr,s=Math.max(H,Math.min(b,F.state.distance+O*Jl));F.update({distance:s})}else{let H=Math.exp(-O*ql),b=e.minZoom??sr,s=e.maxZoom??ur,g=Math.max(b,Math.min(s,F.state.zoom*H));F.update({zoom:g})}a(),o.updateCameraFromRef(F),w||(w=!0,c()),l(),k!==null&&clearTimeout(k),k=setTimeout(()=>{k=null,w=!1,m()},Wl)};y.addEventListener("wheel",B,{passive:!1}),P=()=>{y.removeEventListener("wheel",B),k!==null&&clearTimeout(k)}}function L(){let y=null,w=!1,k=0,B=V=>{if(w)return;let S=e.animate;if(!S){y=requestAnimationFrame(B);return}if(h.value)k=V;else{let O=Math.min(Kl,k?V-k:lr);k=V;let H=(S.speed??Ql)*(O/lr),b=r.value,s=b.state;if(S.axis==="x"){let g=((s.rotX+H)%360+360)%360;b.update({rotX:g})}else{let g=((s.rotY+H)%360+360)%360;b.update({rotY:g})}a(),o.updateCameraFromRef(b),l()}y=requestAnimationFrame(B)};y=requestAnimationFrame(B),x=()=>{w=!0,y!==null&&cancelAnimationFrame(y),x=null}}return jl(()=>{e.drag&&T(),e.wheel&&A(),e.animate&&L()}),$l(()=>{p?.(),P?.(),x?.(),p=null,P=null}),fn(()=>e.drag,y=>{y&&!p&&T(),!y&&p&&(p(),p=null)}),fn(()=>e.wheel,y=>{y&&!P&&A(),!y&&P&&(P(),P=null)}),fn(()=>!!e.animate,y=>{y&&!x&&L(),!y&&x&&x()}),()=>null}});import{defineComponent as ns,h as Mt,inject as pr,onBeforeUnmount as yr,onMounted as pn,ref as it,computed as Ze}from"vue";import{arrowPolygons as os,eulerXYZFromQuat as rs,planePolygons as as,quatFromAxisAngle as is,quatFromEulerXYZ as ls,quatMultiply as ss,ringQuadPolygons as us}from"@layoutit/polycss-core";var Tt="#ff3653",At="#8adb00",Lt="#2c8fff",cs=.6,ds=.8,ms=1,ze=50,gr=60,fs=.6,ps=.0125,ys=.15,gs=.04,hs=1,hr=.02,yn=1.04,Ps=.1,xs=.25,Er=1e-4,lt={0:1,1:0,2:2},Pr=[{cssAxis:0,sign:1,key:"x",color:Tt},{cssAxis:0,sign:-1,key:"-x",color:Tt},{cssAxis:1,sign:1,key:"y",color:At},{cssAxis:1,sign:-1,key:"-y",color:At},{cssAxis:2,sign:1,key:"z",color:Lt},{cssAxis:2,sign:-1,key:"-z",color:Lt}],xr=[{cssAxis:0,key:"x",color:Tt},{cssAxis:1,key:"y",color:At},{cssAxis:2,key:"z",color:Lt}],br=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Lt},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:At},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Tt}];function gn(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),i=parseInt(n[3],16);return`rgba(${o}, ${r}, ${i}, ${t})`}function wt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function bs(e){return e.replace("-","")[0]}function hn(e,t,n,o){let r=n*Math.PI/180,i=o*Math.PI/180,a=[0,0,0];a[e]=t;let u=a[0]*Math.sin(i)+a[1]*Math.cos(i),l=a[2];return u*Math.sin(r)+l*Math.cos(r)<0}function vs(e){if(e.length===0)return gr;let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,a=-1/0;for(let u of e)for(let l of u.vertices)l[0]<t&&(t=l[0]),l[0]>r&&(r=l[0]),l[1]<n&&(n=l[1]),l[1]>i&&(i=l[1]),l[2]<o&&(o=l[2]),l[2]>a&&(a=l[2]);return Number.isFinite(t)?Math.max(r-t,i-n,a-o)*ze*fs:gr}function Ss(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,a=-1/0;for(let u of e)for(let l of u.vertices)l[0]<t&&(t=l[0]),l[0]>r&&(r=l[0]),l[1]<n&&(n=l[1]),l[1]>i&&(i=l[1]),l[2]<o&&(o=l[2]),l[2]>a&&(a=l[2]);return Number.isFinite(t)?[(n+i)/2*ze,(t+r)/2*ze,(o+a)/2*ze]:[0,0,0]}function vr(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(),i=o.getBoundingClientRect();e.wrapper.removeChild(o);let a=(i.left-r.left)/t,u=(i.top-r.top)/t,l=a*a+u*u;if(l<Er)return;let c=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=d=>{let h=d.clientX-e.startClientX,p=d.clientY-e.startClientY,P=(h*a+p*u)/l;P=wt(P,e.translationSnap);let x=[c[0]+P*n[0],c[1]+P*n[1],c[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:x}),e.onChange?.()},f=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",f),window.removeEventListener("pointercancel",f);let d=h=>{h.stopPropagation(),h.stopImmediatePropagation()};window.addEventListener("click",d,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",d,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",f),window.addEventListener("pointercancel",f)}function Sr(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(f){let d=e.wrapper.ownerDocument.createElement("div");d.style.position="absolute",d.style.left="0",d.style.top="0",d.style.width="0",d.style.height="0",d.style.transform=`translate3d(${f[0]*o}px, ${f[1]*o}px, ${f[2]*o}px)`,e.wrapper.appendChild(d);let h=e.wrapper.getBoundingClientRect(),p=d.getBoundingClientRect();return e.wrapper.removeChild(d),{x:(p.left-h.left)/o,y:(p.top-h.top)/o}}let i=r(t),a=r(n),u=i.x*a.y-a.x*i.y;if(Math.abs(u)<Er)return;let l=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let c=f=>{let d=f.clientX-e.startClientX,h=f.clientY-e.startClientY,p=(a.y*d-a.x*h)/u,P=(-i.y*d+i.x*h)/u;p=wt(p,e.translationSnap),P=wt(P,e.translationSnap);let x=[l[0]+p*t[0]+P*n[0],l[1]+p*t[1]+P*n[1],l[2]+p*t[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:x}),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 Cr(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),i=0,a=e.target.getRotation()??[0,0,0],u=ls(a);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let l=m=>{let f=Math.atan2(m.clientY-o,m.clientX-n),d=f-r;d>Math.PI?d-=2*Math.PI:d<-Math.PI&&(d+=2*Math.PI),i+=d,r=f;let h=i*180/Math.PI;h=wt(h,e.rotationSnap);let p=[0,0,0];p[e.cssAxis]=1;let P=is(p,h*Math.PI/180),x=rs(ss(P,u));e.onObjectChange?.({object:e.target,rotation:x}),e.onChange?.()},c=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",c),window.removeEventListener("pointercancel",c);let m=f=>{f.stopPropagation(),f.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",l),window.addEventListener("pointerup",c),window.addEventListener("pointercancel",c)}function Cs(e){return!!e&&typeof e=="object"&&"value"in e}function Es(e){return e?Cs(e)?e.value??null:e:null}var Mr=ns({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=it(null),o=it(null),r=it(new Map),i=Ze(()=>Es(e.object)),a=it(0);pn(()=>{a.value++});let u=it(0),l=pr(ee,void 0),c=null;pn(()=>{let s=l?.store;s&&(c=s.subscribe(()=>{u.value++}))}),yr(()=>{c?.()});function m(){u.value;let s=l?.store.getState().cameraState;return{rotX:s?.rotX??65,rotY:s?.rotY??45}}let f=Ze(()=>(a.value,vs(i.value?.getPolygons()??[]))),d=Ze(()=>f.value*e.size);function h(s){return o.value===s?ms:n.value===s?ds:cs}function p(){t("change")}function P(s){t("objectChange",s)}function x(s){t("draggingChanged",s)}function T(){t("mouseDown")}function A(){t("mouseUp")}let L=pr(ee,void 0),y=null;pn(()=>{let s=L?.cameraElRef.value;if(!s)return;let g=v=>{let M=i.value;if(!M||!e.enabled||v.target?.closest(".polycss-transform-gizmo"))return;let z={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let D of br){let E=["x","y","z"][D.axisA],_=["x","y","z"][D.axisB];if(!z[E]||!z[_])continue;let I=document.querySelector(`.polycss-transform-plane--${D.key}`);if(!I||!We(I,v.clientX,v.clientY))continue;v.preventDefault(),v.stopPropagation();let j=I.closest("[data-poly-transform-controls]");if(!j)return;o.value=D.key,Sr({axisA:D.axisA,axisB:D.axisB,probeDistanceCss:d.value,wrapper:j,target:M,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:T,onMouseUp:A,onDraggingChanged:Y=>{Y||(o.value=null),x(Y)}});return}let N=e.mode==="translate"?Pr:xr;for(let D of N){let E=D.key.replace("-","")[0];if(!z[E])continue;let _=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${D.key}`);if(!_||!(e.mode==="rotate"?We(_,v.clientX,v.clientY):We(_,v.clientX,v.clientY)))continue;v.preventDefault(),v.stopPropagation();let j=_.closest("[data-poly-transform-controls]");if(!j)return;if(o.value=D.key,e.mode==="translate"){let Y=D;vr({cssAxis:Y.cssAxis,sign:Y.sign,shaftLengthCss:d.value,wrapper:j,target:M,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:T,onMouseUp:A,onDraggingChanged:G=>{G||(o.value=null),x(G)}})}else Cr({cssAxis:D.cssAxis,wrapper:j,target:M,startClientX:v.clientX,startClientY:v.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:P,onMouseDown:T,onMouseUp:A,onDraggingChanged:Y=>{Y||(o.value=null),x(Y)}});return}};s.addEventListener("pointerdown",g),y=()=>s.removeEventListener("pointerdown",g)}),yr(()=>{y?.()});let w=Ze(()=>{if(e.mode!=="translate")return[];a.value;let g=d.value/ze,{rotX:v,rotY:M}=m();return Pr.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[bs(C.key)]).map(C=>{let z=h(C.key),N=hn(C.cssAxis,C.sign,v,M);return{spec:C,polygons:os({axis:lt[C.cssAxis],sign:C.sign,shaftLength:g,shaftHalfThickness:g*ps,headLength:g*ys,headHalfThickness:g*gs,color:gn(C.color,z),shaft:!N})}})}),k=Ze(()=>{if(e.mode!=="translate")return[];a.value;let g=d.value/ze,v={x:e.showX,y:e.showY,z:e.showZ},M=["x","y","z"],{rotX:C,rotY:z}=m(),N=g*xs;return br.filter(D=>v[M[D.axisA]]&&v[M[D.axisB]]).map(D=>{let E=h(D.key),_=lt[D.perpAxis],I=(_+1)%3,j=(_+2)%3,Y=lt[I],G=lt[j],$=hn(Y,1,C,z)?-1:1,W=hn(G,1,C,z)?-1:1;return{spec:D,polygons:as({axis:_,size:g*Ps,offset:[$*N,W*N],color:gn(D.color,E)})}})}),B=Ze(()=>{if(e.mode!=="rotate")return[];a.value;let v=d.value*hs/ze*yn;return xr.filter(M=>({x:e.showX,y:e.showY,z:e.showZ})[M.key]).map(M=>{let C=h(M.key);return{spec:M,polygons:us({axis:lt[M.cssAxis],outerRadius:v,color:gn(M.color,C)})}})}),V=(1-hr)/yn,S=(1+hr)/yn;function O(s){return g=>{if(!e.enabled)return;let v=i.value;if(!v)return;g.stopPropagation();let C=g.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=s.key,vr({cssAxis:s.cssAxis,sign:s.sign,shaftLengthCss:d.value,wrapper:C,target:v,startClientX:g.nativeEvent.clientX,startClientY:g.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:T,onMouseUp:A,onDraggingChanged:z=>{z||(o.value=null),x(z)}}))}}function F(s){return g=>{if(!e.enabled)return;let v=i.value;if(!v)return;g.stopPropagation();let C=g.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=s.key,Sr({axisA:s.axisA,axisB:s.axisB,probeDistanceCss:d.value,wrapper:C,target:v,startClientX:g.nativeEvent.clientX,startClientY:g.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:T,onMouseUp:A,onDraggingChanged:z=>{z||(o.value=null),x(z)}}))}}function H(s){return g=>{if(!e.enabled)return;let v=i.value;if(!v)return;let M=g.eventObject.element;g.stopPropagation();let C=M?.closest("[data-poly-transform-controls]");C&&(o.value=s.key,Cr({cssAxis:s.cssAxis,wrapper:C,target:v,startClientX:g.nativeEvent.clientX,startClientY:g.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:P,onMouseDown:T,onMouseUp:A,onDraggingChanged:z=>{z||(o.value=null),x(z)}}))}}function b(s){return{onPointerOver:()=>{n.value=s},onPointerOut:()=>{n.value===s&&(n.value=null)}}}return()=>{let s=i.value;if(!s)return null;let g=s.getPosition()??[0,0,0],v=Ss(s.getPolygons()),M=g[0]+v[0],C=g[1]+v[1],z=g[2]+v[2],N={transform:`translate3d(${M}px, ${C}px, ${z}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},D=e.mode==="translate"?[...w.value.map(({spec:E,polygons:_})=>Mt(Q,{key:`arrow-${E.key}`,polygons:_,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${E.key}`,textureLighting:"baked",onPointerDown:O(E),...b(E.key)})),...k.value.map(({spec:E,polygons:_})=>Mt(Q,{key:`plane-${E.key}`,polygons:_,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${E.key}`,textureLighting:"baked",onPointerDown:F(E),...b(E.key)}))]:B.value.map(({spec:E,polygons:_})=>Mt(Q,{key:E.key,polygons:_,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${E.key}`,style:{"--ring-inner-ratio":V,"--ring-outer-ratio":S},textureLighting:"baked",onPointerDown:H(E),...b(E.key)}));return Mt("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:N},D)}}});import{defineComponent as Ms,inject as Ts,onMounted as As,onBeforeUnmount as Ls,watch as ws}from"vue";import{BASE_TILE as Rs}from"@layoutit/polycss-core";var Ds={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 Pn(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 Ar=new Set(["KeyW","ArrowUp"]),Lr=new Set(["KeyS","ArrowDown"]),wr=new Set(["KeyA","ArrowLeft"]),Rr=new Set(["KeyD","ArrowRight"]),Dr=new Set(["Space"]),xn=new Set(["ControlLeft","ControlRight"]);function Tr(e){return Ar.has(e)||Lr.has(e)||wr.has(e)||Rr.has(e)||Dr.has(e)||xn.has(e)}function Os(){return{change:[],start:[],end:[]}}function Ke(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Or=Ms({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=Ts(ee,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:i,cameraElRef:a,applyTransformDirect:u}=o,l=Pn(Ds,e),c=[0,0,0],m=null,f=0,d=!1,h=!1,p=!1,P=new Set,x=0,T=0,A=Os();function L(s,g){let v=s*Math.PI/180,M=g*Math.PI/180;return[-Math.sin(v)*Math.cos(M),-Math.sin(v)*Math.sin(M),-Math.cos(v)]}function y(){let s=a.value,g=s?getComputedStyle(s).perspective:"",v=parseFloat(g);return(Number.isFinite(v)&&v>0?v:8e3)/Rs}function w(){let s=i.value.state,g=L(s.rotX??90,s.rotY??0),v=y();return[c[0]+g[0]*v,c[1]+g[1]*v,c[2]+g[2]*v]}function k(){let s=w(),g=i.value;g.update({target:s}),u(),r.updateCameraFromRef(g)}let B=.05;function V(s){if(m===null||d)return;let g=Math.min(B,f?(s-f)/1e3:.0167);if(f=s,l.enabled){let v=!1,M=i.value.state;if(l.moveEnabled){let D=0,E=0;for(let _ of P)Ar.has(_)?D+=1:Lr.has(_)?D-=1:Rr.has(_)?E+=1:wr.has(_)&&(E-=1);if(D!==0||E!==0){let I=(M.rotY??0)*Math.PI/180,j=-Math.cos(I),Y=-Math.sin(I),G=-Math.sin(I),$=Math.cos(I),W=Math.hypot(D,E)||1,Z=l.moveSpeed*g;c[0]+=(j*D+G*E)/W*Z,c[1]+=(Y*D+$*E)/W*Z,v=!0}}let z=l.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?l.crouchHeight:l.eyeHeight;l.jumpEnabled&&(x!==0||T>0)?(x-=l.gravity*g,T+=x*g,T<=0&&(T=0,x=0)):l.jumpEnabled||(T=0,x=0);let N=l.groundZ+z+T;if(Math.abs(c[2]-N)>1e-4&&(c[2]=N,v=!0),v){let D=w(),E=i.value;E.update({target:D}),u(),r.updateCameraFromRef(E),Ke(A,"change");try{t("change",[c[0],c[1],c[2]])}catch{}}}m=requestAnimationFrame(V)}function S(){m!==null||d||(f=0,m=requestAnimationFrame(V))}function O(){m!==null&&(cancelAnimationFrame(m),m=null)}let F=null;function H(){let s=a.value;if(!s)return;let g=s.ownerDocument??document,v=g.defaultView??globalThis,M=()=>{if(!(!l.enabled||!l.lookEnabled||d||h))try{s.requestPointerLock()}catch{}},C=()=>{let Y=g.pointerLockElement===s;if(Y!==h){if(h=Y,Y){p=!0,Ke(A,"start");try{t("interaction-start",[c[0],c[1],c[2]])}catch{}}else if(p){p=!1,Ke(A,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}}},z=Y=>{if(!h||d||!l.enabled||!l.lookEnabled)return;let G=Y.movementX??0,$=Y.movementY??0;if(G===0&&$===0)return;let W=i.value,Z=W.state,re=l.lookSensitivity,de=l.invertY?-1:1,U=(((Z.rotY??0)-G*re)%360+360)%360,K=(Z.rotX??90)-$*re*de;K<l.minPitch?K=l.minPitch:K>l.maxPitch&&(K=l.maxPitch);let X=L(K,U),R=y(),J=[c[0]+X[0]*R,c[1]+X[1]*R,c[2]+X[2]*R];W.update({rotX:K,rotY:U,target:J}),u(),r.updateCameraFromRef(W),Ke(A,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},N=Y=>{if(!(!l.enabled||d)&&Tr(Y.code)&&!(!h&&!l.moveEnabled)){if(Dr.has(Y.code)){if(!l.jumpEnabled)return;Y.preventDefault(),!P.has(Y.code)&&x===0&&T===0&&(x=l.jumpVelocity),P.add(Y.code);return}xn.has(Y.code)&&!l.crouchEnabled||!l.moveEnabled&&!xn.has(Y.code)||(Y.preventDefault(),P.add(Y.code))}},D=Y=>{Tr(Y.code)&&P.delete(Y.code)},E=()=>{P.clear()};s.addEventListener("click",M),g.addEventListener("pointerlockchange",C),g.addEventListener("mousemove",z),v.addEventListener("keydown",N),v.addEventListener("keyup",D),v.addEventListener("blur",E);let _=v.getComputedStyle(s).perspective,I=parseFloat(_),j=Number.isFinite(I)&&I>0?I:2e3;s.style.setProperty("--polycss-fpv-perspective",`${j}px`),s.classList.add("polycss-fpv-host"),F=()=>{if(s.removeEventListener("click",M),g.removeEventListener("pointerlockchange",C),g.removeEventListener("mousemove",z),v.removeEventListener("keydown",N),v.removeEventListener("keyup",D),v.removeEventListener("blur",E),s.style.cursor="",s.classList.remove("polycss-fpv-host"),s.style.removeProperty("--polycss-fpv-perspective"),P.clear(),h)try{g.exitPointerLock()}catch{}}}n({update(s){l=Pn(l,s);let g=a.value;g&&!d&&(g.style.cursor=l.lookEnabled?"crosshair":"")},resume(){if(!d)return;d=!1;let s=a.value;s&&(s.style.cursor=l.lookEnabled?"crosshair":""),S()},pause(){if(d)return;d=!0,O();let s=a.value;if(s&&(s.style.cursor=""),p){p=!1,Ke(A,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}},destroy(){d=!0,O()},lock(){if(!l.enabled||!l.lookEnabled||d)return;let s=a.value;try{s?.requestPointerLock()}catch{}},unlock(){if(h){let s=a.value;try{s?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return h},getOrigin(){return[c[0],c[1],c[2]]},setOrigin(s){c[0]=s[0],c[1]=s[1],c[2]=s[2],k(),Ke(A,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},addEventListener(s,g){let v=A[s];v.includes(g)||v.push(g)},removeEventListener(s,g){let v=A[s],M=v.indexOf(g);M>=0&&v.splice(M,1)},hasEventListener(s,g){return A[s].includes(g)}}),As(()=>{let s=a.value;if(!s)return;d=!1,h=!1,p=!1,P.clear(),x=0,T=0;let v=i.value.state.target??[0,0,0];c[0]=v[0],c[1]=v[1],c[2]=l.groundZ+l.eyeHeight,k(),s.style.cursor=l.lookEnabled?"crosshair":"",H(),S()}),Ls(()=>{d=!0,O(),F?.(),F=null});let b=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let s of b)ws(()=>e[s],()=>{l=Pn(l,e);let g=a.value;g&&!d&&(g.style.cursor=l.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as ks,h as Is,inject as bn,onBeforeUnmount as Fs,onMounted as Vs,provide as _s,reactive as Bs,ref as zs,computed as Hs}from"vue";var st=Symbol("polycss.selection"),kr=ks({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=Bs({selected:[]}),r=Hs(()=>o.selected);function i(m){let f=e.filter?e.filter(m):m;o.selected=f,t("change",f)}let a={get selected(){return o.selected},set:m=>i(m),add:m=>{e.multiple?o.selected.includes(m)||i([...o.selected,m]):i([m])},remove:m=>{o.selected.includes(m)&&i(o.selected.filter(f=>f!==m))},toggle:m=>{o.selected.includes(m)?i(o.selected.filter(f=>f!==m)):e.multiple?i([...o.selected,m]):i([m])},clear:()=>i([]),has:m=>o.selected.includes(m)};_s(st,{selected:r,api:a});let u=bn(ee,void 0),l=(m,f)=>cn(m,f,d=>!d.closest("[data-poly-transform-controls]")),c=null;return Vs(()=>{let m=u?.cameraElRef.value;if(!m)return;let f=d=>{if(d.target?.closest("[data-poly-transform-controls]"))return;let p=Ue(d.target)??l(d.clientX,d.clientY);if(!p){t("pointerMissed",d),e.clearOnMiss&&i([]);return}e.multiple&&(d.shiftKey||d.metaKey||d.ctrlKey)?a.toggle(p):o.selected.length===1&&o.selected[0]===p?i([]):i([p])};m.addEventListener("click",f),c=()=>m.removeEventListener("click",f)}),Fs(()=>{c?.()}),()=>Is("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function Ir(){let e=bn(st,void 0);return e?e.selected:zs([])}function Fr(){let e=bn(st,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Ns,h as Ys,computed as Xs}from"vue";import{axesHelperPolygons as js}from"@layoutit/polycss-core";var Vr=Ns({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=Xs(()=>js({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Ys(Q,{polygons:t.value})}});import{defineComponent as $s,h as Us,computed as vn}from"vue";import{octahedronPolygons as Ws}from"@layoutit/polycss-core";var Sn=50,_r=$s({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=vn(()=>e.color??e.light.color??"#ffd54a"),n=vn(()=>Ws({center:[0,0,0],size:e.size,color:t.value})),o=vn(()=>{let r=e.light.direction,i=r[0],a=r[1],u=r[2],l=Math.hypot(i,a,u)||1,c=e.target?.[0]??0,m=e.target?.[1]??0,f=e.target?.[2]??0,d=c+a/l*e.distance,h=m+i/l*e.distance,p=f+u/l*e.distance;return[h*Sn,d*Sn,p*Sn]});return()=>Us(Q,{polygons:n.value,position:o.value})}});var Cn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},qs={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Cn,bucketCount:0};function Gs(e){return typeof e=="number"?{polygonCount:e}:e??{}}function Qe(e,t){return e.querySelectorAll(t).length}function Zs(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function Ks(e,t){if(!t)return[e];let n=[];return Zs(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Qs(e,t){let n=Gs(t);if(!e)return{...qs,surfaceLeafCounts:{...Cn},polygonCount:n.polygonCount??0};let o=Ks(e,n.scopeSelector),r={...Cn},i=0,a=0;for(let l of o)r.quad+=Qe(l,"b"),r.clippedSolid+=Qe(l,"i"),r.atlas+=Qe(l,"s"),r.stableTriangle+=Qe(l,"u"),i+=Qe(l,"q"),a+=Qe(l,".polycss-bucket");let u=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??u,mountedPolygonLeafCount:u,shadowLeafCount:i,surfaceLeafCounts:r,bucketCount:a}}import{ref as Br,watch as Js,onUnmounted as eu,computed as Rt}from"vue";import{createPolyAnimationMixer as tu}from"@layoutit/polycss-core";function He(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function nu(e,t,n){let o=Br(null),r=null,i=null,a=null,u=Br(0);function l(){return n==null?o.value:He(n)??o.value}function c(){i!==null&&(cancelAnimationFrame(i),i=null),a=null}function m(){c(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,u.value++)}function f(){if(i!==null)return;function A(L){if(a===null){a=L,i=requestAnimationFrame(A);return}let y=(L-a)/1e3;a=L,r?.update(y),i=requestAnimationFrame(A)}i=requestAnimationFrame(A)}function d(){m();let A=He(e),L=He(t);if(!A||A.length===0||!L)return;let y=l();y&&(r=tu(y,L),u.value++,f())}let h=Js(()=>{let A=He(e),L=He(t),y=n!=null?He(n):o.value;return{c:A,ctrl:L,r:y}},()=>d(),{immediate:!0,deep:!1});eu(()=>{h(),m()});let p=Rt(()=>He(e)??[]),P=Rt(()=>p.value.map(A=>A.name)),x=Rt(()=>(u.value,r)),T=Rt(()=>{u.value;let A=p.value,L={};for(let y of A)Object.defineProperty(L,y.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(y.name)}catch{return null}}});return L});return{ref:o,mixer:x,clips:p,names:P,actions:T}}import{CAMERA_BACKFACE_CULL_EPS as $m,VOXEL_CAMERA_CULL_AXIS_EPS as Um,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Wm,normalizePolygons as qm,mergePolygons as Gm,coverPlanarPolygons as Zm,optimizeMeshPolygons as Km,repairMeshSeams as Qm,seamFacetSplitPolygons as Jm,seamFacetSplitReport as ef,seamOverlapDiagnostics as tf,seamOverlapPolygons as nf,seamOverlapReport as of,cullInteriorPolygons as rf,cameraCullNormalGroups as af,cameraCullNormalGroupsFromPolygons as lf,cameraCullNormalKey as sf,cameraCullVisibleSignature as uf,cameraFacingDepth as cf,isAxisAlignedSurfaceNormal as df,isVoxelCameraCullableNormalGroups as mf,normalFacesCamera as ff,polygonCssSurfaceNormal as pf,polygonFacesCamera as yf,parseObj as gf,parseMtl as hf,parseGltf as Pf,bakeSolidTextureSamples as xf,bakeSolidTextureSampledPolygons as bf,loadMesh as vf,createIsometricCamera as Sf,parseVox as Cf,polygonFaces as Ef,computeTexturePaintMetrics as Mf,computeShapeLighting as Tf,parseColor as Af,parsePureColor as Lf,parseHexColor as wf,parseRgbColor as Rf,formatColor as Df,clampChannel as Of,shadeColor as kf,rotateVec3 as If,inverseRotateVec3 as Ff,axesHelperPolygons as Vf,boxPolygons as _f,arrowPolygons as Bf,ringPolygons as zf,octahedronPolygons as Hf,tetrahedronPolygons as Nf,icosahedronPolygons as Yf,dodecahedronPolygons as Xf,cylinderPolygons as jf,conePolygons as $f,torusPolygons as Uf,planePolygons as Wf,buildSceneContext as qf,computeSceneBbox as Gf,BASE_TILE as Zf,DEFAULT_CAMERA_STATE as Kf,DEFAULT_PROJECTION as Qf,normalizeInvertMultiplier as Jf,createPolyAnimationMixer as ep,optimizeAnimatedMeshPolygons as tp,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as np,DEFAULT_SEAM_OVERLAP_OPTIONS as op,LoopOnce as rp,LoopRepeat as ap,LoopPingPong as ip}from"@layoutit/polycss-core";export{Zf as BASE_TILE,$m as CAMERA_BACKFACE_CULL_EPS,Kf as DEFAULT_CAMERA_STATE,Qf as DEFAULT_PROJECTION,np as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,op as DEFAULT_SEAM_OVERLAP_OPTIONS,rp as LoopOnce,ip as LoopPingPong,ap as LoopRepeat,Bo as Poly,Vr as PolyAxesHelper,zo as PolyBox,tt as PolyCamera,ee as PolyCameraContextKey,qo as PolyCone,Wo as PolyCylinder,_r as PolyDirectionalLightHelper,$o as PolyDodecahedron,Or as PolyFirstPersonControls,Fo as PolyGround,jo as PolyIcosahedron,fr as PolyMapControls,Q as PolyMesh,Yo as PolyOctahedron,rr as PolyOrbitControls,tt as PolyOrthographicCamera,Ln as PolyPerspectiveCamera,Ho as PolyPlane,No as PolyRing,go as PolyScene,kr as PolySelect,st as PolySelectionContextKey,Uo as PolySphere,Xo as PolyTetrahedron,Go as PolyTorus,Mr as PolyTransformControls,Um as VOXEL_CAMERA_CULL_AXIS_EPS,Wm as VOXEL_CAMERA_CULL_NORMAL_LIMIT,Bf as arrowPolygons,Vf as axesHelperPolygons,bf as bakeSolidTextureSampledPolygons,xf as bakeSolidTextureSamples,_f as boxPolygons,qf as buildSceneContext,af as cameraCullNormalGroups,lf as cameraCullNormalGroupsFromPolygons,sf as cameraCullNormalKey,uf as cameraCullVisibleSignature,cf as cameraFacingDepth,Of as clampChannel,Qs as collectPolyRenderStats,Gf as computeSceneBbox,Tf as computeShapeLighting,Mf as computeTexturePaintMetrics,$f as conePolygons,Zm as coverPlanarPolygons,Sf as createIsometricCamera,ep as createPolyAnimationMixer,rf as cullInteriorPolygons,jf as cylinderPolygons,Xf as dodecahedronPolygons,cn as findMeshUnderPoint,Ue as findPolyMeshHandle,Df as formatColor,Yf as icosahedronPolygons,mt as injectPolyBaseStyles,Ff as inverseRotateVec3,df as isAxisAlignedSurfaceNormal,mf as isVoxelCameraCullableNormalGroups,vf as loadMesh,Gm as mergePolygons,ff as normalFacesCamera,Jf as normalizeInvertMultiplier,qm as normalizePolygons,Hf as octahedronPolygons,tp as optimizeAnimatedMeshPolygons,Km as optimizeMeshPolygons,Af as parseColor,Pf as parseGltf,wf as parseHexColor,hf as parseMtl,gf as parseObj,Lf as parsePureColor,Rf as parseRgbColor,Cf as parseVox,Wf as planePolygons,We as pointInMeshElement,pf as polygonCssSurfaceNormal,Ef as polygonFaces,yf as polygonFacesCamera,Qm as repairMeshSeams,zf as ringPolygons,If as rotateVec3,Jm as seamFacetSplitPolygons,ef as seamFacetSplitReport,tf as seamOverlapDiagnostics,nf as seamOverlapPolygons,of as seamOverlapReport,kf as shadeColor,Nf as tetrahedronPolygons,Uf as torusPolygons,nu as usePolyAnimation,Ne as usePolyCamera,ml as usePolyMaterial,Ct as usePolyMesh,dt as usePolySceneContext,Ir as usePolySelect,Fr as usePolySelectionApi};
|